From 08266e35878f198e2fa59fcfc9f0fc3a4b1dfbf5 Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Thu, 10 Jan 2019 10:57:50 +0100 Subject: Add support for string types - strings are now generated as two fields for length and string itself - aliases are now sorted by name to prevent generating different code - dependencies are now managed by dep - binapi files are regenerated using VPP 19.01-rc0~622-g7b01e9e8 - old stats binary api has been deprecated and removed from VPP Change-Id: Ieb8515c73021339a45f407386f8e3d87dcf4469e Signed-off-by: Ondrej Fabry --- .gitignore | 3 +- Gopkg.lock | 101 + Gopkg.toml | 42 + Makefile | 12 + cmd/binapi-generator/definitions.go | 22 +- cmd/binapi-generator/generate.go | 81 +- cmd/binapi-generator/parse.go | 25 +- examples/bin_api/VPP_VERSION | 1 + examples/bin_api/interface.api.json | 139 +- examples/bin_api/interfaces/interfaces.ba.go | 199 - examples/bin_api/ip.api.json | 33 +- examples/bin_api/ip/ip.ba.go | 67 +- examples/bin_api/map.api.json | 112 +- examples/bin_api/maps/maps.ba.go | 221 +- examples/bin_api/stats.api.json | 1531 -- examples/bin_api/stats/stats.ba.go | 2538 -- examples/bin_api/vpe.api.json | 48 +- examples/bin_api/vpe/vpe.ba.go | 76 +- examples/cmd/stats-client/stats_client.go | 165 - glide.lock | 38 - glide.yaml | 15 - .../fsnotify/fsnotify/.github/ISSUE_TEMPLATE.md | 11 - .../fsnotify/.github/PULL_REQUEST_TEMPLATE.md | 8 - .../github.com/fsnotify/fsnotify/example_test.go | 42 - .../github.com/fsnotify/fsnotify/fsnotify_test.go | 40 - .../fsnotify/fsnotify/inotify_poller_test.go | 229 - .../github.com/fsnotify/fsnotify/inotify_test.go | 449 - .../fsnotify/fsnotify/integration_darwin_test.go | 147 - .../fsnotify/fsnotify/integration_test.go | 1237 - .../google/gopacket/afpacket/afpacket.go | 476 - .../google/gopacket/afpacket/afpacket_test.go | 40 - .../github.com/google/gopacket/afpacket/header.go | 158 - .../github.com/google/gopacket/afpacket/options.go | 171 - .../google/gopacket/afpacket/sockopt_linux.go | 58 - .../google/gopacket/afpacket/sockopt_linux_386.go | 57 - .../google/gopacket/afpacket/sockopt_linux_386.s | 8 - .../github.com/google/gopacket/benchmark_test.go | 194 - .../google/gopacket/bsdbpf/bsd_bpf_sniffer.go | 215 - .../google/gopacket/bytediff/bytediff.go | 217 - .../google/gopacket/bytediff/bytediff_test.go | 53 - .../google/gopacket/dumpcommand/tcpdump.go | 119 - .../google/gopacket/examples/arpscan/arpscan.go | 188 - .../google/gopacket/examples/bidirectional/main.go | 192 - .../google/gopacket/examples/bytediff/bytediff.png | Bin 47462 -> 0 bytes .../google/gopacket/examples/bytediff/main.go | 96 - .../google/gopacket/examples/httpassembly/main.go | 127 - .../google/gopacket/examples/pcapdump/main.go | 73 - .../google/gopacket/examples/pcaplay/main.go | 163 - .../google/gopacket/examples/pfdump/main.go | 52 - .../gopacket/examples/reassemblydump/compare.sh | 103 - .../gopacket/examples/reassemblydump/main.go | 650 - .../google/gopacket/examples/statsassembly/main.go | 211 - .../google/gopacket/examples/synscan/main.go | 259 - .../google/gopacket/examples/util/util.go | 40 - .../github.com/google/gopacket/ip4defrag/defrag.go | 350 - .../google/gopacket/ip4defrag/defrag_test.go | 1396 -- .../github.com/google/gopacket/layers/base_test.go | 42 - .../github.com/google/gopacket/layers/bfd_test.go | 289 - .../google/gopacket/layers/decode_test.go | 1234 - .../github.com/google/gopacket/layers/dhcp_test.go | 129 - .../github.com/google/gopacket/layers/dns_test.go | 833 - .../google/gopacket/layers/dot11_test.go | 495 - .../google/gopacket/layers/dot1q_test.go | 62 - .../google/gopacket/layers/endpoints_test.go | 37 - .../google/gopacket/layers/geneve_test.go | 108 - .../github.com/google/gopacket/layers/gre_test.go | 389 - .../google/gopacket/layers/icmp6_test.go | 84 - .../github.com/google/gopacket/layers/igmp_test.go | 171 - .../github.com/google/gopacket/layers/ip4_test.go | 131 - .../github.com/google/gopacket/layers/ip6_test.go | 430 - .../google/gopacket/layers/ipsec_test.go | 154 - .../github.com/google/gopacket/layers/mpls_test.go | 96 - .../github.com/google/gopacket/layers/ntp_test.go | 258 - .../github.com/google/gopacket/layers/ospf_test.go | 559 - .../google/gopacket/layers/prism_test.go | 120 - .../google/gopacket/layers/radiotap_test.go | 79 - .../google/gopacket/layers/sflow_test.go | 1246 - .../github.com/google/gopacket/layers/tcp_test.go | 60 - .../google/gopacket/layers/tcpip_test.go | 185 - .../github.com/google/gopacket/layers/udp_test.go | 372 - .../github.com/google/gopacket/layers/usb_test.go | 73 - .../github.com/google/gopacket/layers/vrrp_test.go | 55 - .../google/gopacket/layers/vxlan_test.go | 108 - .../google/gopacket/macs/benchmark_test.go | 18 - vendor/github.com/google/gopacket/macs/doc.go | 12 - vendor/github.com/google/gopacket/macs/gen.go | 98 - .../google/gopacket/macs/valid_mac_prefixes.go | 23946 ------------------- vendor/github.com/google/gopacket/packet_test.go | 62 - vendor/github.com/google/gopacket/pcap/doc.go | 106 - .../gopacket/pcap/gopacket_benchmark/benchmark.go | 247 - vendor/github.com/google/gopacket/pcap/pcap.go | 1005 - .../github.com/google/gopacket/pcap/pcap_test.go | 308 - .../github.com/google/gopacket/pcap/pcap_tester.go | 109 - .../github.com/google/gopacket/pcap/pcap_unix.go | 71 - .../google/gopacket/pcap/pcap_windows.go | 23 - .../github.com/google/gopacket/pcap/pcapgo_test.go | 56 - .../github.com/google/gopacket/pcap/test_dns.pcap | Bin 1001 -> 0 bytes .../google/gopacket/pcap/test_ethernet.pcap | Bin 7672 -> 0 bytes .../google/gopacket/pcap/test_loopback.pcap | Bin 58587 -> 0 bytes vendor/github.com/google/gopacket/pcapgo/read.go | 155 - .../github.com/google/gopacket/pcapgo/read_test.go | 203 - vendor/github.com/google/gopacket/pcapgo/write.go | 103 - .../google/gopacket/pcapgo/write_test.go | 71 - vendor/github.com/google/gopacket/pfring/doc.go | 58 - vendor/github.com/google/gopacket/pfring/pfring.go | 343 - .../google/gopacket/reassembly/cap2test.go | 105 - .../google/gopacket/reassembly/memory.go | 254 - .../google/gopacket/reassembly/tcpassembly.go | 1311 - .../google/gopacket/reassembly/tcpassembly_test.go | 1660 -- .../google/gopacket/reassembly/tcpcheck.go | 246 - .../google/gopacket/reassembly/tcpcheck_test.go | 249 - .../github.com/google/gopacket/routing/common.go | 36 - vendor/github.com/google/gopacket/routing/other.go | 15 - .../github.com/google/gopacket/routing/routing.go | 241 - .../google/gopacket/tcpassembly/assembly.go | 788 - .../google/gopacket/tcpassembly/assembly_test.go | 562 - .../gopacket/tcpassembly/tcpreader/reader.go | 210 - .../gopacket/tcpassembly/tcpreader/reader_test.go | 129 - vendor/github.com/google/gopacket/writer_test.go | 94 - vendor/github.com/lunixbochs/struc/bench_test.go | 165 - .../lunixbochs/struc/custom_float16_test.go | 56 - vendor/github.com/lunixbochs/struc/custom_test.go | 97 - vendor/github.com/lunixbochs/struc/field.go | 16 +- vendor/github.com/lunixbochs/struc/field_test.go | 77 - vendor/github.com/lunixbochs/struc/fields_test.go | 59 - .../github.com/lunixbochs/struc/packable_test.go | 123 - vendor/github.com/lunixbochs/struc/parse.go | 21 +- vendor/github.com/lunixbochs/struc/parse_test.go | 62 - vendor/github.com/lunixbochs/struc/struc_test.go | 200 - vendor/github.com/lunixbochs/struc/types_test.go | 53 - .../onsi/gomega/format/format_suite_test.go | 13 - .../github.com/onsi/gomega/format/format_test.go | 590 - vendor/github.com/onsi/gomega/gbytes/buffer.go | 229 - .../github.com/onsi/gomega/gbytes/buffer_test.go | 158 - .../onsi/gomega/gbytes/gbuffer_suite_test.go | 13 - .../github.com/onsi/gomega/gbytes/say_matcher.go | 105 - .../onsi/gomega/gbytes/say_matcher_test.go | 163 - .../onsi/gomega/gexec/_fixture/firefly/main.go | 36 - vendor/github.com/onsi/gomega/gexec/build.go | 99 - vendor/github.com/onsi/gomega/gexec/build_test.go | 59 - .../github.com/onsi/gomega/gexec/exit_matcher.go | 88 - .../onsi/gomega/gexec/exit_matcher_test.go | 113 - .../onsi/gomega/gexec/gexec_suite_test.go | 26 - .../onsi/gomega/gexec/prefixed_writer.go | 53 - .../onsi/gomega/gexec/prefixed_writer_test.go | 43 - vendor/github.com/onsi/gomega/gexec/session.go | 305 - .../github.com/onsi/gomega/gexec/session_test.go | 351 - vendor/github.com/onsi/gomega/ghttp/handlers.go | 313 - .../onsi/gomega/ghttp/protobuf/protobuf.go | 3 - .../gomega/ghttp/protobuf/simple_message.pb.go | 55 - .../gomega/ghttp/protobuf/simple_message.proto | 9 - vendor/github.com/onsi/gomega/ghttp/test_server.go | 381 - .../onsi/gomega/ghttp/test_server_suite_test.go | 13 - .../onsi/gomega/ghttp/test_server_test.go | 1089 - vendor/github.com/onsi/gomega/gstruct/elements.go | 145 - .../onsi/gomega/gstruct/elements_test.go | 144 - .../onsi/gomega/gstruct/errors/nested_types.go | 72 - vendor/github.com/onsi/gomega/gstruct/fields.go | 141 - .../github.com/onsi/gomega/gstruct/fields_test.go | 76 - .../gomega/gstruct/gstruct_tests_suite_test.go | 13 - vendor/github.com/onsi/gomega/gstruct/ignore.go | 37 - .../github.com/onsi/gomega/gstruct/ignore_test.go | 23 - vendor/github.com/onsi/gomega/gstruct/pointer.go | 56 - .../github.com/onsi/gomega/gstruct/pointer_test.go | 33 - vendor/github.com/onsi/gomega/gstruct/types.go | 15 - .../internal/assertion/assertion_suite_test.go | 13 - .../gomega/internal/assertion/assertion_test.go | 252 - .../asyncassertion/async_assertion_suite_test.go | 13 - .../asyncassertion/async_assertion_test.go | 345 - .../gomega/internal/fakematcher/fake_matcher.go | 23 - .../testingtsupport/testing_t_support_test.go | 12 - vendor/github.com/onsi/gomega/matchers/and_test.go | 103 - .../matchers/assignable_to_type_of_matcher_test.go | 30 - .../onsi/gomega/matchers/be_a_directory_test.go | 40 - .../onsi/gomega/matchers/be_a_regular_file_test.go | 40 - .../gomega/matchers/be_an_existing_file_test.go | 40 - .../onsi/gomega/matchers/be_closed_matcher_test.go | 70 - .../onsi/gomega/matchers/be_empty_matcher_test.go | 52 - .../matchers/be_equivalent_to_matcher_test.go | 50 - .../onsi/gomega/matchers/be_false_matcher_test.go | 20 - .../onsi/gomega/matchers/be_identical_to_test.go | 61 - .../onsi/gomega/matchers/be_nil_matcher_test.go | 28 - .../gomega/matchers/be_numerically_matcher_test.go | 148 - .../onsi/gomega/matchers/be_sent_matcher_test.go | 106 - .../gomega/matchers/be_temporally_matcher_test.go | 98 - .../onsi/gomega/matchers/be_true_matcher_test.go | 20 - .../onsi/gomega/matchers/be_zero_matcher_test.go | 30 - .../onsi/gomega/matchers/consist_of_test.go | 75 - .../matchers/contain_element_matcher_test.go | 76 - .../matchers/contain_substring_matcher_test.go | 36 - .../onsi/gomega/matchers/equal_matcher_test.go | 78 - .../onsi/gomega/matchers/have_cap_matcher_test.go | 50 - .../onsi/gomega/matchers/have_key_matcher_test.go | 73 - .../matchers/have_key_with_value_matcher_test.go | 82 - .../onsi/gomega/matchers/have_len_matcher_test.go | 53 - .../gomega/matchers/have_occurred_matcher_test.go | 58 - .../gomega/matchers/have_prefix_matcher_test.go | 36 - .../gomega/matchers/have_suffix_matcher_test.go | 36 - .../gomega/matchers/match_error_matcher_test.go | 93 - .../gomega/matchers/match_json_matcher_test.go | 73 - .../gomega/matchers/match_regexp_matcher_test.go | 44 - .../gomega/matchers/match_yaml_matcher_test.go | 94 - .../gomega/matchers/matcher_tests_suite_test.go | 30 - vendor/github.com/onsi/gomega/matchers/not_test.go | 57 - vendor/github.com/onsi/gomega/matchers/or_test.go | 85 - .../onsi/gomega/matchers/panic_matcher_test.go | 45 - .../onsi/gomega/matchers/receive_matcher_test.go | 280 - .../onsi/gomega/matchers/succeed_matcher_test.go | 62 - .../gomega/matchers/support/goraph/MIT.LICENSE | 20 - .../onsi/gomega/matchers/with_transform_test.go | 102 - vendor/github.com/pkg/profile/example_test.go | 58 - vendor/github.com/pkg/profile/profile_test.go | 330 - vendor/github.com/pkg/profile/trace_test.go | 8 - vendor/github.com/sirupsen/logrus/alt_exit_test.go | 74 - vendor/github.com/sirupsen/logrus/entry_test.go | 77 - .../sirupsen/logrus/examples/basic/basic.go | 59 - .../sirupsen/logrus/examples/hook/hook.go | 30 - .../sirupsen/logrus/formatter_bench_test.go | 101 - vendor/github.com/sirupsen/logrus/hook_test.go | 122 - .../sirupsen/logrus/hooks/syslog/README.md | 39 - .../sirupsen/logrus/hooks/syslog/syslog.go | 54 - .../sirupsen/logrus/hooks/syslog/syslog_test.go | 26 - .../github.com/sirupsen/logrus/hooks/test/test.go | 95 - .../sirupsen/logrus/hooks/test/test_test.go | 39 - .../sirupsen/logrus/json_formatter_test.go | 199 - .../sirupsen/logrus/logger_bench_test.go | 61 - vendor/github.com/sirupsen/logrus/logrus_test.go | 386 - .../sirupsen/logrus/text_formatter_test.go | 87 - vendor/golang.org/x/sys/.gitattributes | 10 - vendor/golang.org/x/sys/.gitignore | 2 - vendor/golang.org/x/sys/CONTRIBUTING.md | 31 - vendor/golang.org/x/sys/README | 3 - vendor/golang.org/x/sys/codereview.cfg | 1 - vendor/golang.org/x/sys/plan9/asm.s | 8 - vendor/golang.org/x/sys/plan9/asm_plan9_386.s | 30 - vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s | 30 - vendor/golang.org/x/sys/plan9/const_plan9.go | 70 - vendor/golang.org/x/sys/plan9/dir_plan9.go | 212 - vendor/golang.org/x/sys/plan9/env_plan9.go | 27 - vendor/golang.org/x/sys/plan9/env_unset.go | 14 - vendor/golang.org/x/sys/plan9/errors_plan9.go | 50 - vendor/golang.org/x/sys/plan9/mkall.sh | 138 - vendor/golang.org/x/sys/plan9/mkerrors.sh | 246 - vendor/golang.org/x/sys/plan9/mksyscall.pl | 319 - vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh | 23 - vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go | 21 - vendor/golang.org/x/sys/plan9/pwd_plan9.go | 23 - vendor/golang.org/x/sys/plan9/race.go | 30 - vendor/golang.org/x/sys/plan9/race0.go | 25 - vendor/golang.org/x/sys/plan9/str.go | 22 - vendor/golang.org/x/sys/plan9/syscall.go | 74 - vendor/golang.org/x/sys/plan9/syscall_plan9.go | 349 - vendor/golang.org/x/sys/plan9/syscall_test.go | 33 - .../golang.org/x/sys/plan9/zsyscall_plan9_386.go | 292 - .../golang.org/x/sys/plan9/zsyscall_plan9_amd64.go | 292 - vendor/golang.org/x/sys/plan9/zsysnum_plan9.go | 49 - vendor/golang.org/x/sys/unix/creds_test.go | 121 - vendor/golang.org/x/sys/unix/export_test.go | 9 - vendor/golang.org/x/sys/unix/linux/Dockerfile | 48 - vendor/golang.org/x/sys/unix/linux/mkall.go | 379 - vendor/golang.org/x/sys/unix/linux/mksysnum.pl | 85 - vendor/golang.org/x/sys/unix/linux/types.go | 536 - vendor/golang.org/x/sys/unix/mmap_unix_test.go | 23 - vendor/golang.org/x/sys/unix/openbsd_test.go | 113 - vendor/golang.org/x/sys/unix/syscall_bsd_test.go | 62 - .../golang.org/x/sys/unix/syscall_freebsd_test.go | 20 - vendor/golang.org/x/sys/unix/syscall_linux_test.go | 186 - vendor/golang.org/x/sys/unix/syscall_test.go | 50 - vendor/golang.org/x/sys/unix/syscall_unix_test.go | 353 - vendor/golang.org/x/sys/windows/asm_windows_386.s | 13 - .../golang.org/x/sys/windows/asm_windows_amd64.s | 13 - vendor/golang.org/x/sys/windows/dll_windows.go | 378 - vendor/golang.org/x/sys/windows/env_unset.go | 15 - vendor/golang.org/x/sys/windows/env_windows.go | 25 - vendor/golang.org/x/sys/windows/eventlog.go | 20 - vendor/golang.org/x/sys/windows/exec_windows.go | 97 - vendor/golang.org/x/sys/windows/mksyscall.go | 7 - vendor/golang.org/x/sys/windows/race.go | 30 - vendor/golang.org/x/sys/windows/race0.go | 25 - .../x/sys/windows/registry/export_test.go | 11 - vendor/golang.org/x/sys/windows/registry/key.go | 200 - .../golang.org/x/sys/windows/registry/mksyscall.go | 7 - .../x/sys/windows/registry/registry_test.go | 756 - .../golang.org/x/sys/windows/registry/syscall.go | 32 - vendor/golang.org/x/sys/windows/registry/value.go | 384 - .../x/sys/windows/registry/zsyscall_windows.go | 120 - .../golang.org/x/sys/windows/security_windows.go | 435 - vendor/golang.org/x/sys/windows/service.go | 143 - vendor/golang.org/x/sys/windows/str.go | 22 - vendor/golang.org/x/sys/windows/svc/debug/log.go | 56 - .../golang.org/x/sys/windows/svc/debug/service.go | 45 - vendor/golang.org/x/sys/windows/svc/event.go | 48 - .../x/sys/windows/svc/eventlog/install.go | 80 - .../golang.org/x/sys/windows/svc/eventlog/log.go | 70 - .../x/sys/windows/svc/eventlog/log_test.go | 51 - .../golang.org/x/sys/windows/svc/example/beep.go | 22 - .../x/sys/windows/svc/example/install.go | 92 - .../golang.org/x/sys/windows/svc/example/main.go | 76 - .../golang.org/x/sys/windows/svc/example/manage.go | 62 - .../x/sys/windows/svc/example/service.go | 82 - vendor/golang.org/x/sys/windows/svc/go12.c | 24 - vendor/golang.org/x/sys/windows/svc/go12.go | 11 - vendor/golang.org/x/sys/windows/svc/go13.go | 31 - vendor/golang.org/x/sys/windows/svc/mgr/config.go | 139 - vendor/golang.org/x/sys/windows/svc/mgr/mgr.go | 119 - .../golang.org/x/sys/windows/svc/mgr/mgr_test.go | 154 - vendor/golang.org/x/sys/windows/svc/mgr/service.go | 74 - vendor/golang.org/x/sys/windows/svc/security.go | 62 - vendor/golang.org/x/sys/windows/svc/service.go | 316 - vendor/golang.org/x/sys/windows/svc/svc_test.go | 118 - vendor/golang.org/x/sys/windows/svc/sys_386.s | 67 - vendor/golang.org/x/sys/windows/svc/sys_amd64.s | 41 - vendor/golang.org/x/sys/windows/syscall.go | 71 - vendor/golang.org/x/sys/windows/syscall_test.go | 33 - vendor/golang.org/x/sys/windows/syscall_windows.go | 991 - .../x/sys/windows/syscall_windows_test.go | 107 - .../golang.org/x/sys/windows/zsyscall_windows.go | 2289 -- vendor/golang.org/x/sys/windows/ztypes_windows.go | 1242 - .../golang.org/x/sys/windows/ztypes_windows_386.go | 22 - .../x/sys/windows/ztypes_windows_amd64.go | 22 - vendor/gopkg.in/yaml.v2/decode_test.go | 998 - vendor/gopkg.in/yaml.v2/encode_test.go | 501 - vendor/gopkg.in/yaml.v2/suite_test.go | 12 - 323 files changed, 655 insertions(+), 79674 deletions(-) create mode 100644 Gopkg.lock create mode 100644 Gopkg.toml create mode 100644 examples/bin_api/VPP_VERSION delete mode 100644 examples/bin_api/stats.api.json delete mode 100644 examples/bin_api/stats/stats.ba.go delete mode 100644 examples/cmd/stats-client/stats_client.go delete mode 100644 glide.lock delete mode 100644 glide.yaml delete mode 100644 vendor/github.com/fsnotify/fsnotify/.github/ISSUE_TEMPLATE.md delete mode 100644 vendor/github.com/fsnotify/fsnotify/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 vendor/github.com/fsnotify/fsnotify/example_test.go delete mode 100644 vendor/github.com/fsnotify/fsnotify/fsnotify_test.go delete mode 100644 vendor/github.com/fsnotify/fsnotify/inotify_poller_test.go delete mode 100644 vendor/github.com/fsnotify/fsnotify/inotify_test.go delete mode 100644 vendor/github.com/fsnotify/fsnotify/integration_darwin_test.go delete mode 100644 vendor/github.com/fsnotify/fsnotify/integration_test.go delete mode 100644 vendor/github.com/google/gopacket/afpacket/afpacket.go delete mode 100644 vendor/github.com/google/gopacket/afpacket/afpacket_test.go delete mode 100644 vendor/github.com/google/gopacket/afpacket/header.go delete mode 100644 vendor/github.com/google/gopacket/afpacket/options.go delete mode 100644 vendor/github.com/google/gopacket/afpacket/sockopt_linux.go delete mode 100644 vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.go delete mode 100644 vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.s delete mode 100644 vendor/github.com/google/gopacket/benchmark_test.go delete mode 100644 vendor/github.com/google/gopacket/bsdbpf/bsd_bpf_sniffer.go delete mode 100644 vendor/github.com/google/gopacket/bytediff/bytediff.go delete mode 100644 vendor/github.com/google/gopacket/bytediff/bytediff_test.go delete mode 100644 vendor/github.com/google/gopacket/dumpcommand/tcpdump.go delete mode 100644 vendor/github.com/google/gopacket/examples/arpscan/arpscan.go delete mode 100644 vendor/github.com/google/gopacket/examples/bidirectional/main.go delete mode 100644 vendor/github.com/google/gopacket/examples/bytediff/bytediff.png delete mode 100644 vendor/github.com/google/gopacket/examples/bytediff/main.go delete mode 100644 vendor/github.com/google/gopacket/examples/httpassembly/main.go delete mode 100644 vendor/github.com/google/gopacket/examples/pcapdump/main.go delete mode 100644 vendor/github.com/google/gopacket/examples/pcaplay/main.go delete mode 100644 vendor/github.com/google/gopacket/examples/pfdump/main.go delete mode 100755 vendor/github.com/google/gopacket/examples/reassemblydump/compare.sh delete mode 100644 vendor/github.com/google/gopacket/examples/reassemblydump/main.go delete mode 100644 vendor/github.com/google/gopacket/examples/statsassembly/main.go delete mode 100644 vendor/github.com/google/gopacket/examples/synscan/main.go delete mode 100644 vendor/github.com/google/gopacket/examples/util/util.go delete mode 100644 vendor/github.com/google/gopacket/ip4defrag/defrag.go delete mode 100644 vendor/github.com/google/gopacket/ip4defrag/defrag_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/base_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/bfd_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/decode_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/dhcp_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/dns_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/dot11_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/dot1q_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/endpoints_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/geneve_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/gre_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/icmp6_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/igmp_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/ip4_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/ip6_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/ipsec_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/mpls_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/ntp_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/ospf_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/prism_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/radiotap_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/sflow_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/tcp_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/tcpip_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/udp_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/usb_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/vrrp_test.go delete mode 100644 vendor/github.com/google/gopacket/layers/vxlan_test.go delete mode 100644 vendor/github.com/google/gopacket/macs/benchmark_test.go delete mode 100644 vendor/github.com/google/gopacket/macs/doc.go delete mode 100644 vendor/github.com/google/gopacket/macs/gen.go delete mode 100644 vendor/github.com/google/gopacket/macs/valid_mac_prefixes.go delete mode 100644 vendor/github.com/google/gopacket/packet_test.go delete mode 100644 vendor/github.com/google/gopacket/pcap/doc.go delete mode 100644 vendor/github.com/google/gopacket/pcap/gopacket_benchmark/benchmark.go delete mode 100644 vendor/github.com/google/gopacket/pcap/pcap.go delete mode 100644 vendor/github.com/google/gopacket/pcap/pcap_test.go delete mode 100644 vendor/github.com/google/gopacket/pcap/pcap_tester.go delete mode 100644 vendor/github.com/google/gopacket/pcap/pcap_unix.go delete mode 100644 vendor/github.com/google/gopacket/pcap/pcap_windows.go delete mode 100644 vendor/github.com/google/gopacket/pcap/pcapgo_test.go delete mode 100644 vendor/github.com/google/gopacket/pcap/test_dns.pcap delete mode 100644 vendor/github.com/google/gopacket/pcap/test_ethernet.pcap delete mode 100644 vendor/github.com/google/gopacket/pcap/test_loopback.pcap delete mode 100644 vendor/github.com/google/gopacket/pcapgo/read.go delete mode 100644 vendor/github.com/google/gopacket/pcapgo/read_test.go delete mode 100644 vendor/github.com/google/gopacket/pcapgo/write.go delete mode 100644 vendor/github.com/google/gopacket/pcapgo/write_test.go delete mode 100644 vendor/github.com/google/gopacket/pfring/doc.go delete mode 100644 vendor/github.com/google/gopacket/pfring/pfring.go delete mode 100644 vendor/github.com/google/gopacket/reassembly/cap2test.go delete mode 100644 vendor/github.com/google/gopacket/reassembly/memory.go delete mode 100644 vendor/github.com/google/gopacket/reassembly/tcpassembly.go delete mode 100644 vendor/github.com/google/gopacket/reassembly/tcpassembly_test.go delete mode 100644 vendor/github.com/google/gopacket/reassembly/tcpcheck.go delete mode 100644 vendor/github.com/google/gopacket/reassembly/tcpcheck_test.go delete mode 100644 vendor/github.com/google/gopacket/routing/common.go delete mode 100644 vendor/github.com/google/gopacket/routing/other.go delete mode 100644 vendor/github.com/google/gopacket/routing/routing.go delete mode 100644 vendor/github.com/google/gopacket/tcpassembly/assembly.go delete mode 100644 vendor/github.com/google/gopacket/tcpassembly/assembly_test.go delete mode 100644 vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader.go delete mode 100644 vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader_test.go delete mode 100644 vendor/github.com/google/gopacket/writer_test.go delete mode 100644 vendor/github.com/lunixbochs/struc/bench_test.go delete mode 100644 vendor/github.com/lunixbochs/struc/custom_float16_test.go delete mode 100644 vendor/github.com/lunixbochs/struc/custom_test.go delete mode 100644 vendor/github.com/lunixbochs/struc/field_test.go delete mode 100644 vendor/github.com/lunixbochs/struc/fields_test.go delete mode 100644 vendor/github.com/lunixbochs/struc/packable_test.go delete mode 100644 vendor/github.com/lunixbochs/struc/parse_test.go delete mode 100644 vendor/github.com/lunixbochs/struc/struc_test.go delete mode 100644 vendor/github.com/lunixbochs/struc/types_test.go delete mode 100644 vendor/github.com/onsi/gomega/format/format_suite_test.go delete mode 100644 vendor/github.com/onsi/gomega/format/format_test.go delete mode 100644 vendor/github.com/onsi/gomega/gbytes/buffer.go delete mode 100644 vendor/github.com/onsi/gomega/gbytes/buffer_test.go delete mode 100644 vendor/github.com/onsi/gomega/gbytes/gbuffer_suite_test.go delete mode 100644 vendor/github.com/onsi/gomega/gbytes/say_matcher.go delete mode 100644 vendor/github.com/onsi/gomega/gbytes/say_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/gexec/_fixture/firefly/main.go delete mode 100644 vendor/github.com/onsi/gomega/gexec/build.go delete mode 100644 vendor/github.com/onsi/gomega/gexec/build_test.go delete mode 100644 vendor/github.com/onsi/gomega/gexec/exit_matcher.go delete mode 100644 vendor/github.com/onsi/gomega/gexec/exit_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/gexec/gexec_suite_test.go delete mode 100644 vendor/github.com/onsi/gomega/gexec/prefixed_writer.go delete mode 100644 vendor/github.com/onsi/gomega/gexec/prefixed_writer_test.go delete mode 100644 vendor/github.com/onsi/gomega/gexec/session.go delete mode 100644 vendor/github.com/onsi/gomega/gexec/session_test.go delete mode 100644 vendor/github.com/onsi/gomega/ghttp/handlers.go delete mode 100644 vendor/github.com/onsi/gomega/ghttp/protobuf/protobuf.go delete mode 100644 vendor/github.com/onsi/gomega/ghttp/protobuf/simple_message.pb.go delete mode 100644 vendor/github.com/onsi/gomega/ghttp/protobuf/simple_message.proto delete mode 100644 vendor/github.com/onsi/gomega/ghttp/test_server.go delete mode 100644 vendor/github.com/onsi/gomega/ghttp/test_server_suite_test.go delete mode 100644 vendor/github.com/onsi/gomega/ghttp/test_server_test.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/elements.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/elements_test.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/errors/nested_types.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/fields.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/fields_test.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/gstruct_tests_suite_test.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/ignore.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/ignore_test.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/pointer.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/pointer_test.go delete mode 100644 vendor/github.com/onsi/gomega/gstruct/types.go delete mode 100644 vendor/github.com/onsi/gomega/internal/assertion/assertion_suite_test.go delete mode 100644 vendor/github.com/onsi/gomega/internal/assertion/assertion_test.go delete mode 100644 vendor/github.com/onsi/gomega/internal/asyncassertion/async_assertion_suite_test.go delete mode 100644 vendor/github.com/onsi/gomega/internal/asyncassertion/async_assertion_test.go delete mode 100644 vendor/github.com/onsi/gomega/internal/fakematcher/fake_matcher.go delete mode 100644 vendor/github.com/onsi/gomega/internal/testingtsupport/testing_t_support_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/and_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/be_a_directory_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/be_a_regular_file_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/be_an_existing_file_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/be_closed_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/be_empty_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/be_false_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/be_identical_to_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/be_nil_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/be_numerically_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/be_sent_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/be_temporally_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/be_true_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/be_zero_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/consist_of_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/contain_element_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/contain_substring_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/equal_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/have_cap_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/have_key_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/have_len_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/have_occurred_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/have_prefix_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/have_suffix_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/match_error_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/match_json_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/match_regexp_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/match_yaml_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/matcher_tests_suite_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/not_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/or_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/panic_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/receive_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/succeed_matcher_test.go delete mode 100644 vendor/github.com/onsi/gomega/matchers/support/goraph/MIT.LICENSE delete mode 100644 vendor/github.com/onsi/gomega/matchers/with_transform_test.go delete mode 100644 vendor/github.com/pkg/profile/example_test.go delete mode 100644 vendor/github.com/pkg/profile/profile_test.go delete mode 100644 vendor/github.com/pkg/profile/trace_test.go delete mode 100644 vendor/github.com/sirupsen/logrus/alt_exit_test.go delete mode 100644 vendor/github.com/sirupsen/logrus/entry_test.go delete mode 100644 vendor/github.com/sirupsen/logrus/examples/basic/basic.go delete mode 100644 vendor/github.com/sirupsen/logrus/examples/hook/hook.go delete mode 100644 vendor/github.com/sirupsen/logrus/formatter_bench_test.go delete mode 100644 vendor/github.com/sirupsen/logrus/hook_test.go delete mode 100644 vendor/github.com/sirupsen/logrus/hooks/syslog/README.md delete mode 100644 vendor/github.com/sirupsen/logrus/hooks/syslog/syslog.go delete mode 100644 vendor/github.com/sirupsen/logrus/hooks/syslog/syslog_test.go delete mode 100644 vendor/github.com/sirupsen/logrus/hooks/test/test.go delete mode 100644 vendor/github.com/sirupsen/logrus/hooks/test/test_test.go delete mode 100644 vendor/github.com/sirupsen/logrus/json_formatter_test.go delete mode 100644 vendor/github.com/sirupsen/logrus/logger_bench_test.go delete mode 100644 vendor/github.com/sirupsen/logrus/logrus_test.go delete mode 100644 vendor/github.com/sirupsen/logrus/text_formatter_test.go delete mode 100644 vendor/golang.org/x/sys/.gitattributes delete mode 100644 vendor/golang.org/x/sys/.gitignore delete mode 100644 vendor/golang.org/x/sys/CONTRIBUTING.md delete mode 100644 vendor/golang.org/x/sys/README delete mode 100644 vendor/golang.org/x/sys/codereview.cfg delete mode 100644 vendor/golang.org/x/sys/plan9/asm.s delete mode 100644 vendor/golang.org/x/sys/plan9/asm_plan9_386.s delete mode 100644 vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s delete mode 100644 vendor/golang.org/x/sys/plan9/const_plan9.go delete mode 100644 vendor/golang.org/x/sys/plan9/dir_plan9.go delete mode 100644 vendor/golang.org/x/sys/plan9/env_plan9.go delete mode 100644 vendor/golang.org/x/sys/plan9/env_unset.go delete mode 100644 vendor/golang.org/x/sys/plan9/errors_plan9.go delete mode 100755 vendor/golang.org/x/sys/plan9/mkall.sh delete mode 100755 vendor/golang.org/x/sys/plan9/mkerrors.sh delete mode 100755 vendor/golang.org/x/sys/plan9/mksyscall.pl delete mode 100755 vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh delete mode 100644 vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go delete mode 100644 vendor/golang.org/x/sys/plan9/pwd_plan9.go delete mode 100644 vendor/golang.org/x/sys/plan9/race.go delete mode 100644 vendor/golang.org/x/sys/plan9/race0.go delete mode 100644 vendor/golang.org/x/sys/plan9/str.go delete mode 100644 vendor/golang.org/x/sys/plan9/syscall.go delete mode 100644 vendor/golang.org/x/sys/plan9/syscall_plan9.go delete mode 100644 vendor/golang.org/x/sys/plan9/syscall_test.go delete mode 100644 vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go delete mode 100644 vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go delete mode 100644 vendor/golang.org/x/sys/plan9/zsysnum_plan9.go delete mode 100644 vendor/golang.org/x/sys/unix/creds_test.go delete mode 100644 vendor/golang.org/x/sys/unix/export_test.go delete mode 100644 vendor/golang.org/x/sys/unix/linux/Dockerfile delete mode 100644 vendor/golang.org/x/sys/unix/linux/mkall.go delete mode 100755 vendor/golang.org/x/sys/unix/linux/mksysnum.pl delete mode 100644 vendor/golang.org/x/sys/unix/linux/types.go delete mode 100644 vendor/golang.org/x/sys/unix/mmap_unix_test.go delete mode 100644 vendor/golang.org/x/sys/unix/openbsd_test.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_bsd_test.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_test.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_test.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_test.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_unix_test.go delete mode 100644 vendor/golang.org/x/sys/windows/asm_windows_386.s delete mode 100644 vendor/golang.org/x/sys/windows/asm_windows_amd64.s delete mode 100644 vendor/golang.org/x/sys/windows/dll_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/env_unset.go delete mode 100644 vendor/golang.org/x/sys/windows/env_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/eventlog.go delete mode 100644 vendor/golang.org/x/sys/windows/exec_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/mksyscall.go delete mode 100644 vendor/golang.org/x/sys/windows/race.go delete mode 100644 vendor/golang.org/x/sys/windows/race0.go delete mode 100644 vendor/golang.org/x/sys/windows/registry/export_test.go delete mode 100644 vendor/golang.org/x/sys/windows/registry/key.go delete mode 100644 vendor/golang.org/x/sys/windows/registry/mksyscall.go delete mode 100644 vendor/golang.org/x/sys/windows/registry/registry_test.go delete mode 100644 vendor/golang.org/x/sys/windows/registry/syscall.go delete mode 100644 vendor/golang.org/x/sys/windows/registry/value.go delete mode 100644 vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/security_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/service.go delete mode 100644 vendor/golang.org/x/sys/windows/str.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/debug/log.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/debug/service.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/event.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/eventlog/install.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/eventlog/log.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/example/beep.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/example/install.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/example/main.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/example/manage.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/example/service.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/go12.c delete mode 100644 vendor/golang.org/x/sys/windows/svc/go12.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/go13.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/config.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/mgr.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/service.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/security.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/service.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/svc_test.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/sys_386.s delete mode 100644 vendor/golang.org/x/sys/windows/svc/sys_amd64.s delete mode 100644 vendor/golang.org/x/sys/windows/syscall.go delete mode 100644 vendor/golang.org/x/sys/windows/syscall_test.go delete mode 100644 vendor/golang.org/x/sys/windows/syscall_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/syscall_windows_test.go delete mode 100644 vendor/golang.org/x/sys/windows/zsyscall_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/ztypes_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/ztypes_windows_386.go delete mode 100644 vendor/golang.org/x/sys/windows/ztypes_windows_amd64.go delete mode 100644 vendor/gopkg.in/yaml.v2/decode_test.go delete mode 100644 vendor/gopkg.in/yaml.v2/encode_test.go delete mode 100644 vendor/gopkg.in/yaml.v2/suite_test.go diff --git a/.gitignore b/.gitignore index 7ec04f8..5bf6a1e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ .idea +*.log +*.out # cmds cmd/binapi-generator/binapi-generator @@ -6,7 +8,6 @@ cmd/binapi-generator/binapi-generator # examples examples/cmd/perf-bench/perf-bench examples/cmd/simple-client/simple-client -examples/cmd/stats-client/stats-client examples/cmd/stats-api/stats-api # extras diff --git a/Gopkg.lock b/Gopkg.lock new file mode 100644 index 0000000..c35dc15 --- /dev/null +++ b/Gopkg.lock @@ -0,0 +1,101 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + digest = "1:3925737bca828152354a9a214c77e49f7c779e6207bfd40419d515645efd99ff" + name = "github.com/bennyscetbun/jsongo" + packages = ["."] + pruneopts = "UT" + revision = "5240b3f82c6665fe3ccd96bdf5e6f38fe1e1399d" + +[[projects]] + digest = "1:38c783cf85b9454cc02a1a8319239800ed0af6c1c864adf19cea0539e134adad" + name = "github.com/fsnotify/fsnotify" + packages = ["."] + pruneopts = "UT" + revision = "4da3e2cfbabc9f751898f250b49f2439785783a1" + +[[projects]] + digest = "1:81259d6c2b9aa336c627a31074078d5473788c1f54a373e4392d4e722716d74d" + name = "github.com/google/gopacket" + packages = [ + ".", + "layers", + ] + pruneopts = "UT" + revision = "8e484f31b1237166f00e4896d27ddde259540632" + +[[projects]] + branch = "master" + digest = "1:40bf4b24f9127737b22d3b86ff0bef3c3e9d87604d6260d9f9b9125e7995ff49" + name = "github.com/lunixbochs/struc" + packages = ["."] + pruneopts = "UT" + revision = "02e4c2afbb2ac4bae6876f52c8273fc4cf5a4b0a" + +[[projects]] + digest = "1:c4c90722461cfbd86d88c3d7bad0c352a958c68de0884d399a42f53d160429e7" + name = "github.com/onsi/gomega" + packages = [ + ".", + "format", + "internal/assertion", + "internal/asyncassertion", + "internal/oraclematcher", + "internal/testingtsupport", + "matchers", + "matchers/support/goraph/bipartitegraph", + "matchers/support/goraph/edge", + "matchers/support/goraph/node", + "matchers/support/goraph/util", + "types", + ] + pruneopts = "UT" + revision = "334b8f472b3af5d541c5642701c1e29e2126f486" + version = "v1.1.0" + +[[projects]] + digest = "1:cfa0d7741863a0e1d30e0ccdd4b48a96a471cdb47892303de8b92c3713af3e77" + name = "github.com/pkg/profile" + packages = ["."] + pruneopts = "UT" + revision = "5b67d428864e92711fcbd2f8629456121a56d91f" + version = "v1.2.1" + +[[projects]] + digest = "1:ee1da6524260ed66de5eacdf4def98a365576be6c6972faa8ef438bef324843d" + name = "github.com/sirupsen/logrus" + packages = ["."] + pruneopts = "UT" + revision = "202f25545ea4cf9b191ff7f846df5d87c9382c2b" + version = "v1.0.0" + +[[projects]] + digest = "1:7217a703ed82a3c04939fdaf0768bf651406a9d2e41e061582f0809ab5459e00" + name = "golang.org/x/sys" + packages = ["unix"] + pruneopts = "UT" + revision = "9ccfe848b9db8435a24c424abbc07a921adf1df5" + +[[projects]] + digest = "1:35c04c23c8aef680782e117c67e29750453c92d11448da616d2e399887e5fc86" + name = "gopkg.in/yaml.v2" + packages = ["."] + pruneopts = "UT" + revision = "cd8b52f8269e0feb286dfeef29f8fe4d5b397e0b" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + input-imports = [ + "github.com/bennyscetbun/jsongo", + "github.com/fsnotify/fsnotify", + "github.com/google/gopacket", + "github.com/google/gopacket/layers", + "github.com/lunixbochs/struc", + "github.com/onsi/gomega", + "github.com/pkg/profile", + "github.com/sirupsen/logrus", + ] + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml new file mode 100644 index 0000000..cf36c4a --- /dev/null +++ b/Gopkg.toml @@ -0,0 +1,42 @@ +# Gopkg.toml example +# +# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html +# for detailed Gopkg.toml documentation. +# +# required = ["github.com/user/thing/cmd/thing"] +# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] +# +# [[constraint]] +# name = "github.com/user/project" +# version = "1.0.0" +# +# [[constraint]] +# name = "github.com/user/project2" +# branch = "dev" +# source = "github.com/myfork/project2" +# +# [[override]] +# name = "github.com/x/y" +# version = "2.4.0" +# +# [prune] +# non-go = false +# go-tests = true +# unused-packages = true + + +[[constraint]] + name = "github.com/onsi/gomega" + version = "1.1.0" + +[[constraint]] + name = "github.com/pkg/profile" + version = "1.2.1" + +[[constraint]] + name = "github.com/sirupsen/logrus" + version = "1.0.0" + +[prune] + go-tests = true + unused-packages = true diff --git a/Makefile b/Makefile index ec01313..fce72ac 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,8 @@ VERSION ?= $(shell git describe --always --tags --dirty) +BINAPI_DIR ?= $(shell cd examples/bin_api && pwd) +VPP_VERSION := $(shell apt-cache show vpp | grep Version: | cut -d' ' -f2-) + all: test build examples install: @@ -39,10 +42,19 @@ clean: rm -f extras/libmemif/examples/jumbo-frames/jumbo-frames rm -f extras/libmemif/examples/raw-data/raw-data +generate-binapi: + @echo "=> generating binapi" + @go generate "${BINAPI_DIR}" + generate: install @echo "=> generating code" cd examples && go generate ./... +update-vppapi: + @echo "=> updating API JSON files using installed VPP (${VPP_VERSION})" + @cd ${BINAPI_DIR} && find . -type f -name '*.api.json' -exec cp /usr/share/vpp/api/'{}' '{}' \; + @echo ${VPP_VERSION} > ${BINAPI_DIR}/VPP_VERSION + lint: @echo "=> running linter" @golint ./... | grep -v vendor | grep -v bin_api || true diff --git a/cmd/binapi-generator/definitions.go b/cmd/binapi-generator/definitions.go index b8c3393..3ad782f 100644 --- a/cmd/binapi-generator/definitions.go +++ b/cmd/binapi-generator/definitions.go @@ -25,8 +25,6 @@ func getBinapiTypeSize(binapiType string) int { b, err := strconv.Atoi(strings.TrimLeft(binapiType, "uif")) if err == nil { return b / 8 - } else { - return 1 } } return -1 @@ -34,17 +32,15 @@ func getBinapiTypeSize(binapiType string) int { // binapiTypes is a set of types used VPP binary API for translation to Go types var binapiTypes = map[string]string{ - "bool": "bool", - "u8": "uint8", - "i8": "int8", - "u16": "uint16", - "i16": "int16", - "u32": "uint32", - "i32": "int32", - "u64": "uint64", - "i64": "int64", - "f64": "float64", - "string": "string", + "u8": "uint8", + "i8": "int8", + "u16": "uint16", + "i16": "int16", + "u32": "uint32", + "i32": "int32", + "u64": "uint64", + "i64": "int64", + "f64": "float64", } func usesInitialism(s string) string { diff --git a/cmd/binapi-generator/generate.go b/cmd/binapi-generator/generate.go index 22b4af6..e165c42 100644 --- a/cmd/binapi-generator/generate.go +++ b/cmd/binapi-generator/generate.go @@ -347,41 +347,6 @@ func generateAlias(ctx *context, w io.Writer, alias *Alias) { fmt.Fprintln(w) } -// generateType writes generated code for the type into w -func generateType(ctx *context, w io.Writer, typ *Type) { - name := camelCaseName(typ.Name) - - logf(" writing type %q (%s) with %d fields", typ.Name, name, len(typ.Fields)) - - // generate struct comment - generateComment(ctx, w, name, typ.Name, "type") - - // generate struct definition - fmt.Fprintf(w, "type %s struct {\n", name) - - // generate struct fields - for i, field := range typ.Fields { - // skip internal fields - switch strings.ToLower(field.Name) { - case "crc", "_vl_msg_id": - continue - } - - generateField(ctx, w, typ.Fields, i) - } - - // generate end of the struct - fmt.Fprintln(w, "}") - - // generate name getter - generateTypeNameGetter(w, name, typ.Name) - - // generate CRC getter - generateCrcGetter(w, name, typ.CRC) - - fmt.Fprintln(w) -} - // generateUnion writes generated code for the union into w func generateUnion(ctx *context, w io.Writer, union *Union) { name := camelCaseName(union.Name) @@ -466,6 +431,41 @@ func (u *%[1]s) Get%[2]s() (a %[3]s) { `, structName, getterField, getterStruct) } +// generateType writes generated code for the type into w +func generateType(ctx *context, w io.Writer, typ *Type) { + name := camelCaseName(typ.Name) + + logf(" writing type %q (%s) with %d fields", typ.Name, name, len(typ.Fields)) + + // generate struct comment + generateComment(ctx, w, name, typ.Name, "type") + + // generate struct definition + fmt.Fprintf(w, "type %s struct {\n", name) + + // generate struct fields + for i, field := range typ.Fields { + // skip internal fields + switch strings.ToLower(field.Name) { + case "crc", "_vl_msg_id": + continue + } + + generateField(ctx, w, typ.Fields, i) + } + + // generate end of the struct + fmt.Fprintln(w, "}") + + // generate name getter + generateTypeNameGetter(w, name, typ.Name) + + // generate CRC getter + generateCrcGetter(w, name, typ.CRC) + + fmt.Fprintln(w) +} + // generateMessage writes generated code for the message into w func generateMessage(ctx *context, w io.Writer, msg *Message) { name := camelCaseName(msg.Name) @@ -486,7 +486,8 @@ func generateMessage(ctx *context, w io.Writer, msg *Message) { for i, field := range msg.Fields { if i == 1 { if field.Name == "client_index" { - // "client_index" as the second member, this might be an event message or a request + // "client_index" as the second member, + // this might be an event message or a request msgType = eventMessage wasClientIndex = true } else if field.Name == "context" { @@ -495,7 +496,8 @@ func generateMessage(ctx *context, w io.Writer, msg *Message) { } } else if i == 2 { if wasClientIndex && field.Name == "context" { - // request needs "client_index" as the second member and "context" as the third member + // request needs "client_index" as the second member + // and "context" as the third member msgType = requestMessage } } @@ -537,6 +539,11 @@ func generateField(ctx *context, w io.Writer, fields []Field, i int) { fieldName := strings.TrimPrefix(field.Name, "_") fieldName = camelCaseName(fieldName) + // generate length field for strings + if field.Type == "string" { + fmt.Fprintf(w, "\tXXX_%sLen uint32 `struc:\"sizeof=%s\"`\n", fieldName, fieldName) + } + dataType := convertToGoType(ctx, field.Type) fieldType := dataType diff --git a/cmd/binapi-generator/parse.go b/cmd/binapi-generator/parse.go index 5dfbe91..5bb3e8e 100644 --- a/cmd/binapi-generator/parse.go +++ b/cmd/binapi-generator/parse.go @@ -23,11 +23,6 @@ import ( "github.com/bennyscetbun/jsongo" ) -// toApiType returns name that is used as type reference in VPP binary API -func toApiType(name string) string { - return fmt.Sprintf("vl_api_%s_t", name) -} - // parsePackage parses provided JSON data into objects prepared for code generation func parsePackage(ctx *context, jsonRoot *jsongo.JSONNode) (*Package, error) { logf(" %s contains: %d services, %d messages, %d types, %d enums, %d unions, %d aliases (version: %s)", @@ -75,6 +70,10 @@ func parsePackage(ctx *context, jsonRoot *jsongo.JSONNode) (*Package, error) { pkg.RefMap[toApiType(alias.Name)] = alias.Name } } + // sort aliases to ensure consistent order + sort.Slice(pkg.Aliases, func(i, j int) bool { + return pkg.Aliases[i].Name < pkg.Aliases[j].Name + }) // parse types types := jsonRoot.Map("types") @@ -479,6 +478,11 @@ func parseService(ctx *context, svcName string, svcNode *jsongo.JSONNode) (*Serv return &svc, nil } +// toApiType returns name that is used as type reference in VPP binary API +func toApiType(name string) string { + return fmt.Sprintf("vl_api_%s_t", name) +} + // convertToGoType translates the VPP binary API type into Go type func convertToGoType(ctx *context, binapiType string) (typ string) { if t, ok := binapiTypes[binapiType]; ok { @@ -488,9 +492,14 @@ func convertToGoType(ctx *context, binapiType string) (typ string) { // specific types (enums/types/unions) typ = camelCaseName(r) } else { - // fallback type - log.Warnf("found unknown VPP binary API type %q, using byte", binapiType) - typ = "byte" + switch binapiType { + case "bool", "string": + typ = binapiType + default: + // fallback type + log.Warnf("found unknown VPP binary API type %q, using byte", binapiType) + typ = "byte" + } } return typ } diff --git a/examples/bin_api/VPP_VERSION b/examples/bin_api/VPP_VERSION new file mode 100644 index 0000000..4f9e13e --- /dev/null +++ b/examples/bin_api/VPP_VERSION @@ -0,0 +1 @@ +19.01-rc0~622-g7b01e9e8~b1858 diff --git a/examples/bin_api/interface.api.json b/examples/bin_api/interface.api.json index db255aa..41862d8 100644 --- a/examples/bin_api/interface.api.json +++ b/examples/bin_api/interface.api.json @@ -1373,7 +1373,7 @@ } ] ], - "vl_api_version": "0x1ec8c073", + "vl_api_version": "0x672de521", "unions": [], "services": { "create_subif": { @@ -1458,142 +1458,7 @@ } }, "enums": [], - "types": [ - [ - "vlib_counter", - [ - "u64", - "packets" - ], - [ - "u64", - "bytes" - ], - { - "crc": "0xce2325a2" - } - ], - [ - "vnet_combined_counter", - [ - "u32", - "sw_if_index" - ], - [ - "u64", - "rx_packets" - ], - [ - "u64", - "rx_bytes" - ], - [ - "u64", - "rx_unicast_packets" - ], - [ - "u64", - "rx_unicast_bytes" - ], - [ - "u64", - "rx_multicast_packets" - ], - [ - "u64", - "rx_multicast_bytes" - ], - [ - "u64", - "rx_broadcast_packets" - ], - [ - "u64", - "rx_broadcast_bytes" - ], - [ - "u64", - "tx_packets" - ], - [ - "u64", - "tx_bytes" - ], - [ - "u64", - "tx_unicast_packets" - ], - [ - "u64", - "tx_unicast_bytes" - ], - [ - "u64", - "tx_multicast_packets" - ], - [ - "u64", - "tx_multicast_bytes" - ], - [ - "u64", - "tx_broadcast_packets" - ], - [ - "u64", - "tx_broadcast_bytes" - ], - { - "crc": "0x20905ca4" - } - ], - [ - "vnet_simple_counter", - [ - "u32", - "sw_if_index" - ], - [ - "u64", - "drop" - ], - [ - "u64", - "punt" - ], - [ - "u64", - "rx_ip4" - ], - [ - "u64", - "rx_ip6" - ], - [ - "u64", - "rx_no_buffer" - ], - [ - "u64", - "rx_miss" - ], - [ - "u64", - "rx_error" - ], - [ - "u64", - "tx_error" - ], - [ - "u64", - "rx_mpls" - ], - { - "crc": "0x8bd65e2d" - } - ] - ], + "types": [], "aliases": { "interface_index": { "type": "u32" diff --git a/examples/bin_api/interfaces/interfaces.ba.go b/examples/bin_api/interfaces/interfaces.ba.go index 68a8b44..2e90fbf 100644 --- a/examples/bin_api/interfaces/interfaces.ba.go +++ b/examples/bin_api/interfaces/interfaces.ba.go @@ -6,7 +6,6 @@ It contains following objects: 51 messages - 3 types 1 alias 25 services @@ -145,204 +144,6 @@ type Services interface { // type InterfaceIndex uint32 -/* Types */ - -// VlibCounter represents VPP binary API type 'vlib_counter': -// -// "vlib_counter", -// [ -// "u64", -// "packets" -// ], -// [ -// "u64", -// "bytes" -// ], -// { -// "crc": "0xce2325a2" -// } -// -type VlibCounter struct { - Packets uint64 - Bytes uint64 -} - -func (*VlibCounter) GetTypeName() string { - return "vlib_counter" -} -func (*VlibCounter) GetCrcString() string { - return "ce2325a2" -} - -// VnetCombinedCounter represents VPP binary API type 'vnet_combined_counter': -// -// "vnet_combined_counter", -// [ -// "u32", -// "sw_if_index" -// ], -// [ -// "u64", -// "rx_packets" -// ], -// [ -// "u64", -// "rx_bytes" -// ], -// [ -// "u64", -// "rx_unicast_packets" -// ], -// [ -// "u64", -// "rx_unicast_bytes" -// ], -// [ -// "u64", -// "rx_multicast_packets" -// ], -// [ -// "u64", -// "rx_multicast_bytes" -// ], -// [ -// "u64", -// "rx_broadcast_packets" -// ], -// [ -// "u64", -// "rx_broadcast_bytes" -// ], -// [ -// "u64", -// "tx_packets" -// ], -// [ -// "u64", -// "tx_bytes" -// ], -// [ -// "u64", -// "tx_unicast_packets" -// ], -// [ -// "u64", -// "tx_unicast_bytes" -// ], -// [ -// "u64", -// "tx_multicast_packets" -// ], -// [ -// "u64", -// "tx_multicast_bytes" -// ], -// [ -// "u64", -// "tx_broadcast_packets" -// ], -// [ -// "u64", -// "tx_broadcast_bytes" -// ], -// { -// "crc": "0x20905ca4" -// } -// -type VnetCombinedCounter struct { - SwIfIndex uint32 - RxPackets uint64 - RxBytes uint64 - RxUnicastPackets uint64 - RxUnicastBytes uint64 - RxMulticastPackets uint64 - RxMulticastBytes uint64 - RxBroadcastPackets uint64 - RxBroadcastBytes uint64 - TxPackets uint64 - TxBytes uint64 - TxUnicastPackets uint64 - TxUnicastBytes uint64 - TxMulticastPackets uint64 - TxMulticastBytes uint64 - TxBroadcastPackets uint64 - TxBroadcastBytes uint64 -} - -func (*VnetCombinedCounter) GetTypeName() string { - return "vnet_combined_counter" -} -func (*VnetCombinedCounter) GetCrcString() string { - return "20905ca4" -} - -// VnetSimpleCounter represents VPP binary API type 'vnet_simple_counter': -// -// "vnet_simple_counter", -// [ -// "u32", -// "sw_if_index" -// ], -// [ -// "u64", -// "drop" -// ], -// [ -// "u64", -// "punt" -// ], -// [ -// "u64", -// "rx_ip4" -// ], -// [ -// "u64", -// "rx_ip6" -// ], -// [ -// "u64", -// "rx_no_buffer" -// ], -// [ -// "u64", -// "rx_miss" -// ], -// [ -// "u64", -// "rx_error" -// ], -// [ -// "u64", -// "tx_error" -// ], -// [ -// "u64", -// "rx_mpls" -// ], -// { -// "crc": "0x8bd65e2d" -// } -// -type VnetSimpleCounter struct { - SwIfIndex uint32 - Drop uint64 - Punt uint64 - RxIP4 uint64 - RxIP6 uint64 - RxNoBuffer uint64 - RxMiss uint64 - RxError uint64 - TxError uint64 - RxMpls uint64 -} - -func (*VnetSimpleCounter) GetTypeName() string { - return "vnet_simple_counter" -} -func (*VnetSimpleCounter) GetCrcString() string { - return "8bd65e2d" -} - /* Messages */ // SwInterfaceSetFlags represents VPP binary API message 'sw_interface_set_flags': diff --git a/examples/bin_api/ip.api.json b/examples/bin_api/ip.api.json index 3983288..62c282b 100644 --- a/examples/bin_api/ip.api.json +++ b/examples/bin_api/ip.api.json @@ -1070,13 +1070,13 @@ "stats_index" ], [ - "vl_api_fib_path_t", + "vl_api_mfib_path_t", "path", 0, "count" ], { - "crc": "0x21329a12" + "crc": "0x61faa26f" } ], [ @@ -1130,13 +1130,13 @@ "count" ], [ - "vl_api_fib_path_t", + "vl_api_mfib_path_t", "path", 0, "count" ], { - "crc": "0xe02dcb4b" + "crc": "0x738c546e" } ], [ @@ -2642,7 +2642,7 @@ } ] ], - "vl_api_version": "0x1eba4868", + "vl_api_version": "0xa3532a2f", "unions": [ [ "address_union", @@ -2987,6 +2987,10 @@ "u8", "is_source_lookup" ], + [ + "u8", + "is_interface_rx" + ], [ "u8", "afi" @@ -3018,18 +3022,21 @@ 16 ], { - "crc": "0xabe483ef" + "crc": "0xba7a81f0" } ], [ - "mac_address", + "mfib_path", [ - "u8", - "bytes", - 6 + "vl_api_fib_path_t", + "path" + ], + [ + "u32", + "itf_flags" ], { - "crc": "0xefdbdddc" + "crc": "0x4ba77d32" } ], [ @@ -3106,6 +3113,10 @@ "ip4_address": { "length": 4, "type": "u8" + }, + "mac_address": { + "length": 6, + "type": "u8" } } } diff --git a/examples/bin_api/ip/ip.ba.go b/examples/bin_api/ip/ip.ba.go index b4615b5..8f31fd4 100644 --- a/examples/bin_api/ip/ip.ba.go +++ b/examples/bin_api/ip/ip.ba.go @@ -7,7 +7,7 @@ It contains following objects: 91 messages 11 types - 2 aliases + 3 aliases 1 enum 1 union 44 services @@ -262,7 +262,7 @@ const ( // "ip4_address": { // "length": 4, // "type": "u8" -// } +// }, // type IP4Address [4]uint8 @@ -275,6 +275,15 @@ type IP4Address [4]uint8 // type IP6Address [16]uint8 +// MacAddress represents VPP binary API alias 'mac_address': +// +// "mac_address": { +// "length": 6, +// "type": "u8" +// } +// +type MacAddress [6]uint8 + /* Types */ // Address represents VPP binary API type 'address': @@ -506,6 +515,10 @@ func (*FibMplsLabel) GetCrcString() string { // ], // [ // "u8", +// "is_interface_rx" +// ], +// [ +// "u8", // "afi" // ], // [ @@ -535,7 +548,7 @@ func (*FibMplsLabel) GetCrcString() string { // 16 // ], // { -// "crc": "0xabe483ef" +// "crc": "0xba7a81f0" // } // type FibPath struct { @@ -552,6 +565,7 @@ type FibPath struct { IsResolveAttached uint8 IsDvr uint8 IsSourceLookup uint8 + IsInterfaceRx uint8 Afi uint8 NextHop []byte `struc:"[16]byte"` NextHopID uint32 @@ -565,23 +579,34 @@ func (*FibPath) GetTypeName() string { return "fib_path" } func (*FibPath) GetCrcString() string { - return "abe483ef" + return "ba7a81f0" } -// MacAddress represents VPP binary API type 'mac_address': +// MfibPath represents VPP binary API type 'mfib_path': // -// "mac_address", -// 6 +// "mfib_path", +// [ +// "vl_api_fib_path_t", +// "path" +// ], +// [ +// "u32", +// "itf_flags" +// ], +// { +// "crc": "0x4ba77d32" +// } // -type MacAddress struct { - Bytes []byte `struc:"[6]byte"` +type MfibPath struct { + Path FibPath + ItfFlags uint32 } -func (*MacAddress) GetTypeName() string { - return "mac_address" +func (*MfibPath) GetTypeName() string { + return "mfib_path" } -func (*MacAddress) GetCrcString() string { - return "efdbdddc" +func (*MfibPath) GetCrcString() string { + return "4ba77d32" } // PuntRedirect represents VPP binary API type 'punt_redirect': @@ -2356,13 +2381,13 @@ func (*IPMfibDump) GetMessageType() api.MessageType { // "stats_index" // ], // [ -// "vl_api_fib_path_t", +// "vl_api_mfib_path_t", // "path", // 0, // "count" // ], // { -// "crc": "0x21329a12" +// "crc": "0x61faa26f" // } // type IPMfibDetails struct { @@ -2374,14 +2399,14 @@ type IPMfibDetails struct { SrcAddress []byte `struc:"[4]byte"` Count uint32 `struc:"sizeof=Path"` StatsIndex uint32 - Path []FibPath + Path []MfibPath } func (*IPMfibDetails) GetMessageName() string { return "ip_mfib_details" } func (*IPMfibDetails) GetCrcString() string { - return "21329a12" + return "61faa26f" } func (*IPMfibDetails) GetMessageType() api.MessageType { return api.ReplyMessage @@ -2452,13 +2477,13 @@ func (*IP6MfibDump) GetMessageType() api.MessageType { // "count" // ], // [ -// "vl_api_fib_path_t", +// "vl_api_mfib_path_t", // "path", // 0, // "count" // ], // { -// "crc": "0xe02dcb4b" +// "crc": "0x738c546e" // } // type IP6MfibDetails struct { @@ -2467,14 +2492,14 @@ type IP6MfibDetails struct { GrpAddress []byte `struc:"[16]byte"` SrcAddress []byte `struc:"[16]byte"` Count uint32 `struc:"sizeof=Path"` - Path []FibPath + Path []MfibPath } func (*IP6MfibDetails) GetMessageName() string { return "ip6_mfib_details" } func (*IP6MfibDetails) GetCrcString() string { - return "e02dcb4b" + return "738c546e" } func (*IP6MfibDetails) GetMessageType() api.MessageType { return api.ReplyMessage diff --git a/examples/bin_api/map.api.json b/examples/bin_api/map.api.json index cb98202..a19bd3a 100644 --- a/examples/bin_api/map.api.json +++ b/examples/bin_api/map.api.json @@ -38,20 +38,12 @@ "u8", "psid_length" ], - [ - "bool", - "is_translation" - ], - [ - "bool", - "is_rfc6052" - ], [ "u16", "mtu" ], { - "crc": "0x7a64714e" + "crc": "0xa9358068" } ], [ @@ -232,12 +224,8 @@ "u16", "mtu" ], - [ - "bool", - "is_translation" - ], { - "crc": "0x7a986fe6" + "crc": "0x2a17dcb8" } ], [ @@ -284,6 +272,54 @@ "crc": "0x4f932665" } ], + [ + "map_if_enable_disable", + [ + "u16", + "_vl_msg_id" + ], + [ + "u32", + "client_index" + ], + [ + "u32", + "context" + ], + [ + "u32", + "sw_if_index" + ], + [ + "bool", + "is_enable" + ], + [ + "bool", + "is_translation" + ], + { + "crc": "0x61a30cd9" + } + ], + [ + "map_if_enable_disable_reply", + [ + "u16", + "_vl_msg_id" + ], + [ + "u32", + "context" + ], + [ + "i32", + "retval" + ], + { + "crc": "0xe8d4e804" + } + ], [ "map_summary_stats", [ @@ -659,6 +695,46 @@ "crc": "0xe8d4e804" } ], + [ + "map_param_set_tcp", + [ + "u16", + "_vl_msg_id" + ], + [ + "u32", + "client_index" + ], + [ + "u32", + "context" + ], + [ + "u16", + "tcp_mss" + ], + { + "crc": "0x87a825d9" + } + ], + [ + "map_param_set_tcp_reply", + [ + "u16", + "_vl_msg_id" + ], + [ + "u32", + "context" + ], + [ + "i32", + "retval" + ], + { + "crc": "0xe8d4e804" + } + ], [ "map_param_get", [ @@ -768,7 +844,7 @@ } ] ], - "vl_api_version": "0x14b499d0", + "vl_api_version": "0x75de78c3", "unions": [ [ "address_union", @@ -792,10 +868,16 @@ "map_param_add_del_pre_resolve": { "reply": "map_param_add_del_pre_resolve_reply" }, + "map_param_set_tcp": { + "reply": "map_param_set_tcp_reply" + }, "map_rule_dump": { "reply": "map_rule_details", "stream": true }, + "map_if_enable_disable": { + "reply": "map_if_enable_disable_reply" + }, "map_param_set_icmp6": { "reply": "map_param_set_icmp6_reply" }, diff --git a/examples/bin_api/maps/maps.ba.go b/examples/bin_api/maps/maps.ba.go index 8620c98..0a1e678 100644 --- a/examples/bin_api/maps/maps.ba.go +++ b/examples/bin_api/maps/maps.ba.go @@ -5,12 +5,12 @@ Package maps is a generated from VPP binary API module 'map'. It contains following objects: - 28 messages + 32 messages 5 types 2 aliases 1 enum 1 union - 14 services + 16 services */ package maps @@ -33,10 +33,16 @@ var _ = bytes.NewBuffer // "map_param_add_del_pre_resolve": { // "reply": "map_param_add_del_pre_resolve_reply" // }, +// "map_param_set_tcp": { +// "reply": "map_param_set_tcp_reply" +// }, // "map_rule_dump": { // "reply": "map_rule_details", // "stream": true // }, +// "map_if_enable_disable": { +// "reply": "map_if_enable_disable_reply" +// }, // "map_param_set_icmp6": { // "reply": "map_param_set_icmp6_reply" // }, @@ -79,6 +85,7 @@ type Services interface { MapAddDelRule(*MapAddDelRule) (*MapAddDelRuleReply, error) MapAddDomain(*MapAddDomain) (*MapAddDomainReply, error) MapDelDomain(*MapDelDomain) (*MapDelDomainReply, error) + MapIfEnableDisable(*MapIfEnableDisable) (*MapIfEnableDisableReply, error) MapParamAddDelPreResolve(*MapParamAddDelPreResolve) (*MapParamAddDelPreResolveReply, error) MapParamGet(*MapParamGet) (*MapParamGetReply, error) MapParamSetFragmentation(*MapParamSetFragmentation) (*MapParamSetFragmentationReply, error) @@ -86,6 +93,7 @@ type Services interface { MapParamSetICMP6(*MapParamSetICMP6) (*MapParamSetICMP6Reply, error) MapParamSetReassembly(*MapParamSetReassembly) (*MapParamSetReassemblyReply, error) MapParamSetSecurityCheck(*MapParamSetSecurityCheck) (*MapParamSetSecurityCheckReply, error) + MapParamSetTCP(*MapParamSetTCP) (*MapParamSetTCPReply, error) MapParamSetTrafficClass(*MapParamSetTrafficClass) (*MapParamSetTrafficClassReply, error) MapSummaryStats(*MapSummaryStats) (*MapSummaryStatsReply, error) } @@ -377,38 +385,28 @@ func (u *AddressUnion) GetIP6() (a IP6Address) { // "psid_length" // ], // [ -// "bool", -// "is_translation" -// ], -// [ -// "bool", -// "is_rfc6052" -// ], -// [ // "u16", // "mtu" // ], // { -// "crc": "0x7a64714e" +// "crc": "0xa9358068" // } // type MapAddDomain struct { - IP6Prefix IP6Prefix - IP4Prefix IP4Prefix - IP6Src IP6Prefix - EaBitsLen uint8 - PsidOffset uint8 - PsidLength uint8 - IsTranslation bool - IsRfc6052 bool - Mtu uint16 + IP6Prefix IP6Prefix + IP4Prefix IP4Prefix + IP6Src IP6Prefix + EaBitsLen uint8 + PsidOffset uint8 + PsidLength uint8 + Mtu uint16 } func (*MapAddDomain) GetMessageName() string { return "map_add_domain" } func (*MapAddDomain) GetCrcString() string { - return "7a64714e" + return "a9358068" } func (*MapAddDomain) GetMessageType() api.MessageType { return api.RequestMessage @@ -685,32 +683,27 @@ func (*MapDomainDump) GetMessageType() api.MessageType { // "u16", // "mtu" // ], -// [ -// "bool", -// "is_translation" -// ], // { -// "crc": "0x7a986fe6" +// "crc": "0x2a17dcb8" // } // type MapDomainDetails struct { - DomainIndex uint32 - IP6Prefix IP6Prefix - IP4Prefix IP4Prefix - IP6Src IP6Prefix - EaBitsLen uint8 - PsidOffset uint8 - PsidLength uint8 - Flags uint8 - Mtu uint16 - IsTranslation bool + DomainIndex uint32 + IP6Prefix IP6Prefix + IP4Prefix IP4Prefix + IP6Src IP6Prefix + EaBitsLen uint8 + PsidOffset uint8 + PsidLength uint8 + Flags uint8 + Mtu uint16 } func (*MapDomainDetails) GetMessageName() string { return "map_domain_details" } func (*MapDomainDetails) GetCrcString() string { - return "7a986fe6" + return "2a17dcb8" } func (*MapDomainDetails) GetMessageType() api.MessageType { return api.ReplyMessage @@ -791,6 +784,86 @@ func (*MapRuleDetails) GetMessageType() api.MessageType { return api.ReplyMessage } +// MapIfEnableDisable represents VPP binary API message 'map_if_enable_disable': +// +// "map_if_enable_disable", +// [ +// "u16", +// "_vl_msg_id" +// ], +// [ +// "u32", +// "client_index" +// ], +// [ +// "u32", +// "context" +// ], +// [ +// "u32", +// "sw_if_index" +// ], +// [ +// "bool", +// "is_enable" +// ], +// [ +// "bool", +// "is_translation" +// ], +// { +// "crc": "0x61a30cd9" +// } +// +type MapIfEnableDisable struct { + SwIfIndex uint32 + IsEnable bool + IsTranslation bool +} + +func (*MapIfEnableDisable) GetMessageName() string { + return "map_if_enable_disable" +} +func (*MapIfEnableDisable) GetCrcString() string { + return "61a30cd9" +} +func (*MapIfEnableDisable) GetMessageType() api.MessageType { + return api.RequestMessage +} + +// MapIfEnableDisableReply represents VPP binary API message 'map_if_enable_disable_reply': +// +// "map_if_enable_disable_reply", +// [ +// "u16", +// "_vl_msg_id" +// ], +// [ +// "u32", +// "context" +// ], +// [ +// "i32", +// "retval" +// ], +// { +// "crc": "0xe8d4e804" +// } +// +type MapIfEnableDisableReply struct { + Retval int32 +} + +func (*MapIfEnableDisableReply) GetMessageName() string { + return "map_if_enable_disable_reply" +} +func (*MapIfEnableDisableReply) GetCrcString() string { + return "e8d4e804" +} +func (*MapIfEnableDisableReply) GetMessageType() api.MessageType { + return api.ReplyMessage +} + // MapSummaryStats represents VPP binary API message 'map_summary_stats': // // "map_summary_stats", @@ -1418,6 +1491,76 @@ func (*MapParamSetTrafficClassReply) GetMessageType() api.MessageType { return api.ReplyMessage } +// MapParamSetTCP represents VPP binary API message 'map_param_set_tcp': +// +// "map_param_set_tcp", +// [ +// "u16", +// "_vl_msg_id" +// ], +// [ +// "u32", +// "client_index" +// ], +// [ +// "u32", +// "context" +// ], +// [ +// "u16", +// "tcp_mss" +// ], +// { +// "crc": "0x87a825d9" +// } +// +type MapParamSetTCP struct { + TCPMss uint16 +} + +func (*MapParamSetTCP) GetMessageName() string { + return "map_param_set_tcp" +} +func (*MapParamSetTCP) GetCrcString() string { + return "87a825d9" +} +func (*MapParamSetTCP) GetMessageType() api.MessageType { + return api.RequestMessage +} + +// MapParamSetTCPReply represents VPP binary API message 'map_param_set_tcp_reply': +// +// "map_param_set_tcp_reply", +// [ +// "u16", +// "_vl_msg_id" +// ], +// [ +// "u32", +// "context" +// ], +// [ +// "i32", +// "retval" +// ], +// { +// "crc": "0xe8d4e804" +// } +// +type MapParamSetTCPReply struct { + Retval int32 +} + +func (*MapParamSetTCPReply) GetMessageName() string { + return "map_param_set_tcp_reply" +} +func (*MapParamSetTCPReply) GetCrcString() string { + return "e8d4e804" +} +func (*MapParamSetTCPReply) GetMessageType() api.MessageType { + return api.ReplyMessage +} + // MapParamGet represents VPP binary API message 'map_param_get': // // "map_param_get", @@ -1583,6 +1726,8 @@ func init() { api.RegisterMessage((*MapDomainDetails)(nil), "map.MapDomainDetails") api.RegisterMessage((*MapRuleDump)(nil), "map.MapRuleDump") api.RegisterMessage((*MapRuleDetails)(nil), "map.MapRuleDetails") + api.RegisterMessage((*MapIfEnableDisable)(nil), "map.MapIfEnableDisable") + api.RegisterMessage((*MapIfEnableDisableReply)(nil), "map.MapIfEnableDisableReply") api.RegisterMessage((*MapSummaryStats)(nil), "map.MapSummaryStats") api.RegisterMessage((*MapSummaryStatsReply)(nil), "map.MapSummaryStatsReply") api.RegisterMessage((*MapParamSetFragmentation)(nil), "map.MapParamSetFragmentation") @@ -1599,6 +1744,8 @@ func init() { api.RegisterMessage((*MapParamSetSecurityCheckReply)(nil), "map.MapParamSetSecurityCheckReply") api.RegisterMessage((*MapParamSetTrafficClass)(nil), "map.MapParamSetTrafficClass") api.RegisterMessage((*MapParamSetTrafficClassReply)(nil), "map.MapParamSetTrafficClassReply") + api.RegisterMessage((*MapParamSetTCP)(nil), "map.MapParamSetTCP") + api.RegisterMessage((*MapParamSetTCPReply)(nil), "map.MapParamSetTCPReply") api.RegisterMessage((*MapParamGet)(nil), "map.MapParamGet") api.RegisterMessage((*MapParamGetReply)(nil), "map.MapParamGetReply") } diff --git a/examples/bin_api/stats.api.json b/examples/bin_api/stats.api.json deleted file mode 100644 index 31c957e..0000000 --- a/examples/bin_api/stats.api.json +++ /dev/null @@ -1,1531 +0,0 @@ -{ - "messages": [ - [ - "want_stats", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "client_index" - ], - [ - "u32", - "context" - ], - [ - "u32", - "enable_disable" - ], - [ - "u32", - "pid" - ], - { - "crc": "0x476f5a08" - } - ], - [ - "want_stats_reply", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "context" - ], - [ - "i32", - "retval" - ], - { - "crc": "0xe8d4e804" - } - ], - [ - "want_interface_simple_stats", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "client_index" - ], - [ - "u32", - "context" - ], - [ - "u32", - "enable_disable" - ], - [ - "u32", - "pid" - ], - { - "crc": "0x476f5a08" - } - ], - [ - "want_interface_simple_stats_reply", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "context" - ], - [ - "i32", - "retval" - ], - { - "crc": "0xe8d4e804" - } - ], - [ - "want_per_interface_simple_stats", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "client_index" - ], - [ - "u32", - "context" - ], - [ - "u32", - "enable_disable" - ], - [ - "u32", - "pid" - ], - [ - "u32", - "num" - ], - [ - "u32", - "sw_ifs", - 0, - "num" - ], - { - "crc": "0x729d04f1" - } - ], - [ - "want_per_interface_simple_stats_reply", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "context" - ], - [ - "i32", - "retval" - ], - { - "crc": "0xe8d4e804" - } - ], - [ - "want_interface_combined_stats", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "client_index" - ], - [ - "u32", - "context" - ], - [ - "u32", - "enable_disable" - ], - [ - "u32", - "pid" - ], - { - "crc": "0x476f5a08" - } - ], - [ - "want_interface_combined_stats_reply", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "context" - ], - [ - "i32", - "retval" - ], - { - "crc": "0xe8d4e804" - } - ], - [ - "want_per_interface_combined_stats", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "client_index" - ], - [ - "u32", - "context" - ], - [ - "u32", - "enable_disable" - ], - [ - "u32", - "pid" - ], - [ - "u32", - "num" - ], - [ - "u32", - "sw_ifs", - 0, - "num" - ], - { - "crc": "0x729d04f1" - } - ], - [ - "want_per_interface_combined_stats_reply", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "context" - ], - [ - "i32", - "retval" - ], - { - "crc": "0xe8d4e804" - } - ], - [ - "want_ip4_fib_stats", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "client_index" - ], - [ - "u32", - "context" - ], - [ - "u32", - "enable_disable" - ], - [ - "u32", - "pid" - ], - { - "crc": "0x476f5a08" - } - ], - [ - "want_ip4_fib_stats_reply", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "context" - ], - [ - "i32", - "retval" - ], - { - "crc": "0xe8d4e804" - } - ], - [ - "want_ip6_fib_stats", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "client_index" - ], - [ - "u32", - "context" - ], - [ - "u32", - "enable_disable" - ], - [ - "u32", - "pid" - ], - { - "crc": "0x476f5a08" - } - ], - [ - "want_ip6_fib_stats_reply", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "context" - ], - [ - "i32", - "retval" - ], - { - "crc": "0xe8d4e804" - } - ], - [ - "want_ip4_mfib_stats", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "client_index" - ], - [ - "u32", - "context" - ], - [ - "u32", - "enable_disable" - ], - [ - "u32", - "pid" - ], - { - "crc": "0x476f5a08" - } - ], - [ - "want_ip4_mfib_stats_reply", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "context" - ], - [ - "i32", - "retval" - ], - { - "crc": "0xe8d4e804" - } - ], - [ - "want_ip6_mfib_stats", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "client_index" - ], - [ - "u32", - "context" - ], - [ - "u32", - "enable_disable" - ], - [ - "u32", - "pid" - ], - { - "crc": "0x476f5a08" - } - ], - [ - "want_ip6_mfib_stats_reply", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "context" - ], - [ - "i32", - "retval" - ], - { - "crc": "0xe8d4e804" - } - ], - [ - "want_ip4_nbr_stats", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "client_index" - ], - [ - "u32", - "context" - ], - [ - "u32", - "enable_disable" - ], - [ - "u32", - "pid" - ], - { - "crc": "0x476f5a08" - } - ], - [ - "want_ip4_nbr_stats_reply", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "context" - ], - [ - "i32", - "retval" - ], - { - "crc": "0xe8d4e804" - } - ], - [ - "want_ip6_nbr_stats", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "client_index" - ], - [ - "u32", - "context" - ], - [ - "u32", - "enable_disable" - ], - [ - "u32", - "pid" - ], - { - "crc": "0x476f5a08" - } - ], - [ - "want_ip6_nbr_stats_reply", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "context" - ], - [ - "i32", - "retval" - ], - { - "crc": "0xe8d4e804" - } - ], - [ - "vnet_ip4_fib_counters", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "vrf_id" - ], - [ - "u32", - "count" - ], - [ - "vl_api_ip4_fib_counter_t", - "c", - 0, - "count" - ], - { - "crc": "0x57e3feec" - } - ], - [ - "vnet_ip4_mfib_counters", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "vrf_id" - ], - [ - "u32", - "count" - ], - [ - "vl_api_ip4_mfib_counter_t", - "c", - 0, - "count" - ], - { - "crc": "0x946eb588" - } - ], - [ - "vnet_ip4_nbr_counters", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "count" - ], - [ - "u32", - "sw_if_index" - ], - [ - "u8", - "begin" - ], - [ - "vl_api_ip4_nbr_counter_t", - "c", - 0, - "count" - ], - { - "crc": "0x214c4811" - } - ], - [ - "vnet_ip6_fib_counters", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "vrf_id" - ], - [ - "u32", - "count" - ], - [ - "vl_api_ip6_fib_counter_t", - "c", - 0, - "count" - ], - { - "crc": "0x13aed73d" - } - ], - [ - "vnet_ip6_mfib_counters", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "vrf_id" - ], - [ - "u32", - "count" - ], - [ - "vl_api_ip6_mfib_counter_t", - "c", - 0, - "count" - ], - { - "crc": "0x65fe1ae3" - } - ], - [ - "vnet_ip6_nbr_counters", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "count" - ], - [ - "u32", - "sw_if_index" - ], - [ - "u8", - "begin" - ], - [ - "vl_api_ip6_nbr_counter_t", - "c", - 0, - "count" - ], - { - "crc": "0x650161c0" - } - ], - [ - "vnet_interface_simple_counters", - [ - "u16", - "_vl_msg_id" - ], - [ - "u8", - "vnet_counter_type" - ], - [ - "u32", - "first_sw_if_index" - ], - [ - "u32", - "count" - ], - [ - "u64", - "data", - 0, - "count" - ], - { - "crc": "0x9bc4a808" - } - ], - [ - "vnet_interface_combined_counters", - [ - "u16", - "_vl_msg_id" - ], - [ - "u8", - "vnet_counter_type" - ], - [ - "u32", - "first_sw_if_index" - ], - [ - "u32", - "count" - ], - [ - "vl_api_vlib_counter_t", - "data", - 0, - "count" - ], - { - "crc": "0x2c595002" - } - ], - [ - "vnet_per_interface_simple_counters", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "count" - ], - [ - "u32", - "timestamp" - ], - [ - "vl_api_vnet_simple_counter_t", - "data", - 0, - "count" - ], - { - "crc": "0xd1fba9ba" - } - ], - [ - "vnet_per_interface_combined_counters", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "count" - ], - [ - "u32", - "timestamp" - ], - [ - "vl_api_vnet_combined_counter_t", - "data", - 0, - "count" - ], - { - "crc": "0xdc578375" - } - ], - [ - "vnet_get_summary_stats", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "client_index" - ], - [ - "u32", - "context" - ], - { - "crc": "0x51077d14" - } - ], - [ - "vnet_get_summary_stats_reply", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "context" - ], - [ - "i32", - "retval" - ], - [ - "u64", - "total_pkts", - 8 - ], - [ - "u64", - "total_bytes", - 8 - ], - [ - "f64", - "vector_rate" - ], - { - "crc": "0x82b5e46c" - } - ], - [ - "stats_get_poller_delay", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "client_index" - ], - [ - "u32", - "context" - ], - { - "crc": "0x51077d14" - } - ], - [ - "stats_get_poller_delay_reply", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "context" - ], - [ - "i32", - "retval" - ], - [ - "u32", - "delay" - ], - { - "crc": "0x8c445a33" - } - ], - [ - "want_udp_encap_stats", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "client_index" - ], - [ - "u32", - "context" - ], - [ - "u32", - "enable" - ], - [ - "u32", - "pid" - ], - { - "crc": "0xcfaccc1f" - } - ], - [ - "want_udp_encap_stats_reply", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "context" - ], - [ - "i32", - "retval" - ], - { - "crc": "0xe8d4e804" - } - ], - [ - "vnet_udp_encap_counters", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "timestamp" - ], - [ - "u32", - "count" - ], - [ - "vl_api_udp_encap_counter_t", - "c", - 0, - "count" - ], - { - "crc": "0x1ab5e649" - } - ], - [ - "want_bier_neighbor_stats", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "client_index" - ], - [ - "u32", - "context" - ], - [ - "u32", - "enable" - ], - [ - "u32", - "pid" - ], - { - "crc": "0xcfaccc1f" - } - ], - [ - "want_bier_neighbor_stats_reply", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "context" - ], - [ - "i32", - "retval" - ], - { - "crc": "0xe8d4e804" - } - ], - [ - "vnet_bier_neighbor_counters", - [ - "u16", - "_vl_msg_id" - ], - [ - "u32", - "timestamp" - ], - [ - "u32", - "count" - ], - [ - "vl_api_bier_neighbor_counter_t", - "c", - 0, - "count" - ], - { - "crc": "0xee0481ce" - } - ] - ], - "vl_api_version": "0xd3b29d42", - "unions": [], - "services": { - "want_ip4_fib_stats": { - "reply": "want_ip4_fib_stats_reply", - "events": [ - "vnet_ip4_fib_counters" - ] - }, - "want_ip6_fib_stats": { - "reply": "want_ip6_fib_stats_reply", - "events": [ - "vnet_ip6_fib_counters" - ] - }, - "want_stats": { - "reply": "want_stats_reply" - }, - "want_interface_simple_stats": { - "reply": "want_interface_simple_stats_reply", - "events": [ - "vnet_interface_simple_counters" - ] - }, - "stats_get_poller_delay": { - "reply": "stats_get_poller_delay_reply" - }, - "want_per_interface_combined_stats": { - "reply": "want_per_interface_combined_stats_reply", - "events": [ - "vnet_per_interface_combined_counters" - ] - }, - "vnet_get_summary_stats": { - "reply": "vnet_get_summary_stats_reply" - }, - "want_bier_neighbor_stats": { - "reply": "want_bier_neighbor_stats_reply", - "events": [ - "vnet_bier_neighbor_counters" - ] - }, - "want_udp_encap_stats": { - "reply": "want_udp_encap_stats_reply", - "events": [ - "vnet_udp_encap_counters" - ] - }, - "want_ip6_nbr_stats": { - "reply": "want_ip6_nbr_stats_reply", - "events": [ - "vnet_ip6_nbr_counters" - ] - }, - "want_ip4_mfib_stats": { - "reply": "want_ip4_mfib_stats_reply", - "events": [ - "vnet_ip4_mfib_counters" - ] - }, - "want_ip6_mfib_stats": { - "reply": "want_ip6_mfib_stats_reply", - "events": [ - "vnet_ip6_mfib_counters" - ] - }, - "want_per_interface_simple_stats": { - "reply": "want_per_interface_simple_stats_reply", - "events": [ - "vnet_per_interface_simple_counters" - ] - }, - "want_interface_combined_stats": { - "reply": "want_interface_combined_stats_reply", - "events": [ - "vnet_interface_combined_counters" - ] - }, - "want_ip4_nbr_stats": { - "reply": "want_ip4_nbr_stats_reply", - "events": [ - "vnet_ip4_nbr_counters" - ] - } - }, - "enums": [], - "types": [ - [ - "vlib_counter", - [ - "u64", - "packets" - ], - [ - "u64", - "bytes" - ], - { - "crc": "0xce2325a2" - } - ], - [ - "vnet_combined_counter", - [ - "u32", - "sw_if_index" - ], - [ - "u64", - "rx_packets" - ], - [ - "u64", - "rx_bytes" - ], - [ - "u64", - "rx_unicast_packets" - ], - [ - "u64", - "rx_unicast_bytes" - ], - [ - "u64", - "rx_multicast_packets" - ], - [ - "u64", - "rx_multicast_bytes" - ], - [ - "u64", - "rx_broadcast_packets" - ], - [ - "u64", - "rx_broadcast_bytes" - ], - [ - "u64", - "tx_packets" - ], - [ - "u64", - "tx_bytes" - ], - [ - "u64", - "tx_unicast_packets" - ], - [ - "u64", - "tx_unicast_bytes" - ], - [ - "u64", - "tx_multicast_packets" - ], - [ - "u64", - "tx_multicast_bytes" - ], - [ - "u64", - "tx_broadcast_packets" - ], - [ - "u64", - "tx_broadcast_bytes" - ], - { - "crc": "0x20905ca4" - } - ], - [ - "vnet_simple_counter", - [ - "u32", - "sw_if_index" - ], - [ - "u64", - "drop" - ], - [ - "u64", - "punt" - ], - [ - "u64", - "rx_ip4" - ], - [ - "u64", - "rx_ip6" - ], - [ - "u64", - "rx_no_buffer" - ], - [ - "u64", - "rx_miss" - ], - [ - "u64", - "rx_error" - ], - [ - "u64", - "tx_error" - ], - [ - "u64", - "rx_mpls" - ], - { - "crc": "0x8bd65e2d" - } - ], - [ - "fib_mpls_label", - [ - "u8", - "is_uniform" - ], - [ - "u32", - "label" - ], - [ - "u8", - "ttl" - ], - [ - "u8", - "exp" - ], - { - "crc": "0xc93bf35c" - } - ], - [ - "fib_path", - [ - "u32", - "sw_if_index" - ], - [ - "u32", - "table_id" - ], - [ - "u8", - "weight" - ], - [ - "u8", - "preference" - ], - [ - "u8", - "is_local" - ], - [ - "u8", - "is_drop" - ], - [ - "u8", - "is_udp_encap" - ], - [ - "u8", - "is_unreach" - ], - [ - "u8", - "is_prohibit" - ], - [ - "u8", - "is_resolve_host" - ], - [ - "u8", - "is_resolve_attached" - ], - [ - "u8", - "is_dvr" - ], - [ - "u8", - "is_source_lookup" - ], - [ - "u8", - "afi" - ], - [ - "u8", - "next_hop", - 16 - ], - [ - "u32", - "next_hop_id" - ], - [ - "u32", - "rpf_id" - ], - [ - "u32", - "via_label" - ], - [ - "u8", - "n_labels" - ], - [ - "vl_api_fib_mpls_label_t", - "label_stack", - 16 - ], - { - "crc": "0xabe483ef" - } - ], - [ - "bier_table_id", - [ - "u8", - "bt_set" - ], - [ - "u8", - "bt_sub_domain" - ], - [ - "u8", - "bt_hdr_len_id" - ], - { - "crc": "0x435c691d" - } - ], - [ - "ip4_fib_counter", - [ - "u32", - "address" - ], - [ - "u8", - "address_length" - ], - [ - "u64", - "packets" - ], - [ - "u64", - "bytes" - ], - { - "crc": "0xa6ceb0c9" - } - ], - [ - "ip4_mfib_counter", - [ - "u8", - "source", - 4 - ], - [ - "u8", - "group", - 4 - ], - [ - "u8", - "group_length" - ], - [ - "u64", - "packets" - ], - [ - "u64", - "bytes" - ], - { - "crc": "0x2cee4721" - } - ], - [ - "ip4_nbr_counter", - [ - "u32", - "address" - ], - [ - "u8", - "link_type" - ], - [ - "u64", - "packets" - ], - [ - "u64", - "bytes" - ], - { - "crc": "0xb9f974d6" - } - ], - [ - "ip6_fib_counter", - [ - "u64", - "address", - 2 - ], - [ - "u8", - "address_length" - ], - [ - "u64", - "packets" - ], - [ - "u64", - "bytes" - ], - { - "crc": "0xf1197efb" - } - ], - [ - "ip6_mfib_counter", - [ - "u8", - "source", - 16 - ], - [ - "u8", - "group", - 16 - ], - [ - "u8", - "group_length" - ], - [ - "u64", - "packets" - ], - [ - "u64", - "bytes" - ], - { - "crc": "0x90a9590e" - } - ], - [ - "ip6_nbr_counter", - [ - "u64", - "address", - 2 - ], - [ - "u8", - "link_type" - ], - [ - "u64", - "packets" - ], - [ - "u64", - "bytes" - ], - { - "crc": "0x2d755474" - } - ], - [ - "udp_encap_counter", - [ - "u32", - "id" - ], - [ - "u64", - "packets" - ], - [ - "u64", - "bytes" - ], - { - "crc": "0x7107035f" - } - ], - [ - "bier_neighbor_counter", - [ - "vl_api_bier_table_id_t", - "tbl_id" - ], - [ - "vl_api_fib_path_t", - "path" - ], - [ - "u64", - "packets" - ], - [ - "u64", - "bytes" - ], - { - "crc": "0x91fe1748" - } - ] - ], - "aliases": { - "interface_index": { - "type": "u32" - } - } -} diff --git a/examples/bin_api/stats/stats.ba.go b/examples/bin_api/stats/stats.ba.go deleted file mode 100644 index 97a6e60..0000000 --- a/examples/bin_api/stats/stats.ba.go +++ /dev/null @@ -1,2538 +0,0 @@ -// Code generated by GoVPP binapi-generator. DO NOT EDIT. -// source: stats.api.json - -/* - Package stats is a generated from VPP binary API module 'stats'. - - It contains following objects: - 42 messages - 14 types - 1 alias - 15 services - -*/ -package stats - -import "git.fd.io/govpp.git/api" -import "github.com/lunixbochs/struc" -import "bytes" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = api.RegisterMessage -var _ = struc.Pack -var _ = bytes.NewBuffer - -// Services represents VPP binary API services: -// -// "services": { -// "want_ip4_fib_stats": { -// "reply": "want_ip4_fib_stats_reply", -// "events": [ -// "vnet_ip4_fib_counters" -// ] -// }, -// "want_ip6_fib_stats": { -// "reply": "want_ip6_fib_stats_reply", -// "events": [ -// "vnet_ip6_fib_counters" -// ] -// }, -// "want_stats": { -// "reply": "want_stats_reply" -// }, -// "want_interface_simple_stats": { -// "reply": "want_interface_simple_stats_reply", -// "events": [ -// "vnet_interface_simple_counters" -// ] -// }, -// "stats_get_poller_delay": { -// "reply": "stats_get_poller_delay_reply" -// }, -// "want_per_interface_combined_stats": { -// "reply": "want_per_interface_combined_stats_reply", -// "events": [ -// "vnet_per_interface_combined_counters" -// ] -// }, -// "vnet_get_summary_stats": { -// "reply": "vnet_get_summary_stats_reply" -// }, -// "want_bier_neighbor_stats": { -// "reply": "want_bier_neighbor_stats_reply", -// "events": [ -// "vnet_bier_neighbor_counters" -// ] -// }, -// "want_udp_encap_stats": { -// "reply": "want_udp_encap_stats_reply", -// "events": [ -// "vnet_udp_encap_counters" -// ] -// }, -// "want_ip6_nbr_stats": { -// "reply": "want_ip6_nbr_stats_reply", -// "events": [ -// "vnet_ip6_nbr_counters" -// ] -// }, -// "want_ip4_mfib_stats": { -// "reply": "want_ip4_mfib_stats_reply", -// "events": [ -// "vnet_ip4_mfib_counters" -// ] -// }, -// "want_ip6_mfib_stats": { -// "reply": "want_ip6_mfib_stats_reply", -// "events": [ -// "vnet_ip6_mfib_counters" -// ] -// }, -// "want_per_interface_simple_stats": { -// "reply": "want_per_interface_simple_stats_reply", -// "events": [ -// "vnet_per_interface_simple_counters" -// ] -// }, -// "want_interface_combined_stats": { -// "reply": "want_interface_combined_stats_reply", -// "events": [ -// "vnet_interface_combined_counters" -// ] -// }, -// "want_ip4_nbr_stats": { -// "reply": "want_ip4_nbr_stats_reply", -// "events": [ -// "vnet_ip4_nbr_counters" -// ] -// } -// }, -// -type Services interface { - StatsGetPollerDelay(*StatsGetPollerDelay) (*StatsGetPollerDelayReply, error) - VnetGetSummaryStats(*VnetGetSummaryStats) (*VnetGetSummaryStatsReply, error) - WantBierNeighborStats(*WantBierNeighborStats) (*WantBierNeighborStatsReply, error) - WantInterfaceCombinedStats(*WantInterfaceCombinedStats) (*WantInterfaceCombinedStatsReply, error) - WantInterfaceSimpleStats(*WantInterfaceSimpleStats) (*WantInterfaceSimpleStatsReply, error) - WantIP4FibStats(*WantIP4FibStats) (*WantIP4FibStatsReply, error) - WantIP4MfibStats(*WantIP4MfibStats) (*WantIP4MfibStatsReply, error) - WantIP4NbrStats(*WantIP4NbrStats) (*WantIP4NbrStatsReply, error) - WantIP6FibStats(*WantIP6FibStats) (*WantIP6FibStatsReply, error) - WantIP6MfibStats(*WantIP6MfibStats) (*WantIP6MfibStatsReply, error) - WantIP6NbrStats(*WantIP6NbrStats) (*WantIP6NbrStatsReply, error) - WantPerInterfaceCombinedStats(*WantPerInterfaceCombinedStats) (*WantPerInterfaceCombinedStatsReply, error) - WantPerInterfaceSimpleStats(*WantPerInterfaceSimpleStats) (*WantPerInterfaceSimpleStatsReply, error) - WantStats(*WantStats) (*WantStatsReply, error) - WantUDPEncapStats(*WantUDPEncapStats) (*WantUDPEncapStatsReply, error) -} - -/* Aliases */ - -// InterfaceIndex represents VPP binary API alias 'interface_index': -// -// "interface_index": { -// "type": "u32" -// } -// -type InterfaceIndex uint32 - -/* Types */ - -// VlibCounter represents VPP binary API type 'vlib_counter': -// -// "vlib_counter", -// [ -// "u64", -// "packets" -// ], -// [ -// "u64", -// "bytes" -// ], -// { -// "crc": "0xce2325a2" -// } -// -type VlibCounter struct { - Packets uint64 - Bytes uint64 -} - -func (*VlibCounter) GetTypeName() string { - return "vlib_counter" -} -func (*VlibCounter) GetCrcString() string { - return "ce2325a2" -} - -// VnetCombinedCounter represents VPP binary API type 'vnet_combined_counter': -// -// "vnet_combined_counter", -// [ -// "u32", -// "sw_if_index" -// ], -// [ -// "u64", -// "rx_packets" -// ], -// [ -// "u64", -// "rx_bytes" -// ], -// [ -// "u64", -// "rx_unicast_packets" -// ], -// [ -// "u64", -// "rx_unicast_bytes" -// ], -// [ -// "u64", -// "rx_multicast_packets" -// ], -// [ -// "u64", -// "rx_multicast_bytes" -// ], -// [ -// "u64", -// "rx_broadcast_packets" -// ], -// [ -// "u64", -// "rx_broadcast_bytes" -// ], -// [ -// "u64", -// "tx_packets" -// ], -// [ -// "u64", -// "tx_bytes" -// ], -// [ -// "u64", -// "tx_unicast_packets" -// ], -// [ -// "u64", -// "tx_unicast_bytes" -// ], -// [ -// "u64", -// "tx_multicast_packets" -// ], -// [ -// "u64", -// "tx_multicast_bytes" -// ], -// [ -// "u64", -// "tx_broadcast_packets" -// ], -// [ -// "u64", -// "tx_broadcast_bytes" -// ], -// { -// "crc": "0x20905ca4" -// } -// -type VnetCombinedCounter struct { - SwIfIndex uint32 - RxPackets uint64 - RxBytes uint64 - RxUnicastPackets uint64 - RxUnicastBytes uint64 - RxMulticastPackets uint64 - RxMulticastBytes uint64 - RxBroadcastPackets uint64 - RxBroadcastBytes uint64 - TxPackets uint64 - TxBytes uint64 - TxUnicastPackets uint64 - TxUnicastBytes uint64 - TxMulticastPackets uint64 - TxMulticastBytes uint64 - TxBroadcastPackets uint64 - TxBroadcastBytes uint64 -} - -func (*VnetCombinedCounter) GetTypeName() string { - return "vnet_combined_counter" -} -func (*VnetCombinedCounter) GetCrcString() string { - return "20905ca4" -} - -// VnetSimpleCounter represents VPP binary API type 'vnet_simple_counter': -// -// "vnet_simple_counter", -// [ -// "u32", -// "sw_if_index" -// ], -// [ -// "u64", -// "drop" -// ], -// [ -// "u64", -// "punt" -// ], -// [ -// "u64", -// "rx_ip4" -// ], -// [ -// "u64", -// "rx_ip6" -// ], -// [ -// "u64", -// "rx_no_buffer" -// ], -// [ -// "u64", -// "rx_miss" -// ], -// [ -// "u64", -// "rx_error" -// ], -// [ -// "u64", -// "tx_error" -// ], -// [ -// "u64", -// "rx_mpls" -// ], -// { -// "crc": "0x8bd65e2d" -// } -// -type VnetSimpleCounter struct { - SwIfIndex uint32 - Drop uint64 - Punt uint64 - RxIP4 uint64 - RxIP6 uint64 - RxNoBuffer uint64 - RxMiss uint64 - RxError uint64 - TxError uint64 - RxMpls uint64 -} - -func (*VnetSimpleCounter) GetTypeName() string { - return "vnet_simple_counter" -} -func (*VnetSimpleCounter) GetCrcString() string { - return "8bd65e2d" -} - -// FibMplsLabel represents VPP binary API type 'fib_mpls_label': -// -// "fib_mpls_label", -// [ -// "u8", -// "is_uniform" -// ], -// [ -// "u32", -// "label" -// ], -// [ -// "u8", -// "ttl" -// ], -// [ -// "u8", -// "exp" -// ], -// { -// "crc": "0xc93bf35c" -// } -// -type FibMplsLabel struct { - IsUniform uint8 - Label uint32 - TTL uint8 - Exp uint8 -} - -func (*FibMplsLabel) GetTypeName() string { - return "fib_mpls_label" -} -func (*FibMplsLabel) GetCrcString() string { - return "c93bf35c" -} - -// FibPath represents VPP binary API type 'fib_path': -// -// "fib_path", -// [ -// "u32", -// "sw_if_index" -// ], -// [ -// "u32", -// "table_id" -// ], -// [ -// "u8", -// "weight" -// ], -// [ -// "u8", -// "preference" -// ], -// [ -// "u8", -// "is_local" -// ], -// [ -// "u8", -// "is_drop" -// ], -// [ -// "u8", -// "is_udp_encap" -// ], -// [ -// "u8", -// "is_unreach" -// ], -// [ -// "u8", -// "is_prohibit" -// ], -// [ -// "u8", -// "is_resolve_host" -// ], -// [ -// "u8", -// "is_resolve_attached" -// ], -// [ -// "u8", -// "is_dvr" -// ], -// [ -// "u8", -// "is_source_lookup" -// ], -// [ -// "u8", -// "afi" -// ], -// [ -// "u8", -// "next_hop", -// 16 -// ], -// [ -// "u32", -// "next_hop_id" -// ], -// [ -// "u32", -// "rpf_id" -// ], -// [ -// "u32", -// "via_label" -// ], -// [ -// "u8", -// "n_labels" -// ], -// [ -// "vl_api_fib_mpls_label_t", -// "label_stack", -// 16 -// ], -// { -// "crc": "0xabe483ef" -// } -// -type FibPath struct { - SwIfIndex uint32 - TableID uint32 - Weight uint8 - Preference uint8 - IsLocal uint8 - IsDrop uint8 - IsUDPEncap uint8 - IsUnreach uint8 - IsProhibit uint8 - IsResolveHost uint8 - IsResolveAttached uint8 - IsDvr uint8 - IsSourceLookup uint8 - Afi uint8 - NextHop []byte `struc:"[16]byte"` - NextHopID uint32 - RpfID uint32 - ViaLabel uint32 - NLabels uint8 - LabelStack []FibMplsLabel `struc:"[16]FibMplsLabel"` -} - -func (*FibPath) GetTypeName() string { - return "fib_path" -} -func (*FibPath) GetCrcString() string { - return "abe483ef" -} - -// BierTableID represents VPP binary API type 'bier_table_id': -// -// "bier_table_id", -// [ -// "u8", -// "bt_set" -// ], -// [ -// "u8", -// "bt_sub_domain" -// ], -// [ -// "u8", -// "bt_hdr_len_id" -// ], -// { -// "crc": "0x435c691d" -// } -// -type BierTableID struct { - BtSet uint8 - BtSubDomain uint8 - BtHdrLenID uint8 -} - -func (*BierTableID) GetTypeName() string { - return "bier_table_id" -} -func (*BierTableID) GetCrcString() string { - return "435c691d" -} - -// IP4FibCounter represents VPP binary API type 'ip4_fib_counter': -// -// "ip4_fib_counter", -// [ -// "u32", -// "address" -// ], -// [ -// "u8", -// "address_length" -// ], -// [ -// "u64", -// "packets" -// ], -// [ -// "u64", -// "bytes" -// ], -// { -// "crc": "0xa6ceb0c9" -// } -// -type IP4FibCounter struct { - Address uint32 - AddressLength uint8 - Packets uint64 - Bytes uint64 -} - -func (*IP4FibCounter) GetTypeName() string { - return "ip4_fib_counter" -} -func (*IP4FibCounter) GetCrcString() string { - return "a6ceb0c9" -} - -// IP4MfibCounter represents VPP binary API type 'ip4_mfib_counter': -// -// "ip4_mfib_counter", -// [ -// "u8", -// "source", -// 4 -// ], -// [ -// "u8", -// "group", -// 4 -// ], -// [ -// "u8", -// "group_length" -// ], -// [ -// "u64", -// "packets" -// ], -// [ -// "u64", -// "bytes" -// ], -// { -// "crc": "0x2cee4721" -// } -// -type IP4MfibCounter struct { - Source []byte `struc:"[4]byte"` - Group []byte `struc:"[4]byte"` - GroupLength uint8 - Packets uint64 - Bytes uint64 -} - -func (*IP4MfibCounter) GetTypeName() string { - return "ip4_mfib_counter" -} -func (*IP4MfibCounter) GetCrcString() string { - return "2cee4721" -} - -// IP4NbrCounter represents VPP binary API type 'ip4_nbr_counter': -// -// "ip4_nbr_counter", -// [ -// "u32", -// "address" -// ], -// [ -// "u8", -// "link_type" -// ], -// [ -// "u64", -// "packets" -// ], -// [ -// "u64", -// "bytes" -// ], -// { -// "crc": "0xb9f974d6" -// } -// -type IP4NbrCounter struct { - Address uint32 - LinkType uint8 - Packets uint64 - Bytes uint64 -} - -func (*IP4NbrCounter) GetTypeName() string { - return "ip4_nbr_counter" -} -func (*IP4NbrCounter) GetCrcString() string { - return "b9f974d6" -} - -// IP6FibCounter represents VPP binary API type 'ip6_fib_counter': -// -// "ip6_fib_counter", -// [ -// "u64", -// "address", -// 2 -// ], -// [ -// "u8", -// "address_length" -// ], -// [ -// "u64", -// "packets" -// ], -// [ -// "u64", -// "bytes" -// ], -// { -// "crc": "0xf1197efb" -// } -// -type IP6FibCounter struct { - Address []uint64 `struc:"[2]uint64"` - AddressLength uint8 - Packets uint64 - Bytes uint64 -} - -func (*IP6FibCounter) GetTypeName() string { - return "ip6_fib_counter" -} -func (*IP6FibCounter) GetCrcString() string { - return "f1197efb" -} - -// IP6MfibCounter represents VPP binary API type 'ip6_mfib_counter': -// -// "ip6_mfib_counter", -// [ -// "u8", -// "source", -// 16 -// ], -// [ -// "u8", -// "group", -// 16 -// ], -// [ -// "u8", -// "group_length" -// ], -// [ -// "u64", -// "packets" -// ], -// [ -// "u64", -// "bytes" -// ], -// { -// "crc": "0x90a9590e" -// } -// -type IP6MfibCounter struct { - Source []byte `struc:"[16]byte"` - Group []byte `struc:"[16]byte"` - GroupLength uint8 - Packets uint64 - Bytes uint64 -} - -func (*IP6MfibCounter) GetTypeName() string { - return "ip6_mfib_counter" -} -func (*IP6MfibCounter) GetCrcString() string { - return "90a9590e" -} - -// IP6NbrCounter represents VPP binary API type 'ip6_nbr_counter': -// -// "ip6_nbr_counter", -// [ -// "u64", -// "address", -// 2 -// ], -// [ -// "u8", -// "link_type" -// ], -// [ -// "u64", -// "packets" -// ], -// [ -// "u64", -// "bytes" -// ], -// { -// "crc": "0x2d755474" -// } -// -type IP6NbrCounter struct { - Address []uint64 `struc:"[2]uint64"` - LinkType uint8 - Packets uint64 - Bytes uint64 -} - -func (*IP6NbrCounter) GetTypeName() string { - return "ip6_nbr_counter" -} -func (*IP6NbrCounter) GetCrcString() string { - return "2d755474" -} - -// UDPEncapCounter represents VPP binary API type 'udp_encap_counter': -// -// "udp_encap_counter", -// [ -// "u32", -// "id" -// ], -// [ -// "u64", -// "packets" -// ], -// [ -// "u64", -// "bytes" -// ], -// { -// "crc": "0x7107035f" -// } -// -type UDPEncapCounter struct { - ID uint32 - Packets uint64 - Bytes uint64 -} - -func (*UDPEncapCounter) GetTypeName() string { - return "udp_encap_counter" -} -func (*UDPEncapCounter) GetCrcString() string { - return "7107035f" -} - -// BierNeighborCounter represents VPP binary API type 'bier_neighbor_counter': -// -// "bier_neighbor_counter", -// [ -// "vl_api_bier_table_id_t", -// "tbl_id" -// ], -// [ -// "vl_api_fib_path_t", -// "path" -// ], -// [ -// "u64", -// "packets" -// ], -// [ -// "u64", -// "bytes" -// ], -// { -// "crc": "0x91fe1748" -// } -// -type BierNeighborCounter struct { - TblID BierTableID - Path FibPath - Packets uint64 - Bytes uint64 -} - -func (*BierNeighborCounter) GetTypeName() string { - return "bier_neighbor_counter" -} -func (*BierNeighborCounter) GetCrcString() string { - return "91fe1748" -} - -/* Messages */ - -// WantStats represents VPP binary API message 'want_stats': -// -// "want_stats", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "client_index" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "u32", -// "enable_disable" -// ], -// [ -// "u32", -// "pid" -// ], -// { -// "crc": "0x476f5a08" -// } -// -type WantStats struct { - EnableDisable uint32 - PID uint32 -} - -func (*WantStats) GetMessageName() string { - return "want_stats" -} -func (*WantStats) GetCrcString() string { - return "476f5a08" -} -func (*WantStats) GetMessageType() api.MessageType { - return api.RequestMessage -} - -// WantStatsReply represents VPP binary API message 'want_stats_reply': -// -// "want_stats_reply", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "i32", -// "retval" -// ], -// { -// "crc": "0xe8d4e804" -// } -// -type WantStatsReply struct { - Retval int32 -} - -func (*WantStatsReply) GetMessageName() string { - return "want_stats_reply" -} -func (*WantStatsReply) GetCrcString() string { - return "e8d4e804" -} -func (*WantStatsReply) GetMessageType() api.MessageType { - return api.ReplyMessage -} - -// WantInterfaceSimpleStats represents VPP binary API message 'want_interface_simple_stats': -// -// "want_interface_simple_stats", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "client_index" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "u32", -// "enable_disable" -// ], -// [ -// "u32", -// "pid" -// ], -// { -// "crc": "0x476f5a08" -// } -// -type WantInterfaceSimpleStats struct { - EnableDisable uint32 - PID uint32 -} - -func (*WantInterfaceSimpleStats) GetMessageName() string { - return "want_interface_simple_stats" -} -func (*WantInterfaceSimpleStats) GetCrcString() string { - return "476f5a08" -} -func (*WantInterfaceSimpleStats) GetMessageType() api.MessageType { - return api.RequestMessage -} - -// WantInterfaceSimpleStatsReply represents VPP binary API message 'want_interface_simple_stats_reply': -// -// "want_interface_simple_stats_reply", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "i32", -// "retval" -// ], -// { -// "crc": "0xe8d4e804" -// } -// -type WantInterfaceSimpleStatsReply struct { - Retval int32 -} - -func (*WantInterfaceSimpleStatsReply) GetMessageName() string { - return "want_interface_simple_stats_reply" -} -func (*WantInterfaceSimpleStatsReply) GetCrcString() string { - return "e8d4e804" -} -func (*WantInterfaceSimpleStatsReply) GetMessageType() api.MessageType { - return api.ReplyMessage -} - -// WantPerInterfaceSimpleStats represents VPP binary API message 'want_per_interface_simple_stats': -// -// "want_per_interface_simple_stats", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "client_index" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "u32", -// "enable_disable" -// ], -// [ -// "u32", -// "pid" -// ], -// [ -// "u32", -// "num" -// ], -// [ -// "u32", -// "sw_ifs", -// 0, -// "num" -// ], -// { -// "crc": "0x729d04f1" -// } -// -type WantPerInterfaceSimpleStats struct { - EnableDisable uint32 - PID uint32 - Num uint32 `struc:"sizeof=SwIfs"` - SwIfs []uint32 -} - -func (*WantPerInterfaceSimpleStats) GetMessageName() string { - return "want_per_interface_simple_stats" -} -func (*WantPerInterfaceSimpleStats) GetCrcString() string { - return "729d04f1" -} -func (*WantPerInterfaceSimpleStats) GetMessageType() api.MessageType { - return api.RequestMessage -} - -// WantPerInterfaceSimpleStatsReply represents VPP binary API message 'want_per_interface_simple_stats_reply': -// -// "want_per_interface_simple_stats_reply", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "i32", -// "retval" -// ], -// { -// "crc": "0xe8d4e804" -// } -// -type WantPerInterfaceSimpleStatsReply struct { - Retval int32 -} - -func (*WantPerInterfaceSimpleStatsReply) GetMessageName() string { - return "want_per_interface_simple_stats_reply" -} -func (*WantPerInterfaceSimpleStatsReply) GetCrcString() string { - return "e8d4e804" -} -func (*WantPerInterfaceSimpleStatsReply) GetMessageType() api.MessageType { - return api.ReplyMessage -} - -// WantInterfaceCombinedStats represents VPP binary API message 'want_interface_combined_stats': -// -// "want_interface_combined_stats", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "client_index" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "u32", -// "enable_disable" -// ], -// [ -// "u32", -// "pid" -// ], -// { -// "crc": "0x476f5a08" -// } -// -type WantInterfaceCombinedStats struct { - EnableDisable uint32 - PID uint32 -} - -func (*WantInterfaceCombinedStats) GetMessageName() string { - return "want_interface_combined_stats" -} -func (*WantInterfaceCombinedStats) GetCrcString() string { - return "476f5a08" -} -func (*WantInterfaceCombinedStats) GetMessageType() api.MessageType { - return api.RequestMessage -} - -// WantInterfaceCombinedStatsReply represents VPP binary API message 'want_interface_combined_stats_reply': -// -// "want_interface_combined_stats_reply", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "i32", -// "retval" -// ], -// { -// "crc": "0xe8d4e804" -// } -// -type WantInterfaceCombinedStatsReply struct { - Retval int32 -} - -func (*WantInterfaceCombinedStatsReply) GetMessageName() string { - return "want_interface_combined_stats_reply" -} -func (*WantInterfaceCombinedStatsReply) GetCrcString() string { - return "e8d4e804" -} -func (*WantInterfaceCombinedStatsReply) GetMessageType() api.MessageType { - return api.ReplyMessage -} - -// WantPerInterfaceCombinedStats represents VPP binary API message 'want_per_interface_combined_stats': -// -// "want_per_interface_combined_stats", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "client_index" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "u32", -// "enable_disable" -// ], -// [ -// "u32", -// "pid" -// ], -// [ -// "u32", -// "num" -// ], -// [ -// "u32", -// "sw_ifs", -// 0, -// "num" -// ], -// { -// "crc": "0x729d04f1" -// } -// -type WantPerInterfaceCombinedStats struct { - EnableDisable uint32 - PID uint32 - Num uint32 `struc:"sizeof=SwIfs"` - SwIfs []uint32 -} - -func (*WantPerInterfaceCombinedStats) GetMessageName() string { - return "want_per_interface_combined_stats" -} -func (*WantPerInterfaceCombinedStats) GetCrcString() string { - return "729d04f1" -} -func (*WantPerInterfaceCombinedStats) GetMessageType() api.MessageType { - return api.RequestMessage -} - -// WantPerInterfaceCombinedStatsReply represents VPP binary API message 'want_per_interface_combined_stats_reply': -// -// "want_per_interface_combined_stats_reply", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "i32", -// "retval" -// ], -// { -// "crc": "0xe8d4e804" -// } -// -type WantPerInterfaceCombinedStatsReply struct { - Retval int32 -} - -func (*WantPerInterfaceCombinedStatsReply) GetMessageName() string { - return "want_per_interface_combined_stats_reply" -} -func (*WantPerInterfaceCombinedStatsReply) GetCrcString() string { - return "e8d4e804" -} -func (*WantPerInterfaceCombinedStatsReply) GetMessageType() api.MessageType { - return api.ReplyMessage -} - -// WantIP4FibStats represents VPP binary API message 'want_ip4_fib_stats': -// -// "want_ip4_fib_stats", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "client_index" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "u32", -// "enable_disable" -// ], -// [ -// "u32", -// "pid" -// ], -// { -// "crc": "0x476f5a08" -// } -// -type WantIP4FibStats struct { - EnableDisable uint32 - PID uint32 -} - -func (*WantIP4FibStats) GetMessageName() string { - return "want_ip4_fib_stats" -} -func (*WantIP4FibStats) GetCrcString() string { - return "476f5a08" -} -func (*WantIP4FibStats) GetMessageType() api.MessageType { - return api.RequestMessage -} - -// WantIP4FibStatsReply represents VPP binary API message 'want_ip4_fib_stats_reply': -// -// "want_ip4_fib_stats_reply", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "i32", -// "retval" -// ], -// { -// "crc": "0xe8d4e804" -// } -// -type WantIP4FibStatsReply struct { - Retval int32 -} - -func (*WantIP4FibStatsReply) GetMessageName() string { - return "want_ip4_fib_stats_reply" -} -func (*WantIP4FibStatsReply) GetCrcString() string { - return "e8d4e804" -} -func (*WantIP4FibStatsReply) GetMessageType() api.MessageType { - return api.ReplyMessage -} - -// WantIP6FibStats represents VPP binary API message 'want_ip6_fib_stats': -// -// "want_ip6_fib_stats", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "client_index" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "u32", -// "enable_disable" -// ], -// [ -// "u32", -// "pid" -// ], -// { -// "crc": "0x476f5a08" -// } -// -type WantIP6FibStats struct { - EnableDisable uint32 - PID uint32 -} - -func (*WantIP6FibStats) GetMessageName() string { - return "want_ip6_fib_stats" -} -func (*WantIP6FibStats) GetCrcString() string { - return "476f5a08" -} -func (*WantIP6FibStats) GetMessageType() api.MessageType { - return api.RequestMessage -} - -// WantIP6FibStatsReply represents VPP binary API message 'want_ip6_fib_stats_reply': -// -// "want_ip6_fib_stats_reply", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "i32", -// "retval" -// ], -// { -// "crc": "0xe8d4e804" -// } -// -type WantIP6FibStatsReply struct { - Retval int32 -} - -func (*WantIP6FibStatsReply) GetMessageName() string { - return "want_ip6_fib_stats_reply" -} -func (*WantIP6FibStatsReply) GetCrcString() string { - return "e8d4e804" -} -func (*WantIP6FibStatsReply) GetMessageType() api.MessageType { - return api.ReplyMessage -} - -// WantIP4MfibStats represents VPP binary API message 'want_ip4_mfib_stats': -// -// "want_ip4_mfib_stats", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "client_index" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "u32", -// "enable_disable" -// ], -// [ -// "u32", -// "pid" -// ], -// { -// "crc": "0x476f5a08" -// } -// -type WantIP4MfibStats struct { - EnableDisable uint32 - PID uint32 -} - -func (*WantIP4MfibStats) GetMessageName() string { - return "want_ip4_mfib_stats" -} -func (*WantIP4MfibStats) GetCrcString() string { - return "476f5a08" -} -func (*WantIP4MfibStats) GetMessageType() api.MessageType { - return api.RequestMessage -} - -// WantIP4MfibStatsReply represents VPP binary API message 'want_ip4_mfib_stats_reply': -// -// "want_ip4_mfib_stats_reply", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "i32", -// "retval" -// ], -// { -// "crc": "0xe8d4e804" -// } -// -type WantIP4MfibStatsReply struct { - Retval int32 -} - -func (*WantIP4MfibStatsReply) GetMessageName() string { - return "want_ip4_mfib_stats_reply" -} -func (*WantIP4MfibStatsReply) GetCrcString() string { - return "e8d4e804" -} -func (*WantIP4MfibStatsReply) GetMessageType() api.MessageType { - return api.ReplyMessage -} - -// WantIP6MfibStats represents VPP binary API message 'want_ip6_mfib_stats': -// -// "want_ip6_mfib_stats", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "client_index" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "u32", -// "enable_disable" -// ], -// [ -// "u32", -// "pid" -// ], -// { -// "crc": "0x476f5a08" -// } -// -type WantIP6MfibStats struct { - EnableDisable uint32 - PID uint32 -} - -func (*WantIP6MfibStats) GetMessageName() string { - return "want_ip6_mfib_stats" -} -func (*WantIP6MfibStats) GetCrcString() string { - return "476f5a08" -} -func (*WantIP6MfibStats) GetMessageType() api.MessageType { - return api.RequestMessage -} - -// WantIP6MfibStatsReply represents VPP binary API message 'want_ip6_mfib_stats_reply': -// -// "want_ip6_mfib_stats_reply", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "i32", -// "retval" -// ], -// { -// "crc": "0xe8d4e804" -// } -// -type WantIP6MfibStatsReply struct { - Retval int32 -} - -func (*WantIP6MfibStatsReply) GetMessageName() string { - return "want_ip6_mfib_stats_reply" -} -func (*WantIP6MfibStatsReply) GetCrcString() string { - return "e8d4e804" -} -func (*WantIP6MfibStatsReply) GetMessageType() api.MessageType { - return api.ReplyMessage -} - -// WantIP4NbrStats represents VPP binary API message 'want_ip4_nbr_stats': -// -// "want_ip4_nbr_stats", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "client_index" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "u32", -// "enable_disable" -// ], -// [ -// "u32", -// "pid" -// ], -// { -// "crc": "0x476f5a08" -// } -// -type WantIP4NbrStats struct { - EnableDisable uint32 - PID uint32 -} - -func (*WantIP4NbrStats) GetMessageName() string { - return "want_ip4_nbr_stats" -} -func (*WantIP4NbrStats) GetCrcString() string { - return "476f5a08" -} -func (*WantIP4NbrStats) GetMessageType() api.MessageType { - return api.RequestMessage -} - -// WantIP4NbrStatsReply represents VPP binary API message 'want_ip4_nbr_stats_reply': -// -// "want_ip4_nbr_stats_reply", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "i32", -// "retval" -// ], -// { -// "crc": "0xe8d4e804" -// } -// -type WantIP4NbrStatsReply struct { - Retval int32 -} - -func (*WantIP4NbrStatsReply) GetMessageName() string { - return "want_ip4_nbr_stats_reply" -} -func (*WantIP4NbrStatsReply) GetCrcString() string { - return "e8d4e804" -} -func (*WantIP4NbrStatsReply) GetMessageType() api.MessageType { - return api.ReplyMessage -} - -// WantIP6NbrStats represents VPP binary API message 'want_ip6_nbr_stats': -// -// "want_ip6_nbr_stats", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "client_index" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "u32", -// "enable_disable" -// ], -// [ -// "u32", -// "pid" -// ], -// { -// "crc": "0x476f5a08" -// } -// -type WantIP6NbrStats struct { - EnableDisable uint32 - PID uint32 -} - -func (*WantIP6NbrStats) GetMessageName() string { - return "want_ip6_nbr_stats" -} -func (*WantIP6NbrStats) GetCrcString() string { - return "476f5a08" -} -func (*WantIP6NbrStats) GetMessageType() api.MessageType { - return api.RequestMessage -} - -// WantIP6NbrStatsReply represents VPP binary API message 'want_ip6_nbr_stats_reply': -// -// "want_ip6_nbr_stats_reply", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "i32", -// "retval" -// ], -// { -// "crc": "0xe8d4e804" -// } -// -type WantIP6NbrStatsReply struct { - Retval int32 -} - -func (*WantIP6NbrStatsReply) GetMessageName() string { - return "want_ip6_nbr_stats_reply" -} -func (*WantIP6NbrStatsReply) GetCrcString() string { - return "e8d4e804" -} -func (*WantIP6NbrStatsReply) GetMessageType() api.MessageType { - return api.ReplyMessage -} - -// VnetIP4FibCounters represents VPP binary API message 'vnet_ip4_fib_counters': -// -// "vnet_ip4_fib_counters", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "vrf_id" -// ], -// [ -// "u32", -// "count" -// ], -// [ -// "vl_api_ip4_fib_counter_t", -// "c", -// 0, -// "count" -// ], -// { -// "crc": "0x57e3feec" -// } -// -type VnetIP4FibCounters struct { - VrfID uint32 - Count uint32 `struc:"sizeof=C"` - C []IP4FibCounter -} - -func (*VnetIP4FibCounters) GetMessageName() string { - return "vnet_ip4_fib_counters" -} -func (*VnetIP4FibCounters) GetCrcString() string { - return "57e3feec" -} -func (*VnetIP4FibCounters) GetMessageType() api.MessageType { - return api.OtherMessage -} - -// VnetIP4MfibCounters represents VPP binary API message 'vnet_ip4_mfib_counters': -// -// "vnet_ip4_mfib_counters", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "vrf_id" -// ], -// [ -// "u32", -// "count" -// ], -// [ -// "vl_api_ip4_mfib_counter_t", -// "c", -// 0, -// "count" -// ], -// { -// "crc": "0x946eb588" -// } -// -type VnetIP4MfibCounters struct { - VrfID uint32 - Count uint32 `struc:"sizeof=C"` - C []IP4MfibCounter -} - -func (*VnetIP4MfibCounters) GetMessageName() string { - return "vnet_ip4_mfib_counters" -} -func (*VnetIP4MfibCounters) GetCrcString() string { - return "946eb588" -} -func (*VnetIP4MfibCounters) GetMessageType() api.MessageType { - return api.OtherMessage -} - -// VnetIP4NbrCounters represents VPP binary API message 'vnet_ip4_nbr_counters': -// -// "vnet_ip4_nbr_counters", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "count" -// ], -// [ -// "u32", -// "sw_if_index" -// ], -// [ -// "u8", -// "begin" -// ], -// [ -// "vl_api_ip4_nbr_counter_t", -// "c", -// 0, -// "count" -// ], -// { -// "crc": "0x214c4811" -// } -// -type VnetIP4NbrCounters struct { - Count uint32 `struc:"sizeof=C"` - SwIfIndex uint32 - Begin uint8 - C []IP4NbrCounter -} - -func (*VnetIP4NbrCounters) GetMessageName() string { - return "vnet_ip4_nbr_counters" -} -func (*VnetIP4NbrCounters) GetCrcString() string { - return "214c4811" -} -func (*VnetIP4NbrCounters) GetMessageType() api.MessageType { - return api.OtherMessage -} - -// VnetIP6FibCounters represents VPP binary API message 'vnet_ip6_fib_counters': -// -// "vnet_ip6_fib_counters", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "vrf_id" -// ], -// [ -// "u32", -// "count" -// ], -// [ -// "vl_api_ip6_fib_counter_t", -// "c", -// 0, -// "count" -// ], -// { -// "crc": "0x13aed73d" -// } -// -type VnetIP6FibCounters struct { - VrfID uint32 - Count uint32 `struc:"sizeof=C"` - C []IP6FibCounter -} - -func (*VnetIP6FibCounters) GetMessageName() string { - return "vnet_ip6_fib_counters" -} -func (*VnetIP6FibCounters) GetCrcString() string { - return "13aed73d" -} -func (*VnetIP6FibCounters) GetMessageType() api.MessageType { - return api.OtherMessage -} - -// VnetIP6MfibCounters represents VPP binary API message 'vnet_ip6_mfib_counters': -// -// "vnet_ip6_mfib_counters", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "vrf_id" -// ], -// [ -// "u32", -// "count" -// ], -// [ -// "vl_api_ip6_mfib_counter_t", -// "c", -// 0, -// "count" -// ], -// { -// "crc": "0x65fe1ae3" -// } -// -type VnetIP6MfibCounters struct { - VrfID uint32 - Count uint32 `struc:"sizeof=C"` - C []IP6MfibCounter -} - -func (*VnetIP6MfibCounters) GetMessageName() string { - return "vnet_ip6_mfib_counters" -} -func (*VnetIP6MfibCounters) GetCrcString() string { - return "65fe1ae3" -} -func (*VnetIP6MfibCounters) GetMessageType() api.MessageType { - return api.OtherMessage -} - -// VnetIP6NbrCounters represents VPP binary API message 'vnet_ip6_nbr_counters': -// -// "vnet_ip6_nbr_counters", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "count" -// ], -// [ -// "u32", -// "sw_if_index" -// ], -// [ -// "u8", -// "begin" -// ], -// [ -// "vl_api_ip6_nbr_counter_t", -// "c", -// 0, -// "count" -// ], -// { -// "crc": "0x650161c0" -// } -// -type VnetIP6NbrCounters struct { - Count uint32 `struc:"sizeof=C"` - SwIfIndex uint32 - Begin uint8 - C []IP6NbrCounter -} - -func (*VnetIP6NbrCounters) GetMessageName() string { - return "vnet_ip6_nbr_counters" -} -func (*VnetIP6NbrCounters) GetCrcString() string { - return "650161c0" -} -func (*VnetIP6NbrCounters) GetMessageType() api.MessageType { - return api.OtherMessage -} - -// VnetInterfaceSimpleCounters represents VPP binary API message 'vnet_interface_simple_counters': -// -// "vnet_interface_simple_counters", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u8", -// "vnet_counter_type" -// ], -// [ -// "u32", -// "first_sw_if_index" -// ], -// [ -// "u32", -// "count" -// ], -// [ -// "u64", -// "data", -// 0, -// "count" -// ], -// { -// "crc": "0x9bc4a808" -// } -// -type VnetInterfaceSimpleCounters struct { - VnetCounterType uint8 - FirstSwIfIndex uint32 - Count uint32 `struc:"sizeof=Data"` - Data []uint64 -} - -func (*VnetInterfaceSimpleCounters) GetMessageName() string { - return "vnet_interface_simple_counters" -} -func (*VnetInterfaceSimpleCounters) GetCrcString() string { - return "9bc4a808" -} -func (*VnetInterfaceSimpleCounters) GetMessageType() api.MessageType { - return api.OtherMessage -} - -// VnetInterfaceCombinedCounters represents VPP binary API message 'vnet_interface_combined_counters': -// -// "vnet_interface_combined_counters", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u8", -// "vnet_counter_type" -// ], -// [ -// "u32", -// "first_sw_if_index" -// ], -// [ -// "u32", -// "count" -// ], -// [ -// "vl_api_vlib_counter_t", -// "data", -// 0, -// "count" -// ], -// { -// "crc": "0x2c595002" -// } -// -type VnetInterfaceCombinedCounters struct { - VnetCounterType uint8 - FirstSwIfIndex uint32 - Count uint32 `struc:"sizeof=Data"` - Data []VlibCounter -} - -func (*VnetInterfaceCombinedCounters) GetMessageName() string { - return "vnet_interface_combined_counters" -} -func (*VnetInterfaceCombinedCounters) GetCrcString() string { - return "2c595002" -} -func (*VnetInterfaceCombinedCounters) GetMessageType() api.MessageType { - return api.OtherMessage -} - -// VnetPerInterfaceSimpleCounters represents VPP binary API message 'vnet_per_interface_simple_counters': -// -// "vnet_per_interface_simple_counters", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "count" -// ], -// [ -// "u32", -// "timestamp" -// ], -// [ -// "vl_api_vnet_simple_counter_t", -// "data", -// 0, -// "count" -// ], -// { -// "crc": "0xd1fba9ba" -// } -// -type VnetPerInterfaceSimpleCounters struct { - Count uint32 `struc:"sizeof=Data"` - Timestamp uint32 - Data []VnetSimpleCounter -} - -func (*VnetPerInterfaceSimpleCounters) GetMessageName() string { - return "vnet_per_interface_simple_counters" -} -func (*VnetPerInterfaceSimpleCounters) GetCrcString() string { - return "d1fba9ba" -} -func (*VnetPerInterfaceSimpleCounters) GetMessageType() api.MessageType { - return api.OtherMessage -} - -// VnetPerInterfaceCombinedCounters represents VPP binary API message 'vnet_per_interface_combined_counters': -// -// "vnet_per_interface_combined_counters", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "count" -// ], -// [ -// "u32", -// "timestamp" -// ], -// [ -// "vl_api_vnet_combined_counter_t", -// "data", -// 0, -// "count" -// ], -// { -// "crc": "0xdc578375" -// } -// -type VnetPerInterfaceCombinedCounters struct { - Count uint32 `struc:"sizeof=Data"` - Timestamp uint32 - Data []VnetCombinedCounter -} - -func (*VnetPerInterfaceCombinedCounters) GetMessageName() string { - return "vnet_per_interface_combined_counters" -} -func (*VnetPerInterfaceCombinedCounters) GetCrcString() string { - return "dc578375" -} -func (*VnetPerInterfaceCombinedCounters) GetMessageType() api.MessageType { - return api.OtherMessage -} - -// VnetGetSummaryStats represents VPP binary API message 'vnet_get_summary_stats': -// -// "vnet_get_summary_stats", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "client_index" -// ], -// [ -// "u32", -// "context" -// ], -// { -// "crc": "0x51077d14" -// } -// -type VnetGetSummaryStats struct{} - -func (*VnetGetSummaryStats) GetMessageName() string { - return "vnet_get_summary_stats" -} -func (*VnetGetSummaryStats) GetCrcString() string { - return "51077d14" -} -func (*VnetGetSummaryStats) GetMessageType() api.MessageType { - return api.RequestMessage -} - -// VnetGetSummaryStatsReply represents VPP binary API message 'vnet_get_summary_stats_reply': -// -// "vnet_get_summary_stats_reply", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "i32", -// "retval" -// ], -// [ -// "u64", -// "total_pkts", -// 8 -// ], -// [ -// "u64", -// "total_bytes", -// 8 -// ], -// [ -// "f64", -// "vector_rate" -// ], -// { -// "crc": "0x82b5e46c" -// } -// -type VnetGetSummaryStatsReply struct { - Retval int32 - TotalPkts []uint64 `struc:"[8]uint64"` - TotalBytes []uint64 `struc:"[8]uint64"` - VectorRate float64 -} - -func (*VnetGetSummaryStatsReply) GetMessageName() string { - return "vnet_get_summary_stats_reply" -} -func (*VnetGetSummaryStatsReply) GetCrcString() string { - return "82b5e46c" -} -func (*VnetGetSummaryStatsReply) GetMessageType() api.MessageType { - return api.ReplyMessage -} - -// StatsGetPollerDelay represents VPP binary API message 'stats_get_poller_delay': -// -// "stats_get_poller_delay", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "client_index" -// ], -// [ -// "u32", -// "context" -// ], -// { -// "crc": "0x51077d14" -// } -// -type StatsGetPollerDelay struct{} - -func (*StatsGetPollerDelay) GetMessageName() string { - return "stats_get_poller_delay" -} -func (*StatsGetPollerDelay) GetCrcString() string { - return "51077d14" -} -func (*StatsGetPollerDelay) GetMessageType() api.MessageType { - return api.RequestMessage -} - -// StatsGetPollerDelayReply represents VPP binary API message 'stats_get_poller_delay_reply': -// -// "stats_get_poller_delay_reply", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "i32", -// "retval" -// ], -// [ -// "u32", -// "delay" -// ], -// { -// "crc": "0x8c445a33" -// } -// -type StatsGetPollerDelayReply struct { - Retval int32 - Delay uint32 -} - -func (*StatsGetPollerDelayReply) GetMessageName() string { - return "stats_get_poller_delay_reply" -} -func (*StatsGetPollerDelayReply) GetCrcString() string { - return "8c445a33" -} -func (*StatsGetPollerDelayReply) GetMessageType() api.MessageType { - return api.ReplyMessage -} - -// WantUDPEncapStats represents VPP binary API message 'want_udp_encap_stats': -// -// "want_udp_encap_stats", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "client_index" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "u32", -// "enable" -// ], -// [ -// "u32", -// "pid" -// ], -// { -// "crc": "0xcfaccc1f" -// } -// -type WantUDPEncapStats struct { - Enable uint32 - PID uint32 -} - -func (*WantUDPEncapStats) GetMessageName() string { - return "want_udp_encap_stats" -} -func (*WantUDPEncapStats) GetCrcString() string { - return "cfaccc1f" -} -func (*WantUDPEncapStats) GetMessageType() api.MessageType { - return api.RequestMessage -} - -// WantUDPEncapStatsReply represents VPP binary API message 'want_udp_encap_stats_reply': -// -// "want_udp_encap_stats_reply", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "i32", -// "retval" -// ], -// { -// "crc": "0xe8d4e804" -// } -// -type WantUDPEncapStatsReply struct { - Retval int32 -} - -func (*WantUDPEncapStatsReply) GetMessageName() string { - return "want_udp_encap_stats_reply" -} -func (*WantUDPEncapStatsReply) GetCrcString() string { - return "e8d4e804" -} -func (*WantUDPEncapStatsReply) GetMessageType() api.MessageType { - return api.ReplyMessage -} - -// VnetUDPEncapCounters represents VPP binary API message 'vnet_udp_encap_counters': -// -// "vnet_udp_encap_counters", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "timestamp" -// ], -// [ -// "u32", -// "count" -// ], -// [ -// "vl_api_udp_encap_counter_t", -// "c", -// 0, -// "count" -// ], -// { -// "crc": "0x1ab5e649" -// } -// -type VnetUDPEncapCounters struct { - Timestamp uint32 - Count uint32 `struc:"sizeof=C"` - C []UDPEncapCounter -} - -func (*VnetUDPEncapCounters) GetMessageName() string { - return "vnet_udp_encap_counters" -} -func (*VnetUDPEncapCounters) GetCrcString() string { - return "1ab5e649" -} -func (*VnetUDPEncapCounters) GetMessageType() api.MessageType { - return api.OtherMessage -} - -// WantBierNeighborStats represents VPP binary API message 'want_bier_neighbor_stats': -// -// "want_bier_neighbor_stats", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "client_index" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "u32", -// "enable" -// ], -// [ -// "u32", -// "pid" -// ], -// { -// "crc": "0xcfaccc1f" -// } -// -type WantBierNeighborStats struct { - Enable uint32 - PID uint32 -} - -func (*WantBierNeighborStats) GetMessageName() string { - return "want_bier_neighbor_stats" -} -func (*WantBierNeighborStats) GetCrcString() string { - return "cfaccc1f" -} -func (*WantBierNeighborStats) GetMessageType() api.MessageType { - return api.RequestMessage -} - -// WantBierNeighborStatsReply represents VPP binary API message 'want_bier_neighbor_stats_reply': -// -// "want_bier_neighbor_stats_reply", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "context" -// ], -// [ -// "i32", -// "retval" -// ], -// { -// "crc": "0xe8d4e804" -// } -// -type WantBierNeighborStatsReply struct { - Retval int32 -} - -func (*WantBierNeighborStatsReply) GetMessageName() string { - return "want_bier_neighbor_stats_reply" -} -func (*WantBierNeighborStatsReply) GetCrcString() string { - return "e8d4e804" -} -func (*WantBierNeighborStatsReply) GetMessageType() api.MessageType { - return api.ReplyMessage -} - -// VnetBierNeighborCounters represents VPP binary API message 'vnet_bier_neighbor_counters': -// -// "vnet_bier_neighbor_counters", -// [ -// "u16", -// "_vl_msg_id" -// ], -// [ -// "u32", -// "timestamp" -// ], -// [ -// "u32", -// "count" -// ], -// [ -// "vl_api_bier_neighbor_counter_t", -// "c", -// 0, -// "count" -// ], -// { -// "crc": "0xee0481ce" -// } -// -type VnetBierNeighborCounters struct { - Timestamp uint32 - Count uint32 `struc:"sizeof=C"` - C []BierNeighborCounter -} - -func (*VnetBierNeighborCounters) GetMessageName() string { - return "vnet_bier_neighbor_counters" -} -func (*VnetBierNeighborCounters) GetCrcString() string { - return "ee0481ce" -} -func (*VnetBierNeighborCounters) GetMessageType() api.MessageType { - return api.OtherMessage -} - -func init() { - api.RegisterMessage((*WantStats)(nil), "stats.WantStats") - api.RegisterMessage((*WantStatsReply)(nil), "stats.WantStatsReply") - api.RegisterMessage((*WantInterfaceSimpleStats)(nil), "stats.WantInterfaceSimpleStats") - api.RegisterMessage((*WantInterfaceSimpleStatsReply)(nil), "stats.WantInterfaceSimpleStatsReply") - api.RegisterMessage((*WantPerInterfaceSimpleStats)(nil), "stats.WantPerInterfaceSimpleStats") - api.RegisterMessage((*WantPerInterfaceSimpleStatsReply)(nil), "stats.WantPerInterfaceSimpleStatsReply") - api.RegisterMessage((*WantInterfaceCombinedStats)(nil), "stats.WantInterfaceCombinedStats") - api.RegisterMessage((*WantInterfaceCombinedStatsReply)(nil), "stats.WantInterfaceCombinedStatsReply") - api.RegisterMessage((*WantPerInterfaceCombinedStats)(nil), "stats.WantPerInterfaceCombinedStats") - api.RegisterMessage((*WantPerInterfaceCombinedStatsReply)(nil), "stats.WantPerInterfaceCombinedStatsReply") - api.RegisterMessage((*WantIP4FibStats)(nil), "stats.WantIP4FibStats") - api.RegisterMessage((*WantIP4FibStatsReply)(nil), "stats.WantIP4FibStatsReply") - api.RegisterMessage((*WantIP6FibStats)(nil), "stats.WantIP6FibStats") - api.RegisterMessage((*WantIP6FibStatsReply)(nil), "stats.WantIP6FibStatsReply") - api.RegisterMessage((*WantIP4MfibStats)(nil), "stats.WantIP4MfibStats") - api.RegisterMessage((*WantIP4MfibStatsReply)(nil), "stats.WantIP4MfibStatsReply") - api.RegisterMessage((*WantIP6MfibStats)(nil), "stats.WantIP6MfibStats") - api.RegisterMessage((*WantIP6MfibStatsReply)(nil), "stats.WantIP6MfibStatsReply") - api.RegisterMessage((*WantIP4NbrStats)(nil), "stats.WantIP4NbrStats") - api.RegisterMessage((*WantIP4NbrStatsReply)(nil), "stats.WantIP4NbrStatsReply") - api.RegisterMessage((*WantIP6NbrStats)(nil), "stats.WantIP6NbrStats") - api.RegisterMessage((*WantIP6NbrStatsReply)(nil), "stats.WantIP6NbrStatsReply") - api.RegisterMessage((*VnetIP4FibCounters)(nil), "stats.VnetIP4FibCounters") - api.RegisterMessage((*VnetIP4MfibCounters)(nil), "stats.VnetIP4MfibCounters") - api.RegisterMessage((*VnetIP4NbrCounters)(nil), "stats.VnetIP4NbrCounters") - api.RegisterMessage((*VnetIP6FibCounters)(nil), "stats.VnetIP6FibCounters") - api.RegisterMessage((*VnetIP6MfibCounters)(nil), "stats.VnetIP6MfibCounters") - api.RegisterMessage((*VnetIP6NbrCounters)(nil), "stats.VnetIP6NbrCounters") - api.RegisterMessage((*VnetInterfaceSimpleCounters)(nil), "stats.VnetInterfaceSimpleCounters") - api.RegisterMessage((*VnetInterfaceCombinedCounters)(nil), "stats.VnetInterfaceCombinedCounters") - api.RegisterMessage((*VnetPerInterfaceSimpleCounters)(nil), "stats.VnetPerInterfaceSimpleCounters") - api.RegisterMessage((*VnetPerInterfaceCombinedCounters)(nil), "stats.VnetPerInterfaceCombinedCounters") - api.RegisterMessage((*VnetGetSummaryStats)(nil), "stats.VnetGetSummaryStats") - api.RegisterMessage((*VnetGetSummaryStatsReply)(nil), "stats.VnetGetSummaryStatsReply") - api.RegisterMessage((*StatsGetPollerDelay)(nil), "stats.StatsGetPollerDelay") - api.RegisterMessage((*StatsGetPollerDelayReply)(nil), "stats.StatsGetPollerDelayReply") - api.RegisterMessage((*WantUDPEncapStats)(nil), "stats.WantUDPEncapStats") - api.RegisterMessage((*WantUDPEncapStatsReply)(nil), "stats.WantUDPEncapStatsReply") - api.RegisterMessage((*VnetUDPEncapCounters)(nil), "stats.VnetUDPEncapCounters") - api.RegisterMessage((*WantBierNeighborStats)(nil), "stats.WantBierNeighborStats") - api.RegisterMessage((*WantBierNeighborStatsReply)(nil), "stats.WantBierNeighborStatsReply") - api.RegisterMessage((*VnetBierNeighborCounters)(nil), "stats.VnetBierNeighborCounters") -} diff --git a/examples/bin_api/vpe.api.json b/examples/bin_api/vpe.api.json index edefd20..cc5ddee 100644 --- a/examples/bin_api/vpe.api.json +++ b/examples/bin_api/vpe.api.json @@ -81,17 +81,11 @@ "context" ], [ - "u32", - "length" - ], - [ - "u8", - "cmd", - 0, - "length" + "string", + "cmd" ], { - "crc": "0x74e00a49" + "crc": "0xb1ad59b3" } ], [ @@ -131,17 +125,11 @@ "retval" ], [ - "u32", - "length" - ], - [ - "u8", - "reply", - 0, - "length" + "string", + "reply" ], { - "crc": "0x1f22bbb8" + "crc": "0x6d3c80a4" } ], [ @@ -272,27 +260,23 @@ "retval" ], [ - "u8", - "program", - 32 + "string", + "program" ], [ - "u8", - "version", - 32 + "string", + "version" ], [ - "u8", - "build_date", - 32 + "string", + "build_date" ], [ - "u8", - "build_directory", - 256 + "string", + "build_directory" ], { - "crc": "0x8b5a13b4" + "crc": "0xb9bcf6df" } ], [ @@ -432,7 +416,7 @@ } ] ], - "vl_api_version": "0x3ce489e", + "vl_api_version": "0x2cc8d629", "unions": [], "services": { "cli_inband": { diff --git a/examples/bin_api/vpe/vpe.ba.go b/examples/bin_api/vpe/vpe.ba.go index 48925ac..e0d5f97 100644 --- a/examples/bin_api/vpe/vpe.ba.go +++ b/examples/bin_api/vpe/vpe.ba.go @@ -219,29 +219,23 @@ func (*Cli) GetMessageType() api.MessageType { // "context" // ], // [ -// "u32", -// "length" -// ], -// [ -// "u8", -// "cmd", -// 0, -// "length" +// "string", +// "cmd" // ], // { -// "crc": "0x74e00a49" +// "crc": "0xb1ad59b3" // } // type CliInband struct { - Length uint32 `struc:"sizeof=Cmd"` - Cmd []byte + XXX_CmdLen uint32 `struc:"sizeof=Cmd"` + Cmd string } func (*CliInband) GetMessageName() string { return "cli_inband" } func (*CliInband) GetCrcString() string { - return "74e00a49" + return "b1ad59b3" } func (*CliInband) GetMessageType() api.MessageType { return api.RequestMessage @@ -301,30 +295,24 @@ func (*CliReply) GetMessageType() api.MessageType { // "retval" // ], // [ -// "u32", -// "length" -// ], -// [ -// "u8", -// "reply", -// 0, -// "length" +// "string", +// "reply" // ], // { -// "crc": "0x1f22bbb8" +// "crc": "0x6d3c80a4" // } // type CliInbandReply struct { - Retval int32 - Length uint32 `struc:"sizeof=Reply"` - Reply []byte + Retval int32 + XXX_ReplyLen uint32 `struc:"sizeof=Reply"` + Reply string } func (*CliInbandReply) GetMessageName() string { return "cli_inband_reply" } func (*CliInbandReply) GetCrcString() string { - return "1f22bbb8" + return "6d3c80a4" } func (*CliInbandReply) GetMessageType() api.MessageType { return api.ReplyMessage @@ -535,42 +523,42 @@ func (*ShowVersion) GetMessageType() api.MessageType { // "retval" // ], // [ -// "u8", -// "program", -// 32 +// "string", +// "program" // ], // [ -// "u8", -// "version", -// 32 +// "string", +// "version" // ], // [ -// "u8", -// "build_date", -// 32 +// "string", +// "build_date" // ], // [ -// "u8", -// "build_directory", -// 256 +// "string", +// "build_directory" // ], // { -// "crc": "0x8b5a13b4" +// "crc": "0xb9bcf6df" // } // type ShowVersionReply struct { - Retval int32 - Program []byte `struc:"[32]byte"` - Version []byte `struc:"[32]byte"` - BuildDate []byte `struc:"[32]byte"` - BuildDirectory []byte `struc:"[256]byte"` + Retval int32 + XXX_ProgramLen uint32 `struc:"sizeof=Program"` + Program string + XXX_VersionLen uint32 `struc:"sizeof=Version"` + Version string + XXX_BuildDateLen uint32 `struc:"sizeof=BuildDate"` + BuildDate string + XXX_BuildDirectoryLen uint32 `struc:"sizeof=BuildDirectory"` + BuildDirectory string } func (*ShowVersionReply) GetMessageName() string { return "show_version_reply" } func (*ShowVersionReply) GetCrcString() string { - return "8b5a13b4" + return "b9bcf6df" } func (*ShowVersionReply) GetMessageType() api.MessageType { return api.ReplyMessage diff --git a/examples/cmd/stats-client/stats_client.go b/examples/cmd/stats-client/stats_client.go deleted file mode 100644 index 7a2c313..0000000 --- a/examples/cmd/stats-client/stats_client.go +++ /dev/null @@ -1,165 +0,0 @@ -// Copyright (c) 2017 Cisco and/or its affiliates. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at: -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Binary stats-client is an example VPP management application that exercises the -// govpp API for interface counters together with asynchronous connection to VPP. -package main - -import ( - "fmt" - "log" - "os" - "os/signal" - - "git.fd.io/govpp.git" - "git.fd.io/govpp.git/api" - "git.fd.io/govpp.git/core" - "git.fd.io/govpp.git/examples/bin_api/stats" -) - -/* - - IMPORTANT NOTICE! - - The binary API module stats used in this example will be deprecated in VPP 19.01. - VPP's new stats API should be used, you can find basic usage of new stats API in example stats-api. - -*/ - -func main() { - fmt.Println("Starting stats VPP client..") - - // async connect to VPP - conn, statCh, err := govpp.AsyncConnect("") - if err != nil { - log.Fatalln("Error:", err) - } - defer conn.Disconnect() - - // create an API channel that will be used in the examples - ch, err := conn.NewAPIChannel() - if err != nil { - log.Fatalln("Error:", err) - } - defer ch.Close() - - // create channel for Interrupt signal - sigChan := make(chan os.Signal, 1) - signal.Notify(sigChan, os.Interrupt) - - var notifChan chan api.Message - var simpleSub api.SubscriptionCtx - var combinedSub api.SubscriptionCtx - - // loop until Interrupt signal is received -loop: - for { - select { - case connEvent := <-statCh: - // VPP connection state change - switch connEvent.State { - case core.Connected: - fmt.Println("VPP connected.") - if notifChan == nil { - simpleSub, combinedSub, notifChan = subscribeNotifications(ch) - } - requestStatistics(ch) - - case core.Disconnected: - fmt.Println("VPP disconnected.") - } - - case msg := <-notifChan: - switch notif := msg.(type) { - case *stats.VnetInterfaceSimpleCounters: - // simple counter notification received - processSimpleCounters(notif) - case *stats.VnetInterfaceCombinedCounters: - // combined counter notification received - processCombinedCounters(notif) - default: - fmt.Println("Ignoring unknown VPP notification") - } - - case <-sigChan: - // interrupt received - fmt.Println("Interrupt received, exiting.") - break loop - } - } - - simpleSub.Unsubscribe() - combinedSub.Unsubscribe() -} - -// subscribeNotifications subscribes for interface counters notifications. -func subscribeNotifications(ch api.Channel) (api.SubscriptionCtx, api.SubscriptionCtx, chan api.Message) { - notifChan := make(chan api.Message, 100) - - simpleSub, err := ch.SubscribeNotification(notifChan, &stats.VnetInterfaceSimpleCounters{}) - if err != nil { - panic(err) - } - combinedSub, err := ch.SubscribeNotification(notifChan, &stats.VnetInterfaceCombinedCounters{}) - if err != nil { - panic(err) - } - - return simpleSub, combinedSub, notifChan -} - -// requestStatistics requests interface counters notifications from VPP. -func requestStatistics(ch api.Channel) { - if err := ch.SendRequest(&stats.WantStats{ - PID: uint32(os.Getpid()), - EnableDisable: 1, - }).ReceiveReply(&stats.WantStatsReply{}); err != nil { - panic(err) - } -} - -// processSimpleCounters processes simple counters received from VPP. -func processSimpleCounters(counters *stats.VnetInterfaceSimpleCounters) { - fmt.Printf("SimpleCounters: %+v\n", counters) - - counterNames := []string{ - "Drop", "Punt", - "IPv4", "IPv6", - "RxNoBuf", "RxMiss", - "RxError", "TxError", - "MPLS", - } - - for i := uint32(0); i < counters.Count; i++ { - fmt.Printf("Interface '%d': %s = %d\n", - counters.FirstSwIfIndex+i, counterNames[counters.VnetCounterType], counters.Data[i]) - } -} - -// processCombinedCounters processes combined counters received from VPP. -func processCombinedCounters(counters *stats.VnetInterfaceCombinedCounters) { - fmt.Printf("CombinedCounters: %+v\n", counters) - - counterNames := []string{"Rx", "Tx"} - - for i := uint32(0); i < counters.Count; i++ { - if len(counterNames) <= int(counters.VnetCounterType) { - continue - } - fmt.Printf("Interface '%d': %s packets = %d, %s bytes = %d\n", - counters.FirstSwIfIndex+i, - counterNames[counters.VnetCounterType], counters.Data[i].Packets, - counterNames[counters.VnetCounterType], counters.Data[i].Bytes) - } -} diff --git a/glide.lock b/glide.lock deleted file mode 100644 index ba71139..0000000 --- a/glide.lock +++ /dev/null @@ -1,38 +0,0 @@ -hash: 5144a3ebeee4fbfbd9e6d20fbb05f4e79f055848e74ca8911f49de3f673a11ab -updated: 2017-11-28T16:14:28.354432026+01:00 -imports: -- name: github.com/bennyscetbun/jsongo - version: 5240b3f82c6665fe3ccd96bdf5e6f38fe1e1399d -- name: github.com/fsnotify/fsnotify - version: 4da3e2cfbabc9f751898f250b49f2439785783a1 -- name: github.com/google/gopacket - version: 8e484f31b1237166f00e4896d27ddde259540632 - subpackages: - - layers -- name: github.com/lunixbochs/struc - version: ef56447db6a068ad9e52bc54a1aff5fb9e1ed2dd -- name: github.com/pkg/profile - version: 5b67d428864e92711fcbd2f8629456121a56d91f -- name: github.com/sirupsen/logrus - version: 202f25545ea4cf9b191ff7f846df5d87c9382c2b -- name: golang.org/x/sys - version: 9ccfe848b9db8435a24c424abbc07a921adf1df5 - subpackages: - - unix -testImports: -- name: github.com/onsi/gomega - version: 334b8f472b3af5d541c5642701c1e29e2126f486 - subpackages: - - format - - internal/assertion - - internal/asyncassertion - - internal/oraclematcher - - internal/testingtsupport - - matchers - - matchers/support/goraph/bipartitegraph - - matchers/support/goraph/edge - - matchers/support/goraph/node - - matchers/support/goraph/util - - types -- name: gopkg.in/yaml.v2 - version: cd8b52f8269e0feb286dfeef29f8fe4d5b397e0b diff --git a/glide.yaml b/glide.yaml deleted file mode 100644 index 7165dd2..0000000 --- a/glide.yaml +++ /dev/null @@ -1,15 +0,0 @@ -package: git.fd.io/govpp.git -import: -- package: github.com/sirupsen/logrus - version: v1.0.0 -- package: github.com/bennyscetbun/jsongo - version: 5240b3f82c6665fe3ccd96bdf5e6f38fe1e1399d -- package: github.com/lunixbochs/struc - version: ef56447db6a068ad9e52bc54a1aff5fb9e1ed2dd -- package: github.com/fsnotify/fsnotify - version: 4da3e2cfbabc9f751898f250b49f2439785783a1 -- package: github.com/google/gopacket - version: 8e484f31b1237166f00e4896d27ddde259540632 -testImport: -- package: github.com/onsi/gomega - version: v1.1.0 diff --git a/vendor/github.com/fsnotify/fsnotify/.github/ISSUE_TEMPLATE.md b/vendor/github.com/fsnotify/fsnotify/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 4ad1aed..0000000 --- a/vendor/github.com/fsnotify/fsnotify/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,11 +0,0 @@ -Before reporting an issue, please ensure you are using the latest release of fsnotify. - -### Which operating system (GOOS) and version are you using? - -Linux: lsb_release -a -macOS: sw_vers -Windows: systeminfo | findstr /B /C:OS - -### Please describe the issue that occurred. - -### Are you able to reproduce the issue? Please provide steps to reproduce and a code sample if possible. diff --git a/vendor/github.com/fsnotify/fsnotify/.github/PULL_REQUEST_TEMPLATE.md b/vendor/github.com/fsnotify/fsnotify/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 64ddf7c..0000000 --- a/vendor/github.com/fsnotify/fsnotify/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,8 +0,0 @@ -#### What does this pull request do? - - -#### Where should the reviewer start? - - -#### How should this be manually tested? - diff --git a/vendor/github.com/fsnotify/fsnotify/example_test.go b/vendor/github.com/fsnotify/fsnotify/example_test.go deleted file mode 100644 index 700502c..0000000 --- a/vendor/github.com/fsnotify/fsnotify/example_test.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !plan9 - -package fsnotify_test - -import ( - "log" - - "github.com/fsnotify/fsnotify" -) - -func ExampleNewWatcher() { - watcher, err := fsnotify.NewWatcher() - if err != nil { - log.Fatal(err) - } - defer watcher.Close() - - done := make(chan bool) - go func() { - for { - select { - case event := <-watcher.Events: - log.Println("event:", event) - if event.Op&fsnotify.Write == fsnotify.Write { - log.Println("modified file:", event.Name) - } - case err := <-watcher.Errors: - log.Println("error:", err) - } - } - }() - - err = watcher.Add("/tmp/foo") - if err != nil { - log.Fatal(err) - } - <-done -} diff --git a/vendor/github.com/fsnotify/fsnotify/fsnotify_test.go b/vendor/github.com/fsnotify/fsnotify/fsnotify_test.go deleted file mode 100644 index 9d6d72a..0000000 --- a/vendor/github.com/fsnotify/fsnotify/fsnotify_test.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !plan9 - -package fsnotify - -import "testing" - -func TestEventStringWithValue(t *testing.T) { - for opMask, expectedString := range map[Op]string{ - Chmod | Create: `"/usr/someFile": CREATE|CHMOD`, - Rename: `"/usr/someFile": RENAME`, - Remove: `"/usr/someFile": REMOVE`, - Write | Chmod: `"/usr/someFile": WRITE|CHMOD`, - } { - event := Event{Name: "/usr/someFile", Op: opMask} - if event.String() != expectedString { - t.Fatalf("Expected %s, got: %v", expectedString, event.String()) - } - - } -} - -func TestEventOpStringWithValue(t *testing.T) { - expectedOpString := "WRITE|CHMOD" - event := Event{Name: "someFile", Op: Write | Chmod} - if event.Op.String() != expectedOpString { - t.Fatalf("Expected %s, got: %v", expectedOpString, event.Op.String()) - } -} - -func TestEventOpStringWithNoValue(t *testing.T) { - expectedOpString := "" - event := Event{Name: "testFile", Op: 0} - if event.Op.String() != expectedOpString { - t.Fatalf("Expected %s, got: %v", expectedOpString, event.Op.String()) - } -} diff --git a/vendor/github.com/fsnotify/fsnotify/inotify_poller_test.go b/vendor/github.com/fsnotify/fsnotify/inotify_poller_test.go deleted file mode 100644 index 26623ef..0000000 --- a/vendor/github.com/fsnotify/fsnotify/inotify_poller_test.go +++ /dev/null @@ -1,229 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build linux - -package fsnotify - -import ( - "testing" - "time" - - "golang.org/x/sys/unix" -) - -type testFd [2]int - -func makeTestFd(t *testing.T) testFd { - var tfd testFd - errno := unix.Pipe(tfd[:]) - if errno != nil { - t.Fatalf("Failed to create pipe: %v", errno) - } - return tfd -} - -func (tfd testFd) fd() int { - return tfd[0] -} - -func (tfd testFd) closeWrite(t *testing.T) { - errno := unix.Close(tfd[1]) - if errno != nil { - t.Fatalf("Failed to close write end of pipe: %v", errno) - } -} - -func (tfd testFd) put(t *testing.T) { - buf := make([]byte, 10) - _, errno := unix.Write(tfd[1], buf) - if errno != nil { - t.Fatalf("Failed to write to pipe: %v", errno) - } -} - -func (tfd testFd) get(t *testing.T) { - buf := make([]byte, 10) - _, errno := unix.Read(tfd[0], buf) - if errno != nil { - t.Fatalf("Failed to read from pipe: %v", errno) - } -} - -func (tfd testFd) close() { - unix.Close(tfd[1]) - unix.Close(tfd[0]) -} - -func makePoller(t *testing.T) (testFd, *fdPoller) { - tfd := makeTestFd(t) - poller, err := newFdPoller(tfd.fd()) - if err != nil { - t.Fatalf("Failed to create poller: %v", err) - } - return tfd, poller -} - -func TestPollerWithBadFd(t *testing.T) { - _, err := newFdPoller(-1) - if err != unix.EBADF { - t.Fatalf("Expected EBADF, got: %v", err) - } -} - -func TestPollerWithData(t *testing.T) { - tfd, poller := makePoller(t) - defer tfd.close() - defer poller.close() - - tfd.put(t) - ok, err := poller.wait() - if err != nil { - t.Fatalf("poller failed: %v", err) - } - if !ok { - t.Fatalf("expected poller to return true") - } - tfd.get(t) -} - -func TestPollerWithWakeup(t *testing.T) { - tfd, poller := makePoller(t) - defer tfd.close() - defer poller.close() - - err := poller.wake() - if err != nil { - t.Fatalf("wake failed: %v", err) - } - ok, err := poller.wait() - if err != nil { - t.Fatalf("poller failed: %v", err) - } - if ok { - t.Fatalf("expected poller to return false") - } -} - -func TestPollerWithClose(t *testing.T) { - tfd, poller := makePoller(t) - defer tfd.close() - defer poller.close() - - tfd.closeWrite(t) - ok, err := poller.wait() - if err != nil { - t.Fatalf("poller failed: %v", err) - } - if !ok { - t.Fatalf("expected poller to return true") - } -} - -func TestPollerWithWakeupAndData(t *testing.T) { - tfd, poller := makePoller(t) - defer tfd.close() - defer poller.close() - - tfd.put(t) - err := poller.wake() - if err != nil { - t.Fatalf("wake failed: %v", err) - } - - // both data and wakeup - ok, err := poller.wait() - if err != nil { - t.Fatalf("poller failed: %v", err) - } - if !ok { - t.Fatalf("expected poller to return true") - } - - // data is still in the buffer, wakeup is cleared - ok, err = poller.wait() - if err != nil { - t.Fatalf("poller failed: %v", err) - } - if !ok { - t.Fatalf("expected poller to return true") - } - - tfd.get(t) - // data is gone, only wakeup now - err = poller.wake() - if err != nil { - t.Fatalf("wake failed: %v", err) - } - ok, err = poller.wait() - if err != nil { - t.Fatalf("poller failed: %v", err) - } - if ok { - t.Fatalf("expected poller to return false") - } -} - -func TestPollerConcurrent(t *testing.T) { - tfd, poller := makePoller(t) - defer tfd.close() - defer poller.close() - - oks := make(chan bool) - live := make(chan bool) - defer close(live) - go func() { - defer close(oks) - for { - ok, err := poller.wait() - if err != nil { - t.Fatalf("poller failed: %v", err) - } - oks <- ok - if !<-live { - return - } - } - }() - - // Try a write - select { - case <-time.After(50 * time.Millisecond): - case <-oks: - t.Fatalf("poller did not wait") - } - tfd.put(t) - if !<-oks { - t.Fatalf("expected true") - } - tfd.get(t) - live <- true - - // Try a wakeup - select { - case <-time.After(50 * time.Millisecond): - case <-oks: - t.Fatalf("poller did not wait") - } - err := poller.wake() - if err != nil { - t.Fatalf("wake failed: %v", err) - } - if <-oks { - t.Fatalf("expected false") - } - live <- true - - // Try a close - select { - case <-time.After(50 * time.Millisecond): - case <-oks: - t.Fatalf("poller did not wait") - } - tfd.closeWrite(t) - if !<-oks { - t.Fatalf("expected true") - } - tfd.get(t) -} diff --git a/vendor/github.com/fsnotify/fsnotify/inotify_test.go b/vendor/github.com/fsnotify/fsnotify/inotify_test.go deleted file mode 100644 index 2cc6d93..0000000 --- a/vendor/github.com/fsnotify/fsnotify/inotify_test.go +++ /dev/null @@ -1,449 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build linux - -package fsnotify - -import ( - "fmt" - "os" - "path/filepath" - "strings" - "testing" - "time" -) - -func TestInotifyCloseRightAway(t *testing.T) { - w, err := NewWatcher() - if err != nil { - t.Fatalf("Failed to create watcher") - } - - // Close immediately; it won't even reach the first unix.Read. - w.Close() - - // Wait for the close to complete. - <-time.After(50 * time.Millisecond) - isWatcherReallyClosed(t, w) -} - -func TestInotifyCloseSlightlyLater(t *testing.T) { - w, err := NewWatcher() - if err != nil { - t.Fatalf("Failed to create watcher") - } - - // Wait until readEvents has reached unix.Read, and Close. - <-time.After(50 * time.Millisecond) - w.Close() - - // Wait for the close to complete. - <-time.After(50 * time.Millisecond) - isWatcherReallyClosed(t, w) -} - -func TestInotifyCloseSlightlyLaterWithWatch(t *testing.T) { - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - w, err := NewWatcher() - if err != nil { - t.Fatalf("Failed to create watcher") - } - w.Add(testDir) - - // Wait until readEvents has reached unix.Read, and Close. - <-time.After(50 * time.Millisecond) - w.Close() - - // Wait for the close to complete. - <-time.After(50 * time.Millisecond) - isWatcherReallyClosed(t, w) -} - -func TestInotifyCloseAfterRead(t *testing.T) { - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - w, err := NewWatcher() - if err != nil { - t.Fatalf("Failed to create watcher") - } - - err = w.Add(testDir) - if err != nil { - t.Fatalf("Failed to add .") - } - - // Generate an event. - os.Create(filepath.Join(testDir, "somethingSOMETHINGsomethingSOMETHING")) - - // Wait for readEvents to read the event, then close the watcher. - <-time.After(50 * time.Millisecond) - w.Close() - - // Wait for the close to complete. - <-time.After(50 * time.Millisecond) - isWatcherReallyClosed(t, w) -} - -func isWatcherReallyClosed(t *testing.T, w *Watcher) { - select { - case err, ok := <-w.Errors: - if ok { - t.Fatalf("w.Errors is not closed; readEvents is still alive after closing (error: %v)", err) - } - default: - t.Fatalf("w.Errors would have blocked; readEvents is still alive!") - } - - select { - case _, ok := <-w.Events: - if ok { - t.Fatalf("w.Events is not closed; readEvents is still alive after closing") - } - default: - t.Fatalf("w.Events would have blocked; readEvents is still alive!") - } -} - -func TestInotifyCloseCreate(t *testing.T) { - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - w, err := NewWatcher() - if err != nil { - t.Fatalf("Failed to create watcher: %v", err) - } - defer w.Close() - - err = w.Add(testDir) - if err != nil { - t.Fatalf("Failed to add testDir: %v", err) - } - h, err := os.Create(filepath.Join(testDir, "testfile")) - if err != nil { - t.Fatalf("Failed to create file in testdir: %v", err) - } - h.Close() - select { - case _ = <-w.Events: - case err := <-w.Errors: - t.Fatalf("Error from watcher: %v", err) - case <-time.After(50 * time.Millisecond): - t.Fatalf("Took too long to wait for event") - } - - // At this point, we've received one event, so the goroutine is ready. - // It's also blocking on unix.Read. - // Now we try to swap the file descriptor under its nose. - w.Close() - w, err = NewWatcher() - defer w.Close() - if err != nil { - t.Fatalf("Failed to create second watcher: %v", err) - } - - <-time.After(50 * time.Millisecond) - err = w.Add(testDir) - if err != nil { - t.Fatalf("Error adding testDir again: %v", err) - } -} - -// This test verifies the watcher can keep up with file creations/deletions -// when under load. -func TestInotifyStress(t *testing.T) { - maxNumToCreate := 1000 - - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - testFilePrefix := filepath.Join(testDir, "testfile") - - w, err := NewWatcher() - if err != nil { - t.Fatalf("Failed to create watcher: %v", err) - } - defer w.Close() - - err = w.Add(testDir) - if err != nil { - t.Fatalf("Failed to add testDir: %v", err) - } - - doneChan := make(chan struct{}) - // The buffer ensures that the file generation goroutine is never blocked. - errChan := make(chan error, 2*maxNumToCreate) - - go func() { - for i := 0; i < maxNumToCreate; i++ { - testFile := fmt.Sprintf("%s%d", testFilePrefix, i) - - handle, err := os.Create(testFile) - if err != nil { - errChan <- fmt.Errorf("Create failed: %v", err) - continue - } - - err = handle.Close() - if err != nil { - errChan <- fmt.Errorf("Close failed: %v", err) - continue - } - } - - // If we delete a newly created file too quickly, inotify will skip the - // create event and only send the delete event. - time.Sleep(100 * time.Millisecond) - - for i := 0; i < maxNumToCreate; i++ { - testFile := fmt.Sprintf("%s%d", testFilePrefix, i) - err = os.Remove(testFile) - if err != nil { - errChan <- fmt.Errorf("Remove failed: %v", err) - } - } - - close(doneChan) - }() - - creates := 0 - removes := 0 - - finished := false - after := time.After(10 * time.Second) - for !finished { - select { - case <-after: - t.Fatalf("Not done") - case <-doneChan: - finished = true - case err := <-errChan: - t.Fatalf("Got an error from file creator goroutine: %v", err) - case err := <-w.Errors: - t.Fatalf("Got an error from watcher: %v", err) - case evt := <-w.Events: - if !strings.HasPrefix(evt.Name, testFilePrefix) { - t.Fatalf("Got an event for an unknown file: %s", evt.Name) - } - if evt.Op == Create { - creates++ - } - if evt.Op == Remove { - removes++ - } - } - } - - // Drain remaining events from channels - count := 0 - for count < 10 { - select { - case err := <-errChan: - t.Fatalf("Got an error from file creator goroutine: %v", err) - case err := <-w.Errors: - t.Fatalf("Got an error from watcher: %v", err) - case evt := <-w.Events: - if !strings.HasPrefix(evt.Name, testFilePrefix) { - t.Fatalf("Got an event for an unknown file: %s", evt.Name) - } - if evt.Op == Create { - creates++ - } - if evt.Op == Remove { - removes++ - } - count = 0 - default: - count++ - // Give the watcher chances to fill the channels. - time.Sleep(time.Millisecond) - } - } - - if creates-removes > 1 || creates-removes < -1 { - t.Fatalf("Creates and removes should not be off by more than one: %d creates, %d removes", creates, removes) - } - if creates < 50 { - t.Fatalf("Expected at least 50 creates, got %d", creates) - } -} - -func TestInotifyRemoveTwice(t *testing.T) { - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - testFile := filepath.Join(testDir, "testfile") - - handle, err := os.Create(testFile) - if err != nil { - t.Fatalf("Create failed: %v", err) - } - handle.Close() - - w, err := NewWatcher() - if err != nil { - t.Fatalf("Failed to create watcher: %v", err) - } - defer w.Close() - - err = w.Add(testFile) - if err != nil { - t.Fatalf("Failed to add testFile: %v", err) - } - - err = w.Remove(testFile) - if err != nil { - t.Fatalf("wanted successful remove but got:", err) - } - - err = w.Remove(testFile) - if err == nil { - t.Fatalf("no error on removing invalid file") - } - - w.mu.Lock() - defer w.mu.Unlock() - if len(w.watches) != 0 { - t.Fatalf("Expected watches len is 0, but got: %d, %v", len(w.watches), w.watches) - } - if len(w.paths) != 0 { - t.Fatalf("Expected paths len is 0, but got: %d, %v", len(w.paths), w.paths) - } -} - -func TestInotifyInnerMapLength(t *testing.T) { - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - testFile := filepath.Join(testDir, "testfile") - - handle, err := os.Create(testFile) - if err != nil { - t.Fatalf("Create failed: %v", err) - } - handle.Close() - - w, err := NewWatcher() - if err != nil { - t.Fatalf("Failed to create watcher: %v", err) - } - defer w.Close() - - err = w.Add(testFile) - if err != nil { - t.Fatalf("Failed to add testFile: %v", err) - } - go func() { - for err := range w.Errors { - t.Fatalf("error received: %s", err) - } - }() - - err = os.Remove(testFile) - if err != nil { - t.Fatalf("Failed to remove testFile: %v", err) - } - _ = <-w.Events // consume Remove event - <-time.After(50 * time.Millisecond) // wait IN_IGNORE propagated - - w.mu.Lock() - defer w.mu.Unlock() - if len(w.watches) != 0 { - t.Fatalf("Expected watches len is 0, but got: %d, %v", len(w.watches), w.watches) - } - if len(w.paths) != 0 { - t.Fatalf("Expected paths len is 0, but got: %d, %v", len(w.paths), w.paths) - } -} - -func TestInotifyOverflow(t *testing.T) { - // We need to generate many more events than the - // fs.inotify.max_queued_events sysctl setting. - // We use multiple goroutines (one per directory) - // to speed up file creation. - numDirs := 128 - numFiles := 1024 - - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - w, err := NewWatcher() - if err != nil { - t.Fatalf("Failed to create watcher: %v", err) - } - defer w.Close() - - for dn := 0; dn < numDirs; dn++ { - testSubdir := fmt.Sprintf("%s/%d", testDir, dn) - - err := os.Mkdir(testSubdir, 0777) - if err != nil { - t.Fatalf("Cannot create subdir: %v", err) - } - - err = w.Add(testSubdir) - if err != nil { - t.Fatalf("Failed to add subdir: %v", err) - } - } - - errChan := make(chan error, numDirs*numFiles) - - for dn := 0; dn < numDirs; dn++ { - testSubdir := fmt.Sprintf("%s/%d", testDir, dn) - - go func() { - for fn := 0; fn < numFiles; fn++ { - testFile := fmt.Sprintf("%s/%d", testSubdir, fn) - - handle, err := os.Create(testFile) - if err != nil { - errChan <- fmt.Errorf("Create failed: %v", err) - continue - } - - err = handle.Close() - if err != nil { - errChan <- fmt.Errorf("Close failed: %v", err) - continue - } - } - }() - } - - creates := 0 - overflows := 0 - - after := time.After(10 * time.Second) - for overflows == 0 && creates < numDirs*numFiles { - select { - case <-after: - t.Fatalf("Not done") - case err := <-errChan: - t.Fatalf("Got an error from file creator goroutine: %v", err) - case err := <-w.Errors: - if err == ErrEventOverflow { - overflows++ - } else { - t.Fatalf("Got an error from watcher: %v", err) - } - case evt := <-w.Events: - if !strings.HasPrefix(evt.Name, testDir) { - t.Fatalf("Got an event for an unknown file: %s", evt.Name) - } - if evt.Op == Create { - creates++ - } - } - } - - if creates == numDirs*numFiles { - t.Fatalf("Could not trigger overflow") - } - - if overflows == 0 { - t.Fatalf("No overflow and not enough creates (expected %d, got %d)", - numDirs*numFiles, creates) - } -} diff --git a/vendor/github.com/fsnotify/fsnotify/integration_darwin_test.go b/vendor/github.com/fsnotify/fsnotify/integration_darwin_test.go deleted file mode 100644 index cd6adc2..0000000 --- a/vendor/github.com/fsnotify/fsnotify/integration_darwin_test.go +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package fsnotify - -import ( - "os" - "path/filepath" - "testing" - "time" - - "golang.org/x/sys/unix" -) - -// testExchangedataForWatcher tests the watcher with the exchangedata operation on macOS. -// -// This is widely used for atomic saves on macOS, e.g. TextMate and in Apple's NSDocument. -// -// See https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/exchangedata.2.html -// Also see: https://github.com/textmate/textmate/blob/cd016be29489eba5f3c09b7b70b06da134dda550/Frameworks/io/src/swap_file_data.cc#L20 -func testExchangedataForWatcher(t *testing.T, watchDir bool) { - // Create directory to watch - testDir1 := tempMkdir(t) - - // For the intermediate file - testDir2 := tempMkdir(t) - - defer os.RemoveAll(testDir1) - defer os.RemoveAll(testDir2) - - resolvedFilename := "TestFsnotifyEvents.file" - - // TextMate does: - // - // 1. exchangedata (intermediate, resolved) - // 2. unlink intermediate - // - // Let's try to simulate that: - resolved := filepath.Join(testDir1, resolvedFilename) - intermediate := filepath.Join(testDir2, resolvedFilename+"~") - - // Make sure we create the file before we start watching - createAndSyncFile(t, resolved) - - watcher := newWatcher(t) - - // Test both variants in isolation - if watchDir { - addWatch(t, watcher, testDir1) - } else { - addWatch(t, watcher, resolved) - } - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Errors { - t.Fatalf("error received: %s", err) - } - }() - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Events - var removeReceived counter - var createReceived counter - - done := make(chan bool) - - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(resolved) { - if event.Op&Remove == Remove { - removeReceived.increment() - } - if event.Op&Create == Create { - createReceived.increment() - } - } - t.Logf("event received: %s", event) - } - done <- true - }() - - // Repeat to make sure the watched file/directory "survives" the REMOVE/CREATE loop. - for i := 1; i <= 3; i++ { - // The intermediate file is created in a folder outside the watcher - createAndSyncFile(t, intermediate) - - // 1. Swap - if err := unix.Exchangedata(intermediate, resolved, 0); err != nil { - t.Fatalf("[%d] exchangedata failed: %s", i, err) - } - - time.Sleep(50 * time.Millisecond) - - // 2. Delete the intermediate file - err := os.Remove(intermediate) - - if err != nil { - t.Fatalf("[%d] remove %s failed: %s", i, intermediate, err) - } - - time.Sleep(50 * time.Millisecond) - - } - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - - // The events will be (CHMOD + REMOVE + CREATE) X 2. Let's focus on the last two: - if removeReceived.value() < 3 { - t.Fatal("fsnotify remove events have not been received after 500 ms") - } - - if createReceived.value() < 3 { - t.Fatal("fsnotify create events have not been received after 500 ms") - } - - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(2 * time.Second): - t.Fatal("event stream was not closed after 2 seconds") - } -} - -// TestExchangedataInWatchedDir test exchangedata operation on file in watched dir. -func TestExchangedataInWatchedDir(t *testing.T) { - testExchangedataForWatcher(t, true) -} - -// TestExchangedataInWatchedDir test exchangedata operation on watched file. -func TestExchangedataInWatchedFile(t *testing.T) { - testExchangedataForWatcher(t, false) -} - -func createAndSyncFile(t *testing.T, filepath string) { - f1, err := os.OpenFile(filepath, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating %s failed: %s", filepath, err) - } - f1.Sync() - f1.Close() -} diff --git a/vendor/github.com/fsnotify/fsnotify/integration_test.go b/vendor/github.com/fsnotify/fsnotify/integration_test.go deleted file mode 100644 index 8b7e9d3..0000000 --- a/vendor/github.com/fsnotify/fsnotify/integration_test.go +++ /dev/null @@ -1,1237 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !plan9,!solaris - -package fsnotify - -import ( - "io/ioutil" - "os" - "os/exec" - "path" - "path/filepath" - "runtime" - "sync/atomic" - "testing" - "time" -) - -// An atomic counter -type counter struct { - val int32 -} - -func (c *counter) increment() { - atomic.AddInt32(&c.val, 1) -} - -func (c *counter) value() int32 { - return atomic.LoadInt32(&c.val) -} - -func (c *counter) reset() { - atomic.StoreInt32(&c.val, 0) -} - -// tempMkdir makes a temporary directory -func tempMkdir(t *testing.T) string { - dir, err := ioutil.TempDir("", "fsnotify") - if err != nil { - t.Fatalf("failed to create test directory: %s", err) - } - return dir -} - -// tempMkFile makes a temporary file. -func tempMkFile(t *testing.T, dir string) string { - f, err := ioutil.TempFile(dir, "fsnotify") - if err != nil { - t.Fatalf("failed to create test file: %v", err) - } - defer f.Close() - return f.Name() -} - -// newWatcher initializes an fsnotify Watcher instance. -func newWatcher(t *testing.T) *Watcher { - watcher, err := NewWatcher() - if err != nil { - t.Fatalf("NewWatcher() failed: %s", err) - } - return watcher -} - -// addWatch adds a watch for a directory -func addWatch(t *testing.T, watcher *Watcher, dir string) { - if err := watcher.Add(dir); err != nil { - t.Fatalf("watcher.Add(%q) failed: %s", dir, err) - } -} - -func TestFsnotifyMultipleOperations(t *testing.T) { - watcher := newWatcher(t) - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Errors { - t.Fatalf("error received: %s", err) - } - }() - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - // Create directory that's not watched - testDirToMoveFiles := tempMkdir(t) - defer os.RemoveAll(testDirToMoveFiles) - - testFile := filepath.Join(testDir, "TestFsnotifySeq.testfile") - testFileRenamed := filepath.Join(testDirToMoveFiles, "TestFsnotifySeqRename.testfile") - - addWatch(t, watcher, testDir) - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Events - var createReceived, modifyReceived, deleteReceived, renameReceived counter - done := make(chan bool) - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) { - t.Logf("event received: %s", event) - if event.Op&Remove == Remove { - deleteReceived.increment() - } - if event.Op&Write == Write { - modifyReceived.increment() - } - if event.Op&Create == Create { - createReceived.increment() - } - if event.Op&Rename == Rename { - renameReceived.increment() - } - } else { - t.Logf("unexpected event received: %s", event) - } - } - done <- true - }() - - // Create a file - // This should add at least one event to the fsnotify event queue - var f *os.File - f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - - time.Sleep(time.Millisecond) - f.WriteString("data") - f.Sync() - f.Close() - - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - if err := testRename(testFile, testFileRenamed); err != nil { - t.Fatalf("rename failed: %s", err) - } - - // Modify the file outside of the watched dir - f, err = os.Open(testFileRenamed) - if err != nil { - t.Fatalf("open test renamed file failed: %s", err) - } - f.WriteString("data") - f.Sync() - f.Close() - - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - // Recreate the file that was moved - f, err = os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Close() - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - cReceived := createReceived.value() - if cReceived != 2 { - t.Fatalf("incorrect number of create events received after 500 ms (%d vs %d)", cReceived, 2) - } - mReceived := modifyReceived.value() - if mReceived != 1 { - t.Fatalf("incorrect number of modify events received after 500 ms (%d vs %d)", mReceived, 1) - } - dReceived := deleteReceived.value() - rReceived := renameReceived.value() - if dReceived+rReceived != 1 { - t.Fatalf("incorrect number of rename+delete events received after 500 ms (%d vs %d)", rReceived+dReceived, 1) - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(2 * time.Second): - t.Fatal("event stream was not closed after 2 seconds") - } -} - -func TestFsnotifyMultipleCreates(t *testing.T) { - watcher := newWatcher(t) - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Errors { - t.Fatalf("error received: %s", err) - } - }() - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - testFile := filepath.Join(testDir, "TestFsnotifySeq.testfile") - - addWatch(t, watcher, testDir) - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Events - var createReceived, modifyReceived, deleteReceived counter - done := make(chan bool) - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) { - t.Logf("event received: %s", event) - if event.Op&Remove == Remove { - deleteReceived.increment() - } - if event.Op&Create == Create { - createReceived.increment() - } - if event.Op&Write == Write { - modifyReceived.increment() - } - } else { - t.Logf("unexpected event received: %s", event) - } - } - done <- true - }() - - // Create a file - // This should add at least one event to the fsnotify event queue - var f *os.File - f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - - time.Sleep(time.Millisecond) - f.WriteString("data") - f.Sync() - f.Close() - - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - os.Remove(testFile) - - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - // Recreate the file - f, err = os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Close() - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - // Modify - f, err = os.OpenFile(testFile, os.O_WRONLY, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - - time.Sleep(time.Millisecond) - f.WriteString("data") - f.Sync() - f.Close() - - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - // Modify - f, err = os.OpenFile(testFile, os.O_WRONLY, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - - time.Sleep(time.Millisecond) - f.WriteString("data") - f.Sync() - f.Close() - - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - cReceived := createReceived.value() - if cReceived != 2 { - t.Fatalf("incorrect number of create events received after 500 ms (%d vs %d)", cReceived, 2) - } - mReceived := modifyReceived.value() - if mReceived < 3 { - t.Fatalf("incorrect number of modify events received after 500 ms (%d vs atleast %d)", mReceived, 3) - } - dReceived := deleteReceived.value() - if dReceived != 1 { - t.Fatalf("incorrect number of rename+delete events received after 500 ms (%d vs %d)", dReceived, 1) - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(2 * time.Second): - t.Fatal("event stream was not closed after 2 seconds") - } -} - -func TestFsnotifyDirOnly(t *testing.T) { - watcher := newWatcher(t) - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - // Create a file before watching directory - // This should NOT add any events to the fsnotify event queue - testFileAlreadyExists := filepath.Join(testDir, "TestFsnotifyEventsExisting.testfile") - { - var f *os.File - f, err := os.OpenFile(testFileAlreadyExists, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - f.Close() - } - - addWatch(t, watcher, testDir) - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Errors { - t.Fatalf("error received: %s", err) - } - }() - - testFile := filepath.Join(testDir, "TestFsnotifyDirOnly.testfile") - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Events - var createReceived, modifyReceived, deleteReceived counter - done := make(chan bool) - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) || event.Name == filepath.Clean(testFileAlreadyExists) { - t.Logf("event received: %s", event) - if event.Op&Remove == Remove { - deleteReceived.increment() - } - if event.Op&Write == Write { - modifyReceived.increment() - } - if event.Op&Create == Create { - createReceived.increment() - } - } else { - t.Logf("unexpected event received: %s", event) - } - } - done <- true - }() - - // Create a file - // This should add at least one event to the fsnotify event queue - var f *os.File - f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - - time.Sleep(time.Millisecond) - f.WriteString("data") - f.Sync() - f.Close() - - time.Sleep(50 * time.Millisecond) // give system time to sync write change before delete - - os.Remove(testFile) - os.Remove(testFileAlreadyExists) - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - cReceived := createReceived.value() - if cReceived != 1 { - t.Fatalf("incorrect number of create events received after 500 ms (%d vs %d)", cReceived, 1) - } - mReceived := modifyReceived.value() - if mReceived != 1 { - t.Fatalf("incorrect number of modify events received after 500 ms (%d vs %d)", mReceived, 1) - } - dReceived := deleteReceived.value() - if dReceived != 2 { - t.Fatalf("incorrect number of delete events received after 500 ms (%d vs %d)", dReceived, 2) - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(2 * time.Second): - t.Fatal("event stream was not closed after 2 seconds") - } -} - -func TestFsnotifyDeleteWatchedDir(t *testing.T) { - watcher := newWatcher(t) - defer watcher.Close() - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - // Create a file before watching directory - testFileAlreadyExists := filepath.Join(testDir, "TestFsnotifyEventsExisting.testfile") - { - var f *os.File - f, err := os.OpenFile(testFileAlreadyExists, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - f.Close() - } - - addWatch(t, watcher, testDir) - - // Add a watch for testFile - addWatch(t, watcher, testFileAlreadyExists) - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Errors { - t.Fatalf("error received: %s", err) - } - }() - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Events - var deleteReceived counter - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFileAlreadyExists) { - t.Logf("event received: %s", event) - if event.Op&Remove == Remove { - deleteReceived.increment() - } - } else { - t.Logf("unexpected event received: %s", event) - } - } - }() - - os.RemoveAll(testDir) - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - dReceived := deleteReceived.value() - if dReceived < 2 { - t.Fatalf("did not receive at least %d delete events, received %d after 500 ms", 2, dReceived) - } -} - -func TestFsnotifySubDir(t *testing.T) { - watcher := newWatcher(t) - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - testFile1 := filepath.Join(testDir, "TestFsnotifyFile1.testfile") - testSubDir := filepath.Join(testDir, "sub") - testSubDirFile := filepath.Join(testDir, "sub/TestFsnotifyFile1.testfile") - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Errors { - t.Fatalf("error received: %s", err) - } - }() - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Events - var createReceived, deleteReceived counter - done := make(chan bool) - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testSubDir) || event.Name == filepath.Clean(testFile1) { - t.Logf("event received: %s", event) - if event.Op&Create == Create { - createReceived.increment() - } - if event.Op&Remove == Remove { - deleteReceived.increment() - } - } else { - t.Logf("unexpected event received: %s", event) - } - } - done <- true - }() - - addWatch(t, watcher, testDir) - - // Create sub-directory - if err := os.Mkdir(testSubDir, 0777); err != nil { - t.Fatalf("failed to create test sub-directory: %s", err) - } - - // Create a file - var f *os.File - f, err := os.OpenFile(testFile1, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - f.Close() - - // Create a file (Should not see this! we are not watching subdir) - var fs *os.File - fs, err = os.OpenFile(testSubDirFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - fs.Sync() - fs.Close() - - time.Sleep(200 * time.Millisecond) - - // Make sure receive deletes for both file and sub-directory - os.RemoveAll(testSubDir) - os.Remove(testFile1) - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - cReceived := createReceived.value() - if cReceived != 2 { - t.Fatalf("incorrect number of create events received after 500 ms (%d vs %d)", cReceived, 2) - } - dReceived := deleteReceived.value() - if dReceived != 2 { - t.Fatalf("incorrect number of delete events received after 500 ms (%d vs %d)", dReceived, 2) - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(2 * time.Second): - t.Fatal("event stream was not closed after 2 seconds") - } -} - -func TestFsnotifyRename(t *testing.T) { - watcher := newWatcher(t) - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - addWatch(t, watcher, testDir) - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Errors { - t.Fatalf("error received: %s", err) - } - }() - - testFile := filepath.Join(testDir, "TestFsnotifyEvents.testfile") - testFileRenamed := filepath.Join(testDir, "TestFsnotifyEvents.testfileRenamed") - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Events - var renameReceived counter - done := make(chan bool) - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) || event.Name == filepath.Clean(testFileRenamed) { - if event.Op&Rename == Rename { - renameReceived.increment() - } - t.Logf("event received: %s", event) - } else { - t.Logf("unexpected event received: %s", event) - } - } - done <- true - }() - - // Create a file - // This should add at least one event to the fsnotify event queue - var f *os.File - f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - - f.WriteString("data") - f.Sync() - f.Close() - - // Add a watch for testFile - addWatch(t, watcher, testFile) - - if err := testRename(testFile, testFileRenamed); err != nil { - t.Fatalf("rename failed: %s", err) - } - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - if renameReceived.value() == 0 { - t.Fatal("fsnotify rename events have not been received after 500 ms") - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(2 * time.Second): - t.Fatal("event stream was not closed after 2 seconds") - } - - os.Remove(testFileRenamed) -} - -func TestFsnotifyRenameToCreate(t *testing.T) { - watcher := newWatcher(t) - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - // Create directory to get file - testDirFrom := tempMkdir(t) - defer os.RemoveAll(testDirFrom) - - addWatch(t, watcher, testDir) - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Errors { - t.Fatalf("error received: %s", err) - } - }() - - testFile := filepath.Join(testDirFrom, "TestFsnotifyEvents.testfile") - testFileRenamed := filepath.Join(testDir, "TestFsnotifyEvents.testfileRenamed") - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Events - var createReceived counter - done := make(chan bool) - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) || event.Name == filepath.Clean(testFileRenamed) { - if event.Op&Create == Create { - createReceived.increment() - } - t.Logf("event received: %s", event) - } else { - t.Logf("unexpected event received: %s", event) - } - } - done <- true - }() - - // Create a file - // This should add at least one event to the fsnotify event queue - var f *os.File - f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - f.Close() - - if err := testRename(testFile, testFileRenamed); err != nil { - t.Fatalf("rename failed: %s", err) - } - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - if createReceived.value() == 0 { - t.Fatal("fsnotify create events have not been received after 500 ms") - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(2 * time.Second): - t.Fatal("event stream was not closed after 2 seconds") - } - - os.Remove(testFileRenamed) -} - -func TestFsnotifyRenameToOverwrite(t *testing.T) { - switch runtime.GOOS { - case "plan9", "windows": - t.Skipf("skipping test on %q (os.Rename over existing file does not create event).", runtime.GOOS) - } - - watcher := newWatcher(t) - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - // Create directory to get file - testDirFrom := tempMkdir(t) - defer os.RemoveAll(testDirFrom) - - testFile := filepath.Join(testDirFrom, "TestFsnotifyEvents.testfile") - testFileRenamed := filepath.Join(testDir, "TestFsnotifyEvents.testfileRenamed") - - // Create a file - var fr *os.File - fr, err := os.OpenFile(testFileRenamed, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - fr.Sync() - fr.Close() - - addWatch(t, watcher, testDir) - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Errors { - t.Fatalf("error received: %s", err) - } - }() - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Events - var eventReceived counter - done := make(chan bool) - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testFileRenamed) { - eventReceived.increment() - t.Logf("event received: %s", event) - } else { - t.Logf("unexpected event received: %s", event) - } - } - done <- true - }() - - // Create a file - // This should add at least one event to the fsnotify event queue - var f *os.File - f, err = os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - f.Close() - - if err := testRename(testFile, testFileRenamed); err != nil { - t.Fatalf("rename failed: %s", err) - } - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - if eventReceived.value() == 0 { - t.Fatal("fsnotify events have not been received after 500 ms") - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(2 * time.Second): - t.Fatal("event stream was not closed after 2 seconds") - } - - os.Remove(testFileRenamed) -} - -func TestRemovalOfWatch(t *testing.T) { - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - // Create a file before watching directory - testFileAlreadyExists := filepath.Join(testDir, "TestFsnotifyEventsExisting.testfile") - { - var f *os.File - f, err := os.OpenFile(testFileAlreadyExists, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - f.Close() - } - - watcher := newWatcher(t) - defer watcher.Close() - - addWatch(t, watcher, testDir) - if err := watcher.Remove(testDir); err != nil { - t.Fatalf("Could not remove the watch: %v\n", err) - } - - go func() { - select { - case ev := <-watcher.Events: - t.Fatalf("We received event: %v\n", ev) - case <-time.After(500 * time.Millisecond): - t.Log("No event received, as expected.") - } - }() - - time.Sleep(200 * time.Millisecond) - // Modify the file outside of the watched dir - f, err := os.Open(testFileAlreadyExists) - if err != nil { - t.Fatalf("Open test file failed: %s", err) - } - f.WriteString("data") - f.Sync() - f.Close() - if err := os.Chmod(testFileAlreadyExists, 0700); err != nil { - t.Fatalf("chmod failed: %s", err) - } - time.Sleep(400 * time.Millisecond) -} - -func TestFsnotifyAttrib(t *testing.T) { - if runtime.GOOS == "windows" { - t.Skip("attributes don't work on Windows.") - } - - watcher := newWatcher(t) - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - // Receive errors on the error channel on a separate goroutine - go func() { - for err := range watcher.Errors { - t.Fatalf("error received: %s", err) - } - }() - - testFile := filepath.Join(testDir, "TestFsnotifyAttrib.testfile") - - // Receive events on the event channel on a separate goroutine - eventstream := watcher.Events - // The modifyReceived counter counts IsModify events that are not IsAttrib, - // and the attribReceived counts IsAttrib events (which are also IsModify as - // a consequence). - var modifyReceived counter - var attribReceived counter - done := make(chan bool) - go func() { - for event := range eventstream { - // Only count relevant events - if event.Name == filepath.Clean(testDir) || event.Name == filepath.Clean(testFile) { - if event.Op&Write == Write { - modifyReceived.increment() - } - if event.Op&Chmod == Chmod { - attribReceived.increment() - } - t.Logf("event received: %s", event) - } else { - t.Logf("unexpected event received: %s", event) - } - } - done <- true - }() - - // Create a file - // This should add at least one event to the fsnotify event queue - var f *os.File - f, err := os.OpenFile(testFile, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - - f.WriteString("data") - f.Sync() - f.Close() - - // Add a watch for testFile - addWatch(t, watcher, testFile) - - if err := os.Chmod(testFile, 0700); err != nil { - t.Fatalf("chmod failed: %s", err) - } - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - // Creating/writing a file changes also the mtime, so IsAttrib should be set to true here - time.Sleep(500 * time.Millisecond) - if modifyReceived.value() != 0 { - t.Fatal("received an unexpected modify event when creating a test file") - } - if attribReceived.value() == 0 { - t.Fatal("fsnotify attribute events have not received after 500 ms") - } - - // Modifying the contents of the file does not set the attrib flag (although eg. the mtime - // might have been modified). - modifyReceived.reset() - attribReceived.reset() - - f, err = os.OpenFile(testFile, os.O_WRONLY, 0) - if err != nil { - t.Fatalf("reopening test file failed: %s", err) - } - - f.WriteString("more data") - f.Sync() - f.Close() - - time.Sleep(500 * time.Millisecond) - - if modifyReceived.value() != 1 { - t.Fatal("didn't receive a modify event after changing test file contents") - } - - if attribReceived.value() != 0 { - t.Fatal("did receive an unexpected attrib event after changing test file contents") - } - - modifyReceived.reset() - attribReceived.reset() - - // Doing a chmod on the file should trigger an event with the "attrib" flag set (the contents - // of the file are not changed though) - if err := os.Chmod(testFile, 0600); err != nil { - t.Fatalf("chmod failed: %s", err) - } - - time.Sleep(500 * time.Millisecond) - - if attribReceived.value() != 1 { - t.Fatal("didn't receive an attribute change after 500ms") - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() - t.Log("waiting for the event channel to become closed...") - select { - case <-done: - t.Log("event channel closed") - case <-time.After(1e9): - t.Fatal("event stream was not closed after 1 second") - } - - os.Remove(testFile) -} - -func TestFsnotifyClose(t *testing.T) { - watcher := newWatcher(t) - watcher.Close() - - var done int32 - go func() { - watcher.Close() - atomic.StoreInt32(&done, 1) - }() - - time.Sleep(50e6) // 50 ms - if atomic.LoadInt32(&done) == 0 { - t.Fatal("double Close() test failed: second Close() call didn't return") - } - - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - if err := watcher.Add(testDir); err == nil { - t.Fatal("expected error on Watch() after Close(), got nil") - } -} - -func TestFsnotifyFakeSymlink(t *testing.T) { - if runtime.GOOS == "windows" { - t.Skip("symlinks don't work on Windows.") - } - - watcher := newWatcher(t) - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - var errorsReceived counter - // Receive errors on the error channel on a separate goroutine - go func() { - for errors := range watcher.Errors { - t.Logf("Received error: %s", errors) - errorsReceived.increment() - } - }() - - // Count the CREATE events received - var createEventsReceived, otherEventsReceived counter - go func() { - for ev := range watcher.Events { - t.Logf("event received: %s", ev) - if ev.Op&Create == Create { - createEventsReceived.increment() - } else { - otherEventsReceived.increment() - } - } - }() - - addWatch(t, watcher, testDir) - - if err := os.Symlink(filepath.Join(testDir, "zzz"), filepath.Join(testDir, "zzznew")); err != nil { - t.Fatalf("Failed to create bogus symlink: %s", err) - } - t.Logf("Created bogus symlink") - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - - // Should not be error, just no events for broken links (watching nothing) - if errorsReceived.value() > 0 { - t.Fatal("fsnotify errors have been received.") - } - if otherEventsReceived.value() > 0 { - t.Fatal("fsnotify other events received on the broken link") - } - - // Except for 1 create event (for the link itself) - if createEventsReceived.value() == 0 { - t.Fatal("fsnotify create events were not received after 500 ms") - } - if createEventsReceived.value() > 1 { - t.Fatal("fsnotify more create events received than expected") - } - - // Try closing the fsnotify instance - t.Log("calling Close()") - watcher.Close() -} - -func TestCyclicSymlink(t *testing.T) { - if runtime.GOOS == "windows" { - t.Skip("symlinks don't work on Windows.") - } - - watcher := newWatcher(t) - - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - link := path.Join(testDir, "link") - if err := os.Symlink(".", link); err != nil { - t.Fatalf("could not make symlink: %v", err) - } - addWatch(t, watcher, testDir) - - var createEventsReceived counter - go func() { - for ev := range watcher.Events { - if ev.Op&Create == Create { - createEventsReceived.increment() - } - } - }() - - if err := os.Remove(link); err != nil { - t.Fatalf("Error removing link: %v", err) - } - - // It would be nice to be able to expect a delete event here, but kqueue has - // no way for us to get events on symlinks themselves, because opening them - // opens an fd to the file to which they point. - - if err := ioutil.WriteFile(link, []byte("foo"), 0700); err != nil { - t.Fatalf("could not make symlink: %v", err) - } - - // We expect this event to be received almost immediately, but let's wait 500 ms to be sure - time.Sleep(500 * time.Millisecond) - - if got := createEventsReceived.value(); got == 0 { - t.Errorf("want at least 1 create event got %v", got) - } - - watcher.Close() -} - -// TestConcurrentRemovalOfWatch tests that concurrent calls to RemoveWatch do not race. -// See https://codereview.appspot.com/103300045/ -// go test -test.run=TestConcurrentRemovalOfWatch -test.cpu=1,1,1,1,1 -race -func TestConcurrentRemovalOfWatch(t *testing.T) { - if runtime.GOOS != "darwin" { - t.Skip("regression test for race only present on darwin") - } - - // Create directory to watch - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - // Create a file before watching directory - testFileAlreadyExists := filepath.Join(testDir, "TestFsnotifyEventsExisting.testfile") - { - var f *os.File - f, err := os.OpenFile(testFileAlreadyExists, os.O_WRONLY|os.O_CREATE, 0666) - if err != nil { - t.Fatalf("creating test file failed: %s", err) - } - f.Sync() - f.Close() - } - - watcher := newWatcher(t) - defer watcher.Close() - - addWatch(t, watcher, testDir) - - // Test that RemoveWatch can be invoked concurrently, with no data races. - removed1 := make(chan struct{}) - go func() { - defer close(removed1) - watcher.Remove(testDir) - }() - removed2 := make(chan struct{}) - go func() { - close(removed2) - watcher.Remove(testDir) - }() - <-removed1 - <-removed2 -} - -func TestClose(t *testing.T) { - // Regression test for #59 bad file descriptor from Close - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - watcher := newWatcher(t) - if err := watcher.Add(testDir); err != nil { - t.Fatalf("Expected no error on Add, got %v", err) - } - err := watcher.Close() - if err != nil { - t.Fatalf("Expected no error on Close, got %v.", err) - } -} - -// TestRemoveWithClose tests if one can handle Remove events and, at the same -// time, close Watcher object without any data races. -func TestRemoveWithClose(t *testing.T) { - testDir := tempMkdir(t) - defer os.RemoveAll(testDir) - - const fileN = 200 - tempFiles := make([]string, 0, fileN) - for i := 0; i < fileN; i++ { - tempFiles = append(tempFiles, tempMkFile(t, testDir)) - } - watcher := newWatcher(t) - if err := watcher.Add(testDir); err != nil { - t.Fatalf("Expected no error on Add, got %v", err) - } - startC, stopC := make(chan struct{}), make(chan struct{}) - errC := make(chan error) - go func() { - for { - select { - case <-watcher.Errors: - case <-watcher.Events: - case <-stopC: - return - } - } - }() - go func() { - <-startC - for _, fileName := range tempFiles { - os.Remove(fileName) - } - }() - go func() { - <-startC - errC <- watcher.Close() - }() - close(startC) - defer close(stopC) - if err := <-errC; err != nil { - t.Fatalf("Expected no error on Close, got %v.", err) - } -} - -func testRename(file1, file2 string) error { - switch runtime.GOOS { - case "windows", "plan9": - return os.Rename(file1, file2) - default: - cmd := exec.Command("mv", file1, file2) - return cmd.Run() - } -} diff --git a/vendor/github.com/google/gopacket/afpacket/afpacket.go b/vendor/github.com/google/gopacket/afpacket/afpacket.go deleted file mode 100644 index 13937c1..0000000 --- a/vendor/github.com/google/gopacket/afpacket/afpacket.go +++ /dev/null @@ -1,476 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// +build linux - -// Package afpacket provides Go bindings for MMap'd AF_PACKET socket reading. -package afpacket - -// Couldn't have done this without: -// http://lxr.free-electrons.com/source/Documentation/networking/packet_mmap.txt -// http://codemonkeytips.blogspot.co.uk/2011/07/asynchronous-packet-socket-reading-with.html - -import ( - "errors" - "fmt" - "net" - "runtime" - "sync" - "sync/atomic" - "time" - "unsafe" - - "golang.org/x/net/bpf" - "golang.org/x/sys/unix" - - "github.com/google/gopacket" -) - -/* -#include // AF_PACKET, sockaddr_ll -#include // ETH_P_ALL -#include // socket() -#include // close() -#include // htons() -#include // mmap(), munmap() -#include // poll() -*/ -import "C" - -var pageSize = unix.Getpagesize() -var tpacketAlignment = uint(C.TPACKET_ALIGNMENT) - -// ErrPoll returned by poll -var ErrPoll = errors.New("packet poll failed") - -// ErrTimeout returned on poll timeout -var ErrTimeout = errors.New("packet poll timeout expired") - -func tpacketAlign(v int) int { - return int((uint(v) + tpacketAlignment - 1) & ((^tpacketAlignment) - 1)) -} - -// Stats is a set of counters detailing the work TPacket has done so far. -type Stats struct { - // Packets is the total number of packets returned to the caller. - Packets int64 - // Polls is the number of blocking syscalls made waiting for packets. - // This should always be <= Packets, since with TPacket one syscall - // can (and often does) return many results. - Polls int64 -} - -// SocketStats is a struct where socket stats are stored -type SocketStats C.struct_tpacket_stats - -// SocketStatsV3 is a struct where socket stats for TPacketV3 are stored -type SocketStatsV3 C.struct_tpacket_stats_v3 - -// TPacket implements packet receiving for Linux AF_PACKET versions 1, 2, and 3. -type TPacket struct { - // fd is the C file descriptor. - fd int - // ring points to the memory space of the ring buffer shared by tpacket and the kernel. - ring []byte - // rawring is the unsafe pointer that we use to poll for packets - rawring unsafe.Pointer - // opts contains read-only options for the TPacket object. - opts options - mu sync.Mutex // guards below - // offset is the offset into the ring of the current header. - offset int - // current is the current header. - current header - // pollset is used by TPacket for its poll() call. - pollset unix.PollFd - // shouldReleasePacket is set to true whenever we return packet data, to make sure we remember to release that data back to the kernel. - shouldReleasePacket bool - // headerNextNeeded is set to true when header need to move to the next packet. No need to move it case of poll error. - headerNextNeeded bool - // tpVersion is the version of TPacket actually in use, set by setRequestedTPacketVersion. - tpVersion OptTPacketVersion - // Hackity hack hack hack. We need to return a pointer to the header with - // getTPacketHeader, and we don't want to allocate a v3wrapper every time, - // so we leave it in the TPacket object and return a pointer to it. - v3 v3wrapper - - statsMu sync.Mutex // guards stats below - // stats is simple statistics on TPacket's run. - stats Stats - // socketStats contains stats from the socket - socketStats SocketStats - // same as socketStats, but with an extra field freeze_q_cnt - socketStatsV3 SocketStatsV3 -} - -var _ gopacket.ZeroCopyPacketDataSource = &TPacket{} - -// bindToInterface binds the TPacket socket to a particular named interface. -func (h *TPacket) bindToInterface(ifaceName string) error { - ifIndex := 0 - // An empty string here means to listen to all interfaces - if ifaceName != "" { - iface, err := net.InterfaceByName(ifaceName) - if err != nil { - return fmt.Errorf("InterfaceByName: %v", err) - } - ifIndex = iface.Index - } - s := &unix.SockaddrLinklayer{ - Protocol: htons(uint16(unix.ETH_P_ALL)), - Ifindex: ifIndex, - } - return unix.Bind(h.fd, s) -} - -// setTPacketVersion asks the kernel to set TPacket to a particular version, and returns an error on failure. -func (h *TPacket) setTPacketVersion(version OptTPacketVersion) error { - if err := unix.SetsockoptInt(h.fd, unix.SOL_PACKET, unix.PACKET_VERSION, int(version)); err != nil { - return fmt.Errorf("setsockopt packet_version: %v", err) - } - return nil -} - -// setRequestedTPacketVersion tries to set TPacket to the requested version or versions. -func (h *TPacket) setRequestedTPacketVersion() error { - switch { - case (h.opts.version == TPacketVersionHighestAvailable || h.opts.version == TPacketVersion3) && h.setTPacketVersion(TPacketVersion3) == nil: - h.tpVersion = TPacketVersion3 - case (h.opts.version == TPacketVersionHighestAvailable || h.opts.version == TPacketVersion2) && h.setTPacketVersion(TPacketVersion2) == nil: - h.tpVersion = TPacketVersion2 - case (h.opts.version == TPacketVersionHighestAvailable || h.opts.version == TPacketVersion1) && h.setTPacketVersion(TPacketVersion1) == nil: - h.tpVersion = TPacketVersion1 - default: - return errors.New("no known tpacket versions work on this machine") - } - return nil -} - -// setUpRing sets up the shared-memory ring buffer between the user process and the kernel. -func (h *TPacket) setUpRing() (err error) { - totalSize := int(h.opts.framesPerBlock * h.opts.numBlocks * h.opts.frameSize) - switch h.tpVersion { - case TPacketVersion1, TPacketVersion2: - var tp C.struct_tpacket_req - tp.tp_block_size = C.uint(h.opts.blockSize) - tp.tp_block_nr = C.uint(h.opts.numBlocks) - tp.tp_frame_size = C.uint(h.opts.frameSize) - tp.tp_frame_nr = C.uint(h.opts.framesPerBlock * h.opts.numBlocks) - if err := setsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_RX_RING, unsafe.Pointer(&tp), unsafe.Sizeof(tp)); err != nil { - return fmt.Errorf("setsockopt packet_rx_ring: %v", err) - } - case TPacketVersion3: - var tp C.struct_tpacket_req3 - tp.tp_block_size = C.uint(h.opts.blockSize) - tp.tp_block_nr = C.uint(h.opts.numBlocks) - tp.tp_frame_size = C.uint(h.opts.frameSize) - tp.tp_frame_nr = C.uint(h.opts.framesPerBlock * h.opts.numBlocks) - tp.tp_retire_blk_tov = C.uint(h.opts.blockTimeout / time.Millisecond) - if err := setsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_RX_RING, unsafe.Pointer(&tp), unsafe.Sizeof(tp)); err != nil { - return fmt.Errorf("setsockopt packet_rx_ring v3: %v", err) - } - default: - return errors.New("invalid tpVersion") - } - h.ring, err = unix.Mmap(h.fd, 0, totalSize, unix.PROT_READ|unix.PROT_WRITE, unix.MAP_SHARED) - if err != nil { - return err - } - if h.ring == nil { - return errors.New("no ring") - } - h.rawring = unsafe.Pointer(&h.ring[0]) - return nil -} - -// Close cleans up the TPacket. It should not be used after the Close call. -func (h *TPacket) Close() { - if h.fd == -1 { - return // already closed. - } - if h.ring != nil { - unix.Munmap(h.ring) - } - h.ring = nil - unix.Close(h.fd) - h.fd = -1 - runtime.SetFinalizer(h, nil) -} - -// NewTPacket returns a new TPacket object for reading packets off the wire. -// Its behavior may be modified by passing in any/all of afpacket.Opt* to this -// function. -// If this function succeeds, the user should be sure to Close the returned -// TPacket when finished with it. -func NewTPacket(opts ...interface{}) (h *TPacket, err error) { - h = &TPacket{} - if h.opts, err = parseOptions(opts...); err != nil { - return nil, err - } - fd, err := unix.Socket(unix.AF_PACKET, int(h.opts.socktype), int(htons(unix.ETH_P_ALL))) - if err != nil { - return nil, err - } - h.fd = fd - if err = h.bindToInterface(h.opts.iface); err != nil { - goto errlbl - } - if err = h.setRequestedTPacketVersion(); err != nil { - goto errlbl - } - if err = h.setUpRing(); err != nil { - goto errlbl - } - // Clear stat counter from socket - if err = h.InitSocketStats(); err != nil { - goto errlbl - } - runtime.SetFinalizer(h, (*TPacket).Close) - return h, nil -errlbl: - h.Close() - return nil, err -} - -// SetBPF attaches a BPF filter to the underlying socket -func (h *TPacket) SetBPF(filter []bpf.RawInstruction) error { - var p unix.SockFprog - if len(filter) > int(^uint16(0)) { - return errors.New("filter too large") - } - p.Len = uint16(len(filter)) - p.Filter = (*unix.SockFilter)(unsafe.Pointer(&filter[0])) - - return setsockopt(h.fd, unix.SOL_SOCKET, unix.SO_ATTACH_FILTER, unsafe.Pointer(&p), unix.SizeofSockFprog) -} - -func (h *TPacket) releaseCurrentPacket() error { - h.current.clearStatus() - h.offset++ - h.shouldReleasePacket = false - return nil -} - -// ZeroCopyReadPacketData reads the next packet off the wire, and returns its data. -// The slice returned by ZeroCopyReadPacketData points to bytes owned by the -// TPacket. Each call to ZeroCopyReadPacketData invalidates any data previously -// returned by ZeroCopyReadPacketData. Care must be taken not to keep pointers -// to old bytes when using ZeroCopyReadPacketData... if you need to keep data past -// the next time you call ZeroCopyReadPacketData, use ReadPacketData, which copies -// the bytes into a new buffer for you. -// tp, _ := NewTPacket(...) -// data1, _, _ := tp.ZeroCopyReadPacketData() -// // do everything you want with data1 here, copying bytes out of it if you'd like to keep them around. -// data2, _, _ := tp.ZeroCopyReadPacketData() // invalidates bytes in data1 -func (h *TPacket) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) { - h.mu.Lock() -retry: - if h.current == nil || !h.headerNextNeeded || !h.current.next() { - if h.shouldReleasePacket { - h.releaseCurrentPacket() - } - h.current = h.getTPacketHeader() - if err = h.pollForFirstPacket(h.current); err != nil { - h.headerNextNeeded = false - h.mu.Unlock() - return - } - // We received an empty block - if h.current.getLength() == 0 { - goto retry - } - } - data = h.current.getData() - ci.Timestamp = h.current.getTime() - ci.CaptureLength = len(data) - ci.Length = h.current.getLength() - ci.InterfaceIndex = h.current.getIfaceIndex() - atomic.AddInt64(&h.stats.Packets, 1) - h.headerNextNeeded = true - h.mu.Unlock() - - return -} - -// Stats returns statistics on the packets the TPacket has seen so far. -func (h *TPacket) Stats() (Stats, error) { - return Stats{ - Polls: atomic.LoadInt64(&h.stats.Polls), - Packets: atomic.LoadInt64(&h.stats.Packets), - }, nil -} - -// InitSocketStats clears socket counters and return empty stats. -func (h *TPacket) InitSocketStats() error { - if h.tpVersion == TPacketVersion3 { - socklen := unsafe.Sizeof(h.socketStatsV3) - slt := C.socklen_t(socklen) - var ssv3 SocketStatsV3 - - err := getsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS, unsafe.Pointer(&ssv3), uintptr(unsafe.Pointer(&slt))) - if err != nil { - return err - } - h.socketStatsV3 = SocketStatsV3{} - } else { - socklen := unsafe.Sizeof(h.socketStats) - slt := C.socklen_t(socklen) - var ss SocketStats - - err := getsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS, unsafe.Pointer(&ss), uintptr(unsafe.Pointer(&slt))) - if err != nil { - return err - } - h.socketStats = SocketStats{} - } - return nil -} - -// SocketStats saves stats from the socket to the TPacket instance. -func (h *TPacket) SocketStats() (SocketStats, SocketStatsV3, error) { - h.statsMu.Lock() - defer h.statsMu.Unlock() - // We need to save the counters since asking for the stats will clear them - if h.tpVersion == TPacketVersion3 { - socklen := unsafe.Sizeof(h.socketStatsV3) - slt := C.socklen_t(socklen) - var ssv3 SocketStatsV3 - - err := getsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS, unsafe.Pointer(&ssv3), uintptr(unsafe.Pointer(&slt))) - if err != nil { - return SocketStats{}, SocketStatsV3{}, err - } - - h.socketStatsV3.tp_packets += ssv3.tp_packets - h.socketStatsV3.tp_drops += ssv3.tp_drops - h.socketStatsV3.tp_freeze_q_cnt += ssv3.tp_freeze_q_cnt - return h.socketStats, h.socketStatsV3, nil - } - socklen := unsafe.Sizeof(h.socketStats) - slt := C.socklen_t(socklen) - var ss SocketStats - - err := getsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_STATISTICS, unsafe.Pointer(&ss), uintptr(unsafe.Pointer(&slt))) - if err != nil { - return SocketStats{}, SocketStatsV3{}, err - } - - h.socketStats.tp_packets += ss.tp_packets - h.socketStats.tp_drops += ss.tp_drops - return h.socketStats, h.socketStatsV3, nil -} - -// ReadPacketDataTo reads packet data into a user-supplied buffer. -// This function reads up to the length of the passed-in slice. -// The number of bytes read into data will be returned in ci.CaptureLength, -// which is the minimum of the size of the passed-in buffer and the size of -// the captured packet. -func (h *TPacket) ReadPacketDataTo(data []byte) (ci gopacket.CaptureInfo, err error) { - var d []byte - d, ci, err = h.ZeroCopyReadPacketData() - if err != nil { - return - } - ci.CaptureLength = copy(data, d) - return -} - -// ReadPacketData reads the next packet, copies it into a new buffer, and returns -// that buffer. Since the buffer is allocated by ReadPacketData, it is safe for long-term -// use. This implements gopacket.PacketDataSource. -func (h *TPacket) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) { - var d []byte - d, ci, err = h.ZeroCopyReadPacketData() - if err != nil { - return - } - data = make([]byte, len(d)) - copy(data, d) - return -} - -func (h *TPacket) getTPacketHeader() header { - switch h.tpVersion { - case TPacketVersion1: - if h.offset >= h.opts.framesPerBlock*h.opts.numBlocks { - h.offset = 0 - } - position := uintptr(h.rawring) + uintptr(h.opts.frameSize*h.offset) - return (*v1header)(unsafe.Pointer(position)) - case TPacketVersion2: - if h.offset >= h.opts.framesPerBlock*h.opts.numBlocks { - h.offset = 0 - } - position := uintptr(h.rawring) + uintptr(h.opts.frameSize*h.offset) - return (*v2header)(unsafe.Pointer(position)) - case TPacketVersion3: - // TPacket3 uses each block to return values, instead of each frame. Hence we need to rotate when we hit #blocks, not #frames. - if h.offset >= h.opts.numBlocks { - h.offset = 0 - } - position := uintptr(h.rawring) + uintptr(h.opts.frameSize*h.offset*h.opts.framesPerBlock) - h.v3 = initV3Wrapper(unsafe.Pointer(position)) - return &h.v3 - } - panic("handle tpacket version is invalid") -} - -func (h *TPacket) pollForFirstPacket(hdr header) error { - tm := int(h.opts.pollTimeout / time.Millisecond) - for hdr.getStatus()&C.TP_STATUS_USER == 0 { - h.pollset.Fd = int32(h.fd) - h.pollset.Events = unix.POLLIN - h.pollset.Revents = 0 - n, err := unix.Poll([]unix.PollFd{h.pollset}, tm) - if n == 0 { - return ErrTimeout - } - - atomic.AddInt64(&h.stats.Polls, 1) - if h.pollset.Revents&unix.POLLERR > 0 { - return ErrPoll - } - if err != nil { - return err - } - } - - h.shouldReleasePacket = true - return nil -} - -// FanoutType determines the type of fanout to use with a TPacket SetFanout call. -type FanoutType int - -// FanoutType values. -const ( - FanoutHash FanoutType = 0 - // It appears that defrag only works with FanoutHash, see: - // http://lxr.free-electrons.com/source/net/packet/af_packet.c#L1204 - FanoutHashWithDefrag FanoutType = 0x8000 - FanoutLoadBalance FanoutType = 1 - FanoutCPU FanoutType = 2 -) - -// SetFanout activates TPacket's fanout ability. -// Use of Fanout requires creating multiple TPacket objects and the same id/type to -// a SetFanout call on each. Note that this can be done cross-process, so if two -// different processes both call SetFanout with the same type/id, they'll share -// packets between them. The same should work for multiple TPacket objects within -// the same process. -func (h *TPacket) SetFanout(t FanoutType, id uint16) error { - h.mu.Lock() - defer h.mu.Unlock() - arg := C.int(t) << 16 - arg |= C.int(id) - return setsockopt(h.fd, unix.SOL_PACKET, unix.PACKET_FANOUT, unsafe.Pointer(&arg), unsafe.Sizeof(arg)) -} - -// WritePacketData transmits a raw packet. -func (h *TPacket) WritePacketData(pkt []byte) error { - _, err := unix.Write(h.fd, pkt) - return err -} diff --git a/vendor/github.com/google/gopacket/afpacket/afpacket_test.go b/vendor/github.com/google/gopacket/afpacket/afpacket_test.go deleted file mode 100644 index 57f6480..0000000 --- a/vendor/github.com/google/gopacket/afpacket/afpacket_test.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// +build linux - -package afpacket - -import ( - "reflect" - "testing" -) - -func TestParseOptions(t *testing.T) { - wanted1 := defaultOpts - wanted1.frameSize = 1 << 10 - wanted1.framesPerBlock = wanted1.blockSize / wanted1.frameSize - for i, test := range []struct { - opts []interface{} - want options - err bool - }{ - {opts: []interface{}{OptBlockSize(2)}, err: true}, - {opts: []interface{}{OptFrameSize(333)}, err: true}, - {opts: []interface{}{OptTPacketVersion(-3)}, err: true}, - {opts: []interface{}{OptTPacketVersion(5)}, err: true}, - {opts: []interface{}{OptFrameSize(1 << 10)}, want: wanted1}, - } { - got, err := parseOptions(test.opts...) - t.Logf("got: %#v\nerr: %v", got, err) - if test.err && err == nil || !test.err && err != nil { - t.Errorf("%d error mismatch, want error? %v. error: %v", i, test.err, err) - } - if !test.err && !reflect.DeepEqual(test.want, got) { - t.Errorf("%d opts mismatch, want\n%#v", i, test.want) - } - } -} diff --git a/vendor/github.com/google/gopacket/afpacket/header.go b/vendor/github.com/google/gopacket/afpacket/header.go deleted file mode 100644 index 0b9918e..0000000 --- a/vendor/github.com/google/gopacket/afpacket/header.go +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// +build linux - -package afpacket - -import ( - "reflect" - "time" - "unsafe" -) - -// #include -import "C" - -// Our model of handling all TPacket versions is a little hacky, to say the -// least. We use the header interface to handle interactions with the -// tpacket1/tpacket2 packet header AND the tpacket3 block header. The big -// difference is that tpacket3's block header implements the next() call to get -// the next packet within the block, while v1/v2 just always return false. - -type header interface { - // getStatus returns the TPacket status of the current header. - getStatus() int - // clearStatus clears the status of the current header, releasing its - // underlying data back to the kernel for future use with new packets. - // Using the header after calling clearStatus is an error. clearStatus - // should only be called after next() returns false. - clearStatus() - // getTime returns the timestamp for the current packet pointed to by - // the header. - getTime() time.Time - // getData returns the packet data pointed to by the current header. - getData() []byte - // getLength returns the total length of the packet. - getLength() int - // getIfaceIndex returns the index of the network interface - // where the packet was seen. The index can later be translated to a name. - getIfaceIndex() int - // next moves this header to point to the next packet it contains, - // returning true on success (in which case getTime and getData will - // return values for the new packet) or false if there are no more - // packets (in which case clearStatus should be called). - next() bool -} - -func tpAlign(x int) int { - return int((uint(x) + tpacketAlignment - 1) &^ (tpacketAlignment - 1)) -} - -type v1header C.struct_tpacket_hdr -type v2header C.struct_tpacket2_hdr - -func makeSlice(start uintptr, length int) (data []byte) { - slice := (*reflect.SliceHeader)(unsafe.Pointer(&data)) - slice.Data = start - slice.Len = length - slice.Cap = length - return -} - -func (h *v1header) getStatus() int { - return int(h.tp_status) -} -func (h *v1header) clearStatus() { - h.tp_status = 0 -} -func (h *v1header) getTime() time.Time { - return time.Unix(int64(h.tp_sec), int64(h.tp_usec)*1000) -} -func (h *v1header) getData() []byte { - return makeSlice(uintptr(unsafe.Pointer(h))+uintptr(h.tp_mac), int(h.tp_snaplen)) -} -func (h *v1header) getLength() int { - return int(h.tp_len) -} -func (h *v1header) getIfaceIndex() int { - ll := (*C.struct_sockaddr_ll)(unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(tpAlign(int(C.sizeof_struct_tpacket_hdr))))) - return int(ll.sll_ifindex) -} -func (h *v1header) next() bool { - return false -} - -func (h *v2header) getStatus() int { - return int(h.tp_status) -} -func (h *v2header) clearStatus() { - h.tp_status = 0 -} -func (h *v2header) getTime() time.Time { - return time.Unix(int64(h.tp_sec), int64(h.tp_nsec)) -} -func (h *v2header) getData() []byte { - return makeSlice(uintptr(unsafe.Pointer(h))+uintptr(h.tp_mac), int(h.tp_snaplen)) -} -func (h *v2header) getLength() int { - return int(h.tp_len) -} -func (h *v2header) getIfaceIndex() int { - ll := (*C.struct_sockaddr_ll)(unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(tpAlign(int(C.sizeof_struct_tpacket2_hdr))))) - return int(ll.sll_ifindex) -} -func (h *v2header) next() bool { - return false -} - -type v3wrapper struct { - block *C.struct_tpacket_block_desc - blockhdr *C.struct_tpacket_hdr_v1 - packet *C.struct_tpacket3_hdr - used C.__u32 -} - -func initV3Wrapper(block unsafe.Pointer) (w v3wrapper) { - w.block = (*C.struct_tpacket_block_desc)(block) - w.blockhdr = (*C.struct_tpacket_hdr_v1)(unsafe.Pointer(&w.block.hdr[0])) - w.packet = (*C.struct_tpacket3_hdr)(unsafe.Pointer(uintptr(block) + uintptr(w.blockhdr.offset_to_first_pkt))) - return -} -func (w *v3wrapper) getStatus() int { - return int(w.blockhdr.block_status) -} -func (w *v3wrapper) clearStatus() { - w.blockhdr.block_status = 0 -} -func (w *v3wrapper) getTime() time.Time { - return time.Unix(int64(w.packet.tp_sec), int64(w.packet.tp_nsec)) -} -func (w *v3wrapper) getData() []byte { - return makeSlice(uintptr(unsafe.Pointer(w.packet))+uintptr(w.packet.tp_mac), int(w.packet.tp_snaplen)) -} -func (w *v3wrapper) getLength() int { - return int(w.packet.tp_len) -} -func (w *v3wrapper) getIfaceIndex() int { - ll := (*C.struct_sockaddr_ll)(unsafe.Pointer(uintptr(unsafe.Pointer(w.packet)) + uintptr(tpAlign(int(C.sizeof_struct_tpacket3_hdr))))) - return int(ll.sll_ifindex) -} -func (w *v3wrapper) next() bool { - w.used++ - if w.used >= w.blockhdr.num_pkts { - return false - } - - next := uintptr(unsafe.Pointer(w.packet)) - if w.packet.tp_next_offset != 0 { - next += uintptr(w.packet.tp_next_offset) - } else { - next += uintptr(tpacketAlign(int(w.packet.tp_snaplen) + int(w.packet.tp_mac))) - } - w.packet = (*C.struct_tpacket3_hdr)(unsafe.Pointer(next)) - return true -} diff --git a/vendor/github.com/google/gopacket/afpacket/options.go b/vendor/github.com/google/gopacket/afpacket/options.go deleted file mode 100644 index c5ab771..0000000 --- a/vendor/github.com/google/gopacket/afpacket/options.go +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// +build linux - -package afpacket - -import ( - "errors" - "fmt" - "time" -) - -// #include -// #include -import "C" - -// OptTPacketVersion is the version of TPacket to use. -// It can be passed into NewTPacket. -type OptTPacketVersion int - -// String returns a string representation of the version, generally of the form V#. -func (t OptTPacketVersion) String() string { - switch t { - case TPacketVersion1: - return "V1" - case TPacketVersion2: - return "V2" - case TPacketVersion3: - return "V3" - case TPacketVersionHighestAvailable: - return "HighestAvailable" - } - return "InvalidVersion" -} - -// OptSocketType is the socket type used to open the TPacket socket. -type OptSocketType int - -func (t OptSocketType) String() string { - switch t { - case SocketRaw: - return "SOCK_RAW" - case SocketDgram: - return "SOCK_DGRAM" - } - return "UnknownSocketType" -} - -// TPacket version numbers for use with NewHandle. -const ( - // TPacketVersionHighestAvailable tells NewHandle to use the highest available version of tpacket the kernel has available. - // This is the default, should a version number not be given in NewHandle's options. - TPacketVersionHighestAvailable = OptTPacketVersion(-1) - TPacketVersion1 = OptTPacketVersion(C.TPACKET_V1) - TPacketVersion2 = OptTPacketVersion(C.TPACKET_V2) - TPacketVersion3 = OptTPacketVersion(C.TPACKET_V3) - tpacketVersionMax = TPacketVersion3 - tpacketVersionMin = -1 - // SocketRaw is the default socket type. It returns packet data - // including the link layer (ethernet headers, etc). - SocketRaw = OptSocketType(C.SOCK_RAW) - // SocketDgram strips off the link layer when reading packets, and adds - // the link layer back automatically on packet writes (coming soon...) - SocketDgram = OptSocketType(C.SOCK_DGRAM) -) - -// OptInterface is the specific interface to bind to. -// It can be passed into NewTPacket. -type OptInterface string - -// OptFrameSize is TPacket's tp_frame_size -// It can be passed into NewTPacket. -type OptFrameSize int - -// OptBlockSize is TPacket's tp_block_size -// It can be passed into NewTPacket. -type OptBlockSize int - -// OptNumBlocks is TPacket's tp_block_nr -// It can be passed into NewTPacket. -type OptNumBlocks int - -// OptBlockTimeout is TPacket v3's tp_retire_blk_tov. Note that it has only millisecond granularity, so must be >= 1 ms. -// It can be passed into NewTPacket. -type OptBlockTimeout time.Duration - -// OptPollTimeout is the number of milliseconds that poll() should block waiting for a file -// descriptor to become ready. Specifying a negative value in time‐out means an infinite timeout. -type OptPollTimeout time.Duration - -// Default constants used by options. -const ( - DefaultFrameSize = 4096 // Default value for OptFrameSize. - DefaultBlockSize = DefaultFrameSize * 128 // Default value for OptBlockSize. - DefaultNumBlocks = 128 // Default value for OptNumBlocks. - DefaultBlockTimeout = 64 * time.Millisecond // Default value for OptBlockTimeout. - DefaultPollTimeout = -1 * time.Millisecond // Default value for OptPollTimeout. This blocks forever. -) - -type options struct { - frameSize int - framesPerBlock int - blockSize int - numBlocks int - blockTimeout time.Duration - pollTimeout time.Duration - version OptTPacketVersion - socktype OptSocketType - iface string -} - -var defaultOpts = options{ - frameSize: DefaultFrameSize, - blockSize: DefaultBlockSize, - numBlocks: DefaultNumBlocks, - blockTimeout: DefaultBlockTimeout, - pollTimeout: DefaultPollTimeout, - version: TPacketVersionHighestAvailable, - socktype: SocketRaw, -} - -func parseOptions(opts ...interface{}) (ret options, err error) { - ret = defaultOpts - for _, opt := range opts { - switch v := opt.(type) { - case OptFrameSize: - ret.frameSize = int(v) - case OptBlockSize: - ret.blockSize = int(v) - case OptNumBlocks: - ret.numBlocks = int(v) - case OptBlockTimeout: - ret.blockTimeout = time.Duration(v) - case OptPollTimeout: - ret.pollTimeout = time.Duration(v) - case OptTPacketVersion: - ret.version = v - case OptInterface: - ret.iface = string(v) - case OptSocketType: - ret.socktype = v - default: - err = errors.New("unknown type in options") - return - } - } - if err = ret.check(); err != nil { - return - } - ret.framesPerBlock = ret.blockSize / ret.frameSize - return -} -func (o options) check() error { - switch { - case o.blockSize%pageSize != 0: - return fmt.Errorf("block size %d must be divisible by page size %d", o.blockSize, pageSize) - case o.blockSize%o.frameSize != 0: - return fmt.Errorf("block size %d must be divisible by frame size %d", o.blockSize, o.frameSize) - case o.numBlocks < 1: - return fmt.Errorf("num blocks %d must be >= 1", o.numBlocks) - case o.blockTimeout < time.Millisecond: - return fmt.Errorf("block timeout %v must be > %v", o.blockTimeout, time.Millisecond) - case o.version < tpacketVersionMin || o.version > tpacketVersionMax: - return fmt.Errorf("tpacket version %v is invalid", o.version) - } - return nil -} diff --git a/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go b/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go deleted file mode 100644 index c53e1cc..0000000 --- a/vendor/github.com/google/gopacket/afpacket/sockopt_linux.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// +build linux - -package afpacket - -import ( - "unsafe" - - "golang.org/x/sys/unix" -) - -// setsockopt provides access to the setsockopt syscall. -func setsockopt(fd, level, name int, val unsafe.Pointer, vallen uintptr) error { - _, _, errno := unix.Syscall6( - unix.SYS_SETSOCKOPT, - uintptr(fd), - uintptr(level), - uintptr(name), - uintptr(val), - vallen, - 0, - ) - if errno != 0 { - return error(errno) - } - - return nil -} - -// getsockopt provides access to the getsockopt syscall. -func getsockopt(fd, level, name int, val unsafe.Pointer, vallen uintptr) error { - _, _, errno := unix.Syscall6( - unix.SYS_GETSOCKOPT, - uintptr(fd), - uintptr(level), - uintptr(name), - uintptr(val), - vallen, - 0, - ) - if errno != 0 { - return error(errno) - } - - return nil -} - -// htons converts a short (uint16) from host-to-network byte order. -// Thanks to mikioh for this neat trick: -// https://github.com/mikioh/-stdyng/blob/master/afpacket.go -func htons(i uint16) uint16 { - return (i<<8)&0xff00 | i>>8 -} diff --git a/vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.go b/vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.go deleted file mode 100644 index 8c3eb42..0000000 --- a/vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// +build linux,386 - -package afpacket - -import ( - "unsafe" - - "golang.org/x/sys/unix" -) - -const ( - sysSETSOCKOPT = 0xe - sysGETSOCKOPT = 0xf -) - -func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, unix.Errno) - -// setsockopt provides access to the setsockopt syscall. -func setsockopt(fd, level, name int, v unsafe.Pointer, l uintptr) error { - _, errno := socketcall( - sysSETSOCKOPT, - uintptr(fd), - uintptr(level), - uintptr(name), - uintptr(v), - l, - 0, - ) - if errno != 0 { - return error(errno) - } - - return nil -} - -func getsockopt(fd, level, name int, v unsafe.Pointer, l uintptr) error { - _, errno := socketcall( - sysGETSOCKOPT, - uintptr(fd), - uintptr(level), - uintptr(name), - uintptr(v), - l, - 0, - ) - if errno != 0 { - return error(errno) - } - - return nil -} diff --git a/vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.s b/vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.s deleted file mode 100644 index 7d0336a..0000000 --- a/vendor/github.com/google/gopacket/afpacket/sockopt_linux_386.s +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -TEXT ·socketcall(SB),4,$0-36 - JMP syscall·socketcall(SB) \ No newline at end of file diff --git a/vendor/github.com/google/gopacket/benchmark_test.go b/vendor/github.com/google/gopacket/benchmark_test.go deleted file mode 100644 index 74a1d28..0000000 --- a/vendor/github.com/google/gopacket/benchmark_test.go +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2012, Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package gopacket - -import ( - "runtime" - "testing" -) - -// A few benchmarks for figuring out exactly how fast some underlying Go -// things are. - -type testError struct{} - -func (t *testError) Error() string { return "abc" } - -func BenchmarkTypeAssertion(b *testing.B) { - var e error = &testError{} - for i := 0; i < b.N; i++ { - _, _ = e.(*testError) - } -} - -func BenchmarkMapLookup(b *testing.B) { - m := map[LayerType]bool{ - LayerTypePayload: true, - } - for i := 0; i < b.N; i++ { - _ = m[LayerTypePayload] - } -} - -func BenchmarkNilMapLookup(b *testing.B) { - var m map[LayerType]bool - for i := 0; i < b.N; i++ { - _ = m[LayerTypePayload] - } -} - -func BenchmarkNilMapLookupWithNilCheck(b *testing.B) { - var m map[LayerType]bool - for i := 0; i < b.N; i++ { - if m != nil { - _ = m[LayerTypePayload] - } - } -} - -func BenchmarkArrayLookup(b *testing.B) { - m := make([]bool, 100) - for i := 0; i < b.N; i++ { - _ = m[LayerTypePayload] - } -} - -var testError1 = &testError{} -var testError2 error = testError1 - -func BenchmarkTypeToInterface1(b *testing.B) { - var e error - for i := 0; i < b.N; i++ { - e = testError1 - } - // Have to do someting with 'e' or the compiler complains about an unused - // variable. - testError2 = e -} -func BenchmarkTypeToInterface2(b *testing.B) { - var e error - for i := 0; i < b.N; i++ { - e = testError2 - } - // Have to do someting with 'e' or the compiler complains about an unused - // variable. - testError2 = e -} - -var decodeOpts DecodeOptions - -func decodeOptsByValue(_ DecodeOptions) {} -func decodeOptsByPointer(_ *DecodeOptions) {} -func BenchmarkPassDecodeOptionsByValue(b *testing.B) { - for i := 0; i < b.N; i++ { - decodeOptsByValue(decodeOpts) - } -} -func BenchmarkPassDecodeOptionsByPointer(b *testing.B) { - for i := 0; i < b.N; i++ { - decodeOptsByPointer(&decodeOpts) - } -} - -func BenchmarkLockOSThread(b *testing.B) { - for i := 0; i < b.N; i++ { - runtime.LockOSThread() - } -} -func BenchmarkUnlockOSThread(b *testing.B) { - for i := 0; i < b.N; i++ { - runtime.UnlockOSThread() - } -} -func lockUnlock() { - runtime.LockOSThread() - runtime.UnlockOSThread() -} -func lockDeferUnlock() { - runtime.LockOSThread() - defer runtime.UnlockOSThread() -} -func BenchmarkLockUnlockOSThread(b *testing.B) { - for i := 0; i < b.N; i++ { - lockUnlock() - } -} -func BenchmarkLockDeferUnlockOSThread(b *testing.B) { - for i := 0; i < b.N; i++ { - lockDeferUnlock() - } -} - -func BenchmarkUnbufferedChannel(b *testing.B) { - ca := make(chan bool) - cb := make(chan bool) - defer close(ca) - go func() { - defer close(cb) - for _ = range ca { - cb <- true - } - }() - for i := 0; i < b.N; i++ { - ca <- true - <-cb - } -} -func BenchmarkSmallBufferedChannel(b *testing.B) { - ca := make(chan bool, 1) - cb := make(chan bool, 1) - defer close(ca) - go func() { - defer close(cb) - for _ = range ca { - cb <- true - } - }() - for i := 0; i < b.N; i++ { - ca <- true - <-cb - } -} -func BenchmarkLargeBufferedChannel(b *testing.B) { - ca := make(chan bool, 1000) - cb := make(chan bool, 1000) - defer close(ca) - go func() { - defer close(cb) - for _ = range ca { - cb <- true - } - }() - for i := 0; i < b.N; i++ { - ca <- true - <-cb - } -} -func BenchmarkEndpointFastHashShort(b *testing.B) { - e := Endpoint{typ: 1, len: 2} - for i := 0; i < b.N; i++ { - e.FastHash() - } -} -func BenchmarkEndpointFastHashLong(b *testing.B) { - e := Endpoint{typ: 1, len: 16} - for i := 0; i < b.N; i++ { - e.FastHash() - } -} -func BenchmarkFlowFastHashShort(b *testing.B) { - e := Flow{typ: 1, slen: 2, dlen: 2} - for i := 0; i < b.N; i++ { - e.FastHash() - } -} -func BenchmarkFlowFastHashLong(b *testing.B) { - e := Flow{typ: 1, slen: 16, dlen: 16} - for i := 0; i < b.N; i++ { - e.FastHash() - } -} diff --git a/vendor/github.com/google/gopacket/bsdbpf/bsd_bpf_sniffer.go b/vendor/github.com/google/gopacket/bsdbpf/bsd_bpf_sniffer.go deleted file mode 100644 index 3e1da0b..0000000 --- a/vendor/github.com/google/gopacket/bsdbpf/bsd_bpf_sniffer.go +++ /dev/null @@ -1,215 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// +build darwin dragonfly freebsd netbsd openbsd - -package bsdbpf - -import ( - "errors" - "fmt" - "syscall" - "time" - "unsafe" - - "github.com/google/gopacket" - "golang.org/x/sys/unix" -) - -const wordSize = int(unsafe.Sizeof(uintptr(0))) - -func bpfWordAlign(x int) int { - return (((x) + (wordSize - 1)) &^ (wordSize - 1)) -} - -// Options is used to configure various properties of the BPF sniffer. -// Default values are used when a nil Options pointer is passed to NewBPFSniffer. -type Options struct { - // BPFDeviceName is name of the bpf device to use for sniffing - // the network device. The default value of BPFDeviceName is empty string - // which causes the first available BPF device file /dev/bpfX to be used. - BPFDeviceName string - // ReadBufLen specifies the size of the buffer used to read packets - // off the wire such that multiple packets are buffered with each read syscall. - // Note that an individual packet larger than the buffer size is necessarily truncated. - // A larger buffer should increase performance because fewer read syscalls would be made. - // If zero is used, the system's default buffer length will be used which depending on the - // system may default to 4096 bytes which is not big enough to accomodate some link layers - // such as WLAN (802.11). - // ReadBufLen defaults to 32767... however typical BSD manual pages for BPF indicate that - // if the requested buffer size cannot be accommodated, the closest allowable size will be - // set and returned... hence our GetReadBufLen method. - ReadBufLen int - // Timeout is the length of time to wait before timing out on a read request. - // Timeout defaults to nil which means no timeout is used. - Timeout *syscall.Timeval - // Promisc is set to true for promiscuous mode ethernet sniffing. - // Promisc defaults to true. - Promisc bool - // Immediate is set to true to make our read requests return as soon as a packet becomes available. - // Otherwise, a read will block until either the kernel buffer becomes full or a timeout occurs. - // The default is true. - Immediate bool - // PreserveLinkAddr is set to false if the link level source address should be filled in automatically - // by the interface output routine. Set to true if the link level source address will be written, - // as provided, to the wire. - // The default is true. - PreserveLinkAddr bool -} - -var defaultOptions = Options{ - BPFDeviceName: "", - ReadBufLen: 32767, - Timeout: nil, - Promisc: true, - Immediate: true, - PreserveLinkAddr: true, -} - -// BPFSniffer is a struct used to track state of a BSD BPF ethernet sniffer -// such that gopacket's PacketDataSource interface is implemented. -type BPFSniffer struct { - options *Options - sniffDeviceName string - fd int - readBuffer []byte - lastReadLen int - readBytesConsumed int -} - -// NewBPFSniffer is used to create BSD-only BPF ethernet sniffer -// iface is the network interface device name that you wish to sniff -// options can set to nil in order to utilize default values for everything. -// Each field of Options also have a default setting if left unspecified by -// the user's custome Options struct. -func NewBPFSniffer(iface string, options *Options) (*BPFSniffer, error) { - var err error - enable := 1 - sniffer := BPFSniffer{ - sniffDeviceName: iface, - } - if options == nil { - sniffer.options = &defaultOptions - } else { - sniffer.options = options - } - - if sniffer.options.BPFDeviceName == "" { - sniffer.pickBpfDevice() - } - - // setup our read buffer - if sniffer.options.ReadBufLen == 0 { - sniffer.options.ReadBufLen, err = syscall.BpfBuflen(sniffer.fd) - if err != nil { - return nil, err - } - } else { - sniffer.options.ReadBufLen, err = syscall.SetBpfBuflen(sniffer.fd, sniffer.options.ReadBufLen) - if err != nil { - return nil, err - } - } - sniffer.readBuffer = make([]byte, sniffer.options.ReadBufLen) - - err = syscall.SetBpfInterface(sniffer.fd, sniffer.sniffDeviceName) - if err != nil { - return nil, err - } - - if sniffer.options.Immediate { - // turn immediate mode on. This makes the snffer non-blocking. - err = syscall.SetBpfImmediate(sniffer.fd, enable) - if err != nil { - return nil, err - } - } - - // the above call to syscall.SetBpfImmediate needs to be made - // before setting a timer otherwise the reads will block for the - // entire timer duration even if there are packets to return. - if sniffer.options.Timeout != nil { - err = syscall.SetBpfTimeout(sniffer.fd, sniffer.options.Timeout) - if err != nil { - return nil, err - } - } - - if sniffer.options.PreserveLinkAddr { - // preserves the link level source address... - // higher level protocol analyzers will not need this - err = syscall.SetBpfHeadercmpl(sniffer.fd, enable) - if err != nil { - return nil, err - } - } - - if sniffer.options.Promisc { - // forces the interface into promiscuous mode - err = syscall.SetBpfPromisc(sniffer.fd, enable) - if err != nil { - return nil, err - } - } - - return &sniffer, nil -} - -// Close is used to close the file-descriptor of the BPF device file. -func (b *BPFSniffer) Close() error { - return syscall.Close(b.fd) -} - -func (b *BPFSniffer) pickBpfDevice() { - var err error - b.options.BPFDeviceName = "" - for i := 0; i < 99; i++ { - b.options.BPFDeviceName = fmt.Sprintf("/dev/bpf%d", i) - b.fd, err = syscall.Open(b.options.BPFDeviceName, syscall.O_RDWR, 0) - if err == nil { - return - } - } - panic("failed to acquire a BPF device for read-write access") -} - -func (b *BPFSniffer) ReadPacketData() ([]byte, gopacket.CaptureInfo, error) { - var err error - if b.readBytesConsumed >= b.lastReadLen { - b.readBytesConsumed = 0 - b.readBuffer = make([]byte, b.options.ReadBufLen) - b.lastReadLen, err = syscall.Read(b.fd, b.readBuffer) - if err != nil { - b.lastReadLen = 0 - return nil, gopacket.CaptureInfo{}, err - } - } - hdr := (*unix.BpfHdr)(unsafe.Pointer(&b.readBuffer[b.readBytesConsumed])) - frameStart := b.readBytesConsumed + int(hdr.Hdrlen) - b.readBytesConsumed += bpfWordAlign(int(hdr.Hdrlen) + int(hdr.Caplen)) - - if frameStart+int(hdr.Caplen) > len(b.readBuffer) { - captureInfo := gopacket.CaptureInfo{ - Timestamp: time.Unix(int64(hdr.Tstamp.Sec), int64(hdr.Tstamp.Usec)*1000), - CaptureLength: 0, - Length: 0, - } - return nil, captureInfo, errors.New("BPF captured frame received with corrupted BpfHdr struct.") - } - - rawFrame := b.readBuffer[frameStart : frameStart+int(hdr.Caplen)] - captureInfo := gopacket.CaptureInfo{ - Timestamp: time.Unix(int64(hdr.Tstamp.Sec), int64(hdr.Tstamp.Usec)*1000), - CaptureLength: len(rawFrame), - Length: len(rawFrame), - } - return rawFrame, captureInfo, nil -} - -// GetReadBufLen returns the BPF read buffer length -func (b *BPFSniffer) GetReadBufLen() int { - return b.options.ReadBufLen -} diff --git a/vendor/github.com/google/gopacket/bytediff/bytediff.go b/vendor/github.com/google/gopacket/bytediff/bytediff.go deleted file mode 100644 index 63addd9..0000000 --- a/vendor/github.com/google/gopacket/bytediff/bytediff.go +++ /dev/null @@ -1,217 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// Package bytediff provides a simple diff utility for looking at differences in byte -// slices. It's slow, clunky, and not particularly good by any measure, but -// it does provide very useful visualizations for diffs between small byte -// slices. -// -// Our diff algorithm uses a dynamic programming implementation of longest common -// substring to find matching parts of slices, then recursively calls itself on -// the prefix/suffix of that matching part for each packet. This is a Bad Idea -// (tm) for normal (especially large) input, but for packets where large portions -// repeat frequently and we expect minor changes between results, it's actually -// quite useful. -package bytediff - -import ( - "bytes" - "fmt" -) - -// OutputFormat tells a Differences.String call how to format the set of -// differences into a human-readable string. Its internals are currently -// unexported because we may want to change them drastically in the future. For -// the moment, please just use one of the provided OutputFormats that comes with -// this library. -type OutputFormat struct { - start, finish, add, remove, change, reset string -} - -var ( - // BashOutput uses bash escape sequences to color output. - BashOutput = &OutputFormat{ - reset: "\033[0m", - remove: "\033[32m", - add: "\033[31m", - change: "\033[33m", - } - // HTMLOutput uses a
 to wrap output, and s to color it.
-	// HTMLOutput is pretty experimental, so use at your own risk ;)
-	HTMLOutput = &OutputFormat{
-		start:  "
",
-		finish: "
", - reset: "
", - remove: "", - add: "", - change: "", - } -) - -// longestCommonSubstring uses a O(MN) dynamic programming approach to find the -// longest common substring in a set of slices. It returns the index in each -// slice at which the substring begins, plus the length of the commonality. -func longestCommonSubstring(strA, strB []byte) (indexA, indexB, length int) { - lenA, lenB := len(strA), len(strB) - if lenA == 0 || lenB == 0 { - return 0, 0, 0 - } - arr := make([][]int, lenA) - for i := 0; i < lenA; i++ { - arr[i] = make([]int, lenB) - } - var maxLength int - var maxA, maxB int - for a := 0; a < lenA; a++ { - for b := 0; b < lenB; b++ { - if strA[a] == strB[b] { - length := 1 - if a > 0 && b > 0 { - length = arr[a-1][b-1] + 1 - } - arr[a][b] = length - if length > maxLength { - maxLength = length - maxA = a - maxB = b - } - } - } - } - a, b := maxA, maxB - for a >= 0 && b >= 0 && strA[a] == strB[b] { - indexA = a - indexB = b - a-- - b-- - length++ - } - return -} - -func intMax(a, b int) int { - if a > b { - return a - } - return b -} - -// Difference represents a single part of the data being diffed, containing -// information about both the original and new values. -// From and To are the sets of bytes in the original and the new byte slice. -// !Replace implies From == To (no change) -// len(To) == 0 implies From is being deleted -// len(From) == 0 implies To is being inserted -// else implies From is being replaced by To -type Difference struct { - Replace bool - From, To []byte -} - -// color returns the bash color for a given difference. -func (c *OutputFormat) color(d Difference) string { - switch { - case !d.Replace: - return "" - case len(d.From) == 0: - return c.remove - case len(d.To) == 0: - return c.add - default: - return c.change - } -} - -// Diff diffs strA and strB, returning a list of differences which -// can be used to construct either the original or new string. -// -// Diff is optimized for comparing VERY SHORT slices. It's meant for comparing -// things like packets off the wire, not large files or the like. -// As such, its runtime can be catastrophic if large inputs are passed in. -// You've been warned. -func Diff(strA, strB []byte) Differences { - if len(strA) == 0 && len(strB) == 0 { - return nil - } - ia, ib, l := longestCommonSubstring(strA, strB) - if l == 0 { - return Differences{ - Difference{true, strA, strB}, - } - } - beforeA, match, afterA := strA[:ia], strA[ia:ia+l], strA[ia+l:] - beforeB, afterB := strB[:ib], strB[ib+l:] - var diffs Differences - diffs = append(diffs, Diff(beforeA, beforeB)...) - diffs = append(diffs, Difference{false, match, match}) - diffs = append(diffs, Diff(afterA, afterB)...) - return diffs -} - -// Differences is a set of differences for a given diff'd pair of byte slices. -type Differences []Difference - -// String outputs a previously diff'd set of strings, showing differences -// between them, highlighted by colors. -// -// The output format of this function is NOT guaranteed consistent, and may be -// changed at any time by the library authors. It's meant solely for human -// consumption. -func (c *OutputFormat) String(diffs Differences) string { - var buf bytes.Buffer - count := 0 - fmt.Fprintf(&buf, "%s", c.start) - fmt.Fprintf(&buf, "00000000 ") - for i := 0; i < len(diffs); i++ { - diff := diffs[i] - color := c.color(diff) - reset := "" - if color != "" { - reset = c.reset - } - fmt.Fprint(&buf, color) - for _, b := range diff.From { - fmt.Fprintf(&buf, " %02x", b) - count++ - switch count % 16 { - case 0: - fmt.Fprintf(&buf, "%v\n%08x%v ", reset, count, color) - case 8: - fmt.Fprintf(&buf, " ") - } - } - fmt.Fprint(&buf, reset) - } - fmt.Fprintf(&buf, "\n\n00000000 ") - count = 0 - for i := 0; i < len(diffs); i++ { - diff := diffs[i] - str := diff.From - if diff.Replace { - str = diff.To - } - color := c.color(diff) - reset := "" - if color != "" { - reset = c.reset - } - fmt.Fprint(&buf, color) - for _, b := range str { - fmt.Fprintf(&buf, " %02x", b) - count++ - switch count % 16 { - case 0: - fmt.Fprintf(&buf, "%v\n%08x%v ", reset, count, color) - case 8: - fmt.Fprintf(&buf, " ") - } - } - fmt.Fprint(&buf, reset) - } - fmt.Fprint(&buf, "\n") - fmt.Fprintf(&buf, "%s", c.finish) - return string(buf.Bytes()) -} diff --git a/vendor/github.com/google/gopacket/bytediff/bytediff_test.go b/vendor/github.com/google/gopacket/bytediff/bytediff_test.go deleted file mode 100644 index 022ad4b..0000000 --- a/vendor/github.com/google/gopacket/bytediff/bytediff_test.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package bytediff - -import ( - "reflect" - "testing" -) - -func TestLCS(t *testing.T) { - for i, test := range []struct { - a, b []byte - indexA, indexB, length int - }{ - {[]byte{1, 2, 3}, []byte{1, 2, 3}, 0, 0, 3}, - {[]byte{0, 1, 2, 3}, []byte{1, 2, 3, 4}, 1, 0, 3}, - {[]byte{0, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3}, []byte{1, 2, 3, 4}, 4, 0, 4}, - {[]byte{1, 2, 2, 3, 4}, []byte{1, 2, 3, 4}, 2, 1, 3}, - {[]byte{0, 1, 2, 3, 4}, []byte{1, 1, 2, 2, 3, 4}, 2, 3, 3}, - } { - ia, ib, l := longestCommonSubstring(test.a, test.b) - if ia != test.indexA || ib != test.indexB || l != test.length { - t.Errorf("%d: want (%d %d %d) got (%d %d %d)", i, test.indexA, test.indexB, test.length, ia, ib, l) - } - } -} - -func TestDiff(t *testing.T) { - for i, test := range []struct { - a, b []byte - d Differences - }{ - { - []byte{0, 1, 2, 3, 4}, - []byte{1, 1, 2, 2, 3, 4}, - Differences{ - Difference{true, []byte{0}, []byte{}}, - Difference{false, []byte{1}, []byte{1}}, - Difference{true, []byte{}, []byte{1, 2}}, - Difference{false, []byte{2, 3, 4}, []byte{2, 3, 4}}, - }, - }, - } { - diffs := Diff(test.a, test.b) - if !reflect.DeepEqual(diffs, test.d) { - t.Errorf("%d want %v got %v", i, test.d, diffs) - } - } -} diff --git a/vendor/github.com/google/gopacket/dumpcommand/tcpdump.go b/vendor/github.com/google/gopacket/dumpcommand/tcpdump.go deleted file mode 100644 index 2d35722..0000000 --- a/vendor/github.com/google/gopacket/dumpcommand/tcpdump.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// Package dumpcommand implements a run function for pfdump and pcapdump -// with many similar flags/features to tcpdump. This code is split out seperate -// from data sources (pcap/pfring) so it can be used by both. -package dumpcommand - -import ( - "flag" - "fmt" - "log" - "os" - "time" - - "github.com/google/gopacket" - "github.com/google/gopacket/ip4defrag" - "github.com/google/gopacket/layers" // pulls in all layers decoders -) - -var ( - print = flag.Bool("print", true, "Print out packets, if false only prints out statistics") - maxcount = flag.Int("c", -1, "Only grab this many packets, then exit") - decoder = flag.String("decoder", "Ethernet", "Name of the decoder to use") - dump = flag.Bool("X", false, "If true, dump very verbose info on each packet") - statsevery = flag.Int("stats", 1000, "Output statistics every N packets") - printErrors = flag.Bool("errors", false, "Print out packet dumps of decode errors, useful for checking decoders against live traffic") - lazy = flag.Bool("lazy", false, "If true, do lazy decoding") - defrag = flag.Bool("defrag", false, "If true, do IPv4 defrag") -) - -func Run(src gopacket.PacketDataSource) { - if !flag.Parsed() { - log.Fatalln("Run called without flags.Parse() being called") - } - var dec gopacket.Decoder - var ok bool - if dec, ok = gopacket.DecodersByLayerName[*decoder]; !ok { - log.Fatalln("No decoder named", *decoder) - } - source := gopacket.NewPacketSource(src, dec) - source.Lazy = *lazy - source.NoCopy = true - source.DecodeStreamsAsDatagrams = true - fmt.Fprintln(os.Stderr, "Starting to read packets") - count := 0 - bytes := int64(0) - start := time.Now() - errors := 0 - truncated := 0 - layertypes := map[gopacket.LayerType]int{} - defragger := ip4defrag.NewIPv4Defragmenter() - - for packet := range source.Packets() { - count++ - bytes += int64(len(packet.Data())) - - // defrag the IPv4 packet if required - if *defrag { - ip4Layer := packet.Layer(layers.LayerTypeIPv4) - if ip4Layer == nil { - continue - } - ip4 := ip4Layer.(*layers.IPv4) - l := ip4.Length - - newip4, err := defragger.DefragIPv4(ip4) - if err != nil { - log.Fatalln("Error while de-fragmenting", err) - } else if newip4 == nil { - continue // packet fragment, we don't have whole packet yet. - } - if newip4.Length != l { - fmt.Printf("Decoding re-assembled packet: %s\n", newip4.NextLayerType()) - pb, ok := packet.(gopacket.PacketBuilder) - if !ok { - panic("Not a PacketBuilder") - } - nextDecoder := newip4.NextLayerType() - nextDecoder.Decode(newip4.Payload, pb) - } - } - - if *dump { - fmt.Println(packet.Dump()) - } else if *print { - fmt.Println(packet) - } - if !*lazy || *print || *dump { // if we've already decoded all layers... - for _, layer := range packet.Layers() { - layertypes[layer.LayerType()]++ - } - if packet.Metadata().Truncated { - truncated++ - } - if errLayer := packet.ErrorLayer(); errLayer != nil { - errors++ - if *printErrors { - fmt.Println("Error:", errLayer.Error()) - fmt.Println("--- Packet ---") - fmt.Println(packet.Dump()) - } - } - } - done := *maxcount > 0 && count >= *maxcount - if count%*statsevery == 0 || done { - fmt.Fprintf(os.Stderr, "Processed %v packets (%v bytes) in %v, %v errors and %v truncated packets\n", count, bytes, time.Since(start), errors, truncated) - if len(layertypes) > 0 { - fmt.Fprintf(os.Stderr, "Layer types seen: %+v\n", layertypes) - } - } - if done { - break - } - } -} diff --git a/vendor/github.com/google/gopacket/examples/arpscan/arpscan.go b/vendor/github.com/google/gopacket/examples/arpscan/arpscan.go deleted file mode 100644 index 1a0e33e..0000000 --- a/vendor/github.com/google/gopacket/examples/arpscan/arpscan.go +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// arpscan implements ARP scanning of all interfaces' local networks using -// gopacket and its subpackages. This example shows, among other things: -// * Generating and sending packet data -// * Reading in packet data and interpreting it -// * Use of the 'pcap' subpackage for reading/writing -package main - -import ( - "bytes" - "encoding/binary" - "errors" - "log" - "net" - "sync" - "time" - - "github.com/google/gopacket" - "github.com/google/gopacket/layers" - "github.com/google/gopacket/pcap" -) - -func main() { - // Get a list of all interfaces. - ifaces, err := net.Interfaces() - if err != nil { - panic(err) - } - - var wg sync.WaitGroup - for _, iface := range ifaces { - wg.Add(1) - // Start up a scan on each interface. - go func(iface net.Interface) { - defer wg.Done() - if err := scan(&iface); err != nil { - log.Printf("interface %v: %v", iface.Name, err) - } - }(iface) - } - // Wait for all interfaces' scans to complete. They'll try to run - // forever, but will stop on an error, so if we get past this Wait - // it means all attempts to write have failed. - wg.Wait() -} - -// scan scans an individual interface's local network for machines using ARP requests/replies. -// -// scan loops forever, sending packets out regularly. It returns an error if -// it's ever unable to write a packet. -func scan(iface *net.Interface) error { - // We just look for IPv4 addresses, so try to find if the interface has one. - var addr *net.IPNet - if addrs, err := iface.Addrs(); err != nil { - return err - } else { - for _, a := range addrs { - if ipnet, ok := a.(*net.IPNet); ok { - if ip4 := ipnet.IP.To4(); ip4 != nil { - addr = &net.IPNet{ - IP: ip4, - Mask: ipnet.Mask[len(ipnet.Mask)-4:], - } - break - } - } - } - } - // Sanity-check that the interface has a good address. - if addr == nil { - return errors.New("no good IP network found") - } else if addr.IP[0] == 127 { - return errors.New("skipping localhost") - } else if addr.Mask[0] != 0xff || addr.Mask[1] != 0xff { - return errors.New("mask means network is too large") - } - log.Printf("Using network range %v for interface %v", addr, iface.Name) - - // Open up a pcap handle for packet reads/writes. - handle, err := pcap.OpenLive(iface.Name, 65536, true, pcap.BlockForever) - if err != nil { - return err - } - defer handle.Close() - - // Start up a goroutine to read in packet data. - stop := make(chan struct{}) - go readARP(handle, iface, stop) - defer close(stop) - for { - // Write our scan packets out to the handle. - if err := writeARP(handle, iface, addr); err != nil { - log.Printf("error writing packets on %v: %v", iface.Name, err) - return err - } - // We don't know exactly how long it'll take for packets to be - // sent back to us, but 10 seconds should be more than enough - // time ;) - time.Sleep(10 * time.Second) - } -} - -// readARP watches a handle for incoming ARP responses we might care about, and prints them. -// -// readARP loops until 'stop' is closed. -func readARP(handle *pcap.Handle, iface *net.Interface, stop chan struct{}) { - src := gopacket.NewPacketSource(handle, layers.LayerTypeEthernet) - in := src.Packets() - for { - var packet gopacket.Packet - select { - case <-stop: - return - case packet = <-in: - arpLayer := packet.Layer(layers.LayerTypeARP) - if arpLayer == nil { - continue - } - arp := arpLayer.(*layers.ARP) - if arp.Operation != layers.ARPReply || bytes.Equal([]byte(iface.HardwareAddr), arp.SourceHwAddress) { - // This is a packet I sent. - continue - } - // Note: we might get some packets here that aren't responses to ones we've sent, - // if for example someone else sends US an ARP request. Doesn't much matter, though... - // all information is good information :) - log.Printf("IP %v is at %v", net.IP(arp.SourceProtAddress), net.HardwareAddr(arp.SourceHwAddress)) - } - } -} - -// writeARP writes an ARP request for each address on our local network to the -// pcap handle. -func writeARP(handle *pcap.Handle, iface *net.Interface, addr *net.IPNet) error { - // Set up all the layers' fields we can. - eth := layers.Ethernet{ - SrcMAC: iface.HardwareAddr, - DstMAC: net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, - EthernetType: layers.EthernetTypeARP, - } - arp := layers.ARP{ - AddrType: layers.LinkTypeEthernet, - Protocol: layers.EthernetTypeIPv4, - HwAddressSize: 6, - ProtAddressSize: 4, - Operation: layers.ARPRequest, - SourceHwAddress: []byte(iface.HardwareAddr), - SourceProtAddress: []byte(addr.IP), - DstHwAddress: []byte{0, 0, 0, 0, 0, 0}, - } - // Set up buffer and options for serialization. - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{ - FixLengths: true, - ComputeChecksums: true, - } - // Send one packet for every address. - for _, ip := range ips(addr) { - arp.DstProtAddress = []byte(ip) - gopacket.SerializeLayers(buf, opts, ð, &arp) - if err := handle.WritePacketData(buf.Bytes()); err != nil { - return err - } - } - return nil -} - -// ips is a simple and not very good method for getting all IPv4 addresses from a -// net.IPNet. It returns all IPs it can over the channel it sends back, closing -// the channel when done. -func ips(n *net.IPNet) (out []net.IP) { - num := binary.BigEndian.Uint32([]byte(n.IP)) - mask := binary.BigEndian.Uint32([]byte(n.Mask)) - num &= mask - for mask < 0xffffffff { - var buf [4]byte - binary.BigEndian.PutUint32(buf[:], num) - out = append(out, net.IP(buf[:])) - mask += 1 - num += 1 - } - return -} diff --git a/vendor/github.com/google/gopacket/examples/bidirectional/main.go b/vendor/github.com/google/gopacket/examples/bidirectional/main.go deleted file mode 100644 index 4b0b240..0000000 --- a/vendor/github.com/google/gopacket/examples/bidirectional/main.go +++ /dev/null @@ -1,192 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// This binary provides an example of connecting up bidirectional streams from -// the unidirectional streams provided by gopacket/tcpassembly. -package main - -import ( - "flag" - "fmt" - "github.com/google/gopacket" - "github.com/google/gopacket/examples/util" - "github.com/google/gopacket/layers" - "github.com/google/gopacket/pcap" - "github.com/google/gopacket/tcpassembly" - "log" - "time" -) - -var iface = flag.String("i", "eth0", "Interface to get packets from") -var snaplen = flag.Int("s", 16<<10, "SnapLen for pcap packet capture") -var filter = flag.String("f", "tcp", "BPF filter for pcap") -var logAllPackets = flag.Bool("v", false, "Logs every packet in great detail") - -// key is used to map bidirectional streams to each other. -type key struct { - net, transport gopacket.Flow -} - -// String prints out the key in a human-readable fashion. -func (k key) String() string { - return fmt.Sprintf("%v:%v", k.net, k.transport) -} - -// timeout is the length of time to wait befor flushing connections and -// bidirectional stream pairs. -const timeout time.Duration = time.Minute * 5 - -// myStream implements tcpassembly.Stream -type myStream struct { - bytes int64 // total bytes seen on this stream. - bidi *bidi // maps to my bidirectional twin. - done bool // if true, we've seen the last packet we're going to for this stream. -} - -// bidi stores each unidirectional side of a bidirectional stream. -// -// When a new stream comes in, if we don't have an opposite stream, a bidi is -// created with 'a' set to the new stream. If we DO have an opposite stream, -// 'b' is set to the new stream. -type bidi struct { - key key // Key of the first stream, mostly for logging. - a, b *myStream // the two bidirectional streams. - lastPacketSeen time.Time // last time we saw a packet from either stream. -} - -// myFactory implements tcpassmebly.StreamFactory -type myFactory struct { - // bidiMap maps keys to bidirectional stream pairs. - bidiMap map[key]*bidi -} - -// New handles creating a new tcpassembly.Stream. -func (f *myFactory) New(netFlow, tcpFlow gopacket.Flow) tcpassembly.Stream { - // Create a new stream. - s := &myStream{} - - // Find the bidi bidirectional struct for this stream, creating a new one if - // one doesn't already exist in the map. - k := key{netFlow, tcpFlow} - bd := f.bidiMap[k] - if bd == nil { - bd = &bidi{a: s, key: k} - log.Printf("[%v] created first side of bidirectional stream", bd.key) - // Register bidirectional with the reverse key, so the matching stream going - // the other direction will find it. - f.bidiMap[key{netFlow.Reverse(), tcpFlow.Reverse()}] = bd - } else { - log.Printf("[%v] found second side of bidirectional stream", bd.key) - bd.b = s - // Clear out the bidi we're using from the map, just in case. - delete(f.bidiMap, k) - } - s.bidi = bd - return s -} - -// emptyStream is used to finish bidi that only have one stream, in -// collectOldStreams. -var emptyStream = &myStream{done: true} - -// collectOldStreams finds any streams that haven't received a packet within -// 'timeout', and sets/finishes the 'b' stream inside them. The 'a' stream may -// still receive packets after this. -func (f *myFactory) collectOldStreams() { - cutoff := time.Now().Add(-timeout) - for k, bd := range f.bidiMap { - if bd.lastPacketSeen.Before(cutoff) { - log.Printf("[%v] timing out old stream", bd.key) - bd.b = emptyStream // stub out b with an empty stream. - delete(f.bidiMap, k) // remove it from our map. - bd.maybeFinish() // if b was the last stream we were waiting for, finish up. - } - } -} - -// Reassembled handles reassembled TCP stream data. -func (s *myStream) Reassembled(rs []tcpassembly.Reassembly) { - for _, r := range rs { - // For now, we'll simply count the bytes on each side of the TCP stream. - s.bytes += int64(len(r.Bytes)) - if r.Skip > 0 { - s.bytes += int64(r.Skip) - } - // Mark that we've received new packet data. - // We could just use time.Now, but by using r.Seen we handle the case - // where packets are being read from a file and could be very old. - if s.bidi.lastPacketSeen.After(r.Seen) { - s.bidi.lastPacketSeen = r.Seen - } - } -} - -// ReassemblyComplete marks this stream as finished. -func (s *myStream) ReassemblyComplete() { - s.done = true - s.bidi.maybeFinish() -} - -// maybeFinish will wait until both directions are complete, then print out -// stats. -func (bd *bidi) maybeFinish() { - switch { - case bd.a == nil: - log.Fatalf("[%v] a should always be non-nil, since it's set when bidis are created", bd.key) - case !bd.a.done: - log.Printf("[%v] still waiting on first stream", bd.key) - case bd.b == nil: - log.Printf("[%v] no second stream yet", bd.key) - case !bd.b.done: - log.Printf("[%v] still waiting on second stream", bd.key) - default: - log.Printf("[%v] FINISHED, bytes: %d tx, %d rx", bd.key, bd.a.bytes, bd.b.bytes) - } -} - -func main() { - defer util.Run()() - log.Printf("starting capture on interface %q", *iface) - // Set up pcap packet capture - handle, err := pcap.OpenLive(*iface, int32(*snaplen), true, pcap.BlockForever) - if err != nil { - panic(err) - } - if err := handle.SetBPFFilter(*filter); err != nil { - panic(err) - } - - // Set up assembly - streamFactory := &myFactory{bidiMap: make(map[key]*bidi)} - streamPool := tcpassembly.NewStreamPool(streamFactory) - assembler := tcpassembly.NewAssembler(streamPool) - - log.Println("reading in packets") - // Read in packets, pass to assembler. - packetSource := gopacket.NewPacketSource(handle, handle.LinkType()) - packets := packetSource.Packets() - ticker := time.Tick(timeout / 4) - for { - select { - case packet := <-packets: - if *logAllPackets { - log.Println(packet) - } - if packet.NetworkLayer() == nil || packet.TransportLayer() == nil || packet.TransportLayer().LayerType() != layers.LayerTypeTCP { - log.Println("Unusable packet") - continue - } - tcp := packet.TransportLayer().(*layers.TCP) - assembler.AssembleWithTimestamp(packet.NetworkLayer().NetworkFlow(), tcp, packet.Metadata().Timestamp) - - case <-ticker: - // Every minute, flush connections that haven't seen activity in the past minute. - log.Println("---- FLUSHING ----") - assembler.FlushOlderThan(time.Now().Add(-timeout)) - streamFactory.collectOldStreams() - } - } -} diff --git a/vendor/github.com/google/gopacket/examples/bytediff/bytediff.png b/vendor/github.com/google/gopacket/examples/bytediff/bytediff.png deleted file mode 100644 index 5aa3c8a..0000000 Binary files a/vendor/github.com/google/gopacket/examples/bytediff/bytediff.png and /dev/null differ diff --git a/vendor/github.com/google/gopacket/examples/bytediff/main.go b/vendor/github.com/google/gopacket/examples/bytediff/main.go deleted file mode 100644 index 2a4c11b..0000000 --- a/vendor/github.com/google/gopacket/examples/bytediff/main.go +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// This binary shows how to display byte differences to users via the bytediff -// library. -package main - -import ( - "fmt" - "github.com/google/gopacket/bytediff" -) - -var sliceA = []byte{ - 0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x20, 0xbc, 0x30, 0x5b, 0xe8, 0xd3, 0x49, - 0x08, 0x00, 0x45, 0x00, 0x01, 0xa4, 0x39, 0xdf, 0x40, 0x00, 0x40, 0x06, - 0x55, 0x5a, 0xac, 0x11, 0x51, 0x49, 0xad, 0xde, 0xfe, 0xe1, 0xc5, 0xf7, - 0x00, 0x50, 0xc5, 0x7e, 0x0e, 0x48, 0x49, 0x07, 0x42, 0x32, 0x80, 0x18, - 0x00, 0x73, 0x9a, 0x8f, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x03, 0x77, - 0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20, - 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, - 0x73, 0x74, 0x3a, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x69, 0x73, 0x68, - 0x2e, 0x63, 0x6f, 0x6d, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6b, 0x65, 0x65, 0x70, 0x2d, 0x61, - 0x6c, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c, - 0x61, 0x2f, 0x35, 0x2e, 0x30, 0x20, 0x28, 0x58, 0x31, 0x31, 0x3b, 0x20, - 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x20, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34, - 0x29, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x57, 0x65, 0x62, 0x4b, 0x69, - 0x74, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32, 0x20, 0x28, 0x4b, 0x48, 0x54, - 0x4d, 0x4c, 0x2c, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x47, 0x65, 0x63, - 0x6b, 0x6f, 0x29, 0x20, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x2f, 0x31, - 0x35, 0x2e, 0x30, 0x2e, 0x38, 0x37, 0x34, 0x2e, 0x31, 0x32, 0x31, 0x20, - 0x53, 0x61, 0x66, 0x61, 0x72, 0x69, 0x2f, 0x35, 0x2e, 0x31, - 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x74, 0x65, - 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x68, 0x74, 0x6d, - 0x6c, 0x2b, 0x78, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x6d, 0x6c, 0x3b, 0x71, 0x3d, - 0x30, 0x2e, 0x39, 0x2c, 0x2a, 0x2f, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, - 0x38, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45, 0x6e, - 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x67, 0x7a, 0x69, 0x70, - 0x2c, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64, 0x63, - 0x68, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c, 0x61, - 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x65, 0x6e, 0x2d, 0x55, - 0x53, 0x2c, 0x65, 0x6e, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x38, 0x0d, 0x0a, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x73, - 0x65, 0x74, 0x3a, 0x20, 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x35, 0x39, - 0x2d, 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x3b, 0x71, 0x3d, 0x30, - 0x2e, 0x37, 0x2c, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x33, 0x0d, 0x0a, - 0x0d, 0x0a, -} -var sliceB = []byte{ - 0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x20, 0xbc, 0x30, 0x5b, 0xe8, 0xd3, 0x49, - 0x08, 0x00, 0x45, 0x00, 0x01, 0xa4, 0x39, 0xdf, 0x40, 0x00, 0x40, 0x06, - 0x55, 0x5a, 0xac, 0x11, 0x51, 0x49, 0xad, 0xde, 0xfe, 0xe1, 0xc5, 0xf7, - 0x00, 0x50, 0xc5, 0x7e, 0x0e, 0x48, 0x49, 0x07, 0x42, 0x32, 0x80, 0x18, - 0x00, 0x73, 0x9a, 0x8f, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x03, 0x77, - 0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20, - 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, - 0x73, 0x74, 0x3a, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x69, 0x73, 0x68, - 0x2e, 0x63, 0x6f, 0x6d, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x6c, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c, - 0x61, 0x2f, 0x35, 0x2e, 0x30, 0x20, 0x28, 0x58, 0x31, 0x31, 0x3b, 0x20, - 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x20, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34, - 0x29, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x57, 0x65, 0x62, 0x4b, 0x69, - 0x74, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32, 0x20, 0x28, 0x4b, 0x48, 0x54, - 0x4d, 0x4c, 0x2c, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x47, 0x65, 0x63, - 0x6b, 0x6f, 0x29, 0x20, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x2f, 0x31, - 0x35, 0x2e, 0x30, 0x2e, 0x38, 0x37, 0x34, 0x2e, 0x31, 0x32, 0x31, 0x20, - 0x53, 0x61, 0x66, 0x61, 0x72, 0x69, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32, - 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x74, 0x65, - 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x68, 0x74, 0x6d, - 0x6c, 0x2b, 0x78, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x6d, 0x6c, 0x3b, 0x71, 0x3d, - 0x30, 0x2e, 0x39, 0x2c, 0x2a, 0x2f, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, - 0x38, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45, 0x6e, - 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x67, 0x7a, 0x69, 0x70, - 0x2c, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64, 0x63, - 0x68, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c, 0x61, - 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x65, 0x6e, 0x2d, 0x55, - 0x53, 0x2c, 0x65, 0x6e, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x38, 0x0d, 0x0a, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x73, - 0x65, 0x74, 0x3a, 0x20, 0x49, 0x53, 0x4f, 0x2e, 0x39, 0x55, 0x35, 0x39, - 0x2d, 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x3b, 0x71, 0x3d, 0x30, - 0x2e, 0x37, 0x2c, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x33, 0x0d, 0x0a, - 0x0d, 0x0a, -} - -func main() { - fmt.Println(bytediff.BashOutput.String(bytediff.Diff(sliceA, sliceB))) -} diff --git a/vendor/github.com/google/gopacket/examples/httpassembly/main.go b/vendor/github.com/google/gopacket/examples/httpassembly/main.go deleted file mode 100644 index 02af21e..0000000 --- a/vendor/github.com/google/gopacket/examples/httpassembly/main.go +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// This binary provides sample code for using the gopacket TCP assembler and TCP -// stream reader. It reads packets off the wire and reconstructs HTTP requests -// it sees, logging them. -package main - -import ( - "bufio" - "flag" - "io" - "log" - "net/http" - "time" - - "github.com/google/gopacket" - "github.com/google/gopacket/examples/util" - "github.com/google/gopacket/layers" - "github.com/google/gopacket/pcap" - "github.com/google/gopacket/tcpassembly" - "github.com/google/gopacket/tcpassembly/tcpreader" -) - -var iface = flag.String("i", "eth0", "Interface to get packets from") -var fname = flag.String("r", "", "Filename to read from, overrides -i") -var snaplen = flag.Int("s", 1600, "SnapLen for pcap packet capture") -var filter = flag.String("f", "tcp and dst port 80", "BPF filter for pcap") -var logAllPackets = flag.Bool("v", false, "Logs every packet in great detail") - -// Build a simple HTTP request parser using tcpassembly.StreamFactory and tcpassembly.Stream interfaces - -// httpStreamFactory implements tcpassembly.StreamFactory -type httpStreamFactory struct{} - -// httpStream will handle the actual decoding of http requests. -type httpStream struct { - net, transport gopacket.Flow - r tcpreader.ReaderStream -} - -func (h *httpStreamFactory) New(net, transport gopacket.Flow) tcpassembly.Stream { - hstream := &httpStream{ - net: net, - transport: transport, - r: tcpreader.NewReaderStream(), - } - go hstream.run() // Important... we must guarantee that data from the reader stream is read. - - // ReaderStream implements tcpassembly.Stream, so we can return a pointer to it. - return &hstream.r -} - -func (h *httpStream) run() { - buf := bufio.NewReader(&h.r) - for { - req, err := http.ReadRequest(buf) - if err == io.EOF { - // We must read until we see an EOF... very important! - return - } else if err != nil { - log.Println("Error reading stream", h.net, h.transport, ":", err) - } else { - bodyBytes := tcpreader.DiscardBytesToEOF(req.Body) - req.Body.Close() - log.Println("Received request from stream", h.net, h.transport, ":", req, "with", bodyBytes, "bytes in request body") - } - } -} - -func main() { - defer util.Run()() - var handle *pcap.Handle - var err error - - // Set up pcap packet capture - if *fname != "" { - log.Printf("Reading from pcap dump %q", *fname) - handle, err = pcap.OpenOffline(*fname) - } else { - log.Printf("Starting capture on interface %q", *iface) - handle, err = pcap.OpenLive(*iface, int32(*snaplen), true, pcap.BlockForever) - } - if err != nil { - log.Fatal(err) - } - - if err := handle.SetBPFFilter(*filter); err != nil { - log.Fatal(err) - } - - // Set up assembly - streamFactory := &httpStreamFactory{} - streamPool := tcpassembly.NewStreamPool(streamFactory) - assembler := tcpassembly.NewAssembler(streamPool) - - log.Println("reading in packets") - // Read in packets, pass to assembler. - packetSource := gopacket.NewPacketSource(handle, handle.LinkType()) - packets := packetSource.Packets() - ticker := time.Tick(time.Minute) - for { - select { - case packet := <-packets: - // A nil packet indicates the end of a pcap file. - if packet == nil { - return - } - if *logAllPackets { - log.Println(packet) - } - if packet.NetworkLayer() == nil || packet.TransportLayer() == nil || packet.TransportLayer().LayerType() != layers.LayerTypeTCP { - log.Println("Unusable packet") - continue - } - tcp := packet.TransportLayer().(*layers.TCP) - assembler.AssembleWithTimestamp(packet.NetworkLayer().NetworkFlow(), tcp, packet.Metadata().Timestamp) - - case <-ticker: - // Every minute, flush connections that haven't seen activity in the past 2 minutes. - assembler.FlushOlderThan(time.Now().Add(time.Minute * -2)) - } - } -} diff --git a/vendor/github.com/google/gopacket/examples/pcapdump/main.go b/vendor/github.com/google/gopacket/examples/pcapdump/main.go deleted file mode 100644 index 373dee2..0000000 --- a/vendor/github.com/google/gopacket/examples/pcapdump/main.go +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// The pcapdump binary implements a tcpdump-like command line tool with gopacket -// using pcap as a backend data collection mechanism. -package main - -import ( - "flag" - "fmt" - "github.com/google/gopacket/dumpcommand" - "github.com/google/gopacket/examples/util" - "github.com/google/gopacket/pcap" - "log" - "os" - "strings" - "time" -) - -var iface = flag.String("i", "eth0", "Interface to read packets from") -var fname = flag.String("r", "", "Filename to read from, overrides -i") -var snaplen = flag.Int("s", 65536, "Snap length (number of bytes max to read per packet") -var tstype = flag.String("timestamp_type", "", "Type of timestamps to use") -var promisc = flag.Bool("promisc", true, "Set promiscuous mode") - -func main() { - defer util.Run()() - var handle *pcap.Handle - var err error - if *fname != "" { - if handle, err = pcap.OpenOffline(*fname); err != nil { - log.Fatal("PCAP OpenOffline error:", err) - } - } else { - // This is a little complicated because we want to allow all possible options - // for creating the packet capture handle... instead of all this you can - // just call pcap.OpenLive if you want a simple handle. - inactive, err := pcap.NewInactiveHandle(*iface) - if err != nil { - log.Fatalf("could not create: %v", err) - } - defer inactive.CleanUp() - if err = inactive.SetSnapLen(*snaplen); err != nil { - log.Fatalf("could not set snap length: %v", err) - } else if err = inactive.SetPromisc(*promisc); err != nil { - log.Fatalf("could not set promisc mode: %v", err) - } else if err = inactive.SetTimeout(time.Second); err != nil { - log.Fatalf("could not set timeout: %v", err) - } - if *tstype != "" { - if t, err := pcap.TimestampSourceFromString(*tstype); err != nil { - log.Fatalf("Supported timestamp types: %v", inactive.SupportedTimestamps()) - } else if err := inactive.SetTimestampSource(t); err != nil { - log.Fatalf("Supported timestamp types: %v", inactive.SupportedTimestamps()) - } - } - if handle, err = inactive.Activate(); err != nil { - log.Fatal("PCAP Activate error:", err) - } - defer handle.Close() - } - if len(flag.Args()) > 0 { - bpffilter := strings.Join(flag.Args(), " ") - fmt.Fprintf(os.Stderr, "Using BPF filter %q\n", bpffilter) - if err = handle.SetBPFFilter(bpffilter); err != nil { - log.Fatal("BPF filter error:", err) - } - } - dumpcommand.Run(handle) -} diff --git a/vendor/github.com/google/gopacket/examples/pcaplay/main.go b/vendor/github.com/google/gopacket/examples/pcaplay/main.go deleted file mode 100644 index d36d860..0000000 --- a/vendor/github.com/google/gopacket/examples/pcaplay/main.go +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// The pcaplay binary load an offline capture (pcap file) and replay -// it on the select interface, with an emphasis on packet timing -package main - -import ( - "flag" - "fmt" - "io" - "log" - "os" - "strings" - "time" - - "github.com/google/gopacket" - "github.com/google/gopacket/examples/util" - "github.com/google/gopacket/pcap" -) - -var iface = flag.String("i", "eth0", "Interface to write packets to") -var fname = flag.String("r", "", "Filename to read from") -var fast = flag.Bool("f", false, "Send each packets as fast as possible") - -var lastTS time.Time -var lastSend time.Time - -var start time.Time -var bytesSent int - -func writePacketDelayed(handle *pcap.Handle, buf []byte, ci gopacket.CaptureInfo) { - if ci.CaptureLength != ci.Length { - // do not write truncated packets - return - } - - intervalInCapture := ci.Timestamp.Sub(lastTS) - elapsedTime := time.Since(lastSend) - - if (intervalInCapture > elapsedTime) && !lastSend.IsZero() { - time.Sleep(intervalInCapture - elapsedTime) - } - - lastSend = time.Now() - writePacket(handle, buf) - lastTS = ci.Timestamp -} - -func writePacket(handle *pcap.Handle, buf []byte) error { - if err := handle.WritePacketData(buf); err != nil { - log.Printf("Failed to send packet: %s\n", err) - return err - } - return nil -} - -func pcapInfo(filename string) (start time.Time, end time.Time, packets int, size int) { - handleRead, err := pcap.OpenOffline(*fname) - if err != nil { - log.Fatal("PCAP OpenOffline error (handle to read packet):", err) - } - - var previousTs time.Time - var deltaTotal time.Duration - - for { - data, ci, err := handleRead.ReadPacketData() - if err != nil && err != io.EOF { - log.Fatal(err) - } else if err == io.EOF { - break - } else { - - if start.IsZero() { - start = ci.Timestamp - } - end = ci.Timestamp - packets++ - size += len(data) - - if previousTs.IsZero() { - previousTs = ci.Timestamp - } else { - deltaTotal += ci.Timestamp.Sub(previousTs) - previousTs = ci.Timestamp - } - } - } - sec := int(deltaTotal.Seconds()) - if sec == 0 { - sec = 1 - } - fmt.Printf("Avg packet rate %d/s\n", packets/sec) - return start, end, packets, size -} - -func main() { - defer util.Run()() - - // Sanity checks - if *fname == "" { - log.Fatal("Need a input file") - } - - // Open PCAP file + handle potential BPF Filter - handleRead, err := pcap.OpenOffline(*fname) - if err != nil { - log.Fatal("PCAP OpenOffline error (handle to read packet):", err) - } - defer handleRead.Close() - if len(flag.Args()) > 0 { - bpffilter := strings.Join(flag.Args(), " ") - fmt.Fprintf(os.Stderr, "Using BPF filter %q\n", bpffilter) - if err = handleRead.SetBPFFilter(bpffilter); err != nil { - log.Fatal("BPF filter error:", err) - } - } - // Open up a second pcap handle for packet writes. - handleWrite, err := pcap.OpenLive(*iface, 65536, true, pcap.BlockForever) - if err != nil { - log.Fatal("PCAP OpenLive error (handle to write packet):", err) - } - defer handleWrite.Close() - - start = time.Now() - pkt := 0 - tsStart, tsEnd, packets, size := pcapInfo(*fname) - - // Loop over packets and write them - for { - data, ci, err := handleRead.ReadPacketData() - switch { - case err == io.EOF: - fmt.Printf("\nFinished in %s", time.Since(start)) - return - case err != nil: - log.Printf("Failed to read packet %d: %s\n", pkt, err) - default: - if *fast { - writePacket(handleWrite, data) - } else { - writePacketDelayed(handleWrite, data, ci) - } - - bytesSent += len(data) - duration := time.Since(start) - pkt++ - - if duration > time.Second { - rate := bytesSent / int(duration.Seconds()) - remainingTime := tsEnd.Sub(tsStart) - duration - fmt.Printf("\rrate %d kB/sec - sent %d/%d kB - %d/%d packets - remaining time %s", - rate/1000, bytesSent/1000, size/1000, - pkt, packets, remainingTime) - } - } - } - -} diff --git a/vendor/github.com/google/gopacket/examples/pfdump/main.go b/vendor/github.com/google/gopacket/examples/pfdump/main.go deleted file mode 100644 index 4b3ace6..0000000 --- a/vendor/github.com/google/gopacket/examples/pfdump/main.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// The pfdump binary implements a tcpdump-like command line tool with gopacket -// using pfring as a backend data collection mechanism. -package main - -import ( - "flag" - "fmt" - "github.com/google/gopacket/dumpcommand" - "github.com/google/gopacket/examples/util" - "github.com/google/gopacket/pfring" - "log" - "os" - "strings" -) - -var iface = flag.String("i", "eth0", "Interface to read packets from") -var snaplen = flag.Int("s", 65536, "Snap length (number of bytes max to read per packet") -var cluster = flag.Int("cluster", -1, "If >= 0, sets the pfring cluster to this value") -var clustertype = flag.Int("clustertype", int(pfring.ClusterPerFlow), "Cluster type") - -func main() { - defer util.Run()() - var ring *pfring.Ring - var err error - if ring, err = pfring.NewRing(*iface, uint32(*snaplen), pfring.FlagPromisc); err != nil { - log.Fatalln("pfring ring creation error:", err) - } - if len(flag.Args()) > 0 { - bpffilter := strings.Join(flag.Args(), " ") - fmt.Fprintf(os.Stderr, "Using BPF filter %q\n", bpffilter) - if err = ring.SetBPFFilter(bpffilter); err != nil { - log.Fatalln("BPF filter error:", err) - } - } - if *cluster >= 0 { - if err = ring.SetCluster(*cluster, pfring.ClusterType(*clustertype)); err != nil { - log.Fatalln("pfring SetCluster error:", err) - } - } - if err = ring.SetSocketMode(pfring.ReadOnly); err != nil { - log.Fatalln("pfring SetSocketMode error:", err) - } else if err = ring.Enable(); err != nil { - log.Fatalln("pfring Enable error:", err) - } - dumpcommand.Run(ring) -} diff --git a/vendor/github.com/google/gopacket/examples/reassemblydump/compare.sh b/vendor/github.com/google/gopacket/examples/reassemblydump/compare.sh deleted file mode 100755 index 671d29f..0000000 --- a/vendor/github.com/google/gopacket/examples/reassemblydump/compare.sh +++ /dev/null @@ -1,103 +0,0 @@ -#!/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 " - echo "Compares tcpreassembly against tcpflow" - echo "" - echo "$@" - exit 1 -} - -debug() { - return # comment me for debug - echo "$@" -} - -die() -{ - ( - echo "$@" - echo - ) >&2 - exit 1 -} - -rename() -{ - local path="$1" - local filter="$2" - find "$path" -type f -name "$filter" -print0 | - while IFS= read -r -d $'\0' f; do - local sha256="$(sha256sum "$f" | cut -d ' ' -f 1)" - local target="$(dirname $f)/../sha256/$sha256" - debug "$target → $f" - mkdir -p "$(dirname "$target")" || return 1 - if [ ! -f "$target" ]; then - ln -sr "$f" "$target" || return 1 - fi - done - return $? -} - -main() -{ - local src="$1" - local out="$2" - - # TODO: make options - local extra="" - extra="$extra -debug" - extra="$extra -cpuprofile "$out/gopacket/cpu.prof"" - extra="$extra -memprofile "$out/gopacket/mem.prof"" - - [ ! -f "$src" ] && usage "Missing pcap" - [ ! -d "$out" ] && ( mkdir "$out" || die "Failed to create $out" ) - - mkdir -p "$out/gopacket/all" || die "Failed to create $out/gopacket/all" - mkdir -p "$out/tcpflow/all" || die "Faield to create $out/tcpflow/all" - - echo " * Running go reassembly" - time ./reassemblydump -r "$src" $debug -output "$out/gopacket/all" $extra -writeincomplete -ignorefsmerr -nooptcheck -allowmissinginit port 80 &> "$out/gopacket.txt" || die "Failed to run reassmbly. Check $out/gopacket.txt" - echo " * Running tcpflow" - time tcpflow -e http -r "$src" -o "$out/tcpflow/all" port 80 &> "$out/tcpflow.txt" || die "Failed to run tcpflow. Check $out/tcpflow.txt" - - echo " * Creating sha256sum symlinks for gopacket" - rename "$out/gopacket/all" '*' || die "Failed to rename in $out/gopacket" - echo " * Creating sha256sum symlinks for tcpflow" - rename "$out/tcpflow/all" '*HTTPBODY*' || die "Failed to rename in $out/tcpflow" - - # Remove identical files - echo " * Finding identical files" - local nb=0 - mkdir -p "$out/gopacket/sha256-equal" - mkdir -p "$out/tcpflow/sha256-equal" - for f in "$out/gopacket/sha256/"*; do - local f="$(basename "$f")" - [ -f "$out/tcpflow/sha256/$f" ] && { - debug " $f" - mv "$out/gopacket/sha256/$f" "$out/gopacket/sha256-equal" - mv "$out/tcpflow/sha256/$f" "$out/tcpflow/sha256-equal" - nb=$((nb+1)) - } - done - echo " → found $nb files" - - echo " * Diffing {gopacket,tcpflow}/sha256" - local rc=0 - for p in "gopacket" "tcpflow"; do - local nb=$(ls -1 "$out/$p/sha256/" | wc -l) - if [ $nb -ne 0 ]; then - rc=$((rc+1)) - echo " → $nb files in $out/$p/sha256" - fi - done - return $rc -} - -main "$@" -exit $? diff --git a/vendor/github.com/google/gopacket/examples/reassemblydump/main.go b/vendor/github.com/google/gopacket/examples/reassemblydump/main.go deleted file mode 100644 index 9fc3791..0000000 --- a/vendor/github.com/google/gopacket/examples/reassemblydump/main.go +++ /dev/null @@ -1,650 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// The pcapdump binary implements a tcpdump-like command line tool with gopacket -// using pcap as a backend data collection mechanism. -package main - -import ( - "bufio" - "bytes" - "compress/gzip" - "encoding/binary" - "encoding/hex" - "flag" - "fmt" - "io" - "io/ioutil" - "log" - "net/http" - "net/url" - "os" - "os/signal" - "path" - "runtime/pprof" - "strings" - "sync" - "time" - - "github.com/google/gopacket" - "github.com/google/gopacket/examples/util" - "github.com/google/gopacket/ip4defrag" - "github.com/google/gopacket/layers" // pulls in all layers decoders - "github.com/google/gopacket/pcap" - "github.com/google/gopacket/reassembly" -) - -var maxcount = flag.Int("c", -1, "Only grab this many packets, then exit") -var decoder = flag.String("decoder", "", "Name of the decoder to use (default: guess from capture)") -var statsevery = flag.Int("stats", 1000, "Output statistics every N packets") -var lazy = flag.Bool("lazy", false, "If true, do lazy decoding") -var nodefrag = flag.Bool("nodefrag", false, "If true, do not do IPv4 defrag") -var checksum = flag.Bool("checksum", false, "Check TCP checksum") -var nooptcheck = flag.Bool("nooptcheck", false, "Do not check TCP options (useful to ignore MSS on captures with TSO)") -var ignorefsmerr = flag.Bool("ignorefsmerr", false, "Ignore TCP FSM errors") -var allowmissinginit = flag.Bool("allowmissinginit", false, "Support streams without SYN/SYN+ACK/ACK sequence") -var verbose = flag.Bool("verbose", false, "Be verbose") -var debug = flag.Bool("debug", false, "Display debug information") -var quiet = flag.Bool("quiet", false, "Be quiet regarding errors") - -// http -var nohttp = flag.Bool("nohttp", false, "Disable HTTP parsing") -var output = flag.String("output", "", "Path to create file for HTTP 200 OK responses") -var writeincomplete = flag.Bool("writeincomplete", false, "Write incomplete response") - -var hexdump = flag.Bool("dump", false, "Dump HTTP request/response as hex") -var hexdumppkt = flag.Bool("dumppkt", false, "Dump packet as hex") - -// capture -var iface = flag.String("i", "eth0", "Interface to read packets from") -var fname = flag.String("r", "", "Filename to read from, overrides -i") -var snaplen = flag.Int("s", 65536, "Snap length (number of bytes max to read per packet") -var tstype = flag.String("timestamp_type", "", "Type of timestamps to use") -var promisc = flag.Bool("promisc", true, "Set promiscuous mode") - -var memprofile = flag.String("memprofile", "", "Write memory profile") - -var stats struct { - ipdefrag int - missedBytes int - pkt int - sz int - totalsz int - rejectFsm int - rejectOpt int - rejectConnFsm int - reassembled int - outOfOrderBytes int - outOfOrderPackets int - biggestChunkBytes int - biggestChunkPackets int - overlapBytes int - overlapPackets int -} - -const closeTimeout time.Duration = time.Hour * 24 // Closing inactive: TODO: from CLI -const timeout time.Duration = time.Minute * 5 // Pending bytes: TODO: from CLI - -/* - * HTTP part - */ - -type httpReader struct { - ident string - isClient bool - bytes chan []byte - data []byte - hexdump bool - parent *tcpStream -} - -func (h *httpReader) Read(p []byte) (int, error) { - ok := true - for ok && len(h.data) == 0 { - h.data, ok = <-h.bytes - } - if !ok || len(h.data) == 0 { - return 0, io.EOF - } - - l := copy(p, h.data) - h.data = h.data[l:] - return l, nil -} - -var outputLevel int -var errorsMap map[string]uint -var errors uint - -// Too bad for perf that a... is evaluated -func Error(t string, s string, a ...interface{}) { - errors++ - nb, _ := errorsMap[t] - errorsMap[t] = nb + 1 - if outputLevel >= 0 { - fmt.Printf(s, a...) - } -} -func Info(s string, a ...interface{}) { - if outputLevel >= 1 { - fmt.Printf(s, a...) - } -} -func Debug(s string, a ...interface{}) { - if outputLevel >= 2 { - fmt.Printf(s, a...) - } -} - -func (h *httpReader) run(wg *sync.WaitGroup) { - defer wg.Done() - b := bufio.NewReader(h) - for true { - if h.isClient { - req, err := http.ReadRequest(b) - if err == io.EOF || err == io.ErrUnexpectedEOF { - break - } else if err != nil { - Error("HTTP-request", "HTTP/%s Request error: %s (%v,%+v)\n", h.ident, err, err, err) - continue - } - body, err := ioutil.ReadAll(req.Body) - s := len(body) - if err != nil { - Error("HTTP-request-body", "Got body err: %s\n", err) - } else if h.hexdump { - Info("Body(%d/0x%x)\n%s\n", len(body), len(body), hex.Dump(body)) - } - req.Body.Close() - Info("HTTP/%s Request: %s %s (body:%d)\n", h.ident, req.Method, req.URL, s) - h.parent.urls = append(h.parent.urls, req.URL.String()) - } else { - res, err := http.ReadResponse(b, nil) - var req string - if len(h.parent.urls) == 0 { - req = fmt.Sprintf("") - } else { - req, h.parent.urls = h.parent.urls[0], h.parent.urls[1:] - } - if err == io.EOF || err == io.ErrUnexpectedEOF { - break - } else if err != nil { - Error("HTTP-response", "HTTP/%s Response error: %s (%v,%+v)\n", h.ident, err, err, err) - continue - } - body, err := ioutil.ReadAll(res.Body) - s := len(body) - if err != nil { - Error("HTTP-response-body", "HTTP/%s: failed to get body(parsed len:%d): %s\n", h.ident, s, err) - } - if h.hexdump { - Info("Body(%d/0x%x)\n%s\n", len(body), len(body), hex.Dump(body)) - } - res.Body.Close() - sym := "," - if res.ContentLength > 0 && res.ContentLength != int64(s) { - sym = "!=" - } - contentType, ok := res.Header["Content-Type"] - if !ok { - contentType = []string{http.DetectContentType(body)} - } - encoding := res.Header["Content-Encoding"] - Info("HTTP/%s Response: %s URL:%s (%d%s%d%s) -> %s\n", h.ident, res.Status, req, res.ContentLength, sym, s, contentType, encoding) - if (err == nil || *writeincomplete) && *output != "" { - base := url.QueryEscape(path.Base(req)) - if err != nil { - base = "incomplete-" + base - } - base = path.Join(*output, base) - if len(base) > 250 { - base = base[:250] + "..." - } - if base == *output { - base = path.Join(*output, "noname") - } - target := base - n := 0 - for true { - _, err := os.Stat(target) - //if os.IsNotExist(err) != nil { - if err != nil { - break - } - target = fmt.Sprintf("%s-%d", base, n) - n++ - } - f, err := os.Create(target) - if err != nil { - Error("HTTP-create", "Cannot create %s: %s\n", target, err) - continue - } - var r io.Reader - r = bytes.NewBuffer(body) - if len(encoding) > 0 && (encoding[0] == "gzip" || encoding[0] == "deflate") { - r, err = gzip.NewReader(r) - if err != nil { - Error("HTTP-gunzip", "Failed to gzip decode: %s", err) - } - } - if err == nil { - w, err := io.Copy(f, r) - if _, ok := r.(*gzip.Reader); ok { - r.(*gzip.Reader).Close() - } - f.Close() - if err != nil { - Error("HTTP-save", "%s: failed to save %s (l:%d): %s\n", h.ident, target, w, err) - } else { - Info("%s: Saved %s (l:%d)\n", h.ident, target, w) - } - } - } - } - } -} - -/* - * The TCP factory: returns a new Stream - */ -type tcpStreamFactory struct { - wg sync.WaitGroup - doHTTP bool -} - -func (factory *tcpStreamFactory) New(net, transport gopacket.Flow, tcp *layers.TCP, ac reassembly.AssemblerContext) reassembly.Stream { - Debug("* NEW: %s %s\n", net, transport) - fsmOptions := reassembly.TCPSimpleFSMOptions{ - SupportMissingEstablishment: *allowmissinginit, - } - stream := &tcpStream{ - net: net, - transport: transport, - isDNS: tcp.SrcPort == 53 || tcp.DstPort == 53, - isHTTP: (tcp.SrcPort == 80 || tcp.DstPort == 80) && factory.doHTTP, - reversed: tcp.SrcPort == 80, - tcpstate: reassembly.NewTCPSimpleFSM(fsmOptions), - ident: fmt.Sprintf("%s:%s", net, transport), - optchecker: reassembly.NewTCPOptionCheck(), - } - if stream.isHTTP { - stream.client = httpReader{ - bytes: make(chan []byte), - ident: fmt.Sprintf("%s %s", net, transport), - hexdump: *hexdump, - parent: stream, - isClient: true, - } - stream.server = httpReader{ - bytes: make(chan []byte), - ident: fmt.Sprintf("%s %s", net.Reverse(), transport.Reverse()), - hexdump: *hexdump, - parent: stream, - } - factory.wg.Add(2) - go stream.client.run(&factory.wg) - go stream.server.run(&factory.wg) - } - return stream -} - -func (factory *tcpStreamFactory) WaitGoRoutines() { - factory.wg.Wait() -} - -/* - * The assembler context - */ -type Context struct { - CaptureInfo gopacket.CaptureInfo -} - -func (c *Context) GetCaptureInfo() gopacket.CaptureInfo { - return c.CaptureInfo -} - -/* - * TCP stream - */ - -/* It's a connection (bidirectional) */ -type tcpStream struct { - tcpstate *reassembly.TCPSimpleFSM - fsmerr bool - optchecker reassembly.TCPOptionCheck - net, transport gopacket.Flow - isDNS bool - isHTTP bool - reversed bool - client httpReader - server httpReader - urls []string - ident string -} - -func (t *tcpStream) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir reassembly.TCPFlowDirection, acked reassembly.Sequence, start *bool, ac reassembly.AssemblerContext) bool { - // FSM - if !t.tcpstate.CheckState(tcp, dir) { - Error("FSM", "%s: Packet rejected by FSM (state:%s)\n", t.ident, t.tcpstate.String()) - stats.rejectFsm++ - if !t.fsmerr { - t.fsmerr = true - stats.rejectConnFsm++ - } - if !*ignorefsmerr { - return false - } - } - // Options - err := t.optchecker.Accept(tcp, ci, dir, acked, start) - if err != nil { - Error("OptionChecker", "%s: Packet rejected by OptionChecker: %s\n", t.ident, err) - stats.rejectOpt++ - if !*nooptcheck { - return false - } - } - // Checksum - accept := true - if *checksum { - c, err := tcp.ComputeChecksum() - if err != nil { - Error("ChecksumCompute", "%s: Got error computing checksum: %s\n", t.ident, err) - accept = false - } else if c != 0x0 { - Error("Checksum", "%s: Invalid checksum: 0x%x\n", t.ident, c) - accept = false - } - } - if !accept { - stats.rejectOpt++ - } - return accept -} - -func (t *tcpStream) ReassembledSG(sg reassembly.ScatterGather, ac reassembly.AssemblerContext) { - dir, start, end, skip := sg.Info() - length, saved := sg.Lengths() - // update stats - sgStats := sg.Stats() - if skip > 0 { - stats.missedBytes += skip - } - stats.sz += length - saved - stats.pkt += sgStats.Packets - if sgStats.Chunks > 1 { - stats.reassembled++ - } - stats.outOfOrderPackets += sgStats.QueuedPackets - stats.outOfOrderBytes += sgStats.QueuedBytes - if length > stats.biggestChunkBytes { - stats.biggestChunkBytes = length - } - if sgStats.Packets > stats.biggestChunkPackets { - stats.biggestChunkPackets = sgStats.Packets - } - if sgStats.OverlapBytes != 0 && sgStats.OverlapPackets == 0 { - fmt.Printf("bytes:%d, pkts:%d\n", sgStats.OverlapBytes, sgStats.OverlapPackets) - panic("Invalid overlap") - } - stats.overlapBytes += sgStats.OverlapBytes - stats.overlapPackets += sgStats.OverlapPackets - - var ident string - if dir == reassembly.TCPDirClientToServer { - ident = fmt.Sprintf("%v %v(%s): ", t.net, t.transport, dir) - } else { - ident = fmt.Sprintf("%v %v(%s): ", t.net.Reverse(), t.transport.Reverse(), dir) - } - Debug("%s: SG reassembled packet with %d bytes (start:%v,end:%v,skip:%d,saved:%d,nb:%d,%d,overlap:%d,%d)\n", ident, length, start, end, skip, saved, sgStats.Packets, sgStats.Chunks, sgStats.OverlapBytes, sgStats.OverlapPackets) - if skip == -1 && *allowmissinginit { - // this is allowed - } else if skip != 0 { - // Missing bytes in stream: do not even try to parse it - return - } - data := sg.Fetch(length) - if t.isDNS { - dns := &layers.DNS{} - var decoded []gopacket.LayerType - if len(data) < 2 { - if len(data) > 0 { - sg.KeepFrom(0) - } - return - } - dnsSize := binary.BigEndian.Uint16(data[:2]) - missing := int(dnsSize) - len(data[2:]) - Debug("dnsSize: %d, missing: %d\n", dnsSize, missing) - if missing > 0 { - Info("Missing some bytes: %d\n", missing) - sg.KeepFrom(0) - return - } - p := gopacket.NewDecodingLayerParser(layers.LayerTypeDNS, dns) - err := p.DecodeLayers(data[2:], &decoded) - if err != nil { - Error("DNS-parser", "Failed to decode DNS: %v\n", err) - } else { - Debug("DNS: %s\n", gopacket.LayerDump(dns)) - } - if len(data) > 2+int(dnsSize) { - sg.KeepFrom(2 + int(dnsSize)) - } - } else if t.isHTTP { - if length > 0 { - if *hexdump { - Debug("Feeding http with:\n%s", hex.Dump(data)) - } - if dir == reassembly.TCPDirClientToServer && !t.reversed { - t.client.bytes <- data - } else { - t.server.bytes <- data - } - } - } -} - -func (t *tcpStream) ReassemblyComplete(ac reassembly.AssemblerContext) bool { - Debug("%s: Connection closed\n", t.ident) - if t.isHTTP { - close(t.client.bytes) - close(t.server.bytes) - } - // do not remove the connection to allow last ACK - return false -} - -func main() { - defer util.Run()() - var handle *pcap.Handle - var err error - if *debug { - outputLevel = 2 - } else if *verbose { - outputLevel = 1 - } else if *quiet { - outputLevel = -1 - } - errorsMap = make(map[string]uint) - if *fname != "" { - if handle, err = pcap.OpenOffline(*fname); err != nil { - log.Fatal("PCAP OpenOffline error:", err) - } - } else { - // This is a little complicated because we want to allow all possible options - // for creating the packet capture handle... instead of all this you can - // just call pcap.OpenLive if you want a simple handle. - inactive, err := pcap.NewInactiveHandle(*iface) - if err != nil { - log.Fatal("could not create: %v", err) - } - defer inactive.CleanUp() - if err = inactive.SetSnapLen(*snaplen); err != nil { - log.Fatal("could not set snap length: %v", err) - } else if err = inactive.SetPromisc(*promisc); err != nil { - log.Fatal("could not set promisc mode: %v", err) - } else if err = inactive.SetTimeout(time.Second); err != nil { - log.Fatal("could not set timeout: %v", err) - } - if *tstype != "" { - if t, err := pcap.TimestampSourceFromString(*tstype); err != nil { - log.Fatalf("Supported timestamp types: %v", inactive.SupportedTimestamps()) - } else if err := inactive.SetTimestampSource(t); err != nil { - log.Fatalf("Supported timestamp types: %v", inactive.SupportedTimestamps()) - } - } - if handle, err = inactive.Activate(); err != nil { - log.Fatal("PCAP Activate error:", err) - } - defer handle.Close() - } - if len(flag.Args()) > 0 { - bpffilter := strings.Join(flag.Args(), " ") - Info("Using BPF filter %q\n", bpffilter) - if err = handle.SetBPFFilter(bpffilter); err != nil { - log.Fatal("BPF filter error:", err) - } - } - - var dec gopacket.Decoder - var ok bool - decoder_name := *decoder - if decoder_name == "" { - decoder_name = fmt.Sprintf("%s", handle.LinkType()) - } - if dec, ok = gopacket.DecodersByLayerName[decoder_name]; !ok { - log.Fatalln("No decoder named", decoder_name) - } - source := gopacket.NewPacketSource(handle, dec) - source.Lazy = *lazy - source.NoCopy = true - Info("Starting to read packets\n") - count := 0 - bytes := int64(0) - start := time.Now() - defragger := ip4defrag.NewIPv4Defragmenter() - - streamFactory := &tcpStreamFactory{doHTTP: !*nohttp} - streamPool := reassembly.NewStreamPool(streamFactory) - assembler := reassembly.NewAssembler(streamPool) - - signalChan := make(chan os.Signal, 1) - signal.Notify(signalChan, os.Interrupt) - - for packet := range source.Packets() { - count++ - Debug("PACKET #%d\n", count) - data := packet.Data() - bytes += int64(len(data)) - if *hexdumppkt { - Debug("Packet content (%d/0x%x)\n%s\n", len(data), len(data), hex.Dump(data)) - } - - // defrag the IPv4 packet if required - if !*nodefrag { - ip4Layer := packet.Layer(layers.LayerTypeIPv4) - if ip4Layer == nil { - continue - } - ip4 := ip4Layer.(*layers.IPv4) - l := ip4.Length - newip4, err := defragger.DefragIPv4(ip4) - if err != nil { - log.Fatalln("Error while de-fragmenting", err) - } else if newip4 == nil { - Debug("Fragment...\n") - continue // packet fragment, we don't have whole packet yet. - } - if newip4.Length != l { - stats.ipdefrag++ - Debug("Decoding re-assembled packet: %s\n", newip4.NextLayerType()) - pb, ok := packet.(gopacket.PacketBuilder) - if !ok { - panic("Not a PacketBuilder") - } - nextDecoder := newip4.NextLayerType() - nextDecoder.Decode(newip4.Payload, pb) - } - } - - tcp := packet.Layer(layers.LayerTypeTCP) - if tcp != nil { - tcp := tcp.(*layers.TCP) - if *checksum { - err := tcp.SetNetworkLayerForChecksum(packet.NetworkLayer()) - if err != nil { - log.Fatalf("Failed to set network layer for checksum: %s\n", err) - } - } - c := Context{ - CaptureInfo: packet.Metadata().CaptureInfo, - } - stats.totalsz += len(tcp.Payload) - assembler.AssembleWithContext(packet.NetworkLayer().NetworkFlow(), tcp, &c) - } - if count%*statsevery == 0 { - ref := packet.Metadata().CaptureInfo.Timestamp - flushed, closed := assembler.FlushWithOptions(reassembly.FlushOptions{T: ref.Add(-timeout), TC: ref.Add(-closeTimeout)}) - Debug("Forced flush: %d flushed, %d closed (%s)", flushed, closed, ref) - } - - done := *maxcount > 0 && count >= *maxcount - if count%*statsevery == 0 || done { - fmt.Fprintf(os.Stderr, "Processed %v packets (%v bytes) in %v (errors: %v, type:%v)\n", count, bytes, time.Since(start), errors, len(errorsMap)) - } - select { - case <-signalChan: - fmt.Fprintf(os.Stderr, "\nCaught SIGINT: aborting\n") - done = true - default: - // NOP: continue - } - if done { - break - } - } - - closed := assembler.FlushAll() - Debug("Final flush: %d closed", closed) - if outputLevel >= 2 { - streamPool.Dump() - } - - if *memprofile != "" { - f, err := os.Create(*memprofile) - if err != nil { - log.Fatal(err) - } - pprof.WriteHeapProfile(f) - f.Close() - } - - streamFactory.WaitGoRoutines() - Debug("%s\n", assembler.Dump()) - if !*nodefrag { - fmt.Printf("IPdefrag:\t\t%d\n", stats.ipdefrag) - } - fmt.Printf("TCP stats:\n") - fmt.Printf(" missed bytes:\t\t%d\n", stats.missedBytes) - fmt.Printf(" total packets:\t\t%d\n", stats.pkt) - fmt.Printf(" rejected FSM:\t\t%d\n", stats.rejectFsm) - fmt.Printf(" rejected Options:\t%d\n", stats.rejectOpt) - fmt.Printf(" reassembled bytes:\t%d\n", stats.sz) - fmt.Printf(" total TCP bytes:\t%d\n", stats.totalsz) - fmt.Printf(" conn rejected FSM:\t%d\n", stats.rejectConnFsm) - fmt.Printf(" reassembled chunks:\t%d\n", stats.reassembled) - fmt.Printf(" out-of-order packets:\t%d\n", stats.outOfOrderPackets) - fmt.Printf(" out-of-order bytes:\t%d\n", stats.outOfOrderBytes) - fmt.Printf(" biggest-chunk packets:\t%d\n", stats.biggestChunkPackets) - fmt.Printf(" biggest-chunk bytes:\t%d\n", stats.biggestChunkBytes) - fmt.Printf(" overlap packets:\t%d\n", stats.overlapPackets) - fmt.Printf(" overlap bytes:\t\t%d\n", stats.overlapBytes) - fmt.Printf("Errors: %d\n", errors) - for e, _ := range errorsMap { - fmt.Printf(" %s:\t\t%d\n", e, errorsMap[e]) - } -} diff --git a/vendor/github.com/google/gopacket/examples/statsassembly/main.go b/vendor/github.com/google/gopacket/examples/statsassembly/main.go deleted file mode 100644 index 36da011..0000000 --- a/vendor/github.com/google/gopacket/examples/statsassembly/main.go +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// This binary provides sample code for using the gopacket TCP assembler raw, -// without the help of the tcpreader library. It watches TCP streams and -// reports statistics on completed streams. -// -// It also uses gopacket.DecodingLayerParser instead of the normal -// gopacket.PacketSource, to highlight the methods, pros, and cons of this -// approach. -package main - -import ( - "flag" - "github.com/google/gopacket" - "github.com/google/gopacket/examples/util" - "github.com/google/gopacket/layers" - "github.com/google/gopacket/pcap" - "github.com/google/gopacket/tcpassembly" - "log" - "time" -) - -var iface = flag.String("i", "eth0", "Interface to get packets from") -var snaplen = flag.Int("s", 65536, "SnapLen for pcap packet capture") -var filter = flag.String("f", "tcp", "BPF filter for pcap") -var logAllPackets = flag.Bool("v", false, "Log whenever we see a packet") -var bufferedPerConnection = flag.Int("connection_max_buffer", 0, ` -Max packets to buffer for a single connection before skipping over a gap in data -and continuing to stream the connection after the buffer. If zero or less, this -is infinite.`) -var bufferedTotal = flag.Int("total_max_buffer", 0, ` -Max packets to buffer total before skipping over gaps in connections and -continuing to stream connection data. If zero or less, this is infinite`) -var flushAfter = flag.String("flush_after", "2m", ` -Connections which have buffered packets (they've gotten packets out of order and -are waiting for old packets to fill the gaps) are flushed after they're this old -(their oldest gap is skipped). Any string parsed by time.ParseDuration is -acceptable here`) -var packetCount = flag.Int("c", -1, ` -Quit after processing this many packets, flushing all currently buffered -connections. If negative, this is infinite`) - -// simpleStreamFactory implements tcpassembly.StreamFactory -type statsStreamFactory struct{} - -// statsStream will handle the actual decoding of stats requests. -type statsStream struct { - net, transport gopacket.Flow - bytes, packets, outOfOrder, skipped int64 - start, end time.Time - sawStart, sawEnd bool -} - -// New creates a new stream. It's called whenever the assembler sees a stream -// it isn't currently following. -func (factory *statsStreamFactory) New(net, transport gopacket.Flow) tcpassembly.Stream { - log.Printf("new stream %v:%v started", net, transport) - s := &statsStream{ - net: net, - transport: transport, - start: time.Now(), - } - s.end = s.start - // ReaderStream implements tcpassembly.Stream, so we can return a pointer to it. - return s -} - -// Reassembled is called whenever new packet data is available for reading. -// Reassembly objects contain stream data IN ORDER. -func (s *statsStream) Reassembled(reassemblies []tcpassembly.Reassembly) { - for _, reassembly := range reassemblies { - if reassembly.Seen.Before(s.end) { - s.outOfOrder++ - } else { - s.end = reassembly.Seen - } - s.bytes += int64(len(reassembly.Bytes)) - s.packets += 1 - if reassembly.Skip > 0 { - s.skipped += int64(reassembly.Skip) - } - s.sawStart = s.sawStart || reassembly.Start - s.sawEnd = s.sawEnd || reassembly.End - } -} - -// ReassemblyComplete is called when the TCP assembler believes a stream has -// finished. -func (s *statsStream) ReassemblyComplete() { - diffSecs := float64(s.end.Sub(s.start)) / float64(time.Second) - log.Printf("Reassembly of stream %v:%v complete - start:%v end:%v bytes:%v packets:%v ooo:%v bps:%v pps:%v skipped:%v", - s.net, s.transport, s.start, s.end, s.bytes, s.packets, s.outOfOrder, - float64(s.bytes)/diffSecs, float64(s.packets)/diffSecs, s.skipped) -} - -func main() { - defer util.Run()() - - flushDuration, err := time.ParseDuration(*flushAfter) - if err != nil { - log.Fatal("invalid flush duration: ", *flushAfter) - } - - log.Printf("starting capture on interface %q", *iface) - // Set up pcap packet capture - handle, err := pcap.OpenLive(*iface, int32(*snaplen), true, flushDuration/2) - if err != nil { - log.Fatal("error opening pcap handle: ", err) - } - if err := handle.SetBPFFilter(*filter); err != nil { - log.Fatal("error setting BPF filter: ", err) - } - - // Set up assembly - streamFactory := &statsStreamFactory{} - streamPool := tcpassembly.NewStreamPool(streamFactory) - assembler := tcpassembly.NewAssembler(streamPool) - assembler.MaxBufferedPagesPerConnection = *bufferedPerConnection - assembler.MaxBufferedPagesTotal = *bufferedTotal - - log.Println("reading in packets") - - // We use a DecodingLayerParser here instead of a simpler PacketSource. - // This approach should be measurably faster, but is also more rigid. - // PacketSource will handle any known type of packet safely and easily, - // but DecodingLayerParser will only handle those packet types we - // specifically pass in. This trade-off can be quite useful, though, in - // high-throughput situations. - var eth layers.Ethernet - var dot1q layers.Dot1Q - var ip4 layers.IPv4 - var ip6 layers.IPv6 - var ip6extensions layers.IPv6ExtensionSkipper - var tcp layers.TCP - var payload gopacket.Payload - parser := gopacket.NewDecodingLayerParser(layers.LayerTypeEthernet, - ð, &dot1q, &ip4, &ip6, &ip6extensions, &tcp, &payload) - decoded := make([]gopacket.LayerType, 0, 4) - - nextFlush := time.Now().Add(flushDuration / 2) - - var byteCount int64 - start := time.Now() - -loop: - for ; *packetCount != 0; *packetCount-- { - // Check to see if we should flush the streams we have - // that haven't seen any new data in a while. Note we set a - // timeout on our PCAP handle, so this should happen even if we - // never see packet data. - if time.Now().After(nextFlush) { - stats, _ := handle.Stats() - log.Printf("flushing all streams that haven't seen packets in the last 2 minutes, pcap stats: %+v", stats) - assembler.FlushOlderThan(time.Now().Add(flushDuration)) - nextFlush = time.Now().Add(flushDuration / 2) - } - - // To speed things up, we're also using the ZeroCopy method for - // reading packet data. This method is faster than the normal - // ReadPacketData, but the returned bytes in 'data' are - // invalidated by any subsequent ZeroCopyReadPacketData call. - // Note that tcpassembly is entirely compatible with this packet - // reading method. This is another trade-off which might be - // appropriate for high-throughput sniffing: it avoids a packet - // copy, but its cost is much more careful handling of the - // resulting byte slice. - data, ci, err := handle.ZeroCopyReadPacketData() - - if err != nil { - log.Printf("error getting packet: %v", err) - continue - } - err = parser.DecodeLayers(data, &decoded) - if err != nil { - log.Printf("error decoding packet: %v", err) - continue - } - if *logAllPackets { - log.Printf("decoded the following layers: %v", decoded) - } - byteCount += int64(len(data)) - // Find either the IPv4 or IPv6 address to use as our network - // layer. - foundNetLayer := false - var netFlow gopacket.Flow - for _, typ := range decoded { - switch typ { - case layers.LayerTypeIPv4: - netFlow = ip4.NetworkFlow() - foundNetLayer = true - case layers.LayerTypeIPv6: - netFlow = ip6.NetworkFlow() - foundNetLayer = true - case layers.LayerTypeTCP: - if foundNetLayer { - assembler.AssembleWithTimestamp(netFlow, &tcp, ci.Timestamp) - } else { - log.Println("could not find IPv4 or IPv6 layer, inoring") - } - continue loop - } - } - log.Println("could not find TCP layer") - } - assembler.FlushAll() - log.Printf("processed %d bytes in %v", byteCount, time.Since(start)) -} diff --git a/vendor/github.com/google/gopacket/examples/synscan/main.go b/vendor/github.com/google/gopacket/examples/synscan/main.go deleted file mode 100644 index 7a2345f..0000000 --- a/vendor/github.com/google/gopacket/examples/synscan/main.go +++ /dev/null @@ -1,259 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// synscan implements a TCP syn scanner on top of pcap. -// It's more complicated than arpscan, since it has to handle sending packets -// outside the local network, requiring some routing and ARP work. -// -// Since this is just an example program, it aims for simplicity over -// performance. It doesn't handle sending packets very quickly, it scans IPs -// serially instead of in parallel, and uses gopacket.Packet instead of -// gopacket.DecodingLayerParser for packet processing. We also make use of very -// simple timeout logic with time.Since. -// -// Making it blazingly fast is left as an exercise to the reader. -package main - -import ( - "errors" - "flag" - "log" - "net" - "time" - - "github.com/google/gopacket" - "github.com/google/gopacket/examples/util" - "github.com/google/gopacket/layers" - "github.com/google/gopacket/pcap" - "github.com/google/gopacket/routing" -) - -// scanner handles scanning a single IP address. -type scanner struct { - // iface is the interface to send packets on. - iface *net.Interface - // destination, gateway (if applicable), and source IP addresses to use. - dst, gw, src net.IP - - handle *pcap.Handle - - // opts and buf allow us to easily serialize packets in the send() - // method. - opts gopacket.SerializeOptions - buf gopacket.SerializeBuffer -} - -// newScanner creates a new scanner for a given destination IP address, using -// router to determine how to route packets to that IP. -func newScanner(ip net.IP, router routing.Router) (*scanner, error) { - s := &scanner{ - dst: ip, - opts: gopacket.SerializeOptions{ - FixLengths: true, - ComputeChecksums: true, - }, - buf: gopacket.NewSerializeBuffer(), - } - // Figure out the route to the IP. - iface, gw, src, err := router.Route(ip) - if err != nil { - return nil, err - } - log.Printf("scanning ip %v with interface %v, gateway %v, src %v", ip, iface.Name, gw, src) - s.gw, s.src, s.iface = gw, src, iface - - // Open the handle for reading/writing. - // Note we could very easily add some BPF filtering here to greatly - // decrease the number of packets we have to look at when getting back - // scan results. - handle, err := pcap.OpenLive(iface.Name, 65536, true, pcap.BlockForever) - if err != nil { - return nil, err - } - s.handle = handle - return s, nil -} - -// close cleans up the handle. -func (s *scanner) close() { - s.handle.Close() -} - -// getHwAddr is a hacky but effective way to get the destination hardware -// address for our packets. It does an ARP request for our gateway (if there is -// one) or destination IP (if no gateway is necessary), then waits for an ARP -// reply. This is pretty slow right now, since it blocks on the ARP -// request/reply. -func (s *scanner) getHwAddr() (net.HardwareAddr, error) { - start := time.Now() - arpDst := s.dst - if s.gw != nil { - arpDst = s.gw - } - // Prepare the layers to send for an ARP request. - eth := layers.Ethernet{ - SrcMAC: s.iface.HardwareAddr, - DstMAC: net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, - EthernetType: layers.EthernetTypeARP, - } - arp := layers.ARP{ - AddrType: layers.LinkTypeEthernet, - Protocol: layers.EthernetTypeIPv4, - HwAddressSize: 6, - ProtAddressSize: 4, - Operation: layers.ARPRequest, - SourceHwAddress: []byte(s.iface.HardwareAddr), - SourceProtAddress: []byte(s.src), - DstHwAddress: []byte{0, 0, 0, 0, 0, 0}, - DstProtAddress: []byte(arpDst), - } - // Send a single ARP request packet (we never retry a send, since this - // is just an example ;) - if err := s.send(ð, &arp); err != nil { - return nil, err - } - // Wait 3 seconds for an ARP reply. - for { - if time.Since(start) > time.Second*3 { - return nil, errors.New("timeout getting ARP reply") - } - data, _, err := s.handle.ReadPacketData() - if err == pcap.NextErrorTimeoutExpired { - continue - } else if err != nil { - return nil, err - } - packet := gopacket.NewPacket(data, layers.LayerTypeEthernet, gopacket.NoCopy) - if arpLayer := packet.Layer(layers.LayerTypeARP); arpLayer != nil { - arp := arpLayer.(*layers.ARP) - if net.IP(arp.SourceProtAddress).Equal(net.IP(arpDst)) { - return net.HardwareAddr(arp.SourceHwAddress), nil - } - } - } -} - -// scan scans the dst IP address of this scanner. -func (s *scanner) scan() error { - // First off, get the MAC address we should be sending packets to. - hwaddr, err := s.getHwAddr() - if err != nil { - return err - } - // Construct all the network layers we need. - eth := layers.Ethernet{ - SrcMAC: s.iface.HardwareAddr, - DstMAC: hwaddr, - EthernetType: layers.EthernetTypeIPv4, - } - ip4 := layers.IPv4{ - SrcIP: s.src, - DstIP: s.dst, - Version: 4, - TTL: 64, - Protocol: layers.IPProtocolTCP, - } - tcp := layers.TCP{ - SrcPort: 54321, - DstPort: 0, // will be incremented during the scan - SYN: true, - } - tcp.SetNetworkLayerForChecksum(&ip4) - - // Create the flow we expect returning packets to have, so we can check - // against it and discard useless packets. - ipFlow := gopacket.NewFlow(layers.EndpointIPv4, s.dst, s.src) - start := time.Now() - for { - // Send one packet per loop iteration until we've sent packets - // to all of ports [1, 65535]. - if tcp.DstPort < 65535 { - start = time.Now() - tcp.DstPort++ - if err := s.send(ð, &ip4, &tcp); err != nil { - log.Printf("error sending to port %v: %v", tcp.DstPort, err) - } - } - // Time out 5 seconds after the last packet we sent. - if time.Since(start) > time.Second*5 { - log.Printf("timed out for %v, assuming we've seen all we can", s.dst) - return nil - } - - // Read in the next packet. - data, _, err := s.handle.ReadPacketData() - if err == pcap.NextErrorTimeoutExpired { - continue - } else if err != nil { - log.Printf("error reading packet: %v", err) - continue - } - - // Parse the packet. We'd use DecodingLayerParser here if we - // wanted to be really fast. - packet := gopacket.NewPacket(data, layers.LayerTypeEthernet, gopacket.NoCopy) - - // Find the packets we care about, and print out logging - // information about them. All others are ignored. - if net := packet.NetworkLayer(); net == nil { - // log.Printf("packet has no network layer") - } else if net.NetworkFlow() != ipFlow { - // log.Printf("packet does not match our ip src/dst") - } else if tcpLayer := packet.Layer(layers.LayerTypeTCP); tcpLayer == nil { - // log.Printf("packet has not tcp layer") - } else if tcp, ok := tcpLayer.(*layers.TCP); !ok { - // We panic here because this is guaranteed to never - // happen. - panic("tcp layer is not tcp layer :-/") - } else if tcp.DstPort != 54321 { - // log.Printf("dst port %v does not match", tcp.DstPort) - } else if tcp.RST { - log.Printf(" port %v closed", tcp.SrcPort) - } else if tcp.SYN && tcp.ACK { - log.Printf(" port %v open", tcp.SrcPort) - } else { - // log.Printf("ignoring useless packet") - } - } -} - -// send sends the given layers as a single packet on the network. -func (s *scanner) send(l ...gopacket.SerializableLayer) error { - if err := gopacket.SerializeLayers(s.buf, s.opts, l...); err != nil { - return err - } - return s.handle.WritePacketData(s.buf.Bytes()) -} - -func main() { - defer util.Run()() - router, err := routing.New() - if err != nil { - log.Fatal("routing error:", err) - } - for _, arg := range flag.Args() { - var ip net.IP - if ip = net.ParseIP(arg); ip == nil { - log.Printf("non-ip target: %q", arg) - continue - } else if ip = ip.To4(); ip == nil { - log.Printf("non-ipv4 target: %q", arg) - continue - } - // Note: newScanner creates and closes a pcap Handle once for - // every scan target. We could do much better, were this not an - // example ;) - s, err := newScanner(ip, router) - if err != nil { - log.Printf("unable to create scanner for %v: %v", ip, err) - continue - } - if err := s.scan(); err != nil { - log.Printf("unable to scan %v: %v", ip, err) - } - s.close() - } -} diff --git a/vendor/github.com/google/gopacket/examples/util/util.go b/vendor/github.com/google/gopacket/examples/util/util.go deleted file mode 100644 index 0f698fb..0000000 --- a/vendor/github.com/google/gopacket/examples/util/util.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// Package util provides shared utilities for all gopacket examples. -package util - -import ( - "flag" - "log" - "os" - "runtime/pprof" -) - -var cpuprofile = flag.String("cpuprofile", "", "Where to write CPU profile") - -// Run starts up stuff at the beginning of a main function, and returns a -// function to defer until the function completes. It should be used like this: -// -// func main() { -// defer util.Run()() -// ... stuff ... -// } -func Run() func() { - flag.Parse() - if *cpuprofile != "" { - f, err := os.Create(*cpuprofile) - if err != nil { - log.Fatalf("could not open cpu profile file %q", *cpuprofile) - } - pprof.StartCPUProfile(f) - return func() { - pprof.StopCPUProfile() - f.Close() - } - } - return func() {} -} diff --git a/vendor/github.com/google/gopacket/ip4defrag/defrag.go b/vendor/github.com/google/gopacket/ip4defrag/defrag.go deleted file mode 100644 index 9d3862f..0000000 --- a/vendor/github.com/google/gopacket/ip4defrag/defrag.go +++ /dev/null @@ -1,350 +0,0 @@ -// Copyright 2013 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// Package ip4defrag implements a IPv4 defragmenter -package ip4defrag - -import ( - "container/list" - "errors" - "fmt" - "log" - "sync" - "time" - - "github.com/google/gopacket" - "github.com/google/gopacket/layers" -) - -// Quick and Easy to use debug code to trace -// how defrag works. -var debug debugging = false // or flip to true -type debugging bool - -func (d debugging) Printf(format string, args ...interface{}) { - if d { - log.Printf(format, args...) - } -} - -// Constants determining how to handle fragments. -const ( - IPv4MinimumFragmentSize = 576 // Minimum size of a single fragment - IPv4MaximumSize = 65535 // Maximum size of a fragment (2^16) - IPv4MaximumFragmentOffset = 8189 // Maximum offset of a fragment - IPv4MaximumFragmentListLen = 8 // Back out if we get more than this many fragments -) - -// DefragIPv4 takes in an IPv4 packet with a fragment payload. -// -// It do not modify the IPv4 layer in place, 'in' remains untouched -// It returns a ready-to be used IPv4 layer. -// -// If the passed-in IPv4 layer is NOT fragmented, it will -// immediately return it without modifying the layer. -// -// If the IPv4 layer is a fragment and we don't have all -// fragments, it will return nil and store whatever internal -// information it needs to eventually defrag the packet. -// -// If the IPv4 layer is the last fragment needed to reconstruct -// the packet, a new IPv4 layer will be returned, and will be set to -// the entire defragmented packet, -// -// It use a map of all the running flows -// -// Usage example: -// -// func HandlePacket(in *layers.IPv4) err { -// defragger := ip4defrag.NewIPv4Defragmenter() -// in, err := defragger.DefragIPv4(in) -// if err != nil { -// return err -// } else if in == nil { -// return nil // packet fragment, we don't have whole packet yet. -// } -// // At this point, we know that 'in' is defragmented. -// //It may be the same 'in' passed to -// // HandlePacket, or it may not, but we don't really care :) -// ... do stuff to 'in' ... -//} -// -func (d *IPv4Defragmenter) DefragIPv4(in *layers.IPv4) (*layers.IPv4, error) { - return d.DefragIPv4WithTimestamp(in, time.Now()) -} - -// DefragIPv4WithTimestamp provides functionality of DefragIPv4 with -// an additional timestamp parameter which is used for discarding -// old fragments instead of time.Now() -// -// This is useful when operating on pcap files instead of live captured data -// -func (d *IPv4Defragmenter) DefragIPv4WithTimestamp(in *layers.IPv4, t time.Time) (*layers.IPv4, error) { - // check if we need to defrag - if st := d.dontDefrag(in); st == true { - debug.Printf("defrag: do nothing, do not need anything") - return in, nil - } - // perfom security checks - st, err := d.securityChecks(in) - if err != nil || st == false { - debug.Printf("defrag: alert security check") - return nil, err - } - - // ok, got a fragment - debug.Printf("defrag: got a new fragment in.Id=%d in.FragOffset=%d in.Flags=%d\n", - in.Id, in.FragOffset*8, in.Flags) - - // have we already seen a flow between src/dst with that Id? - ipf := newIPv4(in) - var fl *fragmentList - var exist bool - d.Lock() - fl, exist = d.ipFlows[ipf] - if !exist { - debug.Printf("defrag: unknown flow, creating a new one\n") - fl = new(fragmentList) - d.ipFlows[ipf] = fl - } - d.Unlock() - // insert, and if final build it - out, err2 := fl.insert(in, t) - - // at last, if we hit the maximum frag list len - // without any defrag success, we just drop everything and - // raise an error - if out == nil && fl.List.Len()+1 > IPv4MaximumFragmentListLen { - d.flush(ipf) - return nil, fmt.Errorf("defrag: Fragment List hits its maximum"+ - "size(%d), without success. Flushing the list", - IPv4MaximumFragmentListLen) - } - - // if we got a packet, it's a new one, and he is defragmented - if out != nil { - // when defrag is done for a flow between two ip - // clean the list - d.flush(ipf) - return out, nil - } - return nil, err2 -} - -// DiscardOlderThan forgets all packets without any activity since -// time t. It returns the number of FragmentList aka number of -// fragment packets it has discarded. -func (d *IPv4Defragmenter) DiscardOlderThan(t time.Time) int { - var nb int - d.Lock() - for k, v := range d.ipFlows { - if v.LastSeen.Before(t) { - nb = nb + 1 - delete(d.ipFlows, k) - } - } - d.Unlock() - return nb -} - -// flush the fragment list for a particular flow -func (d *IPv4Defragmenter) flush(ipf ipv4) { - d.Lock() - fl := new(fragmentList) - d.ipFlows[ipf] = fl - d.Unlock() -} - -// dontDefrag returns true if the IPv4 packet do not need -// any defragmentation -func (d *IPv4Defragmenter) dontDefrag(ip *layers.IPv4) bool { - // don't defrag packet with DF flag - if ip.Flags&layers.IPv4DontFragment != 0 { - return true - } - // don't defrag not fragmented ones - if ip.Flags&layers.IPv4MoreFragments == 0 && ip.FragOffset == 0 { - return true - } - return false -} - -// securityChecks performs the needed security checks -func (d *IPv4Defragmenter) securityChecks(ip *layers.IPv4) (bool, error) { - // don't allow too big fragment offset - if ip.FragOffset > IPv4MaximumFragmentOffset { - return false, fmt.Errorf("defrag: fragment offset too big "+ - "(handcrafted? %d > %d)", ip.FragOffset, IPv4MaximumFragmentOffset) - } - fragOffset := ip.FragOffset * 8 - - // don't allow fragment that would oversize an IP packet - if fragOffset+ip.Length > IPv4MaximumSize { - return false, fmt.Errorf("defrag: fragment will overrun "+ - "(handcrafted? %d > %d)", ip.FragOffset*8+ip.Length, IPv4MaximumSize) - } - - return true, nil -} - -// fragmentList holds a container/list used to contains IP -// packets/fragments. It stores internal counters to track the -// maximum total of byte, and the current length it has received. -// It also stores a flag to know if he has seen the last packet. -type fragmentList struct { - List list.List - Highest uint16 - Current uint16 - FinalReceived bool - LastSeen time.Time -} - -// insert insert an IPv4 fragment/packet into the Fragment List -// It use the following strategy : we are inserting fragment based -// on their offset, latest first. This is sometimes called BSD-Right. -// See: http://www.sans.org/reading-room/whitepapers/detection/ip-fragment-reassembly-scapy-33969 -func (f *fragmentList) insert(in *layers.IPv4, t time.Time) (*layers.IPv4, error) { - // TODO: should keep a copy of *in in the list - // or not (ie the packet source is reliable) ? -> depends on Lazy / last packet - fragOffset := in.FragOffset * 8 - if fragOffset >= f.Highest { - f.List.PushBack(in) - } else { - for e := f.List.Front(); e != nil; e = e.Next() { - frag, _ := e.Value.(*layers.IPv4) - if in.FragOffset == frag.FragOffset { - // TODO: what if we receive a fragment - // that begins with duplicate data but - // *also* has new data? For example: - // - // AAAA - // BB - // BBCC - // DDDD - // - // In this situation we completely - // ignore CC and the complete packet can - // never be reassembled. - debug.Printf("defrag: ignoring frag %d as we already have it (duplicate?)\n", - fragOffset) - return nil, nil - } - if in.FragOffset < frag.FragOffset { - debug.Printf("defrag: inserting frag %d before existing frag %d\n", - fragOffset, frag.FragOffset*8) - f.List.InsertBefore(in, e) - break - } - } - } - - f.LastSeen = t - - fragLength := in.Length - 20 - // After inserting the Fragment, we update the counters - if f.Highest < fragOffset+fragLength { - f.Highest = fragOffset + fragLength - } - f.Current = f.Current + fragLength - - debug.Printf("defrag: insert ListLen: %d Highest:%d Current:%d\n", - f.List.Len(), - f.Highest, f.Current) - - // Final Fragment ? - if in.Flags&layers.IPv4MoreFragments == 0 { - f.FinalReceived = true - } - // Ready to try defrag ? - if f.FinalReceived && f.Highest == f.Current { - return f.build(in) - } - return nil, nil -} - -// Build builds the final datagram, modifying ip in place. -// It puts priority to packet in the early position of the list. -// See Insert for more details. -func (f *fragmentList) build(in *layers.IPv4) (*layers.IPv4, error) { - var final []byte - var currentOffset uint16 - - debug.Printf("defrag: building the datagram \n") - for e := f.List.Front(); e != nil; e = e.Next() { - frag, _ := e.Value.(*layers.IPv4) - if frag.FragOffset*8 == currentOffset { - debug.Printf("defrag: building - adding %d\n", frag.FragOffset*8) - final = append(final, frag.Payload...) - currentOffset = currentOffset + frag.Length - 20 - } else if frag.FragOffset*8 < currentOffset { - // overlapping fragment - let's take only what we need - startAt := currentOffset - frag.FragOffset*8 - debug.Printf("defrag: building - overlapping, starting at %d\n", - startAt) - if startAt > frag.Length-20 { - return nil, errors.New("defrag: building - invalid fragment") - } - final = append(final, frag.Payload[startAt:]...) - currentOffset = currentOffset + frag.FragOffset*8 - } else { - // Houston - we have an hole ! - debug.Printf("defrag: hole found while building, " + - "stopping the defrag process\n") - return nil, errors.New("defrag: building - hole found") - } - debug.Printf("defrag: building - next is %d\n", currentOffset) - } - - // TODO recompute IP Checksum - out := &layers.IPv4{ - Version: in.Version, - IHL: in.IHL, - TOS: in.TOS, - Length: f.Highest, - Id: 0, - Flags: 0, - FragOffset: 0, - TTL: in.TTL, - Protocol: in.Protocol, - Checksum: 0, - SrcIP: in.SrcIP, - DstIP: in.DstIP, - Options: in.Options, - Padding: in.Padding, - } - out.Payload = final - - return out, nil -} - -// ipv4 is a struct to be used as a key. -type ipv4 struct { - ip4 gopacket.Flow - id uint16 -} - -// newIPv4 returns a new initialized IPv4 Flow -func newIPv4(ip *layers.IPv4) ipv4 { - return ipv4{ - ip4: ip.NetworkFlow(), - id: ip.Id, - } -} - -// IPv4Defragmenter is a struct which embedded a map of -// all fragment/packet. -type IPv4Defragmenter struct { - sync.RWMutex - ipFlows map[ipv4]*fragmentList -} - -// NewIPv4Defragmenter returns a new IPv4Defragmenter -// with an initialized map. -func NewIPv4Defragmenter() *IPv4Defragmenter { - return &IPv4Defragmenter{ - ipFlows: make(map[ipv4]*fragmentList), - } -} diff --git a/vendor/github.com/google/gopacket/ip4defrag/defrag_test.go b/vendor/github.com/google/gopacket/ip4defrag/defrag_test.go deleted file mode 100644 index 1eb66d2..0000000 --- a/vendor/github.com/google/gopacket/ip4defrag/defrag_test.go +++ /dev/null @@ -1,1396 +0,0 @@ -// Copyright 2013 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package ip4defrag - -import ( - "bytes" - "fmt" - "net" - "testing" - - "github.com/google/gopacket" - "github.com/google/gopacket/bytediff" - "github.com/google/gopacket/layers" -) - -func TestNotFrag(t *testing.T) { - ip := layers.IPv4{ - Version: 4, - TTL: 220, - SrcIP: net.IPv4(1, 1, 1, 1), - DstIP: net.IPv4(2, 2, 2, 2), - Flags: layers.IPv4DontFragment, - } - defrag := NewIPv4Defragmenter() - - out, err := defrag.DefragIPv4(&ip) - if out == nil || err != nil { - t.Errorf("defrag: this packet do not need to be defrag ['%s']", err) - } -} - -func TestDefragPingMultipleFrags(t *testing.T) { - defrag := NewIPv4Defragmenter() - - // We inject the 4 fragments and test the DefragIPv4 interface - gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1") - gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1") - gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1") - gentestDefrag(t, defrag, testPing1Frag3, false, "Ping1Frag3") - gentestDefrag(t, defrag, testPing1Frag2, false, "Ping1Frag2") - ip := gentestDefrag(t, defrag, testPing1Frag4, true, "Ping1Frag4") - - if len(ip.Payload) != 4508 { - t.Fatalf("defrag: expecting a packet of 4508 bytes, got %d", len(ip.Payload)) - } - - validPayload := append(testPing1Frag1[34:], testPing1Frag2[34:]...) - validPayload = append(validPayload, testPing1Frag3[34:]...) - validPayload = append(validPayload, testPing1Frag4[34:]...) - - if bytes.Compare(validPayload, ip.Payload) != 0 { - fmt.Println(bytediff.BashOutput.String( - bytediff.Diff(validPayload, ip.Payload))) - t.Errorf("defrag: payload is not correctly defragmented") - } -} - -func TestDefragPing1(t *testing.T) { - defrag := NewIPv4Defragmenter() - - // We inject the 4 fragments and test the DefragIPv4 interface - gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1") - gentestDefrag(t, defrag, testPing1Frag3, false, "Ping1Frag3") - gentestDefrag(t, defrag, testPing1Frag2, false, "Ping1Frag2") - ip := gentestDefrag(t, defrag, testPing1Frag4, true, "Ping1Frag4") - - if len(ip.Payload) != 4508 { - t.Fatalf("defrag: expecting a packet of 4508 bytes, got %d", len(ip.Payload)) - } - - validPayload := append(testPing1Frag1[34:], testPing1Frag2[34:]...) - validPayload = append(validPayload, testPing1Frag3[34:]...) - validPayload = append(validPayload, testPing1Frag4[34:]...) - - if bytes.Compare(validPayload, ip.Payload) != 0 { - fmt.Println(bytediff.BashOutput.String( - bytediff.Diff(validPayload, ip.Payload))) - t.Errorf("defrag: payload is not correctly defragmented") - } - - // We redo the same test to handle duplication, and be sure - // that the internal list is correctly cleaned up. - gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1") - gentestDefrag(t, defrag, testPing1Frag3, false, "Ping1Frag3") - gentestDefrag(t, defrag, testPing1Frag2, false, "Ping1Frag2") - ip2 := gentestDefrag(t, defrag, testPing1Frag4, true, "Ping1Frag4") - - if bytes.Compare(ip2.Payload, ip.Payload) != 0 { - fmt.Println(bytediff.BashOutput.String( - bytediff.Diff(validPayload, ip.Payload))) - t.Errorf("defrag: ip and ip2 payload are different") - } -} - -func TestDefragPing1and2(t *testing.T) { - debug = false - defrag := NewIPv4Defragmenter() - - // We inject the 8 mixed fragments from two "flows" - // and test the DefragIPv4 interface - gentestDefrag(t, defrag, testPing1Frag1, false, "Ping1Frag1") - gentestDefrag(t, defrag, testPing1Frag3, false, "Ping1Frag3") - gentestDefrag(t, defrag, testPing2Frag3, false, "Ping2Frag3") - gentestDefrag(t, defrag, testPing2Frag4, false, "Ping2Frag4") - gentestDefrag(t, defrag, testPing1Frag2, false, "Ping1Frag2") - gentestDefrag(t, defrag, testPing2Frag1, false, "Ping2Frag1") - ip := gentestDefrag(t, defrag, testPing1Frag4, true, "Ping1Frag4") - - if len(ip.Payload) != 4508 { - t.Fatalf("defrag: expecting a packet Ping1 of 4508 bytes, got %d", - len(ip.Payload)) - } - - validPayload := append(testPing1Frag1[34:], testPing1Frag2[34:]...) - validPayload = append(validPayload, testPing1Frag3[34:]...) - validPayload = append(validPayload, testPing1Frag4[34:]...) - - if bytes.Compare(validPayload, ip.Payload) != 0 { - fmt.Println(bytediff.BashOutput.String( - bytediff.Diff(validPayload, ip.Payload))) - t.Errorf("defrag: payload Ping1 is not correctly defragmented") - } - - ip = gentestDefrag(t, defrag, testPing2Frag2, true, "Ping2Frag2") - if len(ip.Payload) != 4508 { - t.Fatalf("defrag: expecting a packet Ping2 of 4508 bytes, got %d", - len(ip.Payload)) - } - - validPayload2 := append(testPing2Frag1[34:], testPing2Frag2[34:]...) - validPayload2 = append(validPayload2, testPing2Frag3[34:]...) - validPayload2 = append(validPayload2, testPing2Frag4[34:]...) - - if bytes.Compare(validPayload2, ip.Payload) != 0 { - fmt.Println(bytediff.BashOutput.String( - bytediff.Diff(validPayload2, ip.Payload))) - t.Errorf("defrag: payload Ping2 is not correctly defragmented") - } - debug = false -} - -func TestDefragPingTooMuch(t *testing.T) { - defrag := NewIPv4Defragmenter() - - ip1 := layers.IPv4{ - Version: 4, - TTL: 15, - SrcIP: net.IPv4(1, 1, 1, 1), - DstIP: net.IPv4(2, 2, 2, 2), - Id: 0xcc, - FragOffset: 0, - Length: 500, - Flags: layers.IPv4MoreFragments, - } - defrag.DefragIPv4(&ip1) - for i := 2; i < 8; i = i + 1 { - nip := ip1 - nip.FragOffset = ip1.Length * uint16(i) - out, err := defrag.DefragIPv4(&nip) - if err != nil || out != nil { - t.Fatalf("defrag: %s", err) - } - - } - ip8 := ip1 - ip8.FragOffset = 666 - - _, err := defrag.DefragIPv4(&ip8) - if err == nil { - t.Fatalf("defrag: Maximum number of fragments are supposed to be 8") - } -} - -func gentestDefrag(t *testing.T, defrag *IPv4Defragmenter, buf []byte, expect bool, label string) *layers.IPv4 { - p := gopacket.NewPacket(buf, layers.LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - ipL := p.Layer(layers.LayerTypeIPv4) - in, _ := ipL.(*layers.IPv4) - - out, err := defrag.DefragIPv4(in) - if err != nil { - t.Fatalf("defrag: %s", err) - } - status := false - if out != nil { - status = true - } - if status != expect { - t.Fatalf("defrag: a fragment was not detected (%s)", label) - } - return out -} - -/* Frame 1-1 (1514 bytes) */ -var testPing1Frag1 = []byte{ - 0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */ - 0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */ - 0x05, 0xdc, 0xb3, 0xe1, 0x20, 0x00, 0x40, 0x01, /* .... .@. */ - 0xcf, 0x70, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* .p...... */ - 0x08, 0x08, 0x08, 0x00, 0x45, 0xa6, 0x14, 0xbf, /* ....E... */ - 0x00, 0x01, 0x9e, 0x3e, 0x20, 0x55, 0x00, 0x00, /* ...> U.. */ - 0x00, 0x00, 0x16, 0x91, 0x0d, 0x00, 0x00, 0x00, /* ........ */ - 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, /* .. */ -} - -/* Frame (1514 bytes) */ -var testPing1Frag2 = []byte{ - 0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */ - 0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */ - 0x05, 0xdc, 0xb3, 0xe1, 0x20, 0xb9, 0x40, 0x01, /* .... .@. */ - 0xce, 0xb7, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */ - 0x08, 0x08, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, /* .. */ -} - -/* Frame (1514 bytes) */ -var testPing1Frag3 = []byte{ - 0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */ - 0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */ - 0x05, 0xdc, 0xb3, 0xe1, 0x21, 0x72, 0x40, 0x01, /* ....!r@. */ - 0xcd, 0xfe, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */ - 0x08, 0x08, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, /* NO */ -} - -/* Frame (102 bytes) */ -var testPing1Frag4 = []byte{ - 0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */ - 0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */ - 0x00, 0x58, 0xb3, 0xe1, 0x02, 0x2b, 0x40, 0x01, /* .X...+@. */ - 0xf2, 0xc9, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */ - 0x08, 0x08, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* ..PQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, /* ...... */ -} - -/* Frame (1514 bytes) */ -var testPing2Frag1 = []byte{ - 0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */ - 0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */ - 0x05, 0xdc, 0xb4, 0x9e, 0x20, 0x00, 0x40, 0x01, /* .... .@. */ - 0xce, 0xb3, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */ - 0x08, 0x08, 0x08, 0x00, 0x9e, 0xa0, 0x14, 0xbf, /* ........ */ - 0x00, 0x02, 0x9f, 0x3e, 0x20, 0x55, 0x00, 0x00, /* ...> U.. */ - 0x00, 0x00, 0xbc, 0x95, 0x0d, 0x00, 0x00, 0x00, /* ........ */ - 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, /* .. */ -} - -/* Frame (1514 bytes) */ -var testPing2Frag2 = []byte{ - 0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */ - 0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */ - 0x05, 0xdc, 0xb4, 0x9e, 0x20, 0xb9, 0x40, 0x01, /* .... .@. */ - 0xcd, 0xfa, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */ - 0x08, 0x08, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, /* .. */ -} - -/* Frame (1514 bytes) */ -var testPing2Frag3 = []byte{ - 0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */ - 0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */ - 0x05, 0xdc, 0xb4, 0x9e, 0x21, 0x72, 0x40, 0x01, /* ....!r@. */ - 0xcd, 0x41, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* .A...... */ - 0x08, 0x08, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* NOPQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, /* ........ */ - 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, /* ........ */ - 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, /* ........ */ - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, /* ........ */ - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, /* ........ */ - 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, /* ........ */ - 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, /* ........ */ - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, /* ........ */ - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, /* ........ */ - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, /* ........ */ - 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, /* ........ */ - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, /* ........ */ - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, /* ........ */ - 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, /* ........ */ - 0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* ........ */ - 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, /* ........ */ - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, /* ........ */ - 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, /* ........ */ - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, /* .. !"#$% */ - 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, /* &'()*+,- */ - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, /* ./012345 */ - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, /* 6789:;<= */ - 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, /* >?@ABCDE */ - 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, /* FGHIJKLM */ - 0x4e, 0x4f, /* NO */ -} - -/* Frame (102 bytes) */ -var testPing2Frag4 = []byte{ - 0xf4, 0xca, 0xe5, 0x4e, 0xe1, 0x46, 0x7c, 0x7a, /* ...N.F|z */ - 0x91, 0x7d, 0x7c, 0x74, 0x08, 0x00, 0x45, 0x00, /* .}|t..E. */ - 0x00, 0x58, 0xb4, 0x9e, 0x02, 0x2b, 0x40, 0x01, /* .X...+@. */ - 0xf2, 0x0c, 0xc0, 0xa8, 0x01, 0x17, 0x08, 0x08, /* ........ */ - 0x08, 0x08, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, /* ..PQRSTU */ - 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, /* VWXYZ[\] */ - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, /* ^_`abcde */ - 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, /* fghijklm */ - 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, /* nopqrstu */ - 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, /* vwxyz{|} */ - 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, /* ~....... */ - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, /* ........ */ - 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, /* ...... */ -} diff --git a/vendor/github.com/google/gopacket/layers/base_test.go b/vendor/github.com/google/gopacket/layers/base_test.go deleted file mode 100644 index 4be7480..0000000 --- a/vendor/github.com/google/gopacket/layers/base_test.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2012, Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// This file contains some test helper functions. - -package layers - -import ( - "github.com/google/gopacket" - "testing" -) - -func min(a, b int) int { - if a < b { - return a - } - return b -} - -func checkLayers(p gopacket.Packet, want []gopacket.LayerType, t *testing.T) { - layers := p.Layers() - t.Log("Checking packet layers, want", want) - for _, l := range layers { - t.Logf(" Got layer %v, %d bytes, payload of %d bytes", l.LayerType(), - len(l.LayerContents()), len(l.LayerPayload())) - } - t.Log(p) - if len(layers) != len(want) { - t.Errorf(" Number of layers mismatch: got %d want %d", len(layers), - len(want)) - return - } - for i, l := range layers { - if l.LayerType() != want[i] { - t.Errorf(" Layer %d mismatch: got %v want %v", i, l.LayerType(), - want[i]) - } - } -} diff --git a/vendor/github.com/google/gopacket/layers/bfd_test.go b/vendor/github.com/google/gopacket/layers/bfd_test.go deleted file mode 100644 index 1ac84cb..0000000 --- a/vendor/github.com/google/gopacket/layers/bfd_test.go +++ /dev/null @@ -1,289 +0,0 @@ -// Copyright 2017 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. -// -//****************************************************************************** - -package layers - -import ( - "github.com/google/gopacket" - "reflect" - "testing" -) - -//****************************************************************************** - -// checkBFD() uses the bfd.go code to analyse the packet bytes as an BFD Control -// packet and generate an BFD object. It then compares the generated BFD object -// with the one provided and throws an error if there is any difference. -// The desc argument is output with any failure message to identify the test. -func checkBFD(desc string, t *testing.T, packetBytes []byte, pExpectedBFD *BFD) { - - // Analyse the packet bytes, yielding a new packet object p. - p := gopacket.NewPacket(packetBytes, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Errorf("Failed to decode packet %s: %v", desc, p.ErrorLayer().Error()) - } - - // Ensure that the packet analysis yielded the correct set of layers: - // Link Layer = Ethernet. - // Network Layer = IPv4. - // Transport Layer = UDP. - // Application Layer = BFD. - checkLayers(p, []gopacket.LayerType{ - LayerTypeEthernet, - LayerTypeIPv4, - LayerTypeUDP, - LayerTypeBFD}, t) - - // Select the Application (BFD) layer. - pResultBFD, ok := p.ApplicationLayer().(*BFD) - if !ok { - t.Error("No BFD layer type found in packet in " + desc + ".") - } - - // Compare the generated BFD object with the expected BFD object. - if !reflect.DeepEqual(pResultBFD, pExpectedBFD) { - t.Errorf("BFD packet processing failed for packet "+desc+ - ":\ngot :\n%#v\n\nwant :\n%#v\n\n", pResultBFD, pExpectedBFD) - } - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{} - err := pResultBFD.SerializeTo(buf, opts) - if err != nil { - t.Error(err) - } - if !reflect.DeepEqual(pResultBFD.Contents, buf.Bytes()) { - t.Errorf("BFD packet serialization failed for packet "+desc+ - ":\ngot :\n%+v\n\nwant :\n%+v\n\n", buf.Bytes(), pResultBFD.Contents) - } - -} - -func TestBFDNoAuth(t *testing.T) { - // This test packet is based off of the first BFD packet in the BFD sample capture - // pcap file bfd-raw-auth-simple.pcap on the Wireshark sample captures page: - // - // https://wiki.wireshark.org/SampleCaptures - // https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=bfd-raw-auth-simple.pcap - // - // Changed to remove the authentication header, and adjust all of the lengths - var testPacketBFD = []byte{ - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x94, 0x00, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x11, 0x2f, 0x58, 0xc0, 0x55, 0x01, 0x02, 0xc0, 0x00, - 0x00, 0x01, 0xc0, 0x00, 0x0e, 0xc8, 0x00, 0x20, 0x72, 0x31, 0x20, 0x40, 0x05, 0x18, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x4e, 0x0a, 0x90, 0x40, - } - - // Assemble the BFD object that we expect to emerge from this test. - pExpectedBFD := &BFD{ - BaseLayer: BaseLayer{ - Contents: []byte{ - 0x20, 0x40, 0x05, 0x18, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, - 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, 0x00, 0x00, - }, - Payload: nil, - }, - Version: 1, - Diagnostic: BFDDiagnosticNone, - State: BFDStateDown, - Poll: false, - Final: false, - ControlPlaneIndependent: false, - AuthPresent: false, - Demand: false, - Multipoint: false, - DetectMultiplier: 5, - MyDiscriminator: 1, - YourDiscriminator: 0, - DesiredMinTxInterval: 1000000, - RequiredMinRxInterval: 1000000, - RequiredMinEchoRxInterval: 0, - AuthHeader: nil, - } - - checkBFD("testNoAuth", t, testPacketBFD, pExpectedBFD) -} - -//****************************************************************************** - -func TestBFDAuthTypePassword(t *testing.T) { - - // This test packet is the first BFD packet in the BFD sample capture - // pcap file bfd-raw-auth-simple.pcap on the Wireshark sample captures page: - // - // https://wiki.wireshark.org/SampleCaptures - // https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=bfd-raw-auth-simple.pcap - var testPacketBFD = []byte{ - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x94, 0x00, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x11, 0x2f, 0x58, 0xc0, 0x55, 0x01, 0x02, 0xc0, 0x00, - 0x00, 0x01, 0xc0, 0x00, 0x0e, 0xc8, 0x00, 0x29, 0x72, 0x31, 0x20, 0x44, 0x05, 0x21, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x09, 0x02, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4e, 0x0a, 0x90, 0x40, - } - - // Assemble the BFD object that we expect to emerge from this test. - pExpectedBFD := &BFD{ - BaseLayer: BaseLayer{ - Contents: []byte{ - 0x20, 0x44, 0x05, 0x21, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, - 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x09, 0x02, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, - }, - Payload: nil, - }, - Version: 1, - Diagnostic: BFDDiagnosticNone, - State: BFDStateDown, - Poll: false, - Final: false, - ControlPlaneIndependent: false, - AuthPresent: true, - Demand: false, - Multipoint: false, - DetectMultiplier: 5, - MyDiscriminator: 1, - YourDiscriminator: 0, - DesiredMinTxInterval: 1000000, - RequiredMinRxInterval: 1000000, - RequiredMinEchoRxInterval: 0, - AuthHeader: &BFDAuthHeader{ - AuthType: BFDAuthTypePassword, - KeyID: 2, - SequenceNumber: 0, - Data: []byte{'s', 'e', 'c', 'r', 'e', 't'}, - }, - } - - checkBFD("testBFDAuthTypePassword", t, testPacketBFD, pExpectedBFD) -} - -//****************************************************************************** - -func TestBFDAuthTypeKeyedMD5(t *testing.T) { - - // This test packet is the first BFD packet in the BFD sample capture - // pcap file bfd-raw-auth-md5.pcap on the Wireshark sample captures page: - // - // https://wiki.wireshark.org/SampleCaptures - // https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=bfd-raw-auth-md5.pcap - var testPacketBFD = []byte{ - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x94, 0x00, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x11, 0x2f, 0x48, 0xc0, 0x55, 0x01, 0x02, 0xc0, 0x00, - 0x00, 0x01, 0x04, 0x00, 0x0e, 0xc8, 0x00, 0x38, 0x6a, 0xcc, 0x20, 0x44, 0x05, 0x30, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, - 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x3c, 0xc3, 0xf8, 0x21, - } - - // Assemble the BFD object that we expect to emerge from this test. - pExpectedBFD := &BFD{ - BaseLayer: BaseLayer{ - Contents: []byte{ - 0x20, 0x44, 0x05, 0x30, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, - 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, - 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, - }, - Payload: nil, - }, - Version: 1, - Diagnostic: BFDDiagnosticNone, - State: BFDStateDown, - Poll: false, - Final: false, - ControlPlaneIndependent: false, - AuthPresent: true, - Demand: false, - Multipoint: false, - DetectMultiplier: 5, - MyDiscriminator: 1, - YourDiscriminator: 0, - DesiredMinTxInterval: 1000000, - RequiredMinRxInterval: 1000000, - RequiredMinEchoRxInterval: 0, - AuthHeader: &BFDAuthHeader{ - AuthType: BFDAuthTypeKeyedMD5, - KeyID: 2, - SequenceNumber: 5, - Data: []byte{ - 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, - }, - }, - } - - checkBFD("testBFDAuthTypeKeyedMD5", t, testPacketBFD, pExpectedBFD) -} - -//****************************************************************************** - -func TestBFDAuthTypeMeticulousKeyedSHA1(t *testing.T) { - - // This test packet is the first BFD packet in the BFD sample capture - // pcap file bfd-raw-auth-sha1.pcap on the Wireshark sample captures page: - // - // https://wiki.wireshark.org/SampleCaptures - // https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=bfd-raw-auth-sha1.pcap - var testPacketBFD = []byte{ - 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x94, 0x00, 0x00, 0x02, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x11, 0x2f, 0x45, 0xc0, 0x55, 0x01, 0x02, 0xc0, 0x00, - 0x00, 0x01, 0x04, 0x00, 0x0e, 0xc8, 0x00, 0x3c, 0x37, 0x8a, 0x20, 0x44, 0x05, 0x34, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x1c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, - 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0xea, 0x6d, - 0x1f, 0x21, - } - - // Assemble the BFD object that we expect to emerge from this test. - pExpectedBFD := &BFD{ - BaseLayer: BaseLayer{ - Contents: []byte{ - 0x20, 0x44, 0x05, 0x34, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, - 0x00, 0x0f, 0x42, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x1c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, - 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, - 0x17, 0x18, 0x19, 0x1a, - }, - Payload: nil, - }, - Version: 1, - Diagnostic: BFDDiagnosticNone, - State: BFDStateDown, - Poll: false, - Final: false, - ControlPlaneIndependent: false, - AuthPresent: true, - Demand: false, - Multipoint: false, - DetectMultiplier: 5, - MyDiscriminator: 1, - YourDiscriminator: 0, - DesiredMinTxInterval: 1000000, - RequiredMinRxInterval: 1000000, - RequiredMinEchoRxInterval: 0, - AuthHeader: &BFDAuthHeader{ - AuthType: BFDAuthTypeMeticulousKeyedSHA1, - KeyID: 2, - SequenceNumber: 5, - Data: []byte{ - 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, - 0x17, 0x18, 0x19, 0x1a, - }, - }, - } - - checkBFD("TestBFDAuthTypeMeticulousKeyedSHA1", t, testPacketBFD, pExpectedBFD) -} diff --git a/vendor/github.com/google/gopacket/layers/decode_test.go b/vendor/github.com/google/gopacket/layers/decode_test.go deleted file mode 100644 index ecfbff7..0000000 --- a/vendor/github.com/google/gopacket/layers/decode_test.go +++ /dev/null @@ -1,1234 +0,0 @@ -// Copyright 2012, Google, Inc. All rights reserved. -// Copyright 2009-2011 Andreas Krennmair. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package layers - -import ( - "bytes" - "encoding/hex" - "fmt" - "net" - "reflect" - "strings" - "testing" - - "github.com/google/gopacket" - "github.com/google/gopacket/bytediff" -) - -var testSimpleTCPPacket = []byte{ - 0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x20, 0xbc, 0x30, 0x5b, 0xe8, 0xd3, 0x49, - 0x08, 0x00, 0x45, 0x00, 0x01, 0xa4, 0x39, 0xdf, 0x40, 0x00, 0x40, 0x06, - 0x55, 0x5a, 0xac, 0x11, 0x51, 0x49, 0xad, 0xde, 0xfe, 0xe1, 0xc5, 0xf7, - 0x00, 0x50, 0xc5, 0x7e, 0x0e, 0x48, 0x49, 0x07, 0x42, 0x32, 0x80, 0x18, - 0x00, 0x73, 0x9a, 0x8f, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x03, 0x77, - 0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a, 0x47, 0x45, 0x54, 0x20, 0x2f, 0x20, - 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x48, 0x6f, - 0x73, 0x74, 0x3a, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x66, 0x69, 0x73, 0x68, - 0x2e, 0x63, 0x6f, 0x6d, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x6b, 0x65, 0x65, 0x70, 0x2d, 0x61, - 0x6c, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c, - 0x61, 0x2f, 0x35, 0x2e, 0x30, 0x20, 0x28, 0x58, 0x31, 0x31, 0x3b, 0x20, - 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x20, 0x78, 0x38, 0x36, 0x5f, 0x36, 0x34, - 0x29, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x57, 0x65, 0x62, 0x4b, 0x69, - 0x74, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32, 0x20, 0x28, 0x4b, 0x48, 0x54, - 0x4d, 0x4c, 0x2c, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x47, 0x65, 0x63, - 0x6b, 0x6f, 0x29, 0x20, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x2f, 0x31, - 0x35, 0x2e, 0x30, 0x2e, 0x38, 0x37, 0x34, 0x2e, 0x31, 0x32, 0x31, 0x20, - 0x53, 0x61, 0x66, 0x61, 0x72, 0x69, 0x2f, 0x35, 0x33, 0x35, 0x2e, 0x32, - 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x74, 0x65, - 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x68, 0x74, 0x6d, - 0x6c, 0x2b, 0x78, 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x6d, 0x6c, 0x3b, 0x71, 0x3d, - 0x30, 0x2e, 0x39, 0x2c, 0x2a, 0x2f, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, - 0x38, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45, 0x6e, - 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x20, 0x67, 0x7a, 0x69, 0x70, - 0x2c, 0x64, 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64, 0x63, - 0x68, 0x0d, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c, 0x61, - 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x65, 0x6e, 0x2d, 0x55, - 0x53, 0x2c, 0x65, 0x6e, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x38, 0x0d, 0x0a, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x43, 0x68, 0x61, 0x72, 0x73, - 0x65, 0x74, 0x3a, 0x20, 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x35, 0x39, - 0x2d, 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x3b, 0x71, 0x3d, 0x30, - 0x2e, 0x37, 0x2c, 0x2a, 0x3b, 0x71, 0x3d, 0x30, 0x2e, 0x33, 0x0d, 0x0a, - 0x0d, 0x0a, -} - -var testDecodeOptions = gopacket.DecodeOptions{ - SkipDecodeRecovery: true, -} - -// Benchmarks for actual gopacket code - -func BenchmarkLayerClassSliceContains(b *testing.B) { - lc := gopacket.NewLayerClassSlice([]gopacket.LayerType{LayerTypeTCP, LayerTypeEthernet}) - for i := 0; i < b.N; i++ { - _ = lc.Contains(LayerTypeTCP) - } -} - -func BenchmarkLayerClassMapContains(b *testing.B) { - lc := gopacket.NewLayerClassMap([]gopacket.LayerType{LayerTypeTCP, LayerTypeEthernet}) - for i := 0; i < b.N; i++ { - _ = lc.Contains(LayerTypeTCP) - } -} - -func BenchmarkLazyNoCopyEthLayer(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}).Layer(LayerTypeEthernet) - } -} - -func BenchmarkLazyNoCopyIPLayer(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}).Layer(LayerTypeIPv4) - } -} - -func BenchmarkLazyNoCopyTCPLayer(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}).Layer(LayerTypeTCP) - } -} - -func BenchmarkLazyNoCopyAllLayers(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}).Layers() - } -} - -func BenchmarkDefault(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.Default) - } -} - -func getSerializeLayers() []gopacket.SerializableLayer { - p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions) - slayers := []gopacket.SerializableLayer{} - for _, l := range p.Layers() { - slayers = append(slayers, l.(gopacket.SerializableLayer)) - } - p.Layer(LayerTypeTCP).(*TCP).SetNetworkLayerForChecksum( - p.NetworkLayer()) - return slayers -} - -func BenchmarkSerializeTcpNoOptions(b *testing.B) { - slayers := getSerializeLayers() - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{} - for i := 0; i < b.N; i++ { - gopacket.SerializeLayers(buf, opts, slayers...) - } -} - -func BenchmarkSerializeTcpFixLengths(b *testing.B) { - slayers := getSerializeLayers() - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{FixLengths: true} - for i := 0; i < b.N; i++ { - gopacket.SerializeLayers(buf, opts, slayers...) - } -} - -func BenchmarkSerializeTcpComputeChecksums(b *testing.B) { - slayers := getSerializeLayers() - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{ComputeChecksums: true} - for i := 0; i < b.N; i++ { - gopacket.SerializeLayers(buf, opts, slayers...) - } -} - -func BenchmarkSerializeTcpFixLengthsComputeChecksums(b *testing.B) { - slayers := getSerializeLayers() - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true} - for i := 0; i < b.N; i++ { - gopacket.SerializeLayers(buf, opts, slayers...) - } -} - -func BenchmarkLazy(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.Lazy) - } -} - -func BenchmarkNoCopy(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.NoCopy) - } -} - -func BenchmarkLazyNoCopy(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}) - } -} - -func BenchmarkKnownStack(b *testing.B) { - stack := []gopacket.DecodingLayer{&Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{}} - nf := gopacket.NilDecodeFeedback - for i := 0; i < b.N; i++ { - data := testSimpleTCPPacket[:] - for _, d := range stack { - _ = d.DecodeFromBytes(data, nf) - data = d.LayerPayload() - } - } -} - -func BenchmarkDecodingLayerParserIgnorePanic(b *testing.B) { - decoded := make([]gopacket.LayerType, 0, 20) - dlp := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{}) - dlp.IgnorePanic = true - for i := 0; i < b.N; i++ { - dlp.DecodeLayers(testSimpleTCPPacket, &decoded) - } -} - -func BenchmarkDecodingLayerParserHandlePanic(b *testing.B) { - decoded := make([]gopacket.LayerType, 0, 20) - dlp := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{}) - dlp.IgnorePanic = false - for i := 0; i < b.N; i++ { - dlp.DecodeLayers(testSimpleTCPPacket, &decoded) - } -} - -func BenchmarkAlloc(b *testing.B) { - for i := 0; i < b.N; i++ { - _ = &TCP{} - } -} - -func BenchmarkFlow(b *testing.B) { - p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}) - net := p.NetworkLayer() - for i := 0; i < b.N; i++ { - net.NetworkFlow() - } -} - -func BenchmarkEndpoints(b *testing.B) { - p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}) - flow := p.NetworkLayer().NetworkFlow() - for i := 0; i < b.N; i++ { - flow.Endpoints() - } -} - -func BenchmarkTCPLayerFromDecodedPacket(b *testing.B) { - b.StopTimer() - p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions) - b.StartTimer() - for i := 0; i < b.N; i++ { - _ = p.Layer(LayerTypeTCP) - } -} - -func BenchmarkTCPLayerClassFromDecodedPacket(b *testing.B) { - b.StopTimer() - p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions) - lc := gopacket.NewLayerClass([]gopacket.LayerType{LayerTypeTCP}) - b.StartTimer() - for i := 0; i < b.N; i++ { - _ = p.LayerClass(lc) - } -} - -func BenchmarkTCPTransportLayerFromDecodedPacket(b *testing.B) { - b.StopTimer() - p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions) - b.StartTimer() - for i := 0; i < b.N; i++ { - _ = p.TransportLayer() - } -} - -func testDecoder([]byte, gopacket.PacketBuilder) error { - return nil -} - -func BenchmarkDecodeFuncCallOverheadDirectCall(b *testing.B) { - var data []byte - var pb gopacket.PacketBuilder - for i := 0; i < b.N; i++ { - _ = testDecoder(data, pb) - } -} - -func BenchmarkDecodeFuncCallOverheadDecoderCall(b *testing.B) { - d := gopacket.DecodeFunc(testDecoder) - var data []byte - var pb gopacket.PacketBuilder - for i := 0; i < b.N; i++ { - _ = d.Decode(data, pb) - } -} - -func BenchmarkDecodeFuncCallOverheadArrayCall(b *testing.B) { - EthernetTypeMetadata[1] = EnumMetadata{DecodeWith: gopacket.DecodeFunc(testDecoder)} - d := EthernetType(1) - var data []byte - var pb gopacket.PacketBuilder - for i := 0; i < b.N; i++ { - _ = d.Decode(data, pb) - } -} - -func BenchmarkFmtVerboseString(b *testing.B) { - b.StopTimer() - p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions) - b.StartTimer() - for i := 0; i < b.N; i++ { - _ = fmt.Sprintf("%#v", p) - } -} - -func BenchmarkPacketString(b *testing.B) { - b.StopTimer() - p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions) - b.StartTimer() - for i := 0; i < b.N; i++ { - _ = p.String() - } -} - -func BenchmarkPacketDumpString(b *testing.B) { - b.StopTimer() - p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, testDecodeOptions) - b.StartTimer() - for i := 0; i < b.N; i++ { - _ = p.String() - } -} - -// TestFlowMapKey makes sure a flow and an endpoint can be used as map keys. -func TestFlowMapKey(t *testing.T) { - _ = map[gopacket.Flow]bool{} - _ = map[gopacket.Endpoint]bool{} - _ = map[[2]gopacket.Flow]bool{} -} - -func TestDecodeSimpleTCPPacket(t *testing.T) { - equal := func(desc, want string, got fmt.Stringer) { - if want != got.String() { - t.Errorf("%s: got %q want %q", desc, got.String(), want) - } - } - p := gopacket.NewPacket(testSimpleTCPPacket, LinkTypeEthernet, gopacket.DecodeOptions{Lazy: true, NoCopy: true}) - if eth := p.LinkLayer(); eth == nil { - t.Error("No ethernet layer found") - } else { - equal("Eth Src", "bc:30:5b:e8:d3:49", eth.LinkFlow().Src()) - equal("Eth Dst", "00:00:0c:9f:f0:20", eth.LinkFlow().Dst()) - } - if net := p.NetworkLayer(); net == nil { - t.Error("No net layer found") - } else if ip, ok := net.(*IPv4); !ok { - t.Error("Net layer is not IP layer") - } else { - equal("IP Src", "172.17.81.73", net.NetworkFlow().Src()) - equal("IP Dst", "173.222.254.225", net.NetworkFlow().Dst()) - want := &IPv4{ - BaseLayer: BaseLayer{testSimpleTCPPacket[14:34], testSimpleTCPPacket[34:]}, - Version: 4, - IHL: 5, - TOS: 0, - Length: 420, - Id: 14815, - Flags: 0x02, - FragOffset: 0, - TTL: 64, - Protocol: 6, - Checksum: 0x555A, - SrcIP: []byte{172, 17, 81, 73}, - DstIP: []byte{173, 222, 254, 225}, - } - if !reflect.DeepEqual(ip, want) { - t.Errorf("IP layer mismatch, \ngot %#v\nwant %#v\n", ip, want) - } - } - if trans := p.TransportLayer(); trans == nil { - t.Error("No transport layer found") - } else if tcp, ok := trans.(*TCP); !ok { - t.Error("Transport layer is not TCP layer") - } else { - equal("TCP Src", "50679", trans.TransportFlow().Src()) - equal("TCP Dst", "80", trans.TransportFlow().Dst()) - want := &TCP{ - BaseLayer: BaseLayer{testSimpleTCPPacket[34:66], testSimpleTCPPacket[66:]}, - SrcPort: 50679, - DstPort: 80, - Seq: 0xc57e0e48, - Ack: 0x49074232, - DataOffset: 8, - ACK: true, - PSH: true, - Window: 0x73, - Checksum: 0x9a8f, - Urgent: 0, - sPort: []byte{0xc5, 0xf7}, - dPort: []byte{0x0, 0x50}, - Options: []TCPOption{ - TCPOption{ - OptionType: 0x1, - OptionLength: 0x1, - }, - TCPOption{ - OptionType: 0x1, - OptionLength: 0x1, - }, - TCPOption{ - OptionType: 0x8, - OptionLength: 0xa, - OptionData: []byte{0x3, 0x77, 0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a}, - }, - }, - opts: [4]TCPOption{ - TCPOption{ - OptionType: 0x1, - OptionLength: 0x1, - }, - TCPOption{ - OptionType: 0x1, - OptionLength: 0x1, - }, - TCPOption{ - OptionType: 0x8, - OptionLength: 0xa, - OptionData: []byte{0x3, 0x77, 0x37, 0x9c, 0x42, 0x77, 0x5e, 0x3a}, - }, - TCPOption{}, - }, - } - if !reflect.DeepEqual(tcp, want) { - t.Errorf("TCP layer mismatch\ngot %#v\nwant %#v", tcp, want) - } - } - if payload, ok := p.Layer(gopacket.LayerTypePayload).(*gopacket.Payload); payload == nil || !ok { - t.Error("No payload layer found") - } else { - if string(payload.Payload()) != "GET / HTTP/1.1\r\nHost: www.fish.com\r\nConnection: keep-alive\r\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Encoding: gzip,deflate,sdch\r\nAccept-Language: en-US,en;q=0.8\r\nAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n\r\n" { - t.Error("--- Payload STRING ---\n", string(payload.Payload()), "\n--- Payload BYTES ---\n", payload.Payload()) - } - } - - // Test re-serialization. - testSerialization(t, p, testSimpleTCPPacket) -} - -type canSetNetLayer interface { - SetNetworkLayerForChecksum(gopacket.NetworkLayer) error -} - -func testSerialization(t *testing.T, p gopacket.Packet, data []byte) { - for _, opts := range []gopacket.SerializeOptions{ - gopacket.SerializeOptions{}, - gopacket.SerializeOptions{FixLengths: true}, - gopacket.SerializeOptions{ComputeChecksums: true}, - gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}, - } { - testSerializationWithOpts(t, p, data, opts) - } -} - -func testSerializationWithOpts(t *testing.T, p gopacket.Packet, data []byte, opts gopacket.SerializeOptions) { - // Test re-serialization. - slayers := []gopacket.SerializableLayer{} - for _, l := range p.Layers() { - slayers = append(slayers, l.(gopacket.SerializableLayer)) - if h, ok := l.(canSetNetLayer); ok { - if err := h.SetNetworkLayerForChecksum(p.NetworkLayer()); err != nil { - t.Fatal("can't set network layer:", err) - } - } - } - buf := gopacket.NewSerializeBuffer() - err := gopacket.SerializeLayers(buf, opts, slayers...) - if err != nil { - t.Errorf("unable to reserialize layers with opts %#v: %v", opts, err) - } else if !bytes.Equal(buf.Bytes(), data) { - t.Errorf("serialization failure with opts %#v:\n---want---\n%v\n---got---\n%v\nBASH-colorized diff, want->got:\n%v\n\n---PACKET---\n%v", - opts, hex.Dump(data), hex.Dump(buf.Bytes()), bytediff.BashOutput.String(bytediff.Diff(data, buf.Bytes())), p) - } -} - -// Makes sure packet payload doesn't display the 6 trailing null of this packet -// as part of the payload. They're actually the ethernet trailer. -func TestDecodeSmallTCPPacketHasEmptyPayload(t *testing.T) { - smallPacket := []byte{ - 0xbc, 0x30, 0x5b, 0xe8, 0xd3, 0x49, 0xb8, 0xac, 0x6f, 0x92, 0xd5, 0xbf, - 0x08, 0x00, 0x45, 0x00, 0x00, 0x28, 0x00, 0x00, 0x40, 0x00, 0x40, 0x06, - 0x3f, 0x9f, 0xac, 0x11, 0x51, 0xc5, 0xac, 0x11, 0x51, 0x49, 0x00, 0x63, - 0x9a, 0xef, 0x00, 0x00, 0x00, 0x00, 0x2e, 0xc1, 0x27, 0x83, 0x50, 0x14, - 0x00, 0x00, 0xc3, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - p := gopacket.NewPacket(smallPacket, LinkTypeEthernet, testDecodeOptions) - - if payload := p.Layer(gopacket.LayerTypePayload); payload != nil { - t.Error("Payload found for empty TCP packet") - } - - testSerialization(t, p, smallPacket) -} - -func TestDecodeVLANPacket(t *testing.T) { - p := gopacket.NewPacket( - []byte{ - 0x00, 0x10, 0xdb, 0xff, 0x10, 0x00, 0x00, 0x15, 0x2c, 0x9d, 0xcc, 0x00, - 0x81, 0x00, 0x01, 0xf7, 0x08, 0x00, 0x45, 0x00, 0x00, 0x28, 0x29, 0x8d, - 0x40, 0x00, 0x7d, 0x06, 0x83, 0xa0, 0xac, 0x1b, 0xca, 0x8e, 0x45, 0x16, - 0x94, 0xe2, 0xd4, 0x0a, 0x00, 0x50, 0xdf, 0xab, 0x9c, 0xc6, 0xcd, 0x1e, - 0xe5, 0xd1, 0x50, 0x10, 0x01, 0x00, 0x5a, 0x74, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }, LinkTypeEthernet, testDecodeOptions) - if err := p.ErrorLayer(); err != nil { - t.Error("Error while parsing vlan packet:", err) - } - if vlan := p.Layer(LayerTypeDot1Q); vlan == nil { - t.Error("Didn't detect vlan") - } else if _, ok := vlan.(*Dot1Q); !ok { - t.Error("LayerTypeDot1Q layer is not a Dot1Q object") - } - for i, l := range p.Layers() { - t.Logf("Layer %d: %#v", i, l) - } - want := []gopacket.LayerType{LayerTypeEthernet, LayerTypeDot1Q, LayerTypeIPv4, LayerTypeTCP} - checkLayers(p, want, t) -} - -func TestDecodeSCTPPackets(t *testing.T) { - sctpPackets := [][]byte{ - []byte{ // INIT - 0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02, - 0x00, 0x44, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc4, 0x22, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19, - 0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x19, 0x6b, 0x0b, 0x40, 0x01, 0x00, - 0x00, 0x24, 0xb6, 0x96, 0xb0, 0x9e, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xdb, 0x85, - 0x60, 0x23, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0xc0, 0x00, - 0x00, 0x04, - }, []byte{ // INIT ACK - 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x08, 0x00, 0x45, 0x20, - 0x01, 0x24, 0x00, 0x00, 0x40, 0x00, 0x36, 0x84, 0xcd, 0x24, 0xac, 0x19, 0x09, 0xcc, 0xac, 0x1d, - 0x14, 0x0f, 0x22, 0xb8, 0x27, 0x0f, 0xb6, 0x96, 0xb0, 0x9e, 0x4b, 0xab, 0x40, 0x9a, 0x02, 0x00, - 0x01, 0x04, 0x32, 0x80, 0xfb, 0x42, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x85, 0x98, - 0xb1, 0x26, 0x00, 0x07, 0x00, 0xe8, 0xd3, 0x08, 0xce, 0xe2, 0x52, 0x95, 0xcc, 0x09, 0xa1, 0x4c, - 0x6f, 0xa7, 0x9e, 0xba, 0x03, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xfb, 0x80, 0x32, 0x9e, 0xb0, - 0x96, 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x46, 0xc2, 0x50, 0x00, 0x00, - 0x00, 0x00, 0x5e, 0x25, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x26, 0xb1, - 0x98, 0x85, 0x02, 0x00, 0x27, 0x0f, 0xac, 0x1d, 0x14, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x22, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x24, 0x6a, 0x72, 0x5c, 0x1c, 0x3c, 0xaa, - 0x7a, 0xcd, 0xd3, 0x8f, 0x52, 0x78, 0x7c, 0x77, 0xfd, 0x46, 0xbd, 0x72, 0x82, 0xc1, 0x1f, 0x70, - 0x44, 0xcc, 0xc7, 0x9b, 0x9b, 0x7b, 0x13, 0x54, 0x3f, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0xb6, 0x96, - 0xb0, 0x9e, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xdb, 0x85, 0x60, 0x23, 0x00, 0x0c, - 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0xc0, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0xc0, 0x00, - 0x00, 0x04, - }, []byte{ // COOKIE ECHO, DATA - 0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02, - 0x01, 0x20, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc3, 0x46, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19, - 0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x32, 0x80, 0xfb, 0x42, 0x01, 0xf9, 0xf3, 0xa9, 0x0a, 0x00, - 0x00, 0xe8, 0xd3, 0x08, 0xce, 0xe2, 0x52, 0x95, 0xcc, 0x09, 0xa1, 0x4c, 0x6f, 0xa7, 0x9e, 0xba, - 0x03, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xfb, 0x80, 0x32, 0x9e, 0xb0, 0x96, 0xb6, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x46, 0xc2, 0x50, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x25, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x26, 0xb1, 0x98, 0x85, 0x02, 0x00, - 0x27, 0x0f, 0xac, 0x1d, 0x14, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x22, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x02, 0x00, 0x24, 0x6a, 0x72, 0x5c, 0x1c, 0x3c, 0xaa, 0x7a, 0xcd, 0xd3, 0x8f, - 0x52, 0x78, 0x7c, 0x77, 0xfd, 0x46, 0xbd, 0x72, 0x82, 0xc1, 0x1f, 0x70, 0x44, 0xcc, 0xc7, 0x9b, - 0x9b, 0x7b, 0x13, 0x54, 0x3f, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0xb6, 0x96, 0xb0, 0x9e, 0x00, 0x01, - 0xc0, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xdb, 0x85, 0x60, 0x23, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x05, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0xc0, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x16, 0xdb, 0x85, 0x60, 0x23, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x6f, 0x21, 0x0a, 0x00, 0x00, 0x00, - }, []byte{ // COOKIE ACK, SACK - 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x08, 0x00, 0x45, 0x20, - 0x00, 0x34, 0x00, 0x00, 0x40, 0x00, 0x36, 0x84, 0xce, 0x14, 0xac, 0x19, 0x09, 0xcc, 0xac, 0x1d, - 0x14, 0x0f, 0x22, 0xb8, 0x27, 0x0f, 0xb6, 0x96, 0xb0, 0x9e, 0xed, 0x64, 0x30, 0x98, 0x0b, 0x00, - 0x00, 0x04, 0x03, 0x00, 0x00, 0x10, 0xdb, 0x85, 0x60, 0x23, 0x00, 0x00, 0xf3, 0xfa, 0x00, 0x00, - 0x00, 0x00, - }, []byte{ // DATA - 0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02, - 0x00, 0x3c, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc4, 0x2a, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19, - 0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x32, 0x80, 0xfb, 0x42, 0xa1, 0xe3, 0xb2, 0x31, 0x00, 0x03, - 0x00, 0x19, 0xdb, 0x85, 0x60, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x62, 0x69, - 0x7a, 0x7a, 0x6c, 0x65, 0x21, 0x0a, 0x00, 0x00, 0x00, 0x00, - }, []byte{ // SACK - 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x08, 0x00, 0x45, 0x20, - 0x00, 0x30, 0x00, 0x00, 0x40, 0x00, 0x36, 0x84, 0xce, 0x18, 0xac, 0x19, 0x09, 0xcc, 0xac, 0x1d, - 0x14, 0x0f, 0x22, 0xb8, 0x27, 0x0f, 0xb6, 0x96, 0xb0, 0x9e, 0xfa, 0x49, 0x94, 0x3a, 0x03, 0x00, - 0x00, 0x10, 0xdb, 0x85, 0x60, 0x24, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, - }, []byte{ // SHUTDOWN - 0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02, - 0x00, 0x28, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc4, 0x3e, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19, - 0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x32, 0x80, 0xfb, 0x42, 0x3f, 0x29, 0x59, 0x23, 0x07, 0x00, - 0x00, 0x08, 0x85, 0x98, 0xb1, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, []byte{ // SHUTDOWN ACK - 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x08, 0x00, 0x45, 0x20, - 0x00, 0x24, 0x00, 0x00, 0x40, 0x00, 0x36, 0x84, 0xce, 0x24, 0xac, 0x19, 0x09, 0xcc, 0xac, 0x1d, - 0x14, 0x0f, 0x22, 0xb8, 0x27, 0x0f, 0xb6, 0x96, 0xb0, 0x9e, 0xb2, 0xc8, 0x99, 0x24, 0x08, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, []byte{ // SHUTDOWN COMPLETE - 0x00, 0x00, 0x0c, 0x9f, 0xf0, 0x1f, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x08, 0x00, 0x45, 0x02, - 0x00, 0x24, 0x00, 0x00, 0x40, 0x00, 0x40, 0x84, 0xc4, 0x42, 0xac, 0x1d, 0x14, 0x0f, 0xac, 0x19, - 0x09, 0xcc, 0x27, 0x0f, 0x22, 0xb8, 0x32, 0x80, 0xfb, 0x42, 0xa8, 0xd1, 0x86, 0x85, 0x0e, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }} - wantLayers := [][]gopacket.LayerType{ - []gopacket.LayerType{LayerTypeSCTPInit}, - []gopacket.LayerType{LayerTypeSCTPInitAck}, - []gopacket.LayerType{LayerTypeSCTPCookieEcho, LayerTypeSCTPData, gopacket.LayerTypePayload}, - []gopacket.LayerType{LayerTypeSCTPCookieAck, LayerTypeSCTPSack}, - []gopacket.LayerType{LayerTypeSCTPData, gopacket.LayerTypePayload}, - []gopacket.LayerType{LayerTypeSCTPSack}, - []gopacket.LayerType{LayerTypeSCTPShutdown}, - []gopacket.LayerType{LayerTypeSCTPShutdownAck}, - []gopacket.LayerType{LayerTypeSCTPShutdownComplete}, - } - for i, data := range sctpPackets { - p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions) - for _, typ := range wantLayers[i] { - if p.Layer(typ) == nil { - t.Errorf("Packet %d missing layer type %v, got:", i, typ) - for _, layer := range p.Layers() { - t.Errorf("\t%v", layer.LayerType()) - } - if p.ErrorLayer() != nil { - t.Error("\tPacket layer error:", p.ErrorLayer().Error()) - } - } - } - // Test re-serialization. - testSerializationWithOpts(t, p, data, gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}) - } -} - -func TestDecodeCiscoDiscovery(t *testing.T) { - // http://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=cdp_v2.pcap - data := []byte{ - 0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc, 0x00, 0x0b, 0xbe, 0x18, 0x9a, 0x41, 0x01, 0xc3, 0xaa, 0xaa, - 0x03, 0x00, 0x00, 0x0c, 0x20, 0x00, 0x02, 0xb4, 0x09, 0xa0, 0x00, 0x01, 0x00, 0x0c, 0x6d, 0x79, - 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x00, 0x02, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, - 0xcc, 0x00, 0x04, 0xc0, 0xa8, 0x00, 0xfd, 0x00, 0x03, 0x00, 0x13, 0x46, 0x61, 0x73, 0x74, 0x45, - 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x30, 0x2f, 0x31, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x28, 0x00, 0x05, 0x01, 0x14, 0x43, 0x69, 0x73, 0x63, 0x6f, 0x20, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, - 0x72, 0x65, 0x20, 0x0a, 0x49, 0x4f, 0x53, 0x20, 0x28, 0x74, 0x6d, 0x29, 0x20, 0x43, 0x32, 0x39, - 0x35, 0x30, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x28, 0x43, 0x32, 0x39, - 0x35, 0x30, 0x2d, 0x49, 0x36, 0x4b, 0x32, 0x4c, 0x32, 0x51, 0x34, 0x2d, 0x4d, 0x29, 0x2c, 0x20, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x32, 0x2e, 0x31, 0x28, 0x32, 0x32, 0x29, - 0x45, 0x41, 0x31, 0x34, 0x2c, 0x20, 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x20, 0x53, 0x4f, - 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x28, 0x66, 0x63, 0x31, 0x29, 0x0a, 0x54, 0x65, 0x63, - 0x68, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x3a, 0x20, - 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x63, 0x69, 0x73, 0x63, 0x6f, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x65, 0x63, 0x68, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x0a, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x31, - 0x39, 0x38, 0x36, 0x2d, 0x32, 0x30, 0x31, 0x30, 0x20, 0x62, 0x79, 0x20, 0x63, 0x69, 0x73, 0x63, - 0x6f, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x0a, - 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x54, 0x75, 0x65, 0x20, 0x32, 0x36, 0x2d, - 0x4f, 0x63, 0x74, 0x2d, 0x31, 0x30, 0x20, 0x31, 0x30, 0x3a, 0x33, 0x35, 0x20, 0x62, 0x79, 0x20, - 0x6e, 0x62, 0x75, 0x72, 0x72, 0x61, 0x00, 0x06, 0x00, 0x15, 0x63, 0x69, 0x73, 0x63, 0x6f, 0x20, - 0x57, 0x53, 0x2d, 0x43, 0x32, 0x39, 0x35, 0x30, 0x2d, 0x31, 0x32, 0x00, 0x08, 0x00, 0x24, 0x00, - 0x00, 0x0c, 0x01, 0x12, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x02, 0x20, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xbe, 0x18, 0x9a, 0x40, 0xff, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x0c, 0x4d, 0x59, 0x44, 0x4f, 0x4d, 0x41, 0x49, 0x4e, 0x00, 0x0a, 0x00, 0x06, 0x00, - 0x01, 0x00, 0x0b, 0x00, 0x05, 0x01, 0x00, 0x12, 0x00, 0x05, 0x00, 0x00, 0x13, 0x00, 0x05, 0x00, - 0x00, 0x16, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0xcc, 0x00, 0x04, 0xc0, 0xa8, 0x00, - 0xfd, - } - p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions) - wantLayers := []gopacket.LayerType{LayerTypeEthernet, LayerTypeLLC, LayerTypeSNAP, LayerTypeCiscoDiscovery, LayerTypeCiscoDiscoveryInfo} - checkLayers(p, wantLayers, t) - - want := &CiscoDiscoveryInfo{ - CDPHello: CDPHello{ - OUI: []byte{0, 0, 12}, - ProtocolID: 274, - ClusterMaster: []byte{0, 0, 0, 0}, - Unknown1: []byte{255, 255, 255, 255}, - Version: 1, - SubVersion: 2, - Status: 32, - Unknown2: 255, - ClusterCommander: net.HardwareAddr{0, 0, 0, 0, 0, 0}, - SwitchMAC: net.HardwareAddr{0, 0x0b, 0xbe, 0x18, 0x9a, 0x40}, - Unknown3: 255, - ManagementVLAN: 0, - }, - DeviceID: "myswitch", - Addresses: []net.IP{net.IPv4(192, 168, 0, 253)}, - PortID: "FastEthernet0/1", - Capabilities: CDPCapabilities{false, false, false, true, false, true, false, false, false}, - Version: "Cisco Internetwork Operating System Software \nIOS (tm) C2950 Software (C2950-I6K2L2Q4-M), Version 12.1(22)EA14, RELEASE SOFTWARE (fc1)\nTechnical Support: http://www.cisco.com/techsupport\nCopyright (c) 1986-2010 by cisco Systems, Inc.\nCompiled Tue 26-Oct-10 10:35 by nburra", - Platform: "cisco WS-C2950-12", - VTPDomain: "MYDOMAIN", - NativeVLAN: 1, - FullDuplex: true, - MgmtAddresses: []net.IP{net.IPv4(192, 168, 0, 253)}, - BaseLayer: BaseLayer{Contents: data[26:]}, - } - cdpL := p.Layer(LayerTypeCiscoDiscoveryInfo) - info, _ := cdpL.(*CiscoDiscoveryInfo) - if !reflect.DeepEqual(info, want) { - t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", info, want) - } -} - -func TestDecodeLinkLayerDiscovery(t *testing.T) { - // http://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=lldp.detailed.pcap - data := []byte{ - 0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e, 0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0, - 0x88, 0xcc, 0x02, 0x07, 0x04, 0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0, 0x04, - 0x04, 0x05, 0x31, 0x2f, 0x31, 0x06, 0x02, 0x00, 0x78, 0x08, 0x17, 0x53, - 0x75, 0x6d, 0x6d, 0x69, 0x74, 0x33, 0x30, 0x30, 0x2d, 0x34, 0x38, 0x2d, - 0x50, 0x6f, 0x72, 0x74, 0x20, 0x31, 0x30, 0x30, 0x31, 0x00, 0x0a, 0x0d, - 0x53, 0x75, 0x6d, 0x6d, 0x69, 0x74, 0x33, 0x30, 0x30, 0x2d, 0x34, 0x38, - 0x00, 0x0c, 0x4c, 0x53, 0x75, 0x6d, 0x6d, 0x69, 0x74, 0x33, 0x30, 0x30, - 0x2d, 0x34, 0x38, 0x20, 0x2d, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x20, 0x37, 0x2e, 0x34, 0x65, 0x2e, 0x31, 0x20, 0x28, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x20, 0x35, 0x29, 0x20, 0x62, 0x79, 0x20, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, - 0x20, 0x30, 0x35, 0x2f, 0x32, 0x37, 0x2f, 0x30, 0x35, 0x20, 0x30, 0x34, - 0x3a, 0x35, 0x33, 0x3a, 0x31, 0x31, 0x00, 0x0e, 0x04, 0x00, 0x14, 0x00, - 0x14, 0x10, 0x0e, 0x07, 0x06, 0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0, 0x02, - 0x00, 0x00, 0x03, 0xe9, 0x00, 0xfe, 0x07, 0x00, 0x12, 0x0f, 0x02, 0x07, - 0x01, 0x00, 0xfe, 0x09, 0x00, 0x12, 0x0f, 0x01, 0x03, 0x6c, 0x00, 0x00, - 0x10, 0xfe, 0x09, 0x00, 0x12, 0x0f, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, - 0xfe, 0x06, 0x00, 0x12, 0x0f, 0x04, 0x05, 0xf2, 0xfe, 0x06, 0x00, 0x80, - 0xc2, 0x01, 0x01, 0xe8, 0xfe, 0x07, 0x00, 0x80, 0xc2, 0x02, 0x01, 0x00, - 0x00, 0xfe, 0x17, 0x00, 0x80, 0xc2, 0x03, 0x01, 0xe8, 0x10, 0x76, 0x32, - 0x2d, 0x30, 0x34, 0x38, 0x38, 0x2d, 0x30, 0x33, 0x2d, 0x30, 0x35, 0x30, - 0x35, 0x00, 0xfe, 0x05, 0x00, 0x80, 0xc2, 0x04, 0x00, 0x00, 0x00, - } - - p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions) - wantLayers := []gopacket.LayerType{LayerTypeEthernet, LayerTypeLinkLayerDiscovery, LayerTypeLinkLayerDiscoveryInfo} - checkLayers(p, wantLayers, t) - lldpL := p.Layer(LayerTypeLinkLayerDiscovery) - lldp := lldpL.(*LinkLayerDiscovery) - want := &LinkLayerDiscovery{ - ChassisID: LLDPChassisID{LLDPChassisIDSubTypeMACAddr, []byte{0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0}}, - PortID: LLDPPortID{LLDPPortIDSubtypeIfaceName, []byte("1/1")}, - TTL: 120, - BaseLayer: BaseLayer{Contents: data[14:]}, - } - lldp.Values = nil // test these in next stage - if !reflect.DeepEqual(lldp, want) { - t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", lldp, want) - } - - infoL := p.Layer(LayerTypeLinkLayerDiscoveryInfo) - info := infoL.(*LinkLayerDiscoveryInfo) - wantinfo := &LinkLayerDiscoveryInfo{ - PortDescription: "Summit300-48-Port 1001\x00", - SysName: "Summit300-48\x00", - SysDescription: "Summit300-48 - Version 7.4e.1 (Build 5) by Release_Master 05/27/05 04:53:11\x00", - SysCapabilities: LLDPSysCapabilities{ - SystemCap: LLDPCapabilities{Bridge: true, Router: true}, - EnabledCap: LLDPCapabilities{Bridge: true, Router: true}, - }, - MgmtAddress: LLDPMgmtAddress{IANAAddressFamily802, []byte{0x00, 0x01, 0x30, 0xf9, 0xad, 0xa0}, LLDPInterfaceSubtypeifIndex, 1001, ""}, - OrgTLVs: []LLDPOrgSpecificTLV{ - LLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x2, Info: []uint8{0x7, 0x1, 0x0}}, - LLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x1, Info: []uint8{0x3, 0x6c, 0x0, 0x0, 0x10}}, - LLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x3, Info: []uint8{0x1, 0x0, 0x0, 0x0, 0x0}}, - LLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x4, Info: []uint8{0x5, 0xf2}}, - LLDPOrgSpecificTLV{OUI: 0x80c2, SubType: 0x1, Info: []uint8{0x1, 0xe8}}, - LLDPOrgSpecificTLV{OUI: 0x80c2, SubType: 0x2, Info: []uint8{0x1, 0x0, 0x0}}, - LLDPOrgSpecificTLV{OUI: 0x80c2, SubType: 0x3, Info: []uint8{0x1, 0xe8, 0x10, 0x76, 0x32, 0x2d, 0x30, 0x34, 0x38, 0x38, 0x2d, 0x30, 0x33, 0x2d, 0x30, 0x35, 0x30, 0x35, 0x0}}, - LLDPOrgSpecificTLV{OUI: 0x80c2, SubType: 0x4, Info: []uint8{0x0}}, - }, - Unknown: nil, - } - if !reflect.DeepEqual(info, wantinfo) { - t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", info, wantinfo) - } - info8021, err := info.Decode8021() - if err != nil { - t.Errorf("8021 Values decode error: %v", err) - } - want8021 := LLDPInfo8021{ - PVID: 488, - PPVIDs: []PortProtocolVLANID{PortProtocolVLANID{false, false, 0}}, - VLANNames: []VLANName{VLANName{488, "v2-0488-03-0505\x00"}}, - ProtocolIdentities: nil, - VIDUsageDigest: 0, - ManagementVID: 0, - LinkAggregation: LLDPLinkAggregation{false, false, 0}, - } - if !reflect.DeepEqual(info8021, want8021) { - t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", info8021, want8021) - } - info8023, err := info.Decode8023() - if err != nil { - t.Errorf("8023 Values decode error: %v", err) - } - want8023 := LLDPInfo8023{ - LinkAggregation: LLDPLinkAggregation{true, false, 0}, - MACPHYConfigStatus: LLDPMACPHYConfigStatus{true, true, 0x6c00, 0x0010}, - PowerViaMDI: LLDPPowerViaMDI8023{true, true, true, false, 1, 0, 0, 0, 0, 0, 0}, - MTU: 1522, - } - - if !reflect.DeepEqual(info8023, want8023) { - t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", info8023, want8023) - } - - // http://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=lldpmed_civicloc.pcap - data = []byte{ - 0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e, 0x00, 0x13, 0x21, 0x57, 0xca, 0x7f, - 0x88, 0xcc, 0x02, 0x07, 0x04, 0x00, 0x13, 0x21, 0x57, 0xca, 0x40, 0x04, - 0x02, 0x07, 0x31, 0x06, 0x02, 0x00, 0x78, 0x08, 0x01, 0x31, 0x0a, 0x1a, - 0x50, 0x72, 0x6f, 0x43, 0x75, 0x72, 0x76, 0x65, 0x20, 0x53, 0x77, 0x69, - 0x74, 0x63, 0x68, 0x20, 0x32, 0x36, 0x30, 0x30, 0x2d, 0x38, 0x2d, 0x50, - 0x57, 0x52, 0x0c, 0x5f, 0x50, 0x72, 0x6f, 0x43, 0x75, 0x72, 0x76, 0x65, - 0x20, 0x4a, 0x38, 0x37, 0x36, 0x32, 0x41, 0x20, 0x53, 0x77, 0x69, 0x74, - 0x63, 0x68, 0x20, 0x32, 0x36, 0x30, 0x30, 0x2d, 0x38, 0x2d, 0x50, 0x57, - 0x52, 0x2c, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x48, 0x2e, 0x30, 0x38, 0x2e, 0x38, 0x39, 0x2c, 0x20, 0x52, 0x4f, 0x4d, - 0x20, 0x48, 0x2e, 0x30, 0x38, 0x2e, 0x35, 0x58, 0x20, 0x28, 0x2f, 0x73, - 0x77, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x2f, 0x66, 0x69, 0x73, 0x68, 0x28, 0x74, 0x73, 0x5f, 0x30, 0x38, 0x5f, - 0x35, 0x29, 0x29, 0x0e, 0x04, 0x00, 0x14, 0x00, 0x04, 0x10, 0x0c, 0x05, - 0x01, 0x0f, 0xff, 0x7a, 0x94, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, - 0x09, 0x00, 0x12, 0x0f, 0x01, 0x03, 0x6c, 0x00, 0x00, 0x10, 0xfe, 0x07, - 0x00, 0x12, 0xbb, 0x01, 0x00, 0x0f, 0x04, 0xfe, 0x08, 0x00, 0x12, 0xbb, - 0x02, 0x01, 0x40, 0x65, 0xae, 0xfe, 0x2e, 0x00, 0x12, 0xbb, 0x03, 0x02, - 0x28, 0x02, 0x55, 0x53, 0x01, 0x02, 0x43, 0x41, 0x03, 0x09, 0x52, 0x6f, - 0x73, 0x65, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0x06, 0x09, 0x46, 0x6f, 0x6f, - 0x74, 0x68, 0x69, 0x6c, 0x6c, 0x73, 0x13, 0x04, 0x38, 0x30, 0x30, 0x30, - 0x1a, 0x03, 0x52, 0x33, 0x4c, 0xfe, 0x07, 0x00, 0x12, 0xbb, 0x04, 0x03, - 0x00, 0x41, 0x00, 0x00, - } - - p = gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions) - wantLayers = []gopacket.LayerType{LayerTypeEthernet, LayerTypeLinkLayerDiscovery, LayerTypeLinkLayerDiscoveryInfo} - checkLayers(p, wantLayers, t) - lldpL = p.Layer(LayerTypeLinkLayerDiscovery) - lldp = lldpL.(*LinkLayerDiscovery) - want = &LinkLayerDiscovery{ - ChassisID: LLDPChassisID{LLDPChassisIDSubTypeMACAddr, []byte{0x00, 0x13, 0x21, 0x57, 0xca, 0x40}}, - PortID: LLDPPortID{LLDPPortIDSubtypeLocal, []byte("1")}, - TTL: 120, - BaseLayer: BaseLayer{Contents: data[14:]}, - } - lldp.Values = nil // test these in next stage - if !reflect.DeepEqual(lldp, want) { - t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", lldp, want) - } - - infoL = p.Layer(LayerTypeLinkLayerDiscoveryInfo) - info = infoL.(*LinkLayerDiscoveryInfo) - wantinfo = &LinkLayerDiscoveryInfo{ - PortDescription: "1", - SysName: "ProCurve Switch 2600-8-PWR", - SysDescription: "ProCurve J8762A Switch 2600-8-PWR, revision H.08.89, ROM H.08.5X (/sw/code/build/fish(ts_08_5))", - SysCapabilities: LLDPSysCapabilities{ - SystemCap: LLDPCapabilities{Bridge: true, Router: true}, - EnabledCap: LLDPCapabilities{Bridge: true}, - }, - MgmtAddress: LLDPMgmtAddress{IANAAddressFamilyIPV4, []byte{0x0f, 0xff, 0x7a, 0x94}, LLDPInterfaceSubtypeifIndex, 0, ""}, - OrgTLVs: []LLDPOrgSpecificTLV{ - LLDPOrgSpecificTLV{OUI: 0x120f, SubType: 0x1, Info: []uint8{0x3, 0x6c, 0x0, 0x0, 0x10}}, - LLDPOrgSpecificTLV{OUI: 0x12bb, SubType: 0x1, Info: []uint8{0x0, 0xf, 0x4}}, - LLDPOrgSpecificTLV{OUI: 0x12bb, SubType: 0x2, Info: []uint8{0x1, 0x40, 0x65, 0xae}}, - LLDPOrgSpecificTLV{OUI: 0x12bb, SubType: 0x3, Info: []uint8{0x2, 0x28, 0x2, 0x55, 0x53, 0x1, 0x2, 0x43, 0x41, 0x3, 0x9, 0x52, 0x6f, 0x73, 0x65, 0x76, 0x69, 0x6c, 0x6c, 0x65, 0x6, 0x9, 0x46, 0x6f, 0x6f, 0x74, 0x68, 0x69, 0x6c, 0x6c, 0x73, 0x13, 0x4, 0x38, 0x30, 0x30, 0x30, 0x1a, 0x3, 0x52, 0x33, 0x4c}}, - LLDPOrgSpecificTLV{OUI: 0x12bb, SubType: 0x4, Info: []uint8{0x3, 0x0, 0x41}}, - }, - Unknown: nil, - } - if !reflect.DeepEqual(info, wantinfo) { - t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", info, wantinfo) - } - info8023, err = info.Decode8023() - if err != nil { - t.Errorf("8023 Values decode error: %v", err) - } - want8023 = LLDPInfo8023{ - MACPHYConfigStatus: LLDPMACPHYConfigStatus{true, true, 0x6c00, 0x0010}, - } - - if !reflect.DeepEqual(info8023, want8023) { - t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", info8023, want8023) - } - - infoMedia, err := info.DecodeMedia() - if err != nil { - t.Errorf("8023 Values decode error: %v", err) - } - wantMedia := LLDPInfoMedia{ - MediaCapabilities: LLDPMediaCapabilities{true, true, true, true, false, false, LLDPMediaClassNetwork}, - NetworkPolicy: LLDPNetworkPolicy{LLDPAppTypeVoice, true, true, 50, 6, 46}, - Location: LLDPLocation{Format: LLDPLocationFormatAddress, Address: LLDPLocationAddress{ - What: LLDPLocationAddressWhatClient, - CountryCode: "US", - AddressLines: []LLDPLocationAddressLine{ - LLDPLocationAddressLine{LLDPLocationAddressTypeNational, "CA"}, - LLDPLocationAddressLine{LLDPLocationAddressTypeCity, "Roseville"}, - LLDPLocationAddressLine{LLDPLocationAddressTypeStreet, "Foothills"}, - LLDPLocationAddressLine{LLDPLocationAddressTypeHouseNum, "8000"}, - LLDPLocationAddressLine{LLDPLocationAddressTypeUnit, "R3L"}, - }, - }}, - PowerViaMDI: LLDPPowerViaMDI{0, 0, LLDPPowerPriorityLow, 6500}, - } - - if !reflect.DeepEqual(infoMedia, wantMedia) { - t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", infoMedia, wantMedia) - } - -} - -func TestDecodeNortelDiscovery(t *testing.T) { - // http://www.thetechfirm.com/packets/nortel_btdp/btdp_nai.enc - data := []byte{ - 0x01, 0x00, 0x81, 0x00, 0x01, 0x00, 0x00, 0x04, 0x38, 0xe0, 0xcc, 0xde, - 0x00, 0x13, 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x81, 0x01, 0xa2, 0xac, 0x13, - 0x58, 0x03, 0x00, 0x04, 0x15, 0x30, 0x0c, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x38, 0xe0, 0xcc, 0xde, 0x80, 0x6a, 0x00, 0x01, 0x14, 0x00, - 0x02, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions) - wantLayers := []gopacket.LayerType{LayerTypeEthernet, LayerTypeLLC, LayerTypeSNAP, LayerTypeNortelDiscovery} - checkLayers(p, wantLayers, t) - - want := &NortelDiscovery{ - IPAddress: []byte{172, 19, 88, 3}, - SegmentID: []byte{0x00, 0x04, 0x15}, - Chassis: NDPChassisBayStack450101001000Switches, - Backplane: NDPBackplaneEthernetFastEthernetGigabitEthernet, - State: NDPStateHeartbeat, - NumLinks: 0, - } - ndpL := p.Layer(LayerTypeNortelDiscovery) - info, _ := ndpL.(*NortelDiscovery) - if !reflect.DeepEqual(info, want) { - t.Errorf("Values mismatch, \ngot %#v\nwant %#v\n", info, want) - } -} - -func TestDecodeIPv6Jumbogram(t *testing.T) { - // Haven't found any of these in the wild or on example pcaps online, so had - // to generate one myself via scapy. Unfortunately, scapy can only - // str(packet) for packets with length < 65536, due to limitations in python's - // struct library, so I generated the header with: - // Ether() / IPv6(src='::1', dst='::2') / IPv6ExtHdrHopByHop(options=[Jumbo(jumboplen=70000)]) / TCP(sport=8888, dport=80) - // then added the payload manually ("payload" * 9996). The checksums here are - // not correct, but we don't check, so who cares ;) - dataStr := "\x00\x1f\xca\xb3v@$\xbe\x05'\x0b\x17\x86\xdd`\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x06\x00\xc2\x04\x00\x01\x11p\"\xb8\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00l\xd8\x00\x00" - payload := strings.Repeat("payload", 9996) - data := []byte(dataStr + payload) - p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions) - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeTCP, gopacket.LayerTypePayload}, t) - if p.ApplicationLayer() == nil { - t.Error("Packet has no application layer") - } else if string(p.ApplicationLayer().Payload()) != payload { - t.Errorf("Jumbogram payload wrong") - } - // Check truncated for jumbograms - data = data[:len(data)-1] - p = gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions) - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeTCP, gopacket.LayerTypePayload}, t) - if !p.Metadata().Truncated { - t.Error("Jumbogram should be truncated") - } -} - -func TestDecodeUDPPacketTooSmall(t *testing.T) { - data := []byte{ - 0x00, 0x15, 0x2c, 0x9d, 0xcc, 0x00, 0x00, 0x10, 0xdb, 0xff, 0x10, 0x00, 0x81, 0x00, 0x01, 0xf7, - 0x08, 0x00, 0x45, 0x60, 0x00, 0x3c, 0x0f, 0xa9, 0x00, 0x00, 0x6e, 0x11, 0x01, 0x0a, 0x47, 0xe6, - 0xee, 0x2e, 0xac, 0x16, 0x59, 0x73, 0x00, 0x50, 0x00, 0x50, 0x00, 0x28, 0x4d, 0xad, 0x00, 0x67, - 0x00, 0x01, 0x00, 0x72, 0xd5, 0xc7, 0xf1, 0x07, 0x00, 0x00, 0x01, 0x01, 0x00, 0x0d, 0x00, 0x00, - 0x00, 0x14, 0x00, 0x00, 0x19, 0xba, - } - p := gopacket.NewPacket(data, LinkTypeEthernet, testDecodeOptions) - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeDot1Q, LayerTypeIPv4, LayerTypeUDP, gopacket.LayerTypePayload}, t) - if !p.Metadata().Truncated { - t.Error("UDP short packet should be truncated") - } -} - -func TestDecodingLayerParserFullTCPPacket(t *testing.T) { - dlp := gopacket.NewDecodingLayerParser(LayerTypeEthernet, &Ethernet{}, &IPv4{}, &TCP{}, &gopacket.Payload{}) - decoded := make([]gopacket.LayerType, 1) - err := dlp.DecodeLayers(testSimpleTCPPacket, &decoded) - if err != nil { - t.Error("Error from dlp parser: ", err) - } - if len(decoded) != 4 { - t.Error("Expected 4 layers parsed, instead got ", len(decoded)) - } -} - -// testICMP is the packet: -// 15:49:15.773265 IP 72.14.222.226 > 172.29.20.15: ICMP host 10.66.73.201 unreachable - admin prohibited filter, length 36 -// 0x0000: 24be 0527 0b17 001f cab3 75c0 0800 4500 $..'......u...E. -// 0x0010: 0038 0000 0000 fc01 d7a7 480e dee2 ac1d .8........H..... -// 0x0020: 140f 030d 946e 0000 0000 4520 004d 0000 .....n....E..M.. -// 0x0030: 4000 3e11 2849 ac1d 140f 0a42 49c9 8ecc @.>.(I.....BI... -// 0x0040: 62e1 0039 769d b..9v. -var testICMP = []byte{ - 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x75, 0xc0, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0xd7, 0xa7, 0x48, 0x0e, 0xde, 0xe2, 0xac, 0x1d, - 0x14, 0x0f, 0x03, 0x0d, 0x94, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x45, 0x20, 0x00, 0x4d, 0x00, 0x00, - 0x40, 0x00, 0x3e, 0x11, 0x28, 0x49, 0xac, 0x1d, 0x14, 0x0f, 0x0a, 0x42, 0x49, 0xc9, 0x8e, 0xcc, - 0x62, 0xe1, 0x00, 0x39, 0x76, 0x9d, -} - -func TestICMP(t *testing.T) { - p := gopacket.NewPacket(testICMP, LinkTypeEthernet, testDecodeOptions) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t) - testSerialization(t, p, testICMP) -} -func BenchmarkDecodeICMP(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testICMP, LinkTypeEthernet, gopacket.NoCopy) - } -} - -// testICMP6 is the packet: -// 16:17:37.758937 IP6 fe80::21f:caff:feb3:75c0 > 2620:0:1005:0:26be:5ff:fe27:b17: ICMP6, neighbor solicitation, who has 2620:0:1005:0:26be:5ff:fe27:b17, length 32 -// 0x0000: 24be 0527 0b17 001f cab3 75c0 86dd 6e00 $..'......u...n. -// 0x0010: 0000 0020 3aff fe80 0000 0000 0000 021f ....:........... -// 0x0020: caff feb3 75c0 2620 0000 1005 0000 26be ....u.&.......&. -// 0x0030: 05ff fe27 0b17 8700 1eba 0000 0000 2620 ...'..........&. -// 0x0040: 0000 1005 0000 26be 05ff fe27 0b17 0101 ......&....'.... -// 0x0050: 001f cab3 75c0 ....u. -var testICMP6 = []byte{ - 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x75, 0xc0, 0x86, 0xdd, 0x6e, 0x00, - 0x00, 0x00, 0x00, 0x20, 0x3a, 0xff, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1f, - 0xca, 0xff, 0xfe, 0xb3, 0x75, 0xc0, 0x26, 0x20, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xbe, - 0x05, 0xff, 0xfe, 0x27, 0x0b, 0x17, 0x87, 0x00, 0x1e, 0xba, 0x00, 0x00, 0x00, 0x00, 0x26, 0x20, - 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xbe, 0x05, 0xff, 0xfe, 0x27, 0x0b, 0x17, 0x01, 0x01, - 0x00, 0x1f, 0xca, 0xb3, 0x75, 0xc0, -} - -func TestICMP6(t *testing.T) { - p := gopacket.NewPacket(testICMP6, LinkTypeEthernet, testDecodeOptions) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeICMPv6, gopacket.LayerTypePayload}, t) - testSerialization(t, p, testICMP6) -} -func BenchmarkDecodeICMP6(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testICMP6, LinkTypeEthernet, gopacket.NoCopy) - } -} - -// testMPLS is the packet: -// 12:48:57.201014 MPLS (label 29, exp 0, [S], ttl 255) IP 10.1.2.1 > 10.34.0.1: ICMP echo request, id 2618, seq 1579, length 80 -// 0x0000: 0030 96e6 fc39 0030 9605 2838 8847 0001 .0...9.0..(8.G.. -// 0x0010: d1ff 4500 0064 000b 0000 ff01 a569 0a01 ..E..d.......i.. -// 0x0020: 0201 0a22 0001 0800 3a76 0a3a 062b 0000 ..."....:v.:.+.. -// 0x0030: 0000 001f 3350 abcd abcd abcd abcd abcd ....3P.......... -// 0x0040: abcd abcd abcd abcd abcd abcd abcd abcd ................ -// 0x0050: abcd abcd abcd abcd abcd abcd abcd abcd ................ -// 0x0060: abcd abcd abcd abcd abcd abcd abcd abcd ................ -// 0x0070: abcd abcd abcd ...... -var testMPLS = []byte{ - 0x00, 0x30, 0x96, 0xe6, 0xfc, 0x39, 0x00, 0x30, 0x96, 0x05, 0x28, 0x38, 0x88, 0x47, 0x00, 0x01, - 0xd1, 0xff, 0x45, 0x00, 0x00, 0x64, 0x00, 0x0b, 0x00, 0x00, 0xff, 0x01, 0xa5, 0x69, 0x0a, 0x01, - 0x02, 0x01, 0x0a, 0x22, 0x00, 0x01, 0x08, 0x00, 0x3a, 0x76, 0x0a, 0x3a, 0x06, 0x2b, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1f, 0x33, 0x50, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, -} - -func TestMPLS(t *testing.T) { - p := gopacket.NewPacket(testMPLS, LinkTypeEthernet, testDecodeOptions) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeMPLS, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t) - testSerialization(t, p, testMPLS) -} -func BenchmarkDecodeMPLS(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testMPLS, LinkTypeEthernet, gopacket.NoCopy) - } -} - -// testPPPoEICMPv6 is the packet: -// 07:43:31.091560 PPPoE [ses 0x11] IP6 fe80::c801:eff:fe88:8 > ff02::1: ICMP6, neighbor advertisement, tgt is fe80::c801:eff:fe88:8, length 24 -// 0x0000: cc05 0e88 0000 ca01 0e88 0006 8864 1100 .............d.. -// 0x0010: 0011 0042 0057 6e00 0000 0018 3aff fe80 ...B.Wn.....:... -// 0x0020: 0000 0000 0000 c801 0eff fe88 0008 ff02 ................ -// 0x0030: 0000 0000 0000 0000 0000 0000 0001 8800 ................ -// 0x0040: 5083 8000 0000 fe80 0000 0000 0000 c801 P............... -// 0x0050: 0eff fe88 0008 ...... -var testPPPoEICMPv6 = []byte{ - 0xcc, 0x05, 0x0e, 0x88, 0x00, 0x00, 0xca, 0x01, 0x0e, 0x88, 0x00, 0x06, 0x88, 0x64, 0x11, 0x00, - 0x00, 0x11, 0x00, 0x42, 0x00, 0x57, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3a, 0xff, 0xfe, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x01, 0x0e, 0xff, 0xfe, 0x88, 0x00, 0x08, 0xff, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x88, 0x00, - 0x50, 0x83, 0x80, 0x00, 0x00, 0x00, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x01, - 0x0e, 0xff, 0xfe, 0x88, 0x00, 0x08, -} - -func TestPPPoEICMPv6(t *testing.T) { - p := gopacket.NewPacket(testPPPoEICMPv6, LinkTypeEthernet, testDecodeOptions) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{ - LayerTypeEthernet, - LayerTypePPPoE, - LayerTypePPP, - LayerTypeIPv6, - LayerTypeICMPv6, - gopacket.LayerTypePayload, - }, t) - testSerialization(t, p, testPPPoEICMPv6) -} -func BenchmarkDecodePPPoEICMPv6(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPPPoEICMPv6, LinkTypeEthernet, gopacket.NoCopy) - } -} - -var testPFLogUDP = []byte{ - 0x3d, 0x02, 0x00, 0x00, 0x65, 0x6e, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xff, 0xff, 0xff, 0x7f, - 0xa0, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xb8, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x45, 0x00, 0x00, 0x2c, 0x02, 0x16, 0x00, 0x00, 0x40, 0x11, 0x4e, 0xb0, 0xac, 0x17, 0xe8, 0xcc, - 0xac, 0x17, 0xe8, 0xff, 0xf0, 0xff, 0x21, 0xa4, 0x00, 0x18, 0x2a, 0x25, 0x50, 0x4e, 0x4a, 0x50, - 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -} - -func TestPFLogUDP(t *testing.T) { - p := gopacket.NewPacket(testPFLogUDP, LinkTypePFLog, testDecodeOptions) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{ - LayerTypePFLog, - LayerTypeIPv4, - LayerTypeUDP, - gopacket.LayerTypePayload, - }, t) -} - -func TestRegressionDot1QPriority(t *testing.T) { - d := &Dot1Q{ - Priority: 2, - } - out := gopacket.NewSerializeBuffer() - gopacket.SerializeLayers(out, gopacket.SerializeOptions{}, d) - if err := d.DecodeFromBytes(out.Bytes(), gopacket.NilDecodeFeedback); err != nil { - t.Errorf("could not decode encoded dot1q") - } else if d.Priority != 2 { - t.Errorf("priority mismatch, want 2 got %d", d.Priority) - } -} - -// testPacketMPLSInMPLS is the packet: -// 15:27:44.753678 MPLS (label 18, exp 0, ttl 255) (label 16, exp 0, [S], ttl -// 255) IP 10.31.0.1 > 10.34.0.1: ICMP echo request, id 3941, seq 4768, length -// 80 -// 0x0000: 0030 96e6 fc39 0030 9605 2838 8847 0001 .0...9.0..(8.G.. -// 0x0010: 20ff 0001 01ff 4500 0064 0050 0000 ff01 ......E..d.P.... -// 0x0020: a706 0a1f 0001 0a22 0001 0800 bd11 0f65 .......".......e -// 0x0030: 12a0 0000 0000 0053 9ee0 abcd abcd abcd .......S........ -// 0x0040: abcd abcd abcd abcd abcd abcd abcd abcd ................ -// 0x0050: abcd abcd abcd abcd abcd abcd abcd abcd ................ -// 0x0060: abcd abcd abcd abcd abcd abcd abcd abcd ................ -// 0x0070: abcd abcd abcd abcd abcd .......... -var testPacketMPLSInMPLS = []byte{ - 0x00, 0x30, 0x96, 0xe6, 0xfc, 0x39, 0x00, 0x30, 0x96, 0x05, 0x28, 0x38, 0x88, 0x47, 0x00, 0x01, - 0x20, 0xff, 0x00, 0x01, 0x01, 0xff, 0x45, 0x00, 0x00, 0x64, 0x00, 0x50, 0x00, 0x00, 0xff, 0x01, - 0xa7, 0x06, 0x0a, 0x1f, 0x00, 0x01, 0x0a, 0x22, 0x00, 0x01, 0x08, 0x00, 0xbd, 0x11, 0x0f, 0x65, - 0x12, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x9e, 0xe0, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, -} - -func TestPacketMPLSInMPLS(t *testing.T) { - p := gopacket.NewPacket(testPacketMPLSInMPLS, LinkTypeEthernet, testDecodeOptions) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{ - LayerTypeEthernet, - LayerTypeMPLS, - LayerTypeMPLS, - LayerTypeIPv4, - LayerTypeICMPv4, - gopacket.LayerTypePayload}, t) -} - -// testPacketIPv4Fragmented is the packet: -// 22:11:26.616090 IP 10.1.1.1.31915 > 129.111.30.27.20197: UDP, length 28 -// 0x0000: 0000 39cf d9cd 0040 33d9 7cfd 0800 4500 ..9....@3.|...E. -// 0x0010: 0038 00f2 2000 4011 af37 0a01 0101 816f .8....@..7.....o -// 0x0020: 1e1b 7cab 4ee5 0024 0000 0000 0000 0000 ..|.N..$........ -// 0x0030: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -// 0x0040: 0000 0000 0000 ...... -var testPacketIPv4Fragmented = []byte{ - 0x00, 0x00, 0x39, 0xcf, 0xd9, 0xcd, 0x00, 0x40, 0x33, 0xd9, 0x7c, 0xfd, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x38, 0x00, 0xf2, 0x20, 0x00, 0x40, 0x11, 0xaf, 0x37, 0x0a, 0x01, 0x01, 0x01, 0x81, 0x6f, - 0x1e, 0x1b, 0x7c, 0xab, 0x4e, 0xe5, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -} - -func TestPacketIPv4Fragmented(t *testing.T) { - p := gopacket.NewPacket(testPacketIPv4Fragmented, LinkTypeEthernet, testDecodeOptions) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, gopacket.LayerTypeFragment}, t) - testSerializationWithOpts(t, p, testPacketIPv4Fragmented, gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}) -} - -// TestSCTPChunkBadLength tests for issue #146 -func TestSCTPChunkBadLength(t *testing.T) { - data := []byte( - "0000\xad9$e\x11\xe4\xaeo\b\x00E\x00\x018\xb4\xa3" + - "\x00\x00Y\x84\xc4@\x11gz\xc0\xa8\xee\x01\xc0\xa8" + - "\xeeD\x007le\x03\x01\xc0\f\xdf\b\x01\x00\x00") - - // this panic'd previously due to a zero length chunk getting - // repeatedly read - gopacket.NewPacket(data, LinkTypeEthernet, gopacket.Default) -} - -// TestSTP -func TestSTP(t *testing.T) { - testSTPpacket := []byte{ - 0x01, 0x80, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x0E, 0x87, 0x85, 0x04, 0x00, 0x26, 0x42, 0x42, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x64, 0x00, 0x1C, 0x0E, 0x87, 0x78, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x80, 0x64, 0x00, 0x1C, 0x0E, 0x87, 0x85, 0x00, 0x80, 0x04, 0x01, 0x00, 0x14, 0x00, - 0x02, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - p := gopacket.NewPacket(testSTPpacket, LinkTypeEthernet, testDecodeOptions) - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeLLC, LayerTypeSTP}, t) -} diff --git a/vendor/github.com/google/gopacket/layers/dhcp_test.go b/vendor/github.com/google/gopacket/layers/dhcp_test.go deleted file mode 100644 index c4975dc..0000000 --- a/vendor/github.com/google/gopacket/layers/dhcp_test.go +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2016, Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package layers - -import ( - "bytes" - "net" - "testing" - - "github.com/google/gopacket" -) - -func TestDHCPv4EncodeRequest(t *testing.T) { - dhcp := &DHCPv4{Operation: DHCPOpRequest, HardwareType: LinkTypeEthernet, Xid: 0x12345678, - ClientIP: net.IP{0, 0, 0, 0}, YourClientIP: net.IP{0, 0, 0, 0}, NextServerIP: net.IP{0, 0, 0, 0}, RelayAgentIP: net.IP{0, 0, 0, 0}, - ClientHWAddr: net.HardwareAddr{0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc}, - ServerName: make([]byte, 64), File: make([]byte, 128)} - - dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptMessageType, []byte{byte(DHCPMsgTypeDiscover)})) - dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptHostname, []byte{'e', 'x', 'a', 'm', 'p', 'l', 'e', '.', 'c', 'o', 'm'})) - dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptPad, nil)) - dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptParamsRequest, - []byte{byte(DHCPOptSubnetMask), byte(DHCPOptBroadcastAddr), byte(DHCPOptTimeOffset), - byte(DHCPOptRouter), byte(DHCPOptDomainName), byte(DHCPOptDNS), byte(DHCPOptDomainSearch), - byte(DHCPOptHostname), byte(DHCPOptNetBIOSTCPNS), byte(DHCPOptInterfaceMTU), byte(DHCPOptClasslessStaticRoute), - byte(DHCPOptNTPServers)})) - - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{FixLengths: true} - err := gopacket.SerializeLayers(buf, opts, dhcp) - if err != nil { - t.Fatal(err) - } - - p2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDHCPv4, testDecodeOptions) - dhcp2 := p2.Layer(LayerTypeDHCPv4).(*DHCPv4) - testDHCPEqual(t, dhcp, dhcp2) -} - -func TestDHCPv4EncodeResponse(t *testing.T) { - dhcp := &DHCPv4{Operation: DHCPOpReply, HardwareType: LinkTypeEthernet, Xid: 0x12345678, - ClientIP: net.IP{0, 0, 0, 0}, YourClientIP: net.IP{192, 168, 0, 123}, NextServerIP: net.IP{192, 168, 0, 1}, RelayAgentIP: net.IP{0, 0, 0, 0}, - ClientHWAddr: net.HardwareAddr{0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc}, - ServerName: make([]byte, 64), File: make([]byte, 128)} - - dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptMessageType, []byte{byte(DHCPMsgTypeOffer)})) - dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptSubnetMask, []byte{255, 255, 255, 0})) - dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptPad, nil)) - dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptT1, []byte{0x00, 0x00, 0x0e, 0x10})) - dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptT2, []byte{0x00, 0x00, 0x0e, 0x10})) - dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptLeaseTime, []byte{0x00, 0x00, 0x0e, 0x10})) - dhcp.Options = append(dhcp.Options, NewDHCPOption(DHCPOptServerID, []byte{192, 168, 0, 1})) - - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{FixLengths: true} - err := gopacket.SerializeLayers(buf, opts, dhcp) - if err != nil { - t.Fatal(err) - } - - p2 := gopacket.NewPacket(buf.Bytes(), LayerTypeDHCPv4, testDecodeOptions) - dhcp2 := p2.Layer(LayerTypeDHCPv4).(*DHCPv4) - testDHCPEqual(t, dhcp, dhcp2) -} - -func testDHCPEqual(t *testing.T, d1, d2 *DHCPv4) { - if d1.Operation != d2.Operation { - t.Errorf("expected Operation=%s, got %s", d1.Operation, d2.Operation) - } - if d1.HardwareType != d2.HardwareType { - t.Errorf("expected HardwareType=%s, got %s", d1.HardwareType, d2.HardwareType) - } - if d1.HardwareLen != d2.HardwareLen { - t.Errorf("expected HardwareLen=%v, got %v", d1.HardwareLen, d2.HardwareLen) - } - if d1.HardwareOpts != d2.HardwareOpts { - t.Errorf("expected HardwareOpts=%v, got %v", d1.HardwareOpts, d2.HardwareOpts) - } - if d1.Xid != d2.Xid { - t.Errorf("expected Xid=%v, got %v", d1.Xid, d2.Xid) - } - if d1.Secs != d2.Secs { - t.Errorf("expected Secs=%v, got %v", d1.Secs, d2.Secs) - } - if d1.Flags != d2.Flags { - t.Errorf("expected Flags=%v, got %v", d1.Flags, d2.Flags) - } - if !d1.ClientIP.Equal(d2.ClientIP) { - t.Errorf("expected ClientIP=%v, got %v", d1.ClientIP, d2.ClientIP) - } - if !d1.YourClientIP.Equal(d2.YourClientIP) { - t.Errorf("expected YourClientIP=%v, got %v", d1.YourClientIP, d2.YourClientIP) - } - if !d1.NextServerIP.Equal(d2.NextServerIP) { - t.Errorf("expected NextServerIP=%v, got %v", d1.NextServerIP, d2.NextServerIP) - } - if !d1.RelayAgentIP.Equal(d2.RelayAgentIP) { - t.Errorf("expected RelayAgentIP=%v, got %v", d1.RelayAgentIP, d2.RelayAgentIP) - } - if !bytes.Equal(d1.ClientHWAddr, d2.ClientHWAddr) { - t.Errorf("expected ClientHWAddr=%v, got %v", d1.ClientHWAddr, d2.ClientHWAddr) - } - if !bytes.Equal(d1.ServerName, d2.ServerName) { - t.Errorf("expected ServerName=%v, got %v", d1.ServerName, d2.ServerName) - } - if !bytes.Equal(d1.File, d2.File) { - t.Errorf("expected File=%v, got %v", d1.File, d2.File) - } - if len(d1.Options) != len(d2.Options) { - t.Errorf("expected %d options, got %d", len(d1.Options), len(d2.Options)) - } - - for i, o := range d1.Options { - testDHCPOptionEqual(t, i, o, d2.Options[i]) - } -} - -func testDHCPOptionEqual(t *testing.T, idx int, d1, d2 DHCPOption) { - if d1.Type != d2.Type { - t.Errorf("expection Options[%d].Type = %s, got %s", idx, d1.Type, d2.Type) - } - if !bytes.Equal(d1.Data, d2.Data) { - t.Errorf("expection Options[%d].Data to be = %v, got %v", idx, d1.Data, d2.Data) - } -} diff --git a/vendor/github.com/google/gopacket/layers/dns_test.go b/vendor/github.com/google/gopacket/layers/dns_test.go deleted file mode 100644 index 264513b..0000000 --- a/vendor/github.com/google/gopacket/layers/dns_test.go +++ /dev/null @@ -1,833 +0,0 @@ -// 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. -// 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........z.X -// 0x05a0: a1b2 6e08 d06d dc21 1eda 14a0 a2f7 1701 ..n..m.!........ -// 0x05b0: a5e0 dfd7 871f 595d db43 70f5 bab3 b732 ......Y].Cp....2 -// 0x05c0: 6275 da15 b203 dac7 321f 8d61 11bd 30 bu......2..a..0 -var testAnotherMalformedDNS = []byte{ - 0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00, - 0x05, 0xc1, 0x2e, 0xea, 0x40, 0x00, 0x36, 0x11, 0xfb, 0xd1, 0x0a, 0x4d, 0x00, 0x1d, 0x0a, 0x01, - 0x00, 0x06, 0x00, 0x35, 0xa5, 0x28, 0x05, 0xad, 0x00, 0xa2, 0x34, 0xb3, 0x33, 0x13, 0x5c, 0x1f, - 0x2d, 0xc8, 0x74, 0x2e, 0xcb, 0x77, 0x2d, 0xa0, 0xbc, 0x2e, 0x56, 0x8b, 0xf7, 0x51, 0xf3, 0x22, - 0x85, 0x1d, 0xab, 0x17, 0x78, 0x10, 0x00, 0x9c, 0x1c, 0xef, 0xc6, 0xd5, 0x06, 0x05, 0x37, 0xf4, - 0x96, 0x9b, 0xc6, 0x5e, 0x48, 0x3e, 0x47, 0x06, 0xf5, 0x8b, 0xdf, 0x36, 0x47, 0xdb, 0xea, 0xe2, - 0x88, 0x5d, 0x68, 0x8a, 0xc5, 0xa5, 0x57, 0x05, 0xaa, 0xa8, 0x95, 0xeb, 0x93, 0xa4, 0xd8, 0x5a, - 0xc9, 0xaf, 0x26, 0x1f, 0x78, 0x16, 0xa3, 0x54, 0x2d, 0x23, 0xd8, 0x4a, 0x57, 0x9c, 0x48, 0x76, - 0xa3, 0x91, 0x43, 0xdb, 0x5c, 0x41, 0x19, 0x1a, 0x92, 0xb8, 0xdc, 0xdd, 0x68, 0x39, 0xee, 0xf5, - 0x72, 0x8e, 0x13, 0xe0, 0x06, 0x79, 0x6f, 0x47, 0x88, 0xa0, 0x25, 0xb9, 0x44, 0xd8, 0xf8, 0xe7, - 0x8a, 0xfe, 0x0b, 0xfa, 0xf8, 0x11, 0x8d, 0xa5, 0xf8, 0xa3, 0x1f, 0x8e, 0xd2, 0x3b, 0xfe, 0x12, - 0xd9, 0x43, 0x93, 0x27, 0x92, 0xad, 0x44, 0x10, 0x18, 0x3e, 0x68, 0x8d, 0xb0, 0x6d, 0x53, 0x91, - 0x69, 0x5b, 0xe4, 0x9f, 0x8f, 0x1e, 0xc0, 0x75, 0xd0, 0x43, 0xaf, 0xe0, 0x11, 0x74, 0x9d, 0xb0, - 0x06, 0xb0, 0xf0, 0x1e, 0xb8, 0x5b, 0x3c, 0x84, 0x94, 0x5e, 0x06, 0xd0, 0xb2, 0x0f, 0x9e, 0xaa, - 0x12, 0x3d, 0x0a, 0xb0, 0x2a, 0x55, 0x30, 0x9c, 0x0e, 0xe9, 0x3e, 0x5e, 0xdb, 0x2f, 0xf3, 0x77, - 0xd7, 0xf1, 0x9b, 0xae, 0x37, 0x3d, 0x33, 0x16, 0x07, 0x96, 0xb8, 0x0e, 0xdd, 0x18, 0x51, 0x73, - 0xb2, 0x8d, 0x84, 0xfd, 0x18, 0x12, 0xd8, 0x7b, 0x42, 0xc8, 0x5f, 0x11, 0x4d, 0xb6, 0xb2, 0x69, - 0x1c, 0x42, 0x4a, 0xea, 0xd5, 0xa4, 0x64, 0x4b, 0x6c, 0x00, 0xf0, 0xc0, 0xfc, 0xee, 0x71, 0xa7, - 0xe7, 0xf0, 0x71, 0x9c, 0xa2, 0x07, 0xdc, 0x5c, 0xa6, 0xfa, 0xf0, 0x05, 0xa3, 0x38, 0x7f, 0xf0, - 0x5b, 0xeb, 0x3b, 0x4d, 0x89, 0x52, 0x2a, 0x46, 0xd4, 0x7b, 0xa5, 0xa2, 0xe1, 0xfb, 0x9e, 0x76, - 0xc8, 0x15, 0x62, 0x58, 0x50, 0xf4, 0x69, 0x97, 0xba, 0xd5, 0xb4, 0x79, 0x2d, 0x06, 0xeb, 0xbb, - 0x2c, 0xac, 0x2e, 0xcc, 0xe4, 0xf0, 0x1f, 0x94, 0xce, 0x9f, 0x18, 0x6c, 0x61, 0xda, 0x96, 0x81, - 0x34, 0x5c, 0x4d, 0x88, 0xef, 0xc7, 0x03, 0x7b, 0xfb, 0xe3, 0x44, 0x02, 0xea, 0x06, 0x2e, 0x5d, - 0x2e, 0x6e, 0x48, 0x60, 0xe1, 0x80, 0x3e, 0xf7, 0xc0, 0x06, 0x0a, 0xd1, 0xeb, 0xb9, 0xc4, 0xff, - 0xde, 0xe2, 0xf2, 0x1c, 0x02, 0xc2, 0x75, 0x1a, 0xde, 0xd8, 0xae, 0x2e, 0x13, 0xa9, 0x3f, 0xa2, - 0x39, 0x2a, 0x8b, 0x54, 0x11, 0xb2, 0x2b, 0x4e, 0x2b, 0xf1, 0x47, 0x80, 0xdb, 0x9f, 0x8c, 0x10, - 0xac, 0x6f, 0x61, 0xb0, 0x7b, 0x19, 0x42, 0x3f, 0x07, 0xe5, 0x46, 0x28, 0xb8, 0x70, 0xf7, 0x5d, - 0x09, 0xa3, 0x63, 0xb2, 0x77, 0xaf, 0x59, 0x85, 0xa0, 0xae, 0x51, 0xd8, 0x24, 0x3f, 0xa7, 0xc8, - 0xab, 0x08, 0x7f, 0xc6, 0x02, 0x17, 0xc0, 0x9f, 0xc4, 0x12, 0x0c, 0x45, 0xe6, 0xaa, 0x96, 0xbf, - 0x18, 0x4c, 0x43, 0x07, 0x1f, 0x1f, 0xc4, 0xf4, 0x77, 0x34, 0xda, 0x31, 0x20, 0x88, 0x66, 0x2b, - 0x44, 0xc5, 0x09, 0x6f, 0x1d, 0x1d, 0x2d, 0xc5, 0xff, 0xd6, 0x86, 0x7d, 0x9f, 0xc5, 0x7b, 0x45, - 0xf9, 0x49, 0x7d, 0xd9, 0x38, 0xde, 0x0d, 0x51, 0xac, 0x2a, 0x32, 0xfc, 0xf5, 0x0b, 0x1b, 0xbe, - 0x1c, 0x4b, 0x54, 0x41, 0xfb, 0xf3, 0x08, 0x21, 0x6c, 0x28, 0x45, 0x30, 0x56, 0x76, 0x1d, 0x27, - 0x50, 0x87, 0x46, 0x6c, 0x3d, 0x5b, 0x45, 0xa6, 0xaf, 0x7f, 0x91, 0x7a, 0x6d, 0x43, 0x66, 0xc2, - 0x03, 0x6a, 0x8b, 0xef, 0xca, 0x60, 0x9b, 0x13, 0x8d, 0x29, 0x9f, 0xda, 0x82, 0xfa, 0x01, 0xb1, - 0xdf, 0x8f, 0x1f, 0x83, 0xc7, 0x1d, 0x63, 0x0f, 0x34, 0x9e, 0x50, 0x8c, 0x9f, 0x7a, 0xe3, 0xda, - 0xa1, 0x14, 0x36, 0x22, 0x9d, 0xf8, 0x99, 0x26, 0x4d, 0xac, 0x41, 0x50, 0xd5, 0x05, 0x7b, 0x3a, - 0x6f, 0xed, 0xfc, 0x75, 0x6b, 0x4f, 0x2d, 0x60, 0x8a, 0x89, 0x76, 0x7d, 0x9a, 0xf0, 0x89, 0x6e, - 0x90, 0x7d, 0x1a, 0xda, 0xde, 0xf3, 0x34, 0x5c, 0x0d, 0x81, 0x28, 0x3c, 0xa2, 0x4f, 0xfc, 0xbb, - 0xbb, 0xdd, 0xb7, 0xb3, 0xe3, 0xbb, 0x9f, 0x1b, 0xd9, 0x66, 0x51, 0xb7, 0x82, 0x17, 0x7f, 0xa0, - 0xe8, 0x28, 0xd3, 0xca, 0xa6, 0xf1, 0x53, 0x2f, 0x16, 0x4e, 0xe4, 0x05, 0xbb, 0x3b, 0x0d, 0xe3, - 0x98, 0x5d, 0x6e, 0x89, 0xd8, 0x25, 0xeb, 0xc6, 0xd8, 0xba, 0x51, 0x90, 0xa1, 0x14, 0xc6, 0xa3, - 0x18, 0xb4, 0x8a, 0xa7, 0x18, 0x1a, 0x01, 0xac, 0xcd, 0xc0, 0x80, 0x48, 0xea, 0x72, 0xa5, 0xe3, - 0xe3, 0x7a, 0xdc, 0x57, 0x65, 0xcd, 0xb7, 0x87, 0x39, 0xe6, 0xc3, 0x9e, 0x31, 0x7b, 0x45, 0xd8, - 0x47, 0x5c, 0x05, 0xba, 0xe8, 0xf8, 0x82, 0x24, 0x5a, 0x85, 0x27, 0xb8, 0x15, 0x84, 0x8d, 0x78, - 0x62, 0xb6, 0x64, 0x95, 0xac, 0x10, 0x33, 0x8f, 0x11, 0x22, 0xf2, 0xff, 0x04, 0x3e, 0x9e, 0x2a, - 0x10, 0x58, 0xa9, 0x10, 0x57, 0x92, 0x6f, 0xcd, 0x9a, 0x96, 0x61, 0x83, 0x67, 0x08, 0x8f, 0x70, - 0xed, 0xc6, 0xa6, 0x7c, 0x64, 0xff, 0x50, 0xfa, 0x52, 0x0b, 0xde, 0x94, 0xc8, 0x2c, 0xc4, 0xd6, - 0x7d, 0x8f, 0x0f, 0xd5, 0x2f, 0x0d, 0x98, 0x33, 0x7c, 0x6c, 0xbe, 0x10, 0xa4, 0xe5, 0xdc, 0x99, - 0xa4, 0x67, 0xef, 0x5f, 0xb3, 0x5b, 0xc1, 0x1c, 0xe2, 0x3c, 0x13, 0x1a, 0x48, 0xb2, 0x9c, 0xef, - 0x5a, 0x2f, 0xfe, 0xce, 0xdd, 0x9e, 0x2a, 0xea, 0x0d, 0xb9, 0xfa, 0xf3, 0xa6, 0xef, 0xb2, 0x9d, - 0xe8, 0x5d, 0xa4, 0x10, 0xdd, 0x6a, 0x68, 0x06, 0x3f, 0xc6, 0x16, 0x94, 0x17, 0x9f, 0xcb, 0x4b, - 0x08, 0xc4, 0x86, 0xb2, 0x07, 0x13, 0xcd, 0xdb, 0xb2, 0x57, 0xd5, 0x6b, 0xfe, 0x82, 0x7d, 0x82, - 0x0d, 0x1f, 0x6d, 0xc9, 0x67, 0xb2, 0xd2, 0xa1, 0x67, 0x91, 0x4f, 0x38, 0xed, 0xf9, 0x49, 0x1f, - 0x2c, 0x02, 0x35, 0xf5, 0x81, 0x65, 0xec, 0xc3, 0xbc, 0x6a, 0xb6, 0x31, 0x3c, 0x7e, 0x1a, 0xd4, - 0x8e, 0x27, 0xf9, 0x62, 0xf9, 0x42, 0x11, 0xb5, 0x1b, 0x45, 0x9b, 0xac, 0xb4, 0x74, 0x3c, 0x6e, - 0x68, 0x32, 0x30, 0x75, 0xbe, 0x6d, 0xac, 0x0d, 0xa8, 0xa0, 0x7d, 0x47, 0xa6, 0xef, 0x4e, 0x43, - 0x6b, 0x9a, 0x30, 0x97, 0x8a, 0x8b, 0x82, 0xa3, 0x95, 0x15, 0x36, 0x2c, 0xf7, 0xd6, 0xa3, 0x7f, - 0x73, 0x13, 0x11, 0x99, 0xa5, 0xf3, 0x03, 0xdc, 0xbc, 0xc9, 0xfb, 0x10, 0xc2, 0x3d, 0xee, 0xb9, - 0x78, 0xff, 0xc8, 0xf3, 0x0d, 0x38, 0x9f, 0x74, 0xce, 0xec, 0xb7, 0xae, 0x63, 0xe3, 0x34, 0x24, - 0xb7, 0x83, 0xf1, 0x06, 0x01, 0x1f, 0x66, 0x6b, 0xbf, 0x2d, 0xab, 0xc8, 0xea, 0x10, 0x57, 0xa1, - 0x7c, 0xf2, 0x4a, 0x3f, 0x57, 0xca, 0x13, 0x86, 0xbf, 0xba, 0x27, 0xe5, 0x46, 0x62, 0x81, 0xc8, - 0x04, 0x1e, 0x18, 0x20, 0xb3, 0xd5, 0xc3, 0x99, 0xcd, 0x4d, 0x22, 0x2f, 0x29, 0xf0, 0xb9, 0x94, - 0x86, 0x5a, 0xe6, 0xe2, 0x16, 0x86, 0x32, 0x61, 0xb0, 0xcd, 0xca, 0xaf, 0x07, 0xec, 0xd0, 0xbc, - 0xaf, 0xb8, 0x3c, 0xf0, 0x51, 0xc1, 0x6c, 0x7a, 0x63, 0x83, 0x6b, 0x3a, 0xff, 0x47, 0x95, 0x51, - 0x10, 0x99, 0x52, 0x5f, 0x35, 0x5e, 0x46, 0x84, 0xbd, 0x34, 0xec, 0x12, 0x88, 0xc9, 0xdc, 0xc2, - 0xd1, 0x1c, 0x82, 0x6d, 0xf1, 0xdf, 0x37, 0xe6, 0xf0, 0x8f, 0x6c, 0xe8, 0x81, 0x7d, 0xbd, 0xc3, - 0x20, 0xb9, 0xa2, 0x74, 0xc6, 0x45, 0xc6, 0x7d, 0xf2, 0x99, 0xfe, 0xf9, 0x28, 0x7f, 0x09, 0xee, - 0xac, 0x67, 0x68, 0x72, 0xa1, 0x26, 0xb1, 0xd3, 0x92, 0x2c, 0x4c, 0x2a, 0x0e, 0xc9, 0xb6, 0xd4, - 0xfb, 0x59, 0x61, 0x63, 0xd1, 0xc4, 0x17, 0x08, 0x8d, 0x94, 0xbc, 0x3d, 0xbe, 0x5e, 0xae, 0x29, - 0x51, 0xff, 0xa7, 0x65, 0x9d, 0xf6, 0xae, 0x35, 0xed, 0x6b, 0x05, 0x55, 0x93, 0x3f, 0x3e, 0xd6, - 0x25, 0x9b, 0xd9, 0x3e, 0xf8, 0x6f, 0x60, 0x88, 0x0c, 0x4e, 0x35, 0x7b, 0x5c, 0x67, 0x7d, 0x93, - 0xa6, 0x95, 0x1a, 0x42, 0xe1, 0xe1, 0xef, 0x91, 0x14, 0xd7, 0xb7, 0xb7, 0x0c, 0xa4, 0x2d, 0xda, - 0x6a, 0xc1, 0x77, 0x1e, 0x25, 0xc1, 0xa5, 0x78, 0x4c, 0xa8, 0x6f, 0xd8, 0xde, 0x04, 0x1c, 0x09, - 0xdf, 0x49, 0xf1, 0x79, 0x6a, 0x58, 0x2b, 0x45, 0x72, 0x31, 0x30, 0x7f, 0xbc, 0x67, 0xe5, 0xe7, - 0xc5, 0xcd, 0xfe, 0xc0, 0xb0, 0x21, 0x50, 0x8e, 0x4f, 0xc5, 0xf8, 0x21, 0xf7, 0x34, 0x90, 0xbc, - 0xc8, 0x7f, 0x14, 0xf1, 0x2e, 0x5c, 0xd1, 0x7b, 0x18, 0x18, 0x5b, 0x4a, 0x6b, 0x68, 0x02, 0x12, - 0x17, 0x91, 0x4a, 0x30, 0x85, 0x18, 0x99, 0xa9, 0xb5, 0x16, 0x67, 0xe7, 0xed, 0x56, 0xd1, 0xd1, - 0x23, 0x9d, 0xdf, 0xda, 0x11, 0xc5, 0x0a, 0xfe, 0xe5, 0x8a, 0xb6, 0xe0, 0xfb, 0x66, 0xab, 0x5c, - 0xf5, 0x90, 0xdc, 0xd6, 0x45, 0x7d, 0x01, 0xd1, 0x83, 0xf5, 0xa9, 0xf0, 0xcd, 0xb2, 0x9c, 0x14, - 0xff, 0x66, 0xf1, 0x0c, 0xd4, 0x28, 0xa0, 0x7b, 0x34, 0xe3, 0xd6, 0x00, 0x91, 0xf2, 0xac, 0xa7, - 0x4e, 0x1f, 0xf3, 0xac, 0xa9, 0x6e, 0x2a, 0xa3, 0xec, 0x9b, 0x44, 0x8c, 0x74, 0x8d, 0xf8, 0x58, - 0x13, 0x1c, 0xd4, 0x96, 0xaf, 0x9b, 0xf5, 0xf0, 0xd2, 0xf5, 0x57, 0xac, 0x0b, 0x64, 0x55, 0xa1, - 0x86, 0x0e, 0x5a, 0xd0, 0x3e, 0x62, 0x26, 0xb5, 0x9e, 0x17, 0xf5, 0x1f, 0x88, 0xc1, 0x02, 0xe3, - 0x4a, 0x38, 0xde, 0x70, 0x32, 0x16, 0x6f, 0x88, 0x5d, 0x1e, 0xf4, 0x29, 0xee, 0x19, 0x41, 0x21, - 0xf5, 0x71, 0x84, 0xac, 0x37, 0x89, 0x14, 0x1f, 0x17, 0x98, 0x90, 0xb1, 0x83, 0x73, 0x24, 0x99, - 0xc1, 0x31, 0xb1, 0x3f, 0xf3, 0xa3, 0x9a, 0x07, 0xae, 0xf1, 0xbf, 0xe8, 0x8c, 0xd7, 0x8c, 0x2e, - 0xba, 0x35, 0xdf, 0xc5, 0xeb, 0x07, 0x01, 0x3c, 0x76, 0x21, 0x64, 0x81, 0xbd, 0xfb, 0x62, 0x33, - 0x22, 0xe2, 0x0f, 0x05, 0x7e, 0x15, 0x04, 0x17, 0x67, 0xe4, 0x26, 0x32, 0x52, 0x07, 0x28, 0xa6, - 0x8e, 0x88, 0x94, 0x23, 0xde, 0x54, 0x54, 0x12, 0xb5, 0x3e, 0xfd, 0x8d, 0xd4, 0x7a, 0xde, 0x58, - 0xa1, 0xb2, 0x6e, 0x08, 0xd0, 0x6d, 0xdc, 0x21, 0x1e, 0xda, 0x14, 0xa0, 0xa2, 0xf7, 0x17, 0x01, - 0xa5, 0xe0, 0xdf, 0xd7, 0x87, 0x1f, 0x59, 0x5d, 0xdb, 0x43, 0x70, 0xf5, 0xba, 0xb3, 0xb7, 0x32, - 0x62, 0x75, 0xda, 0x15, 0xb2, 0x03, 0xda, 0xc7, 0x32, 0x1f, 0x8d, 0x61, 0x11, 0xbd, 0x30, -} - -func TestAnotherMalformedDNS(t *testing.T) { - p := gopacket.NewPacket(testAnotherMalformedDNS, LinkTypeEthernet, testDecodeOptions) - if errLayer := p.ErrorLayer(); errLayer == nil { - t.Error("No error layer on invalid DNS name") - } else if err := errLayer.Error(); !strings.Contains(err.Error(), "offset too high") { - t.Errorf("unexpected error message: %v", err) - } -} - -// testMalformedDNSAgain is the packet: -// 12:14:52.702061 IP 10.77.0.4.53 > 10.1.0.41.61610: 12529 updateDA [b2&3=0x5cad] [38274a] [61303q] [1718n] [14913au][|domain] -// 0x0000: 0055 22af c637 0022 55ac deac 0800 4500 .U"..7."U.....E. -// 0x0010: 0091 2dff 0000 7811 ffe2 0a4d 0004 0a01 ..-...x....M.... -// 0x0020: 0029 0035 f0aa 007d 5b53 30f1 5cad ef77 .).5...}[S0.\..w -// 0x0030: 9582 06b6 3a41 357a 8cef cdc0 a732 b800 ....:A5z.....2.. -// 0x0040: 466e 1c30 2e75 95ac c03d 1ed4 8635 2d09 Fn.0.u...=...5-. -// 0x0050: 2fee 3a82 b4f0 427e 2b6b f870 cc7f c9a1 /.:...B~+k.p.... -// 0x0060: e6f1 a761 97ec 2ff7 d248 4d95 321c 6e4e ...a../..HM.2.nN -// 0x0070: 57fa 6d3d 9ec0 fe3a 6f1e e634 4396 b494 W.m=...:o..4C... -// 0x0080: 8b7a a929 d7e1 da7c c346 ca77 4890 6bf3 .z.)...|.F.wH.k. -// 0x0090: 5ecb 7e97 c49d 3564 984f bf7c 8ac1 dd ^.~...5d.O.|... -var testMalformedDNSAgain = []byte{ - 0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x91, 0x2d, 0xff, 0x00, 0x00, 0x78, 0x11, 0xff, 0xe2, 0x0a, 0x4d, 0x00, 0x04, 0x0a, 0x01, - 0x00, 0x29, 0x00, 0x35, 0xf0, 0xaa, 0x00, 0x7d, 0x5b, 0x53, 0x30, 0xf1, 0x5c, 0xad, 0xef, 0x77, - 0x95, 0x82, 0x06, 0xb6, 0x3a, 0x41, 0x35, 0x7a, 0x8c, 0xef, 0xcd, 0xc0, 0xa7, 0x32, 0xb8, 0x00, - 0x46, 0x6e, 0x1c, 0x30, 0x2e, 0x75, 0x95, 0xac, 0xc0, 0x3d, 0x1e, 0xd4, 0x86, 0x35, 0x2d, 0x09, - 0x2f, 0xee, 0x3a, 0x82, 0xb4, 0xf0, 0x42, 0x7e, 0x2b, 0x6b, 0xf8, 0x70, 0xcc, 0x7f, 0xc9, 0xa1, - 0xe6, 0xf1, 0xa7, 0x61, 0x97, 0xec, 0x2f, 0xf7, 0xd2, 0x48, 0x4d, 0x95, 0x32, 0x1c, 0x6e, 0x4e, - 0x57, 0xfa, 0x6d, 0x3d, 0x9e, 0xc0, 0xfe, 0x3a, 0x6f, 0x1e, 0xe6, 0x34, 0x43, 0x96, 0xb4, 0x94, - 0x8b, 0x7a, 0xa9, 0x29, 0xd7, 0xe1, 0xda, 0x7c, 0xc3, 0x46, 0xca, 0x77, 0x48, 0x90, 0x6b, 0xf3, - 0x5e, 0xcb, 0x7e, 0x97, 0xc4, 0x9d, 0x35, 0x64, 0x98, 0x4f, 0xbf, 0x7c, 0x8a, 0xc1, 0xdd, -} - -func TestMalformedDNSAgain(t *testing.T) { - p := gopacket.NewPacket(testMalformedDNSAgain, LinkTypeEthernet, testDecodeOptions) - if errLayer := p.ErrorLayer(); errLayer == nil { - t.Error("No error layer on invalid DNS name") - } else if err := errLayer.Error(); !strings.Contains(err.Error(), "walked out of range") { - t.Errorf("unexpected error message: %v", err) - } -} - -// testMalformedDNSOhGodMakeItStop is the packet: -// 15:08:24.430906 IP 10.77.0.19.53 > 10.1.0.19.50635: 12397 zoneInit% [b2&3=0x7232] [47729a] [46283q] [60247n] [61718au][|domain] -// 0x0000: 0055 22af c637 0022 55ac deac 0800 4500 .U"..7."U.....E. -// 0x0010: 0079 c51c 4000 3511 6be4 0a4d 0013 0a01 .y..@.5.k..M.... -// 0x0020: 0013 0035 c5cb 0065 ef45 306d 7232 b4cb ...5...e.E0mr2.. -// 0x0030: ba71 eb57 f116 3994 e000 4626 0534 66cc .q.W..9...F&.4f. -// 0x0040: 7b32 24f2 eece bca7 20e2 9a2a e1ce e737 {2$........*...7 -// 0x0050: ac39 5fae 72ec c3ec 284f ca4a 171f 466d .9_.r...(O.J..Fm -// 0x0060: f6c6 84d7 e795 310f 26df 9b59 6db9 21cf ......1.&..Ym.!. -// 0x0070: 15cb 30a3 c4cf df23 805a ed1a 0584 4fc3 ..0....#.Z....O. -// 0x0080: 7fa3 3cb4 e04f e9 ..<..O. -var testMalformedDNSOhGodMakeItStop = []byte{ - 0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x79, 0xc5, 0x1c, 0x40, 0x00, 0x35, 0x11, 0x6b, 0xe4, 0x0a, 0x4d, 0x00, 0x13, 0x0a, 0x01, - 0x00, 0x13, 0x00, 0x35, 0xc5, 0xcb, 0x00, 0x65, 0xef, 0x45, 0x30, 0x6d, 0x72, 0x32, 0xb4, 0xcb, - 0xba, 0x71, 0xeb, 0x57, 0xf1, 0x16, 0x39, 0x94, 0xe0, 0x00, 0x46, 0x26, 0x05, 0x34, 0x66, 0xcc, - 0x7b, 0x32, 0x24, 0xf2, 0xee, 0xce, 0xbc, 0xa7, 0x20, 0xe2, 0x9a, 0x2a, 0xe1, 0xce, 0xe7, 0x37, - 0xac, 0x39, 0x5f, 0xae, 0x72, 0xec, 0xc3, 0xec, 0x28, 0x4f, 0xca, 0x4a, 0x17, 0x1f, 0x46, 0x6d, - 0xf6, 0xc6, 0x84, 0xd7, 0xe7, 0x95, 0x31, 0x0f, 0x26, 0xdf, 0x9b, 0x59, 0x6d, 0xb9, 0x21, 0xcf, - 0x15, 0xcb, 0x30, 0xa3, 0xc4, 0xcf, 0xdf, 0x23, 0x80, 0x5a, 0xed, 0x1a, 0x05, 0x84, 0x4f, 0xc3, - 0x7f, 0xa3, 0x3c, 0xb4, 0xe0, 0x4f, 0xe9, -} - -func TestMalformedDNSOhGodMakeItStop(t *testing.T) { - p := gopacket.NewPacket(testMalformedDNSOhGodMakeItStop, LinkTypeEthernet, testDecodeOptions) - if errLayer := p.ErrorLayer(); errLayer == nil { - t.Error("No error layer on invalid DNS name") - } else if err := errLayer.Error(); !strings.Contains(err.Error(), "offset pointer too high") { - t.Errorf("unexpected error message: %v", err) - } -} - -// testPacketDNSPanic7 is the packet: -// 07:56:25.174747 IP 10.77.0.11.53 > 10.1.0.67.55777: 41808*-| 3/7/0 TXT "google-site-verification=DC2uC-T8kD33lINhNzfo0bNBrw-vrCXs5BPF5BXY56g", TXT "v=spf1 include:spf-a.outlook.com include:spf-b.outlook.com ip4:157.55.9.128/25 include:spf.protection.outlook.com include:spf-a.hotmail.com include:_spf-ssg-b.microsoft.com include:_spf-ssg-c.microsoft.com ~all", TXT "google-site-verification=0iLWhIMhXEkeWwWfFU4ursTn-_OvoOjaA0Lr7Pg1sEM" (512) -// 0x0000: 0055 22af c637 0022 55ac deac 0800 4500 .U"..7."U.....E. -// 0x0010: 021c b5ca 4000 fa11 b46a 0a4d 000b 0a01 ....@....j.M.... -// 0x0020: 0043 0035 d9e1 0208 afd6 a350 8600 0001 .C.5.......P.... -// 0x0030: 0003 0007 0000 076f 7574 6c6f 6f6b 0363 .......outlook.c -// 0x0040: 6f6d 0000 1000 01c0 0c00 1000 0100 0001 om.............. -// 0x0050: 2c00 4544 676f 6f67 6c65 2d73 6974 652d ,.EDgoogle-site- -// 0x0060: 7665 7269 6669 6361 7469 6f6e 3d44 4332 verification=DC2 -// 0x0070: 7543 2d54 386b 4433 336c 494e 684e 7a66 uC-T8kD33lINhNzf -// 0x0080: 6f30 624e 4272 772d 7672 4358 7335 4250 o0bNBrw-vrCXs5BP -// 0x0090: 4635 4258 5935 3667 c00c 0010 0001 0000 F5BXY56g........ -// 0x00a0: 012c 00d3 d276 3d73 7066 3120 696e 636c .,...v=spf1.incl -// 0x00b0: 7564 653a 7370 662d 612e 6f75 746c 6f6f ude:spf-a.outloo -// 0x00c0: 6b2e 636f 6d20 696e 636c 7564 653a 7370 k.com.include:sp -// 0x00d0: 662d 622e 6f75 746c 6f6f 6b2e 636f 6d20 f-b.outlook.com. -// 0x00e0: 6970 343a 3135 372e 3535 2e39 2e31 3238 ip4:157.55.9.128 -// 0x00f0: 2f32 3520 696e 636c 7564 653a 7370 662e /25.include:spf. -// 0x0100: 7072 6f74 6563 7469 6f6e 2e6f 7574 6c6f protection.outlo -// 0x0110: 6f6b 2e63 6f6d 2069 6e63 6c75 6465 3a73 ok.com.include:s -// 0x0120: 7066 2d61 2e68 6f74 6d61 696c 2e63 6f6d pf-a.hotmail.com -// 0x0130: 2069 6e63 6c75 6465 3a5f 7370 662d 7373 .include:_spf-ss -// 0x0140: 672d 622e 6d69 6372 6f73 6f66 742e 636f g-b.microsoft.co -// 0x0150: 6d20 696e 636c 7564 653a 5f73 7066 2d73 m.include:_spf-s -// 0x0160: 7367 2d63 2e6d 6963 726f 736f 6674 2e63 sg-c.microsoft.c -// 0x0170: 6f6d 207e 616c 6cc0 0c00 1000 0100 0001 om.~all......... -// 0x0180: 2c00 4544 676f 6f67 6c65 2d73 6974 652d ,.EDgoogle-site- -// 0x0190: 7665 7269 6669 6361 7469 6f6e 3d30 694c verification=0iL -// 0x01a0: 5768 494d 6858 456b 6557 7757 6646 5534 WhIMhXEkeWwWfFU4 -// 0x01b0: 7572 7354 6e2d 5f4f 766f 4f6a 6141 304c ursTn-_OvoOjaA0L -// 0x01c0: 7237 5067 3173 454d c00c 0002 0001 0002 r7Pg1sEM........ -// 0x01d0: a300 000e 036e 7332 046d 7366 7403 6e65 .....ns2.msft.ne -// 0x01e0: 7400 c00c 0002 0001 0002 a300 0006 036e t..............n -// 0x01f0: 7334 c1ae c00c 0002 0001 0002 a300 0006 s4.............. -// 0x0200: 036e 7331 c1ae c00c 0002 0001 0002 a300 .ns1............ -// 0x0210: 0006 036e 7333 c1ae c00c 0002 0001 0002 ...ns3.......... -// 0x0220: a300 0015 046e 7331 610d .....ns1a. -var testPacketDNSPanic7 = []byte{ - 0x00, 0x55, 0x22, 0xaf, 0xc6, 0x37, 0x00, 0x22, 0x55, 0xac, 0xde, 0xac, 0x08, 0x00, 0x45, 0x00, - 0x02, 0x1c, 0xb5, 0xca, 0x40, 0x00, 0xfa, 0x11, 0xb4, 0x6a, 0x0a, 0x4d, 0x00, 0x0b, 0x0a, 0x01, - 0x00, 0x43, 0x00, 0x35, 0xd9, 0xe1, 0x02, 0x08, 0xaf, 0xd6, 0xa3, 0x50, 0x86, 0x00, 0x00, 0x01, - 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x07, 0x6f, 0x75, 0x74, 0x6c, 0x6f, 0x6f, 0x6b, 0x03, 0x63, - 0x6f, 0x6d, 0x00, 0x00, 0x10, 0x00, 0x01, 0xc0, 0x0c, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x2c, 0x00, 0x45, 0x44, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2d, 0x73, 0x69, 0x74, 0x65, 0x2d, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x44, 0x43, 0x32, - 0x75, 0x43, 0x2d, 0x54, 0x38, 0x6b, 0x44, 0x33, 0x33, 0x6c, 0x49, 0x4e, 0x68, 0x4e, 0x7a, 0x66, - 0x6f, 0x30, 0x62, 0x4e, 0x42, 0x72, 0x77, 0x2d, 0x76, 0x72, 0x43, 0x58, 0x73, 0x35, 0x42, 0x50, - 0x46, 0x35, 0x42, 0x58, 0x59, 0x35, 0x36, 0x67, 0xc0, 0x0c, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x2c, 0x00, 0xd3, 0xd2, 0x76, 0x3d, 0x73, 0x70, 0x66, 0x31, 0x20, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x3a, 0x73, 0x70, 0x66, 0x2d, 0x61, 0x2e, 0x6f, 0x75, 0x74, 0x6c, 0x6f, 0x6f, - 0x6b, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x73, 0x70, - 0x66, 0x2d, 0x62, 0x2e, 0x6f, 0x75, 0x74, 0x6c, 0x6f, 0x6f, 0x6b, 0x2e, 0x63, 0x6f, 0x6d, 0x20, - 0x69, 0x70, 0x34, 0x3a, 0x31, 0x35, 0x37, 0x2e, 0x35, 0x35, 0x2e, 0x39, 0x2e, 0x31, 0x32, 0x38, - 0x2f, 0x32, 0x35, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x73, 0x70, 0x66, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x75, 0x74, 0x6c, 0x6f, - 0x6f, 0x6b, 0x2e, 0x63, 0x6f, 0x6d, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x73, - 0x70, 0x66, 0x2d, 0x61, 0x2e, 0x68, 0x6f, 0x74, 0x6d, 0x61, 0x69, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, - 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x5f, 0x73, 0x70, 0x66, 0x2d, 0x73, 0x73, - 0x67, 0x2d, 0x62, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, - 0x6d, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x3a, 0x5f, 0x73, 0x70, 0x66, 0x2d, 0x73, - 0x73, 0x67, 0x2d, 0x63, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, - 0x6f, 0x6d, 0x20, 0x7e, 0x61, 0x6c, 0x6c, 0xc0, 0x0c, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x2c, 0x00, 0x45, 0x44, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2d, 0x73, 0x69, 0x74, 0x65, 0x2d, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x30, 0x69, 0x4c, - 0x57, 0x68, 0x49, 0x4d, 0x68, 0x58, 0x45, 0x6b, 0x65, 0x57, 0x77, 0x57, 0x66, 0x46, 0x55, 0x34, - 0x75, 0x72, 0x73, 0x54, 0x6e, 0x2d, 0x5f, 0x4f, 0x76, 0x6f, 0x4f, 0x6a, 0x61, 0x41, 0x30, 0x4c, - 0x72, 0x37, 0x50, 0x67, 0x31, 0x73, 0x45, 0x4d, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, - 0xa3, 0x00, 0x00, 0x0e, 0x03, 0x6e, 0x73, 0x32, 0x04, 0x6d, 0x73, 0x66, 0x74, 0x03, 0x6e, 0x65, - 0x74, 0x00, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, - 0x73, 0x34, 0xc1, 0xae, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, - 0x03, 0x6e, 0x73, 0x31, 0xc1, 0xae, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, - 0x00, 0x06, 0x03, 0x6e, 0x73, 0x33, 0xc1, 0xae, 0xc0, 0x0c, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, - 0xa3, 0x00, 0x00, 0x15, 0x04, 0x6e, 0x73, 0x31, 0x61, 0x0d, -} - -func TestPacketDNSPanic7(t *testing.T) { - p := gopacket.NewPacket(testPacketDNSPanic7, LinkTypeEthernet, testDecodeOptions) - if errLayer := p.ErrorLayer(); errLayer == nil { - t.Error("No error layer on invalid DNS name") - } else if err := errLayer.Error(); !strings.Contains(err.Error(), "resource record length exceeds data") { - t.Errorf("unexpected error message: %v", err) - } -} diff --git a/vendor/github.com/google/gopacket/layers/dot11_test.go b/vendor/github.com/google/gopacket/layers/dot11_test.go deleted file mode 100644 index b0299fc..0000000 --- a/vendor/github.com/google/gopacket/layers/dot11_test.go +++ /dev/null @@ -1,495 +0,0 @@ -// Copyright 2014, Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package layers - -import ( - "bytes" - "net" - "reflect" - "testing" - - "github.com/google/gopacket" -) - -// Generator: python layers/test_creator.py --layerType=LayerTypeRadioTap --linkType=LinkTypeIEEE80211Radio --name=Dot11%s ~/Downloads/mesh.pcap -// http://wiki.wireshark.org/SampleCaptures#Sample_Captures - -// testPacketDot11CtrlCTS is the packet: -// 09:28:41.830560 20604983us tsft short preamble 24.0 Mb/s 5240 MHz 11a -79dB signal -92dB noise antenna 1 Clear-To-Send RA:d8:a2:5e:97:61:c1 -// 0x0000: 0000 1900 6f08 0000 3768 3a01 0000 0000 ....o...7h:..... -// 0x0010: 1230 7814 4001 b1a4 01c4 0094 00d8 a25e .0x.@..........^ -// 0x0020: 9761 c136 5095 8e .a.6P.. - -var testPacketDot11CtrlCTS = []byte{ - 0x00, 0x00, 0x19, 0x00, 0x6f, 0x08, 0x00, 0x00, 0x37, 0x68, 0x3a, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x12, 0x30, 0x78, 0x14, 0x40, 0x01, 0xb1, 0xa4, 0x01, 0xc4, 0x00, 0x94, 0x00, 0xd8, 0xa2, 0x5e, - 0x97, 0x61, 0xc1, 0x36, 0x50, 0x95, 0x8e, -} - -func TestPacketDot11CtrlCTS(t *testing.T) { - p := gopacket.NewPacket(testPacketDot11CtrlCTS, LinkTypeIEEE80211Radio, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t) - - if got, ok := p.Layer(LayerTypeRadioTap).(*RadioTap); ok { - want := &RadioTap{ - BaseLayer: BaseLayer{ - Contents: []uint8{0x0, 0x0, 0x19, 0x0, 0x6f, 0x8, 0x0, 0x0, 0x37, 0x68, 0x3a, 0x1, 0x0, 0x0, 0x0, 0x0, 0x12, 0x30, 0x78, 0x14, 0x40, 0x1, 0xb1, 0xa4, 0x1}, - Payload: []uint8{0xc4, 0x0, 0x94, 0x0, 0xd8, 0xa2, 0x5e, 0x97, 0x61, 0xc1, 0x36, 0x50, 0x95, 0x8e}, - }, - Version: 0x0, - Length: 0x19, - Present: 0x86f, - TSFT: 0x13a6837, - Flags: 0x12, - Rate: 0x30, - ChannelFrequency: 0x1478, - ChannelFlags: 0x140, - FHSS: 0x0, - DBMAntennaSignal: -79, - DBMAntennaNoise: -92, - LockQuality: 0x0, - TxAttenuation: 0x0, - DBTxAttenuation: 0x0, - DBMTxPower: 0, - Antenna: 1, - DBAntennaSignal: 0x0, - DBAntennaNoise: 0x0, - } - - if !reflect.DeepEqual(got, want) { - t.Errorf("RadioTap packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want) - } - } - - if got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok { - if !got.ChecksumValid() { - t.Errorf("Dot11 packet processing failed:\nchecksum failed. got :\n%#v\n\n", got) - } - - want := &Dot11{ - BaseLayer: BaseLayer{ - Contents: []uint8{0xc4, 0x0, 0x94, 0x0, 0xd8, 0xa2, 0x5e, 0x97, 0x61, 0xc1}, - Payload: []uint8{}, - }, - Type: Dot11TypeCtrlCTS, - Proto: 0x0, - Flags: 0x0, - DurationID: 0x94, - Address1: net.HardwareAddr{0xd8, 0xa2, 0x5e, 0x97, 0x61, 0xc1}, // check - Address2: net.HardwareAddr(nil), - Address3: net.HardwareAddr(nil), - Address4: net.HardwareAddr(nil), - Checksum: 0x8e955036, - } - - if !reflect.DeepEqual(got, want) { - t.Errorf("Dot11 packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want) - } - } -} - -func BenchmarkDecodePacketDot11CtrlCTS(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketDot11CtrlCTS, LinkTypeIEEE80211Radio, gopacket.NoCopy) - } -} - -// testPacketDot11MgmtBeacon is the packet: -// 15:44:56.531833 6.0 Mb/s 2412 MHz 11g -81dB signal antenna 5 Beacon (Wi2) [6.0* 9.0 12.0* 18.0 24.0* 36.0 48.0 54.0 Mbit] ESS CH: 1 -// 0x0000: 0000 1200 2e48 0000 100c 6c09 c000 af05 .....H....l..... -// 0x0010: 0000 8000 0000 ffff ffff ffff c08a de01 ................ -// 0x0020: 11b8 c08a de01 11b8 f097 80f1 30bc 1300 ............0... -// 0x0030: 0000 6400 2104 0003 5769 3201 088c 1298 ..d.!...Wi2..... -// 0x0040: 24b0 4860 6c03 0101 0504 0001 0000 2a01 $.H`l.........*. -// 0x0050: 00dd 1800 50f2 0201 0181 0007 a400 0023 ....P..........# -// 0x0060: a400 0042 435e 0062 322f 00dd 1e00 904c ...BC^.b2/.....L -// 0x0070: 338c 011b ffff 0000 0000 0000 0000 0000 3............... -// 0x0080: 1000 0000 0000 0000 0000 002d 1a8c 011b ...........-.... -// 0x0090: ffff 0000 0000 0000 0000 0000 1000 0000 ................ -// 0x00a0: 0000 0000 0000 00dd 1a00 904c 3401 0000 ...........L4... -// 0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -// 0x00c0: 0000 003d 1601 0000 0000 0000 0000 0000 ...=............ -// 0x00d0: 0000 0000 0000 0000 0000 007f 0400 0000 ................ -// 0x00e0: 00dd 0800 1392 0100 0185 0094 0b90 15 ............... -var testPacketDot11MgmtBeacon = []byte{ - 0x00, 0x00, 0x12, 0x00, 0x2e, 0x48, 0x00, 0x00, 0x10, 0x0c, 0x6c, 0x09, 0xc0, 0x00, 0xaf, 0x05, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x8a, 0xde, 0x01, - 0x11, 0xb8, 0xc0, 0x8a, 0xde, 0x01, 0x11, 0xb8, 0xf0, 0x97, 0x80, 0xf1, 0x30, 0xbc, 0x13, 0x00, - 0x00, 0x00, 0x64, 0x00, 0x21, 0x04, 0x00, 0x03, 0x57, 0x69, 0x32, 0x01, 0x08, 0x8c, 0x12, 0x98, - 0x24, 0xb0, 0x48, 0x60, 0x6c, 0x03, 0x01, 0x01, 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x2a, 0x01, - 0x00, 0xdd, 0x18, 0x00, 0x50, 0xf2, 0x02, 0x01, 0x01, 0x81, 0x00, 0x07, 0xa4, 0x00, 0x00, 0x23, - 0xa4, 0x00, 0x00, 0x42, 0x43, 0x5e, 0x00, 0x62, 0x32, 0x2f, 0x00, 0xdd, 0x1e, 0x00, 0x90, 0x4c, - 0x33, 0x8c, 0x01, 0x1b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x1a, 0x8c, 0x01, 0x1b, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0x1a, 0x00, 0x90, 0x4c, 0x34, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3d, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x04, 0x00, 0x00, 0x00, - 0x00, 0xdd, 0x08, 0x00, 0x13, 0x92, 0x01, 0x00, 0x01, 0x85, 0x00, 0x94, 0x0b, 0x90, 0x15, -} - -func TestPacketDot11MgmtBeacon(t *testing.T) { - p := gopacket.NewPacket(testPacketDot11MgmtBeacon, LinkTypeIEEE80211Radio, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - expectedLayers := []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11MgmtBeacon} - for i := 0; i < 12; i++ { - expectedLayers = append(expectedLayers, LayerTypeDot11InformationElement) - } - checkLayers(p, expectedLayers, t) - - if p.Layer(LayerTypeDot11).(*Dot11).SequenceNumber != 2431 { - t.Error("dot11 invalid sequence number") - } - if p.Layer(LayerTypeDot11).(*Dot11).FragmentNumber != 0 { - t.Error("dot11 invalid fragment number") - } - if _, ok := p.Layer(LayerTypeDot11MgmtBeacon).(*Dot11MgmtBeacon); !ok { - t.Errorf("dot11 management beacon frame was expected") - } -} - -func BenchmarkDecodePacketDot11MgmtBeacon(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketDot11MgmtBeacon, LinkTypeIEEE80211Radio, gopacket.NoCopy) - } -} - -// testPacketDot11DataQOSData is the packet: -// 06:14:27.838634 638790765us tsft short preamble 54.0 Mb/s -51dB signal -96dB noise antenna 2 5180 MHz 11a CF +QoS ARP, Request who-has 140.180.51.68 tell 169.254.247.0, length 28 -// 0x0000: 0000 2000 6708 0400 6d2c 1326 0000 0000 ....g...m,.&.... -// 0x0010: 226c cda0 0200 0000 4001 0000 3c14 2411 "l......@...<.$. -// 0x0020: 8801 2c00 0603 7f07 a016 0019 e3d3 5352 ..,...........SR -// 0x0030: ffff ffff ffff 5064 0000 50aa aaaa 0300 ......Pd..P..... -// 0x0040: 0000 0806 0001 0800 0604 0001 0019 e3d3 ................ -// 0x0050: 5352 a9fe f700 0000 0000 0000 8cb4 3344 SR............3D -var testPacketDot11DataQOSData = []byte{ - 0x00, 0x00, 0x20, 0x00, 0x67, 0x08, 0x04, 0x00, 0x6d, 0x2c, 0x13, 0x26, 0x00, 0x00, 0x00, 0x00, - 0x22, 0x6c, 0xcd, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3c, 0x14, 0x24, 0x11, - 0x88, 0x01, 0x2c, 0x00, 0x06, 0x03, 0x7f, 0x07, 0xa0, 0x16, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x64, 0x00, 0x00, 0x50, 0xaa, 0xaa, 0xaa, 0x03, 0x00, - 0x00, 0x00, 0x08, 0x06, 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01, 0x00, 0x19, 0xe3, 0xd3, - 0x53, 0x52, 0xa9, 0xfe, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0xb4, 0x33, 0x44, -} - -func TestPacketDot11DataQOSData(t *testing.T) { - p := gopacket.NewPacket(testPacketDot11DataQOSData, LinkTypeIEEE80211Radio, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11DataQOSData, LayerTypeDot11Data, LayerTypeLLC, LayerTypeSNAP, LayerTypeARP}, t) - - if got, ok := p.Layer(LayerTypeARP).(*ARP); ok { - want := &ARP{BaseLayer: BaseLayer{ - Contents: []uint8{0x0, 0x1, 0x8, 0x0, 0x6, 0x4, 0x0, 0x1, 0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0xa9, 0xfe, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0xb4, 0x33, 0x44}, - Payload: []uint8{}, - }, - AddrType: 0x1, - Protocol: 0x800, - HwAddressSize: 0x6, - ProtAddressSize: 0x4, - Operation: 0x1, - SourceHwAddress: []uint8{0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52}, - SourceProtAddress: []uint8{0xa9, 0xfe, 0xf7, 0x0}, - DstHwAddress: []uint8{0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, - DstProtAddress: []uint8{0x8c, 0xb4, 0x33, 0x44}, - } - - if !reflect.DeepEqual(got, want) { - t.Errorf("ARP packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want) - } - } -} -func BenchmarkDecodePacketDot11DataQOSData(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketDot11DataQOSData, LinkTypeIEEE80211Radio, gopacket.NoCopy) - } -} - -// testPacketDot11MgmtAction is the packet: -// 15:54:43.236460 1.0 Mb/s 2412 MHz 11b -67dB signal antenna 5 Action (8e:3a:e3:44:ac:c6): Spectrum Management Act#4 -// 0x0000: 0000 1200 2e48 0000 1002 6c09 a000 bd05 .....H....l..... -// 0x0010: 0000 d000 0000 ffff ffff ffff 8e3a e344 .............:.D -// 0x0020: acc6 8e3a e344 acc6 001b 0004 2503 0001 ...:.D......%... -// 0x0030: 0055 39f0 33 .U9.3 -var testPacketDot11MgmtAction = []byte{ - 0x00, 0x00, 0x12, 0x00, 0x2e, 0x48, 0x00, 0x00, 0x10, 0x02, 0x6c, 0x09, 0xa0, 0x00, 0xbd, 0x05, - 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0x3a, 0xe3, 0x44, - 0xac, 0xc6, 0x8e, 0x3a, 0xe3, 0x44, 0xac, 0xc6, 0x00, 0x1b, 0x00, 0x04, 0x25, 0x03, 0x00, 0x01, - 0x00, 0x55, 0x39, 0xf0, 0x33, -} - -func TestPacketDot11MgmtAction(t *testing.T) { - p := gopacket.NewPacket(testPacketDot11MgmtAction, LinkTypeIEEE80211Radio, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11MgmtAction}, t) - if got, ok := p.Layer(LayerTypeDot11).(*Dot11); !ok { - t.Errorf("dot11 frame was not parsed") - } else if !got.ChecksumValid() { - t.Errorf("Dot11 packet processing failed: checksum failed") - } - if got, ok := p.Layer(LayerTypeDot11MgmtAction).(*Dot11MgmtAction); !ok { - t.Errorf("management action frame was not parsed") - } else if got.Contents[0] != 0 { - t.Errorf("action category was not spectrum management") - } -} - -func BenchmarkDecodePacketDot11MgmtAction(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketDot11MgmtAction, LinkTypeIEEE80211Radio, gopacket.NoCopy) - } -} - -// testPacketDot11CtrlAck is the packet: -// 06:14:27.838669 638758038us tsft short preamble 24.0 Mb/s -39dB signal -96dB noise antenna 2 5180 MHz 11a Acknowledgment RA:00:19:e3:d3:53:52 -// 0x0000: 0000 2000 6708 0400 96ac 1226 0000 0000 ....g......&.... -// 0x0010: 2230 d9a0 0200 0000 4001 0000 3c14 2411 "0......@...<.$. -// 0x0020: d400 0000 0019 e3d3 5352 46e9 7687 ........SRF.v. -var testPacketDot11CtrlAck = []byte{ - 0x00, 0x00, 0x20, 0x00, 0x67, 0x08, 0x04, 0x00, 0x96, 0xac, 0x12, 0x26, 0x00, 0x00, 0x00, 0x00, - 0x32, 0x30, 0xd9, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3c, 0x14, 0x24, 0x11, - 0xd4, 0x00, 0x00, 0x00, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0x46, 0xe9, 0x76, 0x87, -} - -func TestPacketDot11CtrlAck(t *testing.T) { - p := gopacket.NewPacket(testPacketDot11CtrlAck, LinkTypeIEEE80211Radio, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t) - - if got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok { - if !got.ChecksumValid() { - t.Errorf("Dot11 packet processing failed:\nchecksum failed. got :\n%#v\n\n", got) - } - } - - if got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok { - if !got.ChecksumValid() { - t.Errorf("Dot11 packet processing failed:\nchecksum failed. got :\n%#v\n\n", got) - } - want := &Dot11{ - BaseLayer: BaseLayer{ - Contents: []uint8{0xd4, 0x0, 0x0, 0x0, 0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52}, - Payload: []uint8{}, - }, - Type: Dot11TypeCtrlAck, - Proto: 0x0, - Flags: 0x0, - DurationID: 0x0, - Address1: net.HardwareAddr{0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52}, - Address2: net.HardwareAddr(nil), - Address3: net.HardwareAddr(nil), - Address4: net.HardwareAddr(nil), - Checksum: 0x8776e946, - } - if !reflect.DeepEqual(got, want) { - t.Errorf("Dot11 packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want) - } - } -} -func BenchmarkDecodePacketDot11CtrlAck(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketDot11CtrlAck, LinkTypeIEEE80211Radio, gopacket.NoCopy) - } -} - -// testPacketDot11DataARP is the packet: -// 06:14:11.512316 622463798us tsft short preamble 6.0 Mb/s -39dB signal -96dB noise antenna 2 5180 MHz 11a ARP, Request who-has 67.8.14.54 tell 169.254.247.0, length 28 -// 0x0000: 0000 2000 6708 0400 360b 1a25 0000 0000 ....g...6..%.... -// 0x0010: 220c d9a0 0200 0000 4001 0000 3c14 2411 ".......@...<.$. -// 0x0020: 0802 0000 ffff ffff ffff 0603 7f07 a016 ................ -// 0x0030: 0019 e3d3 5352 e07f aaaa 0300 0000 0806 ....SR.......... -// 0x0040: 0001 0800 0604 0001 0019 e3d3 5352 a9fe ............SR.. -// 0x0050: f700 0000 0000 0000 4308 0e36 ........C..6 -var testPacketDot11DataARP = []byte{ - 0x00, 0x00, 0x20, 0x00, 0x67, 0x08, 0x04, 0x00, 0x36, 0x0b, 0x1a, 0x25, 0x00, 0x00, 0x00, 0x00, - 0x22, 0x0c, 0xd9, 0xa0, 0x02, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3c, 0x14, 0x24, 0x11, - 0x08, 0x02, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, 0x03, 0x7f, 0x07, 0xa0, 0x16, - 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0xe0, 0x7f, 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x08, 0x06, - 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0xa9, 0xfe, - 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x08, 0x0e, 0x36, -} - -func TestPacketDot11DataARP(t *testing.T) { - p := gopacket.NewPacket(testPacketDot11DataARP, LinkTypeIEEE80211Radio, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11Data, LayerTypeLLC, LayerTypeSNAP, LayerTypeARP}, t) - - if got, ok := p.Layer(LayerTypeARP).(*ARP); ok { - want := &ARP{ - BaseLayer: BaseLayer{ - Contents: []uint8{0x0, 0x1, 0x8, 0x0, 0x6, 0x4, 0x0, 0x1, 0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0xa9, 0xfe, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x43, 0x8, 0xe, 0x36}, - Payload: []uint8{}, - }, - AddrType: 0x1, - Protocol: 0x800, - HwAddressSize: 0x6, - ProtAddressSize: 0x4, - Operation: 0x1, - SourceHwAddress: []uint8{0x0, 0x19, 0xe3, 0xd3, 0x53, 0x52}, - SourceProtAddress: []uint8{0xa9, 0xfe, 0xf7, 0x0}, - DstHwAddress: []uint8{0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, - DstProtAddress: []uint8{0x43, 0x8, 0xe, 0x36}, - } - - if !reflect.DeepEqual(got, want) { - t.Errorf("ARP packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want) - } - } -} - -func BenchmarkDecodePacketDot11DataARP(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketDot11DataARP, LinkTypeIEEE80211Radio, gopacket.NoCopy) - } -} - -// testPacketDot11DataIP is the packet: -// 06:14:21.388622 632340487us tsft short preamble 6.0 Mb/s -40dB signal -96dB noise antenna 1 5180 MHz 11a IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:19:e3:d3:53:52, length 300 -// 0x0000: 0000 2000 6708 0400 07c0 b025 0000 0000 ....g......%.... -// 0x0010: 220c d8a0 0100 0000 4001 0000 3c14 2411 ".......@...<.$. -// 0x0020: 0802 0000 ffff ffff ffff 0603 7f07 a016 ................ -// 0x0030: 0019 e3d3 5352 4095 aaaa 0300 0000 0800 ....SR@......... -// 0x0040: 4500 0148 c514 0000 ff11 f590 0000 0000 E..H............ -// 0x0050: ffff ffff 0044 0043 0134 2b39 0101 0600 .....D.C.4+9.... -// 0x0060: 131f 8c43 003c 0000 0000 0000 0000 0000 ...C.<.......... -// 0x0070: 0000 0000 0000 0000 0019 e3d3 5352 0000 ............SR.. -// 0x0080: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -// 0x0090: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -// 0x00a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -// 0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -// 0x00c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -// 0x00d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -// 0x00e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -// 0x00f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -// 0x0100: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -// 0x0110: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -// 0x0120: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -// 0x0130: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -// 0x0140: 0000 0000 0000 0000 6382 5363 3501 0137 ........c.Sc5..7 -// 0x0150: 0a01 0306 0f77 5ffc 2c2e 2f39 0205 dc3d .....w_.,./9...= -// 0x0160: 0701 0019 e3d3 5352 3304 0076 a700 0c0b ......SR3..v.... -// 0x0170: 4d61 6369 6e74 6f73 682d 34ff 0000 0000 Macintosh-4..... -// 0x0180: 0000 0000 0000 0000 ........ -var testPacketDot11DataIP = []byte{ - 0x00, 0x00, 0x20, 0x00, 0x67, 0x08, 0x04, 0x00, 0x07, 0xc0, 0xb0, 0x25, 0x00, 0x00, 0x00, 0x00, - 0x22, 0x0c, 0xd8, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3c, 0x14, 0x24, 0x11, - 0x08, 0x02, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, 0x03, 0x7f, 0x07, 0xa0, 0x16, - 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0x40, 0x95, 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x45, 0x00, 0x01, 0x48, 0xc5, 0x14, 0x00, 0x00, 0xff, 0x11, 0xf5, 0x90, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x00, 0x44, 0x00, 0x43, 0x01, 0x34, 0x2b, 0x39, 0x01, 0x01, 0x06, 0x00, - 0x13, 0x1f, 0x8c, 0x43, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x82, 0x53, 0x63, 0x35, 0x01, 0x01, 0x37, - 0x0a, 0x01, 0x03, 0x06, 0x0f, 0x77, 0x5f, 0xfc, 0x2c, 0x2e, 0x2f, 0x39, 0x02, 0x05, 0xdc, 0x3d, - 0x07, 0x01, 0x00, 0x19, 0xe3, 0xd3, 0x53, 0x52, 0x33, 0x04, 0x00, 0x76, 0xa7, 0x00, 0x0c, 0x0b, - 0x4d, 0x61, 0x63, 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x68, 0x2d, 0x34, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -} - -func TestPacketDot11DataIP(t *testing.T) { - p := gopacket.NewPacket(testPacketDot11DataIP, LinkTypeIEEE80211Radio, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11, LayerTypeDot11Data, LayerTypeLLC, LayerTypeSNAP, LayerTypeIPv4, LayerTypeUDP, LayerTypeDHCPv4}, t) -} -func BenchmarkDecodePacketDot11DataIP(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketDot11DataIP, LinkTypeIEEE80211Radio, gopacket.NoCopy) - } -} - -// Encrypted - -/// testPacketP6196 is the packet: -// 09:28:41.830631 20605036us tsft wep -69dB signal -92dB noise antenna 1 5240 MHz 11a ht/40- 162.0 Mb/s MCS 12 40 MHz lon GI mixed BCC FEC [bit 20] CF +QoS Data IV:50a9 Pad 20 KeyID 0 -// 0x0000: 0000 3000 6b08 1c00 6c68 3a01 0000 0000 ..0.k...lh:..... -// 0x0010: 1400 7814 4001 bba4 0160 0e1a 4001 0400 ..x.@....`..@... -// 0x0020: 7814 3022 1f01 0cff b10d 0000 0400 0000 x.0"............ -// 0x0030: 8841 2c00 0025 9c42 c262 d8a2 5e97 61c1 .A,..%.B.b..^.a. -// 0x0040: 0025 9c42 c25f 10db 0000 a950 0020 0000 .%.B._.....P.... -// 0x0050: 0000 f8ab a97e 3fbd d6e1 785b 0040 5f15 .....~?...x[.@_. -// 0x0060: 7123 8711 bd1f ffb9 e5b3 84bb ec2a 0a90 q#...........*.. -// 0x0070: d0a0 1a6f 9033 1083 5179 a0da f833 3a00 ...o.3..Qy...3:. -// 0x0080: 5471 f596 539b 1823 a33c 4908 545c 266a Tq..S..#. 192.168.1.2: GREv0, length 88: IP 172.16.1.1 > 172.16.2.1: ICMP echo request, id 4724, seq 1, length 64 -// 0x0000: 3a56 6b69 595e 8e7a 12c3 a971 0800 4500 :VkiY^.z...q..E. -// 0x0010: 006c 843c 4000 402f 32d3 c0a8 0101 c0a8 .l.<@.@/2....... -// 0x0020: 0102 0000 0800 4500 0054 0488 4000 4001 ......E..T..@.@. -// 0x0030: dafe ac10 0101 ac10 0201 0800 82c4 1274 ...............t -// 0x0040: 0001 c892 a354 0000 0000 380c 0000 0000 .....T....8..... -// 0x0050: 0000 1011 1213 1415 1617 1819 1a1b 1c1d ................ -// 0x0060: 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d ...!"#$%&'()*+,- -// 0x0070: 2e2f 3031 3233 3435 3637 ./01234567 -var testPacketGRE = []byte{ - 0x3a, 0x56, 0x6b, 0x69, 0x59, 0x5e, 0x8e, 0x7a, 0x12, 0xc3, 0xa9, 0x71, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x6c, 0x84, 0x3c, 0x40, 0x00, 0x40, 0x2f, 0x32, 0xd3, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8, - 0x01, 0x02, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0x04, 0x88, 0x40, 0x00, 0x40, 0x01, - 0xda, 0xfe, 0xac, 0x10, 0x01, 0x01, 0xac, 0x10, 0x02, 0x01, 0x08, 0x00, 0x82, 0xc4, 0x12, 0x74, - 0x00, 0x01, 0xc8, 0x92, 0xa3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, - 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, - 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, -} - -func TestPacketGRE(t *testing.T) { - p := gopacket.NewPacket(testPacketGRE, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeGRE, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t) - if got, ok := p.Layer(LayerTypeGRE).(*GRE); ok { - want := &GRE{ - BaseLayer: BaseLayer{testPacketGRE[34:38], testPacketGRE[38:]}, - Protocol: EthernetTypeIPv4, - } - if !reflect.DeepEqual(want, got) { - t.Errorf("GRE layer mismatch, \nwant %#v\ngot %#v\n", want, got) - } - } -} - -func BenchmarkDecodePacketGRE(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketGRE, LinkTypeEthernet, gopacket.NoCopy) - } -} - -var testIPv4OverGRE = []gopacket.SerializableLayer{ - &Ethernet{ - SrcMAC: net.HardwareAddr{142, 122, 18, 195, 169, 113}, - DstMAC: net.HardwareAddr{58, 86, 107, 105, 89, 94}, - EthernetType: EthernetTypeIPv4, - }, - &IPv4{ - Version: 4, - SrcIP: net.IP{192, 168, 1, 1}, - DstIP: net.IP{192, 168, 1, 2}, - Protocol: IPProtocolGRE, - Flags: IPv4DontFragment, - TTL: 64, - Id: 33852, - IHL: 5, - }, - &GRE{ - Protocol: EthernetTypeIPv4, - }, - &IPv4{ - Version: 4, - SrcIP: net.IP{172, 16, 1, 1}, - DstIP: net.IP{172, 16, 2, 1}, - Protocol: IPProtocolICMPv4, - Flags: IPv4DontFragment, - TTL: 64, - IHL: 5, - Id: 1160, - }, - &ICMPv4{ - TypeCode: CreateICMPv4TypeCode(ICMPv4TypeEchoRequest, 0), - Id: 4724, - Seq: 1, - }, - gopacket.Payload{ - 0xc8, 0x92, 0xa3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - }, -} - -func TestIPv4OverGREEncode(t *testing.T) { - b := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{ - ComputeChecksums: true, - FixLengths: true, - } - if err := gopacket.SerializeLayers(b, opts, testIPv4OverGRE...); err != nil { - t.Errorf("Unable to serialize: %v", err) - } - p := gopacket.NewPacket(b.Bytes(), LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeGRE, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t) - if got, want := b.Bytes(), testPacketGRE; !reflect.DeepEqual(want, got) { - t.Errorf("Encoding mismatch, \nwant: %v\ngot %v\n", want, got) - } -} - -func BenchmarkEncodePacketGRE(b *testing.B) { - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{ - ComputeChecksums: true, - FixLengths: true, - } - for i := 0; i < b.N; i++ { - gopacket.SerializeLayers(buf, opts, testIPv4OverGRE...) - buf.Clear() - } -} - -// testPacketEthernetOverGRE is the packet: -// 11:01:38.124768 IP 192.168.1.1 > 192.168.1.2: GREv0, length 102: IP 172.16.1.1 > 172.16.1.2: ICMP echo request, id 3842, seq 1, length 64 -// 0x0000: ea6b 4cd3 5513 d6b9 d880 56ef 0800 4500 .kL.U.....V...E. -// 0x0010: 007a 0acd 4000 402f ac34 c0a8 0101 c0a8 .z..@.@/.4...... -// 0x0020: 0102 0000 6558 aa6a 36e6 c630 6e32 3ec7 ....eX.j6..0n2>. -// 0x0030: 9def 0800 4500 0054 d970 4000 4001 0715 ....E..T.p@.@... -// 0x0040: ac10 0101 ac10 0102 0800 3f15 0f02 0001 ..........?..... -// 0x0050: 82d9 b154 0000 0000 b5e6 0100 0000 0000 ...T............ -// 0x0060: 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f ................ -// 0x0070: 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f .!"#$%&'()*+,-./ -// 0x0080: 3031 3233 3435 3637 01234567 -var testPacketEthernetOverGRE = []byte{ - 0xea, 0x6b, 0x4c, 0xd3, 0x55, 0x13, 0xd6, 0xb9, 0xd8, 0x80, 0x56, 0xef, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x7a, 0x0a, 0xcd, 0x40, 0x00, 0x40, 0x2f, 0xac, 0x34, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8, - 0x01, 0x02, 0x00, 0x00, 0x65, 0x58, 0xaa, 0x6a, 0x36, 0xe6, 0xc6, 0x30, 0x6e, 0x32, 0x3e, 0xc7, - 0x9d, 0xef, 0x08, 0x00, 0x45, 0x00, 0x00, 0x54, 0xd9, 0x70, 0x40, 0x00, 0x40, 0x01, 0x07, 0x15, - 0xac, 0x10, 0x01, 0x01, 0xac, 0x10, 0x01, 0x02, 0x08, 0x00, 0x3f, 0x15, 0x0f, 0x02, 0x00, 0x01, - 0x82, 0xd9, 0xb1, 0x54, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, -} - -func TestPacketEthernetOverGRE(t *testing.T) { - p := gopacket.NewPacket(testPacketEthernetOverGRE, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeGRE, LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t) - if got, ok := p.Layer(LayerTypeGRE).(*GRE); ok { - want := &GRE{ - BaseLayer: BaseLayer{testPacketEthernetOverGRE[34:38], testPacketEthernetOverGRE[38:]}, - Protocol: EthernetTypeTransparentEthernetBridging, - } - if !reflect.DeepEqual(want, got) { - t.Errorf("GRE layer mismatch, \nwant %#v\ngot %#v\n", want, got) - } - } -} - -func BenchmarkDecodePacketEthernetOverGRE(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketEthernetOverGRE, LinkTypeEthernet, gopacket.NoCopy) - } -} - -var testEthernetOverGRE = []gopacket.SerializableLayer{ - &Ethernet{ - SrcMAC: net.HardwareAddr{0xd6, 0xb9, 0xd8, 0x80, 0x56, 0xef}, - DstMAC: net.HardwareAddr{0xea, 0x6b, 0x4c, 0xd3, 0x55, 0x13}, - EthernetType: EthernetTypeIPv4, - }, - &IPv4{ - Version: 4, - SrcIP: net.IP{192, 168, 1, 1}, - DstIP: net.IP{192, 168, 1, 2}, - Protocol: IPProtocolGRE, - Flags: IPv4DontFragment, - TTL: 64, - Id: 2765, - IHL: 5, - }, - &GRE{ - Protocol: EthernetTypeTransparentEthernetBridging, - }, - &Ethernet{ - SrcMAC: net.HardwareAddr{0x6e, 0x32, 0x3e, 0xc7, 0x9d, 0xef}, - DstMAC: net.HardwareAddr{0xaa, 0x6a, 0x36, 0xe6, 0xc6, 0x30}, - EthernetType: EthernetTypeIPv4, - }, - &IPv4{ - Version: 4, - SrcIP: net.IP{172, 16, 1, 1}, - DstIP: net.IP{172, 16, 1, 2}, - Protocol: IPProtocolICMPv4, - Flags: IPv4DontFragment, - TTL: 64, - IHL: 5, - Id: 55664, - }, - &ICMPv4{ - TypeCode: CreateICMPv4TypeCode(ICMPv4TypeEchoRequest, 0), - Id: 3842, - Seq: 1, - }, - gopacket.Payload{ - 0x82, 0xd9, 0xb1, 0x54, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - }, -} - -func TestEthernetOverGREEncode(t *testing.T) { - b := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{ - ComputeChecksums: true, - FixLengths: true, - } - if err := gopacket.SerializeLayers(b, opts, testEthernetOverGRE...); err != nil { - t.Errorf("Unable to serialize: %v", err) - } - p := gopacket.NewPacket(b.Bytes(), LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeGRE, LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t) - if got, want := b.Bytes(), testPacketEthernetOverGRE; !reflect.DeepEqual(want, got) { - t.Errorf("Encoding mismatch, \nwant: %v\ngot %v\n", want, got) - } -} - -func BenchmarkEncodePacketEthernetOverGRE(b *testing.B) { - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{ - ComputeChecksums: true, - FixLengths: true, - } - for i := 0; i < b.N; i++ { - gopacket.SerializeLayers(buf, opts, testEthernetOverGRE...) - buf.Clear() - } -} - -var testGREChecksum = map[uint16][]gopacket.SerializableLayer{ - 0x77ff: { - &Ethernet{ - SrcMAC: net.HardwareAddr{0xc2, 0x00, 0x57, 0x75, 0x00, 0x00}, - DstMAC: net.HardwareAddr{0xc2, 0x01, 0x57, 0x75, 0x00, 0x00}, - EthernetType: EthernetTypeIPv4, - }, - &IPv4{ - Version: 4, - SrcIP: net.IP{10, 0, 0, 1}, - DstIP: net.IP{10, 0, 0, 2}, - Protocol: IPProtocolGRE, - TTL: 255, - Id: 10, - IHL: 5, - }, - &GRE{ - Protocol: EthernetTypeIPv4, - ChecksumPresent: true, - }, - &IPv4{ - Version: 4, - SrcIP: net.IP{1, 1, 1, 1}, - DstIP: net.IP{2, 2, 2, 2}, - Protocol: IPProtocolICMPv4, - TTL: 255, - IHL: 5, - Id: 10, - }, - &ICMPv4{ - TypeCode: CreateICMPv4TypeCode(ICMPv4TypeEchoRequest, 0), - Id: 2, - Seq: 0, - }, - gopacket.Payload{ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xbe, 0x70, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - }, - }, - 0x8475: { - &Ethernet{ - SrcMAC: net.HardwareAddr{0xc2, 0x00, 0x57, 0x75, 0x00, 0x00}, - DstMAC: net.HardwareAddr{0xc2, 0x01, 0x57, 0x75, 0x00, 0x00}, - EthernetType: EthernetTypeIPv4, - }, - &IPv4{ - Version: 4, - SrcIP: net.IP{10, 0, 0, 1}, - DstIP: net.IP{10, 0, 0, 2}, - Protocol: IPProtocolGRE, - TTL: 255, - Id: 10, - IHL: 5, - }, - &GRE{ - Protocol: EthernetTypeIPv4, - ChecksumPresent: true, - }, - &IPv4{ - Version: 4, - SrcIP: net.IP{2, 3, 4, 5}, - DstIP: net.IP{2, 3, 4, 50}, - Protocol: IPProtocolUDP, - TTL: 1, - IHL: 5, - Flags: IPv4DontFragment, - Id: 964, - }, - &UDP{ - SrcPort: 41781, - DstPort: 33434, - }, - gopacket.Payload{ - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - }, - }, -} - -func TestGREChecksum(t *testing.T) { - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{ - ComputeChecksums: true, - FixLengths: true, - } - for cksum, packet := range testGREChecksum { - buf.Clear() - if err := setNetworkLayer(packet); err != nil { - t.Errorf("Failed to set network layer: %v", err) - continue - } - if err := gopacket.SerializeLayers(buf, opts, packet...); err != nil { - t.Errorf("Failed to serialize packet: %v", err) - continue - } - p := gopacket.NewPacket(buf.Bytes(), LinkTypeEthernet, gopacket.Default) - t.Log(p) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - continue - } - if got, ok := p.Layer(LayerTypeGRE).(*GRE); ok { - if got.Checksum != cksum { - t.Errorf("Incorrect checksum calculated for GRE packet: want %v, got %v", cksum, got.Checksum) - } - } - } -} - -func setNetworkLayer(layers []gopacket.SerializableLayer) error { - type setNetworkLayerForChecksum interface { - SetNetworkLayerForChecksum(gopacket.NetworkLayer) error - } - var l gopacket.NetworkLayer - for _, layer := range layers { - if n, ok := layer.(gopacket.NetworkLayer); ok { - l = n - } - if s, ok := layer.(setNetworkLayerForChecksum); ok { - if l == nil { - return fmt.Errorf("no enclosing network layer found before: %v", s) - } - if err := s.SetNetworkLayerForChecksum(l); err != nil { - return fmt.Errorf("failed to set network layer(%v) on layer(%v): %v", l, s, err) - } - } - } - return nil -} diff --git a/vendor/github.com/google/gopacket/layers/icmp6_test.go b/vendor/github.com/google/gopacket/layers/icmp6_test.go deleted file mode 100644 index 4a6d248..0000000 --- a/vendor/github.com/google/gopacket/layers/icmp6_test.go +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2012, Google, Inc. All rights reserved. -// Copyright 2009-2011 Andreas Krennmair. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package layers - -import ( - "github.com/google/gopacket" - "net" - "reflect" - "testing" -) - -// testPacketICMPv6 is the packet: -// 10:48:30.088384 IP6 2620:0:1005:0:26be:5ff:fe27:b17 > fe80::21f:caff:feb3:7640: ICMP6, neighbor advertisement, tgt is 2620:0:1005:0:26be:5ff:fe27:b17, length 24 -// 0x0000: 001f cab3 7640 24be 0527 0b17 86dd 6000 ....v@$..'....`. -// 0x0010: 0000 0018 3aff 2620 0000 1005 0000 26be ....:.&.......&. -// 0x0020: 05ff fe27 0b17 fe80 0000 0000 0000 021f ...'............ -// 0x0030: caff feb3 7640 8800 1ed6 4000 0000 2620 ....v@....@...&. -// 0x0040: 0000 1005 0000 26be 05ff fe27 0b17 ......&....'.. -var testPacketICMPv6 = []byte{ - 0x00, 0x1f, 0xca, 0xb3, 0x76, 0x40, 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x86, 0xdd, 0x60, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x3a, 0xff, 0x26, 0x20, 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xbe, - 0x05, 0xff, 0xfe, 0x27, 0x0b, 0x17, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1f, - 0xca, 0xff, 0xfe, 0xb3, 0x76, 0x40, 0x88, 0x00, 0x1e, 0xd6, 0x40, 0x00, 0x00, 0x00, 0x26, 0x20, - 0x00, 0x00, 0x10, 0x05, 0x00, 0x00, 0x26, 0xbe, 0x05, 0xff, 0xfe, 0x27, 0x0b, 0x17, -} - -func TestPacketICMPv6(t *testing.T) { - p := gopacket.NewPacket(testPacketICMPv6, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeICMPv6, gopacket.LayerTypePayload}, t) - if got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok { - want := &IPv6{ - BaseLayer: BaseLayer{ - Contents: []byte{0x60, 0x0, 0x0, 0x0, 0x0, 0x18, - 0x3a, 0xff, 0x26, 0x20, 0x0, 0x0, 0x10, 0x5, 0x0, 0x0, 0x26, 0xbe, 0x5, - 0xff, 0xfe, 0x27, 0xb, 0x17, 0xfe, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x2, 0x1f, 0xca, 0xff, 0xfe, 0xb3, 0x76, 0x40}, - Payload: []byte{0x88, 0x0, 0x1e, 0xd6, 0x40, 0x0, 0x0, 0x0, 0x26, 0x20, - 0x0, 0x0, 0x10, 0x5, 0x0, 0x0, 0x26, 0xbe, 0x5, 0xff, 0xfe, 0x27, 0xb, - 0x17}, - }, - Version: 6, - TrafficClass: 0, - FlowLabel: 0, - Length: 24, - NextHeader: IPProtocolICMPv6, - HopLimit: 255, - SrcIP: net.IP{0x26, 0x20, 0x0, 0x0, 0x10, 0x5, 0x0, 0x0, 0x26, 0xbe, 0x5, 0xff, 0xfe, 0x27, 0xb, 0x17}, - DstIP: net.IP{0xfe, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x1f, 0xca, 0xff, 0xfe, 0xb3, 0x76, 0x40}, - } - if !reflect.DeepEqual(got, want) { - t.Errorf("IPv6 packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want) - } - } else { - t.Error("No IPv6 layer type found in packet") - } - if got, ok := p.Layer(LayerTypeICMPv6).(*ICMPv6); ok { - want := &ICMPv6{ - BaseLayer: BaseLayer{ - Contents: []byte{0x88, 0x0, 0x1e, 0xd6, 0x40, 0x0, 0x0, 0x0}, - Payload: []byte{0x26, 0x20, 0x0, 0x0, 0x10, - 0x5, 0x0, 0x0, 0x26, 0xbe, 0x5, 0xff, 0xfe, 0x27, 0xb, 0x17}, - }, - TypeCode: 0x8800, - Checksum: 0x1ed6, - TypeBytes: []byte{0x40, 0x0, 0x0, 0x0}, - } - if !reflect.DeepEqual(got, want) { - t.Errorf("ICMPv6 packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want) - } - if got.TypeCode.String() != "NeighborAdvertisement" { - t.Errorf("ICMPv6 type code, got %q want 'NeighborAdvertisement'", got.TypeCode.String()) - } - } else { - t.Error("No ICMPv6 layer type found in packet") - } -} diff --git a/vendor/github.com/google/gopacket/layers/igmp_test.go b/vendor/github.com/google/gopacket/layers/igmp_test.go deleted file mode 100644 index 923356d..0000000 --- a/vendor/github.com/google/gopacket/layers/igmp_test.go +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright 2016, Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package layers - -import ( - "testing" - - "github.com/google/gopacket" -) - -// igmpv1MembershipReportPacket is the packet: -// 02:45:36.033916 IP 10.60.0.132 > 224.0.1.60: igmp v1 report 224.0.1.60 -// 0x0000: 0100 5e00 013c 0030 c1bf 5755 0800 4500 ..^..<.0..WU..E. -// 0x0010: 001c 6a7f 0000 0102 6365 0a3c 0084 e000 ..j.....ce.<.... -// 0x0020: 013c 1200 0cc3 e000 013c 0000 0000 0000 .<.......<...... -// 0x0030: ffff ffff ffff 0452 0000 0000 .......R.... -var igmpv1MembershipReportPacket = []byte{ - 0x01, 0x00, 0x5e, 0x00, 0x01, 0x3c, 0x00, 0x30, 0xc1, 0xbf, 0x57, 0x55, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x1c, 0x6a, 0x7f, 0x00, 0x00, 0x01, 0x02, 0x63, 0x65, 0x0a, 0x3c, 0x00, 0x84, 0xe0, 0x00, - 0x01, 0x3c, 0x12, 0x00, 0x0c, 0xc3, 0xe0, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x52, 0x00, 0x00, 0x00, 0x00, -} - -func TestIGMPv1MembershipReportPacket(t *testing.T) { - p := gopacket.NewPacket(igmpv1MembershipReportPacket, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t) - - igmp := p.Layer(LayerTypeIGMP).(*IGMPv1or2) - if igmp.Type != IGMPMembershipReportV1 { - t.Fatal("Invalid IGMP type") - } -} - -func BenchmarkDecodeigmpv1MembershipReportPacket(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(igmpv1MembershipReportPacket, LinkTypeEthernet, gopacket.NoCopy) - } -} - -// igmpv2MembershipQueryPacket is the packet: -// 02:45:28.071636 IP 10.60.0.189 > 224.0.0.1: igmp query v2 -// 0x0000: 0100 5e00 0001 0001 636f c800 0800 45c0 ..^.....co....E. -// 0x0010: 001c 0153 0000 0102 ccd3 0a3c 00bd e000 ...S.......<.... -// 0x0020: 0001 1164 ee9b 0000 0000 0000 0000 0000 ...d............ -// 0x0030: 0000 0000 0000 0000 0000 0000 ............ -var igmpv2MembershipQueryPacket = []byte{ - 0x01, 0x00, 0x5e, 0x00, 0x00, 0x01, 0x00, 0x01, 0x63, 0x6f, 0xc8, 0x00, 0x08, 0x00, 0x45, 0xc0, - 0x00, 0x1c, 0x01, 0x53, 0x00, 0x00, 0x01, 0x02, 0xcc, 0xd3, 0x0a, 0x3c, 0x00, 0xbd, 0xe0, 0x00, - 0x00, 0x01, 0x11, 0x64, 0xee, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -} - -func TestIGMPv2MembershipQuery(t *testing.T) { - p := gopacket.NewPacket(igmpv2MembershipQueryPacket, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t) - - igmp := p.Layer(LayerTypeIGMP).(*IGMPv1or2) - if igmp.Type != IGMPMembershipQuery { - t.Fatal("Invalid IGMP type") - } -} -func BenchmarkDecodeigmpv2MembershipQueryPacket(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(igmpv2MembershipQueryPacket, LinkTypeEthernet, gopacket.NoCopy) - } -} - -// igmpv2MembershipReportPacket is the packet: -// 02:47:32.417288 IP 10.60.5.103 > 239.255.255.253: igmp v2 report 239.255.255.253 -// 0x0000: 0100 5e7f fffd 0015 58dc d9f6 0800 4600 ..^.....X.....F. -// 0x0010: 0020 79f0 0000 0102 ab47 0a3c 0567 efff ..y......G.<.g.. -// 0x0020: fffd 9404 0000 1600 fa01 efff fffd 0000 ................ -// 0x0030: 0000 0000 0000 0000 0000 0000 ............ -var igmpv2MembershipReportPacket = []byte{ - 0x01, 0x00, 0x5e, 0x7f, 0xff, 0xfd, 0x00, 0x15, 0x58, 0xdc, 0xd9, 0xf6, 0x08, 0x00, 0x46, 0x00, - 0x00, 0x20, 0x79, 0xf0, 0x00, 0x00, 0x01, 0x02, 0xab, 0x47, 0x0a, 0x3c, 0x05, 0x67, 0xef, 0xff, - 0xff, 0xfd, 0x94, 0x04, 0x00, 0x00, 0x16, 0x00, 0xfa, 0x01, 0xef, 0xff, 0xff, 0xfd, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -} - -func TestIGMPv2MembershipReport(t *testing.T) { - p := gopacket.NewPacket(igmpv2MembershipReportPacket, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t) - - igmp := p.Layer(LayerTypeIGMP).(*IGMPv1or2) - if igmp.Type != IGMPMembershipReportV2 { - t.Fatal("Invalid IGMP type") - } -} -func BenchmarkDecodeigmpv2MembershipReportPacket(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(igmpv2MembershipReportPacket, LinkTypeEthernet, gopacket.NoCopy) - } -} - -// igmp3v3MembershipQueryPacket is the packet: -// 10:07:30.488511 IP 192.168.1.254 > 224.0.0.1: igmp query v3 [max resp time 2.4s] -// 0x0000: 0100 5e00 0001 0026 446c 1eda 0800 46c0 ..^....&Dl....F. -// 0x0010: 0024 17f1 4000 0102 297b c0a8 01fe e000 .$..@...){...... -// 0x0020: 0001 9404 0000 1118 ecd3 0000 0000 0214 ................ -// 0x0030: 0000 0000 0000 0000 0000 0000 ............ -var igmp3v3MembershipQueryPacket = []byte{ - 0x01, 0x00, 0x5e, 0x00, 0x00, 0x01, 0x00, 0x26, 0x44, 0x6c, 0x1e, 0xda, 0x08, 0x00, 0x46, 0xc0, - 0x00, 0x24, 0x17, 0xf1, 0x40, 0x00, 0x01, 0x02, 0x29, 0x7b, 0xc0, 0xa8, 0x01, 0xfe, 0xe0, 0x00, - 0x00, 0x01, 0x94, 0x04, 0x00, 0x00, 0x11, 0x18, 0xec, 0xd3, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -} - -func TestIGMPv3MembershipQuery(t *testing.T) { - p := gopacket.NewPacket(igmp3v3MembershipQueryPacket, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t) - - igmp := p.Layer(LayerTypeIGMP).(*IGMP) - if igmp.Type != IGMPMembershipQuery { - t.Fatal("Invalid IGMP type") - } -} - -func BenchmarkDecodeigmp3v3MembershipQueryPacket(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(igmp3v3MembershipQueryPacket, LinkTypeEthernet, gopacket.NoCopy) - } -} - -// igmpv3MembershipReport2Records is the packet: -// 10:07:29.756202 IP 192.168.1.66 > 224.0.0.22: igmp v3 report, 2 group record(s) -// 0x0000: 0100 5e00 0016 0025 2e51 c381 0800 4658 ..^....%.Q....FX -// 0x0010: 0030 013c 0000 0102 8133 c0a8 0142 e000 .0.<.....3...B.. -// 0x0020: 0016 9404 0000 2200 f33c 0000 0002 0200 ......"..<...... -// 0x0030: 0000 efc3 0702 0200 0000 efff fffa .............. -var igmpv3MembershipReport2Records = []byte{ - 0x01, 0x00, 0x5e, 0x00, 0x00, 0x16, 0x00, 0x25, 0x2e, 0x51, 0xc3, 0x81, 0x08, 0x00, 0x46, 0x58, - 0x00, 0x30, 0x01, 0x3c, 0x00, 0x00, 0x01, 0x02, 0x81, 0x33, 0xc0, 0xa8, 0x01, 0x42, 0xe0, 0x00, - 0x00, 0x16, 0x94, 0x04, 0x00, 0x00, 0x22, 0x00, 0xf3, 0x3c, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, - 0x00, 0x00, 0xef, 0xc3, 0x07, 0x02, 0x02, 0x00, 0x00, 0x00, 0xef, 0xff, 0xff, 0xfa, -} - -func TestIGMPv3MembershipReport2Records(t *testing.T) { - p := gopacket.NewPacket(igmpv3MembershipReport2Records, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIGMP}, t) - - igmp := p.Layer(LayerTypeIGMP).(*IGMP) - if igmp.Type != IGMPMembershipReportV3 { - t.Fatal("Invalid IGMP type") - } -} - -func BenchmarkDecodeigmpv3MembershipReport2Records(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(igmpv3MembershipReport2Records, LinkTypeEthernet, gopacket.NoCopy) - } -} diff --git a/vendor/github.com/google/gopacket/layers/ip4_test.go b/vendor/github.com/google/gopacket/layers/ip4_test.go deleted file mode 100644 index ec6b351..0000000 --- a/vendor/github.com/google/gopacket/layers/ip4_test.go +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// This file tests some of the functionality provided in the ip4.go - -package layers - -import ( - "encoding/binary" - "encoding/hex" - "net" - "testing" - - "github.com/google/gopacket" -) - -// Test the function getIPv4OptionSize when the ipv4 has no options -func TestGetIPOptLengthNoOpt(t *testing.T) { - ip := IPv4{} - length := ip.getIPv4OptionSize() - if length != 0 { - t.Fatalf("Empty option list should have 0 length. Actual %d", length) - } -} - -// Test the function getIPv4OptionSize when the ipv4 has end of list option -func TestGetIPOptLengthEndOfList(t *testing.T) { - ip := IPv4{} - ip.Options = append(ip.Options, IPv4Option{OptionType: 0, OptionLength: 1}) - length := ip.getIPv4OptionSize() - if length != 4 { - t.Fatalf("After padding, the list should have 4 length. Actual %d", length) - } -} - -// Test the function getIPv4OptionSize when the ipv4 has padding and end of list option -func TestGetIPOptLengthPaddingEndOfList(t *testing.T) { - ip := IPv4{} - ip.Options = append(ip.Options, IPv4Option{OptionType: 1, OptionLength: 1}) - ip.Options = append(ip.Options, IPv4Option{OptionType: 0, OptionLength: 1}) - length := ip.getIPv4OptionSize() - if length != 4 { - t.Fatalf("After padding, the list should have 4 length. Actual %d", length) - } -} - -// Test the function getIPv4OptionSize when the ipv4 has some non-trivial option and end of list option -func TestGetIPOptLengthOptionEndOfList(t *testing.T) { - ip := IPv4{} - someByte := make([]byte, 8) - ip.Options = append(ip.Options, IPv4Option{OptionType: 2, OptionLength: 10, OptionData: someByte}) - ip.Options = append(ip.Options, IPv4Option{OptionType: 0, OptionLength: 1}) - length := ip.getIPv4OptionSize() - if length != 12 { - t.Fatalf("The list should have 12 length. Actual %d", length) - } -} - -// Tests that the Options slice is properly reset before parsing new data -func TestIPOptResetDuringDecoding(t *testing.T) { - ip := &IPv4{ - Options: []IPv4Option{{OptionType: 42, OptionLength: 4, OptionData: make([]byte, 2)}}, - } - - ipWithoutOptions := &IPv4{ - SrcIP: net.IPv4(192, 168, 1, 1), - DstIP: net.IPv4(192, 168, 1, 1), - Protocol: IPProtocolTCP, - } - - ipBytes, err := serialize(ipWithoutOptions) - - if err != nil { - t.Fatalf("Failed to serialize ip layer: %v", err) - } - - err = ip.DecodeFromBytes(ipBytes, gopacket.NilDecodeFeedback) - - if err != nil { - t.Fatalf("Failed to deserialize ip layer: %v", err) - } - - if len(ip.Options) > 0 { - t.Fatalf("Options slice has stale data from previous packet") - } - -} - -func serialize(ip *IPv4) ([]byte, error) { - buffer := gopacket.NewSerializeBuffer() - err := ip.SerializeTo(buffer, gopacket.SerializeOptions{ - FixLengths: true, - ComputeChecksums: true, - }) - return buffer.Bytes(), err -} - -// Test the function checksum -func TestChecksum(t *testing.T) { - testData := []struct { - name string - header string - want string - }{{ - name: "sum has two carries", - header: "4540005800000000ff11ffff0aeb1d070aed8877", - want: "fffe", - }, { - name: "wikipedia case", - header: "45000073000040004011b861c0a80001c0a800c7", - want: "b861", - }} - - for _, test := range testData { - bytes, err := hex.DecodeString(test.header) - if err != nil { - t.Fatalf("Failed to Decode header: %v", err) - } - wantBytes, err := hex.DecodeString(test.want) - if err != nil { - t.Fatalf("Failed to decode want checksum: %v", err) - } - - if got, want := checksum(bytes), binary.BigEndian.Uint16(wantBytes); got != want { - t.Errorf("In test %q, got incorrect checksum: got(%x), want(%x)", test.name, got, want) - } - } -} diff --git a/vendor/github.com/google/gopacket/layers/ip6_test.go b/vendor/github.com/google/gopacket/layers/ip6_test.go deleted file mode 100644 index ab22f17..0000000 --- a/vendor/github.com/google/gopacket/layers/ip6_test.go +++ /dev/null @@ -1,430 +0,0 @@ -// Copyright 2014, Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package layers - -import ( - "bytes" - "github.com/google/gopacket" - "net" - "reflect" - "testing" -) - -func TestSerializeIPv6HeaderTLVOptions(t *testing.T) { - //RFC 2460 Appendix B - /* - Example 3 - - A Hop-by-Hop or Destination Options header containing both options X - and Y from Examples 1 and 2 would have one of the two following - formats, depending on which option appeared first: - - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Next Header | Hdr Ext Len=3 | Option Type=X |Opt Data Len=12| - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | 4-octet field | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | | - + 8-octet field + - | | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | PadN Option=1 |Opt Data Len=1 | 0 | Option Type=Y | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - |Opt Data Len=7 | 1-octet field | 2-octet field | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | 4-octet field | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | PadN Option=1 |Opt Data Len=2 | 0 | 0 | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - opt1 := &ipv6HeaderTLVOption{} - opt1.OptionType = 0x1e - opt1.OptionData = []byte{0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb} - opt1.OptionAlignment = [2]uint8{8, 2} - - opt2 := &ipv6HeaderTLVOption{} - opt2.OptionType = 0x3e - opt2.OptionData = []byte{0x11, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44} - opt2.OptionAlignment = [2]uint8{4, 3} - - l := serializeIPv6HeaderTLVOptions(nil, []*ipv6HeaderTLVOption{opt1, opt2}, true) - b := make([]byte, l) - serializeIPv6HeaderTLVOptions(b, []*ipv6HeaderTLVOption{opt1, opt2}, true) - got := b - want := []byte{0x1e, 0x0c, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x01, 0x01, 0x00, 0x3e, 0x07, 0x11, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44, 0x01, 0x02, 0x00, 0x00} - - if !bytes.Equal(got, want) { - t.Errorf("IPv6HeaderTLVOption serialize (X,Y) failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want) - } - - /* - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Next Header | Hdr Ext Len=3 | Pad1 Option=0 | Option Type=Y | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - |Opt Data Len=7 | 1-octet field | 2-octet field | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | 4-octet field | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | PadN Option=1 |Opt Data Len=4 | 0 | 0 | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | 0 | 0 | Option Type=X |Opt Data Len=12| - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | 4-octet field | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | | - + 8-octet field + - | | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - */ - - l = serializeIPv6HeaderTLVOptions(nil, []*ipv6HeaderTLVOption{opt2, opt1}, true) - b = make([]byte, l) - serializeIPv6HeaderTLVOptions(b, []*ipv6HeaderTLVOption{opt2, opt1}, true) - got = b - want = []byte{0x00, 0x3e, 0x07, 0x11, 0x22, 0x22, 0x44, 0x44, 0x44, 0x44, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb} - - if !bytes.Equal(got, want) { - t.Errorf("IPv6HeaderTLVOption serialize (Y,X) failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want) - } -} - -var testPacketIPv6HopByHop0 = []byte{ - 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, -} - -func TestPacketIPv6HopByHop0Serialize(t *testing.T) { - var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2) - var err error - - ip6 := &IPv6{} - ip6.Version = 6 - ip6.NextHeader = IPProtocolIPv6HopByHop - ip6.HopLimit = 64 - ip6.SrcIP = net.ParseIP("2001:db8::1") - ip6.DstIP = net.ParseIP("2001:db8::2") - serialize = append(serialize, ip6) - - tlv := &IPv6HopByHopOption{} - tlv.OptionType = 0x01 //PadN - tlv.OptionData = []byte{0x00, 0x00, 0x00, 0x00} - hop := &IPv6HopByHop{} - hop.Options = append(hop.Options, tlv) - hop.NextHeader = IPProtocolNoNextHeader - ip6.HopByHop = hop - - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{FixLengths: true} - err = gopacket.SerializeLayers(buf, opts, serialize...) - if err != nil { - t.Fatal(err) - } - - got := buf.Bytes() - want := testPacketIPv6HopByHop0 - if !bytes.Equal(got, want) { - t.Errorf("IPv6HopByHop serialize failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want) - } -} - -func TestPacketIPv6HopByHop0Decode(t *testing.T) { - ip6 := &IPv6{ - BaseLayer: BaseLayer{ - Contents: []byte{ - 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - }, - Payload: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00}, - }, - Version: 6, - TrafficClass: 0, - FlowLabel: 0, - Length: 8, - NextHeader: IPProtocolIPv6HopByHop, - HopLimit: 64, - SrcIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, - DstIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}, - } - - hop := &ip6.hbh - hop.ipv6ExtensionBase = ipv6ExtensionBase{ - BaseLayer: BaseLayer{ - Contents: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00}, - Payload: []byte{}, - }, - NextHeader: IPProtocolNoNextHeader, - HeaderLength: uint8(0), - ActualLength: 8, - } - opt := &IPv6HopByHopOption{ - OptionType: uint8(0x01), - OptionLength: uint8(0x04), - ActualLength: 6, - OptionData: []byte{0x00, 0x00, 0x00, 0x00}, - } - hop.Options = append(hop.Options, opt) - ip6.HopByHop = hop - - p := gopacket.NewPacket(testPacketIPv6HopByHop0, LinkTypeRaw, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6HopByHop}, t) - if got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok { - want := ip6 - want.HopByHop = got.HopByHop // avoid comparing pointers - if !reflect.DeepEqual(got, want) { - t.Errorf("IPv6 packet processing failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want) - } - } else { - t.Error("No IPv6 layer type found in packet") - } - if got, ok := p.Layer(LayerTypeIPv6HopByHop).(*IPv6HopByHop); ok { - want := hop - if !reflect.DeepEqual(got, want) { - t.Errorf("IPv6HopByHop packet processing failed:\ngot\n%#v\n\nwant:\n%#v\n\n", got, want) - } - } else { - t.Error("No IPv6HopByHop layer type found in packet") - } -} - -// testPacketIPv6Destination0 is the packet: -// 12:40:14.429409595 IP6 2001:db8::1 > 2001:db8::2: DSTOPT no next header -// 0x0000: 6000 0000 0008 3c40 2001 0db8 0000 0000 `.....<@........ -// 0x0010: 0000 0000 0000 0001 2001 0db8 0000 0000 ................ -// 0x0020: 0000 0000 0000 0002 3b00 0104 0000 0000 ........;....... -var testPacketIPv6Destination0 = []byte{ - 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3c, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, -} - -func TestPacketIPv6Destination0Serialize(t *testing.T) { - var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2) - var err error - - ip6 := &IPv6{} - ip6.Version = 6 - ip6.NextHeader = IPProtocolIPv6Destination - ip6.HopLimit = 64 - ip6.SrcIP = net.ParseIP("2001:db8::1") - ip6.DstIP = net.ParseIP("2001:db8::2") - serialize = append(serialize, ip6) - - tlv := &IPv6DestinationOption{} - tlv.OptionType = 0x01 //PadN - tlv.OptionData = []byte{0x00, 0x00, 0x00, 0x00} - dst := &IPv6Destination{} - dst.Options = append(dst.Options, tlv) - dst.NextHeader = IPProtocolNoNextHeader - serialize = append(serialize, dst) - - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{FixLengths: true} - err = gopacket.SerializeLayers(buf, opts, serialize...) - if err != nil { - t.Fatal(err) - } - - got := buf.Bytes() - want := testPacketIPv6Destination0 - if !bytes.Equal(got, want) { - t.Errorf("IPv6Destination serialize failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want) - } -} - -func TestPacketIPv6Destination0Decode(t *testing.T) { - ip6 := &IPv6{ - BaseLayer: BaseLayer{ - Contents: []byte{ - 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3c, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - }, - Payload: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00}, - }, - Version: 6, - TrafficClass: 0, - FlowLabel: 0, - Length: 8, - NextHeader: IPProtocolIPv6Destination, - HopLimit: 64, - SrcIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, - DstIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}, - } - - dst := &IPv6Destination{} - dst.BaseLayer = BaseLayer{ - Contents: []byte{0x3b, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00}, - Payload: []byte{}, - } - dst.NextHeader = IPProtocolNoNextHeader - dst.HeaderLength = uint8(0) - dst.ActualLength = 8 - opt := &IPv6DestinationOption{ - OptionType: uint8(0x01), - OptionLength: uint8(0x04), - ActualLength: 6, - OptionData: []byte{0x00, 0x00, 0x00, 0x00}, - } - dst.Options = append(dst.Options, opt) - - p := gopacket.NewPacket(testPacketIPv6Destination0, LinkTypeRaw, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6Destination}, t) - if got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok { - want := ip6 - if !reflect.DeepEqual(got, want) { - t.Errorf("IPv6 packet processing failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want) - } - } else { - t.Error("No IPv6 layer type found in packet") - } - if got, ok := p.Layer(LayerTypeIPv6Destination).(*IPv6Destination); ok { - want := dst - if !reflect.DeepEqual(got, want) { - t.Errorf("IPv6Destination packet processing failed:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want) - } - } else { - t.Error("No IPv6Destination layer type found in packet") - } -} - -var testPacketIPv6JumbogramHeader = []byte{ - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3b, 0x00, 0xc2, 0x04, 0x00, 0x01, 0x00, 0x08, -} - -func TestIPv6JumbogramSerialize(t *testing.T) { - var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2) - var err error - - ip6 := &IPv6{} - ip6.Version = 6 - ip6.NextHeader = IPProtocolNoNextHeader - ip6.HopLimit = 64 - ip6.SrcIP = net.ParseIP("2001:db8::1") - ip6.DstIP = net.ParseIP("2001:db8::2") - serialize = append(serialize, ip6) - - payload := make([]byte, ipv6MaxPayloadLength+1) - for i := range payload { - payload[i] = 0xfe - } - serialize = append(serialize, gopacket.Payload(payload)) - - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{FixLengths: true} - err = gopacket.SerializeLayers(buf, opts, serialize...) - if err != nil { - t.Fatal(err) - } - - got := buf.Bytes() - w := new(bytes.Buffer) - w.Write(testPacketIPv6JumbogramHeader) - w.Write(payload) - want := w.Bytes() - - if !bytes.Equal(got, want) { - t.Errorf("IPv6 Jumbogram serialize failed:\ngot:\n%v\n\nwant:\n%v\n\n", - gopacket.LongBytesGoString(got), gopacket.LongBytesGoString(want)) - } -} - -func TestIPv6JumbogramDecode(t *testing.T) { - payload := make([]byte, ipv6MaxPayloadLength+1) - for i := range payload { - payload[i] = 0xfe - } - - ip6 := &IPv6{ - BaseLayer: BaseLayer{ - Contents: []byte{ - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - }, - }, - Version: 6, - TrafficClass: 0, - FlowLabel: 0, - Length: 0, - NextHeader: IPProtocolIPv6HopByHop, - HopLimit: 64, - SrcIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, - DstIP: net.IP{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}, - } - buf := new(bytes.Buffer) - buf.Write([]byte{0x3b, 0x00, 0xc2, 0x04, 0x00, 0x01, 0x00, 0x08}) - buf.Write(payload) - ip6.Payload = buf.Bytes() - - hop := &ip6.hbh - hop.Contents = []byte{0x3b, 0x00, 0xc2, 0x04, 0x00, 0x01, 0x00, 0x08} - hop.Payload = payload - hop.NextHeader = IPProtocolNoNextHeader - hop.HeaderLength = uint8(0) - hop.ActualLength = 8 - opt := &IPv6HopByHopOption{} - opt.OptionType = uint8(0xc2) - opt.OptionLength = uint8(0x04) - opt.ActualLength = 6 - opt.OptionData = []byte{0x00, 0x01, 0x00, 0x08} - hop.Options = append(hop.Options, opt) - ip6.HopByHop = hop - - pkt := new(bytes.Buffer) - pkt.Write(testPacketIPv6JumbogramHeader) - pkt.Write(payload) - - p := gopacket.NewPacket(pkt.Bytes(), LinkTypeRaw, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6HopByHop, gopacket.LayerTypePayload}, t) - - if got, ok := p.Layer(LayerTypeIPv6).(*IPv6); ok { - want := ip6 - want.HopByHop = got.HopByHop // Hack, avoid comparing pointers - if !reflect.DeepEqual(got, want) { - t.Errorf("IPv6 packet processing failed:\ngot:\n%v\n\nwant:\n%v\n\n", - gopacket.LayerGoString(got), gopacket.LayerGoString(want)) - } - } else { - t.Error("No IPv6 layer type found in packet") - } - - if got, ok := p.Layer(LayerTypeIPv6HopByHop).(*IPv6HopByHop); ok { - want := hop - if !reflect.DeepEqual(got, want) { - t.Errorf("IPv6HopByHop packet processing failed:\ngot:\n%v\n\nwant:\n%v\n\n", - gopacket.LayerGoString(got), gopacket.LayerGoString(want)) - } - } else { - t.Error("No IPv6HopByHop layer type found in packet") - } - - if got, ok := p.Layer(gopacket.LayerTypePayload).(*gopacket.Payload); ok { - want := (*gopacket.Payload)(&payload) - if !reflect.DeepEqual(got, want) { - t.Errorf("Payload packet processing failed:\ngot:\n%v\n\nwant:\n%v\n\n", - gopacket.LayerGoString(got), gopacket.LayerGoString(want)) - } - } else { - t.Error("No Payload layer type found in packet") - } -} diff --git a/vendor/github.com/google/gopacket/layers/ipsec_test.go b/vendor/github.com/google/gopacket/layers/ipsec_test.go deleted file mode 100644 index 466646d..0000000 --- a/vendor/github.com/google/gopacket/layers/ipsec_test.go +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2012, Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package layers - -import ( - "github.com/google/gopacket" - "reflect" - "testing" -) - -// testPacketIPSecAHTransport is the packet: -// 20:45:10.325850 IP 192.168.1.1 > 192.168.1.2: AH(spi=0x00000101,seq=0x1): ICMP echo request, id 1560, seq 1, length 64 -// 0x0000: 7ec0 ffc6 48f1 1a0e 3c4e 3b3a 0800 4500 ~...H... 192.168.1.2: AH(spi=0x00000101,seq=0x1): IP 172.16.1.1 > 172.16.2.1: ICMP echo request, id 31322, seq 1, length 64 (ipip-proto-4) -// 0x0000: 7220 4d91 63c9 566c ed2d 73cd 0800 4500 r.M.c.Vl.-s...E. -// 0x0010: 0080 0000 4000 4033 b6f7 c0a8 0101 c0a8 ....@.@3........ -// 0x0020: 0102 0404 0000 0000 0101 0000 0001 cca4 ................ -// 0x0030: 01da 9eb4 fb75 10fe 5a59 4500 0054 a96f .....u..ZYE..T.o -// 0x0040: 4000 4001 3617 ac10 0101 ac10 0201 0800 @.@.6........... -// 0x0050: d75f 7a5a 0001 0741 3355 0000 0000 a9db ._zZ...A3U...... -// 0x0060: 0300 0000 0000 1011 1213 1415 1617 1819 ................ -// 0x0070: 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 .......!"#$%&'() -// 0x0080: 2a2b 2c2d 2e2f 3031 3233 3435 3637 *+,-./01234567 -var testPacketIPSecAHTunnel = []byte{ - 0x72, 0x20, 0x4d, 0x91, 0x63, 0xc9, 0x56, 0x6c, 0xed, 0x2d, 0x73, 0xcd, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x40, 0x33, 0xb6, 0xf7, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8, - 0x01, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0xcc, 0xa4, - 0x01, 0xda, 0x9e, 0xb4, 0xfb, 0x75, 0x10, 0xfe, 0x5a, 0x59, 0x45, 0x00, 0x00, 0x54, 0xa9, 0x6f, - 0x40, 0x00, 0x40, 0x01, 0x36, 0x17, 0xac, 0x10, 0x01, 0x01, 0xac, 0x10, 0x02, 0x01, 0x08, 0x00, - 0xd7, 0x5f, 0x7a, 0x5a, 0x00, 0x01, 0x07, 0x41, 0x33, 0x55, 0x00, 0x00, 0x00, 0x00, 0xa9, 0xdb, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, - 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, - 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, -} - -func TestPacketIPSecAHTunnel(t *testing.T) { - p := gopacket.NewPacket(testPacketIPSecAHTunnel, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIPSecAH, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t) - if got, ok := p.Layer(LayerTypeIPSecAH).(*IPSecAH); ok { - want := &IPSecAH{ - Reserved: 0x0, - SPI: 0x101, - Seq: 1, - AuthenticationData: []byte{0xcc, 0xa4, 0x01, 0xda, 0x9e, 0xb4, 0xfb, 0x75, 0x10, 0xfe, 0x5a, 0x59}, - } - want.BaseLayer = BaseLayer{testPacketIPSecAHTunnel[34:58], testPacketIPSecAHTunnel[58:]} - want.NextHeader = IPProtocolIPv4 - want.HeaderLength = 0x4 - want.ActualLength = 0x18 - if !reflect.DeepEqual(want, got) { - t.Errorf("IPSecAH layer mismatch, \nwant %#v\ngot %#v\n", want, got) - } - } -} - -func BenchmarkDecodePacketIPSecAHTunnel(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketIPSecAHTunnel, LinkTypeEthernet, gopacket.NoCopy) - } -} - -// testPacketIPSecESP is the packet: -// 04:30:37.629376 IP 190.0.0.1 > 190.0.0.2: ESP(spi=0x0000006e,seq=0x13), length 116 -// 0x0000: 0000 0000 0012 0011 434a d70a 0800 4500 ........CJ....E. -// 0x0010: 0088 0000 4000 4032 be40 be00 0001 be00 ....@.@2.@...... -// 0x0020: 0002 0000 006e 0000 0013 82f4 1077 0418 .....n.......w.. -// 0x0030: e8ce dc45 1bac 22bb daaf 2ad2 c2e8 315b ...E.."...*...1[ -// 0x0040: ce9a 39da 2aae cf43 3716 70ab 7e7c 4676 ..9.*..C7.p.~|Fv -// 0x0050: c3fc d109 c990 274d f81c 6534 9a40 a0ef ......'M..e4.@.. -// 0x0060: 46b1 7da5 05af dda8 d0ba 6e23 d1ee 1f10 F.}.......n#.... -// 0x0070: 730c 7371 03b1 445c 2f70 852f 8475 12fb s.sq..D\/p./.u.. -// 0x0080: b057 a19b a617 bae7 09ca 8836 942f 3334 .W.........6./34 -// 0x0090: 312b 96d2 a4e3 1+.... -var testPacketIPSecESP = []byte{ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x11, 0x43, 0x4a, 0xd7, 0x0a, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x88, 0x00, 0x00, 0x40, 0x00, 0x40, 0x32, 0xbe, 0x40, 0xbe, 0x00, 0x00, 0x01, 0xbe, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x13, 0x82, 0xf4, 0x10, 0x77, 0x04, 0x18, - 0xe8, 0xce, 0xdc, 0x45, 0x1b, 0xac, 0x22, 0xbb, 0xda, 0xaf, 0x2a, 0xd2, 0xc2, 0xe8, 0x31, 0x5b, - 0xce, 0x9a, 0x39, 0xda, 0x2a, 0xae, 0xcf, 0x43, 0x37, 0x16, 0x70, 0xab, 0x7e, 0x7c, 0x46, 0x76, - 0xc3, 0xfc, 0xd1, 0x09, 0xc9, 0x90, 0x27, 0x4d, 0xf8, 0x1c, 0x65, 0x34, 0x9a, 0x40, 0xa0, 0xef, - 0x46, 0xb1, 0x7d, 0xa5, 0x05, 0xaf, 0xdd, 0xa8, 0xd0, 0xba, 0x6e, 0x23, 0xd1, 0xee, 0x1f, 0x10, - 0x73, 0x0c, 0x73, 0x71, 0x03, 0xb1, 0x44, 0x5c, 0x2f, 0x70, 0x85, 0x2f, 0x84, 0x75, 0x12, 0xfb, - 0xb0, 0x57, 0xa1, 0x9b, 0xa6, 0x17, 0xba, 0xe7, 0x09, 0xca, 0x88, 0x36, 0x94, 0x2f, 0x33, 0x34, - 0x31, 0x2b, 0x96, 0xd2, 0xa4, 0xe3, -} - -func TestPacketIPSecESP(t *testing.T) { - p := gopacket.NewPacket(testPacketIPSecESP, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIPSecESP}, t) -} - -func BenchmarkDecodePacketIPSecESP(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketIPSecESP, LinkTypeEthernet, gopacket.NoCopy) - } -} diff --git a/vendor/github.com/google/gopacket/layers/mpls_test.go b/vendor/github.com/google/gopacket/layers/mpls_test.go deleted file mode 100644 index e0a2b95..0000000 --- a/vendor/github.com/google/gopacket/layers/mpls_test.go +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2016 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package layers - -import ( - "reflect" - "testing" - - "github.com/google/gopacket" -) - -// testPacketMPLS -// Ethernet II, Src: cc:15:14:64:00:00 (cc:15:14:64:00:00), Dst: cc:13:14:64:00:01 (cc:13:14:64:00:01) -// MultiProtocol Label Switching Header, Label: 17, Exp: 0, S: 0, TTL: 254 -// MultiProtocol Label Switching Header, Label: 19, Exp: 0, S: 1, TTL: 254 -// Internet Protocol Version 4, Src: 12.0.0.1, Dst: 2.2.2.2 -// Internet Control Message Protocol -// 0000 cc 13 14 64 00 01 cc 15 14 64 00 00 88 47 00 01 ...d.....d...G.. -// 0010 10 fe 00 01 31 fe 45 00 00 64 00 39 00 00 fe 01 ....1.E..d.9.... -// 0020 ac 5b 0c 00 00 01 02 02 02 02 08 00 3a 6b 00 0b .[..........:k.. -// 0030 00 02 00 00 00 00 00 3e 43 94 ab cd ab cd ab cd .......>C....... -// 0040 ab cd ab cd ab cd ab cd ab cd ab cd ab cd ab cd ................ -// 0050 ab cd ab cd ab cd ab cd ab cd ab cd ab cd ab cd ................ -// 0060 ab cd ab cd ab cd ab cd ab cd ab cd ab cd ab cd ................ -// 0070 ab cd ab cd ab cd ab cd ab cd .......... - -var testPacketMPLS = []byte{ - 0xcc, 0x13, 0x14, 0x64, 0x00, 0x01, 0xcc, 0x15, 0x14, 0x64, 0x00, 0x00, 0x88, 0x47, 0x00, 0x01, - 0x10, 0xfe, 0x00, 0x01, 0x31, 0xfe, 0x45, 0x00, 0x00, 0x64, 0x00, 0x39, 0x00, 0x00, 0xfe, 0x01, - 0xac, 0x5b, 0x0c, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x08, 0x00, 0x3a, 0x6b, 0x00, 0x0b, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x43, 0x94, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, -} - -func TestPacketMPLS(t *testing.T) { - p := gopacket.NewPacket(testPacketMPLS, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeMPLS, LayerTypeMPLS, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t) - if got, ok := p.Layers()[1].(*MPLS); ok { - want := &MPLS{ - BaseLayer: BaseLayer{ - Contents: []byte{0x00, 0x01, 0x10, 0xfe}, - Payload: []byte{0x00, 0x01, 0x31, 0xfe, 0x45, 0x00, 0x00, 0x64, 0x00, 0x39, 0x00, 0x00, 0xfe, 0x01, - 0xac, 0x5b, 0x0c, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x08, 0x00, 0x3a, 0x6b, 0x00, 0x0b, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x43, 0x94, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd}, - }, - Label: 17, - TrafficClass: 0, - StackBottom: false, - TTL: 254, - } - if !reflect.DeepEqual(want, got) { - t.Errorf("MPLS layer 1 mismatch, \nwant %#v\ngot %#v\n", want, got) - } - } - if got, ok := p.Layers()[2].(*MPLS); ok { - want := &MPLS{ - BaseLayer: BaseLayer{ - Contents: []byte{0x00, 0x01, 0x31, 0xfe}, - Payload: []byte{0x45, 0x00, 0x00, 0x64, 0x00, 0x39, 0x00, 0x00, 0xfe, 0x01, - 0xac, 0x5b, 0x0c, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x08, 0x00, 0x3a, 0x6b, 0x00, 0x0b, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x43, 0x94, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, - 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd}, - }, - Label: 19, - TrafficClass: 0, - StackBottom: true, - TTL: 254, - } - if !reflect.DeepEqual(want, got) { - t.Errorf("MPLS layer 2 mismatch, \nwant %#v\ngot %#v\n", want, got) - } - } -} - -func BenchmarkDecodePacketMPLS(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketMPLS, LinkTypeEthernet, gopacket.NoCopy) - } -} diff --git a/vendor/github.com/google/gopacket/layers/ntp_test.go b/vendor/github.com/google/gopacket/layers/ntp_test.go deleted file mode 100644 index b522216..0000000 --- a/vendor/github.com/google/gopacket/layers/ntp_test.go +++ /dev/null @@ -1,258 +0,0 @@ -// Copyright 2016 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. -// -//****************************************************************************** - -package layers - -import ( - "crypto/rand" - "github.com/google/gopacket" - "io" - "reflect" - "testing" -) - -//****************************************************************************** - -// checkNTP() uses the ntp.go code to analyse the packet bytes as an NTP UDP -// packet and generate an NTP object. It then compares the generated NTP object -// with the one provided and throws an error if there is any difference. -// The desc argument is output with any failure message to identify the test. -func checkNTP(desc string, t *testing.T, packetBytes []byte, pExpectedNTP *NTP) { - - // Analyse the packet bytes, yielding a new packet object p. - p := gopacket.NewPacket(packetBytes, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Errorf("Failed to decode packet %s: %v", desc, p.ErrorLayer().Error()) - } - - // Ensure that the packet analysis yielded the correct set of layers: - // Link Layer = Ethernet. - // Network Layer = IPv4. - // Transport Layer = UDP. - // Application Layer = NTP. - checkLayers(p, []gopacket.LayerType{ - LayerTypeEthernet, - LayerTypeIPv4, - LayerTypeUDP, - LayerTypeNTP}, t) - - // Select the Application (NTP) layer. - pResultNTP, ok := p.ApplicationLayer().(*NTP) - if !ok { - t.Error("No NTP layer type found in packet in " + desc + ".") - } - - // Compare the generated NTP object with the expected NTP object. - if !reflect.DeepEqual(pResultNTP, pExpectedNTP) { - t.Errorf("NTP packet processing failed for packet "+desc+ - ":\ngot :\n%#v\n\nwant :\n%#v\n\n", pResultNTP, pExpectedNTP) - } - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{} - err := pResultNTP.SerializeTo(buf, opts) - if err != nil { - t.Error(err) - } - if !reflect.DeepEqual(pResultNTP.BaseLayer.Contents, buf.Bytes()) { - t.Errorf("NTP packet serialization failed for packet "+desc+ - ":\ngot :\n%x\n\nwant :\n%x\n\n", buf.Bytes(), packetBytes) - } -} - -//****************************************************************************** - -func TestNTPOne(t *testing.T) { - - // This test packet is the first NTP packet in the NTP sample capture - // pcap file NTP_sync.pcap on the Wireshark sample captures page: - // - // https://wiki.wireshark.org/SampleCaptures - // https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=NTP_sync.pcap - var testPacketNTP = []byte{ - 0x00, 0x0c, 0x41, 0x82, 0xb2, 0x53, 0x00, 0xd0, - 0x59, 0x6c, 0x40, 0x4e, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x4c, 0x0a, 0x42, 0x00, 0x00, 0x80, 0x11, - 0xb5, 0xfa, 0xc0, 0xa8, 0x32, 0x32, 0x43, 0x81, - 0x44, 0x09, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x38, - 0xf8, 0xd2, 0xd9, 0x00, 0x0a, 0xfa, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x02, 0x90, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42, - 0xee, 0x92, - } - - // Assemble the NTP object that we expect to emerge from this test. - pExpectedNTP := &NTP{ - BaseLayer: BaseLayer{ - Contents: []byte{0xd9, 0x0, 0xa, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x2, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xc5, 0x2, 0x4, 0xec, 0xec, 0x42, 0xee, 0x92}, - Payload: nil, - }, - LeapIndicator: 3, - Version: 3, - Mode: 1, - Stratum: 0, - Poll: 10, - Precision: -6, - RootDelay: 0, - RootDispersion: 0x10290, - ReferenceID: 0, - ReferenceTimestamp: 0, - OriginTimestamp: 0, - ReceiveTimestamp: 0, - TransmitTimestamp: 0xc50204ecec42ee92, - ExtensionBytes: []byte{}, - } - - checkNTP("test01", t, testPacketNTP, pExpectedNTP) -} - -//****************************************************************************** - -func TestNTPTwo(t *testing.T) { - - // This test packet is packet #18 in the NTP sample capture - // pcap file NTP_sync.pcap on the Wireshark sample captures page: - // - // https://wiki.wireshark.org/SampleCaptures - // https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=NTP_sync.pcap - // - // This packet was chosen because it is the first NTP packet after the first - // NTP packet that has non-zero timestamps. - - var testPacketNTP = []byte{ - 0x00, 0xd0, 0x59, 0x6c, 0x40, 0x4e, 0x00, 0x0c, - 0x41, 0x82, 0xb2, 0x53, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x4c, 0x32, 0x46, 0x40, 0x00, 0x2f, 0x11, - 0xa8, 0x18, 0x45, 0x2c, 0x39, 0x3c, 0xc0, 0xa8, - 0x32, 0x32, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x38, - 0x09, 0x58, 0x1a, 0x03, 0x0a, 0xee, 0x00, 0x00, - 0x1b, 0xf7, 0x00, 0x00, 0x14, 0xec, 0x51, 0xae, - 0x80, 0xb7, 0xc5, 0x02, 0x03, 0x4c, 0x8d, 0x0e, - 0x66, 0xcb, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42, - 0xee, 0x92, 0xc5, 0x02, 0x04, 0xeb, 0xcf, 0x49, - 0x59, 0xe6, 0xc5, 0x02, 0x04, 0xeb, 0xcf, 0x4c, - 0x6e, 0x6e, - } - - // Assemble the NTP object that we expect to emerge from this test. - pExpectedNTP := &NTP{ - BaseLayer: BaseLayer{ - Contents: []byte{0x1a, 0x03, 0x0a, 0xee, 0x00, 0x00, - 0x1b, 0xf7, 0x00, 0x00, 0x14, 0xec, 0x51, 0xae, - 0x80, 0xb7, 0xc5, 0x02, 0x03, 0x4c, 0x8d, 0x0e, - 0x66, 0xcb, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42, - 0xee, 0x92, 0xc5, 0x02, 0x04, 0xeb, 0xcf, 0x49, - 0x59, 0xe6, 0xc5, 0x02, 0x04, 0xeb, 0xcf, 0x4c, - 0x6e, 0x6e}, - Payload: nil, - }, - LeapIndicator: 0, - Version: 3, - Mode: 2, - Stratum: 3, - Poll: 10, - Precision: -18, - RootDelay: 0x1bf7, - RootDispersion: 0x14ec, - ReferenceID: 0x51ae80b7, - ReferenceTimestamp: 0xc502034c8d0e66cb, - OriginTimestamp: 0xc50204ecec42ee92, - ReceiveTimestamp: 0xc50204ebcf4959e6, - TransmitTimestamp: 0xc50204ebcf4c6e6e, - ExtensionBytes: []byte{}, - } - - checkNTP("test02", t, testPacketNTP, pExpectedNTP) -} - -//****************************************************************************** - -func TestNTPThree(t *testing.T) { - - // This test packet is packet #19 in the NTP sample capture - // pcap file NTP_sync.pcap on the Wireshark sample captures page: - // - // https://wiki.wireshark.org/SampleCaptures - // https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=NTP_sync.pcap - - var testPacketNTP = []byte{ - 0x00, 0xd0, 0x59, 0x6c, 0x40, 0x4e, 0x00, 0x0c, - 0x41, 0x82, 0xb2, 0x53, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x4c, 0x00, 0x00, 0x40, 0x00, 0x30, 0x11, - 0x74, 0x65, 0x18, 0x7b, 0xca, 0xe6, 0xc0, 0xa8, - 0x32, 0x32, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0x38, - 0x44, 0x05, 0x1a, 0x02, 0x0a, 0xec, 0x00, 0x00, - 0x07, 0xc3, 0x00, 0x00, 0x2f, 0x80, 0xc6, 0x1e, - 0x5c, 0x02, 0xc5, 0x01, 0xf9, 0x95, 0x42, 0x50, - 0x82, 0xcf, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42, - 0xee, 0x92, 0xc5, 0x02, 0x04, 0xeb, 0xd2, 0x35, - 0x2e, 0xb5, 0xc5, 0x02, 0x04, 0xeb, 0xd2, 0x35, - 0xd6, 0x7b, - } - - // Assemble the NTP object that we expect to emerge from this test. - pExpectedNTP := &NTP{ - BaseLayer: BaseLayer{ - Contents: []byte{0x1a, 0x02, 0x0a, 0xec, 0x00, 0x00, - 0x07, 0xc3, 0x00, 0x00, 0x2f, 0x80, 0xc6, 0x1e, - 0x5c, 0x02, 0xc5, 0x01, 0xf9, 0x95, 0x42, 0x50, - 0x82, 0xcf, 0xc5, 0x02, 0x04, 0xec, 0xec, 0x42, - 0xee, 0x92, 0xc5, 0x02, 0x04, 0xeb, 0xd2, 0x35, - 0x2e, 0xb5, 0xc5, 0x02, 0x04, 0xeb, 0xd2, 0x35, - 0xd6, 0x7b}, - Payload: nil, - }, - LeapIndicator: 0, - Version: 3, - Mode: 2, - Stratum: 2, - Poll: 10, - Precision: -20, - RootDelay: 0x7c3, - RootDispersion: 0x2f80, - ReferenceID: 0xc61e5c02, - ReferenceTimestamp: 0xc501f995425082cf, - OriginTimestamp: 0xc50204ecec42ee92, - ReceiveTimestamp: 0xc50204ebd2352eb5, - TransmitTimestamp: 0xc50204ebd235d67b, - ExtensionBytes: []byte{}, - } - - checkNTP("test03", t, testPacketNTP, pExpectedNTP) -} - -//****************************************************************************** - -// TestNTPIsomorphism tests whether random data gets parsed into NTP layer and -// gets serialized back from it to the same value. -func TestNTPIsomorphism(t *testing.T) { - NTPData := make([]byte, ntpMinimumRecordSizeInBytes+7) - _, err := io.ReadFull(rand.Reader, NTPData) - if err != nil { - t.Error(err) - } - ntpLayer := &NTP{} - err = ntpLayer.DecodeFromBytes(NTPData, gopacket.NilDecodeFeedback) - if err != nil { - t.Error(err) - } - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{} - err = ntpLayer.SerializeTo(buf, opts) - if err != nil { - t.Error(err) - } - if !reflect.DeepEqual(NTPData, buf.Bytes()) { - t.Errorf("NTP packet is not isomorphic:\ngot :\n%x\n\nwant :\n%x\n\n", buf.Bytes(), NTPData) - } -} diff --git a/vendor/github.com/google/gopacket/layers/ospf_test.go b/vendor/github.com/google/gopacket/layers/ospf_test.go deleted file mode 100644 index 930bb4d..0000000 --- a/vendor/github.com/google/gopacket/layers/ospf_test.go +++ /dev/null @@ -1,559 +0,0 @@ -// Copyright 2017 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package layers - -import ( - "github.com/google/gopacket" - "reflect" - "testing" -) - -// testPacketOSPF3Hello is the packet: -// 14:43:11.663317 IP6 fe80::1 > ff02::5: OSPFv3, Hello, length 36 -// 0x0000: 3333 0000 0005 c200 1ffa 0001 86dd 6e00 33............n. -// 0x0010: 0000 0024 5901 fe80 0000 0000 0000 0000 ...$Y........... -// 0x0020: 0000 0000 0001 ff02 0000 0000 0000 0000 ................ -// 0x0030: 0000 0000 0005 0301 0024 0101 0101 0000 .........$...... -// 0x0040: 0001 fb86 0000 0000 0005 0100 0013 000a ................ -// 0x0050: 0028 0000 0000 0000 0000 .(........ -var testPacketOSPF3Hello = []byte{ - 0x33, 0x33, 0x00, 0x00, 0x00, 0x05, 0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00, - 0x00, 0x00, 0x00, 0x24, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x03, 0x01, 0x00, 0x24, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x01, 0xfb, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x13, 0x00, 0x0a, - 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -} - -func TestPacketOSPF3Hello(t *testing.T) { - p := gopacket.NewPacket(testPacketOSPF3Hello, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t) - - ospf := p.Layer(LayerTypeOSPF).(*OSPFv3) - if ospf.Version != 3 { - t.Fatal("Invalid OSPF version") - } - if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok { - want := &OSPFv3{ - OSPF: OSPF{ - Version: 3, - Type: OSPFHello, - PacketLength: 36, - RouterID: 0x1010101, - AreaID: 1, - Checksum: 0xfb86, - Content: HelloPkg{ - InterfaceID: 5, - RtrPriority: 1, - Options: 0x000013, - HelloInterval: 10, - RouterDeadInterval: 40, - DesignatedRouterID: 0, - BackupDesignatedRouterID: 0, - }, - }, - Instance: 0, - Reserved: 0, - } - if !reflect.DeepEqual(got, want) { - t.Errorf("OSPF packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want) - } - } else { - t.Error("No OSPF layer type found in packet") - } -} -func BenchmarkDecodePacketPacket0(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketOSPF3Hello, LinkTypeEthernet, gopacket.NoCopy) - } -} - -// testPacketOSPF3DBDesc is the packet: -// 14:43:51.657571 IP6 fe80::2 > fe80::1: OSPFv3, Database Description, length 28 -// 0x0000: c200 1ffa 0001 c201 1ffa 0001 86dd 6e00 ..............n. -// 0x0010: 0000 001c 5901 fe80 0000 0000 0000 0000 ....Y........... -// 0x0020: 0000 0000 0002 fe80 0000 0000 0000 0000 ................ -// 0x0030: 0000 0000 0001 0302 001c 0202 0202 0000 ................ -// 0x0040: 0001 d826 0000 0000 0013 05dc 0007 0000 ...&............ -// 0x0050: 1d46 .F -var testPacketOSPF3DBDesc = []byte{ - 0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0xc2, 0x01, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x02, 0x00, 0x1c, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, - 0x00, 0x01, 0xd8, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x05, 0xdc, 0x00, 0x07, 0x00, 0x00, - 0x1d, 0x46, -} - -func TestPacketOSPF3DBDesc(t *testing.T) { - p := gopacket.NewPacket(testPacketOSPF3DBDesc, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t) - if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok { - want := &OSPFv3{ - OSPF: OSPF{ - Version: 3, - Type: OSPFDatabaseDescription, - PacketLength: 28, - RouterID: 0x2020202, - AreaID: 1, - Checksum: 0xd826, - Content: DbDescPkg{ - Options: 0x000013, - InterfaceMTU: 1500, - Flags: 0x7, - DDSeqNumber: 7494, - }, - }, - Instance: 0, - Reserved: 0, - } - if !reflect.DeepEqual(got, want) { - t.Errorf("OSPF packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want) - } - } else { - t.Error("No OSPF layer type found in packet") - } -} -func BenchmarkDecodePacketPacket1(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketOSPF3DBDesc, LinkTypeEthernet, gopacket.NoCopy) - } -} - -// testPacketOSPF3LSRequest is the packet: -// 14:43:51.673584 IP6 fe80::2 > fe80::1: OSPFv3, LS-Request, length 100 -// 0x0000: c200 1ffa 0001 c201 1ffa 0001 86dd 6e00 ..............n. -// 0x0010: 0000 0064 5901 fe80 0000 0000 0000 0000 ...dY........... -// 0x0020: 0000 0000 0002 fe80 0000 0000 0000 0000 ................ -// 0x0030: 0000 0000 0001 0303 0064 0202 0202 0000 .........d...... -// 0x0040: 0001 2c9a 0000 0000 2001 0000 0000 0101 ..,............. -// 0x0050: 0101 0000 2003 0000 0003 0101 0101 0000 ................ -// 0x0060: 2003 0000 0002 0101 0101 0000 2003 0000 ................ -// 0x0070: 0001 0101 0101 0000 2003 0000 0000 0101 ................ -// 0x0080: 0101 0000 0008 0000 0005 0101 0101 0000 ................ -// 0x0090: 2009 0000 0000 0101 0101 .......... -var testPacketOSPF3LSRequest = []byte{ - 0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0xc2, 0x01, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00, - 0x00, 0x00, 0x00, 0x64, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x00, 0x64, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, - 0x00, 0x01, 0x2c, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - 0x01, 0x01, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, - 0x20, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x05, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, - 0x20, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, -} - -func TestPacketOSPF3LSRequest(t *testing.T) { - p := gopacket.NewPacket(testPacketOSPF3LSRequest, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t) - if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok { - want := &OSPFv3{ - OSPF: OSPF{ - Version: 3, - Type: OSPFLinkStateRequest, - PacketLength: 100, - RouterID: 0x2020202, - AreaID: 1, - Checksum: 0x2c9a, - Content: []LSReq{ - LSReq{ - LSType: 0x2001, - LSID: 0x00000000, - AdvRouter: 0x01010101, - }, - LSReq{ - LSType: 0x2003, - LSID: 0x00000003, - AdvRouter: 0x01010101, - }, - LSReq{ - LSType: 0x2003, - LSID: 0x00000002, - AdvRouter: 0x01010101, - }, - LSReq{ - LSType: 0x2003, - LSID: 0x00000001, - AdvRouter: 0x01010101, - }, - LSReq{ - LSType: 0x2003, - LSID: 0x00000000, - AdvRouter: 0x01010101, - }, - LSReq{ - LSType: 0x0008, - LSID: 0x00000005, - AdvRouter: 0x01010101, - }, - LSReq{ - LSType: 0x2009, - LSID: 0x00000000, - AdvRouter: 0x01010101, - }, - }, - }, - Instance: 0, - Reserved: 0, - } - if !reflect.DeepEqual(got, want) { - t.Errorf("OSPF packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want) - } - } else { - t.Error("No OSPF layer type found in packet") - } -} -func BenchmarkDecodePacketPacket2(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketOSPF3LSRequest, LinkTypeEthernet, gopacket.NoCopy) - } -} - -// testPacketOSPF3LSUpdate is the packet: -// 14:43:51.681554 IP6 fe80::1 > fe80::2: OSPFv3, LS-Update, length 288 -// 0x0000: c201 1ffa 0001 c200 1ffa 0001 86dd 6e00 ..............n. -// 0x0010: 0000 0120 5901 fe80 0000 0000 0000 0000 ....Y........... -// 0x0020: 0000 0000 0001 fe80 0000 0000 0000 0000 ................ -// 0x0030: 0000 0000 0002 0304 0120 0101 0101 0000 ................ -// 0x0040: 0001 e556 0000 0000 0007 0028 2001 0000 ...V.......(.... -// 0x0050: 0000 0101 0101 8000 0002 d13a 0018 0100 ...........:.... -// 0x0060: 0033 0029 2003 0000 0003 0101 0101 8000 .3.)............ -// 0x0070: 0001 6259 0024 0000 004a 4000 0000 2001 ..bY.$...J@..... -// 0x0080: 0db8 0000 0003 0029 2003 0000 0002 0101 .......)........ -// 0x0090: 0101 8000 0001 baf6 0024 0000 0054 4000 .........$...T@. -// 0x00a0: 0000 2001 0db8 0000 0004 0029 2003 0000 ...........).... -// 0x00b0: 0001 0101 0101 8000 0001 eba0 0024 0000 .............$.. -// 0x00c0: 004a 4000 0000 2001 0db8 0000 0034 0029 .J@..........4.) -// 0x00d0: 2003 0000 0000 0101 0101 8000 0001 0ebd ................ -// 0x00e0: 0024 0000 0040 4000 0000 2001 0db8 0000 .$...@@......... -// 0x00f0: 0000 0023 0008 0000 0005 0101 0101 8000 ...#............ -// 0x0100: 0002 3d08 0038 0100 0033 fe80 0000 0000 ..=..8...3...... -// 0x0110: 0000 0000 0000 0000 0001 0000 0001 4000 ..............@. -// 0x0120: 0000 2001 0db8 0000 0012 0023 2009 0000 ...........#.... -// 0x0130: 0000 0101 0101 8000 0001 e8d2 002c 0001 .............,.. -// 0x0140: 2001 0000 0000 0101 0101 4000 000a 2001 ..........@..... -// 0x0150: 0db8 0000 0012 ...... -var testPacketOSPF3LSUpdate = []byte{ - 0xc2, 0x01, 0x1f, 0xfa, 0x00, 0x01, 0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00, - 0x00, 0x00, 0x01, 0x20, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x04, 0x01, 0x20, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x01, 0xe5, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x28, 0x20, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x02, 0xd1, 0x3a, 0x00, 0x18, 0x01, 0x00, - 0x00, 0x33, 0x00, 0x29, 0x20, 0x03, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, - 0x00, 0x01, 0x62, 0x59, 0x00, 0x24, 0x00, 0x00, 0x00, 0x4a, 0x40, 0x00, 0x00, 0x00, 0x20, 0x01, - 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x29, 0x20, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x01, 0x01, 0x80, 0x00, 0x00, 0x01, 0xba, 0xf6, 0x00, 0x24, 0x00, 0x00, 0x00, 0x54, 0x40, 0x00, - 0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x29, 0x20, 0x03, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x01, 0xeb, 0xa0, 0x00, 0x24, 0x00, 0x00, - 0x00, 0x4a, 0x40, 0x00, 0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x34, 0x00, 0x29, - 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x01, 0x0e, 0xbd, - 0x00, 0x24, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x23, 0x00, 0x08, 0x00, 0x00, 0x00, 0x05, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, - 0x00, 0x02, 0x3d, 0x08, 0x00, 0x38, 0x01, 0x00, 0x00, 0x33, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, - 0x00, 0x00, 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x12, 0x00, 0x23, 0x20, 0x09, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x80, 0x00, 0x00, 0x01, 0xe8, 0xd2, 0x00, 0x2c, 0x00, 0x01, - 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x40, 0x00, 0x00, 0x0a, 0x20, 0x01, - 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x12, -} - -func TestPacketOSPF3LSUpdate(t *testing.T) { - p := gopacket.NewPacket(testPacketOSPF3LSUpdate, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t) - if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok { - want := &OSPFv3{ - OSPF: OSPF{ - Version: 3, - Type: OSPFLinkStateUpdate, - PacketLength: 288, - RouterID: 0x1010101, - AreaID: 1, - Checksum: 0xe556, - Content: LSUpdate{ - NumOfLSAs: 7, - LSAs: []LSA{ - LSA{ - LSAheader: LSAheader{ - LSAge: 40, - LSType: 0x2001, - LinkStateID: 0x00000000, - AdvRouter: 0x01010101, - LSSeqNumber: 0x80000002, - LSChecksum: 0xd13a, - Length: 24, - }, - Content: RouterLSA{ - Flags: 0x1, - Options: 0x33, - }, - }, - LSA{ - LSAheader: LSAheader{ - LSAge: 41, - LSType: 0x2003, - LinkStateID: 0x00000003, - AdvRouter: 0x01010101, - LSSeqNumber: 0x80000001, - LSChecksum: 0x6259, - Length: 36, - }, - Content: InterAreaPrefixLSA{ - Metric: 74, - PrefixLength: 64, - PrefixOptions: 0, - AddressPrefix: []byte{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x03}, - }, - }, - LSA{ - LSAheader: LSAheader{ - LSAge: 41, - LSType: 0x2003, - LinkStateID: 0x00000002, - AdvRouter: 0x01010101, - LSSeqNumber: 0x80000001, - LSChecksum: 0xbaf6, - Length: 36, - }, - Content: InterAreaPrefixLSA{ - Metric: 84, - PrefixLength: 64, - PrefixOptions: 0, - AddressPrefix: []byte{0x20, 0x1, 0xd, 0xb8, 0x0, 0x0, 0x0, 0x4}, - }, - }, - LSA{ - LSAheader: LSAheader{ - LSAge: 41, - LSType: 0x2003, - LinkStateID: 0x00000001, - AdvRouter: 0x01010101, - LSSeqNumber: 0x80000001, - LSChecksum: 0xeba0, - Length: 36, - }, - Content: InterAreaPrefixLSA{ - Metric: 74, - PrefixLength: 64, - PrefixOptions: 0, - AddressPrefix: []byte{0x20, 0x1, 0xd, 0xb8, 0x0, 0x0, 0x0, 0x34}, - }, - }, - LSA{ - LSAheader: LSAheader{ - LSAge: 41, - LSType: 0x2003, - LinkStateID: 0x00000000, - AdvRouter: 0x01010101, - LSSeqNumber: 0x80000001, - LSChecksum: 0xebd, - Length: 36, - }, - Content: InterAreaPrefixLSA{ - Metric: 64, - PrefixLength: 64, - PrefixOptions: 0, - AddressPrefix: []byte{0x20, 0x1, 0xd, 0xb8, 0x0, 0x0, 0x0, 0x0}, - }, - }, - LSA{ - LSAheader: LSAheader{ - LSAge: 35, - LSType: 0x8, - LinkStateID: 0x00000005, - AdvRouter: 0x01010101, - LSSeqNumber: 0x80000002, - LSChecksum: 0x3d08, - Length: 56, - }, - Content: LinkLSA{ - RtrPriority: 1, - Options: 0x33, - LinkLocalAddress: []byte{0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, - NumOfPrefixes: 1, - Prefixes: []Prefix{ - Prefix{ - PrefixLength: 64, - PrefixOptions: 0, - AddressPrefix: []byte{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x12}, - }, - }, - }, - }, - LSA{ - LSAheader: LSAheader{ - LSAge: 35, - LSType: 0x2009, - LinkStateID: 0x00000000, - AdvRouter: 0x01010101, - LSSeqNumber: 0x80000001, - LSChecksum: 0xe8d2, - Length: 44, - }, - Content: IntraAreaPrefixLSA{ - NumOfPrefixes: 1, - RefLSType: 0x2001, - RefAdvRouter: 0x01010101, - Prefixes: []Prefix{ - Prefix{ - PrefixLength: 64, - PrefixOptions: 0, - Metric: 10, - AddressPrefix: []byte{0x20, 0x1, 0xd, 0xb8, 0x0, 0x0, 0x0, 0x12}, - }, - }, - }, - }, - }, - }, - }, - Instance: 0, - Reserved: 0, - } - if !reflect.DeepEqual(got, want) { - t.Errorf("OSPF packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want) - } - } else { - t.Error("No OSPF layer type found in packet") - } -} -func BenchmarkDecodePacketPacket3(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketOSPF3LSUpdate, LinkTypeEthernet, gopacket.NoCopy) - } -} - -// testPacketOSPF3LSAck is the packet: -// 14:43:54.185384 IP6 fe80::1 > ff02::5: OSPFv3, LS-Ack, length 136 -// 0x0000: 3333 0000 0005 c200 1ffa 0001 86dd 6e00 33............n. -// 0x0010: 0000 0088 5901 fe80 0000 0000 0000 0000 ....Y........... -// 0x0020: 0000 0000 0001 ff02 0000 0000 0000 0000 ................ -// 0x0030: 0000 0000 0005 0305 0088 0101 0101 0000 ................ -// 0x0040: 0001 9d2c 0000 0005 2001 0000 0000 0202 ...,............ -// 0x0050: 0202 8000 0002 b354 0018 0006 2003 0000 .......T........ -// 0x0060: 0003 0202 0202 8000 0001 4473 0024 0006 ..........Ds.$.. -// 0x0070: 2003 0000 0002 0202 0202 8000 0001 9c11 ................ -// 0x0080: 0024 0006 2003 0000 0001 0202 0202 8000 .$.............. -// 0x0090: 0001 cdba 0024 0006 2003 0000 0000 0202 .....$.......... -// 0x00a0: 0202 8000 0001 efd7 0024 0005 0008 0000 .........$...... -// 0x00b0: 0005 0202 0202 8000 0001 5433 002c ..........T3., -var testPacketOSPF3LSAck = []byte{ - 0x33, 0x33, 0x00, 0x00, 0x00, 0x05, 0xc2, 0x00, 0x1f, 0xfa, 0x00, 0x01, 0x86, 0xdd, 0x6e, 0x00, - 0x00, 0x00, 0x00, 0x88, 0x59, 0x01, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x03, 0x05, 0x00, 0x88, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x01, 0x9d, 0x2c, 0x00, 0x00, 0x00, 0x05, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x02, 0x02, 0x80, 0x00, 0x00, 0x02, 0xb3, 0x54, 0x00, 0x18, 0x00, 0x06, 0x20, 0x03, 0x00, 0x00, - 0x00, 0x03, 0x02, 0x02, 0x02, 0x02, 0x80, 0x00, 0x00, 0x01, 0x44, 0x73, 0x00, 0x24, 0x00, 0x06, - 0x20, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x80, 0x00, 0x00, 0x01, 0x9c, 0x11, - 0x00, 0x24, 0x00, 0x06, 0x20, 0x03, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x80, 0x00, - 0x00, 0x01, 0xcd, 0xba, 0x00, 0x24, 0x00, 0x06, 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x02, 0x02, 0x80, 0x00, 0x00, 0x01, 0xef, 0xd7, 0x00, 0x24, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x05, 0x02, 0x02, 0x02, 0x02, 0x80, 0x00, 0x00, 0x01, 0x54, 0x33, 0x00, 0x2c, -} - -func TestPacketOSPF3LSAck(t *testing.T) { - p := gopacket.NewPacket(testPacketOSPF3LSAck, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv6, LayerTypeOSPF}, t) - if got, ok := p.Layer(LayerTypeOSPF).(*OSPFv3); ok { - want := &OSPFv3{ - OSPF: OSPF{ - Version: 3, - Type: OSPFLinkStateAcknowledgment, - PacketLength: 136, - RouterID: 0x1010101, - AreaID: 1, - Checksum: 0x9d2c, - Content: []LSAheader{ - LSAheader{ - LSAge: 5, - LSType: 0x2001, - LinkStateID: 0x00000000, - AdvRouter: 0x02020202, - LSSeqNumber: 0x80000002, - LSChecksum: 0xb354, - Length: 24, - }, - LSAheader{ - LSAge: 6, - LSType: 0x2003, - LinkStateID: 0x00000003, - AdvRouter: 0x02020202, - LSSeqNumber: 0x80000001, - LSChecksum: 0x4473, - Length: 36, - }, - LSAheader{ - LSAge: 6, - LSType: 0x2003, - LinkStateID: 0x00000002, - AdvRouter: 0x02020202, - LSSeqNumber: 0x80000001, - LSChecksum: 0x9c11, - Length: 36, - }, - LSAheader{ - LSAge: 6, - LSType: 0x2003, - LinkStateID: 0x00000001, - AdvRouter: 0x02020202, - LSSeqNumber: 0x80000001, - LSChecksum: 0xcdba, - Length: 36, - }, - LSAheader{ - LSAge: 6, - LSType: 0x2003, - LinkStateID: 0x00000000, - AdvRouter: 0x02020202, - LSSeqNumber: 0x80000001, - LSChecksum: 0xefd7, - Length: 36, - }, - LSAheader{ - LSAge: 5, - LSType: 0x0008, - LinkStateID: 0x00000005, - AdvRouter: 0x02020202, - LSSeqNumber: 0x80000001, - LSChecksum: 0x5433, - Length: 44, - }, - }, - }, - Instance: 0, - Reserved: 0, - } - if !reflect.DeepEqual(got, want) { - t.Errorf("OSPF packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want) - } - } else { - t.Error("No OSPF layer type found in packet") - } -} -func BenchmarkDecodePacketPacket4(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketOSPF3LSAck, LinkTypeEthernet, gopacket.NoCopy) - } -} diff --git a/vendor/github.com/google/gopacket/layers/prism_test.go b/vendor/github.com/google/gopacket/layers/prism_test.go deleted file mode 100644 index 136a04c..0000000 --- a/vendor/github.com/google/gopacket/layers/prism_test.go +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2014, Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package layers - -import ( - "net" - "reflect" - "testing" - - "github.com/google/gopacket" -) - -// Generator: python layers/test_creator.py --layerType=LayerTypePrismHeader --linkType=LinkTypePrismHeader --name=Prism%s ~/tmp/dump.pcap -// http://wiki.wireshark.org/SampleCaptures#Sample_Captures - -// testPacketPrism is the packet: -// 21:32:37.616872 BSSID:Broadcast DA:Broadcast SA:cc:fa:00:ad:79:e8 (oui Unknown) Probe Request () [1.0 2.0 5.5 11.0 Mbit] -// 0x0000: 4400 0000 9000 0000 7261 3000 0000 0000 -// 0x0010: 0000 0000 0000 0000 4400 0100 0000 0400 -// 0x0020: f9c1 2900 4400 0200 0000 0000 0000 0000 -// 0x0030: 4400 0300 0000 0400 0a00 0000 4400 0400 -// 0x0040: 0000 0400 e1ff ffff 0000 0000 0000 0000 -// 0x0050: 0000 0000 4400 0600 0000 0400 0000 0000 -// 0x0060: 4400 0700 0000 0400 0000 0000 4400 0800 -// 0x0070: 0000 0400 0200 0000 4400 0900 0000 0000 -// 0x0080: 0000 0000 4400 0a00 0000 0400 7e00 0000 -// 0x0090: 4000 0000 ffff ffff ffff ccfa 00ad 79e8 -// 0x00a0: ffff ffff ffff a041 0000 0104 0204 0b16 -// 0x00b0: 3208 0c12 1824 3048 606c 0301 012d 1a2d -// 0x00c0: 1117 ff00 0000 0000 0000 0000 0000 0000 -// 0x00d0: 0000 0000 0000 0000 007f 0800 0000 0000 -// 0x00e0: 0000 40dd 0900 1018 0200 0010 0000 dd1e -// 0x00f0: 0090 4c33 2d11 17ff 0000 0000 0000 0000 -// 0x0100: 0000 0000 0000 0000 0000 0000 0000 - -var testPacketPrism = []byte{ - 0x44, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x72, 0x61, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, - 0xf9, 0xc1, 0x29, 0x00, 0x44, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x44, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x04, 0x00, 0xe1, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x08, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x44, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x7e, 0x00, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0xfa, 0x00, 0xad, 0x79, 0xe8, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x41, 0x00, 0x00, 0x01, 0x04, 0x02, 0x04, 0x0b, 0x16, - 0x32, 0x08, 0x0c, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c, 0x03, 0x01, 0x01, 0x2d, 0x1a, 0x2d, - 0x11, 0x17, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x40, 0xdd, 0x09, 0x00, 0x10, 0x18, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0xdd, 0x1e, - 0x00, 0x90, 0x4c, 0x33, 0x2d, 0x11, 0x17, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -} - -func TestPacketPrism(t *testing.T) { - p := gopacket.NewPacket(testPacketPrism, LinkTypePrismHeader, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypePrismHeader, LayerTypeDot11, LayerTypeDot11MgmtProbeReq}, t) - - if got, ok := p.Layer(LayerTypePrismHeader).(*PrismHeader); ok { - want := &PrismHeader{ - BaseLayer: BaseLayer{ - Contents: []uint8{0x44, 0x0, 0x0, 0x0, 0x90, 0x0, 0x0, 0x0, 0x72, 0x61, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0x1, 0x0, 0x0, 0x0, 0x4, 0x0, 0xf9, 0xc1, 0x29, 0x0, 0x44, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0x3, 0x0, 0x0, 0x0, 0x4, 0x0, 0xa, 0x0, 0x0, 0x0, 0x44, 0x0, 0x4, 0x0, 0x0, 0x0, 0x4, 0x0, 0xe1, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0x6, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0x7, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0x8, 0x0, 0x0, 0x0, 0x4, 0x0, 0x2, 0x0, 0x0, 0x0, 0x44, 0x0, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x44, 0x0, 0xa, 0x0, 0x0, 0x0, 0x4, 0x0, 0x7e, 0x0, 0x0, 0x0}, - Payload: []uint8{0x40, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0xfa, 0x0, 0xad, 0x79, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x41, 0x0, 0x0, 0x1, 0x4, 0x2, 0x4, 0xb, 0x16, 0x32, 0x8, 0xc, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c, 0x3, 0x1, 0x1, 0x2d, 0x1a, 0x2d, 0x11, 0x17, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0xdd, 0x9, 0x0, 0x10, 0x18, 0x2, 0x0, 0x0, 0x10, 0x0, 0x0, 0xdd, 0x1e, 0x0, 0x90, 0x4c, 0x33, 0x2d, 0x11, 0x17, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, Code: 0x44, Length: 0x90, DeviceName: "ra0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", - Values: []PrismValue{ - PrismValue{DID: PrismDIDType1HostTime, Status: 0x0, Length: 0x4, Data: []uint8{0xf9, 0xc1, 0x29, 0x0}}, - PrismValue{DID: PrismDIDType1MACTime, Status: 0x0, Length: 0x0, Data: []uint8{}}, - PrismValue{DID: PrismDIDType1Channel, Status: 0x0, Length: 0x4, Data: []uint8{0xa, 0x0, 0x0, 0x0}}, - PrismValue{DID: PrismDIDType1RSSI, Status: 0x0, Length: 0x4, Data: []uint8{0xe1, 0xff, 0xff, 0xff}}, - PrismValue{DID: 0x0, Status: 0x0, Length: 0x0, Data: []uint8{}}, - PrismValue{DID: PrismDIDType1Signal, Status: 0x0, Length: 0x4, Data: []uint8{0x0, 0x0, 0x0, 0x0}}, - PrismValue{DID: PrismDIDType1Noise, Status: 0x0, Length: 0x4, Data: []uint8{0x0, 0x0, 0x0, 0x0}}, - PrismValue{DID: PrismDIDType1Rate, Status: 0x0, Length: 0x4, Data: []uint8{0x2, 0x0, 0x0, 0x0}}, - PrismValue{DID: PrismDIDType1TransmittedFrameIndicator, Status: 0x0, Length: 0x0, Data: []uint8{}}, - PrismValue{DID: PrismDIDType1FrameLength, Status: 0x0, Length: 0x4, Data: []uint8{0x7e, 0x0, 0x0, 0x0}}, - }, - } - - if !reflect.DeepEqual(got, want) { - t.Errorf("RadioTap packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want) - } - } - - if got, ok := p.Layer(LayerTypeDot11).(*Dot11); ok { - want := &Dot11{ - BaseLayer: BaseLayer{ - Contents: []uint8{0x40, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0xfa, 0x0, 0xad, 0x79, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x41}, - Payload: []uint8{0x0, 0x0, 0x1, 0x4, 0x2, 0x4, 0xb, 0x16, 0x32, 0x8, 0xc, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c, 0x3, 0x1, 0x1, 0x2d, 0x1a, 0x2d, 0x11, 0x17, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0xdd, 0x9, 0x0, 0x10, 0x18, 0x2, 0x0, 0x0, 0x10, 0x0, 0x0, 0xdd, 0x1e, 0x0, 0x90, 0x4c, 0x33, 0x2d, 0x11, 0x17, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, - }, - Type: 0x10, - Proto: 0x0, - Flags: 0x0, - DurationID: 0x0, - Address1: net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, - Address2: net.HardwareAddr{0xcc, 0xfa, 0x0, 0xad, 0x79, 0xe8}, - Address3: net.HardwareAddr{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, - Address4: net.HardwareAddr(nil), - SequenceNumber: 0x041a, - FragmentNumber: 0x0, - Checksum: 0x0, - } - - if !reflect.DeepEqual(got, want) { - t.Errorf("Dot11 packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want) - } - } -} - -func BenchmarkDecodePacketPrism(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketPrism, LinkTypePrismHeader, gopacket.NoCopy) - } -} diff --git a/vendor/github.com/google/gopacket/layers/radiotap_test.go b/vendor/github.com/google/gopacket/layers/radiotap_test.go deleted file mode 100644 index 4d3c7d0..0000000 --- a/vendor/github.com/google/gopacket/layers/radiotap_test.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. -package layers - -import ( - "github.com/google/gopacket" - "testing" -) - -// testPacketRadiotap0 is the packet: -// 09:34:34.799438 1.0 Mb/s 2412 MHz 11b -58dB signal antenna 7 Acknowledgment RA:88:1f:a1:ae:9d:cb -// 0x0000: 0000 1200 2e48 0000 1002 6c09 a000 c607 .....H....l..... -// 0x0010: 0000 d400 0000 881f a1ae 9dcb c630 4b4b .............0KK -var testPacketRadiotap0 = []byte{ - 0x00, 0x00, 0x12, 0x00, 0x2e, 0x48, 0x00, 0x00, 0x10, 0x02, 0x6c, 0x09, 0xa0, 0x00, 0xc6, 0x07, - 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x88, 0x1f, 0xa1, 0xae, 0x9d, 0xcb, 0xc6, 0x30, 0x4b, 0x4b, -} - -func TestPacketRadiotap0(t *testing.T) { - p := gopacket.NewPacket(testPacketRadiotap0, LayerTypeRadioTap, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t) - rt := p.Layer(LayerTypeRadioTap).(*RadioTap) - if rt.ChannelFrequency != 2412 || rt.DBMAntennaSignal != -58 || rt.Antenna != 7 { - t.Error("Radiotap decode error") - } - if rt.Rate != 2 { // 500Kbps unit - t.Error("Radiotap Rate decode error") - } -} -func BenchmarkDecodePacketRadiotap0(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketRadiotap0, LayerTypeRadioTap, gopacket.NoCopy) - } -} - -// testPacketRadiotap1 is the packet: -// 05:24:21.380948 2412 MHz 11g -36dB signal antenna 5 65.0 Mb/s MCS 7 20 MHz lon GI -// 0x0000: 0000 1500 2a48 0800 1000 6c09 8004 dc05 ....*H....l..... -// 0x0010: 0000 0700 0748 112c 0000 3a9d aaf0 191c .....H.,..:..... -// 0x0020: aba7 f213 9d00 3a9d aaf0 1970 b2ee a9f1 ......:....p.... -// 0x0030: 16 . -var testPacketRadiotap1 = []byte{ - 0x00, 0x00, 0x15, 0x00, 0x2a, 0x48, 0x08, 0x00, 0x10, 0x00, 0x6c, 0x09, 0x80, 0x04, 0xdc, 0x05, - 0x00, 0x00, 0x07, 0x00, 0x07, 0x48, 0x11, 0x2c, 0x00, 0x00, 0x3a, 0x9d, 0xaa, 0xf0, 0x19, 0x1c, - 0xab, 0xa7, 0xf2, 0x13, 0x9d, 0x00, 0x3a, 0x9d, 0xaa, 0xf0, 0x19, 0x70, 0xb2, 0xee, 0xa9, 0xf1, - 0x16, -} - -func TestPacketRadiotap1(t *testing.T) { - p := gopacket.NewPacket(testPacketRadiotap1, LayerTypeRadioTap, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeRadioTap, LayerTypeDot11}, t) - rt := p.Layer(LayerTypeRadioTap).(*RadioTap) - if rt.ChannelFrequency != 2412 || rt.DBMAntennaSignal != -36 || rt.Antenna != 5 { - t.Error("Radiotap decode error") - } - if !rt.MCS.Known.MCSIndex() || rt.MCS.MCS != 7 { - t.Error("Radiotap MCS error") - } - if !rt.MCS.Known.Bandwidth() || rt.MCS.Flags.Bandwidth() != 0 { - t.Error("Radiotap bandwidth error") - } - if !rt.MCS.Known.GuardInterval() || rt.MCS.Flags.ShortGI() { - t.Error("Radiotap GI error") - } -} -func BenchmarkDecodePacketRadiotap1(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketRadiotap1, LayerTypeRadioTap, gopacket.NoCopy) - } -} diff --git a/vendor/github.com/google/gopacket/layers/sflow_test.go b/vendor/github.com/google/gopacket/layers/sflow_test.go deleted file mode 100644 index ca0f2ab..0000000 --- a/vendor/github.com/google/gopacket/layers/sflow_test.go +++ /dev/null @@ -1,1246 +0,0 @@ -// Copyright 2014 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. -package layers - -import ( - "github.com/google/gopacket" - "net" - "reflect" - "testing" -) - -// Test packet collected from live network. See the test below for contents -var SFlowTestPacket1 = []byte{ - 0x84, 0x2b, 0x2b, 0x16, 0x8b, 0x62, 0xf0, 0x50, 0x56, 0x85, 0x3a, 0xfd, 0x08, 0x00, 0x45, 0x00, - 0x05, 0xbc, 0x9c, 0x04, 0x40, 0x00, 0xff, 0x11, 0xc7, 0x00, 0x0a, 0x01, 0xff, 0x0e, 0x0a, 0x01, - 0x00, 0x1b, 0xc7, 0x57, 0x18, 0xc7, 0x05, 0xa8, 0x22, 0x3b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x00, 0x01, 0x0a, 0x01, 0xf8, 0x16, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x9d, 0xfb, 0x40, 0x49, - 0xc6, 0xcd, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x26, - 0x27, 0xe8, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x3e, 0x80, 0x50, 0xbd, 0xe5, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0xd2, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x3c, 0x8a, 0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6d, - 0xf0, 0x40, 0x08, 0x00, 0x45, 0x00, 0x05, 0xc0, 0x6b, 0xaa, 0x40, 0x00, 0x40, 0x06, 0x8f, 0x41, - 0x0a, 0x01, 0x0e, 0x16, 0x36, 0xf0, 0xeb, 0x45, 0x76, 0xfd, 0x00, 0x50, 0xca, 0x77, 0xef, 0x96, - 0xfc, 0x28, 0x63, 0x40, 0x50, 0x10, 0x00, 0x3c, 0x64, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0xf4, 0x00, 0x00, 0x02, 0x77, 0x00, 0x00, 0x00, 0xfd, 0x3b, 0x8c, 0xe7, 0x04, 0x4a, 0x2d, 0xb2, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x01, 0x48, 0xcc, 0x11, 0x0d, 0xe3, 0x00, - 0x26, 0x85, 0x30, 0x00, 0x00, 0x07, 0x66, 0x00, 0x02, 0xd0, 0x8a, 0x00, 0x02, 0xce, 0xf0, 0x00, - 0x29, 0x7e, 0x80, 0x00, 0x02, 0xd0, 0x98, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x26, 0x85, 0x30, 0x00, - 0x00, 0x00, 0xf4, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, - 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x5e, 0x5c, 0x1e, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00, - 0x07, 0xd0, 0xb1, 0x2f, 0xa2, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x05, 0xee, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x3c, 0x8a, - 0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6f, 0xbe, 0xd8, 0x08, 0x00, 0x45, 0x00, 0x05, 0xdc, - 0x9f, 0xfd, 0x40, 0x00, 0x40, 0x06, 0x6a, 0xfa, 0x0a, 0x01, 0x0e, 0x10, 0x0a, 0x01, 0x08, 0x13, - 0x23, 0x84, 0xb7, 0x22, 0x8a, 0xc9, 0x50, 0xb5, 0x4e, 0x10, 0x2a, 0x87, 0x80, 0x10, 0x06, 0x01, - 0x10, 0xa6, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0xef, 0x1f, 0xf4, 0x07, 0x99, 0x3a, 0xd8, 0x5b, - 0x01, 0x46, 0x09, 0x00, 0x0c, 0x00, 0x0c, 0x3c, 0xac, 0x4a, 0x1b, 0x06, 0x04, 0x78, 0x78, 0x4e, - 0xc2, 0x05, 0x46, 0x43, 0x06, 0x04, 0x78, 0x78, 0xee, 0x9c, 0x00, 0x41, 0xef, 0x05, 0x81, 0x32, - 0x1b, 0x06, 0x04, 0x78, 0x78, 0x56, 0x72, 0x05, 0x4e, 0x92, 0x00, 0x96, 0x39, 0x00, 0xea, 0x3f, - 0x01, 0x15, 0xa3, 0x08, 0x04, 0x42, 0x6a, 0x82, 0x87, 0x08, 0x05, 0xcc, 0x00, 0x04, 0x00, 0x00, - 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x5a, - 0xcd, 0xd0, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x07, 0xd0, 0x95, 0x67, 0xe1, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x46, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x3c, 0x8a, 0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6f, - 0x11, 0x28, 0x08, 0x00, 0x45, 0x00, 0x04, 0x34, 0xdb, 0x36, 0x40, 0x00, 0x40, 0x06, 0x38, 0xac, - 0x0a, 0x01, 0x0e, 0x11, 0x0a, 0x01, 0x00, 0xcf, 0x23, 0x84, 0xa0, 0x3f, 0x3c, 0xce, 0xd5, 0x4a, - 0x72, 0x0b, 0x5d, 0x1a, 0x80, 0x10, 0x06, 0x01, 0x8a, 0x50, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, - 0xef, 0x1f, 0xa2, 0xba, 0xe6, 0xfa, 0xae, 0xb3, 0xfe, 0xcf, 0x00, 0x19, 0xcf, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xb9, 0x79, 0xdd, 0x42, 0x00, 0x00, 0x02, 0x84, 0x9b, 0xa9, 0x02, 0xe2, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x32, 0x39, 0x35, 0x34, 0x33, 0x36, 0x00, 0x00, 0x02, 0x70, 0xcd, - 0x16, 0x40, 0xa6, 0x98, 0x88, 0x24, 0x06, 0x50, 0xb0, 0xf4, 0xee, 0x03, 0xa6, 0xfa, 0x87, 0xaf, - 0xc1, 0x99, 0x52, 0x0d, 0x07, 0xa8, 0x00, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, - 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x20, 0xf2, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x54, 0x0b, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x01, 0x29, 0x82, 0x6d, 0xb0, 0x6c, 0x0b, 0xcb, 0x0d, 0xdd, 0x96, 0x00, 0x06, - 0xa8, 0xc6, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x34, 0x02, 0x35, 0x58, 0x7c, 0x9e, 0x56, 0x64, 0x25, 0x71, 0x00, 0x70, - 0x5a, 0xc4, 0x00, 0x09, 0x08, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x5e, 0x5c, 0x1f, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00, - 0x07, 0xd0, 0xb1, 0x2f, 0xaa, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x05, 0xee, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x3c, 0x8a, - 0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6f, 0xbe, 0xd8, 0x08, 0x00, 0x45, 0x00, 0x05, 0xdc, - 0x0f, 0xba, 0x40, 0x00, 0x40, 0x06, 0xf4, 0x3f, 0x0a, 0x01, 0x0e, 0x10, 0x0a, 0x01, 0x0f, 0x11, - 0x23, 0x84, 0xcd, 0xc0, 0xf4, 0x0e, 0x90, 0x23, 0xd7, 0x32, 0x8b, 0x31, 0x80, 0x10, 0x00, 0x1d, - 0x6b, 0x12, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0xef, 0x1f, 0xf4, 0x28, 0xef, 0x1f, 0xec, 0x76, - 0xaa, 0x25, 0x01, 0x04, 0xc0, 0xac, 0xfe, 0x25, 0x01, 0x8e, 0x25, 0x01, 0x16, 0xc7, 0x28, 0xfe, - 0x7e, 0x70, 0xfe, 0x7e, 0x70, 0x52, 0x7e, 0x70, 0x15, 0x9b, 0xfe, 0x35, 0x01, 0xfe, 0x35, 0x01, - 0x42, 0x35, 0x01, 0xfe, 0x95, 0x77, 0xfe, 0x95, 0x77, 0xfe, 0x95, 0x77, 0x52, 0x95, 0x77, 0x00, - 0xd2, 0xfe, 0x70, 0x02, 0x92, 0x70, 0x02, 0x16, 0x60, 0x22, 0x00, 0x7e, 0xb2, 0x15, 0x00, 0x00, - 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x5a, - 0xcd, 0xd1, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x07, 0xd0, 0x95, 0x67, 0xe9, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0xee, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0xb8, 0xca, 0x3a, 0x6f, 0xbe, 0xd8, 0xb8, 0xca, 0x3a, 0x6f, - 0x11, 0x28, 0x08, 0x00, 0x45, 0x00, 0x05, 0xdc, 0xfe, 0x05, 0x40, 0x00, 0x40, 0x06, 0x06, 0xf4, - 0x0a, 0x01, 0x0e, 0x11, 0x0a, 0x01, 0x0e, 0x10, 0x23, 0x84, 0xfa, 0x29, 0xae, 0xd4, 0x95, 0x03, - 0x99, 0xb8, 0x77, 0xd0, 0x80, 0x10, 0x00, 0x1d, 0x6f, 0x4f, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, - 0xef, 0x1f, 0xa2, 0xcc, 0xef, 0x1f, 0xf4, 0x2c, 0xfe, 0xdb, 0x05, 0xa1, 0xdb, 0x04, 0x9e, 0xc0, - 0xfe, 0x30, 0x08, 0xb2, 0x30, 0x08, 0xda, 0x2b, 0xbd, 0xfe, 0x2a, 0x01, 0xfe, 0x2a, 0x01, 0x21, - 0x2a, 0x00, 0xb2, 0xfe, 0x57, 0xb0, 0xb6, 0x57, 0xb0, 0x14, 0x74, 0xf4, 0xf0, 0x4c, 0x05, 0x68, - 0xfe, 0x54, 0x02, 0xfe, 0x54, 0x02, 0xd2, 0x54, 0x02, 0x00, 0xbe, 0xfe, 0x32, 0x0f, 0xb6, 0x32, - 0x0f, 0x14, 0x2e, 0x16, 0xaf, 0x47, 0x00, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, - 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x01, 0x5e, 0x5c, 0x20, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00, - 0x07, 0xd0, 0xb1, 0x2f, 0xb2, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x57, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x42, 0x3c, 0x8a, - 0xb0, 0xe7, 0x54, 0x41, 0xb8, 0xca, 0x3a, 0x6f, 0xbe, 0xd8, 0x08, 0x00, 0x45, 0x00, 0x00, 0x34, - 0xa8, 0x23, 0x40, 0x00, 0x40, 0x06, 0x61, 0x7f, 0x0a, 0x01, 0x0e, 0x10, 0x0a, 0x01, 0x0f, 0x10, - 0x97, 0x91, 0x23, 0x84, 0x24, 0xfa, 0x91, 0xf7, 0xb4, 0xe8, 0xf3, 0x2d, 0x80, 0x10, 0x00, 0xab, - 0x7b, 0x7d, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0xef, 0x1f, 0xf4, 0x36, 0xef, 0x1f, 0xdc, 0xde, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -} - -// Test collected from the SFlow reference agent. Contains dummy data for several record types -// that wern't available on an actual network for sampling. -var SFlowTestPacket2 = []byte{ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45, 0x00, - 0x04, 0x88, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, 0x38, 0x63, 0x7f, 0x00, 0x00, 0x01, 0x7f, 0x00, - 0x00, 0x01, 0xdc, 0xb8, 0x18, 0xc7, 0x04, 0x74, 0x02, 0x88, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x00, 0x01, 0xc0, 0xa8, 0x5b, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x3a, 0x00, 0x00, - 0xcb, 0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x54, 0x00, 0x02, - 0x1f, 0x6e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x1f, 0x6e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x03, 0xed, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6f, - 0x72, 0x67, 0x00, 0x00, 0x00, 0x0f, 0x68, 0x6f, 0x73, 0x74, 0x31, 0x2e, 0x73, 0x66, 0x6c, 0x6f, - 0x77, 0x2e, 0x6f, 0x72, 0x67, 0x06, 0x00, 0x00, 0x03, 0xec, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, - 0x00, 0x6a, 0x00, 0x00, 0x00, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x75, 0x73, 0x65, - 0x72, 0xdc, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x00, 0x00, 0x03, 0xeb, 0x00, 0x00, - 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x0d, 0x0c, 0x0b, 0x0a, 0x00, 0x00, 0xfd, 0xe9, 0x00, 0x00, - 0x00, 0x7b, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x01, 0xc8, 0x00, 0x00, 0x03, 0x15, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x2b, 0x67, 0x00, 0x00, 0x56, 0xce, 0x00, 0x00, - 0x82, 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, - 0x03, 0x78, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, - 0x00, 0x0d, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x42, 0x00, 0x0c, - 0x29, 0x67, 0xa0, 0xe5, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x09, 0x08, 0x00, 0x45, 0x10, 0x00, 0x34, - 0x92, 0xc3, 0x40, 0x00, 0x40, 0x06, 0x70, 0x8d, 0xc0, 0xa8, 0x5b, 0x01, 0xc0, 0xa8, 0x5b, 0x11, - 0xd3, 0xdd, 0x00, 0x16, 0xe3, 0x2e, 0x84, 0x77, 0x13, 0x6d, 0xc5, 0x53, 0x80, 0x10, 0x1f, 0xf7, - 0xe7, 0x7d, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x2e, 0xc6, 0x70, 0x3a, 0x00, 0x0f, 0x84, 0x7a, - 0xbc, 0xd2, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x90, 0x00, 0x02, 0x1f, 0x6f, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x1f, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0xed, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, - 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6f, 0x72, 0x67, 0x00, 0x00, - 0x00, 0x0f, 0x68, 0x6f, 0x73, 0x74, 0x31, 0x2e, 0x73, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6f, 0x72, - 0x67, 0x03, 0x00, 0x00, 0x03, 0xec, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, - 0x00, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x77, 0x00, 0x00, - 0x00, 0x6a, 0x00, 0x00, 0x00, 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x00, 0x00, 0x03, 0xeb, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, - 0x00, 0x01, 0x0d, 0x0c, 0x0b, 0x0a, 0x00, 0x00, 0xfd, 0xe9, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, - 0x03, 0xe7, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x7b, 0x00, 0x00, 0x01, 0xc8, 0x00, 0x00, 0x03, 0x15, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x2b, 0x67, 0x00, 0x00, 0x56, 0xce, 0x00, 0x00, 0x82, 0x35, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x09, 0x00, 0x00, 0x03, 0x78, 0x00, 0x00, - 0x03, 0xe7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, - 0x01, 0xb0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x86, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x09, - 0x00, 0x0c, 0x29, 0x67, 0xa0, 0xe5, 0x08, 0x00, 0x45, 0x10, 0x01, 0x74, 0xbb, 0xfa, 0x40, 0x00, - 0x40, 0x06, 0x46, 0x16, 0xc0, 0xa8, 0x5b, 0x11, 0xc0, 0xa8, 0x5b, 0x01, 0x00, 0x16, 0xd3, 0xdd, - 0x13, 0x6d, 0xc5, 0x53, 0xe3, 0x2e, 0x84, 0x77, 0x80, 0x18, 0x01, 0x10, 0x38, 0xca, 0x00, 0x00, - 0x01, 0x01, 0x08, 0x0a, 0x00, 0x0f, 0x84, 0x7d, 0x2e, 0xc6, 0x70, 0x3a, 0xe3, 0x92, 0x97, 0x1a, - 0x67, 0x3b, 0xac, 0xec, 0xfa, 0x43, 0x71, 0x5e, 0x36, 0xa1, 0x0a, 0xc6, 0x1a, 0x6a, 0xed, 0x08, - 0xac, 0xf4, 0xbe, 0xd8, 0x36, 0x59, 0xf6, 0xe2, 0x3d, 0x34, 0x26, 0xf2, 0x42, 0xbd, 0x32, 0xd3, - 0x37, 0x52, 0xb8, 0xf4, 0x38, 0xf0, 0xf4, 0xeb, 0x76, 0x3b, 0xda, 0x23, 0xf1, 0x92, 0x96, 0xca, - 0xbb, 0x9c, 0x20, 0x0a, 0x38, 0x37, 0x6f, 0xd9, 0x26, 0xe6, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x54, 0x00, 0x02, 0x1f, 0x70, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, - 0x1f, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x03, 0xed, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x14, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x66, 0x6c, - 0x6f, 0x77, 0x2e, 0x6f, 0x72, 0x67, 0x00, 0x00, 0x00, 0x0f, 0x68, 0x6f, 0x73, 0x74, 0x31, 0x2e, - 0x73, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6f, 0x72, 0x67, 0xff, 0x00, 0x00, 0x03, 0xec, 0x00, 0x00, - 0x00, 0x2c, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x20, 0x75, 0x73, 0x65, 0x72, 0x77, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x10, 0x64, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x00, 0x00, - 0x03, 0xeb, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x0d, 0x0c, 0x0b, 0x0a, 0x00, 0x00, - 0xfd, 0xe9, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x01, 0xc8, 0x00, 0x00, - 0x03, 0x15, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x2b, 0x67, 0x00, 0x00, - 0x56, 0xce, 0x00, 0x00, 0x82, 0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x03, 0x09, 0x00, 0x00, 0x03, 0x78, 0x00, 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x42, 0x00, 0x0c, 0x29, 0x67, 0xa0, 0xe5, 0x00, 0x50, 0x56, 0xc0, 0x00, 0x09, 0x08, 0x00, - 0x45, 0x10, 0x00, 0x34, 0x65, 0x7d, 0x40, 0x00, 0x40, 0x06, 0x9d, 0xd3, 0xc0, 0xa8, 0x5b, 0x01, - 0xc0, 0xa8, 0x5b, 0x11, 0xd3, 0xdd, 0x00, 0x16, 0xe3, 0x2e, 0x84, 0x77, 0x13, 0x6d, 0xc6, 0x93, - 0x80, 0x10, 0x1f, 0xec, 0xe6, 0x43, 0x00, 0x00, 0x01, 0x01, 0x08, 0x0a, 0x2e, 0xc6, 0x70, 0x3c, - 0x00, 0x0f, 0x84, 0x7d, 0x00, 0x50, -} - -// processor counter sample -var SFlowTestPacket3 = []byte{ - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, - 0x0a, 0x14, 0x04, 0x00, 0x00, 0x00, 0x00, 0x64, - 0x00, 0x01, 0x78, 0xe0, 0x73, 0x03, 0x48, 0x78, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x34, 0x00, 0x01, 0x78, 0xe0, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xe9, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x05, 0xaa, - 0x00, 0x00, 0x05, 0x5a, 0x00, 0x00, 0x05, 0x32, - 0x00, 0x00, 0x00, 0x00, 0xe7, 0x8d, 0x70, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x55, 0xe7, 0x70, 0x00, -} - -// expanded flow sample - extended switch flow record -var SFlowTestPacket4 = []byte{ - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, - 0xc0, 0xa8, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x7e, 0x32, 0xe0, 0xe4, 0x7c, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x01, 0x23, - 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x03, 0x37, 0x00, 0x00, 0x56, 0x23, - 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xe9, - 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, - 0xff, 0xff, 0xff, 0xff, -} - -// expanded flow sample - extended router flow record -var SFlowTestPacket5 = []byte{ - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, - 0xc0, 0xa8, 0x01, 0x12, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x7e, 0x32, 0xe0, 0xe4, 0x7c, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x01, 0x23, - 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x56, 0x02, - 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xea, - 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, - 0xc0, 0xa8, 0x01, 0x21, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x80, -} - -// expanded flow sample - Ipv4 Tunnel Ingress record -var SFlowTestPacket6 = []byte{ - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x00, 0x01, 0xbd, 0x50, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, - 0x00, 0x00, 0x00, 0x74, 0x02, 0x00, 0x03, 0xe8, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, - 0xc0, 0xa8, 0x00, 0x54, 0xc0, 0xa8, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -} - -// expanded flow sample - Ipv4 Tunnel Egress record -var SFlowTestPacket7 = []byte{ - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x7f, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x42, 0x68, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, - 0x00, 0x00, 0x00, 0x12, 0x02, 0x00, 0x03, 0xe9, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, - 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xa8, 0x00, 0x54, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, -} - -// expanded flow sample - extended router flow record IPv6 next hop -var SFlowTestPacket8 = []byte{ - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, - 0xc0, 0xa8, 0x01, 0x12, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x7e, 0x32, 0xe0, 0xe4, 0x7c, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x01, 0x23, - 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x03, 0x34, 0x00, 0x00, 0x56, 0x02, - 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xea, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x02, - 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, -} - -func TestDecodeUDPSFlow(t *testing.T) { - p := gopacket.NewPacket(SFlowTestPacket1, LayerTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeSFlow}, t) - if got, ok := p.TransportLayer().(*UDP); ok { - want := &UDP{ - BaseLayer: BaseLayer{SFlowTestPacket1[34:42], SFlowTestPacket1[42:]}, - sPort: []byte{199, 87}, - dPort: []byte{24, 199}, - SrcPort: 51031, - DstPort: 6343, - Checksum: 8763, - Length: 1448, - } - if !reflect.DeepEqual(want, got) { - t.Errorf("UDP layer mismatch, \nwant %#v\ngot %#v\n", want, got) - } - } else { - t.Error("Transport layer packet not UDP") - } -} - -func TestDecodeSFlowDatagram(t *testing.T) { - p := gopacket.NewPacket(SFlowTestPacket1, LayerTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeSFlow}, t) - if got, ok := p.ApplicationLayer().(*SFlowDatagram); ok { - want := &SFlowDatagram{ - DatagramVersion: uint32(5), - AgentAddress: []byte{0xa, 0x1, 0xf8, 0x16}, - SubAgentID: uint32(17), - SequenceNumber: uint32(40443), - AgentUptime: uint32(1078576845), - SampleCount: uint32(7), - FlowSamples: []SFlowFlowSample{ - SFlowFlowSample{ - EnterpriseID: 0x0, - Format: 0x1, - SampleLength: 0xd0, - SequenceNumber: 0x2627e8, - SourceIDClass: 0x0, - SourceIDIndex: 0x213, - SamplingRate: 0x3e80, - SamplePool: 0x50bde580, - Dropped: 0x0, - InputInterface: 0x213, - OutputInterface: 0x0, - RecordCount: 0x2, - Records: []SFlowRecord{ - SFlowRawPacketFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: 0x1, - FlowDataLength: 0x90, - }, - HeaderProtocol: 0x1, - FrameLength: 0x5d2, - PayloadRemoved: 0x4, - HeaderLength: 0x80, - Header: gopacket.NewPacket(SFlowTestPacket1[134:262], LayerTypeEthernet, gopacket.Default), - }, - SFlowExtendedSwitchFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: 0x3e9, - FlowDataLength: 0x10, - }, - IncomingVLAN: 0x202, - IncomingVLANPriority: 0x0, - OutgoingVLAN: 0x0, - OutgoingVLANPriority: 0x0, - }, - }, - }, - SFlowFlowSample{ - EnterpriseID: 0x0, - Format: 0x1, - SampleLength: 0xd0, - SequenceNumber: 0x15e5c1e, - SourceIDClass: 0x0, - SourceIDIndex: 0x257, - SamplingRate: 0x7d0, - SamplePool: 0xb12fa290, - Dropped: 0x0, - InputInterface: 0x257, - OutputInterface: 0x0, - RecordCount: 0x2, - Records: []SFlowRecord{ - SFlowRawPacketFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: 0x1, - FlowDataLength: 0x90, - }, - HeaderProtocol: 0x1, - FrameLength: 0x5ee, - PayloadRemoved: 0x4, - HeaderLength: 0x80, - Header: gopacket.NewPacket(SFlowTestPacket1[350:478], LayerTypeEthernet, gopacket.Default), - }, - SFlowExtendedSwitchFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: 0x3e9, - FlowDataLength: 0x10, - }, - IncomingVLAN: 0x202, - IncomingVLANPriority: 0x0, - OutgoingVLAN: 0x0, - OutgoingVLANPriority: 0x0, - }, - }, - }, - SFlowFlowSample{ - EnterpriseID: 0x0, - Format: 0x1, - SampleLength: 0xd0, - SequenceNumber: 0x15acdd0, - SourceIDClass: 0x0, - SourceIDIndex: 0x255, - SamplingRate: 0x7d0, - SamplePool: 0x9567e130, - Dropped: 0x0, - InputInterface: 0x255, - OutputInterface: 0x0, - RecordCount: 0x2, - Records: []SFlowRecord{ - SFlowRawPacketFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: 0x1, - FlowDataLength: 0x90, - }, - HeaderProtocol: 0x1, - FrameLength: 0x446, - PayloadRemoved: 0x4, - HeaderLength: 0x80, - Header: gopacket.NewPacket(SFlowTestPacket1[566:694], LayerTypeEthernet, gopacket.Default), - }, - SFlowExtendedSwitchFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: 0x3e9, - FlowDataLength: 0x10, - }, - IncomingVLAN: 0x202, - IncomingVLANPriority: 0x0, - OutgoingVLAN: 0x0, - OutgoingVLANPriority: 0x0, - }, - }, - }, - SFlowFlowSample{ - EnterpriseID: 0x0, - Format: 0x1, - SampleLength: 0xd0, - SequenceNumber: 0x15e5c1f, - SourceIDClass: 0x0, - SourceIDIndex: 0x257, - SamplingRate: 0x7d0, - SamplePool: 0xb12faa60, - Dropped: 0x0, - InputInterface: 0x257, - OutputInterface: 0x0, - RecordCount: 0x2, - Records: []SFlowRecord{ - SFlowRawPacketFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: 0x1, - FlowDataLength: 0x90, - }, - HeaderProtocol: 0x1, - FrameLength: 0x5ee, - PayloadRemoved: 0x4, - HeaderLength: 0x80, - Header: gopacket.NewPacket(SFlowTestPacket1[958:1086], LayerTypeEthernet, gopacket.Default), - }, - SFlowExtendedSwitchFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: 0x3e9, - FlowDataLength: 0x10, - }, - IncomingVLAN: 0x202, - IncomingVLANPriority: 0x0, - OutgoingVLAN: 0x0, - OutgoingVLANPriority: 0x0, - }, - }, - }, - SFlowFlowSample{ - EnterpriseID: 0x0, - Format: 0x1, - SampleLength: 0xd0, - SequenceNumber: 0x15acdd1, - SourceIDClass: 0x0, - SourceIDIndex: 0x255, - SamplingRate: 0x7d0, - SamplePool: 0x9567e900, - Dropped: 0x0, - InputInterface: 0x255, - OutputInterface: 0x257, - RecordCount: 0x2, - Records: []SFlowRecord{ - SFlowRawPacketFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: 0x1, - FlowDataLength: 0x90, - }, - HeaderProtocol: 0x1, - FrameLength: 0x5ee, - PayloadRemoved: 0x4, - HeaderLength: 0x80, - Header: gopacket.NewPacket(SFlowTestPacket1[1174:1302], LayerTypeEthernet, gopacket.Default), - }, - SFlowExtendedSwitchFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: 0x3e9, - FlowDataLength: 0x10, - }, - IncomingVLAN: 0x202, - IncomingVLANPriority: 0x0, - OutgoingVLAN: 0x202, - OutgoingVLANPriority: 0x0, - }, - }, - }, - SFlowFlowSample{ - EnterpriseID: 0x0, - Format: 0x1, - SampleLength: 0x94, - SequenceNumber: 0x15e5c20, - SourceIDClass: 0x0, - SourceIDIndex: 0x257, - SamplingRate: 0x7d0, - SamplePool: 0xb12fb230, - Dropped: 0x0, - InputInterface: 0x257, - OutputInterface: 0x0, - RecordCount: 0x2, - Records: []SFlowRecord{ - SFlowRawPacketFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: 0x1, - FlowDataLength: 0x54, - }, - HeaderProtocol: 0x1, - FrameLength: 0x46, - PayloadRemoved: 0x4, - HeaderLength: 0x42, - Header: gopacket.NewPacket(SFlowTestPacket1[1390:1458], LayerTypeEthernet, gopacket.Default), - }, - SFlowExtendedSwitchFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: 0x3e9, - FlowDataLength: 0x10, - }, - IncomingVLAN: 0x202, - IncomingVLANPriority: 0x0, - OutgoingVLAN: 0x0, - OutgoingVLANPriority: 0x0, - }, - }, - }, - }, - CounterSamples: []SFlowCounterSample{ - SFlowCounterSample{ - Format: 0x2, - SampleLength: 0xa8, - SequenceNumber: 0x20f2, - SourceIDClass: 0x0, - SourceIDIndex: 0x20a, - RecordCount: 0x2, - Records: []SFlowRecord{ - SFlowGenericInterfaceCounters{ - SFlowBaseCounterRecord: SFlowBaseCounterRecord{ - EnterpriseID: 0x0, - Format: 0x1, - FlowDataLength: 0x58, - }, - IfIndex: 0x20a, - IfType: 0x6, - IfSpeed: 0x2540be400, - IfDirection: 0x1, - IfStatus: 0x3, - IfInOctets: 0x129826db06c0b, - IfInUcastPkts: 0xcb0ddd96, - IfInMulticastPkts: 0x6a8c6, - IfInBroadcastPkts: 0x7b, - IfInDiscards: 0x0, - IfInErrors: 0x0, - IfInUnknownProtos: 0x0, - IfOutOctets: 0x340235587c9e, - IfOutUcastPkts: 0x56642571, - IfOutMulticastPkts: 0x705ac4, - IfOutBroadcastPkts: 0x908f1, - IfOutDiscards: 0x0, - IfOutErrors: 0x0, - IfPromiscuousMode: 0x0, - }, - SFlowEthernetCounters{ - SFlowBaseCounterRecord: SFlowBaseCounterRecord{ - EnterpriseID: 0x0, - Format: 0x2, - FlowDataLength: 0x34, - }, - AlignmentErrors: 0x0, - FCSErrors: 0x0, - SingleCollisionFrames: 0x0, - MultipleCollisionFrames: 0x0, - SQETestErrors: 0x0, - DeferredTransmissions: 0x0, - LateCollisions: 0x0, - ExcessiveCollisions: 0x0, - InternalMacTransmitErrors: 0x0, - CarrierSenseErrors: 0x0, - FrameTooLongs: 0x0, - InternalMacReceiveErrors: 0x0, - SymbolErrors: 0x0, - }, - }, - }, - }, - } - if !reflect.DeepEqual(want, got) { - t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got) - } - } else { - t.Error("Application layer packet not UDP") - } -} - -func TestPacketPacket0(t *testing.T) { - p := gopacket.NewPacket(SFlowTestPacket2, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeSFlow}, t) - if got, ok := p.ApplicationLayer().(*SFlowDatagram); ok { - want := &SFlowDatagram{ - DatagramVersion: uint32(5), - AgentAddress: []byte{192, 168, 91, 17}, - SubAgentID: uint32(0), - SequenceNumber: uint32(46394), - AgentUptime: uint32(52000), - SampleCount: uint32(3), - FlowSamples: []SFlowFlowSample{ - SFlowFlowSample{ - EnterpriseID: 0x0, - Format: 0x1, - SampleLength: 340, - SequenceNumber: 139118, - SourceIDClass: 0, - SourceIDIndex: 3, - SamplingRate: 1, - SamplePool: 139118, - Dropped: 0, - InputInterface: 3, - OutputInterface: 1073741823, - RecordCount: 4, - Records: []SFlowRecord{ - SFlowExtendedURLRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0, - Format: 1005, - FlowDataLength: 48, - }, - Direction: SFlowURLsrc, - URL: "http://www.sflow.org", - Host: "host1.sflow.org", - }, - SFlowExtendedUserFlow{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0, - Format: 1004, - FlowDataLength: 44, - }, - SourceCharSet: SFlowCSUTF8, - SourceUserID: "source user", - DestinationCharSet: SFlowCSUTF8, - DestinationUserID: "destination user", - }, - SFlowExtendedGatewayFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0, - Format: 1003, - FlowDataLength: 100, - }, - NextHop: []byte{0x0d, 0x0c, 0x0b, 0x0a}, - AS: 65001, - SourceAS: 123, - PeerAS: 999, - ASPathCount: 3, - ASPath: []SFlowASDestination{ - SFlowASDestination{ - Type: SFlowASSequence, - Count: 3, - Members: []uint32{123, 456, 789}, - }, - SFlowASDestination{ - Type: SFlowASSet, - Count: 3, - Members: []uint32{11111, 22222, 33333}, - }, - SFlowASDestination{ - Type: SFlowASSequence, - Count: 3, - Members: []uint32{777, 888, 999}, - }, - }, - Communities: []uint32{12, 13}, - LocalPref: 432, - }, - SFlowRawPacketFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: 0x1, - FlowDataLength: 84, - }, - HeaderProtocol: 1, - FrameLength: 70, - PayloadRemoved: 4, - HeaderLength: 0x42, - Header: gopacket.NewPacket(SFlowTestPacket2[350:418], LayerTypeEthernet, gopacket.Default), - }, - }, - }, - SFlowFlowSample{ - EnterpriseID: 0x0, - Format: 0x1, - SampleLength: 400, - SequenceNumber: 139119, - SourceIDClass: 0, - SourceIDIndex: 3, - SamplingRate: 1, - SamplePool: 139119, - Dropped: 0, - InputInterface: 1073741823, - OutputInterface: 3, - RecordCount: 4, - Records: []SFlowRecord{ - SFlowExtendedURLRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0, - Format: 1005, - FlowDataLength: 48, - }, - Direction: SFlowURLsrc, - URL: "http://www.sflow.org", - Host: "host1.sflow.org", - }, - SFlowExtendedUserFlow{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0, - Format: 1004, - FlowDataLength: 44, - }, - SourceCharSet: SFlowCSUTF8, - SourceUserID: "source user", - DestinationCharSet: SFlowCSUTF8, - DestinationUserID: "destination user", - }, - SFlowExtendedGatewayFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0, - Format: 1003, - FlowDataLength: 100, - }, - NextHop: []byte{0x0d, 0x0c, 0x0b, 0x0a}, - AS: 65001, - SourceAS: 123, - PeerAS: 999, - ASPathCount: 3, - ASPath: []SFlowASDestination{ - SFlowASDestination{ - Type: SFlowASSequence, - Count: 3, - Members: []uint32{123, 456, 789}, - }, - SFlowASDestination{ - Type: SFlowASSet, - Count: 3, - Members: []uint32{11111, 22222, 33333}, - }, - SFlowASDestination{ - Type: SFlowASSequence, - Count: 3, - Members: []uint32{777, 888, 999}, - }, - }, - Communities: []uint32{12, 13}, - LocalPref: 432, - }, - SFlowRawPacketFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: 0x1, - FlowDataLength: 144, - }, - HeaderProtocol: 1, - FrameLength: 390, - PayloadRemoved: 4, - HeaderLength: 0x80, - Header: gopacket.NewPacket(SFlowTestPacket2[698:826], LayerTypeEthernet, gopacket.Default), - }, - }, - }, - SFlowFlowSample{ - EnterpriseID: 0x0, - Format: 0x1, - SampleLength: 340, - SequenceNumber: 139120, - SourceIDClass: 0, - SourceIDIndex: 3, - SamplingRate: 1, - SamplePool: 139120, - Dropped: 0, - InputInterface: 3, - OutputInterface: 1073741823, - RecordCount: 4, - Records: []SFlowRecord{ - SFlowExtendedURLRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0, - Format: 1005, - FlowDataLength: 48, - }, - Direction: SFlowURLsrc, - URL: "http://www.sflow.org", - Host: "host1.sflow.org", - }, - SFlowExtendedUserFlow{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0, - Format: 1004, - FlowDataLength: 44, - }, - SourceCharSet: SFlowCSUTF8, - SourceUserID: "source user", - DestinationCharSet: SFlowCSUTF8, - DestinationUserID: "destination user", - }, - SFlowExtendedGatewayFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0, - Format: 1003, - FlowDataLength: 100, - }, - NextHop: []byte{0x0d, 0x0c, 0x0b, 0x0a}, - AS: 65001, - SourceAS: 123, - PeerAS: 999, - ASPathCount: 3, - ASPath: []SFlowASDestination{ - SFlowASDestination{ - Type: SFlowASSequence, - Count: 3, - Members: []uint32{123, 456, 789}, - }, - SFlowASDestination{ - Type: SFlowASSet, - Count: 3, - Members: []uint32{11111, 22222, 33333}, - }, - SFlowASDestination{ - Type: SFlowASSequence, - Count: 3, - Members: []uint32{777, 888, 999}, - }, - }, - Communities: []uint32{12, 13}, - LocalPref: 432, - }, - SFlowRawPacketFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: 0x1, - FlowDataLength: 84, - }, - HeaderProtocol: 1, - FrameLength: 70, - PayloadRemoved: 4, - HeaderLength: 0x42, - Header: gopacket.NewPacket(SFlowTestPacket2[1106:1174], LayerTypeEthernet, gopacket.Default), - }, - }, - }, - }, - } - if !reflect.DeepEqual(want, got) { - t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got) - } - } else { - t.Error("Application layer packet not UDP") - } -} - -func TestDecodeProcessorCounter(t *testing.T) { - p := gopacket.NewPacket(SFlowTestPacket3, LayerTypeSFlow, gopacket.Default) - - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t) - - got := p.ApplicationLayer().(*SFlowDatagram) - - want := &SFlowDatagram{ - DatagramVersion: uint32(5), - AgentAddress: []byte{0x0a, 0x14, 0x04, 0x00}, - SubAgentID: uint32(0x64), - SequenceNumber: uint32(96480), - AgentUptime: uint32(1929595000), - SampleCount: uint32(1), - CounterSamples: []SFlowCounterSample{ - SFlowCounterSample{ - Format: SFlowTypeExpandedCounterSample, - SampleLength: 0x34, - SequenceNumber: 0x0178e0, - SourceIDClass: 0x00, - SourceIDIndex: 0x01, - RecordCount: 0x01, - Records: []SFlowRecord{ - SFlowProcessorCounters{ - SFlowBaseCounterRecord: SFlowBaseCounterRecord{ - EnterpriseID: 0x0, - Format: SFlowTypeProcessorCounters, - FlowDataLength: 0x1c, - }, - FiveSecCpu: 0x05aa, - OneMinCpu: 0x055a, - FiveMinCpu: 0x0532, - TotalMemory: 0xe78d7000, - FreeMemory: 0x55e77000, - }, - }, - }, - }, - } - if !reflect.DeepEqual(want, got) { - t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got) - } -} - -func TestDecodeExtendedSwitchFlow(t *testing.T) { - p := gopacket.NewPacket(SFlowTestPacket4, LayerTypeSFlow, gopacket.Default) - - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t) - - got := p.ApplicationLayer().(*SFlowDatagram) - - want := &SFlowDatagram{ - DatagramVersion: uint32(5), - AgentAddress: []byte{0xc0, 0xa8, 0x01, 0x07}, - SubAgentID: uint32(0x00), - SequenceNumber: uint32(0x027e), - AgentUptime: uint32(0x32e0e47c), - SampleCount: uint32(1), - FlowSamples: []SFlowFlowSample{ - SFlowFlowSample{ - Format: SFlowTypeFlowSample, - SampleLength: 0x38, - SequenceNumber: 0x123, - SourceIDClass: 0x00, - SourceIDIndex: 0x1d, - SamplingRate: 0x100, - SamplePool: 0x337, - Dropped: 0x5623, - InputInterfaceFormat: 0x00, - InputInterface: 0x1d, - OutputInterfaceFormat: 0x00, - OutputInterface: 0x04, - RecordCount: 0x01, - Records: []SFlowRecord{ - SFlowExtendedSwitchFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: SFlowTypeExtendedSwitchFlow, - FlowDataLength: 0x10, - }, - IncomingVLAN: 0x03, - IncomingVLANPriority: 0x02, - OutgoingVLAN: 0x05, - OutgoingVLANPriority: 0xffffffff, - }, - }, - }, - }, - } - if !reflect.DeepEqual(want, got) { - t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got) - } -} - -func TestDecodeExtendedRouterFlow(t *testing.T) { - p := gopacket.NewPacket(SFlowTestPacket5, LayerTypeSFlow, gopacket.Default) - - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t) - - got := p.ApplicationLayer().(*SFlowDatagram) - - want := &SFlowDatagram{ - DatagramVersion: uint32(5), - AgentAddress: []byte{0xc0, 0xa8, 0x01, 0x12}, - SubAgentID: uint32(0x00), - SequenceNumber: uint32(0x027e), - AgentUptime: uint32(0x32e0e47c), - SampleCount: uint32(1), - FlowSamples: []SFlowFlowSample{ - SFlowFlowSample{ - Format: SFlowTypeFlowSample, - SampleLength: 0x34, - SequenceNumber: 0x123, - SourceIDClass: 0x00, - SourceIDIndex: 0x1d, - SamplingRate: 0x100, - SamplePool: 0x334, - Dropped: 0x5602, - InputInterfaceFormat: 0x00, - InputInterface: 0x1d, - OutputInterfaceFormat: 0x00, - OutputInterface: 0x04, - RecordCount: 0x01, - Records: []SFlowRecord{ - SFlowExtendedRouterFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: SFlowTypeExtendedRouterFlow, - FlowDataLength: 0x10, - }, - NextHop: []byte{0xc0, 0xa8, 0x01, 0x21}, - NextHopSourceMask: 0xffffffff, - NextHopDestinationMask: 0xffffff80, - }, - }, - }, - }, - } - if !reflect.DeepEqual(want, got) { - t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got) - } -} - -func TestDecodeExtendedRouterFlowIPv6(t *testing.T) { - p := gopacket.NewPacket(SFlowTestPacket8, LayerTypeSFlow, gopacket.Default) - - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t) - - got := p.ApplicationLayer().(*SFlowDatagram) - - want := &SFlowDatagram{ - DatagramVersion: uint32(5), - AgentAddress: []byte{0xc0, 0xa8, 0x01, 0x12}, - SubAgentID: uint32(0x00), - SequenceNumber: uint32(0x027e), - AgentUptime: uint32(0x32e0e47c), - SampleCount: uint32(1), - FlowSamples: []SFlowFlowSample{ - SFlowFlowSample{ - Format: SFlowTypeFlowSample, - SampleLength: 0x34, - SequenceNumber: 0x123, - SourceIDClass: 0x00, - SourceIDIndex: 0x1d, - SamplingRate: 0x100, - SamplePool: 0x334, - Dropped: 0x5602, - InputInterfaceFormat: 0x00, - InputInterface: 0x1d, - OutputInterfaceFormat: 0x00, - OutputInterface: 0x04, - RecordCount: 0x01, - Records: []SFlowRecord{ - SFlowExtendedRouterFlowRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: SFlowTypeExtendedRouterFlow, - FlowDataLength: 0x1c, - }, - NextHop: []byte{0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - NextHopSourceMask: 0xffffffff, - NextHopDestinationMask: 0xffffff80, - }, - }, - }, - }, - } - if !reflect.DeepEqual(want, got) { - t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got) - } -} - -func TestDecodeExtendedIpv4TunnelIngressFlow(t *testing.T) { - p := gopacket.NewPacket(SFlowTestPacket6, LayerTypeSFlow, gopacket.Default) - - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t) - - got := p.ApplicationLayer().(*SFlowDatagram) - - want := &SFlowDatagram{ - DatagramVersion: uint32(5), - AgentAddress: []byte{0x7f, 0x0, 0x0, 0x1}, - SubAgentID: uint32(0), - SequenceNumber: uint32(0x72), - AgentUptime: uint32(0x1bd50), - SampleCount: uint32(1), - FlowSamples: []SFlowFlowSample{ - SFlowFlowSample{ - Format: SFlowTypeFlowSample, - SampleLength: 0x48, - SequenceNumber: 0x74, - SourceIDClass: 0x0, - SourceIDIndex: 0x20003e8, - SamplingRate: 0x1, - SamplePool: 0x74, - Dropped: 0x0, - InputInterfaceFormat: 0x0, - InputInterface: 0x0, - OutputInterfaceFormat: 0x0, - OutputInterface: 0x80000001, - RecordCount: 0x1, - Records: []SFlowRecord{ - SFlowExtendedIpv4TunnelIngressRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: SFlowTypeExtendedIpv4TunnelIngressFlow, - FlowDataLength: 0x20, - }, - SFlowIpv4Record: SFlowIpv4Record{ - Length: 0x0, - Protocol: 0x2f, - IPSrc: net.IP{0xc0, 0xa8, 0x0, 0x54}, - IPDst: net.IP{0xc0, 0xa8, 0x0, 0x53}, - PortSrc: 0x0, - PortDst: 0x0, - TCPFlags: 0x0, - TOS: 0x0, - }, - }, - }, - }, - }, - } - if !reflect.DeepEqual(want, got) { - t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got) - } -} - -func TestDecodeExtendedIpv4TunnelEgressFlow(t *testing.T) { - p := gopacket.NewPacket(SFlowTestPacket7, LayerTypeSFlow, gopacket.Default) - - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeSFlow}, t) - - got := p.ApplicationLayer().(*SFlowDatagram) - - want := &SFlowDatagram{ - DatagramVersion: uint32(5), - AgentAddress: []byte{0x7f, 0x0, 0x0, 0x1}, - SubAgentID: uint32(1), - SequenceNumber: uint32(0x12), - AgentUptime: uint32(0x4268), - SampleCount: uint32(1), - FlowSamples: []SFlowFlowSample{ - SFlowFlowSample{ - Format: SFlowTypeFlowSample, - SampleLength: 0x48, - SequenceNumber: 0x12, - SourceIDClass: 0x0, - SourceIDIndex: 0x20003e9, - SamplingRate: 0x1, - SamplePool: 0x12, - Dropped: 0x0, - InputInterfaceFormat: 0x0, - InputInterface: 0x6c, - OutputInterfaceFormat: 0x0, - OutputInterface: 0x80000001, - RecordCount: 0x1, - Records: []SFlowRecord{ - SFlowExtendedIpv4TunnelEgressRecord{ - SFlowBaseFlowRecord: SFlowBaseFlowRecord{ - EnterpriseID: 0x0, - Format: SFlowTypeExtendedIpv4TunnelEgressFlow, - FlowDataLength: 0x20, - }, - SFlowIpv4Record: SFlowIpv4Record{ - Length: 0x0, - Protocol: 0x0, - IPSrc: net.IP{0x0, 0x0, 0x0, 0x0}, - IPDst: net.IP{0xc0, 0xa8, 0x0, 0x54}, - PortSrc: 0x0, - PortDst: 0x0, - TCPFlags: 0x0, - TOS: 0x0, - }, - }, - }, - }, - }, - } - if !reflect.DeepEqual(want, got) { - t.Errorf("SFlow layer mismatch, \nwant:\n\n%#v\ngot:\n\n\n%#v\n\n", want, got) - } -} - -func BenchmarkDecodeSFlowPacket1(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(SFlowTestPacket1, LinkTypeEthernet, gopacket.NoCopy) - } -} - -func BenchmarkDecodeSFlowPacket2(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(SFlowTestPacket2, LinkTypeEthernet, gopacket.NoCopy) - } -} - -func BenchmarkDecodeSFlowPacket3(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(SFlowTestPacket3, LinkTypeEthernet, gopacket.NoCopy) - } -} - -func BenchmarkDecodeSFlowPacket4(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(SFlowTestPacket4, LinkTypeEthernet, gopacket.NoCopy) - } -} - -func BenchmarkDecodeSFlowLayerPacket1(b *testing.B) { - var sflow SFlowDatagram - for i := 0; i < b.N; i++ { - sflow.DecodeFromBytes(SFlowTestPacket1[ /*eth*/ 14+ /*ipv4*/ 20+ /*udp*/ 8:], gopacket.NilDecodeFeedback) - } -} - -func BenchmarkDecodeSFlowLayerPacket2(b *testing.B) { - var sflow SFlowDatagram - for i := 0; i < b.N; i++ { - sflow.DecodeFromBytes(SFlowTestPacket2[ /*eth*/ 14+ /*ipv4*/ 20+ /*udp*/ 8:], gopacket.NilDecodeFeedback) - } -} diff --git a/vendor/github.com/google/gopacket/layers/tcp_test.go b/vendor/github.com/google/gopacket/layers/tcp_test.go deleted file mode 100644 index 56a6aaa..0000000 --- a/vendor/github.com/google/gopacket/layers/tcp_test.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2016, Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package layers - -import ( - "testing" - - "github.com/google/gopacket" -) - -func TestTCPOptionKindString(t *testing.T) { - testData := []struct { - o *TCPOption - s string - }{ - {&TCPOption{ - OptionType: TCPOptionKindNop, - OptionLength: 1, - }, - "TCPOption(NOP:)"}, - {&TCPOption{ - OptionType: TCPOptionKindMSS, - OptionLength: 4, - OptionData: []byte{0x12, 0x34}, - }, - "TCPOption(MSS:4660 0x1234)"}, - {&TCPOption{ - OptionType: TCPOptionKindTimestamps, - OptionLength: 10, - OptionData: []byte{0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01}, - }, - "TCPOption(Timestamps:2/1 0x0000000200000001)"}} - - for _, tc := range testData { - if s := tc.o.String(); s != tc.s { - t.Errorf("expected %#v string to be %s, got %s", tc.o, tc.s, s) - } - } -} - -func TestTCPSerializePadding(t *testing.T) { - tcp := &TCP{} - tcp.Options = append(tcp.Options, TCPOption{ - OptionType: TCPOptionKindNop, - OptionLength: 1, - }) - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{FixLengths: true} - err := gopacket.SerializeLayers(buf, opts, tcp) - if err != nil { - t.Fatal(err) - } - if len(buf.Bytes())%4 != 0 { - t.Errorf("TCP data of len %d not padding to 32 bit boundary", len(buf.Bytes())) - } -} diff --git a/vendor/github.com/google/gopacket/layers/tcpip_test.go b/vendor/github.com/google/gopacket/layers/tcpip_test.go deleted file mode 100644 index c002e84..0000000 --- a/vendor/github.com/google/gopacket/layers/tcpip_test.go +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright 2014, Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package layers - -import ( - "github.com/google/gopacket" - "net" - "testing" -) - -const ( - ipv4UDPChecksum = uint16(0xbc5f) // Wireshark - ipv6UDPChecksumWithIPv6DstOpts = uint16(0x4d21) // Wireshark - ipv6UDPChecksumJumbogram = uint16(0xcda8) -) - -func createIPv4ChecksumTestLayer() (ip4 *IPv4) { - ip4 = &IPv4{} - ip4.Version = 4 - ip4.TTL = 64 - ip4.SrcIP = net.ParseIP("192.0.2.1") - ip4.DstIP = net.ParseIP("198.51.100.1") - return -} - -func createIPv6ChecksumTestLayer() (ip6 *IPv6) { - ip6 = &IPv6{} - ip6.Version = 6 - ip6.NextHeader = IPProtocolNoNextHeader - ip6.HopLimit = 64 - ip6.SrcIP = net.ParseIP("2001:db8::1") - ip6.DstIP = net.ParseIP("2001:db8::2") - return -} - -func createIPv6DestinationChecksumTestLayer() (dst *IPv6Destination) { - tlv := &IPv6DestinationOption{} - tlv.OptionType = 0x01 //PadN - tlv.OptionData = []byte{0x00, 0x00, 0x00, 0x00} - dst = &IPv6Destination{} - dst.Options = append(dst.Options, tlv) - dst.NextHeader = IPProtocolNoNextHeader - return -} - -func createUDPChecksumTestLayer() (udp *UDP) { - udp = &UDP{} - udp.SrcPort = UDPPort(12345) - udp.DstPort = UDPPort(9999) - return -} - -func TestIPv4UDPChecksum(t *testing.T) { - var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 2) - var u *UDP - var err error - - ip4 := createIPv4ChecksumTestLayer() - ip4.Protocol = IPProtocolUDP - serialize = append(serialize, ip4) - - udp := createUDPChecksumTestLayer() - udp.SetNetworkLayerForChecksum(ip4) - serialize = append(serialize, udp) - - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true} - err = gopacket.SerializeLayers(buf, opts, serialize...) - if err != nil { - t.Fatal(err) - } - - p := gopacket.NewPacket(buf.Bytes(), LinkTypeRaw, gopacket.Default) - if p.ErrorLayer() != nil { - t.Fatal("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeIPv4, LayerTypeUDP}, t) - - if l, ok := p.Layer(LayerTypeUDP).(*UDP); !ok { - t.Fatal("No UDP layer type found in packet") - } else { - u = l - } - got := u.Checksum - want := ipv4UDPChecksum - if got != want { - t.Errorf("Bad checksum:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want) - } -} - -func TestIPv6UDPChecksumWithIPv6DstOpts(t *testing.T) { - var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 3) - var u *UDP - var err error - - ip6 := createIPv6ChecksumTestLayer() - ip6.NextHeader = IPProtocolIPv6Destination - serialize = append(serialize, ip6) - - dst := createIPv6DestinationChecksumTestLayer() - dst.NextHeader = IPProtocolUDP - serialize = append(serialize, dst) - - udp := createUDPChecksumTestLayer() - udp.SetNetworkLayerForChecksum(ip6) - serialize = append(serialize, udp) - - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true} - err = gopacket.SerializeLayers(buf, opts, serialize...) - if err != nil { - t.Fatal(err) - } - - p := gopacket.NewPacket(buf.Bytes(), LinkTypeRaw, gopacket.Default) - if p.ErrorLayer() != nil { - t.Fatal("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6Destination, LayerTypeUDP}, t) - - if l, ok := p.Layer(LayerTypeUDP).(*UDP); !ok { - t.Fatal("No UDP layer type found in packet") - } else { - u = l - } - got := u.Checksum - want := ipv6UDPChecksumWithIPv6DstOpts - if got != want { - t.Errorf("Bad checksum:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want) - } -} - -func TestIPv6JumbogramUDPChecksum(t *testing.T) { - var serialize []gopacket.SerializableLayer = make([]gopacket.SerializableLayer, 0, 4) - var u *UDP - var err error - - ip6 := &IPv6{} - ip6.Version = 6 - ip6.NextHeader = IPProtocolUDP - ip6.HopLimit = 64 - ip6.SrcIP = net.ParseIP("2001:db8::1") - ip6.DstIP = net.ParseIP("2001:db8::2") - serialize = append(serialize, ip6) - - udp := &UDP{} - udp.SrcPort = UDPPort(12345) - udp.DstPort = UDPPort(9999) - udp.SetNetworkLayerForChecksum(ip6) - serialize = append(serialize, udp) - - payload := make([]byte, ipv6MaxPayloadLength+1) - for i := range payload { - payload[i] = 0xfe - } - serialize = append(serialize, gopacket.Payload(payload)) - - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true} - err = gopacket.SerializeLayers(buf, opts, serialize...) - if err != nil { - t.Fatal(err) - } - - p := gopacket.NewPacket(buf.Bytes(), LinkTypeRaw, gopacket.Default) - if p.ErrorLayer() != nil { - t.Fatal("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeIPv6, LayerTypeIPv6HopByHop, LayerTypeUDP, gopacket.LayerTypePayload}, t) - - if l, ok := p.Layer(LayerTypeUDP).(*UDP); !ok { - t.Fatal("No UDP layer type found in packet") - } else { - u = l - } - got := u.Checksum - want := ipv6UDPChecksumJumbogram - if got != want { - t.Errorf("Bad checksum:\ngot:\n%#v\n\nwant:\n%#v\n\n", got, want) - } -} diff --git a/vendor/github.com/google/gopacket/layers/udp_test.go b/vendor/github.com/google/gopacket/layers/udp_test.go deleted file mode 100644 index e71236c..0000000 --- a/vendor/github.com/google/gopacket/layers/udp_test.go +++ /dev/null @@ -1,372 +0,0 @@ -// Copyright 2012, Google, Inc. All rights reserved. -// Copyright 2009-2011 Andreas Krennmair. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package layers - -import ( - "reflect" - "testing" - - "github.com/google/gopacket" -) - -// testUDPPacketDNS is the packet: -// 10:33:07.883637 IP 172.16.255.1.53 > 172.29.20.15.35181: 47320 7/0/0 MX ALT2.ASPMX.L.GOOGLE.com. 20, MX ASPMX2.GOOGLEMAIL.com. 30, MX ASPMX3.GOOGLEMAIL.com. 30, MX ASPMX4.GOOGLEMAIL.com. 30, MX ASPMX5.GOOGLEMAIL.com. 30, MX ASPMX.L.GOOGLE.com. 10, MX ALT1.ASPMX.L.GOOGLE.com. 20 (202) -// 0x0000: 24be 0527 0b17 001f cab3 75c0 0800 4500 $..'......u...E. -// 0x0010: 00e6 68cf 0000 3f11 a6f9 ac10 ff01 ac1d ..h...?......... -// 0x0020: 140f 0035 896d 00d2 754a b8d8 8180 0001 ...5.m..uJ...... -// 0x0030: 0007 0000 0000 0478 6b63 6403 636f 6d00 .......xkcd.com. -// 0x0040: 000f 0001 c00c 000f 0001 0000 0258 0018 .............X.. -// 0x0050: 0014 0441 4c54 3205 4153 504d 5801 4c06 ...ALT2.ASPMX.L. -// 0x0060: 474f 4f47 4c45 c011 c00c 000f 0001 0000 GOOGLE.......... -// 0x0070: 0258 0016 001e 0641 5350 4d58 320a 474f .X.....ASPMX2.GO -// 0x0080: 4f47 4c45 4d41 494c c011 c00c 000f 0001 OGLEMAIL........ -// 0x0090: 0000 0258 000b 001e 0641 5350 4d58 33c0 ...X.....ASPMX3. -// 0x00a0: 53c0 0c00 0f00 0100 0002 5800 0b00 1e06 S.........X..... -// 0x00b0: 4153 504d 5834 c053 c00c 000f 0001 0000 ASPMX4.S........ -// 0x00c0: 0258 000b 001e 0641 5350 4d58 35c0 53c0 .X.....ASPMX5.S. -// 0x00d0: 0c00 0f00 0100 0002 5800 0400 0ac0 2dc0 ........X.....-. -// 0x00e0: 0c00 0f00 0100 0002 5800 0900 1404 414c ........X.....AL -// 0x00f0: 5431 c02d T1.- -// Packet generated by doing DNS query for 'xkcd.com' -var testUDPPacketDNS = []byte{ - 0x24, 0xbe, 0x05, 0x27, 0x0b, 0x17, 0x00, 0x1f, 0xca, 0xb3, 0x75, 0xc0, 0x08, 0x00, 0x45, 0x00, - 0x00, 0xe6, 0x68, 0xcf, 0x00, 0x00, 0x3f, 0x11, 0xa6, 0xf9, 0xac, 0x10, 0xff, 0x01, 0xac, 0x1d, - 0x14, 0x0f, 0x00, 0x35, 0x89, 0x6d, 0x00, 0xd2, 0x75, 0x4a, 0xb8, 0xd8, 0x81, 0x80, 0x00, 0x01, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x04, 0x78, 0x6b, 0x63, 0x64, 0x03, 0x63, 0x6f, 0x6d, 0x00, - 0x00, 0x0f, 0x00, 0x01, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x02, 0x58, 0x00, 0x18, - 0x00, 0x14, 0x04, 0x41, 0x4c, 0x54, 0x32, 0x05, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x01, 0x4c, 0x06, - 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0xc0, 0x11, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, - 0x02, 0x58, 0x00, 0x16, 0x00, 0x1e, 0x06, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x32, 0x0a, 0x47, 0x4f, - 0x4f, 0x47, 0x4c, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0xc0, 0x11, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, - 0x00, 0x00, 0x02, 0x58, 0x00, 0x0b, 0x00, 0x1e, 0x06, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x33, 0xc0, - 0x53, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x02, 0x58, 0x00, 0x0b, 0x00, 0x1e, 0x06, - 0x41, 0x53, 0x50, 0x4d, 0x58, 0x34, 0xc0, 0x53, 0xc0, 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, - 0x02, 0x58, 0x00, 0x0b, 0x00, 0x1e, 0x06, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x35, 0xc0, 0x53, 0xc0, - 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x02, 0x58, 0x00, 0x04, 0x00, 0x0a, 0xc0, 0x2d, 0xc0, - 0x0c, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x02, 0x58, 0x00, 0x09, 0x00, 0x14, 0x04, 0x41, 0x4c, - 0x54, 0x31, 0xc0, 0x2d, -} - -func TestUDPPacketDNS(t *testing.T) { - p := gopacket.NewPacket(testUDPPacketDNS, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeDNS}, t) - if got, ok := p.TransportLayer().(*UDP); ok { - want := &UDP{ - BaseLayer: BaseLayer{ - Contents: []byte{0x0, 0x35, 0x89, 0x6d, 0x0, 0xd2, 0x75, 0x4a}, - Payload: []byte{0xb8, 0xd8, 0x81, 0x80, 0x0, 0x1, 0x0, - 0x7, 0x0, 0x0, 0x0, 0x0, 0x4, 0x78, 0x6b, 0x63, 0x64, 0x3, 0x63, 0x6f, - 0x6d, 0x0, 0x0, 0xf, 0x0, 0x1, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, - 0x2, 0x58, 0x0, 0x18, 0x0, 0x14, 0x4, 0x41, 0x4c, 0x54, 0x32, 0x5, 0x41, - 0x53, 0x50, 0x4d, 0x58, 0x1, 0x4c, 0x6, 0x47, 0x4f, 0x4f, 0x47, 0x4c, - 0x45, 0xc0, 0x11, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, 0x58, 0x0, - 0x16, 0x0, 0x1e, 0x6, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x32, 0xa, 0x47, 0x4f, - 0x4f, 0x47, 0x4c, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0xc0, 0x11, 0xc0, 0xc, - 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, 0x58, 0x0, 0xb, 0x0, 0x1e, 0x6, 0x41, - 0x53, 0x50, 0x4d, 0x58, 0x33, 0xc0, 0x53, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, - 0x0, 0x0, 0x2, 0x58, 0x0, 0xb, 0x0, 0x1e, 0x6, 0x41, 0x53, 0x50, 0x4d, - 0x58, 0x34, 0xc0, 0x53, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, - 0x58, 0x0, 0xb, 0x0, 0x1e, 0x6, 0x41, 0x53, 0x50, 0x4d, 0x58, 0x35, 0xc0, - 0x53, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, 0x58, 0x0, 0x4, 0x0, - 0xa, 0xc0, 0x2d, 0xc0, 0xc, 0x0, 0xf, 0x0, 0x1, 0x0, 0x0, 0x2, 0x58, 0x0, - 0x9, 0x0, 0x14, 0x4, 0x41, 0x4c, 0x54, 0x31, 0xc0, 0x2d}, - }, - SrcPort: 53, - DstPort: 35181, - Length: 210, - Checksum: 30026, - sPort: []byte{0x0, 0x35}, - dPort: []byte{0x89, 0x6d}, - } - if !reflect.DeepEqual(got, want) { - t.Errorf("UDP packet mismatch:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want) - } - } else { - t.Error("Transport layer packet not UDP") - } -} - -func loadDNS(dnspacket []byte, t *testing.T) *DNS { - p := gopacket.NewPacket(dnspacket, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, - LayerTypeUDP, LayerTypeDNS}, t) - - dnsL := p.Layer(LayerTypeDNS) - if dnsL == nil { - t.Error("No DNS Layer found") - } - - dns, ok := dnsL.(*DNS) - if !ok { - return nil - } - return dns -} - -var testDNSQueryA = []byte{ - 0xfe, 0x54, 0x00, 0x3e, 0x00, 0x96, 0x52, 0x54, /* .T.>..RT */ - 0x00, 0xbd, 0x1c, 0x70, 0x08, 0x00, 0x45, 0x00, /* ...p..E. */ - 0x00, 0x3c, 0x22, 0xe0, 0x00, 0x00, 0x40, 0x11, /* .<"...@. */ - 0xe2, 0x38, 0xc0, 0xa8, 0x7a, 0x46, 0xc0, 0xa8, /* .8..zF.. */ - 0x7a, 0x01, 0xc3, 0x35, 0x00, 0x35, 0x00, 0x28, /* z..5.5.( */ - 0x75, 0xd2, 0x52, 0x41, 0x01, 0x00, 0x00, 0x01, /* u.RA.... */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x77, /* .......w */ - 0x77, 0x77, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, /* ww.googl */ - 0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x01, /* e.com... */ - 0x00, 0x01, /* .. */ -} - -func TestDNSQueryA(t *testing.T) { - dns := loadDNS(testDNSQueryA, t) - if dns == nil { - t.Fatal("Failed to get a pointer to DNS struct") - } - - if uint16(len(dns.Questions)) != dns.QDCount { - t.Fatal("Invalid query decoding, not the right number of questions") - } - - if string(dns.Questions[0].Name) != "www.google.com" { - t.Errorf("Invalid query decoding, expecting 'www.google.com', got '%s'", - dns.Questions[0].Name) - } - if dns.Questions[0].Class != DNSClassIN { - t.Errorf("Invalid query decoding, expecting Class IN, got '%d'", - dns.Questions[0].Class) - } - - if dns.Questions[0].Type != DNSTypeA { - t.Errorf("Invalid query decoding, expecting Type A, got '%d'", - dns.Questions[0].Type) - } -} - -var testDNSRRA = []byte{ - 0x52, 0x54, 0x00, 0xbd, 0x1c, 0x70, 0xfe, 0x54, /* RT...p.T */ - 0x00, 0x3e, 0x00, 0x96, 0x08, 0x00, 0x45, 0x00, /* .>....E. */ - 0x01, 0x24, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, /* .$..@.@. */ - 0xc4, 0x30, 0xc0, 0xa8, 0x7a, 0x01, 0xc0, 0xa8, /* .0..z... */ - 0x7a, 0x46, 0x00, 0x35, 0xc3, 0x35, 0x01, 0x10, /* zF.5.5.. */ - 0x76, 0xba, 0x52, 0x41, 0x81, 0x80, 0x00, 0x01, /* v.RA.... */ - 0x00, 0x06, 0x00, 0x04, 0x00, 0x04, 0x03, 0x77, /* .......w */ - 0x77, 0x77, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, /* ww.googl */ - 0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x01, /* e.com... */ - 0x00, 0x01, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* ........ */ - 0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */ - 0xc3, 0x67, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* .g...... */ - 0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */ - 0xc3, 0x68, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* .h...... */ - 0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */ - 0xc3, 0x69, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* .i...... */ - 0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */ - 0xc3, 0x6a, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* .j...... */ - 0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */ - 0xc3, 0x93, 0xc0, 0x0c, 0x00, 0x01, 0x00, 0x01, /* ........ */ - 0x00, 0x00, 0x01, 0x2c, 0x00, 0x04, 0x4a, 0x7d, /* ...,..J} */ - 0xc3, 0x63, 0xc0, 0x10, 0x00, 0x02, 0x00, 0x01, /* .c...... */ - 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, /* .......n */ - 0x73, 0x32, 0xc0, 0x10, 0xc0, 0x10, 0x00, 0x02, /* s2...... */ - 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, /* ........ */ - 0x03, 0x6e, 0x73, 0x33, 0xc0, 0x10, 0xc0, 0x10, /* .ns3.... */ - 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */ - 0x00, 0x06, 0x03, 0x6e, 0x73, 0x31, 0xc0, 0x10, /* ...ns1.. */ - 0xc0, 0x10, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, /* ........ */ - 0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, 0x73, 0x34, /* .....ns4 */ - 0xc0, 0x10, 0xc0, 0xb0, 0x00, 0x01, 0x00, 0x01, /* ........ */ - 0x00, 0x02, 0xa3, 0x00, 0x00, 0x04, 0xd8, 0xef, /* ........ */ - 0x20, 0x0a, 0xc0, 0x8c, 0x00, 0x01, 0x00, 0x01, /* ....... */ - 0x00, 0x02, 0xa3, 0x00, 0x00, 0x04, 0xd8, 0xef, /* ........ */ - 0x22, 0x0a, 0xc0, 0x9e, 0x00, 0x01, 0x00, 0x01, /* "....... */ - 0x00, 0x02, 0xa3, 0x00, 0x00, 0x04, 0xd8, 0xef, /* ........ */ - 0x24, 0x0a, 0xc0, 0xc2, 0x00, 0x01, 0x00, 0x01, /* $....... */ - 0x00, 0x02, 0xa3, 0x00, 0x00, 0x04, 0xd8, 0xef, /* ........ */ - 0x26, 0x0a, /* &. */ -} - -func TestDNSRRA(t *testing.T) { - dns := loadDNS(testDNSRRA, t) - if dns == nil { - t.Fatal("Failed to get a pointer to DNS struct") - return - } - - if uint16(len(dns.Questions)) != dns.QDCount { - t.Fatal("Invalid query decoding, not the right number of questions") - } else if uint16(len(dns.Answers)) != dns.ANCount { - t.Fatal("Invalid query decoding, not the right number of answers") - } else if uint16(len(dns.Authorities)) != dns.NSCount { - t.Fatal("Invalid query decoding, not the right number of authorities") - } else if uint16(len(dns.Additionals)) != dns.ARCount { - t.Fatal("Invalid query decoding, not the right number of additionals info") - } - - if string(dns.Questions[0].Name) != "www.google.com" { - t.Errorf("Invalid query decoding, expecting 'www.google.com', got '%s'", - dns.Questions[0].Name) - } - if string(dns.Answers[0].Name) != "www.google.com" { - t.Errorf("Invalid query decoding, expecting 'www.google.com', got '%d'", - dns.Questions[0].Class) - } - if dns.Answers[0].Class != DNSClassIN { - t.Errorf("Invalid query decoding, expecting Class IN, got '%d'", - dns.Questions[0].Class) - } - if dns.Answers[0].Type != DNSTypeA { - t.Errorf("Invalid query decoding, expecting Type A, got '%d'", - dns.Questions[0].Type) - } - if !dns.Answers[0].IP.Equal([]byte{74, 125, 195, 103}) { - t.Errorf("Invalid query decoding, invalid IP address,"+ - " expecting '74.125.195.103', got '%s'", - dns.Answers[0].IP.String()) - } - if len(dns.Answers) != 6 { - t.Errorf("No correct number of answers, expecting 6, go '%d'", - len(dns.Answers)) - } - if len(dns.Authorities) != 4 { - t.Errorf("No correct number of answers, expecting 4, go '%d'", - len(dns.Answers)) - } - if len(dns.Additionals) != 4 { - t.Errorf("No correct number of answers, expecting 4, go '%d'", - len(dns.Answers)) - } else { - for i, want := range []string{ - "ns1.google.com", - "ns2.google.com", - "ns3.google.com", - "ns4.google.com", - } { - if got := string(dns.Additionals[i].Name); got != want { - t.Errorf("got %q want %q", got, want) - } - } - } -} - -var testDNSAAAA = []byte{ - 0x52, 0x54, 0x00, 0xbd, 0x1c, 0x70, 0xfe, 0x54, /* RT...p.T */ - 0x00, 0x3e, 0x00, 0x96, 0x08, 0x00, 0x45, 0x00, /* .>....E. */ - 0x00, 0xe0, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, /* ....@.@. */ - 0xc4, 0x74, 0xc0, 0xa8, 0x7a, 0x01, 0xc0, 0xa8, /* .t..z... */ - 0x7a, 0x46, 0x00, 0x35, 0xdb, 0x13, 0x00, 0xcc, /* zF.5.... */ - 0x76, 0x76, 0xf3, 0x03, 0x81, 0x80, 0x00, 0x01, /* vv...... */ - 0x00, 0x01, 0x00, 0x04, 0x00, 0x04, 0x03, 0x77, /* .......w */ - 0x77, 0x77, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, /* ww.googl */ - 0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x1c, /* e.com... */ - 0x00, 0x01, 0xc0, 0x0c, 0x00, 0x1c, 0x00, 0x01, /* ........ */ - 0x00, 0x00, 0x01, 0x2c, 0x00, 0x10, 0x2a, 0x00, /* ...,..*. */ - 0x14, 0x50, 0x40, 0x0c, 0x0c, 0x01, 0x00, 0x00, /* .P@..... */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0xc0, 0x10, /* .....i.. */ - 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */ - 0x00, 0x06, 0x03, 0x6e, 0x73, 0x34, 0xc0, 0x10, /* ...ns4.. */ - 0xc0, 0x10, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, /* ........ */ - 0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, 0x73, 0x32, /* .....ns2 */ - 0xc0, 0x10, 0xc0, 0x10, 0x00, 0x02, 0x00, 0x01, /* ........ */ - 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, 0x03, 0x6e, /* .......n */ - 0x73, 0x31, 0xc0, 0x10, 0xc0, 0x10, 0x00, 0x02, /* s1...... */ - 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, 0x00, 0x06, /* ........ */ - 0x03, 0x6e, 0x73, 0x33, 0xc0, 0x10, 0xc0, 0x6c, /* .ns3...l */ - 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */ - 0x00, 0x04, 0xd8, 0xef, 0x20, 0x0a, 0xc0, 0x5a, /* .... ..Z */ - 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */ - 0x00, 0x04, 0xd8, 0xef, 0x22, 0x0a, 0xc0, 0x7e, /* ...."..~ */ - 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */ - 0x00, 0x04, 0xd8, 0xef, 0x24, 0x0a, 0xc0, 0x48, /* ....$..H */ - 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0xa3, 0x00, /* ........ */ - 0x00, 0x04, 0xd8, 0xef, 0x26, 0x0a, /* ....&. */ -} - -func TestDNSAAAA(t *testing.T) { - dns := loadDNS(testDNSAAAA, t) - if dns == nil { - t.Error("Failed to get a pointer to DNS struct") - return - } - - if len(dns.Questions) != 1 { - t.Error("Invalid number of question") - return - } - if dns.Questions[0].Type != DNSTypeAAAA { - t.Errorf("Invalid question, Type is not AAAA, found %d", - dns.Questions[0].Type) - } - - if len(dns.Answers) != 1 { - t.Error("Invalid number of answers") - } - if !dns.Answers[0].IP.Equal([]byte{0x2a, 0x00, 0x14, 0x50, 0x40, - 0x0c, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69}) { - t.Error("Invalid IP address, found ", - dns.Answers[0].IP.String()) - } -} - -var testDNSMXSOA = []byte{ - 0x52, 0x54, 0x00, 0xbd, 0x1c, 0x70, 0xfe, 0x54, /* RT...p.T */ - 0x00, 0x3e, 0x00, 0x96, 0x08, 0x00, 0x45, 0x00, /* .>....E. */ - 0x00, 0x6e, 0x00, 0x00, 0x40, 0x00, 0x40, 0x11, /* .n..@.@. */ - 0xc4, 0xe6, 0xc0, 0xa8, 0x7a, 0x01, 0xc0, 0xa8, /* ....z... */ - 0x7a, 0x46, 0x00, 0x35, 0x9c, 0x60, 0x00, 0x5a, /* zF.5.`.Z */ - 0x76, 0x04, 0xfc, 0x7a, 0x81, 0x80, 0x00, 0x01, /* v..z.... */ - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x77, /* .......w */ - 0x77, 0x77, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, /* ww.googl */ - 0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x0f, /* e.com... */ - 0x00, 0x01, 0xc0, 0x10, 0x00, 0x06, 0x00, 0x01, /* ........ */ - 0x00, 0x00, 0x00, 0x3c, 0x00, 0x26, 0x03, 0x6e, /* ...<.&.n */ - 0x73, 0x31, 0xc0, 0x10, 0x09, 0x64, 0x6e, 0x73, /* s1...dns */ - 0x2d, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0xc0, 0x10, /* -admin.. */ - 0x00, 0x17, 0x9f, 0x64, 0x00, 0x00, 0x1c, 0x20, /* ...d... */ - 0x00, 0x00, 0x07, 0x08, 0x00, 0x12, 0x75, 0x00, /* ......u. */ - 0x00, 0x00, 0x01, 0x2c, /* ..., */ -} - -func TestDNSMXSOA(t *testing.T) { - dns := loadDNS(testDNSMXSOA, t) - if dns == nil { - t.Error("Failed to get a pointer to DNS struct") - return - } - - if len(dns.Authorities) != 1 { - t.Error("Invalid number of authoritative answers, found ", - len(dns.Authorities)) - return - } -} - -func BenchmarkDecodeDNS(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testDNSQueryA, LinkTypeEthernet, gopacket.NoCopy) - } -} -func BenchmarkDecodeDNSLayer(b *testing.B) { - var dns DNS - for i := 0; i < b.N; i++ { - dns.DecodeFromBytes(testDNSAAAA[ /*eth*/ 14+ /*ipv4*/ 20+ /*udp*/ 8:], gopacket.NilDecodeFeedback) - } -} -func TestDNSDoesNotMalloc(t *testing.T) { - var dns DNS - if n := testing.AllocsPerRun(1000, func() { - if err := dns.DecodeFromBytes(testDNSAAAA[ /*eth*/ 14+ /*ipv4*/ 20+ /*udp*/ 8:], gopacket.NilDecodeFeedback); err != nil { - t.Fatal(err) - } - }); n > 0 { - t.Error(n, "mallocs decoding DNS") - } -} diff --git a/vendor/github.com/google/gopacket/layers/usb_test.go b/vendor/github.com/google/gopacket/layers/usb_test.go deleted file mode 100644 index 35e9c70..0000000 --- a/vendor/github.com/google/gopacket/layers/usb_test.go +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2014, Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package layers - -import ( - _ "fmt" - "github.com/google/gopacket" - "reflect" - "testing" -) - -// Generator python layers/test_creator.py --link_type USB --name USB dongle.pcap -// http://wiki.wireshark.org/SampleCaptures#Sample_Captures - -// testPacketUSB0 is the packet: -// 02:41:04.689546 INTERRUPT COMPLETE to 2:1:1 -// 0x0000: 0038 4a3b 0088 ffff 4301 8101 0200 2d00 .8J;....C.....-. -// 0x0010: c0d3 5b50 0000 0000 8a85 0a00 0000 0000 ..[P............ -// 0x0020: 0100 0000 0100 0000 0000 0000 0000 0000 ................ -// 0x0030: 8000 0000 0000 0000 0002 0000 0000 0000 ................ -// 0x0040: 04 . -var testPacketUSB0 = []byte{ - 0x00, 0x38, 0x4a, 0x3b, 0x00, 0x88, 0xff, 0xff, 0x43, 0x01, 0x81, 0x01, 0x02, 0x00, 0x2d, 0x00, - 0xc0, 0xd3, 0x5b, 0x50, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x85, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, -} - -func TestPacketUSB0(t *testing.T) { - p := gopacket.NewPacket(testPacketUSB0, LinkTypeLinuxUSB, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeUSB, LayerTypeUSBInterrupt}, t) - - if got, ok := p.Layer(LayerTypeUSB).(*USB); ok { - want := &USB{ - BaseLayer: BaseLayer{ - Contents: []uint8{0x0, 0x38, 0x4a, 0x3b, 0x0, 0x88, 0xff, 0xff, 0x43, 0x1, 0x81, 0x1, 0x2, 0x0, 0x2d, 0x0, 0xc0, 0xd3, 0x5b, 0x50, 0x0, 0x0, 0x0, 0x0, 0x8a, 0x85, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0}, - Payload: []uint8{0x4}, - }, - ID: 0xffff88003b4a3800, - EventType: USBEventTypeComplete, - TransferType: USBTransportTypeInterrupt, - Direction: 0x1, - EndpointNumber: 0x1, - DeviceAddress: 0x1, - BusID: 0x2, - TimestampSec: 1348195264, - TimestampUsec: 689546, - Setup: false, - Data: true, - Status: 0, - UrbLength: 0x1, - UrbDataLength: 0x1, - } - - if !reflect.DeepEqual(got, want) { - t.Errorf("USB packet processing failed:\ngot :\n%#v\n\nwant :\n%#v\n\n", got, want) - } - } - -} -func BenchmarkDecodePacketUSB0(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketUSB0, LinkTypeLinuxUSB, gopacket.NoCopy) - } -} diff --git a/vendor/github.com/google/gopacket/layers/vrrp_test.go b/vendor/github.com/google/gopacket/layers/vrrp_test.go deleted file mode 100644 index bc6b7e4..0000000 --- a/vendor/github.com/google/gopacket/layers/vrrp_test.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2016 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. -package layers - -import ( - "github.com/google/gopacket" - "testing" -) - -// vrrpPacketPriority100 is the packet: -// 06:12:21.813317 IP 192.168.0.30 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 100, authtype none, intvl 1s, length 20 -// 0x0000: 0100 5e00 0012 0000 5e00 0101 0800 45c0 ..^.....^.....E. -// 0x0010: 0028 0000 0000 ff70 19cd c0a8 001e e000 .(.....p........ -// 0x0020: 0012 2101 6401 0001 ba52 c0a8 0001 0000 ..!.d....R...... -// 0x0030: 0000 0000 0000 0000 0000 0000 ............ -var vrrpPacketPriority100 = []byte{ - 0x01, 0x00, 0x5e, 0x00, 0x00, 0x12, 0x00, 0x00, 0x5e, 0x00, 0x01, 0x01, 0x08, 0x00, 0x45, 0xc0, - 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0xff, 0x70, 0x19, 0xcd, 0xc0, 0xa8, 0x00, 0x1e, 0xe0, 0x00, - 0x00, 0x12, 0x21, 0x01, 0x64, 0x01, 0x00, 0x01, 0xba, 0x52, 0xc0, 0xa8, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -} - -func TestVRRPPacketPacket0(t *testing.T) { - p := gopacket.NewPacket(vrrpPacketPriority100, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeVRRP}, t) - - // Version=2 Type=VRRPv2 Advertisement VirtualRtrID=1 Priority=100 - vrrp := p.Layer(LayerTypeVRRP).(*VRRPv2) - if vrrp.Version != 2 { - t.Fatalf("Unable to decode VRRPv2 version. Received %d, expected %d", vrrp.Version, 2) - } - - if vrrp.Type != 1 { - t.Fatalf("Unable to decode VRRPv2 type. Received %d, expected %d", vrrp.Type, 1) - } - - if vrrp.Priority != 100 { - t.Fatalf("Unable to decode VRRPv2 priority. Received %d, expected %d", vrrp.Priority, 100) - } - - if vrrp.Checksum != 47698 { - t.Fatalf("Unable to decode VRRPv2 checksum. Received %d, expected %d", vrrp.Checksum, 47698) - } -} -func BenchmarkDecodeVRRPPacket0(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(vrrpPacketPriority100, LayerTypeEthernet, gopacket.NoCopy) - } -} diff --git a/vendor/github.com/google/gopacket/layers/vxlan_test.go b/vendor/github.com/google/gopacket/layers/vxlan_test.go deleted file mode 100644 index a02d934..0000000 --- a/vendor/github.com/google/gopacket/layers/vxlan_test.go +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2016 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package layers - -import ( - "github.com/google/gopacket" - "reflect" - "testing" -) - -// VXLAN is specifed in RFC 7348 -// 0 1 2 3 -// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -// 0 8 16 24 32 -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// |G|R|R|R|I|R|R|R|R|D|R|R|A|R|R|R| Group Policy ID | -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// | 24 bit VXLAN Network Identifier | Reserved | -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - -// Ethernet[IP[UDP[VXLAN[Ethernet[IP[ICMP]]]]]] - -// testPacketVXLAN -// 0000 00 16 3e 08 71 cf 36 dc 85 1e b3 40 08 00 45 00 ..>.q.6....@..E. -// 0010 00 86 d2 c0 40 00 40 11 51 52 c0 a8 cb 01 c0 a8 ....@.@.QR...... -// 0020 ca 01 b0 5d 12 b5 00 72 00 00 08 00 00 00 00 00 ...]...r........ -// 0030 00 00 00 30 88 01 00 02 00 16 3e 37 f6 04 08 00 ...0......>7.... -// 0040 45 00 00 54 00 00 40 00 40 01 23 4f c0 a8 cb 03 E..T..@.@.#O.... -// 0050 c0 a8 cb 05 08 00 f6 f2 05 0c 00 01 fc e2 97 51 ...............Q -// 0060 00 00 00 00 a6 f8 02 00 00 00 00 00 10 11 12 13 ................ -// 0070 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 ............ !"# -// 0080 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 $%&'()*+,-./0123 -// 0090 34 35 36 37 4567 ./01234567 -var testPacketVXLAN = []byte{ - 0x00, 0x16, 0x3e, 0x08, 0x71, 0xcf, 0x36, 0xdc, 0x85, 0x1e, 0xb3, 0x40, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x86, 0xd2, 0xc0, 0x40, 0x00, 0x40, 0x11, 0x51, 0x52, 0xc0, 0xa8, 0xcb, 0x01, 0xc0, 0xa8, - 0xca, 0x01, 0xb0, 0x5d, 0x12, 0xb5, 0x00, 0x72, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0x00, 0x00, 0x30, 0x88, 0x01, 0x00, 0x02, 0x00, 0x16, 0x3e, 0x37, 0xf6, 0x04, 0x08, 0x00, - 0x45, 0x00, 0x00, 0x54, 0x00, 0x00, 0x40, 0x00, 0x40, 0x01, 0x23, 0x4f, 0xc0, 0xa8, 0xcb, 0x03, - 0xc0, 0xa8, 0xcb, 0x05, 0x08, 0x00, 0xf6, 0xf2, 0x05, 0x0c, 0x00, 0x01, 0xfc, 0xe2, 0x97, 0x51, - 0x00, 0x00, 0x00, 0x00, 0xa6, 0xf8, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, - 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, - 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, - 0x34, 0x35, 0x36, 0x37, -} - -func TestPacketVXLAN(t *testing.T) { - p := gopacket.NewPacket(testPacketVXLAN, LinkTypeEthernet, gopacket.Default) - if p.ErrorLayer() != nil { - t.Error("Failed to decode packet:", p.ErrorLayer().Error()) - } - checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeUDP, LayerTypeVXLAN, LayerTypeEthernet, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t) - if got, ok := p.Layer(LayerTypeVXLAN).(*VXLAN); ok { - want := &VXLAN{ - BaseLayer: BaseLayer{ - Contents: []byte{0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00}, - Payload: []byte{0x00, 0x30, 0x88, 0x01, 0x00, 0x02, 0x00, 0x16, 0x3e, 0x37, 0xf6, 0x04, 0x08, 0x00, - 0x45, 0x00, 0x00, 0x54, 0x00, 0x00, 0x40, 0x00, 0x40, 0x01, 0x23, 0x4f, 0xc0, 0xa8, 0xcb, 0x03, - 0xc0, 0xa8, 0xcb, 0x05, 0x08, 0x00, 0xf6, 0xf2, 0x05, 0x0c, 0x00, 0x01, 0xfc, 0xe2, 0x97, 0x51, - 0x00, 0x00, 0x00, 0x00, 0xa6, 0xf8, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, - 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, - 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, - 0x34, 0x35, 0x36, 0x37}, - }, - ValidIDFlag: true, - VNI: 255, - GBPExtension: false, - GBPApplied: false, - GBPDontLearn: false, - GBPGroupPolicyID: 0, - } - if !reflect.DeepEqual(want, got) { - t.Errorf("VXLAN layer mismatch, \nwant %#v\ngot %#v\n", want, got) - } - } -} - -func BenchmarkDecodePacketVXLAN(b *testing.B) { - for i := 0; i < b.N; i++ { - gopacket.NewPacket(testPacketVXLAN, LinkTypeEthernet, gopacket.NoCopy) - } -} - -func TestIsomorphicPacketVXLAN(t *testing.T) { - vx := &VXLAN{ - ValidIDFlag: true, - VNI: 255, - GBPExtension: true, - GBPApplied: true, - GBPDontLearn: true, - GBPGroupPolicyID: 777, - } - - b := gopacket.NewSerializeBuffer() - vx.SerializeTo(b, gopacket.SerializeOptions{}) - - p := gopacket.NewPacket(b.Bytes(), gopacket.DecodeFunc(decodeVXLAN), gopacket.Default) - vxTranslated := p.Layer(LayerTypeVXLAN).(*VXLAN) - vxTranslated.BaseLayer = BaseLayer{} - - if !reflect.DeepEqual(vx, vxTranslated) { - t.Errorf("VXLAN isomorph mismatch, \nwant %#v\ngot %#v\n", vx, vxTranslated) - } -} diff --git a/vendor/github.com/google/gopacket/macs/benchmark_test.go b/vendor/github.com/google/gopacket/macs/benchmark_test.go deleted file mode 100644 index 33af5c2..0000000 --- a/vendor/github.com/google/gopacket/macs/benchmark_test.go +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package macs - -import ( - "testing" -) - -func BenchmarkCheckEthernetPrefix(b *testing.B) { - key := [3]byte{5, 5, 5} - for i := 0; i < b.N; i++ { - _ = ValidMACPrefixMap[key] - } -} diff --git a/vendor/github.com/google/gopacket/macs/doc.go b/vendor/github.com/google/gopacket/macs/doc.go deleted file mode 100644 index c0d32a8..0000000 --- a/vendor/github.com/google/gopacket/macs/doc.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// Package macs provides an in-memory mapping of all valid Ethernet MAC address -// prefixes to their associated organization. -// -// The ValidMACPrefixMap map maps 3-byte prefixes to organization strings. It -// can be updated using 'go run gen.go' in this directory. -package macs diff --git a/vendor/github.com/google/gopacket/macs/gen.go b/vendor/github.com/google/gopacket/macs/gen.go deleted file mode 100644 index ccfcc34..0000000 --- a/vendor/github.com/google/gopacket/macs/gen.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// +build ignore - -// This binary pulls the list of known MAC -// prefixes from IEEE and writes them out to a go file which is compiled -// into gopacket. It should be run as follows: -// -// go run gen.go | gofmt > valid_mac_prefixes.go -package main - -import ( - "bufio" - "bytes" - "encoding/hex" - "flag" - "fmt" - "io" - "net/http" - "os" - "regexp" - "sort" - "time" -) - -const header = `// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package macs - -// Created by gen.go, don't edit manually -// Generated at %s -// Fetched from %q - -// ValidMACPrefixMap maps a valid MAC address prefix to the name of the -// organization that owns the rights to use it. We map it to a hidden -// variable so it won't show up in godoc, since it's a very large map. -var ValidMACPrefixMap = validMACPrefixMap -var validMACPrefixMap = map[[3]byte]string{ -` - -var url = flag.String("url", "http://standards.ieee.org/develop/regauth/oui/oui.txt", "URL to fetch MACs from") - -type mac struct { - prefix [3]byte - company string -} - -type macs []mac - -func (m macs) Len() int { return len(m) } -func (m macs) Less(i, j int) bool { return bytes.Compare(m[i].prefix[:], m[j].prefix[:]) < 0 } -func (m macs) Swap(i, j int) { m[i], m[j] = m[j], m[i] } - -func main() { - fmt.Fprintf(os.Stderr, "Fetching MACs from %q\n", *url) - resp, err := http.Get(*url) - if err != nil { - panic(err) - } - defer resp.Body.Close() - buffered := bufio.NewReader(resp.Body) - finder := regexp.MustCompile(`^\s*([0-9A-F]{6})\s+\(base 16\)\s+(.*\S)`) - got := macs{} - for { - line, err := buffered.ReadString('\n') - if err == io.EOF { - break - } else if err != nil { - panic(err) - } - if matches := finder.FindStringSubmatch(line); matches != nil { - var prefix [3]byte - hex.Decode(prefix[:], []byte(matches[1])) - company := matches[2] - if company == "" { - company = "PRIVATE" - } - fmt.Fprint(os.Stderr, "*") - got = append(got, mac{prefix: prefix, company: company}) - } - } - fmt.Fprintln(os.Stderr, "\nSorting macs") - sort.Sort(got) - fmt.Fprintln(os.Stderr, "Starting write to standard output") - fmt.Printf(header, time.Now(), *url) - for _, m := range got { - fmt.Printf("\t[3]byte{%d, %d, %d}: %q,\n", m.prefix[0], m.prefix[1], m.prefix[2], m.company) - } - fmt.Println("}") -} diff --git a/vendor/github.com/google/gopacket/macs/valid_mac_prefixes.go b/vendor/github.com/google/gopacket/macs/valid_mac_prefixes.go deleted file mode 100644 index 0a93cad..0000000 --- a/vendor/github.com/google/gopacket/macs/valid_mac_prefixes.go +++ /dev/null @@ -1,23946 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package macs - -// Created by gen.go, don't edit manually -// Generated at 2017-09-19 13:06:19.654271144 -0600 MDT -// Fetched from "http://standards.ieee.org/develop/regauth/oui/oui.txt" - -// ValidMACPrefixMap maps a valid MAC address prefix to the name of the -// organization that owns the rights to use it. We map it to a hidden -// variable so it won't show up in godoc, since it's a very large map. -var ValidMACPrefixMap = validMACPrefixMap -var validMACPrefixMap = map[[3]byte]string{ - [3]byte{0, 0, 0}: "XEROX CORPORATION", - [3]byte{0, 0, 1}: "XEROX CORPORATION", - [3]byte{0, 0, 2}: "XEROX CORPORATION", - [3]byte{0, 0, 3}: "XEROX CORPORATION", - [3]byte{0, 0, 4}: "XEROX CORPORATION", - [3]byte{0, 0, 5}: "XEROX CORPORATION", - [3]byte{0, 0, 6}: "XEROX CORPORATION", - [3]byte{0, 0, 7}: "XEROX CORPORATION", - [3]byte{0, 0, 8}: "XEROX CORPORATION", - [3]byte{0, 0, 9}: "XEROX CORPORATION", - [3]byte{0, 0, 10}: "OMRON TATEISI ELECTRONICS CO.", - [3]byte{0, 0, 11}: "MATRIX CORPORATION", - [3]byte{0, 0, 12}: "Cisco Systems, Inc", - [3]byte{0, 0, 13}: "FIBRONICS LTD.", - [3]byte{0, 0, 14}: "FUJITSU LIMITED", - [3]byte{0, 0, 15}: "NEXT, INC.", - [3]byte{0, 0, 16}: "SYTEK INC.", - [3]byte{0, 0, 17}: "NORMEREL SYSTEMES", - [3]byte{0, 0, 18}: "INFORMATION TECHNOLOGY LIMITED", - [3]byte{0, 0, 19}: "CAMEX", - [3]byte{0, 0, 20}: "NETRONIX", - [3]byte{0, 0, 21}: "DATAPOINT CORPORATION", - [3]byte{0, 0, 22}: "DU PONT PIXEL SYSTEMS .", - [3]byte{0, 0, 23}: "Oracle", - [3]byte{0, 0, 24}: "WEBSTER COMPUTER CORPORATION", - [3]byte{0, 0, 25}: "APPLIED DYNAMICS INTERNATIONAL", - [3]byte{0, 0, 26}: "ADVANCED MICRO DEVICES", - [3]byte{0, 0, 27}: "Novell, Inc.", - [3]byte{0, 0, 28}: "BELL TECHNOLOGIES", - [3]byte{0, 0, 29}: "Cabletron Systems, Inc.", - [3]byte{0, 0, 30}: "TELSIST INDUSTRIA ELECTRONICA", - [3]byte{0, 0, 31}: "Telco Systems, Inc.", - [3]byte{0, 0, 32}: "DATAINDUSTRIER DIAB AB", - [3]byte{0, 0, 33}: "SUREMAN COMP. & COMMUN. CORP.", - [3]byte{0, 0, 34}: "VISUAL TECHNOLOGY INC.", - [3]byte{0, 0, 35}: "ABB INDUSTRIAL SYSTEMS AB", - [3]byte{0, 0, 36}: "CONNECT AS", - [3]byte{0, 0, 37}: "RAMTEK CORP.", - [3]byte{0, 0, 38}: "SHA-KEN CO., LTD.", - [3]byte{0, 0, 39}: "JAPAN RADIO COMPANY", - [3]byte{0, 0, 40}: "PRODIGY SYSTEMS CORPORATION", - [3]byte{0, 0, 41}: "IMC NETWORKS CORP.", - [3]byte{0, 0, 42}: "TRW - SEDD/INP", - [3]byte{0, 0, 43}: "CRISP AUTOMATION, INC", - [3]byte{0, 0, 44}: "AUTOTOTE LIMITED", - [3]byte{0, 0, 45}: "CHROMATICS INC", - [3]byte{0, 0, 46}: "SOCIETE EVIRA", - [3]byte{0, 0, 47}: "TIMEPLEX INC.", - [3]byte{0, 0, 48}: "VG LABORATORY SYSTEMS LTD", - [3]byte{0, 0, 49}: "QPSX COMMUNICATIONS, LTD.", - [3]byte{0, 0, 50}: "Marconi plc", - [3]byte{0, 0, 51}: "EGAN MACHINERY COMPANY", - [3]byte{0, 0, 52}: "NETWORK RESOURCES CORPORATION", - [3]byte{0, 0, 53}: "SPECTRAGRAPHICS CORPORATION", - [3]byte{0, 0, 54}: "ATARI CORPORATION", - [3]byte{0, 0, 55}: "OXFORD METRICS LIMITED", - [3]byte{0, 0, 56}: "CSS LABS", - [3]byte{0, 0, 57}: "TOSHIBA CORPORATION", - [3]byte{0, 0, 58}: "CHYRON CORPORATION", - [3]byte{0, 0, 59}: "i Controls, Inc.", - [3]byte{0, 0, 60}: "AUSPEX SYSTEMS INC.", - [3]byte{0, 0, 61}: "UNISYS", - [3]byte{0, 0, 62}: "SIMPACT", - [3]byte{0, 0, 63}: "SYNTREX, INC.", - [3]byte{0, 0, 64}: "APPLICON, INC.", - [3]byte{0, 0, 65}: "ICE CORPORATION", - [3]byte{0, 0, 66}: "METIER MANAGEMENT SYSTEMS LTD.", - [3]byte{0, 0, 67}: "MICRO TECHNOLOGY", - [3]byte{0, 0, 68}: "CASTELLE CORPORATION", - [3]byte{0, 0, 69}: "FORD AEROSPACE & COMM. CORP.", - [3]byte{0, 0, 70}: "OLIVETTI NORTH AMERICA", - [3]byte{0, 0, 71}: "NICOLET INSTRUMENTS CORP.", - [3]byte{0, 0, 72}: "Seiko Epson Corporation", - [3]byte{0, 0, 73}: "APRICOT COMPUTERS, LTD", - [3]byte{0, 0, 74}: "ADC CODENOLL TECHNOLOGY CORP.", - [3]byte{0, 0, 75}: "ICL DATA OY", - [3]byte{0, 0, 76}: "NEC CORPORATION", - [3]byte{0, 0, 77}: "DCI CORPORATION", - [3]byte{0, 0, 78}: "AMPEX CORPORATION", - [3]byte{0, 0, 79}: "LOGICRAFT, INC.", - [3]byte{0, 0, 80}: "RADISYS CORPORATION", - [3]byte{0, 0, 81}: "HOB ELECTRONIC GMBH & CO. KG", - [3]byte{0, 0, 82}: "Intrusion.com, Inc.", - [3]byte{0, 0, 83}: "COMPUCORP", - [3]byte{0, 0, 84}: "Schneider Electric", - [3]byte{0, 0, 85}: "COMMISSARIAT A L`ENERGIE ATOM.", - [3]byte{0, 0, 86}: "DR. B. STRUCK", - [3]byte{0, 0, 87}: "SCITEX CORPORATION LTD.", - [3]byte{0, 0, 88}: "RACORE COMPUTER PRODUCTS INC.", - [3]byte{0, 0, 89}: "Hellige GMBH", - [3]byte{0, 0, 90}: "SysKonnect GmbH", - [3]byte{0, 0, 91}: "ELTEC ELEKTRONIK AG", - [3]byte{0, 0, 92}: "TELEMATICS INTERNATIONAL INC.", - [3]byte{0, 0, 93}: "CS TELECOM", - [3]byte{0, 0, 94}: "ICANN, IANA Department", - [3]byte{0, 0, 95}: "Sumitomo Electric Industries,Ltd", - [3]byte{0, 0, 96}: "KONTRON ELEKTRONIK GMBH", - [3]byte{0, 0, 97}: "GATEWAY COMMUNICATIONS", - [3]byte{0, 0, 98}: "BULL HN INFORMATION SYSTEMS", - [3]byte{0, 0, 99}: "BARCO CONTROL ROOMS GMBH", - [3]byte{0, 0, 100}: "Yokogawa Digital Computer Corporation", - [3]byte{0, 0, 101}: "Network General Corporation", - [3]byte{0, 0, 102}: "TALARIS SYSTEMS, INC.", - [3]byte{0, 0, 103}: "SOFT * RITE, INC.", - [3]byte{0, 0, 104}: "ROSEMOUNT CONTROLS", - [3]byte{0, 0, 105}: "CONCORD COMMUNICATIONS INC", - [3]byte{0, 0, 106}: "COMPUTER CONSOLES INC.", - [3]byte{0, 0, 107}: "SILICON GRAPHICS INC./MIPS", - [3]byte{0, 0, 108}: "Private", - [3]byte{0, 0, 109}: "CRAY COMMUNICATIONS, LTD.", - [3]byte{0, 0, 110}: "Artisoft Inc.", - [3]byte{0, 0, 111}: "Madge Ltd.", - [3]byte{0, 0, 112}: "HCL LIMITED", - [3]byte{0, 0, 113}: "ADRA SYSTEMS INC.", - [3]byte{0, 0, 114}: "MINIWARE TECHNOLOGY", - [3]byte{0, 0, 115}: "SIECOR CORPORATION", - [3]byte{0, 0, 116}: "RICOH COMPANY LTD.", - [3]byte{0, 0, 117}: "Nortel Networks", - [3]byte{0, 0, 118}: "ABEKAS VIDEO SYSTEM", - [3]byte{0, 0, 119}: "INTERPHASE CORPORATION", - [3]byte{0, 0, 120}: "LABTAM LIMITED", - [3]byte{0, 0, 121}: "NETWORTH INCORPORATED", - [3]byte{0, 0, 122}: "DANA COMPUTER INC.", - [3]byte{0, 0, 123}: "RESEARCH MACHINES", - [3]byte{0, 0, 124}: "AMPERE INCORPORATED", - [3]byte{0, 0, 125}: "Oracle Corporation", - [3]byte{0, 0, 126}: "CLUSTRIX CORPORATION", - [3]byte{0, 0, 127}: "LINOTYPE-HELL AG", - [3]byte{0, 0, 128}: "CRAY COMMUNICATIONS A/S", - [3]byte{0, 0, 129}: "Bay Networks", - [3]byte{0, 0, 130}: "LECTRA SYSTEMES SA", - [3]byte{0, 0, 131}: "TADPOLE TECHNOLOGY PLC", - [3]byte{0, 0, 132}: "SUPERNET", - [3]byte{0, 0, 133}: "CANON INC.", - [3]byte{0, 0, 134}: "MEGAHERTZ CORPORATION", - [3]byte{0, 0, 135}: "HITACHI, LTD.", - [3]byte{0, 0, 136}: "Brocade Communications Systems, Inc.", - [3]byte{0, 0, 137}: "CAYMAN SYSTEMS INC.", - [3]byte{0, 0, 138}: "DATAHOUSE INFORMATION SYSTEMS", - [3]byte{0, 0, 139}: "INFOTRON", - [3]byte{0, 0, 140}: "Alloy Computer Products (Australia) Pty Ltd", - [3]byte{0, 0, 141}: "Cryptek Inc.", - [3]byte{0, 0, 142}: "SOLBOURNE COMPUTER, INC.", - [3]byte{0, 0, 143}: "Raytheon", - [3]byte{0, 0, 144}: "MICROCOM", - [3]byte{0, 0, 145}: "ANRITSU CORPORATION", - [3]byte{0, 0, 146}: "COGENT DATA TECHNOLOGIES", - [3]byte{0, 0, 147}: "PROTEON INC.", - [3]byte{0, 0, 148}: "ASANTE TECHNOLOGIES", - [3]byte{0, 0, 149}: "SONY TEKTRONIX CORP.", - [3]byte{0, 0, 150}: "MARCONI ELECTRONICS LTD.", - [3]byte{0, 0, 151}: "Dell EMC", - [3]byte{0, 0, 152}: "CROSSCOMM CORPORATION", - [3]byte{0, 0, 153}: "MTX, INC.", - [3]byte{0, 0, 154}: "RC COMPUTER A/S", - [3]byte{0, 0, 155}: "INFORMATION INTERNATIONAL, INC", - [3]byte{0, 0, 156}: "ROLM MIL-SPEC COMPUTERS", - [3]byte{0, 0, 157}: "LOCUS COMPUTING CORPORATION", - [3]byte{0, 0, 158}: "MARLI S.A.", - [3]byte{0, 0, 159}: "AMERISTAR TECHNOLOGIES INC.", - [3]byte{0, 0, 160}: "SANYO Electric Co., Ltd.", - [3]byte{0, 0, 161}: "MARQUETTE ELECTRIC CO.", - [3]byte{0, 0, 162}: "Bay Networks", - [3]byte{0, 0, 163}: "NETWORK APPLICATION TECHNOLOGY", - [3]byte{0, 0, 164}: "ACORN COMPUTERS LIMITED", - [3]byte{0, 0, 165}: "Tattile SRL", - [3]byte{0, 0, 166}: "NETWORK GENERAL CORPORATION", - [3]byte{0, 0, 167}: "NETWORK COMPUTING DEVICES INC.", - [3]byte{0, 0, 168}: "STRATUS COMPUTER INC.", - [3]byte{0, 0, 169}: "NETWORK SYSTEMS CORP.", - [3]byte{0, 0, 170}: "XEROX CORPORATION", - [3]byte{0, 0, 171}: "LOGIC MODELING CORPORATION", - [3]byte{0, 0, 172}: "CONWARE COMPUTER CONSULTING", - [3]byte{0, 0, 173}: "BRUKER INSTRUMENTS INC.", - [3]byte{0, 0, 174}: "DASSAULT ELECTRONIQUE", - [3]byte{0, 0, 175}: "Canberra Industries, Inc.", - [3]byte{0, 0, 176}: "RND-RAD NETWORK DEVICES", - [3]byte{0, 0, 177}: "Alpha Micro", - [3]byte{0, 0, 178}: "TELEVIDEO SYSTEMS, INC.", - [3]byte{0, 0, 179}: "CIMLINC INCORPORATED", - [3]byte{0, 0, 180}: "Edimax Technology Co. Ltd.", - [3]byte{0, 0, 181}: "DATABILITY SOFTWARE SYS. INC.", - [3]byte{0, 0, 182}: "MICRO-MATIC RESEARCH", - [3]byte{0, 0, 183}: "DOVE COMPUTER CORPORATION", - [3]byte{0, 0, 184}: "SEIKOSHA CO., LTD.", - [3]byte{0, 0, 185}: "MCDONNELL DOUGLAS COMPUTER SYS", - [3]byte{0, 0, 186}: "SIIG, INC.", - [3]byte{0, 0, 187}: "TRI-DATA", - [3]byte{0, 0, 188}: "Rockwell Automation", - [3]byte{0, 0, 189}: "MITSUBISHI CABLE COMPANY", - [3]byte{0, 0, 190}: "THE NTI GROUP", - [3]byte{0, 0, 191}: "SYMMETRIC COMPUTER SYSTEMS", - [3]byte{0, 0, 192}: "WESTERN DIGITAL CORPORATION", - [3]byte{0, 0, 193}: "Madge Ltd.", - [3]byte{0, 0, 194}: "INFORMATION PRESENTATION TECH.", - [3]byte{0, 0, 195}: "HARRIS CORP COMPUTER SYS DIV", - [3]byte{0, 0, 196}: "WATERS DIV. OF MILLIPORE", - [3]byte{0, 0, 197}: "ARRIS Group, Inc.", - [3]byte{0, 0, 198}: "EON SYSTEMS", - [3]byte{0, 0, 199}: "ARIX CORPORATION", - [3]byte{0, 0, 200}: "ALTOS COMPUTER SYSTEMS", - [3]byte{0, 0, 201}: "Emulex Corporation", - [3]byte{0, 0, 202}: "ARRIS Group, Inc.", - [3]byte{0, 0, 203}: "COMPU-SHACK ELECTRONIC GMBH", - [3]byte{0, 0, 204}: "DENSAN CO., LTD.", - [3]byte{0, 0, 205}: "Allied Telesis Labs Ltd", - [3]byte{0, 0, 206}: "MEGADATA CORP.", - [3]byte{0, 0, 207}: "HAYES MICROCOMPUTER PRODUCTS", - [3]byte{0, 0, 208}: "DEVELCON ELECTRONICS LTD.", - [3]byte{0, 0, 209}: "ADAPTEC INCORPORATED", - [3]byte{0, 0, 210}: "SBE, INC.", - [3]byte{0, 0, 211}: "WANG LABORATORIES INC.", - [3]byte{0, 0, 212}: "PURE DATA LTD.", - [3]byte{0, 0, 213}: "MICROGNOSIS INTERNATIONAL", - [3]byte{0, 0, 214}: "PUNCH LINE HOLDING", - [3]byte{0, 0, 215}: "DARTMOUTH COLLEGE", - [3]byte{0, 0, 216}: "Novell, Inc.", - [3]byte{0, 0, 217}: "NIPPON TELEGRAPH & TELEPHONE", - [3]byte{0, 0, 218}: "ATEX", - [3]byte{0, 0, 219}: "British Telecommunications plc", - [3]byte{0, 0, 220}: "HAYES MICROCOMPUTER PRODUCTS", - [3]byte{0, 0, 221}: "TCL INCORPORATED", - [3]byte{0, 0, 222}: "CETIA", - [3]byte{0, 0, 223}: "BELL & HOWELL PUB SYS DIV", - [3]byte{0, 0, 224}: "QUADRAM CORP.", - [3]byte{0, 0, 225}: "GRID SYSTEMS", - [3]byte{0, 0, 226}: "ACER TECHNOLOGIES CORP.", - [3]byte{0, 0, 227}: "INTEGRATED MICRO PRODUCTS LTD", - [3]byte{0, 0, 228}: "IN2 GROUPE INTERTECHNIQUE", - [3]byte{0, 0, 229}: "SIGMEX LTD.", - [3]byte{0, 0, 230}: "APTOR PRODUITS DE COMM INDUST", - [3]byte{0, 0, 231}: "Star Gate Technologies", - [3]byte{0, 0, 232}: "ACCTON TECHNOLOGY CORP.", - [3]byte{0, 0, 233}: "ISICAD, INC.", - [3]byte{0, 0, 234}: "UPNOD AB", - [3]byte{0, 0, 235}: "MATSUSHITA COMM. IND. CO. LTD.", - [3]byte{0, 0, 236}: "MICROPROCESS", - [3]byte{0, 0, 237}: "APRIL", - [3]byte{0, 0, 238}: "NETWORK DESIGNERS, LTD.", - [3]byte{0, 0, 239}: "KTI", - [3]byte{0, 0, 240}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 0, 241}: "MAGNA COMPUTER CORPORATION", - [3]byte{0, 0, 242}: "SPIDER COMMUNICATIONS", - [3]byte{0, 0, 243}: "GANDALF DATA LIMITED", - [3]byte{0, 0, 244}: "Allied Telesis, Inc.", - [3]byte{0, 0, 245}: "DIAMOND SALES LIMITED", - [3]byte{0, 0, 246}: "APPLIED MICROSYSTEMS CORP.", - [3]byte{0, 0, 247}: "YOUTH KEEP ENTERPRISE CO LTD", - [3]byte{0, 0, 248}: "DIGITAL EQUIPMENT CORPORATION", - [3]byte{0, 0, 249}: "QUOTRON SYSTEMS INC.", - [3]byte{0, 0, 250}: "MICROSAGE COMPUTER SYSTEMS INC", - [3]byte{0, 0, 251}: "RECHNER ZUR KOMMUNIKATION", - [3]byte{0, 0, 252}: "MEIKO", - [3]byte{0, 0, 253}: "HIGH LEVEL HARDWARE", - [3]byte{0, 0, 254}: "Annapolis Micro Systems, Inc.", - [3]byte{0, 0, 255}: "CAMTEC ELECTRONICS LTD.", - [3]byte{0, 1, 0}: "EQUIP'TRANS", - [3]byte{0, 1, 1}: "Private", - [3]byte{0, 1, 2}: "3COM CORPORATION", - [3]byte{0, 1, 3}: "3COM CORPORATION", - [3]byte{0, 1, 4}: "DVICO Co., Ltd.", - [3]byte{0, 1, 5}: "Beckhoff Automation GmbH", - [3]byte{0, 1, 6}: "Tews Datentechnik GmbH", - [3]byte{0, 1, 7}: "Leiser GmbH", - [3]byte{0, 1, 8}: "AVLAB Technology, Inc.", - [3]byte{0, 1, 9}: "Nagano Japan Radio Co., Ltd.", - [3]byte{0, 1, 10}: "CIS TECHNOLOGY INC.", - [3]byte{0, 1, 11}: "Space CyberLink, Inc.", - [3]byte{0, 1, 12}: "System Talks Inc.", - [3]byte{0, 1, 13}: "Teledyne DALSA Inc.", - [3]byte{0, 1, 14}: "Bri-Link Technologies Co., Ltd", - [3]byte{0, 1, 15}: "Brocade Communications Systems, Inc.", - [3]byte{0, 1, 16}: "Gotham Networks", - [3]byte{0, 1, 17}: "iDigm Inc.", - [3]byte{0, 1, 18}: "Shark Multimedia Inc.", - [3]byte{0, 1, 19}: "OLYMPUS CORPORATION", - [3]byte{0, 1, 20}: "KANDA TSUSHIN KOGYO CO., LTD.", - [3]byte{0, 1, 21}: "EXTRATECH CORPORATION", - [3]byte{0, 1, 22}: "Netspect Technologies, Inc.", - [3]byte{0, 1, 23}: "Canal +", - [3]byte{0, 1, 24}: "EZ Digital Co., Ltd.", - [3]byte{0, 1, 25}: "RTUnet (Australia)", - [3]byte{0, 1, 26}: "Hoffmann und Burmeister GbR", - [3]byte{0, 1, 27}: "Unizone Technologies, Inc.", - [3]byte{0, 1, 28}: "Universal Talkware Corporation", - [3]byte{0, 1, 29}: "Centillium Communications", - [3]byte{0, 1, 30}: "Precidia Technologies, Inc.", - [3]byte{0, 1, 31}: "RC Networks, Inc.", - [3]byte{0, 1, 32}: "OSCILLOQUARTZ S.A.", - [3]byte{0, 1, 33}: "Watchguard Technologies, Inc.", - [3]byte{0, 1, 34}: "Trend Communications, Ltd.", - [3]byte{0, 1, 35}: "Schneider Electric Japan Holdings Ltd.", - [3]byte{0, 1, 36}: "Acer Incorporated", - [3]byte{0, 1, 37}: "YAESU MUSEN CO., LTD.", - [3]byte{0, 1, 38}: "PAC Labs", - [3]byte{0, 1, 39}: "OPEN Networks Pty Ltd", - [3]byte{0, 1, 40}: "EnjoyWeb, Inc.", - [3]byte{0, 1, 41}: "DFI Inc.", - [3]byte{0, 1, 42}: "Telematica Sistems Inteligente", - [3]byte{0, 1, 43}: "TELENET Co., Ltd.", - [3]byte{0, 1, 44}: "Aravox Technologies, Inc.", - [3]byte{0, 1, 45}: "Komodo Technology", - [3]byte{0, 1, 46}: "PC Partner Ltd.", - [3]byte{0, 1, 47}: "Twinhead International Corp", - [3]byte{0, 1, 48}: "Extreme Networks, Inc.", - [3]byte{0, 1, 49}: "Bosch Security Systems, Inc.", - [3]byte{0, 1, 50}: "Dranetz - BMI", - [3]byte{0, 1, 51}: "KYOWA Electronic Instruments C", - [3]byte{0, 1, 52}: "Selectron Systems AG", - [3]byte{0, 1, 53}: "KDC Corp.", - [3]byte{0, 1, 54}: "CyberTAN Technology Inc.", - [3]byte{0, 1, 55}: "IT Farm Corporation", - [3]byte{0, 1, 56}: "XAVi Technologies Corp.", - [3]byte{0, 1, 57}: "Point Multimedia Systems", - [3]byte{0, 1, 58}: "SHELCAD COMMUNICATIONS, LTD.", - [3]byte{0, 1, 59}: "BNA SYSTEMS", - [3]byte{0, 1, 60}: "TIW SYSTEMS", - [3]byte{0, 1, 61}: "RiscStation Ltd.", - [3]byte{0, 1, 62}: "Ascom Tateco AB", - [3]byte{0, 1, 63}: "Neighbor World Co., Ltd.", - [3]byte{0, 1, 64}: "Sendtek Corporation", - [3]byte{0, 1, 65}: "CABLE PRINT", - [3]byte{0, 1, 66}: "Cisco Systems, Inc", - [3]byte{0, 1, 67}: "Cisco Systems, Inc", - [3]byte{0, 1, 68}: "Dell EMC", - [3]byte{0, 1, 69}: "WINSYSTEMS, INC.", - [3]byte{0, 1, 70}: "Tesco Controls, Inc.", - [3]byte{0, 1, 71}: "Zhone Technologies", - [3]byte{0, 1, 72}: "X-traWeb Inc.", - [3]byte{0, 1, 73}: "T.D.T. Transfer Data Test GmbH", - [3]byte{0, 1, 74}: "Sony Corporation", - [3]byte{0, 1, 75}: "Ennovate Networks, Inc.", - [3]byte{0, 1, 76}: "Berkeley Process Control", - [3]byte{0, 1, 77}: "Shin Kin Enterprises Co., Ltd", - [3]byte{0, 1, 78}: "WIN Enterprises, Inc.", - [3]byte{0, 1, 79}: "Adtran Inc", - [3]byte{0, 1, 80}: "GILAT COMMUNICATIONS, LTD.", - [3]byte{0, 1, 81}: "Ensemble Communications", - [3]byte{0, 1, 82}: "CHROMATEK INC.", - [3]byte{0, 1, 83}: "ARCHTEK TELECOM CORPORATION", - [3]byte{0, 1, 84}: "G3M Corporation", - [3]byte{0, 1, 85}: "Promise Technology, Inc.", - [3]byte{0, 1, 86}: "FIREWIREDIRECT.COM, INC.", - [3]byte{0, 1, 87}: "SYSWAVE CO., LTD", - [3]byte{0, 1, 88}: "Electro Industries/Gauge Tech", - [3]byte{0, 1, 89}: "S1 Corporation", - [3]byte{0, 1, 90}: "Digital Video Broadcasting", - [3]byte{0, 1, 91}: "ITALTEL S.p.A/RF-UP-I", - [3]byte{0, 1, 92}: "CADANT INC.", - [3]byte{0, 1, 93}: "Oracle Corporation", - [3]byte{0, 1, 94}: "BEST TECHNOLOGY CO., LTD.", - [3]byte{0, 1, 95}: "DIGITAL DESIGN GmbH", - [3]byte{0, 1, 96}: "ELMEX Co., LTD.", - [3]byte{0, 1, 97}: "Meta Machine Technology", - [3]byte{0, 1, 98}: "Cygnet Technologies, Inc.", - [3]byte{0, 1, 99}: "Cisco Systems, Inc", - [3]byte{0, 1, 100}: "Cisco Systems, Inc", - [3]byte{0, 1, 101}: "AirSwitch Corporation", - [3]byte{0, 1, 102}: "TC GROUP A/S", - [3]byte{0, 1, 103}: "HIOKI E.E. CORPORATION", - [3]byte{0, 1, 104}: "VITANA CORPORATION", - [3]byte{0, 1, 105}: "Celestix Networks Pte Ltd.", - [3]byte{0, 1, 106}: "ALITEC", - [3]byte{0, 1, 107}: "LightChip, Inc.", - [3]byte{0, 1, 108}: "FOXCONN", - [3]byte{0, 1, 109}: "CarrierComm Inc.", - [3]byte{0, 1, 110}: "Conklin Corporation", - [3]byte{0, 1, 111}: "Inkel Corp.", - [3]byte{0, 1, 112}: "ESE Embedded System Engineer'g", - [3]byte{0, 1, 113}: "Allied Data Technologies", - [3]byte{0, 1, 114}: "TechnoLand Co., LTD.", - [3]byte{0, 1, 115}: "AMCC", - [3]byte{0, 1, 116}: "CyberOptics Corporation", - [3]byte{0, 1, 117}: "Radiant Communications Corp.", - [3]byte{0, 1, 118}: "Orient Silver Enterprises", - [3]byte{0, 1, 119}: "EDSL", - [3]byte{0, 1, 120}: "MARGI Systems, Inc.", - [3]byte{0, 1, 121}: "WIRELESS TECHNOLOGY, INC.", - [3]byte{0, 1, 122}: "Chengdu Maipu Electric Industrial Co., Ltd.", - [3]byte{0, 1, 123}: "Heidelberger Druckmaschinen AG", - [3]byte{0, 1, 124}: "AG-E GmbH", - [3]byte{0, 1, 125}: "ThermoQuest", - [3]byte{0, 1, 126}: "ADTEK System Science Co., Ltd.", - [3]byte{0, 1, 127}: "Experience Music Project", - [3]byte{0, 1, 128}: "AOpen, Inc.", - [3]byte{0, 1, 129}: "Nortel Networks", - [3]byte{0, 1, 130}: "DICA TECHNOLOGIES AG", - [3]byte{0, 1, 131}: "ANITE TELECOMS", - [3]byte{0, 1, 132}: "SIEB & MEYER AG", - [3]byte{0, 1, 133}: "Hitachi Aloka Medical, Ltd.", - [3]byte{0, 1, 134}: "Uwe Disch", - [3]byte{0, 1, 135}: "I2SE GmbH", - [3]byte{0, 1, 136}: "LXCO Technologies ag", - [3]byte{0, 1, 137}: "Refraction Technology, Inc.", - [3]byte{0, 1, 138}: "ROI COMPUTER AG", - [3]byte{0, 1, 139}: "NetLinks Co., Ltd.", - [3]byte{0, 1, 140}: "Mega Vision", - [3]byte{0, 1, 141}: "AudeSi Technologies", - [3]byte{0, 1, 142}: "Logitec Corporation", - [3]byte{0, 1, 143}: "Kenetec, Inc.", - [3]byte{0, 1, 144}: "SMK-M", - [3]byte{0, 1, 145}: "SYRED Data Systems", - [3]byte{0, 1, 146}: "Texas Digital Systems", - [3]byte{0, 1, 147}: "Hanbyul Telecom Co., Ltd.", - [3]byte{0, 1, 148}: "Capital Equipment Corporation", - [3]byte{0, 1, 149}: "Sena Technologies, Inc.", - [3]byte{0, 1, 150}: "Cisco Systems, Inc", - [3]byte{0, 1, 151}: "Cisco Systems, Inc", - [3]byte{0, 1, 152}: "Darim Vision", - [3]byte{0, 1, 153}: "HeiSei Electronics", - [3]byte{0, 1, 154}: "LEUNIG GmbH", - [3]byte{0, 1, 155}: "Kyoto Microcomputer Co., Ltd.", - [3]byte{0, 1, 156}: "JDS Uniphase Inc.", - [3]byte{0, 1, 157}: "E-Control Systems, Inc.", - [3]byte{0, 1, 158}: "ESS Technology, Inc.", - [3]byte{0, 1, 159}: "ReadyNet", - [3]byte{0, 1, 160}: "Infinilink Corporation", - [3]byte{0, 1, 161}: "Mag-Tek, Inc.", - [3]byte{0, 1, 162}: "Logical Co., Ltd.", - [3]byte{0, 1, 163}: "GENESYS LOGIC, INC.", - [3]byte{0, 1, 164}: "Microlink Corporation", - [3]byte{0, 1, 165}: "Nextcomm, Inc.", - [3]byte{0, 1, 166}: "Scientific-Atlanta Arcodan A/S", - [3]byte{0, 1, 167}: "UNEX TECHNOLOGY CORPORATION", - [3]byte{0, 1, 168}: "Welltech Computer Co., Ltd.", - [3]byte{0, 1, 169}: "BMW AG", - [3]byte{0, 1, 170}: "Airspan Communications, Ltd.", - [3]byte{0, 1, 171}: "Main Street Networks", - [3]byte{0, 1, 172}: "Sitara Networks, Inc.", - [3]byte{0, 1, 173}: "Coach Master International d.b.a. CMI Worldwide, Inc.", - [3]byte{0, 1, 174}: "Trex Enterprises", - [3]byte{0, 1, 175}: "Artesyn Embedded Technologies", - [3]byte{0, 1, 176}: "Fulltek Technology Co., Ltd.", - [3]byte{0, 1, 177}: "General Bandwidth", - [3]byte{0, 1, 178}: "Digital Processing Systems, Inc.", - [3]byte{0, 1, 179}: "Precision Electronic Manufacturing", - [3]byte{0, 1, 180}: "Wayport, Inc.", - [3]byte{0, 1, 181}: "Turin Networks, Inc.", - [3]byte{0, 1, 182}: "SAEJIN T&M Co., Ltd.", - [3]byte{0, 1, 183}: "Centos, Inc.", - [3]byte{0, 1, 184}: "Netsensity, Inc.", - [3]byte{0, 1, 185}: "SKF Condition Monitoring", - [3]byte{0, 1, 186}: "IC-Net, Inc.", - [3]byte{0, 1, 187}: "Frequentis", - [3]byte{0, 1, 188}: "Brains Corporation", - [3]byte{0, 1, 189}: "Peterson Electro-Musical Products, Inc.", - [3]byte{0, 1, 190}: "Gigalink Co., Ltd.", - [3]byte{0, 1, 191}: "Teleforce Co., Ltd.", - [3]byte{0, 1, 192}: "CompuLab, Ltd.", - [3]byte{0, 1, 193}: "Vitesse Semiconductor Corporation", - [3]byte{0, 1, 194}: "ARK Research Corp.", - [3]byte{0, 1, 195}: "Acromag, Inc.", - [3]byte{0, 1, 196}: "NeoWave, Inc.", - [3]byte{0, 1, 197}: "Simpler Networks", - [3]byte{0, 1, 198}: "Quarry Technologies", - [3]byte{0, 1, 199}: "Cisco Systems, Inc", - [3]byte{0, 1, 200}: "THOMAS CONRAD CORP.", - [3]byte{0, 1, 200}: "CONRAD CORP.", - [3]byte{0, 1, 201}: "Cisco Systems, Inc", - [3]byte{0, 1, 202}: "Geocast Network Systems, Inc.", - [3]byte{0, 1, 203}: "EVR", - [3]byte{0, 1, 204}: "Japan Total Design Communication Co., Ltd.", - [3]byte{0, 1, 205}: "ARtem", - [3]byte{0, 1, 206}: "Custom Micro Products, Ltd.", - [3]byte{0, 1, 207}: "Alpha Data Parallel Systems, Ltd.", - [3]byte{0, 1, 208}: "VitalPoint, Inc.", - [3]byte{0, 1, 209}: "CoNet Communications, Inc.", - [3]byte{0, 1, 210}: "inXtron, Inc.", - [3]byte{0, 1, 211}: "PAXCOMM, Inc.", - [3]byte{0, 1, 212}: "Leisure Time, Inc.", - [3]byte{0, 1, 213}: "HAEDONG INFO & COMM CO., LTD", - [3]byte{0, 1, 214}: "manroland AG", - [3]byte{0, 1, 215}: "F5 Networks, Inc.", - [3]byte{0, 1, 216}: "Teltronics, Inc.", - [3]byte{0, 1, 217}: "Sigma, Inc.", - [3]byte{0, 1, 218}: "WINCOMM Corporation", - [3]byte{0, 1, 219}: "Freecom Technologies GmbH", - [3]byte{0, 1, 220}: "Activetelco", - [3]byte{0, 1, 221}: "Avail Networks", - [3]byte{0, 1, 222}: "Trango Systems, Inc.", - [3]byte{0, 1, 223}: "ISDN Communications, Ltd.", - [3]byte{0, 1, 224}: "Fast Systems, Inc.", - [3]byte{0, 1, 225}: "Kinpo Electronics, Inc.", - [3]byte{0, 1, 226}: "Ando Electric Corporation", - [3]byte{0, 1, 227}: "Siemens AG", - [3]byte{0, 1, 228}: "Sitera, Inc.", - [3]byte{0, 1, 229}: "Supernet, Inc.", - [3]byte{0, 1, 230}: "Hewlett Packard", - [3]byte{0, 1, 231}: "Hewlett Packard", - [3]byte{0, 1, 232}: "Force10 Networks, Inc.", - [3]byte{0, 1, 233}: "Litton Marine Systems B.V.", - [3]byte{0, 1, 234}: "Cirilium Corp.", - [3]byte{0, 1, 235}: "C-COM Corporation", - [3]byte{0, 1, 236}: "Ericsson Group", - [3]byte{0, 1, 237}: "SETA Corp.", - [3]byte{0, 1, 238}: "Comtrol Europe, Ltd.", - [3]byte{0, 1, 239}: "Camtel Technology Corp.", - [3]byte{0, 1, 240}: "Tridium, Inc.", - [3]byte{0, 1, 241}: "Innovative Concepts, Inc.", - [3]byte{0, 1, 242}: "Mark of the Unicorn, Inc.", - [3]byte{0, 1, 243}: "QPS, Inc.", - [3]byte{0, 1, 244}: "Enterasys", - [3]byte{0, 1, 245}: "ERIM S.A.", - [3]byte{0, 1, 246}: "Association of Musical Electronics Industry", - [3]byte{0, 1, 247}: "Image Display Systems, Inc.", - [3]byte{0, 1, 248}: "TEXIO TECHNOLOGY CORPORATION", - [3]byte{0, 1, 249}: "TeraGlobal Communications Corp.", - [3]byte{0, 1, 250}: "HOROSCAS", - [3]byte{0, 1, 251}: "DoTop Technology, Inc.", - [3]byte{0, 1, 252}: "Keyence Corporation", - [3]byte{0, 1, 253}: "Digital Voice Systems, Inc.", - [3]byte{0, 1, 254}: "DIGITAL EQUIPMENT CORPORATION", - [3]byte{0, 1, 255}: "Data Direct Networks, Inc.", - [3]byte{0, 2, 0}: "Net & Sys Co., Ltd.", - [3]byte{0, 2, 1}: "IFM Electronic gmbh", - [3]byte{0, 2, 2}: "Amino Communications, Ltd.", - [3]byte{0, 2, 3}: "Woonsang Telecom, Inc.", - [3]byte{0, 2, 4}: "Bodmann Industries Elektronik GmbH", - [3]byte{0, 2, 5}: "Hitachi Denshi, Ltd.", - [3]byte{0, 2, 6}: "Telital R&D Denmark A/S", - [3]byte{0, 2, 7}: "VisionGlobal Network Corp.", - [3]byte{0, 2, 8}: "Unify Networks, Inc.", - [3]byte{0, 2, 9}: "Shenzhen SED Information Technology Co., Ltd.", - [3]byte{0, 2, 10}: "Gefran Spa", - [3]byte{0, 2, 11}: "Native Networks, Inc.", - [3]byte{0, 2, 12}: "Metro-Optix", - [3]byte{0, 2, 13}: "Micronpc.com", - [3]byte{0, 2, 14}: "ECI Telecom Ltd.", - [3]byte{0, 2, 15}: "AATR", - [3]byte{0, 2, 16}: "Fenecom", - [3]byte{0, 2, 17}: "Nature Worldwide Technology Corp.", - [3]byte{0, 2, 18}: "SierraCom", - [3]byte{0, 2, 19}: "S.D.E.L.", - [3]byte{0, 2, 20}: "DTVRO", - [3]byte{0, 2, 21}: "Cotas Computer Technology A/B", - [3]byte{0, 2, 22}: "Cisco Systems, Inc", - [3]byte{0, 2, 23}: "Cisco Systems, Inc", - [3]byte{0, 2, 24}: "Advanced Scientific Corp", - [3]byte{0, 2, 25}: "Paralon Technologies", - [3]byte{0, 2, 26}: "Zuma Networks", - [3]byte{0, 2, 27}: "Kollmorgen-Servotronix", - [3]byte{0, 2, 28}: "Network Elements, Inc.", - [3]byte{0, 2, 29}: "Data General Communication Ltd.", - [3]byte{0, 2, 30}: "SIMTEL S.R.L.", - [3]byte{0, 2, 31}: "Aculab PLC", - [3]byte{0, 2, 32}: "CANON FINETECH INC.", - [3]byte{0, 2, 33}: "DSP Application, Ltd.", - [3]byte{0, 2, 34}: "Chromisys, Inc.", - [3]byte{0, 2, 35}: "ClickTV", - [3]byte{0, 2, 36}: "C-COR", - [3]byte{0, 2, 37}: "One Stop Systems", - [3]byte{0, 2, 38}: "XESystems, Inc.", - [3]byte{0, 2, 39}: "ESD Electronic System Design GmbH", - [3]byte{0, 2, 40}: "Necsom, Ltd.", - [3]byte{0, 2, 41}: "Adtec Corporation", - [3]byte{0, 2, 42}: "Asound Electronic", - [3]byte{0, 2, 43}: "SAXA, Inc.", - [3]byte{0, 2, 44}: "ABB Bomem, Inc.", - [3]byte{0, 2, 45}: "Agere Systems", - [3]byte{0, 2, 46}: "TEAC Corp. R& D", - [3]byte{0, 2, 47}: "P-Cube, Ltd.", - [3]byte{0, 2, 48}: "Intersoft Electronics", - [3]byte{0, 2, 49}: "Ingersoll-Rand", - [3]byte{0, 2, 50}: "Avision, Inc.", - [3]byte{0, 2, 51}: "Mantra Communications, Inc.", - [3]byte{0, 2, 52}: "Imperial Technology, Inc.", - [3]byte{0, 2, 53}: "Paragon Networks International", - [3]byte{0, 2, 54}: "INIT GmbH", - [3]byte{0, 2, 55}: "Cosmo Research Corp.", - [3]byte{0, 2, 56}: "Serome Technology, Inc.", - [3]byte{0, 2, 57}: "Visicom", - [3]byte{0, 2, 58}: "ZSK Stickmaschinen GmbH", - [3]byte{0, 2, 59}: "Ericsson", - [3]byte{0, 2, 60}: "Creative Technology, Ltd.", - [3]byte{0, 2, 61}: "Cisco Systems, Inc", - [3]byte{0, 2, 62}: "Selta Telematica S.p.a", - [3]byte{0, 2, 63}: "COMPAL ELECTRONICS, INC.", - [3]byte{0, 2, 64}: "Seedek Co., Ltd.", - [3]byte{0, 2, 65}: "Amer.com", - [3]byte{0, 2, 66}: "Videoframe Systems", - [3]byte{0, 2, 67}: "Raysis Co., Ltd.", - [3]byte{0, 2, 68}: "SURECOM Technology Co.", - [3]byte{0, 2, 69}: "Lampus Co, Ltd.", - [3]byte{0, 2, 70}: "All-Win Tech Co., Ltd.", - [3]byte{0, 2, 71}: "Great Dragon Information Technology (Group) Co., Ltd.", - [3]byte{0, 2, 72}: "Pilz GmbH & Co.", - [3]byte{0, 2, 73}: "Aviv Infocom Co, Ltd.", - [3]byte{0, 2, 74}: "Cisco Systems, Inc", - [3]byte{0, 2, 75}: "Cisco Systems, Inc", - [3]byte{0, 2, 76}: "SiByte, Inc.", - [3]byte{0, 2, 77}: "Mannesman Dematic Colby Pty. Ltd.", - [3]byte{0, 2, 78}: "Datacard Group", - [3]byte{0, 2, 79}: "IPM Datacom S.R.L.", - [3]byte{0, 2, 80}: "Geyser Networks, Inc.", - [3]byte{0, 2, 81}: "Soma Networks, Inc.", - [3]byte{0, 2, 82}: "Carrier Corporation", - [3]byte{0, 2, 83}: "Televideo, Inc.", - [3]byte{0, 2, 84}: "WorldGate", - [3]byte{0, 2, 85}: "IBM Corp", - [3]byte{0, 2, 86}: "Alpha Processor, Inc.", - [3]byte{0, 2, 87}: "Microcom Corp.", - [3]byte{0, 2, 88}: "Flying Packets Communications", - [3]byte{0, 2, 89}: "Tsann Kuen China (Shanghai)Enterprise Co., Ltd. IT Group", - [3]byte{0, 2, 90}: "Catena Networks", - [3]byte{0, 2, 91}: "Cambridge Silicon Radio", - [3]byte{0, 2, 92}: "SCI Systems (Kunshan) Co., Ltd.", - [3]byte{0, 2, 93}: "Calix Networks", - [3]byte{0, 2, 94}: "High Technology Ltd", - [3]byte{0, 2, 95}: "Nortel Networks", - [3]byte{0, 2, 96}: "Accordion Networks, Inc.", - [3]byte{0, 2, 97}: "Tilgin AB", - [3]byte{0, 2, 98}: "Soyo Group Soyo Com Tech Co., Ltd", - [3]byte{0, 2, 99}: "UPS Manufacturing SRL", - [3]byte{0, 2, 100}: "AudioRamp.com", - [3]byte{0, 2, 101}: "Virditech Co. Ltd.", - [3]byte{0, 2, 102}: "Thermalogic Corporation", - [3]byte{0, 2, 103}: "NODE RUNNER, INC.", - [3]byte{0, 2, 104}: "Harris Government Communications", - [3]byte{0, 2, 105}: "Nadatel Co., Ltd", - [3]byte{0, 2, 106}: "Cocess Telecom Co., Ltd.", - [3]byte{0, 2, 107}: "BCM Computers Co., Ltd.", - [3]byte{0, 2, 108}: "Philips CFT", - [3]byte{0, 2, 109}: "Adept Telecom", - [3]byte{0, 2, 110}: "NeGeN Access, Inc.", - [3]byte{0, 2, 111}: "Senao International Co., Ltd.", - [3]byte{0, 2, 112}: "Crewave Co., Ltd.", - [3]byte{0, 2, 113}: "Zhone Technologies", - [3]byte{0, 2, 114}: "CC&C Technologies, Inc.", - [3]byte{0, 2, 115}: "Coriolis Networks", - [3]byte{0, 2, 116}: "Tommy Technologies Corp.", - [3]byte{0, 2, 117}: "SMART Technologies, Inc.", - [3]byte{0, 2, 118}: "Primax Electronics Ltd.", - [3]byte{0, 2, 119}: "Cash Systemes Industrie", - [3]byte{0, 2, 120}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{0, 2, 121}: "Control Applications, Ltd.", - [3]byte{0, 2, 122}: "IOI Technology Corporation", - [3]byte{0, 2, 123}: "Amplify Net, Inc.", - [3]byte{0, 2, 124}: "Trilithic, Inc.", - [3]byte{0, 2, 125}: "Cisco Systems, Inc", - [3]byte{0, 2, 126}: "Cisco Systems, Inc", - [3]byte{0, 2, 127}: "ask-technologies.com", - [3]byte{0, 2, 128}: "Mu Net, Inc.", - [3]byte{0, 2, 129}: "Madge Ltd.", - [3]byte{0, 2, 130}: "ViaClix, Inc.", - [3]byte{0, 2, 131}: "Spectrum Controls, Inc.", - [3]byte{0, 2, 132}: "AREVA T&D", - [3]byte{0, 2, 133}: "Riverstone Networks", - [3]byte{0, 2, 134}: "Occam Networks", - [3]byte{0, 2, 135}: "Adapcom", - [3]byte{0, 2, 136}: "GLOBAL VILLAGE COMMUNICATION", - [3]byte{0, 2, 137}: "DNE Technologies", - [3]byte{0, 2, 138}: "Ambit Microsystems Corporation", - [3]byte{0, 2, 139}: "VDSL Systems OY", - [3]byte{0, 2, 140}: "Micrel-Synergy Semiconductor", - [3]byte{0, 2, 141}: "Movita Technologies, Inc.", - [3]byte{0, 2, 142}: "Rapid 5 Networks, Inc.", - [3]byte{0, 2, 143}: "Globetek, Inc.", - [3]byte{0, 2, 144}: "Woorigisool, Inc.", - [3]byte{0, 2, 145}: "Open Network Co., Ltd.", - [3]byte{0, 2, 146}: "Logic Innovations, Inc.", - [3]byte{0, 2, 147}: "Solid Data Systems", - [3]byte{0, 2, 148}: "Tokyo Sokushin Co., Ltd.", - [3]byte{0, 2, 149}: "IP.Access Limited", - [3]byte{0, 2, 150}: "Lectron Co,. Ltd.", - [3]byte{0, 2, 151}: "C-COR.net", - [3]byte{0, 2, 152}: "Broadframe Corporation", - [3]byte{0, 2, 153}: "Apex, Inc.", - [3]byte{0, 2, 154}: "Storage Apps", - [3]byte{0, 2, 155}: "Kreatel Communications AB", - [3]byte{0, 2, 156}: "3COM", - [3]byte{0, 2, 157}: "Merix Corp.", - [3]byte{0, 2, 158}: "Information Equipment Co., Ltd.", - [3]byte{0, 2, 159}: "L-3 Communication Aviation Recorders", - [3]byte{0, 2, 160}: "Flatstack Ltd.", - [3]byte{0, 2, 161}: "World Wide Packets", - [3]byte{0, 2, 162}: "Hilscher GmbH", - [3]byte{0, 2, 163}: "ABB Switzerland Ltd, Power Systems", - [3]byte{0, 2, 164}: "AddPac Technology Co., Ltd.", - [3]byte{0, 2, 165}: "Hewlett Packard", - [3]byte{0, 2, 166}: "Effinet Systems Co., Ltd.", - [3]byte{0, 2, 167}: "Vivace Networks", - [3]byte{0, 2, 168}: "Air Link Technology", - [3]byte{0, 2, 169}: "RACOM, s.r.o.", - [3]byte{0, 2, 170}: "PLcom Co., Ltd.", - [3]byte{0, 2, 171}: "CTC Union Technologies Co., Ltd.", - [3]byte{0, 2, 172}: "3PAR data", - [3]byte{0, 2, 173}: "HOYA Corporation", - [3]byte{0, 2, 174}: "Scannex Electronics Ltd.", - [3]byte{0, 2, 175}: "TeleCruz Technology, Inc.", - [3]byte{0, 2, 176}: "Hokubu Communication & Industrial Co., Ltd.", - [3]byte{0, 2, 177}: "Anritsu, Ltd.", - [3]byte{0, 2, 178}: "Cablevision", - [3]byte{0, 2, 179}: "Intel Corporation", - [3]byte{0, 2, 180}: "DAPHNE", - [3]byte{0, 2, 181}: "Avnet, Inc.", - [3]byte{0, 2, 182}: "Acrosser Technology Co., Ltd.", - [3]byte{0, 2, 183}: "Watanabe Electric Industry Co., Ltd.", - [3]byte{0, 2, 184}: "WHI KONSULT AB", - [3]byte{0, 2, 185}: "Cisco Systems, Inc", - [3]byte{0, 2, 186}: "Cisco Systems, Inc", - [3]byte{0, 2, 187}: "Continuous Computing Corp", - [3]byte{0, 2, 188}: "LVL 7 Systems, Inc.", - [3]byte{0, 2, 189}: "Bionet Co., Ltd.", - [3]byte{0, 2, 190}: "Totsu Engineering, Inc.", - [3]byte{0, 2, 191}: "dotRocket, Inc.", - [3]byte{0, 2, 192}: "Bencent Tzeng Industry Co., Ltd.", - [3]byte{0, 2, 193}: "Innovative Electronic Designs, Inc.", - [3]byte{0, 2, 194}: "Net Vision Telecom", - [3]byte{0, 2, 195}: "Arelnet Ltd.", - [3]byte{0, 2, 196}: "Vector International BVBA", - [3]byte{0, 2, 197}: "Evertz Microsystems Ltd.", - [3]byte{0, 2, 198}: "Data Track Technology PLC", - [3]byte{0, 2, 199}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{0, 2, 200}: "Technocom Communications Technology (pte) Ltd", - [3]byte{0, 2, 201}: "Mellanox Technologies, Inc.", - [3]byte{0, 2, 202}: "EndPoints, Inc.", - [3]byte{0, 2, 203}: "TriState Ltd.", - [3]byte{0, 2, 204}: "M.C.C.I", - [3]byte{0, 2, 205}: "TeleDream, Inc.", - [3]byte{0, 2, 206}: "FoxJet, Inc.", - [3]byte{0, 2, 207}: "ZyGate Communications, Inc.", - [3]byte{0, 2, 208}: "Comdial Corporation", - [3]byte{0, 2, 209}: "Vivotek, Inc.", - [3]byte{0, 2, 210}: "Workstation AG", - [3]byte{0, 2, 211}: "NetBotz, Inc.", - [3]byte{0, 2, 212}: "PDA Peripherals, Inc.", - [3]byte{0, 2, 213}: "ACR", - [3]byte{0, 2, 214}: "NICE Systems", - [3]byte{0, 2, 215}: "EMPEG Ltd", - [3]byte{0, 2, 216}: "BRECIS Communications Corporation", - [3]byte{0, 2, 217}: "Reliable Controls", - [3]byte{0, 2, 218}: "ExiO Communications, Inc.", - [3]byte{0, 2, 219}: "NETSEC", - [3]byte{0, 2, 220}: "Fujitsu General Limited", - [3]byte{0, 2, 221}: "Bromax Communications, Ltd.", - [3]byte{0, 2, 222}: "Astrodesign, Inc.", - [3]byte{0, 2, 223}: "Net Com Systems, Inc.", - [3]byte{0, 2, 224}: "ETAS GmbH", - [3]byte{0, 2, 225}: "Integrated Network Corporation", - [3]byte{0, 2, 226}: "NDC Infared Engineering", - [3]byte{0, 2, 227}: "LITE-ON Communications, Inc.", - [3]byte{0, 2, 228}: "JC HYUN Systems, Inc.", - [3]byte{0, 2, 229}: "Timeware Ltd.", - [3]byte{0, 2, 230}: "Gould Instrument Systems, Inc.", - [3]byte{0, 2, 231}: "CAB GmbH & Co KG", - [3]byte{0, 2, 232}: "E.D.&A.", - [3]byte{0, 2, 233}: "CS Systemes De Securite - C3S", - [3]byte{0, 2, 234}: "Focus Enhancements", - [3]byte{0, 2, 235}: "Pico Communications", - [3]byte{0, 2, 236}: "Maschoff Design Engineering", - [3]byte{0, 2, 237}: "DXO Telecom Co., Ltd.", - [3]byte{0, 2, 238}: "Nokia Danmark A/S", - [3]byte{0, 2, 239}: "CCC Network Systems Group Ltd.", - [3]byte{0, 2, 240}: "AME Optimedia Technology Co., Ltd.", - [3]byte{0, 2, 241}: "Pinetron Co., Ltd.", - [3]byte{0, 2, 242}: "eDevice, Inc.", - [3]byte{0, 2, 243}: "Media Serve Co., Ltd.", - [3]byte{0, 2, 244}: "PCTEL, Inc.", - [3]byte{0, 2, 245}: "VIVE Synergies, Inc.", - [3]byte{0, 2, 246}: "Equipe Communications", - [3]byte{0, 2, 247}: "ARM", - [3]byte{0, 2, 248}: "SEAKR Engineering, Inc.", - [3]byte{0, 2, 249}: "MIMOS Berhad", - [3]byte{0, 2, 250}: "DX Antenna Co., Ltd.", - [3]byte{0, 2, 251}: "Baumuller Aulugen-Systemtechnik GmbH", - [3]byte{0, 2, 252}: "Cisco Systems, Inc", - [3]byte{0, 2, 253}: "Cisco Systems, Inc", - [3]byte{0, 2, 254}: "Viditec, Inc.", - [3]byte{0, 2, 255}: "Handan BroadInfoCom", - [3]byte{0, 3, 0}: "Barracuda Networks, Inc.", - [3]byte{0, 3, 1}: "EXFO", - [3]byte{0, 3, 2}: "Charles Industries, Ltd.", - [3]byte{0, 3, 3}: "JAMA Electronics Co., Ltd.", - [3]byte{0, 3, 4}: "Pacific Broadband Communications", - [3]byte{0, 3, 5}: "MSC Vertriebs GmbH", - [3]byte{0, 3, 6}: "Fusion In Tech Co., Ltd.", - [3]byte{0, 3, 7}: "Secure Works, Inc.", - [3]byte{0, 3, 8}: "AM Communications, Inc.", - [3]byte{0, 3, 9}: "Texcel Technology PLC", - [3]byte{0, 3, 10}: "Argus Technologies", - [3]byte{0, 3, 11}: "Hunter Technology, Inc.", - [3]byte{0, 3, 12}: "Telesoft Technologies Ltd.", - [3]byte{0, 3, 13}: "Uniwill Computer Corp.", - [3]byte{0, 3, 14}: "Core Communications Co., Ltd.", - [3]byte{0, 3, 15}: "Digital China (Shanghai) Networks Ltd.", - [3]byte{0, 3, 16}: "E-Globaledge Corporation", - [3]byte{0, 3, 17}: "Micro Technology Co., Ltd.", - [3]byte{0, 3, 18}: "TR-Systemtechnik GmbH", - [3]byte{0, 3, 19}: "Access Media SPA", - [3]byte{0, 3, 20}: "Teleware Network Systems", - [3]byte{0, 3, 21}: "Cidco Incorporated", - [3]byte{0, 3, 22}: "Nobell Communications, Inc.", - [3]byte{0, 3, 23}: "Merlin Systems, Inc.", - [3]byte{0, 3, 24}: "Cyras Systems, Inc.", - [3]byte{0, 3, 25}: "Infineon AG", - [3]byte{0, 3, 26}: "Beijing Broad Telecom Ltd., China", - [3]byte{0, 3, 27}: "Cellvision Systems, Inc.", - [3]byte{0, 3, 28}: "Svenska Hardvarufabriken AB", - [3]byte{0, 3, 29}: "Taiwan Commate Computer, Inc.", - [3]byte{0, 3, 30}: "Optranet, Inc.", - [3]byte{0, 3, 31}: "Condev Ltd.", - [3]byte{0, 3, 32}: "Xpeed, Inc.", - [3]byte{0, 3, 33}: "Reco Research Co., Ltd.", - [3]byte{0, 3, 34}: "IDIS Co., Ltd.", - [3]byte{0, 3, 35}: "Cornet Technology, Inc.", - [3]byte{0, 3, 36}: "SANYO Consumer Electronics Co., Ltd.", - [3]byte{0, 3, 37}: "Arima Computer Corp.", - [3]byte{0, 3, 38}: "Iwasaki Information Systems Co., Ltd.", - [3]byte{0, 3, 39}: "ACT'L", - [3]byte{0, 3, 40}: "Mace Group, Inc.", - [3]byte{0, 3, 41}: "F3, Inc.", - [3]byte{0, 3, 42}: "UniData Communication Systems, Inc.", - [3]byte{0, 3, 43}: "GAI Datenfunksysteme GmbH", - [3]byte{0, 3, 44}: "ABB Switzerland Ltd", - [3]byte{0, 3, 45}: "IBASE Technology, Inc.", - [3]byte{0, 3, 46}: "Scope Information Management, Ltd.", - [3]byte{0, 3, 47}: "Global Sun Technology, Inc.", - [3]byte{0, 3, 48}: "Imagenics, Co., Ltd.", - [3]byte{0, 3, 49}: "Cisco Systems, Inc", - [3]byte{0, 3, 50}: "Cisco Systems, Inc", - [3]byte{0, 3, 51}: "Digitel Co., Ltd.", - [3]byte{0, 3, 52}: "Newport Electronics", - [3]byte{0, 3, 53}: "Mirae Technology", - [3]byte{0, 3, 54}: "Zetes Technologies", - [3]byte{0, 3, 55}: "Vaone, Inc.", - [3]byte{0, 3, 56}: "Oak Technology", - [3]byte{0, 3, 57}: "Eurologic Systems, Ltd.", - [3]byte{0, 3, 58}: "Silicon Wave, Inc.", - [3]byte{0, 3, 59}: "TAMI Tech Co., Ltd.", - [3]byte{0, 3, 60}: "Daiden Co., Ltd.", - [3]byte{0, 3, 61}: "ILSHin Lab", - [3]byte{0, 3, 62}: "Tateyama System Laboratory Co., Ltd.", - [3]byte{0, 3, 63}: "BigBand Networks, Ltd.", - [3]byte{0, 3, 64}: "Floware Wireless Systems, Ltd.", - [3]byte{0, 3, 65}: "Axon Digital Design", - [3]byte{0, 3, 66}: "Nortel Networks", - [3]byte{0, 3, 67}: "Martin Professional A/S", - [3]byte{0, 3, 68}: "Tietech.Co., Ltd.", - [3]byte{0, 3, 69}: "Routrek Networks Corporation", - [3]byte{0, 3, 70}: "Hitachi Kokusai Electric, Inc.", - [3]byte{0, 3, 71}: "Intel Corporation", - [3]byte{0, 3, 72}: "Norscan Instruments, Ltd.", - [3]byte{0, 3, 73}: "Vidicode Datacommunicatie B.V.", - [3]byte{0, 3, 74}: "RIAS Corporation", - [3]byte{0, 3, 75}: "Nortel Networks", - [3]byte{0, 3, 76}: "Shanghai DigiVision Technology Co., Ltd.", - [3]byte{0, 3, 77}: "Chiaro Networks, Ltd.", - [3]byte{0, 3, 78}: "Pos Data Company, Ltd.", - [3]byte{0, 3, 79}: "Sur-Gard Security", - [3]byte{0, 3, 80}: "BTICINO SPA", - [3]byte{0, 3, 81}: "Diebold, Inc.", - [3]byte{0, 3, 82}: "Colubris Networks", - [3]byte{0, 3, 83}: "Mitac, Inc.", - [3]byte{0, 3, 84}: "Fiber Logic Communications", - [3]byte{0, 3, 85}: "TeraBeam Internet Systems", - [3]byte{0, 3, 86}: "Wincor Nixdorf International GmbH", - [3]byte{0, 3, 87}: "Intervoice-Brite, Inc.", - [3]byte{0, 3, 88}: "Hanyang Digitech Co.Ltd", - [3]byte{0, 3, 89}: "DigitalSis", - [3]byte{0, 3, 90}: "Photron Limited", - [3]byte{0, 3, 91}: "BridgeWave Communications", - [3]byte{0, 3, 92}: "Saint Song Corp.", - [3]byte{0, 3, 93}: "Bosung Hi-Net Co., Ltd.", - [3]byte{0, 3, 94}: "Metropolitan Area Networks, Inc.", - [3]byte{0, 3, 95}: "Prüftechnik Condition Monitoring GmbH & Co. KG", - [3]byte{0, 3, 96}: "PAC Interactive Technology, Inc.", - [3]byte{0, 3, 97}: "Widcomm, Inc.", - [3]byte{0, 3, 98}: "Vodtel Communications, Inc.", - [3]byte{0, 3, 99}: "Miraesys Co., Ltd.", - [3]byte{0, 3, 100}: "Scenix Semiconductor, Inc.", - [3]byte{0, 3, 101}: "Kira Information & Communications, Ltd.", - [3]byte{0, 3, 102}: "ASM Pacific Technology", - [3]byte{0, 3, 103}: "Jasmine Networks, Inc.", - [3]byte{0, 3, 104}: "Embedone Co., Ltd.", - [3]byte{0, 3, 105}: "Nippon Antenna Co., Ltd.", - [3]byte{0, 3, 106}: "Mainnet, Ltd.", - [3]byte{0, 3, 107}: "Cisco Systems, Inc", - [3]byte{0, 3, 108}: "Cisco Systems, Inc", - [3]byte{0, 3, 109}: "Runtop, Inc.", - [3]byte{0, 3, 110}: "Nicon Systems (Pty) Limited", - [3]byte{0, 3, 111}: "Telsey SPA", - [3]byte{0, 3, 112}: "NXTV, Inc.", - [3]byte{0, 3, 113}: "Acomz Networks Corp.", - [3]byte{0, 3, 114}: "ULAN", - [3]byte{0, 3, 115}: "Aselsan A.S", - [3]byte{0, 3, 116}: "Control Microsystems", - [3]byte{0, 3, 117}: "NetMedia, Inc.", - [3]byte{0, 3, 118}: "Graphtec Technology, Inc.", - [3]byte{0, 3, 119}: "Gigabit Wireless", - [3]byte{0, 3, 120}: "HUMAX Co., Ltd.", - [3]byte{0, 3, 121}: "Proscend Communications, Inc.", - [3]byte{0, 3, 122}: "Taiyo Yuden Co., Ltd.", - [3]byte{0, 3, 123}: "IDEC IZUMI Corporation", - [3]byte{0, 3, 124}: "Coax Media", - [3]byte{0, 3, 125}: "Stellcom", - [3]byte{0, 3, 126}: "PORTech Communications, Inc.", - [3]byte{0, 3, 127}: "Atheros Communications, Inc.", - [3]byte{0, 3, 128}: "SSH Communications Security Corp.", - [3]byte{0, 3, 129}: "Ingenico International", - [3]byte{0, 3, 130}: "A-One Co., Ltd.", - [3]byte{0, 3, 131}: "Metera Networks, Inc.", - [3]byte{0, 3, 132}: "AETA", - [3]byte{0, 3, 133}: "Actelis Networks, Inc.", - [3]byte{0, 3, 134}: "Ho Net, Inc.", - [3]byte{0, 3, 135}: "Blaze Network Products", - [3]byte{0, 3, 136}: "Fastfame Technology Co., Ltd.", - [3]byte{0, 3, 137}: "PLANTRONICS, INC.", - [3]byte{0, 3, 138}: "America Online, Inc.", - [3]byte{0, 3, 139}: "PLUS-ONE I&T, Inc.", - [3]byte{0, 3, 140}: "Total Impact", - [3]byte{0, 3, 141}: "PCS Revenue Control Systems, Inc.", - [3]byte{0, 3, 142}: "Atoga Systems, Inc.", - [3]byte{0, 3, 143}: "Weinschel Corporation", - [3]byte{0, 3, 144}: "Digital Video Communications, Inc.", - [3]byte{0, 3, 145}: "Advanced Digital Broadcast, Ltd.", - [3]byte{0, 3, 146}: "Hyundai Teletek Co., Ltd.", - [3]byte{0, 3, 147}: "Apple, Inc.", - [3]byte{0, 3, 148}: "Connect One", - [3]byte{0, 3, 149}: "California Amplifier", - [3]byte{0, 3, 150}: "EZ Cast Co., Ltd.", - [3]byte{0, 3, 151}: "Watchfront Limited", - [3]byte{0, 3, 152}: "WISI", - [3]byte{0, 3, 153}: "Dongju Informations & Communications Co., Ltd.", - [3]byte{0, 3, 154}: "SiConnect", - [3]byte{0, 3, 155}: "NetChip Technology, Inc.", - [3]byte{0, 3, 156}: "OptiMight Communications, Inc.", - [3]byte{0, 3, 157}: "Qisda Corporation", - [3]byte{0, 3, 158}: "Tera System Co., Ltd.", - [3]byte{0, 3, 159}: "Cisco Systems, Inc", - [3]byte{0, 3, 160}: "Cisco Systems, Inc", - [3]byte{0, 3, 161}: "HIPER Information & Communication, Inc.", - [3]byte{0, 3, 162}: "Catapult Communications", - [3]byte{0, 3, 163}: "MAVIX, Ltd.", - [3]byte{0, 3, 164}: "Imation Corp.", - [3]byte{0, 3, 165}: "Medea Corporation", - [3]byte{0, 3, 166}: "Traxit Technology, Inc.", - [3]byte{0, 3, 167}: "Unixtar Technology, Inc.", - [3]byte{0, 3, 168}: "IDOT Computers, Inc.", - [3]byte{0, 3, 169}: "AXCENT Media AG", - [3]byte{0, 3, 170}: "Watlow", - [3]byte{0, 3, 171}: "Bridge Information Systems", - [3]byte{0, 3, 172}: "Fronius Schweissmaschinen", - [3]byte{0, 3, 173}: "Emerson Energy Systems AB", - [3]byte{0, 3, 174}: "Allied Advanced Manufacturing Pte, Ltd.", - [3]byte{0, 3, 175}: "Paragea Communications", - [3]byte{0, 3, 176}: "Xsense Technology Corp.", - [3]byte{0, 3, 177}: "Hospira Inc.", - [3]byte{0, 3, 178}: "Radware", - [3]byte{0, 3, 179}: "IA Link Systems Co., Ltd.", - [3]byte{0, 3, 180}: "Macrotek International Corp.", - [3]byte{0, 3, 181}: "Entra Technology Co.", - [3]byte{0, 3, 182}: "QSI Corporation", - [3]byte{0, 3, 183}: "ZACCESS Systems", - [3]byte{0, 3, 184}: "NetKit Solutions, LLC", - [3]byte{0, 3, 185}: "Hualong Telecom Co., Ltd.", - [3]byte{0, 3, 186}: "Oracle Corporation", - [3]byte{0, 3, 187}: "Signal Communications Limited", - [3]byte{0, 3, 188}: "COT GmbH", - [3]byte{0, 3, 189}: "OmniCluster Technologies, Inc.", - [3]byte{0, 3, 190}: "Netility", - [3]byte{0, 3, 191}: "Centerpoint Broadband Technologies, Inc.", - [3]byte{0, 3, 192}: "RFTNC Co., Ltd.", - [3]byte{0, 3, 193}: "Packet Dynamics Ltd", - [3]byte{0, 3, 194}: "Solphone K.K.", - [3]byte{0, 3, 195}: "Micronik Multimedia", - [3]byte{0, 3, 196}: "Tomra Systems ASA", - [3]byte{0, 3, 197}: "Mobotix AG", - [3]byte{0, 3, 198}: "ICUE Systems, Inc.", - [3]byte{0, 3, 199}: "hopf Elektronik GmbH", - [3]byte{0, 3, 200}: "CML Emergency Services", - [3]byte{0, 3, 201}: "TECOM Co., Ltd.", - [3]byte{0, 3, 202}: "MTS Systems Corp.", - [3]byte{0, 3, 203}: "Nippon Systems Development Co., Ltd.", - [3]byte{0, 3, 204}: "Momentum Computer, Inc.", - [3]byte{0, 3, 205}: "Clovertech, Inc.", - [3]byte{0, 3, 206}: "ETEN Technologies, Inc.", - [3]byte{0, 3, 207}: "Muxcom, Inc.", - [3]byte{0, 3, 208}: "KOANKEISO Co., Ltd.", - [3]byte{0, 3, 209}: "Takaya Corporation", - [3]byte{0, 3, 210}: "Crossbeam Systems, Inc.", - [3]byte{0, 3, 211}: "Internet Energy Systems, Inc.", - [3]byte{0, 3, 212}: "Alloptic, Inc.", - [3]byte{0, 3, 213}: "Advanced Communications Co., Ltd.", - [3]byte{0, 3, 214}: "RADVision, Ltd.", - [3]byte{0, 3, 215}: "NextNet Wireless, Inc.", - [3]byte{0, 3, 216}: "iMPath Networks, Inc.", - [3]byte{0, 3, 217}: "Secheron SA", - [3]byte{0, 3, 218}: "Takamisawa Cybernetics Co., Ltd.", - [3]byte{0, 3, 219}: "Apogee Electronics Corp.", - [3]byte{0, 3, 220}: "Lexar Media, Inc.", - [3]byte{0, 3, 221}: "Comark Interactive Solutions", - [3]byte{0, 3, 222}: "OTC Wireless", - [3]byte{0, 3, 223}: "Desana Systems", - [3]byte{0, 3, 224}: "ARRIS Group, Inc.", - [3]byte{0, 3, 225}: "Winmate Communication, Inc.", - [3]byte{0, 3, 226}: "Comspace Corporation", - [3]byte{0, 3, 227}: "Cisco Systems, Inc", - [3]byte{0, 3, 228}: "Cisco Systems, Inc", - [3]byte{0, 3, 229}: "Hermstedt SG", - [3]byte{0, 3, 230}: "Entone, Inc.", - [3]byte{0, 3, 231}: "Logostek Co. Ltd.", - [3]byte{0, 3, 232}: "Wavelength Digital Limited", - [3]byte{0, 3, 233}: "Akara Canada, Inc.", - [3]byte{0, 3, 234}: "Mega System Technologies, Inc.", - [3]byte{0, 3, 235}: "Atrica", - [3]byte{0, 3, 236}: "ICG Research, Inc.", - [3]byte{0, 3, 237}: "Shinkawa Electric Co., Ltd.", - [3]byte{0, 3, 238}: "MKNet Corporation", - [3]byte{0, 3, 239}: "Oneline AG", - [3]byte{0, 3, 240}: "Redfern Broadband Networks", - [3]byte{0, 3, 241}: "Cicada Semiconductor, Inc.", - [3]byte{0, 3, 242}: "Seneca Networks", - [3]byte{0, 3, 243}: "Dazzle Multimedia, Inc.", - [3]byte{0, 3, 244}: "NetBurner", - [3]byte{0, 3, 245}: "Chip2Chip", - [3]byte{0, 3, 246}: "Allegro Networks, Inc.", - [3]byte{0, 3, 247}: "Plast-Control GmbH", - [3]byte{0, 3, 248}: "SanCastle Technologies, Inc.", - [3]byte{0, 3, 249}: "Pleiades Communications, Inc.", - [3]byte{0, 3, 250}: "TiMetra Networks", - [3]byte{0, 3, 251}: "ENEGATE Co.,Ltd.", - [3]byte{0, 3, 252}: "Intertex Data AB", - [3]byte{0, 3, 253}: "Cisco Systems, Inc", - [3]byte{0, 3, 254}: "Cisco Systems, Inc", - [3]byte{0, 3, 255}: "Microsoft Corporation", - [3]byte{0, 4, 0}: "LEXMARK INTERNATIONAL, INC.", - [3]byte{0, 4, 1}: "Osaki Electric Co., Ltd.", - [3]byte{0, 4, 2}: "Nexsan Technologies, Ltd.", - [3]byte{0, 4, 3}: "Nexsi Corporation", - [3]byte{0, 4, 4}: "Makino Milling Machine Co., Ltd.", - [3]byte{0, 4, 5}: "ACN Technologies", - [3]byte{0, 4, 6}: "Fa. Metabox AG", - [3]byte{0, 4, 7}: "Topcon Positioning Systems, Inc.", - [3]byte{0, 4, 8}: "Sanko Electronics Co., Ltd.", - [3]byte{0, 4, 9}: "Cratos Networks", - [3]byte{0, 4, 10}: "Sage Systems", - [3]byte{0, 4, 11}: "3COM EUROPE LTD.", - [3]byte{0, 4, 12}: "Kanno Works, Ltd.", - [3]byte{0, 4, 13}: "Avaya Inc", - [3]byte{0, 4, 14}: "AVM GmbH", - [3]byte{0, 4, 15}: "Asus Network Technologies, Inc.", - [3]byte{0, 4, 16}: "Spinnaker Networks, Inc.", - [3]byte{0, 4, 17}: "Inkra Networks, Inc.", - [3]byte{0, 4, 18}: "WaveSmith Networks, Inc.", - [3]byte{0, 4, 19}: "SNOM Technology AG", - [3]byte{0, 4, 20}: "Umezawa Musen Denki Co., Ltd.", - [3]byte{0, 4, 21}: "Rasteme Systems Co., Ltd.", - [3]byte{0, 4, 22}: "Parks S/A Comunicacoes Digitais", - [3]byte{0, 4, 23}: "ELAU AG", - [3]byte{0, 4, 24}: "Teltronic S.A.U.", - [3]byte{0, 4, 25}: "Fibercycle Networks, Inc.", - [3]byte{0, 4, 26}: "Ines Test and Measurement GmbH & CoKG", - [3]byte{0, 4, 27}: "Bridgeworks Ltd.", - [3]byte{0, 4, 28}: "ipDialog, Inc.", - [3]byte{0, 4, 29}: "Corega of America", - [3]byte{0, 4, 30}: "Shikoku Instrumentation Co., Ltd.", - [3]byte{0, 4, 31}: "Sony Interactive Entertainment Inc.", - [3]byte{0, 4, 32}: "Slim Devices, Inc.", - [3]byte{0, 4, 33}: "Ocular Networks", - [3]byte{0, 4, 34}: "Studio Technologies, Inc", - [3]byte{0, 4, 35}: "Intel Corporation", - [3]byte{0, 4, 36}: "TMC s.r.l.", - [3]byte{0, 4, 37}: "Atmel Corporation", - [3]byte{0, 4, 38}: "Autosys", - [3]byte{0, 4, 39}: "Cisco Systems, Inc", - [3]byte{0, 4, 40}: "Cisco Systems, Inc", - [3]byte{0, 4, 41}: "Pixord Corporation", - [3]byte{0, 4, 42}: "Wireless Networks, Inc.", - [3]byte{0, 4, 43}: "IT Access Co., Ltd.", - [3]byte{0, 4, 44}: "Minet, Inc.", - [3]byte{0, 4, 45}: "Sarian Systems, Ltd.", - [3]byte{0, 4, 46}: "Netous Technologies, Ltd.", - [3]byte{0, 4, 47}: "International Communications Products, Inc.", - [3]byte{0, 4, 48}: "Netgem", - [3]byte{0, 4, 49}: "GlobalStreams, Inc.", - [3]byte{0, 4, 50}: "Voyetra Turtle Beach, Inc.", - [3]byte{0, 4, 51}: "Cyberboard A/S", - [3]byte{0, 4, 52}: "Accelent Systems, Inc.", - [3]byte{0, 4, 53}: "InfiNet LLC", - [3]byte{0, 4, 54}: "ELANsat Technologies, Inc.", - [3]byte{0, 4, 55}: "Powin Information Technology, Inc.", - [3]byte{0, 4, 56}: "Nortel Networks", - [3]byte{0, 4, 57}: "Rosco Entertainment Technology, Inc.", - [3]byte{0, 4, 58}: "Intelligent Telecommunications, Inc.", - [3]byte{0, 4, 59}: "Lava Computer Mfg., Inc.", - [3]byte{0, 4, 60}: "SONOS Co., Ltd.", - [3]byte{0, 4, 61}: "INDEL AG", - [3]byte{0, 4, 62}: "Telencomm", - [3]byte{0, 4, 63}: "ESTeem Wireless Modems, Inc", - [3]byte{0, 4, 64}: "cyberPIXIE, Inc.", - [3]byte{0, 4, 65}: "Half Dome Systems, Inc.", - [3]byte{0, 4, 66}: "NACT", - [3]byte{0, 4, 67}: "Agilent Technologies, Inc.", - [3]byte{0, 4, 68}: "Western Multiplex Corporation", - [3]byte{0, 4, 69}: "LMS Skalar Instruments GmbH", - [3]byte{0, 4, 70}: "CYZENTECH Co., Ltd.", - [3]byte{0, 4, 71}: "Acrowave Systems Co., Ltd.", - [3]byte{0, 4, 72}: "Polaroid Corporation", - [3]byte{0, 4, 73}: "Mapletree Networks", - [3]byte{0, 4, 74}: "iPolicy Networks, Inc.", - [3]byte{0, 4, 75}: "NVIDIA", - [3]byte{0, 4, 76}: "JENOPTIK", - [3]byte{0, 4, 77}: "Cisco Systems, Inc", - [3]byte{0, 4, 78}: "Cisco Systems, Inc", - [3]byte{0, 4, 79}: "Schubert System Elektronik Gmbh", - [3]byte{0, 4, 80}: "DMD Computers SRL", - [3]byte{0, 4, 81}: "Medrad, Inc.", - [3]byte{0, 4, 82}: "RocketLogix, Inc.", - [3]byte{0, 4, 83}: "YottaYotta, Inc.", - [3]byte{0, 4, 84}: "Quadriga UK", - [3]byte{0, 4, 85}: "ANTARA.net", - [3]byte{0, 4, 86}: "Cambium Networks Limited", - [3]byte{0, 4, 87}: "Universal Access Technology, Inc.", - [3]byte{0, 4, 88}: "Fusion X Co., Ltd.", - [3]byte{0, 4, 89}: "Veristar Corporation", - [3]byte{0, 4, 90}: "The Linksys Group, Inc.", - [3]byte{0, 4, 91}: "Techsan Electronics Co., Ltd.", - [3]byte{0, 4, 92}: "Mobiwave Pte Ltd", - [3]byte{0, 4, 93}: "BEKA Elektronik", - [3]byte{0, 4, 94}: "PolyTrax Information Technology AG", - [3]byte{0, 4, 95}: "Avalue Technology, Inc.", - [3]byte{0, 4, 96}: "Knilink Technology, Inc.", - [3]byte{0, 4, 97}: "EPOX Computer Co., Ltd.", - [3]byte{0, 4, 98}: "DAKOS Data & Communication Co., Ltd.", - [3]byte{0, 4, 99}: "Bosch Security Systems", - [3]byte{0, 4, 100}: "Pulse-Link Inc", - [3]byte{0, 4, 101}: "i.s.t isdn-support technik GmbH", - [3]byte{0, 4, 102}: "ARMITEL Co.", - [3]byte{0, 4, 103}: "Wuhan Research Institute of MII", - [3]byte{0, 4, 104}: "Vivity, Inc.", - [3]byte{0, 4, 105}: "Innocom, Inc.", - [3]byte{0, 4, 106}: "Navini Networks", - [3]byte{0, 4, 107}: "Palm Wireless, Inc.", - [3]byte{0, 4, 108}: "Cyber Technology Co., Ltd.", - [3]byte{0, 4, 109}: "Cisco Systems, Inc", - [3]byte{0, 4, 110}: "Cisco Systems, Inc", - [3]byte{0, 4, 111}: "Digitel S/A Industria Eletronica", - [3]byte{0, 4, 112}: "ipUnplugged AB", - [3]byte{0, 4, 113}: "IPrad", - [3]byte{0, 4, 114}: "Telelynx, Inc.", - [3]byte{0, 4, 115}: "Photonex Corporation", - [3]byte{0, 4, 116}: "LEGRAND", - [3]byte{0, 4, 117}: "3 Com Corporation", - [3]byte{0, 4, 118}: "3 Com Corporation", - [3]byte{0, 4, 119}: "Scalant Systems, Inc.", - [3]byte{0, 4, 120}: "G. Star Technology Corporation", - [3]byte{0, 4, 121}: "Radius Co., Ltd.", - [3]byte{0, 4, 122}: "AXXESSIT ASA", - [3]byte{0, 4, 123}: "Schlumberger", - [3]byte{0, 4, 124}: "Skidata AG", - [3]byte{0, 4, 125}: "Pelco", - [3]byte{0, 4, 126}: "Siqura B.V.", - [3]byte{0, 4, 127}: "Chr. Mayr GmbH & Co. KG", - [3]byte{0, 4, 128}: "Brocade Communications Systems, Inc.", - [3]byte{0, 4, 129}: "Econolite Control Products, Inc.", - [3]byte{0, 4, 130}: "Medialogic Corp.", - [3]byte{0, 4, 131}: "Deltron Technology, Inc.", - [3]byte{0, 4, 132}: "Amann GmbH", - [3]byte{0, 4, 133}: "PicoLight", - [3]byte{0, 4, 134}: "ITTC, University of Kansas", - [3]byte{0, 4, 135}: "Cogency Semiconductor, Inc.", - [3]byte{0, 4, 136}: "Eurotherm Controls", - [3]byte{0, 4, 137}: "YAFO Networks, Inc.", - [3]byte{0, 4, 138}: "Temia Vertriebs GmbH", - [3]byte{0, 4, 139}: "Poscon Corporation", - [3]byte{0, 4, 140}: "Nayna Networks, Inc.", - [3]byte{0, 4, 141}: "Teo Technologies, Inc", - [3]byte{0, 4, 142}: "Ohm Tech Labs, Inc.", - [3]byte{0, 4, 143}: "TD Systems Corporation", - [3]byte{0, 4, 144}: "Optical Access", - [3]byte{0, 4, 145}: "Technovision, Inc.", - [3]byte{0, 4, 146}: "Hive Internet, Ltd.", - [3]byte{0, 4, 147}: "Tsinghua Unisplendour Co., Ltd.", - [3]byte{0, 4, 148}: "Breezecom, Ltd.", - [3]byte{0, 4, 149}: "Tejas Networks India Limited", - [3]byte{0, 4, 150}: "Extreme Networks, Inc.", - [3]byte{0, 4, 151}: "MacroSystem Digital Video AG", - [3]byte{0, 4, 152}: "Mahi Networks", - [3]byte{0, 4, 153}: "Chino Corporation", - [3]byte{0, 4, 154}: "Cisco Systems, Inc", - [3]byte{0, 4, 155}: "Cisco Systems, Inc", - [3]byte{0, 4, 156}: "Surgient Networks, Inc.", - [3]byte{0, 4, 157}: "Ipanema Technologies", - [3]byte{0, 4, 158}: "Wirelink Co., Ltd.", - [3]byte{0, 4, 159}: "Freescale Semiconductor", - [3]byte{0, 4, 160}: "Verity Instruments, Inc.", - [3]byte{0, 4, 161}: "Pathway Connectivity", - [3]byte{0, 4, 162}: "L.S.I. Japan Co., Ltd.", - [3]byte{0, 4, 163}: "Microchip Technology Inc.", - [3]byte{0, 4, 164}: "NetEnabled, Inc.", - [3]byte{0, 4, 165}: "Barco Projection Systems NV", - [3]byte{0, 4, 166}: "SAF Tehnika Ltd.", - [3]byte{0, 4, 167}: "FabiaTech Corporation", - [3]byte{0, 4, 168}: "Broadmax Technologies, Inc.", - [3]byte{0, 4, 169}: "SandStream Technologies, Inc.", - [3]byte{0, 4, 170}: "Jetstream Communications", - [3]byte{0, 4, 171}: "Comverse Network Systems, Inc.", - [3]byte{0, 4, 172}: "IBM Corp", - [3]byte{0, 4, 173}: "Malibu Networks", - [3]byte{0, 4, 174}: "Sullair Corporation", - [3]byte{0, 4, 175}: "Digital Fountain, Inc.", - [3]byte{0, 4, 176}: "ELESIGN Co., Ltd.", - [3]byte{0, 4, 177}: "Signal Technology, Inc.", - [3]byte{0, 4, 178}: "ESSEGI SRL", - [3]byte{0, 4, 179}: "Videotek, Inc.", - [3]byte{0, 4, 180}: "CIAC", - [3]byte{0, 4, 181}: "Equitrac Corporation", - [3]byte{0, 4, 182}: "Stratex Networks, Inc.", - [3]byte{0, 4, 183}: "AMB i.t. Holding", - [3]byte{0, 4, 184}: "Kumahira Co., Ltd.", - [3]byte{0, 4, 185}: "S.I. Soubou, Inc.", - [3]byte{0, 4, 186}: "KDD Media Will Corporation", - [3]byte{0, 4, 187}: "Bardac Corporation", - [3]byte{0, 4, 188}: "Giantec, Inc.", - [3]byte{0, 4, 189}: "ARRIS Group, Inc.", - [3]byte{0, 4, 190}: "OptXCon, Inc.", - [3]byte{0, 4, 191}: "VersaLogic Corp.", - [3]byte{0, 4, 192}: "Cisco Systems, Inc", - [3]byte{0, 4, 193}: "Cisco Systems, Inc", - [3]byte{0, 4, 194}: "Magnipix, Inc.", - [3]byte{0, 4, 195}: "CASTOR Informatique", - [3]byte{0, 4, 196}: "Allen & Heath Limited", - [3]byte{0, 4, 197}: "ASE Technologies, USA", - [3]byte{0, 4, 198}: "YAMAHA MOTOR CO.,LTD", - [3]byte{0, 4, 199}: "NetMount", - [3]byte{0, 4, 200}: "LIBA Maschinenfabrik GmbH", - [3]byte{0, 4, 201}: "Micro Electron Co., Ltd.", - [3]byte{0, 4, 202}: "FreeMs Corp.", - [3]byte{0, 4, 203}: "Tdsoft Communication, Ltd.", - [3]byte{0, 4, 204}: "Peek Traffic B.V.", - [3]byte{0, 4, 205}: "Extenway Solutions Inc", - [3]byte{0, 4, 206}: "Patria Ailon", - [3]byte{0, 4, 207}: "Seagate Technology", - [3]byte{0, 4, 208}: "Softlink s.r.o.", - [3]byte{0, 4, 209}: "Drew Technologies, Inc.", - [3]byte{0, 4, 210}: "Adcon Telemetry GmbH", - [3]byte{0, 4, 211}: "Toyokeiki Co., Ltd.", - [3]byte{0, 4, 212}: "Proview Electronics Co., Ltd.", - [3]byte{0, 4, 213}: "Hitachi Information & Communication Engineering, Ltd.", - [3]byte{0, 4, 214}: "Takagi Industrial Co., Ltd.", - [3]byte{0, 4, 215}: "Omitec Instrumentation Ltd.", - [3]byte{0, 4, 216}: "IPWireless, Inc.", - [3]byte{0, 4, 217}: "Titan Electronics, Inc.", - [3]byte{0, 4, 218}: "Relax Technology, Inc.", - [3]byte{0, 4, 219}: "Tellus Group Corp.", - [3]byte{0, 4, 220}: "Nortel Networks", - [3]byte{0, 4, 221}: "Cisco Systems, Inc", - [3]byte{0, 4, 222}: "Cisco Systems, Inc", - [3]byte{0, 4, 223}: "Teracom Telematica Ltda.", - [3]byte{0, 4, 224}: "Procket Networks", - [3]byte{0, 4, 225}: "Infinior Microsystems", - [3]byte{0, 4, 226}: "SMC Networks, Inc.", - [3]byte{0, 4, 227}: "Accton Technology Corp", - [3]byte{0, 4, 228}: "Daeryung Ind., Inc.", - [3]byte{0, 4, 229}: "Glonet Systems, Inc.", - [3]byte{0, 4, 230}: "Banyan Network Private Limited", - [3]byte{0, 4, 231}: "Lightpointe Communications, Inc", - [3]byte{0, 4, 232}: "IER, Inc.", - [3]byte{0, 4, 233}: "Infiniswitch Corporation", - [3]byte{0, 4, 234}: "Hewlett Packard", - [3]byte{0, 4, 235}: "Paxonet Communications, Inc.", - [3]byte{0, 4, 236}: "Memobox SA", - [3]byte{0, 4, 237}: "Billion Electric Co., Ltd.", - [3]byte{0, 4, 238}: "Lincoln Electric Company", - [3]byte{0, 4, 239}: "Polestar Corp.", - [3]byte{0, 4, 240}: "International Computers, Ltd", - [3]byte{0, 4, 241}: "WhereNet", - [3]byte{0, 4, 242}: "Polycom", - [3]byte{0, 4, 243}: "FS FORTH-SYSTEME GmbH", - [3]byte{0, 4, 244}: "Infinite Electronics Inc.", - [3]byte{0, 4, 245}: "SnowShore Networks, Inc.", - [3]byte{0, 4, 246}: "Amphus", - [3]byte{0, 4, 247}: "Omega Band, Inc.", - [3]byte{0, 4, 248}: "QUALICABLE TV Industria E Com., Ltda", - [3]byte{0, 4, 249}: "Xtera Communications, Inc.", - [3]byte{0, 4, 250}: "NBS Technologies Inc.", - [3]byte{0, 4, 251}: "Commtech, Inc.", - [3]byte{0, 4, 252}: "Stratus Computer (DE), Inc.", - [3]byte{0, 4, 253}: "Japan Control Engineering Co., Ltd.", - [3]byte{0, 4, 254}: "Pelago Networks", - [3]byte{0, 4, 255}: "Acronet Co., Ltd.", - [3]byte{0, 5, 0}: "Cisco Systems, Inc", - [3]byte{0, 5, 1}: "Cisco Systems, Inc", - [3]byte{0, 5, 2}: "Apple, Inc.", - [3]byte{0, 5, 3}: "ICONAG", - [3]byte{0, 5, 4}: "Naray Information & Communication Enterprise", - [3]byte{0, 5, 5}: "Systems Integration Solutions, Inc.", - [3]byte{0, 5, 6}: "Reddo Networks AB", - [3]byte{0, 5, 7}: "Fine Appliance Corp.", - [3]byte{0, 5, 8}: "Inetcam, Inc.", - [3]byte{0, 5, 9}: "AVOC Nishimura Ltd.", - [3]byte{0, 5, 10}: "ICS Spa", - [3]byte{0, 5, 11}: "SICOM Systems, Inc.", - [3]byte{0, 5, 12}: "Network Photonics, Inc.", - [3]byte{0, 5, 13}: "Midstream Technologies, Inc.", - [3]byte{0, 5, 14}: "3ware, Inc.", - [3]byte{0, 5, 15}: "Tanaka S/S Ltd.", - [3]byte{0, 5, 16}: "Infinite Shanghai Communication Terminals Ltd.", - [3]byte{0, 5, 17}: "Complementary Technologies Ltd", - [3]byte{0, 5, 18}: "Zebra Technologies Inc", - [3]byte{0, 5, 19}: "VTLinx Multimedia Systems, Inc.", - [3]byte{0, 5, 20}: "KDT Systems Co., Ltd.", - [3]byte{0, 5, 21}: "Nuark Co., Ltd.", - [3]byte{0, 5, 22}: "SMART Modular Technologies", - [3]byte{0, 5, 23}: "Shellcomm, Inc.", - [3]byte{0, 5, 24}: "Jupiters Technology", - [3]byte{0, 5, 25}: "Siemens Building Technologies AG,", - [3]byte{0, 5, 26}: "3COM EUROPE LTD.", - [3]byte{0, 5, 27}: "Magic Control Technology Corporation", - [3]byte{0, 5, 28}: "Xnet Technology Corp.", - [3]byte{0, 5, 29}: "Airocon, Inc.", - [3]byte{0, 5, 30}: "Brocade Communications Systems, Inc.", - [3]byte{0, 5, 31}: "Taijin Media Co., Ltd.", - [3]byte{0, 5, 32}: "Smartronix, Inc.", - [3]byte{0, 5, 33}: "Control Microsystems", - [3]byte{0, 5, 34}: "LEA*D Corporation, Inc.", - [3]byte{0, 5, 35}: "AVL List GmbH", - [3]byte{0, 5, 36}: "BTL System (HK) Limited", - [3]byte{0, 5, 37}: "Puretek Industrial Co., Ltd.", - [3]byte{0, 5, 38}: "IPAS GmbH", - [3]byte{0, 5, 39}: "SJ Tek Co. Ltd", - [3]byte{0, 5, 40}: "New Focus, Inc.", - [3]byte{0, 5, 41}: "Shanghai Broadan Communication Technology Co., Ltd", - [3]byte{0, 5, 42}: "Ikegami Tsushinki Co., Ltd.", - [3]byte{0, 5, 43}: "HORIBA, Ltd.", - [3]byte{0, 5, 44}: "Supreme Magic Corporation", - [3]byte{0, 5, 45}: "Zoltrix International Limited", - [3]byte{0, 5, 46}: "Cinta Networks", - [3]byte{0, 5, 47}: "Leviton Network Solutions", - [3]byte{0, 5, 48}: "Andiamo Systems, Inc.", - [3]byte{0, 5, 49}: "Cisco Systems, Inc", - [3]byte{0, 5, 50}: "Cisco Systems, Inc", - [3]byte{0, 5, 51}: "Brocade Communications Systems, Inc.", - [3]byte{0, 5, 52}: "Northstar Engineering Ltd.", - [3]byte{0, 5, 53}: "Chip PC Ltd.", - [3]byte{0, 5, 54}: "Danam Communications, Inc.", - [3]byte{0, 5, 55}: "Nets Technology Co., Ltd.", - [3]byte{0, 5, 56}: "Merilus, Inc.", - [3]byte{0, 5, 57}: "A Brand New World in Sweden AB", - [3]byte{0, 5, 58}: "Willowglen Services Pte Ltd", - [3]byte{0, 5, 59}: "Harbour Networks Ltd., Co. Beijing", - [3]byte{0, 5, 60}: "XIRCOM", - [3]byte{0, 5, 61}: "Agere Systems", - [3]byte{0, 5, 62}: "KID Systeme GmbH", - [3]byte{0, 5, 63}: "VisionTek, Inc.", - [3]byte{0, 5, 64}: "FAST Corporation", - [3]byte{0, 5, 65}: "Advanced Systems Co., Ltd.", - [3]byte{0, 5, 66}: "Otari, Inc.", - [3]byte{0, 5, 67}: "IQ Wireless GmbH", - [3]byte{0, 5, 68}: "Valley Technologies, Inc.", - [3]byte{0, 5, 69}: "Internet Photonics", - [3]byte{0, 5, 70}: "KDDI Network & Solultions Inc.", - [3]byte{0, 5, 71}: "Starent Networks", - [3]byte{0, 5, 72}: "Disco Corporation", - [3]byte{0, 5, 73}: "Salira Optical Network Systems", - [3]byte{0, 5, 74}: "Ario Data Networks, Inc.", - [3]byte{0, 5, 75}: "Eaton Automation AG", - [3]byte{0, 5, 76}: "RF Innovations Pty Ltd", - [3]byte{0, 5, 77}: "Brans Technologies, Inc.", - [3]byte{0, 5, 78}: "Philips", - [3]byte{0, 5, 79}: "Garmin International", - [3]byte{0, 5, 80}: "Vcomms Connect Limited", - [3]byte{0, 5, 81}: "F & S Elektronik Systeme GmbH", - [3]byte{0, 5, 82}: "Xycotec Computer GmbH", - [3]byte{0, 5, 83}: "DVC Company, Inc.", - [3]byte{0, 5, 84}: "Rangestar Wireless", - [3]byte{0, 5, 85}: "Japan Cash Machine Co., Ltd.", - [3]byte{0, 5, 86}: "360 Systems", - [3]byte{0, 5, 87}: "Agile TV Corporation", - [3]byte{0, 5, 88}: "Synchronous, Inc.", - [3]byte{0, 5, 89}: "Intracom S.A.", - [3]byte{0, 5, 90}: "Power Dsine Ltd.", - [3]byte{0, 5, 91}: "Charles Industries, Ltd.", - [3]byte{0, 5, 92}: "Kowa Company, Ltd.", - [3]byte{0, 5, 93}: "D-LINK SYSTEMS, INC.", - [3]byte{0, 5, 94}: "Cisco Systems, Inc", - [3]byte{0, 5, 95}: "Cisco Systems, Inc", - [3]byte{0, 5, 96}: "LEADER COMM.CO., LTD", - [3]byte{0, 5, 97}: "nac Image Technology, Inc.", - [3]byte{0, 5, 98}: "Digital View Limited", - [3]byte{0, 5, 99}: "J-Works, Inc.", - [3]byte{0, 5, 100}: "Tsinghua Bitway Co., Ltd.", - [3]byte{0, 5, 101}: "Tailyn Communication Company Ltd.", - [3]byte{0, 5, 102}: "Secui.com Corporation", - [3]byte{0, 5, 103}: "Etymonic Design, Inc.", - [3]byte{0, 5, 104}: "Piltofish Networks AB", - [3]byte{0, 5, 105}: "VMware, Inc.", - [3]byte{0, 5, 106}: "Heuft Systemtechnik GmbH", - [3]byte{0, 5, 107}: "C.P. Technology Co., Ltd.", - [3]byte{0, 5, 108}: "Hung Chang Co., Ltd.", - [3]byte{0, 5, 109}: "Pacific Corporation", - [3]byte{0, 5, 110}: "National Enhance Technology, Inc.", - [3]byte{0, 5, 111}: "Innomedia Technologies Pvt. Ltd.", - [3]byte{0, 5, 112}: "Baydel Ltd.", - [3]byte{0, 5, 113}: "Seiwa Electronics Co.", - [3]byte{0, 5, 114}: "Deonet Co., Ltd.", - [3]byte{0, 5, 115}: "Cisco Systems, Inc", - [3]byte{0, 5, 116}: "Cisco Systems, Inc", - [3]byte{0, 5, 117}: "CDS-Electronics BV", - [3]byte{0, 5, 118}: "NSM Technology Ltd.", - [3]byte{0, 5, 119}: "SM Information & Communication", - [3]byte{0, 5, 120}: "Private", - [3]byte{0, 5, 121}: "Universal Control Solution Corp.", - [3]byte{0, 5, 122}: "Overture Networks", - [3]byte{0, 5, 123}: "Chung Nam Electronic Co., Ltd.", - [3]byte{0, 5, 124}: "RCO Security AB", - [3]byte{0, 5, 125}: "Sun Communications, Inc.", - [3]byte{0, 5, 126}: "Eckelmann Steuerungstechnik GmbH", - [3]byte{0, 5, 127}: "Acqis Technology", - [3]byte{0, 5, 128}: "FibroLAN Ltd.", - [3]byte{0, 5, 129}: "Snell", - [3]byte{0, 5, 130}: "ClearCube Technology", - [3]byte{0, 5, 131}: "ImageCom Limited", - [3]byte{0, 5, 132}: "AbsoluteValue Systems, Inc.", - [3]byte{0, 5, 133}: "Juniper Networks", - [3]byte{0, 5, 134}: "Lucent Technologies", - [3]byte{0, 5, 135}: "Locus, Incorporated", - [3]byte{0, 5, 136}: "Sensoria Corp.", - [3]byte{0, 5, 137}: "National Datacomputer", - [3]byte{0, 5, 138}: "Netcom Co., Ltd.", - [3]byte{0, 5, 139}: "IPmental, Inc.", - [3]byte{0, 5, 140}: "Opentech Inc.", - [3]byte{0, 5, 141}: "Lynx Photonic Networks, Inc.", - [3]byte{0, 5, 142}: "Flextronics International GmbH & Co. Nfg. KG", - [3]byte{0, 5, 143}: "CLCsoft co.", - [3]byte{0, 5, 144}: "Swissvoice Ltd.", - [3]byte{0, 5, 145}: "Active Silicon Ltd", - [3]byte{0, 5, 146}: "Pultek Corp.", - [3]byte{0, 5, 147}: "Grammar Engine Inc.", - [3]byte{0, 5, 148}: "HMS Industrial Networks", - [3]byte{0, 5, 149}: "Alesis Corporation", - [3]byte{0, 5, 150}: "Genotech Co., Ltd.", - [3]byte{0, 5, 151}: "Eagle Traffic Control Systems", - [3]byte{0, 5, 152}: "CRONOS S.r.l.", - [3]byte{0, 5, 153}: "DRS Test and Energy Management or DRS-TEM", - [3]byte{0, 5, 154}: "Cisco Systems, Inc", - [3]byte{0, 5, 155}: "Cisco Systems, Inc", - [3]byte{0, 5, 156}: "Kleinknecht GmbH, Ing. Büro", - [3]byte{0, 5, 157}: "Daniel Computing Systems, Inc.", - [3]byte{0, 5, 158}: "Zinwell Corporation", - [3]byte{0, 5, 159}: "Yotta Networks, Inc.", - [3]byte{0, 5, 160}: "MOBILINE Kft.", - [3]byte{0, 5, 161}: "Zenocom", - [3]byte{0, 5, 162}: "CELOX Networks", - [3]byte{0, 5, 163}: "QEI, Inc.", - [3]byte{0, 5, 164}: "Lucid Voice Ltd.", - [3]byte{0, 5, 165}: "KOTT", - [3]byte{0, 5, 166}: "Extron Electronics", - [3]byte{0, 5, 167}: "HYPERCHIP Inc.", - [3]byte{0, 5, 168}: "WYLE ELECTRONICS", - [3]byte{0, 5, 169}: "Princeton Networks, Inc.", - [3]byte{0, 5, 170}: "Moore Industries International Inc.", - [3]byte{0, 5, 171}: "Cyber Fone, Inc.", - [3]byte{0, 5, 172}: "Northern Digital, Inc.", - [3]byte{0, 5, 173}: "Topspin Communications, Inc.", - [3]byte{0, 5, 174}: "Mediaport USA", - [3]byte{0, 5, 175}: "InnoScan Computing A/S", - [3]byte{0, 5, 176}: "Korea Computer Technology Co., Ltd.", - [3]byte{0, 5, 177}: "ASB Technology BV", - [3]byte{0, 5, 178}: "Medison Co., Ltd.", - [3]byte{0, 5, 179}: "Asahi-Engineering Co., Ltd.", - [3]byte{0, 5, 180}: "Aceex Corporation", - [3]byte{0, 5, 181}: "Broadcom Technologies", - [3]byte{0, 5, 182}: "INSYS Microelectronics GmbH", - [3]byte{0, 5, 183}: "Arbor Technology Corp.", - [3]byte{0, 5, 184}: "Electronic Design Associates, Inc.", - [3]byte{0, 5, 185}: "Airvana, Inc.", - [3]byte{0, 5, 186}: "Area Netwoeks, Inc.", - [3]byte{0, 5, 187}: "Myspace AB", - [3]byte{0, 5, 188}: "Resource Data Management Ltd", - [3]byte{0, 5, 189}: "ROAX BV", - [3]byte{0, 5, 190}: "Kongsberg Seatex AS", - [3]byte{0, 5, 191}: "JustEzy Technology, Inc.", - [3]byte{0, 5, 192}: "Digital Network Alacarte Co., Ltd.", - [3]byte{0, 5, 193}: "A-Kyung Motion, Inc.", - [3]byte{0, 5, 194}: "Soronti, Inc.", - [3]byte{0, 5, 195}: "Pacific Instruments, Inc.", - [3]byte{0, 5, 196}: "Telect, Inc.", - [3]byte{0, 5, 197}: "Flaga HF", - [3]byte{0, 5, 198}: "Triz Communications", - [3]byte{0, 5, 199}: "I/F-COM A/S", - [3]byte{0, 5, 200}: "VERYTECH", - [3]byte{0, 5, 201}: "LG Innotek Co., Ltd.", - [3]byte{0, 5, 202}: "Hitron Technology, Inc.", - [3]byte{0, 5, 203}: "ROIS Technologies, Inc.", - [3]byte{0, 5, 204}: "Sumtel Communications, Inc.", - [3]byte{0, 5, 205}: "D&M Holdings Inc.", - [3]byte{0, 5, 206}: "Prolink Microsystems Corporation", - [3]byte{0, 5, 207}: "Thunder River Technologies, Inc.", - [3]byte{0, 5, 208}: "Solinet Systems", - [3]byte{0, 5, 209}: "Metavector Technologies", - [3]byte{0, 5, 210}: "DAP Technologies", - [3]byte{0, 5, 211}: "eProduction Solutions, Inc.", - [3]byte{0, 5, 212}: "FutureSmart Networks, Inc.", - [3]byte{0, 5, 213}: "Speedcom Wireless", - [3]byte{0, 5, 214}: "L-3 Linkabit", - [3]byte{0, 5, 215}: "Vista Imaging, Inc.", - [3]byte{0, 5, 216}: "Arescom, Inc.", - [3]byte{0, 5, 217}: "Techno Valley, Inc.", - [3]byte{0, 5, 218}: "Apex Automationstechnik", - [3]byte{0, 5, 219}: "PSI Nentec GmbH", - [3]byte{0, 5, 220}: "Cisco Systems, Inc", - [3]byte{0, 5, 221}: "Cisco Systems, Inc", - [3]byte{0, 5, 222}: "Gi Fone Korea, Inc.", - [3]byte{0, 5, 223}: "Electronic Innovation, Inc.", - [3]byte{0, 5, 224}: "Empirix Corp.", - [3]byte{0, 5, 225}: "Trellis Photonics, Ltd.", - [3]byte{0, 5, 226}: "Creativ Network Technologies", - [3]byte{0, 5, 227}: "LightSand Communications, Inc.", - [3]byte{0, 5, 228}: "Red Lion Controls Inc.", - [3]byte{0, 5, 229}: "Renishaw PLC", - [3]byte{0, 5, 230}: "Egenera, Inc.", - [3]byte{0, 5, 231}: "Netrake an AudioCodes Company", - [3]byte{0, 5, 232}: "TurboWave, Inc.", - [3]byte{0, 5, 233}: "Unicess Network, Inc.", - [3]byte{0, 5, 234}: "Rednix", - [3]byte{0, 5, 235}: "Blue Ridge Networks, Inc.", - [3]byte{0, 5, 236}: "Mosaic Systems Inc.", - [3]byte{0, 5, 237}: "Technikum Joanneum GmbH", - [3]byte{0, 5, 238}: "Vanderbilt International (SWE) AB", - [3]byte{0, 5, 239}: "ADOIR Digital Technology", - [3]byte{0, 5, 240}: "SATEC", - [3]byte{0, 5, 241}: "Vrcom, Inc.", - [3]byte{0, 5, 242}: "Power R, Inc.", - [3]byte{0, 5, 243}: "Webyn", - [3]byte{0, 5, 244}: "System Base Co., Ltd.", - [3]byte{0, 5, 245}: "Geospace Technologies", - [3]byte{0, 5, 246}: "Young Chang Co. Ltd.", - [3]byte{0, 5, 247}: "Analog Devices, Inc.", - [3]byte{0, 5, 248}: "Real Time Access, Inc.", - [3]byte{0, 5, 249}: "TOA Corporation", - [3]byte{0, 5, 250}: "IPOptical, Inc.", - [3]byte{0, 5, 251}: "ShareGate, Inc.", - [3]byte{0, 5, 252}: "Schenck Pegasus Corp.", - [3]byte{0, 5, 253}: "PacketLight Networks Ltd.", - [3]byte{0, 5, 254}: "Traficon N.V.", - [3]byte{0, 5, 255}: "SNS Solutions, Inc.", - [3]byte{0, 6, 0}: "Toshiba Teli Corporation", - [3]byte{0, 6, 1}: "Otanikeiki Co., Ltd.", - [3]byte{0, 6, 2}: "Cirkitech Electronics Co.", - [3]byte{0, 6, 3}: "Baker Hughes Inc.", - [3]byte{0, 6, 4}: "@Track Communications, Inc.", - [3]byte{0, 6, 5}: "Inncom International, Inc.", - [3]byte{0, 6, 6}: "RapidWAN, Inc.", - [3]byte{0, 6, 7}: "Omni Directional Control Technology Inc.", - [3]byte{0, 6, 8}: "At-Sky SAS", - [3]byte{0, 6, 9}: "Crossport Systems", - [3]byte{0, 6, 10}: "Blue2space", - [3]byte{0, 6, 11}: "Artesyn Embedded Technologies", - [3]byte{0, 6, 12}: "Melco Industries, Inc.", - [3]byte{0, 6, 13}: "Wave7 Optics", - [3]byte{0, 6, 14}: "IGYS Systems, Inc.", - [3]byte{0, 6, 15}: "Narad Networks Inc", - [3]byte{0, 6, 16}: "Abeona Networks Inc", - [3]byte{0, 6, 17}: "Zeus Wireless, Inc.", - [3]byte{0, 6, 18}: "Accusys, Inc.", - [3]byte{0, 6, 19}: "Kawasaki Microelectronics Incorporated", - [3]byte{0, 6, 20}: "Prism Holdings", - [3]byte{0, 6, 21}: "Kimoto Electric Co., Ltd.", - [3]byte{0, 6, 22}: "Tel Net Co., Ltd.", - [3]byte{0, 6, 23}: "Redswitch Inc.", - [3]byte{0, 6, 24}: "DigiPower Manufacturing Inc.", - [3]byte{0, 6, 25}: "Connection Technology Systems", - [3]byte{0, 6, 26}: "Zetari Inc.", - [3]byte{0, 6, 27}: "Notebook Development Lab. Lenovo Japan Ltd.", - [3]byte{0, 6, 28}: "Hoshino Metal Industries, Ltd.", - [3]byte{0, 6, 29}: "MIP Telecom, Inc.", - [3]byte{0, 6, 30}: "Maxan Systems", - [3]byte{0, 6, 31}: "Vision Components GmbH", - [3]byte{0, 6, 32}: "Serial System Ltd.", - [3]byte{0, 6, 33}: "Hinox, Co., Ltd.", - [3]byte{0, 6, 34}: "Chung Fu Chen Yeh Enterprise Corp.", - [3]byte{0, 6, 35}: "MGE UPS Systems France", - [3]byte{0, 6, 36}: "Gentner Communications Corp.", - [3]byte{0, 6, 37}: "The Linksys Group, Inc.", - [3]byte{0, 6, 38}: "MWE GmbH", - [3]byte{0, 6, 39}: "Uniwide Technologies, Inc.", - [3]byte{0, 6, 40}: "Cisco Systems, Inc", - [3]byte{0, 6, 41}: "IBM Corp", - [3]byte{0, 6, 42}: "Cisco Systems, Inc", - [3]byte{0, 6, 43}: "INTRASERVER TECHNOLOGY", - [3]byte{0, 6, 44}: "Bivio Networks", - [3]byte{0, 6, 45}: "TouchStar Technologies, L.L.C.", - [3]byte{0, 6, 46}: "Aristos Logic Corp.", - [3]byte{0, 6, 47}: "Pivotech Systems Inc.", - [3]byte{0, 6, 48}: "Adtranz Sweden", - [3]byte{0, 6, 49}: "Calix Inc.", - [3]byte{0, 6, 50}: "Mesco Engineering GmbH", - [3]byte{0, 6, 51}: "Cross Match Technologies GmbH", - [3]byte{0, 6, 52}: "GTE Airfone Inc.", - [3]byte{0, 6, 53}: "PacketAir Networks, Inc.", - [3]byte{0, 6, 54}: "Jedai Broadband Networks", - [3]byte{0, 6, 55}: "Toptrend-Meta Information (ShenZhen) Inc.", - [3]byte{0, 6, 56}: "Sungjin C&C Co., Ltd.", - [3]byte{0, 6, 57}: "Newtec", - [3]byte{0, 6, 58}: "Dura Micro, Inc.", - [3]byte{0, 6, 59}: "Arcturus Networks Inc.", - [3]byte{0, 6, 60}: "Intrinsyc Software International Inc.", - [3]byte{0, 6, 61}: "Microwave Data Systems Inc.", - [3]byte{0, 6, 62}: "Opthos Inc.", - [3]byte{0, 6, 63}: "Everex Communications Inc.", - [3]byte{0, 6, 64}: "White Rock Networks", - [3]byte{0, 6, 65}: "ITCN", - [3]byte{0, 6, 66}: "Genetel Systems Inc.", - [3]byte{0, 6, 67}: "SONO Computer Co., Ltd.", - [3]byte{0, 6, 68}: "neix,Inc", - [3]byte{0, 6, 69}: "Meisei Electric Co. Ltd.", - [3]byte{0, 6, 70}: "ShenZhen XunBao Network Technology Co Ltd", - [3]byte{0, 6, 71}: "Etrali S.A.", - [3]byte{0, 6, 72}: "Seedsware, Inc.", - [3]byte{0, 6, 73}: "3M Deutschland GmbH", - [3]byte{0, 6, 74}: "Honeywell Co., Ltd. (KOREA)", - [3]byte{0, 6, 75}: "Alexon Co., Ltd.", - [3]byte{0, 6, 76}: "Invicta Networks, Inc.", - [3]byte{0, 6, 77}: "Sencore", - [3]byte{0, 6, 78}: "Broad Net Technology Inc.", - [3]byte{0, 6, 79}: "PRO-NETS Technology Corporation", - [3]byte{0, 6, 80}: "Tiburon Networks, Inc.", - [3]byte{0, 6, 81}: "Aspen Networks Inc.", - [3]byte{0, 6, 82}: "Cisco Systems, Inc", - [3]byte{0, 6, 83}: "Cisco Systems, Inc", - [3]byte{0, 6, 84}: "Winpresa Building Automation Technologies GmbH", - [3]byte{0, 6, 85}: "Yipee, Inc.", - [3]byte{0, 6, 86}: "Tactel AB", - [3]byte{0, 6, 87}: "Market Central, Inc.", - [3]byte{0, 6, 88}: "Helmut Fischer GmbH Institut für Elektronik und Messtechnik", - [3]byte{0, 6, 89}: "EAL (Apeldoorn) B.V.", - [3]byte{0, 6, 90}: "Strix Systems", - [3]byte{0, 6, 91}: "Dell Inc.", - [3]byte{0, 6, 92}: "Malachite Technologies, Inc.", - [3]byte{0, 6, 93}: "Heidelberg Web Systems", - [3]byte{0, 6, 94}: "Photuris, Inc.", - [3]byte{0, 6, 95}: "ECI Telecom Ltd.", - [3]byte{0, 6, 96}: "NADEX Co., Ltd.", - [3]byte{0, 6, 97}: "NIA Home Technologies Corp.", - [3]byte{0, 6, 98}: "MBM Technology Ltd.", - [3]byte{0, 6, 99}: "Human Technology Co., Ltd.", - [3]byte{0, 6, 100}: "Fostex Corporation", - [3]byte{0, 6, 101}: "Sunny Giken, Inc.", - [3]byte{0, 6, 102}: "Roving Networks", - [3]byte{0, 6, 103}: "Tripp Lite", - [3]byte{0, 6, 104}: "Vicon Industries Inc.", - [3]byte{0, 6, 105}: "Datasound Laboratories Ltd", - [3]byte{0, 6, 106}: "InfiniCon Systems, Inc.", - [3]byte{0, 6, 107}: "Sysmex Corporation", - [3]byte{0, 6, 108}: "Robinson Corporation", - [3]byte{0, 6, 109}: "Compuprint S.P.A.", - [3]byte{0, 6, 110}: "Delta Electronics, Inc.", - [3]byte{0, 6, 111}: "Korea Data Systems", - [3]byte{0, 6, 112}: "Upponetti Oy", - [3]byte{0, 6, 113}: "Softing AG", - [3]byte{0, 6, 114}: "Netezza", - [3]byte{0, 6, 115}: "TKH Security Solutions USA", - [3]byte{0, 6, 116}: "Spectrum Control, Inc.", - [3]byte{0, 6, 117}: "Banderacom, Inc.", - [3]byte{0, 6, 118}: "Novra Technologies Inc.", - [3]byte{0, 6, 119}: "SICK AG", - [3]byte{0, 6, 120}: "D&M Holdings Inc.", - [3]byte{0, 6, 121}: "Konami Corporation", - [3]byte{0, 6, 122}: "JMP Systems", - [3]byte{0, 6, 123}: "Toplink C&C Corporation", - [3]byte{0, 6, 124}: "Cisco Systems, Inc", - [3]byte{0, 6, 125}: "Takasago Ltd.", - [3]byte{0, 6, 126}: "WinCom Systems, Inc.", - [3]byte{0, 6, 127}: "Digeo, Inc.", - [3]byte{0, 6, 128}: "Card Access, Inc.", - [3]byte{0, 6, 129}: "Goepel Electronic GmbH", - [3]byte{0, 6, 130}: "Convedia", - [3]byte{0, 6, 131}: "Bravara Communications, Inc.", - [3]byte{0, 6, 132}: "Biacore AB", - [3]byte{0, 6, 133}: "NetNearU Corporation", - [3]byte{0, 6, 134}: "ZARDCOM Co., Ltd.", - [3]byte{0, 6, 135}: "Omnitron Systems Technology, Inc.", - [3]byte{0, 6, 136}: "Telways Communication Co., Ltd.", - [3]byte{0, 6, 137}: "yLez Technologies Pte Ltd", - [3]byte{0, 6, 138}: "NeuronNet Co. Ltd. R&D Center", - [3]byte{0, 6, 139}: "AirRunner Technologies, Inc.", - [3]byte{0, 6, 140}: "3COM CORPORATION", - [3]byte{0, 6, 141}: "SEPATON, Inc.", - [3]byte{0, 6, 142}: "HID Corporation", - [3]byte{0, 6, 143}: "Telemonitor, Inc.", - [3]byte{0, 6, 144}: "Euracom Communication GmbH", - [3]byte{0, 6, 145}: "PT Inovacao", - [3]byte{0, 6, 146}: "Intruvert Networks, Inc.", - [3]byte{0, 6, 147}: "Flexus Computer Technology, Inc.", - [3]byte{0, 6, 148}: "Mobillian Corporation", - [3]byte{0, 6, 149}: "Ensure Technologies, Inc.", - [3]byte{0, 6, 150}: "Advent Networks", - [3]byte{0, 6, 151}: "R & D Center", - [3]byte{0, 6, 152}: "egnite GmbH", - [3]byte{0, 6, 153}: "Vida Design Co.", - [3]byte{0, 6, 154}: "e & Tel", - [3]byte{0, 6, 155}: "AVT Audio Video Technologies GmbH", - [3]byte{0, 6, 156}: "Transmode Systems AB", - [3]byte{0, 6, 157}: "Petards Ltd", - [3]byte{0, 6, 158}: "UNIQA, Inc.", - [3]byte{0, 6, 159}: "Kuokoa Networks", - [3]byte{0, 6, 160}: "Mx Imaging", - [3]byte{0, 6, 161}: "Celsian Technologies, Inc.", - [3]byte{0, 6, 162}: "Microtune, Inc.", - [3]byte{0, 6, 163}: "Bitran Corporation", - [3]byte{0, 6, 164}: "INNOWELL Corp.", - [3]byte{0, 6, 165}: "PINON Corp.", - [3]byte{0, 6, 166}: "Artistic Licence Engineering Ltd", - [3]byte{0, 6, 167}: "Primarion", - [3]byte{0, 6, 168}: "KC Technology, Inc.", - [3]byte{0, 6, 169}: "Universal Instruments Corp.", - [3]byte{0, 6, 170}: "VT Miltope", - [3]byte{0, 6, 171}: "W-Link Systems, Inc.", - [3]byte{0, 6, 172}: "Intersoft Co.", - [3]byte{0, 6, 173}: "KB Electronics Ltd.", - [3]byte{0, 6, 174}: "Himachal Futuristic Communications Ltd", - [3]byte{0, 6, 175}: "Xalted Networks", - [3]byte{0, 6, 176}: "Comtech EF Data Corp.", - [3]byte{0, 6, 177}: "Sonicwall", - [3]byte{0, 6, 178}: "Linxtek Co.", - [3]byte{0, 6, 179}: "Diagraph Corporation", - [3]byte{0, 6, 180}: "Vorne Industries, Inc.", - [3]byte{0, 6, 181}: "Source Photonics, Inc.", - [3]byte{0, 6, 182}: "Nir-Or Israel Ltd.", - [3]byte{0, 6, 183}: "TELEM GmbH", - [3]byte{0, 6, 184}: "Bandspeed Pty Ltd", - [3]byte{0, 6, 185}: "A5TEK Corp.", - [3]byte{0, 6, 186}: "Westwave Communications", - [3]byte{0, 6, 187}: "ATI Technologies Inc.", - [3]byte{0, 6, 188}: "Macrolink, Inc.", - [3]byte{0, 6, 189}: "BNTECHNOLOGY Co., Ltd.", - [3]byte{0, 6, 190}: "Baumer Optronic GmbH", - [3]byte{0, 6, 191}: "Accella Technologies Co., Ltd.", - [3]byte{0, 6, 192}: "United Internetworks, Inc.", - [3]byte{0, 6, 193}: "Cisco Systems, Inc", - [3]byte{0, 6, 194}: "Smartmatic Corporation", - [3]byte{0, 6, 195}: "Schindler Elevator Ltd.", - [3]byte{0, 6, 196}: "Piolink Inc.", - [3]byte{0, 6, 197}: "INNOVI Technologies Limited", - [3]byte{0, 6, 198}: "lesswire AG", - [3]byte{0, 6, 199}: "RFNET Technologies Pte Ltd (S)", - [3]byte{0, 6, 200}: "Sumitomo Metal Micro Devices, Inc.", - [3]byte{0, 6, 201}: "Technical Marketing Research, Inc.", - [3]byte{0, 6, 202}: "American Computer & Digital Components, Inc. (ACDC)", - [3]byte{0, 6, 203}: "Jotron Electronics A/S", - [3]byte{0, 6, 204}: "JMI Electronics Co., Ltd.", - [3]byte{0, 6, 205}: "Leaf Imaging Ltd.", - [3]byte{0, 6, 206}: "DATENO", - [3]byte{0, 6, 207}: "Thales Avionics In-Flight Systems, LLC", - [3]byte{0, 6, 208}: "Elgar Electronics Corp.", - [3]byte{0, 6, 209}: "Tahoe Networks, Inc.", - [3]byte{0, 6, 210}: "Tundra Semiconductor Corp.", - [3]byte{0, 6, 211}: "Alpha Telecom, Inc. U.S.A.", - [3]byte{0, 6, 212}: "Interactive Objects, Inc.", - [3]byte{0, 6, 213}: "Diamond Systems Corp.", - [3]byte{0, 6, 214}: "Cisco Systems, Inc", - [3]byte{0, 6, 215}: "Cisco Systems, Inc", - [3]byte{0, 6, 216}: "Maple Optical Systems", - [3]byte{0, 6, 217}: "IPM-Net S.p.A.", - [3]byte{0, 6, 218}: "ITRAN Communications Ltd.", - [3]byte{0, 6, 219}: "ICHIPS Co., Ltd.", - [3]byte{0, 6, 220}: "Syabas Technology (Amquest)", - [3]byte{0, 6, 221}: "AT & T Laboratories - Cambridge Ltd", - [3]byte{0, 6, 222}: "Flash Technology", - [3]byte{0, 6, 223}: "AIDONIC Corporation", - [3]byte{0, 6, 224}: "MAT Co., Ltd.", - [3]byte{0, 6, 225}: "Techno Trade s.a", - [3]byte{0, 6, 226}: "Ceemax Technology Co., Ltd.", - [3]byte{0, 6, 227}: "Quantitative Imaging Corporation", - [3]byte{0, 6, 228}: "Citel Technologies Ltd.", - [3]byte{0, 6, 229}: "Fujian Newland Computer Ltd. Co.", - [3]byte{0, 6, 230}: "DongYang Telecom Co., Ltd.", - [3]byte{0, 6, 231}: "Bit Blitz Communications Inc.", - [3]byte{0, 6, 232}: "Optical Network Testing, Inc.", - [3]byte{0, 6, 233}: "Intime Corp.", - [3]byte{0, 6, 234}: "ELZET80 Mikrocomputer GmbH&Co. KG", - [3]byte{0, 6, 235}: "Global Data", - [3]byte{0, 6, 236}: "Harris Corporation", - [3]byte{0, 6, 237}: "Inara Networks", - [3]byte{0, 6, 238}: "Shenyang Neu-era Information & Technology Stock Co., Ltd", - [3]byte{0, 6, 239}: "Maxxan Systems, Inc.", - [3]byte{0, 6, 240}: "Digeo, Inc.", - [3]byte{0, 6, 241}: "Optillion", - [3]byte{0, 6, 242}: "Platys Communications", - [3]byte{0, 6, 243}: "AcceLight Networks", - [3]byte{0, 6, 244}: "Prime Electronics & Satellitics Inc.", - [3]byte{0, 6, 245}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{0, 6, 246}: "Cisco Systems, Inc", - [3]byte{0, 6, 247}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{0, 6, 248}: "The Boeing Company", - [3]byte{0, 6, 249}: "Mitsui Zosen Systems Research Inc.", - [3]byte{0, 6, 250}: "IP SQUARE Co, Ltd.", - [3]byte{0, 6, 251}: "Hitachi Printing Solutions, Ltd.", - [3]byte{0, 6, 252}: "Fnet Co., Ltd.", - [3]byte{0, 6, 253}: "Comjet Information Systems Corp.", - [3]byte{0, 6, 254}: "Ambrado, Inc", - [3]byte{0, 6, 255}: "Sheba Systems Co., Ltd.", - [3]byte{0, 7, 0}: "Zettamedia Korea", - [3]byte{0, 7, 1}: "RACAL-DATACOM", - [3]byte{0, 7, 2}: "Varian Medical Systems", - [3]byte{0, 7, 3}: "CSEE Transport", - [3]byte{0, 7, 4}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{0, 7, 5}: "Endress & Hauser GmbH & Co", - [3]byte{0, 7, 6}: "Sanritz Corporation", - [3]byte{0, 7, 7}: "Interalia Inc.", - [3]byte{0, 7, 8}: "Bitrage Inc.", - [3]byte{0, 7, 9}: "Westerstrand Urfabrik AB", - [3]byte{0, 7, 10}: "Unicom Automation Co., Ltd.", - [3]byte{0, 7, 11}: "Novabase SGPS, SA", - [3]byte{0, 7, 12}: "SVA-Intrusion.com Co. Ltd.", - [3]byte{0, 7, 13}: "Cisco Systems, Inc", - [3]byte{0, 7, 14}: "Cisco Systems, Inc", - [3]byte{0, 7, 15}: "Fujant, Inc.", - [3]byte{0, 7, 16}: "Adax, Inc.", - [3]byte{0, 7, 17}: "Acterna", - [3]byte{0, 7, 18}: "JAL Information Technology", - [3]byte{0, 7, 19}: "IP One, Inc.", - [3]byte{0, 7, 20}: "Brightcom", - [3]byte{0, 7, 21}: "General Research of Electronics, Inc.", - [3]byte{0, 7, 22}: "J & S Marine Ltd.", - [3]byte{0, 7, 23}: "Wieland Electric GmbH", - [3]byte{0, 7, 24}: "iCanTek Co., Ltd.", - [3]byte{0, 7, 25}: "Mobiis Co., Ltd.", - [3]byte{0, 7, 26}: "Finedigital Inc.", - [3]byte{0, 7, 27}: "CDVI Americas Ltd", - [3]byte{0, 7, 28}: "AT&T", - [3]byte{0, 7, 29}: "Satelsa Sistemas Y Aplicaciones De Telecomunicaciones, S.A.", - [3]byte{0, 7, 30}: "Tri-M Engineering / Nupak Dev. Corp.", - [3]byte{0, 7, 31}: "European Systems Integration", - [3]byte{0, 7, 32}: "Trutzschler GmbH & Co. KG", - [3]byte{0, 7, 33}: "Formac Elektronik GmbH", - [3]byte{0, 7, 34}: "The Nielsen Company", - [3]byte{0, 7, 35}: "ELCON Systemtechnik GmbH", - [3]byte{0, 7, 36}: "Telemax Co., Ltd.", - [3]byte{0, 7, 37}: "Bematech International Corp.", - [3]byte{0, 7, 38}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT", - [3]byte{0, 7, 39}: "Zi Corporation (HK) Ltd.", - [3]byte{0, 7, 40}: "Neo Telecom", - [3]byte{0, 7, 41}: "Kistler Instrumente AG", - [3]byte{0, 7, 42}: "Innovance Networks", - [3]byte{0, 7, 43}: "Jung Myung Telecom Co., Ltd.", - [3]byte{0, 7, 44}: "Fabricom", - [3]byte{0, 7, 45}: "CNSystems", - [3]byte{0, 7, 46}: "North Node AB", - [3]byte{0, 7, 47}: "Intransa, Inc.", - [3]byte{0, 7, 48}: "Hutchison OPTEL Telecom Technology Co., Ltd.", - [3]byte{0, 7, 49}: "Ophir-Spiricon LLC", - [3]byte{0, 7, 50}: "AAEON Technology Inc.", - [3]byte{0, 7, 51}: "DANCONTROL Engineering", - [3]byte{0, 7, 52}: "ONStor, Inc.", - [3]byte{0, 7, 53}: "Flarion Technologies, Inc.", - [3]byte{0, 7, 54}: "Data Video Technologies Co., Ltd.", - [3]byte{0, 7, 55}: "Soriya Co. Ltd.", - [3]byte{0, 7, 56}: "Young Technology Co., Ltd.", - [3]byte{0, 7, 57}: "Scotty Group Austria Gmbh", - [3]byte{0, 7, 58}: "Inventel Systemes", - [3]byte{0, 7, 59}: "Tenovis GmbH & Co KG", - [3]byte{0, 7, 60}: "Telecom Design", - [3]byte{0, 7, 61}: "Nanjing Postel Telecommunications Co., Ltd.", - [3]byte{0, 7, 62}: "China Great-Wall Computer Shenzhen Co., Ltd.", - [3]byte{0, 7, 63}: "Woojyun Systec Co., Ltd.", - [3]byte{0, 7, 64}: "BUFFALO.INC", - [3]byte{0, 7, 65}: "Sierra Automated Systems", - [3]byte{0, 7, 66}: "Ormazabal", - [3]byte{0, 7, 67}: "Chelsio Communications", - [3]byte{0, 7, 68}: "Unico, Inc.", - [3]byte{0, 7, 69}: "Radlan Computer Communications Ltd.", - [3]byte{0, 7, 70}: "TURCK, Inc.", - [3]byte{0, 7, 71}: "Mecalc", - [3]byte{0, 7, 72}: "The Imaging Source Europe", - [3]byte{0, 7, 73}: "CENiX Inc.", - [3]byte{0, 7, 74}: "Carl Valentin GmbH", - [3]byte{0, 7, 75}: "Daihen Corporation", - [3]byte{0, 7, 76}: "Beicom Inc.", - [3]byte{0, 7, 77}: "Zebra Technologies Corp.", - [3]byte{0, 7, 78}: "IPFRONT Inc", - [3]byte{0, 7, 79}: "Cisco Systems, Inc", - [3]byte{0, 7, 80}: "Cisco Systems, Inc", - [3]byte{0, 7, 81}: "m-u-t AG", - [3]byte{0, 7, 82}: "Rhythm Watch Co., Ltd.", - [3]byte{0, 7, 83}: "Beijing Qxcomm Technology Co., Ltd.", - [3]byte{0, 7, 84}: "Xyterra Computing, Inc.", - [3]byte{0, 7, 85}: "Lafon", - [3]byte{0, 7, 86}: "Juyoung Telecom", - [3]byte{0, 7, 87}: "Topcall International AG", - [3]byte{0, 7, 88}: "Dragonwave", - [3]byte{0, 7, 89}: "Boris Manufacturing Corp.", - [3]byte{0, 7, 90}: "Air Products and Chemicals, Inc.", - [3]byte{0, 7, 91}: "Gibson Guitars", - [3]byte{0, 7, 92}: "Eastman Kodak Company", - [3]byte{0, 7, 93}: "Celleritas Inc.", - [3]byte{0, 7, 94}: "Ametek Power Instruments", - [3]byte{0, 7, 95}: "VCS Video Communication Systems AG", - [3]byte{0, 7, 96}: "TOMIS Information & Telecom Corp.", - [3]byte{0, 7, 97}: "29530", - [3]byte{0, 7, 98}: "Group Sense Limited", - [3]byte{0, 7, 99}: "Sunniwell Cyber Tech. Co., Ltd.", - [3]byte{0, 7, 100}: "YoungWoo Telecom Co. Ltd.", - [3]byte{0, 7, 101}: "Jade Quantum Technologies, Inc.", - [3]byte{0, 7, 102}: "Chou Chin Industrial Co., Ltd.", - [3]byte{0, 7, 103}: "Yuxing Electronics Company Limited", - [3]byte{0, 7, 104}: "Danfoss A/S", - [3]byte{0, 7, 105}: "Italiana Macchi SpA", - [3]byte{0, 7, 106}: "NEXTEYE Co., Ltd.", - [3]byte{0, 7, 107}: "Stralfors AB", - [3]byte{0, 7, 108}: "Daehanet, Inc.", - [3]byte{0, 7, 109}: "Flexlight Networks", - [3]byte{0, 7, 110}: "Sinetica Corporation Limited", - [3]byte{0, 7, 111}: "Synoptics Limited", - [3]byte{0, 7, 112}: "Ubiquoss Inc", - [3]byte{0, 7, 113}: "Embedded System Corporation", - [3]byte{0, 7, 114}: "Alcatel-Lucent Shanghai Bell Co., Ltd", - [3]byte{0, 7, 115}: "Ascom Powerline Communications Ltd.", - [3]byte{0, 7, 116}: "GuangZhou Thinker Technology Co. Ltd.", - [3]byte{0, 7, 117}: "Valence Semiconductor, Inc.", - [3]byte{0, 7, 118}: "Federal APD", - [3]byte{0, 7, 119}: "Motah Ltd.", - [3]byte{0, 7, 120}: "GERSTEL GmbH & Co. KG", - [3]byte{0, 7, 121}: "Sungil Telecom Co., Ltd.", - [3]byte{0, 7, 122}: "Infoware System Co., Ltd.", - [3]byte{0, 7, 123}: "Millimetrix Broadband Networks", - [3]byte{0, 7, 124}: "Westermo Teleindustri AB", - [3]byte{0, 7, 125}: "Cisco Systems, Inc", - [3]byte{0, 7, 126}: "Elrest GmbH", - [3]byte{0, 7, 127}: "J Communications Co., Ltd.", - [3]byte{0, 7, 128}: "Bluegiga Technologies OY", - [3]byte{0, 7, 129}: "Itron Inc.", - [3]byte{0, 7, 130}: "Oracle Corporation", - [3]byte{0, 7, 131}: "SynCom Network, Inc.", - [3]byte{0, 7, 132}: "Cisco Systems, Inc", - [3]byte{0, 7, 133}: "Cisco Systems, Inc", - [3]byte{0, 7, 134}: "Wireless Networks Inc.", - [3]byte{0, 7, 135}: "Idea System Co., Ltd.", - [3]byte{0, 7, 136}: "Clipcomm, Inc.", - [3]byte{0, 7, 137}: "DONGWON SYSTEMS", - [3]byte{0, 7, 138}: "Mentor Data System Inc.", - [3]byte{0, 7, 139}: "Wegener Communications, Inc.", - [3]byte{0, 7, 140}: "Elektronikspecialisten i Borlange AB", - [3]byte{0, 7, 141}: "NetEngines Ltd.", - [3]byte{0, 7, 142}: "Garz & Friche GmbH", - [3]byte{0, 7, 143}: "Emkay Innovative Products", - [3]byte{0, 7, 144}: "Tri-M Technologies (s) Limited", - [3]byte{0, 7, 145}: "International Data Communications, Inc.", - [3]byte{0, 7, 146}: "Sütron Electronic GmbH", - [3]byte{0, 7, 147}: "Shin Satellite Public Company Limited", - [3]byte{0, 7, 148}: "Simple Devices, Inc.", - [3]byte{0, 7, 149}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{0, 7, 150}: "LSI Systems, Inc.", - [3]byte{0, 7, 151}: "Netpower Co., Ltd.", - [3]byte{0, 7, 152}: "Selea SRL", - [3]byte{0, 7, 153}: "Tipping Point Technologies, Inc.", - [3]byte{0, 7, 154}: "Verint Systems Inc", - [3]byte{0, 7, 155}: "Aurora Networks", - [3]byte{0, 7, 156}: "Golden Electronics Technology Co., Ltd.", - [3]byte{0, 7, 157}: "Musashi Co., Ltd.", - [3]byte{0, 7, 158}: "Ilinx Co., Ltd.", - [3]byte{0, 7, 159}: "Action Digital Inc.", - [3]byte{0, 7, 160}: "e-Watch Inc.", - [3]byte{0, 7, 161}: "VIASYS Healthcare GmbH", - [3]byte{0, 7, 162}: "Opteon Corporation", - [3]byte{0, 7, 163}: "Ositis Software, Inc.", - [3]byte{0, 7, 164}: "GN Netcom Ltd.", - [3]byte{0, 7, 165}: "Y.D.K Co. Ltd.", - [3]byte{0, 7, 166}: "Leviton Manufacturing Co., Inc.", - [3]byte{0, 7, 167}: "A-Z Inc.", - [3]byte{0, 7, 168}: "Haier Group Technologies Ltd.", - [3]byte{0, 7, 169}: "Novasonics", - [3]byte{0, 7, 170}: "Quantum Data Inc.", - [3]byte{0, 7, 171}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 7, 172}: "Eolring", - [3]byte{0, 7, 173}: "Pentacon GmbH Foto-und Feinwerktechnik", - [3]byte{0, 7, 174}: "Britestream Networks, Inc.", - [3]byte{0, 7, 175}: "Red Lion Controls, LP", - [3]byte{0, 7, 176}: "Office Details, Inc.", - [3]byte{0, 7, 177}: "Equator Technologies", - [3]byte{0, 7, 178}: "Transaccess S.A.", - [3]byte{0, 7, 179}: "Cisco Systems, Inc", - [3]byte{0, 7, 180}: "Cisco Systems, Inc", - [3]byte{0, 7, 181}: "Any One Wireless Ltd.", - [3]byte{0, 7, 182}: "Telecom Technology Ltd.", - [3]byte{0, 7, 183}: "Samurai Ind. Prods Eletronicos Ltda", - [3]byte{0, 7, 184}: "Corvalent Corporation", - [3]byte{0, 7, 185}: "Ginganet Corporation", - [3]byte{0, 7, 186}: "UTStarcom Inc", - [3]byte{0, 7, 187}: "Candera Inc.", - [3]byte{0, 7, 188}: "Identix Inc.", - [3]byte{0, 7, 189}: "Radionet Ltd.", - [3]byte{0, 7, 190}: "DataLogic SpA", - [3]byte{0, 7, 191}: "Armillaire Technologies, Inc.", - [3]byte{0, 7, 192}: "NetZerver Inc.", - [3]byte{0, 7, 193}: "Overture Networks, Inc.", - [3]byte{0, 7, 194}: "Netsys Telecom", - [3]byte{0, 7, 195}: "Thomson", - [3]byte{0, 7, 196}: "JEAN Co. Ltd.", - [3]byte{0, 7, 197}: "Gcom, Inc.", - [3]byte{0, 7, 198}: "VDS Vosskuhler GmbH", - [3]byte{0, 7, 199}: "Synectics Systems Limited", - [3]byte{0, 7, 200}: "Brain21, Inc.", - [3]byte{0, 7, 201}: "Technol Seven Co., Ltd.", - [3]byte{0, 7, 202}: "Creatix Polymedia Ges Fur Kommunikaitonssysteme", - [3]byte{0, 7, 203}: "FREEBOX SAS", - [3]byte{0, 7, 204}: "Kaba Benzing GmbH", - [3]byte{0, 7, 205}: "Kumoh Electronic Co, Ltd", - [3]byte{0, 7, 206}: "Cabletime Limited", - [3]byte{0, 7, 207}: "Anoto AB", - [3]byte{0, 7, 208}: "Automat Engenharia de Automação Ltda.", - [3]byte{0, 7, 209}: "Spectrum Signal Processing Inc.", - [3]byte{0, 7, 210}: "Logopak Systeme GmbH & Co. KG", - [3]byte{0, 7, 211}: "SPGPrints B.V.", - [3]byte{0, 7, 212}: "Zhejiang Yutong Network Communication Co Ltd.", - [3]byte{0, 7, 213}: "3e Technologies Int;., Inc.", - [3]byte{0, 7, 214}: "Commil Ltd.", - [3]byte{0, 7, 215}: "Caporis Networks AG", - [3]byte{0, 7, 216}: "Hitron Technologies. Inc", - [3]byte{0, 7, 217}: "Splicecom", - [3]byte{0, 7, 218}: "Neuro Telecom Co., Ltd.", - [3]byte{0, 7, 219}: "Kirana Networks, Inc.", - [3]byte{0, 7, 220}: "Atek Co, Ltd.", - [3]byte{0, 7, 221}: "Cradle Technologies", - [3]byte{0, 7, 222}: "eCopilt AB", - [3]byte{0, 7, 223}: "Vbrick Systems Inc.", - [3]byte{0, 7, 224}: "Palm Inc.", - [3]byte{0, 7, 225}: "WIS Communications Co. Ltd.", - [3]byte{0, 7, 226}: "Bitworks, Inc.", - [3]byte{0, 7, 227}: "Navcom Technology, Inc.", - [3]byte{0, 7, 228}: "SoftRadio Co., Ltd.", - [3]byte{0, 7, 229}: "Coup Corporation", - [3]byte{0, 7, 230}: "edgeflow Canada Inc.", - [3]byte{0, 7, 231}: "FreeWave Technologies", - [3]byte{0, 7, 232}: "EdgeWave", - [3]byte{0, 7, 233}: "Intel Corporation", - [3]byte{0, 7, 234}: "Massana, Inc.", - [3]byte{0, 7, 235}: "Cisco Systems, Inc", - [3]byte{0, 7, 236}: "Cisco Systems, Inc", - [3]byte{0, 7, 237}: "Altera Corporation", - [3]byte{0, 7, 238}: "telco Informationssysteme GmbH", - [3]byte{0, 7, 239}: "Lockheed Martin Tactical Systems", - [3]byte{0, 7, 240}: "LogiSync LLC", - [3]byte{0, 7, 241}: "TeraBurst Networks Inc.", - [3]byte{0, 7, 242}: "IOA Corporation", - [3]byte{0, 7, 243}: "Thinkengine Networks", - [3]byte{0, 7, 244}: "Eletex Co., Ltd.", - [3]byte{0, 7, 245}: "Bridgeco Co AG", - [3]byte{0, 7, 246}: "Qqest Software Systems", - [3]byte{0, 7, 247}: "Galtronics", - [3]byte{0, 7, 248}: "ITDevices, Inc.", - [3]byte{0, 7, 249}: "Sensaphone", - [3]byte{0, 7, 250}: "ITT Co., Ltd.", - [3]byte{0, 7, 251}: "Giga Stream UMTS Technologies GmbH", - [3]byte{0, 7, 252}: "Adept Systems Inc.", - [3]byte{0, 7, 253}: "LANergy Ltd.", - [3]byte{0, 7, 254}: "Rigaku Corporation", - [3]byte{0, 7, 255}: "Gluon Networks", - [3]byte{0, 8, 0}: "MULTITECH SYSTEMS, INC.", - [3]byte{0, 8, 1}: "HighSpeed Surfing Inc.", - [3]byte{0, 8, 2}: "Hewlett Packard", - [3]byte{0, 8, 3}: "Cos Tron", - [3]byte{0, 8, 4}: "ICA Inc.", - [3]byte{0, 8, 5}: "Techno-Holon Corporation", - [3]byte{0, 8, 6}: "Raonet Systems, Inc.", - [3]byte{0, 8, 7}: "Access Devices Limited", - [3]byte{0, 8, 8}: "PPT Vision, Inc.", - [3]byte{0, 8, 9}: "Systemonic AG", - [3]byte{0, 8, 10}: "Espera-Werke GmbH", - [3]byte{0, 8, 11}: "Birka BPA Informationssystem AB", - [3]byte{0, 8, 12}: "VDA Elettronica spa", - [3]byte{0, 8, 13}: "Toshiba", - [3]byte{0, 8, 14}: "ARRIS Group, Inc.", - [3]byte{0, 8, 15}: "Proximion Fiber Optics AB", - [3]byte{0, 8, 16}: "Key Technology, Inc.", - [3]byte{0, 8, 17}: "VOIX Corporation", - [3]byte{0, 8, 18}: "GM-2 Corporation", - [3]byte{0, 8, 19}: "Diskbank, Inc.", - [3]byte{0, 8, 20}: "TIL Technologies", - [3]byte{0, 8, 21}: "CATS Co., Ltd.", - [3]byte{0, 8, 22}: "Bluelon ApS", - [3]byte{0, 8, 23}: "EmergeCore Networks LLC", - [3]byte{0, 8, 24}: "Pixelworks, Inc.", - [3]byte{0, 8, 25}: "Banksys", - [3]byte{0, 8, 26}: "Sanrad Intelligence Storage Communications (2000) Ltd.", - [3]byte{0, 8, 27}: "Windigo Systems", - [3]byte{0, 8, 28}: "@pos.com", - [3]byte{0, 8, 29}: "Ipsil, Incorporated", - [3]byte{0, 8, 30}: "Repeatit AB", - [3]byte{0, 8, 31}: "Pou Yuen Tech Corp. Ltd.", - [3]byte{0, 8, 32}: "Cisco Systems, Inc", - [3]byte{0, 8, 33}: "Cisco Systems, Inc", - [3]byte{0, 8, 34}: "InPro Comm", - [3]byte{0, 8, 35}: "Texa Corp.", - [3]byte{0, 8, 36}: "Nuance Document Imaging", - [3]byte{0, 8, 37}: "Acme Packet", - [3]byte{0, 8, 38}: "Colorado Med Tech", - [3]byte{0, 8, 39}: "ADB Broadband Italia", - [3]byte{0, 8, 40}: "Koei Engineering Ltd.", - [3]byte{0, 8, 41}: "Aval Nagasaki Corporation", - [3]byte{0, 8, 42}: "Powerwallz Network Security", - [3]byte{0, 8, 43}: "Wooksung Electronics, Inc.", - [3]byte{0, 8, 44}: "Homag AG", - [3]byte{0, 8, 45}: "Indus Teqsite Private Limited", - [3]byte{0, 8, 46}: "Multitone Electronics PLC", - [3]byte{0, 8, 47}: "Cisco Systems, Inc", - [3]byte{0, 8, 48}: "Cisco Systems, Inc", - [3]byte{0, 8, 49}: "Cisco Systems, Inc", - [3]byte{0, 8, 50}: "Cisco Systems, Inc", - [3]byte{0, 8, 78}: "DivergeNet, Inc.", - [3]byte{0, 8, 79}: "Qualstar Corporation", - [3]byte{0, 8, 80}: "Arizona Instrument Corp.", - [3]byte{0, 8, 81}: "Canadian Bank Note Company, Ltd.", - [3]byte{0, 8, 82}: "Davolink Co. Inc.", - [3]byte{0, 8, 83}: "Schleicher GmbH & Co. Relaiswerke KG", - [3]byte{0, 8, 84}: "Netronix, Inc.", - [3]byte{0, 8, 85}: "NASA-Goddard Space Flight Center", - [3]byte{0, 8, 86}: "Gamatronic Electronic Industries Ltd.", - [3]byte{0, 8, 87}: "Polaris Networks, Inc.", - [3]byte{0, 8, 88}: "Novatechnology Inc.", - [3]byte{0, 8, 89}: "ShenZhen Unitone Electronics Co., Ltd.", - [3]byte{0, 8, 90}: "IntiGate Inc.", - [3]byte{0, 8, 91}: "Hanbit Electronics Co., Ltd.", - [3]byte{0, 8, 92}: "Shanghai Dare Technologies Co. Ltd.", - [3]byte{0, 8, 93}: "Aastra", - [3]byte{0, 8, 94}: "PCO AG", - [3]byte{0, 8, 95}: "Picanol N.V.", - [3]byte{0, 8, 96}: "LodgeNet Entertainment Corp.", - [3]byte{0, 8, 97}: "SoftEnergy Co., Ltd.", - [3]byte{0, 8, 98}: "NEC Eluminant Technologies, Inc.", - [3]byte{0, 8, 99}: "Entrisphere Inc.", - [3]byte{0, 8, 100}: "Fasy S.p.A.", - [3]byte{0, 8, 101}: "JASCOM CO., LTD", - [3]byte{0, 8, 102}: "DSX Access Systems, Inc.", - [3]byte{0, 8, 103}: "Uptime Devices", - [3]byte{0, 8, 104}: "PurOptix", - [3]byte{0, 8, 105}: "Command-e Technology Co.,Ltd.", - [3]byte{0, 8, 106}: "Securiton Gmbh", - [3]byte{0, 8, 107}: "MIPSYS", - [3]byte{0, 8, 108}: "Plasmon LMS", - [3]byte{0, 8, 109}: "Missouri FreeNet", - [3]byte{0, 8, 110}: "Hyglo AB", - [3]byte{0, 8, 111}: "Resources Computer Network Ltd.", - [3]byte{0, 8, 112}: "Rasvia Systems, Inc.", - [3]byte{0, 8, 113}: "NORTHDATA Co., Ltd.", - [3]byte{0, 8, 114}: "Sorenson Communications", - [3]byte{0, 8, 115}: "DapTechnology B.V.", - [3]byte{0, 8, 116}: "Dell Inc.", - [3]byte{0, 8, 117}: "Acorp Electronics Corp.", - [3]byte{0, 8, 118}: "SDSystem", - [3]byte{0, 8, 119}: "Liebert-Hiross Spa", - [3]byte{0, 8, 120}: "Benchmark Storage Innovations", - [3]byte{0, 8, 121}: "CEM Corporation", - [3]byte{0, 8, 122}: "Wipotec GmbH", - [3]byte{0, 8, 123}: "RTX Telecom A/S", - [3]byte{0, 8, 124}: "Cisco Systems, Inc", - [3]byte{0, 8, 125}: "Cisco Systems, Inc", - [3]byte{0, 8, 126}: "Bon Electro-Telecom Inc.", - [3]byte{0, 8, 127}: "SPAUN electronic GmbH & Co. KG", - [3]byte{0, 8, 128}: "BroadTel Canada Communications inc.", - [3]byte{0, 8, 129}: "DIGITAL HANDS CO.,LTD.", - [3]byte{0, 8, 130}: "SIGMA CORPORATION", - [3]byte{0, 8, 131}: "Hewlett Packard", - [3]byte{0, 8, 132}: "Index Braille AB", - [3]byte{0, 8, 133}: "EMS Dr. Thomas Wünsche", - [3]byte{0, 8, 134}: "Hansung Teliann, Inc.", - [3]byte{0, 8, 135}: "Maschinenfabrik Reinhausen GmbH", - [3]byte{0, 8, 136}: "OULLIM Information Technology Inc,.", - [3]byte{0, 8, 137}: "Echostar Technologies Corp", - [3]byte{0, 8, 138}: "Minds@Work", - [3]byte{0, 8, 139}: "Tropic Networks Inc.", - [3]byte{0, 8, 140}: "Quanta Network Systems Inc.", - [3]byte{0, 8, 141}: "Sigma-Links Inc.", - [3]byte{0, 8, 142}: "Nihon Computer Co., Ltd.", - [3]byte{0, 8, 143}: "ADVANCED DIGITAL TECHNOLOGY", - [3]byte{0, 8, 144}: "AVILINKS SA", - [3]byte{0, 8, 145}: "Lyan Inc.", - [3]byte{0, 8, 146}: "EM Solutions", - [3]byte{0, 8, 147}: "LE INFORMATION COMMUNICATION INC.", - [3]byte{0, 8, 148}: "InnoVISION Multimedia Ltd.", - [3]byte{0, 8, 149}: "DIRC Technologie GmbH & Co.KG", - [3]byte{0, 8, 150}: "Printronix, Inc.", - [3]byte{0, 8, 151}: "Quake Technologies", - [3]byte{0, 8, 152}: "Gigabit Optics Corporation", - [3]byte{0, 8, 153}: "Netbind, Inc.", - [3]byte{0, 8, 154}: "Alcatel Microelectronics", - [3]byte{0, 8, 155}: "ICP Electronics Inc.", - [3]byte{0, 8, 156}: "Elecs Industry Co., Ltd.", - [3]byte{0, 8, 157}: "UHD-Elektronik", - [3]byte{0, 8, 158}: "Beijing Enter-Net co.LTD", - [3]byte{0, 8, 159}: "EFM Networks", - [3]byte{0, 8, 160}: "Stotz Feinmesstechnik GmbH", - [3]byte{0, 8, 161}: "CNet Technology Inc.", - [3]byte{0, 8, 162}: "ADI Engineering, Inc.", - [3]byte{0, 8, 163}: "Cisco Systems, Inc", - [3]byte{0, 8, 164}: "Cisco Systems, Inc", - [3]byte{0, 8, 165}: "Peninsula Systems Inc.", - [3]byte{0, 8, 166}: "Multiware & Image Co., Ltd.", - [3]byte{0, 8, 167}: "iLogic Inc.", - [3]byte{0, 8, 168}: "Systec Co., Ltd.", - [3]byte{0, 8, 169}: "SangSang Technology, Inc.", - [3]byte{0, 8, 170}: "KARAM", - [3]byte{0, 8, 171}: "EnerLinx.com, Inc.", - [3]byte{0, 8, 172}: "Eltromat GmbH", - [3]byte{0, 8, 173}: "Toyo-Linx Co., Ltd.", - [3]byte{0, 8, 174}: "PacketFront Network Products AB", - [3]byte{0, 8, 175}: "Novatec Corporation", - [3]byte{0, 8, 176}: "BKtel communications GmbH", - [3]byte{0, 8, 177}: "ProQuent Systems", - [3]byte{0, 8, 178}: "SHENZHEN COMPASS TECHNOLOGY DEVELOPMENT CO.,LTD", - [3]byte{0, 8, 179}: "Fastwel", - [3]byte{0, 8, 180}: "SYSPOL", - [3]byte{0, 8, 181}: "TAI GUEN ENTERPRISE CO., LTD", - [3]byte{0, 8, 182}: "RouteFree, Inc.", - [3]byte{0, 8, 183}: "HIT Incorporated", - [3]byte{0, 8, 184}: "E.F. Johnson", - [3]byte{0, 8, 185}: "Kaonmedia CO., LTD.", - [3]byte{0, 8, 186}: "Erskine Systems Ltd", - [3]byte{0, 8, 187}: "NetExcell", - [3]byte{0, 8, 188}: "Ilevo AB", - [3]byte{0, 8, 189}: "TEPG-US", - [3]byte{0, 8, 190}: "XENPAK MSA Group", - [3]byte{0, 8, 191}: "Aptus Elektronik AB", - [3]byte{0, 8, 192}: "ASA SYSTEMS", - [3]byte{0, 8, 193}: "Avistar Communications Corporation", - [3]byte{0, 8, 194}: "Cisco Systems, Inc", - [3]byte{0, 8, 195}: "Contex A/S", - [3]byte{0, 8, 196}: "Hikari Co.,Ltd.", - [3]byte{0, 8, 197}: "Liontech Co., Ltd.", - [3]byte{0, 8, 198}: "Philips Consumer Communications", - [3]byte{0, 8, 199}: "Hewlett Packard", - [3]byte{0, 8, 200}: "Soneticom, Inc.", - [3]byte{0, 8, 201}: "TechniSat Digital GmbH Daun", - [3]byte{0, 8, 202}: "TwinHan Technology Co.,Ltd", - [3]byte{0, 8, 203}: "Zeta Broadband Inc.", - [3]byte{0, 8, 204}: "Remotec, Inc.", - [3]byte{0, 8, 205}: "With-Net Inc", - [3]byte{0, 8, 206}: "IPMobileNet Inc.", - [3]byte{0, 8, 207}: "Nippon Koei Power Systems Co., Ltd.", - [3]byte{0, 8, 208}: "Musashi Engineering Co., LTD.", - [3]byte{0, 8, 209}: "KAREL INC.", - [3]byte{0, 8, 210}: "ZOOM Networks Inc.", - [3]byte{0, 8, 211}: "Hercules Technologies S.A.S.", - [3]byte{0, 8, 212}: "IneoQuest Technologies, Inc", - [3]byte{0, 8, 213}: "Vanguard Networks Solutions, LLC", - [3]byte{0, 8, 214}: "HASSNET Inc.", - [3]byte{0, 8, 215}: "HOW CORPORATION", - [3]byte{0, 8, 216}: "Dowkey Microwave", - [3]byte{0, 8, 217}: "Mitadenshi Co.,LTD", - [3]byte{0, 8, 218}: "SofaWare Technologies Ltd.", - [3]byte{0, 8, 219}: "Corrigent Systems", - [3]byte{0, 8, 220}: "Wiznet", - [3]byte{0, 8, 221}: "Telena Communications, Inc.", - [3]byte{0, 8, 222}: "3UP Systems", - [3]byte{0, 8, 223}: "Alistel Inc.", - [3]byte{0, 8, 224}: "ATO Technology Ltd.", - [3]byte{0, 8, 225}: "Barix AG", - [3]byte{0, 8, 226}: "Cisco Systems, Inc", - [3]byte{0, 8, 227}: "Cisco Systems, Inc", - [3]byte{0, 8, 228}: "Envenergy Inc", - [3]byte{0, 8, 229}: "IDK Corporation", - [3]byte{0, 8, 230}: "Littlefeet", - [3]byte{0, 8, 231}: "SHI ControlSystems,Ltd.", - [3]byte{0, 8, 232}: "Excel Master Ltd.", - [3]byte{0, 8, 233}: "NextGig", - [3]byte{0, 8, 234}: "Motion Control Engineering, Inc", - [3]byte{0, 8, 235}: "ROMWin Co.,Ltd.", - [3]byte{0, 8, 236}: "Optical Zonu Corporation", - [3]byte{0, 8, 237}: "ST&T Instrument Corp.", - [3]byte{0, 8, 238}: "Logic Product Development", - [3]byte{0, 8, 239}: "DIBAL,S.A.", - [3]byte{0, 8, 240}: "Next Generation Systems, Inc.", - [3]byte{0, 8, 241}: "Voltaire", - [3]byte{0, 8, 242}: "C&S Technology", - [3]byte{0, 8, 243}: "WANY", - [3]byte{0, 8, 244}: "Bluetake Technology Co., Ltd.", - [3]byte{0, 8, 245}: "YESTECHNOLOGY Co.,Ltd.", - [3]byte{0, 8, 246}: "Sumitomo Electric Industries,Ltd", - [3]byte{0, 8, 247}: "Hitachi Ltd, Semiconductor & Integrated Circuits Gr", - [3]byte{0, 8, 248}: "UTC CCS", - [3]byte{0, 8, 249}: "Artesyn Embedded Technologies", - [3]byte{0, 8, 250}: "KEB Automation KG", - [3]byte{0, 8, 251}: "SonoSite, Inc.", - [3]byte{0, 8, 252}: "Gigaphoton Inc.", - [3]byte{0, 8, 253}: "BlueKorea Co., Ltd.", - [3]byte{0, 8, 254}: "UNIK C&C Co.,Ltd.", - [3]byte{0, 8, 255}: "Trilogy Communications Ltd", - [3]byte{0, 9, 0}: "TMT", - [3]byte{0, 9, 1}: "Shenzhen Shixuntong Information & Technoligy Co", - [3]byte{0, 9, 2}: "Redline Communications Inc.", - [3]byte{0, 9, 3}: "Panasas, Inc", - [3]byte{0, 9, 4}: "MONDIAL electronic", - [3]byte{0, 9, 5}: "iTEC Technologies Ltd.", - [3]byte{0, 9, 6}: "Esteem Networks", - [3]byte{0, 9, 7}: "Chrysalis Development", - [3]byte{0, 9, 8}: "VTech Technology Corp.", - [3]byte{0, 9, 9}: "Telenor Connect A/S", - [3]byte{0, 9, 10}: "SnedFar Technology Co., Ltd.", - [3]byte{0, 9, 11}: "MTL Instruments PLC", - [3]byte{0, 9, 12}: "Mayekawa Mfg. Co. Ltd.", - [3]byte{0, 9, 13}: "LEADER ELECTRONICS CORP.", - [3]byte{0, 9, 14}: "Helix Technology Inc.", - [3]byte{0, 9, 15}: "Fortinet Inc.", - [3]byte{0, 9, 16}: "Simple Access Inc.", - [3]byte{0, 9, 17}: "Cisco Systems, Inc", - [3]byte{0, 9, 18}: "Cisco Systems, Inc", - [3]byte{0, 9, 19}: "SystemK Corporation", - [3]byte{0, 9, 20}: "COMPUTROLS INC.", - [3]byte{0, 9, 21}: "CAS Corp.", - [3]byte{0, 9, 22}: "Listman Home Technologies, Inc.", - [3]byte{0, 9, 23}: "WEM Technology Inc", - [3]byte{0, 9, 24}: "SAMSUNG TECHWIN CO.,LTD", - [3]byte{0, 9, 25}: "MDS Gateways", - [3]byte{0, 9, 26}: "Macat Optics & Electronics Co., Ltd.", - [3]byte{0, 9, 27}: "Digital Generation Inc.", - [3]byte{0, 9, 28}: "CacheVision, Inc", - [3]byte{0, 9, 29}: "Proteam Computer Corporation", - [3]byte{0, 9, 30}: "Firstech Technology Corp.", - [3]byte{0, 9, 31}: "A&D Co., Ltd.", - [3]byte{0, 9, 32}: "EpoX COMPUTER CO.,LTD.", - [3]byte{0, 9, 33}: "Planmeca Oy", - [3]byte{0, 9, 34}: "TST Biometrics GmbH", - [3]byte{0, 9, 35}: "Heaman System Co., Ltd", - [3]byte{0, 9, 36}: "Telebau GmbH", - [3]byte{0, 9, 37}: "VSN Systemen BV", - [3]byte{0, 9, 38}: "YODA COMMUNICATIONS, INC.", - [3]byte{0, 9, 39}: "TOYOKEIKI CO.,LTD.", - [3]byte{0, 9, 40}: "Telecore", - [3]byte{0, 9, 41}: "Sanyo Industries (UK) Limited", - [3]byte{0, 9, 42}: "MYTECS Co.,Ltd.", - [3]byte{0, 9, 43}: "iQstor Networks, Inc.", - [3]byte{0, 9, 44}: "Hitpoint Inc.", - [3]byte{0, 9, 45}: "HTC Corporation", - [3]byte{0, 9, 46}: "B&Tech System Inc.", - [3]byte{0, 9, 47}: "Akom Technology Corporation", - [3]byte{0, 9, 48}: "AeroConcierge Inc.", - [3]byte{0, 9, 49}: "Future Internet, Inc.", - [3]byte{0, 9, 50}: "Omnilux", - [3]byte{0, 9, 51}: "Ophit Co.Ltd.", - [3]byte{0, 9, 52}: "Dream-Multimedia-Tv GmbH", - [3]byte{0, 9, 53}: "Sandvine Incorporated", - [3]byte{0, 9, 54}: "Ipetronik GmbH & Co. KG", - [3]byte{0, 9, 55}: "Inventec Appliance Corp", - [3]byte{0, 9, 56}: "Allot Communications", - [3]byte{0, 9, 57}: "ShibaSoku Co.,Ltd.", - [3]byte{0, 9, 58}: "Molex", - [3]byte{0, 9, 59}: "HYUNDAI NETWORKS INC.", - [3]byte{0, 9, 60}: "Jacques Technologies P/L", - [3]byte{0, 9, 61}: "Newisys,Inc.", - [3]byte{0, 9, 62}: "C&I Technologies", - [3]byte{0, 9, 63}: "Double-Win Enterpirse CO., LTD", - [3]byte{0, 9, 64}: "AGFEO GmbH & Co. KG", - [3]byte{0, 9, 65}: "Allied Telesis R&D Center K.K.", - [3]byte{0, 9, 66}: "Wireless Technologies, Inc", - [3]byte{0, 9, 67}: "Cisco Systems, Inc", - [3]byte{0, 9, 68}: "Cisco Systems, Inc", - [3]byte{0, 9, 69}: "Palmmicro Communications Inc", - [3]byte{0, 9, 70}: "Cluster Labs GmbH", - [3]byte{0, 9, 71}: "Aztek, Inc.", - [3]byte{0, 9, 72}: "Vista Control Systems, Corp.", - [3]byte{0, 9, 73}: "Glyph Technologies Inc.", - [3]byte{0, 9, 74}: "Homenet Communications", - [3]byte{0, 9, 75}: "FillFactory NV", - [3]byte{0, 9, 76}: "Communication Weaver Co.,Ltd.", - [3]byte{0, 9, 77}: "Braintree Communications Pty Ltd", - [3]byte{0, 9, 78}: "BARTECH SYSTEMS INTERNATIONAL, INC", - [3]byte{0, 9, 79}: "elmegt GmbH & Co. KG", - [3]byte{0, 9, 80}: "Independent Storage Corporation", - [3]byte{0, 9, 81}: "Apogee Imaging Systems", - [3]byte{0, 9, 82}: "Auerswald GmbH & Co. KG", - [3]byte{0, 9, 83}: "Linkage System Integration Co.Ltd.", - [3]byte{0, 9, 84}: "AMiT spol. s. r. o.", - [3]byte{0, 9, 85}: "Young Generation International Corp.", - [3]byte{0, 9, 86}: "Network Systems Group, Ltd. (NSG)", - [3]byte{0, 9, 87}: "Supercaller, Inc.", - [3]byte{0, 9, 88}: "INTELNET S.A.", - [3]byte{0, 9, 89}: "Sitecsoft", - [3]byte{0, 9, 90}: "RACEWOOD TECHNOLOGY", - [3]byte{0, 9, 91}: "NETGEAR", - [3]byte{0, 9, 92}: "Philips Medical Systems - Cardiac and Monitoring Systems (CM", - [3]byte{0, 9, 93}: "Dialogue Technology Corp.", - [3]byte{0, 9, 94}: "Masstech Group Inc.", - [3]byte{0, 9, 95}: "Telebyte, Inc.", - [3]byte{0, 9, 96}: "YOZAN Inc.", - [3]byte{0, 9, 97}: "Switchgear and Instrumentation Ltd", - [3]byte{0, 9, 98}: "Sonitor Technologies AS", - [3]byte{0, 9, 99}: "Dominion Lasercom Inc.", - [3]byte{0, 9, 100}: "Hi-Techniques, Inc.", - [3]byte{0, 9, 101}: "HyunJu Computer Co., Ltd.", - [3]byte{0, 9, 102}: "TRIMBLE EUROPE BV", - [3]byte{0, 9, 103}: "Tachyon, Inc", - [3]byte{0, 9, 104}: "TECHNOVENTURE, INC.", - [3]byte{0, 9, 105}: "Meret Optical Communications", - [3]byte{0, 9, 106}: "Cloverleaf Communications Inc.", - [3]byte{0, 9, 107}: "IBM Corp", - [3]byte{0, 9, 108}: "Imedia Semiconductor Corp.", - [3]byte{0, 9, 109}: "Powernet Technologies Corp.", - [3]byte{0, 9, 110}: "GIANT ELECTRONICS LTD.", - [3]byte{0, 9, 111}: "Beijing Zhongqing Elegant Tech. Corp.,Limited", - [3]byte{0, 9, 112}: "Vibration Research Corporation", - [3]byte{0, 9, 113}: "Time Management, Inc.", - [3]byte{0, 9, 114}: "Securebase,Inc", - [3]byte{0, 9, 115}: "Lenten Technology Co., Ltd.", - [3]byte{0, 9, 116}: "Innopia Technologies, Inc.", - [3]byte{0, 9, 117}: "fSONA Communications Corporation", - [3]byte{0, 9, 118}: "Datasoft ISDN Systems GmbH", - [3]byte{0, 9, 119}: "Brunner Elektronik AG", - [3]byte{0, 9, 120}: "AIJI System Co., Ltd.", - [3]byte{0, 9, 121}: "Advanced Television Systems Committee, Inc.", - [3]byte{0, 9, 122}: "Louis Design Labs.", - [3]byte{0, 9, 123}: "Cisco Systems, Inc", - [3]byte{0, 9, 124}: "Cisco Systems, Inc", - [3]byte{0, 9, 125}: "SecWell Networks Oy", - [3]byte{0, 9, 126}: "IMI TECHNOLOGY CO., LTD", - [3]byte{0, 9, 127}: "Vsecure 2000 LTD.", - [3]byte{0, 9, 128}: "Power Zenith Inc.", - [3]byte{0, 9, 129}: "Newport Networks", - [3]byte{0, 9, 130}: "Loewe Opta GmbH", - [3]byte{0, 9, 131}: "GlobalTop Technology, Inc.", - [3]byte{0, 9, 132}: "MyCasa Network Inc.", - [3]byte{0, 9, 133}: "Auto Telecom Company", - [3]byte{0, 9, 134}: "Metalink LTD.", - [3]byte{0, 9, 135}: "NISHI NIPPON ELECTRIC WIRE & CABLE CO.,LTD.", - [3]byte{0, 9, 136}: "Nudian Electron Co., Ltd.", - [3]byte{0, 9, 137}: "VividLogic Inc.", - [3]byte{0, 9, 138}: "EqualLogic Inc", - [3]byte{0, 9, 139}: "Entropic Communications, Inc.", - [3]byte{0, 9, 140}: "Option Wireless Sweden", - [3]byte{0, 9, 141}: "Velocity Semiconductor", - [3]byte{0, 9, 142}: "ipcas GmbH", - [3]byte{0, 9, 143}: "Cetacean Networks", - [3]byte{0, 9, 144}: "ACKSYS Communications & systems", - [3]byte{0, 9, 145}: "GE Fanuc Automation Manufacturing, Inc.", - [3]byte{0, 9, 146}: "InterEpoch Technology,INC.", - [3]byte{0, 9, 147}: "Visteon Corporation", - [3]byte{0, 9, 148}: "Cronyx Engineering", - [3]byte{0, 9, 149}: "Castle Technology Ltd", - [3]byte{0, 9, 150}: "RDI", - [3]byte{0, 9, 151}: "Nortel Networks", - [3]byte{0, 9, 152}: "Capinfo Company Limited", - [3]byte{0, 9, 153}: "CP GEORGES RENAULT", - [3]byte{0, 9, 154}: "ELMO COMPANY, LIMITED", - [3]byte{0, 9, 155}: "Western Telematic Inc.", - [3]byte{0, 9, 156}: "Naval Research Laboratory", - [3]byte{0, 9, 157}: "Haliplex Communications", - [3]byte{0, 9, 158}: "Testech, Inc.", - [3]byte{0, 9, 159}: "VIDEX INC.", - [3]byte{0, 9, 160}: "Microtechno Corporation", - [3]byte{0, 9, 161}: "Telewise Communications, Inc.", - [3]byte{0, 9, 162}: "Interface Co., Ltd.", - [3]byte{0, 9, 163}: "Leadfly Techologies Corp. Ltd.", - [3]byte{0, 9, 164}: "HARTEC Corporation", - [3]byte{0, 9, 165}: "HANSUNG ELETRONIC INDUSTRIES DEVELOPMENT CO., LTD", - [3]byte{0, 9, 166}: "Ignis Optics, Inc.", - [3]byte{0, 9, 167}: "Bang & Olufsen A/S", - [3]byte{0, 9, 168}: "Eastmode Pte Ltd", - [3]byte{0, 9, 169}: "Ikanos Communications", - [3]byte{0, 9, 170}: "Data Comm for Business, Inc.", - [3]byte{0, 9, 171}: "Netcontrol Oy", - [3]byte{0, 9, 172}: "LANVOICE", - [3]byte{0, 9, 173}: "HYUNDAI SYSCOMM, INC.", - [3]byte{0, 9, 174}: "OKANO ELECTRIC CO.,LTD", - [3]byte{0, 9, 175}: "e-generis", - [3]byte{0, 9, 176}: "Onkyo Corporation", - [3]byte{0, 9, 177}: "Kanematsu Electronics, Ltd.", - [3]byte{0, 9, 178}: "L&F Inc.", - [3]byte{0, 9, 179}: "MCM Systems Ltd", - [3]byte{0, 9, 180}: "KISAN TELECOM CO., LTD.", - [3]byte{0, 9, 181}: "3J Tech. Co., Ltd.", - [3]byte{0, 9, 182}: "Cisco Systems, Inc", - [3]byte{0, 9, 183}: "Cisco Systems, Inc", - [3]byte{0, 9, 184}: "Entise Systems", - [3]byte{0, 9, 185}: "Action Imaging Solutions", - [3]byte{0, 9, 186}: "MAKU Informationstechik GmbH", - [3]byte{0, 9, 187}: "MathStar, Inc.", - [3]byte{0, 9, 188}: "Utility, Inc", - [3]byte{0, 9, 189}: "Epygi Technologies, Ltd.", - [3]byte{0, 9, 190}: "Mamiya-OP Co.,Ltd.", - [3]byte{0, 9, 191}: "Nintendo Co., Ltd.", - [3]byte{0, 9, 192}: "6WIND", - [3]byte{0, 9, 193}: "PROCES-DATA A/S", - [3]byte{0, 9, 194}: "Onity, Inc.", - [3]byte{0, 9, 195}: "NETAS", - [3]byte{0, 9, 196}: "Medicore Co., Ltd", - [3]byte{0, 9, 197}: "KINGENE Technology Corporation", - [3]byte{0, 9, 198}: "Visionics Corporation", - [3]byte{0, 9, 199}: "Movistec", - [3]byte{0, 9, 200}: "SINAGAWA TSUSHIN KEISOU SERVICE", - [3]byte{0, 9, 201}: "BlueWINC Co., Ltd.", - [3]byte{0, 9, 202}: "iMaxNetworks(Shenzhen)Limited.", - [3]byte{0, 9, 203}: "HBrain", - [3]byte{0, 9, 204}: "Moog GmbH", - [3]byte{0, 9, 205}: "HUDSON SOFT CO.,LTD.", - [3]byte{0, 9, 206}: "SpaceBridge Semiconductor Corp.", - [3]byte{0, 9, 207}: "iAd GmbH", - [3]byte{0, 9, 208}: "Solacom Technologies Inc.", - [3]byte{0, 9, 209}: "SERANOA NETWORKS INC", - [3]byte{0, 9, 210}: "Mai Logic Inc.", - [3]byte{0, 9, 211}: "Western DataCom Co., Inc.", - [3]byte{0, 9, 212}: "Transtech Networks", - [3]byte{0, 9, 213}: "Signal Communication, Inc.", - [3]byte{0, 9, 214}: "KNC One GmbH", - [3]byte{0, 9, 215}: "DC Security Products", - [3]byte{0, 9, 216}: "Fält Communications AB", - [3]byte{0, 9, 217}: "Neoscale Systems, Inc", - [3]byte{0, 9, 218}: "Control Module Inc.", - [3]byte{0, 9, 219}: "eSpace", - [3]byte{0, 9, 220}: "Galaxis Technology AG", - [3]byte{0, 9, 221}: "Mavin Technology Inc.", - [3]byte{0, 9, 222}: "Samjin Information & Communications Co., Ltd.", - [3]byte{0, 9, 223}: "Vestel Komunikasyon Sanayi ve Ticaret A.S.", - [3]byte{0, 9, 224}: "XEMICS S.A.", - [3]byte{0, 9, 225}: "Gemtek Technology Co., Ltd.", - [3]byte{0, 9, 226}: "Sinbon Electronics Co., Ltd.", - [3]byte{0, 9, 227}: "Angel Iglesias S.A.", - [3]byte{0, 9, 228}: "K Tech Infosystem Inc.", - [3]byte{0, 9, 229}: "Hottinger Baldwin Messtechnik GmbH", - [3]byte{0, 9, 230}: "Cyber Switching Inc.", - [3]byte{0, 9, 231}: "ADC Techonology", - [3]byte{0, 9, 232}: "Cisco Systems, Inc", - [3]byte{0, 9, 233}: "Cisco Systems, Inc", - [3]byte{0, 9, 234}: "YEM Inc.", - [3]byte{0, 9, 235}: "HuMANDATA LTD.", - [3]byte{0, 9, 236}: "Daktronics, Inc.", - [3]byte{0, 9, 237}: "CipherOptics", - [3]byte{0, 9, 238}: "MEIKYO ELECTRIC CO.,LTD", - [3]byte{0, 9, 239}: "Vocera Communications", - [3]byte{0, 9, 240}: "Shimizu Technology Inc.", - [3]byte{0, 9, 241}: "Yamaki Electric Corporation", - [3]byte{0, 9, 242}: "Cohu, Inc., Electronics Division", - [3]byte{0, 9, 243}: "WELL Communication Corp.", - [3]byte{0, 9, 244}: "Alcon Laboratories, Inc.", - [3]byte{0, 9, 245}: "Emerson Network Power Co.,Ltd", - [3]byte{0, 9, 246}: "Shenzhen Eastern Digital Tech Ltd.", - [3]byte{0, 9, 247}: "SED, a division of Calian", - [3]byte{0, 9, 248}: "UNIMO TECHNOLOGY CO., LTD.", - [3]byte{0, 9, 249}: "ART JAPAN CO., LTD.", - [3]byte{0, 9, 251}: "Philips Patient Monitoring", - [3]byte{0, 9, 252}: "IPFLEX Inc.", - [3]byte{0, 9, 253}: "Ubinetics Limited", - [3]byte{0, 9, 254}: "Daisy Technologies, Inc.", - [3]byte{0, 9, 255}: "X.net 2000 GmbH", - [3]byte{0, 10, 0}: "Mediatek Corp.", - [3]byte{0, 10, 1}: "SOHOware, Inc.", - [3]byte{0, 10, 2}: "ANNSO CO., LTD.", - [3]byte{0, 10, 3}: "ENDESA SERVICIOS, S.L.", - [3]byte{0, 10, 4}: "3Com Ltd", - [3]byte{0, 10, 5}: "Widax Corp.", - [3]byte{0, 10, 6}: "Teledex LLC", - [3]byte{0, 10, 7}: "WebWayOne Ltd", - [3]byte{0, 10, 8}: "Alpine Electronics, Inc.", - [3]byte{0, 10, 9}: "TaraCom Integrated Products, Inc.", - [3]byte{0, 10, 10}: "SUNIX Co., Ltd.", - [3]byte{0, 10, 11}: "Sealevel Systems, Inc.", - [3]byte{0, 10, 12}: "Scientific Research Corporation", - [3]byte{0, 10, 13}: "FCI Deutschland GmbH", - [3]byte{0, 10, 14}: "Invivo Research Inc.", - [3]byte{0, 10, 15}: "Ilryung Telesys, Inc", - [3]byte{0, 10, 16}: "FAST media integrations AG", - [3]byte{0, 10, 17}: "ExPet Technologies, Inc", - [3]byte{0, 10, 18}: "Azylex Technology, Inc", - [3]byte{0, 10, 19}: "Honeywell Video Systems", - [3]byte{0, 10, 20}: "TECO a.s.", - [3]byte{0, 10, 21}: "Silicon Data, Inc", - [3]byte{0, 10, 22}: "Lassen Research", - [3]byte{0, 10, 23}: "NESTAR COMMUNICATIONS, INC", - [3]byte{0, 10, 24}: "Vichel Inc.", - [3]byte{0, 10, 25}: "Valere Power, Inc.", - [3]byte{0, 10, 26}: "Imerge Ltd", - [3]byte{0, 10, 27}: "Stream Labs", - [3]byte{0, 10, 28}: "Bridge Information Co., Ltd.", - [3]byte{0, 10, 29}: "Optical Communications Products Inc.", - [3]byte{0, 10, 30}: "Red-M Products Limited", - [3]byte{0, 10, 31}: "ART WARE Telecommunication Co., Ltd.", - [3]byte{0, 10, 32}: "SVA Networks, Inc.", - [3]byte{0, 10, 33}: "Integra Telecom Co. Ltd", - [3]byte{0, 10, 34}: "Amperion Inc", - [3]byte{0, 10, 35}: "Parama Networks Inc", - [3]byte{0, 10, 36}: "Octave Communications", - [3]byte{0, 10, 37}: "CERAGON NETWORKS", - [3]byte{0, 10, 38}: "CEIA S.p.A.", - [3]byte{0, 10, 39}: "Apple, Inc.", - [3]byte{0, 10, 40}: "Motorola", - [3]byte{0, 10, 41}: "Pan Dacom Networking AG", - [3]byte{0, 10, 42}: "QSI Systems Inc.", - [3]byte{0, 10, 43}: "Etherstuff", - [3]byte{0, 10, 44}: "Active Tchnology Corporation", - [3]byte{0, 10, 45}: "Cabot Communications Limited", - [3]byte{0, 10, 46}: "MAPLE NETWORKS CO., LTD", - [3]byte{0, 10, 47}: "Artnix Inc.", - [3]byte{0, 10, 48}: "Visteon Corporation", - [3]byte{0, 10, 49}: "HCV Consulting", - [3]byte{0, 10, 50}: "Xsido Corporation", - [3]byte{0, 10, 51}: "Emulex Corporation", - [3]byte{0, 10, 52}: "Identicard Systems Incorporated", - [3]byte{0, 10, 53}: "Xilinx", - [3]byte{0, 10, 54}: "Synelec Telecom Multimedia", - [3]byte{0, 10, 55}: "Procera Networks, Inc.", - [3]byte{0, 10, 56}: "Apani Networks", - [3]byte{0, 10, 57}: "LoPA Information Technology", - [3]byte{0, 10, 58}: "J-THREE INTERNATIONAL Holding Co., Ltd.", - [3]byte{0, 10, 59}: "GCT Semiconductor, Inc", - [3]byte{0, 10, 60}: "Enerpoint Ltd.", - [3]byte{0, 10, 61}: "Elo Sistemas Eletronicos S.A.", - [3]byte{0, 10, 62}: "EADS Telecom", - [3]byte{0, 10, 63}: "Data East Corporation", - [3]byte{0, 10, 64}: "Crown Audio -- Harmanm International", - [3]byte{0, 10, 65}: "Cisco Systems, Inc", - [3]byte{0, 10, 66}: "Cisco Systems, Inc", - [3]byte{0, 10, 67}: "Chunghwa Telecom Co., Ltd.", - [3]byte{0, 10, 68}: "Avery Dennison Deutschland GmbH", - [3]byte{0, 10, 69}: "Audio-Technica Corp.", - [3]byte{0, 10, 70}: "ARO WELDING TECHNOLOGIES SAS", - [3]byte{0, 10, 71}: "Allied Vision Technologies", - [3]byte{0, 10, 72}: "Albatron Technology", - [3]byte{0, 10, 73}: "F5 Networks, Inc.", - [3]byte{0, 10, 74}: "Targa Systems Ltd.", - [3]byte{0, 10, 75}: "DataPower Technology, Inc.", - [3]byte{0, 10, 76}: "Molecular Devices Corporation", - [3]byte{0, 10, 77}: "Noritz Corporation", - [3]byte{0, 10, 78}: "UNITEK Electronics INC.", - [3]byte{0, 10, 79}: "Brain Boxes Limited", - [3]byte{0, 10, 80}: "REMOTEK CORPORATION", - [3]byte{0, 10, 81}: "GyroSignal Technology Co., Ltd.", - [3]byte{0, 10, 82}: "AsiaRF Ltd.", - [3]byte{0, 10, 83}: "Intronics, Incorporated", - [3]byte{0, 10, 84}: "Laguna Hills, Inc.", - [3]byte{0, 10, 85}: "MARKEM Corporation", - [3]byte{0, 10, 86}: "HITACHI Maxell Ltd.", - [3]byte{0, 10, 87}: "Hewlett Packard", - [3]byte{0, 10, 88}: "Freyer & Siegel Elektronik GmbH & Co. KG", - [3]byte{0, 10, 89}: "HW server", - [3]byte{0, 10, 90}: "GreenNET Technologies Co.,Ltd.", - [3]byte{0, 10, 91}: "Power-One as", - [3]byte{0, 10, 92}: "Carel s.p.a.", - [3]byte{0, 10, 93}: "FingerTec Worldwide Sdn Bhd", - [3]byte{0, 10, 94}: "3COM Corporation", - [3]byte{0, 10, 95}: "almedio inc.", - [3]byte{0, 10, 96}: "Autostar Technology Pte Ltd", - [3]byte{0, 10, 97}: "Cellinx Systems Inc.", - [3]byte{0, 10, 98}: "Crinis Networks, Inc.", - [3]byte{0, 10, 99}: "DHD GmbH", - [3]byte{0, 10, 100}: "Eracom Technologies", - [3]byte{0, 10, 101}: "GentechMedia.co.,ltd.", - [3]byte{0, 10, 102}: "MITSUBISHI ELECTRIC SYSTEM & SERVICE CO.,LTD.", - [3]byte{0, 10, 103}: "OngCorp", - [3]byte{0, 10, 104}: "Solarflare Communications Inc", - [3]byte{0, 10, 105}: "SUNNY bell Technology Co., Ltd.", - [3]byte{0, 10, 106}: "SVM Microwaves s.r.o.", - [3]byte{0, 10, 107}: "Tadiran Telecom Business Systems LTD", - [3]byte{0, 10, 108}: "Walchem Corporation", - [3]byte{0, 10, 109}: "EKS Elektronikservice GmbH", - [3]byte{0, 10, 110}: "Harmonic, Inc", - [3]byte{0, 10, 111}: "ZyFLEX Technologies Inc", - [3]byte{0, 10, 112}: "MPLS Forum", - [3]byte{0, 10, 113}: "Avrio Technologies, Inc", - [3]byte{0, 10, 114}: "STEC, INC.", - [3]byte{0, 10, 115}: "Scientific Atlanta", - [3]byte{0, 10, 116}: "Manticom Networks Inc.", - [3]byte{0, 10, 117}: "Caterpillar, Inc", - [3]byte{0, 10, 118}: "Beida Jade Bird Huaguang Technology Co.,Ltd", - [3]byte{0, 10, 119}: "Bluewire Technologies LLC", - [3]byte{0, 10, 120}: "OLITEC", - [3]byte{0, 10, 121}: "corega K.K", - [3]byte{0, 10, 122}: "Kyoritsu Electric Co., Ltd.", - [3]byte{0, 10, 123}: "Cornelius Consult", - [3]byte{0, 10, 124}: "Tecton Ltd", - [3]byte{0, 10, 125}: "Valo, Inc.", - [3]byte{0, 10, 126}: "The Advantage Group", - [3]byte{0, 10, 127}: "Teradon Industries, Inc", - [3]byte{0, 10, 128}: "Telkonet Inc.", - [3]byte{0, 10, 129}: "TEIMA Audiotex S.L.", - [3]byte{0, 10, 130}: "TATSUTA SYSTEM ELECTRONICS CO.,LTD.", - [3]byte{0, 10, 131}: "SALTO SYSTEMS S.L.", - [3]byte{0, 10, 132}: "Rainsun Enterprise Co., Ltd.", - [3]byte{0, 10, 133}: "PLAT'C2,Inc", - [3]byte{0, 10, 134}: "Lenze", - [3]byte{0, 10, 135}: "Integrated Micromachines Inc.", - [3]byte{0, 10, 136}: "InCypher S.A.", - [3]byte{0, 10, 137}: "Creval Systems, Inc.", - [3]byte{0, 10, 138}: "Cisco Systems, Inc", - [3]byte{0, 10, 139}: "Cisco Systems, Inc", - [3]byte{0, 10, 140}: "Guardware Systems Ltd.", - [3]byte{0, 10, 141}: "EUROTHERM LIMITED", - [3]byte{0, 10, 142}: "Invacom Ltd", - [3]byte{0, 10, 143}: "Aska International Inc.", - [3]byte{0, 10, 144}: "Bayside Interactive, Inc.", - [3]byte{0, 10, 145}: "HemoCue AB", - [3]byte{0, 10, 146}: "Presonus Corporation", - [3]byte{0, 10, 147}: "W2 Networks, Inc.", - [3]byte{0, 10, 148}: "ShangHai cellink CO., LTD", - [3]byte{0, 10, 149}: "Apple, Inc.", - [3]byte{0, 10, 150}: "MEWTEL TECHNOLOGY INC.", - [3]byte{0, 10, 151}: "SONICblue, Inc.", - [3]byte{0, 10, 152}: "M+F Gwinner GmbH & Co", - [3]byte{0, 10, 153}: "Calamp Wireless Networks Inc", - [3]byte{0, 10, 154}: "Aiptek International Inc", - [3]byte{0, 10, 155}: "TB Group Inc", - [3]byte{0, 10, 156}: "Server Technology, Inc.", - [3]byte{0, 10, 157}: "King Young Technology Co. Ltd.", - [3]byte{0, 10, 158}: "BroadWeb Corportation", - [3]byte{0, 10, 159}: "Pannaway Technologies, Inc.", - [3]byte{0, 10, 160}: "Cedar Point Communications", - [3]byte{0, 10, 161}: "V V S Limited", - [3]byte{0, 10, 162}: "SYSTEK INC.", - [3]byte{0, 10, 163}: "SHIMAFUJI ELECTRIC CO.,LTD.", - [3]byte{0, 10, 164}: "SHANGHAI SURVEILLANCE TECHNOLOGY CO,LTD", - [3]byte{0, 10, 165}: "MAXLINK INDUSTRIES LIMITED", - [3]byte{0, 10, 166}: "Hochiki Corporation", - [3]byte{0, 10, 167}: "FEI Electron Optics", - [3]byte{0, 10, 168}: "ePipe Pty. Ltd.", - [3]byte{0, 10, 169}: "Brooks Automation GmbH", - [3]byte{0, 10, 170}: "AltiGen Communications Inc.", - [3]byte{0, 10, 171}: "Toyota Technical Development Corporation", - [3]byte{0, 10, 172}: "TerraTec Electronic GmbH", - [3]byte{0, 10, 173}: "Stargames Corporation", - [3]byte{0, 10, 174}: "Rosemount Process Analytical", - [3]byte{0, 10, 175}: "Pipal Systems", - [3]byte{0, 10, 176}: "LOYTEC electronics GmbH", - [3]byte{0, 10, 177}: "GENETEC Corporation", - [3]byte{0, 10, 178}: "Fresnel Wireless Systems", - [3]byte{0, 10, 179}: "Fa. GIRA", - [3]byte{0, 10, 180}: "ETIC Telecommunications", - [3]byte{0, 10, 181}: "Digital Electronic Network", - [3]byte{0, 10, 182}: "COMPUNETIX, INC", - [3]byte{0, 10, 183}: "Cisco Systems, Inc", - [3]byte{0, 10, 184}: "Cisco Systems, Inc", - [3]byte{0, 10, 185}: "Astera Technologies Corp.", - [3]byte{0, 10, 186}: "Arcon Technology Limited", - [3]byte{0, 10, 187}: "Taiwan Secom Co,. Ltd", - [3]byte{0, 10, 188}: "Seabridge Ltd.", - [3]byte{0, 10, 189}: "Rupprecht & Patashnick Co.", - [3]byte{0, 10, 190}: "OPNET Technologies CO., LTD.", - [3]byte{0, 10, 191}: "HIROTA SS", - [3]byte{0, 10, 192}: "Fuyoh Video Industry CO., LTD.", - [3]byte{0, 10, 193}: "Futuretel", - [3]byte{0, 10, 194}: "Wuhan FiberHome Digital Technology Co.,Ltd.", - [3]byte{0, 10, 195}: "eM Technics Co., Ltd.", - [3]byte{0, 10, 196}: "Daewoo Teletech Co., Ltd", - [3]byte{0, 10, 197}: "Color Kinetics", - [3]byte{0, 10, 198}: "Overture Networks.", - [3]byte{0, 10, 199}: "Unication Group", - [3]byte{0, 10, 200}: "ZPSYS CO.,LTD. (Planning&Management)", - [3]byte{0, 10, 201}: "Zambeel Inc", - [3]byte{0, 10, 202}: "YOKOYAMA SHOKAI CO.,Ltd.", - [3]byte{0, 10, 203}: "XPAK MSA Group", - [3]byte{0, 10, 204}: "Winnow Networks, Inc.", - [3]byte{0, 10, 205}: "Sunrich Technology Limited", - [3]byte{0, 10, 206}: "RADIANTECH, INC.", - [3]byte{0, 10, 207}: "PROVIDEO Multimedia Co. Ltd.", - [3]byte{0, 10, 208}: "Niigata Develoment Center, F.I.T. Co., Ltd.", - [3]byte{0, 10, 209}: "MWS", - [3]byte{0, 10, 210}: "JEPICO Corporation", - [3]byte{0, 10, 211}: "INITECH Co., Ltd", - [3]byte{0, 10, 212}: "CoreBell Systems Inc.", - [3]byte{0, 10, 213}: "Brainchild Electronic Co., Ltd.", - [3]byte{0, 10, 214}: "BeamReach Networks", - [3]byte{0, 10, 215}: "Origin ELECTRIC CO.,LTD.", - [3]byte{0, 10, 216}: "IPCserv Technology Corp.", - [3]byte{0, 10, 217}: "Sony Mobile Communications AB", - [3]byte{0, 10, 218}: "Vindicator Technologies", - [3]byte{0, 10, 219}: "SkyPilot Network, Inc", - [3]byte{0, 10, 220}: "RuggedCom Inc.", - [3]byte{0, 10, 221}: "Allworx Corp.", - [3]byte{0, 10, 222}: "Happy Communication Co., Ltd.", - [3]byte{0, 10, 223}: "Gennum Corporation", - [3]byte{0, 10, 224}: "Fujitsu Softek", - [3]byte{0, 10, 225}: "EG Technology", - [3]byte{0, 10, 226}: "Binatone Electronics International, Ltd", - [3]byte{0, 10, 227}: "YANG MEI TECHNOLOGY CO., LTD", - [3]byte{0, 10, 228}: "Wistron Corporation", - [3]byte{0, 10, 229}: "ScottCare Corporation", - [3]byte{0, 10, 230}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{0, 10, 231}: "ELIOP S.A.", - [3]byte{0, 10, 232}: "Cathay Roxus Information Technology Co. LTD", - [3]byte{0, 10, 233}: "AirVast Technology Inc.", - [3]byte{0, 10, 234}: "ADAM ELEKTRONIK LTD. ŞTI", - [3]byte{0, 10, 235}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{0, 10, 236}: "Koatsu Gas Kogyo Co., Ltd.", - [3]byte{0, 10, 237}: "HARTING Electronics GmbH", - [3]byte{0, 10, 238}: "GCD Hard- & Software GmbH", - [3]byte{0, 10, 239}: "OTRUM ASA", - [3]byte{0, 10, 240}: "SHIN-OH ELECTRONICS CO., LTD. R&D", - [3]byte{0, 10, 241}: "Clarity Design, Inc.", - [3]byte{0, 10, 242}: "NeoAxiom Corp.", - [3]byte{0, 10, 243}: "Cisco Systems, Inc", - [3]byte{0, 10, 244}: "Cisco Systems, Inc", - [3]byte{0, 10, 245}: "Airgo Networks, Inc.", - [3]byte{0, 10, 246}: "Emerson Climate Technologies Retail Solutions, Inc.", - [3]byte{0, 10, 247}: "Broadcom", - [3]byte{0, 10, 248}: "American Telecare Inc.", - [3]byte{0, 10, 249}: "HiConnect, Inc.", - [3]byte{0, 10, 250}: "Traverse Technologies Australia", - [3]byte{0, 10, 251}: "Ambri Limited", - [3]byte{0, 10, 252}: "Core Tec Communications, LLC", - [3]byte{0, 10, 253}: "Kentec Electronics", - [3]byte{0, 10, 254}: "NovaPal Ltd", - [3]byte{0, 10, 255}: "Kilchherr Elektronik AG", - [3]byte{0, 11, 0}: "FUJIAN START COMPUTER EQUIPMENT CO.,LTD", - [3]byte{0, 11, 1}: "DAIICHI ELECTRONICS CO., LTD.", - [3]byte{0, 11, 2}: "Dallmeier electronic", - [3]byte{0, 11, 3}: "Taekwang Industrial Co., Ltd", - [3]byte{0, 11, 4}: "Volktek Corporation", - [3]byte{0, 11, 5}: "Pacific Broadband Networks", - [3]byte{0, 11, 6}: "ARRIS Group, Inc.", - [3]byte{0, 11, 7}: "Voxpath Networks", - [3]byte{0, 11, 8}: "Pillar Data Systems", - [3]byte{0, 11, 9}: "Ifoundry Systems Singapore", - [3]byte{0, 11, 10}: "dBm Optics", - [3]byte{0, 11, 11}: "Corrent Corporation", - [3]byte{0, 11, 12}: "Agile Systems Inc.", - [3]byte{0, 11, 13}: "Air2U, Inc.", - [3]byte{0, 11, 14}: "Trapeze Networks", - [3]byte{0, 11, 15}: "Bosch Rexroth", - [3]byte{0, 11, 16}: "11wave Technonlogy Co.,Ltd", - [3]byte{0, 11, 17}: "HIMEJI ABC TRADING CO.,LTD.", - [3]byte{0, 11, 18}: "NURI Telecom Co., Ltd.", - [3]byte{0, 11, 19}: "ZETRON INC", - [3]byte{0, 11, 20}: "ViewSonic Corporation", - [3]byte{0, 11, 21}: "Platypus Technology", - [3]byte{0, 11, 22}: "Communication Machinery Corporation", - [3]byte{0, 11, 23}: "MKS Instruments", - [3]byte{0, 11, 24}: "Private", - [3]byte{0, 11, 25}: "Vernier Networks, Inc.", - [3]byte{0, 11, 26}: "Industrial Defender, Inc.", - [3]byte{0, 11, 27}: "Systronix, Inc.", - [3]byte{0, 11, 28}: "SIBCO bv", - [3]byte{0, 11, 29}: "LayerZero Power Systems, Inc.", - [3]byte{0, 11, 30}: "KAPPA opto-electronics GmbH", - [3]byte{0, 11, 31}: "I CON Computer Co.", - [3]byte{0, 11, 32}: "Hirata corporation", - [3]byte{0, 11, 33}: "G-Star Communications Inc.", - [3]byte{0, 11, 34}: "Environmental Systems and Services", - [3]byte{0, 11, 35}: "Siemens Subscriber Networks", - [3]byte{0, 11, 36}: "AirLogic", - [3]byte{0, 11, 37}: "Aeluros", - [3]byte{0, 11, 38}: "Wetek Corporation", - [3]byte{0, 11, 39}: "Scion Corporation", - [3]byte{0, 11, 40}: "Quatech Inc.", - [3]byte{0, 11, 41}: "LS(LG) Industrial Systems co.,Ltd", - [3]byte{0, 11, 42}: "HOWTEL Co., Ltd.", - [3]byte{0, 11, 43}: "HOSTNET CORPORATION", - [3]byte{0, 11, 44}: "Eiki Industrial Co. Ltd.", - [3]byte{0, 11, 45}: "Danfoss Inc.", - [3]byte{0, 11, 46}: "Cal-Comp Electronics & Communications Company Ltd.", - [3]byte{0, 11, 47}: "bplan GmbH", - [3]byte{0, 11, 48}: "Beijing Gongye Science & Technology Co.,Ltd", - [3]byte{0, 11, 49}: "Yantai ZhiYang Scientific and technology industry CO., LTD", - [3]byte{0, 11, 50}: "VORMETRIC, INC.", - [3]byte{0, 11, 51}: "Vivato Technologies", - [3]byte{0, 11, 52}: "ShangHai Broadband Technologies CO.LTD", - [3]byte{0, 11, 53}: "Quad Bit System co., Ltd.", - [3]byte{0, 11, 54}: "Productivity Systems, Inc.", - [3]byte{0, 11, 55}: "MANUFACTURE DES MONTRES ROLEX SA", - [3]byte{0, 11, 56}: "Knürr GmbH", - [3]byte{0, 11, 57}: "Keisoku Giken Co.,Ltd.", - [3]byte{0, 11, 58}: "QuStream Corporation", - [3]byte{0, 11, 59}: "devolo AG", - [3]byte{0, 11, 60}: "Cygnal Integrated Products, Inc.", - [3]byte{0, 11, 61}: "CONTAL OK Ltd.", - [3]byte{0, 11, 62}: "BittWare, Inc", - [3]byte{0, 11, 63}: "Anthology Solutions Inc.", - [3]byte{0, 11, 64}: "Oclaro", - [3]byte{0, 11, 65}: "Ing. Büro Dr. Beutlhauser", - [3]byte{0, 11, 66}: "commax Co., Ltd.", - [3]byte{0, 11, 67}: "Microscan Systems, Inc.", - [3]byte{0, 11, 68}: "Concord IDea Corp.", - [3]byte{0, 11, 69}: "Cisco Systems, Inc", - [3]byte{0, 11, 70}: "Cisco Systems, Inc", - [3]byte{0, 11, 71}: "Advanced Energy", - [3]byte{0, 11, 72}: "sofrel", - [3]byte{0, 11, 73}: "RF-Link System Inc.", - [3]byte{0, 11, 74}: "Visimetrics (UK) Ltd", - [3]byte{0, 11, 75}: "VISIOWAVE SA", - [3]byte{0, 11, 76}: "Clarion (M) Sdn Bhd", - [3]byte{0, 11, 77}: "Emuzed", - [3]byte{0, 11, 78}: "VertexRSI, General Dynamics SatCOM Technologies, Inc.", - [3]byte{0, 11, 79}: "Verifone", - [3]byte{0, 11, 80}: "Oxygnet", - [3]byte{0, 11, 81}: "Micetek International Inc.", - [3]byte{0, 11, 82}: "JOYMAX ELECTRONICS CO. LTD.", - [3]byte{0, 11, 83}: "INITIUM Co., Ltd.", - [3]byte{0, 11, 84}: "BiTMICRO Networks, Inc.", - [3]byte{0, 11, 85}: "ADInstruments", - [3]byte{0, 11, 86}: "Cybernetics", - [3]byte{0, 11, 87}: "Silicon Laboratories", - [3]byte{0, 11, 88}: "Astronautics C.A LTD", - [3]byte{0, 11, 89}: "ScriptPro, LLC", - [3]byte{0, 11, 90}: "HyperEdge", - [3]byte{0, 11, 91}: "Rincon Research Corporation", - [3]byte{0, 11, 92}: "Newtech Co.,Ltd", - [3]byte{0, 11, 93}: "FUJITSU LIMITED", - [3]byte{0, 11, 94}: "Audio Engineering Society Inc.", - [3]byte{0, 11, 95}: "Cisco Systems, Inc", - [3]byte{0, 11, 96}: "Cisco Systems, Inc", - [3]byte{0, 11, 97}: "Friedrich Lütze GmbH & Co. KG", - [3]byte{0, 11, 98}: "ib-mohnen KG", - [3]byte{0, 11, 99}: "Kaleidescape", - [3]byte{0, 11, 100}: "Kieback & Peter GmbH & Co KG", - [3]byte{0, 11, 101}: "Sy.A.C. srl", - [3]byte{0, 11, 102}: "Teralink Communications", - [3]byte{0, 11, 103}: "Topview Technology Corporation", - [3]byte{0, 11, 104}: "Addvalue Communications Pte Ltd", - [3]byte{0, 11, 105}: "Franke Finland Oy", - [3]byte{0, 11, 106}: "Asiarock Technology Limited", - [3]byte{0, 11, 107}: "Wistron Neweb Corporation", - [3]byte{0, 11, 108}: "Sychip Inc.", - [3]byte{0, 11, 109}: "SOLECTRON JAPAN NAKANIIDA", - [3]byte{0, 11, 110}: "Neff Instrument Corp.", - [3]byte{0, 11, 111}: "Media Streaming Networks Inc", - [3]byte{0, 11, 112}: "Load Technology, Inc.", - [3]byte{0, 11, 113}: "Litchfield Communications Inc.", - [3]byte{0, 11, 114}: "Lawo AG", - [3]byte{0, 11, 115}: "Kodeos Communications", - [3]byte{0, 11, 116}: "Kingwave Technology Co., Ltd.", - [3]byte{0, 11, 117}: "Iosoft Ltd.", - [3]byte{0, 11, 118}: "ET&T Technology Co. Ltd.", - [3]byte{0, 11, 119}: "Cogent Systems, Inc.", - [3]byte{0, 11, 120}: "TAIFATECH INC.", - [3]byte{0, 11, 121}: "X-COM, Inc.", - [3]byte{0, 11, 122}: "L-3 Linkabit", - [3]byte{0, 11, 123}: "Test-Um Inc.", - [3]byte{0, 11, 124}: "Telex Communications", - [3]byte{0, 11, 125}: "SOLOMON EXTREME INTERNATIONAL LTD.", - [3]byte{0, 11, 126}: "SAGINOMIYA Seisakusho Inc.", - [3]byte{0, 11, 127}: "Align Engineering LLC", - [3]byte{0, 11, 128}: "Lycium Networks", - [3]byte{0, 11, 129}: "Kaparel Corporation", - [3]byte{0, 11, 130}: "Grandstream Networks, Inc.", - [3]byte{0, 11, 131}: "DATAWATT B.V.", - [3]byte{0, 11, 132}: "BODET", - [3]byte{0, 11, 133}: "Cisco Systems, Inc", - [3]byte{0, 11, 134}: "Aruba Networks", - [3]byte{0, 11, 135}: "American Reliance Inc.", - [3]byte{0, 11, 136}: "Vidisco ltd.", - [3]byte{0, 11, 137}: "Top Global Technology, Ltd.", - [3]byte{0, 11, 138}: "MITEQ Inc.", - [3]byte{0, 11, 139}: "KERAJET, S.A.", - [3]byte{0, 11, 140}: "Flextronics", - [3]byte{0, 11, 141}: "Avvio Networks", - [3]byte{0, 11, 142}: "Ascent Corporation", - [3]byte{0, 11, 143}: "AKITA ELECTRONICS SYSTEMS CO.,LTD.", - [3]byte{0, 11, 144}: "ADVA Optical Networking Ltd.", - [3]byte{0, 11, 145}: "Aglaia Gesellschaft für Bildverarbeitung und Kommunikation mbH", - [3]byte{0, 11, 146}: "Ascom Danmark A/S", - [3]byte{0, 11, 147}: "Ritter Elektronik", - [3]byte{0, 11, 148}: "Digital Monitoring Products, Inc.", - [3]byte{0, 11, 149}: "eBet Gaming Systems Pty Ltd", - [3]byte{0, 11, 150}: "Innotrac Diagnostics Oy", - [3]byte{0, 11, 151}: "Matsushita Electric Industrial Co.,Ltd.", - [3]byte{0, 11, 152}: "NiceTechVision", - [3]byte{0, 11, 153}: "SensAble Technologies, Inc.", - [3]byte{0, 11, 154}: "Shanghai Ulink Telecom Equipment Co. Ltd.", - [3]byte{0, 11, 155}: "Sirius System Co, Ltd.", - [3]byte{0, 11, 156}: "TriBeam Technologies, Inc.", - [3]byte{0, 11, 157}: "TwinMOS Technologies Inc.", - [3]byte{0, 11, 158}: "Yasing Technology Corp.", - [3]byte{0, 11, 159}: "Neue ELSA GmbH", - [3]byte{0, 11, 160}: "T&L Information Inc.", - [3]byte{0, 11, 161}: "Fujikura Solutions Ltd.", - [3]byte{0, 11, 162}: "Sumitomo Electric Industries,Ltd", - [3]byte{0, 11, 163}: "Siemens AG, I&S", - [3]byte{0, 11, 164}: "Shiron Satellite Communications Ltd. (1996)", - [3]byte{0, 11, 165}: "Quasar Cipta Mandiri, PT", - [3]byte{0, 11, 166}: "Miyakawa Electric Works Ltd.", - [3]byte{0, 11, 167}: "Maranti Networks", - [3]byte{0, 11, 168}: "HANBACK ELECTRONICS CO., LTD.", - [3]byte{0, 11, 169}: "CloudShield Technologies, Inc.", - [3]byte{0, 11, 170}: "Aiphone co.,Ltd", - [3]byte{0, 11, 171}: "Advantech Technology (CHINA) Co., Ltd.", - [3]byte{0, 11, 172}: "3Com Ltd", - [3]byte{0, 11, 173}: "PC-PoS Inc.", - [3]byte{0, 11, 174}: "Vitals System Inc.", - [3]byte{0, 11, 175}: "WOOJU COMMUNICATIONS Co,.Ltd", - [3]byte{0, 11, 176}: "Sysnet Telematica srl", - [3]byte{0, 11, 177}: "Super Star Technology Co., Ltd.", - [3]byte{0, 11, 178}: "SMALLBIG TECHNOLOGY", - [3]byte{0, 11, 179}: "RiT technologies Ltd.", - [3]byte{0, 11, 180}: "RDC Semiconductor Inc.,", - [3]byte{0, 11, 181}: "nStor Technologies, Inc.", - [3]byte{0, 11, 182}: "Metalligence Technology Corp.", - [3]byte{0, 11, 183}: "Micro Systems Co.,Ltd.", - [3]byte{0, 11, 184}: "Kihoku Electronic Co.", - [3]byte{0, 11, 185}: "Imsys AB", - [3]byte{0, 11, 186}: "Harmonic, Inc", - [3]byte{0, 11, 187}: "Etin Systems Co., Ltd", - [3]byte{0, 11, 188}: "En Garde Systems, Inc.", - [3]byte{0, 11, 189}: "Connexionz Limited", - [3]byte{0, 11, 190}: "Cisco Systems, Inc", - [3]byte{0, 11, 191}: "Cisco Systems, Inc", - [3]byte{0, 11, 192}: "China IWNComm Co., Ltd.", - [3]byte{0, 11, 193}: "Bay Microsystems, Inc.", - [3]byte{0, 11, 194}: "Corinex Communication Corp.", - [3]byte{0, 11, 195}: "Multiplex, Inc.", - [3]byte{0, 11, 196}: "BIOTRONIK GmbH & Co", - [3]byte{0, 11, 197}: "SMC Networks, Inc.", - [3]byte{0, 11, 198}: "ISAC, Inc.", - [3]byte{0, 11, 199}: "ICET S.p.A.", - [3]byte{0, 11, 200}: "AirFlow Networks", - [3]byte{0, 11, 201}: "Electroline Equipment", - [3]byte{0, 11, 202}: "DATAVAN TC", - [3]byte{0, 11, 203}: "Fagor Automation , S. Coop", - [3]byte{0, 11, 204}: "JUSAN, S.A.", - [3]byte{0, 11, 205}: "Hewlett Packard", - [3]byte{0, 11, 206}: "Free2move AB", - [3]byte{0, 11, 207}: "AGFA NDT INC.", - [3]byte{0, 11, 208}: "XiMeta Technology Americas Inc.", - [3]byte{0, 11, 209}: "Aeronix, Inc.", - [3]byte{0, 11, 210}: "Remopro Technology Inc.", - [3]byte{0, 11, 211}: "cd3o", - [3]byte{0, 11, 212}: "Beijing Wise Technology & Science Development Co.Ltd", - [3]byte{0, 11, 213}: "Nvergence, Inc.", - [3]byte{0, 11, 214}: "Paxton Access Ltd", - [3]byte{0, 11, 215}: "DORMA Time + Access GmbH", - [3]byte{0, 11, 216}: "Industrial Scientific Corp.", - [3]byte{0, 11, 217}: "General Hydrogen", - [3]byte{0, 11, 218}: "EyeCross Co.,Inc.", - [3]byte{0, 11, 219}: "Dell Inc.", - [3]byte{0, 11, 220}: "AKCP", - [3]byte{0, 11, 221}: "TOHOKU RICOH Co., LTD.", - [3]byte{0, 11, 222}: "TELDIX GmbH", - [3]byte{0, 11, 223}: "Shenzhen RouterD Networks Limited", - [3]byte{0, 11, 224}: "SercoNet Ltd.", - [3]byte{0, 11, 225}: "Nokia NET Product Operations", - [3]byte{0, 11, 226}: "Lumenera Corporation", - [3]byte{0, 11, 227}: "Key Stream Co., Ltd.", - [3]byte{0, 11, 228}: "Hosiden Corporation", - [3]byte{0, 11, 229}: "HIMS International Corporation", - [3]byte{0, 11, 230}: "Datel Electronics", - [3]byte{0, 11, 231}: "COMFLUX TECHNOLOGY INC.", - [3]byte{0, 11, 232}: "AOIP", - [3]byte{0, 11, 233}: "Actel Corporation", - [3]byte{0, 11, 234}: "Zultys Technologies", - [3]byte{0, 11, 235}: "Systegra AG", - [3]byte{0, 11, 236}: "NIPPON ELECTRIC INSTRUMENT, INC.", - [3]byte{0, 11, 237}: "ELM Inc.", - [3]byte{0, 11, 238}: "inc.jet, Incorporated", - [3]byte{0, 11, 239}: "Code Corporation", - [3]byte{0, 11, 240}: "MoTEX Products Co., Ltd.", - [3]byte{0, 11, 241}: "LAP Laser Applikations", - [3]byte{0, 11, 242}: "Chih-Kan Technology Co., Ltd.", - [3]byte{0, 11, 243}: "BAE SYSTEMS", - [3]byte{0, 11, 244}: "Private", - [3]byte{0, 11, 245}: "Shanghai Sibo Telecom Technology Co.,Ltd", - [3]byte{0, 11, 246}: "Nitgen Co., Ltd", - [3]byte{0, 11, 247}: "NIDEK CO.,LTD", - [3]byte{0, 11, 248}: "Infinera", - [3]byte{0, 11, 249}: "Gemstone Communications, Inc.", - [3]byte{0, 11, 250}: "EXEMYS SRL", - [3]byte{0, 11, 251}: "D-NET International Corporation", - [3]byte{0, 11, 252}: "Cisco Systems, Inc", - [3]byte{0, 11, 253}: "Cisco Systems, Inc", - [3]byte{0, 11, 254}: "CASTEL Broadband Limited", - [3]byte{0, 11, 255}: "Berkeley Camera Engineering", - [3]byte{0, 12, 0}: "BEB Industrie-Elektronik AG", - [3]byte{0, 12, 1}: "Abatron AG", - [3]byte{0, 12, 2}: "ABB Oy", - [3]byte{0, 12, 3}: "HDMI Licensing, LLC", - [3]byte{0, 12, 4}: "Tecnova", - [3]byte{0, 12, 5}: "RPA Reserch Co., Ltd.", - [3]byte{0, 12, 6}: "Nixvue Systems Pte Ltd", - [3]byte{0, 12, 7}: "Iftest AG", - [3]byte{0, 12, 8}: "HUMEX Technologies Corp.", - [3]byte{0, 12, 9}: "Hitachi IE Systems Co., Ltd", - [3]byte{0, 12, 10}: "Guangdong Province Electronic Technology Research Institute", - [3]byte{0, 12, 11}: "Broadbus Technologies", - [3]byte{0, 12, 12}: "APPRO TECHNOLOGY INC.", - [3]byte{0, 12, 13}: "Communications & Power Industries / Satcom Division", - [3]byte{0, 12, 14}: "XtremeSpectrum, Inc.", - [3]byte{0, 12, 15}: "Techno-One Co., Ltd", - [3]byte{0, 12, 16}: "PNI Corporation", - [3]byte{0, 12, 17}: "NIPPON DEMPA CO.,LTD.", - [3]byte{0, 12, 18}: "Micro-Optronic-Messtechnik GmbH", - [3]byte{0, 12, 19}: "MediaQ", - [3]byte{0, 12, 20}: "Diagnostic Instruments, Inc.", - [3]byte{0, 12, 21}: "CyberPower Systems, Inc.", - [3]byte{0, 12, 22}: "Concorde Microsystems Inc.", - [3]byte{0, 12, 23}: "AJA Video Systems Inc", - [3]byte{0, 12, 24}: "Zenisu Keisoku Inc.", - [3]byte{0, 12, 25}: "Telio Communications GmbH", - [3]byte{0, 12, 26}: "Quest Technical Solutions Inc.", - [3]byte{0, 12, 27}: "ORACOM Co, Ltd.", - [3]byte{0, 12, 28}: "MicroWeb Co., Ltd.", - [3]byte{0, 12, 29}: "Mettler & Fuchs AG", - [3]byte{0, 12, 30}: "Global Cache", - [3]byte{0, 12, 31}: "Glimmerglass Networks", - [3]byte{0, 12, 32}: "Fi WIn, Inc.", - [3]byte{0, 12, 33}: "Faculty of Science and Technology, Keio University", - [3]byte{0, 12, 34}: "Double D Electronics Ltd", - [3]byte{0, 12, 35}: "Beijing Lanchuan Tech. Co., Ltd.", - [3]byte{0, 12, 36}: "ANATOR", - [3]byte{0, 12, 37}: "Allied Telesis Labs, Inc.", - [3]byte{0, 12, 38}: "Weintek Labs. Inc.", - [3]byte{0, 12, 39}: "Sammy Corporation", - [3]byte{0, 12, 40}: "RIFATRON", - [3]byte{0, 12, 41}: "VMware, Inc.", - [3]byte{0, 12, 42}: "OCTTEL Communication Co., Ltd.", - [3]byte{0, 12, 43}: "ELIAS Technology, Inc.", - [3]byte{0, 12, 44}: "Enwiser Inc.", - [3]byte{0, 12, 45}: "FullWave Technology Co., Ltd.", - [3]byte{0, 12, 46}: "Openet information technology(shenzhen) Co., Ltd.", - [3]byte{0, 12, 47}: "SeorimTechnology Co.,Ltd.", - [3]byte{0, 12, 48}: "Cisco Systems, Inc", - [3]byte{0, 12, 49}: "Cisco Systems, Inc", - [3]byte{0, 12, 50}: "Avionic Design Development GmbH", - [3]byte{0, 12, 51}: "Compucase Enterprise Co. Ltd.", - [3]byte{0, 12, 52}: "Vixen Co., Ltd.", - [3]byte{0, 12, 53}: "KaVo Dental GmbH & Co. KG", - [3]byte{0, 12, 54}: "SHARP TAKAYA ELECTRONICS INDUSTRY CO.,LTD.", - [3]byte{0, 12, 55}: "Geomation, Inc.", - [3]byte{0, 12, 56}: "TelcoBridges Inc.", - [3]byte{0, 12, 57}: "Sentinel Wireless Inc.", - [3]byte{0, 12, 58}: "Oxance", - [3]byte{0, 12, 59}: "Orion Electric Co., Ltd.", - [3]byte{0, 12, 60}: "MediaChorus, Inc.", - [3]byte{0, 12, 61}: "Glsystech Co., Ltd.", - [3]byte{0, 12, 62}: "Crest Audio", - [3]byte{0, 12, 63}: "Cogent Defence & Security Networks,", - [3]byte{0, 12, 64}: "Altech Controls", - [3]byte{0, 12, 65}: "Cisco-Linksys, LLC", - [3]byte{0, 12, 66}: "Routerboard.com", - [3]byte{0, 12, 67}: "Ralink Technology, Corp.", - [3]byte{0, 12, 68}: "Automated Interfaces, Inc.", - [3]byte{0, 12, 69}: "Animation Technologies Inc.", - [3]byte{0, 12, 70}: "Allied Telesyn Inc.", - [3]byte{0, 12, 71}: "SK Teletech(R&D Planning Team)", - [3]byte{0, 12, 72}: "QoStek Corporation", - [3]byte{0, 12, 73}: "Dangaard Telecom Denmark A/S", - [3]byte{0, 12, 74}: "Cygnus Microsystems (P) Limited", - [3]byte{0, 12, 75}: "Cheops Elektronik", - [3]byte{0, 12, 76}: "Arcor AG&Co.", - [3]byte{0, 12, 77}: "Curtiss-Wright Controls Avionics & Electronics", - [3]byte{0, 12, 78}: "Winbest Technology CO,LT", - [3]byte{0, 12, 79}: "UDTech Japan Corporation", - [3]byte{0, 12, 80}: "Seagate Technology", - [3]byte{0, 12, 81}: "Scientific Technologies Inc.", - [3]byte{0, 12, 82}: "Roll Systems Inc.", - [3]byte{0, 12, 83}: "Private", - [3]byte{0, 12, 84}: "Pedestal Networks, Inc", - [3]byte{0, 12, 85}: "Microlink Communications Inc.", - [3]byte{0, 12, 86}: "Megatel Computer (1986) Corp.", - [3]byte{0, 12, 87}: "MACKIE Engineering Services Belgium BVBA", - [3]byte{0, 12, 88}: "M&S Systems", - [3]byte{0, 12, 89}: "Indyme Electronics, Inc.", - [3]byte{0, 12, 90}: "IBSmm Embedded Electronics Consulting", - [3]byte{0, 12, 91}: "HANWANG TECHNOLOGY CO.,LTD", - [3]byte{0, 12, 92}: "GTN Systems B.V.", - [3]byte{0, 12, 93}: "CHIC TECHNOLOGY (CHINA) CORP.", - [3]byte{0, 12, 94}: "Calypso Medical", - [3]byte{0, 12, 95}: "Avtec, Inc.", - [3]byte{0, 12, 96}: "ACM Systems", - [3]byte{0, 12, 97}: "AC Tech corporation DBA Advanced Digital", - [3]byte{0, 12, 98}: "ABB AB, Cewe-Control", - [3]byte{0, 12, 99}: "Zenith Electronics Corporation", - [3]byte{0, 12, 100}: "X2 MSA Group", - [3]byte{0, 12, 101}: "Sunin Telecom", - [3]byte{0, 12, 102}: "Pronto Networks Inc", - [3]byte{0, 12, 103}: "OYO ELECTRIC CO.,LTD", - [3]byte{0, 12, 104}: "SigmaTel, Inc.", - [3]byte{0, 12, 105}: "National Radio Astronomy Observatory", - [3]byte{0, 12, 106}: "MBARI", - [3]byte{0, 12, 107}: "Kurz Industrie-Elektronik GmbH", - [3]byte{0, 12, 108}: "Elgato Systems LLC", - [3]byte{0, 12, 109}: "Edwards Ltd.", - [3]byte{0, 12, 110}: "ASUSTek COMPUTER INC.", - [3]byte{0, 12, 111}: "Amtek system co.,LTD.", - [3]byte{0, 12, 112}: "ACC GmbH", - [3]byte{0, 12, 113}: "Wybron, Inc", - [3]byte{0, 12, 114}: "Tempearl Industrial Co., Ltd.", - [3]byte{0, 12, 115}: "TELSON ELECTRONICS CO., LTD", - [3]byte{0, 12, 116}: "RIVERTEC CORPORATION", - [3]byte{0, 12, 117}: "Oriental integrated electronics. LTD", - [3]byte{0, 12, 118}: "MICRO-STAR INTERNATIONAL CO., LTD.", - [3]byte{0, 12, 119}: "Life Racing Ltd", - [3]byte{0, 12, 120}: "In-Tech Electronics Limited", - [3]byte{0, 12, 121}: "Extel Communications P/L", - [3]byte{0, 12, 122}: "DaTARIUS Technologies GmbH", - [3]byte{0, 12, 123}: "ALPHA PROJECT Co.,Ltd.", - [3]byte{0, 12, 124}: "Internet Information Image Inc.", - [3]byte{0, 12, 125}: "TEIKOKU ELECTRIC MFG. CO., LTD", - [3]byte{0, 12, 126}: "Tellium Incorporated", - [3]byte{0, 12, 127}: "synertronixx GmbH", - [3]byte{0, 12, 128}: "Opelcomm Inc.", - [3]byte{0, 12, 129}: "Schneider Electric (Australia)", - [3]byte{0, 12, 130}: "NETWORK TECHNOLOGIES INC", - [3]byte{0, 12, 131}: "Logical Solutions", - [3]byte{0, 12, 132}: "Eazix, Inc.", - [3]byte{0, 12, 133}: "Cisco Systems, Inc", - [3]byte{0, 12, 134}: "Cisco Systems, Inc", - [3]byte{0, 12, 135}: "AMD", - [3]byte{0, 12, 136}: "Apache Micro Peripherals, Inc.", - [3]byte{0, 12, 137}: "AC Electric Vehicles, Ltd.", - [3]byte{0, 12, 138}: "Bose Corporation", - [3]byte{0, 12, 139}: "Connect Tech Inc", - [3]byte{0, 12, 140}: "KODICOM CO.,LTD.", - [3]byte{0, 12, 141}: "MATRIX VISION GmbH", - [3]byte{0, 12, 142}: "Mentor Engineering Inc", - [3]byte{0, 12, 143}: "Nergal s.r.l.", - [3]byte{0, 12, 144}: "Octasic Inc.", - [3]byte{0, 12, 145}: "Riverhead Networks Inc.", - [3]byte{0, 12, 146}: "WolfVision Gmbh", - [3]byte{0, 12, 147}: "Xeline Co., Ltd.", - [3]byte{0, 12, 148}: "United Electronic Industries, Inc. (EUI)", - [3]byte{0, 12, 149}: "PrimeNet", - [3]byte{0, 12, 150}: "OQO, Inc.", - [3]byte{0, 12, 151}: "NV ADB TTV Technologies SA", - [3]byte{0, 12, 152}: "LETEK Communications Inc.", - [3]byte{0, 12, 153}: "HITEL LINK Co.,Ltd", - [3]byte{0, 12, 154}: "Hitech Electronics Corp.", - [3]byte{0, 12, 155}: "EE Solutions, Inc", - [3]byte{0, 12, 156}: "Chongho information & communications", - [3]byte{0, 12, 157}: "UbeeAirWalk, Inc.", - [3]byte{0, 12, 158}: "MemoryLink Corp.", - [3]byte{0, 12, 159}: "NKE Corporation", - [3]byte{0, 12, 160}: "StorCase Technology, Inc.", - [3]byte{0, 12, 161}: "SIGMACOM Co., LTD.", - [3]byte{0, 12, 162}: "Harmonic Video Network", - [3]byte{0, 12, 163}: "Rancho Technology, Inc.", - [3]byte{0, 12, 164}: "Prompttec Product Management GmbH", - [3]byte{0, 12, 165}: "Naman NZ LTd", - [3]byte{0, 12, 166}: "Mintera Corporation", - [3]byte{0, 12, 167}: "Metro (Suzhou) Technologies Co., Ltd.", - [3]byte{0, 12, 168}: "Garuda Networks Corporation", - [3]byte{0, 12, 169}: "Ebtron Inc.", - [3]byte{0, 12, 170}: "Cubic Transportation Systems Inc", - [3]byte{0, 12, 171}: "Commend International GmbH", - [3]byte{0, 12, 172}: "Citizen Watch Co., Ltd.", - [3]byte{0, 12, 173}: "BTU International", - [3]byte{0, 12, 174}: "Ailocom Oy", - [3]byte{0, 12, 175}: "TRI TERM CO.,LTD.", - [3]byte{0, 12, 176}: "Star Semiconductor Corporation", - [3]byte{0, 12, 177}: "Salland Engineering (Europe) BV", - [3]byte{0, 12, 178}: "UNION co., ltd.", - [3]byte{0, 12, 179}: "ROUND Co.,Ltd.", - [3]byte{0, 12, 180}: "AutoCell Laboratories, Inc.", - [3]byte{0, 12, 181}: "Premier Technolgies, Inc", - [3]byte{0, 12, 182}: "NANJING SEU MOBILE & INTERNET TECHNOLOGY CO.,LTD", - [3]byte{0, 12, 183}: "Nanjing Huazhuo Electronics Co., Ltd.", - [3]byte{0, 12, 184}: "MEDION AG", - [3]byte{0, 12, 185}: "LEA", - [3]byte{0, 12, 186}: "Jamex, Inc.", - [3]byte{0, 12, 187}: "ISKRAEMECO", - [3]byte{0, 12, 188}: "Iscutum", - [3]byte{0, 12, 189}: "Interface Masters, Inc", - [3]byte{0, 12, 190}: "Innominate Security Technologies AG", - [3]byte{0, 12, 191}: "Holy Stone Ent. Co., Ltd.", - [3]byte{0, 12, 192}: "Genera Oy", - [3]byte{0, 12, 193}: "Eaton Corporation", - [3]byte{0, 12, 194}: "ControlNet (India) Private Limited", - [3]byte{0, 12, 195}: "BeWAN systems", - [3]byte{0, 12, 196}: "Tiptel AG", - [3]byte{0, 12, 197}: "Nextlink Co., Ltd.", - [3]byte{0, 12, 198}: "Ka-Ro electronics GmbH", - [3]byte{0, 12, 199}: "Intelligent Computer Solutions Inc.", - [3]byte{0, 12, 200}: "Xytronix Research & Design, Inc.", - [3]byte{0, 12, 201}: "ILWOO DATA & TECHNOLOGY CO.,LTD", - [3]byte{0, 12, 202}: "HGST a Western Digital Company", - [3]byte{0, 12, 203}: "Design Combus Ltd", - [3]byte{0, 12, 204}: "Aeroscout Ltd.", - [3]byte{0, 12, 205}: "IEC - TC57", - [3]byte{0, 12, 206}: "Cisco Systems, Inc", - [3]byte{0, 12, 207}: "Cisco Systems, Inc", - [3]byte{0, 12, 208}: "Symetrix", - [3]byte{0, 12, 209}: "SFOM Technology Corp.", - [3]byte{0, 12, 210}: "Schaffner EMV AG", - [3]byte{0, 12, 211}: "Prettl Elektronik Radeberg GmbH", - [3]byte{0, 12, 212}: "Positron Public Safety Systems inc.", - [3]byte{0, 12, 213}: "Passave Inc.", - [3]byte{0, 12, 214}: "PARTNER TECH", - [3]byte{0, 12, 215}: "Nallatech Ltd", - [3]byte{0, 12, 216}: "M. K. Juchheim GmbH & Co", - [3]byte{0, 12, 217}: "Itcare Co., Ltd", - [3]byte{0, 12, 218}: "FreeHand Systems, Inc.", - [3]byte{0, 12, 219}: "Brocade Communications Systems, Inc.", - [3]byte{0, 12, 220}: "BECS Technology, Inc", - [3]byte{0, 12, 221}: "AOS technologies AG", - [3]byte{0, 12, 222}: "ABB STOTZ-KONTAKT GmbH", - [3]byte{0, 12, 223}: "PULNiX America, Inc", - [3]byte{0, 12, 224}: "Trek Diagnostics Inc.", - [3]byte{0, 12, 225}: "The Open Group", - [3]byte{0, 12, 226}: "Rolls-Royce", - [3]byte{0, 12, 227}: "Option International N.V.", - [3]byte{0, 12, 228}: "NeuroCom International, Inc.", - [3]byte{0, 12, 229}: "ARRIS Group, Inc.", - [3]byte{0, 12, 230}: "Meru Networks Inc", - [3]byte{0, 12, 231}: "MediaTek Inc.", - [3]byte{0, 12, 232}: "GuangZhou AnJuBao Co., Ltd", - [3]byte{0, 12, 233}: "BLOOMBERG L.P.", - [3]byte{0, 12, 234}: "aphona Kommunikationssysteme", - [3]byte{0, 12, 235}: "CNMP Networks, Inc.", - [3]byte{0, 12, 236}: "Spectracom Corp.", - [3]byte{0, 12, 237}: "Real Digital Media", - [3]byte{0, 12, 238}: "jp-embedded", - [3]byte{0, 12, 239}: "Open Networks Engineering Ltd", - [3]byte{0, 12, 240}: "M & N GmbH", - [3]byte{0, 12, 241}: "Intel Corporation", - [3]byte{0, 12, 242}: "GAMESA Eólica", - [3]byte{0, 12, 243}: "CALL IMAGE SA", - [3]byte{0, 12, 244}: "AKATSUKI ELECTRIC MFG.CO.,LTD.", - [3]byte{0, 12, 245}: "InfoExpress", - [3]byte{0, 12, 246}: "Sitecom Europe BV", - [3]byte{0, 12, 247}: "Nortel Networks", - [3]byte{0, 12, 248}: "Nortel Networks", - [3]byte{0, 12, 249}: "Xylem Water Solutions", - [3]byte{0, 12, 250}: "Digital Systems Corp", - [3]byte{0, 12, 251}: "Korea Network Systems", - [3]byte{0, 12, 252}: "S2io Technologies Corp", - [3]byte{0, 12, 253}: "Hyundai ImageQuest Co.,Ltd.", - [3]byte{0, 12, 254}: "Grand Electronic Co., Ltd", - [3]byte{0, 12, 255}: "MRO-TEK LIMITED", - [3]byte{0, 13, 0}: "Seaway Networks Inc.", - [3]byte{0, 13, 1}: "P&E Microcomputer Systems, Inc.", - [3]byte{0, 13, 2}: "NEC Platforms, Ltd.", - [3]byte{0, 13, 3}: "Matrics, Inc.", - [3]byte{0, 13, 4}: "Foxboro Eckardt Development GmbH", - [3]byte{0, 13, 5}: "cybernet manufacturing inc.", - [3]byte{0, 13, 6}: "Compulogic Limited", - [3]byte{0, 13, 7}: "Calrec Audio Ltd", - [3]byte{0, 13, 8}: "AboveCable, Inc.", - [3]byte{0, 13, 9}: "Yuehua(Zhuhai) Electronic CO. LTD", - [3]byte{0, 13, 10}: "Projectiondesign as", - [3]byte{0, 13, 11}: "BUFFALO.INC", - [3]byte{0, 13, 12}: "MDI Security Systems", - [3]byte{0, 13, 13}: "ITSupported, LLC", - [3]byte{0, 13, 14}: "Inqnet Systems, Inc.", - [3]byte{0, 13, 15}: "Finlux Ltd", - [3]byte{0, 13, 16}: "Embedtronics Oy", - [3]byte{0, 13, 17}: "DENTSPLY - Gendex", - [3]byte{0, 13, 18}: "AXELL Corporation", - [3]byte{0, 13, 19}: "Wilhelm Rutenbeck GmbH&Co.KG", - [3]byte{0, 13, 20}: "Vtech Innovation LP dba Advanced American Telephones", - [3]byte{0, 13, 21}: "Voipac s.r.o.", - [3]byte{0, 13, 22}: "UHS Systems Pty Ltd", - [3]byte{0, 13, 23}: "Turbo Networks Co.Ltd", - [3]byte{0, 13, 24}: "Mega-Trend Electronics CO., LTD.", - [3]byte{0, 13, 25}: "ROBE Show lighting", - [3]byte{0, 13, 26}: "Mustek System Inc.", - [3]byte{0, 13, 27}: "Kyoto Electronics Manufacturing Co., Ltd.", - [3]byte{0, 13, 28}: "Amesys Defense", - [3]byte{0, 13, 29}: "HIGH-TEK HARNESS ENT. CO., LTD.", - [3]byte{0, 13, 30}: "Control Techniques", - [3]byte{0, 13, 31}: "AV Digital", - [3]byte{0, 13, 32}: "ASAHIKASEI TECHNOSYSTEM CO.,LTD.", - [3]byte{0, 13, 33}: "WISCORE Inc.", - [3]byte{0, 13, 34}: "Unitronics LTD", - [3]byte{0, 13, 35}: "Smart Solution, Inc", - [3]byte{0, 13, 36}: "SENTEC E&E CO., LTD.", - [3]byte{0, 13, 37}: "SANDEN CORPORATION", - [3]byte{0, 13, 38}: "Primagraphics Limited", - [3]byte{0, 13, 39}: "MICROPLEX Printware AG", - [3]byte{0, 13, 40}: "Cisco Systems, Inc", - [3]byte{0, 13, 41}: "Cisco Systems, Inc", - [3]byte{0, 13, 42}: "Scanmatic AS", - [3]byte{0, 13, 43}: "Racal Instruments", - [3]byte{0, 13, 44}: "Net2Edge Limited", - [3]byte{0, 13, 45}: "NCT Deutschland GmbH", - [3]byte{0, 13, 46}: "Matsushita Avionics Systems Corporation", - [3]byte{0, 13, 47}: "AIN Comm.Tech.Co., LTD", - [3]byte{0, 13, 48}: "IceFyre Semiconductor", - [3]byte{0, 13, 49}: "Compellent Technologies, Inc.", - [3]byte{0, 13, 50}: "DispenseSource, Inc.", - [3]byte{0, 13, 51}: "Prediwave Corp.", - [3]byte{0, 13, 52}: "Shell International Exploration and Production, Inc.", - [3]byte{0, 13, 53}: "PAC International Ltd", - [3]byte{0, 13, 54}: "Wu Han Routon Electronic Co., Ltd", - [3]byte{0, 13, 55}: "WIPLUG", - [3]byte{0, 13, 56}: "NISSIN INC.", - [3]byte{0, 13, 57}: "Network Electronics", - [3]byte{0, 13, 58}: "Microsoft Corp.", - [3]byte{0, 13, 59}: "Microelectronics Technology Inc.", - [3]byte{0, 13, 60}: "i.Tech Dynamic Ltd", - [3]byte{0, 13, 61}: "Hammerhead Systems, Inc.", - [3]byte{0, 13, 62}: "APLUX Communications Ltd.", - [3]byte{0, 13, 63}: "VTI Instruments Corporation", - [3]byte{0, 13, 64}: "Verint Loronix Video Solutions", - [3]byte{0, 13, 65}: "Siemens AG ICM MP UC RD IT KLF1", - [3]byte{0, 13, 66}: "Newbest Development Limited", - [3]byte{0, 13, 67}: "DRS Tactical Systems Inc.", - [3]byte{0, 13, 68}: "Audio BU - Logitech", - [3]byte{0, 13, 69}: "Tottori SANYO Electric Co., Ltd.", - [3]byte{0, 13, 70}: "Parker SSD Drives", - [3]byte{0, 13, 71}: "Collex", - [3]byte{0, 13, 72}: "AEWIN Technologies Co., Ltd.", - [3]byte{0, 13, 73}: "Triton Systems of Delaware, Inc.", - [3]byte{0, 13, 74}: "Steag ETA-Optik", - [3]byte{0, 13, 75}: "Roku, Inc.", - [3]byte{0, 13, 76}: "Outline Electronics Ltd.", - [3]byte{0, 13, 77}: "Ninelanes", - [3]byte{0, 13, 78}: "NDR Co.,LTD.", - [3]byte{0, 13, 79}: "Kenwood Corporation", - [3]byte{0, 13, 80}: "Galazar Networks", - [3]byte{0, 13, 81}: "DIVR Systems, Inc.", - [3]byte{0, 13, 82}: "Comart system", - [3]byte{0, 13, 83}: "Beijing 5w Communication Corp.", - [3]byte{0, 13, 84}: "3Com Ltd", - [3]byte{0, 13, 85}: "SANYCOM Technology Co.,Ltd", - [3]byte{0, 13, 86}: "Dell Inc.", - [3]byte{0, 13, 87}: "Fujitsu I-Network Systems Limited.", - [3]byte{0, 13, 88}: "Private", - [3]byte{0, 13, 89}: "Amity Systems, Inc.", - [3]byte{0, 13, 90}: "Tiesse SpA", - [3]byte{0, 13, 91}: "Smart Empire Investments Limited", - [3]byte{0, 13, 92}: "Robert Bosch GmbH, VT-ATMO", - [3]byte{0, 13, 93}: "Raritan Computer, Inc", - [3]byte{0, 13, 94}: "NEC Personal Products", - [3]byte{0, 13, 95}: "Minds Inc", - [3]byte{0, 13, 96}: "IBM Corp", - [3]byte{0, 13, 97}: "Giga-Byte Technology Co., Ltd.", - [3]byte{0, 13, 98}: "Funkwerk Dabendorf GmbH", - [3]byte{0, 13, 99}: "DENT Instruments, Inc.", - [3]byte{0, 13, 100}: "COMAG Handels AG", - [3]byte{0, 13, 101}: "Cisco Systems, Inc", - [3]byte{0, 13, 102}: "Cisco Systems, Inc", - [3]byte{0, 13, 103}: "Ericsson", - [3]byte{0, 13, 104}: "Vinci Systems, Inc.", - [3]byte{0, 13, 105}: "TMT&D Corporation", - [3]byte{0, 13, 106}: "Redwood Technologies LTD", - [3]byte{0, 13, 107}: "Mita-Teknik A/S", - [3]byte{0, 13, 108}: "M-Audio", - [3]byte{0, 13, 109}: "K-Tech Devices Corp.", - [3]byte{0, 13, 110}: "K-Patents Oy", - [3]byte{0, 13, 111}: "Ember Corporation", - [3]byte{0, 13, 112}: "Datamax Corporation", - [3]byte{0, 13, 113}: "boca systems", - [3]byte{0, 13, 114}: "2Wire Inc", - [3]byte{0, 13, 115}: "Technical Support, Inc.", - [3]byte{0, 13, 116}: "Sand Network Systems, Inc.", - [3]byte{0, 13, 117}: "Kobian Pte Ltd - Taiwan Branch", - [3]byte{0, 13, 118}: "Hokuto Denshi Co,. Ltd.", - [3]byte{0, 13, 119}: "FalconStor Software", - [3]byte{0, 13, 120}: "Engineering & Security", - [3]byte{0, 13, 121}: "Dynamic Solutions Co,.Ltd.", - [3]byte{0, 13, 122}: "DiGATTO Asia Pacific Pte Ltd", - [3]byte{0, 13, 123}: "Consensys Computers Inc.", - [3]byte{0, 13, 124}: "Codian Ltd", - [3]byte{0, 13, 125}: "Afco Systems", - [3]byte{0, 13, 126}: "Axiowave Networks, Inc.", - [3]byte{0, 13, 127}: "MIDAS COMMUNICATION TECHNOLOGIES PTE LTD ( Foreign Branch)", - [3]byte{0, 13, 128}: "Online Development Inc", - [3]byte{0, 13, 129}: "Pepperl+Fuchs GmbH", - [3]byte{0, 13, 130}: "PHS srl", - [3]byte{0, 13, 131}: "Sanmina-SCI Hungary Ltd.", - [3]byte{0, 13, 132}: "Makus Inc.", - [3]byte{0, 13, 133}: "Tapwave, Inc.", - [3]byte{0, 13, 134}: "Huber + Suhner AG", - [3]byte{0, 13, 135}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{0, 13, 136}: "D-Link Corporation", - [3]byte{0, 13, 137}: "Bils Technology Inc", - [3]byte{0, 13, 138}: "Winners Electronics Co., Ltd.", - [3]byte{0, 13, 139}: "T&D Corporation", - [3]byte{0, 13, 140}: "Shanghai Wedone Digital Ltd. CO.", - [3]byte{0, 13, 141}: "Prosoft Technology, Inc", - [3]byte{0, 13, 142}: "Koden Electronics Co., Ltd.", - [3]byte{0, 13, 143}: "King Tsushin Kogyo Co., LTD.", - [3]byte{0, 13, 144}: "Factum Electronics AB", - [3]byte{0, 13, 145}: "Eclipse (HQ Espana) S.L.", - [3]byte{0, 13, 146}: "ARIMA Communications Corp.", - [3]byte{0, 13, 147}: "Apple, Inc.", - [3]byte{0, 13, 148}: "AFAR Communications,Inc", - [3]byte{0, 13, 149}: "Opti-cell, Inc.", - [3]byte{0, 13, 150}: "Vtera Technology Inc.", - [3]byte{0, 13, 151}: "ABB Inc./Tropos", - [3]byte{0, 13, 152}: "S.W.A.C. Schmitt-Walter Automation Consult GmbH", - [3]byte{0, 13, 153}: "Orbital Sciences Corp.; Launch Systems Group", - [3]byte{0, 13, 154}: "INFOTEC LTD", - [3]byte{0, 13, 155}: "Heraeus Electro-Nite International N.V.", - [3]byte{0, 13, 156}: "Elan GmbH & Co KG", - [3]byte{0, 13, 157}: "Hewlett Packard", - [3]byte{0, 13, 158}: "TOKUDEN OHIZUMI SEISAKUSYO Co.,Ltd.", - [3]byte{0, 13, 159}: "RF Micro Devices", - [3]byte{0, 13, 160}: "NEDAP N.V.", - [3]byte{0, 13, 161}: "MIRAE ITS Co.,LTD.", - [3]byte{0, 13, 162}: "Infrant Technologies, Inc.", - [3]byte{0, 13, 163}: "Emerging Technologies Limited", - [3]byte{0, 13, 164}: "DOSCH & AMAND SYSTEMS AG", - [3]byte{0, 13, 165}: "Fabric7 Systems, Inc", - [3]byte{0, 13, 166}: "Universal Switching Corporation", - [3]byte{0, 13, 167}: "Private", - [3]byte{0, 13, 168}: "Teletronics Technology Corporation", - [3]byte{0, 13, 169}: "T.E.A.M. S.L.", - [3]byte{0, 13, 170}: "S.A.Tehnology co.,Ltd.", - [3]byte{0, 13, 171}: "Parker Hannifin GmbH Electromechanical Division Europe", - [3]byte{0, 13, 172}: "Japan CBM Corporation", - [3]byte{0, 13, 173}: "Dataprobe, Inc.", - [3]byte{0, 13, 174}: "SAMSUNG HEAVY INDUSTRIES CO., LTD.", - [3]byte{0, 13, 175}: "Plexus Corp (UK) Ltd", - [3]byte{0, 13, 176}: "Olym-tech Co.,Ltd.", - [3]byte{0, 13, 177}: "Japan Network Service Co., Ltd.", - [3]byte{0, 13, 178}: "Ammasso, Inc.", - [3]byte{0, 13, 179}: "SDO Communication Corperation", - [3]byte{0, 13, 180}: "NETASQ", - [3]byte{0, 13, 181}: "GLOBALSAT TECHNOLOGY CORPORATION", - [3]byte{0, 13, 182}: "Broadcom", - [3]byte{0, 13, 183}: "SANKO ELECTRIC CO,.LTD", - [3]byte{0, 13, 184}: "SCHILLER AG", - [3]byte{0, 13, 185}: "PC Engines GmbH", - [3]byte{0, 13, 186}: "Océ Document Technologies GmbH", - [3]byte{0, 13, 187}: "Nippon Dentsu Co.,Ltd.", - [3]byte{0, 13, 188}: "Cisco Systems, Inc", - [3]byte{0, 13, 189}: "Cisco Systems, Inc", - [3]byte{0, 13, 190}: "Bel Fuse Europe Ltd.,UK", - [3]byte{0, 13, 191}: "TekTone Sound & Signal Mfg., Inc.", - [3]byte{0, 13, 192}: "Spagat AS", - [3]byte{0, 13, 193}: "SafeWeb Inc", - [3]byte{0, 13, 194}: "Private", - [3]byte{0, 13, 195}: "First Communication, Inc.", - [3]byte{0, 13, 196}: "Emcore Corporation", - [3]byte{0, 13, 197}: "EchoStar Global B.V.", - [3]byte{0, 13, 198}: "DigiRose Technology Co., Ltd.", - [3]byte{0, 13, 199}: "COSMIC ENGINEERING INC.", - [3]byte{0, 13, 200}: "AirMagnet, Inc", - [3]byte{0, 13, 201}: "THALES Elektronik Systeme GmbH", - [3]byte{0, 13, 202}: "Tait Electronics", - [3]byte{0, 13, 203}: "Petcomkorea Co., Ltd.", - [3]byte{0, 13, 204}: "NEOSMART Corp.", - [3]byte{0, 13, 205}: "GROUPE TXCOM", - [3]byte{0, 13, 206}: "Dynavac Technology Pte Ltd", - [3]byte{0, 13, 207}: "Cidra Corp.", - [3]byte{0, 13, 208}: "TetraTec Instruments GmbH", - [3]byte{0, 13, 209}: "Stryker Corporation", - [3]byte{0, 13, 210}: "Simrad Optronics ASA", - [3]byte{0, 13, 211}: "SAMWOO Telecommunication Co.,Ltd.", - [3]byte{0, 13, 212}: "Symantec Corporation", - [3]byte{0, 13, 213}: "O'RITE TECHNOLOGY CO.,LTD", - [3]byte{0, 13, 214}: "ITI LTD", - [3]byte{0, 13, 215}: "Bright", - [3]byte{0, 13, 216}: "BBN", - [3]byte{0, 13, 217}: "Anton Paar GmbH", - [3]byte{0, 13, 218}: "ALLIED TELESIS K.K.", - [3]byte{0, 13, 219}: "AIRWAVE TECHNOLOGIES INC.", - [3]byte{0, 13, 220}: "VAC", - [3]byte{0, 13, 221}: "Profilo Telra Elektronik Sanayi ve Ticaret. A.Ş", - [3]byte{0, 13, 222}: "Joyteck Co., Ltd.", - [3]byte{0, 13, 223}: "Japan Image & Network Inc.", - [3]byte{0, 13, 224}: "ICPDAS Co.,LTD", - [3]byte{0, 13, 225}: "Control Products, Inc.", - [3]byte{0, 13, 226}: "CMZ Sistemi Elettronici", - [3]byte{0, 13, 227}: "AT Sweden AB", - [3]byte{0, 13, 228}: "DIGINICS, Inc.", - [3]byte{0, 13, 229}: "Samsung Thales", - [3]byte{0, 13, 230}: "YOUNGBO ENGINEERING CO.,LTD", - [3]byte{0, 13, 231}: "Snap-on OEM Group", - [3]byte{0, 13, 232}: "Nasaco Electronics Pte. Ltd", - [3]byte{0, 13, 233}: "Napatech Aps", - [3]byte{0, 13, 234}: "Kingtel Telecommunication Corp.", - [3]byte{0, 13, 235}: "CompXs Limited", - [3]byte{0, 13, 236}: "Cisco Systems, Inc", - [3]byte{0, 13, 237}: "Cisco Systems, Inc", - [3]byte{0, 13, 238}: "Andrew RF Power Amplifier Group", - [3]byte{0, 13, 239}: "Soc. Coop. Bilanciai", - [3]byte{0, 13, 240}: "QCOM TECHNOLOGY INC.", - [3]byte{0, 13, 241}: "IONIX INC.", - [3]byte{0, 13, 242}: "Private", - [3]byte{0, 13, 243}: "Asmax Solutions", - [3]byte{0, 13, 244}: "Watertek Co.", - [3]byte{0, 13, 245}: "Teletronics International Inc.", - [3]byte{0, 13, 246}: "Technology Thesaurus Corp.", - [3]byte{0, 13, 247}: "Space Dynamics Lab", - [3]byte{0, 13, 248}: "ORGA Kartensysteme GmbH", - [3]byte{0, 13, 249}: "NDS Limited", - [3]byte{0, 13, 250}: "Micro Control Systems Ltd.", - [3]byte{0, 13, 251}: "Komax AG", - [3]byte{0, 13, 252}: "ITFOR Inc.", - [3]byte{0, 13, 253}: "Huges Hi-Tech Inc.,", - [3]byte{0, 13, 254}: "Hauppauge Computer Works, Inc.", - [3]byte{0, 13, 255}: "CHENMING MOLD INDUSTRY CORP.", - [3]byte{0, 14, 0}: "Atrie", - [3]byte{0, 14, 1}: "ASIP Technologies Inc.", - [3]byte{0, 14, 2}: "Advantech AMT Inc.", - [3]byte{0, 14, 3}: "Emulex Corporation", - [3]byte{0, 14, 4}: "CMA/Microdialysis AB", - [3]byte{0, 14, 5}: "WIRELESS MATRIX CORP.", - [3]byte{0, 14, 6}: "Team Simoco Ltd", - [3]byte{0, 14, 7}: "Sony Mobile Communications AB", - [3]byte{0, 14, 8}: "Cisco-Linksys, LLC", - [3]byte{0, 14, 9}: "Shenzhen Coship Software Co.,LTD.", - [3]byte{0, 14, 10}: "SAKUMA DESIGN OFFICE", - [3]byte{0, 14, 11}: "Netac Technology Co., Ltd.", - [3]byte{0, 14, 12}: "Intel Corporation", - [3]byte{0, 14, 13}: "Hesch Schröder GmbH", - [3]byte{0, 14, 14}: "ESA elettronica S.P.A.", - [3]byte{0, 14, 15}: "ERMME", - [3]byte{0, 14, 16}: "C-guys, Inc.", - [3]byte{0, 14, 17}: "BDT Büro und Datentechnik GmbH & Co.KG", - [3]byte{0, 14, 18}: "Adaptive Micro Systems Inc.", - [3]byte{0, 14, 19}: "Accu-Sort Systems inc.", - [3]byte{0, 14, 20}: "Visionary Solutions, Inc.", - [3]byte{0, 14, 21}: "Tadlys LTD", - [3]byte{0, 14, 22}: "SouthWing S.L.", - [3]byte{0, 14, 23}: "Private", - [3]byte{0, 14, 24}: "MyA Technology", - [3]byte{0, 14, 25}: "LogicaCMG Pty Ltd", - [3]byte{0, 14, 26}: "JPS Communications", - [3]byte{0, 14, 27}: "IAV GmbH", - [3]byte{0, 14, 28}: "Hach Company", - [3]byte{0, 14, 29}: "ARION Technology Inc.", - [3]byte{0, 14, 30}: "QLogic Corporation", - [3]byte{0, 14, 31}: "TCL Networks Equipment Co., Ltd.", - [3]byte{0, 14, 32}: "ACCESS Systems Americas, Inc.", - [3]byte{0, 14, 33}: "MTU Friedrichshafen GmbH", - [3]byte{0, 14, 34}: "Private", - [3]byte{0, 14, 35}: "Incipient, Inc.", - [3]byte{0, 14, 36}: "Huwell Technology Inc.", - [3]byte{0, 14, 37}: "Hannae Technology Co., Ltd", - [3]byte{0, 14, 38}: "Gincom Technology Corp.", - [3]byte{0, 14, 39}: "Crere Networks, Inc.", - [3]byte{0, 14, 40}: "Dynamic Ratings P/L", - [3]byte{0, 14, 41}: "Shester Communications Inc", - [3]byte{0, 14, 42}: "Private", - [3]byte{0, 14, 43}: "Safari Technologies", - [3]byte{0, 14, 44}: "Netcodec co.", - [3]byte{0, 14, 45}: "Hyundai Digital Technology Co.,Ltd.", - [3]byte{0, 14, 46}: "Edimax Technology Co. Ltd.", - [3]byte{0, 14, 47}: "Roche Diagnostics GmbH", - [3]byte{0, 14, 48}: "AERAS Networks, Inc.", - [3]byte{0, 14, 49}: "Olympus Soft Imaging Solutions GmbH", - [3]byte{0, 14, 50}: "Kontron Medical", - [3]byte{0, 14, 51}: "Shuko Electronics Co.,Ltd", - [3]byte{0, 14, 52}: "NexGen City, LP", - [3]byte{0, 14, 53}: "Intel Corporation", - [3]byte{0, 14, 54}: "HEINESYS, Inc.", - [3]byte{0, 14, 55}: "Harms & Wende GmbH & Co.KG", - [3]byte{0, 14, 56}: "Cisco Systems, Inc", - [3]byte{0, 14, 57}: "Cisco Systems, Inc", - [3]byte{0, 14, 58}: "Cirrus Logic", - [3]byte{0, 14, 59}: "Hawking Technologies, Inc.", - [3]byte{0, 14, 60}: "Transact Technologies Inc", - [3]byte{0, 14, 61}: "Televic N.V.", - [3]byte{0, 14, 62}: "Sun Optronics Inc", - [3]byte{0, 14, 63}: "Soronti, Inc.", - [3]byte{0, 14, 64}: "Nortel Networks", - [3]byte{0, 14, 65}: "NIHON MECHATRONICS CO.,LTD.", - [3]byte{0, 14, 66}: "Motic Incoporation Ltd.", - [3]byte{0, 14, 67}: "G-Tek Electronics Sdn. Bhd.", - [3]byte{0, 14, 68}: "Digital 5, Inc.", - [3]byte{0, 14, 69}: "Beijing Newtry Electronic Technology Ltd", - [3]byte{0, 14, 70}: "Niigata Seimitsu Co.,Ltd.", - [3]byte{0, 14, 71}: "NCI System Co.,Ltd.", - [3]byte{0, 14, 72}: "Lipman TransAction Solutions", - [3]byte{0, 14, 73}: "Forsway Scandinavia AB", - [3]byte{0, 14, 74}: "Changchun Huayu WEBPAD Co.,LTD", - [3]byte{0, 14, 75}: "atrium c and i", - [3]byte{0, 14, 76}: "Bermai Inc.", - [3]byte{0, 14, 77}: "Numesa Inc.", - [3]byte{0, 14, 78}: "Waveplus Technology Co., Ltd.", - [3]byte{0, 14, 79}: "Trajet GmbH", - [3]byte{0, 14, 80}: "Thomson Telecom Belgium", - [3]byte{0, 14, 81}: "tecna elettronica srl", - [3]byte{0, 14, 82}: "Optium Corporation", - [3]byte{0, 14, 83}: "AV TECH CORPORATION", - [3]byte{0, 14, 84}: "AlphaCell Wireless Ltd.", - [3]byte{0, 14, 85}: "AUVITRAN", - [3]byte{0, 14, 86}: "4G Systems GmbH & Co. KG", - [3]byte{0, 14, 87}: "Iworld Networking, Inc.", - [3]byte{0, 14, 88}: "Sonos, Inc.", - [3]byte{0, 14, 89}: "Sagemcom Broadband SAS", - [3]byte{0, 14, 90}: "TELEFIELD inc.", - [3]byte{0, 14, 91}: "ParkerVision - Direct2Data", - [3]byte{0, 14, 92}: "ARRIS Group, Inc.", - [3]byte{0, 14, 93}: "Triple Play Technologies A/S", - [3]byte{0, 14, 94}: "Raisecom Technology", - [3]byte{0, 14, 95}: "activ-net GmbH & Co. KG", - [3]byte{0, 14, 96}: "360SUN Digital Broadband Corporation", - [3]byte{0, 14, 97}: "MICROTROL LIMITED", - [3]byte{0, 14, 98}: "Nortel Networks", - [3]byte{0, 14, 99}: "Lemke Diagnostics GmbH", - [3]byte{0, 14, 100}: "Elphel, Inc", - [3]byte{0, 14, 101}: "TransCore", - [3]byte{0, 14, 102}: "Hitachi Industry & Control Solutions, Ltd.", - [3]byte{0, 14, 103}: "Eltis Microelectronics Ltd.", - [3]byte{0, 14, 104}: "E-TOP Network Technology Inc.", - [3]byte{0, 14, 105}: "China Electric Power Research Institute", - [3]byte{0, 14, 106}: "3Com Ltd", - [3]byte{0, 14, 107}: "Janitza electronics GmbH", - [3]byte{0, 14, 108}: "Device Drivers Limited", - [3]byte{0, 14, 109}: "Murata Manufacturing Co., Ltd.", - [3]byte{0, 14, 110}: "MAT S.A. (Mircrelec Advanced Technology)", - [3]byte{0, 14, 111}: "IRIS Corporation Berhad", - [3]byte{0, 14, 112}: "in2 Networks", - [3]byte{0, 14, 113}: "Gemstar Technology Development Ltd.", - [3]byte{0, 14, 114}: "CTS electronics", - [3]byte{0, 14, 115}: "Tpack A/S", - [3]byte{0, 14, 116}: "Solar Telecom. Tech", - [3]byte{0, 14, 117}: "New York Air Brake Corp.", - [3]byte{0, 14, 118}: "GEMSOC INNOVISION INC.", - [3]byte{0, 14, 119}: "Decru, Inc.", - [3]byte{0, 14, 120}: "Amtelco", - [3]byte{0, 14, 121}: "Ample Communications Inc.", - [3]byte{0, 14, 122}: "GemWon Communications Co., Ltd.", - [3]byte{0, 14, 123}: "Toshiba", - [3]byte{0, 14, 124}: "Televes S.A.", - [3]byte{0, 14, 125}: "Electronics Line 3000 Ltd.", - [3]byte{0, 14, 126}: "ionSign Oy", - [3]byte{0, 14, 127}: "Hewlett Packard", - [3]byte{0, 14, 128}: "Thomson Technology Inc", - [3]byte{0, 14, 129}: "Devicescape Software, Inc.", - [3]byte{0, 14, 130}: "Commtech Wireless", - [3]byte{0, 14, 131}: "Cisco Systems, Inc", - [3]byte{0, 14, 132}: "Cisco Systems, Inc", - [3]byte{0, 14, 133}: "Catalyst Enterprises, Inc.", - [3]byte{0, 14, 134}: "Alcatel North America", - [3]byte{0, 14, 135}: "adp Gauselmann GmbH", - [3]byte{0, 14, 136}: "VIDEOTRON CORP.", - [3]byte{0, 14, 137}: "CLEMATIC", - [3]byte{0, 14, 138}: "Avara Technologies Pty. Ltd.", - [3]byte{0, 14, 139}: "Astarte Technology Co, Ltd.", - [3]byte{0, 14, 140}: "Siemens AG A&D ET", - [3]byte{0, 14, 141}: "Systems in Progress Holding GmbH", - [3]byte{0, 14, 142}: "SparkLAN Communications, Inc.", - [3]byte{0, 14, 143}: "Sercomm Corp.", - [3]byte{0, 14, 144}: "PONICO CORP.", - [3]byte{0, 14, 145}: "Navico Auckland Ltd", - [3]byte{0, 14, 146}: "Open Telecom", - [3]byte{0, 14, 147}: "Milénio 3 Sistemas Electrónicos, Lda.", - [3]byte{0, 14, 148}: "Maas International BV", - [3]byte{0, 14, 149}: "Fujiya Denki Seisakusho Co.,Ltd.", - [3]byte{0, 14, 150}: "Cubic Defense Applications, Inc.", - [3]byte{0, 14, 151}: "Ultracker Technology CO., Inc", - [3]byte{0, 14, 152}: "HME Clear-Com LTD.", - [3]byte{0, 14, 153}: "Spectrum Digital, Inc", - [3]byte{0, 14, 154}: "BOE TECHNOLOGY GROUP CO.,LTD", - [3]byte{0, 14, 155}: "Ambit Microsystems Corporation", - [3]byte{0, 14, 156}: "Benchmark Electronics", - [3]byte{0, 14, 157}: "Tiscali UK Ltd", - [3]byte{0, 14, 158}: "Topfield Co., Ltd", - [3]byte{0, 14, 159}: "TEMIC SDS GmbH", - [3]byte{0, 14, 160}: "NetKlass Technology Inc.", - [3]byte{0, 14, 161}: "Formosa Teletek Corporation", - [3]byte{0, 14, 162}: "McAfee, Inc", - [3]byte{0, 14, 163}: "CNCR-IT CO.,LTD,HangZhou P.R.CHINA", - [3]byte{0, 14, 164}: "Certance Inc.", - [3]byte{0, 14, 165}: "BLIP Systems", - [3]byte{0, 14, 166}: "ASUSTek COMPUTER INC.", - [3]byte{0, 14, 167}: "Endace Technology", - [3]byte{0, 14, 168}: "United Technologists Europe Limited", - [3]byte{0, 14, 169}: "Shanghai Xun Shi Communications Equipment Ltd. Co.", - [3]byte{0, 14, 170}: "Scalent Systems, Inc.", - [3]byte{0, 14, 171}: "Cray Inc", - [3]byte{0, 14, 172}: "MINTRON ENTERPRISE CO., LTD.", - [3]byte{0, 14, 173}: "Metanoia Technologies, Inc.", - [3]byte{0, 14, 174}: "GAWELL TECHNOLOGIES CORP.", - [3]byte{0, 14, 175}: "CASTEL", - [3]byte{0, 14, 176}: "Solutions Radio BV", - [3]byte{0, 14, 177}: "Newcotech,Ltd", - [3]byte{0, 14, 178}: "Micro-Research Finland Oy", - [3]byte{0, 14, 179}: "Hewlett Packard", - [3]byte{0, 14, 180}: "GUANGZHOU GAOKE COMMUNICATIONS TECHNOLOGY CO.LTD.", - [3]byte{0, 14, 181}: "Ecastle Electronics Co., Ltd.", - [3]byte{0, 14, 182}: "Riverbed Technology, Inc.", - [3]byte{0, 14, 183}: "Knovative, Inc.", - [3]byte{0, 14, 184}: "Iiga co.,Ltd", - [3]byte{0, 14, 185}: "HASHIMOTO Electronics Industry Co.,Ltd.", - [3]byte{0, 14, 186}: "HANMI SEMICONDUCTOR CO., LTD.", - [3]byte{0, 14, 187}: "Everbee Networks", - [3]byte{0, 14, 188}: "Paragon Fidelity GmbH", - [3]byte{0, 14, 189}: "Burdick, a Quinton Compny", - [3]byte{0, 14, 190}: "B&B Electronics Manufacturing Co.", - [3]byte{0, 14, 191}: "Remsdaq Limited", - [3]byte{0, 14, 192}: "Nortel Networks", - [3]byte{0, 14, 193}: "MYNAH Technologies", - [3]byte{0, 14, 194}: "Lowrance Electronics, Inc.", - [3]byte{0, 14, 195}: "Logic Controls, Inc.", - [3]byte{0, 14, 196}: "Iskra Transmission d.d.", - [3]byte{0, 14, 197}: "Digital Multitools Inc", - [3]byte{0, 14, 198}: "ASIX ELECTRONICS CORP.", - [3]byte{0, 14, 199}: "Motorola Korea", - [3]byte{0, 14, 200}: "Zoran Corporation", - [3]byte{0, 14, 201}: "YOKO Technology Corp.", - [3]byte{0, 14, 202}: "WTSS Inc", - [3]byte{0, 14, 203}: "VineSys Technology", - [3]byte{0, 14, 204}: "Tableau, LLC", - [3]byte{0, 14, 205}: "SKOV A/S", - [3]byte{0, 14, 206}: "S.I.T.T.I. S.p.A.", - [3]byte{0, 14, 207}: "PROFIBUS Nutzerorganisation e.V.", - [3]byte{0, 14, 208}: "Privaris, Inc.", - [3]byte{0, 14, 209}: "Osaka Micro Computer.", - [3]byte{0, 14, 210}: "Filtronic plc", - [3]byte{0, 14, 211}: "Epicenter, Inc.", - [3]byte{0, 14, 212}: "CRESITT INDUSTRIE", - [3]byte{0, 14, 213}: "COPAN Systems Inc.", - [3]byte{0, 14, 214}: "Cisco Systems, Inc", - [3]byte{0, 14, 215}: "Cisco Systems, Inc", - [3]byte{0, 14, 216}: "Positron Access Solutions Corp", - [3]byte{0, 14, 217}: "Aksys, Ltd.", - [3]byte{0, 14, 218}: "C-TECH UNITED CORP.", - [3]byte{0, 14, 219}: "XiNCOM Corp.", - [3]byte{0, 14, 220}: "Tellion INC.", - [3]byte{0, 14, 221}: "SHURE INCORPORATED", - [3]byte{0, 14, 222}: "REMEC, Inc.", - [3]byte{0, 14, 223}: "PLX Technology", - [3]byte{0, 14, 224}: "Mcharge", - [3]byte{0, 14, 225}: "ExtremeSpeed Inc.", - [3]byte{0, 14, 226}: "Custom Engineering", - [3]byte{0, 14, 227}: "Chiyu Technology Co.,Ltd", - [3]byte{0, 14, 228}: "BOE TECHNOLOGY GROUP CO.,LTD", - [3]byte{0, 14, 229}: "bitWallet, Inc.", - [3]byte{0, 14, 230}: "Adimos Systems LTD", - [3]byte{0, 14, 231}: "AAC ELECTRONICS CORP.", - [3]byte{0, 14, 232}: "Zioncom Electronics (Shenzhen) Ltd.", - [3]byte{0, 14, 233}: "WayTech Development, Inc.", - [3]byte{0, 14, 234}: "Shadong Luneng Jicheng Electronics,Co.,Ltd", - [3]byte{0, 14, 235}: "Sandmartin(zhong shan)Electronics Co.,Ltd", - [3]byte{0, 14, 236}: "Orban", - [3]byte{0, 14, 237}: "Nokia Danmark A/S", - [3]byte{0, 14, 238}: "Muco Industrie BV", - [3]byte{0, 14, 239}: "Private", - [3]byte{0, 14, 240}: "Festo AG & Co. KG", - [3]byte{0, 14, 241}: "EZQUEST INC.", - [3]byte{0, 14, 242}: "Infinico Corporation", - [3]byte{0, 14, 243}: "Smarthome", - [3]byte{0, 14, 244}: "Kasda Networks Inc", - [3]byte{0, 14, 245}: "iPAC Technology Co., Ltd.", - [3]byte{0, 14, 246}: "E-TEN Information Systems Co., Ltd.", - [3]byte{0, 14, 247}: "Vulcan Portals Inc", - [3]byte{0, 14, 248}: "SBC ASI", - [3]byte{0, 14, 249}: "REA Elektronik GmbH", - [3]byte{0, 14, 250}: "Optoway Technology Incorporation", - [3]byte{0, 14, 251}: "Macey Enterprises", - [3]byte{0, 14, 252}: "JTAG Technologies B.V.", - [3]byte{0, 14, 253}: "FUJINON CORPORATION", - [3]byte{0, 14, 254}: "EndRun Technologies LLC", - [3]byte{0, 14, 255}: "Megasolution,Inc.", - [3]byte{0, 15, 0}: "Legra Systems, Inc.", - [3]byte{0, 15, 1}: "DIGITALKS INC", - [3]byte{0, 15, 2}: "Digicube Technology Co., Ltd", - [3]byte{0, 15, 3}: "COM&C CO., LTD", - [3]byte{0, 15, 4}: "cim-usa inc", - [3]byte{0, 15, 5}: "3B SYSTEM INC.", - [3]byte{0, 15, 6}: "Nortel Networks", - [3]byte{0, 15, 7}: "Mangrove Systems, Inc.", - [3]byte{0, 15, 8}: "Indagon Oy", - [3]byte{0, 15, 9}: "Private", - [3]byte{0, 15, 10}: "Clear Edge Networks", - [3]byte{0, 15, 11}: "Kentima Technologies AB", - [3]byte{0, 15, 12}: "SYNCHRONIC ENGINEERING", - [3]byte{0, 15, 13}: "Hunt Electronic Co., Ltd.", - [3]byte{0, 15, 14}: "WaveSplitter Technologies, Inc.", - [3]byte{0, 15, 15}: "Real ID Technology Co., Ltd.", - [3]byte{0, 15, 16}: "RDM Corporation", - [3]byte{0, 15, 17}: "Prodrive B.V.", - [3]byte{0, 15, 18}: "Panasonic Europe Ltd.", - [3]byte{0, 15, 19}: "Nisca corporation", - [3]byte{0, 15, 20}: "Mindray Co., Ltd.", - [3]byte{0, 15, 21}: "Kjaerulff1 A/S", - [3]byte{0, 15, 22}: "JAY HOW TECHNOLOGY CO.,", - [3]byte{0, 15, 23}: "Insta Elektro GmbH", - [3]byte{0, 15, 24}: "Industrial Control Systems", - [3]byte{0, 15, 25}: "Boston Scientific", - [3]byte{0, 15, 26}: "Gaming Support B.V.", - [3]byte{0, 15, 27}: "Ego Systems Inc.", - [3]byte{0, 15, 28}: "DigitAll World Co., Ltd", - [3]byte{0, 15, 29}: "Cosmo Techs Co., Ltd.", - [3]byte{0, 15, 30}: "Chengdu KT Electric Co.of High & New Technology", - [3]byte{0, 15, 31}: "Dell Inc.", - [3]byte{0, 15, 32}: "Hewlett Packard", - [3]byte{0, 15, 33}: "Scientific Atlanta, Inc", - [3]byte{0, 15, 34}: "Helius, Inc.", - [3]byte{0, 15, 35}: "Cisco Systems, Inc", - [3]byte{0, 15, 36}: "Cisco Systems, Inc", - [3]byte{0, 15, 37}: "AimValley B.V.", - [3]byte{0, 15, 38}: "WorldAccxx LLC", - [3]byte{0, 15, 39}: "TEAL Electronics, Inc.", - [3]byte{0, 15, 40}: "Itronix Corporation", - [3]byte{0, 15, 41}: "Augmentix Corporation", - [3]byte{0, 15, 42}: "Cableware Electronics", - [3]byte{0, 15, 43}: "GREENBELL SYSTEMS", - [3]byte{0, 15, 44}: "Uplogix, Inc.", - [3]byte{0, 15, 45}: "CHUNG-HSIN ELECTRIC & MACHINERY MFG.CORP.", - [3]byte{0, 15, 46}: "Megapower International Corp.", - [3]byte{0, 15, 47}: "W-LINX TECHNOLOGY CO., LTD.", - [3]byte{0, 15, 48}: "Raza Microelectronics Inc", - [3]byte{0, 15, 49}: "Allied Vision Technologies Canada Inc", - [3]byte{0, 15, 50}: "Lootom Telcovideo Network Wuxi Co Ltd", - [3]byte{0, 15, 51}: "DUALi Inc.", - [3]byte{0, 15, 52}: "Cisco Systems, Inc", - [3]byte{0, 15, 53}: "Cisco Systems, Inc", - [3]byte{0, 15, 54}: "Accurate Techhnologies, Inc.", - [3]byte{0, 15, 55}: "Xambala Incorporated", - [3]byte{0, 15, 56}: "Netstar", - [3]byte{0, 15, 57}: "IRIS SENSORS", - [3]byte{0, 15, 58}: "HISHARP", - [3]byte{0, 15, 59}: "Fuji System Machines Co., Ltd.", - [3]byte{0, 15, 60}: "Endeleo Limited", - [3]byte{0, 15, 61}: "D-Link Corporation", - [3]byte{0, 15, 62}: "CardioNet, Inc", - [3]byte{0, 15, 63}: "Big Bear Networks", - [3]byte{0, 15, 64}: "Optical Internetworking Forum", - [3]byte{0, 15, 65}: "Zipher Ltd", - [3]byte{0, 15, 66}: "Xalyo Systems", - [3]byte{0, 15, 67}: "Wasabi Systems Inc.", - [3]byte{0, 15, 68}: "Tivella Inc.", - [3]byte{0, 15, 69}: "Stretch, Inc.", - [3]byte{0, 15, 70}: "SINAR AG", - [3]byte{0, 15, 71}: "ROBOX SPA", - [3]byte{0, 15, 72}: "Polypix Inc.", - [3]byte{0, 15, 73}: "Northover Solutions Limited", - [3]byte{0, 15, 74}: "Kyushu-kyohan co.,ltd", - [3]byte{0, 15, 75}: "Oracle Corporation", - [3]byte{0, 15, 76}: "Elextech INC", - [3]byte{0, 15, 77}: "TalkSwitch", - [3]byte{0, 15, 78}: "Cellink", - [3]byte{0, 15, 79}: "PCS Systemtechnik GmbH", - [3]byte{0, 15, 80}: "StreamScale Limited", - [3]byte{0, 15, 81}: "Azul Systems, Inc.", - [3]byte{0, 15, 82}: "YORK Refrigeration, Marine & Controls", - [3]byte{0, 15, 83}: "Solarflare Communications Inc", - [3]byte{0, 15, 84}: "Entrelogic Corporation", - [3]byte{0, 15, 85}: "Datawire Communication Networks Inc.", - [3]byte{0, 15, 86}: "Continuum Photonics Inc", - [3]byte{0, 15, 87}: "CABLELOGIC Co., Ltd.", - [3]byte{0, 15, 88}: "Adder Technology Limited", - [3]byte{0, 15, 89}: "Phonak AG", - [3]byte{0, 15, 90}: "Peribit Networks", - [3]byte{0, 15, 91}: "Delta Information Systems, Inc.", - [3]byte{0, 15, 92}: "Day One Digital Media Limited", - [3]byte{0, 15, 93}: "Genexis BV", - [3]byte{0, 15, 94}: "Veo", - [3]byte{0, 15, 95}: "Nicety Technologies Inc. (NTS)", - [3]byte{0, 15, 96}: "Lifetron Co.,Ltd", - [3]byte{0, 15, 97}: "Hewlett Packard", - [3]byte{0, 15, 98}: "Alcatel Bell Space N.V.", - [3]byte{0, 15, 99}: "Obzerv Technologies", - [3]byte{0, 15, 100}: "D&R Electronica Weesp BV", - [3]byte{0, 15, 101}: "icube Corp.", - [3]byte{0, 15, 102}: "Cisco-Linksys, LLC", - [3]byte{0, 15, 103}: "West Instruments", - [3]byte{0, 15, 104}: "Vavic Network Technology, Inc.", - [3]byte{0, 15, 105}: "SEW Eurodrive GmbH & Co. KG", - [3]byte{0, 15, 106}: "Nortel Networks", - [3]byte{0, 15, 107}: "GateWare Communications GmbH", - [3]byte{0, 15, 108}: "ADDI-DATA GmbH", - [3]byte{0, 15, 109}: "Midas Engineering", - [3]byte{0, 15, 110}: "BBox", - [3]byte{0, 15, 111}: "FTA Communication Technologies", - [3]byte{0, 15, 112}: "Wintec Industries, inc.", - [3]byte{0, 15, 113}: "Sanmei Electronics Co.,Ltd", - [3]byte{0, 15, 114}: "Sandburst", - [3]byte{0, 15, 115}: "RS Automation Co., Ltd", - [3]byte{0, 15, 116}: "Qamcom Technology AB", - [3]byte{0, 15, 117}: "First Silicon Solutions", - [3]byte{0, 15, 118}: "Digital Keystone, Inc.", - [3]byte{0, 15, 119}: "DENTUM CO.,LTD", - [3]byte{0, 15, 120}: "Datacap Systems Inc", - [3]byte{0, 15, 121}: "Bluetooth Interest Group Inc.", - [3]byte{0, 15, 122}: "BeiJing NuQX Technology CO.,LTD", - [3]byte{0, 15, 123}: "Arce Sistemas, S.A.", - [3]byte{0, 15, 124}: "ACTi Corporation", - [3]byte{0, 15, 125}: "Xirrus", - [3]byte{0, 15, 126}: "Ablerex Electronics Co., LTD", - [3]byte{0, 15, 127}: "UBSTORAGE Co.,Ltd.", - [3]byte{0, 15, 128}: "Trinity Security Systems,Inc.", - [3]byte{0, 15, 129}: "PAL Pacific Inc.", - [3]byte{0, 15, 130}: "Mortara Instrument, Inc.", - [3]byte{0, 15, 131}: "Brainium Technologies Inc.", - [3]byte{0, 15, 132}: "Astute Networks, Inc.", - [3]byte{0, 15, 133}: "ADDO-Japan Corporation", - [3]byte{0, 15, 134}: "BlackBerry RTS", - [3]byte{0, 15, 135}: "Maxcess International", - [3]byte{0, 15, 136}: "AMETEK, Inc.", - [3]byte{0, 15, 137}: "Winnertec System Co., Ltd.", - [3]byte{0, 15, 138}: "WideView", - [3]byte{0, 15, 139}: "Orion MultiSystems Inc", - [3]byte{0, 15, 140}: "Gigawavetech Pte Ltd", - [3]byte{0, 15, 141}: "FAST TV-Server AG", - [3]byte{0, 15, 142}: "DONGYANG TELECOM CO.,LTD.", - [3]byte{0, 15, 143}: "Cisco Systems, Inc", - [3]byte{0, 15, 144}: "Cisco Systems, Inc", - [3]byte{0, 15, 145}: "Aerotelecom Co.,Ltd.", - [3]byte{0, 15, 146}: "Microhard Systems Inc.", - [3]byte{0, 15, 147}: "Landis+Gyr Ltd.", - [3]byte{0, 15, 148}: "Genexis BV", - [3]byte{0, 15, 149}: "ELECOM Co.,LTD Laneed Division", - [3]byte{0, 15, 150}: "Telco Systems, Inc.", - [3]byte{0, 15, 151}: "Avanex Corporation", - [3]byte{0, 15, 152}: "Avamax Co. Ltd.", - [3]byte{0, 15, 153}: "APAC opto Electronics Inc.", - [3]byte{0, 15, 154}: "Synchrony, Inc.", - [3]byte{0, 15, 155}: "Ross Video Limited", - [3]byte{0, 15, 156}: "Panduit Corp", - [3]byte{0, 15, 157}: "DisplayLink (UK) Ltd", - [3]byte{0, 15, 158}: "Murrelektronik GmbH", - [3]byte{0, 15, 159}: "ARRIS Group, Inc.", - [3]byte{0, 15, 160}: "CANON KOREA BUSINESS SOLUTIONS INC.", - [3]byte{0, 15, 161}: "Gigabit Systems Inc.", - [3]byte{0, 15, 162}: "2xWireless", - [3]byte{0, 15, 163}: "Alpha Networks Inc.", - [3]byte{0, 15, 164}: "Sprecher Automation GmbH", - [3]byte{0, 15, 165}: "BWA Technology GmbH", - [3]byte{0, 15, 166}: "S2 Security Corporation", - [3]byte{0, 15, 167}: "Raptor Networks Technology", - [3]byte{0, 15, 168}: "Photometrics, Inc.", - [3]byte{0, 15, 169}: "PC Fabrik", - [3]byte{0, 15, 170}: "Nexus Technologies", - [3]byte{0, 15, 171}: "Kyushu Electronics Systems Inc.", - [3]byte{0, 15, 172}: "IEEE 802.11", - [3]byte{0, 15, 173}: "FMN communications GmbH", - [3]byte{0, 15, 174}: "E2O Communications", - [3]byte{0, 15, 175}: "Dialog Inc.", - [3]byte{0, 15, 176}: "COMPAL ELECTRONICS, INC.", - [3]byte{0, 15, 177}: "Cognio Inc.", - [3]byte{0, 15, 178}: "Broadband Pacenet (India) Pvt. Ltd.", - [3]byte{0, 15, 179}: "Actiontec Electronics, Inc", - [3]byte{0, 15, 180}: "Timespace Technology", - [3]byte{0, 15, 181}: "NETGEAR", - [3]byte{0, 15, 182}: "Europlex Technologies", - [3]byte{0, 15, 183}: "Cavium", - [3]byte{0, 15, 184}: "CallURL Inc.", - [3]byte{0, 15, 185}: "Adaptive Instruments", - [3]byte{0, 15, 186}: "Tevebox AB", - [3]byte{0, 15, 187}: "Nokia Siemens Networks GmbH & Co. KG.", - [3]byte{0, 15, 188}: "Onkey Technologies, Inc.", - [3]byte{0, 15, 189}: "MRV Communications (Networks) LTD", - [3]byte{0, 15, 190}: "e-w/you Inc.", - [3]byte{0, 15, 191}: "DGT Sp. z o.o.", - [3]byte{0, 15, 192}: "DELCOMp", - [3]byte{0, 15, 193}: "WAVE Corporation", - [3]byte{0, 15, 194}: "Uniwell Corporation", - [3]byte{0, 15, 195}: "PalmPalm Technology, Inc.", - [3]byte{0, 15, 196}: "NST co.,LTD.", - [3]byte{0, 15, 197}: "KeyMed Ltd", - [3]byte{0, 15, 198}: "Eurocom Industries A/S", - [3]byte{0, 15, 199}: "Dionica R&D Ltd.", - [3]byte{0, 15, 200}: "Chantry Networks", - [3]byte{0, 15, 201}: "Allnet GmbH", - [3]byte{0, 15, 202}: "A-JIN TECHLINE CO, LTD", - [3]byte{0, 15, 203}: "3Com Ltd", - [3]byte{0, 15, 204}: "ARRIS Group, Inc.", - [3]byte{0, 15, 205}: "Nortel Networks", - [3]byte{0, 15, 206}: "Kikusui Electronics Corp.", - [3]byte{0, 15, 207}: "DataWind Research", - [3]byte{0, 15, 208}: "ASTRI", - [3]byte{0, 15, 209}: "Applied Wireless Identifications Group, Inc.", - [3]byte{0, 15, 210}: "EWA Technologies, Inc.", - [3]byte{0, 15, 211}: "Digium", - [3]byte{0, 15, 212}: "Soundcraft", - [3]byte{0, 15, 213}: "Schwechat - RISE", - [3]byte{0, 15, 214}: "Sarotech Co., Ltd", - [3]byte{0, 15, 215}: "Harman Music Group", - [3]byte{0, 15, 216}: "Force, Inc.", - [3]byte{0, 15, 217}: "FlexDSL Telecommunications AG", - [3]byte{0, 15, 218}: "YAZAKI CORPORATION", - [3]byte{0, 15, 219}: "Westell Technologies Inc.", - [3]byte{0, 15, 220}: "Ueda Japan Radio Co., Ltd.", - [3]byte{0, 15, 221}: "SORDIN AB", - [3]byte{0, 15, 222}: "Sony Mobile Communications AB", - [3]byte{0, 15, 223}: "SOLOMON Technology Corp.", - [3]byte{0, 15, 224}: "NComputing Co.,Ltd.", - [3]byte{0, 15, 225}: "ID DIGITAL CORPORATION", - [3]byte{0, 15, 226}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{0, 15, 227}: "Damm Cellular Systems A/S", - [3]byte{0, 15, 228}: "Pantech Co.,Ltd", - [3]byte{0, 15, 229}: "MERCURY SECURITY CORPORATION", - [3]byte{0, 15, 230}: "MBTech Systems, Inc.", - [3]byte{0, 15, 231}: "Lutron Electronics Co., Inc.", - [3]byte{0, 15, 232}: "Lobos, Inc.", - [3]byte{0, 15, 233}: "GW TECHNOLOGIES CO.,LTD.", - [3]byte{0, 15, 234}: "Giga-Byte Technology Co.,LTD.", - [3]byte{0, 15, 235}: "Cylon Controls", - [3]byte{0, 15, 236}: "ARKUS Inc.", - [3]byte{0, 15, 237}: "Anam Electronics Co., Ltd", - [3]byte{0, 15, 238}: "XTec, Incorporated", - [3]byte{0, 15, 239}: "Thales e-Transactions GmbH", - [3]byte{0, 15, 240}: "Sunray Co. Ltd.", - [3]byte{0, 15, 241}: "nex-G Systems Pte.Ltd", - [3]byte{0, 15, 242}: "Loud Technologies Inc.", - [3]byte{0, 15, 243}: "Jung Myoung Communications&Technology", - [3]byte{0, 15, 244}: "Guntermann & Drunck GmbH", - [3]byte{0, 15, 245}: "GN&S company", - [3]byte{0, 15, 246}: "DARFON LIGHTING CORP", - [3]byte{0, 15, 247}: "Cisco Systems, Inc", - [3]byte{0, 15, 248}: "Cisco Systems, Inc", - [3]byte{0, 15, 249}: "Valcretec, Inc.", - [3]byte{0, 15, 250}: "Optinel Systems, Inc.", - [3]byte{0, 15, 251}: "Nippon Denso Industry Co., Ltd.", - [3]byte{0, 15, 252}: "Merit Li-Lin Ent.", - [3]byte{0, 15, 253}: "Glorytek Network Inc.", - [3]byte{0, 15, 254}: "G-PRO COMPUTER", - [3]byte{0, 15, 255}: "Control4", - [3]byte{0, 16, 0}: "CABLE TELEVISION LABORATORIES, INC.", - [3]byte{0, 16, 1}: "Citel", - [3]byte{0, 16, 2}: "ACTIA", - [3]byte{0, 16, 3}: "IMATRON, INC.", - [3]byte{0, 16, 4}: "THE BRANTLEY COILE COMPANY,INC", - [3]byte{0, 16, 5}: "UEC COMMERCIAL", - [3]byte{0, 16, 6}: "Thales Contact Solutions Ltd.", - [3]byte{0, 16, 7}: "Cisco Systems, Inc", - [3]byte{0, 16, 8}: "VIENNA SYSTEMS CORPORATION", - [3]byte{0, 16, 9}: "HORANET", - [3]byte{0, 16, 10}: "WILLIAMS COMMUNICATIONS GROUP", - [3]byte{0, 16, 11}: "Cisco Systems, Inc", - [3]byte{0, 16, 12}: "ITO CO., LTD.", - [3]byte{0, 16, 13}: "Cisco Systems, Inc", - [3]byte{0, 16, 14}: "MICRO LINEAR COPORATION", - [3]byte{0, 16, 15}: "INDUSTRIAL CPU SYSTEMS", - [3]byte{0, 16, 16}: "INITIO CORPORATION", - [3]byte{0, 16, 17}: "Cisco Systems, Inc", - [3]byte{0, 16, 18}: "PROCESSOR SYSTEMS (I) PVT LTD", - [3]byte{0, 16, 19}: "Kontron America, Inc.", - [3]byte{0, 16, 20}: "Cisco Systems, Inc", - [3]byte{0, 16, 21}: "OOmon Inc.", - [3]byte{0, 16, 22}: "T.SQWARE", - [3]byte{0, 16, 23}: "Bosch Access Systems GmbH", - [3]byte{0, 16, 24}: "Broadcom", - [3]byte{0, 16, 25}: "SIRONA DENTAL SYSTEMS GmbH & Co. KG", - [3]byte{0, 16, 26}: "PictureTel Corp.", - [3]byte{0, 16, 27}: "CORNET TECHNOLOGY, INC.", - [3]byte{0, 16, 28}: "OHM TECHNOLOGIES INTL, LLC", - [3]byte{0, 16, 29}: "WINBOND ELECTRONICS CORP.", - [3]byte{0, 16, 30}: "MATSUSHITA ELECTRONIC INSTRUMENTS CORP.", - [3]byte{0, 16, 31}: "Cisco Systems, Inc", - [3]byte{0, 16, 32}: "Hand Held Products Inc", - [3]byte{0, 16, 33}: "ENCANTO NETWORKS, INC.", - [3]byte{0, 16, 34}: "SatCom Media Corporation", - [3]byte{0, 16, 35}: "Network Equipment Technologies", - [3]byte{0, 16, 36}: "NAGOYA ELECTRIC WORKS CO., LTD", - [3]byte{0, 16, 37}: "Grayhill, Inc", - [3]byte{0, 16, 38}: "ACCELERATED NETWORKS, INC.", - [3]byte{0, 16, 39}: "L-3 COMMUNICATIONS EAST", - [3]byte{0, 16, 40}: "COMPUTER TECHNICA, INC.", - [3]byte{0, 16, 41}: "Cisco Systems, Inc", - [3]byte{0, 16, 42}: "ZF MICROSYSTEMS, INC.", - [3]byte{0, 16, 43}: "UMAX DATA SYSTEMS, INC.", - [3]byte{0, 16, 44}: "Lasat Networks A/S", - [3]byte{0, 16, 45}: "HITACHI SOFTWARE ENGINEERING", - [3]byte{0, 16, 46}: "NETWORK SYSTEMS & TECHNOLOGIES PVT. LTD.", - [3]byte{0, 16, 47}: "Cisco Systems, Inc", - [3]byte{0, 16, 48}: "EION Inc.", - [3]byte{0, 16, 49}: "OBJECTIVE COMMUNICATIONS, INC.", - [3]byte{0, 16, 50}: "ALTA TECHNOLOGY", - [3]byte{0, 16, 51}: "ACCESSLAN COMMUNICATIONS, INC.", - [3]byte{0, 16, 52}: "GNP Computers", - [3]byte{0, 16, 53}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{0, 16, 54}: "INTER-TEL INTEGRATED SYSTEMS", - [3]byte{0, 16, 55}: "CYQ've Technology Co., Ltd.", - [3]byte{0, 16, 56}: "MICRO RESEARCH INSTITUTE, INC.", - [3]byte{0, 16, 57}: "Vectron Systems AG", - [3]byte{0, 16, 58}: "DIAMOND NETWORK TECH", - [3]byte{0, 16, 59}: "HIPPI NETWORKING FORUM", - [3]byte{0, 16, 60}: "IC ENSEMBLE, INC.", - [3]byte{0, 16, 61}: "PHASECOM, LTD.", - [3]byte{0, 16, 62}: "NETSCHOOLS CORPORATION", - [3]byte{0, 16, 63}: "TOLLGRADE COMMUNICATIONS, INC.", - [3]byte{0, 16, 64}: "INTERMEC CORPORATION", - [3]byte{0, 16, 65}: "BRISTOL BABCOCK, INC.", - [3]byte{0, 16, 66}: "Alacritech, Inc.", - [3]byte{0, 16, 67}: "A2 CORPORATION", - [3]byte{0, 16, 68}: "InnoLabs Corporation", - [3]byte{0, 16, 69}: "Nortel Networks", - [3]byte{0, 16, 70}: "ALCORN MCBRIDE INC.", - [3]byte{0, 16, 71}: "ECHO ELETRIC CO. LTD.", - [3]byte{0, 16, 72}: "HTRC AUTOMATION, INC.", - [3]byte{0, 16, 73}: "ShoreTel, Inc", - [3]byte{0, 16, 74}: "The Parvus Corporation", - [3]byte{0, 16, 75}: "3COM CORPORATION", - [3]byte{0, 16, 76}: "Teledyne LeCroy, Inc", - [3]byte{0, 16, 77}: "SURTEC INDUSTRIES, INC.", - [3]byte{0, 16, 78}: "CEOLOGIC", - [3]byte{0, 16, 79}: "Oracle Corporation", - [3]byte{0, 16, 80}: "RION CO., LTD.", - [3]byte{0, 16, 81}: "CMICRO CORPORATION", - [3]byte{0, 16, 82}: "METTLER-TOLEDO (ALBSTADT) GMBH", - [3]byte{0, 16, 83}: "COMPUTER TECHNOLOGY CORP.", - [3]byte{0, 16, 84}: "Cisco Systems, Inc", - [3]byte{0, 16, 85}: "FUJITSU MICROELECTRONICS, INC.", - [3]byte{0, 16, 86}: "SODICK CO., LTD.", - [3]byte{0, 16, 87}: "Rebel.com, Inc.", - [3]byte{0, 16, 88}: "ArrowPoint Communications", - [3]byte{0, 16, 89}: "DIABLO RESEARCH CO. LLC", - [3]byte{0, 16, 90}: "3COM CORPORATION", - [3]byte{0, 16, 91}: "NET INSIGHT AB", - [3]byte{0, 16, 92}: "QUANTUM DESIGNS (H.K.) LTD.", - [3]byte{0, 16, 93}: "Draeger Medical", - [3]byte{0, 16, 94}: "Spirent plc, Service Assurance Broadband", - [3]byte{0, 16, 95}: "ZODIAC DATA SYSTEMS", - [3]byte{0, 16, 96}: "BILLIONTON SYSTEMS, INC.", - [3]byte{0, 16, 97}: "HOSTLINK CORP.", - [3]byte{0, 16, 98}: "NX SERVER, ILNC.", - [3]byte{0, 16, 99}: "STARGUIDE DIGITAL NETWORKS", - [3]byte{0, 16, 100}: "DNPG, LLC", - [3]byte{0, 16, 101}: "RADYNE CORPORATION", - [3]byte{0, 16, 102}: "ADVANCED CONTROL SYSTEMS, INC.", - [3]byte{0, 16, 103}: "Ericsson", - [3]byte{0, 16, 104}: "COMOS TELECOM", - [3]byte{0, 16, 105}: "HELIOSS COMMUNICATIONS, INC.", - [3]byte{0, 16, 106}: "DIGITAL MICROWAVE CORPORATION", - [3]byte{0, 16, 107}: "SONUS NETWORKS, INC.", - [3]byte{0, 16, 108}: "EDNT GmbH", - [3]byte{0, 16, 109}: "Axxcelera Broadband Wireless", - [3]byte{0, 16, 110}: "TADIRAN COM. LTD.", - [3]byte{0, 16, 111}: "TRENTON TECHNOLOGY INC.", - [3]byte{0, 16, 112}: "CARADON TREND LTD.", - [3]byte{0, 16, 113}: "ADVANET INC.", - [3]byte{0, 16, 114}: "GVN TECHNOLOGIES, INC.", - [3]byte{0, 16, 115}: "TECHNOBOX, INC.", - [3]byte{0, 16, 116}: "ATEN INTERNATIONAL CO., LTD.", - [3]byte{0, 16, 117}: "Segate Technology LLC", - [3]byte{0, 16, 118}: "EUREM GmbH", - [3]byte{0, 16, 119}: "SAF DRIVE SYSTEMS, LTD.", - [3]byte{0, 16, 120}: "NUERA COMMUNICATIONS, INC.", - [3]byte{0, 16, 121}: "Cisco Systems, Inc", - [3]byte{0, 16, 122}: "AmbiCom, Inc.", - [3]byte{0, 16, 123}: "Cisco Systems, Inc", - [3]byte{0, 16, 124}: "P-COM, INC.", - [3]byte{0, 16, 125}: "AURORA COMMUNICATIONS, LTD.", - [3]byte{0, 16, 126}: "BACHMANN ELECTRONIC GmbH", - [3]byte{0, 16, 127}: "CRESTRON ELECTRONICS, INC.", - [3]byte{0, 16, 128}: "METAWAVE COMMUNICATIONS", - [3]byte{0, 16, 129}: "DPS, INC.", - [3]byte{0, 16, 130}: "JNA TELECOMMUNICATIONS LIMITED", - [3]byte{0, 16, 131}: "Hewlett Packard", - [3]byte{0, 16, 132}: "K-BOT COMMUNICATIONS", - [3]byte{0, 16, 133}: "POLARIS COMMUNICATIONS, INC.", - [3]byte{0, 16, 134}: "ATTO Technology, Inc.", - [3]byte{0, 16, 135}: "XSTREAMIS PLC", - [3]byte{0, 16, 136}: "AMERICAN NETWORKS INC.", - [3]byte{0, 16, 137}: "WebSonic", - [3]byte{0, 16, 138}: "TeraLogic, Inc.", - [3]byte{0, 16, 139}: "LASERANIMATION SOLLINGER GMBH", - [3]byte{0, 16, 140}: "Fujitsu Services Ltd", - [3]byte{0, 16, 141}: "Johnson Controls, Inc.", - [3]byte{0, 16, 142}: "HUGH SYMONS CONCEPT Technologies Ltd.", - [3]byte{0, 16, 143}: "RAPTOR SYSTEMS", - [3]byte{0, 16, 144}: "CIMETRICS, INC.", - [3]byte{0, 16, 145}: "NO WIRES NEEDED BV", - [3]byte{0, 16, 146}: "NETCORE INC.", - [3]byte{0, 16, 147}: "CMS COMPUTERS, LTD.", - [3]byte{0, 16, 148}: "Performance Analysis Broadband, Spirent plc", - [3]byte{0, 16, 149}: "Thomson Inc.", - [3]byte{0, 16, 150}: "TRACEWELL SYSTEMS, INC.", - [3]byte{0, 16, 151}: "WinNet Metropolitan Communications Systems, Inc.", - [3]byte{0, 16, 152}: "STARNET TECHNOLOGIES, INC.", - [3]byte{0, 16, 153}: "InnoMedia, Inc.", - [3]byte{0, 16, 154}: "NETLINE", - [3]byte{0, 16, 155}: "Emulex Corporation", - [3]byte{0, 16, 156}: "M-SYSTEM CO., LTD.", - [3]byte{0, 16, 157}: "CLARINET SYSTEMS, INC.", - [3]byte{0, 16, 158}: "AWARE, INC.", - [3]byte{0, 16, 159}: "PAVO, INC.", - [3]byte{0, 16, 160}: "INNOVEX TECHNOLOGIES, INC.", - [3]byte{0, 16, 161}: "KENDIN SEMICONDUCTOR, INC.", - [3]byte{0, 16, 162}: "TNS", - [3]byte{0, 16, 163}: "OMNITRONIX, INC.", - [3]byte{0, 16, 164}: "XIRCOM", - [3]byte{0, 16, 165}: "OXFORD INSTRUMENTS", - [3]byte{0, 16, 166}: "Cisco Systems, Inc", - [3]byte{0, 16, 167}: "UNEX TECHNOLOGY CORPORATION", - [3]byte{0, 16, 168}: "RELIANCE COMPUTER CORP.", - [3]byte{0, 16, 169}: "ADHOC TECHNOLOGIES", - [3]byte{0, 16, 170}: "MEDIA4, INC.", - [3]byte{0, 16, 171}: "KOITO ELECTRIC INDUSTRIES, LTD.", - [3]byte{0, 16, 172}: "IMCI TECHNOLOGIES", - [3]byte{0, 16, 173}: "SOFTRONICS USB, INC.", - [3]byte{0, 16, 174}: "SHINKO ELECTRIC INDUSTRIES CO.", - [3]byte{0, 16, 175}: "TAC SYSTEMS, INC.", - [3]byte{0, 16, 176}: "MERIDIAN TECHNOLOGY CORP.", - [3]byte{0, 16, 177}: "FOR-A CO., LTD.", - [3]byte{0, 16, 178}: "COACTIVE AESTHETICS", - [3]byte{0, 16, 179}: "NOKIA MULTIMEDIA TERMINALS", - [3]byte{0, 16, 180}: "ATMOSPHERE NETWORKS", - [3]byte{0, 16, 181}: "Accton Technology Corp", - [3]byte{0, 16, 182}: "ENTRATA COMMUNICATIONS CORP.", - [3]byte{0, 16, 183}: "COYOTE TECHNOLOGIES, LLC", - [3]byte{0, 16, 184}: "ISHIGAKI COMPUTER SYSTEM CO.", - [3]byte{0, 16, 185}: "MAXTOR CORP.", - [3]byte{0, 16, 186}: "MARTINHO-DAVIS SYSTEMS, INC.", - [3]byte{0, 16, 187}: "DATA & INFORMATION TECHNOLOGY", - [3]byte{0, 16, 188}: "Aastra Telecom", - [3]byte{0, 16, 189}: "THE TELECOMMUNICATION TECHNOLOGY COMMITTEE (TTC)", - [3]byte{0, 16, 190}: "MARCH NETWORKS CORPORATION", - [3]byte{0, 16, 191}: "InterAir Wireless", - [3]byte{0, 16, 192}: "ARMA, Inc.", - [3]byte{0, 16, 193}: "OI ELECTRIC CO.,LTD", - [3]byte{0, 16, 194}: "WILLNET, INC.", - [3]byte{0, 16, 195}: "CSI-CONTROL SYSTEMS", - [3]byte{0, 16, 196}: "MEDIA GLOBAL LINKS CO., LTD.", - [3]byte{0, 16, 197}: "PROTOCOL TECHNOLOGIES, INC.", - [3]byte{0, 16, 198}: "Universal Global Scientific Industrial Co., Ltd.", - [3]byte{0, 16, 199}: "DATA TRANSMISSION NETWORK", - [3]byte{0, 16, 200}: "COMMUNICATIONS ELECTRONICS SECURITY GROUP", - [3]byte{0, 16, 201}: "MITSUBISHI ELECTRONICS LOGISTIC SUPPORT CO.", - [3]byte{0, 16, 202}: "Telco Systems, Inc.", - [3]byte{0, 16, 203}: "FACIT K.K.", - [3]byte{0, 16, 204}: "CLP COMPUTER LOGISTIK PLANUNG GmbH", - [3]byte{0, 16, 205}: "INTERFACE CONCEPT", - [3]byte{0, 16, 206}: "VOLAMP, LTD.", - [3]byte{0, 16, 207}: "FIBERLANE COMMUNICATIONS", - [3]byte{0, 16, 208}: "WITCOM, LTD.", - [3]byte{0, 16, 209}: "Top Layer Networks, Inc.", - [3]byte{0, 16, 210}: "NITTO TSUSHINKI CO., LTD", - [3]byte{0, 16, 211}: "GRIPS ELECTRONIC GMBH", - [3]byte{0, 16, 212}: "STORAGE COMPUTER CORPORATION", - [3]byte{0, 16, 213}: "IMASDE CANARIAS, S.A.", - [3]byte{0, 16, 214}: "Exelis", - [3]byte{0, 16, 215}: "ARGOSY RESEARCH INC.", - [3]byte{0, 16, 216}: "CALISTA", - [3]byte{0, 16, 217}: "IBM JAPAN, FUJISAWA MT+D", - [3]byte{0, 16, 218}: "Kollmorgen Corp", - [3]byte{0, 16, 219}: "Juniper Networks", - [3]byte{0, 16, 220}: "MICRO-STAR INTERNATIONAL CO., LTD.", - [3]byte{0, 16, 221}: "ENABLE SEMICONDUCTOR, INC.", - [3]byte{0, 16, 222}: "INTERNATIONAL DATACASTING CORPORATION", - [3]byte{0, 16, 223}: "RISE COMPUTER INC.", - [3]byte{0, 16, 224}: "Oracle Corporation", - [3]byte{0, 16, 225}: "S.I. TECH, INC.", - [3]byte{0, 16, 226}: "ArrayComm, Inc.", - [3]byte{0, 16, 227}: "Hewlett Packard", - [3]byte{0, 16, 228}: "NSI CORPORATION", - [3]byte{0, 16, 229}: "SOLECTRON TEXAS", - [3]byte{0, 16, 230}: "APPLIED INTELLIGENT SYSTEMS, INC.", - [3]byte{0, 16, 231}: "Breezecom, Ltd.", - [3]byte{0, 16, 232}: "TELOCITY, INCORPORATED", - [3]byte{0, 16, 233}: "RAIDTEC LTD.", - [3]byte{0, 16, 234}: "ADEPT TECHNOLOGY", - [3]byte{0, 16, 235}: "SELSIUS SYSTEMS, INC.", - [3]byte{0, 16, 236}: "RPCG, LLC", - [3]byte{0, 16, 237}: "SUNDANCE TECHNOLOGY, INC.", - [3]byte{0, 16, 238}: "CTI PRODUCTS, INC.", - [3]byte{0, 16, 239}: "DBTEL INCORPORATED", - [3]byte{0, 16, 240}: "RITTAL-WERK RUDOLF LOH GmbH & Co.", - [3]byte{0, 16, 241}: "I-O CORPORATION", - [3]byte{0, 16, 242}: "ANTEC", - [3]byte{0, 16, 243}: "Nexcom International Co., Ltd.", - [3]byte{0, 16, 244}: "Vertical Communications", - [3]byte{0, 16, 245}: "AMHERST SYSTEMS, INC.", - [3]byte{0, 16, 246}: "Cisco Systems, Inc", - [3]byte{0, 16, 247}: "IRIICHI TECHNOLOGIES Inc.", - [3]byte{0, 16, 248}: "TEXIO TECHNOLOGY CORPORATION", - [3]byte{0, 16, 249}: "UNIQUE SYSTEMS, INC.", - [3]byte{0, 16, 250}: "Apple, Inc.", - [3]byte{0, 16, 251}: "ZIDA TECHNOLOGIES LIMITED", - [3]byte{0, 16, 252}: "BROADBAND NETWORKS, INC.", - [3]byte{0, 16, 253}: "COCOM A/S", - [3]byte{0, 16, 254}: "DIGITAL EQUIPMENT CORPORATION", - [3]byte{0, 16, 255}: "Cisco Systems, Inc", - [3]byte{0, 17, 0}: "Schneider Electric", - [3]byte{0, 17, 1}: "CET Technologies Pte Ltd", - [3]byte{0, 17, 2}: "Aurora Multimedia Corp.", - [3]byte{0, 17, 3}: "kawamura electric inc.", - [3]byte{0, 17, 4}: "TELEXY", - [3]byte{0, 17, 5}: "Sunplus Technology Co., Ltd.", - [3]byte{0, 17, 6}: "Siemens NV (Belgium)", - [3]byte{0, 17, 7}: "RGB Networks Inc.", - [3]byte{0, 17, 8}: "Orbital Data Corporation", - [3]byte{0, 17, 9}: "Micro-Star International", - [3]byte{0, 17, 10}: "Hewlett Packard", - [3]byte{0, 17, 11}: "Franklin Technology Systems", - [3]byte{0, 17, 12}: "Atmark Techno, Inc.", - [3]byte{0, 17, 13}: "SANBlaze Technology, Inc.", - [3]byte{0, 17, 14}: "Tsurusaki Sealand Transportation Co. Ltd.", - [3]byte{0, 17, 15}: "netplat,Inc.", - [3]byte{0, 17, 16}: "Maxanna Technology Co., Ltd.", - [3]byte{0, 17, 17}: "Intel Corporation", - [3]byte{0, 17, 18}: "Honeywell CMSS", - [3]byte{0, 17, 19}: "Fraunhofer FOKUS", - [3]byte{0, 17, 20}: "EverFocus Electronics Corp.", - [3]byte{0, 17, 21}: "EPIN Technologies, Inc.", - [3]byte{0, 17, 22}: "COTEAU VERT CO., LTD.", - [3]byte{0, 17, 23}: "CESNET", - [3]byte{0, 17, 24}: "BLX IC Design Corp., Ltd.", - [3]byte{0, 17, 25}: "Solteras, Inc.", - [3]byte{0, 17, 26}: "ARRIS Group, Inc.", - [3]byte{0, 17, 27}: "Targa Systems Div L-3 Communications", - [3]byte{0, 17, 28}: "Pleora Technologies Inc.", - [3]byte{0, 17, 29}: "Hectrix Limited", - [3]byte{0, 17, 30}: "EPSG (Ethernet Powerlink Standardization Group)", - [3]byte{0, 17, 31}: "Doremi Labs, Inc.", - [3]byte{0, 17, 32}: "Cisco Systems, Inc", - [3]byte{0, 17, 33}: "Cisco Systems, Inc", - [3]byte{0, 17, 34}: "CIMSYS Inc", - [3]byte{0, 17, 35}: "Appointech, Inc.", - [3]byte{0, 17, 36}: "Apple, Inc.", - [3]byte{0, 17, 37}: "IBM Corp", - [3]byte{0, 17, 38}: "Venstar Inc.", - [3]byte{0, 17, 39}: "TASI, Inc", - [3]byte{0, 17, 40}: "Streamit", - [3]byte{0, 17, 41}: "Paradise Datacom Ltd.", - [3]byte{0, 17, 42}: "Niko NV", - [3]byte{0, 17, 43}: "NetModule AG", - [3]byte{0, 17, 44}: "IZT GmbH", - [3]byte{0, 17, 45}: "iPulse Systems", - [3]byte{0, 17, 46}: "CEICOM", - [3]byte{0, 17, 47}: "ASUSTek COMPUTER INC.", - [3]byte{0, 17, 48}: "Allied Telesis (Hong Kong) Ltd.", - [3]byte{0, 17, 49}: "UNATECH. CO.,LTD", - [3]byte{0, 17, 50}: "Synology Incorporated", - [3]byte{0, 17, 51}: "Siemens Austria SIMEA", - [3]byte{0, 17, 52}: "MediaCell, Inc.", - [3]byte{0, 17, 53}: "Grandeye Ltd", - [3]byte{0, 17, 54}: "Goodrich Sensor Systems", - [3]byte{0, 17, 55}: "AICHI ELECTRIC CO., LTD.", - [3]byte{0, 17, 56}: "TAISHIN CO., LTD.", - [3]byte{0, 17, 57}: "STOEBER ANTRIEBSTECHNIK GmbH + Co. KG.", - [3]byte{0, 17, 58}: "SHINBORAM", - [3]byte{0, 17, 59}: "Micronet Communications Inc.", - [3]byte{0, 17, 60}: "Micronas GmbH", - [3]byte{0, 17, 61}: "KN SOLTEC CO.,LTD.", - [3]byte{0, 17, 62}: "JL Corporation", - [3]byte{0, 17, 63}: "Alcatel DI", - [3]byte{0, 17, 64}: "Nanometrics Inc.", - [3]byte{0, 17, 65}: "GoodMan Corporation", - [3]byte{0, 17, 66}: "e-SMARTCOM INC.", - [3]byte{0, 17, 67}: "Dell Inc.", - [3]byte{0, 17, 68}: "Assurance Technology Corp", - [3]byte{0, 17, 69}: "ValuePoint Networks", - [3]byte{0, 17, 70}: "Telecard-Pribor Ltd", - [3]byte{0, 17, 71}: "Secom-Industry co.LTD.", - [3]byte{0, 17, 72}: "Prolon Control Systems", - [3]byte{0, 17, 73}: "Proliphix Inc.", - [3]byte{0, 17, 74}: "KAYABA INDUSTRY Co,.Ltd.", - [3]byte{0, 17, 75}: "Francotyp-Postalia GmbH", - [3]byte{0, 17, 76}: "caffeina applied research ltd.", - [3]byte{0, 17, 77}: "Atsumi Electric Co.,LTD.", - [3]byte{0, 17, 78}: "690885 Ontario Inc.", - [3]byte{0, 17, 79}: "US Digital Television, Inc", - [3]byte{0, 17, 80}: "Belkin Corporation", - [3]byte{0, 17, 81}: "Mykotronx", - [3]byte{0, 17, 82}: "Eidsvoll Electronics AS", - [3]byte{0, 17, 83}: "Trident Tek, Inc.", - [3]byte{0, 17, 84}: "Webpro Technologies Inc.", - [3]byte{0, 17, 85}: "Sevis Systems", - [3]byte{0, 17, 86}: "Pharos Systems NZ", - [3]byte{0, 17, 87}: "Oki Electric Industry Co., Ltd.", - [3]byte{0, 17, 88}: "Nortel Networks", - [3]byte{0, 17, 89}: "MATISSE NETWORKS INC", - [3]byte{0, 17, 90}: "Ivoclar Vivadent AG", - [3]byte{0, 17, 91}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{0, 17, 92}: "Cisco Systems, Inc", - [3]byte{0, 17, 93}: "Cisco Systems, Inc", - [3]byte{0, 17, 94}: "ProMinent Dosiertechnik GmbH", - [3]byte{0, 17, 95}: "ITX Security Co., Ltd.", - [3]byte{0, 17, 96}: "ARTDIO Company Co., LTD", - [3]byte{0, 17, 97}: "NetStreams, LLC", - [3]byte{0, 17, 98}: "STAR MICRONICS CO.,LTD.", - [3]byte{0, 17, 99}: "SYSTEM SPA DEPT. ELECTRONICS", - [3]byte{0, 17, 100}: "ACARD Technology Corp.", - [3]byte{0, 17, 101}: "ZNYX Networks, Inc.", - [3]byte{0, 17, 102}: "Taelim Electronics Co., Ltd.", - [3]byte{0, 17, 103}: "Integrated System Solution Corp.", - [3]byte{0, 17, 104}: "HomeLogic LLC", - [3]byte{0, 17, 105}: "EMS Satcom", - [3]byte{0, 17, 106}: "Domo Ltd", - [3]byte{0, 17, 107}: "Digital Data Communications Asia Co.,Ltd", - [3]byte{0, 17, 108}: "Nanwang Multimedia Inc.,Ltd", - [3]byte{0, 17, 109}: "American Time and Signal", - [3]byte{0, 17, 110}: "Peplink International Ltd.", - [3]byte{0, 17, 111}: "Netforyou Co., LTD.", - [3]byte{0, 17, 112}: "GSC SRL", - [3]byte{0, 17, 113}: "DEXTER Communications, Inc.", - [3]byte{0, 17, 114}: "COTRON CORPORATION", - [3]byte{0, 17, 115}: "SMART Storage Systems", - [3]byte{0, 17, 116}: "Mojo Networks, Inc.", - [3]byte{0, 17, 117}: "Intel Corporation", - [3]byte{0, 17, 118}: "Intellambda Systems, Inc.", - [3]byte{0, 17, 119}: "Coaxial Networks, Inc.", - [3]byte{0, 17, 120}: "Chiron Technology Ltd", - [3]byte{0, 17, 121}: "Singular Technology Co. Ltd.", - [3]byte{0, 17, 122}: "Singim International Corp.", - [3]byte{0, 17, 123}: "Büchi Labortechnik AG", - [3]byte{0, 17, 124}: "e-zy.net", - [3]byte{0, 17, 125}: "ZMD America, Inc.", - [3]byte{0, 17, 126}: "Midmark Corp", - [3]byte{0, 17, 127}: "Neotune Information Technology Corporation,.LTD", - [3]byte{0, 17, 128}: "ARRIS Group, Inc.", - [3]byte{0, 17, 129}: "InterEnergy Co.Ltd,", - [3]byte{0, 17, 130}: "IMI Norgren Ltd", - [3]byte{0, 17, 131}: "Datalogic ADC, Inc.", - [3]byte{0, 17, 132}: "Humo Laboratory,Ltd.", - [3]byte{0, 17, 133}: "Hewlett Packard", - [3]byte{0, 17, 134}: "Prime Systems, Inc.", - [3]byte{0, 17, 135}: "Category Solutions, Inc", - [3]byte{0, 17, 136}: "Enterasys", - [3]byte{0, 17, 137}: "Aerotech Inc", - [3]byte{0, 17, 138}: "Viewtran Technology Limited", - [3]byte{0, 17, 139}: "Alcatel-Lucent Enterprise", - [3]byte{0, 17, 140}: "Missouri Department of Transportation", - [3]byte{0, 17, 141}: "Hanchang System Corp.", - [3]byte{0, 17, 142}: "Halytech Mace", - [3]byte{0, 17, 143}: "EUTECH INSTRUMENTS PTE. LTD.", - [3]byte{0, 17, 144}: "Digital Design Corporation", - [3]byte{0, 17, 145}: "CTS-Clima Temperatur Systeme GmbH", - [3]byte{0, 17, 146}: "Cisco Systems, Inc", - [3]byte{0, 17, 147}: "Cisco Systems, Inc", - [3]byte{0, 17, 148}: "Chi Mei Communication Systems, Inc.", - [3]byte{0, 17, 149}: "D-Link Corporation", - [3]byte{0, 17, 150}: "Actuality Systems, Inc.", - [3]byte{0, 17, 151}: "Monitoring Technologies Limited", - [3]byte{0, 17, 152}: "Prism Media Products Limited", - [3]byte{0, 17, 153}: "2wcom Systems GmbH", - [3]byte{0, 17, 154}: "Alkeria srl", - [3]byte{0, 17, 155}: "Telesynergy Research Inc.", - [3]byte{0, 17, 156}: "EP&T Energy", - [3]byte{0, 17, 157}: "Diginfo Technology Corporation", - [3]byte{0, 17, 158}: "Solectron Brazil", - [3]byte{0, 17, 159}: "Nokia Danmark A/S", - [3]byte{0, 17, 160}: "Vtech Engineering Canada Ltd", - [3]byte{0, 17, 161}: "VISION NETWARE CO.,LTD", - [3]byte{0, 17, 162}: "Manufacturing Technology Inc", - [3]byte{0, 17, 163}: "LanReady Technologies Inc.", - [3]byte{0, 17, 164}: "JStream Technologies Inc.", - [3]byte{0, 17, 165}: "Fortuna Electronic Corp.", - [3]byte{0, 17, 166}: "Sypixx Networks", - [3]byte{0, 17, 167}: "Infilco Degremont Inc.", - [3]byte{0, 17, 168}: "Quest Technologies", - [3]byte{0, 17, 169}: "MOIMSTONE Co., LTD", - [3]byte{0, 17, 170}: "Uniclass Technology, Co., LTD", - [3]byte{0, 17, 171}: "TRUSTABLE TECHNOLOGY CO.,LTD.", - [3]byte{0, 17, 172}: "Simtec Electronics", - [3]byte{0, 17, 173}: "Shanghai Ruijie Technology", - [3]byte{0, 17, 174}: "ARRIS Group, Inc.", - [3]byte{0, 17, 175}: "Medialink-i,Inc", - [3]byte{0, 17, 176}: "Fortelink Inc.", - [3]byte{0, 17, 177}: "BlueExpert Technology Corp.", - [3]byte{0, 17, 178}: "2001 Technology Inc.", - [3]byte{0, 17, 179}: "YOSHIMIYA CO.,LTD.", - [3]byte{0, 17, 180}: "Westermo Teleindustri AB", - [3]byte{0, 17, 181}: "Shenzhen Powercom Co.,Ltd", - [3]byte{0, 17, 182}: "Open Systems International", - [3]byte{0, 17, 183}: "Octalix B.V.", - [3]byte{0, 17, 184}: "Liebherr - Elektronik GmbH", - [3]byte{0, 17, 185}: "Inner Range Pty. Ltd.", - [3]byte{0, 17, 186}: "Elexol Pty Ltd", - [3]byte{0, 17, 187}: "Cisco Systems, Inc", - [3]byte{0, 17, 188}: "Cisco Systems, Inc", - [3]byte{0, 17, 189}: "Bombardier Transportation", - [3]byte{0, 17, 190}: "AGP Telecom Co. Ltd", - [3]byte{0, 17, 191}: "AESYS S.p.A.", - [3]byte{0, 17, 192}: "Aday Technology Inc", - [3]byte{0, 17, 193}: "4P MOBILE DATA PROCESSING", - [3]byte{0, 17, 194}: "United Fiber Optic Communication", - [3]byte{0, 17, 195}: "Transceiving System Technology Corporation", - [3]byte{0, 17, 196}: "Terminales de Telecomunicacion Terrestre, S.L.", - [3]byte{0, 17, 197}: "TEN Technology", - [3]byte{0, 17, 198}: "Seagate Technology", - [3]byte{0, 17, 199}: "Raymarine UK Ltd", - [3]byte{0, 17, 200}: "Powercom Co., Ltd.", - [3]byte{0, 17, 201}: "MTT Corporation", - [3]byte{0, 17, 202}: "Long Range Systems, Inc.", - [3]byte{0, 17, 203}: "Jacobsons AB", - [3]byte{0, 17, 204}: "Guangzhou Jinpeng Group Co.,Ltd.", - [3]byte{0, 17, 205}: "Axsun Technologies", - [3]byte{0, 17, 206}: "Ubisense Limited", - [3]byte{0, 17, 207}: "Thrane & Thrane A/S", - [3]byte{0, 17, 208}: "Tandberg Data ASA", - [3]byte{0, 17, 209}: "Soft Imaging System GmbH", - [3]byte{0, 17, 210}: "Perception Digital Ltd", - [3]byte{0, 17, 211}: "NextGenTel Holding ASA", - [3]byte{0, 17, 212}: "NetEnrich, Inc", - [3]byte{0, 17, 213}: "Hangzhou Sunyard System Engineering Co.,Ltd.", - [3]byte{0, 17, 214}: "HandEra, Inc.", - [3]byte{0, 17, 215}: "eWerks Inc", - [3]byte{0, 17, 216}: "ASUSTek COMPUTER INC.", - [3]byte{0, 17, 217}: "TiVo", - [3]byte{0, 17, 218}: "Vivaas Technology Inc.", - [3]byte{0, 17, 219}: "Land-Cellular Corporation", - [3]byte{0, 17, 220}: "Glunz & Jensen", - [3]byte{0, 17, 221}: "FROMUS TEC. Co., Ltd.", - [3]byte{0, 17, 222}: "EURILOGIC", - [3]byte{0, 17, 223}: "Current Energy", - [3]byte{0, 17, 224}: "U-MEDIA Communications, Inc.", - [3]byte{0, 17, 225}: "Arcelik A.S", - [3]byte{0, 17, 226}: "Hua Jung Components Co., Ltd.", - [3]byte{0, 17, 227}: "Thomson, Inc.", - [3]byte{0, 17, 228}: "Danelec Electronics A/S", - [3]byte{0, 17, 229}: "KCodes Corporation", - [3]byte{0, 17, 230}: "Scientific Atlanta", - [3]byte{0, 17, 231}: "WORLDSAT - Texas de France", - [3]byte{0, 17, 232}: "Tixi.Com", - [3]byte{0, 17, 233}: "STARNEX CO., LTD.", - [3]byte{0, 17, 234}: "IWICS Inc.", - [3]byte{0, 17, 235}: "Innovative Integration", - [3]byte{0, 17, 236}: "AVIX INC.", - [3]byte{0, 17, 237}: "802 Global", - [3]byte{0, 17, 238}: "Estari, Inc.", - [3]byte{0, 17, 239}: "Conitec Datensysteme GmbH", - [3]byte{0, 17, 240}: "Wideful Limited", - [3]byte{0, 17, 241}: "QinetiQ Ltd", - [3]byte{0, 17, 242}: "Institute of Network Technologies", - [3]byte{0, 17, 243}: "NeoMedia Europe AG", - [3]byte{0, 17, 244}: "woori-net", - [3]byte{0, 17, 245}: "ASKEY COMPUTER CORP", - [3]byte{0, 17, 246}: "Asia Pacific Microsystems , Inc.", - [3]byte{0, 17, 247}: "Shenzhen Forward Industry Co., Ltd", - [3]byte{0, 17, 248}: "AIRAYA Corp", - [3]byte{0, 17, 249}: "Nortel Networks", - [3]byte{0, 17, 250}: "Rane Corporation", - [3]byte{0, 17, 251}: "Heidelberg Engineering GmbH", - [3]byte{0, 17, 252}: "HARTING Electronics GmbH", - [3]byte{0, 17, 253}: "KORG INC.", - [3]byte{0, 17, 254}: "Keiyo System Research, Inc.", - [3]byte{0, 17, 255}: "Digitro Tecnologia Ltda", - [3]byte{0, 18, 0}: "Cisco Systems, Inc", - [3]byte{0, 18, 1}: "Cisco Systems, Inc", - [3]byte{0, 18, 2}: "Decrane Aerospace - Audio International Inc.", - [3]byte{0, 18, 3}: "ActivNetworks", - [3]byte{0, 18, 4}: "u10 Networks, Inc.", - [3]byte{0, 18, 5}: "Terrasat Communications, Inc.", - [3]byte{0, 18, 6}: "iQuest (NZ) Ltd", - [3]byte{0, 18, 7}: "Head Strong International Limited", - [3]byte{0, 18, 8}: "Gantner Instruments GmbH", - [3]byte{0, 18, 9}: "Fastrax Ltd", - [3]byte{0, 18, 10}: "Emerson Climate Technologies GmbH", - [3]byte{0, 18, 11}: "Chinasys Technologies Limited", - [3]byte{0, 18, 12}: "CE-Infosys Pte Ltd", - [3]byte{0, 18, 13}: "Advanced Telecommunication Technologies, Inc.", - [3]byte{0, 18, 14}: "AboCom", - [3]byte{0, 18, 15}: "IEEE 802.3", - [3]byte{0, 18, 16}: "WideRay Corp", - [3]byte{0, 18, 17}: "Protechna Herbst GmbH & Co. KG", - [3]byte{0, 18, 18}: "PLUS Corporation", - [3]byte{0, 18, 19}: "Metrohm AG", - [3]byte{0, 18, 20}: "Koenig & Bauer AG", - [3]byte{0, 18, 21}: "iStor Networks, Inc.", - [3]byte{0, 18, 22}: "ICP Internet Communication Payment AG", - [3]byte{0, 18, 23}: "Cisco-Linksys, LLC", - [3]byte{0, 18, 24}: "ARUZE Corporation", - [3]byte{0, 18, 25}: "General Datacomm LLC", - [3]byte{0, 18, 26}: "Techno Soft Systemnics Inc.", - [3]byte{0, 18, 27}: "Sound Devices, LLC", - [3]byte{0, 18, 28}: "PARROT SA", - [3]byte{0, 18, 29}: "Netfabric Corporation", - [3]byte{0, 18, 30}: "Juniper Networks", - [3]byte{0, 18, 31}: "Harding Instruments", - [3]byte{0, 18, 32}: "Cadco Systems", - [3]byte{0, 18, 33}: "B.Braun Melsungen AG", - [3]byte{0, 18, 34}: "Skardin (UK) Ltd", - [3]byte{0, 18, 35}: "Pixim", - [3]byte{0, 18, 36}: "NexQL Corporation", - [3]byte{0, 18, 37}: "ARRIS Group, Inc.", - [3]byte{0, 18, 38}: "Japan Direx Corporation", - [3]byte{0, 18, 39}: "Franklin Electric Co., Inc.", - [3]byte{0, 18, 40}: "Data Ltd.", - [3]byte{0, 18, 41}: "BroadEasy Technologies Co.,Ltd", - [3]byte{0, 18, 42}: "VTech Telecommunications Ltd.", - [3]byte{0, 18, 43}: "Virbiage Pty Ltd", - [3]byte{0, 18, 44}: "Soenen Controls N.V.", - [3]byte{0, 18, 45}: "SiNett Corporation", - [3]byte{0, 18, 46}: "Signal Technology - AISD", - [3]byte{0, 18, 47}: "Sanei Electric Inc.", - [3]byte{0, 18, 48}: "Picaso Infocommunication CO., LTD.", - [3]byte{0, 18, 49}: "Motion Control Systems, Inc.", - [3]byte{0, 18, 50}: "LeWiz Communications Inc.", - [3]byte{0, 18, 51}: "JRC TOKKI Co.,Ltd.", - [3]byte{0, 18, 52}: "Camille Bauer", - [3]byte{0, 18, 53}: "Andrew Corporation", - [3]byte{0, 18, 54}: "ConSentry Networks", - [3]byte{0, 18, 55}: "Texas Instruments", - [3]byte{0, 18, 56}: "SetaBox Technology Co., Ltd.", - [3]byte{0, 18, 57}: "S Net Systems Inc.", - [3]byte{0, 18, 58}: "Posystech Inc., Co.", - [3]byte{0, 18, 59}: "KeRo Systems ApS", - [3]byte{0, 18, 60}: "Second Rule LLC", - [3]byte{0, 18, 61}: "GES Co, Ltd", - [3]byte{0, 18, 62}: "ERUNE technology Co., Ltd.", - [3]byte{0, 18, 63}: "Dell Inc.", - [3]byte{0, 18, 64}: "AMOI ELECTRONICS CO.,LTD", - [3]byte{0, 18, 65}: "a2i marketing center", - [3]byte{0, 18, 66}: "Millennial Net", - [3]byte{0, 18, 67}: "Cisco Systems, Inc", - [3]byte{0, 18, 68}: "Cisco Systems, Inc", - [3]byte{0, 18, 69}: "Zellweger Analytics, Inc.", - [3]byte{0, 18, 70}: "T.O.M TECHNOLOGY INC..", - [3]byte{0, 18, 71}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 18, 72}: "Dell EMC", - [3]byte{0, 18, 73}: "Delta Elettronica S.p.A.", - [3]byte{0, 18, 74}: "Dedicated Devices, Inc.", - [3]byte{0, 18, 75}: "Texas Instruments", - [3]byte{0, 18, 76}: "BBWM Corporation", - [3]byte{0, 18, 77}: "Inducon BV", - [3]byte{0, 18, 78}: "XAC AUTOMATION CORP.", - [3]byte{0, 18, 79}: "Pentair Thermal Management", - [3]byte{0, 18, 80}: "Tokyo Aircaft Instrument Co., Ltd.", - [3]byte{0, 18, 81}: "SILINK", - [3]byte{0, 18, 82}: "Citronix, LLC", - [3]byte{0, 18, 83}: "AudioDev AB", - [3]byte{0, 18, 84}: "Spectra Technologies Holdings Company Ltd", - [3]byte{0, 18, 85}: "NetEffect Incorporated", - [3]byte{0, 18, 86}: "LG INFORMATION & COMM.", - [3]byte{0, 18, 87}: "LeapComm Communication Technologies Inc.", - [3]byte{0, 18, 88}: "Activis Polska", - [3]byte{0, 18, 89}: "THERMO ELECTRON KARLSRUHE", - [3]byte{0, 18, 90}: "Microsoft Corporation", - [3]byte{0, 18, 91}: "KAIMEI ELECTRONI", - [3]byte{0, 18, 92}: "Green Hills Software, Inc.", - [3]byte{0, 18, 93}: "CyberNet Inc.", - [3]byte{0, 18, 94}: "CAEN", - [3]byte{0, 18, 95}: "AWIND Inc.", - [3]byte{0, 18, 96}: "Stanton Magnetics,inc.", - [3]byte{0, 18, 97}: "Adaptix, Inc", - [3]byte{0, 18, 98}: "Nokia Danmark A/S", - [3]byte{0, 18, 99}: "Data Voice Technologies GmbH", - [3]byte{0, 18, 100}: "daum electronic gmbh", - [3]byte{0, 18, 101}: "Enerdyne Technologies, Inc.", - [3]byte{0, 18, 102}: "Swisscom Hospitality Services SA", - [3]byte{0, 18, 103}: "Panasonic Corporation", - [3]byte{0, 18, 104}: "IPS d.o.o.", - [3]byte{0, 18, 105}: "Value Electronics", - [3]byte{0, 18, 106}: "OPTOELECTRONICS Co., Ltd.", - [3]byte{0, 18, 107}: "Ascalade Communications Limited", - [3]byte{0, 18, 108}: "Visonic Technologies 1993 Ltd.", - [3]byte{0, 18, 109}: "University of California, Berkeley", - [3]byte{0, 18, 110}: "Seidel Elektronik GmbH Nfg.KG", - [3]byte{0, 18, 111}: "Rayson Technology Co., Ltd.", - [3]byte{0, 18, 112}: "NGES Denro Systems", - [3]byte{0, 18, 113}: "Measurement Computing Corp", - [3]byte{0, 18, 114}: "Redux Communications Ltd.", - [3]byte{0, 18, 115}: "Stoke Inc", - [3]byte{0, 18, 116}: "NIT lab", - [3]byte{0, 18, 117}: "Sentilla Corporation", - [3]byte{0, 18, 118}: "CG Power Systems Ireland Limited", - [3]byte{0, 18, 119}: "Korenix Technologies Co., Ltd.", - [3]byte{0, 18, 120}: "International Bar Code", - [3]byte{0, 18, 121}: "Hewlett Packard", - [3]byte{0, 18, 122}: "Sanyu Industry Co.,Ltd.", - [3]byte{0, 18, 123}: "VIA Networking Technologies, Inc.", - [3]byte{0, 18, 124}: "SWEGON AB", - [3]byte{0, 18, 125}: "MobileAria", - [3]byte{0, 18, 126}: "Digital Lifestyles Group, Inc.", - [3]byte{0, 18, 127}: "Cisco Systems, Inc", - [3]byte{0, 18, 128}: "Cisco Systems, Inc", - [3]byte{0, 18, 129}: "March Networks S.p.A.", - [3]byte{0, 18, 130}: "Qovia", - [3]byte{0, 18, 131}: "Nortel Networks", - [3]byte{0, 18, 132}: "Lab33 Srl", - [3]byte{0, 18, 133}: "Gizmondo Europe Ltd", - [3]byte{0, 18, 134}: "ENDEVCO CORP", - [3]byte{0, 18, 135}: "Digital Everywhere Unterhaltungselektronik GmbH", - [3]byte{0, 18, 136}: "2Wire Inc", - [3]byte{0, 18, 137}: "Advance Sterilization Products", - [3]byte{0, 18, 138}: "ARRIS Group, Inc.", - [3]byte{0, 18, 139}: "Sensory Networks Inc", - [3]byte{0, 18, 140}: "Woodward Governor", - [3]byte{0, 18, 141}: "STB Datenservice GmbH", - [3]byte{0, 18, 142}: "Q-Free ASA", - [3]byte{0, 18, 143}: "Montilio", - [3]byte{0, 18, 144}: "KYOWA Electric & Machinery Corp.", - [3]byte{0, 18, 145}: "KWS Computersysteme GmbH", - [3]byte{0, 18, 146}: "Griffin Technology", - [3]byte{0, 18, 147}: "GE Energy", - [3]byte{0, 18, 148}: "SUMITOMO ELECTRIC DEVICE INNOVATIONS, INC", - [3]byte{0, 18, 149}: "Aiware Inc.", - [3]byte{0, 18, 150}: "Addlogix", - [3]byte{0, 18, 151}: "O2Micro, Inc.", - [3]byte{0, 18, 152}: "MICO ELECTRIC(SHENZHEN) LIMITED", - [3]byte{0, 18, 153}: "Ktech Telecommunications Inc", - [3]byte{0, 18, 154}: "IRT Electronics Pty Ltd", - [3]byte{0, 18, 155}: "E2S Electronic Engineering Solutions, S.L.", - [3]byte{0, 18, 156}: "Yulinet", - [3]byte{0, 18, 157}: "First International Computer do Brasil", - [3]byte{0, 18, 158}: "Surf Communications Inc.", - [3]byte{0, 18, 159}: "RAE Systems", - [3]byte{0, 18, 160}: "NeoMeridian Sdn Bhd", - [3]byte{0, 18, 161}: "BluePacket Communications Co., Ltd.", - [3]byte{0, 18, 162}: "VITA", - [3]byte{0, 18, 163}: "Trust International B.V.", - [3]byte{0, 18, 164}: "ThingMagic, LLC", - [3]byte{0, 18, 165}: "Stargen, Inc.", - [3]byte{0, 18, 166}: "Dolby Australia", - [3]byte{0, 18, 167}: "ISR TECHNOLOGIES Inc", - [3]byte{0, 18, 168}: "intec GmbH", - [3]byte{0, 18, 169}: "3Com Ltd", - [3]byte{0, 18, 170}: "IEE, Inc.", - [3]byte{0, 18, 171}: "WiLife, Inc.", - [3]byte{0, 18, 172}: "ONTIMETEK INC.", - [3]byte{0, 18, 173}: "IDS GmbH", - [3]byte{0, 18, 174}: "HLS HARD-LINE Solutions Inc.", - [3]byte{0, 18, 175}: "ELPRO Technologies", - [3]byte{0, 18, 176}: "Efore Oyj (Plc)", - [3]byte{0, 18, 177}: "Dai Nippon Printing Co., Ltd", - [3]byte{0, 18, 178}: "AVOLITES LTD.", - [3]byte{0, 18, 179}: "Advance Wireless Technology Corp.", - [3]byte{0, 18, 180}: "Work Microwave GmbH", - [3]byte{0, 18, 181}: "Vialta, Inc.", - [3]byte{0, 18, 182}: "Santa Barbara Infrared, Inc.", - [3]byte{0, 18, 183}: "PTW Freiburg", - [3]byte{0, 18, 184}: "G2 Microsystems", - [3]byte{0, 18, 185}: "Fusion Digital Technology", - [3]byte{0, 18, 186}: "FSI Systems, Inc.", - [3]byte{0, 18, 187}: "Telecommunications Industry Association TR-41 Committee", - [3]byte{0, 18, 188}: "Echolab LLC", - [3]byte{0, 18, 189}: "Avantec Manufacturing Limited", - [3]byte{0, 18, 190}: "Astek Corporation", - [3]byte{0, 18, 191}: "Arcadyan Technology Corporation", - [3]byte{0, 18, 192}: "HotLava Systems, Inc.", - [3]byte{0, 18, 193}: "Check Point Software Technologies", - [3]byte{0, 18, 194}: "Apex Electronics Factory", - [3]byte{0, 18, 195}: "WIT S.A.", - [3]byte{0, 18, 196}: "Viseon, Inc.", - [3]byte{0, 18, 197}: "V-Show Technology (China) Co.,Ltd", - [3]byte{0, 18, 198}: "TGC America, Inc", - [3]byte{0, 18, 199}: "SECURAY Technologies Ltd.Co.", - [3]byte{0, 18, 200}: "Perfect tech", - [3]byte{0, 18, 201}: "ARRIS Group, Inc.", - [3]byte{0, 18, 202}: "Mechatronic Brick Aps", - [3]byte{0, 18, 203}: "CSS Inc.", - [3]byte{0, 18, 204}: "Bitatek CO., LTD", - [3]byte{0, 18, 205}: "ASEM SpA", - [3]byte{0, 18, 206}: "Advanced Cybernetics Group", - [3]byte{0, 18, 207}: "Accton Technology Corp", - [3]byte{0, 18, 208}: "Gossen-Metrawatt-GmbH", - [3]byte{0, 18, 209}: "Texas Instruments", - [3]byte{0, 18, 210}: "Texas Instruments", - [3]byte{0, 18, 211}: "Zetta Systems, Inc.", - [3]byte{0, 18, 212}: "Princeton Technology, Ltd", - [3]byte{0, 18, 213}: "Motion Reality Inc.", - [3]byte{0, 18, 214}: "Jiangsu Yitong High-Tech Co.,Ltd", - [3]byte{0, 18, 215}: "Invento Networks, Inc.", - [3]byte{0, 18, 216}: "International Games System Co., Ltd.", - [3]byte{0, 18, 217}: "Cisco Systems, Inc", - [3]byte{0, 18, 218}: "Cisco Systems, Inc", - [3]byte{0, 18, 219}: "ZIEHL industrie-elektronik GmbH + Co KG", - [3]byte{0, 18, 220}: "SunCorp Industrial Limited", - [3]byte{0, 18, 221}: "Shengqu Information Technology (Shanghai) Co., Ltd.", - [3]byte{0, 18, 222}: "Radio Components Sweden AB", - [3]byte{0, 18, 223}: "Novomatic AG", - [3]byte{0, 18, 224}: "Codan Limited", - [3]byte{0, 18, 225}: "Alliant Networks, Inc", - [3]byte{0, 18, 226}: "ALAXALA Networks Corporation", - [3]byte{0, 18, 227}: "Agat-RT, Ltd.", - [3]byte{0, 18, 228}: "ZIEHL industrie-electronik GmbH + Co KG", - [3]byte{0, 18, 229}: "Time America, Inc.", - [3]byte{0, 18, 230}: "SPECTEC COMPUTER CO., LTD.", - [3]byte{0, 18, 231}: "Projectek Networking Electronics Corp.", - [3]byte{0, 18, 232}: "Fraunhofer IMS", - [3]byte{0, 18, 233}: "Abbey Systems Ltd", - [3]byte{0, 18, 234}: "Trane", - [3]byte{0, 18, 235}: "PDH Solutions, LLC", - [3]byte{0, 18, 236}: "Movacolor b.v.", - [3]byte{0, 18, 237}: "AVG Advanced Technologies", - [3]byte{0, 18, 238}: "Sony Mobile Communications AB", - [3]byte{0, 18, 239}: "OneAccess SA", - [3]byte{0, 18, 240}: "Intel Corporate", - [3]byte{0, 18, 241}: "IFOTEC", - [3]byte{0, 18, 242}: "Brocade Communications Systems, Inc.", - [3]byte{0, 18, 243}: "connectBlue AB", - [3]byte{0, 18, 244}: "Belco International Co.,Ltd.", - [3]byte{0, 18, 245}: "Imarda New Zealand Limited", - [3]byte{0, 18, 246}: "MDK CO.,LTD.", - [3]byte{0, 18, 247}: "Xiamen Xinglian Electronics Co., Ltd.", - [3]byte{0, 18, 248}: "WNI Resources, LLC", - [3]byte{0, 18, 249}: "URYU SEISAKU, LTD.", - [3]byte{0, 18, 250}: "THX LTD", - [3]byte{0, 18, 251}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 18, 252}: "PLANET System Co.,LTD", - [3]byte{0, 18, 253}: "OPTIMUS IC S.A.", - [3]byte{0, 18, 254}: "Lenovo Mobile Communication Technology Ltd.", - [3]byte{0, 18, 255}: "Lely Industries N.V.", - [3]byte{0, 19, 0}: "IT-FACTORY, INC.", - [3]byte{0, 19, 1}: "IronGate S.L.", - [3]byte{0, 19, 2}: "Intel Corporate", - [3]byte{0, 19, 3}: "GateConnect", - [3]byte{0, 19, 4}: "Flaircomm Technologies Co. LTD", - [3]byte{0, 19, 5}: "Epicom, Inc.", - [3]byte{0, 19, 6}: "Always On Wireless", - [3]byte{0, 19, 7}: "Paravirtual Corporation", - [3]byte{0, 19, 8}: "Nuvera Fuel Cells", - [3]byte{0, 19, 9}: "Ocean Broadband Networks", - [3]byte{0, 19, 10}: "Nortel Networks", - [3]byte{0, 19, 11}: "Mextal B.V.", - [3]byte{0, 19, 12}: "HF System Corporation", - [3]byte{0, 19, 13}: "GALILEO AVIONICA", - [3]byte{0, 19, 14}: "Focusrite Audio Engineering Limited", - [3]byte{0, 19, 15}: "EGEMEN Bilgisayar Muh San ve Tic LTD STI", - [3]byte{0, 19, 16}: "Cisco-Linksys, LLC", - [3]byte{0, 19, 17}: "ARRIS Group, Inc.", - [3]byte{0, 19, 18}: "Amedia Networks Inc.", - [3]byte{0, 19, 19}: "GuangZhou Post & Telecom Equipment ltd", - [3]byte{0, 19, 20}: "Asiamajor Inc.", - [3]byte{0, 19, 21}: "Sony Interactive Entertainment Inc.", - [3]byte{0, 19, 22}: "L-S-B Broadcast Technologies GmbH", - [3]byte{0, 19, 23}: "GN Netcom A/S", - [3]byte{0, 19, 24}: "DGSTATION Co., Ltd.", - [3]byte{0, 19, 25}: "Cisco Systems, Inc", - [3]byte{0, 19, 26}: "Cisco Systems, Inc", - [3]byte{0, 19, 27}: "BeCell Innovations Corp.", - [3]byte{0, 19, 28}: "LiteTouch, Inc.", - [3]byte{0, 19, 29}: "Scanvaegt International A/S", - [3]byte{0, 19, 30}: "Peiker acustic GmbH & Co. KG", - [3]byte{0, 19, 31}: "NxtPhase T&D, Corp.", - [3]byte{0, 19, 32}: "Intel Corporate", - [3]byte{0, 19, 33}: "Hewlett Packard", - [3]byte{0, 19, 34}: "DAQ Electronics, Inc.", - [3]byte{0, 19, 35}: "Cap Co., Ltd.", - [3]byte{0, 19, 36}: "Schneider Electric Ultra Terminal", - [3]byte{0, 19, 37}: "Cortina Systems Inc", - [3]byte{0, 19, 38}: "ECM Systems Ltd", - [3]byte{0, 19, 39}: "Data Acquisitions limited", - [3]byte{0, 19, 40}: "Westech Korea Inc.,", - [3]byte{0, 19, 41}: "VSST Co., LTD", - [3]byte{0, 19, 42}: "Sitronics Telecom Solutions", - [3]byte{0, 19, 43}: "Phoenix Digital", - [3]byte{0, 19, 44}: "MAZ Brandenburg GmbH", - [3]byte{0, 19, 45}: "iWise Communications", - [3]byte{0, 19, 46}: "ITian Coporation", - [3]byte{0, 19, 47}: "Interactek", - [3]byte{0, 19, 48}: "EURO PROTECTION SURVEILLANCE", - [3]byte{0, 19, 49}: "CellPoint Connect", - [3]byte{0, 19, 50}: "Beijing Topsec Network Security Technology Co., Ltd.", - [3]byte{0, 19, 51}: "BaudTec Corporation", - [3]byte{0, 19, 52}: "Arkados, Inc.", - [3]byte{0, 19, 53}: "VS Industry Berhad", - [3]byte{0, 19, 54}: "Tianjin 712 Communication Broadcasting co., ltd.", - [3]byte{0, 19, 55}: "Orient Power Home Network Ltd.", - [3]byte{0, 19, 56}: "FRESENIUS-VIAL", - [3]byte{0, 19, 57}: "CCV Deutschland GmbH", - [3]byte{0, 19, 58}: "VadaTech Inc.", - [3]byte{0, 19, 59}: "Speed Dragon Multimedia Limited", - [3]byte{0, 19, 60}: "QUINTRON SYSTEMS INC.", - [3]byte{0, 19, 61}: "Micro Memory Curtiss Wright Co", - [3]byte{0, 19, 62}: "MetaSwitch", - [3]byte{0, 19, 63}: "Eppendorf Instrumente GmbH", - [3]byte{0, 19, 64}: "AD.EL s.r.l.", - [3]byte{0, 19, 65}: "Shandong New Beiyang Information Technology Co.,Ltd", - [3]byte{0, 19, 66}: "Vision Research, Inc.", - [3]byte{0, 19, 67}: "Matsushita Electronic Components (Europe) GmbH", - [3]byte{0, 19, 68}: "Fargo Electronics Inc.", - [3]byte{0, 19, 69}: "Eaton Corporation", - [3]byte{0, 19, 70}: "D-Link Corporation", - [3]byte{0, 19, 71}: "Red Lion Controls, LP", - [3]byte{0, 19, 72}: "Artila Electronics Co., Ltd.", - [3]byte{0, 19, 73}: "Zyxel Communications Corporation", - [3]byte{0, 19, 74}: "Engim, Inc.", - [3]byte{0, 19, 75}: "ToGoldenNet Technology Inc.", - [3]byte{0, 19, 76}: "YDT Technology International", - [3]byte{0, 19, 77}: "Inepro BV", - [3]byte{0, 19, 78}: "Valox Systems, Inc.", - [3]byte{0, 19, 79}: "Tranzeo Wireless Technologies Inc.", - [3]byte{0, 19, 80}: "Silver Spring Networks, Inc", - [3]byte{0, 19, 81}: "Niles Audio Corporation", - [3]byte{0, 19, 82}: "Naztec, Inc.", - [3]byte{0, 19, 83}: "HYDAC Filtertechnik GMBH", - [3]byte{0, 19, 84}: "Zcomax Technologies, Inc.", - [3]byte{0, 19, 85}: "TOMEN Cyber-business Solutions, Inc.", - [3]byte{0, 19, 86}: "FLIR Radiation Inc", - [3]byte{0, 19, 87}: "Soyal Technology Co., Ltd.", - [3]byte{0, 19, 88}: "Realm Systems, Inc.", - [3]byte{0, 19, 89}: "ProTelevision Technologies A/S", - [3]byte{0, 19, 90}: "Project T&E Limited", - [3]byte{0, 19, 91}: "PanelLink Cinema, LLC", - [3]byte{0, 19, 92}: "OnSite Systems, Inc.", - [3]byte{0, 19, 93}: "NTTPC Communications, Inc.", - [3]byte{0, 19, 94}: "EAB/RWI/K", - [3]byte{0, 19, 95}: "Cisco Systems, Inc", - [3]byte{0, 19, 96}: "Cisco Systems, Inc", - [3]byte{0, 19, 97}: "Biospace Co., Ltd.", - [3]byte{0, 19, 98}: "ShinHeung Precision Co., Ltd.", - [3]byte{0, 19, 99}: "Verascape, Inc.", - [3]byte{0, 19, 100}: "Paradigm Technology Inc..", - [3]byte{0, 19, 101}: "Nortel Networks", - [3]byte{0, 19, 102}: "Neturity Technologies Inc.", - [3]byte{0, 19, 103}: "Narayon. Co., Ltd.", - [3]byte{0, 19, 104}: "Saab Danmark A/S", - [3]byte{0, 19, 105}: "Honda Electron Co., LED.", - [3]byte{0, 19, 106}: "Hach Lange Sarl", - [3]byte{0, 19, 107}: "E-TEC", - [3]byte{0, 19, 108}: "TomTom", - [3]byte{0, 19, 109}: "Tentaculus AB", - [3]byte{0, 19, 110}: "Techmetro Corp.", - [3]byte{0, 19, 111}: "PacketMotion, Inc.", - [3]byte{0, 19, 112}: "Nokia Danmark A/S", - [3]byte{0, 19, 113}: "ARRIS Group, Inc.", - [3]byte{0, 19, 114}: "Dell Inc.", - [3]byte{0, 19, 115}: "BLwave Electronics Co., Ltd", - [3]byte{0, 19, 116}: "Atheros Communications, Inc.", - [3]byte{0, 19, 117}: "American Security Products Co.", - [3]byte{0, 19, 118}: "Tabor Electronics Ltd.", - [3]byte{0, 19, 119}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 19, 120}: "Qsan Technology, Inc.", - [3]byte{0, 19, 121}: "PONDER INFORMATION INDUSTRIES LTD.", - [3]byte{0, 19, 122}: "Netvox Technology Co., Ltd.", - [3]byte{0, 19, 123}: "Movon Corporation", - [3]byte{0, 19, 124}: "Kaicom co., Ltd.", - [3]byte{0, 19, 125}: "Dynalab, Inc.", - [3]byte{0, 19, 126}: "CorEdge Networks, Inc.", - [3]byte{0, 19, 127}: "Cisco Systems, Inc", - [3]byte{0, 19, 128}: "Cisco Systems, Inc", - [3]byte{0, 19, 129}: "CHIPS & Systems, Inc.", - [3]byte{0, 19, 130}: "Cetacea Networks Corporation", - [3]byte{0, 19, 131}: "Application Technologies and Engineering Research Laboratory", - [3]byte{0, 19, 132}: "Advanced Motion Controls", - [3]byte{0, 19, 133}: "Add-On Technology Co., LTD.", - [3]byte{0, 19, 134}: "ABB Inc./Totalflow", - [3]byte{0, 19, 135}: "27M Technologies AB", - [3]byte{0, 19, 136}: "WiMedia Alliance", - [3]byte{0, 19, 137}: "Redes de Telefonía Móvil S.A.", - [3]byte{0, 19, 138}: "QINGDAO GOERTEK ELECTRONICS CO.,LTD.", - [3]byte{0, 19, 139}: "Phantom Technologies LLC", - [3]byte{0, 19, 140}: "Kumyoung.Co.Ltd", - [3]byte{0, 19, 141}: "Kinghold", - [3]byte{0, 19, 142}: "FOAB Elektronik AB", - [3]byte{0, 19, 143}: "Asiarock Technology Limited", - [3]byte{0, 19, 144}: "Termtek Computer Co., Ltd", - [3]byte{0, 19, 145}: "OUEN CO.,LTD.", - [3]byte{0, 19, 146}: "Ruckus Wireless", - [3]byte{0, 19, 147}: "Panta Systems, Inc.", - [3]byte{0, 19, 148}: "Infohand Co.,Ltd", - [3]byte{0, 19, 149}: "congatec AG", - [3]byte{0, 19, 150}: "Acbel Polytech Inc.", - [3]byte{0, 19, 151}: "Oracle Corporation", - [3]byte{0, 19, 152}: "TrafficSim Co.,Ltd", - [3]byte{0, 19, 153}: "STAC Corporation.", - [3]byte{0, 19, 154}: "K-ubique ID Corp.", - [3]byte{0, 19, 155}: "ioIMAGE Ltd.", - [3]byte{0, 19, 156}: "Exavera Technologies, Inc.", - [3]byte{0, 19, 157}: "MaxLinear Hispania S.L.U.", - [3]byte{0, 19, 158}: "Ciara Technologies Inc.", - [3]byte{0, 19, 159}: "Electronics Design Services, Co., Ltd.", - [3]byte{0, 19, 160}: "ALGOSYSTEM Co., Ltd.", - [3]byte{0, 19, 161}: "Crow Electronic Engeneering", - [3]byte{0, 19, 162}: "MaxStream, Inc", - [3]byte{0, 19, 163}: "Siemens Com CPE Devices", - [3]byte{0, 19, 164}: "KeyEye Communications", - [3]byte{0, 19, 165}: "General Solutions, LTD.", - [3]byte{0, 19, 166}: "Extricom Ltd", - [3]byte{0, 19, 167}: "BATTELLE MEMORIAL INSTITUTE", - [3]byte{0, 19, 168}: "Tanisys Technology", - [3]byte{0, 19, 169}: "Sony Corporation", - [3]byte{0, 19, 170}: "ALS & TEC Ltd.", - [3]byte{0, 19, 171}: "Telemotive AG", - [3]byte{0, 19, 172}: "Sunmyung Electronics Co., LTD", - [3]byte{0, 19, 173}: "Sendo Ltd", - [3]byte{0, 19, 174}: "Radiance Technologies, Inc.", - [3]byte{0, 19, 175}: "NUMA Technology,Inc.", - [3]byte{0, 19, 176}: "Jablotron", - [3]byte{0, 19, 177}: "Intelligent Control Systems (Asia) Pte Ltd", - [3]byte{0, 19, 178}: "Carallon Limited", - [3]byte{0, 19, 179}: "Ecom Communications Technology Co., Ltd.", - [3]byte{0, 19, 180}: "Appear TV", - [3]byte{0, 19, 181}: "Wavesat", - [3]byte{0, 19, 182}: "Sling Media, Inc.", - [3]byte{0, 19, 183}: "Scantech ID", - [3]byte{0, 19, 184}: "RyCo Electronic Systems Limited", - [3]byte{0, 19, 185}: "BM SPA", - [3]byte{0, 19, 186}: "ReadyLinks Inc", - [3]byte{0, 19, 187}: "Smartvue Corporation", - [3]byte{0, 19, 188}: "Artimi Ltd", - [3]byte{0, 19, 189}: "HYMATOM SA", - [3]byte{0, 19, 190}: "Virtual Conexions", - [3]byte{0, 19, 191}: "Media System Planning Corp.", - [3]byte{0, 19, 192}: "Trix Tecnologia Ltda.", - [3]byte{0, 19, 193}: "Asoka USA Corporation", - [3]byte{0, 19, 194}: "WACOM Co.,Ltd", - [3]byte{0, 19, 195}: "Cisco Systems, Inc", - [3]byte{0, 19, 196}: "Cisco Systems, Inc", - [3]byte{0, 19, 197}: "LIGHTRON FIBER-OPTIC DEVICES INC.", - [3]byte{0, 19, 198}: "OpenGear, Inc", - [3]byte{0, 19, 199}: "IONOS Co.,Ltd.", - [3]byte{0, 19, 200}: "ADB Broadband Italia", - [3]byte{0, 19, 201}: "Beyond Achieve Enterprises Ltd.", - [3]byte{0, 19, 202}: "Pico Digital", - [3]byte{0, 19, 203}: "Zenitel Norway AS", - [3]byte{0, 19, 204}: "Tall Maple Systems", - [3]byte{0, 19, 205}: "MTI co. LTD", - [3]byte{0, 19, 206}: "Intel Corporate", - [3]byte{0, 19, 207}: "4Access Communications", - [3]byte{0, 19, 208}: "t+ Medical Ltd", - [3]byte{0, 19, 209}: "KIRK telecom A/S", - [3]byte{0, 19, 210}: "PAGE IBERICA, S.A.", - [3]byte{0, 19, 211}: "MICRO-STAR INTERNATIONAL CO., LTD.", - [3]byte{0, 19, 212}: "ASUSTek COMPUTER INC.", - [3]byte{0, 19, 213}: "RuggedCom", - [3]byte{0, 19, 214}: "TII NETWORK TECHNOLOGIES, INC.", - [3]byte{0, 19, 215}: "SPIDCOM Technologies SA", - [3]byte{0, 19, 216}: "Princeton Instruments", - [3]byte{0, 19, 217}: "Matrix Product Development, Inc.", - [3]byte{0, 19, 218}: "Diskware Co., Ltd", - [3]byte{0, 19, 219}: "SHOEI Electric Co.,Ltd", - [3]byte{0, 19, 220}: "IBTEK INC.", - [3]byte{0, 19, 221}: "Abbott Diagnostics", - [3]byte{0, 19, 222}: "Adapt4, LLC", - [3]byte{0, 19, 223}: "Ryvor Corp.", - [3]byte{0, 19, 224}: "Murata Manufacturing Co., Ltd.", - [3]byte{0, 19, 225}: "Iprobe AB", - [3]byte{0, 19, 226}: "GeoVision Inc.", - [3]byte{0, 19, 227}: "CoVi Technologies, Inc.", - [3]byte{0, 19, 228}: "YANGJAE SYSTEMS CORP.", - [3]byte{0, 19, 229}: "TENOSYS, INC.", - [3]byte{0, 19, 230}: "Technolution", - [3]byte{0, 19, 231}: "Halcro", - [3]byte{0, 19, 232}: "Intel Corporate", - [3]byte{0, 19, 233}: "VeriWave, Inc.", - [3]byte{0, 19, 234}: "Kamstrup A/S", - [3]byte{0, 19, 235}: "Sysmaster Corporation", - [3]byte{0, 19, 236}: "Netsnapper Technologies SARL", - [3]byte{0, 19, 237}: "PSIA", - [3]byte{0, 19, 238}: "JBX Designs Inc.", - [3]byte{0, 19, 239}: "Kingjon Digital Technology Co.,Ltd", - [3]byte{0, 19, 240}: "Wavefront Semiconductor", - [3]byte{0, 19, 241}: "AMOD Technology Co., Ltd.", - [3]byte{0, 19, 242}: "Klas Ltd", - [3]byte{0, 19, 243}: "Giga-byte Communications Inc.", - [3]byte{0, 19, 244}: "Psitek (Pty) Ltd", - [3]byte{0, 19, 245}: "Akimbi Systems", - [3]byte{0, 19, 246}: "Cintech", - [3]byte{0, 19, 247}: "SMC Networks, Inc.", - [3]byte{0, 19, 248}: "Dex Security Solutions", - [3]byte{0, 19, 249}: "Cavera Systems", - [3]byte{0, 19, 250}: "LifeSize Communications, Inc", - [3]byte{0, 19, 251}: "RKC INSTRUMENT INC.", - [3]byte{0, 19, 252}: "SiCortex, Inc", - [3]byte{0, 19, 253}: "Nokia Danmark A/S", - [3]byte{0, 19, 254}: "GRANDTEC ELECTRONIC CORP.", - [3]byte{0, 19, 255}: "Dage-MTI of MC, Inc.", - [3]byte{0, 20, 0}: "MINERVA KOREA CO., LTD", - [3]byte{0, 20, 1}: "Rivertree Networks Corp.", - [3]byte{0, 20, 2}: "kk-electronic a/s", - [3]byte{0, 20, 3}: "Renasis, LLC", - [3]byte{0, 20, 4}: "ARRIS Group, Inc.", - [3]byte{0, 20, 5}: "OpenIB, Inc.", - [3]byte{0, 20, 6}: "Go Networks", - [3]byte{0, 20, 7}: "Sperian Protection Instrumentation", - [3]byte{0, 20, 8}: "Eka Systems Inc.", - [3]byte{0, 20, 9}: "MAGNETI MARELLI S.E. S.p.A.", - [3]byte{0, 20, 10}: "WEPIO Co., Ltd.", - [3]byte{0, 20, 11}: "FIRST INTERNATIONAL COMPUTER, INC.", - [3]byte{0, 20, 12}: "GKB CCTV CO., LTD.", - [3]byte{0, 20, 13}: "Nortel Networks", - [3]byte{0, 20, 14}: "Nortel Networks", - [3]byte{0, 20, 15}: "Federal State Unitary Enterprise Leningrad R&D Institute of", - [3]byte{0, 20, 16}: "Suzhou Keda Technology CO.,Ltd", - [3]byte{0, 20, 17}: "Deutschmann Automation GmbH & Co. KG", - [3]byte{0, 20, 18}: "S-TEC electronics AG", - [3]byte{0, 20, 19}: "Trebing & Himstedt Prozeßautomation GmbH & Co. KG", - [3]byte{0, 20, 20}: "Jumpnode Systems LLC.", - [3]byte{0, 20, 21}: "Intec Automation inc.", - [3]byte{0, 20, 22}: "Scosche Industries, Inc.", - [3]byte{0, 20, 23}: "RSE Informations Technologie GmbH", - [3]byte{0, 20, 24}: "C4Line", - [3]byte{0, 20, 25}: "SIDSA", - [3]byte{0, 20, 26}: "DEICY CORPORATION", - [3]byte{0, 20, 27}: "Cisco Systems, Inc", - [3]byte{0, 20, 28}: "Cisco Systems, Inc", - [3]byte{0, 20, 29}: "LTi DRIVES GmbH", - [3]byte{0, 20, 30}: "P.A. Semi, Inc.", - [3]byte{0, 20, 31}: "SunKwang Electronics Co., Ltd", - [3]byte{0, 20, 32}: "G-Links networking company", - [3]byte{0, 20, 33}: "Total Wireless Technologies Pte. Ltd.", - [3]byte{0, 20, 34}: "Dell Inc.", - [3]byte{0, 20, 35}: "J-S Co. NEUROCOM", - [3]byte{0, 20, 36}: "Merry Electrics CO., LTD.", - [3]byte{0, 20, 37}: "Galactic Computing Corp.", - [3]byte{0, 20, 38}: "NL Technology", - [3]byte{0, 20, 39}: "JazzMutant", - [3]byte{0, 20, 40}: "Vocollect Inc", - [3]byte{0, 20, 41}: "V Center Technologies Co., Ltd.", - [3]byte{0, 20, 42}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{0, 20, 43}: "Edata Communication Inc.", - [3]byte{0, 20, 44}: "Koncept International, Inc.", - [3]byte{0, 20, 45}: "Toradex AG", - [3]byte{0, 20, 46}: "77 Elektronika Kft.", - [3]byte{0, 20, 47}: "Savvius", - [3]byte{0, 20, 48}: "ViPowER, Inc", - [3]byte{0, 20, 49}: "PDL Electronics Ltd", - [3]byte{0, 20, 50}: "Tarallax Wireless, Inc.", - [3]byte{0, 20, 51}: "Empower Technologies(Canada) Inc.", - [3]byte{0, 20, 52}: "Keri Systems, Inc", - [3]byte{0, 20, 53}: "CityCom Corp.", - [3]byte{0, 20, 54}: "Qwerty Elektronik AB", - [3]byte{0, 20, 55}: "GSTeletech Co.,Ltd.", - [3]byte{0, 20, 56}: "Hewlett Packard Enterprise", - [3]byte{0, 20, 57}: "Blonder Tongue Laboratories, Inc", - [3]byte{0, 20, 58}: "RAYTALK INTERNATIONAL SRL", - [3]byte{0, 20, 59}: "Sensovation AG", - [3]byte{0, 20, 60}: "Rheinmetall Canada Inc.", - [3]byte{0, 20, 61}: "Aevoe Inc.", - [3]byte{0, 20, 62}: "AirLink Communications, Inc.", - [3]byte{0, 20, 63}: "Hotway Technology Corporation", - [3]byte{0, 20, 64}: "ATOMIC Corporation", - [3]byte{0, 20, 65}: "Innovation Sound Technology Co., LTD.", - [3]byte{0, 20, 66}: "ATTO CORPORATION", - [3]byte{0, 20, 67}: "Consultronics Europe Ltd", - [3]byte{0, 20, 68}: "Grundfos Holding", - [3]byte{0, 20, 69}: "Telefon-Gradnja d.o.o.", - [3]byte{0, 20, 70}: "SuperVision Solutions LLC", - [3]byte{0, 20, 71}: "BOAZ Inc.", - [3]byte{0, 20, 72}: "Inventec Multimedia & Telecom Corporation", - [3]byte{0, 20, 73}: "Sichuan Changhong Electric Ltd.", - [3]byte{0, 20, 74}: "Taiwan Thick-Film Ind. Corp.", - [3]byte{0, 20, 75}: "Hifn, Inc.", - [3]byte{0, 20, 76}: "General Meters Corp.", - [3]byte{0, 20, 77}: "Intelligent Systems", - [3]byte{0, 20, 78}: "SRISA", - [3]byte{0, 20, 79}: "Oracle Corporation", - [3]byte{0, 20, 80}: "Heim Systems GmbH", - [3]byte{0, 20, 81}: "Apple, Inc.", - [3]byte{0, 20, 82}: "CALCULEX,INC.", - [3]byte{0, 20, 83}: "ADVANTECH TECHNOLOGIES CO.,LTD", - [3]byte{0, 20, 84}: "Symwave", - [3]byte{0, 20, 85}: "Coder Electronics Corporation", - [3]byte{0, 20, 86}: "Edge Products", - [3]byte{0, 20, 87}: "T-VIPS AS", - [3]byte{0, 20, 88}: "HS Automatic ApS", - [3]byte{0, 20, 89}: "Moram Co., Ltd.", - [3]byte{0, 20, 90}: "Neratec Solutions AG", - [3]byte{0, 20, 91}: "SeekerNet Inc.", - [3]byte{0, 20, 92}: "Intronics B.V.", - [3]byte{0, 20, 93}: "WJ Communications, Inc.", - [3]byte{0, 20, 94}: "IBM Corp", - [3]byte{0, 20, 95}: "ADITEC CO. LTD", - [3]byte{0, 20, 96}: "Kyocera Wireless Corp.", - [3]byte{0, 20, 97}: "CORONA CORPORATION", - [3]byte{0, 20, 98}: "Digiwell Technology, inc", - [3]byte{0, 20, 99}: "IDCS N.V.", - [3]byte{0, 20, 100}: "Cryptosoft", - [3]byte{0, 20, 101}: "Novo Nordisk A/S", - [3]byte{0, 20, 102}: "Kleinhenz Elektronik GmbH", - [3]byte{0, 20, 103}: "ArrowSpan Inc.", - [3]byte{0, 20, 104}: "CelPlan International, Inc.", - [3]byte{0, 20, 105}: "Cisco Systems, Inc", - [3]byte{0, 20, 106}: "Cisco Systems, Inc", - [3]byte{0, 20, 107}: "Anagran, Inc.", - [3]byte{0, 20, 108}: "NETGEAR", - [3]byte{0, 20, 109}: "RF Technologies", - [3]byte{0, 20, 110}: "H. Stoll GmbH & Co. KG", - [3]byte{0, 20, 111}: "Kohler Co", - [3]byte{0, 20, 112}: "Prokom Software SA", - [3]byte{0, 20, 113}: "Eastern Asia Technology Limited", - [3]byte{0, 20, 114}: "China Broadband Wireless IP Standard Group", - [3]byte{0, 20, 115}: "Bookham Inc", - [3]byte{0, 20, 116}: "K40 Electronics", - [3]byte{0, 20, 117}: "Wiline Networks, Inc.", - [3]byte{0, 20, 118}: "MultiCom Industries Limited", - [3]byte{0, 20, 119}: "Nertec Inc.", - [3]byte{0, 20, 120}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{0, 20, 121}: "NEC Magnus Communications,Ltd.", - [3]byte{0, 20, 122}: "Eubus GmbH", - [3]byte{0, 20, 123}: "Iteris, Inc.", - [3]byte{0, 20, 124}: "3Com Ltd", - [3]byte{0, 20, 125}: "Aeon Digital International", - [3]byte{0, 20, 126}: "InnerWireless", - [3]byte{0, 20, 127}: "Thomson Telecom Belgium", - [3]byte{0, 20, 128}: "Hitachi-LG Data Storage Korea, Inc", - [3]byte{0, 20, 129}: "Multilink Inc", - [3]byte{0, 20, 130}: "Aurora Networks", - [3]byte{0, 20, 131}: "eXS Inc.", - [3]byte{0, 20, 132}: "Cermate Technologies Inc.", - [3]byte{0, 20, 133}: "Giga-Byte", - [3]byte{0, 20, 134}: "Echo Digital Audio Corporation", - [3]byte{0, 20, 135}: "American Technology Integrators", - [3]byte{0, 20, 136}: "Akorri", - [3]byte{0, 20, 137}: "B15402100 - JANDEI, S.L.", - [3]byte{0, 20, 138}: "Elin Ebg Traction Gmbh", - [3]byte{0, 20, 139}: "Globo Electronic GmbH & Co. KG", - [3]byte{0, 20, 140}: "General Dynamics Mission Systems", - [3]byte{0, 20, 141}: "Cubic Defense Simulation Systems", - [3]byte{0, 20, 142}: "Tele Power Inc.", - [3]byte{0, 20, 143}: "Protronic (Far East) Ltd.", - [3]byte{0, 20, 144}: "ASP Corporation", - [3]byte{0, 20, 145}: "Daniels Electronics Ltd. dbo Codan Rado Communications", - [3]byte{0, 20, 146}: "Liteon, Mobile Media Solution SBU", - [3]byte{0, 20, 147}: "Systimax Solutions", - [3]byte{0, 20, 148}: "ESU AG", - [3]byte{0, 20, 149}: "2Wire Inc", - [3]byte{0, 20, 150}: "Phonic Corp.", - [3]byte{0, 20, 151}: "ZHIYUAN Eletronics co.,ltd.", - [3]byte{0, 20, 152}: "Viking Design Technology", - [3]byte{0, 20, 153}: "Helicomm Inc", - [3]byte{0, 20, 154}: "ARRIS Group, Inc.", - [3]byte{0, 20, 155}: "Nokota Communications, LLC", - [3]byte{0, 20, 156}: "HF Company", - [3]byte{0, 20, 157}: "Sound ID Inc.", - [3]byte{0, 20, 158}: "UbONE Co., Ltd", - [3]byte{0, 20, 159}: "System and Chips, Inc.", - [3]byte{0, 20, 160}: "Accsense, Inc.", - [3]byte{0, 20, 161}: "Synchronous Communication Corp", - [3]byte{0, 20, 162}: "Core Micro Systems Inc.", - [3]byte{0, 20, 163}: "Vitelec BV", - [3]byte{0, 20, 164}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 20, 165}: "Gemtek Technology Co., Ltd.", - [3]byte{0, 20, 166}: "Teranetics, Inc.", - [3]byte{0, 20, 167}: "Nokia Danmark A/S", - [3]byte{0, 20, 168}: "Cisco Systems, Inc", - [3]byte{0, 20, 169}: "Cisco Systems, Inc", - [3]byte{0, 20, 170}: "Ashly Audio, Inc.", - [3]byte{0, 20, 171}: "Senhai Electronic Technology Co., Ltd.", - [3]byte{0, 20, 172}: "Bountiful WiFi", - [3]byte{0, 20, 173}: "Gassner Wiege- und Meßtechnik GmbH", - [3]byte{0, 20, 174}: "Wizlogics Co., Ltd.", - [3]byte{0, 20, 175}: "Datasym POS Inc.", - [3]byte{0, 20, 176}: "Naeil Community", - [3]byte{0, 20, 177}: "Axell Wireless Limited", - [3]byte{0, 20, 178}: "mCubelogics Corporation", - [3]byte{0, 20, 179}: "CoreStar International Corp", - [3]byte{0, 20, 180}: "General Dynamics United Kingdom Ltd", - [3]byte{0, 20, 181}: "PHYSIOMETRIX,INC", - [3]byte{0, 20, 182}: "Enswer Technology Inc.", - [3]byte{0, 20, 183}: "AR Infotek Inc.", - [3]byte{0, 20, 184}: "Hill-Rom", - [3]byte{0, 20, 185}: "MSTAR SEMICONDUCTOR", - [3]byte{0, 20, 186}: "Carvers SA de CV", - [3]byte{0, 20, 187}: "Open Interface North America", - [3]byte{0, 20, 188}: "SYNECTIC TELECOM EXPORTS PVT. LTD.", - [3]byte{0, 20, 189}: "incNETWORKS, Inc", - [3]byte{0, 20, 190}: "Wink communication technology CO.LTD", - [3]byte{0, 20, 191}: "Cisco-Linksys, LLC", - [3]byte{0, 20, 192}: "Symstream Technology Group Ltd", - [3]byte{0, 20, 193}: "U.S. Robotics Corporation", - [3]byte{0, 20, 194}: "Hewlett Packard", - [3]byte{0, 20, 195}: "Seagate Technology", - [3]byte{0, 20, 196}: "Vitelcom Mobile Technology", - [3]byte{0, 20, 197}: "Alive Technologies Pty Ltd", - [3]byte{0, 20, 198}: "Quixant Ltd", - [3]byte{0, 20, 199}: "Nortel Networks", - [3]byte{0, 20, 200}: "Contemporary Research Corp", - [3]byte{0, 20, 201}: "Brocade Communications Systems, Inc.", - [3]byte{0, 20, 202}: "Key Radio Systems Limited", - [3]byte{0, 20, 203}: "LifeSync Corporation", - [3]byte{0, 20, 204}: "Zetec, Inc.", - [3]byte{0, 20, 205}: "DigitalZone Co., Ltd.", - [3]byte{0, 20, 206}: "NF CORPORATION", - [3]byte{0, 20, 207}: "INVISIO Communications", - [3]byte{0, 20, 208}: "BTI Systems Inc.", - [3]byte{0, 20, 209}: "TRENDnet, Inc.", - [3]byte{0, 20, 210}: "Kyuden Technosystems Corporation", - [3]byte{0, 20, 211}: "SEPSA", - [3]byte{0, 20, 212}: "K Technology Corporation", - [3]byte{0, 20, 213}: "Datang Telecom Technology CO. , LCD,Optical Communication Br", - [3]byte{0, 20, 214}: "Jeongmin Electronics Co.,Ltd.", - [3]byte{0, 20, 215}: "Datastore Technology Corp", - [3]byte{0, 20, 216}: "bio-logic SA", - [3]byte{0, 20, 217}: "IP Fabrics, Inc.", - [3]byte{0, 20, 218}: "Huntleigh Healthcare", - [3]byte{0, 20, 219}: "Elma Trenew Electronic GmbH", - [3]byte{0, 20, 220}: "Communication System Design & Manufacturing (CSDM)", - [3]byte{0, 20, 221}: "Covergence Inc.", - [3]byte{0, 20, 222}: "Sage Instruments Inc.", - [3]byte{0, 20, 223}: "HI-P Tech Corporation", - [3]byte{0, 20, 224}: "LET'S Corporation", - [3]byte{0, 20, 225}: "Data Display AG", - [3]byte{0, 20, 226}: "datacom systems inc.", - [3]byte{0, 20, 227}: "mm-lab GmbH", - [3]byte{0, 20, 228}: "infinias, LLC", - [3]byte{0, 20, 229}: "Alticast", - [3]byte{0, 20, 230}: "AIM Infrarotmodule GmbH", - [3]byte{0, 20, 231}: "Stolinx,. Inc", - [3]byte{0, 20, 232}: "ARRIS Group, Inc.", - [3]byte{0, 20, 233}: "Nortech International", - [3]byte{0, 20, 234}: "S Digm Inc. (Safe Paradigm Inc.)", - [3]byte{0, 20, 235}: "AwarePoint Corporation", - [3]byte{0, 20, 236}: "Acro Telecom", - [3]byte{0, 20, 237}: "Airak, Inc.", - [3]byte{0, 20, 238}: "Western Digital Technologies, Inc.", - [3]byte{0, 20, 239}: "TZero Technologies, Inc.", - [3]byte{0, 20, 240}: "Business Security OL AB", - [3]byte{0, 20, 241}: "Cisco Systems, Inc", - [3]byte{0, 20, 242}: "Cisco Systems, Inc", - [3]byte{0, 20, 243}: "ViXS Systems Inc", - [3]byte{0, 20, 244}: "DekTec Digital Video B.V.", - [3]byte{0, 20, 245}: "OSI Security Devices", - [3]byte{0, 20, 246}: "Juniper Networks", - [3]byte{0, 20, 247}: "CREVIS Co., LTD", - [3]byte{0, 20, 248}: "Scientific Atlanta", - [3]byte{0, 20, 249}: "Vantage Controls", - [3]byte{0, 20, 250}: "AsGa S.A.", - [3]byte{0, 20, 251}: "Technical Solutions Inc.", - [3]byte{0, 20, 252}: "Extandon, Inc.", - [3]byte{0, 20, 253}: "Thecus Technology Corp.", - [3]byte{0, 20, 254}: "Artech Electronics", - [3]byte{0, 20, 255}: "Precise Automation, Inc.", - [3]byte{0, 21, 0}: "Intel Corporate", - [3]byte{0, 21, 1}: "LexBox", - [3]byte{0, 21, 2}: "BETA tech", - [3]byte{0, 21, 3}: "PROFIcomms s.r.o.", - [3]byte{0, 21, 4}: "GAME PLUS CO., LTD.", - [3]byte{0, 21, 5}: "Actiontec Electronics, Inc", - [3]byte{0, 21, 6}: "Neo Photonics", - [3]byte{0, 21, 7}: "Renaissance Learning Inc", - [3]byte{0, 21, 8}: "Global Target Enterprise Inc", - [3]byte{0, 21, 9}: "Plus Technology Co., Ltd", - [3]byte{0, 21, 10}: "Sonoa Systems, Inc", - [3]byte{0, 21, 11}: "SAGE INFOTECH LTD.", - [3]byte{0, 21, 12}: "AVM GmbH", - [3]byte{0, 21, 13}: "Hoana Medical, Inc.", - [3]byte{0, 21, 14}: "OPENBRAIN TECHNOLOGIES CO., LTD.", - [3]byte{0, 21, 15}: "mingjong", - [3]byte{0, 21, 16}: "Techsphere Co., Ltd", - [3]byte{0, 21, 17}: "Data Center Systems", - [3]byte{0, 21, 18}: "Zurich University of Applied Sciences", - [3]byte{0, 21, 19}: "EFS sas", - [3]byte{0, 21, 20}: "Hu Zhou NAVA Networks&Electronics Ltd.", - [3]byte{0, 21, 21}: "Leipold+Co.GmbH", - [3]byte{0, 21, 22}: "URIEL SYSTEMS INC.", - [3]byte{0, 21, 23}: "Intel Corporate", - [3]byte{0, 21, 24}: "Shenzhen 10MOONS Technology Development CO.,Ltd", - [3]byte{0, 21, 25}: "StoreAge Networking Technologies", - [3]byte{0, 21, 26}: "Hunter Engineering Company", - [3]byte{0, 21, 27}: "Isilon Systems Inc.", - [3]byte{0, 21, 28}: "LENECO", - [3]byte{0, 21, 29}: "M2I CORPORATION", - [3]byte{0, 21, 30}: "Ethernet Powerlink Standardization Group (EPSG)", - [3]byte{0, 21, 31}: "Multivision Intelligent Surveillance (Hong Kong) Ltd", - [3]byte{0, 21, 32}: "Radiocrafts AS", - [3]byte{0, 21, 33}: "Horoquartz", - [3]byte{0, 21, 34}: "Dea Security", - [3]byte{0, 21, 35}: "Meteor Communications Corporation", - [3]byte{0, 21, 36}: "Numatics, Inc.", - [3]byte{0, 21, 37}: "Chamberlain Access Solutions", - [3]byte{0, 21, 38}: "Remote Technologies Inc", - [3]byte{0, 21, 39}: "Balboa Instruments", - [3]byte{0, 21, 40}: "Beacon Medical Products LLC d.b.a. BeaconMedaes", - [3]byte{0, 21, 41}: "N3 Corporation", - [3]byte{0, 21, 42}: "Nokia Corporation", - [3]byte{0, 21, 43}: "Cisco Systems, Inc", - [3]byte{0, 21, 44}: "Cisco Systems, Inc", - [3]byte{0, 21, 45}: "TenX Networks, LLC", - [3]byte{0, 21, 46}: "PacketHop, Inc.", - [3]byte{0, 21, 47}: "ARRIS Group, Inc.", - [3]byte{0, 21, 48}: "Dell EMC", - [3]byte{0, 21, 49}: "KOCOM", - [3]byte{0, 21, 50}: "Consumer Technologies Group, LLC", - [3]byte{0, 21, 51}: "NADAM.CO.,LTD", - [3]byte{0, 21, 52}: "A Beltrónica-Companhia de Comunicações, Lda", - [3]byte{0, 21, 53}: "OTE Spa", - [3]byte{0, 21, 54}: "Powertech co.,Ltd", - [3]byte{0, 21, 55}: "Ventus Networks", - [3]byte{0, 21, 56}: "RFID, Inc.", - [3]byte{0, 21, 57}: "Technodrive srl", - [3]byte{0, 21, 58}: "Shenzhen Syscan Technology Co.,Ltd.", - [3]byte{0, 21, 59}: "EMH metering GmbH & Co. KG", - [3]byte{0, 21, 60}: "Kprotech Co., Ltd.", - [3]byte{0, 21, 61}: "ELIM PRODUCT CO.", - [3]byte{0, 21, 62}: "Q-Matic Sweden AB", - [3]byte{0, 21, 63}: "Alcatel Alenia Space Italia", - [3]byte{0, 21, 64}: "Nortel Networks", - [3]byte{0, 21, 65}: "StrataLight Communications, Inc.", - [3]byte{0, 21, 66}: "MICROHARD S.R.L.", - [3]byte{0, 21, 67}: "Aberdeen Test Center", - [3]byte{0, 21, 68}: "coM.s.a.t. AG", - [3]byte{0, 21, 69}: "SEECODE Co., Ltd.", - [3]byte{0, 21, 70}: "ITG Worldwide Sdn Bhd", - [3]byte{0, 21, 71}: "AiZen Solutions Inc.", - [3]byte{0, 21, 72}: "CUBE TECHNOLOGIES", - [3]byte{0, 21, 73}: "Dixtal Biomedica Ind. Com. Ltda", - [3]byte{0, 21, 74}: "WANSHIH ELECTRONIC CO., LTD", - [3]byte{0, 21, 75}: "Wonde Proud Technology Co., Ltd", - [3]byte{0, 21, 76}: "Saunders Electronics", - [3]byte{0, 21, 77}: "Netronome Systems, Inc.", - [3]byte{0, 21, 78}: "IEC", - [3]byte{0, 21, 79}: "one RF Technology", - [3]byte{0, 21, 80}: "Nits Technology Inc", - [3]byte{0, 21, 81}: "RadioPulse Inc.", - [3]byte{0, 21, 82}: "Wi-Gear Inc.", - [3]byte{0, 21, 83}: "Cytyc Corporation", - [3]byte{0, 21, 84}: "Atalum Wireless S.A.", - [3]byte{0, 21, 85}: "DFM GmbH", - [3]byte{0, 21, 86}: "Sagemcom Broadband SAS", - [3]byte{0, 21, 87}: "Olivetti", - [3]byte{0, 21, 88}: "FOXCONN", - [3]byte{0, 21, 89}: "Securaplane Technologies, Inc.", - [3]byte{0, 21, 90}: "DAINIPPON PHARMACEUTICAL CO., LTD.", - [3]byte{0, 21, 91}: "Sampo Corporation", - [3]byte{0, 21, 92}: "Dresser Wayne", - [3]byte{0, 21, 93}: "Microsoft Corporation", - [3]byte{0, 21, 94}: "Morgan Stanley", - [3]byte{0, 21, 95}: "GreenPeak Technologies", - [3]byte{0, 21, 96}: "Hewlett Packard", - [3]byte{0, 21, 97}: "JJPlus Corporation", - [3]byte{0, 21, 98}: "Cisco Systems, Inc", - [3]byte{0, 21, 99}: "Cisco Systems, Inc", - [3]byte{0, 21, 100}: "BEHRINGER Spezielle Studiotechnik GmbH", - [3]byte{0, 21, 101}: "XIAMEN YEALINK NETWORK TECHNOLOGY CO.,LTD", - [3]byte{0, 21, 102}: "A-First Technology Co., Ltd.", - [3]byte{0, 21, 103}: "RADWIN Inc.", - [3]byte{0, 21, 104}: "Dilithium Networks", - [3]byte{0, 21, 105}: "PECO II, Inc.", - [3]byte{0, 21, 106}: "DG2L Technologies Pvt. Ltd.", - [3]byte{0, 21, 107}: "Perfisans Networks Corp.", - [3]byte{0, 21, 108}: "SANE SYSTEM CO., LTD", - [3]byte{0, 21, 109}: "Ubiquiti Networks Inc.", - [3]byte{0, 21, 110}: "A. W. Communication Systems Ltd", - [3]byte{0, 21, 111}: "Xiranet Communications GmbH", - [3]byte{0, 21, 112}: "Zebra Technologies Inc", - [3]byte{0, 21, 113}: "Nolan Systems", - [3]byte{0, 21, 114}: "Red-Lemon", - [3]byte{0, 21, 115}: "NewSoft Technology Corporation", - [3]byte{0, 21, 116}: "Horizon Semiconductors Ltd.", - [3]byte{0, 21, 117}: "Nevis Networks Inc.", - [3]byte{0, 21, 118}: "LABiTec - Labor Biomedical Technologies GmbH", - [3]byte{0, 21, 119}: "Allied Telesis, Inc.", - [3]byte{0, 21, 120}: "Audio / Video Innovations", - [3]byte{0, 21, 121}: "Lunatone Industrielle Elektronik GmbH", - [3]byte{0, 21, 122}: "Telefin S.p.A.", - [3]byte{0, 21, 123}: "Leuze electronic GmbH + Co. KG", - [3]byte{0, 21, 124}: "Dave Networks, Inc.", - [3]byte{0, 21, 125}: "POSDATA", - [3]byte{0, 21, 126}: "Weidmüller Interface GmbH & Co. KG", - [3]byte{0, 21, 127}: "ChuanG International Holding CO.,LTD.", - [3]byte{0, 21, 128}: "U-WAY CORPORATION", - [3]byte{0, 21, 129}: "MAKUS Inc.", - [3]byte{0, 21, 130}: "Pulse Eight Limited", - [3]byte{0, 21, 131}: "IVT corporation", - [3]byte{0, 21, 132}: "Schenck Process GmbH", - [3]byte{0, 21, 133}: "Aonvision Technolopy Corp.", - [3]byte{0, 21, 134}: "Xiamen Overseas Chinese Electronic Co., Ltd.", - [3]byte{0, 21, 135}: "Takenaka Seisakusho Co.,Ltd", - [3]byte{0, 21, 136}: "Salutica Allied Solutions Sdn Bhd", - [3]byte{0, 21, 137}: "D-MAX Technology Co.,Ltd", - [3]byte{0, 21, 138}: "SURECOM Technology Corp.", - [3]byte{0, 21, 139}: "Park Air Systems Ltd", - [3]byte{0, 21, 140}: "Liab ApS", - [3]byte{0, 21, 141}: "Jennic Ltd", - [3]byte{0, 21, 142}: "Plustek.INC", - [3]byte{0, 21, 143}: "NTT Advanced Technology Corporation", - [3]byte{0, 21, 144}: "Hectronic GmbH", - [3]byte{0, 21, 145}: "RLW Inc.", - [3]byte{0, 21, 146}: "Facom UK Ltd (Melksham)", - [3]byte{0, 21, 147}: "U4EA Technologies Inc.", - [3]byte{0, 21, 148}: "BIXOLON CO.,LTD", - [3]byte{0, 21, 149}: "Quester Tangent Corporation", - [3]byte{0, 21, 150}: "ARRIS Group, Inc.", - [3]byte{0, 21, 151}: "AETA AUDIO SYSTEMS", - [3]byte{0, 21, 152}: "Kolektor group", - [3]byte{0, 21, 153}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 21, 154}: "ARRIS Group, Inc.", - [3]byte{0, 21, 155}: "Nortel Networks", - [3]byte{0, 21, 156}: "B-KYUNG SYSTEM Co.,Ltd.", - [3]byte{0, 21, 157}: "Tripp Lite", - [3]byte{0, 21, 158}: "Mad Catz Interactive Inc", - [3]byte{0, 21, 159}: "Terascala, Inc.", - [3]byte{0, 21, 160}: "Nokia Danmark A/S", - [3]byte{0, 21, 161}: "ECA-SINTERS", - [3]byte{0, 21, 162}: "ARRIS Group, Inc.", - [3]byte{0, 21, 163}: "ARRIS Group, Inc.", - [3]byte{0, 21, 164}: "ARRIS Group, Inc.", - [3]byte{0, 21, 165}: "DCI Co., Ltd.", - [3]byte{0, 21, 166}: "Digital Electronics Products Ltd.", - [3]byte{0, 21, 167}: "Robatech AG", - [3]byte{0, 21, 168}: "ARRIS Group, Inc.", - [3]byte{0, 21, 169}: "KWANG WOO I&C CO.,LTD", - [3]byte{0, 21, 170}: "Rextechnik International Co.,", - [3]byte{0, 21, 171}: "PRO CO SOUND INC", - [3]byte{0, 21, 172}: "Capelon AB", - [3]byte{0, 21, 173}: "Accedian Networks", - [3]byte{0, 21, 174}: "kyung il", - [3]byte{0, 21, 175}: "AzureWave Technology Inc.", - [3]byte{0, 21, 176}: "AUTOTELENET CO.,LTD", - [3]byte{0, 21, 177}: "Ambient Corporation", - [3]byte{0, 21, 178}: "Advanced Industrial Computer, Inc.", - [3]byte{0, 21, 179}: "Caretech AB", - [3]byte{0, 21, 180}: "Polymap Wireless LLC", - [3]byte{0, 21, 181}: "CI Network Corp.", - [3]byte{0, 21, 182}: "ShinMaywa Industries, Ltd.", - [3]byte{0, 21, 183}: "Toshiba", - [3]byte{0, 21, 184}: "Tahoe", - [3]byte{0, 21, 185}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 21, 186}: "iba AG", - [3]byte{0, 21, 187}: "SMA Solar Technology AG", - [3]byte{0, 21, 188}: "Develco", - [3]byte{0, 21, 189}: "Group 4 Technology Ltd", - [3]byte{0, 21, 190}: "Iqua Ltd.", - [3]byte{0, 21, 191}: "technicob", - [3]byte{0, 21, 192}: "DIGITAL TELEMEDIA CO.,LTD.", - [3]byte{0, 21, 193}: "Sony Interactive Entertainment Inc.", - [3]byte{0, 21, 194}: "3M Germany", - [3]byte{0, 21, 195}: "Ruf Telematik AG", - [3]byte{0, 21, 196}: "FLOVEL CO., LTD.", - [3]byte{0, 21, 197}: "Dell Inc.", - [3]byte{0, 21, 198}: "Cisco Systems, Inc", - [3]byte{0, 21, 199}: "Cisco Systems, Inc", - [3]byte{0, 21, 200}: "FlexiPanel Ltd", - [3]byte{0, 21, 201}: "Gumstix, Inc", - [3]byte{0, 21, 202}: "TeraRecon, Inc.", - [3]byte{0, 21, 203}: "Surf Communication Solutions Ltd.", - [3]byte{0, 21, 204}: "UQUEST, LTD.", - [3]byte{0, 21, 205}: "Exartech International Corp.", - [3]byte{0, 21, 206}: "ARRIS Group, Inc.", - [3]byte{0, 21, 207}: "ARRIS Group, Inc.", - [3]byte{0, 21, 208}: "ARRIS Group, Inc.", - [3]byte{0, 21, 209}: "ARRIS Group, Inc.", - [3]byte{0, 21, 210}: "Xantech Corporation", - [3]byte{0, 21, 211}: "Pantech&Curitel Communications, Inc.", - [3]byte{0, 21, 212}: "Emitor AB", - [3]byte{0, 21, 213}: "NICEVT", - [3]byte{0, 21, 214}: "OSLiNK Sp. z o.o.", - [3]byte{0, 21, 215}: "Reti Corporation", - [3]byte{0, 21, 216}: "Interlink Electronics", - [3]byte{0, 21, 217}: "PKC Electronics Oy", - [3]byte{0, 21, 218}: "IRITEL A.D.", - [3]byte{0, 21, 219}: "Canesta Inc.", - [3]byte{0, 21, 220}: "KT&C Co., Ltd.", - [3]byte{0, 21, 221}: "IP Control Systems Ltd.", - [3]byte{0, 21, 222}: "Nokia Danmark A/S", - [3]byte{0, 21, 223}: "Clivet S.p.A.", - [3]byte{0, 21, 224}: "Ericsson", - [3]byte{0, 21, 225}: "Picochip Ltd", - [3]byte{0, 21, 226}: "Dr.Ing. Herbert Knauer GmbH", - [3]byte{0, 21, 227}: "Dream Technologies Corporation", - [3]byte{0, 21, 228}: "Zimmer Elektromedizin", - [3]byte{0, 21, 229}: "Cheertek Inc.", - [3]byte{0, 21, 230}: "MOBILE TECHNIKA Inc.", - [3]byte{0, 21, 231}: "Quantec Tontechnik", - [3]byte{0, 21, 232}: "Nortel Networks", - [3]byte{0, 21, 233}: "D-Link Corporation", - [3]byte{0, 21, 234}: "Tellumat (Pty) Ltd", - [3]byte{0, 21, 235}: "zte corporation", - [3]byte{0, 21, 236}: "Boca Devices LLC", - [3]byte{0, 21, 237}: "Fulcrum Microsystems, Inc.", - [3]byte{0, 21, 238}: "Omnex Control Systems", - [3]byte{0, 21, 239}: "NEC TOKIN Corporation", - [3]byte{0, 21, 240}: "EGO BV", - [3]byte{0, 21, 241}: "KYLINK Communications Corp.", - [3]byte{0, 21, 242}: "ASUSTek COMPUTER INC.", - [3]byte{0, 21, 243}: "PELTOR AB", - [3]byte{0, 21, 244}: "Eventide", - [3]byte{0, 21, 245}: "Sustainable Energy Systems", - [3]byte{0, 21, 246}: "SCIENCE AND ENGINEERING SERVICES, INC.", - [3]byte{0, 21, 247}: "Wintecronics Ltd.", - [3]byte{0, 21, 248}: "Kingtronics Industrial Co. Ltd.", - [3]byte{0, 21, 249}: "Cisco Systems, Inc", - [3]byte{0, 21, 250}: "Cisco Systems, Inc", - [3]byte{0, 21, 251}: "setex schermuly textile computer gmbh", - [3]byte{0, 21, 252}: "Littelfuse Startco", - [3]byte{0, 21, 253}: "Complete Media Systems", - [3]byte{0, 21, 254}: "SCHILLING ROBOTICS LLC", - [3]byte{0, 21, 255}: "Novatel Wireless Solutions, Inc.", - [3]byte{0, 22, 0}: "CelleBrite Mobile Synchronization", - [3]byte{0, 22, 1}: "BUFFALO.INC", - [3]byte{0, 22, 2}: "CEYON TECHNOLOGY CO.,LTD.", - [3]byte{0, 22, 3}: "COOLKSKY Co., LTD", - [3]byte{0, 22, 4}: "Sigpro", - [3]byte{0, 22, 5}: "YORKVILLE SOUND INC.", - [3]byte{0, 22, 6}: "Ideal Industries", - [3]byte{0, 22, 7}: "Curves International Inc.", - [3]byte{0, 22, 8}: "Sequans Communications", - [3]byte{0, 22, 9}: "Unitech electronics co., ltd.", - [3]byte{0, 22, 10}: "SWEEX Europe BV", - [3]byte{0, 22, 11}: "TVWorks LLC", - [3]byte{0, 22, 12}: "LPL DEVELOPMENT S.A. DE C.V", - [3]byte{0, 22, 13}: "Be Here Corporation", - [3]byte{0, 22, 14}: "Optica Technologies Inc.", - [3]byte{0, 22, 15}: "BADGER METER INC", - [3]byte{0, 22, 16}: "Carina Technology", - [3]byte{0, 22, 17}: "Altecon Srl", - [3]byte{0, 22, 18}: "Otsuka Electronics Co., Ltd.", - [3]byte{0, 22, 19}: "LibreStream Technologies Inc.", - [3]byte{0, 22, 20}: "Picosecond Pulse Labs", - [3]byte{0, 22, 21}: "Nittan Company, Limited", - [3]byte{0, 22, 22}: "BROWAN COMMUNICATION INC.", - [3]byte{0, 22, 23}: "MSI", - [3]byte{0, 22, 24}: "HIVION Co., Ltd.", - [3]byte{0, 22, 25}: "Lancelan Technologies S.L.", - [3]byte{0, 22, 26}: "Dametric AB", - [3]byte{0, 22, 27}: "Micronet Corporation", - [3]byte{0, 22, 28}: "e:cue", - [3]byte{0, 22, 29}: "Innovative Wireless Technologies, Inc.", - [3]byte{0, 22, 30}: "Woojinnet", - [3]byte{0, 22, 31}: "SUNWAVETEC Co., Ltd.", - [3]byte{0, 22, 32}: "Sony Mobile Communications AB", - [3]byte{0, 22, 33}: "Colorado Vnet", - [3]byte{0, 22, 34}: "BBH SYSTEMS GMBH", - [3]byte{0, 22, 35}: "Interval Media", - [3]byte{0, 22, 36}: "Teneros, Inc.", - [3]byte{0, 22, 37}: "Impinj, Inc.", - [3]byte{0, 22, 38}: "ARRIS Group, Inc.", - [3]byte{0, 22, 39}: "embedded-logic DESIGN AND MORE GmbH", - [3]byte{0, 22, 40}: "Magicard Ltd", - [3]byte{0, 22, 41}: "Nivus GmbH", - [3]byte{0, 22, 42}: "Antik computers & communications s.r.o.", - [3]byte{0, 22, 43}: "Togami Electric Mfg.co.,Ltd.", - [3]byte{0, 22, 44}: "Xanboo", - [3]byte{0, 22, 45}: "STNet Co., Ltd.", - [3]byte{0, 22, 46}: "Space Shuttle Hi-Tech Co., Ltd.", - [3]byte{0, 22, 47}: "Geutebrück GmbH", - [3]byte{0, 22, 48}: "Vativ Technologies", - [3]byte{0, 22, 49}: "Xteam", - [3]byte{0, 22, 50}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 22, 51}: "Oxford Diagnostics Ltd.", - [3]byte{0, 22, 52}: "Mathtech, Inc.", - [3]byte{0, 22, 53}: "Hewlett Packard", - [3]byte{0, 22, 54}: "QUANTA COMPUTER INC.", - [3]byte{0, 22, 55}: "CITEL SpA", - [3]byte{0, 22, 56}: "TECOM Co., Ltd.", - [3]byte{0, 22, 57}: "Ubiquam Co., Ltd.", - [3]byte{0, 22, 58}: "YVES TECHNOLOGY CO., LTD.", - [3]byte{0, 22, 59}: "VertexRSI/General Dynamics", - [3]byte{0, 22, 60}: "Rebox B.V.", - [3]byte{0, 22, 61}: "Tsinghua Tongfang Legend Silicon Tech. Co., Ltd.", - [3]byte{0, 22, 62}: "Xensource, Inc.", - [3]byte{0, 22, 63}: "CReTE SYSTEMS Inc.", - [3]byte{0, 22, 64}: "Asmobile Communication Inc.", - [3]byte{0, 22, 65}: "Universal Global Scientific Industrial Co., Ltd.", - [3]byte{0, 22, 66}: "Pangolin", - [3]byte{0, 22, 67}: "Sunhillo Corporation", - [3]byte{0, 22, 68}: "LITE-ON Technology Corp.", - [3]byte{0, 22, 69}: "Power Distribution, Inc.", - [3]byte{0, 22, 70}: "Cisco Systems, Inc", - [3]byte{0, 22, 71}: "Cisco Systems, Inc", - [3]byte{0, 22, 72}: "SSD Company Limited", - [3]byte{0, 22, 73}: "SetOne GmbH", - [3]byte{0, 22, 74}: "Vibration Technology Limited", - [3]byte{0, 22, 75}: "Quorion Data Systems GmbH", - [3]byte{0, 22, 76}: "PLANET INT Co., Ltd", - [3]byte{0, 22, 77}: "Alcatel-Lucent IPD", - [3]byte{0, 22, 78}: "Nokia Danmark A/S", - [3]byte{0, 22, 79}: "World Ethnic Broadcastin Inc.", - [3]byte{0, 22, 80}: "Kratos EPD", - [3]byte{0, 22, 81}: "Exeo Systems", - [3]byte{0, 22, 82}: "Hoatech Technologies, Inc.", - [3]byte{0, 22, 83}: "LEGO System A/S IE Electronics Division", - [3]byte{0, 22, 84}: "Flex-P Industries Sdn. Bhd.", - [3]byte{0, 22, 85}: "FUHO TECHNOLOGY Co., LTD", - [3]byte{0, 22, 86}: "Nintendo Co., Ltd.", - [3]byte{0, 22, 87}: "Aegate Ltd", - [3]byte{0, 22, 88}: "Fusiontech Technologies Inc.", - [3]byte{0, 22, 89}: "Z.M.P. RADWAG", - [3]byte{0, 22, 90}: "Harman Specialty Group", - [3]byte{0, 22, 91}: "Grip Audio", - [3]byte{0, 22, 92}: "Trackflow Ltd", - [3]byte{0, 22, 93}: "AirDefense, Inc.", - [3]byte{0, 22, 94}: "Precision I/O", - [3]byte{0, 22, 95}: "Fairmount Automation", - [3]byte{0, 22, 96}: "Nortel Networks", - [3]byte{0, 22, 97}: "Novatium Solutions (P) Ltd", - [3]byte{0, 22, 98}: "Liyuh Technology Ltd.", - [3]byte{0, 22, 99}: "KBT Mobile", - [3]byte{0, 22, 100}: "Prod-El SpA", - [3]byte{0, 22, 101}: "Cellon France", - [3]byte{0, 22, 102}: "Quantier Communication Inc.", - [3]byte{0, 22, 103}: "A-TEC Subsystem INC.", - [3]byte{0, 22, 104}: "Eishin Electronics", - [3]byte{0, 22, 105}: "MRV Communication (Networks) LTD", - [3]byte{0, 22, 106}: "TPS", - [3]byte{0, 22, 107}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 22, 108}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 22, 109}: "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd", - [3]byte{0, 22, 110}: "Arbitron Inc.", - [3]byte{0, 22, 111}: "Intel Corporate", - [3]byte{0, 22, 112}: "SKNET Corporation", - [3]byte{0, 22, 113}: "Symphox Information Co.", - [3]byte{0, 22, 114}: "Zenway enterprise ltd", - [3]byte{0, 22, 115}: "Bury GmbH & Co. KG", - [3]byte{0, 22, 116}: "EuroCB (Phils.), Inc.", - [3]byte{0, 22, 117}: "ARRIS Group, Inc.", - [3]byte{0, 22, 118}: "Intel Corporate", - [3]byte{0, 22, 119}: "Bihl + Wiedemann GmbH", - [3]byte{0, 22, 120}: "SHENZHEN BAOAN GAOKE ELECTRONICS CO., LTD", - [3]byte{0, 22, 121}: "eOn Communications", - [3]byte{0, 22, 122}: "Skyworth Overseas Development Ltd.", - [3]byte{0, 22, 123}: "Haver&Boecker", - [3]byte{0, 22, 124}: "iRex Technologies BV", - [3]byte{0, 22, 125}: "Sky-Line Information Co., Ltd.", - [3]byte{0, 22, 126}: "DIBOSS.CO.,LTD", - [3]byte{0, 22, 127}: "Bluebird Soft Inc.", - [3]byte{0, 22, 128}: "Bally Gaming + Systems", - [3]byte{0, 22, 129}: "Vector Informatik GmbH", - [3]byte{0, 22, 130}: "Pro Dex, Inc", - [3]byte{0, 22, 131}: "WEBIO International Co.,.Ltd.", - [3]byte{0, 22, 132}: "Donjin Co.,Ltd.", - [3]byte{0, 22, 133}: "Elisa Oyj", - [3]byte{0, 22, 134}: "Karl Storz Imaging", - [3]byte{0, 22, 135}: "Chubb CSC-Vendor AP", - [3]byte{0, 22, 136}: "ServerEngines LLC", - [3]byte{0, 22, 137}: "Pilkor Electronics Co., Ltd", - [3]byte{0, 22, 138}: "id-Confirm Inc", - [3]byte{0, 22, 139}: "Paralan Corporation", - [3]byte{0, 22, 140}: "DSL Partner AS", - [3]byte{0, 22, 141}: "KORWIN CO., Ltd.", - [3]byte{0, 22, 142}: "Vimicro corporation", - [3]byte{0, 22, 143}: "GN Netcom A/S", - [3]byte{0, 22, 144}: "J-TEK INCORPORATION", - [3]byte{0, 22, 145}: "Moser-Baer AG", - [3]byte{0, 22, 146}: "Scientific-Atlanta, Inc.", - [3]byte{0, 22, 147}: "PowerLink Technology Inc.", - [3]byte{0, 22, 148}: "Sennheiser Communications A/S", - [3]byte{0, 22, 149}: "AVC Technology (International) Limited", - [3]byte{0, 22, 150}: "QDI Technology (H.K.) Limited", - [3]byte{0, 22, 151}: "NEC Corporation", - [3]byte{0, 22, 152}: "T&A Mobile Phones", - [3]byte{0, 22, 153}: "Tonic DVB Marketing Ltd", - [3]byte{0, 22, 154}: "Quadrics Ltd", - [3]byte{0, 22, 155}: "Alstom Transport", - [3]byte{0, 22, 156}: "Cisco Systems, Inc", - [3]byte{0, 22, 157}: "Cisco Systems, Inc", - [3]byte{0, 22, 158}: "TV One Ltd", - [3]byte{0, 22, 159}: "Vimtron Electronics Co., Ltd.", - [3]byte{0, 22, 160}: "Auto-Maskin", - [3]byte{0, 22, 161}: "3Leaf Networks", - [3]byte{0, 22, 162}: "CentraLite Systems, Inc.", - [3]byte{0, 22, 163}: "Ingeteam Transmission&Distribution, S.A.", - [3]byte{0, 22, 164}: "Ezurio Ltd", - [3]byte{0, 22, 165}: "Tandberg Storage ASA", - [3]byte{0, 22, 166}: "Dovado FZ-LLC", - [3]byte{0, 22, 167}: "AWETA G&P", - [3]byte{0, 22, 168}: "CWT CO., LTD.", - [3]byte{0, 22, 169}: "2EI", - [3]byte{0, 22, 170}: "Kei Communication Technology Inc.", - [3]byte{0, 22, 171}: "Dansensor A/S", - [3]byte{0, 22, 172}: "Toho Technology Corp.", - [3]byte{0, 22, 173}: "BT-Links Company Limited", - [3]byte{0, 22, 174}: "INVENTEL", - [3]byte{0, 22, 175}: "Shenzhen Union Networks Equipment Co.,Ltd.", - [3]byte{0, 22, 176}: "VK Corporation", - [3]byte{0, 22, 177}: "KBS", - [3]byte{0, 22, 178}: "DriveCam Inc", - [3]byte{0, 22, 179}: "Photonicbridges (China) Co., Ltd.", - [3]byte{0, 22, 180}: "Private", - [3]byte{0, 22, 181}: "ARRIS Group, Inc.", - [3]byte{0, 22, 182}: "Cisco-Linksys, LLC", - [3]byte{0, 22, 183}: "Seoul Commtech", - [3]byte{0, 22, 184}: "Sony Mobile Communications AB", - [3]byte{0, 22, 185}: "ProCurve Networking by HP", - [3]byte{0, 22, 186}: "WEATHERNEWS INC.", - [3]byte{0, 22, 187}: "Law-Chain Computer Technology Co Ltd", - [3]byte{0, 22, 188}: "Nokia Danmark A/S", - [3]byte{0, 22, 189}: "ATI Industrial Automation", - [3]byte{0, 22, 190}: "INFRANET, Inc.", - [3]byte{0, 22, 191}: "PaloDEx Group Oy", - [3]byte{0, 22, 192}: "Semtech Corporation", - [3]byte{0, 22, 193}: "Eleksen Ltd", - [3]byte{0, 22, 194}: "Avtec Systems Inc", - [3]byte{0, 22, 195}: "BA Systems Inc", - [3]byte{0, 22, 196}: "SiRF Technology, Inc.", - [3]byte{0, 22, 197}: "Shenzhen Xing Feng Industry Co.,Ltd", - [3]byte{0, 22, 198}: "North Atlantic Industries", - [3]byte{0, 22, 199}: "Cisco Systems, Inc", - [3]byte{0, 22, 200}: "Cisco Systems, Inc", - [3]byte{0, 22, 201}: "NAT Seattle, Inc.", - [3]byte{0, 22, 202}: "Nortel Networks", - [3]byte{0, 22, 203}: "Apple, Inc.", - [3]byte{0, 22, 204}: "Xcute Mobile Corp.", - [3]byte{0, 22, 205}: "HIJI HIGH-TECH CO., LTD.", - [3]byte{0, 22, 206}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 22, 207}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 22, 208}: "ATech elektronika d.o.o.", - [3]byte{0, 22, 209}: "ZAT a.s.", - [3]byte{0, 22, 210}: "Caspian", - [3]byte{0, 22, 211}: "Wistron Corporation", - [3]byte{0, 22, 212}: "Compal Communications, Inc.", - [3]byte{0, 22, 213}: "Synccom Co., Ltd", - [3]byte{0, 22, 214}: "TDA Tech Pty Ltd", - [3]byte{0, 22, 215}: "Sunways AG", - [3]byte{0, 22, 216}: "Senea AB", - [3]byte{0, 22, 217}: "NINGBO BIRD CO.,LTD.", - [3]byte{0, 22, 218}: "Futronic Technology Co. Ltd.", - [3]byte{0, 22, 219}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 22, 220}: "ARCHOS", - [3]byte{0, 22, 221}: "Gigabeam Corporation", - [3]byte{0, 22, 222}: "FAST Inc", - [3]byte{0, 22, 223}: "Lundinova AB", - [3]byte{0, 22, 224}: "3Com Ltd", - [3]byte{0, 22, 225}: "SiliconStor, Inc.", - [3]byte{0, 22, 226}: "American Fibertek, Inc.", - [3]byte{0, 22, 227}: "ASKEY COMPUTER CORP", - [3]byte{0, 22, 228}: "VANGUARD SECURITY ENGINEERING CORP.", - [3]byte{0, 22, 229}: "FORDLEY DEVELOPMENT LIMITED", - [3]byte{0, 22, 230}: "GIGA-BYTE TECHNOLOGY CO.,LTD.", - [3]byte{0, 22, 231}: "Dynamix Promotions Limited", - [3]byte{0, 22, 232}: "Sigma Designs, Inc.", - [3]byte{0, 22, 233}: "Tiba Medical Inc", - [3]byte{0, 22, 234}: "Intel Corporate", - [3]byte{0, 22, 235}: "Intel Corporate", - [3]byte{0, 22, 236}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{0, 22, 237}: "Utility, Inc", - [3]byte{0, 22, 238}: "Royaldigital Inc.", - [3]byte{0, 22, 239}: "Koko Fitness, Inc.", - [3]byte{0, 22, 240}: "Dell", - [3]byte{0, 22, 241}: "OmniSense, LLC", - [3]byte{0, 22, 242}: "Dmobile System Co., Ltd.", - [3]byte{0, 22, 243}: "CAST Information Co., Ltd", - [3]byte{0, 22, 244}: "Eidicom Co., Ltd.", - [3]byte{0, 22, 245}: "Dalian Golden Hualu Digital Technology Co.,Ltd", - [3]byte{0, 22, 246}: "Video Products Group", - [3]byte{0, 22, 247}: "L-3 Communications, Aviation Recorders", - [3]byte{0, 22, 248}: "AVIQTECH TECHNOLOGY CO., LTD.", - [3]byte{0, 22, 249}: "CETRTA POT, d.o.o., Kranj", - [3]byte{0, 22, 250}: "ECI Telecom Ltd.", - [3]byte{0, 22, 251}: "SHENZHEN MTC CO LTD", - [3]byte{0, 22, 252}: "TOHKEN CO.,LTD.", - [3]byte{0, 22, 253}: "Jaty Electronics", - [3]byte{0, 22, 254}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{0, 22, 255}: "Wamin Optocomm Mfg Corp", - [3]byte{0, 23, 0}: "ARRIS Group, Inc.", - [3]byte{0, 23, 1}: "KDE, Inc.", - [3]byte{0, 23, 2}: "Osung Midicom Co., Ltd", - [3]byte{0, 23, 3}: "MOSDAN Internation Co.,Ltd", - [3]byte{0, 23, 4}: "Shinco Electronics Group Co.,Ltd", - [3]byte{0, 23, 5}: "Methode Electronics", - [3]byte{0, 23, 6}: "Techfaithwireless Communication Technology Limited.", - [3]byte{0, 23, 7}: "InGrid, Inc", - [3]byte{0, 23, 8}: "Hewlett Packard", - [3]byte{0, 23, 9}: "Exalt Communications", - [3]byte{0, 23, 10}: "INEW DIGITAL COMPANY", - [3]byte{0, 23, 11}: "Contela, Inc.", - [3]byte{0, 23, 12}: "Twig Com Ltd.", - [3]byte{0, 23, 13}: "Dust Networks Inc.", - [3]byte{0, 23, 14}: "Cisco Systems, Inc", - [3]byte{0, 23, 15}: "Cisco Systems, Inc", - [3]byte{0, 23, 16}: "Casa Systems Inc.", - [3]byte{0, 23, 17}: "GE Healthcare Bio-Sciences AB", - [3]byte{0, 23, 18}: "ISCO International", - [3]byte{0, 23, 19}: "Tiger NetCom", - [3]byte{0, 23, 20}: "BR Controls Nederland bv", - [3]byte{0, 23, 21}: "Qstik", - [3]byte{0, 23, 22}: "Qno Technology Inc.", - [3]byte{0, 23, 23}: "Leica Geosystems AG", - [3]byte{0, 23, 24}: "Vansco Electronics Oy", - [3]byte{0, 23, 25}: "Audiocodes USA, Inc", - [3]byte{0, 23, 26}: "Winegard Company", - [3]byte{0, 23, 27}: "Innovation Lab Corp.", - [3]byte{0, 23, 28}: "NT MicroSystems, Inc.", - [3]byte{0, 23, 29}: "DIGIT", - [3]byte{0, 23, 30}: "Theo Benning GmbH & Co. KG", - [3]byte{0, 23, 31}: "IMV Corporation", - [3]byte{0, 23, 32}: "Image Sensing Systems, Inc.", - [3]byte{0, 23, 33}: "FITRE S.p.A.", - [3]byte{0, 23, 34}: "Hanazeder Electronic GmbH", - [3]byte{0, 23, 35}: "Summit Data Communications", - [3]byte{0, 23, 36}: "Studer Professional Audio GmbH", - [3]byte{0, 23, 37}: "Liquid Computing", - [3]byte{0, 23, 38}: "m2c Electronic Technology Ltd.", - [3]byte{0, 23, 39}: "Thermo Ramsey Italia s.r.l.", - [3]byte{0, 23, 40}: "Selex Communications", - [3]byte{0, 23, 41}: "Ubicod Co.LTD", - [3]byte{0, 23, 42}: "Proware Technology Corp.(By Unifosa)", - [3]byte{0, 23, 43}: "Global Technologies Inc.", - [3]byte{0, 23, 44}: "TAEJIN INFOTECH", - [3]byte{0, 23, 45}: "Axcen Photonics Corporation", - [3]byte{0, 23, 46}: "FXC Inc.", - [3]byte{0, 23, 47}: "NeuLion Incorporated", - [3]byte{0, 23, 48}: "Automation Electronics", - [3]byte{0, 23, 49}: "ASUSTek COMPUTER INC.", - [3]byte{0, 23, 50}: "Science-Technical Center RISSA", - [3]byte{0, 23, 51}: "SFR", - [3]byte{0, 23, 52}: "ADC Telecommunications", - [3]byte{0, 23, 53}: "Intel Wireless Network Group", - [3]byte{0, 23, 54}: "iiTron Inc.", - [3]byte{0, 23, 55}: "Industrie Dial Face S.p.A.", - [3]byte{0, 23, 56}: "International Business Machines", - [3]byte{0, 23, 57}: "Bright Headphone Electronics Company", - [3]byte{0, 23, 58}: "Cloudastructure Inc", - [3]byte{0, 23, 59}: "Cisco Systems, Inc", - [3]byte{0, 23, 60}: "Extreme Engineering Solutions", - [3]byte{0, 23, 61}: "Neology", - [3]byte{0, 23, 62}: "LeucotronEquipamentos Ltda.", - [3]byte{0, 23, 63}: "Belkin International Inc.", - [3]byte{0, 23, 64}: "Bluberi Gaming Technologies Inc", - [3]byte{0, 23, 65}: "DEFIDEV", - [3]byte{0, 23, 66}: "FUJITSU LIMITED", - [3]byte{0, 23, 67}: "Deck Srl", - [3]byte{0, 23, 68}: "Araneo Ltd.", - [3]byte{0, 23, 69}: "INNOTZ CO., Ltd", - [3]byte{0, 23, 70}: "Freedom9 Inc.", - [3]byte{0, 23, 71}: "Trimble", - [3]byte{0, 23, 72}: "Neokoros Brasil Ltda", - [3]byte{0, 23, 73}: "HYUNDAE YONG-O-SA CO.,LTD", - [3]byte{0, 23, 74}: "SOCOMEC", - [3]byte{0, 23, 75}: "Nokia Danmark A/S", - [3]byte{0, 23, 76}: "Millipore", - [3]byte{0, 23, 77}: "DYNAMIC NETWORK FACTORY, INC.", - [3]byte{0, 23, 78}: "Parama-tech Co.,Ltd.", - [3]byte{0, 23, 79}: "iCatch Inc.", - [3]byte{0, 23, 80}: "GSI Group, MicroE Systems", - [3]byte{0, 23, 81}: "Online Corporation", - [3]byte{0, 23, 82}: "DAGS, Inc", - [3]byte{0, 23, 83}: "nFore Technology Inc.", - [3]byte{0, 23, 84}: "Arkino HiTOP Corporation Limited", - [3]byte{0, 23, 85}: "GE Security", - [3]byte{0, 23, 86}: "Vinci Labs Oy", - [3]byte{0, 23, 87}: "RIX TECHNOLOGY LIMITED", - [3]byte{0, 23, 88}: "ThruVision Ltd", - [3]byte{0, 23, 89}: "Cisco Systems, Inc", - [3]byte{0, 23, 90}: "Cisco Systems, Inc", - [3]byte{0, 23, 91}: "ACS Solutions Switzerland Ltd.", - [3]byte{0, 23, 92}: "SHARP CORPORATION", - [3]byte{0, 23, 93}: "Dongseo system.", - [3]byte{0, 23, 94}: "Zed-3", - [3]byte{0, 23, 95}: "XENOLINK Communications Co., Ltd.", - [3]byte{0, 23, 96}: "Naito Densei Machida MFG.CO.,LTD", - [3]byte{0, 23, 97}: "Private", - [3]byte{0, 23, 98}: "Solar Technology, Inc.", - [3]byte{0, 23, 99}: "Essentia S.p.A.", - [3]byte{0, 23, 100}: "ATMedia GmbH", - [3]byte{0, 23, 101}: "Nortel Networks", - [3]byte{0, 23, 102}: "Accense Technology, Inc.", - [3]byte{0, 23, 103}: "Earforce AS", - [3]byte{0, 23, 104}: "Zinwave Ltd", - [3]byte{0, 23, 105}: "Cymphonix Corp", - [3]byte{0, 23, 106}: "Avago Technologies", - [3]byte{0, 23, 107}: "Kiyon, Inc.", - [3]byte{0, 23, 108}: "Pivot3, Inc.", - [3]byte{0, 23, 109}: "CORE CORPORATION", - [3]byte{0, 23, 110}: "DUCATI SISTEMI", - [3]byte{0, 23, 111}: "PAX Computer Technology(Shenzhen) Ltd.", - [3]byte{0, 23, 112}: "Arti Industrial Electronics Ltd.", - [3]byte{0, 23, 113}: "APD Communications Ltd", - [3]byte{0, 23, 114}: "ASTRO Strobel Kommunikationssysteme GmbH", - [3]byte{0, 23, 115}: "Laketune Technologies Co. Ltd", - [3]byte{0, 23, 116}: "Elesta GmbH", - [3]byte{0, 23, 117}: "TTE Germany GmbH", - [3]byte{0, 23, 118}: "Meso Scale Diagnostics, LLC", - [3]byte{0, 23, 119}: "Obsidian Research Corporation", - [3]byte{0, 23, 120}: "Central Music Co.", - [3]byte{0, 23, 121}: "QuickTel", - [3]byte{0, 23, 122}: "ASSA ABLOY AB", - [3]byte{0, 23, 123}: "Azalea Networks inc", - [3]byte{0, 23, 124}: "Smartlink Network Systems Limited", - [3]byte{0, 23, 125}: "IDT Technology Limited", - [3]byte{0, 23, 126}: "Meshcom Technologies Inc.", - [3]byte{0, 23, 127}: "Worldsmart Retech", - [3]byte{0, 23, 128}: "Applied Biosystems B.V.", - [3]byte{0, 23, 129}: "Greystone Data System, Inc.", - [3]byte{0, 23, 130}: "LoBenn Inc.", - [3]byte{0, 23, 131}: "Texas Instruments", - [3]byte{0, 23, 132}: "ARRIS Group, Inc.", - [3]byte{0, 23, 133}: "Sparr Electronics Ltd", - [3]byte{0, 23, 134}: "wisembed", - [3]byte{0, 23, 135}: "Brother, Brother & Sons ApS", - [3]byte{0, 23, 136}: "Philips Lighting BV", - [3]byte{0, 23, 137}: "Zenitron Corporation", - [3]byte{0, 23, 138}: "DARTS TECHNOLOGIES CORP.", - [3]byte{0, 23, 139}: "Teledyne Technologies Incorporated", - [3]byte{0, 23, 140}: "Independent Witness, Inc", - [3]byte{0, 23, 141}: "Checkpoint Systems, Inc.", - [3]byte{0, 23, 142}: "Gunnebo Cash Automation AB", - [3]byte{0, 23, 143}: "NINGBO YIDONG ELECTRONIC CO.,LTD.", - [3]byte{0, 23, 144}: "HYUNDAI DIGITECH Co, Ltd.", - [3]byte{0, 23, 145}: "LinTech GmbH", - [3]byte{0, 23, 146}: "Falcom Wireless Comunications Gmbh", - [3]byte{0, 23, 147}: "Tigi Corporation", - [3]byte{0, 23, 148}: "Cisco Systems, Inc", - [3]byte{0, 23, 149}: "Cisco Systems, Inc", - [3]byte{0, 23, 150}: "Rittmeyer AG", - [3]byte{0, 23, 151}: "Telsy Elettronica S.p.A.", - [3]byte{0, 23, 152}: "Azonic Technology Co., LTD", - [3]byte{0, 23, 153}: "SmarTire Systems Inc.", - [3]byte{0, 23, 154}: "D-Link Corporation", - [3]byte{0, 23, 155}: "CHANT SINCERE CO.,LTD", - [3]byte{0, 23, 156}: "DEPRAG SCHULZ GMBH u. CO.", - [3]byte{0, 23, 157}: "Kelman Limited", - [3]byte{0, 23, 158}: "Sirit Inc", - [3]byte{0, 23, 159}: "Apricorn", - [3]byte{0, 23, 160}: "RoboTech srl", - [3]byte{0, 23, 161}: "3soft inc.", - [3]byte{0, 23, 162}: "Camrivox Ltd.", - [3]byte{0, 23, 163}: "MIX s.r.l.", - [3]byte{0, 23, 164}: "Hewlett Packard", - [3]byte{0, 23, 165}: "Ralink Technology Corp", - [3]byte{0, 23, 166}: "YOSIN ELECTRONICS CO., LTD.", - [3]byte{0, 23, 167}: "Mobile Computing Promotion Consortium", - [3]byte{0, 23, 168}: "EDM Corporation", - [3]byte{0, 23, 169}: "Sentivision", - [3]byte{0, 23, 170}: "elab-experience inc.", - [3]byte{0, 23, 171}: "Nintendo Co., Ltd.", - [3]byte{0, 23, 172}: "O'Neil Product Development Inc.", - [3]byte{0, 23, 173}: "AceNet Corporation", - [3]byte{0, 23, 174}: "GAI-Tronics", - [3]byte{0, 23, 175}: "Enermet", - [3]byte{0, 23, 176}: "Nokia Danmark A/S", - [3]byte{0, 23, 177}: "ACIST Medical Systems, Inc.", - [3]byte{0, 23, 178}: "SK Telesys", - [3]byte{0, 23, 179}: "Aftek Infosys Limited", - [3]byte{0, 23, 180}: "Remote Security Systems, LLC", - [3]byte{0, 23, 181}: "Peerless Systems Corporation", - [3]byte{0, 23, 182}: "Aquantia", - [3]byte{0, 23, 183}: "Tonze Technology Co.", - [3]byte{0, 23, 184}: "NOVATRON CO., LTD.", - [3]byte{0, 23, 185}: "Gambro Lundia AB", - [3]byte{0, 23, 186}: "SEDO CO., LTD.", - [3]byte{0, 23, 187}: "Syrinx Industrial Electronics", - [3]byte{0, 23, 188}: "Touchtunes Music Corporation", - [3]byte{0, 23, 189}: "Tibetsystem", - [3]byte{0, 23, 190}: "Tratec Telecom B.V.", - [3]byte{0, 23, 191}: "Coherent Research Limited", - [3]byte{0, 23, 192}: "PureTech Systems, Inc.", - [3]byte{0, 23, 193}: "CM Precision Technology LTD.", - [3]byte{0, 23, 194}: "ADB Broadband Italia", - [3]byte{0, 23, 195}: "KTF Technologies Inc.", - [3]byte{0, 23, 196}: "Quanta Microsystems, INC.", - [3]byte{0, 23, 197}: "SonicWALL", - [3]byte{0, 23, 198}: "Cross Match Technologies Inc", - [3]byte{0, 23, 199}: "MARA Systems Consulting AB", - [3]byte{0, 23, 200}: "KYOCERA Display Corporation", - [3]byte{0, 23, 201}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 23, 202}: "Qisda Corporation", - [3]byte{0, 23, 203}: "Juniper Networks", - [3]byte{0, 23, 204}: "Alcatel-Lucent", - [3]byte{0, 23, 205}: "CEC Wireless R&D Ltd.", - [3]byte{0, 23, 206}: "Screen Service Spa", - [3]byte{0, 23, 207}: "iMCA-GmbH", - [3]byte{0, 23, 208}: "Opticom Communications, LLC", - [3]byte{0, 23, 209}: "Nortel Networks", - [3]byte{0, 23, 210}: "THINLINX PTY LTD", - [3]byte{0, 23, 211}: "Etymotic Research, Inc.", - [3]byte{0, 23, 212}: "Monsoon Multimedia, Inc", - [3]byte{0, 23, 213}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 23, 214}: "Bluechips Microhouse Co.,Ltd.", - [3]byte{0, 23, 215}: "ION Geophysical Corporation Inc.", - [3]byte{0, 23, 216}: "Magnum Semiconductor, Inc.", - [3]byte{0, 23, 217}: "AAI Corporation", - [3]byte{0, 23, 218}: "Spans Logic", - [3]byte{0, 23, 219}: "CANKO TECHNOLOGIES INC.", - [3]byte{0, 23, 220}: "DAEMYUNG ZERO1", - [3]byte{0, 23, 221}: "Clipsal Australia", - [3]byte{0, 23, 222}: "Advantage Six Ltd", - [3]byte{0, 23, 223}: "Cisco Systems, Inc", - [3]byte{0, 23, 224}: "Cisco Systems, Inc", - [3]byte{0, 23, 225}: "DACOS Technologies Co., Ltd.", - [3]byte{0, 23, 226}: "ARRIS Group, Inc.", - [3]byte{0, 23, 227}: "Texas Instruments", - [3]byte{0, 23, 228}: "Texas Instruments", - [3]byte{0, 23, 229}: "Texas Instruments", - [3]byte{0, 23, 230}: "Texas Instruments", - [3]byte{0, 23, 231}: "Texas Instruments", - [3]byte{0, 23, 232}: "Texas Instruments", - [3]byte{0, 23, 233}: "Texas Instruments", - [3]byte{0, 23, 234}: "Texas Instruments", - [3]byte{0, 23, 235}: "Texas Instruments", - [3]byte{0, 23, 236}: "Texas Instruments", - [3]byte{0, 23, 237}: "WooJooIT Ltd.", - [3]byte{0, 23, 238}: "ARRIS Group, Inc.", - [3]byte{0, 23, 239}: "IBM Corp", - [3]byte{0, 23, 240}: "SZCOM Broadband Network Technology Co.,Ltd", - [3]byte{0, 23, 241}: "Renu Electronics Pvt Ltd", - [3]byte{0, 23, 242}: "Apple, Inc.", - [3]byte{0, 23, 243}: "Harris Corparation", - [3]byte{0, 23, 244}: "ZERON ALLIANCE", - [3]byte{0, 23, 245}: "LIG NEOPTEK", - [3]byte{0, 23, 246}: "Pyramid Meriden Inc.", - [3]byte{0, 23, 247}: "CEM Solutions Pvt Ltd", - [3]byte{0, 23, 248}: "Motech Industries Inc.", - [3]byte{0, 23, 249}: "Forcom Sp. z o.o.", - [3]byte{0, 23, 250}: "Microsoft Corporation", - [3]byte{0, 23, 251}: "FA", - [3]byte{0, 23, 252}: "Suprema Inc.", - [3]byte{0, 23, 253}: "Amulet Hotkey", - [3]byte{0, 23, 254}: "TALOS SYSTEM INC.", - [3]byte{0, 23, 255}: "PLAYLINE Co.,Ltd.", - [3]byte{0, 24, 0}: "UNIGRAND LTD", - [3]byte{0, 24, 1}: "Actiontec Electronics, Inc", - [3]byte{0, 24, 2}: "Alpha Networks Inc.", - [3]byte{0, 24, 3}: "ArcSoft Shanghai Co. LTD", - [3]byte{0, 24, 4}: "E-TEK DIGITAL TECHNOLOGY LIMITED", - [3]byte{0, 24, 5}: "Beijing InHand Networking Technology Co.,Ltd.", - [3]byte{0, 24, 6}: "Hokkei Industries Co., Ltd.", - [3]byte{0, 24, 7}: "Fanstel Corp.", - [3]byte{0, 24, 8}: "SightLogix, Inc.", - [3]byte{0, 24, 9}: "CRESYN", - [3]byte{0, 24, 10}: "Cisco Meraki", - [3]byte{0, 24, 11}: "Brilliant Telecommunications", - [3]byte{0, 24, 12}: "Optelian Access Networks", - [3]byte{0, 24, 13}: "Terabytes Server Storage Tech Corp", - [3]byte{0, 24, 14}: "Avega Systems", - [3]byte{0, 24, 15}: "Nokia Danmark A/S", - [3]byte{0, 24, 16}: "IPTrade S.A.", - [3]byte{0, 24, 17}: "Neuros Technology International, LLC.", - [3]byte{0, 24, 18}: "Beijing Xinwei Telecom Technology Co., Ltd.", - [3]byte{0, 24, 19}: "Sony Mobile Communications AB", - [3]byte{0, 24, 20}: "Mitutoyo Corporation", - [3]byte{0, 24, 21}: "GZ Technologies, Inc.", - [3]byte{0, 24, 22}: "Ubixon Co., Ltd.", - [3]byte{0, 24, 23}: "D. E. Shaw Research, LLC", - [3]byte{0, 24, 24}: "Cisco Systems, Inc", - [3]byte{0, 24, 25}: "Cisco Systems, Inc", - [3]byte{0, 24, 26}: "AVerMedia Information Inc.", - [3]byte{0, 24, 27}: "TaiJin Metal Co., Ltd.", - [3]byte{0, 24, 28}: "Exterity Limited", - [3]byte{0, 24, 29}: "ASIA ELECTRONICS CO.,LTD", - [3]byte{0, 24, 30}: "GDX Technologies Ltd.", - [3]byte{0, 24, 31}: "Palmmicro Communications", - [3]byte{0, 24, 32}: "w5networks", - [3]byte{0, 24, 33}: "SINDORICOH", - [3]byte{0, 24, 34}: "CEC TELECOM CO.,LTD.", - [3]byte{0, 24, 35}: "Delta Electronics, Inc.", - [3]byte{0, 24, 36}: "Kimaldi Electronics, S.L.", - [3]byte{0, 24, 37}: "Private", - [3]byte{0, 24, 38}: "Cale Access AB", - [3]byte{0, 24, 39}: "NEC UNIFIED SOLUTIONS NEDERLAND B.V.", - [3]byte{0, 24, 40}: "e2v technologies (UK) ltd.", - [3]byte{0, 24, 41}: "Gatsometer", - [3]byte{0, 24, 42}: "Taiwan Video & Monitor", - [3]byte{0, 24, 43}: "Softier", - [3]byte{0, 24, 44}: "Ascend Networks, Inc.", - [3]byte{0, 24, 45}: "Artec Design", - [3]byte{0, 24, 46}: "XStreamHD", - [3]byte{0, 24, 47}: "Texas Instruments", - [3]byte{0, 24, 48}: "Texas Instruments", - [3]byte{0, 24, 49}: "Texas Instruments", - [3]byte{0, 24, 50}: "Texas Instruments", - [3]byte{0, 24, 51}: "Texas Instruments", - [3]byte{0, 24, 52}: "Texas Instruments", - [3]byte{0, 24, 53}: "Thoratec / ITC", - [3]byte{0, 24, 54}: "Reliance Electric Limited", - [3]byte{0, 24, 55}: "Universal ABIT Co., Ltd.", - [3]byte{0, 24, 56}: "PanAccess Communications,Inc.", - [3]byte{0, 24, 57}: "Cisco-Linksys, LLC", - [3]byte{0, 24, 58}: "Westell Technologies Inc.", - [3]byte{0, 24, 59}: "CENITS Co., Ltd.", - [3]byte{0, 24, 60}: "Encore Software Limited", - [3]byte{0, 24, 61}: "Vertex Link Corporation", - [3]byte{0, 24, 62}: "Digilent, Inc", - [3]byte{0, 24, 63}: "2Wire Inc", - [3]byte{0, 24, 64}: "3 Phoenix, Inc.", - [3]byte{0, 24, 65}: "High Tech Computer Corp", - [3]byte{0, 24, 66}: "Nokia Danmark A/S", - [3]byte{0, 24, 67}: "Dawevision Ltd", - [3]byte{0, 24, 68}: "Heads Up Technologies, Inc.", - [3]byte{0, 24, 69}: "Pulsar-Telecom LLC.", - [3]byte{0, 24, 70}: "Crypto S.A.", - [3]byte{0, 24, 71}: "AceNet Technology Inc.", - [3]byte{0, 24, 72}: "Vecima Networks Inc.", - [3]byte{0, 24, 73}: "Pigeon Point Systems LLC", - [3]byte{0, 24, 74}: "Catcher, Inc.", - [3]byte{0, 24, 75}: "Las Vegas Gaming, Inc.", - [3]byte{0, 24, 76}: "Bogen Communications", - [3]byte{0, 24, 77}: "NETGEAR", - [3]byte{0, 24, 78}: "Lianhe Technologies, Inc.", - [3]byte{0, 24, 79}: "8 Ways Technology Corp.", - [3]byte{0, 24, 80}: "Secfone Kft", - [3]byte{0, 24, 81}: "SWsoft", - [3]byte{0, 24, 82}: "StorLink Semiconductors, Inc.", - [3]byte{0, 24, 83}: "Atera Networks LTD.", - [3]byte{0, 24, 84}: "Argard Co., Ltd", - [3]byte{0, 24, 85}: "Aeromaritime Systembau GmbH", - [3]byte{0, 24, 86}: "EyeFi, Inc", - [3]byte{0, 24, 87}: "Unilever R&D", - [3]byte{0, 24, 88}: "TagMaster AB", - [3]byte{0, 24, 89}: "Strawberry Linux Co.,Ltd.", - [3]byte{0, 24, 90}: "uControl, Inc.", - [3]byte{0, 24, 91}: "Network Chemistry, Inc", - [3]byte{0, 24, 92}: "EDSLAB Technologies", - [3]byte{0, 24, 93}: "TAIGUEN TECHNOLOGY (SHEN-ZHEN) CO., LTD.", - [3]byte{0, 24, 94}: "Nexterm Inc.", - [3]byte{0, 24, 95}: "TAC Inc.", - [3]byte{0, 24, 96}: "SIM Technology Group Shanghai Simcom Ltd.,", - [3]byte{0, 24, 97}: "Ooma, Inc.", - [3]byte{0, 24, 98}: "Seagate Technology", - [3]byte{0, 24, 99}: "Veritech Electronics Limited", - [3]byte{0, 24, 100}: "Eaton Corporation", - [3]byte{0, 24, 101}: "Siemens Healthcare Diagnostics Manufacturing Ltd", - [3]byte{0, 24, 102}: "Leutron Vision", - [3]byte{0, 24, 103}: "Datalogic ADC", - [3]byte{0, 24, 104}: "Cisco SPVTG", - [3]byte{0, 24, 105}: "KINGJIM", - [3]byte{0, 24, 106}: "Global Link Digital Technology Co,.LTD", - [3]byte{0, 24, 107}: "Sambu Communics CO., LTD.", - [3]byte{0, 24, 108}: "Neonode AB", - [3]byte{0, 24, 109}: "Zhenjiang Sapphire Electronic Industry CO.", - [3]byte{0, 24, 110}: "3Com Ltd", - [3]byte{0, 24, 111}: "Setha Industria Eletronica LTDA", - [3]byte{0, 24, 112}: "E28 Shanghai Limited", - [3]byte{0, 24, 113}: "Hewlett Packard", - [3]byte{0, 24, 114}: "Expertise Engineering", - [3]byte{0, 24, 115}: "Cisco Systems, Inc", - [3]byte{0, 24, 116}: "Cisco Systems, Inc", - [3]byte{0, 24, 117}: "AnaCise Testnology Pte Ltd", - [3]byte{0, 24, 118}: "WowWee Ltd.", - [3]byte{0, 24, 119}: "Amplex A/S", - [3]byte{0, 24, 120}: "Mackware GmbH", - [3]byte{0, 24, 121}: "dSys", - [3]byte{0, 24, 122}: "Wiremold", - [3]byte{0, 24, 123}: "4NSYS Co. Ltd.", - [3]byte{0, 24, 124}: "INTERCROSS, LLC", - [3]byte{0, 24, 125}: "Armorlink Co .Ltd", - [3]byte{0, 24, 126}: "RGB Spectrum", - [3]byte{0, 24, 127}: "ZODIANET", - [3]byte{0, 24, 128}: "Maxim Integrated Products", - [3]byte{0, 24, 129}: "Buyang Electronics Industrial Co., Ltd", - [3]byte{0, 24, 130}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{0, 24, 131}: "FORMOSA21 INC.", - [3]byte{0, 24, 132}: "Fon Technology S.L.", - [3]byte{0, 24, 133}: "Avigilon Corporation", - [3]byte{0, 24, 134}: "EL-TECH, INC.", - [3]byte{0, 24, 135}: "Metasystem SpA", - [3]byte{0, 24, 136}: "GOTIVE a.s.", - [3]byte{0, 24, 137}: "WinNet Solutions Limited", - [3]byte{0, 24, 138}: "Infinova LLC", - [3]byte{0, 24, 139}: "Dell Inc.", - [3]byte{0, 24, 140}: "Mobile Action Technology Inc.", - [3]byte{0, 24, 141}: "Nokia Danmark A/S", - [3]byte{0, 24, 142}: "Ekahau, Inc.", - [3]byte{0, 24, 143}: "Montgomery Technology, Inc.", - [3]byte{0, 24, 144}: "RadioCOM, s.r.o.", - [3]byte{0, 24, 145}: "Zhongshan General K-mate Electronics Co., Ltd", - [3]byte{0, 24, 146}: "ads-tec GmbH", - [3]byte{0, 24, 147}: "SHENZHEN PHOTON BROADBAND TECHNOLOGY CO.,LTD", - [3]byte{0, 24, 148}: "NPCore, Inc.", - [3]byte{0, 24, 149}: "Hansun Technologies Inc.", - [3]byte{0, 24, 150}: "Great Well Electronic LTD", - [3]byte{0, 24, 151}: "JESS-LINK PRODUCTS Co., LTD", - [3]byte{0, 24, 152}: "KINGSTATE ELECTRONICS CORPORATION", - [3]byte{0, 24, 153}: "ShenZhen jieshun Science&Technology Industry CO,LTD.", - [3]byte{0, 24, 154}: "HANA Micron Inc.", - [3]byte{0, 24, 155}: "Thomson Inc.", - [3]byte{0, 24, 156}: "Weldex Corporation", - [3]byte{0, 24, 157}: "Navcast Inc.", - [3]byte{0, 24, 158}: "OMNIKEY GmbH.", - [3]byte{0, 24, 159}: "Lenntek Corporation", - [3]byte{0, 24, 160}: "Cierma Ascenseurs", - [3]byte{0, 24, 161}: "Tiqit Computers, Inc.", - [3]byte{0, 24, 162}: "XIP Technology AB", - [3]byte{0, 24, 163}: "ZIPPY TECHNOLOGY CORP.", - [3]byte{0, 24, 164}: "ARRIS Group, Inc.", - [3]byte{0, 24, 165}: "ADigit Technologies Corp.", - [3]byte{0, 24, 166}: "Persistent Systems, LLC", - [3]byte{0, 24, 167}: "Yoggie Security Systems LTD.", - [3]byte{0, 24, 168}: "AnNeal Technology Inc.", - [3]byte{0, 24, 169}: "Ethernet Direct Corporation", - [3]byte{0, 24, 170}: "Protec Fire Detection plc", - [3]byte{0, 24, 171}: "BEIJING LHWT MICROELECTRONICS INC.", - [3]byte{0, 24, 172}: "Shanghai Jiao Da HISYS Technology Co. Ltd.", - [3]byte{0, 24, 173}: "NIDEC SANKYO CORPORATION", - [3]byte{0, 24, 174}: "TVT CO.,LTD", - [3]byte{0, 24, 175}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 24, 176}: "Nortel Networks", - [3]byte{0, 24, 177}: "IBM Corp", - [3]byte{0, 24, 178}: "ADEUNIS RF", - [3]byte{0, 24, 179}: "TEC WizHome Co., Ltd.", - [3]byte{0, 24, 180}: "Dawon Media Inc.", - [3]byte{0, 24, 181}: "Magna Carta", - [3]byte{0, 24, 182}: "S3C, Inc.", - [3]byte{0, 24, 183}: "D3 LED, LLC", - [3]byte{0, 24, 184}: "New Voice International AG", - [3]byte{0, 24, 185}: "Cisco Systems, Inc", - [3]byte{0, 24, 186}: "Cisco Systems, Inc", - [3]byte{0, 24, 187}: "Eliwell Controls srl", - [3]byte{0, 24, 188}: "ZAO NVP Bolid", - [3]byte{0, 24, 189}: "SHENZHEN DVBWORLD TECHNOLOGY CO., LTD.", - [3]byte{0, 24, 190}: "ANSA Corporation", - [3]byte{0, 24, 191}: "Essence Technology Solution, Inc.", - [3]byte{0, 24, 192}: "ARRIS Group, Inc.", - [3]byte{0, 24, 193}: "Almitec Informática e Comércio", - [3]byte{0, 24, 194}: "Firetide, Inc", - [3]byte{0, 24, 195}: "CS Corporation", - [3]byte{0, 24, 196}: "Raba Technologies LLC", - [3]byte{0, 24, 197}: "Nokia Danmark A/S", - [3]byte{0, 24, 198}: "OPW Fuel Management Systems", - [3]byte{0, 24, 199}: "Real Time Automation", - [3]byte{0, 24, 200}: "ISONAS Inc.", - [3]byte{0, 24, 201}: "EOps Technology Limited", - [3]byte{0, 24, 202}: "Viprinet GmbH", - [3]byte{0, 24, 203}: "Tecobest Technology Limited", - [3]byte{0, 24, 204}: "AXIOHM SAS", - [3]byte{0, 24, 205}: "Erae Electronics Industry Co., Ltd", - [3]byte{0, 24, 206}: "Dreamtech Co., Ltd", - [3]byte{0, 24, 207}: "Baldor Electric Company", - [3]byte{0, 24, 208}: "AtRoad, A Trimble Company", - [3]byte{0, 24, 209}: "Siemens Home & Office Comm. Devices", - [3]byte{0, 24, 210}: "High-Gain Antennas LLC", - [3]byte{0, 24, 211}: "TEAMCAST", - [3]byte{0, 24, 212}: "Unified Display Interface SIG", - [3]byte{0, 24, 213}: "REIGNCOM", - [3]byte{0, 24, 214}: "Swirlnet A/S", - [3]byte{0, 24, 215}: "JAVAD GNSS, Inc.", - [3]byte{0, 24, 216}: "ARCH METER Corporation", - [3]byte{0, 24, 217}: "Santosha Internatonal, Inc", - [3]byte{0, 24, 218}: "AMBER wireless GmbH", - [3]byte{0, 24, 219}: "EPL Technology Ltd", - [3]byte{0, 24, 220}: "Prostar Co., Ltd.", - [3]byte{0, 24, 221}: "Silicondust Engineering Ltd", - [3]byte{0, 24, 222}: "Intel Corporate", - [3]byte{0, 24, 223}: "The Morey Corporation", - [3]byte{0, 24, 224}: "ANAVEO", - [3]byte{0, 24, 225}: "Verkerk Service Systemen", - [3]byte{0, 24, 226}: "Topdata Sistemas de Automacao Ltda", - [3]byte{0, 24, 227}: "Visualgate Systems, Inc.", - [3]byte{0, 24, 228}: "YIGUANG", - [3]byte{0, 24, 229}: "Adhoco AG", - [3]byte{0, 24, 230}: "Computer Hardware Design SIA", - [3]byte{0, 24, 231}: "Cameo Communications, INC.", - [3]byte{0, 24, 232}: "Hacetron Corporation", - [3]byte{0, 24, 233}: "Numata Corporation", - [3]byte{0, 24, 234}: "Alltec GmbH", - [3]byte{0, 24, 235}: "Blue Zen Enterprises Private Limited", - [3]byte{0, 24, 236}: "Welding Technology Corporation", - [3]byte{0, 24, 237}: "Accutech Ultrasystems Co., Ltd.", - [3]byte{0, 24, 238}: "Videology Imaging Solutions, Inc.", - [3]byte{0, 24, 239}: "Escape Communications, Inc.", - [3]byte{0, 24, 240}: "JOYTOTO Co., Ltd.", - [3]byte{0, 24, 241}: "Chunichi Denshi Co.,LTD.", - [3]byte{0, 24, 242}: "Beijing Tianyu Communication Equipment Co., Ltd", - [3]byte{0, 24, 243}: "ASUSTek COMPUTER INC.", - [3]byte{0, 24, 244}: "EO TECHNICS Co., Ltd.", - [3]byte{0, 24, 245}: "Shenzhen Streaming Video Technology Company Limited", - [3]byte{0, 24, 246}: "Thomson Telecom Belgium", - [3]byte{0, 24, 247}: "Kameleon Technologies", - [3]byte{0, 24, 248}: "Cisco-Linksys, LLC", - [3]byte{0, 24, 249}: "VVOND, Inc.", - [3]byte{0, 24, 250}: "Yushin Precision Equipment Co.,Ltd.", - [3]byte{0, 24, 251}: "Compro Technology", - [3]byte{0, 24, 252}: "Altec Electronic AG", - [3]byte{0, 24, 253}: "Optimal Technologies International Inc.", - [3]byte{0, 24, 254}: "Hewlett Packard", - [3]byte{0, 24, 255}: "PowerQuattro Co.", - [3]byte{0, 25, 0}: "Intelliverese - DBA Voicecom", - [3]byte{0, 25, 1}: "F1MEDIA", - [3]byte{0, 25, 2}: "Cambridge Consultants Ltd", - [3]byte{0, 25, 3}: "Bigfoot Networks Inc", - [3]byte{0, 25, 4}: "WB Electronics Sp. z o.o.", - [3]byte{0, 25, 5}: "SCHRACK Seconet AG", - [3]byte{0, 25, 6}: "Cisco Systems, Inc", - [3]byte{0, 25, 7}: "Cisco Systems, Inc", - [3]byte{0, 25, 8}: "Duaxes Corporation", - [3]byte{0, 25, 9}: "DEVI - Danfoss A/S", - [3]byte{0, 25, 10}: "HASWARE INC.", - [3]byte{0, 25, 11}: "Southern Vision Systems, Inc.", - [3]byte{0, 25, 12}: "Encore Electronics, Inc.", - [3]byte{0, 25, 13}: "IEEE 1394c", - [3]byte{0, 25, 14}: "Atech Technology Co., Ltd.", - [3]byte{0, 25, 15}: "Advansus Corp.", - [3]byte{0, 25, 16}: "Knick Elektronische Messgeraete GmbH & Co. KG", - [3]byte{0, 25, 17}: "Just In Mobile Information Technologies (Shanghai) Co., Ltd.", - [3]byte{0, 25, 18}: "Welcat Inc", - [3]byte{0, 25, 19}: "Chuang-Yi Network Equipment Co.Ltd.", - [3]byte{0, 25, 20}: "Winix Co., Ltd", - [3]byte{0, 25, 21}: "TECOM Co., Ltd.", - [3]byte{0, 25, 22}: "PayTec AG", - [3]byte{0, 25, 23}: "Posiflex Inc.", - [3]byte{0, 25, 24}: "Interactive Wear AG", - [3]byte{0, 25, 25}: "ASTEL Inc.", - [3]byte{0, 25, 26}: "IRLINK", - [3]byte{0, 25, 27}: "Sputnik Engineering AG", - [3]byte{0, 25, 28}: "Sensicast Systems", - [3]byte{0, 25, 29}: "Nintendo Co., Ltd.", - [3]byte{0, 25, 30}: "Beyondwiz Co., Ltd.", - [3]byte{0, 25, 31}: "Microlink communications Inc.", - [3]byte{0, 25, 32}: "KUME electric Co.,Ltd.", - [3]byte{0, 25, 33}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{0, 25, 34}: "CM Comandos Lineares", - [3]byte{0, 25, 35}: "Phonex Korea Co., LTD.", - [3]byte{0, 25, 36}: "LBNL Engineering", - [3]byte{0, 25, 37}: "Intelicis Corporation", - [3]byte{0, 25, 38}: "BitsGen Co., Ltd.", - [3]byte{0, 25, 39}: "ImCoSys Ltd", - [3]byte{0, 25, 40}: "Siemens AG, Transportation Systems", - [3]byte{0, 25, 41}: "2M2B Montadora de Maquinas Bahia Brasil LTDA", - [3]byte{0, 25, 42}: "Antiope Associates", - [3]byte{0, 25, 43}: "Aclara RF Systems Inc.", - [3]byte{0, 25, 44}: "ARRIS Group, Inc.", - [3]byte{0, 25, 45}: "Nokia Corporation", - [3]byte{0, 25, 46}: "Spectral Instruments, Inc.", - [3]byte{0, 25, 47}: "Cisco Systems, Inc", - [3]byte{0, 25, 48}: "Cisco Systems, Inc", - [3]byte{0, 25, 49}: "Balluff GmbH", - [3]byte{0, 25, 50}: "Gude Analog- und Digialsysteme GmbH", - [3]byte{0, 25, 51}: "Strix Systems, Inc.", - [3]byte{0, 25, 52}: "TRENDON TOUCH TECHNOLOGY CORP.", - [3]byte{0, 25, 53}: "DUERR DENTAL AG", - [3]byte{0, 25, 54}: "STERLITE OPTICAL TECHNOLOGIES LIMITED", - [3]byte{0, 25, 55}: "CommerceGuard AB", - [3]byte{0, 25, 56}: "UMB Communications Co., Ltd.", - [3]byte{0, 25, 57}: "Gigamips", - [3]byte{0, 25, 58}: "OESOLUTIONS", - [3]byte{0, 25, 59}: "Wilibox Deliberant Group LLC", - [3]byte{0, 25, 60}: "HighPoint Technologies Incorporated", - [3]byte{0, 25, 61}: "GMC Guardian Mobility Corp.", - [3]byte{0, 25, 62}: "ADB Broadband Italia", - [3]byte{0, 25, 63}: "RDI technology(Shenzhen) Co.,LTD", - [3]byte{0, 25, 64}: "Rackable Systems", - [3]byte{0, 25, 65}: "Pitney Bowes, Inc", - [3]byte{0, 25, 66}: "ON SOFTWARE INTERNATIONAL LIMITED", - [3]byte{0, 25, 67}: "Belden", - [3]byte{0, 25, 68}: "Fossil Partners, L.P.", - [3]byte{0, 25, 69}: "RF COncepts, LLC", - [3]byte{0, 25, 70}: "Cianet Industria e Comercio S/A", - [3]byte{0, 25, 71}: "Cisco SPVTG", - [3]byte{0, 25, 72}: "AireSpider Networks", - [3]byte{0, 25, 73}: "TENTEL COMTECH CO., LTD.", - [3]byte{0, 25, 74}: "TESTO AG", - [3]byte{0, 25, 75}: "Sagemcom Broadband SAS", - [3]byte{0, 25, 76}: "Fujian Stelcom information & Technology CO.,Ltd", - [3]byte{0, 25, 77}: "Avago Technologies Sdn Bhd", - [3]byte{0, 25, 78}: "Ultra Electronics - TCS (Tactical Communication Systems)", - [3]byte{0, 25, 79}: "Nokia Danmark A/S", - [3]byte{0, 25, 80}: "Harman Multimedia", - [3]byte{0, 25, 81}: "NETCONS, s.r.o.", - [3]byte{0, 25, 82}: "ACOGITO Co., Ltd", - [3]byte{0, 25, 83}: "Chainleader Communications Corp.", - [3]byte{0, 25, 84}: "Leaf Corporation.", - [3]byte{0, 25, 85}: "Cisco Systems, Inc", - [3]byte{0, 25, 86}: "Cisco Systems, Inc", - [3]byte{0, 25, 87}: "Saafnet Canada Inc.", - [3]byte{0, 25, 88}: "Bluetooth SIG, Inc.", - [3]byte{0, 25, 89}: "Staccato Communications Inc.", - [3]byte{0, 25, 90}: "Jenaer Antriebstechnik GmbH", - [3]byte{0, 25, 91}: "D-Link Corporation", - [3]byte{0, 25, 92}: "Innotech Corporation", - [3]byte{0, 25, 93}: "ShenZhen XinHuaTong Opto Electronics Co.,Ltd", - [3]byte{0, 25, 94}: "ARRIS Group, Inc.", - [3]byte{0, 25, 95}: "Valemount Networks Corporation", - [3]byte{0, 25, 96}: "DoCoMo Systems, Inc.", - [3]byte{0, 25, 97}: "Blaupunkt Embedded Systems GmbH", - [3]byte{0, 25, 98}: "Commerciant, LP", - [3]byte{0, 25, 99}: "Sony Mobile Communications AB", - [3]byte{0, 25, 100}: "Doorking Inc.", - [3]byte{0, 25, 101}: "YuHua TelTech (ShangHai) Co., Ltd.", - [3]byte{0, 25, 102}: "Asiarock Technology Limited", - [3]byte{0, 25, 103}: "TELDAT Sp.J.", - [3]byte{0, 25, 104}: "Digital Video Networks(Shanghai) CO. LTD.", - [3]byte{0, 25, 105}: "Nortel Networks", - [3]byte{0, 25, 106}: "MikroM GmbH", - [3]byte{0, 25, 107}: "Danpex Corporation", - [3]byte{0, 25, 108}: "ETROVISION TECHNOLOGY", - [3]byte{0, 25, 109}: "Raybit Systems Korea, Inc", - [3]byte{0, 25, 110}: "Metacom (Pty) Ltd.", - [3]byte{0, 25, 111}: "SensoPart GmbH", - [3]byte{0, 25, 112}: "Z-Com, Inc.", - [3]byte{0, 25, 113}: "Guangzhou Unicomp Technology Co.,Ltd", - [3]byte{0, 25, 114}: "Plexus (Xiamen) Co.,ltd.", - [3]byte{0, 25, 115}: "Zeugma Systems", - [3]byte{0, 25, 116}: "16063", - [3]byte{0, 25, 117}: "Beijing Huisen networks technology Inc", - [3]byte{0, 25, 118}: "Xipher Technologies, LLC", - [3]byte{0, 25, 119}: "Aerohive Networks Inc.", - [3]byte{0, 25, 120}: "Datum Systems, Inc.", - [3]byte{0, 25, 121}: "Nokia Danmark A/S", - [3]byte{0, 25, 122}: "MAZeT GmbH", - [3]byte{0, 25, 123}: "Picotest Corp.", - [3]byte{0, 25, 124}: "Riedel Communications GmbH", - [3]byte{0, 25, 125}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 25, 126}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 25, 127}: "PLANTRONICS, INC.", - [3]byte{0, 25, 128}: "Gridpoint Systems", - [3]byte{0, 25, 129}: "Vivox Inc", - [3]byte{0, 25, 130}: "SmarDTV", - [3]byte{0, 25, 131}: "CCT R&D Limited", - [3]byte{0, 25, 132}: "ESTIC Corporation", - [3]byte{0, 25, 133}: "IT Watchdogs, Inc", - [3]byte{0, 25, 134}: "Cheng Hongjian", - [3]byte{0, 25, 135}: "Panasonic Mobile Communications Co.,Ltd.", - [3]byte{0, 25, 136}: "Wi2Wi, Inc", - [3]byte{0, 25, 137}: "Sonitrol Corporation", - [3]byte{0, 25, 138}: "Northrop Grumman Systems Corp.", - [3]byte{0, 25, 139}: "Novera Optics Korea, Inc.", - [3]byte{0, 25, 140}: "iXSea", - [3]byte{0, 25, 141}: "Ocean Optics, Inc.", - [3]byte{0, 25, 142}: "Oticon A/S", - [3]byte{0, 25, 143}: "Alcatel Bell N.V.", - [3]byte{0, 25, 144}: "ELM DATA Co., Ltd.", - [3]byte{0, 25, 145}: "avinfo", - [3]byte{0, 25, 146}: "Adtran Inc", - [3]byte{0, 25, 147}: "Changshu Switchgear MFG. Co.,Ltd. (Former Changshu Switchgea", - [3]byte{0, 25, 148}: "Jorjin Technologies Inc.", - [3]byte{0, 25, 149}: "Jurong Hi-Tech (Suzhou)Co.ltd", - [3]byte{0, 25, 150}: "TurboChef Technologies Inc.", - [3]byte{0, 25, 151}: "Soft Device Sdn Bhd", - [3]byte{0, 25, 152}: "SATO CORPORATION", - [3]byte{0, 25, 153}: "Fujitsu Technology Solutions GmbH", - [3]byte{0, 25, 154}: "EDO-EVI", - [3]byte{0, 25, 155}: "Diversified Technical Systems, Inc.", - [3]byte{0, 25, 156}: "CTRING", - [3]byte{0, 25, 157}: "Vizio, Inc", - [3]byte{0, 25, 158}: "Nifty", - [3]byte{0, 25, 159}: "DKT A/S", - [3]byte{0, 25, 160}: "NIHON DATA SYSTENS, INC.", - [3]byte{0, 25, 161}: "LG INFORMATION & COMM.", - [3]byte{0, 25, 162}: "ORDYN TECHNOLOGIES", - [3]byte{0, 25, 163}: "asteel electronique atlantique", - [3]byte{0, 25, 164}: "Austar Technology (hang zhou) Co.,Ltd", - [3]byte{0, 25, 165}: "RadarFind Corporation", - [3]byte{0, 25, 166}: "ARRIS Group, Inc.", - [3]byte{0, 25, 167}: "ITU-T", - [3]byte{0, 25, 168}: "WiQuest Communications", - [3]byte{0, 25, 169}: "Cisco Systems, Inc", - [3]byte{0, 25, 170}: "Cisco Systems, Inc", - [3]byte{0, 25, 171}: "Raycom CO ., LTD", - [3]byte{0, 25, 172}: "GSP SYSTEMS Inc.", - [3]byte{0, 25, 173}: "BOBST SA", - [3]byte{0, 25, 174}: "Hopling Technologies b.v.", - [3]byte{0, 25, 175}: "Rigol Technologies, Inc.", - [3]byte{0, 25, 176}: "HanYang System", - [3]byte{0, 25, 177}: "Arrow7 Corporation", - [3]byte{0, 25, 178}: "XYnetsoft Co.,Ltd", - [3]byte{0, 25, 179}: "Stanford Research Systems", - [3]byte{0, 25, 180}: "Intellio Ltd", - [3]byte{0, 25, 181}: "Famar Fueguina S.A.", - [3]byte{0, 25, 182}: "Euro Emme s.r.l.", - [3]byte{0, 25, 183}: "Nokia Danmark A/S", - [3]byte{0, 25, 184}: "Boundary Devices", - [3]byte{0, 25, 185}: "Dell Inc.", - [3]byte{0, 25, 186}: "Paradox Security Systems Ltd", - [3]byte{0, 25, 187}: "Hewlett Packard", - [3]byte{0, 25, 188}: "ELECTRO CHANCE SRL", - [3]byte{0, 25, 189}: "New Media Life", - [3]byte{0, 25, 190}: "Altai Technologies Limited", - [3]byte{0, 25, 191}: "Citiway technology Co.,ltd", - [3]byte{0, 25, 192}: "ARRIS Group, Inc.", - [3]byte{0, 25, 193}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{0, 25, 194}: "Equustek Solutions, Inc.", - [3]byte{0, 25, 195}: "Qualitrol", - [3]byte{0, 25, 196}: "Infocrypt Inc.", - [3]byte{0, 25, 197}: "Sony Interactive Entertainment Inc.", - [3]byte{0, 25, 198}: "zte corporation", - [3]byte{0, 25, 199}: "Cambridge Industries(Group) Co.,Ltd.", - [3]byte{0, 25, 200}: "AnyDATA Corporation", - [3]byte{0, 25, 201}: "S&C ELECTRIC COMPANY", - [3]byte{0, 25, 202}: "Broadata Communications, Inc", - [3]byte{0, 25, 203}: "Zyxel Communications Corporation", - [3]byte{0, 25, 204}: "RCG (HK) Ltd", - [3]byte{0, 25, 205}: "Chengdu ethercom information technology Ltd.", - [3]byte{0, 25, 206}: "Progressive Gaming International", - [3]byte{0, 25, 207}: "SALICRU, S.A.", - [3]byte{0, 25, 208}: "Cathexis", - [3]byte{0, 25, 209}: "Intel Corporate", - [3]byte{0, 25, 210}: "Intel Corporate", - [3]byte{0, 25, 211}: "TRAK Microwave", - [3]byte{0, 25, 212}: "ICX Technologies", - [3]byte{0, 25, 213}: "IP Innovations, Inc.", - [3]byte{0, 25, 214}: "LS Cable and System Ltd.", - [3]byte{0, 25, 215}: "FORTUNETEK CO., LTD", - [3]byte{0, 25, 216}: "MAXFOR", - [3]byte{0, 25, 217}: "Zeutschel GmbH", - [3]byte{0, 25, 218}: "Welltrans O&E Technology Co. , Ltd.", - [3]byte{0, 25, 219}: "MICRO-STAR INTERNATIONAL CO., LTD.", - [3]byte{0, 25, 220}: "ENENSYS Technologies", - [3]byte{0, 25, 221}: "FEI-Zyfer, Inc.", - [3]byte{0, 25, 222}: "MOBITEK", - [3]byte{0, 25, 223}: "Thomson Inc.", - [3]byte{0, 25, 224}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{0, 25, 225}: "Nortel Networks", - [3]byte{0, 25, 226}: "Juniper Networks", - [3]byte{0, 25, 227}: "Apple, Inc.", - [3]byte{0, 25, 228}: "2Wire Inc", - [3]byte{0, 25, 229}: "Lynx Studio Technology, Inc.", - [3]byte{0, 25, 230}: "TOYO MEDIC CO.,LTD.", - [3]byte{0, 25, 231}: "Cisco Systems, Inc", - [3]byte{0, 25, 232}: "Cisco Systems, Inc", - [3]byte{0, 25, 233}: "S-Information Technolgy, Co., Ltd.", - [3]byte{0, 25, 234}: "TeraMage Technologies Co., Ltd.", - [3]byte{0, 25, 235}: "Pyronix Ltd", - [3]byte{0, 25, 236}: "Sagamore Systems, Inc.", - [3]byte{0, 25, 237}: "Axesstel Inc.", - [3]byte{0, 25, 238}: "CARLO GAVAZZI CONTROLS SPA-Controls Division", - [3]byte{0, 25, 239}: "SHENZHEN LINNKING ELECTRONICS CO.,LTD", - [3]byte{0, 25, 240}: "UNIONMAN TECHNOLOGY CO.,LTD", - [3]byte{0, 25, 241}: "Star Communication Network Technology Co.,Ltd", - [3]byte{0, 25, 242}: "Teradyne K.K.", - [3]byte{0, 25, 243}: "Cetis, Inc", - [3]byte{0, 25, 244}: "Convergens Oy Ltd", - [3]byte{0, 25, 245}: "Imagination Technologies Ltd", - [3]byte{0, 25, 246}: "Acconet (PTE) Ltd", - [3]byte{0, 25, 247}: "Onset Computer Corporation", - [3]byte{0, 25, 248}: "Embedded Systems Design, Inc.", - [3]byte{0, 25, 249}: "TDK-Lambda", - [3]byte{0, 25, 250}: "Cable Vision Electronics CO., LTD.", - [3]byte{0, 25, 251}: "BSkyB Ltd", - [3]byte{0, 25, 252}: "PT. Ufoakses Sukses Luarbiasa", - [3]byte{0, 25, 253}: "Nintendo Co., Ltd.", - [3]byte{0, 25, 254}: "SHENZHEN SEECOMM TECHNOLOGY CO.,LTD.", - [3]byte{0, 25, 255}: "Finnzymes", - [3]byte{0, 26, 0}: "MATRIX INC.", - [3]byte{0, 26, 1}: "Smiths Medical", - [3]byte{0, 26, 2}: "SECURE CARE PRODUCTS, INC", - [3]byte{0, 26, 3}: "Angel Electronics Co., Ltd.", - [3]byte{0, 26, 4}: "Interay Solutions BV", - [3]byte{0, 26, 5}: "OPTIBASE LTD", - [3]byte{0, 26, 6}: "OpVista, Inc.", - [3]byte{0, 26, 7}: "Arecont Vision", - [3]byte{0, 26, 8}: "Simoco Ltd.", - [3]byte{0, 26, 9}: "Wayfarer Transit Systems Ltd", - [3]byte{0, 26, 10}: "Adaptive Micro-Ware Inc.", - [3]byte{0, 26, 11}: "BONA TECHNOLOGY INC.", - [3]byte{0, 26, 12}: "Swe-Dish Satellite Systems AB", - [3]byte{0, 26, 13}: "HandHeld entertainment, Inc.", - [3]byte{0, 26, 14}: "Cheng Uei Precision Industry Co.,Ltd", - [3]byte{0, 26, 15}: "Sistemas Avanzados de Control, S.A.", - [3]byte{0, 26, 16}: "LUCENT TRANS ELECTRONICS CO.,LTD", - [3]byte{0, 26, 17}: "Google, Inc.", - [3]byte{0, 26, 18}: "Essilor", - [3]byte{0, 26, 19}: "Wanlida Group Co., LTD", - [3]byte{0, 26, 20}: "Xin Hua Control Engineering Co.,Ltd.", - [3]byte{0, 26, 21}: "gemalto e-Payment", - [3]byte{0, 26, 22}: "Nokia Danmark A/S", - [3]byte{0, 26, 23}: "Teak Technologies, Inc.", - [3]byte{0, 26, 24}: "Advanced Simulation Technology inc.", - [3]byte{0, 26, 25}: "Computer Engineering Limited", - [3]byte{0, 26, 26}: "Gentex Corporation/Electro-Acoustic Products", - [3]byte{0, 26, 27}: "ARRIS Group, Inc.", - [3]byte{0, 26, 28}: "GT&T Engineering Pte Ltd", - [3]byte{0, 26, 29}: "PChome Online Inc.", - [3]byte{0, 26, 30}: "Aruba Networks", - [3]byte{0, 26, 31}: "Coastal Environmental Systems", - [3]byte{0, 26, 32}: "CMOTECH Co. Ltd.", - [3]byte{0, 26, 33}: "Brookhuis Applied Technologies BV", - [3]byte{0, 26, 34}: "eQ-3 Entwicklung GmbH", - [3]byte{0, 26, 35}: "Ice Qube, Inc", - [3]byte{0, 26, 36}: "Galaxy Telecom Technologies Ltd", - [3]byte{0, 26, 37}: "DELTA DORE", - [3]byte{0, 26, 38}: "Deltanode Solutions AB", - [3]byte{0, 26, 39}: "Ubistar", - [3]byte{0, 26, 40}: "ASWT Co., LTD. Taiwan Branch H.K.", - [3]byte{0, 26, 41}: "Johnson Outdoors Marine Electronics d/b/a Minnkota", - [3]byte{0, 26, 42}: "Arcadyan Technology Corporation", - [3]byte{0, 26, 43}: "Ayecom Technology Co., Ltd.", - [3]byte{0, 26, 44}: "SATEC Co.,LTD", - [3]byte{0, 26, 45}: "The Navvo Group", - [3]byte{0, 26, 46}: "Ziova Coporation", - [3]byte{0, 26, 47}: "Cisco Systems, Inc", - [3]byte{0, 26, 48}: "Cisco Systems, Inc", - [3]byte{0, 26, 49}: "SCAN COIN Industries AB", - [3]byte{0, 26, 50}: "ACTIVA MULTIMEDIA", - [3]byte{0, 26, 51}: "ASI Communications, Inc.", - [3]byte{0, 26, 52}: "Konka Group Co., Ltd.", - [3]byte{0, 26, 53}: "BARTEC GmbH", - [3]byte{0, 26, 54}: "Aipermon GmbH & Co. KG", - [3]byte{0, 26, 55}: "Lear Corporation", - [3]byte{0, 26, 56}: "Sanmina-SCI", - [3]byte{0, 26, 57}: "Merten GmbH&CoKG", - [3]byte{0, 26, 58}: "Dongahelecomm", - [3]byte{0, 26, 59}: "Doah Elecom Inc.", - [3]byte{0, 26, 60}: "Technowave Ltd.", - [3]byte{0, 26, 61}: "Ajin Vision Co.,Ltd", - [3]byte{0, 26, 62}: "Faster Technology LLC", - [3]byte{0, 26, 63}: "intelbras", - [3]byte{0, 26, 64}: "A-FOUR TECH CO., LTD.", - [3]byte{0, 26, 65}: "INOCOVA Co.,Ltd", - [3]byte{0, 26, 66}: "Techcity Technology co., Ltd.", - [3]byte{0, 26, 67}: "Logical Link Communications", - [3]byte{0, 26, 68}: "JWTrading Co., Ltd", - [3]byte{0, 26, 69}: "GN Netcom A/S", - [3]byte{0, 26, 70}: "Digital Multimedia Technology Co., Ltd", - [3]byte{0, 26, 71}: "Agami Systems, Inc.", - [3]byte{0, 26, 72}: "Takacom Corporation", - [3]byte{0, 26, 73}: "Micro Vision Co.,LTD", - [3]byte{0, 26, 74}: "Qumranet Inc.", - [3]byte{0, 26, 75}: "Hewlett Packard", - [3]byte{0, 26, 76}: "Crossbow Technology, Inc", - [3]byte{0, 26, 77}: "GIGA-BYTE TECHNOLOGY CO.,LTD.", - [3]byte{0, 26, 78}: "NTI AG / LinMot", - [3]byte{0, 26, 79}: "AVM GmbH", - [3]byte{0, 26, 80}: "PheeNet Technology Corp.", - [3]byte{0, 26, 81}: "Alfred Mann Foundation", - [3]byte{0, 26, 82}: "Meshlinx Wireless Inc.", - [3]byte{0, 26, 83}: "Zylaya", - [3]byte{0, 26, 84}: "Hip Shing Electronics Ltd.", - [3]byte{0, 26, 85}: "ACA-Digital Corporation", - [3]byte{0, 26, 86}: "ViewTel Co,. Ltd.", - [3]byte{0, 26, 87}: "Matrix Design Group, LLC", - [3]byte{0, 26, 88}: "CCV Deutschland GmbH - Celectronic eHealth Div.", - [3]byte{0, 26, 89}: "Ircona", - [3]byte{0, 26, 90}: "Korea Electric Power Data Network (KDN) Co., Ltd", - [3]byte{0, 26, 91}: "NetCare Service Co., Ltd.", - [3]byte{0, 26, 92}: "Euchner GmbH+Co. KG", - [3]byte{0, 26, 93}: "Mobinnova Corp.", - [3]byte{0, 26, 94}: "Thincom Technology Co.,Ltd", - [3]byte{0, 26, 95}: "KitWorks.fi Ltd.", - [3]byte{0, 26, 96}: "Wave Electronics Co.,Ltd.", - [3]byte{0, 26, 97}: "PacStar Corp.", - [3]byte{0, 26, 98}: "Data Robotics, Incorporated", - [3]byte{0, 26, 99}: "Elster Solutions, LLC,", - [3]byte{0, 26, 100}: "IBM Corp", - [3]byte{0, 26, 101}: "Seluxit", - [3]byte{0, 26, 102}: "ARRIS Group, Inc.", - [3]byte{0, 26, 103}: "Infinite QL Sdn Bhd", - [3]byte{0, 26, 104}: "Weltec Enterprise Co., Ltd.", - [3]byte{0, 26, 105}: "Wuhan Yangtze Optical Technology CO.,Ltd.", - [3]byte{0, 26, 106}: "Tranzas, Inc.", - [3]byte{0, 26, 107}: "Universal Global Scientific Industrial Co., Ltd.", - [3]byte{0, 26, 108}: "Cisco Systems, Inc", - [3]byte{0, 26, 109}: "Cisco Systems, Inc", - [3]byte{0, 26, 110}: "Impro Technologies", - [3]byte{0, 26, 111}: "MI.TEL s.r.l.", - [3]byte{0, 26, 112}: "Cisco-Linksys, LLC", - [3]byte{0, 26, 113}: "Diostech Co., Ltd.", - [3]byte{0, 26, 114}: "Mosart Semiconductor Corp.", - [3]byte{0, 26, 115}: "Gemtek Technology Co., Ltd.", - [3]byte{0, 26, 116}: "Procare International Co", - [3]byte{0, 26, 117}: "Sony Mobile Communications AB", - [3]byte{0, 26, 118}: "SDT information Technology Co.,LTD.", - [3]byte{0, 26, 119}: "ARRIS Group, Inc.", - [3]byte{0, 26, 120}: "ubtos", - [3]byte{0, 26, 121}: "TELECOMUNICATION TECHNOLOGIES LTD.", - [3]byte{0, 26, 122}: "Lismore Instruments Limited", - [3]byte{0, 26, 123}: "Teleco, Inc.", - [3]byte{0, 26, 124}: "Hirschmann Multimedia B.V.", - [3]byte{0, 26, 125}: "cyber-blue(HK)Ltd", - [3]byte{0, 26, 126}: "LN Srithai Comm Ltd.", - [3]byte{0, 26, 127}: "GCI Science & Technology Co.,LTD", - [3]byte{0, 26, 128}: "Sony Corporation", - [3]byte{0, 26, 129}: "Zelax", - [3]byte{0, 26, 130}: "PROBA Building Automation Co.,LTD", - [3]byte{0, 26, 131}: "Pegasus Technologies Inc.", - [3]byte{0, 26, 132}: "V One Multimedia Pte Ltd", - [3]byte{0, 26, 133}: "NV Michel Van de Wiele", - [3]byte{0, 26, 134}: "AdvancedIO Systems Inc", - [3]byte{0, 26, 135}: "Canhold International Limited", - [3]byte{0, 26, 136}: "Venergy,Co,Ltd", - [3]byte{0, 26, 137}: "Nokia Danmark A/S", - [3]byte{0, 26, 138}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 26, 139}: "CHUNIL ELECTRIC IND., CO.", - [3]byte{0, 26, 140}: "Sophos Ltd", - [3]byte{0, 26, 141}: "AVECS Bergen GmbH", - [3]byte{0, 26, 142}: "3Way Networks Ltd", - [3]byte{0, 26, 143}: "Nortel Networks", - [3]byte{0, 26, 144}: "Trópico Sistemas e Telecomunicações da Amazônia LTDA.", - [3]byte{0, 26, 145}: "FusionDynamic Ltd.", - [3]byte{0, 26, 146}: "ASUSTek COMPUTER INC.", - [3]byte{0, 26, 147}: "ERCO Leuchten GmbH", - [3]byte{0, 26, 148}: "Votronic GmbH", - [3]byte{0, 26, 149}: "Hisense Mobile Communications Technoligy Co.,Ltd.", - [3]byte{0, 26, 150}: "ECLER S.A.", - [3]byte{0, 26, 151}: "fitivision technology Inc.", - [3]byte{0, 26, 152}: "Asotel Communication Limited Taiwan Branch", - [3]byte{0, 26, 153}: "Smarty (HZ) Information Electronics Co., Ltd", - [3]byte{0, 26, 154}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd", - [3]byte{0, 26, 155}: "ADEC & Parter AG", - [3]byte{0, 26, 156}: "RightHand Technologies, Inc.", - [3]byte{0, 26, 157}: "Skipper Wireless, Inc.", - [3]byte{0, 26, 158}: "ICON Digital International Limited", - [3]byte{0, 26, 159}: "A-Link Ltd", - [3]byte{0, 26, 160}: "Dell Inc.", - [3]byte{0, 26, 161}: "Cisco Systems, Inc", - [3]byte{0, 26, 162}: "Cisco Systems, Inc", - [3]byte{0, 26, 163}: "DELORME", - [3]byte{0, 26, 164}: "Future University-Hakodate", - [3]byte{0, 26, 165}: "BRN Phoenix", - [3]byte{0, 26, 166}: "Telefunken Radio Communication Systems GmbH &CO.KG", - [3]byte{0, 26, 167}: "Torian Wireless", - [3]byte{0, 26, 168}: "Mamiya Digital Imaging Co., Ltd.", - [3]byte{0, 26, 169}: "FUJIAN STAR-NET COMMUNICATION CO.,LTD", - [3]byte{0, 26, 170}: "Analogic Corp.", - [3]byte{0, 26, 171}: "eWings s.r.l.", - [3]byte{0, 26, 172}: "Corelatus AB", - [3]byte{0, 26, 173}: "ARRIS Group, Inc.", - [3]byte{0, 26, 174}: "Savant Systems LLC", - [3]byte{0, 26, 175}: "BLUSENS TECHNOLOGY", - [3]byte{0, 26, 176}: "Signal Networks Pvt. Ltd.,", - [3]byte{0, 26, 177}: "Asia Pacific Satellite Industries Co., Ltd.", - [3]byte{0, 26, 178}: "Cyber Solutions Inc.", - [3]byte{0, 26, 179}: "VISIONITE INC.", - [3]byte{0, 26, 180}: "FFEI Ltd.", - [3]byte{0, 26, 181}: "Home Network System", - [3]byte{0, 26, 182}: "Texas Instruments", - [3]byte{0, 26, 183}: "Ethos Networks LTD.", - [3]byte{0, 26, 184}: "Anseri Corporation", - [3]byte{0, 26, 185}: "PMC", - [3]byte{0, 26, 186}: "Caton Overseas Limited", - [3]byte{0, 26, 187}: "Fontal Technology Incorporation", - [3]byte{0, 26, 188}: "U4EA Technologies Ltd", - [3]byte{0, 26, 189}: "Impatica Inc.", - [3]byte{0, 26, 190}: "COMPUTER HI-TECH INC.", - [3]byte{0, 26, 191}: "TRUMPF Laser Marking Systems AG", - [3]byte{0, 26, 192}: "JOYBIEN TECHNOLOGIES CO., LTD.", - [3]byte{0, 26, 193}: "3Com Ltd", - [3]byte{0, 26, 194}: "YEC Co.,Ltd.", - [3]byte{0, 26, 195}: "Scientific-Atlanta, Inc", - [3]byte{0, 26, 196}: "2Wire Inc", - [3]byte{0, 26, 197}: "BreakingPoint Systems, Inc.", - [3]byte{0, 26, 198}: "Micro Control Designs", - [3]byte{0, 26, 199}: "UNIPOINT", - [3]byte{0, 26, 200}: "ISL (Instrumentation Scientifique de Laboratoire)", - [3]byte{0, 26, 201}: "SUZUKEN CO.,LTD", - [3]byte{0, 26, 202}: "Tilera Corporation", - [3]byte{0, 26, 203}: "Autocom Products Ltd", - [3]byte{0, 26, 204}: "Celestial Semiconductor, Ltd", - [3]byte{0, 26, 205}: "Tidel Engineering LP", - [3]byte{0, 26, 206}: "YUPITERU CORPORATION", - [3]byte{0, 26, 207}: "C.T. ELETTRONICA", - [3]byte{0, 26, 208}: "Albis Technologies AG", - [3]byte{0, 26, 209}: "FARGO CO., LTD.", - [3]byte{0, 26, 210}: "Eletronica Nitron Ltda", - [3]byte{0, 26, 211}: "Vamp Ltd.", - [3]byte{0, 26, 212}: "iPOX Technology Co., Ltd.", - [3]byte{0, 26, 213}: "KMC CHAIN INDUSTRIAL CO., LTD.", - [3]byte{0, 26, 214}: "JIAGNSU AETNA ELECTRIC CO.,LTD", - [3]byte{0, 26, 215}: "Christie Digital Systems, Inc.", - [3]byte{0, 26, 216}: "AlsterAero GmbH", - [3]byte{0, 26, 217}: "International Broadband Electric Communications, Inc.", - [3]byte{0, 26, 218}: "Biz-2-Me Inc.", - [3]byte{0, 26, 219}: "ARRIS Group, Inc.", - [3]byte{0, 26, 220}: "Nokia Danmark A/S", - [3]byte{0, 26, 221}: "PePWave Ltd", - [3]byte{0, 26, 222}: "ARRIS Group, Inc.", - [3]byte{0, 26, 223}: "Interactivetv Pty Limited", - [3]byte{0, 26, 224}: "Mythology Tech Express Inc.", - [3]byte{0, 26, 225}: "EDGE ACCESS INC", - [3]byte{0, 26, 226}: "Cisco Systems, Inc", - [3]byte{0, 26, 227}: "Cisco Systems, Inc", - [3]byte{0, 26, 228}: "Medicis Technologies Corporation", - [3]byte{0, 26, 229}: "Mvox Technologies Inc.", - [3]byte{0, 26, 230}: "Atlanta Advanced Communications Holdings Limited", - [3]byte{0, 26, 231}: "Aztek Networks, Inc.", - [3]byte{0, 26, 232}: "Unify Software and Solutions GmbH & Co. KG", - [3]byte{0, 26, 233}: "Nintendo Co., Ltd.", - [3]byte{0, 26, 234}: "Radio Terminal Systems Pty Ltd", - [3]byte{0, 26, 235}: "Allied Telesis R&D Center K.K.", - [3]byte{0, 26, 236}: "Keumbee Electronics Co.,Ltd.", - [3]byte{0, 26, 237}: "INCOTEC GmbH", - [3]byte{0, 26, 238}: "Shenztech Ltd", - [3]byte{0, 26, 239}: "Loopcomm Technology, Inc.", - [3]byte{0, 26, 240}: "Alcatel-Lucent IPD", - [3]byte{0, 26, 241}: "Embedded Artists AB", - [3]byte{0, 26, 242}: "Dynavisions Schweiz AG", - [3]byte{0, 26, 243}: "Samyoung Electronics", - [3]byte{0, 26, 244}: "Handreamnet", - [3]byte{0, 26, 245}: "PENTAONE. CO., LTD.", - [3]byte{0, 26, 246}: "Woven Systems, Inc.", - [3]byte{0, 26, 247}: "dataschalt e+a GmbH", - [3]byte{0, 26, 248}: "Copley Controls Corporation", - [3]byte{0, 26, 249}: "AeroVIronment (AV Inc)", - [3]byte{0, 26, 250}: "Welch Allyn, Inc.", - [3]byte{0, 26, 251}: "Joby Inc.", - [3]byte{0, 26, 252}: "ModusLink Corporation", - [3]byte{0, 26, 253}: "EVOLIS", - [3]byte{0, 26, 254}: "SOFACREAL", - [3]byte{0, 26, 255}: "Wizyoung Tech.", - [3]byte{0, 27, 0}: "Neopost Technologies", - [3]byte{0, 27, 1}: "Applied Radio Technologies", - [3]byte{0, 27, 2}: "ED Co.Ltd", - [3]byte{0, 27, 3}: "Action Technology (SZ) Co., Ltd", - [3]byte{0, 27, 4}: "Affinity International S.p.a", - [3]byte{0, 27, 5}: "YMC AG", - [3]byte{0, 27, 6}: "Ateliers R. LAUMONIER", - [3]byte{0, 27, 7}: "Mendocino Software", - [3]byte{0, 27, 8}: "Danfoss Drives A/S", - [3]byte{0, 27, 9}: "Matrix Telecom Pvt. Ltd.", - [3]byte{0, 27, 10}: "Intelligent Distributed Controls Ltd", - [3]byte{0, 27, 11}: "Phidgets Inc.", - [3]byte{0, 27, 12}: "Cisco Systems, Inc", - [3]byte{0, 27, 13}: "Cisco Systems, Inc", - [3]byte{0, 27, 14}: "InoTec GmbH Organisationssysteme", - [3]byte{0, 27, 15}: "Petratec", - [3]byte{0, 27, 16}: "ShenZhen Kang Hui Technology Co.,ltd", - [3]byte{0, 27, 17}: "D-Link Corporation", - [3]byte{0, 27, 18}: "Apprion", - [3]byte{0, 27, 19}: "Icron Technologies Corporation", - [3]byte{0, 27, 20}: "Carex Lighting Equipment Factory", - [3]byte{0, 27, 21}: "Voxtel, Inc.", - [3]byte{0, 27, 22}: "Celtro Ltd.", - [3]byte{0, 27, 23}: "Palo Alto Networks", - [3]byte{0, 27, 24}: "Tsuken Electric Ind. Co.,Ltd", - [3]byte{0, 27, 25}: "IEEE I&M Society TC9", - [3]byte{0, 27, 26}: "e-trees Japan, Inc.", - [3]byte{0, 27, 27}: "Siemens AG,", - [3]byte{0, 27, 28}: "Coherent", - [3]byte{0, 27, 29}: "Phoenix International Co., Ltd", - [3]byte{0, 27, 30}: "HART Communication Foundation", - [3]byte{0, 27, 31}: "DELTA - Danish Electronics, Light & Acoustics", - [3]byte{0, 27, 32}: "TPine Technology", - [3]byte{0, 27, 33}: "Intel Corporate", - [3]byte{0, 27, 34}: "Palit Microsystems ( H.K.) Ltd.", - [3]byte{0, 27, 35}: "SimpleComTools", - [3]byte{0, 27, 36}: "QUANTA COMPUTER INC.", - [3]byte{0, 27, 37}: "Nortel Networks", - [3]byte{0, 27, 38}: "RON-Telecom ZAO", - [3]byte{0, 27, 39}: "Merlin CSI", - [3]byte{0, 27, 40}: "POLYGON, JSC", - [3]byte{0, 27, 41}: "Avantis.Co.,Ltd", - [3]byte{0, 27, 42}: "Cisco Systems, Inc", - [3]byte{0, 27, 43}: "Cisco Systems, Inc", - [3]byte{0, 27, 44}: "ATRON electronic GmbH", - [3]byte{0, 27, 45}: "Med-Eng Systems Inc.", - [3]byte{0, 27, 46}: "Sinkyo Electron Inc", - [3]byte{0, 27, 47}: "NETGEAR", - [3]byte{0, 27, 48}: "Solitech Inc.", - [3]byte{0, 27, 49}: "Neural Image. Co. Ltd.", - [3]byte{0, 27, 50}: "QLogic Corporation", - [3]byte{0, 27, 51}: "Nokia Danmark A/S", - [3]byte{0, 27, 52}: "Focus System Inc.", - [3]byte{0, 27, 53}: "ChongQing JINOU Science & Technology Development CO.,Ltd", - [3]byte{0, 27, 54}: "Tsubata Engineering Co.,Ltd. (Head Office)", - [3]byte{0, 27, 55}: "Computec Oy", - [3]byte{0, 27, 56}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{0, 27, 57}: "Proxicast", - [3]byte{0, 27, 58}: "SIMS Corp.", - [3]byte{0, 27, 59}: "Yi-Qing CO., LTD", - [3]byte{0, 27, 60}: "Software Technologies Group,Inc.", - [3]byte{0, 27, 61}: "EuroTel Spa", - [3]byte{0, 27, 62}: "Curtis, Inc.", - [3]byte{0, 27, 63}: "ProCurve Networking by HP", - [3]byte{0, 27, 64}: "Network Automation mxc AB", - [3]byte{0, 27, 65}: "General Infinity Co.,Ltd.", - [3]byte{0, 27, 66}: "Wise & Blue", - [3]byte{0, 27, 67}: "Beijing DG Telecommunications equipment Co.,Ltd", - [3]byte{0, 27, 68}: "SanDisk Corporation", - [3]byte{0, 27, 69}: "ABB AS, Division Automation Products", - [3]byte{0, 27, 70}: "Blueone Technology Co.,Ltd", - [3]byte{0, 27, 71}: "Futarque A/S", - [3]byte{0, 27, 72}: "Shenzhen Lantech Electronics Co., Ltd.", - [3]byte{0, 27, 73}: "Roberts Radio limited", - [3]byte{0, 27, 74}: "W&W Communications, Inc.", - [3]byte{0, 27, 75}: "SANION Co., Ltd.", - [3]byte{0, 27, 76}: "Signtech", - [3]byte{0, 27, 77}: "Areca Technology Corporation", - [3]byte{0, 27, 78}: "Navman New Zealand", - [3]byte{0, 27, 79}: "Avaya Inc", - [3]byte{0, 27, 80}: "Nizhny Novgorod Factory named after M.Frunze, FSUE (NZiF)", - [3]byte{0, 27, 81}: "Vector Technology Corp.", - [3]byte{0, 27, 82}: "ARRIS Group, Inc.", - [3]byte{0, 27, 83}: "Cisco Systems, Inc", - [3]byte{0, 27, 84}: "Cisco Systems, Inc", - [3]byte{0, 27, 85}: "Hurco Automation Ltd.", - [3]byte{0, 27, 86}: "Tehuti Networks Ltd.", - [3]byte{0, 27, 87}: "SEMINDIA SYSTEMS PRIVATE LIMITED", - [3]byte{0, 27, 88}: "ACE CAD Enterprise Co., Ltd.", - [3]byte{0, 27, 89}: "Sony Mobile Communications AB", - [3]byte{0, 27, 90}: "Apollo Imaging Technologies, Inc.", - [3]byte{0, 27, 91}: "2Wire Inc", - [3]byte{0, 27, 92}: "Azuretec Co., Ltd.", - [3]byte{0, 27, 93}: "Vololink Pty Ltd", - [3]byte{0, 27, 94}: "BPL Limited", - [3]byte{0, 27, 95}: "Alien Technology", - [3]byte{0, 27, 96}: "NAVIGON AG", - [3]byte{0, 27, 97}: "Digital Acoustics, LLC", - [3]byte{0, 27, 98}: "JHT Optoelectronics Co.,Ltd.", - [3]byte{0, 27, 99}: "Apple, Inc.", - [3]byte{0, 27, 100}: "IsaacLandKorea Co., Ltd,", - [3]byte{0, 27, 101}: "China Gridcom Co., Ltd", - [3]byte{0, 27, 102}: "Sennheiser electronic GmbH & Co. KG", - [3]byte{0, 27, 103}: "Cisco Systems Inc", - [3]byte{0, 27, 104}: "Modnnet Co., Ltd", - [3]byte{0, 27, 105}: "Equaline Corporation", - [3]byte{0, 27, 106}: "Powerwave Technologies Sweden AB", - [3]byte{0, 27, 107}: "Swyx Solutions AG", - [3]byte{0, 27, 108}: "LookX Digital Media BV", - [3]byte{0, 27, 109}: "Midtronics, Inc.", - [3]byte{0, 27, 110}: "Anue Systems, Inc.", - [3]byte{0, 27, 111}: "Teletrak Ltd", - [3]byte{0, 27, 112}: "IRI Ubiteq, INC.", - [3]byte{0, 27, 113}: "Telular Corp.", - [3]byte{0, 27, 114}: "Sicep s.p.a.", - [3]byte{0, 27, 115}: "DTL Broadcast Ltd", - [3]byte{0, 27, 116}: "MiraLink Corporation", - [3]byte{0, 27, 117}: "Hypermedia Systems", - [3]byte{0, 27, 118}: "Ripcode, Inc.", - [3]byte{0, 27, 119}: "Intel Corporate", - [3]byte{0, 27, 120}: "Hewlett Packard", - [3]byte{0, 27, 121}: "FAIVELEY TRANSPORT", - [3]byte{0, 27, 122}: "Nintendo Co., Ltd.", - [3]byte{0, 27, 123}: "The Tintometer Ltd", - [3]byte{0, 27, 124}: "A & R Cambridge", - [3]byte{0, 27, 125}: "CXR Anderson Jacobson", - [3]byte{0, 27, 126}: "Beckmann GmbH", - [3]byte{0, 27, 127}: "TMN Technologies Telecomunicacoes Ltda", - [3]byte{0, 27, 128}: "LORD Corporation", - [3]byte{0, 27, 129}: "DATAQ Instruments, Inc.", - [3]byte{0, 27, 130}: "Taiwan Semiconductor Co., Ltd.", - [3]byte{0, 27, 131}: "Finsoft Ltd", - [3]byte{0, 27, 132}: "Scan Engineering Telecom", - [3]byte{0, 27, 133}: "MAN Diesel SE", - [3]byte{0, 27, 134}: "Bosch Access Systems GmbH", - [3]byte{0, 27, 135}: "Deepsound Tech. Co., Ltd", - [3]byte{0, 27, 136}: "Divinet Access Technologies Ltd", - [3]byte{0, 27, 137}: "EMZA Visual Sense Ltd.", - [3]byte{0, 27, 138}: "2M Electronic A/S", - [3]byte{0, 27, 139}: "NEC Platforms, Ltd.", - [3]byte{0, 27, 140}: "JMicron Technology Corp.", - [3]byte{0, 27, 141}: "Electronic Computer Systems, Inc.", - [3]byte{0, 27, 142}: "Hulu Sweden AB", - [3]byte{0, 27, 143}: "Cisco Systems, Inc", - [3]byte{0, 27, 144}: "Cisco Systems, Inc", - [3]byte{0, 27, 145}: "EFKON AG", - [3]byte{0, 27, 146}: "l-acoustics", - [3]byte{0, 27, 147}: "JC Decaux SA DNT", - [3]byte{0, 27, 148}: "T.E.M.A. S.p.A.", - [3]byte{0, 27, 149}: "VIDEO SYSTEMS SRL", - [3]byte{0, 27, 150}: "General Sensing", - [3]byte{0, 27, 151}: "Violin Technologies", - [3]byte{0, 27, 152}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 27, 153}: "KS System GmbH", - [3]byte{0, 27, 154}: "Apollo Fire Detectors Ltd", - [3]byte{0, 27, 155}: "Hose-McCann Communications", - [3]byte{0, 27, 156}: "SATEL sp. z o.o.", - [3]byte{0, 27, 157}: "Novus Security Sp. z o.o.", - [3]byte{0, 27, 158}: "ASKEY COMPUTER CORP", - [3]byte{0, 27, 159}: "Calyptech Pty Ltd", - [3]byte{0, 27, 160}: "Awox", - [3]byte{0, 27, 161}: "Åmic AB", - [3]byte{0, 27, 162}: "IDS Imaging Development Systems GmbH", - [3]byte{0, 27, 163}: "Flexit Group GmbH", - [3]byte{0, 27, 164}: "S.A.E Afikim", - [3]byte{0, 27, 165}: "MyungMin Systems, Inc.", - [3]byte{0, 27, 166}: "intotech inc.", - [3]byte{0, 27, 167}: "Lorica Solutions", - [3]byte{0, 27, 168}: "UBI&MOBI,.Inc", - [3]byte{0, 27, 169}: "Brother industries, LTD.", - [3]byte{0, 27, 170}: "XenICs nv", - [3]byte{0, 27, 171}: "Telchemy, Incorporated", - [3]byte{0, 27, 172}: "Curtiss Wright Controls Embedded Computing", - [3]byte{0, 27, 173}: "iControl Incorporated", - [3]byte{0, 27, 174}: "Micro Control Systems, Inc", - [3]byte{0, 27, 175}: "Nokia Danmark A/S", - [3]byte{0, 27, 176}: "BHARAT ELECTRONICS", - [3]byte{0, 27, 177}: "Wistron Neweb Corporation", - [3]byte{0, 27, 178}: "Intellect International NV", - [3]byte{0, 27, 179}: "Condalo GmbH", - [3]byte{0, 27, 180}: "Airvod Limited", - [3]byte{0, 27, 181}: "Cherry GmbH", - [3]byte{0, 27, 182}: "Bird Electronic Corp.", - [3]byte{0, 27, 183}: "Alta Heights Technology Corp.", - [3]byte{0, 27, 184}: "BLUEWAY ELECTRONIC CO;LTD", - [3]byte{0, 27, 185}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{0, 27, 186}: "Nortel Networks", - [3]byte{0, 27, 187}: "RFTech Co.,Ltd", - [3]byte{0, 27, 188}: "Silver Peak Systems, Inc.", - [3]byte{0, 27, 189}: "FMC Kongsberg Subsea AS", - [3]byte{0, 27, 190}: "ICOP Digital", - [3]byte{0, 27, 191}: "Sagemcom Broadband SAS", - [3]byte{0, 27, 192}: "Juniper Networks", - [3]byte{0, 27, 193}: "HOLUX Technology, Inc.", - [3]byte{0, 27, 194}: "Integrated Control Technology Limitied", - [3]byte{0, 27, 195}: "Mobisolution Co.,Ltd", - [3]byte{0, 27, 196}: "Ultratec, Inc.", - [3]byte{0, 27, 197}: "IEEE Registration Authority", - [3]byte{0, 27, 198}: "Strato Rechenzentrum AG", - [3]byte{0, 27, 199}: "StarVedia Technology Inc.", - [3]byte{0, 27, 200}: "MIURA CO.,LTD", - [3]byte{0, 27, 201}: "FSN DISPLAY INC", - [3]byte{0, 27, 202}: "Beijing Run Technology LTD. Company", - [3]byte{0, 27, 203}: "PEMPEK SYSTEMS PTY LTD", - [3]byte{0, 27, 204}: "KINGTEK CCTV ALLIANCE CO., LTD.", - [3]byte{0, 27, 205}: "DAVISCOMMS (S) PTE LTD", - [3]byte{0, 27, 206}: "Measurement Devices Ltd", - [3]byte{0, 27, 207}: "Dataupia Corporation", - [3]byte{0, 27, 208}: "IDENTEC SOLUTIONS", - [3]byte{0, 27, 209}: "SOGESTMATIC", - [3]byte{0, 27, 210}: "ULTRA-X ASIA PACIFIC Inc.", - [3]byte{0, 27, 211}: "Panasonic Corporation AVC Networks Company", - [3]byte{0, 27, 212}: "Cisco Systems, Inc", - [3]byte{0, 27, 213}: "Cisco Systems, Inc", - [3]byte{0, 27, 214}: "Kelvin Hughes Ltd", - [3]byte{0, 27, 215}: "Cisco SPVTG", - [3]byte{0, 27, 216}: "DVTel LTD", - [3]byte{0, 27, 217}: "Edgewater Computer Systems", - [3]byte{0, 27, 218}: "UTStarcom Inc", - [3]byte{0, 27, 219}: "Valeo VECS", - [3]byte{0, 27, 220}: "Vencer Co., Ltd.", - [3]byte{0, 27, 221}: "ARRIS Group, Inc.", - [3]byte{0, 27, 222}: "Renkus-Heinz, Inc.", - [3]byte{0, 27, 223}: "Iskra Sistemi d.d.", - [3]byte{0, 27, 224}: "TELENOT ELECTRONIC GmbH", - [3]byte{0, 27, 225}: "ViaLogy", - [3]byte{0, 27, 226}: "AhnLab,Inc.", - [3]byte{0, 27, 227}: "Health Hero Network, Inc.", - [3]byte{0, 27, 228}: "TOWNET SRL", - [3]byte{0, 27, 229}: "802automation Limited", - [3]byte{0, 27, 230}: "VR AG", - [3]byte{0, 27, 231}: "Postek Electronics Co., Ltd.", - [3]byte{0, 27, 232}: "Ultratronik GmbH", - [3]byte{0, 27, 233}: "Broadcom", - [3]byte{0, 27, 234}: "Nintendo Co., Ltd.", - [3]byte{0, 27, 235}: "DMP Electronics INC.", - [3]byte{0, 27, 236}: "Netio Technologies Co., Ltd", - [3]byte{0, 27, 237}: "Brocade Communications Systems, Inc.", - [3]byte{0, 27, 238}: "Nokia Danmark A/S", - [3]byte{0, 27, 239}: "Blossoms Digital Technology Co.,Ltd.", - [3]byte{0, 27, 240}: "Value Platforms Limited", - [3]byte{0, 27, 241}: "Nanjing SilverNet Software Co., Ltd.", - [3]byte{0, 27, 242}: "KWORLD COMPUTER CO., LTD", - [3]byte{0, 27, 243}: "TRANSRADIO SenderSysteme Berlin AG", - [3]byte{0, 27, 244}: "KENWIN INDUSTRIAL(HK) LTD.", - [3]byte{0, 27, 245}: "Tellink Sistemas de Telecomunicación S.L.", - [3]byte{0, 27, 246}: "CONWISE Technology Corporation Ltd.", - [3]byte{0, 27, 247}: "Lund IP Products AB", - [3]byte{0, 27, 248}: "Digitrax Inc.", - [3]byte{0, 27, 249}: "Intellitect Water Ltd", - [3]byte{0, 27, 250}: "G.i.N. mbH", - [3]byte{0, 27, 251}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{0, 27, 252}: "ASUSTek COMPUTER INC.", - [3]byte{0, 27, 253}: "Dignsys Inc.", - [3]byte{0, 27, 254}: "Zavio Inc.", - [3]byte{0, 27, 255}: "Millennia Media inc.", - [3]byte{0, 28, 0}: "Entry Point, LLC", - [3]byte{0, 28, 1}: "ABB Oy Drives", - [3]byte{0, 28, 2}: "Pano Logic", - [3]byte{0, 28, 3}: "Betty TV Technology AG", - [3]byte{0, 28, 4}: "Airgain, Inc.", - [3]byte{0, 28, 5}: "Nonin Medical Inc.", - [3]byte{0, 28, 6}: "Siemens Numerical Control Ltd., Nanjing", - [3]byte{0, 28, 7}: "Cwlinux Limited", - [3]byte{0, 28, 8}: "Echo360, Inc.", - [3]byte{0, 28, 9}: "SAE Electronic Co.,Ltd.", - [3]byte{0, 28, 10}: "Shenzhen AEE Technology Co.,Ltd.", - [3]byte{0, 28, 11}: "SmartAnt Telecom", - [3]byte{0, 28, 12}: "TANITA Corporation", - [3]byte{0, 28, 13}: "G-Technology, Inc.", - [3]byte{0, 28, 14}: "Cisco Systems, Inc", - [3]byte{0, 28, 15}: "Cisco Systems, Inc", - [3]byte{0, 28, 16}: "Cisco-Linksys, LLC", - [3]byte{0, 28, 17}: "ARRIS Group, Inc.", - [3]byte{0, 28, 18}: "ARRIS Group, Inc.", - [3]byte{0, 28, 19}: "OPTSYS TECHNOLOGY CO., LTD.", - [3]byte{0, 28, 20}: "VMware, Inc.", - [3]byte{0, 28, 21}: "iPhotonix LLC", - [3]byte{0, 28, 22}: "ThyssenKrupp Elevator", - [3]byte{0, 28, 23}: "Nortel Networks", - [3]byte{0, 28, 24}: "Sicert S.r.L.", - [3]byte{0, 28, 25}: "secunet Security Networks AG", - [3]byte{0, 28, 26}: "Thomas Instrumentation, Inc", - [3]byte{0, 28, 27}: "Hyperstone GmbH", - [3]byte{0, 28, 28}: "Center Communication Systems GmbH", - [3]byte{0, 28, 29}: "CHENZHOU GOSPELL DIGITAL TECHNOLOGY CO.,LTD", - [3]byte{0, 28, 30}: "emtrion GmbH", - [3]byte{0, 28, 31}: "Quest Retail Technology Pty Ltd", - [3]byte{0, 28, 32}: "CLB Benelux", - [3]byte{0, 28, 33}: "Nucsafe Inc.", - [3]byte{0, 28, 34}: "Aeris Elettronica s.r.l.", - [3]byte{0, 28, 35}: "Dell Inc.", - [3]byte{0, 28, 36}: "Formosa Wireless Systems Corp.", - [3]byte{0, 28, 37}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 28, 38}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 28, 39}: "Sunell Electronics Co.", - [3]byte{0, 28, 40}: "Sphairon Technologies GmbH", - [3]byte{0, 28, 41}: "CORE DIGITAL ELECTRONICS CO., LTD", - [3]byte{0, 28, 42}: "Envisacor Technologies Inc.", - [3]byte{0, 28, 43}: "Alertme.com Limited", - [3]byte{0, 28, 44}: "Synapse", - [3]byte{0, 28, 45}: "FlexRadio Systems", - [3]byte{0, 28, 46}: "HPN Supply Chain", - [3]byte{0, 28, 47}: "Pfister GmbH", - [3]byte{0, 28, 48}: "Mode Lighting (UK ) Ltd.", - [3]byte{0, 28, 49}: "Mobile XP Technology Co., LTD", - [3]byte{0, 28, 50}: "Telian Corporation", - [3]byte{0, 28, 51}: "Sutron", - [3]byte{0, 28, 52}: "HUEY CHIAO INTERNATIONAL CO., LTD.", - [3]byte{0, 28, 53}: "Nokia Danmark A/S", - [3]byte{0, 28, 54}: "iNEWiT NV", - [3]byte{0, 28, 55}: "Callpod, Inc.", - [3]byte{0, 28, 56}: "Bio-Rad Laboratories, Inc.", - [3]byte{0, 28, 57}: "S Netsystems Inc.", - [3]byte{0, 28, 58}: "Element Labs, Inc.", - [3]byte{0, 28, 59}: "AmRoad Technology Inc.", - [3]byte{0, 28, 60}: "Seon Design Inc.", - [3]byte{0, 28, 61}: "WaveStorm", - [3]byte{0, 28, 62}: "ECKey Corporation", - [3]byte{0, 28, 63}: "International Police Technologies, Inc.", - [3]byte{0, 28, 64}: "VDG-Security bv", - [3]byte{0, 28, 65}: "scemtec Transponder Technology GmbH", - [3]byte{0, 28, 66}: "Parallels, Inc.", - [3]byte{0, 28, 67}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 28, 68}: "Bosch Security Systems BV", - [3]byte{0, 28, 69}: "Chenbro Micom Co., Ltd.", - [3]byte{0, 28, 70}: "QTUM", - [3]byte{0, 28, 71}: "Hangzhou Hollysys Automation Co., Ltd", - [3]byte{0, 28, 72}: "WiDeFi, Inc.", - [3]byte{0, 28, 73}: "Zoltan Technology Inc.", - [3]byte{0, 28, 74}: "AVM GmbH", - [3]byte{0, 28, 75}: "Gener8, Inc.", - [3]byte{0, 28, 76}: "Petrotest Instruments", - [3]byte{0, 28, 77}: "Aplix IP Holdings Corporation", - [3]byte{0, 28, 78}: "TASA International Limited", - [3]byte{0, 28, 79}: "MACAB AB", - [3]byte{0, 28, 80}: "TCL Technoly Electronics (Huizhou) Co., Ltd.", - [3]byte{0, 28, 81}: "Celeno Communications", - [3]byte{0, 28, 82}: "VISIONEE SRL", - [3]byte{0, 28, 83}: "Synergy Lighting Controls", - [3]byte{0, 28, 84}: "Hillstone Networks Inc", - [3]byte{0, 28, 85}: "Shenzhen Kaifa Technology Co.", - [3]byte{0, 28, 86}: "Pado Systems, Inc.", - [3]byte{0, 28, 87}: "Cisco Systems, Inc", - [3]byte{0, 28, 88}: "Cisco Systems, Inc", - [3]byte{0, 28, 89}: "DEVON IT", - [3]byte{0, 28, 90}: "Advanced Relay Corporation", - [3]byte{0, 28, 91}: "Chubb Electronic Security Systems Ltd", - [3]byte{0, 28, 92}: "Integrated Medical Systems, Inc.", - [3]byte{0, 28, 93}: "Leica Microsystems", - [3]byte{0, 28, 94}: "ASTON France", - [3]byte{0, 28, 95}: "Winland Electronics, Inc.", - [3]byte{0, 28, 96}: "CSP Frontier Technologies,Inc.", - [3]byte{0, 28, 97}: "Galaxy Microsystems LImited", - [3]byte{0, 28, 98}: "LG Electronics (Mobile Communications)", - [3]byte{0, 28, 99}: "TRUEN", - [3]byte{0, 28, 100}: "Landis+Gyr", - [3]byte{0, 28, 101}: "JoeScan, Inc.", - [3]byte{0, 28, 102}: "UCAMP CO.,LTD", - [3]byte{0, 28, 103}: "Pumpkin Networks, Inc.", - [3]byte{0, 28, 104}: "Anhui Sun Create Electronics Co., Ltd", - [3]byte{0, 28, 105}: "Packet Vision Ltd", - [3]byte{0, 28, 106}: "Weiss Engineering Ltd.", - [3]byte{0, 28, 107}: "COVAX Co. Ltd", - [3]byte{0, 28, 108}: "30805", - [3]byte{0, 28, 109}: "KYOHRITSU ELECTRONIC INDUSTRY CO., LTD.", - [3]byte{0, 28, 110}: "Newbury Networks, Inc.", - [3]byte{0, 28, 111}: "Emfit Ltd", - [3]byte{0, 28, 112}: "NOVACOMM LTDA", - [3]byte{0, 28, 113}: "Emergent Electronics", - [3]byte{0, 28, 114}: "Mayer & Cie GmbH & Co KG", - [3]byte{0, 28, 115}: "Arista Networks", - [3]byte{0, 28, 116}: "Syswan Technologies Inc.", - [3]byte{0, 28, 117}: "Segnet Ltd.", - [3]byte{0, 28, 118}: "The Wandsworth Group Ltd", - [3]byte{0, 28, 119}: "Prodys", - [3]byte{0, 28, 120}: "WYPLAY SAS", - [3]byte{0, 28, 121}: "Cohesive Financial Technologies LLC", - [3]byte{0, 28, 122}: "Perfectone Netware Company Ltd", - [3]byte{0, 28, 123}: "Castlenet Technology Inc.", - [3]byte{0, 28, 124}: "PERQ SYSTEMS CORPORATION", - [3]byte{0, 28, 125}: "Excelpoint Manufacturing Pte Ltd", - [3]byte{0, 28, 126}: "Toshiba", - [3]byte{0, 28, 127}: "Check Point Software Technologies", - [3]byte{0, 28, 128}: "New Business Division/Rhea-Information CO., LTD.", - [3]byte{0, 28, 129}: "NextGen Venturi LTD", - [3]byte{0, 28, 130}: "Genew Technologies", - [3]byte{0, 28, 131}: "New Level Telecom Co., Ltd.", - [3]byte{0, 28, 132}: "STL Solution Co.,Ltd.", - [3]byte{0, 28, 133}: "Eunicorn", - [3]byte{0, 28, 134}: "Cranite Systems, Inc.", - [3]byte{0, 28, 135}: "Uriver Inc.", - [3]byte{0, 28, 136}: "TRANSYSTEM INC.", - [3]byte{0, 28, 137}: "Force Communications, Inc.", - [3]byte{0, 28, 138}: "Cirrascale Corporation", - [3]byte{0, 28, 139}: "MJ Innovations Ltd.", - [3]byte{0, 28, 140}: "DIAL TECHNOLOGY LTD.", - [3]byte{0, 28, 141}: "Mesa Imaging", - [3]byte{0, 28, 142}: "Alcatel-Lucent IPD", - [3]byte{0, 28, 143}: "Advanced Electronic Design, Inc.", - [3]byte{0, 28, 144}: "Empacket Corporation", - [3]byte{0, 28, 145}: "Gefen Inc.", - [3]byte{0, 28, 146}: "Tervela", - [3]byte{0, 28, 147}: "ExaDigm Inc", - [3]byte{0, 28, 148}: "LI-COR Biosciences", - [3]byte{0, 28, 149}: "Opticomm Corporation", - [3]byte{0, 28, 150}: "Linkwise Technology Pte Ltd", - [3]byte{0, 28, 151}: "Enzytek Technology Inc.,", - [3]byte{0, 28, 152}: "LUCKY TECHNOLOGY (HK) COMPANY LIMITED", - [3]byte{0, 28, 153}: "Shunra Software Ltd.", - [3]byte{0, 28, 154}: "Nokia Danmark A/S", - [3]byte{0, 28, 155}: "FEIG ELECTRONIC GmbH", - [3]byte{0, 28, 156}: "Nortel Networks", - [3]byte{0, 28, 157}: "Liecthi AG", - [3]byte{0, 28, 158}: "Dualtech IT AB", - [3]byte{0, 28, 159}: "Razorstream, LLC", - [3]byte{0, 28, 160}: "Production Resource Group, LLC", - [3]byte{0, 28, 161}: "AKAMAI TECHNOLOGIES, INC.", - [3]byte{0, 28, 162}: "ADB Broadband Italia", - [3]byte{0, 28, 163}: "Terra", - [3]byte{0, 28, 164}: "Sony Mobile Communications AB", - [3]byte{0, 28, 165}: "Zygo Corporation", - [3]byte{0, 28, 166}: "Win4NET", - [3]byte{0, 28, 167}: "International Quartz Limited", - [3]byte{0, 28, 168}: "AirTies Wireless Networks", - [3]byte{0, 28, 169}: "Audiomatica Srl", - [3]byte{0, 28, 170}: "Bellon Pty Ltd", - [3]byte{0, 28, 171}: "Meyer Sound Laboratories, Inc.", - [3]byte{0, 28, 172}: "Qniq Technology Corp.", - [3]byte{0, 28, 173}: "Wuhan Telecommunication Devices Co.,Ltd", - [3]byte{0, 28, 174}: "WiChorus, Inc.", - [3]byte{0, 28, 175}: "Plato Networks Inc.", - [3]byte{0, 28, 176}: "Cisco Systems, Inc", - [3]byte{0, 28, 177}: "Cisco Systems, Inc", - [3]byte{0, 28, 178}: "BPT SPA", - [3]byte{0, 28, 179}: "Apple, Inc.", - [3]byte{0, 28, 180}: "Iridium Satellite LLC", - [3]byte{0, 28, 181}: "Neihua Network Technology Co.,LTD.(NHN)", - [3]byte{0, 28, 182}: "Duzon CNT Co., Ltd.", - [3]byte{0, 28, 183}: "USC DigiArk Corporation", - [3]byte{0, 28, 184}: "CBC Co., Ltd", - [3]byte{0, 28, 185}: "KWANG SUNG ELECTRONICS CO., LTD.", - [3]byte{0, 28, 186}: "VerScient, Inc.", - [3]byte{0, 28, 187}: "MusicianLink", - [3]byte{0, 28, 188}: "CastGrabber, LLC", - [3]byte{0, 28, 189}: "Ezze Mobile Tech., Inc.", - [3]byte{0, 28, 190}: "Nintendo Co., Ltd.", - [3]byte{0, 28, 191}: "Intel Corporate", - [3]byte{0, 28, 192}: "Intel Corporate", - [3]byte{0, 28, 193}: "ARRIS Group, Inc.", - [3]byte{0, 28, 194}: "Part II Research, Inc.", - [3]byte{0, 28, 195}: "ARRIS Group, Inc.", - [3]byte{0, 28, 196}: "Hewlett Packard", - [3]byte{0, 28, 197}: "3Com Ltd", - [3]byte{0, 28, 198}: "ProStor Systems", - [3]byte{0, 28, 199}: "Rembrandt Technologies, LLC d/b/a REMSTREAM", - [3]byte{0, 28, 200}: "INDUSTRONIC Industrie-Electronic GmbH & Co. KG", - [3]byte{0, 28, 201}: "Kaise Electronic Technology Co., Ltd.", - [3]byte{0, 28, 202}: "Shanghai Gaozhi Science & Technology Development Co.", - [3]byte{0, 28, 203}: "Forth Corporation Public Company Limited", - [3]byte{0, 28, 204}: "BlackBerry RTS", - [3]byte{0, 28, 205}: "Alektrona Corporation", - [3]byte{0, 28, 206}: "By Techdesign", - [3]byte{0, 28, 207}: "LIMETEK", - [3]byte{0, 28, 208}: "Circleone Co.,Ltd.", - [3]byte{0, 28, 209}: "Waves Audio LTD", - [3]byte{0, 28, 210}: "King Champion (Hong Kong) Limited", - [3]byte{0, 28, 211}: "ZP Engineering SEL", - [3]byte{0, 28, 212}: "Nokia Danmark A/S", - [3]byte{0, 28, 213}: "ZeeVee, Inc.", - [3]byte{0, 28, 214}: "Nokia Danmark A/S", - [3]byte{0, 28, 215}: "Harman/Becker Automotive Systems GmbH", - [3]byte{0, 28, 216}: "BlueAnt Wireless", - [3]byte{0, 28, 217}: "GlobalTop Technology Inc.", - [3]byte{0, 28, 218}: "Exegin Technologies Limited", - [3]byte{0, 28, 219}: "CARPOINT CO.,LTD", - [3]byte{0, 28, 220}: "Custom Computer Services, Inc.", - [3]byte{0, 28, 221}: "COWBELL ENGINEERING CO., LTD.", - [3]byte{0, 28, 222}: "Interactive Multimedia eXchange Inc.", - [3]byte{0, 28, 223}: "Belkin International Inc.", - [3]byte{0, 28, 224}: "DASAN TPS", - [3]byte{0, 28, 225}: "INDRA SISTEMAS, S.A.", - [3]byte{0, 28, 226}: "Attero Tech, LLC.", - [3]byte{0, 28, 227}: "Optimedical Systems", - [3]byte{0, 28, 228}: "EleSy JSC", - [3]byte{0, 28, 229}: "MBS Electronic Systems GmbH", - [3]byte{0, 28, 230}: "INNES", - [3]byte{0, 28, 231}: "Rocon PLC Research Centre", - [3]byte{0, 28, 232}: "Cummins Inc", - [3]byte{0, 28, 233}: "Galaxy Technology Limited", - [3]byte{0, 28, 234}: "Scientific-Atlanta, Inc", - [3]byte{0, 28, 235}: "Nortel Networks", - [3]byte{0, 28, 236}: "Mobilesoft (Aust.) Pty Ltd", - [3]byte{0, 28, 237}: "ENVIRONNEMENT SA", - [3]byte{0, 28, 238}: "SHARP Corporation", - [3]byte{0, 28, 239}: "Primax Electronics Ltd.", - [3]byte{0, 28, 240}: "D-Link Corporation", - [3]byte{0, 28, 241}: "SUPoX Technology Co. , LTD.", - [3]byte{0, 28, 242}: "Tenlon Technology Co.,Ltd.", - [3]byte{0, 28, 243}: "EVS BROADCAST EQUIPMENT", - [3]byte{0, 28, 244}: "Media Technology Systems Inc", - [3]byte{0, 28, 245}: "Wiseblue Technology Limited", - [3]byte{0, 28, 246}: "Cisco Systems, Inc", - [3]byte{0, 28, 247}: "AudioScience", - [3]byte{0, 28, 248}: "Parade Technologies, Ltd.", - [3]byte{0, 28, 249}: "Cisco Systems, Inc", - [3]byte{0, 28, 250}: "Alarm.com", - [3]byte{0, 28, 251}: "ARRIS Group, Inc.", - [3]byte{0, 28, 252}: "Sumitomo Electric Industries,Ltd", - [3]byte{0, 28, 253}: "Universal Electronics, Inc.", - [3]byte{0, 28, 254}: "Quartics Inc", - [3]byte{0, 28, 255}: "Napera Networks Inc", - [3]byte{0, 29, 0}: "Brivo Systems, LLC", - [3]byte{0, 29, 1}: "Neptune Digital", - [3]byte{0, 29, 2}: "Cybertech Telecom Development", - [3]byte{0, 29, 3}: "Design Solutions Inc.", - [3]byte{0, 29, 4}: "Zipit Wireless, Inc.", - [3]byte{0, 29, 5}: "Eaton Corporation", - [3]byte{0, 29, 6}: "HM Electronics, Inc.", - [3]byte{0, 29, 7}: "Shenzhen Sang Fei Consumer Communications Co.,Ltd", - [3]byte{0, 29, 8}: "Jiangsu Yinhe Electronics Co.,Ltd.", - [3]byte{0, 29, 9}: "Dell Inc.", - [3]byte{0, 29, 10}: "Davis Instruments, Inc.", - [3]byte{0, 29, 11}: "Power Standards Lab", - [3]byte{0, 29, 12}: "MobileCompia", - [3]byte{0, 29, 13}: "Sony Interactive Entertainment Inc.", - [3]byte{0, 29, 14}: "Agapha Technology co., Ltd.", - [3]byte{0, 29, 15}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{0, 29, 16}: "LightHaus Logic, Inc.", - [3]byte{0, 29, 17}: "Analogue & Micro Ltd", - [3]byte{0, 29, 18}: "ROHM CO., LTD.", - [3]byte{0, 29, 19}: "NextGTV", - [3]byte{0, 29, 20}: "SPERADTONE INFORMATION TECHNOLOGY LIMITED", - [3]byte{0, 29, 21}: "Shenzhen Dolphin Electronic Co., Ltd", - [3]byte{0, 29, 22}: "SFR", - [3]byte{0, 29, 23}: "Digital Sky Corporation", - [3]byte{0, 29, 24}: "Power Innovation GmbH", - [3]byte{0, 29, 25}: "Arcadyan Technology Corporation", - [3]byte{0, 29, 26}: "OvisLink S.A.", - [3]byte{0, 29, 27}: "Sangean Electronics Inc.", - [3]byte{0, 29, 28}: "Gennet s.a.", - [3]byte{0, 29, 29}: "Inter-M Corporation", - [3]byte{0, 29, 30}: "KYUSHU TEN CO.,LTD", - [3]byte{0, 29, 31}: "Siauliu Tauro Televizoriai, JSC", - [3]byte{0, 29, 32}: "Comtrend Corporation", - [3]byte{0, 29, 33}: "Alcad SL", - [3]byte{0, 29, 34}: "Foss Analytical A/S", - [3]byte{0, 29, 35}: "SENSUS", - [3]byte{0, 29, 36}: "Aclara Power-Line Systems Inc.", - [3]byte{0, 29, 37}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 29, 38}: "Rockridgesound Technology Co.", - [3]byte{0, 29, 39}: "NAC-INTERCOM", - [3]byte{0, 29, 40}: "Sony Mobile Communications AB", - [3]byte{0, 29, 41}: "Doro AB", - [3]byte{0, 29, 42}: "SHENZHEN BUL-TECH CO.,LTD.", - [3]byte{0, 29, 43}: "Wuhan Pont Technology CO. , LTD", - [3]byte{0, 29, 44}: "Wavetrend Technologies (Pty) Limited", - [3]byte{0, 29, 45}: "Pylone, Inc.", - [3]byte{0, 29, 46}: "Ruckus Wireless", - [3]byte{0, 29, 47}: "QuantumVision Corporation", - [3]byte{0, 29, 48}: "YX Wireless S.A.", - [3]byte{0, 29, 49}: "HIGHPRO INTERNATIONAL R&D CO,.LTD.", - [3]byte{0, 29, 50}: "Longkay Communication & Technology (Shanghai) Co. Ltd", - [3]byte{0, 29, 51}: "Maverick Systems Inc.", - [3]byte{0, 29, 52}: "SYRIS Technology Corp", - [3]byte{0, 29, 53}: "Viconics Electronics Inc.", - [3]byte{0, 29, 54}: "ELECTRONICS CORPORATION OF INDIA LIMITED", - [3]byte{0, 29, 55}: "Thales-Panda Transportation System", - [3]byte{0, 29, 56}: "Seagate Technology", - [3]byte{0, 29, 57}: "MOOHADIGITAL CO., LTD", - [3]byte{0, 29, 58}: "mh acoustics LLC", - [3]byte{0, 29, 59}: "Nokia Danmark A/S", - [3]byte{0, 29, 60}: "Muscle Corporation", - [3]byte{0, 29, 61}: "Avidyne Corporation", - [3]byte{0, 29, 62}: "SAKA TECHNO SCIENCE CO.,LTD", - [3]byte{0, 29, 63}: "Mitron Pty Ltd", - [3]byte{0, 29, 64}: "Intel – GE Care Innovations LLC", - [3]byte{0, 29, 65}: "Hardy Instruments", - [3]byte{0, 29, 66}: "Nortel Networks", - [3]byte{0, 29, 67}: "Shenzhen G-link Digital Technology Co., Ltd.", - [3]byte{0, 29, 68}: "Krohne", - [3]byte{0, 29, 69}: "Cisco Systems, Inc", - [3]byte{0, 29, 70}: "Cisco Systems, Inc", - [3]byte{0, 29, 71}: "Covote GmbH & Co KG", - [3]byte{0, 29, 72}: "Sensor-Technik Wiedemann GmbH", - [3]byte{0, 29, 73}: "Innovation Wireless Inc.", - [3]byte{0, 29, 74}: "Carestream Health, Inc.", - [3]byte{0, 29, 75}: "Grid Connect Inc.", - [3]byte{0, 29, 76}: "Alcatel-Lucent", - [3]byte{0, 29, 77}: "Adaptive Recognition Hungary, Inc", - [3]byte{0, 29, 78}: "TCM Mobile LLC", - [3]byte{0, 29, 79}: "Apple, Inc.", - [3]byte{0, 29, 80}: "SPINETIX SA", - [3]byte{0, 29, 81}: "Babcock & Wilcox Power Generation Group, Inc", - [3]byte{0, 29, 82}: "Defzone B.V.", - [3]byte{0, 29, 83}: "S&O Electronics (Malaysia) Sdn. Bhd.", - [3]byte{0, 29, 84}: "Sunnic Technology & Merchandise INC.", - [3]byte{0, 29, 85}: "ZANTAZ, Inc", - [3]byte{0, 29, 86}: "Kramer Electronics Ltd.", - [3]byte{0, 29, 87}: "CAETEC Messtechnik", - [3]byte{0, 29, 88}: "CQ Inc", - [3]byte{0, 29, 89}: "Mitra Energy & Infrastructure", - [3]byte{0, 29, 90}: "2Wire Inc", - [3]byte{0, 29, 91}: "Tecvan Informática Ltda", - [3]byte{0, 29, 92}: "Tom Communication Industrial Co.,Ltd.", - [3]byte{0, 29, 93}: "Control Dynamics Pty. Ltd.", - [3]byte{0, 29, 94}: "COMING MEDIA CORP.", - [3]byte{0, 29, 95}: "OverSpeed SARL", - [3]byte{0, 29, 96}: "ASUSTek COMPUTER INC.", - [3]byte{0, 29, 97}: "BIJ Corporation", - [3]byte{0, 29, 98}: "InPhase Technologies", - [3]byte{0, 29, 99}: "Miele & Cie. KG", - [3]byte{0, 29, 100}: "Adam Communications Systems Int Ltd", - [3]byte{0, 29, 101}: "Microwave Radio Communications", - [3]byte{0, 29, 102}: "Hyundai Telecom", - [3]byte{0, 29, 103}: "AMEC", - [3]byte{0, 29, 104}: "Thomson Telecom Belgium", - [3]byte{0, 29, 105}: "Knorr-Bremse IT-Services GmbH", - [3]byte{0, 29, 106}: "Alpha Networks Inc.", - [3]byte{0, 29, 107}: "ARRIS Group, Inc.", - [3]byte{0, 29, 108}: "ClariPhy Communications, Inc.", - [3]byte{0, 29, 109}: "Confidant International LLC", - [3]byte{0, 29, 110}: "Nokia Danmark A/S", - [3]byte{0, 29, 111}: "Chainzone Technology Co., Ltd", - [3]byte{0, 29, 112}: "Cisco Systems, Inc", - [3]byte{0, 29, 113}: "Cisco Systems, Inc", - [3]byte{0, 29, 114}: "Wistron Corporation", - [3]byte{0, 29, 115}: "BUFFALO.INC", - [3]byte{0, 29, 116}: "Tianjin China-Silicon Microelectronics Co., Ltd.", - [3]byte{0, 29, 117}: "Radioscape PLC", - [3]byte{0, 29, 118}: "Eyeheight Ltd.", - [3]byte{0, 29, 119}: "NSGate", - [3]byte{0, 29, 120}: "Invengo Information Technology Co.,Ltd", - [3]byte{0, 29, 121}: "SIGNAMAX LLC", - [3]byte{0, 29, 122}: "Wideband Semiconductor, Inc.", - [3]byte{0, 29, 123}: "Ice Energy, Inc.", - [3]byte{0, 29, 124}: "ABE Elettronica S.p.A.", - [3]byte{0, 29, 125}: "GIGA-BYTE TECHNOLOGY CO.,LTD.", - [3]byte{0, 29, 126}: "Cisco-Linksys, LLC", - [3]byte{0, 29, 127}: "Tekron International Ltd", - [3]byte{0, 29, 128}: "Beijing Huahuan Eletronics Co.,Ltd", - [3]byte{0, 29, 129}: "GUANGZHOU GATEWAY ELECTRONICS CO., LTD", - [3]byte{0, 29, 130}: "GN Netcom A/S", - [3]byte{0, 29, 131}: "Emitech Corporation", - [3]byte{0, 29, 132}: "Gateway, Inc.", - [3]byte{0, 29, 133}: "Call Direct Cellular Solutions", - [3]byte{0, 29, 134}: "Shinwa Industries(China) Ltd.", - [3]byte{0, 29, 135}: "VigTech Labs Sdn Bhd", - [3]byte{0, 29, 136}: "Clearwire", - [3]byte{0, 29, 137}: "VaultStor Corporation", - [3]byte{0, 29, 138}: "TechTrex Inc", - [3]byte{0, 29, 139}: "ADB Broadband Italia", - [3]byte{0, 29, 140}: "La Crosse Technology LTD", - [3]byte{0, 29, 141}: "Raytek GmbH", - [3]byte{0, 29, 142}: "Alereon, Inc.", - [3]byte{0, 29, 143}: "PureWave Networks", - [3]byte{0, 29, 144}: "EMCO Flow Systems", - [3]byte{0, 29, 145}: "Digitize, Inc", - [3]byte{0, 29, 146}: "MICRO-STAR INT'L CO.,LTD.", - [3]byte{0, 29, 147}: "Modacom", - [3]byte{0, 29, 148}: "Climax Technology Co., Ltd", - [3]byte{0, 29, 149}: "Flash, Inc.", - [3]byte{0, 29, 150}: "WatchGuard Video", - [3]byte{0, 29, 151}: "Alertus Technologies LLC", - [3]byte{0, 29, 152}: "Nokia Danmark A/S", - [3]byte{0, 29, 153}: "Cyan Optic, Inc.", - [3]byte{0, 29, 154}: "GODEX INTERNATIONAL CO., LTD", - [3]byte{0, 29, 155}: "Hokuyo Automatic Co., Ltd.", - [3]byte{0, 29, 156}: "Rockwell Automation", - [3]byte{0, 29, 157}: "ARTJOY INTERNATIONAL LIMITED", - [3]byte{0, 29, 158}: "AXION TECHNOLOGIES", - [3]byte{0, 29, 159}: "MATT R.P.Traczynscy Sp.J.", - [3]byte{0, 29, 160}: "Heng Yu Electronic Manufacturing Company Limited", - [3]byte{0, 29, 161}: "Cisco Systems, Inc", - [3]byte{0, 29, 162}: "Cisco Systems, Inc", - [3]byte{0, 29, 163}: "SabiOso", - [3]byte{0, 29, 164}: "Hangzhou System Technology CO., LTD", - [3]byte{0, 29, 165}: "WB Electronics", - [3]byte{0, 29, 166}: "Media Numerics Limited", - [3]byte{0, 29, 167}: "Seamless Internet", - [3]byte{0, 29, 168}: "Takahata Electronics Co.,Ltd", - [3]byte{0, 29, 169}: "Castles Technology, Co., LTD", - [3]byte{0, 29, 170}: "DrayTek Corp.", - [3]byte{0, 29, 171}: "SwissQual License AG", - [3]byte{0, 29, 172}: "Gigamon Systems LLC", - [3]byte{0, 29, 173}: "Sinotech Engineering Consultants, Inc. Geotechnical Enginee", - [3]byte{0, 29, 174}: "CHANG TSENG TECHNOLOGY CO., LTD", - [3]byte{0, 29, 175}: "Nortel Networks", - [3]byte{0, 29, 176}: "FuJian HengTong Information Technology Co.,Ltd", - [3]byte{0, 29, 177}: "Crescendo Networks", - [3]byte{0, 29, 178}: "HOKKAIDO ELECTRIC ENGINEERING CO.,LTD.", - [3]byte{0, 29, 179}: "HPN Supply Chain", - [3]byte{0, 29, 180}: "KUMHO ENG CO.,LTD", - [3]byte{0, 29, 181}: "Juniper Networks", - [3]byte{0, 29, 182}: "BestComm Networks, Inc.", - [3]byte{0, 29, 183}: "Tendril Networks, Inc.", - [3]byte{0, 29, 184}: "Intoto Inc.", - [3]byte{0, 29, 185}: "Wellspring Wireless", - [3]byte{0, 29, 186}: "Sony Corporation", - [3]byte{0, 29, 187}: "Dynamic System Electronics Corp.", - [3]byte{0, 29, 188}: "Nintendo Co., Ltd.", - [3]byte{0, 29, 189}: "Versamed Inc.", - [3]byte{0, 29, 190}: "ARRIS Group, Inc.", - [3]byte{0, 29, 191}: "Radiient Technologies, Inc.", - [3]byte{0, 29, 192}: "Enphase Energy", - [3]byte{0, 29, 193}: "Audinate Pty L", - [3]byte{0, 29, 194}: "XORTEC OY", - [3]byte{0, 29, 195}: "RIKOR TV, Ltd", - [3]byte{0, 29, 196}: "AIOI Systems Co., Ltd.", - [3]byte{0, 29, 197}: "Beijing Jiaxun Feihong Electricial Co., Ltd.", - [3]byte{0, 29, 198}: "SNR Inc.", - [3]byte{0, 29, 199}: "L-3 Communications Geneva Aerospace", - [3]byte{0, 29, 200}: "Navionics Research Inc., dba SCADAmetrics", - [3]byte{0, 29, 201}: "GainSpan Corp.", - [3]byte{0, 29, 202}: "PAV Electronics Limited", - [3]byte{0, 29, 203}: "Exéns Development Oy", - [3]byte{0, 29, 204}: "Ayon Cyber Security, Inc", - [3]byte{0, 29, 205}: "ARRIS Group, Inc.", - [3]byte{0, 29, 206}: "ARRIS Group, Inc.", - [3]byte{0, 29, 207}: "ARRIS Group, Inc.", - [3]byte{0, 29, 208}: "ARRIS Group, Inc.", - [3]byte{0, 29, 209}: "ARRIS Group, Inc.", - [3]byte{0, 29, 210}: "ARRIS Group, Inc.", - [3]byte{0, 29, 211}: "ARRIS Group, Inc.", - [3]byte{0, 29, 212}: "ARRIS Group, Inc.", - [3]byte{0, 29, 213}: "ARRIS Group, Inc.", - [3]byte{0, 29, 214}: "ARRIS Group, Inc.", - [3]byte{0, 29, 215}: "Algolith", - [3]byte{0, 29, 216}: "Microsoft Corporation", - [3]byte{0, 29, 217}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 29, 218}: "Mikroelektronika spol. s r. o.", - [3]byte{0, 29, 219}: "C-BEL Corporation", - [3]byte{0, 29, 220}: "HangZhou DeChangLong Tech&Info Co.,Ltd", - [3]byte{0, 29, 221}: "DAT H.K. LIMITED", - [3]byte{0, 29, 222}: "Zhejiang Broadcast&Television Technology Co.,Ltd.", - [3]byte{0, 29, 223}: "Sunitec Enterprise Co., Ltd.", - [3]byte{0, 29, 224}: "Intel Corporate", - [3]byte{0, 29, 225}: "Intel Corporate", - [3]byte{0, 29, 226}: "Radionor Communications", - [3]byte{0, 29, 227}: "Intuicom", - [3]byte{0, 29, 228}: "Visioneered Image Systems", - [3]byte{0, 29, 229}: "Cisco Systems, Inc", - [3]byte{0, 29, 230}: "Cisco Systems, Inc", - [3]byte{0, 29, 231}: "Marine Sonic Technology, Ltd.", - [3]byte{0, 29, 232}: "Nikko Denki Tsushin Corporation(NDTC)", - [3]byte{0, 29, 233}: "Nokia Danmark A/S", - [3]byte{0, 29, 234}: "Commtest Instruments Ltd", - [3]byte{0, 29, 235}: "DINEC International", - [3]byte{0, 29, 236}: "Marusys", - [3]byte{0, 29, 237}: "Grid Net, Inc.", - [3]byte{0, 29, 238}: "NEXTVISION SISTEMAS DIGITAIS DE TELEVISÃO LTDA.", - [3]byte{0, 29, 239}: "TRIMM, INC.", - [3]byte{0, 29, 240}: "Vidient Systems, Inc.", - [3]byte{0, 29, 241}: "Intego Systems, Inc.", - [3]byte{0, 29, 242}: "Netflix, Inc.", - [3]byte{0, 29, 243}: "SBS Science & Technology Co., Ltd", - [3]byte{0, 29, 244}: "Magellan Technology Pty Limited", - [3]byte{0, 29, 245}: "Sunshine Co,LTD", - [3]byte{0, 29, 246}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 29, 247}: "R. STAHL Schaltgeräte GmbH", - [3]byte{0, 29, 248}: "Webpro Vision Technology Corporation", - [3]byte{0, 29, 249}: "Cybiotronics (Far East) Limited", - [3]byte{0, 29, 250}: "Fujian LANDI Commercial Equipment Co.,Ltd", - [3]byte{0, 29, 251}: "NETCLEUS Systems Corporation", - [3]byte{0, 29, 252}: "KSIC", - [3]byte{0, 29, 253}: "Nokia Danmark A/S", - [3]byte{0, 29, 254}: "Palm, Inc", - [3]byte{0, 29, 255}: "Network Critical Solutions Ltd", - [3]byte{0, 30, 0}: "Shantou Institute of Ultrasonic Instruments", - [3]byte{0, 30, 1}: "Renesas Technology Sales Co., Ltd.", - [3]byte{0, 30, 2}: "Sougou Keikaku Kougyou Co.,Ltd.", - [3]byte{0, 30, 3}: "LiComm Co., Ltd.", - [3]byte{0, 30, 4}: "Hanson Research Corporation", - [3]byte{0, 30, 5}: "Xseed Technologies & Computing", - [3]byte{0, 30, 6}: "WIBRAIN", - [3]byte{0, 30, 7}: "Winy Technology Co., Ltd.", - [3]byte{0, 30, 8}: "Centec Networks Inc", - [3]byte{0, 30, 9}: "ZEFATEK Co.,LTD", - [3]byte{0, 30, 10}: "Syba Tech Limited", - [3]byte{0, 30, 11}: "Hewlett Packard", - [3]byte{0, 30, 12}: "Sherwood Information Partners, Inc.", - [3]byte{0, 30, 13}: "Micran Ltd.", - [3]byte{0, 30, 14}: "MAXI VIEW HOLDINGS LIMITED", - [3]byte{0, 30, 15}: "Briot International", - [3]byte{0, 30, 16}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{0, 30, 17}: "ELELUX INTERNATIONAL LTD", - [3]byte{0, 30, 18}: "Ecolab", - [3]byte{0, 30, 19}: "Cisco Systems, Inc", - [3]byte{0, 30, 20}: "Cisco Systems, Inc", - [3]byte{0, 30, 21}: "Beech Hill Electronics", - [3]byte{0, 30, 22}: "Keytronix", - [3]byte{0, 30, 23}: "STN BV", - [3]byte{0, 30, 24}: "Radio Activity srl", - [3]byte{0, 30, 25}: "GTRI", - [3]byte{0, 30, 26}: "Best Source Taiwan Inc.", - [3]byte{0, 30, 27}: "Digital Stream Technology, Inc.", - [3]byte{0, 30, 28}: "SWS Australia Pty Limited", - [3]byte{0, 30, 29}: "East Coast Datacom, Inc.", - [3]byte{0, 30, 30}: "Honeywell Life Safety", - [3]byte{0, 30, 31}: "Nortel Networks", - [3]byte{0, 30, 32}: "Intertain Inc.", - [3]byte{0, 30, 33}: "Qisda Corporation", - [3]byte{0, 30, 34}: "ARVOO Imaging Products BV", - [3]byte{0, 30, 35}: "Electronic Educational Devices, Inc", - [3]byte{0, 30, 36}: "Zhejiang Bell Technology Co.,ltd", - [3]byte{0, 30, 37}: "INTEK DIGITAL", - [3]byte{0, 30, 38}: "Digifriends Co. Ltd", - [3]byte{0, 30, 39}: "SBN TECH Co.,Ltd.", - [3]byte{0, 30, 40}: "Lumexis Corporation", - [3]byte{0, 30, 41}: "Hypertherm Inc", - [3]byte{0, 30, 42}: "NETGEAR", - [3]byte{0, 30, 43}: "Radio Systems Design, Inc.", - [3]byte{0, 30, 44}: "CyVerse Corporation", - [3]byte{0, 30, 45}: "STIM", - [3]byte{0, 30, 46}: "SIRTI S.p.A.", - [3]byte{0, 30, 47}: "DiMoto Pty Ltd", - [3]byte{0, 30, 48}: "Shireen Inc", - [3]byte{0, 30, 49}: "INFOMARK CO.,LTD.", - [3]byte{0, 30, 50}: "Zensys", - [3]byte{0, 30, 51}: "INVENTEC Corporation", - [3]byte{0, 30, 52}: "CryptoMetrics", - [3]byte{0, 30, 53}: "Nintendo Co., Ltd.", - [3]byte{0, 30, 54}: "IPTE", - [3]byte{0, 30, 55}: "Universal Global Scientific Industrial Co., Ltd.", - [3]byte{0, 30, 56}: "Bluecard Software Technology Co., Ltd.", - [3]byte{0, 30, 57}: "Comsys Communication Ltd.", - [3]byte{0, 30, 58}: "Nokia Danmark A/S", - [3]byte{0, 30, 59}: "Nokia Danmark A/S", - [3]byte{0, 30, 60}: "Lyngbox Media AB", - [3]byte{0, 30, 61}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{0, 30, 62}: "KMW Inc.", - [3]byte{0, 30, 63}: "TrellisWare Technologies, Inc.", - [3]byte{0, 30, 64}: "Shanghai DareGlobal Technologies Co.,Ltd", - [3]byte{0, 30, 65}: "Microwave Communication & Component, Inc.", - [3]byte{0, 30, 66}: "Teltonika", - [3]byte{0, 30, 67}: "AISIN AW CO.,LTD.", - [3]byte{0, 30, 68}: "SANTEC", - [3]byte{0, 30, 69}: "Sony Mobile Communications AB", - [3]byte{0, 30, 70}: "ARRIS Group, Inc.", - [3]byte{0, 30, 71}: "PT. Hariff Daya Tunggal Engineering", - [3]byte{0, 30, 72}: "Wi-Links", - [3]byte{0, 30, 73}: "Cisco Systems, Inc", - [3]byte{0, 30, 74}: "Cisco Systems, Inc", - [3]byte{0, 30, 75}: "City Theatrical", - [3]byte{0, 30, 76}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 30, 77}: "Welkin Sciences, LLC", - [3]byte{0, 30, 78}: "DAKO EDV-Ingenieur- und Systemhaus GmbH", - [3]byte{0, 30, 79}: "Dell Inc.", - [3]byte{0, 30, 80}: "BATTISTONI RESEARCH", - [3]byte{0, 30, 81}: "Converter Industry Srl", - [3]byte{0, 30, 82}: "Apple, Inc.", - [3]byte{0, 30, 83}: "Further Tech Co., LTD", - [3]byte{0, 30, 84}: "TOYO ELECTRIC Corporation", - [3]byte{0, 30, 85}: "COWON SYSTEMS,Inc.", - [3]byte{0, 30, 86}: "Bally Wulff Entertainment GmbH", - [3]byte{0, 30, 87}: "ALCOMA, spol. s r.o.", - [3]byte{0, 30, 88}: "D-Link Corporation", - [3]byte{0, 30, 89}: "Silicon Turnkey Express, LLC", - [3]byte{0, 30, 90}: "ARRIS Group, Inc.", - [3]byte{0, 30, 91}: "Unitron Company, Inc.", - [3]byte{0, 30, 92}: "RB GeneralEkonomik", - [3]byte{0, 30, 93}: "Holosys d.o.o.", - [3]byte{0, 30, 94}: "COmputime Ltd.", - [3]byte{0, 30, 95}: "KwikByte, LLC", - [3]byte{0, 30, 96}: "Digital Lighting Systems, Inc", - [3]byte{0, 30, 97}: "ITEC GmbH", - [3]byte{0, 30, 98}: "Siemon", - [3]byte{0, 30, 99}: "Vibro-Meter SA", - [3]byte{0, 30, 100}: "Intel Corporate", - [3]byte{0, 30, 101}: "Intel Corporate", - [3]byte{0, 30, 102}: "RESOL Elektronische Regelungen GmbH", - [3]byte{0, 30, 103}: "Intel Corporate", - [3]byte{0, 30, 104}: "QUANTA COMPUTER INC.", - [3]byte{0, 30, 105}: "Thomson Inc.", - [3]byte{0, 30, 106}: "Beijing Bluexon Technology Co.,Ltd", - [3]byte{0, 30, 107}: "Cisco SPVTG", - [3]byte{0, 30, 108}: "Opaque Systems", - [3]byte{0, 30, 109}: "IT R&D Center", - [3]byte{0, 30, 110}: "Shenzhen First Mile Communications Ltd", - [3]byte{0, 30, 111}: "Magna-Power Electronics, Inc.", - [3]byte{0, 30, 112}: "Cobham Defence Communications Ltd", - [3]byte{0, 30, 113}: "MIrcom Group of Companies", - [3]byte{0, 30, 114}: "PCS", - [3]byte{0, 30, 115}: "zte corporation", - [3]byte{0, 30, 116}: "Sagemcom Broadband SAS", - [3]byte{0, 30, 117}: "LG Electronics (Mobile Communications)", - [3]byte{0, 30, 118}: "Thermo Fisher Scientific", - [3]byte{0, 30, 119}: "Air2App", - [3]byte{0, 30, 120}: "Owitek Technology Ltd.,", - [3]byte{0, 30, 121}: "Cisco Systems, Inc", - [3]byte{0, 30, 122}: "Cisco Systems, Inc", - [3]byte{0, 30, 123}: "R.I.CO. S.r.l.", - [3]byte{0, 30, 124}: "Taiwick Limited", - [3]byte{0, 30, 125}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 30, 126}: "Nortel Networks", - [3]byte{0, 30, 127}: "CBM of America", - [3]byte{0, 30, 128}: "Last Mile Ltd.", - [3]byte{0, 30, 129}: "CNB Technology Inc.", - [3]byte{0, 30, 130}: "SanDisk Corporation", - [3]byte{0, 30, 131}: "LAN/MAN Standards Association (LMSC)", - [3]byte{0, 30, 132}: "Pika Technologies Inc.", - [3]byte{0, 30, 133}: "Lagotek Corporation", - [3]byte{0, 30, 134}: "MEL Co.,Ltd.", - [3]byte{0, 30, 135}: "Realease Limited", - [3]byte{0, 30, 136}: "ANDOR SYSTEM SUPPORT CO., LTD.", - [3]byte{0, 30, 137}: "CRFS Limited", - [3]byte{0, 30, 138}: "eCopy, Inc", - [3]byte{0, 30, 139}: "Infra Access Korea Co., Ltd.", - [3]byte{0, 30, 140}: "ASUSTek COMPUTER INC.", - [3]byte{0, 30, 141}: "ARRIS Group, Inc.", - [3]byte{0, 30, 142}: "Hunkeler AG", - [3]byte{0, 30, 143}: "CANON INC.", - [3]byte{0, 30, 144}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{0, 30, 145}: "KIMIN Electronic Co., Ltd.", - [3]byte{0, 30, 146}: "JEULIN S.A.", - [3]byte{0, 30, 147}: "CiriTech Systems Inc", - [3]byte{0, 30, 148}: "SUPERCOM TECHNOLOGY CORPORATION", - [3]byte{0, 30, 149}: "SIGMALINK", - [3]byte{0, 30, 150}: "Sepura Plc", - [3]byte{0, 30, 151}: "Medium Link System Technology CO., LTD,", - [3]byte{0, 30, 152}: "GreenLine Communications", - [3]byte{0, 30, 153}: "Vantanol Industrial Corporation", - [3]byte{0, 30, 154}: "HAMILTON Bonaduz AG", - [3]byte{0, 30, 155}: "San-Eisha, Ltd.", - [3]byte{0, 30, 156}: "Fidustron INC", - [3]byte{0, 30, 157}: "Recall Technologies, Inc.", - [3]byte{0, 30, 158}: "ddm hopt + schuler Gmbh + Co. KG", - [3]byte{0, 30, 159}: "Visioneering Systems, Inc.", - [3]byte{0, 30, 160}: "XLN-t", - [3]byte{0, 30, 161}: "Brunata a/s", - [3]byte{0, 30, 162}: "Symx Systems, Inc.", - [3]byte{0, 30, 163}: "Nokia Danmark A/S", - [3]byte{0, 30, 164}: "Nokia Danmark A/S", - [3]byte{0, 30, 165}: "ROBOTOUS, Inc.", - [3]byte{0, 30, 166}: "Best IT World (India) Pvt. Ltd.", - [3]byte{0, 30, 167}: "Actiontec Electronics, Inc", - [3]byte{0, 30, 168}: "Datang Mobile Communications Equipment CO.,LTD", - [3]byte{0, 30, 169}: "Nintendo Co., Ltd.", - [3]byte{0, 30, 170}: "E-Senza Technologies GmbH", - [3]byte{0, 30, 171}: "TeleWell Oy", - [3]byte{0, 30, 172}: "Armadeus Systems", - [3]byte{0, 30, 173}: "Wingtech Group Limited", - [3]byte{0, 30, 174}: "Continental Automotive Systems Inc.", - [3]byte{0, 30, 175}: "Ophir Optronics Ltd", - [3]byte{0, 30, 176}: "ImesD Electronica S.L.", - [3]byte{0, 30, 177}: "Cryptsoft Pty Ltd", - [3]byte{0, 30, 178}: "LG innotek", - [3]byte{0, 30, 179}: "Primex Wireless", - [3]byte{0, 30, 180}: "UNIFAT TECHNOLOGY LTD.", - [3]byte{0, 30, 181}: "Ever Sparkle Technologies Ltd", - [3]byte{0, 30, 182}: "TAG Heuer SA", - [3]byte{0, 30, 183}: "TBTech, Co., Ltd.", - [3]byte{0, 30, 184}: "Fortis, Inc.", - [3]byte{0, 30, 185}: "Sing Fai Technology Limited", - [3]byte{0, 30, 186}: "High Density Devices AS", - [3]byte{0, 30, 187}: "BLUELIGHT TECHNOLOGY INC.", - [3]byte{0, 30, 188}: "WINTECH AUTOMATION CO.,LTD.", - [3]byte{0, 30, 189}: "Cisco Systems, Inc", - [3]byte{0, 30, 190}: "Cisco Systems, Inc", - [3]byte{0, 30, 191}: "Haas Automation Inc.", - [3]byte{0, 30, 192}: "Microchip Technology Inc.", - [3]byte{0, 30, 193}: "3COM EUROPE LTD", - [3]byte{0, 30, 194}: "Apple, Inc.", - [3]byte{0, 30, 195}: "Kozio, Inc.", - [3]byte{0, 30, 196}: "Celio Corp", - [3]byte{0, 30, 197}: "Middle Atlantic Products Inc", - [3]byte{0, 30, 198}: "Obvius Holdings LLC", - [3]byte{0, 30, 199}: "2Wire Inc", - [3]byte{0, 30, 200}: "Rapid Mobile (Pty) Ltd", - [3]byte{0, 30, 201}: "Dell Inc.", - [3]byte{0, 30, 202}: "Nortel Networks", - [3]byte{0, 30, 203}: "RPC Energoautomatika Ltd", - [3]byte{0, 30, 204}: "CDVI", - [3]byte{0, 30, 205}: "KYLAND Technology Co. LTD", - [3]byte{0, 30, 206}: "BISA Technologies (Hong Kong) Limited", - [3]byte{0, 30, 207}: "PHILIPS ELECTRONICS UK LTD", - [3]byte{0, 30, 208}: "Ingespace", - [3]byte{0, 30, 209}: "Keyprocessor B.V.", - [3]byte{0, 30, 210}: "Ray Shine Video Technology Inc", - [3]byte{0, 30, 211}: "Dot Technology Int'l Co., Ltd.", - [3]byte{0, 30, 212}: "Doble Engineering", - [3]byte{0, 30, 213}: "Tekon-Automatics", - [3]byte{0, 30, 214}: "Alentec & Orion AB", - [3]byte{0, 30, 215}: "H-Stream Wireless, Inc.", - [3]byte{0, 30, 216}: "Digital United Inc.", - [3]byte{0, 30, 217}: "Mitsubishi Precision Co.,LTd.", - [3]byte{0, 30, 218}: "Wesemann Elektrotechniek B.V.", - [3]byte{0, 30, 219}: "Giken Trastem Co., Ltd.", - [3]byte{0, 30, 220}: "Sony Mobile Communications AB", - [3]byte{0, 30, 221}: "WASKO S.A.", - [3]byte{0, 30, 222}: "BYD COMPANY LIMITED", - [3]byte{0, 30, 223}: "Master Industrialization Center Kista", - [3]byte{0, 30, 224}: "Urmet Domus SpA", - [3]byte{0, 30, 225}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 30, 226}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 30, 227}: "T&W Electronics (ShenZhen) Co.,Ltd", - [3]byte{0, 30, 228}: "ACS Solutions France", - [3]byte{0, 30, 229}: "Cisco-Linksys, LLC", - [3]byte{0, 30, 230}: "Shenzhen Advanced Video Info-Tech Co., Ltd.", - [3]byte{0, 30, 231}: "Epic Systems Inc", - [3]byte{0, 30, 232}: "Mytek", - [3]byte{0, 30, 233}: "Stoneridge Electronics AB", - [3]byte{0, 30, 234}: "Sensor Switch, Inc.", - [3]byte{0, 30, 235}: "Talk-A-Phone Co.", - [3]byte{0, 30, 236}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{0, 30, 237}: "Adventiq Ltd.", - [3]byte{0, 30, 238}: "ETL Systems Ltd", - [3]byte{0, 30, 239}: "Cantronic International Limited", - [3]byte{0, 30, 240}: "Gigafin Networks", - [3]byte{0, 30, 241}: "Servimat", - [3]byte{0, 30, 242}: "Micro Motion Inc", - [3]byte{0, 30, 243}: "From2", - [3]byte{0, 30, 244}: "L-3 Communications Display Systems", - [3]byte{0, 30, 245}: "Hitek Automated Inc.", - [3]byte{0, 30, 246}: "Cisco Systems, Inc", - [3]byte{0, 30, 247}: "Cisco Systems, Inc", - [3]byte{0, 30, 248}: "Emfinity Inc.", - [3]byte{0, 30, 249}: "Pascom Kommunikations systeme GmbH.", - [3]byte{0, 30, 250}: "PROTEI Ltd.", - [3]byte{0, 30, 251}: "Trio Motion Technology Ltd", - [3]byte{0, 30, 252}: "JSC MASSA-K", - [3]byte{0, 30, 253}: "Microbit 2.0 AB", - [3]byte{0, 30, 254}: "LEVEL s.r.o.", - [3]byte{0, 30, 255}: "Mueller-Elektronik GmbH & Co. KG", - [3]byte{0, 31, 0}: "Nokia Danmark A/S", - [3]byte{0, 31, 1}: "Nokia Danmark A/S", - [3]byte{0, 31, 2}: "Pixelmetrix Corporation Pte Ltd", - [3]byte{0, 31, 3}: "NUM AG", - [3]byte{0, 31, 4}: "Granch Ltd.", - [3]byte{0, 31, 5}: "iTAS Technology Corp.", - [3]byte{0, 31, 6}: "Integrated Dispatch Solutions", - [3]byte{0, 31, 7}: "AZTEQ Mobile", - [3]byte{0, 31, 8}: "RISCO LTD", - [3]byte{0, 31, 9}: "Jastec", - [3]byte{0, 31, 10}: "Nortel Networks", - [3]byte{0, 31, 11}: "Federal State Unitary Enterprise Industrial UnionElectropribor", - [3]byte{0, 31, 12}: "Intelligent Digital Services GmbH", - [3]byte{0, 31, 13}: "L3 Communications - Telemetry West", - [3]byte{0, 31, 14}: "Japan Kyastem Co., Ltd", - [3]byte{0, 31, 15}: "Select Engineered Systems", - [3]byte{0, 31, 16}: "TOLEDO DO BRASIL INDUSTRIA DE BALANCAS LTDA", - [3]byte{0, 31, 17}: "OPENMOKO, INC.", - [3]byte{0, 31, 18}: "Juniper Networks", - [3]byte{0, 31, 19}: "S.& A.S. Ltd.", - [3]byte{0, 31, 20}: "NexG", - [3]byte{0, 31, 21}: "Bioscrypt Inc", - [3]byte{0, 31, 22}: "Wistron Corporation", - [3]byte{0, 31, 23}: "IDX Company, Ltd.", - [3]byte{0, 31, 24}: "Hakusan.Mfg.Co,.Ltd", - [3]byte{0, 31, 25}: "BEN-RI ELECTRONICA S.A.", - [3]byte{0, 31, 26}: "Prominvest", - [3]byte{0, 31, 27}: "RoyalTek Company Ltd.", - [3]byte{0, 31, 28}: "KOBISHI ELECTRIC Co.,Ltd.", - [3]byte{0, 31, 29}: "Atlas Material Testing Technology LLC", - [3]byte{0, 31, 30}: "Astec Technology Co., Ltd", - [3]byte{0, 31, 31}: "Edimax Technology Co. Ltd.", - [3]byte{0, 31, 32}: "Logitech Europe SA", - [3]byte{0, 31, 33}: "Inner Mongolia Yin An Science & Technology Development Co.,L", - [3]byte{0, 31, 34}: "Source Photonics, Inc.", - [3]byte{0, 31, 35}: "Interacoustics", - [3]byte{0, 31, 36}: "DIGITVIEW TECHNOLOGY CO., LTD.", - [3]byte{0, 31, 37}: "MBS GmbH", - [3]byte{0, 31, 38}: "Cisco Systems, Inc", - [3]byte{0, 31, 39}: "Cisco Systems, Inc", - [3]byte{0, 31, 40}: "HPN Supply Chain", - [3]byte{0, 31, 41}: "Hewlett Packard", - [3]byte{0, 31, 42}: "ACCM", - [3]byte{0, 31, 43}: "Orange Logic", - [3]byte{0, 31, 44}: "Starbridge Networks", - [3]byte{0, 31, 45}: "Electro-Optical Imaging, Inc.", - [3]byte{0, 31, 46}: "Triangle Research Int'l Pte Ltd", - [3]byte{0, 31, 47}: "Berker GmbH & Co. KG", - [3]byte{0, 31, 48}: "Travelping", - [3]byte{0, 31, 49}: "Radiocomp", - [3]byte{0, 31, 50}: "Nintendo Co., Ltd.", - [3]byte{0, 31, 51}: "NETGEAR", - [3]byte{0, 31, 52}: "Lung Hwa Electronics Co., Ltd.", - [3]byte{0, 31, 53}: "AIR802 LLC", - [3]byte{0, 31, 54}: "Bellwin Information Co. Ltd.,", - [3]byte{0, 31, 55}: "Genesis I&C", - [3]byte{0, 31, 56}: "POSITRON", - [3]byte{0, 31, 57}: "Construcciones y Auxiliar de Ferrocarriles, S.A.", - [3]byte{0, 31, 58}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 31, 59}: "Intel Corporate", - [3]byte{0, 31, 60}: "Intel Corporate", - [3]byte{0, 31, 61}: "Qbit GmbH", - [3]byte{0, 31, 62}: "RP-Technik e.K.", - [3]byte{0, 31, 63}: "AVM GmbH", - [3]byte{0, 31, 64}: "Speakercraft Inc.", - [3]byte{0, 31, 65}: "Ruckus Wireless", - [3]byte{0, 31, 66}: "Etherstack plc", - [3]byte{0, 31, 67}: "ENTES ELEKTRONIK", - [3]byte{0, 31, 68}: "GE Transportation Systems", - [3]byte{0, 31, 69}: "Enterasys", - [3]byte{0, 31, 70}: "Nortel Networks", - [3]byte{0, 31, 71}: "MCS Logic Inc.", - [3]byte{0, 31, 72}: "Mojix Inc.", - [3]byte{0, 31, 73}: "Manhattan TV Ltd", - [3]byte{0, 31, 74}: "Albentia Systems S.A.", - [3]byte{0, 31, 75}: "Lineage Power", - [3]byte{0, 31, 76}: "Roseman Engineering Ltd", - [3]byte{0, 31, 77}: "Segnetics LLC", - [3]byte{0, 31, 78}: "ConMed Linvatec", - [3]byte{0, 31, 79}: "Thinkware Co. Ltd.", - [3]byte{0, 31, 80}: "Swissdis AG", - [3]byte{0, 31, 81}: "HD Communications Corp", - [3]byte{0, 31, 82}: "UVT Unternehmensberatung fur Verkehr und Technik GmbH", - [3]byte{0, 31, 83}: "GEMAC Gesellschaft für Mikroelektronikanwendung Chemnitz mbH", - [3]byte{0, 31, 84}: "Lorex Technology Inc.", - [3]byte{0, 31, 85}: "Honeywell Security (China) Co., Ltd.", - [3]byte{0, 31, 86}: "DIGITAL FORECAST", - [3]byte{0, 31, 87}: "Phonik Innovation Co.,LTD", - [3]byte{0, 31, 88}: "EMH Energiemesstechnik GmbH", - [3]byte{0, 31, 89}: "Kronback Tracers", - [3]byte{0, 31, 90}: "Beckwith Electric Co.", - [3]byte{0, 31, 91}: "Apple, Inc.", - [3]byte{0, 31, 92}: "Nokia Danmark A/S", - [3]byte{0, 31, 93}: "Nokia Danmark A/S", - [3]byte{0, 31, 94}: "Dyna Technology Co.,Ltd.", - [3]byte{0, 31, 95}: "Blatand GmbH", - [3]byte{0, 31, 96}: "COMPASS SYSTEMS CORP.", - [3]byte{0, 31, 97}: "Talent Communication Networks Inc.", - [3]byte{0, 31, 98}: "JSC Stilsoft", - [3]byte{0, 31, 99}: "JSC Goodwin-Europa", - [3]byte{0, 31, 100}: "Beijing Autelan Technology Inc.", - [3]byte{0, 31, 101}: "KOREA ELECTRIC TERMINAL CO., LTD.", - [3]byte{0, 31, 102}: "PLANAR LLC", - [3]byte{0, 31, 103}: "Hitachi,Ltd.", - [3]byte{0, 31, 104}: "Martinsson Elektronik AB", - [3]byte{0, 31, 105}: "Pingood Technology Co., Ltd.", - [3]byte{0, 31, 106}: "PacketFlux Technologies, Inc.", - [3]byte{0, 31, 107}: "LG Electronics (Mobile Communications)", - [3]byte{0, 31, 108}: "Cisco Systems, Inc", - [3]byte{0, 31, 109}: "Cisco Systems, Inc", - [3]byte{0, 31, 110}: "Vtech Engineering Corporation", - [3]byte{0, 31, 111}: "Fujian Sunnada Communication Co.,Ltd.", - [3]byte{0, 31, 112}: "Botik Technologies LTD", - [3]byte{0, 31, 113}: "xG Technology, Inc.", - [3]byte{0, 31, 114}: "QingDao Hiphone Technology Co,.Ltd", - [3]byte{0, 31, 115}: "Teraview Technology Co., Ltd.", - [3]byte{0, 31, 116}: "Eigen Development", - [3]byte{0, 31, 117}: "GiBahn Media", - [3]byte{0, 31, 118}: "AirLogic Systems Inc.", - [3]byte{0, 31, 119}: "HEOL DESIGN", - [3]byte{0, 31, 120}: "Blue Fox Porini Textile", - [3]byte{0, 31, 121}: "Lodam Electronics A/S", - [3]byte{0, 31, 122}: "WiWide Inc.", - [3]byte{0, 31, 123}: "TechNexion Ltd.", - [3]byte{0, 31, 124}: "Witelcom AS", - [3]byte{0, 31, 125}: "Embedded Wireless GmbH", - [3]byte{0, 31, 126}: "ARRIS Group, Inc.", - [3]byte{0, 31, 127}: "Phabrix Limited", - [3]byte{0, 31, 128}: "Lucas Holding bv", - [3]byte{0, 31, 129}: "Accel Semiconductor Corp", - [3]byte{0, 31, 130}: "Cal-Comp Electronics & Communications Company Ltd.", - [3]byte{0, 31, 131}: "Teleplan Technology Services Sdn Bhd", - [3]byte{0, 31, 132}: "Gigle Semiconductor", - [3]byte{0, 31, 133}: "Apriva ISS, LLC", - [3]byte{0, 31, 134}: "digEcor", - [3]byte{0, 31, 135}: "Skydigital Inc.", - [3]byte{0, 31, 136}: "FMS Force Measuring Systems AG", - [3]byte{0, 31, 137}: "Signalion GmbH", - [3]byte{0, 31, 138}: "Ellion Digital Inc.", - [3]byte{0, 31, 139}: "Cache IQ", - [3]byte{0, 31, 140}: "CCS Inc.", - [3]byte{0, 31, 141}: "Ingenieurbuero Stark GmbH und Ko. KG", - [3]byte{0, 31, 142}: "Metris USA Inc.", - [3]byte{0, 31, 143}: "Shanghai Bellmann Digital Source Co.,Ltd.", - [3]byte{0, 31, 144}: "Actiontec Electronics, Inc", - [3]byte{0, 31, 145}: "DBS Lodging Technologies, LLC", - [3]byte{0, 31, 146}: "Avigilon Corporation", - [3]byte{0, 31, 147}: "Xiotech Corporation", - [3]byte{0, 31, 148}: "Lascar Electronics Ltd", - [3]byte{0, 31, 149}: "Sagemcom Broadband SAS", - [3]byte{0, 31, 150}: "APROTECH CO.LTD", - [3]byte{0, 31, 151}: "BERTANA srl", - [3]byte{0, 31, 152}: "DAIICHI-DENTSU LTD.", - [3]byte{0, 31, 153}: "SERONICS co.ltd", - [3]byte{0, 31, 154}: "Nortel Networks", - [3]byte{0, 31, 155}: "POSBRO", - [3]byte{0, 31, 156}: "LEDCO", - [3]byte{0, 31, 157}: "Cisco Systems, Inc", - [3]byte{0, 31, 158}: "Cisco Systems, Inc", - [3]byte{0, 31, 159}: "Thomson Telecom Belgium", - [3]byte{0, 31, 160}: "A10 Networks", - [3]byte{0, 31, 161}: "Gtran Inc", - [3]byte{0, 31, 162}: "Datron World Communications, Inc.", - [3]byte{0, 31, 163}: "T&W Electronics(Shenzhen)Co.,Ltd.", - [3]byte{0, 31, 164}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT", - [3]byte{0, 31, 165}: "Blue-White Industries", - [3]byte{0, 31, 166}: "Stilo srl", - [3]byte{0, 31, 167}: "Sony Interactive Entertainment Inc.", - [3]byte{0, 31, 168}: "Smart Energy Instruments Inc.", - [3]byte{0, 31, 169}: "Atlanta DTH, Inc.", - [3]byte{0, 31, 170}: "Taseon, Inc.", - [3]byte{0, 31, 171}: "I.S HIGH TECH.INC", - [3]byte{0, 31, 172}: "Goodmill Systems Ltd", - [3]byte{0, 31, 173}: "Brown Innovations, Inc", - [3]byte{0, 31, 174}: "Blick South Africa (Pty) Ltd", - [3]byte{0, 31, 175}: "NextIO, Inc.", - [3]byte{0, 31, 176}: "TimeIPS, Inc.", - [3]byte{0, 31, 177}: "Cybertech Inc.", - [3]byte{0, 31, 178}: "Sontheim Industrie Elektronik GmbH", - [3]byte{0, 31, 179}: "2Wire Inc", - [3]byte{0, 31, 180}: "SmartShare Systems", - [3]byte{0, 31, 181}: "I/O Interconnect Inc.", - [3]byte{0, 31, 182}: "Chi Lin Technology Co., Ltd.", - [3]byte{0, 31, 183}: "WiMate Technologies Corp.", - [3]byte{0, 31, 184}: "Universal Remote Control, Inc.", - [3]byte{0, 31, 185}: "Paltronics", - [3]byte{0, 31, 186}: "Boyoung Tech", - [3]byte{0, 31, 187}: "Xenatech Co.,LTD", - [3]byte{0, 31, 188}: "EVGA Corporation", - [3]byte{0, 31, 189}: "Kyocera Wireless Corp.", - [3]byte{0, 31, 190}: "Shenzhen Mopnet Industrial Co.,Ltd", - [3]byte{0, 31, 191}: "Fulhua Microelectronics Corp. Taiwan Branch", - [3]byte{0, 31, 192}: "Control Express Finland Oy", - [3]byte{0, 31, 193}: "Hanlong Technology Co.,LTD", - [3]byte{0, 31, 194}: "Jow Tong Technology Co Ltd", - [3]byte{0, 31, 195}: "SmartSynch, Inc", - [3]byte{0, 31, 196}: "ARRIS Group, Inc.", - [3]byte{0, 31, 197}: "Nintendo Co., Ltd.", - [3]byte{0, 31, 198}: "ASUSTek COMPUTER INC.", - [3]byte{0, 31, 199}: "Casio Hitachi Mobile Communications Co., Ltd.", - [3]byte{0, 31, 200}: "Up-Today Industrial Co., Ltd.", - [3]byte{0, 31, 201}: "Cisco Systems, Inc", - [3]byte{0, 31, 202}: "Cisco Systems, Inc", - [3]byte{0, 31, 203}: "NIW Solutions", - [3]byte{0, 31, 204}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 31, 205}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 31, 206}: "QTECH LLC", - [3]byte{0, 31, 207}: "MSI Technology GmbH", - [3]byte{0, 31, 208}: "GIGA-BYTE TECHNOLOGY CO.,LTD.", - [3]byte{0, 31, 209}: "OPTEX CO.,LTD.", - [3]byte{0, 31, 210}: "COMMTECH TECHNOLOGY MACAO COMMERCIAL OFFSHORE LTD.", - [3]byte{0, 31, 211}: "RIVA Networks Inc.", - [3]byte{0, 31, 212}: "4IPNET, INC.", - [3]byte{0, 31, 213}: "MICRORISC s.r.o.", - [3]byte{0, 31, 214}: "Shenzhen Allywll", - [3]byte{0, 31, 215}: "TELERAD SA", - [3]byte{0, 31, 216}: "A-TRUST COMPUTER CORPORATION", - [3]byte{0, 31, 217}: "RSD Communications Ltd", - [3]byte{0, 31, 218}: "Nortel Networks", - [3]byte{0, 31, 219}: "Network Supply Corp.,", - [3]byte{0, 31, 220}: "Mobile Safe Track Ltd", - [3]byte{0, 31, 221}: "GDI LLC", - [3]byte{0, 31, 222}: "Nokia Danmark A/S", - [3]byte{0, 31, 223}: "Nokia Danmark A/S", - [3]byte{0, 31, 224}: "EdgeVelocity Corp", - [3]byte{0, 31, 225}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 31, 226}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 31, 227}: "LG Electronics (Mobile Communications)", - [3]byte{0, 31, 228}: "Sony Mobile Communications AB", - [3]byte{0, 31, 229}: "In-Circuit GmbH", - [3]byte{0, 31, 230}: "Alphion Corporation", - [3]byte{0, 31, 231}: "Simet", - [3]byte{0, 31, 232}: "KURUSUGAWA Electronics Industry Inc,.", - [3]byte{0, 31, 233}: "Printrex, Inc.", - [3]byte{0, 31, 234}: "Applied Media Technologies Corporation", - [3]byte{0, 31, 235}: "Trio Datacom Pty Ltd", - [3]byte{0, 31, 236}: "Synapse Électronique", - [3]byte{0, 31, 237}: "Tecan Systems Inc.", - [3]byte{0, 31, 238}: "ubisys technologies GmbH", - [3]byte{0, 31, 239}: "SHINSEI INDUSTRIES CO.,LTD", - [3]byte{0, 31, 240}: "Audio Partnership", - [3]byte{0, 31, 241}: "Paradox Hellas S.A.", - [3]byte{0, 31, 242}: "VIA Technologies, Inc.", - [3]byte{0, 31, 243}: "Apple, Inc.", - [3]byte{0, 31, 244}: "Power Monitors, Inc.", - [3]byte{0, 31, 245}: "Kongsberg Defence & Aerospace", - [3]byte{0, 31, 246}: "PS Audio International", - [3]byte{0, 31, 247}: "Nakajima All Precision Co., Ltd.", - [3]byte{0, 31, 248}: "Siemens AG, Sector Industry, Drive Technologies, Motion Control Systems", - [3]byte{0, 31, 249}: "Advanced Knowledge Associates", - [3]byte{0, 31, 250}: "Coretree, Co, Ltd", - [3]byte{0, 31, 251}: "Green Packet Bhd", - [3]byte{0, 31, 252}: "Riccius+Sohn GmbH", - [3]byte{0, 31, 253}: "Indigo Mobile Technologies Corp.", - [3]byte{0, 31, 254}: "HPN Supply Chain", - [3]byte{0, 31, 255}: "Respironics, Inc.", - [3]byte{0, 32, 0}: "LEXMARK INTERNATIONAL, INC.", - [3]byte{0, 32, 1}: "DSP SOLUTIONS, INC.", - [3]byte{0, 32, 2}: "SERITECH ENTERPRISE CO., LTD.", - [3]byte{0, 32, 3}: "PIXEL POWER LTD.", - [3]byte{0, 32, 4}: "YAMATAKE-HONEYWELL CO., LTD.", - [3]byte{0, 32, 5}: "SIMPLE TECHNOLOGY", - [3]byte{0, 32, 6}: "GARRETT COMMUNICATIONS, INC.", - [3]byte{0, 32, 7}: "SFA, INC.", - [3]byte{0, 32, 8}: "CABLE & COMPUTER TECHNOLOGY", - [3]byte{0, 32, 9}: "PACKARD BELL ELEC., INC.", - [3]byte{0, 32, 10}: "SOURCE-COMM CORP.", - [3]byte{0, 32, 11}: "OCTAGON SYSTEMS CORP.", - [3]byte{0, 32, 12}: "ADASTRA SYSTEMS CORP.", - [3]byte{0, 32, 13}: "CARL ZEISS", - [3]byte{0, 32, 14}: "SATELLITE TECHNOLOGY MGMT, INC", - [3]byte{0, 32, 15}: "EBRAINS Inc", - [3]byte{0, 32, 16}: "JEOL SYSTEM TECHNOLOGY CO. LTD", - [3]byte{0, 32, 17}: "CANOPUS CO., LTD.", - [3]byte{0, 32, 18}: "CAMTRONICS MEDICAL SYSTEMS", - [3]byte{0, 32, 19}: "DIVERSIFIED TECHNOLOGY, INC.", - [3]byte{0, 32, 20}: "GLOBAL VIEW CO., LTD.", - [3]byte{0, 32, 21}: "ACTIS COMPUTER SA", - [3]byte{0, 32, 22}: "SHOWA ELECTRIC WIRE & CABLE CO", - [3]byte{0, 32, 23}: "ORBOTECH", - [3]byte{0, 32, 24}: "CIS TECHNOLOGY INC.", - [3]byte{0, 32, 25}: "OHLER GMBH", - [3]byte{0, 32, 26}: "MRV Communications, Inc.", - [3]byte{0, 32, 27}: "NORTHERN TELECOM/NETWORK", - [3]byte{0, 32, 28}: "EXCEL, INC.", - [3]byte{0, 32, 29}: "KATANA PRODUCTS", - [3]byte{0, 32, 30}: "NETQUEST CORPORATION", - [3]byte{0, 32, 31}: "BEST POWER TECHNOLOGY, INC.", - [3]byte{0, 32, 32}: "MEGATRON COMPUTER INDUSTRIES PTY, LTD.", - [3]byte{0, 32, 33}: "ALGORITHMS SOFTWARE PVT. LTD.", - [3]byte{0, 32, 34}: "NMS Communications", - [3]byte{0, 32, 35}: "T.C. TECHNOLOGIES PTY. LTD", - [3]byte{0, 32, 36}: "PACIFIC COMMUNICATION SCIENCES", - [3]byte{0, 32, 37}: "CONTROL TECHNOLOGY, INC.", - [3]byte{0, 32, 38}: "AMKLY SYSTEMS, INC.", - [3]byte{0, 32, 39}: "MING FORTUNE INDUSTRY CO., LTD", - [3]byte{0, 32, 40}: "WEST EGG SYSTEMS, INC.", - [3]byte{0, 32, 41}: "TELEPROCESSING PRODUCTS, INC.", - [3]byte{0, 32, 42}: "N.V. DZINE", - [3]byte{0, 32, 43}: "ADVANCED TELECOMMUNICATIONS MODULES, LTD.", - [3]byte{0, 32, 44}: "WELLTRONIX CO., LTD.", - [3]byte{0, 32, 45}: "TAIYO CORPORATION", - [3]byte{0, 32, 46}: "DAYSTAR DIGITAL", - [3]byte{0, 32, 47}: "ZETA COMMUNICATIONS, LTD.", - [3]byte{0, 32, 48}: "ANALOG & DIGITAL SYSTEMS", - [3]byte{0, 32, 49}: "Tattile SRL", - [3]byte{0, 32, 50}: "ALCATEL TAISEL", - [3]byte{0, 32, 51}: "SYNAPSE TECHNOLOGIES, INC.", - [3]byte{0, 32, 52}: "ROTEC INDUSTRIEAUTOMATION GMBH", - [3]byte{0, 32, 53}: "IBM Corp", - [3]byte{0, 32, 54}: "BMC SOFTWARE", - [3]byte{0, 32, 55}: "Seagate Technology", - [3]byte{0, 32, 56}: "VME MICROSYSTEMS INTERNATIONAL CORPORATION", - [3]byte{0, 32, 57}: "SCINETS", - [3]byte{0, 32, 58}: "DIGITAL BI0METRICS INC.", - [3]byte{0, 32, 59}: "WISDM LTD.", - [3]byte{0, 32, 60}: "EUROTIME AB", - [3]byte{0, 32, 61}: "Honeywell ECC", - [3]byte{0, 32, 62}: "LogiCan Technologies, Inc.", - [3]byte{0, 32, 63}: "JUKI CORPORATION", - [3]byte{0, 32, 64}: "ARRIS Group, Inc.", - [3]byte{0, 32, 65}: "DATA NET", - [3]byte{0, 32, 66}: "DATAMETRICS CORP.", - [3]byte{0, 32, 67}: "NEURON COMPANY LIMITED", - [3]byte{0, 32, 68}: "GENITECH PTY LTD", - [3]byte{0, 32, 69}: "ION Networks, Inc.", - [3]byte{0, 32, 70}: "CIPRICO, INC.", - [3]byte{0, 32, 71}: "STEINBRECHER CORP.", - [3]byte{0, 32, 72}: "Marconi Communications", - [3]byte{0, 32, 73}: "COMTRON, INC.", - [3]byte{0, 32, 74}: "PRONET GMBH", - [3]byte{0, 32, 75}: "AUTOCOMPUTER CO., LTD.", - [3]byte{0, 32, 76}: "MITRON COMPUTER PTE LTD.", - [3]byte{0, 32, 77}: "INOVIS GMBH", - [3]byte{0, 32, 78}: "NETWORK SECURITY SYSTEMS, INC.", - [3]byte{0, 32, 79}: "DEUTSCHE AEROSPACE AG", - [3]byte{0, 32, 80}: "KOREA COMPUTER INC.", - [3]byte{0, 32, 81}: "Verilink Corporation", - [3]byte{0, 32, 82}: "RAGULA SYSTEMS", - [3]byte{0, 32, 83}: "HUNTSVILLE MICROSYSTEMS, INC.", - [3]byte{0, 32, 84}: "Sycamore Networks", - [3]byte{0, 32, 85}: "ALTECH CO., LTD.", - [3]byte{0, 32, 86}: "NEOPRODUCTS", - [3]byte{0, 32, 87}: "TITZE DATENTECHNIK GmbH", - [3]byte{0, 32, 88}: "ALLIED SIGNAL INC.", - [3]byte{0, 32, 89}: "MIRO COMPUTER PRODUCTS AG", - [3]byte{0, 32, 90}: "COMPUTER IDENTICS", - [3]byte{0, 32, 91}: "Kentrox, LLC", - [3]byte{0, 32, 92}: "InterNet Systems of Florida, Inc.", - [3]byte{0, 32, 93}: "NANOMATIC OY", - [3]byte{0, 32, 94}: "CASTLE ROCK, INC.", - [3]byte{0, 32, 95}: "GAMMADATA COMPUTER GMBH", - [3]byte{0, 32, 96}: "ALCATEL ITALIA S.p.A.", - [3]byte{0, 32, 97}: "GarrettCom, Inc.", - [3]byte{0, 32, 98}: "SCORPION LOGIC, LTD.", - [3]byte{0, 32, 99}: "WIPRO INFOTECH LTD.", - [3]byte{0, 32, 100}: "PROTEC MICROSYSTEMS, INC.", - [3]byte{0, 32, 101}: "SUPERNET NETWORKING INC.", - [3]byte{0, 32, 102}: "GENERAL MAGIC, INC.", - [3]byte{0, 32, 103}: "Private", - [3]byte{0, 32, 104}: "ISDYNE", - [3]byte{0, 32, 105}: "ISDN SYSTEMS CORPORATION", - [3]byte{0, 32, 106}: "OSAKA COMPUTER CORP.", - [3]byte{0, 32, 107}: "KONICA MINOLTA HOLDINGS, INC.", - [3]byte{0, 32, 108}: "EVERGREEN TECHNOLOGY CORP.", - [3]byte{0, 32, 109}: "DATA RACE, INC.", - [3]byte{0, 32, 110}: "XACT, INC.", - [3]byte{0, 32, 111}: "FLOWPOINT CORPORATION", - [3]byte{0, 32, 112}: "HYNET, LTD.", - [3]byte{0, 32, 113}: "IBR GMBH", - [3]byte{0, 32, 114}: "WORKLINK INNOVATIONS", - [3]byte{0, 32, 115}: "FUSION SYSTEMS CORPORATION", - [3]byte{0, 32, 116}: "SUNGWOON SYSTEMS", - [3]byte{0, 32, 117}: "MOTOROLA COMMUNICATION ISRAEL", - [3]byte{0, 32, 118}: "REUDO CORPORATION", - [3]byte{0, 32, 119}: "KARDIOS SYSTEMS CORP.", - [3]byte{0, 32, 120}: "RUNTOP, INC.", - [3]byte{0, 32, 121}: "MIKRON GMBH", - [3]byte{0, 32, 122}: "WiSE Communications, Inc.", - [3]byte{0, 32, 123}: "Intel Corporation", - [3]byte{0, 32, 124}: "AUTEC GMBH", - [3]byte{0, 32, 125}: "ADVANCED COMPUTER APPLICATIONS", - [3]byte{0, 32, 126}: "FINECOM CO., LTD.", - [3]byte{0, 32, 127}: "KYOEI SANGYO CO., LTD.", - [3]byte{0, 32, 128}: "SYNERGY (UK) LTD.", - [3]byte{0, 32, 129}: "TITAN ELECTRONICS", - [3]byte{0, 32, 130}: "ONEAC CORPORATION", - [3]byte{0, 32, 131}: "PRESTICOM INCORPORATED", - [3]byte{0, 32, 132}: "OCE PRINTING SYSTEMS, GMBH", - [3]byte{0, 32, 133}: "Eaton Corporation", - [3]byte{0, 32, 134}: "MICROTECH ELECTRONICS LIMITED", - [3]byte{0, 32, 135}: "MEMOTEC, INC.", - [3]byte{0, 32, 136}: "GLOBAL VILLAGE COMMUNICATION", - [3]byte{0, 32, 137}: "T3PLUS NETWORKING, INC.", - [3]byte{0, 32, 138}: "SONIX COMMUNICATIONS, LTD.", - [3]byte{0, 32, 139}: "LAPIS TECHNOLOGIES, INC.", - [3]byte{0, 32, 140}: "GALAXY NETWORKS, INC.", - [3]byte{0, 32, 141}: "CMD TECHNOLOGY", - [3]byte{0, 32, 142}: "CHEVIN SOFTWARE ENG. LTD.", - [3]byte{0, 32, 143}: "ECI Telecom Ltd.", - [3]byte{0, 32, 144}: "ADVANCED COMPRESSION TECHNOLOGY, INC.", - [3]byte{0, 32, 145}: "J125, NATIONAL SECURITY AGENCY", - [3]byte{0, 32, 146}: "CHESS ENGINEERING B.V.", - [3]byte{0, 32, 147}: "LANDINGS TECHNOLOGY CORP.", - [3]byte{0, 32, 148}: "CUBIX CORPORATION", - [3]byte{0, 32, 149}: "RIVA ELECTRONICS", - [3]byte{0, 32, 150}: "Invensys", - [3]byte{0, 32, 151}: "APPLIED SIGNAL TECHNOLOGY", - [3]byte{0, 32, 152}: "HECTRONIC AB", - [3]byte{0, 32, 153}: "BON ELECTRIC CO., LTD.", - [3]byte{0, 32, 154}: "THE 3DO COMPANY", - [3]byte{0, 32, 155}: "ERSAT ELECTRONIC GMBH", - [3]byte{0, 32, 156}: "PRIMARY ACCESS CORP.", - [3]byte{0, 32, 157}: "LIPPERT AUTOMATIONSTECHNIK", - [3]byte{0, 32, 158}: "BROWN'S OPERATING SYSTEM SERVICES, LTD.", - [3]byte{0, 32, 159}: "MERCURY COMPUTER SYSTEMS, INC.", - [3]byte{0, 32, 160}: "OA LABORATORY CO., LTD.", - [3]byte{0, 32, 161}: "DOVATRON", - [3]byte{0, 32, 162}: "GALCOM NETWORKING LTD.", - [3]byte{0, 32, 163}: "Harmonic, Inc", - [3]byte{0, 32, 164}: "MULTIPOINT NETWORKS", - [3]byte{0, 32, 165}: "API ENGINEERING", - [3]byte{0, 32, 166}: "Proxim Wireless", - [3]byte{0, 32, 167}: "PAIRGAIN TECHNOLOGIES, INC.", - [3]byte{0, 32, 168}: "SAST TECHNOLOGY CORP.", - [3]byte{0, 32, 169}: "WHITE HORSE INDUSTRIAL", - [3]byte{0, 32, 170}: "Ericsson Television Limited", - [3]byte{0, 32, 171}: "MICRO INDUSTRIES CORP.", - [3]byte{0, 32, 172}: "INTERFLEX DATENSYSTEME GMBH", - [3]byte{0, 32, 173}: "LINQ SYSTEMS", - [3]byte{0, 32, 174}: "ORNET DATA COMMUNICATION TECH.", - [3]byte{0, 32, 175}: "3COM CORPORATION", - [3]byte{0, 32, 176}: "GATEWAY DEVICES, INC.", - [3]byte{0, 32, 177}: "COMTECH RESEARCH INC.", - [3]byte{0, 32, 178}: "GKD Gesellschaft Fur Kommunikation Und Datentechnik", - [3]byte{0, 32, 179}: "Tattile SRL", - [3]byte{0, 32, 180}: "TERMA ELEKTRONIK AS", - [3]byte{0, 32, 181}: "YASKAWA ELECTRIC CORPORATION", - [3]byte{0, 32, 182}: "AGILE NETWORKS, INC.", - [3]byte{0, 32, 183}: "NAMAQUA COMPUTERWARE", - [3]byte{0, 32, 184}: "PRIME OPTION, INC.", - [3]byte{0, 32, 185}: "METRICOM, INC.", - [3]byte{0, 32, 186}: "CENTER FOR HIGH PERFORMANCE", - [3]byte{0, 32, 187}: "ZAX CORPORATION", - [3]byte{0, 32, 188}: "Long Reach Networks Pty Ltd", - [3]byte{0, 32, 189}: "NIOBRARA R & D CORPORATION", - [3]byte{0, 32, 190}: "LAN ACCESS CORP.", - [3]byte{0, 32, 191}: "AEHR TEST SYSTEMS", - [3]byte{0, 32, 192}: "PULSE ELECTRONICS, INC.", - [3]byte{0, 32, 193}: "SAXA, Inc.", - [3]byte{0, 32, 194}: "TEXAS MEMORY SYSTEMS, INC.", - [3]byte{0, 32, 195}: "COUNTER SOLUTIONS LTD.", - [3]byte{0, 32, 196}: "INET,INC.", - [3]byte{0, 32, 197}: "EAGLE TECHNOLOGY", - [3]byte{0, 32, 198}: "NECTEC", - [3]byte{0, 32, 199}: "AKAI Professional M.I. Corp.", - [3]byte{0, 32, 200}: "LARSCOM INCORPORATED", - [3]byte{0, 32, 201}: "VICTRON BV", - [3]byte{0, 32, 202}: "DIGITAL OCEAN", - [3]byte{0, 32, 203}: "PRETEC ELECTRONICS CORP.", - [3]byte{0, 32, 204}: "DIGITAL SERVICES, LTD.", - [3]byte{0, 32, 205}: "HYBRID NETWORKS, INC.", - [3]byte{0, 32, 206}: "LOGICAL DESIGN GROUP, INC.", - [3]byte{0, 32, 207}: "TEST & MEASUREMENT SYSTEMS INC", - [3]byte{0, 32, 208}: "VERSALYNX CORPORATION", - [3]byte{0, 32, 209}: "MICROCOMPUTER SYSTEMS (M) SDN.", - [3]byte{0, 32, 210}: "RAD DATA COMMUNICATIONS, LTD.", - [3]byte{0, 32, 211}: "OST (OUEST STANDARD TELEMATIQU", - [3]byte{0, 32, 212}: "Cabletron Systems, Inc.", - [3]byte{0, 32, 213}: "VIPA GMBH", - [3]byte{0, 32, 214}: "Breezecom, Ltd.", - [3]byte{0, 32, 215}: "JAPAN MINICOMPUTER SYSTEMS CO., Ltd.", - [3]byte{0, 32, 216}: "Nortel Networks", - [3]byte{0, 32, 217}: "PANASONIC TECHNOLOGIES, INC./MIECO-US", - [3]byte{0, 32, 218}: "Alcatel-Lucent Enterprise", - [3]byte{0, 32, 219}: "XNET TECHNOLOGY, INC.", - [3]byte{0, 32, 220}: "DENSITRON TAIWAN LTD.", - [3]byte{0, 32, 221}: "Cybertec Pty Ltd", - [3]byte{0, 32, 222}: "JAPAN DIGITAL LABORAT'Y CO.LTD", - [3]byte{0, 32, 223}: "KYOSAN ELECTRIC MFG. CO., LTD.", - [3]byte{0, 32, 224}: "Actiontec Electronics, Inc", - [3]byte{0, 32, 225}: "ALAMAR ELECTRONICS", - [3]byte{0, 32, 226}: "INFORMATION RESOURCE ENGINEERING", - [3]byte{0, 32, 227}: "MCD KENCOM CORPORATION", - [3]byte{0, 32, 228}: "HSING TECH ENTERPRISE CO., LTD", - [3]byte{0, 32, 229}: "APEX DATA, INC.", - [3]byte{0, 32, 230}: "LIDKOPING MACHINE TOOLS AB", - [3]byte{0, 32, 231}: "B&W NUCLEAR SERVICE COMPANY", - [3]byte{0, 32, 232}: "DATATREK CORPORATION", - [3]byte{0, 32, 233}: "DANTEL", - [3]byte{0, 32, 234}: "EFFICIENT NETWORKS, INC.", - [3]byte{0, 32, 235}: "CINCINNATI MICROWAVE, INC.", - [3]byte{0, 32, 236}: "TECHWARE SYSTEMS CORP.", - [3]byte{0, 32, 237}: "GIGA-BYTE TECHNOLOGY CO., LTD.", - [3]byte{0, 32, 238}: "GTECH CORPORATION", - [3]byte{0, 32, 239}: "USC CORPORATION", - [3]byte{0, 32, 240}: "UNIVERSAL MICROELECTRONICS CO.", - [3]byte{0, 32, 241}: "ALTOS INDIA LIMITED", - [3]byte{0, 32, 242}: "Oracle Corporation", - [3]byte{0, 32, 243}: "RAYNET CORPORATION", - [3]byte{0, 32, 244}: "SPECTRIX CORPORATION", - [3]byte{0, 32, 245}: "PANDATEL AG", - [3]byte{0, 32, 246}: "NET TEK AND KARLNET, INC.", - [3]byte{0, 32, 247}: "CYBERDATA CORPORATION", - [3]byte{0, 32, 248}: "CARRERA COMPUTERS, INC.", - [3]byte{0, 32, 249}: "PARALINK NETWORKS, INC.", - [3]byte{0, 32, 250}: "GDE SYSTEMS, INC.", - [3]byte{0, 32, 251}: "OCTEL COMMUNICATIONS CORP.", - [3]byte{0, 32, 252}: "MATROX", - [3]byte{0, 32, 253}: "ITV TECHNOLOGIES, INC.", - [3]byte{0, 32, 254}: "TOPWARE INC. / GRAND COMPUTER", - [3]byte{0, 32, 255}: "SYMMETRICAL TECHNOLOGIES", - [3]byte{0, 33, 0}: "Gemtek Technology Co., Ltd.", - [3]byte{0, 33, 1}: "Aplicaciones Electronicas Quasar (AEQ)", - [3]byte{0, 33, 2}: "UpdateLogic Inc.", - [3]byte{0, 33, 3}: "GHI Electronics, LLC", - [3]byte{0, 33, 4}: "Gigaset Communications GmbH", - [3]byte{0, 33, 5}: "Alcatel-Lucent IPD", - [3]byte{0, 33, 6}: "RIM Testing Services", - [3]byte{0, 33, 7}: "Seowonintech Co Ltd.", - [3]byte{0, 33, 8}: "Nokia Danmark A/S", - [3]byte{0, 33, 9}: "Nokia Danmark A/S", - [3]byte{0, 33, 10}: "byd:sign Corporation", - [3]byte{0, 33, 11}: "GEMINI TRAZE RFID PVT. LTD.", - [3]byte{0, 33, 12}: "Cymtec Systems, Inc.", - [3]byte{0, 33, 13}: "SAMSIN INNOTEC", - [3]byte{0, 33, 14}: "Orpak Systems L.T.D.", - [3]byte{0, 33, 15}: "Cernium Corp", - [3]byte{0, 33, 16}: "Clearbox Systems", - [3]byte{0, 33, 17}: "Uniphone Inc.", - [3]byte{0, 33, 18}: "WISCOM SYSTEM CO.,LTD", - [3]byte{0, 33, 19}: "Padtec S/A", - [3]byte{0, 33, 20}: "Hylab Technology Inc.", - [3]byte{0, 33, 21}: "PHYWE Systeme GmbH & Co. KG", - [3]byte{0, 33, 22}: "Transcon Electronic Systems, spol. s r. o.", - [3]byte{0, 33, 23}: "Tellord", - [3]byte{0, 33, 24}: "Athena Tech, Inc.", - [3]byte{0, 33, 25}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{0, 33, 26}: "LInTech Corporation", - [3]byte{0, 33, 27}: "Cisco Systems, Inc", - [3]byte{0, 33, 28}: "Cisco Systems, Inc", - [3]byte{0, 33, 29}: "Dataline AB", - [3]byte{0, 33, 30}: "ARRIS Group, Inc.", - [3]byte{0, 33, 31}: "SHINSUNG DELTATECH CO.,LTD.", - [3]byte{0, 33, 32}: "Sequel Technologies", - [3]byte{0, 33, 33}: "VRmagic GmbH", - [3]byte{0, 33, 34}: "Chip-pro Ltd.", - [3]byte{0, 33, 35}: "Aerosat Avionics", - [3]byte{0, 33, 36}: "Optos Plc", - [3]byte{0, 33, 37}: "KUK JE TONG SHIN Co.,LTD", - [3]byte{0, 33, 38}: "Shenzhen Torch Equipment Co., Ltd.", - [3]byte{0, 33, 39}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{0, 33, 40}: "Oracle Corporation", - [3]byte{0, 33, 41}: "Cisco-Linksys, LLC", - [3]byte{0, 33, 42}: "Audiovox Corporation", - [3]byte{0, 33, 43}: "MSA Auer", - [3]byte{0, 33, 44}: "SemIndia System Private Limited", - [3]byte{0, 33, 45}: "SCIMOLEX CORPORATION", - [3]byte{0, 33, 46}: "dresden-elektronik", - [3]byte{0, 33, 47}: "Phoebe Micro Inc.", - [3]byte{0, 33, 48}: "Keico Hightech Inc.", - [3]byte{0, 33, 49}: "Blynke Inc.", - [3]byte{0, 33, 50}: "Masterclock, Inc.", - [3]byte{0, 33, 51}: "Building B, Inc", - [3]byte{0, 33, 52}: "Brandywine Communications", - [3]byte{0, 33, 53}: "ALCATEL-LUCENT", - [3]byte{0, 33, 54}: "ARRIS Group, Inc.", - [3]byte{0, 33, 55}: "Bay Controls, LLC", - [3]byte{0, 33, 56}: "Cepheid", - [3]byte{0, 33, 57}: "Escherlogic Inc.", - [3]byte{0, 33, 58}: "Winchester Systems Inc.", - [3]byte{0, 33, 59}: "Berkshire Products, Inc", - [3]byte{0, 33, 60}: "AliphCom", - [3]byte{0, 33, 61}: "Cermetek Microelectronics, Inc.", - [3]byte{0, 33, 62}: "TomTom", - [3]byte{0, 33, 63}: "A-Team Technology Ltd.", - [3]byte{0, 33, 64}: "EN Technologies Inc.", - [3]byte{0, 33, 65}: "RADLIVE", - [3]byte{0, 33, 66}: "Advanced Control Systems doo", - [3]byte{0, 33, 67}: "ARRIS Group, Inc.", - [3]byte{0, 33, 68}: "SS Telecoms", - [3]byte{0, 33, 69}: "Semptian Technologies Ltd.", - [3]byte{0, 33, 70}: "Sanmina-SCI", - [3]byte{0, 33, 71}: "Nintendo Co., Ltd.", - [3]byte{0, 33, 72}: "Kaco Solar Korea", - [3]byte{0, 33, 73}: "China Daheng Group ,Inc.", - [3]byte{0, 33, 74}: "Pixel Velocity, Inc", - [3]byte{0, 33, 75}: "Shenzhen HAMP Science & Technology Co.,Ltd", - [3]byte{0, 33, 76}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 33, 77}: "Guangzhou Skytone Transmission Technology Com. Ltd.", - [3]byte{0, 33, 78}: "GS Yuasa Power Supply Ltd.", - [3]byte{0, 33, 79}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{0, 33, 80}: "EYEVIEW ELECTRONICS", - [3]byte{0, 33, 81}: "Millinet Co., Ltd.", - [3]byte{0, 33, 82}: "General Satellite Research & Development Limited", - [3]byte{0, 33, 83}: "SeaMicro Inc.", - [3]byte{0, 33, 84}: "D-TACQ Solutions Ltd", - [3]byte{0, 33, 85}: "Cisco Systems, Inc", - [3]byte{0, 33, 86}: "Cisco Systems, Inc", - [3]byte{0, 33, 87}: "National Datacast, Inc.", - [3]byte{0, 33, 88}: "Style Flying Technology Co.", - [3]byte{0, 33, 89}: "Juniper Networks", - [3]byte{0, 33, 90}: "Hewlett Packard", - [3]byte{0, 33, 91}: "SenseAnywhere", - [3]byte{0, 33, 92}: "Intel Corporate", - [3]byte{0, 33, 93}: "Intel Corporate", - [3]byte{0, 33, 94}: "IBM Corp", - [3]byte{0, 33, 95}: "IHSE GmbH", - [3]byte{0, 33, 96}: "Hidea Solutions Co. Ltd.", - [3]byte{0, 33, 97}: "Yournet Inc.", - [3]byte{0, 33, 98}: "Nortel Networks", - [3]byte{0, 33, 99}: "ASKEY COMPUTER CORP", - [3]byte{0, 33, 100}: "Special Design Bureau for Seismic Instrumentation", - [3]byte{0, 33, 101}: "Presstek Inc.", - [3]byte{0, 33, 102}: "NovAtel Inc.", - [3]byte{0, 33, 103}: "HWA JIN T&I Corp.", - [3]byte{0, 33, 104}: "iVeia, LLC", - [3]byte{0, 33, 105}: "Prologix, LLC.", - [3]byte{0, 33, 106}: "Intel Corporate", - [3]byte{0, 33, 107}: "Intel Corporate", - [3]byte{0, 33, 108}: "ODVA", - [3]byte{0, 33, 109}: "Soltech Co., Ltd.", - [3]byte{0, 33, 110}: "Function ATI (Huizhou) Telecommunications Co., Ltd.", - [3]byte{0, 33, 111}: "SymCom, Inc.", - [3]byte{0, 33, 112}: "Dell Inc.", - [3]byte{0, 33, 113}: "Wesung TNC Co., Ltd.", - [3]byte{0, 33, 114}: "Seoultek Valley", - [3]byte{0, 33, 115}: "Ion Torrent Systems, Inc.", - [3]byte{0, 33, 116}: "AvaLAN Wireless", - [3]byte{0, 33, 117}: "Pacific Satellite International Ltd.", - [3]byte{0, 33, 118}: "YMax Telecom Ltd.", - [3]byte{0, 33, 119}: "W. L. Gore & Associates", - [3]byte{0, 33, 120}: "Matuschek Messtechnik GmbH", - [3]byte{0, 33, 121}: "IOGEAR, Inc.", - [3]byte{0, 33, 122}: "Sejin Electron, Inc.", - [3]byte{0, 33, 123}: "Bastec AB", - [3]byte{0, 33, 124}: "2Wire Inc", - [3]byte{0, 33, 125}: "PYXIS S.R.L.", - [3]byte{0, 33, 126}: "Telit Communication s.p.a", - [3]byte{0, 33, 127}: "Intraco Technology Pte Ltd", - [3]byte{0, 33, 128}: "ARRIS Group, Inc.", - [3]byte{0, 33, 129}: "Si2 Microsystems Limited", - [3]byte{0, 33, 130}: "SandLinks Systems, Ltd.", - [3]byte{0, 33, 131}: "ANDRITZ HYDRO GmbH", - [3]byte{0, 33, 132}: "POWERSOFT SRL", - [3]byte{0, 33, 133}: "MICRO-STAR INT'L CO.,LTD.", - [3]byte{0, 33, 134}: "Universal Global Scientific Industrial Co., Ltd.", - [3]byte{0, 33, 135}: "Imacs GmbH", - [3]byte{0, 33, 136}: "EMC Corporation", - [3]byte{0, 33, 137}: "AppTech, Inc.", - [3]byte{0, 33, 138}: "Electronic Design and Manufacturing Company", - [3]byte{0, 33, 139}: "Wescon Technology, Inc.", - [3]byte{0, 33, 140}: "TopControl GMBH", - [3]byte{0, 33, 141}: "AP Router Ind. Eletronica LTDA", - [3]byte{0, 33, 142}: "MEKICS CO., LTD.", - [3]byte{0, 33, 143}: "Avantgarde Acoustic Lautsprechersysteme GmbH", - [3]byte{0, 33, 144}: "Goliath Solutions", - [3]byte{0, 33, 145}: "D-Link Corporation", - [3]byte{0, 33, 146}: "Baoding Galaxy Electronic Technology Co.,Ltd", - [3]byte{0, 33, 147}: "Videofon MV", - [3]byte{0, 33, 148}: "Ping Communication", - [3]byte{0, 33, 149}: "GWD Media Limited", - [3]byte{0, 33, 150}: "Telsey S.p.A.", - [3]byte{0, 33, 151}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{0, 33, 152}: "Thai Radio Co, LTD", - [3]byte{0, 33, 153}: "Vacon Plc", - [3]byte{0, 33, 154}: "Cambridge Visual Networks Ltd", - [3]byte{0, 33, 155}: "Dell Inc.", - [3]byte{0, 33, 156}: "Honeywld Technology Corp.", - [3]byte{0, 33, 157}: "Adesys BV", - [3]byte{0, 33, 158}: "Sony Mobile Communications AB", - [3]byte{0, 33, 159}: "SATEL OY", - [3]byte{0, 33, 160}: "Cisco Systems, Inc", - [3]byte{0, 33, 161}: "Cisco Systems, Inc", - [3]byte{0, 33, 162}: "EKE-Electronics Ltd.", - [3]byte{0, 33, 163}: "Micromint", - [3]byte{0, 33, 164}: "Dbii Networks", - [3]byte{0, 33, 165}: "ERLPhase Power Technologies Ltd.", - [3]byte{0, 33, 166}: "Videotec Spa", - [3]byte{0, 33, 167}: "Hantle System Co., Ltd.", - [3]byte{0, 33, 168}: "Telephonics Corporation", - [3]byte{0, 33, 169}: "Mobilink Telecom Co.,Ltd", - [3]byte{0, 33, 170}: "Nokia Danmark A/S", - [3]byte{0, 33, 171}: "Nokia Danmark A/S", - [3]byte{0, 33, 172}: "Infrared Integrated Systems Ltd", - [3]byte{0, 33, 173}: "Nordic ID Oy", - [3]byte{0, 33, 174}: "ALCATEL-LUCENT FRANCE - WTD", - [3]byte{0, 33, 175}: "Radio Frequency Systems", - [3]byte{0, 33, 176}: "Tyco Telecommunications", - [3]byte{0, 33, 177}: "DIGITAL SOLUTIONS LTD", - [3]byte{0, 33, 178}: "Fiberblaze A/S", - [3]byte{0, 33, 179}: "Ross Controls", - [3]byte{0, 33, 180}: "APRO MEDIA CO., LTD", - [3]byte{0, 33, 181}: "Galvanic Ltd", - [3]byte{0, 33, 182}: "Triacta Power Technologies Inc.", - [3]byte{0, 33, 183}: "Lexmark International Inc.", - [3]byte{0, 33, 184}: "Inphi Corporation", - [3]byte{0, 33, 185}: "Universal Devices Inc.", - [3]byte{0, 33, 186}: "Texas Instruments", - [3]byte{0, 33, 187}: "Riken Keiki Co., Ltd.", - [3]byte{0, 33, 188}: "ZALA COMPUTER", - [3]byte{0, 33, 189}: "Nintendo Co., Ltd.", - [3]byte{0, 33, 190}: "Cisco SPVTG", - [3]byte{0, 33, 191}: "Hitachi High-Tech Control Systems Corporation", - [3]byte{0, 33, 192}: "Mobile Appliance, Inc.", - [3]byte{0, 33, 193}: "ABB Oy / Medium Voltage Products", - [3]byte{0, 33, 194}: "GL Communications Inc", - [3]byte{0, 33, 195}: "CORNELL Communications, Inc.", - [3]byte{0, 33, 196}: "Consilium AB", - [3]byte{0, 33, 197}: "3DSP Corp", - [3]byte{0, 33, 198}: "CSJ Global, Inc.", - [3]byte{0, 33, 199}: "Russound", - [3]byte{0, 33, 200}: "LOHUIS Networks", - [3]byte{0, 33, 201}: "Wavecom Asia Pacific Limited", - [3]byte{0, 33, 202}: "ART System Co., Ltd.", - [3]byte{0, 33, 203}: "SMS TECNOLOGIA ELETRONICA LTDA", - [3]byte{0, 33, 204}: "Flextronics International", - [3]byte{0, 33, 205}: "LiveTV", - [3]byte{0, 33, 206}: "NTC-Metrotek", - [3]byte{0, 33, 207}: "The Crypto Group", - [3]byte{0, 33, 208}: "Global Display Solutions Spa", - [3]byte{0, 33, 209}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 33, 210}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 33, 211}: "BOCOM SECURITY(ASIA PACIFIC) LIMITED", - [3]byte{0, 33, 212}: "Vollmer Werke GmbH", - [3]byte{0, 33, 213}: "X2E GmbH", - [3]byte{0, 33, 214}: "LXI Consortium", - [3]byte{0, 33, 215}: "Cisco Systems, Inc", - [3]byte{0, 33, 216}: "Cisco Systems, Inc", - [3]byte{0, 33, 217}: "SEKONIC CORPORATION", - [3]byte{0, 33, 218}: "Automation Products Group Inc.", - [3]byte{0, 33, 219}: "Santachi Video Technology (Shenzhen) Co., Ltd.", - [3]byte{0, 33, 220}: "TECNOALARM S.r.l.", - [3]byte{0, 33, 221}: "Northstar Systems Corp", - [3]byte{0, 33, 222}: "Firepro Wireless", - [3]byte{0, 33, 223}: "Martin Christ GmbH", - [3]byte{0, 33, 224}: "CommAgility Ltd", - [3]byte{0, 33, 225}: "Nortel Networks", - [3]byte{0, 33, 226}: "visago Systems & Controls GmbH & Co. KG", - [3]byte{0, 33, 227}: "SerialTek LLC", - [3]byte{0, 33, 228}: "I-WIN", - [3]byte{0, 33, 229}: "Display Solution AG", - [3]byte{0, 33, 230}: "Starlight Video Limited", - [3]byte{0, 33, 231}: "Informatics Services Corporation", - [3]byte{0, 33, 232}: "Murata Manufacturing Co., Ltd.", - [3]byte{0, 33, 233}: "Apple, Inc.", - [3]byte{0, 33, 234}: "Bystronic Laser AG", - [3]byte{0, 33, 235}: "ESP SYSTEMS, LLC", - [3]byte{0, 33, 236}: "Solutronic GmbH", - [3]byte{0, 33, 237}: "Telegesis", - [3]byte{0, 33, 238}: "Full Spectrum Inc.", - [3]byte{0, 33, 239}: "Kapsys", - [3]byte{0, 33, 240}: "EW3 Technologies LLC", - [3]byte{0, 33, 241}: "Tutus Data AB", - [3]byte{0, 33, 242}: "EASY3CALL Technology Limited", - [3]byte{0, 33, 243}: "Si14 SpA", - [3]byte{0, 33, 244}: "INRange Systems, Inc", - [3]byte{0, 33, 245}: "Western Engravers Supply, Inc.", - [3]byte{0, 33, 246}: "Oracle Corporation", - [3]byte{0, 33, 247}: "HPN Supply Chain", - [3]byte{0, 33, 248}: "Enseo, Inc.", - [3]byte{0, 33, 249}: "WIRECOM Technologies", - [3]byte{0, 33, 250}: "A4SP Technologies Ltd.", - [3]byte{0, 33, 251}: "LG Electronics (Mobile Communications)", - [3]byte{0, 33, 252}: "Nokia Danmark A/S", - [3]byte{0, 33, 253}: "LACROIX TRAFFIC S.A.U", - [3]byte{0, 33, 254}: "Nokia Danmark A/S", - [3]byte{0, 33, 255}: "Cyfrowy Polsat SA", - [3]byte{0, 34, 0}: "IBM Corp", - [3]byte{0, 34, 1}: "Aksys Networks Inc", - [3]byte{0, 34, 2}: "Excito Elektronik i Skåne AB", - [3]byte{0, 34, 3}: "Glensound Electronics Ltd", - [3]byte{0, 34, 4}: "KORATEK", - [3]byte{0, 34, 5}: "WeLink Solutions, Inc.", - [3]byte{0, 34, 6}: "Cyberdyne Inc.", - [3]byte{0, 34, 7}: "Inteno Broadband Technology AB", - [3]byte{0, 34, 8}: "Certicom Corp", - [3]byte{0, 34, 9}: "Omron Healthcare Co., Ltd", - [3]byte{0, 34, 10}: "OnLive, Inc", - [3]byte{0, 34, 11}: "National Source Coding Center", - [3]byte{0, 34, 12}: "Cisco Systems, Inc", - [3]byte{0, 34, 13}: "Cisco Systems, Inc", - [3]byte{0, 34, 14}: "Indigo Security Co., Ltd.", - [3]byte{0, 34, 15}: "MoCA (Multimedia over Coax Alliance)", - [3]byte{0, 34, 16}: "ARRIS Group, Inc.", - [3]byte{0, 34, 17}: "Rohati Systems", - [3]byte{0, 34, 18}: "CAI Networks, Inc.", - [3]byte{0, 34, 19}: "PCI CORPORATION", - [3]byte{0, 34, 20}: "RINNAI KOREA", - [3]byte{0, 34, 21}: "ASUSTek COMPUTER INC.", - [3]byte{0, 34, 22}: "SHIBAURA VENDING MACHINE CORPORATION", - [3]byte{0, 34, 23}: "Neat Electronics", - [3]byte{0, 34, 24}: "Verivue Inc.", - [3]byte{0, 34, 25}: "Dell Inc.", - [3]byte{0, 34, 26}: "Audio Precision", - [3]byte{0, 34, 27}: "Morega Systems", - [3]byte{0, 34, 28}: "Private", - [3]byte{0, 34, 29}: "Freegene Technology LTD", - [3]byte{0, 34, 30}: "Media Devices Co., Ltd.", - [3]byte{0, 34, 31}: "eSang Technologies Co., Ltd.", - [3]byte{0, 34, 32}: "Mitac Technology Corp", - [3]byte{0, 34, 33}: "ITOH DENKI CO,LTD.", - [3]byte{0, 34, 34}: "Schaffner Deutschland GmbH", - [3]byte{0, 34, 35}: "TimeKeeping Systems, Inc.", - [3]byte{0, 34, 36}: "Good Will Instrument Co., Ltd.", - [3]byte{0, 34, 37}: "Thales Avionics Ltd", - [3]byte{0, 34, 38}: "Avaak, Inc.", - [3]byte{0, 34, 39}: "uv-electronic GmbH", - [3]byte{0, 34, 40}: "Breeze Innovations Ltd.", - [3]byte{0, 34, 41}: "Compumedics Ltd", - [3]byte{0, 34, 42}: "SoundEar A/S", - [3]byte{0, 34, 43}: "Nucomm, Inc.", - [3]byte{0, 34, 44}: "Ceton Corp", - [3]byte{0, 34, 45}: "SMC Networks Inc.", - [3]byte{0, 34, 46}: "maintech GmbH", - [3]byte{0, 34, 47}: "Open Grid Computing, Inc.", - [3]byte{0, 34, 48}: "FutureLogic Inc.", - [3]byte{0, 34, 49}: "SMT&C Co., Ltd.", - [3]byte{0, 34, 50}: "Design Design Technology Ltd", - [3]byte{0, 34, 51}: "ADB Broadband Italia", - [3]byte{0, 34, 52}: "Corventis Inc.", - [3]byte{0, 34, 53}: "Strukton Systems bv", - [3]byte{0, 34, 54}: "VECTOR SP. Z O.O.", - [3]byte{0, 34, 55}: "Shinhint Group", - [3]byte{0, 34, 56}: "LOGIPLUS", - [3]byte{0, 34, 57}: "Indiana Life Sciences Incorporated", - [3]byte{0, 34, 58}: "Cisco SPVTG", - [3]byte{0, 34, 59}: "Communication Networks, LLC", - [3]byte{0, 34, 60}: "RATIO Entwicklungen GmbH", - [3]byte{0, 34, 61}: "JumpGen Systems, LLC", - [3]byte{0, 34, 62}: "IRTrans GmbH", - [3]byte{0, 34, 63}: "NETGEAR", - [3]byte{0, 34, 64}: "Universal Telecom S/A", - [3]byte{0, 34, 65}: "Apple, Inc.", - [3]byte{0, 34, 66}: "Alacron Inc.", - [3]byte{0, 34, 67}: "AzureWave Technology Inc.", - [3]byte{0, 34, 68}: "Chengdu Linkon Communications Device Co., Ltd", - [3]byte{0, 34, 69}: "Leine & Linde AB", - [3]byte{0, 34, 70}: "Evoc Intelligent Technology Co.,Ltd.", - [3]byte{0, 34, 71}: "DAC ENGINEERING CO., LTD.", - [3]byte{0, 34, 72}: "Microsoft Corporation", - [3]byte{0, 34, 73}: "HOME MULTIENERGY SL", - [3]byte{0, 34, 74}: "RAYLASE AG", - [3]byte{0, 34, 75}: "AIRTECH TECHNOLOGIES, INC.", - [3]byte{0, 34, 76}: "Nintendo Co., Ltd.", - [3]byte{0, 34, 77}: "MITAC INTERNATIONAL CORP.", - [3]byte{0, 34, 78}: "SEEnergy Corp.", - [3]byte{0, 34, 79}: "Byzoro Networks Ltd.", - [3]byte{0, 34, 80}: "Point Six Wireless, LLC", - [3]byte{0, 34, 81}: "Lumasense Technologies", - [3]byte{0, 34, 82}: "ZOLL Lifecor Corporation", - [3]byte{0, 34, 83}: "Entorian Technologies", - [3]byte{0, 34, 84}: "Bigelow Aerospace", - [3]byte{0, 34, 85}: "Cisco Systems, Inc", - [3]byte{0, 34, 86}: "Cisco Systems, Inc", - [3]byte{0, 34, 87}: "3COM EUROPE LTD", - [3]byte{0, 34, 88}: "Taiyo Yuden Co., Ltd.", - [3]byte{0, 34, 89}: "Guangzhou New Postcom Equipment Co.,Ltd.", - [3]byte{0, 34, 90}: "Garde Security AB", - [3]byte{0, 34, 91}: "Teradici Corporation", - [3]byte{0, 34, 92}: "Multimedia & Communication Technology", - [3]byte{0, 34, 93}: "Digicable Network India Pvt. Ltd.", - [3]byte{0, 34, 94}: "Uwin Technologies Co.,LTD", - [3]byte{0, 34, 95}: "Liteon Technology Corporation", - [3]byte{0, 34, 96}: "AFREEY Inc.", - [3]byte{0, 34, 97}: "Frontier Silicon Ltd", - [3]byte{0, 34, 98}: "BEP Marine", - [3]byte{0, 34, 99}: "Koos Technical Services, Inc.", - [3]byte{0, 34, 100}: "Hewlett Packard", - [3]byte{0, 34, 101}: "Nokia Danmark A/S", - [3]byte{0, 34, 102}: "Nokia Danmark A/S", - [3]byte{0, 34, 103}: "Nortel Networks", - [3]byte{0, 34, 104}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 34, 105}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 34, 106}: "Honeywell", - [3]byte{0, 34, 107}: "Cisco-Linksys, LLC", - [3]byte{0, 34, 108}: "LinkSprite Technologies, Inc.", - [3]byte{0, 34, 109}: "Shenzhen GIEC Electronics Co., Ltd.", - [3]byte{0, 34, 110}: "Gowell Electronic Limited", - [3]byte{0, 34, 111}: "3onedata Technology Co. Ltd.", - [3]byte{0, 34, 112}: "ABK North America, LLC", - [3]byte{0, 34, 113}: "Jäger Computergesteuerte Meßtechnik GmbH.", - [3]byte{0, 34, 114}: "American Micro-Fuel Device Corp.", - [3]byte{0, 34, 115}: "Techway", - [3]byte{0, 34, 116}: "FamilyPhone AB", - [3]byte{0, 34, 117}: "Belkin International Inc.", - [3]byte{0, 34, 118}: "Triple EYE B.V.", - [3]byte{0, 34, 119}: "NEC Australia Pty Ltd", - [3]byte{0, 34, 120}: "Shenzhen Tongfang Multimedia Technology Co.,Ltd.", - [3]byte{0, 34, 121}: "Nippon Conlux Co., Ltd.", - [3]byte{0, 34, 122}: "Telecom Design", - [3]byte{0, 34, 123}: "Apogee Labs, Inc.", - [3]byte{0, 34, 124}: "Woori SMT Co.,ltd", - [3]byte{0, 34, 125}: "YE DATA INC.", - [3]byte{0, 34, 126}: "Chengdu 30Kaitian Communication Industry Co.Ltd", - [3]byte{0, 34, 127}: "Ruckus Wireless", - [3]byte{0, 34, 128}: "A2B Electronics AB", - [3]byte{0, 34, 129}: "Daintree Networks Pty", - [3]byte{0, 34, 130}: "8086 Consultancy", - [3]byte{0, 34, 131}: "Juniper Networks", - [3]byte{0, 34, 132}: "DESAY A&V SCIENCE AND TECHNOLOGY CO.,LTD", - [3]byte{0, 34, 133}: "NOMUS COMM SYSTEMS", - [3]byte{0, 34, 134}: "ASTRON", - [3]byte{0, 34, 135}: "Titan Wireless LLC", - [3]byte{0, 34, 136}: "Sagrad, Inc.", - [3]byte{0, 34, 137}: "Optosecurity Inc.", - [3]byte{0, 34, 138}: "Teratronik elektronische systeme gmbh", - [3]byte{0, 34, 139}: "Kensington Computer Products Group", - [3]byte{0, 34, 140}: "Photon Europe GmbH", - [3]byte{0, 34, 141}: "GBS Laboratories LLC", - [3]byte{0, 34, 142}: "TV-NUMERIC", - [3]byte{0, 34, 143}: "CNRS", - [3]byte{0, 34, 144}: "Cisco Systems, Inc", - [3]byte{0, 34, 145}: "Cisco Systems, Inc", - [3]byte{0, 34, 146}: "Cinetal", - [3]byte{0, 34, 147}: "zte corporation", - [3]byte{0, 34, 148}: "KYOCERA CORPORATION", - [3]byte{0, 34, 149}: "SGM Technology for lighting spa", - [3]byte{0, 34, 150}: "LinoWave Corporation", - [3]byte{0, 34, 151}: "XMOS Semiconductor", - [3]byte{0, 34, 152}: "Sony Mobile Communications AB", - [3]byte{0, 34, 153}: "SeaMicro Inc.", - [3]byte{0, 34, 154}: "Lastar, Inc.", - [3]byte{0, 34, 155}: "AverLogic Technologies, Inc.", - [3]byte{0, 34, 156}: "Verismo Networks Inc", - [3]byte{0, 34, 157}: "PYUNG-HWA IND.CO.,LTD", - [3]byte{0, 34, 158}: "Social Aid Research Co., Ltd.", - [3]byte{0, 34, 159}: "Sensys Traffic AB", - [3]byte{0, 34, 160}: "Delphi Corporation", - [3]byte{0, 34, 161}: "Huawei Symantec Technologies Co.,Ltd.", - [3]byte{0, 34, 162}: "Xtramus Technologies", - [3]byte{0, 34, 163}: "California Eastern Laboratories", - [3]byte{0, 34, 164}: "2Wire Inc", - [3]byte{0, 34, 165}: "Texas Instruments", - [3]byte{0, 34, 166}: "Sony Computer Entertainment America", - [3]byte{0, 34, 167}: "Tyco Electronics AMP GmbH", - [3]byte{0, 34, 168}: "Ouman Oy", - [3]byte{0, 34, 169}: "LG Electronics (Mobile Communications)", - [3]byte{0, 34, 170}: "Nintendo Co., Ltd.", - [3]byte{0, 34, 171}: "Shenzhen Turbosight Technology Ltd", - [3]byte{0, 34, 172}: "Hangzhou Siyuan Tech. Co., Ltd", - [3]byte{0, 34, 173}: "TELESIS TECHNOLOGIES, INC.", - [3]byte{0, 34, 174}: "Mattel Inc.", - [3]byte{0, 34, 175}: "Safety Vision", - [3]byte{0, 34, 176}: "D-Link Corporation", - [3]byte{0, 34, 177}: "Elbit Systems Ltd.", - [3]byte{0, 34, 178}: "4RF Communications Ltd", - [3]byte{0, 34, 179}: "Sei S.p.A.", - [3]byte{0, 34, 180}: "ARRIS Group, Inc.", - [3]byte{0, 34, 181}: "NOVITA", - [3]byte{0, 34, 182}: "Superflow Technologies Group", - [3]byte{0, 34, 183}: "GSS Grundig SAT-Systems GmbH", - [3]byte{0, 34, 184}: "Norcott", - [3]byte{0, 34, 185}: "Analogix Seminconductor, Inc", - [3]byte{0, 34, 186}: "HUTH Elektronik Systeme GmbH", - [3]byte{0, 34, 187}: "beyerdynamic GmbH & Co. KG", - [3]byte{0, 34, 188}: "JDSU France SAS", - [3]byte{0, 34, 189}: "Cisco Systems, Inc", - [3]byte{0, 34, 190}: "Cisco Systems, Inc", - [3]byte{0, 34, 191}: "SieAmp Group of Companies", - [3]byte{0, 34, 192}: "Shenzhen Forcelink Electronic Co, Ltd", - [3]byte{0, 34, 193}: "Active Storage Inc.", - [3]byte{0, 34, 194}: "Proview Eletrônica do Brasil LTDA", - [3]byte{0, 34, 195}: "Zeeport Technology Inc.", - [3]byte{0, 34, 196}: "epro GmbH", - [3]byte{0, 34, 197}: "INFORSON Co,Ltd.", - [3]byte{0, 34, 198}: "Sutus Inc", - [3]byte{0, 34, 199}: "SEGGER Microcontroller GmbH & Co. KG", - [3]byte{0, 34, 200}: "Applied Instruments B.V.", - [3]byte{0, 34, 201}: "Lenord, Bauer & Co GmbH", - [3]byte{0, 34, 202}: "Anviz Biometric Tech. Co., Ltd.", - [3]byte{0, 34, 203}: "IONODES Inc.", - [3]byte{0, 34, 204}: "SciLog, Inc.", - [3]byte{0, 34, 205}: "Ared Technology Co., Ltd.", - [3]byte{0, 34, 206}: "Cisco SPVTG", - [3]byte{0, 34, 207}: "PLANEX COMMUNICATIONS INC.", - [3]byte{0, 34, 208}: "Polar Electro Oy", - [3]byte{0, 34, 209}: "Albrecht Jung GmbH & Co. KG", - [3]byte{0, 34, 210}: "All Earth Comércio de Eletrônicos LTDA.", - [3]byte{0, 34, 211}: "Hub-Tech", - [3]byte{0, 34, 212}: "ComWorth Co., Ltd.", - [3]byte{0, 34, 213}: "Eaton Corp. Electrical Group Data Center Solutions - Pulizzi", - [3]byte{0, 34, 214}: "Cypak AB", - [3]byte{0, 34, 215}: "Nintendo Co., Ltd.", - [3]byte{0, 34, 216}: "Shenzhen GST Security and Safety Technology Limited", - [3]byte{0, 34, 217}: "Fortex Industrial Ltd.", - [3]byte{0, 34, 218}: "ANATEK, LLC", - [3]byte{0, 34, 219}: "Translogic Corporation", - [3]byte{0, 34, 220}: "Vigil Health Solutions Inc.", - [3]byte{0, 34, 221}: "Protecta Electronics Ltd", - [3]byte{0, 34, 222}: "OPPO Digital, Inc.", - [3]byte{0, 34, 223}: "TAMUZ Monitors", - [3]byte{0, 34, 224}: "Atlantic Software Technologies S.r.L.", - [3]byte{0, 34, 225}: "ZORT Labs, LLC.", - [3]byte{0, 34, 226}: "WABTEC Transit Division", - [3]byte{0, 34, 227}: "Amerigon", - [3]byte{0, 34, 228}: "APASS TECHNOLOGY CO., LTD.", - [3]byte{0, 34, 229}: "Fisher-Rosemount Systems Inc.", - [3]byte{0, 34, 230}: "Intelligent Data", - [3]byte{0, 34, 231}: "WPS Parking Systems", - [3]byte{0, 34, 232}: "Applition Co., Ltd.", - [3]byte{0, 34, 233}: "ProVision Communications", - [3]byte{0, 34, 234}: "Rustelcom Inc.", - [3]byte{0, 34, 235}: "Data Respons A/S", - [3]byte{0, 34, 236}: "IDEALBT TECHNOLOGY CORPORATION", - [3]byte{0, 34, 237}: "TSI Power Corporation", - [3]byte{0, 34, 238}: "Algo Communication Products Ltd", - [3]byte{0, 34, 239}: "iWDL Technologies", - [3]byte{0, 34, 240}: "3 Greens Aviation Limited", - [3]byte{0, 34, 241}: "Private", - [3]byte{0, 34, 242}: "SunPower Corp", - [3]byte{0, 34, 243}: "SHARP Corporation", - [3]byte{0, 34, 244}: "AMPAK Technology, Inc.", - [3]byte{0, 34, 245}: "Advanced Realtime Tracking GmbH", - [3]byte{0, 34, 246}: "Syracuse Research Corporation", - [3]byte{0, 34, 247}: "Conceptronic", - [3]byte{0, 34, 248}: "PIMA Electronic Systems Ltd.", - [3]byte{0, 34, 249}: "Pollin Electronic GmbH", - [3]byte{0, 34, 250}: "Intel Corporate", - [3]byte{0, 34, 251}: "Intel Corporate", - [3]byte{0, 34, 252}: "Nokia Danmark A/S", - [3]byte{0, 34, 253}: "Nokia Danmark A/S", - [3]byte{0, 34, 254}: "Advanced Illumination", - [3]byte{0, 34, 255}: "NIVIS LLC", - [3]byte{0, 35, 0}: "Cayee Computer Ltd.", - [3]byte{0, 35, 1}: "Witron Technology Limited", - [3]byte{0, 35, 2}: "Cobalt Digital, Inc.", - [3]byte{0, 35, 3}: "LITE-ON IT Corporation", - [3]byte{0, 35, 4}: "Cisco Systems, Inc", - [3]byte{0, 35, 5}: "Cisco Systems, Inc", - [3]byte{0, 35, 6}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{0, 35, 7}: "FUTURE INNOVATION TECH CO.,LTD", - [3]byte{0, 35, 8}: "Arcadyan Technology Corporation", - [3]byte{0, 35, 9}: "Janam Technologies LLC", - [3]byte{0, 35, 10}: "ARBURG GmbH & Co KG", - [3]byte{0, 35, 11}: "ARRIS Group, Inc.", - [3]byte{0, 35, 12}: "CLOVER ELECTRONICS CO.,LTD.", - [3]byte{0, 35, 13}: "Nortel Networks", - [3]byte{0, 35, 14}: "Gorba AG", - [3]byte{0, 35, 15}: "Hirsch Electronics Corporation", - [3]byte{0, 35, 16}: "LNC Technology Co., Ltd.", - [3]byte{0, 35, 17}: "Gloscom Co., Ltd.", - [3]byte{0, 35, 18}: "Apple, Inc.", - [3]byte{0, 35, 19}: "Qool Technologies Ltd.", - [3]byte{0, 35, 20}: "Intel Corporate", - [3]byte{0, 35, 21}: "Intel Corporate", - [3]byte{0, 35, 22}: "KISAN ELECTRONICS CO", - [3]byte{0, 35, 23}: "Lasercraft Inc", - [3]byte{0, 35, 24}: "Toshiba", - [3]byte{0, 35, 25}: "Sielox LLC", - [3]byte{0, 35, 26}: "ITF Co., Ltd.", - [3]byte{0, 35, 27}: "Danaher Motion - Kollmorgen", - [3]byte{0, 35, 28}: "Fourier Systems Ltd.", - [3]byte{0, 35, 29}: "Deltacom Electronics Ltd", - [3]byte{0, 35, 30}: "Cezzer Multimedia Technologies", - [3]byte{0, 35, 31}: "Guangda Electronic & Telecommunication Technology Development Co., Ltd.", - [3]byte{0, 35, 32}: "Nicira Networks", - [3]byte{0, 35, 33}: "Avitech International Corp", - [3]byte{0, 35, 34}: "KISS Teknical Solutions, Inc.", - [3]byte{0, 35, 35}: "Zylin AS", - [3]byte{0, 35, 36}: "G-PRO COMPUTER", - [3]byte{0, 35, 37}: "IOLAN Holding", - [3]byte{0, 35, 38}: "FUJITSU LIMITED", - [3]byte{0, 35, 39}: "Shouyo Electronics CO., LTD", - [3]byte{0, 35, 40}: "ALCON TELECOMMUNICATIONS CO., LTD.", - [3]byte{0, 35, 41}: "DDRdrive LLC", - [3]byte{0, 35, 42}: "eonas IT-Beratung und -Entwicklung GmbH", - [3]byte{0, 35, 43}: "IRD A/S", - [3]byte{0, 35, 44}: "Senticare", - [3]byte{0, 35, 45}: "SandForce", - [3]byte{0, 35, 46}: "Kedah Electronics Engineering, LLC", - [3]byte{0, 35, 47}: "Advanced Card Systems Ltd.", - [3]byte{0, 35, 48}: "DIZIPIA, INC.", - [3]byte{0, 35, 49}: "Nintendo Co., Ltd.", - [3]byte{0, 35, 50}: "Apple, Inc.", - [3]byte{0, 35, 51}: "Cisco Systems, Inc", - [3]byte{0, 35, 52}: "Cisco Systems, Inc", - [3]byte{0, 35, 53}: "Linkflex Co.,Ltd", - [3]byte{0, 35, 54}: "METEL s.r.o.", - [3]byte{0, 35, 55}: "Global Star Solutions ULC", - [3]byte{0, 35, 56}: "OJ-Electronics A/S", - [3]byte{0, 35, 57}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 35, 58}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 35, 59}: "C-Matic Systems Ltd", - [3]byte{0, 35, 60}: "Alflex", - [3]byte{0, 35, 61}: "Novero holding B.V.", - [3]byte{0, 35, 62}: "Alcatel-Lucent IPD", - [3]byte{0, 35, 63}: "Purechoice Inc", - [3]byte{0, 35, 64}: "MiXTelematics", - [3]byte{0, 35, 65}: "Vanderbilt International (SWE) AB", - [3]byte{0, 35, 66}: "Coffee Equipment Company", - [3]byte{0, 35, 67}: "TEM AG", - [3]byte{0, 35, 68}: "Objective Interface Systems, Inc.", - [3]byte{0, 35, 69}: "Sony Mobile Communications AB", - [3]byte{0, 35, 70}: "Vestac", - [3]byte{0, 35, 71}: "ProCurve Networking by HP", - [3]byte{0, 35, 72}: "Sagemcom Broadband SAS", - [3]byte{0, 35, 73}: "Helmholtz Centre Berlin for Material and Energy", - [3]byte{0, 35, 74}: "Private", - [3]byte{0, 35, 75}: "Inyuan Technology Inc.", - [3]byte{0, 35, 76}: "KTC AB", - [3]byte{0, 35, 77}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 35, 78}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 35, 79}: "Luminous Power Technologies Pvt. Ltd.", - [3]byte{0, 35, 80}: "LynTec", - [3]byte{0, 35, 81}: "2Wire Inc", - [3]byte{0, 35, 82}: "DATASENSOR S.p.A.", - [3]byte{0, 35, 83}: "F E T Elettronica snc", - [3]byte{0, 35, 84}: "ASUSTek COMPUTER INC.", - [3]byte{0, 35, 85}: "Kinco Automation(Shanghai) Ltd.", - [3]byte{0, 35, 86}: "Packet Forensics LLC", - [3]byte{0, 35, 87}: "Pitronot Technologies and Engineering P.T.E. Ltd.", - [3]byte{0, 35, 88}: "SYSTEL SA", - [3]byte{0, 35, 89}: "Benchmark Electronics ( Thailand ) Public Company Limited", - [3]byte{0, 35, 90}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{0, 35, 91}: "Gulfstream", - [3]byte{0, 35, 92}: "Aprius, Inc.", - [3]byte{0, 35, 93}: "Cisco Systems, Inc", - [3]byte{0, 35, 94}: "Cisco Systems, Inc", - [3]byte{0, 35, 95}: "Silicon Micro Sensors GmbH", - [3]byte{0, 35, 96}: "Lookit Technology Co., Ltd", - [3]byte{0, 35, 97}: "Unigen Corporation", - [3]byte{0, 35, 98}: "Goldline Controls", - [3]byte{0, 35, 99}: "Zhuhai Raysharp Technology Co.,Ltd", - [3]byte{0, 35, 100}: "Power Instruments Pte Ltd", - [3]byte{0, 35, 101}: "Insta Elektro GmbH", - [3]byte{0, 35, 102}: "Beijing Siasun Electronic System Co.,Ltd.", - [3]byte{0, 35, 103}: "UniControls a.s.", - [3]byte{0, 35, 104}: "Zebra Technologies Inc", - [3]byte{0, 35, 105}: "Cisco-Linksys, LLC", - [3]byte{0, 35, 106}: "SmartRG Inc", - [3]byte{0, 35, 107}: "Xembedded, Inc.", - [3]byte{0, 35, 108}: "Apple, Inc.", - [3]byte{0, 35, 109}: "ResMed Ltd", - [3]byte{0, 35, 110}: "Burster GmbH & Co KG", - [3]byte{0, 35, 111}: "DAQ System", - [3]byte{0, 35, 112}: "Snell", - [3]byte{0, 35, 113}: "SOAM Systel", - [3]byte{0, 35, 114}: "MORE STAR INDUSTRIAL GROUP LIMITED", - [3]byte{0, 35, 115}: "GridIron Systems, Inc.", - [3]byte{0, 35, 116}: "ARRIS Group, Inc.", - [3]byte{0, 35, 117}: "ARRIS Group, Inc.", - [3]byte{0, 35, 118}: "HTC Corporation", - [3]byte{0, 35, 119}: "Isotek Electronics Ltd", - [3]byte{0, 35, 120}: "GN Netcom A/S", - [3]byte{0, 35, 121}: "Union Business Machines Co. Ltd.", - [3]byte{0, 35, 122}: "RIM", - [3]byte{0, 35, 123}: "WHDI LLC", - [3]byte{0, 35, 124}: "NEOTION", - [3]byte{0, 35, 125}: "Hewlett Packard", - [3]byte{0, 35, 126}: "ELSTER GMBH", - [3]byte{0, 35, 127}: "PLANTRONICS, INC.", - [3]byte{0, 35, 128}: "Nanoteq", - [3]byte{0, 35, 129}: "Lengda Technology(Xiamen) Co.,Ltd.", - [3]byte{0, 35, 130}: "Lih Rong electronic Enterprise Co., Ltd.", - [3]byte{0, 35, 131}: "InMage Systems Inc", - [3]byte{0, 35, 132}: "GGH Engineering s.r.l.", - [3]byte{0, 35, 133}: "ANTIPODE", - [3]byte{0, 35, 134}: "Tour & Andersson AB", - [3]byte{0, 35, 135}: "ThinkFlood, Inc.", - [3]byte{0, 35, 136}: "V.T. Telematica S.p.a.", - [3]byte{0, 35, 137}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{0, 35, 138}: "Ciena Corporation", - [3]byte{0, 35, 139}: "QUANTA COMPUTER INC.", - [3]byte{0, 35, 140}: "Private", - [3]byte{0, 35, 141}: "Techno Design Co., Ltd.", - [3]byte{0, 35, 142}: "ADB Broadband Italia", - [3]byte{0, 35, 143}: "NIDEC COPAL CORPORATION", - [3]byte{0, 35, 144}: "Algolware Corporation", - [3]byte{0, 35, 145}: "Maxian", - [3]byte{0, 35, 146}: "Proteus Industries Inc.", - [3]byte{0, 35, 147}: "AJINEXTEK", - [3]byte{0, 35, 148}: "Samjeon", - [3]byte{0, 35, 149}: "ARRIS Group, Inc.", - [3]byte{0, 35, 150}: "ANDES TECHNOLOGY CORPORATION", - [3]byte{0, 35, 151}: "Westell Technologies Inc.", - [3]byte{0, 35, 152}: "Vutlan sro", - [3]byte{0, 35, 153}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 35, 154}: "EasyData Hardware GmbH", - [3]byte{0, 35, 155}: "Elster Solutions, LLC", - [3]byte{0, 35, 156}: "Juniper Networks", - [3]byte{0, 35, 157}: "Mapower Electronics Co., Ltd", - [3]byte{0, 35, 158}: "Jiangsu Lemote Technology Corporation Limited", - [3]byte{0, 35, 159}: "Institut für Prüftechnik", - [3]byte{0, 35, 160}: "Hana CNS Co., LTD.", - [3]byte{0, 35, 161}: "Trend Electronics Ltd", - [3]byte{0, 35, 162}: "ARRIS Group, Inc.", - [3]byte{0, 35, 163}: "ARRIS Group, Inc.", - [3]byte{0, 35, 164}: "New Concepts Development Corp.", - [3]byte{0, 35, 165}: "SageTV, LLC", - [3]byte{0, 35, 166}: "E-Mon", - [3]byte{0, 35, 167}: "Redpine Signals, Inc.", - [3]byte{0, 35, 168}: "Marshall Electronics", - [3]byte{0, 35, 169}: "Beijing Detianquan Electromechanical Equipment Co., Ltd", - [3]byte{0, 35, 170}: "HFR, Inc.", - [3]byte{0, 35, 171}: "Cisco Systems, Inc", - [3]byte{0, 35, 172}: "Cisco Systems, Inc", - [3]byte{0, 35, 173}: "Xmark Corporation", - [3]byte{0, 35, 174}: "Dell Inc.", - [3]byte{0, 35, 175}: "ARRIS Group, Inc.", - [3]byte{0, 35, 176}: "COMXION Technology Inc.", - [3]byte{0, 35, 177}: "Longcheer Technology (Singapore) Pte Ltd", - [3]byte{0, 35, 178}: "Intelligent Mechatronic Systems Inc", - [3]byte{0, 35, 179}: "Lyyn AB", - [3]byte{0, 35, 180}: "Nokia Danmark A/S", - [3]byte{0, 35, 181}: "ORTANA LTD", - [3]byte{0, 35, 182}: "SECURITE COMMUNICATIONS / HONEYWELL", - [3]byte{0, 35, 183}: "Q-Light Co., Ltd.", - [3]byte{0, 35, 184}: "Sichuan Jiuzhou Electronic Technology Co.,Ltd", - [3]byte{0, 35, 185}: "Airbus Defence and Space Deutschland GmbH", - [3]byte{0, 35, 186}: "Chroma", - [3]byte{0, 35, 187}: "Schmitt Industries", - [3]byte{0, 35, 188}: "EQ-SYS GmbH", - [3]byte{0, 35, 189}: "Digital Ally, Inc.", - [3]byte{0, 35, 190}: "Cisco SPVTG", - [3]byte{0, 35, 191}: "Mainpine, Inc.", - [3]byte{0, 35, 192}: "Broadway Networks", - [3]byte{0, 35, 193}: "Securitas Direct AB", - [3]byte{0, 35, 194}: "SAMSUNG Electronics. Co. LTD", - [3]byte{0, 35, 195}: "LogMeIn, Inc.", - [3]byte{0, 35, 196}: "Lux Lumen", - [3]byte{0, 35, 197}: "Radiation Safety and Control Services Inc", - [3]byte{0, 35, 198}: "SMC Corporation", - [3]byte{0, 35, 199}: "AVSystem", - [3]byte{0, 35, 200}: "TEAM-R", - [3]byte{0, 35, 201}: "Sichuan Tianyi Information Science & Technology Stock CO.,LTD", - [3]byte{0, 35, 202}: "Behind The Set, LLC", - [3]byte{0, 35, 203}: "Shenzhen Full-join Technology Co.,Ltd", - [3]byte{0, 35, 204}: "Nintendo Co., Ltd.", - [3]byte{0, 35, 205}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{0, 35, 206}: "KITA DENSHI CORPORATION", - [3]byte{0, 35, 207}: "CUMMINS-ALLISON CORP.", - [3]byte{0, 35, 208}: "Uniloc USA Inc.", - [3]byte{0, 35, 209}: "TRG", - [3]byte{0, 35, 210}: "Inhand Electronics, Inc.", - [3]byte{0, 35, 211}: "AirLink WiFi Networking Corp.", - [3]byte{0, 35, 212}: "Texas Instruments", - [3]byte{0, 35, 213}: "WAREMA electronic GmbH", - [3]byte{0, 35, 214}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 35, 215}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 35, 216}: "Ball-It Oy", - [3]byte{0, 35, 217}: "Banner Engineering", - [3]byte{0, 35, 218}: "Industrial Computer Source (Deutschland)GmbH", - [3]byte{0, 35, 219}: "saxnet gmbh", - [3]byte{0, 35, 220}: "Benein, Inc", - [3]byte{0, 35, 221}: "ELGIN S.A.", - [3]byte{0, 35, 222}: "Ansync Inc.", - [3]byte{0, 35, 223}: "Apple, Inc.", - [3]byte{0, 35, 224}: "INO Therapeutics LLC", - [3]byte{0, 35, 225}: "Cavena Image Products AB", - [3]byte{0, 35, 226}: "SEA Signalisation", - [3]byte{0, 35, 227}: "Microtronic AG", - [3]byte{0, 35, 228}: "IPnect co. ltd.", - [3]byte{0, 35, 229}: "IPaXiom Networks", - [3]byte{0, 35, 230}: "Pirkus, Inc.", - [3]byte{0, 35, 231}: "Hinke A/S", - [3]byte{0, 35, 232}: "Demco Corp.", - [3]byte{0, 35, 233}: "F5 Networks, Inc.", - [3]byte{0, 35, 234}: "Cisco Systems, Inc", - [3]byte{0, 35, 235}: "Cisco Systems, Inc", - [3]byte{0, 35, 236}: "Algorithmix GmbH", - [3]byte{0, 35, 237}: "ARRIS Group, Inc.", - [3]byte{0, 35, 238}: "ARRIS Group, Inc.", - [3]byte{0, 35, 239}: "Zuend Systemtechnik AG", - [3]byte{0, 35, 240}: "Shanghai Jinghan Weighing Apparatus Co. Ltd.", - [3]byte{0, 35, 241}: "Sony Mobile Communications AB", - [3]byte{0, 35, 242}: "TVLogic", - [3]byte{0, 35, 243}: "Glocom, Inc.", - [3]byte{0, 35, 244}: "Masternaut", - [3]byte{0, 35, 245}: "WILO SE", - [3]byte{0, 35, 246}: "Softwell Technology Co., Ltd.", - [3]byte{0, 35, 247}: "Private", - [3]byte{0, 35, 248}: "Zyxel Communications Corporation", - [3]byte{0, 35, 249}: "Double-Take Software, INC.", - [3]byte{0, 35, 250}: "RG Nets, Inc.", - [3]byte{0, 35, 251}: "IP Datatel, LLC.", - [3]byte{0, 35, 252}: "Ultra Stereo Labs, Inc", - [3]byte{0, 35, 253}: "AFT Atlas Fahrzeugtechnik GmbH", - [3]byte{0, 35, 254}: "Biodevices, SA", - [3]byte{0, 35, 255}: "Beijing HTTC Technology Ltd.", - [3]byte{0, 36, 0}: "Nortel Networks", - [3]byte{0, 36, 1}: "D-Link Corporation", - [3]byte{0, 36, 2}: "Op-Tection GmbH", - [3]byte{0, 36, 3}: "Nokia Danmark A/S", - [3]byte{0, 36, 4}: "Nokia Danmark A/S", - [3]byte{0, 36, 5}: "Dilog Nordic AB", - [3]byte{0, 36, 6}: "Pointmobile", - [3]byte{0, 36, 7}: "TELEM SAS", - [3]byte{0, 36, 8}: "Pacific Biosciences", - [3]byte{0, 36, 9}: "The Toro Company", - [3]byte{0, 36, 10}: "US Beverage Net", - [3]byte{0, 36, 11}: "Virtual Computer Inc.", - [3]byte{0, 36, 12}: "DELEC GmbH", - [3]byte{0, 36, 13}: "OnePath Networks LTD.", - [3]byte{0, 36, 14}: "Inventec Besta Co., Ltd.", - [3]byte{0, 36, 15}: "Ishii Tool & Engineering Corporation", - [3]byte{0, 36, 16}: "NUETEQ Technology,Inc.", - [3]byte{0, 36, 17}: "PharmaSmart LLC", - [3]byte{0, 36, 18}: "Benign Technologies Co, Ltd.", - [3]byte{0, 36, 19}: "Cisco Systems, Inc", - [3]byte{0, 36, 20}: "Cisco Systems, Inc", - [3]byte{0, 36, 21}: "Magnetic Autocontrol GmbH", - [3]byte{0, 36, 22}: "Any Use", - [3]byte{0, 36, 23}: "Thomson Telecom Belgium", - [3]byte{0, 36, 24}: "Nextwave Semiconductor", - [3]byte{0, 36, 25}: "Private", - [3]byte{0, 36, 26}: "Red Beetle Inc.", - [3]byte{0, 36, 27}: "iWOW Communications Pte Ltd", - [3]byte{0, 36, 28}: "FuGang Electronic (DG) Co.,Ltd", - [3]byte{0, 36, 29}: "GIGA-BYTE TECHNOLOGY CO.,LTD.", - [3]byte{0, 36, 30}: "Nintendo Co., Ltd.", - [3]byte{0, 36, 31}: "DCT-Delta GmbH", - [3]byte{0, 36, 32}: "NetUP Inc.", - [3]byte{0, 36, 33}: "MICRO-STAR INT'L CO., LTD.", - [3]byte{0, 36, 34}: "Knapp Logistik Automation GmbH", - [3]byte{0, 36, 35}: "AzureWave Technologies (Shanghai) Inc.", - [3]byte{0, 36, 36}: "Ace Axis Limited", - [3]byte{0, 36, 37}: "Shenzhenshi chuangzhicheng Technology Co.,Ltd", - [3]byte{0, 36, 38}: "NOHMI BOSAI LTD.", - [3]byte{0, 36, 39}: "SSI COMPUTER CORP", - [3]byte{0, 36, 40}: "EnergyICT", - [3]byte{0, 36, 41}: "MK MASTER INC.", - [3]byte{0, 36, 42}: "Hittite Microwave Corporation", - [3]byte{0, 36, 43}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 36, 44}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 36, 46}: "Datastrip Inc.", - [3]byte{0, 36, 47}: "Micron", - [3]byte{0, 36, 48}: "Ruby Tech Corp.", - [3]byte{0, 36, 49}: "Uni-v co.,ltd", - [3]byte{0, 36, 50}: "Neostar Technology Co.,LTD", - [3]byte{0, 36, 51}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{0, 36, 52}: "Lectrosonics, Inc.", - [3]byte{0, 36, 53}: "WIDE CORPORATION", - [3]byte{0, 36, 54}: "Apple, Inc.", - [3]byte{0, 36, 55}: "Motorola - BSG", - [3]byte{0, 36, 56}: "Brocade Communications Systems, Inc.", - [3]byte{0, 36, 57}: "Digital Barriers Advanced Technologies", - [3]byte{0, 36, 58}: "Ludl Electronic Products", - [3]byte{0, 36, 59}: "CSSI (S) Pte Ltd", - [3]byte{0, 36, 60}: "S.A.A.A.", - [3]byte{0, 36, 61}: "Emerson Appliance Motors and Controls", - [3]byte{0, 36, 63}: "Storwize, Inc.", - [3]byte{0, 36, 64}: "Halo Monitoring, Inc.", - [3]byte{0, 36, 65}: "Wanzl Metallwarenfabrik GmbH", - [3]byte{0, 36, 66}: "Axona Limited", - [3]byte{0, 36, 67}: "Nortel Networks", - [3]byte{0, 36, 68}: "Nintendo Co., Ltd.", - [3]byte{0, 36, 69}: "Adtran Inc", - [3]byte{0, 36, 70}: "MMB Research Inc.", - [3]byte{0, 36, 71}: "Kaztek Systems", - [3]byte{0, 36, 72}: "SpiderCloud Wireless, Inc", - [3]byte{0, 36, 73}: "Shen Zhen Lite Star Electronics Technology Co., Ltd", - [3]byte{0, 36, 74}: "Voyant International", - [3]byte{0, 36, 75}: "PERCEPTRON INC", - [3]byte{0, 36, 76}: "Solartron Metrology Ltd", - [3]byte{0, 36, 77}: "Hokkaido Electronics Corporation", - [3]byte{0, 36, 78}: "RadChips, Inc.", - [3]byte{0, 36, 79}: "Asantron Technologies Ltd.", - [3]byte{0, 36, 80}: "Cisco Systems, Inc", - [3]byte{0, 36, 81}: "Cisco Systems, Inc", - [3]byte{0, 36, 82}: "Silicon Software GmbH", - [3]byte{0, 36, 83}: "Initra d.o.o.", - [3]byte{0, 36, 84}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 36, 85}: "MuLogic BV", - [3]byte{0, 36, 86}: "2Wire Inc", - [3]byte{0, 36, 88}: "PA Bastion CC", - [3]byte{0, 36, 89}: "ABB Automation products GmbH", - [3]byte{0, 36, 90}: "Nanjing Panda Electronics Company Limited", - [3]byte{0, 36, 91}: "RAIDON TECHNOLOGY, INC.", - [3]byte{0, 36, 92}: "Design-Com Technologies Pty. Ltd.", - [3]byte{0, 36, 93}: "Terberg besturingstechniek B.V.", - [3]byte{0, 36, 94}: "Hivision Co.,ltd", - [3]byte{0, 36, 95}: "Vine Telecom CO.,Ltd.", - [3]byte{0, 36, 96}: "Giaval Science Development Co. Ltd.", - [3]byte{0, 36, 97}: "Shin Wang Tech.", - [3]byte{0, 36, 98}: "Rayzone Corporation", - [3]byte{0, 36, 99}: "Phybridge Inc", - [3]byte{0, 36, 100}: "Bridge Technologies Co AS", - [3]byte{0, 36, 101}: "Elentec", - [3]byte{0, 36, 102}: "Unitron nv", - [3]byte{0, 36, 103}: "AOC International (Europe) GmbH", - [3]byte{0, 36, 104}: "Sumavision Technologies Co.,Ltd", - [3]byte{0, 36, 105}: "Smart Doorphones", - [3]byte{0, 36, 106}: "Solid Year Co., Ltd.", - [3]byte{0, 36, 107}: "Covia, Inc.", - [3]byte{0, 36, 108}: "Aruba Networks", - [3]byte{0, 36, 109}: "Weinzierl Engineering GmbH", - [3]byte{0, 36, 110}: "Phihong USA Corp.", - [3]byte{0, 36, 111}: "Onda Communication spa", - [3]byte{0, 36, 112}: "AUROTECH ultrasound AS.", - [3]byte{0, 36, 113}: "Fusion MultiSystems dba Fusion-io", - [3]byte{0, 36, 114}: "ReDriven Power Inc.", - [3]byte{0, 36, 115}: "3COM EUROPE LTD", - [3]byte{0, 36, 116}: "Autronica Fire And Securirty", - [3]byte{0, 36, 117}: "Compass System(Embedded Dept.)", - [3]byte{0, 36, 118}: "TAP.tv", - [3]byte{0, 36, 119}: "Tibbo Technology", - [3]byte{0, 36, 120}: "Mag Tech Electronics Co Limited", - [3]byte{0, 36, 121}: "Optec Displays, Inc.", - [3]byte{0, 36, 122}: "FU YI CHENG Technology Co., Ltd.", - [3]byte{0, 36, 123}: "Actiontec Electronics, Inc", - [3]byte{0, 36, 124}: "Nokia Danmark A/S", - [3]byte{0, 36, 125}: "Nokia Danmark A/S", - [3]byte{0, 36, 126}: "Universal Global Scientific Industrial Co., Ltd.", - [3]byte{0, 36, 127}: "Nortel Networks", - [3]byte{0, 36, 128}: "Meteocontrol GmbH", - [3]byte{0, 36, 129}: "Hewlett Packard", - [3]byte{0, 36, 130}: "Ruckus Wireless", - [3]byte{0, 36, 131}: "LG Electronics (Mobile Communications)", - [3]byte{0, 36, 132}: "Bang and Olufsen Medicom a/s", - [3]byte{0, 36, 133}: "ConteXtream Ltd", - [3]byte{0, 36, 134}: "DesignArt Networks", - [3]byte{0, 36, 135}: "Blackboard Inc.", - [3]byte{0, 36, 136}: "Centre For Development Of Telematics", - [3]byte{0, 36, 137}: "Vodafone Omnitel N.V.", - [3]byte{0, 36, 138}: "Kaga Electronics Co., Ltd.", - [3]byte{0, 36, 139}: "HYBUS CO., LTD.", - [3]byte{0, 36, 140}: "ASUSTek COMPUTER INC.", - [3]byte{0, 36, 141}: "Sony Interactive Entertainment Inc.", - [3]byte{0, 36, 142}: "Infoware ZRt.", - [3]byte{0, 36, 143}: "DO-MONIX", - [3]byte{0, 36, 144}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 36, 145}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 36, 146}: "Motorola, Broadband Solutions Group", - [3]byte{0, 36, 147}: "ARRIS Group, Inc.", - [3]byte{0, 36, 148}: "Shenzhen Baoxin Tech CO., Ltd.", - [3]byte{0, 36, 149}: "ARRIS Group, Inc.", - [3]byte{0, 36, 150}: "Ginzinger electronic systems", - [3]byte{0, 36, 151}: "Cisco Systems, Inc", - [3]byte{0, 36, 152}: "Cisco Systems, Inc", - [3]byte{0, 36, 153}: "Aquila Technologies", - [3]byte{0, 36, 154}: "Beijing Zhongchuang Telecommunication Test Co., Ltd.", - [3]byte{0, 36, 155}: "Action Star Enterprise Co., Ltd.", - [3]byte{0, 36, 156}: "Bimeng Comunication System Co. Ltd", - [3]byte{0, 36, 157}: "NES Technology Inc.", - [3]byte{0, 36, 158}: "ADC-Elektronik GmbH", - [3]byte{0, 36, 159}: "RIM Testing Services", - [3]byte{0, 36, 160}: "ARRIS Group, Inc.", - [3]byte{0, 36, 161}: "ARRIS Group, Inc.", - [3]byte{0, 36, 162}: "Hong Kong Middleware Technology Limited", - [3]byte{0, 36, 163}: "Sonim Technologies Inc", - [3]byte{0, 36, 164}: "Siklu Communication", - [3]byte{0, 36, 165}: "BUFFALO.INC", - [3]byte{0, 36, 166}: "TELESTAR DIGITAL GmbH", - [3]byte{0, 36, 167}: "Advanced Video Communications Inc.", - [3]byte{0, 36, 168}: "ProCurve Networking by HP", - [3]byte{0, 36, 169}: "Ag Leader Technology", - [3]byte{0, 36, 170}: "Dycor Technologies Ltd.", - [3]byte{0, 36, 171}: "A7 Engineering, Inc.", - [3]byte{0, 36, 172}: "Hangzhou DPtech Technologies Co., Ltd.", - [3]byte{0, 36, 173}: "Adolf Thies Gmbh & Co. KG", - [3]byte{0, 36, 174}: "Morpho", - [3]byte{0, 36, 175}: "Echostar Technologies Corp", - [3]byte{0, 36, 176}: "ESAB AB", - [3]byte{0, 36, 177}: "Coulomb Technologies", - [3]byte{0, 36, 178}: "NETGEAR", - [3]byte{0, 36, 179}: "Graf-Syteco GmbH & Co. KG", - [3]byte{0, 36, 180}: "ESCATRONIC GmbH", - [3]byte{0, 36, 181}: "Nortel Networks", - [3]byte{0, 36, 182}: "Seagate Technology", - [3]byte{0, 36, 183}: "GridPoint, Inc.", - [3]byte{0, 36, 184}: "free alliance sdn bhd", - [3]byte{0, 36, 185}: "Wuhan Higheasy Electronic Technology Development Co.Ltd", - [3]byte{0, 36, 186}: "Texas Instruments", - [3]byte{0, 36, 187}: "CENTRAL Corporation", - [3]byte{0, 36, 188}: "HuRob Co.,Ltd", - [3]byte{0, 36, 189}: "Hainzl Industriesysteme GmbH", - [3]byte{0, 36, 190}: "Sony Corporation", - [3]byte{0, 36, 191}: "CIAT", - [3]byte{0, 36, 192}: "NTI COMODO INC", - [3]byte{0, 36, 193}: "ARRIS Group, Inc.", - [3]byte{0, 36, 194}: "Asumo Co.,Ltd.", - [3]byte{0, 36, 195}: "Cisco Systems, Inc", - [3]byte{0, 36, 196}: "Cisco Systems, Inc", - [3]byte{0, 36, 197}: "Meridian Audio Limited", - [3]byte{0, 36, 198}: "Hager Electro SAS", - [3]byte{0, 36, 199}: "Mobilarm Ltd", - [3]byte{0, 36, 200}: "Broadband Solutions Group", - [3]byte{0, 36, 201}: "Broadband Solutions Group", - [3]byte{0, 36, 202}: "Tobii Technology AB", - [3]byte{0, 36, 203}: "Autonet Mobile", - [3]byte{0, 36, 204}: "Fascinations Toys and Gifts, Inc.", - [3]byte{0, 36, 205}: "Willow Garage, Inc.", - [3]byte{0, 36, 206}: "Exeltech Inc", - [3]byte{0, 36, 207}: "Inscape Data Corporation", - [3]byte{0, 36, 208}: "Shenzhen SOGOOD Industry CO.,LTD.", - [3]byte{0, 36, 209}: "Thomson Inc.", - [3]byte{0, 36, 210}: "ASKEY COMPUTER CORP", - [3]byte{0, 36, 211}: "QUALICA Inc.", - [3]byte{0, 36, 212}: "FREEBOX SAS", - [3]byte{0, 36, 213}: "Winward Industrial Limited", - [3]byte{0, 36, 214}: "Intel Corporate", - [3]byte{0, 36, 215}: "Intel Corporate", - [3]byte{0, 36, 216}: "IlSung Precision", - [3]byte{0, 36, 217}: "BICOM, Inc.", - [3]byte{0, 36, 218}: "Innovar Systems Limited", - [3]byte{0, 36, 219}: "Alcohol Monitoring Systems", - [3]byte{0, 36, 220}: "Juniper Networks", - [3]byte{0, 36, 221}: "Centrak, Inc.", - [3]byte{0, 36, 222}: "GLOBAL Technology Inc.", - [3]byte{0, 36, 223}: "Digitalbox Europe GmbH", - [3]byte{0, 36, 224}: "DS Tech, LLC", - [3]byte{0, 36, 225}: "Convey Computer Corp.", - [3]byte{0, 36, 226}: "HASEGAWA ELECTRIC CO.,LTD.", - [3]byte{0, 36, 227}: "CAO Group", - [3]byte{0, 36, 228}: "Withings", - [3]byte{0, 36, 229}: "Seer Technology, Inc", - [3]byte{0, 36, 230}: "In Motion Technology Inc.", - [3]byte{0, 36, 231}: "Plaster Networks", - [3]byte{0, 36, 232}: "Dell Inc.", - [3]byte{0, 36, 233}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 36, 234}: "iris-GmbH infrared & intelligent sensors", - [3]byte{0, 36, 235}: "ClearPath Networks, Inc.", - [3]byte{0, 36, 236}: "United Information Technology Co.,Ltd.", - [3]byte{0, 36, 237}: "YT Elec. Co,.Ltd.", - [3]byte{0, 36, 238}: "Wynmax Inc.", - [3]byte{0, 36, 239}: "Sony Mobile Communications AB", - [3]byte{0, 36, 240}: "Seanodes", - [3]byte{0, 36, 241}: "Shenzhen Fanhai Sanjiang Electronics Co., Ltd.", - [3]byte{0, 36, 242}: "Uniphone Telecommunication Co., Ltd.", - [3]byte{0, 36, 243}: "Nintendo Co., Ltd.", - [3]byte{0, 36, 244}: "Kaminario, Ltd.", - [3]byte{0, 36, 245}: "NDS Surgical Imaging", - [3]byte{0, 36, 246}: "MIYOSHI ELECTRONICS CORPORATION", - [3]byte{0, 36, 247}: "Cisco Systems, Inc", - [3]byte{0, 36, 248}: "Technical Solutions Company Ltd.", - [3]byte{0, 36, 249}: "Cisco Systems, Inc", - [3]byte{0, 36, 250}: "Hilger u. Kern GMBH", - [3]byte{0, 36, 251}: "Private", - [3]byte{0, 36, 252}: "QuoPin Co., Ltd.", - [3]byte{0, 36, 253}: "Accedian Networks Inc", - [3]byte{0, 36, 254}: "AVM GmbH", - [3]byte{0, 36, 255}: "QLogic Corporation", - [3]byte{0, 37, 0}: "Apple, Inc.", - [3]byte{0, 37, 1}: "JSC Supertel", - [3]byte{0, 37, 2}: "NaturalPoint", - [3]byte{0, 37, 3}: "IBM Corp", - [3]byte{0, 37, 4}: "Valiant Communications Limited", - [3]byte{0, 37, 5}: "eks Engel GmbH & Co. KG", - [3]byte{0, 37, 6}: "A.I. ANTITACCHEGGIO ITALIA SRL", - [3]byte{0, 37, 7}: "ASTAK Inc.", - [3]byte{0, 37, 8}: "Maquet Cardiopulmonary AG", - [3]byte{0, 37, 9}: "SHARETRONIC Group LTD", - [3]byte{0, 37, 10}: "Security Expert Co. Ltd", - [3]byte{0, 37, 11}: "CENTROFACTOR INC", - [3]byte{0, 37, 12}: "Enertrac", - [3]byte{0, 37, 13}: "GZT Telkom-Telmor sp. z o.o.", - [3]byte{0, 37, 14}: "gt german telematics gmbh", - [3]byte{0, 37, 15}: "On-Ramp Wireless, Inc.", - [3]byte{0, 37, 16}: "Pico-Tesla Magnetic Therapies", - [3]byte{0, 37, 17}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{0, 37, 18}: "zte corporation", - [3]byte{0, 37, 19}: "CXP DIGITAL BV", - [3]byte{0, 37, 20}: "PC Worth Int'l Co., Ltd.", - [3]byte{0, 37, 21}: "SFR", - [3]byte{0, 37, 22}: "Integrated Design Tools, Inc.", - [3]byte{0, 37, 23}: "Venntis, LLC", - [3]byte{0, 37, 24}: "Power PLUS Communications AG", - [3]byte{0, 37, 25}: "Viaas Inc", - [3]byte{0, 37, 26}: "Psiber Data Systems Inc.", - [3]byte{0, 37, 27}: "Philips CareServant", - [3]byte{0, 37, 28}: "EDT", - [3]byte{0, 37, 29}: "DSA Encore, LLC", - [3]byte{0, 37, 30}: "ROTEL TECHNOLOGIES", - [3]byte{0, 37, 31}: "ZYNUS VISION INC.", - [3]byte{0, 37, 32}: "SMA Railway Technology GmbH", - [3]byte{0, 37, 33}: "Logitek Electronic Systems, Inc.", - [3]byte{0, 37, 34}: "ASRock Incorporation", - [3]byte{0, 37, 35}: "OCP Inc.", - [3]byte{0, 37, 36}: "Lightcomm Technology Co., Ltd", - [3]byte{0, 37, 37}: "CTERA Networks Ltd.", - [3]byte{0, 37, 38}: "Genuine Technologies Co., Ltd.", - [3]byte{0, 37, 39}: "Bitrode Corp.", - [3]byte{0, 37, 40}: "Daido Signal Co., Ltd.", - [3]byte{0, 37, 41}: "COMELIT GROUP S.P.A", - [3]byte{0, 37, 42}: "Chengdu GeeYa Technology Co.,LTD", - [3]byte{0, 37, 43}: "Stirling Energy Systems", - [3]byte{0, 37, 44}: "Entourage Systems, Inc.", - [3]byte{0, 37, 45}: "Kiryung Electronics", - [3]byte{0, 37, 46}: "Cisco SPVTG", - [3]byte{0, 37, 47}: "Energy, Inc.", - [3]byte{0, 37, 48}: "Aetas Systems Inc.", - [3]byte{0, 37, 49}: "Cloud Engines, Inc.", - [3]byte{0, 37, 50}: "Digital Recorders", - [3]byte{0, 37, 51}: "WITTENSTEIN AG", - [3]byte{0, 37, 53}: "Minimax GmbH & Co KG", - [3]byte{0, 37, 54}: "Oki Electric Industry Co., Ltd.", - [3]byte{0, 37, 55}: "Runcom Technologies Ltd.", - [3]byte{0, 37, 56}: "Samsung Electronics Co., Ltd., Memory Division", - [3]byte{0, 37, 57}: "IfTA GmbH", - [3]byte{0, 37, 58}: "CEVA, Ltd.", - [3]byte{0, 37, 59}: "din Dietmar Nocker Facilitymanagement GmbH", - [3]byte{0, 37, 60}: "2Wire Inc", - [3]byte{0, 37, 61}: "DRS Consolidated Controls", - [3]byte{0, 37, 62}: "Sensus Metering Systems", - [3]byte{0, 37, 64}: "Quasar Technologies, Inc.", - [3]byte{0, 37, 65}: "Maquet Critical Care AB", - [3]byte{0, 37, 66}: "Pittasoft", - [3]byte{0, 37, 67}: "MONEYTECH", - [3]byte{0, 37, 68}: "LoJack Corporation", - [3]byte{0, 37, 69}: "Cisco Systems, Inc", - [3]byte{0, 37, 70}: "Cisco Systems, Inc", - [3]byte{0, 37, 71}: "Nokia Danmark A/S", - [3]byte{0, 37, 72}: "Nokia Danmark A/S", - [3]byte{0, 37, 73}: "Jeorich Tech. Co.,Ltd.", - [3]byte{0, 37, 74}: "RingCube Technologies, Inc.", - [3]byte{0, 37, 75}: "Apple, Inc.", - [3]byte{0, 37, 76}: "Videon Central, Inc.", - [3]byte{0, 37, 77}: "Singapore Technologies Electronics Limited", - [3]byte{0, 37, 78}: "Vertex Wireless Co., Ltd.", - [3]byte{0, 37, 79}: "ELETTROLAB Srl", - [3]byte{0, 37, 80}: "Riverbed Technology, Inc.", - [3]byte{0, 37, 81}: "SE-Elektronic GmbH", - [3]byte{0, 37, 82}: "VXi Corporation", - [3]byte{0, 37, 83}: "ADB Broadband Italia", - [3]byte{0, 37, 84}: "Pixel8 Networks", - [3]byte{0, 37, 85}: "Visonic Technologies 1993 Ltd.", - [3]byte{0, 37, 86}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 37, 87}: "BlackBerry RTS", - [3]byte{0, 37, 88}: "MPEDIA", - [3]byte{0, 37, 89}: "Syphan Technologies Ltd", - [3]byte{0, 37, 90}: "Tantalus Systems Corp.", - [3]byte{0, 37, 91}: "CoachComm, LLC", - [3]byte{0, 37, 92}: "NEC Corporation", - [3]byte{0, 37, 93}: "Morningstar Corporation", - [3]byte{0, 37, 94}: "Shanghai Dare Technologies Co.,Ltd.", - [3]byte{0, 37, 95}: "SenTec AG", - [3]byte{0, 37, 96}: "Ibridge Networks & Communications Ltd.", - [3]byte{0, 37, 97}: "ProCurve Networking by HP", - [3]byte{0, 37, 98}: "interbro Co. Ltd.", - [3]byte{0, 37, 99}: "Luxtera Inc", - [3]byte{0, 37, 100}: "Dell Inc.", - [3]byte{0, 37, 101}: "Vizimax Inc.", - [3]byte{0, 37, 102}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 37, 103}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 37, 104}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{0, 37, 105}: "Sagemcom Broadband SAS", - [3]byte{0, 37, 106}: "inIT - Institut Industrial IT", - [3]byte{0, 37, 107}: "ATENIX E.E. s.r.l.", - [3]byte{0, 37, 108}: "Azimut Production Association JSC", - [3]byte{0, 37, 109}: "Broadband Forum", - [3]byte{0, 37, 110}: "Van Breda B.V.", - [3]byte{0, 37, 111}: "Dantherm Power", - [3]byte{0, 37, 112}: "Eastern Communications Company Limited", - [3]byte{0, 37, 113}: "Zhejiang Tianle Digital Electric Co.,Ltd", - [3]byte{0, 37, 114}: "Nemo-Q International AB", - [3]byte{0, 37, 115}: "ST Electronics (Info-Security) Pte Ltd", - [3]byte{0, 37, 116}: "KUNIMI MEDIA DEVICE Co., Ltd.", - [3]byte{0, 37, 117}: "FiberPlex Technologies, LLC", - [3]byte{0, 37, 118}: "NELI TECHNOLOGIES", - [3]byte{0, 37, 119}: "D-BOX Technologies", - [3]byte{0, 37, 120}: "JSC Concern Sozvezdie", - [3]byte{0, 37, 121}: "J & F Labs", - [3]byte{0, 37, 122}: "CAMCO Produktions- und Vertriebs-GmbH für Beschallungs- und Beleuchtungsanlagen", - [3]byte{0, 37, 123}: "STJ ELECTRONICS PVT LTD", - [3]byte{0, 37, 124}: "Huachentel Technology Development Co., Ltd", - [3]byte{0, 37, 125}: "PointRed Telecom Private Ltd.", - [3]byte{0, 37, 126}: "NEW POS Technology Limited", - [3]byte{0, 37, 127}: "CallTechSolution Co.,Ltd", - [3]byte{0, 37, 128}: "Equipson S.A.", - [3]byte{0, 37, 129}: "x-star networks Inc.", - [3]byte{0, 37, 130}: "Maksat Technologies (P) Ltd", - [3]byte{0, 37, 131}: "Cisco Systems, Inc", - [3]byte{0, 37, 132}: "Cisco Systems, Inc", - [3]byte{0, 37, 133}: "KOKUYO S&T Co., Ltd.", - [3]byte{0, 37, 134}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{0, 37, 135}: "Vitality, Inc.", - [3]byte{0, 37, 136}: "Genie Industries, Inc.", - [3]byte{0, 37, 137}: "Hills Industries Limited", - [3]byte{0, 37, 138}: "Pole/Zero Corporation", - [3]byte{0, 37, 139}: "Mellanox Technologies, Inc.", - [3]byte{0, 37, 140}: "ESUS ELEKTRONIK SAN. VE DIS. TIC. LTD. STI.", - [3]byte{0, 37, 141}: "Haier", - [3]byte{0, 37, 142}: "The Weather Channel", - [3]byte{0, 37, 143}: "Trident Microsystems, Inc.", - [3]byte{0, 37, 144}: "Super Micro Computer, Inc.", - [3]byte{0, 37, 145}: "NEXTEK, Inc.", - [3]byte{0, 37, 146}: "Guangzhou Shirui Electronic Co., Ltd", - [3]byte{0, 37, 147}: "DatNet Informatikai Kft.", - [3]byte{0, 37, 148}: "Eurodesign BG LTD", - [3]byte{0, 37, 149}: "Northwest Signal Supply, Inc", - [3]byte{0, 37, 150}: "GIGAVISION srl", - [3]byte{0, 37, 151}: "Kalki Communication Technologies", - [3]byte{0, 37, 152}: "Zhong Shan City Litai Electronic Industrial Co. Ltd", - [3]byte{0, 37, 153}: "Hedon e.d. B.V.", - [3]byte{0, 37, 154}: "CEStronics GmbH", - [3]byte{0, 37, 155}: "Beijing PKUNITY Microsystems Technology Co., Ltd", - [3]byte{0, 37, 156}: "Cisco-Linksys, LLC", - [3]byte{0, 37, 157}: "Private", - [3]byte{0, 37, 158}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{0, 37, 159}: "TechnoDigital Technologies GmbH", - [3]byte{0, 37, 160}: "Nintendo Co., Ltd.", - [3]byte{0, 37, 161}: "Enalasys", - [3]byte{0, 37, 162}: "Alta Definicion LINCEO S.L.", - [3]byte{0, 37, 163}: "Trimax Wireless, Inc.", - [3]byte{0, 37, 164}: "EuroDesign embedded technologies GmbH", - [3]byte{0, 37, 165}: "Walnut Media Network", - [3]byte{0, 37, 166}: "Central Network Solution Co., Ltd.", - [3]byte{0, 37, 167}: "Comverge, Inc.", - [3]byte{0, 37, 168}: "Kontron (BeiJing) Technology Co.,Ltd", - [3]byte{0, 37, 169}: "Shanghai Embedway Information Technologies Co.,Ltd", - [3]byte{0, 37, 170}: "Beijing Soul Technology Co.,Ltd.", - [3]byte{0, 37, 171}: "AIO LCD PC BU / TPV", - [3]byte{0, 37, 172}: "I-Tech corporation", - [3]byte{0, 37, 173}: "Manufacturing Resources International", - [3]byte{0, 37, 174}: "Microsoft Corporation", - [3]byte{0, 37, 175}: "COMFILE Technology", - [3]byte{0, 37, 176}: "Schmartz Inc", - [3]byte{0, 37, 177}: "Maya-Creation Corporation", - [3]byte{0, 37, 178}: "MBDA Deutschland GmbH", - [3]byte{0, 37, 179}: "Hewlett Packard", - [3]byte{0, 37, 180}: "Cisco Systems, Inc", - [3]byte{0, 37, 181}: "Cisco Systems, Inc", - [3]byte{0, 37, 182}: "Telecom FM", - [3]byte{0, 37, 183}: "Costar electronics, inc.,", - [3]byte{0, 37, 184}: "Agile Communications, Inc.", - [3]byte{0, 37, 185}: "Cypress Solutions Inc", - [3]byte{0, 37, 186}: "Alcatel-Lucent IPD", - [3]byte{0, 37, 187}: "INNERINT Co., Ltd.", - [3]byte{0, 37, 188}: "Apple, Inc.", - [3]byte{0, 37, 189}: "Italdata Ingegneria dell'Idea S.p.A.", - [3]byte{0, 37, 190}: "Tektrap Systems Inc.", - [3]byte{0, 37, 191}: "Wireless Cables Inc.", - [3]byte{0, 37, 192}: "ZillionTV Corporation", - [3]byte{0, 37, 193}: "Nawoo Korea Corp.", - [3]byte{0, 37, 194}: "RingBell Co.,Ltd.", - [3]byte{0, 37, 195}: "21168", - [3]byte{0, 37, 196}: "Ruckus Wireless", - [3]byte{0, 37, 197}: "Star Link Communication Pvt. Ltd.", - [3]byte{0, 37, 198}: "kasercorp, ltd", - [3]byte{0, 37, 199}: "altek Corporation", - [3]byte{0, 37, 200}: "S-Access GmbH", - [3]byte{0, 37, 201}: "SHENZHEN HUAPU DIGITAL CO., LTD", - [3]byte{0, 37, 202}: "LS Research, LLC", - [3]byte{0, 37, 203}: "Reiner SCT", - [3]byte{0, 37, 204}: "Mobile Communications Korea Incorporated", - [3]byte{0, 37, 205}: "Skylane Optics", - [3]byte{0, 37, 206}: "InnerSpace", - [3]byte{0, 37, 207}: "Nokia Danmark A/S", - [3]byte{0, 37, 208}: "Nokia Danmark A/S", - [3]byte{0, 37, 209}: "Eastern Asia Technology Limited", - [3]byte{0, 37, 210}: "InpegVision Co., Ltd", - [3]byte{0, 37, 211}: "AzureWave Technology Inc.", - [3]byte{0, 37, 212}: "General Dynamics Mission Systems", - [3]byte{0, 37, 213}: "Robonica (Pty) Ltd", - [3]byte{0, 37, 214}: "The Kroger Co.", - [3]byte{0, 37, 215}: "CEDO", - [3]byte{0, 37, 216}: "KOREA MAINTENANCE", - [3]byte{0, 37, 217}: "DataFab Systems Inc.", - [3]byte{0, 37, 218}: "Secura Key", - [3]byte{0, 37, 219}: "ATI Electronics(Shenzhen) Co., LTD", - [3]byte{0, 37, 220}: "Sumitomo Electric Industries,Ltd", - [3]byte{0, 37, 221}: "SUNNYTEK INFORMATION CO., LTD.", - [3]byte{0, 37, 222}: "Probits Co., LTD.", - [3]byte{0, 37, 223}: "Private", - [3]byte{0, 37, 224}: "CeedTec Sdn Bhd", - [3]byte{0, 37, 225}: "SHANGHAI SEEYOO ELECTRONIC & TECHNOLOGY CO., LTD", - [3]byte{0, 37, 226}: "Everspring Industry Co., Ltd.", - [3]byte{0, 37, 227}: "Hanshinit Inc.", - [3]byte{0, 37, 228}: "OMNI-WiFi, LLC", - [3]byte{0, 37, 229}: "LG Electronics (Mobile Communications)", - [3]byte{0, 37, 230}: "Belgian Monitoring Systems bvba", - [3]byte{0, 37, 231}: "Sony Mobile Communications AB", - [3]byte{0, 37, 232}: "Idaho Technology", - [3]byte{0, 37, 233}: "i-mate Development, Inc.", - [3]byte{0, 37, 234}: "Iphion BV", - [3]byte{0, 37, 235}: "Reutech Radar Systems (PTY) Ltd", - [3]byte{0, 37, 236}: "Humanware", - [3]byte{0, 37, 237}: "NuVo Technologies LLC", - [3]byte{0, 37, 238}: "Avtex Ltd", - [3]byte{0, 37, 239}: "I-TEC Co., Ltd.", - [3]byte{0, 37, 240}: "Suga Electronics Limited", - [3]byte{0, 37, 241}: "ARRIS Group, Inc.", - [3]byte{0, 37, 242}: "ARRIS Group, Inc.", - [3]byte{0, 37, 243}: "Nordwestdeutsche Zählerrevision", - [3]byte{0, 37, 244}: "KoCo Connector AG", - [3]byte{0, 37, 245}: "DVS Korea, Co., Ltd", - [3]byte{0, 37, 246}: "netTALK.com, Inc.", - [3]byte{0, 37, 247}: "Ansaldo STS USA", - [3]byte{0, 37, 249}: "GMK electronic design GmbH", - [3]byte{0, 37, 250}: "J&M Analytik AG", - [3]byte{0, 37, 251}: "Tunstall Healthcare A/S", - [3]byte{0, 37, 252}: "ENDA ENDUSTRIYEL ELEKTRONIK LTD. STI.", - [3]byte{0, 37, 253}: "OBR Centrum Techniki Morskiej S.A.", - [3]byte{0, 37, 254}: "Pilot Electronics Corporation", - [3]byte{0, 37, 255}: "CreNova Multimedia Co., Ltd", - [3]byte{0, 38, 0}: "TEAC Australia Pty Ltd.", - [3]byte{0, 38, 1}: "Cutera Inc", - [3]byte{0, 38, 2}: "SMART Temps LLC", - [3]byte{0, 38, 3}: "Shenzhen Wistar Technology Co., Ltd", - [3]byte{0, 38, 4}: "Audio Processing Technology Ltd", - [3]byte{0, 38, 5}: "CC Systems AB", - [3]byte{0, 38, 6}: "RAUMFELD GmbH", - [3]byte{0, 38, 7}: "Enabling Technology Pty Ltd", - [3]byte{0, 38, 8}: "Apple, Inc.", - [3]byte{0, 38, 9}: "Phyllis Co., Ltd.", - [3]byte{0, 38, 10}: "Cisco Systems, Inc", - [3]byte{0, 38, 11}: "Cisco Systems, Inc", - [3]byte{0, 38, 12}: "Dataram", - [3]byte{0, 38, 13}: "Mercury Systems, Inc.", - [3]byte{0, 38, 14}: "Ablaze Systems, LLC", - [3]byte{0, 38, 15}: "Linn Products Ltd", - [3]byte{0, 38, 16}: "Apacewave Technologies", - [3]byte{0, 38, 17}: "Licera AB", - [3]byte{0, 38, 18}: "Space Exploration Technologies", - [3]byte{0, 38, 19}: "Engel Axil S.L.", - [3]byte{0, 38, 20}: "KTNF", - [3]byte{0, 38, 21}: "Teracom Limited", - [3]byte{0, 38, 22}: "Rosemount Inc.", - [3]byte{0, 38, 23}: "OEM Worldwide", - [3]byte{0, 38, 24}: "ASUSTek COMPUTER INC.", - [3]byte{0, 38, 25}: "FRC", - [3]byte{0, 38, 26}: "Femtocomm System Technology Corp.", - [3]byte{0, 38, 27}: "LAUREL BANK MACHINES CO., LTD.", - [3]byte{0, 38, 28}: "NEOVIA INC.", - [3]byte{0, 38, 29}: "COP SECURITY SYSTEM CORP.", - [3]byte{0, 38, 30}: "QINGBANG ELEC(SZ) CO., LTD", - [3]byte{0, 38, 31}: "SAE Magnetics (H.K.) Ltd.", - [3]byte{0, 38, 32}: "ISGUS GmbH", - [3]byte{0, 38, 33}: "InteliCloud Technology Inc.", - [3]byte{0, 38, 34}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{0, 38, 35}: "JRD Communication Inc", - [3]byte{0, 38, 36}: "Thomson Inc.", - [3]byte{0, 38, 37}: "MediaSputnik", - [3]byte{0, 38, 38}: "Geophysical Survey Systems, Inc.", - [3]byte{0, 38, 39}: "Truesell", - [3]byte{0, 38, 40}: "companytec automação e controle ltda.", - [3]byte{0, 38, 41}: "Juphoon System Software Inc.", - [3]byte{0, 38, 42}: "Proxense, LLC", - [3]byte{0, 38, 43}: "Wongs Electronics Co. Ltd.", - [3]byte{0, 38, 44}: "IKT Advanced Technologies s.r.o.", - [3]byte{0, 38, 45}: "Wistron Corporation", - [3]byte{0, 38, 46}: "Chengdu Jiuzhou Electronic Technology Inc", - [3]byte{0, 38, 47}: "HAMAMATSU TOA ELECTRONICS", - [3]byte{0, 38, 48}: "ACOREL S.A.S", - [3]byte{0, 38, 49}: "COMMTACT LTD", - [3]byte{0, 38, 50}: "Instrumentation Technologies d.d.", - [3]byte{0, 38, 51}: "MIR - Medical International Research", - [3]byte{0, 38, 52}: "Infineta Systems, Inc", - [3]byte{0, 38, 53}: "Bluetechnix GmbH", - [3]byte{0, 38, 54}: "ARRIS Group, Inc.", - [3]byte{0, 38, 55}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{0, 38, 56}: "Xia Men Joyatech Co., Ltd.", - [3]byte{0, 38, 57}: "T.M. Electronics, Inc.", - [3]byte{0, 38, 58}: "Digitec Systems", - [3]byte{0, 38, 59}: "Onbnetech", - [3]byte{0, 38, 60}: "Bachmann Technology GmbH & Co. KG", - [3]byte{0, 38, 61}: "MIA Corporation", - [3]byte{0, 38, 62}: "Trapeze Networks", - [3]byte{0, 38, 63}: "LIOS Technology GmbH", - [3]byte{0, 38, 64}: "Baustem Broadband Technologies, Ltd.", - [3]byte{0, 38, 65}: "ARRIS Group, Inc.", - [3]byte{0, 38, 66}: "ARRIS Group, Inc.", - [3]byte{0, 38, 67}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{0, 38, 68}: "Thomson Telecom Belgium", - [3]byte{0, 38, 69}: "Circontrol S.A.", - [3]byte{0, 38, 70}: "SHENYANG TONGFANG MULTIMEDIA TECHNOLOGY COMPANY LIMITED", - [3]byte{0, 38, 71}: "WFE TECHNOLOGY CORP.", - [3]byte{0, 38, 72}: "Emitech Corp.", - [3]byte{0, 38, 74}: "Apple, Inc.", - [3]byte{0, 38, 76}: "Shanghai DigiVision Technology Co., Ltd.", - [3]byte{0, 38, 77}: "Arcadyan Technology Corporation", - [3]byte{0, 38, 78}: "Rail & Road Protec GmbH", - [3]byte{0, 38, 79}: "Krüger &Gothe GmbH", - [3]byte{0, 38, 80}: "2Wire Inc", - [3]byte{0, 38, 81}: "Cisco Systems, Inc", - [3]byte{0, 38, 82}: "Cisco Systems, Inc", - [3]byte{0, 38, 83}: "DaySequerra Corporation", - [3]byte{0, 38, 84}: "3Com Corporation", - [3]byte{0, 38, 85}: "Hewlett Packard", - [3]byte{0, 38, 86}: "Sansonic Electronics USA", - [3]byte{0, 38, 87}: "OOO NPP EKRA", - [3]byte{0, 38, 88}: "T-Platforms (Cyprus) Limited", - [3]byte{0, 38, 89}: "Nintendo Co., Ltd.", - [3]byte{0, 38, 90}: "D-Link Corporation", - [3]byte{0, 38, 91}: "Hitron Technologies. Inc", - [3]byte{0, 38, 92}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 38, 93}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 38, 94}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 38, 95}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 38, 96}: "Logiways", - [3]byte{0, 38, 97}: "Irumtek Co., Ltd.", - [3]byte{0, 38, 98}: "Actiontec Electronics, Inc", - [3]byte{0, 38, 99}: "Shenzhen Huitaiwei Tech. Ltd, co.", - [3]byte{0, 38, 100}: "Core System Japan", - [3]byte{0, 38, 101}: "ProtectedLogic Corporation", - [3]byte{0, 38, 102}: "EFM Networks", - [3]byte{0, 38, 103}: "CARECOM CO.,LTD.", - [3]byte{0, 38, 104}: "Nokia Danmark A/S", - [3]byte{0, 38, 105}: "Nokia Danmark A/S", - [3]byte{0, 38, 106}: "ESSENSIUM NV", - [3]byte{0, 38, 107}: "SHINE UNION ENTERPRISE LIMITED", - [3]byte{0, 38, 108}: "INVENTEC Corporation", - [3]byte{0, 38, 109}: "MobileAccess Networks", - [3]byte{0, 38, 110}: "Nissho-denki Co.,LTD.", - [3]byte{0, 38, 111}: "Coordiwise Technology Corp.", - [3]byte{0, 38, 112}: "Cinch Connectors", - [3]byte{0, 38, 113}: "AUTOVISION Co., Ltd", - [3]byte{0, 38, 114}: "AAMP of America", - [3]byte{0, 38, 115}: "RICOH COMPANY,LTD.", - [3]byte{0, 38, 116}: "Electronic Solutions, Inc.", - [3]byte{0, 38, 117}: "Aztech Electronics Pte Ltd", - [3]byte{0, 38, 118}: "COMMidt AS", - [3]byte{0, 38, 119}: "DEIF A/S", - [3]byte{0, 38, 120}: "Logic Instrument SA", - [3]byte{0, 38, 121}: "Euphonic Technologies, Inc.", - [3]byte{0, 38, 122}: "wuhan hongxin telecommunication technologies co.,ltd", - [3]byte{0, 38, 123}: "GSI Helmholtzzentrum für Schwerionenforschung GmbH", - [3]byte{0, 38, 124}: "Metz-Werke GmbH & Co KG", - [3]byte{0, 38, 125}: "A-Max Technology Macao Commercial Offshore Company Limited", - [3]byte{0, 38, 126}: "PARROT SA", - [3]byte{0, 38, 127}: "Zenterio AB", - [3]byte{0, 38, 128}: "SIL3 Pty.Ltd", - [3]byte{0, 38, 129}: "Interspiro AB", - [3]byte{0, 38, 130}: "Gemtek Technology Co., Ltd.", - [3]byte{0, 38, 131}: "Ajoho Enterprise Co., Ltd.", - [3]byte{0, 38, 132}: "KISAN SYSTEM", - [3]byte{0, 38, 133}: "Digital Innovation", - [3]byte{0, 38, 134}: "Quantenna Communcations, Inc.", - [3]byte{0, 38, 135}: "corega K.K", - [3]byte{0, 38, 136}: "Juniper Networks", - [3]byte{0, 38, 137}: "General Dynamics Robotic Systems", - [3]byte{0, 38, 138}: "Terrier SC Ltd", - [3]byte{0, 38, 139}: "Guangzhou Escene Computer Technology Limited", - [3]byte{0, 38, 140}: "StarLeaf Ltd.", - [3]byte{0, 38, 141}: "CellTel S.p.A.", - [3]byte{0, 38, 142}: "Alta Solutions, Inc.", - [3]byte{0, 38, 143}: "MTA SpA", - [3]byte{0, 38, 144}: "I DO IT", - [3]byte{0, 38, 145}: "Sagemcom Broadband SAS", - [3]byte{0, 38, 146}: "Mitsubishi Electric Corporation", - [3]byte{0, 38, 147}: "QVidium Technologies, Inc.", - [3]byte{0, 38, 148}: "Senscient Ltd", - [3]byte{0, 38, 149}: "ZT Group Int'l Inc", - [3]byte{0, 38, 150}: "NOOLIX Co., Ltd", - [3]byte{0, 38, 151}: "Alpha Technologies Inc.", - [3]byte{0, 38, 152}: "Cisco Systems, Inc", - [3]byte{0, 38, 153}: "Cisco Systems, Inc", - [3]byte{0, 38, 154}: "Carina System Co., Ltd.", - [3]byte{0, 38, 155}: "SOKRAT Ltd.", - [3]byte{0, 38, 156}: "ITUS JAPAN CO. LTD", - [3]byte{0, 38, 157}: "M2Mnet Co., Ltd.", - [3]byte{0, 38, 158}: "QUANTA COMPUTER INC.", - [3]byte{0, 38, 159}: "Private", - [3]byte{0, 38, 160}: "moblic", - [3]byte{0, 38, 161}: "Megger", - [3]byte{0, 38, 162}: "Instrumentation Technology Systems", - [3]byte{0, 38, 163}: "FQ Ingenieria Electronica S.A.", - [3]byte{0, 38, 164}: "Novus Produtos Eletronicos Ltda", - [3]byte{0, 38, 165}: "MICROROBOT.CO.,LTD", - [3]byte{0, 38, 166}: "TRIXELL", - [3]byte{0, 38, 167}: "CONNECT SRL", - [3]byte{0, 38, 168}: "DAEHAP HYPER-TECH", - [3]byte{0, 38, 169}: "Strong Technologies Pty Ltd", - [3]byte{0, 38, 170}: "Kenmec Mechanical Engineering Co., Ltd.", - [3]byte{0, 38, 171}: "Seiko Epson Corporation", - [3]byte{0, 38, 172}: "Shanghai LUSTER Teraband photonic Co., Ltd.", - [3]byte{0, 38, 173}: "Arada Systems, Inc.", - [3]byte{0, 38, 174}: "Wireless Measurement Ltd", - [3]byte{0, 38, 175}: "Duelco A/S", - [3]byte{0, 38, 176}: "Apple, Inc.", - [3]byte{0, 38, 177}: "Navis Auto Motive Systems, Inc.", - [3]byte{0, 38, 178}: "Setrix GmbH", - [3]byte{0, 38, 179}: "Thales Communications Inc", - [3]byte{0, 38, 180}: "Ford Motor Company", - [3]byte{0, 38, 181}: "ICOMM Tele Ltd", - [3]byte{0, 38, 182}: "ASKEY COMPUTER CORP", - [3]byte{0, 38, 183}: "Kingston Technology Company, Inc.", - [3]byte{0, 38, 184}: "Actiontec Electronics, Inc", - [3]byte{0, 38, 185}: "Dell Inc.", - [3]byte{0, 38, 186}: "ARRIS Group, Inc.", - [3]byte{0, 38, 187}: "Apple, Inc.", - [3]byte{0, 38, 188}: "General Jack Technology Ltd.", - [3]byte{0, 38, 189}: "JTEC Card & Communication Co., Ltd.", - [3]byte{0, 38, 190}: "Schoonderbeek Elektronica Systemen B.V.", - [3]byte{0, 38, 191}: "ShenZhen Temobi Science&Tech Development Co.,Ltd", - [3]byte{0, 38, 192}: "EnergyHub", - [3]byte{0, 38, 193}: "ARTRAY CO., LTD.", - [3]byte{0, 38, 194}: "SCDI Co. LTD", - [3]byte{0, 38, 195}: "Insightek Corp.", - [3]byte{0, 38, 196}: "Cadmos microsystems S.r.l.", - [3]byte{0, 38, 197}: "Guangdong Gosun Telecommunications Co.,Ltd", - [3]byte{0, 38, 198}: "Intel Corporate", - [3]byte{0, 38, 199}: "Intel Corporate", - [3]byte{0, 38, 200}: "System Sensor", - [3]byte{0, 38, 201}: "Proventix Systems, Inc.", - [3]byte{0, 38, 202}: "Cisco Systems, Inc", - [3]byte{0, 38, 203}: "Cisco Systems, Inc", - [3]byte{0, 38, 204}: "Nokia Danmark A/S", - [3]byte{0, 38, 205}: "PurpleComm, Inc.", - [3]byte{0, 38, 206}: "Kozumi USA Corp.", - [3]byte{0, 38, 207}: "DEKA R&D", - [3]byte{0, 38, 208}: "Semihalf", - [3]byte{0, 38, 209}: "S Squared Innovations Inc.", - [3]byte{0, 38, 210}: "Pcube Systems, Inc.", - [3]byte{0, 38, 211}: "Zeno Information System", - [3]byte{0, 38, 212}: "IRCA SpA", - [3]byte{0, 38, 213}: "Ory Solucoes em Comercio de Informatica Ltda.", - [3]byte{0, 38, 214}: "Ningbo Andy Optoelectronic Co., Ltd.", - [3]byte{0, 38, 215}: "KM Electornic Technology Co., Ltd.", - [3]byte{0, 38, 216}: "Magic Point Inc.", - [3]byte{0, 38, 217}: "ARRIS Group, Inc.", - [3]byte{0, 38, 218}: "Universal Media Corporation /Slovakia/ s.r.o.", - [3]byte{0, 38, 219}: "Ionics EMS Inc.", - [3]byte{0, 38, 220}: "Optical Systems Design", - [3]byte{0, 38, 221}: "Fival Science & Technology Co.,Ltd.", - [3]byte{0, 38, 222}: "FDI MATELEC", - [3]byte{0, 38, 223}: "TaiDoc Technology Corp.", - [3]byte{0, 38, 224}: "ASITEQ", - [3]byte{0, 38, 225}: "Stanford University, OpenFlow Group", - [3]byte{0, 38, 226}: "LG Electronics (Mobile Communications)", - [3]byte{0, 38, 227}: "DTI", - [3]byte{0, 38, 228}: "Canal +", - [3]byte{0, 38, 229}: "AEG Power Solutions", - [3]byte{0, 38, 230}: "Visionhitech Co., Ltd.", - [3]byte{0, 38, 231}: "Shanghai ONLAN Communication Tech. Co., Ltd.", - [3]byte{0, 38, 232}: "Murata Manufacturing Co., Ltd.", - [3]byte{0, 38, 233}: "SP Corp", - [3]byte{0, 38, 234}: "Cheerchip Electronic Technology (ShangHai) Co., Ltd.", - [3]byte{0, 38, 235}: "Advanced Spectrum Technology Co., Ltd.", - [3]byte{0, 38, 236}: "Legrand Home Systems, Inc", - [3]byte{0, 38, 237}: "zte corporation", - [3]byte{0, 38, 238}: "TKM GmbH", - [3]byte{0, 38, 239}: "Technology Advancement Group, Inc.", - [3]byte{0, 38, 240}: "cTrixs International GmbH.", - [3]byte{0, 38, 241}: "ProCurve Networking by HP", - [3]byte{0, 38, 242}: "NETGEAR", - [3]byte{0, 38, 243}: "SMC Networks", - [3]byte{0, 38, 244}: "Nesslab", - [3]byte{0, 38, 245}: "XRPLUS Inc.", - [3]byte{0, 38, 246}: "Military Communication Institute", - [3]byte{0, 38, 247}: "Nivetti Systems Pvt. Ltd.", - [3]byte{0, 38, 248}: "Golden Highway Industry Development Co., Ltd.", - [3]byte{0, 38, 249}: "S.E.M. srl", - [3]byte{0, 38, 250}: "BandRich Inc.", - [3]byte{0, 38, 251}: "AirDio Wireless, Inc.", - [3]byte{0, 38, 252}: "AcSiP Technology Corp.", - [3]byte{0, 38, 253}: "Interactive Intelligence", - [3]byte{0, 38, 254}: "MKD Technology Inc.", - [3]byte{0, 38, 255}: "BlackBerry RTS", - [3]byte{0, 39, 0}: "Shenzhen Siglent Technology Co., Ltd.", - [3]byte{0, 39, 1}: "INCOstartec GmbH", - [3]byte{0, 39, 2}: "SolarEdge Technologies", - [3]byte{0, 39, 3}: "Testech Electronics Pte Ltd", - [3]byte{0, 39, 4}: "Accelerated Concepts, Inc", - [3]byte{0, 39, 5}: "Sectronic", - [3]byte{0, 39, 6}: "YOISYS", - [3]byte{0, 39, 7}: "Lift Complex DS, JSC", - [3]byte{0, 39, 8}: "Nordiag ASA", - [3]byte{0, 39, 9}: "Nintendo Co., Ltd.", - [3]byte{0, 39, 10}: "IEE S.A.", - [3]byte{0, 39, 11}: "Adura Technologies", - [3]byte{0, 39, 12}: "Cisco Systems, Inc", - [3]byte{0, 39, 13}: "Cisco Systems, Inc", - [3]byte{0, 39, 14}: "Intel Corporate", - [3]byte{0, 39, 15}: "Envisionnovation Inc", - [3]byte{0, 39, 16}: "Intel Corporate", - [3]byte{0, 39, 17}: "LanPro Inc", - [3]byte{0, 39, 18}: "MaxVision LLC", - [3]byte{0, 39, 19}: "Universal Global Scientific Industrial Co., Ltd.", - [3]byte{0, 39, 20}: "Grainmustards, Co,ltd.", - [3]byte{0, 39, 21}: "Rebound Telecom. Co., Ltd", - [3]byte{0, 39, 22}: "Adachi-Syokai Co., Ltd.", - [3]byte{0, 39, 23}: "CE Digital(Zhenjiang)Co.,Ltd", - [3]byte{0, 39, 24}: "Suzhou NEW SEAUNION Video Technology Co.,Ltd", - [3]byte{0, 39, 25}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{0, 39, 26}: "Geenovo Technology Ltd.", - [3]byte{0, 39, 27}: "Alec Sicherheitssysteme GmbH", - [3]byte{0, 39, 28}: "MERCURY CORPORATION", - [3]byte{0, 39, 29}: "Comba Telecom Systems (China) Ltd.", - [3]byte{0, 39, 30}: "Xagyl Communications", - [3]byte{0, 39, 31}: "MIPRO Electronics Co., Ltd", - [3]byte{0, 39, 32}: "NEW-SOL COM", - [3]byte{0, 39, 33}: "Shenzhen Baoan Fenda Industrial Co., Ltd", - [3]byte{0, 39, 34}: "Ubiquiti Networks Inc.", - [3]byte{0, 39, 144}: "Cisco Systems, Inc", - [3]byte{0, 39, 227}: "Cisco Systems, Inc", - [3]byte{0, 39, 248}: "Brocade Communications Systems, Inc.", - [3]byte{0, 40, 159}: "Semptian Co., Ltd.", - [3]byte{0, 40, 248}: "Intel Corporate", - [3]byte{0, 41, 38}: "Applied Optoelectronics, Inc Taiwan Branch", - [3]byte{0, 42, 16}: "Cisco Systems, Inc", - [3]byte{0, 42, 106}: "Cisco Systems, Inc", - [3]byte{0, 42, 175}: "LARsys-Automation GmbH", - [3]byte{0, 44, 200}: "Cisco Systems, Inc", - [3]byte{0, 45, 118}: "TITECH GmbH", - [3]byte{0, 46, 199}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{0, 48, 0}: "ALLWELL TECHNOLOGY CORP.", - [3]byte{0, 48, 1}: "SMP", - [3]byte{0, 48, 2}: "Expand Networks", - [3]byte{0, 48, 3}: "Phasys Ltd.", - [3]byte{0, 48, 4}: "LEADTEK RESEARCH INC.", - [3]byte{0, 48, 5}: "Fujitsu Siemens Computers", - [3]byte{0, 48, 6}: "SUPERPOWER COMPUTER", - [3]byte{0, 48, 7}: "OPTI, INC.", - [3]byte{0, 48, 8}: "AVIO DIGITAL, INC.", - [3]byte{0, 48, 9}: "Tachion Networks, Inc.", - [3]byte{0, 48, 10}: "Aztech Electronics Pte Ltd", - [3]byte{0, 48, 11}: "mPHASE Technologies, Inc.", - [3]byte{0, 48, 12}: "CONGRUENCY, LTD.", - [3]byte{0, 48, 13}: "MMC Technology, Inc.", - [3]byte{0, 48, 14}: "Klotz Digital AG", - [3]byte{0, 48, 15}: "IMT - Information Management T", - [3]byte{0, 48, 16}: "VISIONETICS INTERNATIONAL", - [3]byte{0, 48, 17}: "HMS Industrial Networks", - [3]byte{0, 48, 18}: "DIGITAL ENGINEERING LTD.", - [3]byte{0, 48, 19}: "NEC Corporation", - [3]byte{0, 48, 20}: "DIVIO, INC.", - [3]byte{0, 48, 21}: "CP CLARE CORP.", - [3]byte{0, 48, 22}: "ISHIDA CO., LTD.", - [3]byte{0, 48, 23}: "BlueArc UK Ltd", - [3]byte{0, 48, 24}: "Jetway Information Co., Ltd.", - [3]byte{0, 48, 25}: "Cisco Systems, Inc", - [3]byte{0, 48, 26}: "SMARTBRIDGES PTE. LTD.", - [3]byte{0, 48, 27}: "SHUTTLE, INC.", - [3]byte{0, 48, 28}: "ALTVATER AIRDATA SYSTEMS", - [3]byte{0, 48, 29}: "SKYSTREAM, INC.", - [3]byte{0, 48, 30}: "3COM EUROPE LTD.", - [3]byte{0, 48, 31}: "OPTICAL NETWORKS, INC.", - [3]byte{0, 48, 32}: "TSI, Inc..", - [3]byte{0, 48, 33}: "HSING TECH. ENTERPRISE CO.,LTD", - [3]byte{0, 48, 34}: "Fong Kai Industrial Co., Ltd.", - [3]byte{0, 48, 35}: "COGENT COMPUTER SYSTEMS, INC.", - [3]byte{0, 48, 36}: "Cisco Systems, Inc", - [3]byte{0, 48, 37}: "CHECKOUT COMPUTER SYSTEMS, LTD", - [3]byte{0, 48, 38}: "HeiTel Digital Video GmbH", - [3]byte{0, 48, 39}: "KERBANGO, INC.", - [3]byte{0, 48, 40}: "FASE Saldatura srl", - [3]byte{0, 48, 41}: "OPICOM", - [3]byte{0, 48, 42}: "SOUTHERN INFORMATION", - [3]byte{0, 48, 43}: "INALP NETWORKS, INC.", - [3]byte{0, 48, 44}: "SYLANTRO SYSTEMS CORPORATION", - [3]byte{0, 48, 45}: "QUANTUM BRIDGE COMMUNICATIONS", - [3]byte{0, 48, 46}: "Hoft & Wessel AG", - [3]byte{0, 48, 47}: "GE Aviation System", - [3]byte{0, 48, 48}: "HARMONIX CORPORATION", - [3]byte{0, 48, 49}: "LIGHTWAVE COMMUNICATIONS, INC.", - [3]byte{0, 48, 50}: "MagicRam, Inc.", - [3]byte{0, 48, 51}: "ORIENT TELECOM CO., LTD.", - [3]byte{0, 48, 52}: "SET ENGINEERING", - [3]byte{0, 48, 53}: "Corning Incorporated", - [3]byte{0, 48, 54}: "RMP ELEKTRONIKSYSTEME GMBH", - [3]byte{0, 48, 55}: "Packard Bell Nec Services", - [3]byte{0, 48, 56}: "XCP, INC.", - [3]byte{0, 48, 57}: "SOFTBOOK PRESS", - [3]byte{0, 48, 58}: "MAATEL", - [3]byte{0, 48, 59}: "PowerCom Technology", - [3]byte{0, 48, 60}: "ONNTO CORP.", - [3]byte{0, 48, 61}: "IVA CORPORATION", - [3]byte{0, 48, 62}: "Radcom Ltd.", - [3]byte{0, 48, 63}: "TurboComm Tech Inc.", - [3]byte{0, 48, 64}: "Cisco Systems, Inc", - [3]byte{0, 48, 65}: "SAEJIN T & M CO., LTD.", - [3]byte{0, 48, 66}: "DeTeWe-Deutsche Telephonwerke", - [3]byte{0, 48, 67}: "IDREAM TECHNOLOGIES, PTE. LTD.", - [3]byte{0, 48, 68}: "CradlePoint, Inc", - [3]byte{0, 48, 69}: "Village Networks, Inc. (VNI)", - [3]byte{0, 48, 70}: "Controlled Electronic Manageme", - [3]byte{0, 48, 71}: "NISSEI ELECTRIC CO., LTD.", - [3]byte{0, 48, 72}: "Super Micro Computer, Inc.", - [3]byte{0, 48, 73}: "BRYANT TECHNOLOGY, LTD.", - [3]byte{0, 48, 74}: "Fraunhofer IPMS", - [3]byte{0, 48, 75}: "ORBACOM SYSTEMS, INC.", - [3]byte{0, 48, 76}: "APPIAN COMMUNICATIONS, INC.", - [3]byte{0, 48, 77}: "ESI", - [3]byte{0, 48, 78}: "BUSTEC PRODUCTION LTD.", - [3]byte{0, 48, 79}: "PLANET Technology Corporation", - [3]byte{0, 48, 80}: "Versa Technology", - [3]byte{0, 48, 81}: "ORBIT AVIONIC & COMMUNICATION", - [3]byte{0, 48, 82}: "ELASTIC NETWORKS", - [3]byte{0, 48, 83}: "Basler AG", - [3]byte{0, 48, 84}: "CASTLENET TECHNOLOGY, INC.", - [3]byte{0, 48, 85}: "Renesas Technology America, Inc.", - [3]byte{0, 48, 86}: "Beck IPC GmbH", - [3]byte{0, 48, 87}: "QTelNet, Inc.", - [3]byte{0, 48, 88}: "API MOTION", - [3]byte{0, 48, 89}: "KONTRON COMPACT COMPUTERS AG", - [3]byte{0, 48, 90}: "TELGEN CORPORATION", - [3]byte{0, 48, 91}: "Toko Inc.", - [3]byte{0, 48, 92}: "SMAR Laboratories Corp.", - [3]byte{0, 48, 93}: "DIGITRA SYSTEMS, INC.", - [3]byte{0, 48, 94}: "Abelko Innovation", - [3]byte{0, 48, 95}: "Hasselblad", - [3]byte{0, 48, 96}: "Powerfile, Inc.", - [3]byte{0, 48, 97}: "MobyTEL", - [3]byte{0, 48, 98}: "IP Video Networks Inc", - [3]byte{0, 48, 99}: "SANTERA SYSTEMS, INC.", - [3]byte{0, 48, 100}: "ADLINK TECHNOLOGY, INC.", - [3]byte{0, 48, 101}: "Apple, Inc.", - [3]byte{0, 48, 102}: "RFM", - [3]byte{0, 48, 103}: "BIOSTAR Microtech Int'l Corp.", - [3]byte{0, 48, 104}: "CYBERNETICS TECH. CO., LTD.", - [3]byte{0, 48, 105}: "IMPACCT TECHNOLOGY CORP.", - [3]byte{0, 48, 106}: "PENTA MEDIA CO., LTD.", - [3]byte{0, 48, 107}: "CMOS SYSTEMS, INC.", - [3]byte{0, 48, 108}: "Hitex Holding GmbH", - [3]byte{0, 48, 109}: "LUCENT TECHNOLOGIES", - [3]byte{0, 48, 110}: "Hewlett Packard", - [3]byte{0, 48, 111}: "SEYEON TECH. CO., LTD.", - [3]byte{0, 48, 112}: "1Net Corporation", - [3]byte{0, 48, 113}: "Cisco Systems, Inc", - [3]byte{0, 48, 114}: "Intellibyte Inc.", - [3]byte{0, 48, 115}: "International Microsystems, In", - [3]byte{0, 48, 116}: "EQUIINET LTD.", - [3]byte{0, 48, 117}: "ADTECH", - [3]byte{0, 48, 118}: "Akamba Corporation", - [3]byte{0, 48, 119}: "ONPREM NETWORKS", - [3]byte{0, 48, 120}: "Cisco Systems, Inc", - [3]byte{0, 48, 121}: "CQOS, INC.", - [3]byte{0, 48, 122}: "Advanced Technology & Systems", - [3]byte{0, 48, 123}: "Cisco Systems, Inc", - [3]byte{0, 48, 124}: "ADID SA", - [3]byte{0, 48, 125}: "GRE AMERICA, INC.", - [3]byte{0, 48, 126}: "Redflex Communication Systems", - [3]byte{0, 48, 127}: "IRLAN LTD.", - [3]byte{0, 48, 128}: "Cisco Systems, Inc", - [3]byte{0, 48, 129}: "ALTOS C&C", - [3]byte{0, 48, 130}: "TAIHAN ELECTRIC WIRE CO., LTD.", - [3]byte{0, 48, 131}: "Ivron Systems", - [3]byte{0, 48, 132}: "ALLIED TELESYN INTERNAIONAL", - [3]byte{0, 48, 133}: "Cisco Systems, Inc", - [3]byte{0, 48, 134}: "Transistor Devices, Inc.", - [3]byte{0, 48, 135}: "VEGA GRIESHABER KG", - [3]byte{0, 48, 136}: "Ericsson", - [3]byte{0, 48, 137}: "Spectrapoint Wireless, LLC", - [3]byte{0, 48, 138}: "NICOTRA SISTEMI S.P.A", - [3]byte{0, 48, 139}: "Brix Networks", - [3]byte{0, 48, 140}: "Quantum Corporation", - [3]byte{0, 48, 141}: "Pinnacle Systems, Inc.", - [3]byte{0, 48, 142}: "CROSS MATCH TECHNOLOGIES, INC.", - [3]byte{0, 48, 143}: "MICRILOR, Inc.", - [3]byte{0, 48, 144}: "CYRA TECHNOLOGIES, INC.", - [3]byte{0, 48, 145}: "TAIWAN FIRST LINE ELEC. CORP.", - [3]byte{0, 48, 146}: "ModuNORM GmbH", - [3]byte{0, 48, 147}: "Sonnet Technologies, Inc", - [3]byte{0, 48, 148}: "Cisco Systems, Inc", - [3]byte{0, 48, 149}: "Procomp Informatics, Ltd.", - [3]byte{0, 48, 150}: "Cisco Systems, Inc", - [3]byte{0, 48, 151}: "AB Regin", - [3]byte{0, 48, 152}: "Global Converging Technologies", - [3]byte{0, 48, 153}: "BOENIG UND KALLENBACH OHG", - [3]byte{0, 48, 154}: "ASTRO TERRA CORP.", - [3]byte{0, 48, 155}: "Smartware", - [3]byte{0, 48, 156}: "Timing Applications, Inc.", - [3]byte{0, 48, 157}: "Nimble Microsystems, Inc.", - [3]byte{0, 48, 158}: "WORKBIT CORPORATION.", - [3]byte{0, 48, 159}: "AMBER NETWORKS", - [3]byte{0, 48, 160}: "TYCO SUBMARINE SYSTEMS, LTD.", - [3]byte{0, 48, 161}: "WEBGATE Inc.", - [3]byte{0, 48, 162}: "Lightner Engineering", - [3]byte{0, 48, 163}: "Cisco Systems, Inc", - [3]byte{0, 48, 164}: "Woodwind Communications System", - [3]byte{0, 48, 165}: "ACTIVE POWER", - [3]byte{0, 48, 166}: "VIANET TECHNOLOGIES, LTD.", - [3]byte{0, 48, 167}: "SCHWEITZER ENGINEERING", - [3]byte{0, 48, 168}: "OL'E COMMUNICATIONS, INC.", - [3]byte{0, 48, 169}: "Netiverse, Inc.", - [3]byte{0, 48, 170}: "AXUS MICROSYSTEMS, INC.", - [3]byte{0, 48, 171}: "DELTA NETWORKS, INC.", - [3]byte{0, 48, 172}: "Systeme Lauer GmbH & Co., Ltd.", - [3]byte{0, 48, 173}: "SHANGHAI COMMUNICATION", - [3]byte{0, 48, 174}: "Times N System, Inc.", - [3]byte{0, 48, 175}: "Honeywell GmbH", - [3]byte{0, 48, 176}: "Convergenet Technologies", - [3]byte{0, 48, 177}: "TrunkNet", - [3]byte{0, 48, 178}: "L-3 Sonoma EO", - [3]byte{0, 48, 179}: "San Valley Systems, Inc.", - [3]byte{0, 48, 180}: "INTERSIL CORP.", - [3]byte{0, 48, 181}: "Tadiran Microwave Networks", - [3]byte{0, 48, 182}: "Cisco Systems, Inc", - [3]byte{0, 48, 183}: "Teletrol Systems, Inc.", - [3]byte{0, 48, 184}: "RiverDelta Networks", - [3]byte{0, 48, 185}: "ECTEL", - [3]byte{0, 48, 186}: "AC&T SYSTEM CO., LTD.", - [3]byte{0, 48, 187}: "CacheFlow, Inc.", - [3]byte{0, 48, 188}: "Optronic AG", - [3]byte{0, 48, 189}: "BELKIN COMPONENTS", - [3]byte{0, 48, 190}: "City-Net Technology, Inc.", - [3]byte{0, 48, 191}: "MULTIDATA GMBH", - [3]byte{0, 48, 192}: "Lara Technology, Inc.", - [3]byte{0, 48, 193}: "Hewlett Packard", - [3]byte{0, 48, 194}: "COMONE", - [3]byte{0, 48, 195}: "FLUECKIGER ELEKTRONIK AG", - [3]byte{0, 48, 196}: "Canon Imaging Systems Inc.", - [3]byte{0, 48, 197}: "CADENCE DESIGN SYSTEMS, INC.", - [3]byte{0, 48, 198}: "CONTROL SOLUTIONS, INC.", - [3]byte{0, 48, 199}: "Macromate Corp.", - [3]byte{0, 48, 200}: "GAD LINE, LTD.", - [3]byte{0, 48, 201}: "LuxN, N", - [3]byte{0, 48, 202}: "Discovery Com", - [3]byte{0, 48, 203}: "OMNI FLOW COMPUTERS, INC.", - [3]byte{0, 48, 204}: "Tenor Networks, Inc.", - [3]byte{0, 48, 205}: "CONEXANT SYSTEMS, INC.", - [3]byte{0, 48, 206}: "Zaffire", - [3]byte{0, 48, 207}: "TWO TECHNOLOGIES, INC.", - [3]byte{0, 48, 208}: "Tellabs", - [3]byte{0, 48, 209}: "INOVA CORPORATION", - [3]byte{0, 48, 210}: "WIN TECHNOLOGIES, CO., LTD.", - [3]byte{0, 48, 211}: "Agilent Technologies, Inc.", - [3]byte{0, 48, 212}: "AAE Systems, Inc.", - [3]byte{0, 48, 213}: "DResearch GmbH", - [3]byte{0, 48, 214}: "MSC VERTRIEBS GMBH", - [3]byte{0, 48, 215}: "Innovative Systems, L.L.C.", - [3]byte{0, 48, 216}: "SITEK", - [3]byte{0, 48, 217}: "DATACORE SOFTWARE CORP.", - [3]byte{0, 48, 218}: "Comtrend Corporation", - [3]byte{0, 48, 219}: "Mindready Solutions, Inc.", - [3]byte{0, 48, 220}: "RIGHTECH CORPORATION", - [3]byte{0, 48, 221}: "INDIGITA CORPORATION", - [3]byte{0, 48, 222}: "WAGO Kontakttechnik GmbH", - [3]byte{0, 48, 223}: "KB/TEL TELECOMUNICACIONES", - [3]byte{0, 48, 224}: "OXFORD SEMICONDUCTOR LTD.", - [3]byte{0, 48, 225}: "Network Equipment Technologies, Inc.", - [3]byte{0, 48, 226}: "GARNET SYSTEMS CO., LTD.", - [3]byte{0, 48, 227}: "SEDONA NETWORKS CORP.", - [3]byte{0, 48, 228}: "CHIYODA SYSTEM RIKEN", - [3]byte{0, 48, 229}: "Amper Datos S.A.", - [3]byte{0, 48, 230}: "Draeger Medical Systems, Inc.", - [3]byte{0, 48, 231}: "CNF MOBILE SOLUTIONS, INC.", - [3]byte{0, 48, 232}: "ENSIM CORP.", - [3]byte{0, 48, 233}: "GMA COMMUNICATION MANUFACT'G", - [3]byte{0, 48, 234}: "TeraForce Technology Corporation", - [3]byte{0, 48, 235}: "TURBONET COMMUNICATIONS, INC.", - [3]byte{0, 48, 236}: "BORGARDT", - [3]byte{0, 48, 237}: "Expert Magnetics Corp.", - [3]byte{0, 48, 238}: "DSG Technology, Inc.", - [3]byte{0, 48, 239}: "NEON TECHNOLOGY, INC.", - [3]byte{0, 48, 240}: "Uniform Industrial Corp.", - [3]byte{0, 48, 241}: "Accton Technology Corp", - [3]byte{0, 48, 242}: "Cisco Systems, Inc", - [3]byte{0, 48, 243}: "At Work Computers", - [3]byte{0, 48, 244}: "STARDOT TECHNOLOGIES", - [3]byte{0, 48, 245}: "Wild Lab. Ltd.", - [3]byte{0, 48, 246}: "SECURELOGIX CORPORATION", - [3]byte{0, 48, 247}: "RAMIX INC.", - [3]byte{0, 48, 248}: "Dynapro Systems, Inc.", - [3]byte{0, 48, 249}: "Sollae Systems Co., Ltd.", - [3]byte{0, 48, 250}: "TELICA, INC.", - [3]byte{0, 48, 251}: "AZS Technology AG", - [3]byte{0, 48, 252}: "Terawave Communications, Inc.", - [3]byte{0, 48, 253}: "INTEGRATED SYSTEMS DESIGN", - [3]byte{0, 48, 254}: "DSA GmbH", - [3]byte{0, 48, 255}: "DataFab Systems Inc.", - [3]byte{0, 49, 70}: "Juniper Networks", - [3]byte{0, 50, 58}: "so-logic", - [3]byte{0, 51, 108}: "SynapSense Corporation", - [3]byte{0, 52, 218}: "LG Electronics (Mobile Communications)", - [3]byte{0, 52, 241}: "Radicom Research, Inc.", - [3]byte{0, 52, 254}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{0, 53, 26}: "Cisco Systems, Inc", - [3]byte{0, 53, 50}: "Electro-Metrics Corporation", - [3]byte{0, 53, 96}: "Rosen Aviation", - [3]byte{0, 54, 118}: "ARRIS Group, Inc.", - [3]byte{0, 54, 248}: "Conti Temic microelectronic GmbH", - [3]byte{0, 54, 254}: "SuperVision", - [3]byte{0, 55, 109}: "Murata Manufacturing Co., Ltd.", - [3]byte{0, 55, 183}: "Sagemcom Broadband SAS", - [3]byte{0, 56, 223}: "Cisco Systems, Inc", - [3]byte{0, 58, 125}: "Cisco Systems, Inc", - [3]byte{0, 58, 152}: "Cisco Systems, Inc", - [3]byte{0, 58, 153}: "Cisco Systems, Inc", - [3]byte{0, 58, 154}: "Cisco Systems, Inc", - [3]byte{0, 58, 155}: "Cisco Systems, Inc", - [3]byte{0, 58, 156}: "Cisco Systems, Inc", - [3]byte{0, 58, 157}: "NEC Platforms, Ltd.", - [3]byte{0, 58, 175}: "BlueBit Ltd.", - [3]byte{0, 60, 197}: "WONWOO Engineering Co., Ltd", - [3]byte{0, 61, 65}: "Hatteland Computer AS", - [3]byte{0, 62, 225}: "Apple, Inc.", - [3]byte{0, 64, 0}: "PCI COMPONENTES DA AMZONIA LTD", - [3]byte{0, 64, 1}: "Zero One Technology Co. Ltd.", - [3]byte{0, 64, 2}: "PERLE SYSTEMS LIMITED", - [3]byte{0, 64, 3}: "Emerson Process Management Power & Water Solutions, Inc.", - [3]byte{0, 64, 4}: "ICM CO. LTD.", - [3]byte{0, 64, 5}: "ANI COMMUNICATIONS INC.", - [3]byte{0, 64, 6}: "SAMPO TECHNOLOGY CORPORATION", - [3]byte{0, 64, 7}: "TELMAT INFORMATIQUE", - [3]byte{0, 64, 8}: "A PLUS INFO CORPORATION", - [3]byte{0, 64, 9}: "TACHIBANA TECTRON CO., LTD.", - [3]byte{0, 64, 10}: "PIVOTAL TECHNOLOGIES, INC.", - [3]byte{0, 64, 11}: "Cisco Systems, Inc", - [3]byte{0, 64, 12}: "GENERAL MICRO SYSTEMS, INC.", - [3]byte{0, 64, 13}: "LANNET DATA COMMUNICATIONS,LTD", - [3]byte{0, 64, 14}: "MEMOTEC, INC.", - [3]byte{0, 64, 15}: "DATACOM TECHNOLOGIES", - [3]byte{0, 64, 16}: "SONIC SYSTEMS, INC.", - [3]byte{0, 64, 17}: "ANDOVER CONTROLS CORPORATION", - [3]byte{0, 64, 18}: "WINDATA, INC.", - [3]byte{0, 64, 19}: "NTT DATA COMM. SYSTEMS CORP.", - [3]byte{0, 64, 20}: "COMSOFT GMBH", - [3]byte{0, 64, 21}: "ASCOM INFRASYS AG", - [3]byte{0, 64, 22}: "ADC - Global Connectivity Solutions Division", - [3]byte{0, 64, 23}: "Silex Technology America", - [3]byte{0, 64, 24}: "ADOBE SYSTEMS, INC.", - [3]byte{0, 64, 25}: "AEON SYSTEMS, INC.", - [3]byte{0, 64, 26}: "FUJI ELECTRIC CO., LTD.", - [3]byte{0, 64, 27}: "PRINTER SYSTEMS CORP.", - [3]byte{0, 64, 28}: "AST RESEARCH, INC.", - [3]byte{0, 64, 29}: "INVISIBLE SOFTWARE, INC.", - [3]byte{0, 64, 30}: "ICC", - [3]byte{0, 64, 31}: "COLORGRAPH LTD", - [3]byte{0, 64, 32}: "CommScope Inc", - [3]byte{0, 64, 33}: "RASTER GRAPHICS", - [3]byte{0, 64, 34}: "KLEVER COMPUTERS, INC.", - [3]byte{0, 64, 35}: "LOGIC CORPORATION", - [3]byte{0, 64, 36}: "COMPAC INC.", - [3]byte{0, 64, 37}: "MOLECULAR DYNAMICS", - [3]byte{0, 64, 38}: "BUFFALO.INC", - [3]byte{0, 64, 39}: "SMC MASSACHUSETTS, INC.", - [3]byte{0, 64, 40}: "NETCOMM LIMITED", - [3]byte{0, 64, 41}: "Compex", - [3]byte{0, 64, 42}: "Canoga Perkins Corporation", - [3]byte{0, 64, 43}: "TRIGEM COMPUTER, INC.", - [3]byte{0, 64, 44}: "ISIS DISTRIBUTED SYSTEMS, INC.", - [3]byte{0, 64, 45}: "HARRIS ADACOM CORPORATION", - [3]byte{0, 64, 46}: "PRECISION SOFTWARE, INC.", - [3]byte{0, 64, 47}: "XLNT DESIGNS INC.", - [3]byte{0, 64, 48}: "GK COMPUTER", - [3]byte{0, 64, 49}: "KOKUSAI ELECTRIC CO., LTD", - [3]byte{0, 64, 50}: "DIGITAL COMMUNICATIONS", - [3]byte{0, 64, 51}: "ADDTRON TECHNOLOGY CO., LTD.", - [3]byte{0, 64, 52}: "BUSTEK CORPORATION", - [3]byte{0, 64, 53}: "OPCOM", - [3]byte{0, 64, 54}: "Zoom Telephonics, Inc", - [3]byte{0, 64, 55}: "SEA-ILAN, INC.", - [3]byte{0, 64, 56}: "TALENT ELECTRIC INCORPORATED", - [3]byte{0, 64, 57}: "OPTEC DAIICHI DENKO CO., LTD.", - [3]byte{0, 64, 58}: "IMPACT TECHNOLOGIES", - [3]byte{0, 64, 59}: "SYNERJET INTERNATIONAL CORP.", - [3]byte{0, 64, 60}: "FORKS, INC.", - [3]byte{0, 64, 61}: "Teradata Corporation", - [3]byte{0, 64, 62}: "RASTER OPS CORPORATION", - [3]byte{0, 64, 63}: "SSANGYONG COMPUTER SYSTEMS", - [3]byte{0, 64, 64}: "RING ACCESS, INC.", - [3]byte{0, 64, 65}: "FUJIKURA LTD.", - [3]byte{0, 64, 66}: "N.A.T. GMBH", - [3]byte{0, 64, 67}: "Nokia Siemens Networks GmbH & Co. KG.", - [3]byte{0, 64, 68}: "QNIX COMPUTER CO., LTD.", - [3]byte{0, 64, 69}: "TWINHEAD CORPORATION", - [3]byte{0, 64, 70}: "UDC RESEARCH LIMITED", - [3]byte{0, 64, 71}: "WIND RIVER SYSTEMS", - [3]byte{0, 64, 72}: "SMD INFORMATICA S.A.", - [3]byte{0, 64, 73}: "Roche Diagnostics International Ltd.", - [3]byte{0, 64, 74}: "WEST AUSTRALIAN DEPARTMENT", - [3]byte{0, 64, 75}: "MAPLE COMPUTER SYSTEMS", - [3]byte{0, 64, 76}: "HYPERTEC PTY LTD.", - [3]byte{0, 64, 77}: "TELECOMMUNICATIONS TECHNIQUES", - [3]byte{0, 64, 78}: "FLUENT, INC.", - [3]byte{0, 64, 79}: "SPACE & NAVAL WARFARE SYSTEMS", - [3]byte{0, 64, 80}: "IRONICS, INCORPORATED", - [3]byte{0, 64, 81}: "GRACILIS, INC.", - [3]byte{0, 64, 82}: "STAR TECHNOLOGIES, INC.", - [3]byte{0, 64, 83}: "AMPRO COMPUTERS", - [3]byte{0, 64, 84}: "CONNECTION MACHINES SERVICES", - [3]byte{0, 64, 85}: "METRONIX GMBH", - [3]byte{0, 64, 86}: "MCM JAPAN LTD.", - [3]byte{0, 64, 87}: "LOCKHEED - SANDERS", - [3]byte{0, 64, 88}: "KRONOS, INC.", - [3]byte{0, 64, 89}: "YOSHIDA KOGYO K. K.", - [3]byte{0, 64, 90}: "GOLDSTAR INFORMATION & COMM.", - [3]byte{0, 64, 91}: "FUNASSET LIMITED", - [3]byte{0, 64, 92}: "FUTURE SYSTEMS, INC.", - [3]byte{0, 64, 93}: "STAR-TEK, INC.", - [3]byte{0, 64, 94}: "NORTH HILLS ISRAEL", - [3]byte{0, 64, 95}: "AFE COMPUTERS LTD.", - [3]byte{0, 64, 96}: "COMENDEC LTD", - [3]byte{0, 64, 97}: "DATATECH ENTERPRISES CO., LTD.", - [3]byte{0, 64, 98}: "E-SYSTEMS, INC./GARLAND DIV.", - [3]byte{0, 64, 99}: "VIA TECHNOLOGIES, INC.", - [3]byte{0, 64, 100}: "KLA INSTRUMENTS CORPORATION", - [3]byte{0, 64, 101}: "GTE SPACENET", - [3]byte{0, 64, 102}: "APRESIA Systems Ltd", - [3]byte{0, 64, 103}: "OMNIBYTE CORPORATION", - [3]byte{0, 64, 104}: "EXTENDED SYSTEMS", - [3]byte{0, 64, 105}: "LEMCOM SYSTEMS, INC.", - [3]byte{0, 64, 106}: "KENTEK INFORMATION SYSTEMS,INC", - [3]byte{0, 64, 107}: "SYSGEN", - [3]byte{0, 64, 108}: "COPERNIQUE", - [3]byte{0, 64, 109}: "LANCO, INC.", - [3]byte{0, 64, 110}: "COROLLARY, INC.", - [3]byte{0, 64, 111}: "SYNC RESEARCH INC.", - [3]byte{0, 64, 112}: "INTERWARE CO., LTD.", - [3]byte{0, 64, 113}: "ATM COMPUTER GMBH", - [3]byte{0, 64, 114}: "Applied Innovation Inc.", - [3]byte{0, 64, 115}: "BASS ASSOCIATES", - [3]byte{0, 64, 116}: "CABLE AND WIRELESS", - [3]byte{0, 64, 117}: "Tattile SRL", - [3]byte{0, 64, 118}: "Sun Conversion Technologies", - [3]byte{0, 64, 119}: "MAXTON TECHNOLOGY CORPORATION", - [3]byte{0, 64, 120}: "WEARNES AUTOMATION PTE LTD", - [3]byte{0, 64, 121}: "JUKO MANUFACTURE COMPANY, LTD.", - [3]byte{0, 64, 122}: "SOCIETE D'EXPLOITATION DU CNIT", - [3]byte{0, 64, 123}: "SCIENTIFIC ATLANTA", - [3]byte{0, 64, 124}: "QUME CORPORATION", - [3]byte{0, 64, 125}: "EXTENSION TECHNOLOGY CORP.", - [3]byte{0, 64, 126}: "EVERGREEN SYSTEMS, INC.", - [3]byte{0, 64, 127}: "FLIR Systems", - [3]byte{0, 64, 128}: "ATHENIX CORPORATION", - [3]byte{0, 64, 129}: "MANNESMANN SCANGRAPHIC GMBH", - [3]byte{0, 64, 130}: "LABORATORY EQUIPMENT CORP.", - [3]byte{0, 64, 131}: "TDA INDUSTRIA DE PRODUTOS", - [3]byte{0, 64, 132}: "HONEYWELL ACS", - [3]byte{0, 64, 133}: "SAAB INSTRUMENTS AB", - [3]byte{0, 64, 134}: "MICHELS & KLEBERHOFF COMPUTER", - [3]byte{0, 64, 135}: "UBITREX CORPORATION", - [3]byte{0, 64, 136}: "MOBIUS TECHNOLOGIES, INC.", - [3]byte{0, 64, 137}: "MEIDENSHA CORPORATION", - [3]byte{0, 64, 138}: "TPS TELEPROCESSING SYS. GMBH", - [3]byte{0, 64, 139}: "RAYLAN CORPORATION", - [3]byte{0, 64, 140}: "AXIS COMMUNICATIONS AB", - [3]byte{0, 64, 141}: "THE GOODYEAR TIRE & RUBBER CO.", - [3]byte{0, 64, 142}: "Tattile SRL", - [3]byte{0, 64, 143}: "WM-DATA MINFO AB", - [3]byte{0, 64, 144}: "ANSEL COMMUNICATIONS", - [3]byte{0, 64, 145}: "PROCOMP INDUSTRIA ELETRONICA", - [3]byte{0, 64, 146}: "ASP COMPUTER PRODUCTS, INC.", - [3]byte{0, 64, 147}: "PAXDATA NETWORKS LTD.", - [3]byte{0, 64, 148}: "SHOGRAPHICS, INC.", - [3]byte{0, 64, 149}: "R.P.T. INTERGROUPS INT'L LTD.", - [3]byte{0, 64, 150}: "Cisco Systems, Inc", - [3]byte{0, 64, 151}: "DATEX DIVISION OF", - [3]byte{0, 64, 152}: "DRESSLER GMBH & CO.", - [3]byte{0, 64, 153}: "NEWGEN SYSTEMS CORP.", - [3]byte{0, 64, 154}: "NETWORK EXPRESS, INC.", - [3]byte{0, 64, 155}: "HAL COMPUTER SYSTEMS INC.", - [3]byte{0, 64, 156}: "TRANSWARE", - [3]byte{0, 64, 157}: "DIGIBOARD, INC.", - [3]byte{0, 64, 158}: "CONCURRENT TECHNOLOGIES LTD.", - [3]byte{0, 64, 159}: "Telco Systems, Inc.", - [3]byte{0, 64, 160}: "GOLDSTAR CO., LTD.", - [3]byte{0, 64, 161}: "ERGO COMPUTING", - [3]byte{0, 64, 162}: "KINGSTAR TECHNOLOGY INC.", - [3]byte{0, 64, 163}: "MICROUNITY SYSTEMS ENGINEERING", - [3]byte{0, 64, 164}: "ROSE ELECTRONICS", - [3]byte{0, 64, 165}: "CLINICOMP INTL.", - [3]byte{0, 64, 166}: "Cray, Inc.", - [3]byte{0, 64, 167}: "ITAUTEC PHILCO S.A.", - [3]byte{0, 64, 168}: "IMF INTERNATIONAL LTD.", - [3]byte{0, 64, 169}: "DATACOM INC.", - [3]byte{0, 64, 170}: "Valmet Automation", - [3]byte{0, 64, 171}: "ROLAND DG CORPORATION", - [3]byte{0, 64, 172}: "SUPER WORKSTATION, INC.", - [3]byte{0, 64, 173}: "SMA REGELSYSTEME GMBH", - [3]byte{0, 64, 174}: "DELTA CONTROLS, INC.", - [3]byte{0, 64, 175}: "DIGITAL PRODUCTS, INC.", - [3]byte{0, 64, 176}: "BYTEX CORPORATION, ENGINEERING", - [3]byte{0, 64, 177}: "CODONICS INC.", - [3]byte{0, 64, 178}: "SYSTEMFORSCHUNG", - [3]byte{0, 64, 179}: "ParTech Inc.", - [3]byte{0, 64, 180}: "NEXTCOM K.K.", - [3]byte{0, 64, 181}: "VIDEO TECHNOLOGY COMPUTERS LTD", - [3]byte{0, 64, 182}: "COMPUTERM CORPORATION", - [3]byte{0, 64, 183}: "STEALTH COMPUTER SYSTEMS", - [3]byte{0, 64, 184}: "IDEA ASSOCIATES", - [3]byte{0, 64, 185}: "MACQ ELECTRONIQUE SA", - [3]byte{0, 64, 186}: "ALLIANT COMPUTER SYSTEMS CORP.", - [3]byte{0, 64, 187}: "GOLDSTAR CABLE CO., LTD.", - [3]byte{0, 64, 188}: "ALGORITHMICS LTD.", - [3]byte{0, 64, 189}: "STARLIGHT NETWORKS, INC.", - [3]byte{0, 64, 190}: "BOEING DEFENSE & SPACE", - [3]byte{0, 64, 191}: "CHANNEL SYSTEMS INTERN'L INC.", - [3]byte{0, 64, 192}: "VISTA CONTROLS CORPORATION", - [3]byte{0, 64, 193}: "BIZERBA-WERKE WILHEIM KRAUT", - [3]byte{0, 64, 194}: "APPLIED COMPUTING DEVICES", - [3]byte{0, 64, 195}: "FISCHER AND PORTER CO.", - [3]byte{0, 64, 196}: "KINKEI SYSTEM CORPORATION", - [3]byte{0, 64, 197}: "MICOM COMMUNICATIONS INC.", - [3]byte{0, 64, 198}: "FIBERNET RESEARCH, INC.", - [3]byte{0, 64, 199}: "RUBY TECH CORPORATION", - [3]byte{0, 64, 200}: "MILAN TECHNOLOGY CORPORATION", - [3]byte{0, 64, 201}: "NCUBE", - [3]byte{0, 64, 202}: "FIRST INTERNAT'L COMPUTER, INC", - [3]byte{0, 64, 203}: "LANWAN TECHNOLOGIES", - [3]byte{0, 64, 204}: "SILCOM MANUF'G TECHNOLOGY INC.", - [3]byte{0, 64, 205}: "TERA MICROSYSTEMS, INC.", - [3]byte{0, 64, 206}: "NET-SOURCE, INC.", - [3]byte{0, 64, 207}: "STRAWBERRY TREE, INC.", - [3]byte{0, 64, 208}: "MITAC INTERNATIONAL CORP.", - [3]byte{0, 64, 209}: "FUKUDA DENSHI CO., LTD.", - [3]byte{0, 64, 210}: "PAGINE CORPORATION", - [3]byte{0, 64, 211}: "KIMPSION INTERNATIONAL CORP.", - [3]byte{0, 64, 212}: "GAGE TALKER CORP.", - [3]byte{0, 64, 213}: "Sartorius Mechatronics T&H GmbH", - [3]byte{0, 64, 214}: "LOCAMATION B.V.", - [3]byte{0, 64, 215}: "STUDIO GEN INC.", - [3]byte{0, 64, 216}: "OCEAN OFFICE AUTOMATION LTD.", - [3]byte{0, 64, 217}: "AMERICAN MEGATRENDS INC.", - [3]byte{0, 64, 218}: "TELSPEC LTD", - [3]byte{0, 64, 219}: "ADVANCED TECHNICAL SOLUTIONS", - [3]byte{0, 64, 220}: "TRITEC ELECTRONIC GMBH", - [3]byte{0, 64, 221}: "HONG TECHNOLOGIES", - [3]byte{0, 64, 222}: "Elsag Datamat spa", - [3]byte{0, 64, 223}: "DIGALOG SYSTEMS, INC.", - [3]byte{0, 64, 224}: "ATOMWIDE LTD.", - [3]byte{0, 64, 225}: "MARNER INTERNATIONAL, INC.", - [3]byte{0, 64, 226}: "MESA RIDGE TECHNOLOGIES, INC.", - [3]byte{0, 64, 227}: "QUIN SYSTEMS LTD", - [3]byte{0, 64, 228}: "E-M TECHNOLOGY, INC.", - [3]byte{0, 64, 229}: "SYBUS CORPORATION", - [3]byte{0, 64, 230}: "C.A.E.N.", - [3]byte{0, 64, 231}: "ARNOS INSTRUMENTS & COMPUTER", - [3]byte{0, 64, 232}: "CHARLES RIVER DATA SYSTEMS,INC", - [3]byte{0, 64, 233}: "ACCORD SYSTEMS, INC.", - [3]byte{0, 64, 234}: "PLAIN TREE SYSTEMS INC", - [3]byte{0, 64, 235}: "MARTIN MARIETTA CORPORATION", - [3]byte{0, 64, 236}: "MIKASA SYSTEM ENGINEERING", - [3]byte{0, 64, 237}: "NETWORK CONTROLS INT'NATL INC.", - [3]byte{0, 64, 238}: "OPTIMEM", - [3]byte{0, 64, 239}: "HYPERCOM, INC.", - [3]byte{0, 64, 240}: "MicroBrain,Inc.", - [3]byte{0, 64, 241}: "CHUO ELECTRONICS CO., LTD.", - [3]byte{0, 64, 242}: "JANICH & KLASS COMPUTERTECHNIK", - [3]byte{0, 64, 243}: "NETCOR", - [3]byte{0, 64, 244}: "CAMEO COMMUNICATIONS, INC.", - [3]byte{0, 64, 245}: "OEM ENGINES", - [3]byte{0, 64, 246}: "KATRON COMPUTERS INC.", - [3]byte{0, 64, 247}: "Polaroid Corporation", - [3]byte{0, 64, 248}: "SYSTEMHAUS DISCOM", - [3]byte{0, 64, 249}: "COMBINET", - [3]byte{0, 64, 250}: "MICROBOARDS, INC.", - [3]byte{0, 64, 251}: "CASCADE COMMUNICATIONS", - [3]byte{0, 64, 252}: "IBR COMPUTER TECHNIK GMBH", - [3]byte{0, 64, 253}: "LXE", - [3]byte{0, 64, 254}: "SYMPLEX COMMUNICATIONS", - [3]byte{0, 64, 255}: "TELEBIT CORPORATION", - [3]byte{0, 65, 180}: "Wuxi Zhongxing Optoelectronics Technology Co.,Ltd.", - [3]byte{0, 65, 210}: "Cisco Systems, Inc", - [3]byte{0, 66, 82}: "RLX Technologies", - [3]byte{0, 66, 90}: "Cisco Systems, Inc", - [3]byte{0, 66, 104}: "Cisco Systems, Inc", - [3]byte{0, 67, 255}: "KETRON S.R.L.", - [3]byte{0, 69, 1}: "Versus Technology, Inc.", - [3]byte{0, 70, 75}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{0, 74, 119}: "zte corporation", - [3]byte{0, 75, 243}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", - [3]byte{0, 77, 50}: "Andon Health Co.,Ltd.", - [3]byte{0, 80, 0}: "NEXO COMMUNICATIONS, INC.", - [3]byte{0, 80, 1}: "YAMASHITA SYSTEMS CORP.", - [3]byte{0, 80, 2}: "OMNISEC AG", - [3]byte{0, 80, 3}: "Xrite Inc", - [3]byte{0, 80, 4}: "3COM CORPORATION", - [3]byte{0, 80, 6}: "TAC AB", - [3]byte{0, 80, 7}: "SIEMENS TELECOMMUNICATION SYSTEMS LIMITED", - [3]byte{0, 80, 8}: "TIVA MICROCOMPUTER CORP. (TMC)", - [3]byte{0, 80, 9}: "PHILIPS BROADBAND NETWORKS", - [3]byte{0, 80, 10}: "IRIS TECHNOLOGIES, INC.", - [3]byte{0, 80, 11}: "Cisco Systems, Inc", - [3]byte{0, 80, 12}: "e-Tek Labs, Inc.", - [3]byte{0, 80, 13}: "SATORI ELECTORIC CO., LTD.", - [3]byte{0, 80, 14}: "CHROMATIS NETWORKS, INC.", - [3]byte{0, 80, 15}: "Cisco Systems, Inc", - [3]byte{0, 80, 16}: "NovaNET Learning, Inc.", - [3]byte{0, 80, 18}: "CBL - GMBH", - [3]byte{0, 80, 19}: "Seagate Cloud Systems Inc", - [3]byte{0, 80, 20}: "Cisco Systems, Inc", - [3]byte{0, 80, 21}: "BRIGHT STAR ENGINEERING", - [3]byte{0, 80, 22}: "Molex Canada Ltd", - [3]byte{0, 80, 23}: "RSR S.R.L.", - [3]byte{0, 80, 24}: "AMIT, Inc.", - [3]byte{0, 80, 25}: "SPRING TIDE NETWORKS, INC.", - [3]byte{0, 80, 26}: "IQinVision", - [3]byte{0, 80, 27}: "ABL CANADA, INC.", - [3]byte{0, 80, 28}: "JATOM SYSTEMS, INC.", - [3]byte{0, 80, 30}: "Grass Valley, A Belden Brand", - [3]byte{0, 80, 31}: "MRG SYSTEMS, LTD.", - [3]byte{0, 80, 32}: "MEDIASTAR CO., LTD.", - [3]byte{0, 80, 33}: "EIS INTERNATIONAL, INC.", - [3]byte{0, 80, 34}: "ZONET TECHNOLOGY, INC.", - [3]byte{0, 80, 35}: "PG DESIGN ELECTRONICS, INC.", - [3]byte{0, 80, 36}: "NAVIC SYSTEMS, INC.", - [3]byte{0, 80, 38}: "COSYSTEMS, INC.", - [3]byte{0, 80, 39}: "GENICOM CORPORATION", - [3]byte{0, 80, 40}: "AVAL COMMUNICATIONS", - [3]byte{0, 80, 41}: "1394 PRINTER WORKING GROUP", - [3]byte{0, 80, 42}: "Cisco Systems, Inc", - [3]byte{0, 80, 43}: "GENRAD LTD.", - [3]byte{0, 80, 44}: "SOYO COMPUTER, INC.", - [3]byte{0, 80, 45}: "ACCEL, INC.", - [3]byte{0, 80, 46}: "CAMBEX CORPORATION", - [3]byte{0, 80, 47}: "TollBridge Technologies, Inc.", - [3]byte{0, 80, 48}: "FUTURE PLUS SYSTEMS", - [3]byte{0, 80, 49}: "AEROFLEX LABORATORIES, INC.", - [3]byte{0, 80, 50}: "PICAZO COMMUNICATIONS, INC.", - [3]byte{0, 80, 51}: "MAYAN NETWORKS", - [3]byte{0, 80, 54}: "NETCAM, LTD.", - [3]byte{0, 80, 55}: "KOGA ELECTRONICS CO.", - [3]byte{0, 80, 56}: "DAIN TELECOM CO., LTD.", - [3]byte{0, 80, 57}: "MARINER NETWORKS", - [3]byte{0, 80, 58}: "DATONG ELECTRONICS LTD.", - [3]byte{0, 80, 59}: "MEDIAFIRE CORPORATION", - [3]byte{0, 80, 60}: "TSINGHUA NOVEL ELECTRONICS", - [3]byte{0, 80, 62}: "Cisco Systems, Inc", - [3]byte{0, 80, 63}: "ANCHOR GAMES", - [3]byte{0, 80, 64}: "Panasonic Electric Works Co., Ltd.", - [3]byte{0, 80, 65}: "Coretronic Corporation", - [3]byte{0, 80, 66}: "SCI MANUFACTURING SINGAPORE PTE, LTD.", - [3]byte{0, 80, 67}: "MARVELL SEMICONDUCTOR, INC.", - [3]byte{0, 80, 68}: "ASACA CORPORATION", - [3]byte{0, 80, 69}: "RIOWORKS SOLUTIONS, INC.", - [3]byte{0, 80, 70}: "MENICX INTERNATIONAL CO., LTD.", - [3]byte{0, 80, 71}: "Private", - [3]byte{0, 80, 72}: "INFOLIBRIA", - [3]byte{0, 80, 73}: "Arbor Networks Inc", - [3]byte{0, 80, 74}: "ELTECO A.S.", - [3]byte{0, 80, 75}: "BARCONET N.V.", - [3]byte{0, 80, 76}: "Galil Motion Control", - [3]byte{0, 80, 77}: "Tokyo Electron Device Limited", - [3]byte{0, 80, 78}: "SIERRA MONITOR CORP.", - [3]byte{0, 80, 79}: "OLENCOM ELECTRONICS", - [3]byte{0, 80, 80}: "Cisco Systems, Inc", - [3]byte{0, 80, 81}: "IWATSU ELECTRIC CO., LTD.", - [3]byte{0, 80, 82}: "TIARA NETWORKS, INC.", - [3]byte{0, 80, 83}: "Cisco Systems, Inc", - [3]byte{0, 80, 84}: "Cisco Systems, Inc", - [3]byte{0, 80, 85}: "DOMS A/S", - [3]byte{0, 80, 86}: "VMware, Inc.", - [3]byte{0, 80, 87}: "BROADBAND ACCESS SYSTEMS", - [3]byte{0, 80, 88}: "Sangoma Technologies", - [3]byte{0, 80, 89}: "iBAHN", - [3]byte{0, 80, 90}: "NETWORK ALCHEMY, INC.", - [3]byte{0, 80, 91}: "KAWASAKI LSI U.S.A., INC.", - [3]byte{0, 80, 92}: "TUNDO CORPORATION", - [3]byte{0, 80, 94}: "DIGITEK MICROLOGIC S.A.", - [3]byte{0, 80, 95}: "BRAND INNOVATORS", - [3]byte{0, 80, 96}: "TANDBERG TELECOM AS", - [3]byte{0, 80, 98}: "KOUWELL ELECTRONICS CORP. **", - [3]byte{0, 80, 99}: "OY COMSEL SYSTEM AB", - [3]byte{0, 80, 100}: "CAE ELECTRONICS", - [3]byte{0, 80, 101}: "TDK-Lambda Corporation", - [3]byte{0, 80, 102}: "AtecoM GmbH advanced telecomunication modules", - [3]byte{0, 80, 103}: "AEROCOMM, INC.", - [3]byte{0, 80, 104}: "ELECTRONIC INDUSTRIES ASSOCIATION", - [3]byte{0, 80, 105}: "PixStream Incorporated", - [3]byte{0, 80, 106}: "EDEVA, INC.", - [3]byte{0, 80, 107}: "SPX-ATEG", - [3]byte{0, 80, 108}: "Beijer Electronics Products AB", - [3]byte{0, 80, 109}: "VIDEOJET SYSTEMS", - [3]byte{0, 80, 110}: "CORDER ENGINEERING CORPORATION", - [3]byte{0, 80, 111}: "G-CONNECT", - [3]byte{0, 80, 112}: "CHAINTECH COMPUTER CO., LTD.", - [3]byte{0, 80, 113}: "AIWA CO., LTD.", - [3]byte{0, 80, 114}: "CORVIS CORPORATION", - [3]byte{0, 80, 115}: "Cisco Systems, Inc", - [3]byte{0, 80, 116}: "ADVANCED HI-TECH CORP.", - [3]byte{0, 80, 117}: "KESTREL SOLUTIONS", - [3]byte{0, 80, 118}: "IBM Corp", - [3]byte{0, 80, 119}: "PROLIFIC TECHNOLOGY, INC.", - [3]byte{0, 80, 120}: "MEGATON HOUSE, LTD.", - [3]byte{0, 80, 121}: "Private", - [3]byte{0, 80, 122}: "XPEED, INC.", - [3]byte{0, 80, 123}: "MERLOT COMMUNICATIONS", - [3]byte{0, 80, 124}: "VIDEOCON AG", - [3]byte{0, 80, 125}: "IFP", - [3]byte{0, 80, 126}: "NEWER TECHNOLOGY", - [3]byte{0, 80, 127}: "DrayTek Corp.", - [3]byte{0, 80, 128}: "Cisco Systems, Inc", - [3]byte{0, 80, 129}: "MURATA MACHINERY, LTD.", - [3]byte{0, 80, 130}: "FORESSON CORPORATION", - [3]byte{0, 80, 131}: "GILBARCO, INC.", - [3]byte{0, 80, 132}: "ATL PRODUCTS", - [3]byte{0, 80, 134}: "TELKOM SA, LTD.", - [3]byte{0, 80, 135}: "TERASAKI ELECTRIC CO., LTD.", - [3]byte{0, 80, 136}: "AMANO CORPORATION", - [3]byte{0, 80, 137}: "SAFETY MANAGEMENT SYSTEMS", - [3]byte{0, 80, 139}: "Hewlett Packard", - [3]byte{0, 80, 140}: "RSI SYSTEMS", - [3]byte{0, 80, 141}: "ABIT COMPUTER CORPORATION", - [3]byte{0, 80, 142}: "OPTIMATION, INC.", - [3]byte{0, 80, 143}: "ASITA TECHNOLOGIES INT'L LTD.", - [3]byte{0, 80, 144}: "DCTRI", - [3]byte{0, 80, 145}: "NETACCESS, INC.", - [3]byte{0, 80, 146}: "Rigaku Corporation Osaka Plant", - [3]byte{0, 80, 147}: "BOEING", - [3]byte{0, 80, 148}: "ARRIS Group, Inc.", - [3]byte{0, 80, 149}: "PERACOM NETWORKS", - [3]byte{0, 80, 150}: "SALIX TECHNOLOGIES, INC.", - [3]byte{0, 80, 151}: "MMC-EMBEDDED COMPUTERTECHNIK GmbH", - [3]byte{0, 80, 152}: "GLOBALOOP, LTD.", - [3]byte{0, 80, 153}: "3COM EUROPE, LTD.", - [3]byte{0, 80, 154}: "TAG ELECTRONIC SYSTEMS", - [3]byte{0, 80, 155}: "SWITCHCORE AB", - [3]byte{0, 80, 156}: "BETA RESEARCH", - [3]byte{0, 80, 157}: "THE INDUSTREE B.V.", - [3]byte{0, 80, 158}: "Les Technologies SoftAcoustik Inc.", - [3]byte{0, 80, 159}: "HORIZON COMPUTER", - [3]byte{0, 80, 160}: "DELTA COMPUTER SYSTEMS, INC.", - [3]byte{0, 80, 161}: "CARLO GAVAZZI, INC.", - [3]byte{0, 80, 162}: "Cisco Systems, Inc", - [3]byte{0, 80, 163}: "TransMedia Communications, Inc.", - [3]byte{0, 80, 164}: "IO TECH, INC.", - [3]byte{0, 80, 165}: "CAPITOL BUSINESS SYSTEMS, LTD.", - [3]byte{0, 80, 166}: "OPTRONICS", - [3]byte{0, 80, 167}: "Cisco Systems, Inc", - [3]byte{0, 80, 168}: "OpenCon Systems, Inc.", - [3]byte{0, 80, 169}: "MOLDAT WIRELESS TECHNOLGIES", - [3]byte{0, 80, 170}: "KONICA MINOLTA HOLDINGS, INC.", - [3]byte{0, 80, 171}: "NALTEC, Inc.", - [3]byte{0, 80, 172}: "MAPLE COMPUTER CORPORATION", - [3]byte{0, 80, 173}: "CommUnique Wireless Corp.", - [3]byte{0, 80, 174}: "FDK Co., Ltd", - [3]byte{0, 80, 175}: "INTERGON, INC.", - [3]byte{0, 80, 176}: "TECHNOLOGY ATLANTA CORPORATION", - [3]byte{0, 80, 177}: "GIDDINGS & LEWIS", - [3]byte{0, 80, 178}: "BRODEL GmbH", - [3]byte{0, 80, 179}: "VOICEBOARD CORPORATION", - [3]byte{0, 80, 180}: "SATCHWELL CONTROL SYSTEMS, LTD", - [3]byte{0, 80, 181}: "FICHET SECURITE ELECTRONIQUE", - [3]byte{0, 80, 182}: "GOOD WAY IND. CO., LTD.", - [3]byte{0, 80, 183}: "BOSER TECHNOLOGY CO., LTD.", - [3]byte{0, 80, 184}: "INOVA COMPUTERS GMBH & CO. KG", - [3]byte{0, 80, 185}: "XITRON TECHNOLOGIES, INC.", - [3]byte{0, 80, 186}: "D-Link Corporation", - [3]byte{0, 80, 187}: "CMS TECHNOLOGIES", - [3]byte{0, 80, 188}: "HAMMER STORAGE SOLUTIONS", - [3]byte{0, 80, 189}: "Cisco Systems, Inc", - [3]byte{0, 80, 190}: "FAST MULTIMEDIA AG", - [3]byte{0, 80, 191}: "Metalligence Technology Corp.", - [3]byte{0, 80, 192}: "GATAN, INC.", - [3]byte{0, 80, 193}: "GEMFLEX NETWORKS, LTD.", - [3]byte{0, 80, 194}: "IEEE Registration Authority", - [3]byte{0, 80, 196}: "IMD", - [3]byte{0, 80, 197}: "ADS Technologies, Inc", - [3]byte{0, 80, 198}: "LOOP TELECOMMUNICATION INTERNATIONAL, INC.", - [3]byte{0, 80, 199}: "Private", - [3]byte{0, 80, 200}: "Addonics Technologies, Inc.", - [3]byte{0, 80, 201}: "MASPRO DENKOH CORP.", - [3]byte{0, 80, 202}: "NET TO NET TECHNOLOGIES", - [3]byte{0, 80, 203}: "JETTER", - [3]byte{0, 80, 204}: "Seagate Cloud Systems Inc", - [3]byte{0, 80, 205}: "DIGIANSWER A/S", - [3]byte{0, 80, 206}: "LG INTERNATIONAL CORP.", - [3]byte{0, 80, 207}: "VANLINK COMMUNICATION TECHNOLOGY RESEARCH INSTITUTE", - [3]byte{0, 80, 208}: "MINERVA SYSTEMS", - [3]byte{0, 80, 209}: "Cisco Systems, Inc", - [3]byte{0, 80, 210}: "CMC Electronics Inc", - [3]byte{0, 80, 211}: "DIGITAL AUDIO PROCESSING PTY. LTD.", - [3]byte{0, 80, 212}: "JOOHONG INFORMATION &", - [3]byte{0, 80, 213}: "AD SYSTEMS CORP.", - [3]byte{0, 80, 214}: "ATLAS COPCO TOOLS AB", - [3]byte{0, 80, 215}: "TELSTRAT", - [3]byte{0, 80, 216}: "UNICORN COMPUTER CORP.", - [3]byte{0, 80, 217}: "ENGETRON-ENGENHARIA ELETRONICA IND. e COM. LTDA", - [3]byte{0, 80, 218}: "3COM CORPORATION", - [3]byte{0, 80, 219}: "CONTEMPORARY CONTROL", - [3]byte{0, 80, 220}: "TAS TELEFONBAU A. SCHWABE GMBH & CO. KG", - [3]byte{0, 80, 221}: "SERRA SOLDADURA, S.A.", - [3]byte{0, 80, 222}: "SIGNUM SYSTEMS CORP.", - [3]byte{0, 80, 223}: "AirFiber, Inc.", - [3]byte{0, 80, 225}: "NS TECH ELECTRONICS SDN BHD", - [3]byte{0, 80, 226}: "Cisco Systems, Inc", - [3]byte{0, 80, 227}: "ARRIS Group, Inc.", - [3]byte{0, 80, 228}: "Apple, Inc.", - [3]byte{0, 80, 230}: "HAKUSAN CORPORATION", - [3]byte{0, 80, 231}: "PARADISE INNOVATIONS (ASIA)", - [3]byte{0, 80, 232}: "NOMADIX INC.", - [3]byte{0, 80, 234}: "XEL COMMUNICATIONS, INC.", - [3]byte{0, 80, 235}: "ALPHA-TOP CORPORATION", - [3]byte{0, 80, 236}: "OLICOM A/S", - [3]byte{0, 80, 237}: "ANDA NETWORKS", - [3]byte{0, 80, 238}: "TEK DIGITEL CORPORATION", - [3]byte{0, 80, 239}: "SPE Systemhaus GmbH", - [3]byte{0, 80, 240}: "Cisco Systems, Inc", - [3]byte{0, 80, 241}: "Intel Corporation", - [3]byte{0, 80, 242}: "MICROSOFT CORP.", - [3]byte{0, 80, 243}: "GLOBAL NET INFORMATION CO., Ltd.", - [3]byte{0, 80, 244}: "SIGMATEK GMBH & CO. KG", - [3]byte{0, 80, 246}: "PAN-INTERNATIONAL INDUSTRIAL CORP.", - [3]byte{0, 80, 247}: "VENTURE MANUFACTURING (SINGAPORE) LTD.", - [3]byte{0, 80, 248}: "ENTREGA TECHNOLOGIES, INC.", - [3]byte{0, 80, 249}: "Sensormatic Electronics LLC", - [3]byte{0, 80, 250}: "OXTEL, LTD.", - [3]byte{0, 80, 251}: "VSK ELECTRONICS", - [3]byte{0, 80, 252}: "Edimax Technology Co. Ltd.", - [3]byte{0, 80, 253}: "VISIONCOMM CO., LTD.", - [3]byte{0, 80, 254}: "PCTVnet ASA", - [3]byte{0, 80, 255}: "HAKKO ELECTRONICS CO., LTD.", - [3]byte{0, 82, 24}: "Wuxi Keboda Electron Co.Ltd", - [3]byte{0, 84, 159}: "Avaya Inc", - [3]byte{0, 84, 175}: "Continental Automotive Systems Inc.", - [3]byte{0, 84, 189}: "Swelaser AB", - [3]byte{0, 85, 218}: "IEEE Registration Authority", - [3]byte{0, 86, 43}: "Cisco Systems, Inc", - [3]byte{0, 86, 205}: "Apple, Inc.", - [3]byte{0, 87, 210}: "Cisco Systems, Inc", - [3]byte{0, 89, 7}: "LenovoEMC Products USA, LLC", - [3]byte{0, 89, 121}: "Networked Energy Services", - [3]byte{0, 89, 172}: "KPN. B.V.", - [3]byte{0, 89, 220}: "Cisco Systems, Inc", - [3]byte{0, 90, 19}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{0, 90, 57}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD", - [3]byte{0, 91, 161}: "shanghai huayuan chuangxin software CO., LTD.", - [3]byte{0, 92, 134}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD", - [3]byte{0, 92, 177}: "Gospell DIGITAL TECHNOLOGY CO., LTD", - [3]byte{0, 93, 3}: "Xilinx, Inc", - [3]byte{0, 93, 115}: "Cisco Systems, Inc", - [3]byte{0, 95, 134}: "Cisco Systems, Inc", - [3]byte{0, 96, 0}: "XYCOM INC.", - [3]byte{0, 96, 1}: "InnoSys, Inc.", - [3]byte{0, 96, 2}: "SCREEN SUBTITLING SYSTEMS, LTD", - [3]byte{0, 96, 3}: "TERAOKA WEIGH SYSTEM PTE, LTD.", - [3]byte{0, 96, 4}: "COMPUTADORES MODULARES SA", - [3]byte{0, 96, 5}: "FEEDBACK DATA LTD.", - [3]byte{0, 96, 6}: "SOTEC CO., LTD", - [3]byte{0, 96, 7}: "ACRES GAMING, INC.", - [3]byte{0, 96, 8}: "3COM CORPORATION", - [3]byte{0, 96, 9}: "Cisco Systems, Inc", - [3]byte{0, 96, 10}: "SORD COMPUTER CORPORATION", - [3]byte{0, 96, 11}: "LOGWARE GmbH", - [3]byte{0, 96, 12}: "Eurotech Inc.", - [3]byte{0, 96, 13}: "Digital Logic GmbH", - [3]byte{0, 96, 14}: "WAVENET INTERNATIONAL, INC.", - [3]byte{0, 96, 15}: "Westell Technologies Inc.", - [3]byte{0, 96, 16}: "NETWORK MACHINES, INC.", - [3]byte{0, 96, 17}: "CRYSTAL SEMICONDUCTOR CORP.", - [3]byte{0, 96, 18}: "POWER COMPUTING CORPORATION", - [3]byte{0, 96, 19}: "NETSTAL MASCHINEN AG", - [3]byte{0, 96, 20}: "EDEC CO., LTD.", - [3]byte{0, 96, 21}: "NET2NET CORPORATION", - [3]byte{0, 96, 22}: "CLARIION", - [3]byte{0, 96, 23}: "TOKIMEC INC.", - [3]byte{0, 96, 24}: "STELLAR ONE CORPORATION", - [3]byte{0, 96, 25}: "Roche Diagnostics", - [3]byte{0, 96, 26}: "KEITHLEY INSTRUMENTS", - [3]byte{0, 96, 27}: "MESA ELECTRONICS", - [3]byte{0, 96, 28}: "TELXON CORPORATION", - [3]byte{0, 96, 29}: "LUCENT TECHNOLOGIES", - [3]byte{0, 96, 30}: "SOFTLAB, INC.", - [3]byte{0, 96, 31}: "STALLION TECHNOLOGIES", - [3]byte{0, 96, 32}: "PIVOTAL NETWORKING, INC.", - [3]byte{0, 96, 33}: "DSC CORPORATION", - [3]byte{0, 96, 34}: "VICOM SYSTEMS, INC.", - [3]byte{0, 96, 35}: "PERICOM SEMICONDUCTOR CORP.", - [3]byte{0, 96, 36}: "GRADIENT TECHNOLOGIES, INC.", - [3]byte{0, 96, 37}: "ACTIVE IMAGING PLC", - [3]byte{0, 96, 38}: "VIKING Modular Solutions", - [3]byte{0, 96, 39}: "Superior Modular Products", - [3]byte{0, 96, 40}: "MACROVISION CORPORATION", - [3]byte{0, 96, 41}: "CARY PERIPHERALS INC.", - [3]byte{0, 96, 42}: "SYMICRON COMPUTER COMMUNICATIONS, LTD.", - [3]byte{0, 96, 43}: "PEAK AUDIO", - [3]byte{0, 96, 44}: "LINX Data Terminals, Inc.", - [3]byte{0, 96, 45}: "ALERTON TECHNOLOGIES, INC.", - [3]byte{0, 96, 46}: "CYCLADES CORPORATION", - [3]byte{0, 96, 47}: "Cisco Systems, Inc", - [3]byte{0, 96, 48}: "VILLAGE TRONIC ENTWICKLUNG", - [3]byte{0, 96, 49}: "HRK SYSTEMS", - [3]byte{0, 96, 50}: "I-CUBE, INC.", - [3]byte{0, 96, 51}: "ACUITY IMAGING, INC.", - [3]byte{0, 96, 52}: "ROBERT BOSCH GmbH", - [3]byte{0, 96, 53}: "DALLAS SEMICONDUCTOR, INC.", - [3]byte{0, 96, 54}: "AIT Austrian Institute of Technology GmbH", - [3]byte{0, 96, 55}: "NXP Semiconductors", - [3]byte{0, 96, 56}: "Nortel Networks", - [3]byte{0, 96, 57}: "SanCom Technology, Inc.", - [3]byte{0, 96, 58}: "QUICK CONTROLS LTD.", - [3]byte{0, 96, 59}: "AMTEC spa", - [3]byte{0, 96, 60}: "HAGIWARA SYS-COM CO., LTD.", - [3]byte{0, 96, 61}: "3CX", - [3]byte{0, 96, 62}: "Cisco Systems, Inc", - [3]byte{0, 96, 63}: "PATAPSCO DESIGNS", - [3]byte{0, 96, 64}: "NETRO CORP.", - [3]byte{0, 96, 65}: "Yokogawa Digital Computer Corporation", - [3]byte{0, 96, 66}: "TKS (USA), INC.", - [3]byte{0, 96, 67}: "iDirect, INC.", - [3]byte{0, 96, 68}: "LITTON/POLY-SCIENTIFIC", - [3]byte{0, 96, 69}: "PATHLIGHT TECHNOLOGIES", - [3]byte{0, 96, 70}: "VMETRO, INC.", - [3]byte{0, 96, 71}: "Cisco Systems, Inc", - [3]byte{0, 96, 72}: "Dell EMC", - [3]byte{0, 96, 73}: "VINA TECHNOLOGIES", - [3]byte{0, 96, 74}: "SAIC IDEAS GROUP", - [3]byte{0, 96, 75}: "Safe-com GmbH & Co. KG", - [3]byte{0, 96, 76}: "Sagemcom Broadband SAS", - [3]byte{0, 96, 77}: "MMC NETWORKS, INC.", - [3]byte{0, 96, 78}: "CYCLE COMPUTER CORPORATION, INC.", - [3]byte{0, 96, 79}: "Tattile SRL", - [3]byte{0, 96, 80}: "INTERNIX INC.", - [3]byte{0, 96, 81}: "QUALITY SEMICONDUCTOR", - [3]byte{0, 96, 82}: "PERIPHERALS ENTERPRISE CO., Ltd.", - [3]byte{0, 96, 83}: "TOYODA MACHINE WORKS, LTD.", - [3]byte{0, 96, 84}: "CONTROLWARE GMBH", - [3]byte{0, 96, 85}: "CORNELL UNIVERSITY", - [3]byte{0, 96, 86}: "NETWORK TOOLS, INC.", - [3]byte{0, 96, 87}: "Murata Manufacturing Co., Ltd.", - [3]byte{0, 96, 88}: "COPPER MOUNTAIN COMMUNICATIONS, INC.", - [3]byte{0, 96, 89}: "TECHNICAL COMMUNICATIONS CORP.", - [3]byte{0, 96, 90}: "CELCORE, INC.", - [3]byte{0, 96, 91}: "IntraServer Technology, Inc.", - [3]byte{0, 96, 92}: "Cisco Systems, Inc", - [3]byte{0, 96, 93}: "SCANIVALVE CORP.", - [3]byte{0, 96, 94}: "LIBERTY TECHNOLOGY NETWORKING", - [3]byte{0, 96, 95}: "NIPPON UNISOFT CORPORATION", - [3]byte{0, 96, 96}: "Data Innovations North America", - [3]byte{0, 96, 97}: "WHISTLE COMMUNICATIONS CORP.", - [3]byte{0, 96, 98}: "TELESYNC, INC.", - [3]byte{0, 96, 99}: "PSION DACOM PLC.", - [3]byte{0, 96, 100}: "NETCOMM LIMITED", - [3]byte{0, 96, 101}: "BERNECKER & RAINER INDUSTRIE-ELEKTRONIC GmbH", - [3]byte{0, 96, 102}: "LACROIX Trafic", - [3]byte{0, 96, 103}: "ACER NETXUS INC.", - [3]byte{0, 96, 104}: "Dialogic Corporation", - [3]byte{0, 96, 105}: "Brocade Communications Systems, Inc.", - [3]byte{0, 96, 106}: "MITSUBISHI WIRELESS COMMUNICATIONS. INC.", - [3]byte{0, 96, 107}: "Synclayer Inc.", - [3]byte{0, 96, 108}: "ARESCOM", - [3]byte{0, 96, 109}: "DIGITAL EQUIPMENT CORP.", - [3]byte{0, 96, 110}: "DAVICOM SEMICONDUCTOR, INC.", - [3]byte{0, 96, 111}: "CLARION CORPORATION OF AMERICA", - [3]byte{0, 96, 112}: "Cisco Systems, Inc", - [3]byte{0, 96, 113}: "MIDAS LAB, INC.", - [3]byte{0, 96, 114}: "VXL INSTRUMENTS, LIMITED", - [3]byte{0, 96, 115}: "REDCREEK COMMUNICATIONS, INC.", - [3]byte{0, 96, 116}: "QSC LLC", - [3]byte{0, 96, 117}: "PENTEK, INC.", - [3]byte{0, 96, 118}: "SCHLUMBERGER TECHNOLOGIES RETAIL PETROLEUM SYSTEMS", - [3]byte{0, 96, 119}: "PRISA NETWORKS", - [3]byte{0, 96, 120}: "POWER MEASUREMENT LTD.", - [3]byte{0, 96, 121}: "Mainstream Data, Inc.", - [3]byte{0, 96, 122}: "DVS GMBH", - [3]byte{0, 96, 123}: "FORE SYSTEMS, INC.", - [3]byte{0, 96, 124}: "WaveAccess, Ltd.", - [3]byte{0, 96, 125}: "SENTIENT NETWORKS INC.", - [3]byte{0, 96, 126}: "GIGALABS, INC.", - [3]byte{0, 96, 127}: "AURORA TECHNOLOGIES, INC.", - [3]byte{0, 96, 128}: "MICROTRONIX DATACOM LTD.", - [3]byte{0, 96, 129}: "TV/COM INTERNATIONAL", - [3]byte{0, 96, 130}: "NOVALINK TECHNOLOGIES, INC.", - [3]byte{0, 96, 131}: "Cisco Systems, Inc", - [3]byte{0, 96, 132}: "DIGITAL VIDEO", - [3]byte{0, 96, 133}: "Storage Concepts", - [3]byte{0, 96, 134}: "LOGIC REPLACEMENT TECH. LTD.", - [3]byte{0, 96, 135}: "KANSAI ELECTRIC CO., LTD.", - [3]byte{0, 96, 136}: "Analog Devices, Inc.", - [3]byte{0, 96, 137}: "XATA", - [3]byte{0, 96, 138}: "CITADEL COMPUTER", - [3]byte{0, 96, 139}: "ConferTech International", - [3]byte{0, 96, 140}: "3COM CORPORATION", - [3]byte{0, 96, 141}: "UNIPULSE CORP.", - [3]byte{0, 96, 142}: "HE ELECTRONICS, TECHNOLOGIE & SYSTEMTECHNIK GmbH", - [3]byte{0, 96, 143}: "TEKRAM TECHNOLOGY CO., LTD.", - [3]byte{0, 96, 144}: "Artiza Networks Inc", - [3]byte{0, 96, 145}: "FIRST PACIFIC NETWORKS, INC.", - [3]byte{0, 96, 146}: "MICRO/SYS, INC.", - [3]byte{0, 96, 147}: "VARIAN", - [3]byte{0, 96, 148}: "IBM Corp", - [3]byte{0, 96, 149}: "ACCU-TIME SYSTEMS, INC.", - [3]byte{0, 96, 150}: "T.S. MICROTECH INC.", - [3]byte{0, 96, 151}: "3COM CORPORATION", - [3]byte{0, 96, 152}: "HT COMMUNICATIONS", - [3]byte{0, 96, 153}: "SBE, Inc.", - [3]byte{0, 96, 154}: "NJK TECHNO CO.", - [3]byte{0, 96, 155}: "AstroNova, Inc", - [3]byte{0, 96, 156}: "Perkin-Elmer Incorporated", - [3]byte{0, 96, 157}: "PMI FOOD EQUIPMENT GROUP", - [3]byte{0, 96, 158}: "ASC X3 - INFORMATION TECHNOLOGY STANDARDS SECRETARIATS", - [3]byte{0, 96, 159}: "PHAST CORPORATION", - [3]byte{0, 96, 160}: "SWITCHED NETWORK TECHNOLOGIES, INC.", - [3]byte{0, 96, 161}: "VPNet, Inc.", - [3]byte{0, 96, 162}: "NIHON UNISYS LIMITED CO.", - [3]byte{0, 96, 163}: "CONTINUUM TECHNOLOGY CORP.", - [3]byte{0, 96, 164}: "GEW Technologies (PTY)Ltd", - [3]byte{0, 96, 165}: "PERFORMANCE TELECOM CORP.", - [3]byte{0, 96, 166}: "PARTICLE MEASURING SYSTEMS", - [3]byte{0, 96, 167}: "MICROSENS GmbH & CO. KG", - [3]byte{0, 96, 168}: "TIDOMAT AB", - [3]byte{0, 96, 169}: "GESYTEC MBH", - [3]byte{0, 96, 170}: "INTELLIGENT DEVICES INC. (IDI)", - [3]byte{0, 96, 171}: "LARSCOM INCORPORATED", - [3]byte{0, 96, 172}: "RESILIENCE CORPORATION", - [3]byte{0, 96, 173}: "MegaChips Corporation", - [3]byte{0, 96, 174}: "TRIO INFORMATION SYSTEMS AB", - [3]byte{0, 96, 175}: "PACIFIC MICRO DATA, INC.", - [3]byte{0, 96, 176}: "Hewlett Packard", - [3]byte{0, 96, 177}: "Input/Output, Inc.", - [3]byte{0, 96, 178}: "PROCESS CONTROL CORP.", - [3]byte{0, 96, 179}: "Z-COM, INC.", - [3]byte{0, 96, 180}: "GLENAYRE R&D INC.", - [3]byte{0, 96, 181}: "KEBA GmbH", - [3]byte{0, 96, 182}: "LAND COMPUTER CO., LTD.", - [3]byte{0, 96, 183}: "CHANNELMATIC, INC.", - [3]byte{0, 96, 184}: "CORELIS Inc.", - [3]byte{0, 96, 185}: "NEC Platforms, Ltd", - [3]byte{0, 96, 186}: "SAHARA NETWORKS, INC.", - [3]byte{0, 96, 187}: "Cabletron Systems, Inc.", - [3]byte{0, 96, 188}: "KeunYoung Electronics & Communication Co., Ltd.", - [3]byte{0, 96, 189}: "Enginuity Communications", - [3]byte{0, 96, 190}: "WEBTRONICS", - [3]byte{0, 96, 191}: "MACRAIGOR SYSTEMS, INC.", - [3]byte{0, 96, 192}: "Nera Networks AS", - [3]byte{0, 96, 193}: "WaveSpan Corporation", - [3]byte{0, 96, 194}: "MPL AG", - [3]byte{0, 96, 195}: "NETVISION CORPORATION", - [3]byte{0, 96, 196}: "SOLITON SYSTEMS K.K.", - [3]byte{0, 96, 197}: "ANCOT CORP.", - [3]byte{0, 96, 198}: "DCS AG", - [3]byte{0, 96, 199}: "AMATI COMMUNICATIONS CORP.", - [3]byte{0, 96, 200}: "KUKA WELDING SYSTEMS & ROBOTS", - [3]byte{0, 96, 201}: "ControlNet, Inc.", - [3]byte{0, 96, 202}: "HARMONIC SYSTEMS INCORPORATED", - [3]byte{0, 96, 203}: "HITACHI ZOSEN CORPORATION", - [3]byte{0, 96, 204}: "EMTRAK, INCORPORATED", - [3]byte{0, 96, 205}: "VideoServer, Inc.", - [3]byte{0, 96, 206}: "ACCLAIM COMMUNICATIONS", - [3]byte{0, 96, 207}: "ALTEON NETWORKS, INC.", - [3]byte{0, 96, 208}: "SNMP RESEARCH INCORPORATED", - [3]byte{0, 96, 209}: "CASCADE COMMUNICATIONS", - [3]byte{0, 96, 210}: "LUCENT TECHNOLOGIES TAIWAN TELECOMMUNICATIONS CO., LTD.", - [3]byte{0, 96, 211}: "AT&T", - [3]byte{0, 96, 212}: "ELDAT COMMUNICATION LTD.", - [3]byte{0, 96, 213}: "AMADA MIYACHI Co., Ltd", - [3]byte{0, 96, 214}: "NovAtel Inc.", - [3]byte{0, 96, 215}: "ECOLE POLYTECHNIQUE FEDERALE DE LAUSANNE (EPFL)", - [3]byte{0, 96, 216}: "ELMIC SYSTEMS, INC.", - [3]byte{0, 96, 217}: "TRANSYS NETWORKS INC.", - [3]byte{0, 96, 218}: "Red Lion Controls, LP", - [3]byte{0, 96, 219}: "NTP ELEKTRONIK A/S", - [3]byte{0, 96, 220}: "NEC Magnus Communications,Ltd.", - [3]byte{0, 96, 221}: "MYRICOM, INC.", - [3]byte{0, 96, 222}: "Kayser-Threde GmbH", - [3]byte{0, 96, 223}: "Brocade Communications Systems, Inc.", - [3]byte{0, 96, 224}: "AXIOM TECHNOLOGY CO., LTD.", - [3]byte{0, 96, 225}: "ORCKIT COMMUNICATIONS LTD.", - [3]byte{0, 96, 226}: "QUEST ENGINEERING & DEVELOPMENT", - [3]byte{0, 96, 227}: "ARBIN INSTRUMENTS", - [3]byte{0, 96, 228}: "COMPUSERVE, INC.", - [3]byte{0, 96, 229}: "FUJI AUTOMATION CO., LTD.", - [3]byte{0, 96, 230}: "SHOMITI SYSTEMS INCORPORATED", - [3]byte{0, 96, 231}: "RANDATA", - [3]byte{0, 96, 232}: "HITACHI COMPUTER PRODUCTS (AMERICA), INC.", - [3]byte{0, 96, 233}: "ATOP TECHNOLOGIES, INC.", - [3]byte{0, 96, 234}: "StreamLogic", - [3]byte{0, 96, 235}: "FOURTHTRACK SYSTEMS", - [3]byte{0, 96, 236}: "HERMARY OPTO ELECTRONICS INC.", - [3]byte{0, 96, 237}: "RICARDO TEST AUTOMATION LTD.", - [3]byte{0, 96, 238}: "APOLLO", - [3]byte{0, 96, 239}: "FLYTECH TECHNOLOGY CO., LTD.", - [3]byte{0, 96, 240}: "JOHNSON & JOHNSON MEDICAL, INC", - [3]byte{0, 96, 241}: "EXP COMPUTER, INC.", - [3]byte{0, 96, 242}: "LASERGRAPHICS, INC.", - [3]byte{0, 96, 243}: "Performance Analysis Broadband, Spirent plc", - [3]byte{0, 96, 244}: "ADVANCED COMPUTER SOLUTIONS, Inc.", - [3]byte{0, 96, 245}: "ICON WEST, INC.", - [3]byte{0, 96, 246}: "NEXTEST COMMUNICATIONS PRODUCTS, INC.", - [3]byte{0, 96, 247}: "DATAFUSION SYSTEMS", - [3]byte{0, 96, 248}: "Loran International Technologies Inc.", - [3]byte{0, 96, 249}: "DIAMOND LANE COMMUNICATIONS", - [3]byte{0, 96, 250}: "EDUCATIONAL TECHNOLOGY RESOURCES, INC.", - [3]byte{0, 96, 251}: "PACKETEER, INC.", - [3]byte{0, 96, 252}: "CONSERVATION THROUGH INNOVATION LTD.", - [3]byte{0, 96, 253}: "NetICs, Inc.", - [3]byte{0, 96, 254}: "LYNX SYSTEM DEVELOPERS, INC.", - [3]byte{0, 96, 255}: "QuVis, Inc.", - [3]byte{0, 97, 113}: "Apple, Inc.", - [3]byte{0, 98, 236}: "Cisco Systems, Inc", - [3]byte{0, 100, 64}: "Cisco Systems, Inc", - [3]byte{0, 100, 166}: "Maquet CardioVascular", - [3]byte{0, 102, 75}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{0, 107, 142}: "Shanghai Feixun Communication Co.,Ltd.", - [3]byte{0, 107, 158}: "Vizio, Inc", - [3]byte{0, 107, 160}: "SHENZHEN UNIVERSAL INTELLISYS PTE LTD", - [3]byte{0, 107, 241}: "Cisco Systems, Inc", - [3]byte{0, 108, 188}: "Cisco Systems, Inc", - [3]byte{0, 108, 253}: "Sichuan Changhong Electric Ltd.", - [3]byte{0, 109, 82}: "Apple, Inc.", - [3]byte{0, 109, 251}: "Vutrix Technologies Ltd", - [3]byte{0, 111, 100}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 112, 176}: "M/A-COM INC. COMPANIES", - [3]byte{0, 112, 179}: "DATA RECALL LTD.", - [3]byte{0, 113, 194}: "PEGATRON CORPORATION", - [3]byte{0, 113, 204}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{0, 114, 99}: "Netcore Technology Inc.", - [3]byte{0, 115, 141}: "Shenzhen TINNO Mobile Technology Corp.", - [3]byte{0, 115, 224}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 116, 156}: "Ruijie Networks Co.,LTD", - [3]byte{0, 117, 50}: "INID BV", - [3]byte{0, 117, 225}: "Ampt, LLC", - [3]byte{0, 118, 134}: "Cisco Systems, Inc", - [3]byte{0, 118, 177}: "Somfy-Protect By Myfox SAS", - [3]byte{0, 120, 136}: "Cisco Systems, Inc", - [3]byte{0, 120, 158}: "Sagemcom Broadband SAS", - [3]byte{0, 120, 205}: "Ignition Design Labs", - [3]byte{0, 123, 24}: "SENTRY Co., LTD.", - [3]byte{0, 125, 250}: "Volkswagen Group of America", - [3]byte{0, 126, 86}: "China Dragon Technology Limited", - [3]byte{0, 127, 40}: "Actiontec Electronics, Inc", - [3]byte{0, 128, 0}: "MULTITECH SYSTEMS, INC.", - [3]byte{0, 128, 1}: "PERIPHONICS CORPORATION", - [3]byte{0, 128, 2}: "SATELCOM (UK) LTD", - [3]byte{0, 128, 3}: "HYTEC ELECTRONICS LTD.", - [3]byte{0, 128, 4}: "ANTLOW COMMUNICATIONS, LTD.", - [3]byte{0, 128, 5}: "CACTUS COMPUTER INC.", - [3]byte{0, 128, 6}: "COMPUADD CORPORATION", - [3]byte{0, 128, 7}: "DLOG NC-SYSTEME", - [3]byte{0, 128, 8}: "DYNATECH COMPUTER SYSTEMS", - [3]byte{0, 128, 9}: "JUPITER SYSTEMS, INC.", - [3]byte{0, 128, 10}: "JAPAN COMPUTER CORP.", - [3]byte{0, 128, 11}: "CSK CORPORATION", - [3]byte{0, 128, 12}: "VIDECOM LIMITED", - [3]byte{0, 128, 13}: "VOSSWINKEL F.U.", - [3]byte{0, 128, 14}: "ATLANTIX CORPORATION", - [3]byte{0, 128, 15}: "STANDARD MICROSYSTEMS", - [3]byte{0, 128, 16}: "COMMODORE INTERNATIONAL", - [3]byte{0, 128, 17}: "DIGITAL SYSTEMS INT'L. INC.", - [3]byte{0, 128, 18}: "INTEGRATED MEASUREMENT SYSTEMS", - [3]byte{0, 128, 19}: "THOMAS-CONRAD CORPORATION", - [3]byte{0, 128, 20}: "ESPRIT SYSTEMS", - [3]byte{0, 128, 21}: "SEIKO SYSTEMS, INC.", - [3]byte{0, 128, 22}: "WANDEL AND GOLTERMANN", - [3]byte{0, 128, 23}: "PFU LIMITED", - [3]byte{0, 128, 24}: "KOBE STEEL, LTD.", - [3]byte{0, 128, 25}: "DAYNA COMMUNICATIONS, INC.", - [3]byte{0, 128, 26}: "BELL ATLANTIC", - [3]byte{0, 128, 27}: "KODIAK TECHNOLOGY", - [3]byte{0, 128, 28}: "NEWPORT SYSTEMS SOLUTIONS", - [3]byte{0, 128, 29}: "INTEGRATED INFERENCE MACHINES", - [3]byte{0, 128, 30}: "XINETRON, INC.", - [3]byte{0, 128, 31}: "KRUPP ATLAS ELECTRONIK GMBH", - [3]byte{0, 128, 32}: "NETWORK PRODUCTS", - [3]byte{0, 128, 33}: "Alcatel Canada Inc.", - [3]byte{0, 128, 34}: "SCAN-OPTICS", - [3]byte{0, 128, 35}: "INTEGRATED BUSINESS NETWORKS", - [3]byte{0, 128, 36}: "KALPANA, INC.", - [3]byte{0, 128, 37}: "Telit Wireless Solutions GmbH", - [3]byte{0, 128, 38}: "NETWORK PRODUCTS CORPORATION", - [3]byte{0, 128, 39}: "ADAPTIVE SYSTEMS, INC.", - [3]byte{0, 128, 40}: "TRADPOST (HK) LTD", - [3]byte{0, 128, 41}: "EAGLE TECHNOLOGY, INC.", - [3]byte{0, 128, 42}: "TEST SYSTEMS & SIMULATIONS INC", - [3]byte{0, 128, 43}: "INTEGRATED MARKETING CO", - [3]byte{0, 128, 44}: "THE SAGE GROUP PLC", - [3]byte{0, 128, 45}: "XYLOGICS INC", - [3]byte{0, 128, 46}: "CASTLE ROCK COMPUTING", - [3]byte{0, 128, 47}: "NATIONAL INSTRUMENTS CORP.", - [3]byte{0, 128, 48}: "NEXUS ELECTRONICS", - [3]byte{0, 128, 49}: "BASYS, CORP.", - [3]byte{0, 128, 50}: "ACCESS CO., LTD.", - [3]byte{0, 128, 51}: "EMS Aviation, Inc.", - [3]byte{0, 128, 52}: "SMT GOUPIL", - [3]byte{0, 128, 53}: "TECHNOLOGY WORKS, INC.", - [3]byte{0, 128, 54}: "REFLEX MANUFACTURING SYSTEMS", - [3]byte{0, 128, 55}: "Ericsson Group", - [3]byte{0, 128, 56}: "DATA RESEARCH & APPLICATIONS", - [3]byte{0, 128, 57}: "ALCATEL STC AUSTRALIA", - [3]byte{0, 128, 58}: "VARITYPER, INC.", - [3]byte{0, 128, 59}: "APT COMMUNICATIONS, INC.", - [3]byte{0, 128, 60}: "TVS ELECTRONICS LTD", - [3]byte{0, 128, 61}: "SURIGIKEN CO., LTD.", - [3]byte{0, 128, 62}: "SYNERNETICS", - [3]byte{0, 128, 63}: "TATUNG COMPANY", - [3]byte{0, 128, 64}: "JOHN FLUKE MANUFACTURING CO.", - [3]byte{0, 128, 65}: "VEB KOMBINAT ROBOTRON", - [3]byte{0, 128, 66}: "Artesyn Embedded Technologies", - [3]byte{0, 128, 67}: "NETWORLD, INC.", - [3]byte{0, 128, 68}: "SYSTECH COMPUTER CORP.", - [3]byte{0, 128, 69}: "MATSUSHITA ELECTRIC IND. CO", - [3]byte{0, 128, 70}: "Tattile SRL", - [3]byte{0, 128, 71}: "IN-NET CORP.", - [3]byte{0, 128, 72}: "COMPEX INCORPORATED", - [3]byte{0, 128, 73}: "NISSIN ELECTRIC CO., LTD.", - [3]byte{0, 128, 74}: "PRO-LOG", - [3]byte{0, 128, 75}: "EAGLE TECHNOLOGIES PTY.LTD.", - [3]byte{0, 128, 76}: "CONTEC CO., LTD.", - [3]byte{0, 128, 77}: "CYCLONE MICROSYSTEMS, INC.", - [3]byte{0, 128, 78}: "APEX COMPUTER COMPANY", - [3]byte{0, 128, 79}: "DAIKIN INDUSTRIES, LTD.", - [3]byte{0, 128, 80}: "ZIATECH CORPORATION", - [3]byte{0, 128, 81}: "FIBERMUX", - [3]byte{0, 128, 82}: "TECHNICALLY ELITE CONCEPTS", - [3]byte{0, 128, 83}: "INTELLICOM, INC.", - [3]byte{0, 128, 84}: "FRONTIER TECHNOLOGIES CORP.", - [3]byte{0, 128, 85}: "FERMILAB", - [3]byte{0, 128, 86}: "SPHINX Electronics GmbH & Co KG", - [3]byte{0, 128, 87}: "ADSOFT, LTD.", - [3]byte{0, 128, 88}: "PRINTER SYSTEMS CORP.", - [3]byte{0, 128, 89}: "STANLEY ELECTRIC CO., LTD", - [3]byte{0, 128, 90}: "TULIP COMPUTERS INTERNAT'L B.V", - [3]byte{0, 128, 91}: "CONDOR SYSTEMS, INC.", - [3]byte{0, 128, 92}: "AGILIS CORPORATION", - [3]byte{0, 128, 93}: "CANSTAR", - [3]byte{0, 128, 94}: "LSI LOGIC CORPORATION", - [3]byte{0, 128, 95}: "Hewlett Packard", - [3]byte{0, 128, 96}: "NETWORK INTERFACE CORPORATION", - [3]byte{0, 128, 97}: "LITTON SYSTEMS, INC.", - [3]byte{0, 128, 98}: "INTERFACE CO.", - [3]byte{0, 128, 99}: "Hirschmann Automation and Control GmbH", - [3]byte{0, 128, 100}: "WYSE TECHNOLOGY LLC", - [3]byte{0, 128, 101}: "CYBERGRAPHIC SYSTEMS PTY LTD.", - [3]byte{0, 128, 102}: "ARCOM CONTROL SYSTEMS, LTD.", - [3]byte{0, 128, 103}: "SQUARE D COMPANY", - [3]byte{0, 128, 104}: "YAMATECH SCIENTIFIC LTD.", - [3]byte{0, 128, 105}: "COMPUTONE SYSTEMS", - [3]byte{0, 128, 106}: "ERI (EMPAC RESEARCH INC.)", - [3]byte{0, 128, 107}: "SCHMID TELECOMMUNICATION", - [3]byte{0, 128, 108}: "Secure Systems & Services", - [3]byte{0, 128, 109}: "CENTURY SYSTEMS CORP.", - [3]byte{0, 128, 110}: "NIPPON STEEL CORPORATION", - [3]byte{0, 128, 111}: "ONELAN LTD.", - [3]byte{0, 128, 112}: "COMPUTADORAS MICRON", - [3]byte{0, 128, 113}: "SAI TECHNOLOGY", - [3]byte{0, 128, 114}: "MICROPLEX SYSTEMS LTD.", - [3]byte{0, 128, 115}: "DWB ASSOCIATES", - [3]byte{0, 128, 116}: "FISHER CONTROLS", - [3]byte{0, 128, 117}: "PARSYTEC GMBH", - [3]byte{0, 128, 118}: "MCNC", - [3]byte{0, 128, 119}: "Brother industries, LTD.", - [3]byte{0, 128, 120}: "PRACTICAL PERIPHERALS, INC.", - [3]byte{0, 128, 121}: "MICROBUS DESIGNS LTD.", - [3]byte{0, 128, 122}: "AITECH SYSTEMS LTD.", - [3]byte{0, 128, 123}: "ARTEL COMMUNICATIONS CORP.", - [3]byte{0, 128, 124}: "FIBERCOM, INC.", - [3]byte{0, 128, 125}: "EQUINOX SYSTEMS INC.", - [3]byte{0, 128, 126}: "SOUTHERN PACIFIC LTD.", - [3]byte{0, 128, 127}: "DY-4 INCORPORATED", - [3]byte{0, 128, 128}: "DATAMEDIA CORPORATION", - [3]byte{0, 128, 129}: "KENDALL SQUARE RESEARCH CORP.", - [3]byte{0, 128, 130}: "PEP MODULAR COMPUTERS GMBH", - [3]byte{0, 128, 131}: "AMDAHL", - [3]byte{0, 128, 132}: "THE CLOUD INC.", - [3]byte{0, 128, 133}: "H-THREE SYSTEMS CORPORATION", - [3]byte{0, 128, 134}: "COMPUTER GENERATION INC.", - [3]byte{0, 128, 135}: "OKI ELECTRIC INDUSTRY CO., LTD", - [3]byte{0, 128, 136}: "VICTOR COMPANY OF JAPAN, LTD.", - [3]byte{0, 128, 137}: "TECNETICS (PTY) LTD.", - [3]byte{0, 128, 138}: "SUMMIT MICROSYSTEMS CORP.", - [3]byte{0, 128, 139}: "DACOLL LIMITED", - [3]byte{0, 128, 140}: "NetScout Systems, Inc.", - [3]byte{0, 128, 141}: "WESTCOAST TECHNOLOGY B.V.", - [3]byte{0, 128, 142}: "RADSTONE TECHNOLOGY", - [3]byte{0, 128, 143}: "C. ITOH ELECTRONICS, INC.", - [3]byte{0, 128, 144}: "MICROTEK INTERNATIONAL, INC.", - [3]byte{0, 128, 145}: "TOKYO ELECTRIC CO.,LTD", - [3]byte{0, 128, 146}: "Silex Technology, Inc.", - [3]byte{0, 128, 147}: "XYRON CORPORATION", - [3]byte{0, 128, 148}: "ALFA LAVAL AUTOMATION AB", - [3]byte{0, 128, 149}: "BASIC MERTON HANDELSGES.M.B.H.", - [3]byte{0, 128, 150}: "HUMAN DESIGNED SYSTEMS, INC.", - [3]byte{0, 128, 151}: "CENTRALP AUTOMATISMES", - [3]byte{0, 128, 152}: "TDK CORPORATION", - [3]byte{0, 128, 153}: "Eaton Industries GmbH", - [3]byte{0, 128, 154}: "NOVUS NETWORKS LTD", - [3]byte{0, 128, 155}: "JUSTSYSTEM CORPORATION", - [3]byte{0, 128, 156}: "LUXCOM, INC.", - [3]byte{0, 128, 157}: "Commscraft Ltd.", - [3]byte{0, 128, 158}: "DATUS GMBH", - [3]byte{0, 128, 159}: "ALE International", - [3]byte{0, 128, 160}: "Hewlett Packard", - [3]byte{0, 128, 161}: "MICROTEST, INC.", - [3]byte{0, 128, 162}: "CREATIVE ELECTRONIC SYSTEMS", - [3]byte{0, 128, 163}: "Lantronix", - [3]byte{0, 128, 164}: "LIBERTY ELECTRONICS", - [3]byte{0, 128, 165}: "SPEED INTERNATIONAL", - [3]byte{0, 128, 166}: "REPUBLIC TECHNOLOGY, INC.", - [3]byte{0, 128, 167}: "Honeywell International Inc", - [3]byte{0, 128, 168}: "VITACOM CORPORATION", - [3]byte{0, 128, 169}: "CLEARPOINT RESEARCH", - [3]byte{0, 128, 170}: "MAXPEED", - [3]byte{0, 128, 171}: "DUKANE NETWORK INTEGRATION", - [3]byte{0, 128, 172}: "IMLOGIX, DIVISION OF GENESYS", - [3]byte{0, 128, 173}: "CNET TECHNOLOGY, INC.", - [3]byte{0, 128, 174}: "HUGHES NETWORK SYSTEMS", - [3]byte{0, 128, 175}: "ALLUMER CO., LTD.", - [3]byte{0, 128, 176}: "ADVANCED INFORMATION", - [3]byte{0, 128, 177}: "SOFTCOM A/S", - [3]byte{0, 128, 178}: "NETWORK EQUIPMENT TECHNOLOGIES", - [3]byte{0, 128, 179}: "AVAL DATA CORPORATION", - [3]byte{0, 128, 180}: "SOPHIA SYSTEMS", - [3]byte{0, 128, 181}: "UNITED NETWORKS INC.", - [3]byte{0, 128, 182}: "THEMIS COMPUTER", - [3]byte{0, 128, 183}: "STELLAR COMPUTER", - [3]byte{0, 128, 184}: "DMG MORI B.U.G. CO., LTD.", - [3]byte{0, 128, 185}: "ARCHE TECHNOLIGIES INC.", - [3]byte{0, 128, 186}: "SPECIALIX (ASIA) PTE, LTD", - [3]byte{0, 128, 187}: "HUGHES LAN SYSTEMS", - [3]byte{0, 128, 188}: "HITACHI ENGINEERING CO., LTD", - [3]byte{0, 128, 189}: "THE FURUKAWA ELECTRIC CO., LTD", - [3]byte{0, 128, 190}: "ARIES RESEARCH", - [3]byte{0, 128, 191}: "TAKAOKA ELECTRIC MFG. CO. LTD.", - [3]byte{0, 128, 192}: "PENRIL DATACOMM", - [3]byte{0, 128, 193}: "LANEX CORPORATION", - [3]byte{0, 128, 194}: "IEEE 802.1 Working Group", - [3]byte{0, 128, 195}: "BICC INFORMATION SYSTEMS & SVC", - [3]byte{0, 128, 196}: "DOCUMENT TECHNOLOGIES, INC.", - [3]byte{0, 128, 197}: "NOVELLCO DE MEXICO", - [3]byte{0, 128, 198}: "NATIONAL DATACOMM CORPORATION", - [3]byte{0, 128, 199}: "XIRCOM", - [3]byte{0, 128, 200}: "D-LINK SYSTEMS, INC.", - [3]byte{0, 128, 201}: "ALBERTA MICROELECTRONIC CENTRE", - [3]byte{0, 128, 202}: "NETCOM RESEARCH INCORPORATED", - [3]byte{0, 128, 203}: "FALCO DATA PRODUCTS", - [3]byte{0, 128, 204}: "MICROWAVE BYPASS SYSTEMS", - [3]byte{0, 128, 205}: "MICRONICS COMPUTER, INC.", - [3]byte{0, 128, 206}: "BROADCAST TELEVISION SYSTEMS", - [3]byte{0, 128, 207}: "EMBEDDED PERFORMANCE INC.", - [3]byte{0, 128, 208}: "COMPUTER PERIPHERALS, INC.", - [3]byte{0, 128, 209}: "KIMTRON CORPORATION", - [3]byte{0, 128, 210}: "SHINNIHONDENKO CO., LTD.", - [3]byte{0, 128, 211}: "SHIVA CORP.", - [3]byte{0, 128, 212}: "CHASE RESEARCH LTD.", - [3]byte{0, 128, 213}: "CADRE TECHNOLOGIES", - [3]byte{0, 128, 214}: "NUVOTECH, INC.", - [3]byte{0, 128, 215}: "Fantum Engineering", - [3]byte{0, 128, 216}: "NETWORK PERIPHERALS INC.", - [3]byte{0, 128, 217}: "EMK Elektronik GmbH & Co. KG", - [3]byte{0, 128, 218}: "Bruel & Kjaer Sound & Vibration Measurement A/S", - [3]byte{0, 128, 219}: "GRAPHON CORPORATION", - [3]byte{0, 128, 220}: "PICKER INTERNATIONAL", - [3]byte{0, 128, 221}: "GMX INC/GIMIX", - [3]byte{0, 128, 222}: "GIPSI S.A.", - [3]byte{0, 128, 223}: "ADC CODENOLL TECHNOLOGY CORP.", - [3]byte{0, 128, 224}: "XTP SYSTEMS, INC.", - [3]byte{0, 128, 225}: "STMicroelectronics SRL", - [3]byte{0, 128, 226}: "T.D.I. CO., LTD.", - [3]byte{0, 128, 227}: "CORAL NETWORK CORPORATION", - [3]byte{0, 128, 228}: "NORTHWEST DIGITAL SYSTEMS, INC", - [3]byte{0, 128, 229}: "NetApp", - [3]byte{0, 128, 230}: "PEER NETWORKS, INC.", - [3]byte{0, 128, 231}: "Leonardo Tactical Systems.", - [3]byte{0, 128, 232}: "CUMULUS CORPORATIION", - [3]byte{0, 128, 233}: "Madge Ltd.", - [3]byte{0, 128, 234}: "ADVA Optical Networking Ltd.", - [3]byte{0, 128, 235}: "COMPCONTROL B.V.", - [3]byte{0, 128, 236}: "SUPERCOMPUTING SOLUTIONS, INC.", - [3]byte{0, 128, 237}: "IQ TECHNOLOGIES, INC.", - [3]byte{0, 128, 238}: "THOMSON CSF", - [3]byte{0, 128, 239}: "RATIONAL", - [3]byte{0, 128, 240}: "Panasonic Communications Co., Ltd.", - [3]byte{0, 128, 241}: "OPUS SYSTEMS", - [3]byte{0, 128, 242}: "RAYCOM SYSTEMS INC", - [3]byte{0, 128, 243}: "SUN ELECTRONICS CORP.", - [3]byte{0, 128, 244}: "TELEMECANIQUE ELECTRIQUE", - [3]byte{0, 128, 245}: "Quantel Ltd", - [3]byte{0, 128, 246}: "SYNERGY MICROSYSTEMS", - [3]byte{0, 128, 247}: "Zenith Electronics Corporation", - [3]byte{0, 128, 248}: "MIZAR, INC.", - [3]byte{0, 128, 249}: "HEURIKON CORPORATION", - [3]byte{0, 128, 250}: "RWT GMBH", - [3]byte{0, 128, 251}: "BVM LIMITED", - [3]byte{0, 128, 252}: "AVATAR CORPORATION", - [3]byte{0, 128, 253}: "EXSCEED CORPRATION", - [3]byte{0, 128, 254}: "AZURE TECHNOLOGIES, INC.", - [3]byte{0, 128, 255}: "SOC. DE TELEINFORMATIQUE RTC", - [3]byte{0, 129, 196}: "Cisco Systems, Inc", - [3]byte{0, 129, 249}: "Texas Instruments", - [3]byte{0, 132, 237}: "Private", - [3]byte{0, 134, 156}: "Palo Alto Networks", - [3]byte{0, 134, 160}: "Private", - [3]byte{0, 135, 1}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 135, 49}: "Cisco Systems, Inc", - [3]byte{0, 136, 101}: "Apple, Inc.", - [3]byte{0, 138, 150}: "Cisco Systems, Inc", - [3]byte{0, 139, 67}: "RFTECH", - [3]byte{0, 139, 252}: "mixi,Inc.", - [3]byte{0, 140, 16}: "Black Box Corp.", - [3]byte{0, 140, 84}: "ADB Broadband Italia", - [3]byte{0, 140, 250}: "INVENTEC Corporation", - [3]byte{0, 141, 78}: "CJSC NII STT", - [3]byte{0, 141, 218}: "Link One Co., Ltd.", - [3]byte{0, 142, 115}: "Cisco Systems, Inc", - [3]byte{0, 142, 242}: "NETGEAR", - [3]byte{0, 144, 0}: "DIAMOND MULTIMEDIA", - [3]byte{0, 144, 1}: "NISHIMU ELECTRONICS INDUSTRIES CO., LTD.", - [3]byte{0, 144, 2}: "ALLGON AB", - [3]byte{0, 144, 3}: "APLIO", - [3]byte{0, 144, 4}: "3COM EUROPE LTD.", - [3]byte{0, 144, 5}: "PROTECH SYSTEMS CO., LTD.", - [3]byte{0, 144, 6}: "Hamamatsu Photonics K.K.", - [3]byte{0, 144, 7}: "DOMEX TECHNOLOGY CORP.", - [3]byte{0, 144, 8}: "HanA Systems Inc.", - [3]byte{0, 144, 9}: "I Controls, Inc.", - [3]byte{0, 144, 10}: "PROTON ELECTRONIC INDUSTRIAL CO., LTD.", - [3]byte{0, 144, 11}: "LANNER ELECTRONICS, INC.", - [3]byte{0, 144, 12}: "Cisco Systems, Inc", - [3]byte{0, 144, 13}: "Overland Storage Inc.", - [3]byte{0, 144, 14}: "HANDLINK TECHNOLOGIES, INC.", - [3]byte{0, 144, 15}: "KAWASAKI HEAVY INDUSTRIES, LTD", - [3]byte{0, 144, 16}: "SIMULATION LABORATORIES, INC.", - [3]byte{0, 144, 17}: "WAVTrace, Inc.", - [3]byte{0, 144, 18}: "GLOBESPAN SEMICONDUCTOR, INC.", - [3]byte{0, 144, 19}: "SAMSAN CORP.", - [3]byte{0, 144, 20}: "ROTORK INSTRUMENTS, LTD.", - [3]byte{0, 144, 21}: "CENTIGRAM COMMUNICATIONS CORP.", - [3]byte{0, 144, 22}: "ZAC", - [3]byte{0, 144, 23}: "Zypcom, Inc", - [3]byte{0, 144, 24}: "ITO ELECTRIC INDUSTRY CO, LTD.", - [3]byte{0, 144, 25}: "HERMES ELECTRONICS CO., LTD.", - [3]byte{0, 144, 26}: "UNISPHERE SOLUTIONS", - [3]byte{0, 144, 27}: "DIGITAL CONTROLS", - [3]byte{0, 144, 28}: "mps Software Gmbh", - [3]byte{0, 144, 29}: "PEC (NZ) LTD.", - [3]byte{0, 144, 30}: "Selesta Ingegneria S.p.A.", - [3]byte{0, 144, 31}: "ADTEC PRODUCTIONS, INC.", - [3]byte{0, 144, 32}: "PHILIPS ANALYTICAL X-RAY B.V.", - [3]byte{0, 144, 33}: "Cisco Systems, Inc", - [3]byte{0, 144, 34}: "IVEX", - [3]byte{0, 144, 35}: "ZILOG INC.", - [3]byte{0, 144, 36}: "PIPELINKS, INC.", - [3]byte{0, 144, 37}: "BAE Systems Australia (Electronic Systems) Pty Ltd", - [3]byte{0, 144, 38}: "ADVANCED SWITCHING COMMUNICATIONS, INC.", - [3]byte{0, 144, 39}: "Intel Corporation", - [3]byte{0, 144, 40}: "NIPPON SIGNAL CO., LTD.", - [3]byte{0, 144, 41}: "CRYPTO AG", - [3]byte{0, 144, 42}: "COMMUNICATION DEVICES, INC.", - [3]byte{0, 144, 43}: "Cisco Systems, Inc", - [3]byte{0, 144, 44}: "DATA & CONTROL EQUIPMENT LTD.", - [3]byte{0, 144, 45}: "DATA ELECTRONICS (AUST.) PTY, LTD.", - [3]byte{0, 144, 46}: "NAMCO LIMITED", - [3]byte{0, 144, 47}: "NETCORE SYSTEMS, INC.", - [3]byte{0, 144, 48}: "HONEYWELL-DATING", - [3]byte{0, 144, 49}: "MYSTICOM, LTD.", - [3]byte{0, 144, 50}: "PELCOMBE GROUP LTD.", - [3]byte{0, 144, 51}: "INNOVAPHONE AG", - [3]byte{0, 144, 52}: "IMAGIC, INC.", - [3]byte{0, 144, 53}: "ALPHA TELECOM, INC.", - [3]byte{0, 144, 54}: "ens, inc.", - [3]byte{0, 144, 55}: "ACUCOMM, INC.", - [3]byte{0, 144, 56}: "FOUNTAIN TECHNOLOGIES, INC.", - [3]byte{0, 144, 57}: "SHASTA NETWORKS", - [3]byte{0, 144, 58}: "NIHON MEDIA TOOL INC.", - [3]byte{0, 144, 59}: "TriEMS Research Lab, Inc.", - [3]byte{0, 144, 60}: "ATLANTIC NETWORK SYSTEMS", - [3]byte{0, 144, 61}: "BIOPAC SYSTEMS, INC.", - [3]byte{0, 144, 62}: "N.V. PHILIPS INDUSTRIAL ACTIVITIES", - [3]byte{0, 144, 63}: "AZTEC RADIOMEDIA", - [3]byte{0, 144, 64}: "Siemens Network Convergence LLC", - [3]byte{0, 144, 65}: "APPLIED DIGITAL ACCESS", - [3]byte{0, 144, 66}: "ECCS, Inc.", - [3]byte{0, 144, 67}: "Tattile SRL", - [3]byte{0, 144, 68}: "ASSURED DIGITAL, INC.", - [3]byte{0, 144, 69}: "Marconi Communications", - [3]byte{0, 144, 70}: "DEXDYNE, LTD.", - [3]byte{0, 144, 71}: "GIGA FAST E. LTD.", - [3]byte{0, 144, 72}: "ZEAL CORPORATION", - [3]byte{0, 144, 73}: "ENTRIDIA CORPORATION", - [3]byte{0, 144, 74}: "CONCUR SYSTEM TECHNOLOGIES", - [3]byte{0, 144, 75}: "Gemtek Technology Co., Ltd.", - [3]byte{0, 144, 76}: "Epigram, Inc.", - [3]byte{0, 144, 77}: "SPEC S.A.", - [3]byte{0, 144, 78}: "DELEM BV", - [3]byte{0, 144, 79}: "ABB POWER T&D COMPANY, INC.", - [3]byte{0, 144, 80}: "Teleste Corporation", - [3]byte{0, 144, 81}: "ULTIMATE TECHNOLOGY CORP.", - [3]byte{0, 144, 82}: "SELCOM ELETTRONICA S.R.L.", - [3]byte{0, 144, 83}: "DAEWOO ELECTRONICS CO., LTD.", - [3]byte{0, 144, 84}: "INNOVATIVE SEMICONDUCTORS, INC", - [3]byte{0, 144, 85}: "PARKER HANNIFIN CORPORATION COMPUMOTOR DIVISION", - [3]byte{0, 144, 86}: "TELESTREAM, INC.", - [3]byte{0, 144, 87}: "AANetcom, Inc.", - [3]byte{0, 144, 88}: "Ultra Electronics Command & Control Systems", - [3]byte{0, 144, 89}: "TELECOM DEVICE K.K.", - [3]byte{0, 144, 90}: "DEARBORN GROUP, INC.", - [3]byte{0, 144, 91}: "RAYMOND AND LAE ENGINEERING", - [3]byte{0, 144, 92}: "EDMI", - [3]byte{0, 144, 93}: "NETCOM SICHERHEITSTECHNIK GMBH", - [3]byte{0, 144, 94}: "RAULAND-BORG CORPORATION", - [3]byte{0, 144, 95}: "Cisco Systems, Inc", - [3]byte{0, 144, 96}: "SYSTEM CREATE CORP.", - [3]byte{0, 144, 97}: "PACIFIC RESEARCH & ENGINEERING CORPORATION", - [3]byte{0, 144, 98}: "ICP VORTEX COMPUTERSYSTEME GmbH", - [3]byte{0, 144, 99}: "COHERENT COMMUNICATIONS SYSTEMS CORPORATION", - [3]byte{0, 144, 100}: "Thomson Inc.", - [3]byte{0, 144, 101}: "FINISAR CORPORATION", - [3]byte{0, 144, 102}: "Troika Networks, Inc.", - [3]byte{0, 144, 103}: "WalkAbout Computers, Inc.", - [3]byte{0, 144, 104}: "DVT CORP.", - [3]byte{0, 144, 105}: "Juniper Networks", - [3]byte{0, 144, 106}: "TURNSTONE SYSTEMS, INC.", - [3]byte{0, 144, 107}: "APPLIED RESOURCES, INC.", - [3]byte{0, 144, 108}: "Sartorius Hamburg GmbH", - [3]byte{0, 144, 109}: "Cisco Systems, Inc", - [3]byte{0, 144, 110}: "PRAXON, INC.", - [3]byte{0, 144, 111}: "Cisco Systems, Inc", - [3]byte{0, 144, 112}: "NEO NETWORKS, INC.", - [3]byte{0, 144, 113}: "Applied Innovation Inc.", - [3]byte{0, 144, 114}: "SIMRAD AS", - [3]byte{0, 144, 115}: "GAIO TECHNOLOGY", - [3]byte{0, 144, 116}: "ARGON NETWORKS, INC.", - [3]byte{0, 144, 117}: "NEC DO BRASIL S.A.", - [3]byte{0, 144, 118}: "FMT AIRCRAFT GATE SUPPORT SYSTEMS AB", - [3]byte{0, 144, 119}: "ADVANCED FIBRE COMMUNICATIONS", - [3]byte{0, 144, 120}: "MER TELEMANAGEMENT SOLUTIONS, LTD.", - [3]byte{0, 144, 121}: "ClearOne, Inc.", - [3]byte{0, 144, 122}: "Spectralink, Inc", - [3]byte{0, 144, 123}: "E-TECH, INC.", - [3]byte{0, 144, 124}: "DIGITALCAST, INC.", - [3]byte{0, 144, 125}: "Lake Communications", - [3]byte{0, 144, 126}: "VETRONIX CORP.", - [3]byte{0, 144, 127}: "WatchGuard Technologies, Inc.", - [3]byte{0, 144, 128}: "NOT LIMITED, INC.", - [3]byte{0, 144, 129}: "ALOHA NETWORKS, INC.", - [3]byte{0, 144, 130}: "FORCE INSTITUTE", - [3]byte{0, 144, 131}: "TURBO COMMUNICATION, INC.", - [3]byte{0, 144, 132}: "ATECH SYSTEM", - [3]byte{0, 144, 133}: "GOLDEN ENTERPRISES, INC.", - [3]byte{0, 144, 134}: "Cisco Systems, Inc", - [3]byte{0, 144, 135}: "ITIS", - [3]byte{0, 144, 136}: "BAXALL SECURITY LTD.", - [3]byte{0, 144, 137}: "SOFTCOM MICROSYSTEMS, INC.", - [3]byte{0, 144, 138}: "BAYLY COMMUNICATIONS, INC.", - [3]byte{0, 144, 139}: "Tattile SRL", - [3]byte{0, 144, 140}: "ETREND ELECTRONICS, INC.", - [3]byte{0, 144, 141}: "VICKERS ELECTRONICS SYSTEMS", - [3]byte{0, 144, 142}: "Nortel Networks Broadband Access", - [3]byte{0, 144, 143}: "AUDIO CODES LTD.", - [3]byte{0, 144, 144}: "I-BUS", - [3]byte{0, 144, 145}: "DigitalScape, Inc.", - [3]byte{0, 144, 146}: "Cisco Systems, Inc", - [3]byte{0, 144, 147}: "NANAO CORPORATION", - [3]byte{0, 144, 148}: "OSPREY TECHNOLOGIES, INC.", - [3]byte{0, 144, 149}: "UNIVERSAL AVIONICS", - [3]byte{0, 144, 150}: "ASKEY COMPUTER CORP", - [3]byte{0, 144, 151}: "Sycamore Networks", - [3]byte{0, 144, 152}: "SBC DESIGNS, INC.", - [3]byte{0, 144, 153}: "ALLIED TELESIS, K.K.", - [3]byte{0, 144, 154}: "ONE WORLD SYSTEMS, INC.", - [3]byte{0, 144, 155}: "MARKEM-IMAJE", - [3]byte{0, 144, 156}: "ARRIS Group, Inc.", - [3]byte{0, 144, 157}: "NovaTech Process Solutions, LLC", - [3]byte{0, 144, 158}: "Critical IO, LLC", - [3]byte{0, 144, 159}: "DIGI-DATA CORPORATION", - [3]byte{0, 144, 160}: "8X8 INC.", - [3]byte{0, 144, 161}: "Flying Pig Systems/High End Systems Inc.", - [3]byte{0, 144, 162}: "CyberTAN Technology Inc.", - [3]byte{0, 144, 163}: "Corecess Inc.", - [3]byte{0, 144, 164}: "ALTIGA NETWORKS", - [3]byte{0, 144, 165}: "SPECTRA LOGIC", - [3]byte{0, 144, 166}: "Cisco Systems, Inc", - [3]byte{0, 144, 167}: "CLIENTEC CORPORATION", - [3]byte{0, 144, 168}: "NineTiles Networks, Ltd.", - [3]byte{0, 144, 169}: "WESTERN DIGITAL", - [3]byte{0, 144, 170}: "INDIGO ACTIVE VISION SYSTEMS LIMITED", - [3]byte{0, 144, 171}: "Cisco Systems, Inc", - [3]byte{0, 144, 172}: "OPTIVISION, INC.", - [3]byte{0, 144, 173}: "ASPECT ELECTRONICS, INC.", - [3]byte{0, 144, 174}: "ITALTEL S.p.A/RF-UP-I", - [3]byte{0, 144, 175}: "J. MORITA MFG. CORP.", - [3]byte{0, 144, 176}: "VADEM", - [3]byte{0, 144, 177}: "Cisco Systems, Inc", - [3]byte{0, 144, 178}: "AVICI SYSTEMS INC.", - [3]byte{0, 144, 179}: "AGRANAT SYSTEMS", - [3]byte{0, 144, 180}: "WILLOWBROOK TECHNOLOGIES", - [3]byte{0, 144, 181}: "NIKON CORPORATION", - [3]byte{0, 144, 182}: "FIBEX SYSTEMS", - [3]byte{0, 144, 183}: "DIGITAL LIGHTWAVE, INC.", - [3]byte{0, 144, 184}: "ROHDE & SCHWARZ GMBH & CO. KG", - [3]byte{0, 144, 185}: "BERAN INSTRUMENTS LTD.", - [3]byte{0, 144, 186}: "VALID NETWORKS, INC.", - [3]byte{0, 144, 187}: "TAINET COMMUNICATION SYSTEM Corp.", - [3]byte{0, 144, 188}: "TELEMANN CO., LTD.", - [3]byte{0, 144, 189}: "OMNIA COMMUNICATIONS, INC.", - [3]byte{0, 144, 190}: "IBC/INTEGRATED BUSINESS COMPUTERS", - [3]byte{0, 144, 191}: "Cisco Systems, Inc", - [3]byte{0, 144, 192}: "K.J. LAW ENGINEERS, INC.", - [3]byte{0, 144, 193}: "Peco II, Inc.", - [3]byte{0, 144, 194}: "JK microsystems, Inc.", - [3]byte{0, 144, 195}: "TOPIC SEMICONDUCTOR CORP.", - [3]byte{0, 144, 196}: "JAVELIN SYSTEMS, INC.", - [3]byte{0, 144, 197}: "INTERNET MAGIC, INC.", - [3]byte{0, 144, 198}: "OPTIM SYSTEMS, INC.", - [3]byte{0, 144, 199}: "ICOM INC.", - [3]byte{0, 144, 200}: "WAVERIDER COMMUNICATIONS (CANADA) INC.", - [3]byte{0, 144, 201}: "DPAC Technologies", - [3]byte{0, 144, 202}: "ACCORD VIDEO TELECOMMUNICATIONS, LTD.", - [3]byte{0, 144, 203}: "Wireless OnLine, Inc.", - [3]byte{0, 144, 204}: "PLANEX COMMUNICATIONS INC.", - [3]byte{0, 144, 205}: "ENT-EMPRESA NACIONAL DE TELECOMMUNICACOES, S.A.", - [3]byte{0, 144, 206}: "TETRA GmbH", - [3]byte{0, 144, 207}: "NORTEL", - [3]byte{0, 144, 208}: "Thomson Telecom Belgium", - [3]byte{0, 144, 209}: "LEICHU ENTERPRISE CO., LTD.", - [3]byte{0, 144, 210}: "ARTEL VIDEO SYSTEMS", - [3]byte{0, 144, 211}: "GIESECKE & DEVRIENT GmbH", - [3]byte{0, 144, 212}: "BindView Development Corp.", - [3]byte{0, 144, 213}: "EUPHONIX, INC.", - [3]byte{0, 144, 214}: "Crystal Group, Inc.", - [3]byte{0, 144, 215}: "NetBoost Corp.", - [3]byte{0, 144, 216}: "WHITECROSS SYSTEMS", - [3]byte{0, 144, 217}: "Cisco Systems, Inc", - [3]byte{0, 144, 218}: "DYNARC, INC.", - [3]byte{0, 144, 219}: "NEXT LEVEL COMMUNICATIONS", - [3]byte{0, 144, 220}: "TECO INFORMATION SYSTEMS", - [3]byte{0, 144, 221}: "MIHARU COMMUNICATIONS Inc", - [3]byte{0, 144, 222}: "CARDKEY SYSTEMS, INC.", - [3]byte{0, 144, 223}: "MITSUBISHI CHEMICAL AMERICA, INC.", - [3]byte{0, 144, 224}: "SYSTRAN CORP.", - [3]byte{0, 144, 225}: "TELENA S.P.A.", - [3]byte{0, 144, 226}: "DISTRIBUTED PROCESSING TECHNOLOGY", - [3]byte{0, 144, 227}: "AVEX ELECTRONICS INC.", - [3]byte{0, 144, 228}: "NEC AMERICA, INC.", - [3]byte{0, 144, 229}: "TEKNEMA, INC.", - [3]byte{0, 144, 230}: "ALi Corporation", - [3]byte{0, 144, 231}: "HORSCH ELEKTRONIK AG", - [3]byte{0, 144, 232}: "MOXA TECHNOLOGIES CORP., LTD.", - [3]byte{0, 144, 233}: "JANZ COMPUTER AG", - [3]byte{0, 144, 234}: "ALPHA TECHNOLOGIES, INC.", - [3]byte{0, 144, 235}: "SENTRY TELECOM SYSTEMS", - [3]byte{0, 144, 236}: "PYRESCOM", - [3]byte{0, 144, 237}: "CENTRAL SYSTEM RESEARCH CO., LTD.", - [3]byte{0, 144, 238}: "PERSONAL COMMUNICATIONS TECHNOLOGIES", - [3]byte{0, 144, 239}: "INTEGRIX, INC.", - [3]byte{0, 144, 240}: "Harmonic Video Systems Ltd.", - [3]byte{0, 144, 241}: "Seagate Cloud Systems Inc", - [3]byte{0, 144, 242}: "Cisco Systems, Inc", - [3]byte{0, 144, 243}: "ASPECT COMMUNICATIONS", - [3]byte{0, 144, 244}: "LIGHTNING INSTRUMENTATION", - [3]byte{0, 144, 245}: "CLEVO CO.", - [3]byte{0, 144, 246}: "ESCALATE NETWORKS, INC.", - [3]byte{0, 144, 247}: "NBASE COMMUNICATIONS LTD.", - [3]byte{0, 144, 248}: "MEDIATRIX TELECOM", - [3]byte{0, 144, 249}: "Imagine Communications", - [3]byte{0, 144, 250}: "Emulex Corporation", - [3]byte{0, 144, 251}: "PORTWELL, INC.", - [3]byte{0, 144, 252}: "NETWORK COMPUTING DEVICES", - [3]byte{0, 144, 253}: "CopperCom, Inc.", - [3]byte{0, 144, 254}: "ELECOM CO., LTD. (LANEED DIV.)", - [3]byte{0, 144, 255}: "TELLUS TECHNOLOGY INC.", - [3]byte{0, 145, 214}: "Crystal Group, Inc.", - [3]byte{0, 145, 250}: "Synapse Product Development", - [3]byte{0, 146, 250}: "SHENZHEN WISKY TECHNOLOGY CO.,LTD", - [3]byte{0, 147, 99}: "Uni-Link Technology Co., Ltd.", - [3]byte{0, 148, 161}: "F5 Networks, Inc.", - [3]byte{0, 149, 105}: "LSD Science and Technology Co.,Ltd.", - [3]byte{0, 151, 255}: "Heimann Sensor GmbH", - [3]byte{0, 154, 205}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{0, 154, 210}: "Cisco Systems, Inc", - [3]byte{0, 156, 2}: "Hewlett Packard", - [3]byte{0, 157, 142}: "CARDIAC RECORDERS, INC.", - [3]byte{0, 158, 30}: "Cisco Systems, Inc", - [3]byte{0, 158, 200}: "Xiaomi Communications Co Ltd", - [3]byte{0, 160, 0}: "CENTILLION NETWORKS, INC.", - [3]byte{0, 160, 1}: "DRS Signal Solutions", - [3]byte{0, 160, 2}: "LEEDS & NORTHRUP AUSTRALIA PTY LTD", - [3]byte{0, 160, 3}: "Siemens Switzerland Ltd., I B T HVP", - [3]byte{0, 160, 4}: "NETPOWER, INC.", - [3]byte{0, 160, 5}: "DANIEL INSTRUMENTS, LTD.", - [3]byte{0, 160, 6}: "IMAGE DATA PROCESSING SYSTEM GROUP", - [3]byte{0, 160, 7}: "APEXX TECHNOLOGY, INC.", - [3]byte{0, 160, 8}: "NETCORP", - [3]byte{0, 160, 9}: "WHITETREE NETWORK", - [3]byte{0, 160, 10}: "Airspan", - [3]byte{0, 160, 11}: "COMPUTEX CO., LTD.", - [3]byte{0, 160, 12}: "KINGMAX TECHNOLOGY, INC.", - [3]byte{0, 160, 13}: "THE PANDA PROJECT", - [3]byte{0, 160, 14}: "NetScout Systems, Inc.", - [3]byte{0, 160, 15}: "Broadband Technologies", - [3]byte{0, 160, 16}: "SYSLOGIC DATENTECHNIK AG", - [3]byte{0, 160, 17}: "MUTOH INDUSTRIES LTD.", - [3]byte{0, 160, 18}: "Telco Systems, Inc.", - [3]byte{0, 160, 19}: "TELTREND LTD.", - [3]byte{0, 160, 20}: "CSIR", - [3]byte{0, 160, 21}: "WYLE", - [3]byte{0, 160, 22}: "MICROPOLIS CORP.", - [3]byte{0, 160, 23}: "J B M CORPORATION", - [3]byte{0, 160, 24}: "CREATIVE CONTROLLERS, INC.", - [3]byte{0, 160, 25}: "NEBULA CONSULTANTS, INC.", - [3]byte{0, 160, 26}: "BINAR ELEKTRONIK AB", - [3]byte{0, 160, 27}: "PREMISYS COMMUNICATIONS, INC.", - [3]byte{0, 160, 28}: "NASCENT NETWORKS CORPORATION", - [3]byte{0, 160, 29}: "Red Lion Controls, LP", - [3]byte{0, 160, 30}: "EST CORPORATION", - [3]byte{0, 160, 31}: "TRICORD SYSTEMS, INC.", - [3]byte{0, 160, 32}: "CITICORP/TTI", - [3]byte{0, 160, 33}: "General Dynamics", - [3]byte{0, 160, 34}: "CENTRE FOR DEVELOPMENT OF ADVANCED COMPUTING", - [3]byte{0, 160, 35}: "APPLIED CREATIVE TECHNOLOGY, INC.", - [3]byte{0, 160, 36}: "3COM CORPORATION", - [3]byte{0, 160, 37}: "REDCOM LABS INC.", - [3]byte{0, 160, 38}: "TELDAT, S.A.", - [3]byte{0, 160, 39}: "FIREPOWER SYSTEMS, INC.", - [3]byte{0, 160, 40}: "CONNER PERIPHERALS", - [3]byte{0, 160, 41}: "COULTER CORPORATION", - [3]byte{0, 160, 42}: "TRANCELL SYSTEMS", - [3]byte{0, 160, 43}: "TRANSITIONS RESEARCH CORP.", - [3]byte{0, 160, 44}: "interWAVE Communications", - [3]byte{0, 160, 45}: "1394 Trade Association", - [3]byte{0, 160, 46}: "BRAND COMMUNICATIONS, LTD.", - [3]byte{0, 160, 47}: "ADB Broadband Italia", - [3]byte{0, 160, 48}: "CAPTOR NV/SA", - [3]byte{0, 160, 49}: "HAZELTINE CORPORATION, MS 1-17", - [3]byte{0, 160, 50}: "GES SINGAPORE PTE. LTD.", - [3]byte{0, 160, 51}: "imc MeBsysteme GmbH", - [3]byte{0, 160, 52}: "AXEL", - [3]byte{0, 160, 53}: "CYLINK CORPORATION", - [3]byte{0, 160, 54}: "APPLIED NETWORK TECHNOLOGY", - [3]byte{0, 160, 55}: "Mindray DS USA, Inc.", - [3]byte{0, 160, 56}: "EMAIL ELECTRONICS", - [3]byte{0, 160, 57}: "ROSS TECHNOLOGY, INC.", - [3]byte{0, 160, 58}: "KUBOTEK CORPORATION", - [3]byte{0, 160, 59}: "TOSHIN ELECTRIC CO., LTD.", - [3]byte{0, 160, 60}: "EG&G NUCLEAR INSTRUMENTS", - [3]byte{0, 160, 61}: "OPTO-22", - [3]byte{0, 160, 62}: "ATM FORUM", - [3]byte{0, 160, 63}: "COMPUTER SOCIETY MICROPROCESSOR & MICROPROCESSOR STANDARDS C", - [3]byte{0, 160, 64}: "Apple, Inc.", - [3]byte{0, 160, 65}: "INFICON", - [3]byte{0, 160, 66}: "SPUR PRODUCTS CORP.", - [3]byte{0, 160, 67}: "AMERICAN TECHNOLOGY LABS, INC.", - [3]byte{0, 160, 68}: "NTT IT CO., LTD.", - [3]byte{0, 160, 69}: "PHOENIX CONTACT Electronics GmbH", - [3]byte{0, 160, 70}: "SCITEX CORP. LTD.", - [3]byte{0, 160, 71}: "INTEGRATED FITNESS CORP.", - [3]byte{0, 160, 72}: "QUESTECH, LTD.", - [3]byte{0, 160, 73}: "DIGITECH INDUSTRIES, INC.", - [3]byte{0, 160, 74}: "NISSHIN ELECTRIC CO., LTD.", - [3]byte{0, 160, 75}: "TFL LAN INC.", - [3]byte{0, 160, 76}: "INNOVATIVE SYSTEMS & TECHNOLOGIES, INC.", - [3]byte{0, 160, 77}: "EDA INSTRUMENTS, INC.", - [3]byte{0, 160, 78}: "VOELKER TECHNOLOGIES, INC.", - [3]byte{0, 160, 79}: "AMERITEC CORP.", - [3]byte{0, 160, 80}: "CYPRESS SEMICONDUCTOR", - [3]byte{0, 160, 81}: "ANGIA COMMUNICATIONS. INC.", - [3]byte{0, 160, 82}: "STANILITE ELECTRONICS PTY. LTD", - [3]byte{0, 160, 83}: "COMPACT DEVICES, INC.", - [3]byte{0, 160, 84}: "Private", - [3]byte{0, 160, 85}: "Data Device Corporation", - [3]byte{0, 160, 86}: "MICROPROSS", - [3]byte{0, 160, 87}: "LANCOM Systems GmbH", - [3]byte{0, 160, 88}: "GLORY, LTD.", - [3]byte{0, 160, 89}: "HAMILTON HALLMARK", - [3]byte{0, 160, 90}: "KOFAX IMAGE PRODUCTS", - [3]byte{0, 160, 91}: "MARQUIP, INC.", - [3]byte{0, 160, 92}: "INVENTORY CONVERSION, INC./", - [3]byte{0, 160, 93}: "CS COMPUTER SYSTEME GmbH", - [3]byte{0, 160, 94}: "MYRIAD LOGIC INC.", - [3]byte{0, 160, 95}: "BTG Electronics Design BV", - [3]byte{0, 160, 96}: "ACER PERIPHERALS, INC.", - [3]byte{0, 160, 97}: "PURITAN BENNETT", - [3]byte{0, 160, 98}: "AES PRODATA", - [3]byte{0, 160, 99}: "JRL SYSTEMS, INC.", - [3]byte{0, 160, 100}: "KVB/ANALECT", - [3]byte{0, 160, 101}: "Symantec Corporation", - [3]byte{0, 160, 102}: "ISA CO., LTD.", - [3]byte{0, 160, 103}: "NETWORK SERVICES GROUP", - [3]byte{0, 160, 104}: "BHP LIMITED", - [3]byte{0, 160, 105}: "Symmetricom, Inc.", - [3]byte{0, 160, 106}: "Verilink Corporation", - [3]byte{0, 160, 107}: "DMS DORSCH MIKROSYSTEM GMBH", - [3]byte{0, 160, 108}: "SHINDENGEN ELECTRIC MFG. CO., LTD.", - [3]byte{0, 160, 109}: "MANNESMANN TALLY CORPORATION", - [3]byte{0, 160, 110}: "AUSTRON, INC.", - [3]byte{0, 160, 111}: "Color Sentinel Systems, LLC", - [3]byte{0, 160, 112}: "COASTCOM", - [3]byte{0, 160, 113}: "VIDEO LOTTERY TECHNOLOGIES,INC", - [3]byte{0, 160, 114}: "OVATION SYSTEMS LTD.", - [3]byte{0, 160, 115}: "COM21, INC.", - [3]byte{0, 160, 116}: "PERCEPTION TECHNOLOGY", - [3]byte{0, 160, 117}: "MICRON TECHNOLOGY, INC.", - [3]byte{0, 160, 118}: "CARDWARE LAB, INC.", - [3]byte{0, 160, 119}: "FUJITSU NEXION, INC.", - [3]byte{0, 160, 120}: "Marconi Communications", - [3]byte{0, 160, 121}: "ALPS ELECTRIC (USA), INC.", - [3]byte{0, 160, 122}: "ADVANCED PERIPHERALS TECHNOLOGIES, INC.", - [3]byte{0, 160, 123}: "DAWN COMPUTER INCORPORATION", - [3]byte{0, 160, 124}: "TONYANG NYLON CO., LTD.", - [3]byte{0, 160, 125}: "SEEQ TECHNOLOGY, INC.", - [3]byte{0, 160, 126}: "AVID TECHNOLOGY, INC.", - [3]byte{0, 160, 127}: "GSM-SYNTEL, LTD.", - [3]byte{0, 160, 128}: "Tattile SRL", - [3]byte{0, 160, 129}: "ALCATEL DATA NETWORKS", - [3]byte{0, 160, 130}: "NKT ELEKTRONIK A/S", - [3]byte{0, 160, 131}: "ASIMMPHONY TURKEY", - [3]byte{0, 160, 132}: "Dataplex Pty Ltd", - [3]byte{0, 160, 133}: "Private", - [3]byte{0, 160, 134}: "AMBER WAVE SYSTEMS, INC.", - [3]byte{0, 160, 135}: "Microsemi Corporation", - [3]byte{0, 160, 136}: "ESSENTIAL COMMUNICATIONS", - [3]byte{0, 160, 137}: "XPOINT TECHNOLOGIES, INC.", - [3]byte{0, 160, 138}: "BROOKTROUT TECHNOLOGY, INC.", - [3]byte{0, 160, 139}: "ASTON ELECTRONIC DESIGNS LTD.", - [3]byte{0, 160, 140}: "MultiMedia LANs, Inc.", - [3]byte{0, 160, 141}: "JACOMO CORPORATION", - [3]byte{0, 160, 142}: "Check Point Software Technologies", - [3]byte{0, 160, 143}: "DESKNET SYSTEMS, INC.", - [3]byte{0, 160, 144}: "TimeStep Corporation", - [3]byte{0, 160, 145}: "APPLICOM INTERNATIONAL", - [3]byte{0, 160, 146}: "H. BOLLMANN MANUFACTURERS, LTD", - [3]byte{0, 160, 147}: "B/E AEROSPACE, Inc.", - [3]byte{0, 160, 148}: "COMSAT CORPORATION", - [3]byte{0, 160, 149}: "ACACIA NETWORKS, INC.", - [3]byte{0, 160, 150}: "MITSUMI ELECTRIC CO.,LTD.", - [3]byte{0, 160, 151}: "JC INFORMATION SYSTEMS", - [3]byte{0, 160, 152}: "NetApp", - [3]byte{0, 160, 153}: "K-NET LTD.", - [3]byte{0, 160, 154}: "NIHON KOHDEN AMERICA", - [3]byte{0, 160, 155}: "QPSX COMMUNICATIONS, LTD.", - [3]byte{0, 160, 156}: "Xyplex, Inc.", - [3]byte{0, 160, 157}: "JOHNATHON FREEMAN TECHNOLOGIES", - [3]byte{0, 160, 158}: "ICTV", - [3]byte{0, 160, 159}: "COMMVISION CORP.", - [3]byte{0, 160, 160}: "COMPACT DATA, LTD.", - [3]byte{0, 160, 161}: "EPIC DATA INC.", - [3]byte{0, 160, 162}: "DIGICOM S.P.A.", - [3]byte{0, 160, 163}: "RELIABLE POWER METERS", - [3]byte{0, 160, 164}: "Oracle Corporation", - [3]byte{0, 160, 165}: "TEKNOR MICROSYSTEME, INC.", - [3]byte{0, 160, 166}: "M.I. SYSTEMS, K.K.", - [3]byte{0, 160, 167}: "VORAX CORPORATION", - [3]byte{0, 160, 168}: "RENEX CORPORATION", - [3]byte{0, 160, 169}: "NAVTEL COMMUNICATIONS INC.", - [3]byte{0, 160, 170}: "SPACELABS MEDICAL", - [3]byte{0, 160, 171}: "NETCS INFORMATIONSTECHNIK GMBH", - [3]byte{0, 160, 172}: "GILAT SATELLITE NETWORKS, LTD.", - [3]byte{0, 160, 173}: "MARCONI SPA", - [3]byte{0, 160, 174}: "NUCOM SYSTEMS, INC.", - [3]byte{0, 160, 175}: "WMS INDUSTRIES", - [3]byte{0, 160, 176}: "I-O DATA DEVICE, INC.", - [3]byte{0, 160, 177}: "FIRST VIRTUAL CORPORATION", - [3]byte{0, 160, 178}: "SHIMA SEIKI", - [3]byte{0, 160, 179}: "ZYKRONIX", - [3]byte{0, 160, 180}: "TEXAS MICROSYSTEMS, INC.", - [3]byte{0, 160, 181}: "3H TECHNOLOGY", - [3]byte{0, 160, 182}: "SANRITZ AUTOMATION CO., LTD.", - [3]byte{0, 160, 183}: "CORDANT, INC.", - [3]byte{0, 160, 184}: "NetApp", - [3]byte{0, 160, 185}: "EAGLE TECHNOLOGY, INC.", - [3]byte{0, 160, 186}: "PATTON ELECTRONICS CO.", - [3]byte{0, 160, 187}: "HILAN GMBH", - [3]byte{0, 160, 188}: "VIASAT, INCORPORATED", - [3]byte{0, 160, 189}: "I-TECH CORP.", - [3]byte{0, 160, 190}: "INTEGRATED CIRCUIT SYSTEMS, INC. COMMUNICATIONS GROUP", - [3]byte{0, 160, 191}: "WIRELESS DATA GROUP MOTOROLA", - [3]byte{0, 160, 192}: "DIGITAL LINK CORP.", - [3]byte{0, 160, 193}: "ORTIVUS MEDICAL AB", - [3]byte{0, 160, 194}: "R.A. SYSTEMS CO., LTD.", - [3]byte{0, 160, 195}: "UNICOMPUTER GMBH", - [3]byte{0, 160, 196}: "CRISTIE ELECTRONICS LTD.", - [3]byte{0, 160, 197}: "Zyxel Communications Corporation", - [3]byte{0, 160, 198}: "Qualcomm Inc.", - [3]byte{0, 160, 199}: "TADIRAN TELECOMMUNICATIONS", - [3]byte{0, 160, 200}: "Adtran Inc", - [3]byte{0, 160, 201}: "Intel Corporation", - [3]byte{0, 160, 202}: "FUJITSU DENSO LTD.", - [3]byte{0, 160, 203}: "ARK TELECOMMUNICATIONS, INC.", - [3]byte{0, 160, 204}: "LITE-ON COMMUNICATIONS, INC.", - [3]byte{0, 160, 205}: "DR. JOHANNES HEIDENHAIN GmbH", - [3]byte{0, 160, 206}: "Ecessa", - [3]byte{0, 160, 207}: "SOTAS, INC.", - [3]byte{0, 160, 208}: "TEN X TECHNOLOGY, INC.", - [3]byte{0, 160, 209}: "INVENTEC CORPORATION", - [3]byte{0, 160, 210}: "ALLIED TELESIS INTERNATIONAL CORPORATION", - [3]byte{0, 160, 211}: "INSTEM COMPUTER SYSTEMS, LTD.", - [3]byte{0, 160, 212}: "RADIOLAN, INC.", - [3]byte{0, 160, 213}: "SIERRA WIRELESS INC.", - [3]byte{0, 160, 214}: "SBE, Inc.", - [3]byte{0, 160, 215}: "KASTEN CHASE APPLIED RESEARCH", - [3]byte{0, 160, 216}: "SPECTRA - TEK", - [3]byte{0, 160, 217}: "CONVEX COMPUTER CORPORATION", - [3]byte{0, 160, 218}: "INTEGRATED SYSTEMS Technology, Inc.", - [3]byte{0, 160, 219}: "FISHER & PAYKEL PRODUCTION", - [3]byte{0, 160, 220}: "O.N. ELECTRONIC CO., LTD.", - [3]byte{0, 160, 221}: "AZONIX CORPORATION", - [3]byte{0, 160, 222}: "YAMAHA CORPORATION", - [3]byte{0, 160, 223}: "STS TECHNOLOGIES, INC.", - [3]byte{0, 160, 224}: "TENNYSON TECHNOLOGIES PTY LTD", - [3]byte{0, 160, 225}: "WESTPORT RESEARCH ASSOCIATES, INC.", - [3]byte{0, 160, 226}: "Keisokugiken Corporation", - [3]byte{0, 160, 227}: "XKL SYSTEMS CORP.", - [3]byte{0, 160, 228}: "OPTIQUEST", - [3]byte{0, 160, 229}: "NHC COMMUNICATIONS", - [3]byte{0, 160, 230}: "DIALOGIC CORPORATION", - [3]byte{0, 160, 231}: "CENTRAL DATA CORPORATION", - [3]byte{0, 160, 232}: "REUTERS HOLDINGS PLC", - [3]byte{0, 160, 233}: "ELECTRONIC RETAILING SYSTEMS INTERNATIONAL", - [3]byte{0, 160, 234}: "ETHERCOM CORP.", - [3]byte{0, 160, 235}: "Encore Networks, Inc.", - [3]byte{0, 160, 236}: "TRANSMITTON LTD.", - [3]byte{0, 160, 237}: "Brooks Automation, Inc.", - [3]byte{0, 160, 238}: "NASHOBA NETWORKS", - [3]byte{0, 160, 239}: "LUCIDATA LTD.", - [3]byte{0, 160, 240}: "TORONTO MICROELECTRONICS INC.", - [3]byte{0, 160, 241}: "MTI", - [3]byte{0, 160, 242}: "INFOTEK COMMUNICATIONS, INC.", - [3]byte{0, 160, 243}: "STAUBLI", - [3]byte{0, 160, 244}: "GE", - [3]byte{0, 160, 245}: "RADGUARD LTD.", - [3]byte{0, 160, 246}: "AutoGas Systems Inc.", - [3]byte{0, 160, 247}: "V.I COMPUTER CORP.", - [3]byte{0, 160, 248}: "Zebra Technologies Inc", - [3]byte{0, 160, 249}: "BINTEC COMMUNICATIONS GMBH", - [3]byte{0, 160, 250}: "Marconi Communication GmbH", - [3]byte{0, 160, 251}: "TORAY ENGINEERING CO., LTD.", - [3]byte{0, 160, 252}: "IMAGE SCIENCES, INC.", - [3]byte{0, 160, 253}: "SCITEX DIGITAL PRINTING, INC.", - [3]byte{0, 160, 254}: "BOSTON TECHNOLOGY, INC.", - [3]byte{0, 160, 255}: "TELLABS OPERATIONS, INC.", - [3]byte{0, 161, 222}: "ShenZhen ShiHua Technology CO.,LTD", - [3]byte{0, 162, 137}: "Cisco Systems, Inc", - [3]byte{0, 162, 218}: "INAT GmbH", - [3]byte{0, 162, 238}: "Cisco Systems, Inc", - [3]byte{0, 162, 245}: "Guangzhou Yuanyun Network Technology Co.,Ltd", - [3]byte{0, 162, 255}: "abatec group AG", - [3]byte{0, 163, 142}: "Cisco Systems, Inc", - [3]byte{0, 163, 209}: "Cisco Systems, Inc", - [3]byte{0, 165, 9}: "WigWag Inc.", - [3]byte{0, 166, 202}: "Cisco Systems, Inc", - [3]byte{0, 167, 66}: "Cisco Systems, Inc", - [3]byte{0, 167, 132}: "ITX security", - [3]byte{0, 170, 0}: "Intel Corporation", - [3]byte{0, 170, 1}: "Intel Corporation", - [3]byte{0, 170, 2}: "Intel Corporation", - [3]byte{0, 170, 60}: "OLIVETTI TELECOM SPA (OLTECO)", - [3]byte{0, 170, 112}: "LG Electronics (Mobile Communications)", - [3]byte{0, 172, 224}: "ARRIS Group, Inc.", - [3]byte{0, 174, 205}: "Pensando Systems", - [3]byte{0, 174, 250}: "Murata Manufacturing Co., Ltd.", - [3]byte{0, 175, 31}: "Cisco Systems, Inc", - [3]byte{0, 176, 9}: "Grass Valley, A Belden Brand", - [3]byte{0, 176, 23}: "InfoGear Technology Corp.", - [3]byte{0, 176, 25}: "UTC CCS", - [3]byte{0, 176, 28}: "Westport Technologies", - [3]byte{0, 176, 30}: "Rantic Labs, Inc.", - [3]byte{0, 176, 42}: "ORSYS GmbH", - [3]byte{0, 176, 45}: "ViaGate Technologies, Inc.", - [3]byte{0, 176, 51}: "OAO Izhevskiy radiozavod", - [3]byte{0, 176, 59}: "HiQ Networks", - [3]byte{0, 176, 72}: "Marconi Communications Inc.", - [3]byte{0, 176, 74}: "Cisco Systems, Inc", - [3]byte{0, 176, 82}: "Atheros Communications", - [3]byte{0, 176, 100}: "Cisco Systems, Inc", - [3]byte{0, 176, 105}: "Honewell Oy", - [3]byte{0, 176, 109}: "Jones Futurex Inc.", - [3]byte{0, 176, 128}: "Mannesmann Ipulsys B.V.", - [3]byte{0, 176, 134}: "LocSoft Limited", - [3]byte{0, 176, 142}: "Cisco Systems, Inc", - [3]byte{0, 176, 145}: "Transmeta Corp.", - [3]byte{0, 176, 148}: "Alaris, Inc.", - [3]byte{0, 176, 154}: "Morrow Technologies Corp.", - [3]byte{0, 176, 157}: "Point Grey Research Inc.", - [3]byte{0, 176, 172}: "SIAE-Microelettronica S.p.A.", - [3]byte{0, 176, 174}: "Symmetricom", - [3]byte{0, 176, 179}: "XSTREAMIS PLC", - [3]byte{0, 176, 194}: "Cisco Systems, Inc", - [3]byte{0, 176, 199}: "Tellabs Operations, Inc.", - [3]byte{0, 176, 206}: "Viveris Technologies", - [3]byte{0, 176, 208}: "Dell Inc.", - [3]byte{0, 176, 219}: "Nextcell, Inc.", - [3]byte{0, 176, 223}: "Starboard Storage Systems", - [3]byte{0, 176, 225}: "Cisco Systems, Inc", - [3]byte{0, 176, 231}: "British Federal Ltd.", - [3]byte{0, 176, 236}: "EACEM", - [3]byte{0, 176, 238}: "Ajile Systems, Inc.", - [3]byte{0, 176, 240}: "CALY NETWORKS", - [3]byte{0, 176, 245}: "NetWorth Technologies, Inc.", - [3]byte{0, 179, 56}: "Kontron Design Manufacturing Services (M) Sdn. Bhd", - [3]byte{0, 179, 66}: "MacroSAN Technologies Co., Ltd.", - [3]byte{0, 179, 98}: "Apple, Inc.", - [3]byte{0, 181, 109}: "David Electronics Co., LTD.", - [3]byte{0, 181, 214}: "Omnibit Inc.", - [3]byte{0, 182, 159}: "Latch", - [3]byte{0, 183, 141}: "Nanjing Shining Electric Automation Co., Ltd", - [3]byte{0, 185, 246}: "Shenzhen Super Rich Electronics Co.,Ltd", - [3]byte{0, 186, 192}: "Biometric Access Company", - [3]byte{0, 187, 1}: "OCTOTHORPE CORP.", - [3]byte{0, 187, 58}: "Private", - [3]byte{0, 187, 142}: "HME Co., Ltd.", - [3]byte{0, 187, 193}: "CANON INC.", - [3]byte{0, 187, 240}: "UNGERMANN-BASS INC.", - [3]byte{0, 189, 39}: "Exar Corp.", - [3]byte{0, 189, 58}: "Nokia Corporation", - [3]byte{0, 189, 130}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{0, 190, 158}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{0, 191, 21}: "Genetec Inc.", - [3]byte{0, 191, 97}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 192, 0}: "LANOPTICS, LTD.", - [3]byte{0, 192, 1}: "DIATEK PATIENT MANAGMENT", - [3]byte{0, 192, 2}: "SERCOMM CORPORATION", - [3]byte{0, 192, 3}: "GLOBALNET COMMUNICATIONS", - [3]byte{0, 192, 4}: "JAPAN BUSINESS COMPUTER CO.LTD", - [3]byte{0, 192, 5}: "LIVINGSTON ENTERPRISES, INC.", - [3]byte{0, 192, 6}: "NIPPON AVIONICS CO., LTD.", - [3]byte{0, 192, 7}: "PINNACLE DATA SYSTEMS, INC.", - [3]byte{0, 192, 8}: "SECO SRL", - [3]byte{0, 192, 9}: "KT TECHNOLOGY (S) PTE LTD", - [3]byte{0, 192, 10}: "MICRO CRAFT", - [3]byte{0, 192, 11}: "NORCONTROL A.S.", - [3]byte{0, 192, 12}: "RELIA TECHNOLGIES", - [3]byte{0, 192, 13}: "ADVANCED LOGIC RESEARCH, INC.", - [3]byte{0, 192, 14}: "PSITECH, INC.", - [3]byte{0, 192, 15}: "QUANTUM SOFTWARE SYSTEMS LTD.", - [3]byte{0, 192, 16}: "HIRAKAWA HEWTECH CORP.", - [3]byte{0, 192, 17}: "INTERACTIVE COMPUTING DEVICES", - [3]byte{0, 192, 18}: "NETSPAN CORPORATION", - [3]byte{0, 192, 19}: "NETRIX", - [3]byte{0, 192, 20}: "TELEMATICS CALABASAS INT'L,INC", - [3]byte{0, 192, 21}: "NEW MEDIA CORPORATION", - [3]byte{0, 192, 22}: "ELECTRONIC THEATRE CONTROLS", - [3]byte{0, 192, 23}: "NetScout Systems, Inc.", - [3]byte{0, 192, 24}: "LANART CORPORATION", - [3]byte{0, 192, 25}: "LEAP TECHNOLOGY, INC.", - [3]byte{0, 192, 26}: "COROMETRICS MEDICAL SYSTEMS", - [3]byte{0, 192, 27}: "SOCKET COMMUNICATIONS, INC.", - [3]byte{0, 192, 28}: "INTERLINK COMMUNICATIONS LTD.", - [3]byte{0, 192, 29}: "GRAND JUNCTION NETWORKS, INC.", - [3]byte{0, 192, 30}: "LA FRANCAISE DES JEUX", - [3]byte{0, 192, 31}: "S.E.R.C.E.L.", - [3]byte{0, 192, 32}: "ARCO ELECTRONIC, CONTROL LTD.", - [3]byte{0, 192, 33}: "NETEXPRESS", - [3]byte{0, 192, 34}: "LASERMASTER TECHNOLOGIES, INC.", - [3]byte{0, 192, 35}: "TUTANKHAMON ELECTRONICS", - [3]byte{0, 192, 36}: "EDEN SISTEMAS DE COMPUTACAO SA", - [3]byte{0, 192, 37}: "DATAPRODUCTS CORPORATION", - [3]byte{0, 192, 38}: "LANS TECHNOLOGY CO., LTD.", - [3]byte{0, 192, 39}: "CIPHER SYSTEMS, INC.", - [3]byte{0, 192, 40}: "JASCO CORPORATION", - [3]byte{0, 192, 41}: "Nexans Deutschland GmbH - ANS", - [3]byte{0, 192, 42}: "OHKURA ELECTRIC CO., LTD.", - [3]byte{0, 192, 43}: "GERLOFF GESELLSCHAFT FUR", - [3]byte{0, 192, 44}: "CENTRUM COMMUNICATIONS, INC.", - [3]byte{0, 192, 45}: "FUJI PHOTO FILM CO., LTD.", - [3]byte{0, 192, 46}: "NETWIZ", - [3]byte{0, 192, 47}: "OKUMA CORPORATION", - [3]byte{0, 192, 48}: "INTEGRATED ENGINEERING B. V.", - [3]byte{0, 192, 49}: "DESIGN RESEARCH SYSTEMS, INC.", - [3]byte{0, 192, 50}: "I-CUBED LIMITED", - [3]byte{0, 192, 51}: "TELEBIT COMMUNICATIONS APS", - [3]byte{0, 192, 52}: "TRANSACTION NETWORK", - [3]byte{0, 192, 53}: "QUINTAR COMPANY", - [3]byte{0, 192, 54}: "RAYTECH ELECTRONIC CORP.", - [3]byte{0, 192, 55}: "DYNATEM", - [3]byte{0, 192, 56}: "RASTER IMAGE PROCESSING SYSTEM", - [3]byte{0, 192, 57}: "Teridian Semiconductor Corporation", - [3]byte{0, 192, 58}: "MEN-MIKRO ELEKTRONIK GMBH", - [3]byte{0, 192, 59}: "MULTIACCESS COMPUTING CORP.", - [3]byte{0, 192, 60}: "TOWER TECH S.R.L.", - [3]byte{0, 192, 61}: "WIESEMANN & THEIS GMBH", - [3]byte{0, 192, 62}: "FA. GEBR. HELLER GMBH", - [3]byte{0, 192, 63}: "STORES AUTOMATED SYSTEMS, INC.", - [3]byte{0, 192, 64}: "ECCI", - [3]byte{0, 192, 65}: "DIGITAL TRANSMISSION SYSTEMS", - [3]byte{0, 192, 66}: "DATALUX CORP.", - [3]byte{0, 192, 67}: "STRATACOM", - [3]byte{0, 192, 68}: "EMCOM CORPORATION", - [3]byte{0, 192, 69}: "ISOLATION SYSTEMS, LTD.", - [3]byte{0, 192, 70}: "Blue Chip Technology Ltd", - [3]byte{0, 192, 71}: "UNIMICRO SYSTEMS, INC.", - [3]byte{0, 192, 72}: "BAY TECHNICAL ASSOCIATES", - [3]byte{0, 192, 73}: "U.S. ROBOTICS, INC.", - [3]byte{0, 192, 74}: "GROUP 2000 AG", - [3]byte{0, 192, 75}: "CREATIVE MICROSYSTEMS", - [3]byte{0, 192, 76}: "DEPARTMENT OF FOREIGN AFFAIRS", - [3]byte{0, 192, 77}: "MITEC, INC.", - [3]byte{0, 192, 78}: "COMTROL CORPORATION", - [3]byte{0, 192, 79}: "Dell Inc.", - [3]byte{0, 192, 80}: "TOYO DENKI SEIZO K.K.", - [3]byte{0, 192, 81}: "ADVANCED INTEGRATION RESEARCH", - [3]byte{0, 192, 82}: "BURR-BROWN", - [3]byte{0, 192, 83}: "Aspect Software Inc.", - [3]byte{0, 192, 84}: "NETWORK PERIPHERALS, LTD.", - [3]byte{0, 192, 85}: "MODULAR COMPUTING TECHNOLOGIES", - [3]byte{0, 192, 86}: "SOMELEC", - [3]byte{0, 192, 87}: "MYCO ELECTRONICS", - [3]byte{0, 192, 88}: "DATAEXPERT CORP.", - [3]byte{0, 192, 89}: "DENSO CORPORATION", - [3]byte{0, 192, 90}: "SEMAPHORE COMMUNICATIONS CORP.", - [3]byte{0, 192, 91}: "NETWORKS NORTHWEST, INC.", - [3]byte{0, 192, 92}: "ELONEX PLC", - [3]byte{0, 192, 93}: "L&N TECHNOLOGIES", - [3]byte{0, 192, 94}: "VARI-LITE, INC.", - [3]byte{0, 192, 95}: "FINE-PAL COMPANY LIMITED", - [3]byte{0, 192, 96}: "ID SCANDINAVIA AS", - [3]byte{0, 192, 97}: "SOLECTEK CORPORATION", - [3]byte{0, 192, 98}: "IMPULSE TECHNOLOGY", - [3]byte{0, 192, 99}: "MORNING STAR TECHNOLOGIES, INC", - [3]byte{0, 192, 100}: "General Datacomm LLC", - [3]byte{0, 192, 101}: "SCOPE COMMUNICATIONS, INC.", - [3]byte{0, 192, 102}: "DOCUPOINT, INC.", - [3]byte{0, 192, 103}: "UNITED BARCODE INDUSTRIES", - [3]byte{0, 192, 104}: "HME Clear-Com LTD.", - [3]byte{0, 192, 105}: "Axxcelera Broadband Wireless", - [3]byte{0, 192, 106}: "ZAHNER-ELEKTRIK GMBH & CO. KG", - [3]byte{0, 192, 107}: "OSI PLUS CORPORATION", - [3]byte{0, 192, 108}: "SVEC COMPUTER CORP.", - [3]byte{0, 192, 109}: "BOCA RESEARCH, INC.", - [3]byte{0, 192, 110}: "HAFT TECHNOLOGY, INC.", - [3]byte{0, 192, 111}: "KOMATSU LTD.", - [3]byte{0, 192, 112}: "SECTRA SECURE-TRANSMISSION AB", - [3]byte{0, 192, 113}: "AREANEX COMMUNICATIONS, INC.", - [3]byte{0, 192, 114}: "KNX LTD.", - [3]byte{0, 192, 115}: "XEDIA CORPORATION", - [3]byte{0, 192, 116}: "TOYODA AUTOMATIC LOOM", - [3]byte{0, 192, 117}: "XANTE CORPORATION", - [3]byte{0, 192, 118}: "I-DATA INTERNATIONAL A-S", - [3]byte{0, 192, 119}: "DAEWOO TELECOM LTD.", - [3]byte{0, 192, 120}: "COMPUTER SYSTEMS ENGINEERING", - [3]byte{0, 192, 121}: "FONSYS CO.,LTD.", - [3]byte{0, 192, 122}: "PRIVA B.V.", - [3]byte{0, 192, 123}: "ASCEND COMMUNICATIONS, INC.", - [3]byte{0, 192, 124}: "HIGHTECH INFORMATION", - [3]byte{0, 192, 125}: "RISC DEVELOPMENTS LTD.", - [3]byte{0, 192, 126}: "KUBOTA CORPORATION ELECTRONIC", - [3]byte{0, 192, 127}: "NUPON COMPUTING CORP.", - [3]byte{0, 192, 128}: "NETSTAR, INC.", - [3]byte{0, 192, 129}: "METRODATA LTD.", - [3]byte{0, 192, 130}: "MOORE PRODUCTS CO.", - [3]byte{0, 192, 131}: "TRACE MOUNTAIN PRODUCTS, INC.", - [3]byte{0, 192, 132}: "DATA LINK CORP. LTD.", - [3]byte{0, 192, 133}: "ELECTRONICS FOR IMAGING, INC.", - [3]byte{0, 192, 134}: "THE LYNK CORPORATION", - [3]byte{0, 192, 135}: "UUNET TECHNOLOGIES, INC.", - [3]byte{0, 192, 136}: "EKF ELEKTRONIK GMBH", - [3]byte{0, 192, 137}: "TELINDUS DISTRIBUTION", - [3]byte{0, 192, 138}: "Lauterbach GmbH", - [3]byte{0, 192, 139}: "RISQ MODULAR SYSTEMS, INC.", - [3]byte{0, 192, 140}: "PERFORMANCE TECHNOLOGIES, INC.", - [3]byte{0, 192, 141}: "TRONIX PRODUCT DEVELOPMENT", - [3]byte{0, 192, 142}: "NETWORK INFORMATION TECHNOLOGY", - [3]byte{0, 192, 143}: "Panasonic Electric Works Co., Ltd.", - [3]byte{0, 192, 144}: "PRAIM S.R.L.", - [3]byte{0, 192, 145}: "JABIL CIRCUIT, INC.", - [3]byte{0, 192, 146}: "MENNEN MEDICAL INC.", - [3]byte{0, 192, 147}: "ALTA RESEARCH CORP.", - [3]byte{0, 192, 148}: "VMX INC.", - [3]byte{0, 192, 149}: "ZNYX Networks, Inc.", - [3]byte{0, 192, 150}: "TAMURA CORPORATION", - [3]byte{0, 192, 151}: "ARCHIPEL SA", - [3]byte{0, 192, 152}: "CHUNTEX ELECTRONIC CO., LTD.", - [3]byte{0, 192, 153}: "YOSHIKI INDUSTRIAL CO.,LTD.", - [3]byte{0, 192, 154}: "PHOTONICS CORPORATION", - [3]byte{0, 192, 155}: "RELIANCE COMM/TEC, R-TEC", - [3]byte{0, 192, 156}: "HIOKI E.E. CORPORATION", - [3]byte{0, 192, 157}: "DISTRIBUTED SYSTEMS INT'L, INC", - [3]byte{0, 192, 158}: "CACHE COMPUTERS, INC.", - [3]byte{0, 192, 159}: "QUANTA COMPUTER INC.", - [3]byte{0, 192, 160}: "ADVANCE MICRO RESEARCH, INC.", - [3]byte{0, 192, 161}: "TOKYO DENSHI SEKEI CO.", - [3]byte{0, 192, 162}: "INTERMEDIUM A/S", - [3]byte{0, 192, 163}: "DUAL ENTERPRISES CORPORATION", - [3]byte{0, 192, 164}: "UNIGRAF OY", - [3]byte{0, 192, 165}: "DICKENS DATA SYSTEMS", - [3]byte{0, 192, 166}: "EXICOM AUSTRALIA PTY. LTD", - [3]byte{0, 192, 167}: "SEEL LTD.", - [3]byte{0, 192, 168}: "GVC CORPORATION", - [3]byte{0, 192, 169}: "BARRON MCCANN LTD.", - [3]byte{0, 192, 170}: "SILICON VALLEY COMPUTER", - [3]byte{0, 192, 171}: "Telco Systems, Inc.", - [3]byte{0, 192, 172}: "GAMBIT COMPUTER COMMUNICATIONS", - [3]byte{0, 192, 173}: "MARBEN COMMUNICATION SYSTEMS", - [3]byte{0, 192, 174}: "TOWERCOM CO. INC. DBA PC HOUSE", - [3]byte{0, 192, 175}: "TEKLOGIX INC.", - [3]byte{0, 192, 176}: "GCC TECHNOLOGIES,INC.", - [3]byte{0, 192, 177}: "GENIUS NET CO.", - [3]byte{0, 192, 178}: "NORAND CORPORATION", - [3]byte{0, 192, 179}: "COMSTAT DATACOMM CORPORATION", - [3]byte{0, 192, 180}: "MYSON TECHNOLOGY, INC.", - [3]byte{0, 192, 181}: "CORPORATE NETWORK SYSTEMS,INC.", - [3]byte{0, 192, 182}: "Overland Storage, Inc.", - [3]byte{0, 192, 183}: "AMERICAN POWER CONVERSION CORP", - [3]byte{0, 192, 184}: "FRASER'S HILL LTD.", - [3]byte{0, 192, 185}: "FUNK SOFTWARE, INC.", - [3]byte{0, 192, 186}: "NETVANTAGE", - [3]byte{0, 192, 187}: "FORVAL CREATIVE, INC.", - [3]byte{0, 192, 188}: "TELECOM AUSTRALIA/CSSC", - [3]byte{0, 192, 189}: "INEX TECHNOLOGIES, INC.", - [3]byte{0, 192, 190}: "ALCATEL - SEL", - [3]byte{0, 192, 191}: "TECHNOLOGY CONCEPTS, LTD.", - [3]byte{0, 192, 192}: "SHORE MICROSYSTEMS, INC.", - [3]byte{0, 192, 193}: "QUAD/GRAPHICS, INC.", - [3]byte{0, 192, 194}: "INFINITE NETWORKS LTD.", - [3]byte{0, 192, 195}: "ACUSON COMPUTED SONOGRAPHY", - [3]byte{0, 192, 196}: "COMPUTER OPERATIONAL", - [3]byte{0, 192, 197}: "SID INFORMATICA", - [3]byte{0, 192, 198}: "PERSONAL MEDIA CORP.", - [3]byte{0, 192, 199}: "SPARKTRUM MICROSYSTEMS, INC.", - [3]byte{0, 192, 200}: "MICRO BYTE PTY. LTD.", - [3]byte{0, 192, 201}: "ELSAG BAILEY PROCESS", - [3]byte{0, 192, 202}: "ALFA, INC.", - [3]byte{0, 192, 203}: "CONTROL TECHNOLOGY CORPORATION", - [3]byte{0, 192, 204}: "TELESCIENCES CO SYSTEMS, INC.", - [3]byte{0, 192, 205}: "COMELTA, S.A.", - [3]byte{0, 192, 206}: "CEI SYSTEMS & ENGINEERING PTE", - [3]byte{0, 192, 207}: "IMATRAN VOIMA OY", - [3]byte{0, 192, 208}: "RATOC SYSTEM INC.", - [3]byte{0, 192, 209}: "COMTREE TECHNOLOGY CORPORATION", - [3]byte{0, 192, 210}: "SYNTELLECT, INC.", - [3]byte{0, 192, 211}: "OLYMPUS IMAGE SYSTEMS, INC.", - [3]byte{0, 192, 212}: "AXON NETWORKS, INC.", - [3]byte{0, 192, 213}: "Werbeagentur Jürgen Siebert", - [3]byte{0, 192, 214}: "J1 SYSTEMS, INC.", - [3]byte{0, 192, 215}: "TAIWAN TRADING CENTER DBA", - [3]byte{0, 192, 216}: "UNIVERSAL DATA SYSTEMS", - [3]byte{0, 192, 217}: "QUINTE NETWORK CONFIDENTIALITY", - [3]byte{0, 192, 218}: "NICE SYSTEMS LTD.", - [3]byte{0, 192, 219}: "IPC CORPORATION (PTE) LTD.", - [3]byte{0, 192, 220}: "EOS TECHNOLOGIES, INC.", - [3]byte{0, 192, 221}: "QLogic Corporation", - [3]byte{0, 192, 222}: "ZCOMM, INC.", - [3]byte{0, 192, 223}: "KYE Systems Corp.", - [3]byte{0, 192, 224}: "DSC COMMUNICATION CORP.", - [3]byte{0, 192, 225}: "SONIC SOLUTIONS", - [3]byte{0, 192, 226}: "CALCOMP, INC.", - [3]byte{0, 192, 227}: "OSITECH COMMUNICATIONS, INC.", - [3]byte{0, 192, 228}: "SIEMENS BUILDING", - [3]byte{0, 192, 229}: "GESPAC, S.A.", - [3]byte{0, 192, 230}: "Verilink Corporation", - [3]byte{0, 192, 231}: "FIBERDATA AB", - [3]byte{0, 192, 232}: "PLEXCOM, INC.", - [3]byte{0, 192, 233}: "OAK SOLUTIONS, LTD.", - [3]byte{0, 192, 234}: "ARRAY TECHNOLOGY LTD.", - [3]byte{0, 192, 235}: "SEH COMPUTERTECHNIK GMBH", - [3]byte{0, 192, 236}: "DAUPHIN TECHNOLOGY", - [3]byte{0, 192, 237}: "US ARMY ELECTRONIC", - [3]byte{0, 192, 238}: "KYOCERA Display Corporation", - [3]byte{0, 192, 239}: "ABIT CORPORATION", - [3]byte{0, 192, 240}: "Kingston Technology Company, Inc.", - [3]byte{0, 192, 241}: "SHINKO ELECTRIC CO., LTD.", - [3]byte{0, 192, 242}: "TRANSITION NETWORKS", - [3]byte{0, 192, 243}: "NETWORK COMMUNICATIONS CORP.", - [3]byte{0, 192, 244}: "INTERLINK SYSTEM CO., LTD.", - [3]byte{0, 192, 245}: "METACOMP, INC.", - [3]byte{0, 192, 246}: "CELAN TECHNOLOGY INC.", - [3]byte{0, 192, 247}: "ENGAGE COMMUNICATION, INC.", - [3]byte{0, 192, 248}: "ABOUT COMPUTING INC.", - [3]byte{0, 192, 249}: "Artesyn Embedded Technologies", - [3]byte{0, 192, 250}: "CANARY COMMUNICATIONS, INC.", - [3]byte{0, 192, 251}: "ADVANCED TECHNOLOGY LABS", - [3]byte{0, 192, 252}: "ELASTIC REALITY, INC.", - [3]byte{0, 192, 253}: "PROSUM", - [3]byte{0, 192, 254}: "APTEC COMPUTER SYSTEMS, INC.", - [3]byte{0, 192, 255}: "Seagate Cloud Systems Inc", - [3]byte{0, 193, 79}: "DDL Co,.ltd.", - [3]byte{0, 193, 100}: "Cisco Systems, Inc", - [3]byte{0, 193, 177}: "Cisco Systems, Inc", - [3]byte{0, 194, 198}: "Intel Corporate", - [3]byte{0, 197, 219}: "Datatech Sistemas Digitales Avanzados SL", - [3]byte{0, 198, 16}: "Apple, Inc.", - [3]byte{0, 200, 139}: "Cisco Systems, Inc", - [3]byte{0, 202, 229}: "Cisco Systems, Inc", - [3]byte{0, 203, 0}: "Private", - [3]byte{0, 203, 189}: "Cambridge Broadband Networks Ltd.", - [3]byte{0, 204, 252}: "Cisco Systems, Inc", - [3]byte{0, 205, 144}: "MAS Elektronik AG", - [3]byte{0, 205, 254}: "Apple, Inc.", - [3]byte{0, 207, 28}: "Communication Machinery Corporation", - [3]byte{0, 208, 0}: "FERRAN SCIENTIFIC, INC.", - [3]byte{0, 208, 1}: "VST TECHNOLOGIES, INC.", - [3]byte{0, 208, 2}: "DITECH CORPORATION", - [3]byte{0, 208, 3}: "COMDA ENTERPRISES CORP.", - [3]byte{0, 208, 4}: "PENTACOM LTD.", - [3]byte{0, 208, 5}: "ZHS ZEITMANAGEMENTSYSTEME", - [3]byte{0, 208, 6}: "Cisco Systems, Inc", - [3]byte{0, 208, 7}: "MIC ASSOCIATES, INC.", - [3]byte{0, 208, 8}: "MACTELL CORPORATION", - [3]byte{0, 208, 9}: "HSING TECH. ENTERPRISE CO. LTD", - [3]byte{0, 208, 10}: "LANACCESS TELECOM S.A.", - [3]byte{0, 208, 11}: "RHK TECHNOLOGY, INC.", - [3]byte{0, 208, 12}: "SNIJDER MICRO SYSTEMS", - [3]byte{0, 208, 13}: "MICROMERITICS INSTRUMENT", - [3]byte{0, 208, 14}: "PLURIS, INC.", - [3]byte{0, 208, 15}: "SPEECH DESIGN GMBH", - [3]byte{0, 208, 16}: "CONVERGENT NETWORKS, INC.", - [3]byte{0, 208, 17}: "PRISM VIDEO, INC.", - [3]byte{0, 208, 18}: "GATEWORKS CORP.", - [3]byte{0, 208, 19}: "PRIMEX AEROSPACE COMPANY", - [3]byte{0, 208, 20}: "ROOT, INC.", - [3]byte{0, 208, 21}: "UNIVEX MICROTECHNOLOGY CORP.", - [3]byte{0, 208, 22}: "SCM MICROSYSTEMS, INC.", - [3]byte{0, 208, 23}: "SYNTECH INFORMATION CO., LTD.", - [3]byte{0, 208, 24}: "QWES. COM, INC.", - [3]byte{0, 208, 25}: "DAINIPPON SCREEN CORPORATE", - [3]byte{0, 208, 26}: "URMET TLC S.P.A.", - [3]byte{0, 208, 27}: "MIMAKI ENGINEERING CO., LTD.", - [3]byte{0, 208, 28}: "SBS TECHNOLOGIES,", - [3]byte{0, 208, 29}: "FURUNO ELECTRIC CO., LTD.", - [3]byte{0, 208, 30}: "PINGTEL CORP.", - [3]byte{0, 208, 31}: "Senetas Corporation Ltd", - [3]byte{0, 208, 32}: "AIM SYSTEM, INC.", - [3]byte{0, 208, 33}: "REGENT ELECTRONICS CORP.", - [3]byte{0, 208, 34}: "INCREDIBLE TECHNOLOGIES, INC.", - [3]byte{0, 208, 35}: "INFORTREND TECHNOLOGY, INC.", - [3]byte{0, 208, 36}: "Cognex Corporation", - [3]byte{0, 208, 37}: "XROSSTECH, INC.", - [3]byte{0, 208, 38}: "HIRSCHMANN AUSTRIA GMBH", - [3]byte{0, 208, 39}: "APPLIED AUTOMATION, INC.", - [3]byte{0, 208, 40}: "Harmonic, Inc", - [3]byte{0, 208, 41}: "WAKEFERN FOOD CORPORATION", - [3]byte{0, 208, 42}: "Voxent Systems Ltd.", - [3]byte{0, 208, 43}: "JETCELL, INC.", - [3]byte{0, 208, 44}: "CAMPBELL SCIENTIFIC, INC.", - [3]byte{0, 208, 45}: "ADEMCO", - [3]byte{0, 208, 46}: "COMMUNICATION AUTOMATION CORP.", - [3]byte{0, 208, 47}: "VLSI TECHNOLOGY INC.", - [3]byte{0, 208, 48}: "Safetran Systems Corp", - [3]byte{0, 208, 49}: "INDUSTRIAL LOGIC CORPORATION", - [3]byte{0, 208, 50}: "YANO ELECTRIC CO., LTD.", - [3]byte{0, 208, 51}: "DALIAN DAXIAN NETWORK", - [3]byte{0, 208, 52}: "ORMEC SYSTEMS CORP.", - [3]byte{0, 208, 53}: "BEHAVIOR TECH. COMPUTER CORP.", - [3]byte{0, 208, 54}: "TECHNOLOGY ATLANTA CORP.", - [3]byte{0, 208, 55}: "ARRIS Group, Inc.", - [3]byte{0, 208, 56}: "FIVEMERE, LTD.", - [3]byte{0, 208, 57}: "UTILICOM, INC.", - [3]byte{0, 208, 58}: "ZONEWORX, INC.", - [3]byte{0, 208, 59}: "VISION PRODUCTS PTY. LTD.", - [3]byte{0, 208, 60}: "Vieo, Inc.", - [3]byte{0, 208, 61}: "GALILEO TECHNOLOGY, LTD.", - [3]byte{0, 208, 62}: "ROCKETCHIPS, INC.", - [3]byte{0, 208, 63}: "AMERICAN COMMUNICATION", - [3]byte{0, 208, 64}: "SYSMATE CO., LTD.", - [3]byte{0, 208, 65}: "AMIGO TECHNOLOGY CO., LTD.", - [3]byte{0, 208, 66}: "MAHLO GMBH & CO. UG", - [3]byte{0, 208, 67}: "ZONAL RETAIL DATA SYSTEMS", - [3]byte{0, 208, 68}: "ALIDIAN NETWORKS, INC.", - [3]byte{0, 208, 69}: "KVASER AB", - [3]byte{0, 208, 70}: "DOLBY LABORATORIES, INC.", - [3]byte{0, 208, 71}: "XN TECHNOLOGIES", - [3]byte{0, 208, 72}: "ECTON, INC.", - [3]byte{0, 208, 73}: "IMPRESSTEK CO., LTD.", - [3]byte{0, 208, 74}: "PRESENCE TECHNOLOGY GMBH", - [3]byte{0, 208, 75}: "LA CIE GROUP S.A.", - [3]byte{0, 208, 76}: "EUROTEL TELECOM LTD.", - [3]byte{0, 208, 77}: "DIV OF RESEARCH & STATISTICS", - [3]byte{0, 208, 78}: "LOGIBAG", - [3]byte{0, 208, 79}: "BITRONICS, INC.", - [3]byte{0, 208, 80}: "ISKRATEL", - [3]byte{0, 208, 81}: "O2 MICRO, INC.", - [3]byte{0, 208, 82}: "ASCEND COMMUNICATIONS, INC.", - [3]byte{0, 208, 83}: "CONNECTED SYSTEMS", - [3]byte{0, 208, 84}: "SAS INSTITUTE INC.", - [3]byte{0, 208, 85}: "KATHREIN-WERKE KG", - [3]byte{0, 208, 86}: "SOMAT CORPORATION", - [3]byte{0, 208, 87}: "ULTRAK, INC.", - [3]byte{0, 208, 88}: "Cisco Systems, Inc", - [3]byte{0, 208, 89}: "AMBIT MICROSYSTEMS CORP.", - [3]byte{0, 208, 90}: "SYMBIONICS, LTD.", - [3]byte{0, 208, 91}: "ACROLOOP MOTION CONTROL", - [3]byte{0, 208, 92}: "KATHREIN TechnoTrend GmbH", - [3]byte{0, 208, 93}: "INTELLIWORXX, INC.", - [3]byte{0, 208, 94}: "STRATABEAM TECHNOLOGY, INC.", - [3]byte{0, 208, 95}: "VALCOM, INC.", - [3]byte{0, 208, 96}: "Panasonic Europe Ltd.", - [3]byte{0, 208, 97}: "TREMON ENTERPRISES CO., LTD.", - [3]byte{0, 208, 98}: "DIGIGRAM", - [3]byte{0, 208, 99}: "Cisco Systems, Inc", - [3]byte{0, 208, 100}: "MULTITEL", - [3]byte{0, 208, 101}: "TOKO ELECTRIC", - [3]byte{0, 208, 102}: "WINTRISS ENGINEERING CORP.", - [3]byte{0, 208, 103}: "CAMPIO COMMUNICATIONS", - [3]byte{0, 208, 104}: "IWILL CORPORATION", - [3]byte{0, 208, 105}: "TECHNOLOGIC SYSTEMS", - [3]byte{0, 208, 106}: "LINKUP SYSTEMS CORPORATION", - [3]byte{0, 208, 107}: "SR TELECOM INC.", - [3]byte{0, 208, 108}: "SHAREWAVE, INC.", - [3]byte{0, 208, 109}: "ACRISON, INC.", - [3]byte{0, 208, 110}: "TRENDVIEW RECORDERS LTD.", - [3]byte{0, 208, 111}: "KMC CONTROLS", - [3]byte{0, 208, 112}: "LONG WELL ELECTRONICS CORP.", - [3]byte{0, 208, 113}: "ECHELON CORP.", - [3]byte{0, 208, 114}: "BROADLOGIC", - [3]byte{0, 208, 115}: "ACN ADVANCED COMMUNICATIONS", - [3]byte{0, 208, 116}: "TAQUA SYSTEMS, INC.", - [3]byte{0, 208, 117}: "ALARIS MEDICAL SYSTEMS, INC.", - [3]byte{0, 208, 118}: "Bank of America", - [3]byte{0, 208, 119}: "LUCENT TECHNOLOGIES", - [3]byte{0, 208, 120}: "Eltex of Sweden AB", - [3]byte{0, 208, 121}: "Cisco Systems, Inc", - [3]byte{0, 208, 122}: "AMAQUEST COMPUTER CORP.", - [3]byte{0, 208, 123}: "COMCAM INTERNATIONAL INC", - [3]byte{0, 208, 124}: "KOYO ELECTRONICS INC. CO.,LTD.", - [3]byte{0, 208, 125}: "COSINE COMMUNICATIONS", - [3]byte{0, 208, 126}: "KEYCORP LTD.", - [3]byte{0, 208, 127}: "STRATEGY & TECHNOLOGY, LIMITED", - [3]byte{0, 208, 128}: "EXABYTE CORPORATION", - [3]byte{0, 208, 129}: "RTD Embedded Technologies, Inc.", - [3]byte{0, 208, 130}: "IOWAVE INC.", - [3]byte{0, 208, 131}: "INVERTEX, INC.", - [3]byte{0, 208, 132}: "NEXCOMM SYSTEMS, INC.", - [3]byte{0, 208, 133}: "OTIS ELEVATOR COMPANY", - [3]byte{0, 208, 134}: "FOVEON, INC.", - [3]byte{0, 208, 135}: "MICROFIRST INC.", - [3]byte{0, 208, 136}: "ARRIS Group, Inc.", - [3]byte{0, 208, 137}: "DYNACOLOR, INC.", - [3]byte{0, 208, 138}: "PHOTRON USA", - [3]byte{0, 208, 139}: "ADVA Optical Networking Ltd.", - [3]byte{0, 208, 140}: "GENOA TECHNOLOGY, INC.", - [3]byte{0, 208, 141}: "PHOENIX GROUP, INC.", - [3]byte{0, 208, 142}: "Grass Valley, A Belden Brand", - [3]byte{0, 208, 143}: "ARDENT TECHNOLOGIES, INC.", - [3]byte{0, 208, 144}: "Cisco Systems, Inc", - [3]byte{0, 208, 145}: "SMARTSAN SYSTEMS, INC.", - [3]byte{0, 208, 146}: "GLENAYRE WESTERN MULTIPLEX", - [3]byte{0, 208, 147}: "TQ - COMPONENTS GMBH", - [3]byte{0, 208, 148}: "Seeion Control LLC", - [3]byte{0, 208, 149}: "Alcatel-Lucent Enterprise", - [3]byte{0, 208, 150}: "3COM EUROPE LTD.", - [3]byte{0, 208, 151}: "Cisco Systems, Inc", - [3]byte{0, 208, 152}: "Photon Dynamics Canada Inc.", - [3]byte{0, 208, 153}: "Elcard Wireless Systems Oy", - [3]byte{0, 208, 154}: "FILANET CORPORATION", - [3]byte{0, 208, 155}: "SPECTEL LTD.", - [3]byte{0, 208, 156}: "KAPADIA COMMUNICATIONS", - [3]byte{0, 208, 157}: "VERIS INDUSTRIES", - [3]byte{0, 208, 158}: "2Wire Inc", - [3]byte{0, 208, 159}: "NOVTEK TEST SYSTEMS", - [3]byte{0, 208, 160}: "MIPS DENMARK", - [3]byte{0, 208, 161}: "OSKAR VIERLING GMBH + CO. KG", - [3]byte{0, 208, 162}: "INTEGRATED DEVICE", - [3]byte{0, 208, 163}: "VOCAL DATA, INC.", - [3]byte{0, 208, 164}: "ALANTRO COMMUNICATIONS", - [3]byte{0, 208, 165}: "AMERICAN ARIUM", - [3]byte{0, 208, 166}: "LANBIRD TECHNOLOGY CO., LTD.", - [3]byte{0, 208, 167}: "TOKYO SOKKI KENKYUJO CO., LTD.", - [3]byte{0, 208, 168}: "NETWORK ENGINES, INC.", - [3]byte{0, 208, 169}: "SHINANO KENSHI CO., LTD.", - [3]byte{0, 208, 170}: "CHASE COMMUNICATIONS", - [3]byte{0, 208, 171}: "DELTAKABEL TELECOM CV", - [3]byte{0, 208, 172}: "Commscope, Inc", - [3]byte{0, 208, 173}: "TL INDUSTRIES", - [3]byte{0, 208, 174}: "ORESIS COMMUNICATIONS, INC.", - [3]byte{0, 208, 175}: "CUTLER-HAMMER, INC.", - [3]byte{0, 208, 176}: "BITSWITCH LTD.", - [3]byte{0, 208, 177}: "OMEGA ELECTRONICS SA", - [3]byte{0, 208, 178}: "Xiotech Corporation", - [3]byte{0, 208, 179}: "DRS Technologies Canada Ltd", - [3]byte{0, 208, 180}: "KATSUJIMA CO., LTD.", - [3]byte{0, 208, 181}: "IPricot formerly DotCom", - [3]byte{0, 208, 182}: "CRESCENT NETWORKS, INC.", - [3]byte{0, 208, 183}: "Intel Corporation", - [3]byte{0, 208, 184}: "Iomega Corporation", - [3]byte{0, 208, 185}: "MICROTEK INTERNATIONAL, INC.", - [3]byte{0, 208, 186}: "Cisco Systems, Inc", - [3]byte{0, 208, 187}: "Cisco Systems, Inc", - [3]byte{0, 208, 188}: "Cisco Systems, Inc", - [3]byte{0, 208, 189}: "Lattice Semiconductor Corp. (LPA)", - [3]byte{0, 208, 190}: "EMUTEC INC.", - [3]byte{0, 208, 191}: "PIVOTAL TECHNOLOGIES", - [3]byte{0, 208, 192}: "Cisco Systems, Inc", - [3]byte{0, 208, 193}: "HARMONIC DATA SYSTEMS, LTD.", - [3]byte{0, 208, 194}: "BALTHAZAR TECHNOLOGY AB", - [3]byte{0, 208, 195}: "VIVID TECHNOLOGY PTE, LTD.", - [3]byte{0, 208, 196}: "TERATECH CORPORATION", - [3]byte{0, 208, 197}: "COMPUTATIONAL SYSTEMS, INC.", - [3]byte{0, 208, 198}: "THOMAS & BETTS CORP.", - [3]byte{0, 208, 199}: "PATHWAY, INC.", - [3]byte{0, 208, 200}: "Prevas A/S", - [3]byte{0, 208, 201}: "ADVANTECH CO., LTD.", - [3]byte{0, 208, 202}: "Intrinsyc Software International Inc.", - [3]byte{0, 208, 203}: "DASAN CO., LTD.", - [3]byte{0, 208, 204}: "TECHNOLOGIES LYRE INC.", - [3]byte{0, 208, 205}: "ATAN TECHNOLOGY INC.", - [3]byte{0, 208, 206}: "ASYST ELECTRONIC", - [3]byte{0, 208, 207}: "MORETON BAY", - [3]byte{0, 208, 208}: "ZHONGXING TELECOM LTD.", - [3]byte{0, 208, 209}: "Sycamore Networks", - [3]byte{0, 208, 210}: "EPILOG CORPORATION", - [3]byte{0, 208, 211}: "Cisco Systems, Inc", - [3]byte{0, 208, 212}: "V-BITS, INC.", - [3]byte{0, 208, 213}: "GRUNDIG AG", - [3]byte{0, 208, 214}: "AETHRA TELECOMUNICAZIONI", - [3]byte{0, 208, 215}: "B2C2, INC.", - [3]byte{0, 208, 216}: "3Com Corporation", - [3]byte{0, 208, 217}: "DEDICATED MICROCOMPUTERS", - [3]byte{0, 208, 218}: "TAICOM DATA SYSTEMS CO., LTD.", - [3]byte{0, 208, 219}: "MCQUAY INTERNATIONAL", - [3]byte{0, 208, 220}: "MODULAR MINING SYSTEMS, INC.", - [3]byte{0, 208, 221}: "SUNRISE TELECOM, INC.", - [3]byte{0, 208, 222}: "PHILIPS MULTIMEDIA NETWORK", - [3]byte{0, 208, 223}: "KUZUMI ELECTRONICS, INC.", - [3]byte{0, 208, 224}: "DOOIN ELECTRONICS CO.", - [3]byte{0, 208, 225}: "AVIONITEK ISRAEL INC.", - [3]byte{0, 208, 226}: "MRT MICRO, INC.", - [3]byte{0, 208, 227}: "ELE-CHEM ENGINEERING CO., LTD.", - [3]byte{0, 208, 228}: "Cisco Systems, Inc", - [3]byte{0, 208, 229}: "SOLIDUM SYSTEMS CORP.", - [3]byte{0, 208, 230}: "IBOND INC.", - [3]byte{0, 208, 231}: "VCON TELECOMMUNICATION LTD.", - [3]byte{0, 208, 232}: "MAC SYSTEM CO., LTD.", - [3]byte{0, 208, 233}: "Advantage Century Telecommunication Corp.", - [3]byte{0, 208, 234}: "NEXTONE COMMUNICATIONS, INC.", - [3]byte{0, 208, 235}: "LIGHTERA NETWORKS, INC.", - [3]byte{0, 208, 236}: "NAKAYO Inc", - [3]byte{0, 208, 237}: "XIOX", - [3]byte{0, 208, 238}: "DICTAPHONE CORPORATION", - [3]byte{0, 208, 239}: "IGT", - [3]byte{0, 208, 240}: "CONVISION TECHNOLOGY GMBH", - [3]byte{0, 208, 241}: "SEGA ENTERPRISES, LTD.", - [3]byte{0, 208, 242}: "MONTEREY NETWORKS", - [3]byte{0, 208, 243}: "SOLARI DI UDINE SPA", - [3]byte{0, 208, 244}: "CARINTHIAN TECH INSTITUTE", - [3]byte{0, 208, 245}: "ORANGE MICRO, INC.", - [3]byte{0, 208, 246}: "Nokia", - [3]byte{0, 208, 247}: "NEXT NETS CORPORATION", - [3]byte{0, 208, 248}: "FUJIAN STAR TERMINAL", - [3]byte{0, 208, 249}: "ACUTE COMMUNICATIONS CORP.", - [3]byte{0, 208, 250}: "Thales e-Security Ltd.", - [3]byte{0, 208, 251}: "TEK MICROSYSTEMS, INCORPORATED", - [3]byte{0, 208, 252}: "GRANITE MICROSYSTEMS", - [3]byte{0, 208, 253}: "OPTIMA TELE.COM, INC.", - [3]byte{0, 208, 254}: "ASTRAL POINT", - [3]byte{0, 208, 255}: "Cisco Systems, Inc", - [3]byte{0, 209, 28}: "ACETEL", - [3]byte{0, 211, 24}: "SPG Controls", - [3]byte{0, 211, 141}: "Hotel Technology Next Generation", - [3]byte{0, 214, 50}: "GE Energy", - [3]byte{0, 215, 143}: "Cisco Systems, Inc", - [3]byte{0, 217, 209}: "Sony Interactive Entertainment Inc.", - [3]byte{0, 218, 85}: "Cisco Systems, Inc", - [3]byte{0, 219, 30}: "Albedo Telecom SL", - [3]byte{0, 219, 69}: "THAMWAY CO.,LTD.", - [3]byte{0, 219, 112}: "Apple, Inc.", - [3]byte{0, 219, 223}: "Intel Corporate", - [3]byte{0, 221, 0}: "UNGERMANN-BASS INC.", - [3]byte{0, 221, 1}: "UNGERMANN-BASS INC.", - [3]byte{0, 221, 2}: "UNGERMANN-BASS INC.", - [3]byte{0, 221, 3}: "UNGERMANN-BASS INC.", - [3]byte{0, 221, 4}: "UNGERMANN-BASS INC.", - [3]byte{0, 221, 5}: "UNGERMANN-BASS INC.", - [3]byte{0, 221, 6}: "UNGERMANN-BASS INC.", - [3]byte{0, 221, 7}: "UNGERMANN-BASS INC.", - [3]byte{0, 221, 8}: "UNGERMANN-BASS INC.", - [3]byte{0, 221, 9}: "UNGERMANN-BASS INC.", - [3]byte{0, 221, 10}: "UNGERMANN-BASS INC.", - [3]byte{0, 221, 11}: "UNGERMANN-BASS INC.", - [3]byte{0, 221, 12}: "UNGERMANN-BASS INC.", - [3]byte{0, 221, 13}: "UNGERMANN-BASS INC.", - [3]byte{0, 221, 14}: "UNGERMANN-BASS INC.", - [3]byte{0, 221, 15}: "UNGERMANN-BASS INC.", - [3]byte{0, 222, 251}: "Cisco Systems, Inc", - [3]byte{0, 224, 0}: "FUJITSU LIMITED", - [3]byte{0, 224, 1}: "STRAND LIGHTING LIMITED", - [3]byte{0, 224, 2}: "CROSSROADS SYSTEMS, INC.", - [3]byte{0, 224, 3}: "NOKIA WIRELESS BUSINESS COMMUN", - [3]byte{0, 224, 4}: "PMC-SIERRA, INC.", - [3]byte{0, 224, 5}: "TECHNICAL CORP.", - [3]byte{0, 224, 6}: "SILICON INTEGRATED SYS. CORP.", - [3]byte{0, 224, 7}: "Avaya ECS Ltd", - [3]byte{0, 224, 8}: "AMAZING CONTROLS! INC.", - [3]byte{0, 224, 9}: "MARATHON TECHNOLOGIES CORP.", - [3]byte{0, 224, 10}: "DIBA, INC.", - [3]byte{0, 224, 11}: "ROOFTOP COMMUNICATIONS CORP.", - [3]byte{0, 224, 12}: "MOTOROLA", - [3]byte{0, 224, 13}: "RADIANT SYSTEMS", - [3]byte{0, 224, 14}: "AVALON IMAGING SYSTEMS, INC.", - [3]byte{0, 224, 15}: "Shanghai Baud Data Communication Co.,Ltd.", - [3]byte{0, 224, 16}: "HESS SB-AUTOMATENBAU GmbH", - [3]byte{0, 224, 17}: "UNIDEN CORPORATION", - [3]byte{0, 224, 18}: "PLUTO TECHNOLOGIES INTERNATIONAL INC.", - [3]byte{0, 224, 19}: "EASTERN ELECTRONIC CO., LTD.", - [3]byte{0, 224, 20}: "Cisco Systems, Inc", - [3]byte{0, 224, 21}: "HEIWA CORPORATION", - [3]byte{0, 224, 22}: "RAPID CITY COMMUNICATIONS", - [3]byte{0, 224, 23}: "EXXACT GmbH", - [3]byte{0, 224, 24}: "ASUSTek COMPUTER INC.", - [3]byte{0, 224, 25}: "ING. GIORDANO ELETTRONICA", - [3]byte{0, 224, 26}: "COMTEC SYSTEMS. CO., LTD.", - [3]byte{0, 224, 27}: "SPHERE COMMUNICATIONS, INC.", - [3]byte{0, 224, 28}: "Cradlepoint, Inc", - [3]byte{0, 224, 29}: "WebTV NETWORKS, INC.", - [3]byte{0, 224, 30}: "Cisco Systems, Inc", - [3]byte{0, 224, 31}: "AVIDIA Systems, Inc.", - [3]byte{0, 224, 32}: "TECNOMEN OY", - [3]byte{0, 224, 33}: "FREEGATE CORP.", - [3]byte{0, 224, 34}: "Analog Devices, Inc.", - [3]byte{0, 224, 35}: "TELRAD", - [3]byte{0, 224, 36}: "GADZOOX NETWORKS", - [3]byte{0, 224, 37}: "dit Co., Ltd.", - [3]byte{0, 224, 38}: "Redlake MASD LLC", - [3]byte{0, 224, 39}: "DUX, INC.", - [3]byte{0, 224, 40}: "APTIX CORPORATION", - [3]byte{0, 224, 41}: "STANDARD MICROSYSTEMS CORP.", - [3]byte{0, 224, 42}: "TANDBERG TELEVISION AS", - [3]byte{0, 224, 43}: "Extreme Networks, Inc.", - [3]byte{0, 224, 44}: "AST COMPUTER", - [3]byte{0, 224, 45}: "InnoMediaLogic, Inc.", - [3]byte{0, 224, 46}: "SPC ELECTRONICS CORPORATION", - [3]byte{0, 224, 47}: "MCNS HOLDINGS, L.P.", - [3]byte{0, 224, 48}: "MELITA INTERNATIONAL CORP.", - [3]byte{0, 224, 49}: "HAGIWARA ELECTRIC CO., LTD.", - [3]byte{0, 224, 50}: "MISYS FINANCIAL SYSTEMS, LTD.", - [3]byte{0, 224, 51}: "E.E.P.D. GmbH", - [3]byte{0, 224, 52}: "Cisco Systems, Inc", - [3]byte{0, 224, 53}: "Artesyn Embedded Technologies", - [3]byte{0, 224, 54}: "PIONEER CORPORATION", - [3]byte{0, 224, 55}: "CENTURY CORPORATION", - [3]byte{0, 224, 56}: "PROXIMA CORPORATION", - [3]byte{0, 224, 57}: "PARADYNE CORP.", - [3]byte{0, 224, 58}: "Cabletron Systems, Inc.", - [3]byte{0, 224, 59}: "PROMINET CORPORATION", - [3]byte{0, 224, 60}: "AdvanSys", - [3]byte{0, 224, 61}: "FOCON ELECTRONIC SYSTEMS A/S", - [3]byte{0, 224, 62}: "ALFATECH, INC.", - [3]byte{0, 224, 63}: "JATON CORPORATION", - [3]byte{0, 224, 64}: "DeskStation Technology, Inc.", - [3]byte{0, 224, 65}: "CSPI", - [3]byte{0, 224, 66}: "Pacom Systems Ltd.", - [3]byte{0, 224, 67}: "VitalCom", - [3]byte{0, 224, 68}: "LSICS CORPORATION", - [3]byte{0, 224, 69}: "TOUCHWAVE, INC.", - [3]byte{0, 224, 70}: "BENTLY NEVADA CORP.", - [3]byte{0, 224, 71}: "InFocus Corporation", - [3]byte{0, 224, 72}: "SDL COMMUNICATIONS, INC.", - [3]byte{0, 224, 73}: "MICROWI ELECTRONIC GmbH", - [3]byte{0, 224, 74}: "ZX Technologies, Inc", - [3]byte{0, 224, 75}: "JUMP INDUSTRIELLE COMPUTERTECHNIK GmbH", - [3]byte{0, 224, 76}: "REALTEK SEMICONDUCTOR CORP.", - [3]byte{0, 224, 77}: "INTERNET INITIATIVE JAPAN, INC", - [3]byte{0, 224, 78}: "SANYO DENKI CO., LTD.", - [3]byte{0, 224, 79}: "Cisco Systems, Inc", - [3]byte{0, 224, 80}: "EXECUTONE INFORMATION SYSTEMS, INC.", - [3]byte{0, 224, 81}: "TALX CORPORATION", - [3]byte{0, 224, 82}: "Brocade Communications Systems, Inc.", - [3]byte{0, 224, 83}: "CELLPORT LABS, INC.", - [3]byte{0, 224, 84}: "KODAI HITEC CO., LTD.", - [3]byte{0, 224, 85}: "INGENIERIA ELECTRONICA COMERCIAL INELCOM S.A.", - [3]byte{0, 224, 86}: "HOLONTECH CORPORATION", - [3]byte{0, 224, 87}: "HAN MICROTELECOM. CO., LTD.", - [3]byte{0, 224, 88}: "PHASE ONE DENMARK A/S", - [3]byte{0, 224, 89}: "CONTROLLED ENVIRONMENTS, LTD.", - [3]byte{0, 224, 90}: "GALEA NETWORK SECURITY", - [3]byte{0, 224, 91}: "WEST END SYSTEMS CORP.", - [3]byte{0, 224, 92}: "Panasonic Healthcare Co., Ltd.", - [3]byte{0, 224, 93}: "UNITEC CO., LTD.", - [3]byte{0, 224, 94}: "JAPAN AVIATION ELECTRONICS INDUSTRY, LTD.", - [3]byte{0, 224, 95}: "e-Net, Inc.", - [3]byte{0, 224, 96}: "SHERWOOD", - [3]byte{0, 224, 97}: "EdgePoint Networks, Inc.", - [3]byte{0, 224, 98}: "HOST ENGINEERING", - [3]byte{0, 224, 99}: "Cabletron Systems, Inc.", - [3]byte{0, 224, 100}: "SAMSUNG ELECTRONICS", - [3]byte{0, 224, 101}: "OPTICAL ACCESS INTERNATIONAL", - [3]byte{0, 224, 102}: "ProMax Systems, Inc.", - [3]byte{0, 224, 103}: "eac AUTOMATION-CONSULTING GmbH", - [3]byte{0, 224, 104}: "MERRIMAC SYSTEMS INC.", - [3]byte{0, 224, 105}: "JAYCOR", - [3]byte{0, 224, 106}: "KAPSCH AG", - [3]byte{0, 224, 107}: "W&G SPECIAL PRODUCTS", - [3]byte{0, 224, 108}: "Ultra Electronics Command & Control Systems", - [3]byte{0, 224, 109}: "COMPUWARE CORPORATION", - [3]byte{0, 224, 110}: "FAR SYSTEMS S.p.A.", - [3]byte{0, 224, 111}: "ARRIS Group, Inc.", - [3]byte{0, 224, 112}: "DH TECHNOLOGY", - [3]byte{0, 224, 113}: "EPIS MICROCOMPUTER", - [3]byte{0, 224, 114}: "LYNK", - [3]byte{0, 224, 115}: "NATIONAL AMUSEMENT NETWORK, INC.", - [3]byte{0, 224, 116}: "TIERNAN COMMUNICATIONS, INC.", - [3]byte{0, 224, 117}: "Verilink Corporation", - [3]byte{0, 224, 118}: "DEVELOPMENT CONCEPTS, INC.", - [3]byte{0, 224, 119}: "WEBGEAR, INC.", - [3]byte{0, 224, 120}: "BERKELEY NETWORKS", - [3]byte{0, 224, 121}: "A.T.N.R.", - [3]byte{0, 224, 122}: "MIKRODIDAKT AB", - [3]byte{0, 224, 123}: "BAY NETWORKS", - [3]byte{0, 224, 124}: "METTLER-TOLEDO, INC.", - [3]byte{0, 224, 125}: "NETRONIX, INC.", - [3]byte{0, 224, 126}: "WALT DISNEY IMAGINEERING", - [3]byte{0, 224, 127}: "LOGISTISTEM s.r.l.", - [3]byte{0, 224, 128}: "CONTROL RESOURCES CORPORATION", - [3]byte{0, 224, 129}: "TYAN COMPUTER CORP.", - [3]byte{0, 224, 130}: "ANERMA", - [3]byte{0, 224, 131}: "JATO TECHNOLOGIES, INC.", - [3]byte{0, 224, 132}: "COMPULITE R&D", - [3]byte{0, 224, 133}: "GLOBAL MAINTECH, INC.", - [3]byte{0, 224, 134}: "Emerson Network Power, Avocent Division", - [3]byte{0, 224, 135}: "LeCroy - Networking Productions Division", - [3]byte{0, 224, 136}: "LTX-Credence CORPORATION", - [3]byte{0, 224, 137}: "ION Networks, Inc.", - [3]byte{0, 224, 138}: "GEC AVERY, LTD.", - [3]byte{0, 224, 139}: "QLogic Corporation", - [3]byte{0, 224, 140}: "NEOPARADIGM LABS, INC.", - [3]byte{0, 224, 141}: "PRESSURE SYSTEMS, INC.", - [3]byte{0, 224, 142}: "UTSTARCOM", - [3]byte{0, 224, 143}: "Cisco Systems, Inc", - [3]byte{0, 224, 144}: "BECKMAN LAB. AUTOMATION DIV.", - [3]byte{0, 224, 145}: "LG Electronics", - [3]byte{0, 224, 146}: "ADMTEK INCORPORATED", - [3]byte{0, 224, 147}: "ACKFIN NETWORKS", - [3]byte{0, 224, 148}: "OSAI SRL", - [3]byte{0, 224, 149}: "ADVANCED-VISION TECHNOLGIES CORP.", - [3]byte{0, 224, 150}: "SHIMADZU CORPORATION", - [3]byte{0, 224, 151}: "CARRIER ACCESS CORPORATION", - [3]byte{0, 224, 152}: "AboCom", - [3]byte{0, 224, 153}: "SAMSON AG", - [3]byte{0, 224, 154}: "Positron Inc.", - [3]byte{0, 224, 155}: "ENGAGE NETWORKS, INC.", - [3]byte{0, 224, 156}: "MII", - [3]byte{0, 224, 157}: "SARNOFF CORPORATION", - [3]byte{0, 224, 158}: "Quantum Corporation", - [3]byte{0, 224, 159}: "PIXEL VISION", - [3]byte{0, 224, 160}: "WILTRON CO.", - [3]byte{0, 224, 161}: "HIMA PAUL HILDEBRANDT GmbH Co. KG", - [3]byte{0, 224, 162}: "MICROSLATE INC.", - [3]byte{0, 224, 163}: "Cisco Systems, Inc", - [3]byte{0, 224, 164}: "ESAOTE S.p.A.", - [3]byte{0, 224, 165}: "ComCore Semiconductor, Inc.", - [3]byte{0, 224, 166}: "TELOGY NETWORKS, INC.", - [3]byte{0, 224, 167}: "IPC INFORMATION SYSTEMS, INC.", - [3]byte{0, 224, 168}: "SAT GmbH & Co.", - [3]byte{0, 224, 169}: "FUNAI ELECTRIC CO., LTD.", - [3]byte{0, 224, 170}: "ELECTROSONIC LTD.", - [3]byte{0, 224, 171}: "DIMAT S.A.", - [3]byte{0, 224, 172}: "MIDSCO, INC.", - [3]byte{0, 224, 173}: "EES TECHNOLOGY, LTD.", - [3]byte{0, 224, 174}: "XAQTI CORPORATION", - [3]byte{0, 224, 175}: "GENERAL DYNAMICS INFORMATION SYSTEMS", - [3]byte{0, 224, 176}: "Cisco Systems, Inc", - [3]byte{0, 224, 177}: "Alcatel-Lucent Enterprise", - [3]byte{0, 224, 178}: "TELMAX COMMUNICATIONS CORP.", - [3]byte{0, 224, 179}: "EtherWAN Systems, Inc.", - [3]byte{0, 224, 180}: "TECHNO SCOPE CO., LTD.", - [3]byte{0, 224, 181}: "ARDENT COMMUNICATIONS CORP.", - [3]byte{0, 224, 182}: "Entrada Networks", - [3]byte{0, 224, 183}: "PI GROUP, LTD.", - [3]byte{0, 224, 184}: "GATEWAY 2000", - [3]byte{0, 224, 185}: "BYAS SYSTEMS", - [3]byte{0, 224, 186}: "BERGHOF AUTOMATIONSTECHNIK GmbH", - [3]byte{0, 224, 187}: "NBX CORPORATION", - [3]byte{0, 224, 188}: "SYMON COMMUNICATIONS, INC.", - [3]byte{0, 224, 189}: "INTERFACE SYSTEMS, INC.", - [3]byte{0, 224, 190}: "GENROCO INTERNATIONAL, INC.", - [3]byte{0, 224, 191}: "TORRENT NETWORKING TECHNOLOGIES CORP.", - [3]byte{0, 224, 192}: "SEIWA ELECTRIC MFG. CO., LTD.", - [3]byte{0, 224, 193}: "MEMOREX TELEX JAPAN, LTD.", - [3]byte{0, 224, 194}: "NECSY S.p.A.", - [3]byte{0, 224, 195}: "SAKAI SYSTEM DEVELOPMENT CORP.", - [3]byte{0, 224, 196}: "HORNER ELECTRIC, INC.", - [3]byte{0, 224, 197}: "BCOM ELECTRONICS INC.", - [3]byte{0, 224, 198}: "LINK2IT, L.L.C.", - [3]byte{0, 224, 199}: "EUROTECH SRL", - [3]byte{0, 224, 200}: "VIRTUAL ACCESS, LTD.", - [3]byte{0, 224, 201}: "AutomatedLogic Corporation", - [3]byte{0, 224, 202}: "BEST DATA PRODUCTS", - [3]byte{0, 224, 203}: "RESON, INC.", - [3]byte{0, 224, 204}: "HERO SYSTEMS, LTD.", - [3]byte{0, 224, 205}: "SAAB SENSIS CORPORATION", - [3]byte{0, 224, 206}: "ARN", - [3]byte{0, 224, 207}: "INTEGRATED DEVICE", - [3]byte{0, 224, 208}: "NETSPEED, INC.", - [3]byte{0, 224, 209}: "TELSIS LIMITED", - [3]byte{0, 224, 210}: "VERSANET COMMUNICATIONS, INC.", - [3]byte{0, 224, 211}: "DATENTECHNIK GmbH", - [3]byte{0, 224, 212}: "EXCELLENT COMPUTER", - [3]byte{0, 224, 213}: "Emulex Corporation", - [3]byte{0, 224, 214}: "COMPUTER & COMMUNICATION RESEARCH LAB.", - [3]byte{0, 224, 215}: "SUNSHINE ELECTRONICS, INC.", - [3]byte{0, 224, 216}: "LANBit Computer, Inc.", - [3]byte{0, 224, 217}: "TAZMO CO., LTD.", - [3]byte{0, 224, 218}: "Alcatel-Lucent Enterprise", - [3]byte{0, 224, 219}: "ViaVideo Communications, Inc.", - [3]byte{0, 224, 220}: "NEXWARE CORP.", - [3]byte{0, 224, 221}: "Zenith Electronics Corporation", - [3]byte{0, 224, 222}: "DATAX NV", - [3]byte{0, 224, 223}: "KEYMILE GmbH", - [3]byte{0, 224, 224}: "SI ELECTRONICS, LTD.", - [3]byte{0, 224, 225}: "G2 NETWORKS, INC.", - [3]byte{0, 224, 226}: "INNOVA CORP.", - [3]byte{0, 224, 227}: "SK-ELEKTRONIK GMBH", - [3]byte{0, 224, 228}: "FANUC ROBOTICS NORTH AMERICA, Inc.", - [3]byte{0, 224, 229}: "CINCO NETWORKS, INC.", - [3]byte{0, 224, 230}: "INCAA Computers", - [3]byte{0, 224, 231}: "RAYTHEON E-SYSTEMS, INC.", - [3]byte{0, 224, 232}: "GRETACODER Data Systems AG", - [3]byte{0, 224, 233}: "DATA LABS, INC.", - [3]byte{0, 224, 234}: "INNOVAT COMMUNICATIONS, INC.", - [3]byte{0, 224, 235}: "DIGICOM SYSTEMS, INCORPORATED", - [3]byte{0, 224, 236}: "CELESTICA INC.", - [3]byte{0, 224, 237}: "SILICOM, LTD.", - [3]byte{0, 224, 238}: "MAREL HF", - [3]byte{0, 224, 239}: "DIONEX", - [3]byte{0, 224, 240}: "ABLER TECHNOLOGY, INC.", - [3]byte{0, 224, 241}: "THAT CORPORATION", - [3]byte{0, 224, 242}: "ARLOTTO COMNET, INC.", - [3]byte{0, 224, 243}: "WebSprint Communications, Inc.", - [3]byte{0, 224, 244}: "INSIDE Technology A/S", - [3]byte{0, 224, 245}: "TELES AG", - [3]byte{0, 224, 246}: "DECISION EUROPE", - [3]byte{0, 224, 247}: "Cisco Systems, Inc", - [3]byte{0, 224, 248}: "DICNA CONTROL AB", - [3]byte{0, 224, 249}: "Cisco Systems, Inc", - [3]byte{0, 224, 250}: "TRL TECHNOLOGY, LTD.", - [3]byte{0, 224, 251}: "LEIGHTRONIX, INC.", - [3]byte{0, 224, 252}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{0, 224, 253}: "A-TREND TECHNOLOGY CO., LTD.", - [3]byte{0, 224, 254}: "Cisco Systems, Inc", - [3]byte{0, 224, 255}: "SECURITY DYNAMICS TECHNOLOGIES, Inc.", - [3]byte{0, 225, 109}: "Cisco Systems, Inc", - [3]byte{0, 225, 117}: "AK-Systems Ltd", - [3]byte{0, 225, 140}: "Intel Corporate", - [3]byte{0, 227, 178}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 228, 0}: "Sichuan Changhong Electric Ltd.", - [3]byte{0, 230, 102}: "ARIMA Communications Corp.", - [3]byte{0, 230, 211}: "NIXDORF COMPUTER CORP.", - [3]byte{0, 230, 232}: "Netzin Technology Corporation,.Ltd.", - [3]byte{0, 232, 171}: "Meggitt Training Systems, Inc.", - [3]byte{0, 235, 45}: "Sony Mobile Communications AB", - [3]byte{0, 235, 213}: "Cisco Systems, Inc", - [3]byte{0, 236, 10}: "Xiaomi Communications Co Ltd", - [3]byte{0, 238, 189}: "HTC Corporation", - [3]byte{0, 240, 81}: "KWB Gmbh", - [3]byte{0, 242, 44}: "Shanghai B-star Technology Co.,Ltd.", - [3]byte{0, 242, 139}: "Cisco Systems, Inc", - [3]byte{0, 243, 219}: "WOO Sports", - [3]byte{0, 244, 3}: "Orbis Systems Oy", - [3]byte{0, 244, 111}: "Samsung Electronics Co.,Ltd", - [3]byte{0, 244, 185}: "Apple, Inc.", - [3]byte{0, 246, 99}: "Cisco Systems, Inc", - [3]byte{0, 247, 111}: "Apple, Inc.", - [3]byte{0, 248, 28}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{0, 248, 44}: "Cisco Systems, Inc", - [3]byte{0, 248, 96}: "PT. Panggung Electric Citrabuana", - [3]byte{0, 248, 113}: "DGS Denmark A/S", - [3]byte{0, 250, 59}: "CLOOS ELECTRONIC GMBH", - [3]byte{0, 252, 88}: "WebSilicon Ltd.", - [3]byte{0, 252, 112}: "Intrepid Control Systems, Inc.", - [3]byte{0, 252, 139}: "Amazon Technologies Inc.", - [3]byte{0, 252, 141}: "Hitron Technologies. Inc", - [3]byte{0, 253, 69}: "Hewlett Packard Enterprise", - [3]byte{0, 253, 76}: "NEVATEC", - [3]byte{0, 254, 200}: "Cisco Systems, Inc", - [3]byte{2, 7, 1}: "RACAL-DATACOM", - [3]byte{2, 28, 124}: "PERQ SYSTEMS CORPORATION", - [3]byte{2, 96, 134}: "LOGIC REPLACEMENT TECH. LTD.", - [3]byte{2, 96, 140}: "3COM CORPORATION", - [3]byte{2, 112, 1}: "RACAL-DATACOM", - [3]byte{2, 112, 176}: "M/A-COM INC. COMPANIES", - [3]byte{2, 112, 179}: "DATA RECALL LTD.", - [3]byte{2, 157, 142}: "CARDIAC RECORDERS, INC.", - [3]byte{2, 170, 60}: "OLIVETTI TELECOMM SPA (OLTECO)", - [3]byte{2, 187, 1}: "OCTOTHORPE CORP.", - [3]byte{2, 192, 140}: "3COM CORPORATION", - [3]byte{2, 207, 28}: "Communication Machinery Corporation", - [3]byte{2, 230, 211}: "NIXDORF COMPUTER CORP.", - [3]byte{4, 2, 31}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{4, 3, 214}: "Nintendo Co.,Ltd", - [3]byte{4, 4, 234}: "Valens Semiconductor Ltd.", - [3]byte{4, 10, 131}: "Alcatel-Lucent", - [3]byte{4, 10, 224}: "XMIT AG COMPUTER NETWORKS", - [3]byte{4, 12, 206}: "Apple, Inc.", - [3]byte{4, 14, 194}: "ViewSonic Mobile China Limited", - [3]byte{4, 21, 82}: "Apple, Inc.", - [3]byte{4, 24, 15}: "Samsung Electronics Co.,Ltd", - [3]byte{4, 24, 182}: "Private", - [3]byte{4, 24, 214}: "Ubiquiti Networks Inc.", - [3]byte{4, 25, 127}: "Grasphere Japan", - [3]byte{4, 26, 4}: "WaveIP", - [3]byte{4, 27, 109}: "LG Electronics (Mobile Communications)", - [3]byte{4, 27, 148}: "Host Mobility AB", - [3]byte{4, 27, 186}: "Samsung Electronics Co.,Ltd", - [3]byte{4, 29, 16}: "Dream Ware Inc.", - [3]byte{4, 30, 100}: "Apple, Inc.", - [3]byte{4, 30, 122}: "DSPWorks", - [3]byte{4, 32, 154}: "Panasonic Corporation AVC Networks Company", - [3]byte{4, 33, 76}: "Insight Energy Ventures LLC", - [3]byte{4, 34, 52}: "Wireless Standard Extensions", - [3]byte{4, 37, 197}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{4, 38, 5}: "GFR Gesellschaft für Regelungstechnik und Energieeinsparung mbH", - [3]byte{4, 38, 101}: "Apple, Inc.", - [3]byte{4, 39, 88}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{4, 42, 226}: "Cisco Systems, Inc", - [3]byte{4, 43, 187}: "PicoCELA, Inc.", - [3]byte{4, 45, 180}: "First Property (Beijing) Co., Ltd Modern MOMA Branch", - [3]byte{4, 47, 86}: "ATOCS (Shenzhen) LTD", - [3]byte{4, 49, 16}: "Inspur Group Co., Ltd.", - [3]byte{4, 50, 244}: "Partron", - [3]byte{4, 51, 137}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{4, 54, 4}: "Gyeyoung I&T", - [3]byte{4, 58, 13}: "SM Optics S.r.l.", - [3]byte{4, 61, 152}: "ChongQing QingJia Electronics CO.,LTD", - [3]byte{4, 65, 105}: "GoPro", - [3]byte{4, 68, 161}: "TELECON GALICIA,S.A.", - [3]byte{4, 70, 101}: "Murata Manufacturing Co., Ltd.", - [3]byte{4, 72, 154}: "Apple, Inc.", - [3]byte{4, 74, 80}: "Ramaxel Technology (Shenzhen) limited company", - [3]byte{4, 75, 237}: "Apple, Inc.", - [3]byte{4, 75, 255}: "GuangZhou Hedy Digital Technology Co., Ltd", - [3]byte{4, 76, 239}: "Fujian Sanao Technology Co.,Ltd", - [3]byte{4, 78, 6}: "Ericsson AB", - [3]byte{4, 78, 90}: "ARRIS Group, Inc.", - [3]byte{4, 79, 76}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{4, 79, 139}: "Adapteva, Inc.", - [3]byte{4, 79, 170}: "Ruckus Wireless", - [3]byte{4, 80, 218}: "Qiku Internet Network Scientific (Shenzhen) Co., Ltd", - [3]byte{4, 82, 199}: "Bose Corporation", - [3]byte{4, 82, 243}: "Apple, Inc.", - [3]byte{4, 83, 213}: "Sysorex Global Holdings", - [3]byte{4, 84, 83}: "Apple, Inc.", - [3]byte{4, 85, 202}: "BriView (Xiamen) Corp.", - [3]byte{4, 86, 4}: "Gionee Communication Equipment Co.,Ltd.", - [3]byte{4, 87, 47}: "Sertel Electronics UK Ltd", - [3]byte{4, 88, 111}: "Sichuan Whayer information industry Co.,LTD", - [3]byte{4, 90, 149}: "Nokia Corporation", - [3]byte{4, 92, 6}: "Zmodo Technology Corporation", - [3]byte{4, 92, 142}: "gosund GROUP CO.,LTD", - [3]byte{4, 93, 75}: "Sony Corporation", - [3]byte{4, 93, 86}: "camtron industrial inc.", - [3]byte{4, 95, 167}: "Shenzhen Yichen Technology Development Co.,LTD", - [3]byte{4, 97, 105}: "MEDIA GLOBAL LINKS CO., LTD.", - [3]byte{4, 98, 115}: "Cisco Systems, Inc", - [3]byte{4, 98, 215}: "ALSTOM HYDRO FRANCE", - [3]byte{4, 99, 224}: "Nome Oy", - [3]byte{4, 101, 101}: "Testop", - [3]byte{4, 103, 133}: "scemtec Hard- und Software fuer Mess- und Steuerungstechnik GmbH", - [3]byte{4, 105, 248}: "Apple, Inc.", - [3]byte{4, 108, 157}: "Cisco Systems, Inc", - [3]byte{4, 109, 66}: "Bryston Ltd.", - [3]byte{4, 110, 2}: "OpenRTLS Group", - [3]byte{4, 110, 73}: "TaiYear Electronic Technology (Suzhou) Co., Ltd", - [3]byte{4, 112, 188}: "Globalstar Inc.", - [3]byte{4, 113, 75}: "IEEE Registration Authority", - [3]byte{4, 116, 161}: "Aligera Equipamentos Digitais Ltda", - [3]byte{4, 117, 3}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{4, 117, 245}: "CSST", - [3]byte{4, 118, 110}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{4, 120, 99}: "Shanghai MXCHIP Information Technology Co., Ltd.", - [3]byte{4, 125, 80}: "Shenzhen Kang Ying Technology Co.Ltd.", - [3]byte{4, 125, 123}: "QUANTA COMPUTER INC.", - [3]byte{4, 126, 74}: "moobox CO., Ltd.", - [3]byte{4, 129, 174}: "Clack Corporation", - [3]byte{4, 132, 138}: "7INOVA TECHNOLOGY LIMITED", - [3]byte{4, 136, 140}: "Eifelwerk Butler Systeme GmbH", - [3]byte{4, 136, 226}: "Beats Electronics LLC", - [3]byte{4, 138, 21}: "Avaya Inc", - [3]byte{4, 139, 66}: "Skspruce Technologies", - [3]byte{4, 140, 3}: "ThinPAD Technology (Shenzhen)CO.,LTD", - [3]byte{4, 141, 56}: "Netcore Technology Inc.", - [3]byte{4, 146, 238}: "iway AG", - [3]byte{4, 148, 107}: "TECNO MOBILE LIMITED", - [3]byte{4, 148, 161}: "CATCH THE WIND INC", - [3]byte{4, 149, 115}: "zte corporation", - [3]byte{4, 149, 230}: "Tenda Technology Co.,Ltd.Dongguan branch", - [3]byte{4, 150, 69}: "WUXI SKY CHIP INTERCONNECTION TECHNOLOGY CO.,LTD.", - [3]byte{4, 151, 144}: "Lartech telecom LLC", - [3]byte{4, 152, 243}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{4, 153, 230}: "Shenzhen Yoostar Technology Co., Ltd", - [3]byte{4, 155, 156}: "Eadingcore Intelligent Technology Co., Ltd.", - [3]byte{4, 156, 98}: "BMT Medical Technology s.r.o.", - [3]byte{4, 159, 6}: "Smobile Co., Ltd.", - [3]byte{4, 159, 129}: "NetScout Systems, Inc.", - [3]byte{4, 159, 202}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{4, 161, 81}: "NETGEAR", - [3]byte{4, 163, 22}: "Texas Instruments", - [3]byte{4, 163, 243}: "Emicon", - [3]byte{4, 168, 42}: "Nokia Corporation", - [3]byte{4, 176, 231}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{4, 177, 103}: "Xiaomi Communications Co Ltd", - [3]byte{4, 179, 182}: "Seamap (UK) Ltd", - [3]byte{4, 180, 102}: "BSP Co., Ltd.", - [3]byte{4, 182, 72}: "ZENNER", - [3]byte{4, 186, 54}: "Li Seng Technology Ltd", - [3]byte{4, 187, 249}: "Pavilion Data Systems Inc", - [3]byte{4, 189, 112}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{4, 189, 136}: "Aruba Networks", - [3]byte{4, 191, 109}: "Zyxel Communications Corporation", - [3]byte{4, 191, 168}: "ISB Corporation", - [3]byte{4, 192, 91}: "Tigo Energy", - [3]byte{4, 192, 111}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{4, 192, 156}: "Tellabs Inc.", - [3]byte{4, 193, 3}: "Clover Network, Inc.", - [3]byte{4, 193, 185}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{4, 194, 62}: "HTC Corporation", - [3]byte{4, 197, 164}: "Cisco Systems, Inc", - [3]byte{4, 200, 128}: "Samtec Inc", - [3]byte{4, 201, 145}: "Phistek INC.", - [3]byte{4, 201, 217}: "Echostar Technologies Corp", - [3]byte{4, 203, 29}: "Traka plc", - [3]byte{4, 206, 20}: "Wilocity LTD.", - [3]byte{4, 207, 37}: "MANYCOLORS, INC.", - [3]byte{4, 211, 207}: "Apple, Inc.", - [3]byte{4, 212, 55}: "ZNV", - [3]byte{4, 214, 170}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{4, 215, 131}: "Y&H E&C Co.,LTD.", - [3]byte{4, 218, 210}: "Cisco Systems, Inc", - [3]byte{4, 219, 86}: "Apple, Inc.", - [3]byte{4, 219, 138}: "Suntech International Ltd.", - [3]byte{4, 221, 76}: "Velocytech", - [3]byte{4, 222, 219}: "Rockport Networks Inc", - [3]byte{4, 222, 242}: "Shenzhen ECOM Technology Co. Ltd", - [3]byte{4, 223, 105}: "Car Connectivity Consortium", - [3]byte{4, 224, 176}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{4, 224, 196}: "TRIUMPH-ADLER AG", - [3]byte{4, 225, 200}: "IMS Soluções em Energia Ltda.", - [3]byte{4, 226, 248}: "AEP Ticketing solutions srl", - [3]byte{4, 228, 81}: "Texas Instruments", - [3]byte{4, 229, 54}: "Apple, Inc.", - [3]byte{4, 229, 72}: "Cohda Wireless Pty Ltd", - [3]byte{4, 230, 98}: "Acroname Inc.", - [3]byte{4, 230, 118}: "AMPAK Technology, Inc.", - [3]byte{4, 233, 229}: "PJRC.COM, LLC", - [3]byte{4, 238, 145}: "x-fabric GmbH", - [3]byte{4, 240, 33}: "Compex Systems Pte Ltd", - [3]byte{4, 241, 40}: "HMD Global Oy", - [3]byte{4, 241, 62}: "Apple, Inc.", - [3]byte{4, 241, 125}: "Tarana Wireless", - [3]byte{4, 244, 188}: "Xena Networks", - [3]byte{4, 247, 228}: "Apple, Inc.", - [3]byte{4, 248, 194}: "Flaircomm Microelectronics, Inc.", - [3]byte{4, 249, 56}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{4, 250, 63}: "Opticore Inc.", - [3]byte{4, 254, 49}: "Samsung Electronics Co.,Ltd", - [3]byte{4, 254, 127}: "Cisco Systems, Inc", - [3]byte{4, 254, 141}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{4, 254, 161}: "Fihonest communication co.,Ltd", - [3]byte{4, 255, 81}: "NOVAMEDIA INNOVISION SP. Z O.O.", - [3]byte{8, 0, 1}: "COMPUTERVISION CORPORATION", - [3]byte{8, 0, 2}: "BRIDGE COMMUNICATIONS INC.", - [3]byte{8, 0, 3}: "ADVANCED COMPUTER COMM.", - [3]byte{8, 0, 4}: "CROMEMCO INCORPORATED", - [3]byte{8, 0, 5}: "SYMBOLICS INC.", - [3]byte{8, 0, 6}: "SIEMENS AG", - [3]byte{8, 0, 7}: "Apple, Inc.", - [3]byte{8, 0, 8}: "BOLT BERANEK AND NEWMAN INC.", - [3]byte{8, 0, 9}: "Hewlett Packard", - [3]byte{8, 0, 10}: "NESTAR SYSTEMS INCORPORATED", - [3]byte{8, 0, 11}: "UNISYS CORPORATION", - [3]byte{8, 0, 12}: "MIKLYN DEVELOPMENT CO.", - [3]byte{8, 0, 13}: "International Computers, Ltd", - [3]byte{8, 0, 14}: "NCR CORPORATION", - [3]byte{8, 0, 15}: "MITEL CORPORATION", - [3]byte{8, 0, 17}: "TEKTRONIX INC.", - [3]byte{8, 0, 18}: "BELL ATLANTIC INTEGRATED SYST.", - [3]byte{8, 0, 19}: "Exxon", - [3]byte{8, 0, 20}: "EXCELAN", - [3]byte{8, 0, 21}: "STC BUSINESS SYSTEMS", - [3]byte{8, 0, 22}: "BARRISTER INFO SYS CORP", - [3]byte{8, 0, 23}: "NATIONAL SEMICONDUCTOR", - [3]byte{8, 0, 24}: "PIRELLI FOCOM NETWORKS", - [3]byte{8, 0, 25}: "GENERAL ELECTRIC CORPORATION", - [3]byte{8, 0, 26}: "TIARA/ 10NET", - [3]byte{8, 0, 27}: "Dell EMC", - [3]byte{8, 0, 28}: "KDD-KOKUSAI DEBNSIN DENWA CO.", - [3]byte{8, 0, 29}: "ABLE COMMUNICATIONS INC.", - [3]byte{8, 0, 30}: "APOLLO COMPUTER INC.", - [3]byte{8, 0, 31}: "SHARP CORPORATION", - [3]byte{8, 0, 32}: "Oracle Corporation", - [3]byte{8, 0, 33}: "3M COMPANY", - [3]byte{8, 0, 34}: "NBI INC.", - [3]byte{8, 0, 35}: "Panasonic Communications Co., Ltd.", - [3]byte{8, 0, 36}: "10NET COMMUNICATIONS/DCA", - [3]byte{8, 0, 37}: "CONTROL DATA", - [3]byte{8, 0, 38}: "NORSK DATA A.S.", - [3]byte{8, 0, 39}: "PCS Systemtechnik GmbH", - [3]byte{8, 0, 40}: "Texas Instruments", - [3]byte{8, 0, 41}: "Megatek Corporation", - [3]byte{8, 0, 42}: "MOSAIC TECHNOLOGIES INC.", - [3]byte{8, 0, 43}: "DIGITAL EQUIPMENT CORPORATION", - [3]byte{8, 0, 44}: "BRITTON LEE INC.", - [3]byte{8, 0, 45}: "LAN-TEC INC.", - [3]byte{8, 0, 46}: "METAPHOR COMPUTER SYSTEMS", - [3]byte{8, 0, 47}: "PRIME COMPUTER INC.", - [3]byte{8, 0, 48}: "CERN", - [3]byte{8, 0, 48}: "NETWORK RESEARCH CORPORATION", - [3]byte{8, 0, 48}: "ROYAL MELBOURNE INST OF TECH", - [3]byte{8, 0, 49}: "LITTLE MACHINES INC.", - [3]byte{8, 0, 50}: "TIGAN INCORPORATED", - [3]byte{8, 0, 51}: "BAUSCH & LOMB", - [3]byte{8, 0, 52}: "FILENET CORPORATION", - [3]byte{8, 0, 53}: "MICROFIVE CORPORATION", - [3]byte{8, 0, 54}: "INTERGRAPH CORPORATION", - [3]byte{8, 0, 55}: "FUJI-XEROX CO. LTD.", - [3]byte{8, 0, 56}: "BULL S.A.S.", - [3]byte{8, 0, 57}: "SPIDER SYSTEMS LIMITED", - [3]byte{8, 0, 58}: "ORCATECH INC.", - [3]byte{8, 0, 59}: "TORUS SYSTEMS LIMITED", - [3]byte{8, 0, 60}: "SCHLUMBERGER WELL SERVICES", - [3]byte{8, 0, 61}: "CADNETIX CORPORATIONS", - [3]byte{8, 0, 62}: "CODEX CORPORATION", - [3]byte{8, 0, 63}: "FRED KOSCHARA ENTERPRISES", - [3]byte{8, 0, 64}: "FERRANTI COMPUTER SYS. LIMITED", - [3]byte{8, 0, 65}: "RACAL-MILGO INFORMATION SYS..", - [3]byte{8, 0, 66}: "JAPAN MACNICS CORP.", - [3]byte{8, 0, 67}: "PIXEL COMPUTER INC.", - [3]byte{8, 0, 68}: "DAVID SYSTEMS INC.", - [3]byte{8, 0, 69}: "CONCURRENT COMPUTER CORP.", - [3]byte{8, 0, 70}: "Sony Corporation", - [3]byte{8, 0, 71}: "SEQUENT COMPUTER SYSTEMS INC.", - [3]byte{8, 0, 72}: "EUROTHERM GAUGING SYSTEMS", - [3]byte{8, 0, 73}: "UNIVATION", - [3]byte{8, 0, 74}: "BANYAN SYSTEMS INC.", - [3]byte{8, 0, 75}: "Planning Research Corp.", - [3]byte{8, 0, 76}: "HYDRA COMPUTER SYSTEMS INC.", - [3]byte{8, 0, 77}: "CORVUS SYSTEMS INC.", - [3]byte{8, 0, 78}: "3COM EUROPE LTD.", - [3]byte{8, 0, 79}: "CYGNET SYSTEMS", - [3]byte{8, 0, 80}: "DAISY SYSTEMS CORP.", - [3]byte{8, 0, 81}: "ExperData", - [3]byte{8, 0, 82}: "INSYSTEC", - [3]byte{8, 0, 83}: "MIDDLE EAST TECH. UNIVERSITY", - [3]byte{8, 0, 85}: "STANFORD TELECOMM. INC.", - [3]byte{8, 0, 86}: "STANFORD LINEAR ACCEL. CENTER", - [3]byte{8, 0, 87}: "Evans & Sutherland", - [3]byte{8, 0, 88}: "SYSTEMS CONCEPTS", - [3]byte{8, 0, 89}: "A/S MYCRON", - [3]byte{8, 0, 90}: "IBM Corp", - [3]byte{8, 0, 91}: "VTA TECHNOLOGIES INC.", - [3]byte{8, 0, 92}: "FOUR PHASE SYSTEMS", - [3]byte{8, 0, 93}: "GOULD INC.", - [3]byte{8, 0, 94}: "COUNTERPOINT COMPUTER INC.", - [3]byte{8, 0, 95}: "SABER TECHNOLOGY CORP.", - [3]byte{8, 0, 96}: "INDUSTRIAL NETWORKING INC.", - [3]byte{8, 0, 97}: "JAROGATE LTD.", - [3]byte{8, 0, 98}: "General Dynamics", - [3]byte{8, 0, 99}: "PLESSEY", - [3]byte{8, 0, 100}: "Sitasys AG", - [3]byte{8, 0, 101}: "GENRAD INC.", - [3]byte{8, 0, 102}: "AGFA CORPORATION", - [3]byte{8, 0, 103}: "ComDesign", - [3]byte{8, 0, 104}: "RIDGE COMPUTERS", - [3]byte{8, 0, 105}: "SILICON GRAPHICS INC.", - [3]byte{8, 0, 106}: "AT&T", - [3]byte{8, 0, 107}: "ACCEL TECHNOLOGIES INC.", - [3]byte{8, 0, 108}: "SUNTEK TECHNOLOGY INT'L", - [3]byte{8, 0, 109}: "WHITECHAPEL COMPUTER WORKS", - [3]byte{8, 0, 110}: "MASSCOMP", - [3]byte{8, 0, 111}: "PHILIPS APELDOORN B.V.", - [3]byte{8, 0, 112}: "Mitsubishi Precision Co.,LTd.", - [3]byte{8, 0, 113}: "MATRA (DSIE)", - [3]byte{8, 0, 114}: "XEROX CORP UNIV GRANT PROGRAM", - [3]byte{8, 0, 115}: "TECMAR INC.", - [3]byte{8, 0, 116}: "CASIO COMPUTER CO. LTD.", - [3]byte{8, 0, 117}: "DANSK DATA ELECTRONIK", - [3]byte{8, 0, 118}: "PC LAN TECHNOLOGIES", - [3]byte{8, 0, 119}: "TSL COMMUNICATIONS LTD.", - [3]byte{8, 0, 120}: "ACCELL CORPORATION", - [3]byte{8, 0, 121}: "THE DROID WORKS", - [3]byte{8, 0, 122}: "INDATA", - [3]byte{8, 0, 123}: "SANYO ELECTRIC CO. LTD.", - [3]byte{8, 0, 124}: "VITALINK COMMUNICATIONS CORP.", - [3]byte{8, 0, 126}: "AMALGAMATED WIRELESS(AUS) LTD", - [3]byte{8, 0, 127}: "CARNEGIE-MELLON UNIVERSITY", - [3]byte{8, 0, 128}: "AES DATA INC.", - [3]byte{8, 0, 129}: "ASTECH INC.", - [3]byte{8, 0, 130}: "VERITAS SOFTWARE", - [3]byte{8, 0, 131}: "Seiko Instruments Inc.", - [3]byte{8, 0, 132}: "TOMEN ELECTRONICS CORP.", - [3]byte{8, 0, 133}: "ELXSI", - [3]byte{8, 0, 134}: "KONICA MINOLTA HOLDINGS, INC.", - [3]byte{8, 0, 135}: "Xyplex, Inc.", - [3]byte{8, 0, 136}: "Brocade Communications Systems, Inc.", - [3]byte{8, 0, 137}: "Kinetics", - [3]byte{8, 0, 138}: "PerfTech, Inc.", - [3]byte{8, 0, 139}: "PYRAMID TECHNOLOGY CORP.", - [3]byte{8, 0, 140}: "NETWORK RESEARCH CORPORATION", - [3]byte{8, 0, 141}: "XYVISION INC.", - [3]byte{8, 0, 142}: "Tandem Computers", - [3]byte{8, 0, 143}: "CHIPCOM CORPORATION", - [3]byte{8, 0, 144}: "SONOMA SYSTEMS", - [3]byte{8, 1, 15}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD", - [3]byte{8, 2, 142}: "NETGEAR", - [3]byte{8, 3, 113}: "KRG CORPORATE", - [3]byte{8, 5, 129}: "Roku, Inc.", - [3]byte{8, 5, 205}: "DongGuang EnMai Electronic Product Co.Ltd.", - [3]byte{8, 8, 194}: "Samsung Electronics Co.,Ltd", - [3]byte{8, 8, 234}: "AMSC", - [3]byte{8, 9, 182}: "Masimo Corp", - [3]byte{8, 10, 78}: "Planet Bingo® — 3rd Rock Gaming®", - [3]byte{8, 12, 11}: "SysMik GmbH Dresden", - [3]byte{8, 12, 201}: "Mission Technology Group, dba Magma", - [3]byte{8, 13, 132}: "GECO, Inc.", - [3]byte{8, 14, 168}: "Velex s.r.l.", - [3]byte{8, 15, 250}: "KSP INC.", - [3]byte{8, 17, 94}: "Bitel Co., Ltd.", - [3]byte{8, 17, 150}: "Intel Corporate", - [3]byte{8, 20, 67}: "UNIBRAIN S.A.", - [3]byte{8, 21, 47}: "Samsung Electronics Co., Ltd. ARTIK", - [3]byte{8, 22, 81}: "SHENZHEN SEA STAR TECHNOLOGY CO.,LTD", - [3]byte{8, 23, 53}: "Cisco Systems, Inc", - [3]byte{8, 23, 244}: "IBM Corp", - [3]byte{8, 24, 26}: "zte corporation", - [3]byte{8, 24, 76}: "A. S. Thomas, Inc.", - [3]byte{8, 25, 166}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{8, 29, 251}: "Shanghai Mexon Communication Technology Co.,Ltd", - [3]byte{8, 31, 63}: "WondaLink Inc.", - [3]byte{8, 31, 113}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{8, 31, 235}: "BinCube", - [3]byte{8, 31, 243}: "Cisco Systems, Inc", - [3]byte{8, 33, 239}: "Samsung Electronics Co.,Ltd", - [3]byte{8, 35, 178}: "vivo Mobile Communication Co., Ltd.", - [3]byte{8, 37, 34}: "ADVANSEE", - [3]byte{8, 39, 25}: "APS systems/electronic AG", - [3]byte{8, 39, 206}: "NAGANO KEIKI CO., LTD.", - [3]byte{8, 42, 208}: "SRD Innovations Inc.", - [3]byte{8, 44, 176}: "Network Instruments", - [3]byte{8, 46, 95}: "Hewlett Packard", - [3]byte{8, 48, 107}: "Palo Alto Networks", - [3]byte{8, 53, 113}: "CASwell INC.", - [3]byte{8, 53, 178}: "CoreEdge Networks Co., Ltd", - [3]byte{8, 55, 61}: "Samsung Electronics Co.,Ltd", - [3]byte{8, 55, 156}: "Topaz Co. LTD.", - [3]byte{8, 56, 165}: "Funkwerk plettac electronic GmbH", - [3]byte{8, 58, 92}: "Junilab, Inc.", - [3]byte{8, 58, 184}: "Shinoda Plasma Co., Ltd.", - [3]byte{8, 61, 136}: "Samsung Electronics Co.,Ltd", - [3]byte{8, 62, 12}: "ARRIS Group, Inc.", - [3]byte{8, 62, 93}: "Sagemcom Broadband SAS", - [3]byte{8, 62, 142}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{8, 63, 62}: "WSH GmbH", - [3]byte{8, 63, 118}: "Intellian Technologies, Inc.", - [3]byte{8, 63, 188}: "zte corporation", - [3]byte{8, 64, 39}: "Gridstore Inc.", - [3]byte{8, 64, 243}: "Tenda Technology Co.,Ltd.Dongguan branch", - [3]byte{8, 70, 86}: "VEO-LABS", - [3]byte{8, 72, 44}: "Raycore Taiwan Co., LTD.", - [3]byte{8, 74, 207}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{8, 78, 28}: "H2A Systems, LLC", - [3]byte{8, 78, 191}: "Broad Net Mux Corporation", - [3]byte{8, 81, 20}: "QINGDAO TOPSCOMM COMMUNICATION CO., LTD", - [3]byte{8, 81, 46}: "Orion Diagnostica Oy", - [3]byte{8, 82, 64}: "EbV Elektronikbau- und Vertriebs GmbH", - [3]byte{8, 87, 0}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{8, 90, 224}: "Recovision Technology Co., Ltd.", - [3]byte{8, 91, 14}: "Fortinet, Inc.", - [3]byte{8, 91, 218}: "CliniCare LTD", - [3]byte{8, 93, 221}: "MERCURY CORPORATION", - [3]byte{8, 96, 110}: "ASUSTek COMPUTER INC.", - [3]byte{8, 98, 102}: "ASUSTek COMPUTER INC.", - [3]byte{8, 99, 97}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{8, 102, 31}: "Palo Alto Networks", - [3]byte{8, 102, 152}: "Apple, Inc.", - [3]byte{8, 103, 78}: "Hisense broadband multimedia technology Co.,Ltd", - [3]byte{8, 104, 208}: "Japan System Design", - [3]byte{8, 104, 234}: "EITO ELECTRONICS CO., LTD.", - [3]byte{8, 106, 10}: "ASKEY COMPUTER CORP", - [3]byte{8, 109, 65}: "Apple, Inc.", - [3]byte{8, 109, 242}: "Shenzhen MIMOWAVE Technology Co.,Ltd", - [3]byte{8, 112, 69}: "Apple, Inc.", - [3]byte{8, 116, 2}: "Apple, Inc.", - [3]byte{8, 116, 246}: "Winterhalter Gastronom GmbH", - [3]byte{8, 117, 114}: "Obelux Oy", - [3]byte{8, 118, 24}: "ViE Technologies Sdn. Bhd.", - [3]byte{8, 118, 149}: "Auto Industrial Co., Ltd.", - [3]byte{8, 118, 255}: "Thomson Telecom Belgium", - [3]byte{8, 120, 8}: "Samsung Electronics Co.,Ltd", - [3]byte{8, 121, 153}: "AIM GmbH", - [3]byte{8, 122, 76}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{8, 123, 170}: "SVYAZKOMPLEKTSERVICE, LLC", - [3]byte{8, 124, 190}: "Quintic Corp.", - [3]byte{8, 125, 33}: "Altasec technology corporation", - [3]byte{8, 128, 57}: "Cisco SPVTG", - [3]byte{8, 129, 188}: "HongKong Ipro Technology Co., Limited", - [3]byte{8, 129, 244}: "Juniper Networks", - [3]byte{8, 132, 102}: "Novartis Pharma AG", - [3]byte{8, 134, 32}: "TECNO MOBILE LIMITED", - [3]byte{8, 134, 59}: "Belkin International Inc.", - [3]byte{8, 140, 44}: "Samsung Electronics Co.,Ltd", - [3]byte{8, 141, 200}: "Ryowa Electronics Co.,Ltd", - [3]byte{8, 142, 79}: "SF Software Solutions", - [3]byte{8, 143, 44}: "Hills Sound Vision & Lighting", - [3]byte{8, 148, 239}: "Wistron Infocomm (Zhongshan) Corporation", - [3]byte{8, 149, 42}: "Technicolor CH USA Inc.", - [3]byte{8, 150, 173}: "Cisco Systems, Inc", - [3]byte{8, 150, 215}: "AVM GmbH", - [3]byte{8, 151, 88}: "Shenzhen Strong Rising Electronics Co.,Ltd DongGuan Subsidiary", - [3]byte{8, 155, 75}: "iKuai Networks", - [3]byte{8, 158, 1}: "QUANTA COMPUTER INC.", - [3]byte{8, 158, 8}: "Google, Inc.", - [3]byte{8, 159, 151}: "LEROY AUTOMATION", - [3]byte{8, 161, 43}: "ShenZhen EZL Technology Co., Ltd", - [3]byte{8, 165, 200}: "Sunnovo International Limited", - [3]byte{8, 168, 161}: "Cyclotronics Power Concepts, Inc", - [3]byte{8, 169, 90}: "AzureWave Technology Inc.", - [3]byte{8, 172, 165}: "Benu Video, Inc.", - [3]byte{8, 175, 120}: "Totus Solutions, Inc.", - [3]byte{8, 178, 88}: "Juniper Networks", - [3]byte{8, 178, 163}: "Cynny Italia S.r.L.", - [3]byte{8, 180, 207}: "Abicom International", - [3]byte{8, 183, 56}: "Lite-On Technogy Corp.", - [3]byte{8, 183, 236}: "Wireless Seismic", - [3]byte{8, 186, 34}: "Swaive Corporation", - [3]byte{8, 187, 204}: "AK-NORD EDV VERTRIEBSGES. mbH", - [3]byte{8, 188, 32}: "Hangzhou Royal Cloud Technology Co., Ltd", - [3]byte{8, 189, 67}: "NETGEAR", - [3]byte{8, 190, 9}: "Astrol Electronic AG", - [3]byte{8, 190, 119}: "Green Electronics", - [3]byte{8, 190, 172}: "Edimax Technology Co. Ltd.", - [3]byte{8, 192, 33}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{8, 198, 179}: "QTECH LLC", - [3]byte{8, 202, 69}: "Toyou Feiji Electronics Co., Ltd.", - [3]byte{8, 204, 104}: "Cisco Systems, Inc", - [3]byte{8, 204, 167}: "Cisco Systems, Inc", - [3]byte{8, 205, 155}: "samtec automotive electronics & software GmbH", - [3]byte{8, 208, 159}: "Cisco Systems, Inc", - [3]byte{8, 208, 183}: "Qingdao Hisense Communications Co.,Ltd.", - [3]byte{8, 210, 154}: "Proformatique", - [3]byte{8, 211, 75}: "Techman Electronics (Changshu) Co., Ltd.", - [3]byte{8, 212, 12}: "Intel Corporate", - [3]byte{8, 212, 43}: "Samsung Electronics Co.,Ltd", - [3]byte{8, 213, 192}: "Seers Technology Co., Ltd", - [3]byte{8, 216, 51}: "Shenzhen RF Technology Co., Ltd", - [3]byte{8, 223, 31}: "Bose Corporation", - [3]byte{8, 229, 218}: "NANJING FUJITSU COMPUTER PRODUCTS CO.,LTD.", - [3]byte{8, 230, 114}: "JEBSEE ELECTRONICS CO.,LTD.", - [3]byte{8, 232, 79}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{8, 234, 64}: "SHENZHEN BILIAN ELECTRONIC CO.,LTD", - [3]byte{8, 234, 68}: "Aerohive Networks Inc.", - [3]byte{8, 235, 41}: "Jiangsu Huitong Group Co.,Ltd.", - [3]byte{8, 235, 116}: "HUMAX Co., Ltd.", - [3]byte{8, 235, 237}: "World Elite Technology Co.,LTD", - [3]byte{8, 236, 169}: "Samsung Electronics Co.,Ltd", - [3]byte{8, 237, 2}: "IEEE Registration Authority", - [3]byte{8, 237, 185}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{8, 238, 139}: "Samsung Electronics Co.,Ltd", - [3]byte{8, 239, 59}: "MCS Logic Inc.", - [3]byte{8, 239, 171}: "SAYME WIRELESS SENSOR NETWORK", - [3]byte{8, 241, 183}: "Towerstream Corpration", - [3]byte{8, 242, 244}: "Net One Partners Co.,Ltd.", - [3]byte{8, 244, 171}: "Apple, Inc.", - [3]byte{8, 246, 248}: "GET Engineering", - [3]byte{8, 247, 40}: "GLOBO Multimedia Sp. z o.o. Sp.k.", - [3]byte{8, 250, 224}: "Fohhn Audio AG", - [3]byte{8, 252, 82}: "OpenXS BV", - [3]byte{8, 252, 136}: "Samsung Electronics Co.,Ltd", - [3]byte{8, 253, 14}: "Samsung Electronics Co.,Ltd", - [3]byte{12, 2, 39}: "Technicolor CH USA Inc.", - [3]byte{12, 4, 0}: "Jantar d.o.o.", - [3]byte{12, 5, 53}: "Juniper Systems", - [3]byte{12, 17, 5}: "Ringslink (Xiamen) Network Communication Technologies Co., Ltd", - [3]byte{12, 17, 103}: "Cisco Systems, Inc", - [3]byte{12, 18, 98}: "zte corporation", - [3]byte{12, 19, 11}: "Uniqoteq Ltd.", - [3]byte{12, 20, 32}: "Samsung Electronics Co.,Ltd", - [3]byte{12, 21, 57}: "Apple, Inc.", - [3]byte{12, 21, 197}: "SDTEC Co., Ltd.", - [3]byte{12, 23, 241}: "TELECSYS", - [3]byte{12, 25, 31}: "Inform Electronik", - [3]byte{12, 26, 16}: "Acoustic Stream", - [3]byte{12, 28, 32}: "Kakao Corp", - [3]byte{12, 29, 175}: "Xiaomi Communications Co Ltd", - [3]byte{12, 29, 194}: "SeAH Networks", - [3]byte{12, 32, 38}: "noax Technologies AG", - [3]byte{12, 37, 118}: "LONGCHEER TELECOMMUNICATION LIMITED", - [3]byte{12, 39, 36}: "Cisco Systems, Inc", - [3]byte{12, 39, 85}: "Valuable Techologies Limited", - [3]byte{12, 42, 105}: "electric imp, incorporated", - [3]byte{12, 42, 231}: "Beijing General Research Institute of Mining and Metallurgy", - [3]byte{12, 45, 137}: "QiiQ Communications Inc.", - [3]byte{12, 48, 33}: "Apple, Inc.", - [3]byte{12, 55, 71}: "zte corporation", - [3]byte{12, 55, 220}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{12, 56, 62}: "Fanvil Technology Co., Ltd.", - [3]byte{12, 57, 86}: "Observator instruments", - [3]byte{12, 60, 101}: "Dome Imaging Inc", - [3]byte{12, 60, 205}: "Universal Global Scientific Industrial Co., Ltd.", - [3]byte{12, 62, 159}: "Apple, Inc.", - [3]byte{12, 65, 62}: "Microsoft Corporation", - [3]byte{12, 69, 186}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{12, 70, 157}: "MS Sedco", - [3]byte{12, 71, 61}: "Hitron Technologies. Inc", - [3]byte{12, 71, 201}: "Amazon Technologies Inc.", - [3]byte{12, 72, 133}: "LG Electronics (Mobile Communications)", - [3]byte{12, 73, 51}: "Sichuan Jiuzhou Electronic Technology Co., Ltd.", - [3]byte{12, 75, 84}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{12, 76, 57}: "MitraStar Technology Corp.", - [3]byte{12, 77, 233}: "Apple, Inc.", - [3]byte{12, 79, 90}: "ASA-RT s.r.l.", - [3]byte{12, 81, 1}: "Apple, Inc.", - [3]byte{12, 81, 247}: "CHAUVIN ARNOUX", - [3]byte{12, 82, 3}: "AGM GROUP LIMITED", - [3]byte{12, 84, 165}: "PEGATRON CORPORATION", - [3]byte{12, 84, 185}: "Nokia", - [3]byte{12, 85, 33}: "Axiros GmbH", - [3]byte{12, 86, 92}: "HyBroad Vision (Hong Kong) Technology Co Ltd", - [3]byte{12, 87, 235}: "Mueller Systems", - [3]byte{12, 88, 66}: "DME Micro", - [3]byte{12, 90, 25}: "Axtion Sdn Bhd", - [3]byte{12, 90, 158}: "Wi-SUN Alliance", - [3]byte{12, 92, 216}: "DOLI Elektronik GmbH", - [3]byte{12, 95, 53}: "Niagara Video Corporation", - [3]byte{12, 96, 118}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{12, 97, 17}: "Anda Technologies SAC", - [3]byte{12, 97, 39}: "Actiontec Electronics, Inc", - [3]byte{12, 97, 207}: "Texas Instruments", - [3]byte{12, 99, 252}: "Nanjing Signway Technology Co., Ltd", - [3]byte{12, 104, 3}: "Cisco Systems, Inc", - [3]byte{12, 106, 230}: "Stanley Security Solutions", - [3]byte{12, 110, 79}: "PrimeVOLT Co., Ltd.", - [3]byte{12, 111, 156}: "Shaw Communications Inc.", - [3]byte{12, 113, 93}: "Samsung Electronics Co.,Ltd", - [3]byte{12, 114, 44}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{12, 114, 217}: "zte corporation", - [3]byte{12, 115, 190}: "Dongguan Haimai Electronie Technology Co.,Ltd", - [3]byte{12, 116, 194}: "Apple, Inc.", - [3]byte{12, 117, 35}: "BEIJING GEHUA CATV NETWORK CO.,LTD", - [3]byte{12, 117, 108}: "Anaren Microwave, Inc.", - [3]byte{12, 117, 189}: "Cisco Systems, Inc", - [3]byte{12, 119, 26}: "Apple, Inc.", - [3]byte{12, 125, 124}: "Kexiang Information Technology Co, Ltd.", - [3]byte{12, 129, 18}: "Private", - [3]byte{12, 130, 48}: "SHENZHEN MAGNUS TECHNOLOGIES CO.,LTD", - [3]byte{12, 130, 104}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{12, 130, 106}: "Wuhan Huagong Genuine Optics Technology Co., Ltd", - [3]byte{12, 132, 17}: "A.O. Smith Water Products", - [3]byte{12, 132, 132}: "Zenovia Electronics Inc.", - [3]byte{12, 132, 220}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{12, 133, 37}: "Cisco Systems, Inc", - [3]byte{12, 134, 16}: "Juniper Networks", - [3]byte{12, 137, 16}: "Samsung Electronics Co.,Ltd", - [3]byte{12, 138, 135}: "AgLogica Holdings, Inc", - [3]byte{12, 139, 253}: "Intel Corporate", - [3]byte{12, 140, 143}: "Kamo Technology Limited", - [3]byte{12, 140, 220}: "Suunto Oy", - [3]byte{12, 141, 152}: "TOP EIGHT IND CORP", - [3]byte{12, 141, 219}: "Cisco Meraki", - [3]byte{12, 143, 255}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{12, 145, 96}: "Hui Zhou Gaoshengda Technology Co.,LTD", - [3]byte{12, 146, 78}: "Rice Lake Weighing Systems", - [3]byte{12, 147, 1}: "PT. Prasimax Inovasi Teknologi", - [3]byte{12, 147, 251}: "BNS Solutions", - [3]byte{12, 150, 191}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{12, 152, 56}: "Xiaomi Communications Co Ltd", - [3]byte{12, 155, 19}: "Shanghai Magic Mobile Telecommunication Co.Ltd.", - [3]byte{12, 157, 86}: "Consort Controls Ltd", - [3]byte{12, 158, 145}: "Sankosha Corporation", - [3]byte{12, 161, 56}: "Blinq Wireless Inc.", - [3]byte{12, 162, 244}: "Chameleon Technology (UK) Limited", - [3]byte{12, 164, 2}: "Alcatel-Lucent IPD", - [3]byte{12, 164, 42}: "OB Telecom Electronic Technology Co., Ltd", - [3]byte{12, 166, 148}: "Sunitec Enterprise Co.,Ltd", - [3]byte{12, 172, 5}: "Unitend Technologies Inc.", - [3]byte{12, 175, 90}: "GENUS POWER INFRASTRUCTURES LIMITED", - [3]byte{12, 178, 183}: "Texas Instruments", - [3]byte{12, 179, 25}: "Samsung Electronics Co.,Ltd", - [3]byte{12, 180, 89}: "Marketech International Corp.", - [3]byte{12, 180, 239}: "Digience Co.,Ltd.", - [3]byte{12, 181, 222}: "Alcatel Lucent", - [3]byte{12, 185, 18}: "JM-DATA GmbH", - [3]byte{12, 185, 55}: "Ubee Interactive Co., Limited", - [3]byte{12, 188, 159}: "Apple, Inc.", - [3]byte{12, 189, 81}: "TCT mobile ltd", - [3]byte{12, 191, 21}: "Genetec Inc.", - [3]byte{12, 191, 63}: "Shenzhen Lencotion Technology Co.,Ltd", - [3]byte{12, 192, 192}: "MAGNETI MARELLI SISTEMAS ELECTRONICOS MEXICO", - [3]byte{12, 195, 167}: "Meritec", - [3]byte{12, 196, 122}: "Super Micro Computer, Inc.", - [3]byte{12, 196, 126}: "EUCAST Co., Ltd.", - [3]byte{12, 198, 85}: "Wuxi YSTen Technology Co.,Ltd.", - [3]byte{12, 198, 106}: "Nokia Corporation", - [3]byte{12, 198, 172}: "DAGS", - [3]byte{12, 199, 49}: "Currant, Inc.", - [3]byte{12, 200, 31}: "Summer Infant, Inc.", - [3]byte{12, 201, 198}: "Samwin Hong Kong Limited", - [3]byte{12, 203, 141}: "ASCO Numatics GmbH", - [3]byte{12, 204, 38}: "Airenetworks", - [3]byte{12, 205, 211}: "EASTRIVER TECHNOLOGY CO., LTD.", - [3]byte{12, 205, 251}: "EDIC Systems Inc.", - [3]byte{12, 206, 246}: "Guizhou Fortuneship Technology Co., Ltd", - [3]byte{12, 207, 209}: "SPRINGWAVE Co., Ltd", - [3]byte{12, 210, 146}: "Intel Corporate", - [3]byte{12, 210, 181}: "Binatone Telecommunication Pvt. Ltd", - [3]byte{12, 213, 2}: "Westell Technologies Inc.", - [3]byte{12, 214, 150}: "Amimon Ltd", - [3]byte{12, 214, 189}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{12, 215, 70}: "Apple, Inc.", - [3]byte{12, 215, 194}: "Axium Technologies, Inc.", - [3]byte{12, 216, 108}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD", - [3]byte{12, 217, 150}: "Cisco Systems, Inc", - [3]byte{12, 217, 193}: "Visteon Corporation", - [3]byte{12, 218, 65}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{12, 220, 204}: "Inala Technologies", - [3]byte{12, 221, 239}: "Nokia Corporation", - [3]byte{12, 223, 164}: "Samsung Electronics Co.,Ltd", - [3]byte{12, 224, 228}: "PLANTRONICS, INC.", - [3]byte{12, 229, 211}: "DH electronics GmbH", - [3]byte{12, 231, 9}: "Fox Crypto B.V.", - [3]byte{12, 231, 37}: "Microsoft Corporation", - [3]byte{12, 232, 47}: "Bonfiglioli Vectron GmbH", - [3]byte{12, 233, 54}: "ELIMOS srl", - [3]byte{12, 234, 201}: "ARRIS Group, Inc.", - [3]byte{12, 238, 230}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{12, 239, 124}: "AnaCom Inc", - [3]byte{12, 239, 175}: "IEEE Registration Authority", - [3]byte{12, 240, 25}: "Malgn Technology Co., Ltd.", - [3]byte{12, 240, 180}: "Globalsat International Technology Ltd", - [3]byte{12, 243, 97}: "Java Information", - [3]byte{12, 243, 238}: "EM Microelectronic", - [3]byte{12, 244, 5}: "Beijing Signalway Technologies Co.,Ltd", - [3]byte{12, 244, 213}: "Ruckus Wireless", - [3]byte{12, 245, 164}: "Cisco Systems, Inc", - [3]byte{12, 248, 147}: "ARRIS Group, Inc.", - [3]byte{12, 249, 192}: "BSkyB Ltd", - [3]byte{12, 252, 131}: "Airoha Technology Corp.,", - [3]byte{12, 253, 55}: "SUSE Linux GmbH", - [3]byte{12, 254, 69}: "Sony Interactive Entertainment Inc.", - [3]byte{16, 0, 0}: "Private", - [3]byte{16, 0, 90}: "IBM Corp", - [3]byte{16, 0, 232}: "NATIONAL SEMICONDUCTOR", - [3]byte{16, 0, 253}: "LaonPeople", - [3]byte{16, 1, 202}: "Ashley Butterworth", - [3]byte{16, 2, 181}: "Intel Corporate", - [3]byte{16, 5, 1}: "PEGATRON CORPORATION", - [3]byte{16, 5, 177}: "ARRIS Group, Inc.", - [3]byte{16, 5, 202}: "Cisco Systems, Inc", - [3]byte{16, 7, 35}: "IEEE Registration Authority", - [3]byte{16, 7, 182}: "Samsung Electronics Co.,Ltd", - [3]byte{16, 8, 177}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{16, 9, 12}: "Janome Sewing Machine Co., Ltd.", - [3]byte{16, 11, 169}: "Intel Corporate", - [3]byte{16, 12, 36}: "pomdevices, LLC", - [3]byte{16, 13, 47}: "Online Security Pty. Ltd.", - [3]byte{16, 13, 50}: "Embedian, Inc.", - [3]byte{16, 13, 127}: "NETGEAR", - [3]byte{16, 14, 43}: "NEC CASIO Mobile Communications", - [3]byte{16, 14, 126}: "Juniper Networks", - [3]byte{16, 15, 24}: "Fu Gang Electronic(KunShan)CO.,LTD", - [3]byte{16, 16, 182}: "McCain Inc", - [3]byte{16, 18, 18}: "Vivo International Corporation Pty Ltd", - [3]byte{16, 18, 24}: "Korins Inc.", - [3]byte{16, 18, 72}: "ITG, Inc.", - [3]byte{16, 18, 80}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{16, 19, 49}: "Technicolor", - [3]byte{16, 19, 238}: "Justec International Technology INC.", - [3]byte{16, 24, 158}: "Elmo Motion Control", - [3]byte{16, 27, 84}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{16, 28, 12}: "Apple, Inc.", - [3]byte{16, 29, 81}: "ON-Q LLC dba ON-Q Mesh Networks", - [3]byte{16, 29, 192}: "Samsung Electronics Co.,Ltd", - [3]byte{16, 31, 116}: "Hewlett Packard", - [3]byte{16, 34, 121}: "ZeroDesktop, Inc.", - [3]byte{16, 39, 190}: "TVIP", - [3]byte{16, 40, 49}: "Morion Inc.", - [3]byte{16, 42, 179}: "Xiaomi Communications Co Ltd", - [3]byte{16, 44, 131}: "XIMEA", - [3]byte{16, 45, 150}: "Looxcie Inc.", - [3]byte{16, 46, 175}: "Texas Instruments", - [3]byte{16, 47, 107}: "Microsoft Corporation", - [3]byte{16, 48, 52}: "Cara Systems", - [3]byte{16, 48, 71}: "Samsung Electronics Co.,Ltd", - [3]byte{16, 51, 120}: "FLECTRON Co., LTD", - [3]byte{16, 55, 17}: "Simlink AS", - [3]byte{16, 59, 89}: "Samsung Electronics Co.,Ltd", - [3]byte{16, 61, 234}: "HFC Technology (Beijing) Ltd. Co.", - [3]byte{16, 64, 243}: "Apple, Inc.", - [3]byte{16, 65, 127}: "Apple, Inc.", - [3]byte{16, 67, 105}: "Soundmax Electronic Limited", - [3]byte{16, 68, 0}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{16, 68, 90}: "Shaanxi Hitech Electronic Co., LTD", - [3]byte{16, 69, 190}: "Norphonic AS", - [3]byte{16, 69, 248}: "LNT-Automation GmbH", - [3]byte{16, 70, 180}: "FormericaOE", - [3]byte{16, 71, 128}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{16, 72, 177}: "Beijing Duokan Technology Limited", - [3]byte{16, 73, 99}: "HARTING K.K.", - [3]byte{16, 74, 125}: "Intel Corporate", - [3]byte{16, 75, 70}: "Mitsubishi Electric Corporation", - [3]byte{16, 77, 119}: "Innovative Computer Engineering", - [3]byte{16, 78, 7}: "Shanghai Genvision Industries Co.,Ltd", - [3]byte{16, 78, 137}: "Garmin International", - [3]byte{16, 79, 168}: "Sony Corporation", - [3]byte{16, 81, 114}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{16, 86, 17}: "ARRIS Group, Inc.", - [3]byte{16, 86, 202}: "Peplink International Ltd.", - [3]byte{16, 88, 135}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{16, 90, 247}: "ADB Italia", - [3]byte{16, 92, 59}: "Perma-Pipe, Inc.", - [3]byte{16, 92, 191}: "DuroByte Inc", - [3]byte{16, 95, 6}: "Actiontec Electronics, Inc", - [3]byte{16, 95, 73}: "Cisco SPVTG", - [3]byte{16, 96, 75}: "Hewlett Packard", - [3]byte{16, 98, 201}: "Adatis GmbH & Co. KG", - [3]byte{16, 98, 208}: "Technicolor CH USA Inc.", - [3]byte{16, 98, 235}: "D-Link International", - [3]byte{16, 100, 226}: "ADFweb.com s.r.l.", - [3]byte{16, 101, 163}: "Core Brands LLC", - [3]byte{16, 101, 207}: "IQSIM", - [3]byte{16, 102, 130}: "NEC Platforms, Ltd.", - [3]byte{16, 104, 63}: "LG Electronics (Mobile Communications)", - [3]byte{16, 111, 63}: "BUFFALO.INC", - [3]byte{16, 111, 239}: "Ad-Sol Nissin Corp", - [3]byte{16, 113, 249}: "Cloud Telecomputers, LLC", - [3]byte{16, 114, 35}: "TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO", - [3]byte{16, 118, 138}: "EoCell", - [3]byte{16, 119, 176}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{16, 119, 177}: "Samsung Electronics Co.,Ltd", - [3]byte{16, 120, 91}: "Actiontec Electronics, Inc", - [3]byte{16, 120, 115}: "Shenzhen Jinkeyi Communication Co., Ltd.", - [3]byte{16, 120, 206}: "Hanvit SI, Inc.", - [3]byte{16, 120, 210}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{16, 122, 134}: "U&U ENGINEERING INC.", - [3]byte{16, 123, 68}: "ASUSTek COMPUTER INC.", - [3]byte{16, 123, 239}: "Zyxel Communications Corporation", - [3]byte{16, 125, 26}: "Dell Inc.", - [3]byte{16, 131, 210}: "Microseven Systems, LLC", - [3]byte{16, 134, 140}: "ARRIS Group, Inc.", - [3]byte{16, 136, 15}: "Daruma Telecomunicações e Informática S.A.", - [3]byte{16, 136, 206}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{16, 138, 27}: "RAONIX Inc.", - [3]byte{16, 140, 207}: "Cisco Systems, Inc", - [3]byte{16, 146, 102}: "Samsung Electronics Co.,Ltd", - [3]byte{16, 147, 233}: "Apple, Inc.", - [3]byte{16, 149, 75}: "Megabyte Ltd.", - [3]byte{16, 152, 54}: "Dell Inc.", - [3]byte{16, 154, 185}: "Tosibox Oy", - [3]byte{16, 154, 221}: "Apple, Inc.", - [3]byte{16, 159, 169}: "Actiontec Electronics, Inc", - [3]byte{16, 161, 59}: "FUJIKURA RUBBER LTD.", - [3]byte{16, 164, 190}: "SHENZHEN BILIAN ELECTRONIC CO.,LTD", - [3]byte{16, 165, 208}: "Murata Manufacturing Co., Ltd.", - [3]byte{16, 166, 89}: "Mobile Create Co.,Ltd.", - [3]byte{16, 167, 67}: "SK Mtek Limited", - [3]byte{16, 169, 50}: "Beijing Cyber Cloud Technology Co. ,Ltd.", - [3]byte{16, 174, 96}: "Private", - [3]byte{16, 175, 120}: "Shenzhen ATUE Technology Co., Ltd", - [3]byte{16, 177, 248}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{16, 178, 107}: "base Co.,Ltd.", - [3]byte{16, 183, 19}: "Private", - [3]byte{16, 183, 246}: "Plastoform Industries Ltd.", - [3]byte{16, 185, 254}: "Lika srl", - [3]byte{16, 186, 165}: "GANA I&C CO., LTD", - [3]byte{16, 189, 24}: "Cisco Systems, Inc", - [3]byte{16, 189, 85}: "Q-Lab Corporation", - [3]byte{16, 190, 245}: "D-Link International", - [3]byte{16, 191, 72}: "ASUSTek COMPUTER INC.", - [3]byte{16, 192, 124}: "Blu-ray Disc Association", - [3]byte{16, 194, 186}: "UTT Co., Ltd.", - [3]byte{16, 195, 123}: "ASUSTek COMPUTER INC.", - [3]byte{16, 197, 134}: "BIO SOUND LAB CO., LTD.", - [3]byte{16, 198, 12}: "Domino UK Ltd", - [3]byte{16, 198, 31}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{16, 198, 126}: "SHENZHEN JUCHIN TECHNOLOGY CO., LTD", - [3]byte{16, 198, 252}: "Garmin International", - [3]byte{16, 199, 63}: "Midas Klark Teknik Ltd", - [3]byte{16, 202, 129}: "PRECIA", - [3]byte{16, 204, 27}: "Liverock technologies,INC", - [3]byte{16, 204, 219}: "AXIMUM PRODUITS ELECTRONIQUES", - [3]byte{16, 205, 174}: "Avaya Inc", - [3]byte{16, 205, 182}: "Essential Products, Inc.", - [3]byte{16, 206, 169}: "Texas Instruments", - [3]byte{16, 208, 122}: "AMPAK Technology, Inc.", - [3]byte{16, 208, 171}: "zte corporation", - [3]byte{16, 209, 220}: "INSTAR Deutschland GmbH", - [3]byte{16, 211, 138}: "Samsung Electronics Co.,Ltd", - [3]byte{16, 213, 66}: "Samsung Electronics Co.,Ltd", - [3]byte{16, 218, 67}: "NETGEAR", - [3]byte{16, 221, 177}: "Apple, Inc.", - [3]byte{16, 221, 244}: "Maxway Electronics CO.,LTD", - [3]byte{16, 222, 228}: "automationNEXT GmbH", - [3]byte{16, 223, 139}: "Shenzhen CareDear Communication Technology Co.,Ltd", - [3]byte{16, 226, 213}: "Qi Hardware Inc.", - [3]byte{16, 227, 199}: "Seohwa Telecom", - [3]byte{16, 228, 175}: "APR, LLC", - [3]byte{16, 230, 143}: "KWANGSUNG ELECTRONICS KOREA CO.,LTD.", - [3]byte{16, 230, 174}: "Source Technologies, LLC", - [3]byte{16, 232, 120}: "Nokia", - [3]byte{16, 232, 238}: "PhaseSpace", - [3]byte{16, 234, 89}: "Cisco SPVTG", - [3]byte{16, 238, 217}: "Canoga Perkins Corporation", - [3]byte{16, 240, 5}: "Intel Corporate", - [3]byte{16, 241, 99}: "TNK CO.,LTD", - [3]byte{16, 241, 242}: "LG Electronics (Mobile Communications)", - [3]byte{16, 243, 17}: "Cisco Systems, Inc", - [3]byte{16, 243, 219}: "Gridco Systems, Inc.", - [3]byte{16, 244, 154}: "T3 Innovation", - [3]byte{16, 246, 129}: "vivo Mobile Communication Co., Ltd.", - [3]byte{16, 249, 111}: "LG Electronics (Mobile Communications)", - [3]byte{16, 249, 238}: "Nokia Corporation", - [3]byte{16, 250, 206}: "Reacheng Communication Technology Co.,Ltd", - [3]byte{16, 251, 240}: "KangSheng LTD.", - [3]byte{16, 252, 84}: "Shany Electronic Co., Ltd.", - [3]byte{16, 252, 182}: "mirusystems CO.,LTD", - [3]byte{16, 254, 237}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{17, 0, 170}: "Private", - [3]byte{17, 17, 17}: "Private", - [3]byte{20, 2, 236}: "Hewlett Packard Enterprise", - [3]byte{20, 4, 103}: "SNK Technologies Co.,Ltd.", - [3]byte{20, 7, 8}: "Private", - [3]byte{20, 7, 224}: "Abrantix AG", - [3]byte{20, 12, 91}: "PLNetworks", - [3]byte{20, 12, 118}: "FREEBOX SAS", - [3]byte{20, 13, 79}: "Flextronics International", - [3]byte{20, 16, 159}: "Apple, Inc.", - [3]byte{20, 19, 48}: "Anakreon UK LLP", - [3]byte{20, 19, 87}: "ATP Electronics, Inc.", - [3]byte{20, 20, 75}: "Ruijie Networks Co.,LTD", - [3]byte{20, 20, 230}: "Ningbo Sanhe Digital Co.,Ltd", - [3]byte{20, 21, 124}: "TOKYO COSMOS ELECTRIC CO.,LTD.", - [3]byte{20, 24, 119}: "Dell Inc.", - [3]byte{20, 26, 81}: "Treetech Sistemas Digitais", - [3]byte{20, 26, 163}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{20, 27, 189}: "Volex Inc.", - [3]byte{20, 27, 240}: "Intellimedia Systems Ltd", - [3]byte{20, 31, 120}: "Samsung Electronics Co.,Ltd", - [3]byte{20, 31, 186}: "IEEE Registration Authority", - [3]byte{20, 34, 219}: "eero inc.", - [3]byte{20, 35, 215}: "EUTRONIX CO., LTD.", - [3]byte{20, 40, 130}: "MIDICOM ELECTRONICS CO.LTD", - [3]byte{20, 41, 113}: "NEMOA ELECTRONICS (HK) CO. LTD", - [3]byte{20, 43, 210}: "Armtel Ltd.", - [3]byte{20, 43, 214}: "Guangdong Appscomm Co.,Ltd", - [3]byte{20, 45, 39}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{20, 45, 139}: "Incipio Technologies, Inc", - [3]byte{20, 45, 245}: "Amphitech", - [3]byte{20, 47, 253}: "LT SECURITY INC", - [3]byte{20, 48, 4}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{20, 48, 122}: "Avermetrics", - [3]byte{20, 48, 198}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{20, 50, 209}: "Samsung Electronics Co.,Ltd", - [3]byte{20, 51, 101}: "TEM Mobile Limited", - [3]byte{20, 53, 139}: "Mediabridge Products, LLC.", - [3]byte{20, 53, 179}: "Future Designs, Inc.", - [3]byte{20, 54, 5}: "Nokia Corporation", - [3]byte{20, 54, 198}: "Lenovo Mobile Communication Technology Ltd.", - [3]byte{20, 55, 59}: "PROCOM Systems", - [3]byte{20, 58, 234}: "Dynapower Company LLC", - [3]byte{20, 61, 242}: "Beijing Shidai Hongyuan Network Communication Co.,Ltd", - [3]byte{20, 62, 96}: "Nokia", - [3]byte{20, 62, 191}: "zte corporation", - [3]byte{20, 63, 39}: "Noccela Oy", - [3]byte{20, 65, 70}: "Honeywell (China) Co., LTD", - [3]byte{20, 65, 226}: "Monaco Enterprises, Inc.", - [3]byte{20, 67, 25}: "Creative&Link Technology Limited", - [3]byte{20, 68, 74}: "Apollo Seiko Ltd.", - [3]byte{20, 70, 228}: "AVISTEL", - [3]byte{20, 72, 139}: "Shenzhen Doov Technology Co.,Ltd", - [3]byte{20, 73, 120}: "Digital Control Incorporated", - [3]byte{20, 73, 224}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{20, 76, 26}: "Max Communication GmbH", - [3]byte{20, 77, 103}: "Zioncom Electronics (Shenzhen) Ltd.", - [3]byte{20, 79, 215}: "IEEE Registration Authority", - [3]byte{20, 84, 18}: "Entis Co., Ltd.", - [3]byte{20, 86, 69}: "Savitech Corp.", - [3]byte{20, 86, 142}: "Samsung Electronics Co.,Ltd", - [3]byte{20, 88, 208}: "Hewlett Packard", - [3]byte{20, 90, 5}: "Apple, Inc.", - [3]byte{20, 90, 131}: "Logi-D inc", - [3]byte{20, 91, 209}: "ARRIS Group, Inc.", - [3]byte{20, 91, 225}: "nyantec GmbH", - [3]byte{20, 94, 69}: "Kaleao Limited", - [3]byte{20, 95, 148}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{20, 96, 128}: "zte corporation", - [3]byte{20, 97, 2}: "Alpine Electronics, Inc.", - [3]byte{20, 97, 47}: "Avaya Inc", - [3]byte{20, 99, 8}: "JABIL CIRCUIT (SHANGHAI) LTD.", - [3]byte{20, 106, 11}: "Cypress Electronics Limited", - [3]byte{20, 107, 114}: "Shenzhen Fortune Ship Technology Co., Ltd.", - [3]byte{20, 110, 10}: "Private", - [3]byte{20, 115, 115}: "TUBITAK UEKAE", - [3]byte{20, 116, 17}: "RIM", - [3]byte{20, 117, 144}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{20, 120, 11}: "PerkinElmer Technologies GmbH & Co. KG", - [3]byte{20, 121, 243}: "China Mobile Group Device Co.,Ltd.", - [3]byte{20, 125, 179}: "JOA TELECOM.CO.,LTD", - [3]byte{20, 125, 197}: "Murata Manufacturing Co., Ltd.", - [3]byte{20, 130, 91}: "Hefei Radio Communication Technology Co., Ltd", - [3]byte{20, 134, 146}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{20, 137, 62}: "VIXTEL TECHNOLOGIES LIMTED", - [3]byte{20, 137, 81}: "LCFC(HeFei) Electronics Technology co., ltd", - [3]byte{20, 137, 253}: "Samsung Electronics Co.,Ltd", - [3]byte{20, 138, 112}: "ADS GmbH", - [3]byte{20, 143, 33}: "Garmin International", - [3]byte{20, 143, 198}: "Apple, Inc.", - [3]byte{20, 144, 144}: "KongTop industrial(shen zhen)CO.,LTD", - [3]byte{20, 145, 130}: "Belkin International Inc.", - [3]byte{20, 147, 70}: "PNI sensor corporation", - [3]byte{20, 148, 72}: "BLU CASTLE S.A.", - [3]byte{20, 152, 125}: "Technicolor CH USA Inc.", - [3]byte{20, 153, 226}: "Apple, Inc.", - [3]byte{20, 154, 16}: "Microsoft Corporation", - [3]byte{20, 157, 9}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{20, 158, 207}: "Dell Inc.", - [3]byte{20, 159, 60}: "Samsung Electronics Co.,Ltd", - [3]byte{20, 159, 182}: "GUANGDONG GENIUS TECHNOLOGY CO.,LTD.", - [3]byte{20, 159, 232}: "Lenovo Mobile Communication Technology Ltd.", - [3]byte{20, 160, 248}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{20, 163, 100}: "Samsung Electronics Co.,Ltd", - [3]byte{20, 165, 26}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{20, 166, 44}: "S.M. Dezac S.A.", - [3]byte{20, 167, 139}: "Zhejiang Dahua Technology Co., Ltd.", - [3]byte{20, 168, 107}: "ShenZhen Telacom Science&Technology Co., Ltd", - [3]byte{20, 169, 227}: "MST CORPORATION", - [3]byte{20, 171, 197}: "Intel Corporate", - [3]byte{20, 171, 240}: "ARRIS Group, Inc.", - [3]byte{20, 174, 219}: "VTech Telecommunications Ltd.", - [3]byte{20, 177, 38}: "Industrial Software Co", - [3]byte{20, 177, 200}: "InfiniWing, Inc.", - [3]byte{20, 179, 31}: "Dell Inc.", - [3]byte{20, 179, 112}: "Gigaset Digital Technology (Shenzhen) Co., Ltd.", - [3]byte{20, 180, 132}: "Samsung Electronics Co.,Ltd", - [3]byte{20, 183, 61}: "ARCHEAN Technologies", - [3]byte{20, 183, 248}: "Technicolor CH USA Inc.", - [3]byte{20, 184, 55}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{20, 185, 104}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{20, 187, 110}: "Samsung Electronics Co.,Ltd", - [3]byte{20, 189, 97}: "Apple, Inc.", - [3]byte{20, 192, 137}: "DUNE HD LTD", - [3]byte{20, 193, 38}: "Nokia Corporation", - [3]byte{20, 193, 255}: "ShenZhen QianHai Comlan communication Co.,LTD", - [3]byte{20, 194, 29}: "Sabtech Industries", - [3]byte{20, 195, 194}: "K.A. Schmersal GmbH & Co. KG", - [3]byte{20, 201, 19}: "LG Electronics", - [3]byte{20, 204, 32}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{20, 207, 141}: "OHSUNG", - [3]byte{20, 207, 146}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{20, 207, 226}: "ARRIS Group, Inc.", - [3]byte{20, 209, 31}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{20, 212, 254}: "ARRIS Group, Inc.", - [3]byte{20, 214, 77}: "D-Link International", - [3]byte{20, 215, 110}: "CONCH ELECTRONIC Co.,Ltd", - [3]byte{20, 218, 233}: "ASUSTek COMPUTER INC.", - [3]byte{20, 219, 133}: "S NET MEDIA", - [3]byte{20, 221, 169}: "ASUSTek COMPUTER INC.", - [3]byte{20, 221, 229}: "MPMKVVCL", - [3]byte{20, 228, 236}: "mLogic LLC", - [3]byte{20, 230, 228}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{20, 231, 200}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{20, 235, 51}: "BSMediasoft Co., Ltd.", - [3]byte{20, 237, 165}: "Wächter GmbH Sicherheitssysteme", - [3]byte{20, 237, 187}: "2Wire Inc", - [3]byte{20, 237, 228}: "Kaiam Corporation", - [3]byte{20, 238, 157}: "AirNav Systems LLC", - [3]byte{20, 240, 197}: "Xtremio Ltd.", - [3]byte{20, 242, 142}: "ShenYang ZhongKe-Allwin Technology Co.LTD", - [3]byte{20, 244, 42}: "Samsung Electronics Co.,Ltd", - [3]byte{20, 246, 90}: "Xiaomi Communications Co Ltd", - [3]byte{20, 248, 147}: "Wuhan FiberHome Digital Technology Co.,Ltd.", - [3]byte{20, 254, 175}: "SAGITTAR LIMITED", - [3]byte{20, 254, 181}: "Dell Inc.", - [3]byte{24, 0, 45}: "Sony Mobile Communications AB", - [3]byte{24, 0, 219}: "Fitbit Inc.", - [3]byte{24, 1, 125}: "Harbin Arteor technology co., LTD", - [3]byte{24, 1, 227}: "Bittium Wireless Ltd", - [3]byte{24, 3, 115}: "Dell Inc.", - [3]byte{24, 3, 250}: "IBT Interfaces", - [3]byte{24, 6, 117}: "Dilax Intelcom GmbH", - [3]byte{24, 6, 255}: "Acer Computer(Shanghai) Limited.", - [3]byte{24, 11, 82}: "Nanotron Technologies GmbH", - [3]byte{24, 12, 20}: "iSonea Limited", - [3]byte{24, 12, 119}: "Westinghouse Electric Company, LLC", - [3]byte{24, 12, 172}: "CANON INC.", - [3]byte{24, 16, 78}: "CEDINT-UPM", - [3]byte{24, 18, 18}: "Cepton Technologies", - [3]byte{24, 20, 32}: "TEB SAS", - [3]byte{24, 20, 86}: "Nokia Corporation", - [3]byte{24, 22, 201}: "Samsung Electronics Co.,Ltd", - [3]byte{24, 23, 20}: "DAEWOOIS", - [3]byte{24, 23, 37}: "Cameo Communications, Inc.", - [3]byte{24, 25, 63}: "Tamtron Oy", - [3]byte{24, 27, 235}: "Actiontec Electronics, Inc", - [3]byte{24, 30, 120}: "Sagemcom Broadband SAS", - [3]byte{24, 30, 176}: "Samsung Electronics Co.,Ltd", - [3]byte{24, 32, 18}: "Aztech Associates Inc.", - [3]byte{24, 32, 50}: "Apple, Inc.", - [3]byte{24, 32, 76}: "Kummler+Matter AG", - [3]byte{24, 32, 166}: "Sage Co., Ltd.", - [3]byte{24, 33, 149}: "Samsung Electronics Co.,Ltd", - [3]byte{24, 34, 126}: "Samsung Electronics Co.,Ltd", - [3]byte{24, 38, 102}: "Samsung Electronics Co.,Ltd", - [3]byte{24, 40, 97}: "AirTies Wireless Networks", - [3]byte{24, 42, 123}: "Nintendo Co., Ltd.", - [3]byte{24, 43, 5}: "8D Technologies", - [3]byte{24, 44, 145}: "Concept Development, Inc.", - [3]byte{24, 44, 180}: "Nectarsoft Co., Ltd.", - [3]byte{24, 45, 152}: "Jinwoo Industrial system", - [3]byte{24, 48, 9}: "Woojin Industrial Systems Co., Ltd.", - [3]byte{24, 50, 162}: "LAON TECHNOLOGY CO., LTD.", - [3]byte{24, 51, 157}: "Cisco Systems, Inc", - [3]byte{24, 52, 81}: "Apple, Inc.", - [3]byte{24, 53, 209}: "ARRIS Group, Inc.", - [3]byte{24, 54, 252}: "Elecsys International Corporation", - [3]byte{24, 56, 37}: "Wuhan Lingjiu High-tech Co.,Ltd.", - [3]byte{24, 56, 100}: "CAP-TECH INTERNATIONAL CO., LTD.", - [3]byte{24, 57, 25}: "Unicoi Systems", - [3]byte{24, 57, 110}: "SUNSEA TELECOMMUNICATIONS CO.,LTD.", - [3]byte{24, 58, 45}: "Samsung Electronics Co.,Ltd", - [3]byte{24, 59, 210}: "BYD Precision Manufacture Company Ltd.", - [3]byte{24, 61, 162}: "Intel Corporate", - [3]byte{24, 63, 71}: "Samsung Electronics Co.,Ltd", - [3]byte{24, 64, 164}: "Shenzhen Trylong Smart Science and Technology Co., Ltd.", - [3]byte{24, 66, 29}: "Private", - [3]byte{24, 66, 47}: "Alcatel Lucent", - [3]byte{24, 68, 98}: "Riava Networks, Inc.", - [3]byte{24, 68, 230}: "zte corporation", - [3]byte{24, 70, 23}: "Samsung Electronics Co.,Ltd", - [3]byte{24, 72, 216}: "Fastback Networks", - [3]byte{24, 74, 111}: "Alcatel-Lucent Shanghai Bell Co., Ltd", - [3]byte{24, 78, 148}: "MESSOA TECHNOLOGIES INC.", - [3]byte{24, 79, 50}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{24, 82, 7}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD", - [3]byte{24, 82, 83}: "Pixord Corporation", - [3]byte{24, 82, 130}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{24, 83, 224}: "Hanyang Digitech Co.Ltd", - [3]byte{24, 85, 15}: "Cisco SPVTG", - [3]byte{24, 89, 51}: "Cisco SPVTG", - [3]byte{24, 89, 54}: "Xiaomi Communications Co Ltd", - [3]byte{24, 90, 232}: "Zenotech.Co.,Ltd", - [3]byte{24, 93, 154}: "BobjGear LLC", - [3]byte{24, 94, 15}: "Intel Corporate", - [3]byte{24, 96, 36}: "Hewlett Packard", - [3]byte{24, 97, 199}: "lemonbeat GmbH", - [3]byte{24, 98, 44}: "Sagemcom Broadband SAS", - [3]byte{24, 100, 114}: "Aruba Networks", - [3]byte{24, 101, 113}: "Top Victory Electronics (Taiwan) Co., Ltd.", - [3]byte{24, 101, 144}: "Apple, Inc.", - [3]byte{24, 102, 218}: "Dell Inc.", - [3]byte{24, 102, 227}: "Veros Systems, Inc.", - [3]byte{24, 103, 63}: "Hanover Displays Limited", - [3]byte{24, 103, 81}: "KOMEG Industrielle Messtechnik GmbH", - [3]byte{24, 103, 176}: "Samsung Electronics Co.,Ltd", - [3]byte{24, 104, 106}: "zte corporation", - [3]byte{24, 104, 130}: "Beward R&D Co., Ltd.", - [3]byte{24, 104, 203}: "Hangzhou Hikvision Digital Technology Co.,Ltd.", - [3]byte{24, 109, 153}: "Adanis Inc.", - [3]byte{24, 113, 23}: "eta plus electronic gmbh", - [3]byte{24, 116, 46}: "Amazon Technologies Inc.", - [3]byte{24, 117, 50}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD", - [3]byte{24, 121, 162}: "GMJ ELECTRIC LIMITED", - [3]byte{24, 122, 147}: "AMICCOM Electronics Corporation", - [3]byte{24, 124, 129}: "Valeo Vision Systems", - [3]byte{24, 126, 213}: "shenzhen kaism technology Co. Ltd", - [3]byte{24, 128, 144}: "Cisco Systems, Inc", - [3]byte{24, 128, 206}: "Barberry Solutions Ltd", - [3]byte{24, 128, 245}: "Alcatel-Lucent Shanghai Bell Co., Ltd", - [3]byte{24, 130, 25}: "Alibaba Cloud Computing Ltd.", - [3]byte{24, 131, 49}: "Samsung Electronics Co.,Ltd", - [3]byte{24, 131, 191}: "Arcadyan Technology Corporation", - [3]byte{24, 132, 16}: "CoreTrust Inc.", - [3]byte{24, 134, 58}: "DIGITAL ART SYSTEM", - [3]byte{24, 134, 172}: "Nokia Danmark A/S", - [3]byte{24, 135, 150}: "HTC Corporation", - [3]byte{24, 136, 87}: "Beijing Jinhong Xi-Dian Information Technology Corp.", - [3]byte{24, 137, 91}: "Samsung Electronics Co.,Ltd", - [3]byte{24, 137, 223}: "CerebrEX Inc.", - [3]byte{24, 139, 21}: "ShenZhen ZhongRuiJing Technology co.,LTD", - [3]byte{24, 139, 69}: "Cisco Systems, Inc", - [3]byte{24, 139, 157}: "Cisco Systems, Inc", - [3]byte{24, 142, 213}: "TP Vision Belgium N.V. - innovation site Brugge", - [3]byte{24, 142, 249}: "G2C Co. Ltd.", - [3]byte{24, 144, 216}: "Sagemcom Broadband SAS", - [3]byte{24, 146, 44}: "Virtual Instruments", - [3]byte{24, 147, 215}: "Texas Instruments", - [3]byte{24, 151, 255}: "TechFaith Wireless Technology Limited", - [3]byte{24, 153, 245}: "Sichuan Changhong Electric Ltd.", - [3]byte{24, 154, 103}: "CSE-Servelec Limited", - [3]byte{24, 155, 165}: "IEEE Registration Authority", - [3]byte{24, 156, 93}: "Cisco Systems, Inc", - [3]byte{24, 158, 252}: "Apple, Inc.", - [3]byte{24, 163, 232}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{24, 166, 247}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{24, 169, 5}: "Hewlett Packard", - [3]byte{24, 169, 88}: "PROVISION THAI CO., LTD.", - [3]byte{24, 169, 155}: "Dell Inc.", - [3]byte{24, 170, 69}: "Fon Technology", - [3]byte{24, 171, 245}: "Ultra Electronics Electrics", - [3]byte{24, 173, 77}: "Polostar Technology Corporation", - [3]byte{24, 174, 187}: "Siemens Convergence Creators GmbH&Co.KG", - [3]byte{24, 175, 97}: "Apple, Inc.", - [3]byte{24, 175, 143}: "Apple, Inc.", - [3]byte{24, 175, 159}: "DIGITRONIC Automationsanlagen GmbH", - [3]byte{24, 177, 105}: "Sonicwall", - [3]byte{24, 178, 9}: "Torrey Pines Logic, Inc", - [3]byte{24, 179, 186}: "Netlogic AB", - [3]byte{24, 180, 48}: "Nest Labs Inc.", - [3]byte{24, 181, 145}: "I-Storm", - [3]byte{24, 183, 158}: "Invoxia", - [3]byte{24, 184, 31}: "ARRIS Group, Inc.", - [3]byte{24, 188, 90}: "Zhejiang Tmall Technology Co., Ltd.", - [3]byte{24, 189, 173}: "L-TECH CORPORATION", - [3]byte{24, 192, 134}: "Broadcom", - [3]byte{24, 193, 157}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{24, 196, 81}: "Tucson Embedded Systems", - [3]byte{24, 197, 1}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT", - [3]byte{24, 197, 138}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{24, 200, 231}: "Shenzhen Hualistone Technology Co.,Ltd", - [3]byte{24, 204, 35}: "Philio Technology Corporation", - [3]byte{24, 204, 136}: "Hitachi Johnson Controls Air", - [3]byte{24, 207, 94}: "Liteon Technology Corporation", - [3]byte{24, 208, 113}: "DASAN CO., LTD.", - [3]byte{24, 210, 37}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{24, 210, 118}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{24, 213, 182}: "SMG Holdings LLC", - [3]byte{24, 214, 106}: "Inmarsat", - [3]byte{24, 214, 199}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{24, 214, 207}: "Kurth Electronic GmbH", - [3]byte{24, 217, 73}: "Qvis Labs, LLC", - [3]byte{24, 219, 242}: "Dell Inc.", - [3]byte{24, 220, 86}: "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd", - [3]byte{24, 222, 215}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{24, 226, 136}: "STT Condigi", - [3]byte{24, 226, 159}: "vivo Mobile Communication Co., Ltd.", - [3]byte{24, 226, 194}: "Samsung Electronics Co.,Ltd", - [3]byte{24, 227, 188}: "TCT mobile ltd", - [3]byte{24, 231, 40}: "Cisco Systems, Inc", - [3]byte{24, 231, 244}: "Apple, Inc.", - [3]byte{24, 232, 15}: "Viking Electronics Inc.", - [3]byte{24, 232, 221}: "MODULETEK", - [3]byte{24, 238, 105}: "Apple, Inc.", - [3]byte{24, 239, 99}: "Cisco Systems, Inc", - [3]byte{24, 240, 228}: "Xiaomi Communications Co Ltd", - [3]byte{24, 241, 69}: "NetComm Wireless Limited", - [3]byte{24, 242, 146}: "Shannon Systems", - [3]byte{24, 244, 106}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{24, 246, 67}: "Apple, Inc.", - [3]byte{24, 246, 80}: "Multimedia Pacific Limited", - [3]byte{24, 247, 107}: "Zhejiang Winsight Technology CO.,LTD", - [3]byte{24, 248, 122}: "i3 International Inc.", - [3]byte{24, 250, 111}: "ISC applied systems corp", - [3]byte{24, 251, 123}: "Dell Inc.", - [3]byte{24, 252, 159}: "Changhe Electronics Co., Ltd.", - [3]byte{24, 254, 52}: "Espressif Inc.", - [3]byte{24, 255, 15}: "Intel Corporate", - [3]byte{24, 255, 46}: "Shenzhen Rui Ying Da Technology Co., Ltd", - [3]byte{28, 6, 86}: "IDY Corporation", - [3]byte{28, 8, 193}: "Lg Innotek", - [3]byte{28, 11, 82}: "EPICOM S.A", - [3]byte{28, 15, 175}: "Lucid Vision Labs", - [3]byte{28, 15, 207}: "Sypro Optics GmbH", - [3]byte{28, 17, 225}: "Wartsila Finland Oy", - [3]byte{28, 18, 157}: "IEEE PES PSRC/SUB", - [3]byte{28, 20, 72}: "ARRIS Group, Inc.", - [3]byte{28, 20, 179}: "Airwire Technologies", - [3]byte{28, 21, 31}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{28, 23, 211}: "Cisco Systems, Inc", - [3]byte{28, 24, 74}: "ShenZhen RicherLink Technologies Co.,LTD", - [3]byte{28, 25, 222}: "eyevis GmbH", - [3]byte{28, 26, 192}: "Apple, Inc.", - [3]byte{28, 27, 13}: "GIGA-BYTE TECHNOLOGY CO.,LTD.", - [3]byte{28, 27, 104}: "ARRIS Group, Inc.", - [3]byte{28, 28, 253}: "Dalian Hi-Think Computer Technology, Corp", - [3]byte{28, 29, 103}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{28, 29, 134}: "Cisco Systems, Inc", - [3]byte{28, 30, 227}: "Hui Zhou Gaoshengda Technology Co.,LTD", - [3]byte{28, 31, 212}: "LifeBEAM Technologies LTD", - [3]byte{28, 33, 209}: "IEEE Registration Authority", - [3]byte{28, 35, 44}: "Samsung Electronics Co.,Ltd", - [3]byte{28, 35, 79}: "EDMI Europe Ltd", - [3]byte{28, 37, 225}: "China Mobile IOT Company Limited", - [3]byte{28, 39, 221}: "Datang Gohighsec(zhejiang)Information Technology Co.,Ltd.", - [3]byte{28, 51, 14}: "PernixData", - [3]byte{28, 51, 77}: "ITS Telecom", - [3]byte{28, 52, 119}: "Innovation Wireless", - [3]byte{28, 53, 241}: "NEW Lift Neue Elektronische Wege Steuerungsbau GmbH", - [3]byte{28, 54, 187}: "Apple, Inc.", - [3]byte{28, 55, 191}: "Cloudium Systems Ltd.", - [3]byte{28, 57, 71}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{28, 57, 138}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{28, 58, 79}: "AccuSpec Electronics, LLC", - [3]byte{28, 58, 222}: "Samsung Electronics Co.,Ltd", - [3]byte{28, 61, 231}: "Sigma Koki Co.,Ltd.", - [3]byte{28, 62, 132}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{28, 64, 36}: "Dell Inc.", - [3]byte{28, 64, 232}: "SHENZHEN PROGRESS&WIN TECHNOLOGY CO.,LTD", - [3]byte{28, 65, 88}: "Gemalto M2M GmbH", - [3]byte{28, 67, 236}: "JAPAN CIRCUIT CO.,LTD", - [3]byte{28, 68, 25}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{28, 69, 147}: "Texas Instruments", - [3]byte{28, 72, 64}: "IMS Messsysteme GmbH", - [3]byte{28, 72, 206}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{28, 72, 249}: "GN Netcom A/S", - [3]byte{28, 73, 123}: "Gemtek Technology Co., Ltd.", - [3]byte{28, 74, 247}: "AMON INC", - [3]byte{28, 75, 185}: "SMG ENTERPRISE, LLC", - [3]byte{28, 75, 214}: "AzureWave Technology Inc.", - [3]byte{28, 77, 112}: "Intel Corporate", - [3]byte{28, 81, 181}: "Techaya LTD", - [3]byte{28, 82, 22}: "DONGGUAN HELE ELECTRONICS CO., LTD", - [3]byte{28, 82, 214}: "FLAT DISPLAY TECHNOLOGY CORPORATION", - [3]byte{28, 85, 58}: "QianGua Corp.", - [3]byte{28, 86, 254}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{28, 87, 216}: "Kraftway Corporation PLC", - [3]byte{28, 90, 11}: "Tegile Systems", - [3]byte{28, 90, 62}: "Samsung Electronics Co.,Ltd", - [3]byte{28, 90, 107}: "Philips Electronics Nederland BV", - [3]byte{28, 92, 85}: "PRIMA Cinema, Inc", - [3]byte{28, 92, 96}: "Shenzhen Belzon Technology Co.,LTD.", - [3]byte{28, 92, 242}: "Apple, Inc.", - [3]byte{28, 95, 43}: "D-Link International", - [3]byte{28, 95, 255}: "Beijing Ereneben Information Technology Co.,Ltd Shenzhen Branch", - [3]byte{28, 96, 222}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", - [3]byte{28, 98, 184}: "Samsung Electronics Co.,Ltd", - [3]byte{28, 99, 183}: "OpenProducts 237 AB", - [3]byte{28, 101, 157}: "Liteon Technology Corporation", - [3]byte{28, 102, 109}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{28, 102, 170}: "Samsung Electronics Co.,Ltd", - [3]byte{28, 103, 88}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{28, 105, 165}: "BlackBerry RTS", - [3]byte{28, 106, 122}: "Cisco Systems, Inc", - [3]byte{28, 107, 202}: "Mitsunami Co., Ltd.", - [3]byte{28, 110, 76}: "Logistic Service & Engineering Co.,Ltd", - [3]byte{28, 110, 118}: "Quarion Technology Inc", - [3]byte{28, 111, 101}: "GIGA-BYTE TECHNOLOGY CO.,LTD.", - [3]byte{28, 112, 34}: "Murata Manufacturing Co., Ltd.", - [3]byte{28, 115, 40}: "Connected Home", - [3]byte{28, 115, 112}: "Neotech", - [3]byte{28, 116, 13}: "Zyxel Communications Corporation", - [3]byte{28, 117, 8}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{28, 118, 202}: "Terasic Technologies Inc.", - [3]byte{28, 119, 246}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{28, 120, 57}: "Shenzhen Tencent Computer System Co., Ltd.", - [3]byte{28, 123, 33}: "Sony Mobile Communications AB", - [3]byte{28, 123, 35}: "Qingdao Hisense Communications Co.,Ltd.", - [3]byte{28, 124, 17}: "EID", - [3]byte{28, 124, 69}: "Vitek Industrial Video Products, Inc.", - [3]byte{28, 124, 199}: "Coriant GmbH", - [3]byte{28, 125, 34}: "Fuji Xerox Co., Ltd.", - [3]byte{28, 126, 81}: "3bumen.com", - [3]byte{28, 126, 229}: "D-Link International", - [3]byte{28, 131, 65}: "Hefei Bitland Information Technology Co.Ltd", - [3]byte{28, 131, 176}: "Linked IP GmbH", - [3]byte{28, 132, 100}: "FORMOSA WIRELESS COMMUNICATION CORP.", - [3]byte{28, 134, 173}: "MCT CO., LTD.", - [3]byte{28, 135, 44}: "ASUSTek COMPUTER INC.", - [3]byte{28, 142, 92}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{28, 142, 142}: "DB Communication & Systems Co., ltd.", - [3]byte{28, 143, 138}: "Phase Motion Control SpA", - [3]byte{28, 145, 72}: "Apple, Inc.", - [3]byte{28, 145, 121}: "Integrated System Technologies Ltd", - [3]byte{28, 148, 146}: "RUAG Schweiz AG", - [3]byte{28, 149, 93}: "I-LAX ELECTRONICS INC.", - [3]byte{28, 149, 159}: "Veethree Electronics And Marine LLC", - [3]byte{28, 150, 90}: "Weifang GoerTek Technology Co.,Ltd.", - [3]byte{28, 151, 61}: "PRICOM Design", - [3]byte{28, 152, 236}: "Hewlett Packard Enterprise", - [3]byte{28, 153, 76}: "Murata Manufacturing Co., Ltd.", - [3]byte{28, 156, 38}: "Zoovel Technologies", - [3]byte{28, 157, 62}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{28, 158, 70}: "Apple, Inc.", - [3]byte{28, 158, 203}: "Beijing Nari Smartchip Microelectronics Company Limited", - [3]byte{28, 160, 211}: "IEEE Registration Authority", - [3]byte{28, 162, 177}: "ruwido austria gmbh", - [3]byte{28, 165, 50}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT", - [3]byte{28, 167, 112}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD", - [3]byte{28, 170, 7}: "Cisco Systems, Inc", - [3]byte{28, 171, 1}: "Innovolt", - [3]byte{28, 171, 52}: "New H3C Technologies Co., Ltd", - [3]byte{28, 171, 167}: "Apple, Inc.", - [3]byte{28, 171, 192}: "Hitron Technologies. Inc", - [3]byte{28, 173, 209}: "Bosung Electronics Co., Ltd.", - [3]byte{28, 175, 5}: "Samsung Electronics Co.,Ltd", - [3]byte{28, 175, 247}: "D-Link International", - [3]byte{28, 176, 148}: "HTC Corporation", - [3]byte{28, 177, 127}: "NEC Platforms, Ltd.", - [3]byte{28, 178, 67}: "TDC A/S", - [3]byte{28, 183, 44}: "ASUSTek COMPUTER INC.", - [3]byte{28, 184, 87}: "Becon Technologies Co,.Ltd.", - [3]byte{28, 185, 196}: "Ruckus Wireless", - [3]byte{28, 186, 140}: "Texas Instruments", - [3]byte{28, 187, 168}: "OJSC Ufimskiy Zavod Promsvyaz", - [3]byte{28, 189, 14}: "Amplified Engineering Pty Ltd", - [3]byte{28, 189, 185}: "D-Link International", - [3]byte{28, 192, 53}: "PLANEX COMMUNICATIONS INC.", - [3]byte{28, 192, 225}: "IEEE Registration Authority", - [3]byte{28, 193, 26}: "Wavetronix", - [3]byte{28, 193, 222}: "Hewlett Packard", - [3]byte{28, 195, 22}: "MileSight Technology Co., Ltd.", - [3]byte{28, 197, 134}: "Absolute Acoustics", - [3]byte{28, 198, 60}: "Arcadyan Technology Corporation", - [3]byte{28, 199, 45}: "Shenzhen Huapu Digital CO.,Ltd", - [3]byte{28, 202, 227}: "IEEE Registration Authority", - [3]byte{28, 203, 153}: "TCT mobile ltd", - [3]byte{28, 205, 229}: "Shanghai Wind Technologies Co.,Ltd", - [3]byte{28, 212, 12}: "Kriwan Industrie-Elektronik GmbH", - [3]byte{28, 214, 189}: "LEEDARSON LIGHTING CO., LTD.", - [3]byte{28, 218, 39}: "vivo Mobile Communication Co., Ltd.", - [3]byte{28, 221, 234}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{28, 222, 167}: "Cisco Systems, Inc", - [3]byte{28, 223, 15}: "Cisco Systems, Inc", - [3]byte{28, 223, 82}: "Texas Instruments", - [3]byte{28, 225, 101}: "Marshal Corporation", - [3]byte{28, 225, 146}: "Qisda Corporation", - [3]byte{28, 226, 204}: "Texas Instruments", - [3]byte{28, 230, 43}: "Apple, Inc.", - [3]byte{28, 230, 199}: "Cisco Systems, Inc", - [3]byte{28, 232, 93}: "Cisco Systems, Inc", - [3]byte{28, 234, 27}: "Nokia", - [3]byte{28, 238, 201}: "Elo touch solutions", - [3]byte{28, 238, 232}: "Ilshin Elecom", - [3]byte{28, 239, 206}: "bebro electronic GmbH", - [3]byte{28, 240, 62}: "Wearhaus Inc.", - [3]byte{28, 240, 97}: "SCAPS GmbH", - [3]byte{28, 244, 202}: "Private", - [3]byte{28, 245, 231}: "Turtle Industry Co., Ltd.", - [3]byte{28, 250, 104}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{28, 252, 187}: "Realfiction ApS", - [3]byte{28, 254, 167}: "IDentytech Solutins Ltd.", - [3]byte{32, 1, 79}: "Linea Research Ltd", - [3]byte{32, 2, 175}: "Murata Manufacturing Co., Ltd.", - [3]byte{32, 4, 15}: "Dell Inc.", - [3]byte{32, 5, 5}: "RADMAX COMMUNICATION PRIVATE LIMITED", - [3]byte{32, 5, 232}: "OOO InProMedia", - [3]byte{32, 8, 237}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{32, 10, 94}: "Xiangshan Giant Eagle Technology Developing Co., Ltd.", - [3]byte{32, 11, 199}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{32, 12, 200}: "NETGEAR", - [3]byte{32, 14, 149}: "IEC – TC9 WG43", - [3]byte{32, 16, 122}: "Gemtek Technology Co., Ltd.", - [3]byte{32, 18, 87}: "Most Lucky Trading Ltd", - [3]byte{32, 18, 213}: "Scientech Materials Corporation", - [3]byte{32, 19, 224}: "Samsung Electronics Co.,Ltd", - [3]byte{32, 22, 216}: "Liteon Technology Corporation", - [3]byte{32, 24, 14}: "Shenzhen Sunchip Technology Co., Ltd", - [3]byte{32, 26, 6}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{32, 29, 3}: "Elatec GmbH", - [3]byte{32, 33, 165}: "LG Electronics (Mobile Communications)", - [3]byte{32, 37, 100}: "PEGATRON CORPORATION", - [3]byte{32, 37, 152}: "Teleview", - [3]byte{32, 40, 188}: "Visionscape Co,. Ltd.", - [3]byte{32, 43, 193}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{32, 44, 183}: "Kong Yue Electronics & Information Industry (Xinhui) Ltd.", - [3]byte{32, 45, 7}: "Samsung Electronics Co.,Ltd", - [3]byte{32, 45, 248}: "Digital Media Cartridge Ltd.", - [3]byte{32, 49, 235}: "HDSN", - [3]byte{32, 55, 6}: "Cisco Systems, Inc", - [3]byte{32, 55, 188}: "Kuipers Electronic Engineering BV", - [3]byte{32, 58, 7}: "Cisco Systems, Inc", - [3]byte{32, 58, 239}: "Sivantos GmbH", - [3]byte{32, 60, 174}: "Apple, Inc.", - [3]byte{32, 61, 102}: "ARRIS Group, Inc.", - [3]byte{32, 61, 178}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{32, 64, 5}: "feno GmbH", - [3]byte{32, 65, 90}: "Smarteh d.o.o.", - [3]byte{32, 68, 58}: "Schneider Electric Asia Pacific Ltd", - [3]byte{32, 70, 161}: "VECOW Co., Ltd", - [3]byte{32, 70, 249}: "Advanced Network Devices (dba:AND)", - [3]byte{32, 71, 71}: "Dell Inc.", - [3]byte{32, 71, 237}: "BSkyB Ltd", - [3]byte{32, 74, 170}: "Hanscan Spain S.A.", - [3]byte{32, 76, 3}: "Aruba Networks", - [3]byte{32, 76, 109}: "Hugo Brennenstuhl Gmbh & Co. KG.", - [3]byte{32, 76, 158}: "Cisco Systems, Inc", - [3]byte{32, 78, 107}: "Axxana(israel) ltd", - [3]byte{32, 78, 113}: "Juniper Networks", - [3]byte{32, 78, 127}: "NETGEAR", - [3]byte{32, 83, 202}: "Risk Technology Ltd", - [3]byte{32, 84, 118}: "Sony Mobile Communications AB", - [3]byte{32, 84, 250}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{32, 85, 49}: "Samsung Electronics Co.,Ltd", - [3]byte{32, 85, 50}: "Gotech International Technology Limited", - [3]byte{32, 87, 33}: "Salix Technology CO., Ltd.", - [3]byte{32, 87, 175}: "Shenzhen FH-NET OPTOELECTRONICS CO.,LTD", - [3]byte{32, 89, 160}: "Paragon Technologies Inc.", - [3]byte{32, 90, 0}: "Coval", - [3]byte{32, 91, 42}: "Private", - [3]byte{32, 91, 94}: "Shenzhen Wonhe Technology Co., Ltd", - [3]byte{32, 92, 250}: "Yangzhou ChangLian Network Technology Co,ltd.", - [3]byte{32, 93, 71}: "vivo Mobile Communication Co., Ltd.", - [3]byte{32, 94, 247}: "Samsung Electronics Co.,Ltd", - [3]byte{32, 98, 116}: "Microsoft Corporation", - [3]byte{32, 99, 95}: "Abeeway", - [3]byte{32, 100, 50}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{32, 103, 177}: "Pluto inc.", - [3]byte{32, 104, 157}: "Liteon Technology Corporation", - [3]byte{32, 106, 138}: "Wistron Infocomm (Zhongshan) Corporation", - [3]byte{32, 106, 255}: "Atlas Elektronik UK Limited", - [3]byte{32, 107, 231}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{32, 108, 138}: "Aerohive Networks Inc.", - [3]byte{32, 110, 156}: "Samsung Electronics Co.,Ltd", - [3]byte{32, 111, 236}: "Braemac CA LLC", - [3]byte{32, 113, 158}: "SF Technology Co.,Ltd", - [3]byte{32, 115, 85}: "ARRIS Group, Inc.", - [3]byte{32, 116, 207}: "Shenzhen Voxtech Co.,Ltd", - [3]byte{32, 118, 0}: "Actiontec Electronics, Inc", - [3]byte{32, 118, 143}: "Apple, Inc.", - [3]byte{32, 118, 147}: "Lenovo (Beijing) Limited.", - [3]byte{32, 120, 11}: "Delta Faucet Company", - [3]byte{32, 120, 82}: "Nokia", - [3]byte{32, 120, 240}: "Apple, Inc.", - [3]byte{32, 124, 143}: "Quanta Microsystems,Inc.", - [3]byte{32, 125, 116}: "Apple, Inc.", - [3]byte{32, 130, 192}: "Xiaomi Communications Co Ltd", - [3]byte{32, 133, 140}: "Assa", - [3]byte{32, 135, 86}: "SIEMENS AG", - [3]byte{32, 135, 172}: "AES motomation", - [3]byte{32, 137, 111}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{32, 137, 132}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{32, 137, 134}: "zte corporation", - [3]byte{32, 139, 55}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd", - [3]byte{32, 144, 111}: "Shenzhen Tencent Computer System Co., Ltd.", - [3]byte{32, 145, 72}: "Texas Instruments", - [3]byte{32, 145, 138}: "PROFALUX", - [3]byte{32, 145, 217}: "I'M SPA", - [3]byte{32, 147, 77}: "FUJIAN STAR-NET COMMUNICATION CO.,LTD", - [3]byte{32, 154, 233}: "Volacomm Co., Ltd", - [3]byte{32, 155, 165}: "JIAXING GLEAD Electronics Co.,Ltd", - [3]byte{32, 155, 205}: "Apple, Inc.", - [3]byte{32, 162, 228}: "Apple, Inc.", - [3]byte{32, 162, 231}: "Lee-Dickens Ltd", - [3]byte{32, 166, 128}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{32, 166, 205}: "Hewlett Packard Enterprise", - [3]byte{32, 167, 131}: "miControl GmbH", - [3]byte{32, 167, 135}: "Bointec Taiwan Corporation Limited", - [3]byte{32, 168, 185}: "Siemens", - [3]byte{32, 169, 14}: "TCT mobile ltd", - [3]byte{32, 169, 155}: "Microsoft Corporation", - [3]byte{32, 170, 37}: "IP-NET LLC", - [3]byte{32, 170, 75}: "Cisco-Linksys, LLC", - [3]byte{32, 171, 55}: "Apple, Inc.", - [3]byte{32, 176, 247}: "Enclustra GmbH", - [3]byte{32, 179, 153}: "Enterasys", - [3]byte{32, 181, 198}: "Mimosa Networks", - [3]byte{32, 183, 192}: "OMICRON electronics GmbH", - [3]byte{32, 187, 118}: "COL GIOVANNI PAOLO SpA", - [3]byte{32, 187, 192}: "Cisco Systems, Inc", - [3]byte{32, 187, 198}: "Jabil Circuit Hungary Ltd.", - [3]byte{32, 191, 219}: "DVL", - [3]byte{32, 192, 71}: "Verizon", - [3]byte{32, 192, 109}: "SHENZHEN SPACETEK TECHNOLOGY CO.,LTD", - [3]byte{32, 193, 175}: "i Wit Digital Co., Limited", - [3]byte{32, 195, 143}: "Texas Instruments", - [3]byte{32, 195, 164}: "RetailNext", - [3]byte{32, 198, 13}: "Shanghai annijie Information technology Co.,LTD", - [3]byte{32, 198, 235}: "Panasonic Corporation AVC Networks Company", - [3]byte{32, 200, 179}: "SHENZHEN BUL-TECH CO.,LTD.", - [3]byte{32, 201, 208}: "Apple, Inc.", - [3]byte{32, 205, 57}: "Texas Instruments", - [3]byte{32, 206, 196}: "Peraso Technologies", - [3]byte{32, 207, 48}: "ASUSTek COMPUTER INC.", - [3]byte{32, 209, 96}: "Private", - [3]byte{32, 210, 31}: "Wincal Technology Corp.", - [3]byte{32, 210, 95}: "SmartCap Technologies", - [3]byte{32, 211, 144}: "Samsung Electronics Co.,Ltd", - [3]byte{32, 213, 171}: "Korea Infocom Co.,Ltd.", - [3]byte{32, 213, 191}: "Samsung Electronics Co.,Ltd", - [3]byte{32, 214, 7}: "Nokia Corporation", - [3]byte{32, 215, 90}: "Posh Mobile Limited", - [3]byte{32, 217, 6}: "Iota, Inc.", - [3]byte{32, 219, 171}: "Samsung Electronics Co., Ltd.", - [3]byte{32, 220, 147}: "Cheetah Hi-Tech, Inc.", - [3]byte{32, 220, 230}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{32, 223, 63}: "Nanjing SAC Power Grid Automation Co., Ltd.", - [3]byte{32, 223, 185}: "Google, Inc.", - [3]byte{32, 224, 156}: "Nokia", - [3]byte{32, 228, 7}: "Spark srl", - [3]byte{32, 229, 42}: "NETGEAR", - [3]byte{32, 229, 100}: "ARRIS Group, Inc.", - [3]byte{32, 231, 145}: "Siemens Healthcare Diagnostics, Inc", - [3]byte{32, 234, 199}: "SHENZHEN RIOPINE ELECTRONICS CO., LTD", - [3]byte{32, 237, 116}: "Ability enterprise co.,Ltd.", - [3]byte{32, 238, 40}: "Apple, Inc.", - [3]byte{32, 238, 198}: "Elefirst Science & Tech Co ., ltd", - [3]byte{32, 240, 2}: "MTData Developments Pty. Ltd.", - [3]byte{32, 241, 124}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{32, 241, 158}: "ARRIS Group, Inc.", - [3]byte{32, 243, 163}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{32, 244, 27}: "Shenzhen Bilian electronic CO.,LTD", - [3]byte{32, 244, 82}: "Shanghai IUV Software Development Co. Ltd", - [3]byte{32, 245, 16}: "Codex Digital Limited", - [3]byte{32, 245, 67}: "Hui Zhou Gaoshengda Technology Co.,LTD", - [3]byte{32, 248, 94}: "Delta Electronics", - [3]byte{32, 250, 187}: "Cambridge Executive Limited", - [3]byte{32, 253, 241}: "3COM EUROPE LTD", - [3]byte{32, 254, 205}: "System In Frontier Inc.", - [3]byte{32, 254, 219}: "M2M Solution S.A.S.", - [3]byte{36, 0, 186}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{36, 1, 199}: "Cisco Systems, Inc", - [3]byte{36, 5, 15}: "MTN Electronic Co. Ltd", - [3]byte{36, 5, 245}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{36, 9, 23}: "Devlin Electronics Limited", - [3]byte{36, 9, 149}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{36, 10, 17}: "TCT mobile ltd", - [3]byte{36, 10, 100}: "AzureWave Technology Inc.", - [3]byte{36, 10, 196}: "Espressif Inc.", - [3]byte{36, 11, 10}: "Palo Alto Networks", - [3]byte{36, 11, 42}: "Viettel Group", - [3]byte{36, 11, 177}: "KOSTAL Industrie Elektrik GmbH", - [3]byte{36, 13, 101}: "Shenzhen Vsun Communication Technology Co., Ltd.", - [3]byte{36, 13, 108}: "SMND", - [3]byte{36, 13, 194}: "TCT mobile ltd", - [3]byte{36, 16, 100}: "Shenzhen Ecsino Tecnical Co. Ltd", - [3]byte{36, 17, 37}: "Hutek Co., Ltd.", - [3]byte{36, 17, 72}: "Entropix, LLC", - [3]byte{36, 17, 208}: "Chongqing Ehs Science and Technology Development Co.,Ltd.", - [3]byte{36, 26, 140}: "Squarehead Technology AS", - [3]byte{36, 27, 19}: "Shanghai Nutshell Electronic Co., Ltd.", - [3]byte{36, 27, 68}: "Hangzhou Tuners Electronics Co., Ltd", - [3]byte{36, 28, 4}: "SHENZHEN JEHE TECHNOLOGY DEVELOPMENT CO., LTD.", - [3]byte{36, 30, 235}: "Apple, Inc.", - [3]byte{36, 31, 44}: "Calsys, Inc.", - [3]byte{36, 31, 160}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{36, 32, 199}: "Sagemcom Broadband SAS", - [3]byte{36, 33, 171}: "Sony Mobile Communications AB", - [3]byte{36, 36, 14}: "Apple, Inc.", - [3]byte{36, 38, 66}: "SHARP Corporation.", - [3]byte{36, 47, 250}: "Toshiba Global Commerce Solutions", - [3]byte{36, 49, 132}: "SHARP Corporation", - [3]byte{36, 51, 108}: "Private", - [3]byte{36, 53, 204}: "Zhongshan Scinan Internet of Things Co.,Ltd.", - [3]byte{36, 55, 76}: "Cisco SPVTG", - [3]byte{36, 55, 239}: "EMC Electronic Media Communication SA", - [3]byte{36, 60, 32}: "Dynamode Group", - [3]byte{36, 66, 188}: "Alinco,incorporated", - [3]byte{36, 68, 39}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{36, 69, 151}: "GEMUE Gebr. Mueller Apparatebau", - [3]byte{36, 71, 14}: "PentronicAB", - [3]byte{36, 73, 123}: "Innovative Converged Devices Inc", - [3]byte{36, 75, 3}: "Samsung Electronics Co.,Ltd", - [3]byte{36, 75, 129}: "Samsung Electronics Co.,Ltd", - [3]byte{36, 76, 7}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{36, 78, 123}: "IEEE Registration Authority", - [3]byte{36, 79, 29}: "iRule LLC", - [3]byte{36, 88, 128}: "VIZEO", - [3]byte{36, 89, 11}: "White Sky Inc. Limited", - [3]byte{36, 91, 167}: "Apple, Inc.", - [3]byte{36, 91, 240}: "Liteon, Inc.", - [3]byte{36, 92, 191}: "NCSE", - [3]byte{36, 92, 203}: "AXIe Consortium, Inc.", - [3]byte{36, 94, 190}: "QNAP Systems, Inc.", - [3]byte{36, 95, 223}: "KYOCERA CORPORATION", - [3]byte{36, 96, 129}: "razberi technologies", - [3]byte{36, 97, 90}: "China Mobile Group Device Co.,Ltd.", - [3]byte{36, 98, 120}: "sysmocom - systems for mobile communications GmbH", - [3]byte{36, 100, 239}: "CYG SUNRI CO.,LTD.", - [3]byte{36, 101, 17}: "AVM GmbH", - [3]byte{36, 104, 128}: "Braveridge.co.,ltd.", - [3]byte{36, 105, 62}: "innodisk Corporation", - [3]byte{36, 105, 74}: "Jasmine Systems Inc.", - [3]byte{36, 105, 104}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{36, 105, 165}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{36, 106, 171}: "IT-IS International", - [3]byte{36, 108, 138}: "YUKAI Engineering", - [3]byte{36, 110, 150}: "Dell Inc.", - [3]byte{36, 113, 137}: "Texas Instruments", - [3]byte{36, 114, 96}: "IOTTECH Corp", - [3]byte{36, 118, 86}: "Shanghai Net Miles Fiber Optics Technology Co., LTD.", - [3]byte{36, 118, 125}: "Cisco SPVTG", - [3]byte{36, 119, 3}: "Intel Corporate", - [3]byte{36, 121, 42}: "Ruckus Wireless", - [3]byte{36, 124, 76}: "Herman Miller", - [3]byte{36, 127, 32}: "Sagemcom Broadband SAS", - [3]byte{36, 127, 60}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{36, 128, 0}: "Westcontrol AS", - [3]byte{36, 129, 170}: "KSH International Co., Ltd.", - [3]byte{36, 130, 138}: "Prowave Technologies Ltd.", - [3]byte{36, 134, 244}: "Ctek, Inc.", - [3]byte{36, 135, 7}: "SEnergy Corporation", - [3]byte{36, 136, 148}: "shenzhen lensun Communication Technology LTD", - [3]byte{36, 138, 7}: "Mellanox Technologies, Inc.", - [3]byte{36, 139, 224}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD", - [3]byte{36, 146, 14}: "Samsung Electronics Co.,Ltd", - [3]byte{36, 147, 202}: "Voxtronic Technology Computer-Systeme GmbH", - [3]byte{36, 148, 66}: "OPEN ROAD SOLUTIONS , INC.", - [3]byte{36, 149, 4}: "SFR", - [3]byte{36, 151, 237}: "Techvision Intelligent Technology Limited", - [3]byte{36, 158, 171}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{36, 160, 116}: "Apple, Inc.", - [3]byte{36, 162, 225}: "Apple, Inc.", - [3]byte{36, 164, 44}: "KOUKAAM a.s.", - [3]byte{36, 164, 60}: "Ubiquiti Networks Inc.", - [3]byte{36, 164, 149}: "Thales Canada Inc.", - [3]byte{36, 165, 52}: "SynTrust Tech International Ltd.", - [3]byte{36, 167, 220}: "BSkyB Ltd", - [3]byte{36, 168, 125}: "Panasonic Automotive Systems Asia Pacific(Thailand)Co.,Ltd.", - [3]byte{36, 169, 55}: "PURE Storage", - [3]byte{36, 171, 129}: "Apple, Inc.", - [3]byte{36, 175, 74}: "Alcatel-Lucent IPD", - [3]byte{36, 175, 84}: "NEXGEN Mediatech Inc.", - [3]byte{36, 176, 169}: "Shanghai Mobiletek Communication Ltd.", - [3]byte{36, 178, 9}: "Avaya Inc", - [3]byte{36, 178, 222}: "Espressif Inc.", - [3]byte{36, 182, 87}: "Cisco Systems, Inc", - [3]byte{36, 182, 184}: "FRIEM SPA", - [3]byte{36, 182, 253}: "Dell Inc.", - [3]byte{36, 184, 140}: "Crenus Co.,Ltd.", - [3]byte{36, 184, 210}: "Opzoon Technology Co.,Ltd.", - [3]byte{36, 186, 19}: "RISO KAGAKU CORPORATION", - [3]byte{36, 186, 48}: "Technical Consumer Products, Inc.", - [3]byte{36, 187, 193}: "Absolute Analysis", - [3]byte{36, 188, 130}: "Dali Wireless, Inc.", - [3]byte{36, 188, 248}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{36, 190, 5}: "Hewlett Packard", - [3]byte{36, 191, 116}: "Private", - [3]byte{36, 192, 179}: "RSF", - [3]byte{36, 193, 189}: "CRRC DALIAN R&D CO.,LTD.", - [3]byte{36, 195, 249}: "Securitas Direct AB", - [3]byte{36, 196, 47}: "Philips Lifeline", - [3]byte{36, 196, 74}: "zte corporation", - [3]byte{36, 198, 150}: "Samsung Electronics Co.,Ltd", - [3]byte{36, 200, 72}: "mywerk system GmbH", - [3]byte{36, 200, 110}: "Chaney Instrument Co.", - [3]byte{36, 201, 161}: "Ruckus Wireless", - [3]byte{36, 201, 222}: "Genoray", - [3]byte{36, 203, 231}: "MYK, Inc.", - [3]byte{36, 207, 33}: "Shenzhen State Micro Technology Co., Ltd", - [3]byte{36, 209, 63}: "MEXUS CO.,LTD", - [3]byte{36, 210, 204}: "SmartDrive Systems Inc.", - [3]byte{36, 213, 28}: "Zhongtian broadband technology co., LTD", - [3]byte{36, 217, 33}: "Avaya Inc", - [3]byte{36, 218, 17}: "NO NDA Inc", - [3]byte{36, 218, 155}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{36, 218, 182}: "Sistemas de Gestión Energética S.A. de C.V", - [3]byte{36, 219, 172}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{36, 219, 173}: "ShopperTrak RCT Corporation", - [3]byte{36, 219, 237}: "Samsung Electronics Co.,Ltd", - [3]byte{36, 222, 198}: "Aruba Networks", - [3]byte{36, 223, 106}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{36, 225, 36}: "Xiamen Ursaconn Technology Co. , Ltd.", - [3]byte{36, 226, 113}: "Qingdao Hisense Communications Co.,Ltd.", - [3]byte{36, 227, 20}: "Apple, Inc.", - [3]byte{36, 228, 63}: "Wenzhou Kunmei Communication Technology Co.,Ltd.", - [3]byte{36, 229, 170}: "Philips Oral Healthcare, Inc.", - [3]byte{36, 230, 186}: "JSC Zavod im. Kozitsky", - [3]byte{36, 233, 179}: "Cisco Systems, Inc", - [3]byte{36, 234, 64}: "Helmholz GmbH & Co. KG", - [3]byte{36, 235, 101}: "SAET I.S. S.r.l.", - [3]byte{36, 236, 153}: "ASKEY COMPUTER CORP", - [3]byte{36, 236, 214}: "CSG Science & Technology Co.,Ltd.Hefei", - [3]byte{36, 238, 58}: "Chengdu Yingji Electronic Hi-tech Co Ltd", - [3]byte{36, 240, 148}: "Apple, Inc.", - [3]byte{36, 240, 255}: "GHT Co., Ltd.", - [3]byte{36, 242, 127}: "Hewlett Packard Enterprise", - [3]byte{36, 242, 221}: "Radiant Zemax LLC", - [3]byte{36, 245, 126}: "HWH CO., LTD.", - [3]byte{36, 245, 162}: "Belkin International Inc.", - [3]byte{36, 245, 170}: "Samsung Electronics Co.,Ltd", - [3]byte{36, 246, 119}: "Apple, Inc.", - [3]byte{36, 253, 82}: "Liteon Technology Corporation", - [3]byte{36, 253, 91}: "SmartThings, Inc.", - [3]byte{40, 4, 224}: "FERMAX ELECTRONICA S.A.U.", - [3]byte{40, 6, 30}: "NINGBO GLOBAL USEFUL ELECTRIC CO.,LTD", - [3]byte{40, 6, 141}: "ITL, LLC", - [3]byte{40, 7, 13}: "GUANGZHOU WINSOUND INFORMATION TECHNOLOGY CO.,LTD.", - [3]byte{40, 11, 92}: "Apple, Inc.", - [3]byte{40, 12, 40}: "Unigen DataStorage Corporation", - [3]byte{40, 12, 184}: "Mikrosay Yazilim ve Elektronik A.S.", - [3]byte{40, 13, 252}: "Sony Interactive Entertainment Inc.", - [3]byte{40, 14, 139}: "Beijing Spirit Technology Development Co., Ltd.", - [3]byte{40, 16, 27}: "MagnaCom", - [3]byte{40, 16, 123}: "D-Link International", - [3]byte{40, 20, 113}: "Lantis co., LTD.", - [3]byte{40, 22, 46}: "2Wire Inc", - [3]byte{40, 22, 173}: "Intel Corporate", - [3]byte{40, 23, 206}: "Omnisense Ltd", - [3]byte{40, 24, 120}: "Microsoft Corporation", - [3]byte{40, 24, 253}: "Aditya Infotech Ltd.", - [3]byte{40, 34, 70}: "Beijing Sinoix Communication Co., LTD", - [3]byte{40, 35, 115}: "Digita", - [3]byte{40, 36, 255}: "Wistron Neweb Corporation", - [3]byte{40, 37, 54}: "SHENZHEN HOLATEK CO.,LTD", - [3]byte{40, 38, 166}: "PBR electronics GmbH", - [3]byte{40, 39, 191}: "Samsung Electronics Co.,Ltd", - [3]byte{40, 40, 93}: "Zyxel Communications Corporation", - [3]byte{40, 41, 134}: "APC by Schneider Electric", - [3]byte{40, 41, 204}: "Corsa Technology Incorporated", - [3]byte{40, 41, 217}: "GlobalBeiMing technology (Beijing)Co. Ltd", - [3]byte{40, 44, 178}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{40, 47, 194}: "Automotive Data Solutions", - [3]byte{40, 48, 172}: "Frontiir Co. Ltd.", - [3]byte{40, 49, 82}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{40, 50, 197}: "HUMAX Co., Ltd.", - [3]byte{40, 52, 16}: "Enigma Diagnostics Limited", - [3]byte{40, 52, 162}: "Cisco Systems, Inc", - [3]byte{40, 53, 69}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD", - [3]byte{40, 54, 56}: "IEEE Registration Authority", - [3]byte{40, 55, 19}: "Shenzhen 3Nod Digital Technology Co., Ltd.", - [3]byte{40, 55, 55}: "Apple, Inc.", - [3]byte{40, 56, 207}: "Gen2wave", - [3]byte{40, 57, 94}: "Samsung Electronics Co.,Ltd", - [3]byte{40, 57, 231}: "Preceno Technology Pte.Ltd.", - [3]byte{40, 59, 150}: "Cool Control LTD", - [3]byte{40, 60, 228}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{40, 63, 105}: "Sony Mobile Communications AB", - [3]byte{40, 64, 26}: "C8 MediSensors, Inc.", - [3]byte{40, 65, 33}: "OptiSense Network, LLC", - [3]byte{40, 68, 48}: "GenesisTechnical Systems (UK) Ltd", - [3]byte{40, 71, 170}: "Nokia Corporation", - [3]byte{40, 72, 70}: "GridCentric Inc.", - [3]byte{40, 76, 83}: "Intune Networks", - [3]byte{40, 77, 146}: "Luminator", - [3]byte{40, 78, 215}: "OutSmart Power Systems, Inc.", - [3]byte{40, 79, 206}: "Liaoning Wontel Science and Technology Development Co.,Ltd.", - [3]byte{40, 81, 50}: "Shenzhen Prayfly Technology Co.,Ltd", - [3]byte{40, 82, 97}: "Cisco Systems, Inc", - [3]byte{40, 82, 224}: "Layon international Electronic & Telecom Co.,Ltd", - [3]byte{40, 86, 90}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{40, 86, 193}: "Harman International", - [3]byte{40, 87, 103}: "Echostar Technologies Corp", - [3]byte{40, 87, 190}: "Hangzhou Hikvision Digital Technology Co.,Ltd.", - [3]byte{40, 90, 235}: "Apple, Inc.", - [3]byte{40, 95, 47}: "RNware Co.,Ltd.", - [3]byte{40, 95, 219}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{40, 96, 70}: "Lantech Communications Global, Inc.", - [3]byte{40, 96, 148}: "CAPELEC", - [3]byte{40, 99, 54}: "Siemens AG - Industrial Automation - EWA", - [3]byte{40, 101, 107}: "Keystone Microtech Corporation", - [3]byte{40, 106, 184}: "Apple, Inc.", - [3]byte{40, 106, 186}: "Apple, Inc.", - [3]byte{40, 108, 7}: "XIAOMI Electronics,CO.,LTD", - [3]byte{40, 109, 151}: "SAMJIN Co., Ltd.", - [3]byte{40, 110, 212}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{40, 111, 127}: "Cisco Systems, Inc", - [3]byte{40, 113, 132}: "Spire Payments", - [3]byte{40, 114, 197}: "Smartmatic Corp", - [3]byte{40, 114, 240}: "ATHENA", - [3]byte{40, 118, 16}: "IgniteNet", - [3]byte{40, 118, 205}: "Funshion Online Technologies Co.,Ltd", - [3]byte{40, 121, 148}: "Realplay Digital Technology(Shenzhen) Co.,Ltd", - [3]byte{40, 122, 238}: "ARRIS Group, Inc.", - [3]byte{40, 123, 9}: "zte corporation", - [3]byte{40, 124, 219}: "Hefei Toycloud Technology Co.,ltd", - [3]byte{40, 128, 35}: "Hewlett Packard", - [3]byte{40, 128, 162}: "Novatel Wireless Solutions, Inc.", - [3]byte{40, 131, 53}: "Samsung Electronics Co.,Ltd", - [3]byte{40, 132, 14}: "silicon valley immigration service", - [3]byte{40, 132, 250}: "SHARP Corporation", - [3]byte{40, 133, 45}: "Touch Networks", - [3]byte{40, 137, 21}: "CashGuard Sverige AB", - [3]byte{40, 138, 28}: "Juniper Networks", - [3]byte{40, 140, 184}: "zte corporation", - [3]byte{40, 145, 208}: "Stage Tec Entwicklungsgesellschaft für professionelle Audiotechnik mbH", - [3]byte{40, 146, 74}: "Hewlett Packard", - [3]byte{40, 147, 254}: "Cisco Systems, Inc", - [3]byte{40, 148, 15}: "Cisco Systems, Inc", - [3]byte{40, 148, 175}: "Samhwa Telecom", - [3]byte{40, 152, 123}: "Samsung Electronics Co.,Ltd", - [3]byte{40, 153, 58}: "Arista Networks", - [3]byte{40, 154, 75}: "SteelSeries ApS", - [3]byte{40, 154, 250}: "TCT mobile ltd", - [3]byte{40, 158, 223}: "Danfoss Turbocor Compressors, Inc", - [3]byte{40, 160, 43}: "Apple, Inc.", - [3]byte{40, 161, 131}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{40, 161, 134}: "enblink", - [3]byte{40, 161, 146}: "GERP Solution", - [3]byte{40, 161, 235}: "ETEK TECHNOLOGY (SHENZHEN) CO.,LTD", - [3]byte{40, 162, 65}: "exlar corp", - [3]byte{40, 162, 75}: "Juniper Networks", - [3]byte{40, 165, 116}: "Miller Electric Mfg. Co.", - [3]byte{40, 165, 238}: "Shenzhen SDGI CATV Co., Ltd", - [3]byte{40, 166, 172}: "seca gmbh & co. kg", - [3]byte{40, 166, 219}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{40, 172, 103}: "Mach Power, Rappresentanze Internazionali s.r.l.", - [3]byte{40, 173, 62}: "Shenzhen TONG BO WEI Technology CO.,LTD", - [3]byte{40, 175, 10}: "Sirius XM Radio Inc", - [3]byte{40, 176, 204}: "Xenya d.o.o.", - [3]byte{40, 178, 189}: "Intel Corporate", - [3]byte{40, 179, 171}: "Genmark Automation", - [3]byte{40, 180, 72}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{40, 185, 217}: "Radisys Corporation", - [3]byte{40, 186, 24}: "NextNav, LLC", - [3]byte{40, 186, 181}: "Samsung Electronics Co.,Ltd", - [3]byte{40, 187, 89}: "RNET Technologies, Inc.", - [3]byte{40, 188, 24}: "SourcingOverseas Co. Ltd", - [3]byte{40, 188, 86}: "EMAC, Inc.", - [3]byte{40, 190, 3}: "TCT mobile ltd", - [3]byte{40, 190, 155}: "Technicolor CH USA Inc.", - [3]byte{40, 191, 137}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{40, 192, 218}: "Juniper Networks", - [3]byte{40, 193, 60}: "Hon Hai Precision Ind. Co., Ltd.", - [3]byte{40, 194, 221}: "AzureWave Technology Inc.", - [3]byte{40, 198, 63}: "Intel Corporate", - [3]byte{40, 198, 113}: "Yota Devices OY", - [3]byte{40, 198, 142}: "NETGEAR", - [3]byte{40, 199, 24}: "Altierre", - [3]byte{40, 199, 206}: "Cisco Systems, Inc", - [3]byte{40, 200, 37}: "DellKing Industrial Co., Ltd", - [3]byte{40, 200, 122}: "ARRIS Group, Inc.", - [3]byte{40, 201, 20}: "Taimag Corporation", - [3]byte{40, 202, 9}: "ThyssenKrupp Elevators (Shanghai) Co.,Ltd", - [3]byte{40, 203, 235}: "One", - [3]byte{40, 204, 1}: "Samsung Electronics Co.,Ltd", - [3]byte{40, 204, 255}: "Corporacion Empresarial Altra SL", - [3]byte{40, 205, 28}: "Espotel Oy", - [3]byte{40, 205, 76}: "Individual Computers GmbH", - [3]byte{40, 205, 156}: "Shenzhen Dynamax Software Development Co.,Ltd.", - [3]byte{40, 207, 8}: "ESSYS", - [3]byte{40, 207, 218}: "Apple, Inc.", - [3]byte{40, 207, 233}: "Apple, Inc.", - [3]byte{40, 209, 175}: "Nokia Corporation", - [3]byte{40, 210, 68}: "LCFC(HeFei) Electronics Technology Co., Ltd.", - [3]byte{40, 212, 54}: "Jiangsu dewosi electric co., LTD", - [3]byte{40, 213, 118}: "Premier Wireless, Inc.", - [3]byte{40, 217, 62}: "Telecor Inc.", - [3]byte{40, 217, 138}: "Hangzhou Konke Technology Co.,Ltd.", - [3]byte{40, 217, 151}: "Yuduan Mobile Co., Ltd.", - [3]byte{40, 219, 129}: "Shanghai Guao Electronic Technology Co., Ltd", - [3]byte{40, 222, 246}: "bioMerieux Inc.", - [3]byte{40, 224, 44}: "Apple, Inc.", - [3]byte{40, 225, 76}: "Apple, Inc.", - [3]byte{40, 226, 151}: "Shanghai InfoTM Microelectronics Co.,Ltd.", - [3]byte{40, 227, 31}: "Xiaomi Communications Co Ltd", - [3]byte{40, 227, 71}: "Liteon Technology Corporation", - [3]byte{40, 228, 118}: "Pi-Coral", - [3]byte{40, 230, 8}: "Tokheim", - [3]byte{40, 230, 233}: "SIS Sat Internet Services GmbH", - [3]byte{40, 231, 148}: "Microtime Computer Inc.", - [3]byte{40, 231, 207}: "Apple, Inc.", - [3]byte{40, 237, 88}: "JAG Jakob AG", - [3]byte{40, 237, 106}: "Apple, Inc.", - [3]byte{40, 238, 44}: "Frontline Test Equipment", - [3]byte{40, 238, 82}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{40, 238, 211}: "Shenzhen Super D Technology Co., Ltd", - [3]byte{40, 239, 1}: "Private", - [3]byte{40, 240, 118}: "Apple, Inc.", - [3]byte{40, 241, 14}: "Dell Inc.", - [3]byte{40, 243, 88}: "2C - Trifonov & Co", - [3]byte{40, 243, 102}: "Shenzhen Bilian electronic CO.,LTD", - [3]byte{40, 245, 50}: "ADD-Engineering BV", - [3]byte{40, 245, 55}: "IEEE Registration Authority", - [3]byte{40, 246, 6}: "Syes srl", - [3]byte{40, 250, 160}: "vivo Mobile Communication Co., Ltd.", - [3]byte{40, 251, 211}: "Ragentek Technology Group", - [3]byte{40, 252, 81}: "The Electric Controller and Manufacturing Co., LLC", - [3]byte{40, 252, 246}: "Shenzhen Xin KingBrand enterprises Co.,Ltd", - [3]byte{40, 253, 128}: "IEEE Registration Authority", - [3]byte{40, 254, 205}: "Lemobile Information Technology (Beijing) Co., Ltd.", - [3]byte{40, 255, 62}: "zte corporation", - [3]byte{44, 0, 44}: "UNOWHY", - [3]byte{44, 0, 51}: "EControls, LLC", - [3]byte{44, 0, 247}: "XOS", - [3]byte{44, 1, 11}: "NASCENT Technology, LLC - RemKon", - [3]byte{44, 2, 159}: "3ALogics", - [3]byte{44, 6, 35}: "Win Leader Inc.", - [3]byte{44, 7, 60}: "DEVLINE LIMITED", - [3]byte{44, 8, 28}: "OVH", - [3]byte{44, 8, 140}: "HUMAX Co., Ltd.", - [3]byte{44, 9, 77}: "Raptor Engineering, LLC", - [3]byte{44, 9, 203}: "COBS AB", - [3]byte{44, 11, 233}: "Cisco Systems, Inc", - [3]byte{44, 14, 61}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{44, 16, 193}: "Nintendo Co., Ltd.", - [3]byte{44, 24, 174}: "Trend Electronics Co., Ltd.", - [3]byte{44, 25, 132}: "IDN Telecom, Inc.", - [3]byte{44, 26, 49}: "Electronics Company Limited", - [3]byte{44, 27, 200}: "Hunan Topview Network System CO.,LTD", - [3]byte{44, 29, 184}: "ARRIS Group, Inc.", - [3]byte{44, 30, 234}: "AERODEV", - [3]byte{44, 31, 35}: "Apple, Inc.", - [3]byte{44, 32, 11}: "Apple, Inc.", - [3]byte{44, 33, 49}: "Juniper Networks", - [3]byte{44, 33, 114}: "Juniper Networks", - [3]byte{44, 33, 215}: "IMAX Corporation", - [3]byte{44, 34, 139}: "CTR SRL", - [3]byte{44, 35, 58}: "Hewlett Packard", - [3]byte{44, 36, 95}: "Babolat VS", - [3]byte{44, 38, 23}: "Oculus VR, LLC", - [3]byte{44, 38, 95}: "IEEE Registration Authority", - [3]byte{44, 38, 197}: "zte corporation", - [3]byte{44, 39, 158}: "IEEE Registration Authority", - [3]byte{44, 39, 215}: "Hewlett Packard", - [3]byte{44, 40, 45}: "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.", - [3]byte{44, 41, 151}: "Microsoft Corporation", - [3]byte{44, 45, 72}: "bct electronic GesmbH", - [3]byte{44, 48, 51}: "NETGEAR", - [3]byte{44, 48, 104}: "Pantech Co.,Ltd", - [3]byte{44, 49, 36}: "Cisco Systems, Inc", - [3]byte{44, 51, 17}: "Cisco Systems, Inc", - [3]byte{44, 51, 97}: "Apple, Inc.", - [3]byte{44, 51, 122}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{44, 52, 39}: "ERCO & GENER", - [3]byte{44, 53, 87}: "ELLIY Power CO..Ltd", - [3]byte{44, 54, 160}: "Capisco Limited", - [3]byte{44, 54, 248}: "Cisco Systems, Inc", - [3]byte{44, 55, 49}: "SHENZHEN YIFANG DIGITAL TECHNOLOGY CO.,LTD.", - [3]byte{44, 55, 150}: "CYBO CO.,LTD.", - [3]byte{44, 55, 197}: "Qingdao Haier Intelligent Home Appliance Technology Co.,Ltd", - [3]byte{44, 57, 150}: "Sagemcom Broadband SAS", - [3]byte{44, 57, 193}: "Ciena Corporation", - [3]byte{44, 58, 40}: "Fagor Electrónica", - [3]byte{44, 58, 232}: "Espressif Inc.", - [3]byte{44, 59, 253}: "Netstor Technology Co., Ltd.", - [3]byte{44, 62, 207}: "Cisco Systems, Inc", - [3]byte{44, 63, 56}: "Cisco Systems, Inc", - [3]byte{44, 63, 62}: "Alge-Timing GmbH", - [3]byte{44, 64, 43}: "Smart iBlue Technology Limited", - [3]byte{44, 64, 83}: "Samsung Electronics Co.,Ltd", - [3]byte{44, 65, 56}: "Hewlett Packard", - [3]byte{44, 65, 161}: "Bose Corporation", - [3]byte{44, 66, 5}: "Lytx", - [3]byte{44, 67, 26}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{44, 68, 1}: "Samsung Electronics Co.,Ltd", - [3]byte{44, 68, 27}: "Spectrum Medical Limited", - [3]byte{44, 68, 253}: "Hewlett Packard", - [3]byte{44, 77, 84}: "ASUSTek COMPUTER INC.", - [3]byte{44, 77, 121}: "Weifang GoerTek Technology Co.,Ltd.", - [3]byte{44, 80, 137}: "Shenzhen Kaixuan Visual Technology Co.,Limited", - [3]byte{44, 83, 74}: "Shenzhen Winyao Electronic Limited", - [3]byte{44, 84, 45}: "Cisco Systems, Inc", - [3]byte{44, 84, 145}: "Microsoft Corporation", - [3]byte{44, 84, 207}: "LG Electronics (Mobile Communications)", - [3]byte{44, 85, 60}: "Gainspeed, Inc.", - [3]byte{44, 85, 211}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{44, 86, 220}: "ASUSTek COMPUTER INC.", - [3]byte{44, 87, 49}: "Wingtech Group (HongKong)Limited", - [3]byte{44, 89, 138}: "LG Electronics (Mobile Communications)", - [3]byte{44, 89, 229}: "Hewlett Packard", - [3]byte{44, 90, 5}: "Nokia Corporation", - [3]byte{44, 90, 15}: "Cisco Systems, Inc", - [3]byte{44, 90, 141}: "SYSTRONIK Elektronik u. Systemtechnik GmbH", - [3]byte{44, 90, 163}: "PROMATE ELECTRONIC CO.LTD", - [3]byte{44, 91, 184}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{44, 91, 225}: "Centripetal Networks, Inc", - [3]byte{44, 93, 147}: "Ruckus Wireless", - [3]byte{44, 95, 243}: "Pertronic Industries", - [3]byte{44, 96, 12}: "QUANTA COMPUTER INC.", - [3]byte{44, 98, 90}: "Finest Security Systems Co., Ltd", - [3]byte{44, 98, 137}: "Regenersis (Glenrothes) Ltd", - [3]byte{44, 99, 115}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD", - [3]byte{44, 103, 152}: "InTalTech Ltd.", - [3]byte{44, 103, 251}: "ShenZhen Zhengjili Electronics Co., LTD", - [3]byte{44, 105, 186}: "RF Controls, LLC", - [3]byte{44, 106, 111}: "IEEE Registration Authority", - [3]byte{44, 107, 125}: "Texas Instruments", - [3]byte{44, 107, 245}: "Juniper Networks", - [3]byte{44, 110, 133}: "Intel Corporate", - [3]byte{44, 111, 201}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{44, 113, 85}: "HiveMotion", - [3]byte{44, 114, 195}: "Soundmatters", - [3]byte{44, 115, 96}: "Earda Technologies co Ltd", - [3]byte{44, 117, 15}: "Shanghai Dongzhou-Lawton Communication Technology Co. Ltd.", - [3]byte{44, 118, 138}: "Hewlett Packard", - [3]byte{44, 123, 90}: "Milper Ltd", - [3]byte{44, 123, 132}: "OOO Petr Telegin", - [3]byte{44, 126, 129}: "ARRIS Group, Inc.", - [3]byte{44, 126, 207}: "Onzo Ltd", - [3]byte{44, 128, 101}: "HARTING Inc. of North America", - [3]byte{44, 129, 88}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{44, 134, 210}: "Cisco Systems, Inc", - [3]byte{44, 138, 114}: "HTC Corporation", - [3]byte{44, 139, 242}: "Hitachi Metals America Ltd", - [3]byte{44, 145, 39}: "Eintechno Corporation", - [3]byte{44, 146, 44}: "Kishu Giken Kogyou Company Ltd,.", - [3]byte{44, 148, 100}: "Cincoze Co., Ltd.", - [3]byte{44, 149, 127}: "zte corporation", - [3]byte{44, 150, 98}: "Invenit BV", - [3]byte{44, 151, 23}: "I.C.Y. B.V.", - [3]byte{44, 153, 36}: "ARRIS Group, Inc.", - [3]byte{44, 154, 164}: "Eolo SpA", - [3]byte{44, 157, 30}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{44, 158, 95}: "ARRIS Group, Inc.", - [3]byte{44, 158, 236}: "Jabil Circuit Penang", - [3]byte{44, 158, 252}: "CANON INC.", - [3]byte{44, 161, 87}: "acromate, Inc.", - [3]byte{44, 161, 125}: "ARRIS Group, Inc.", - [3]byte{44, 162, 180}: "Fortify Technologies, LLC", - [3]byte{44, 163, 14}: "POWER DRAGON DEVELOPMENT LIMITED", - [3]byte{44, 165, 57}: "Parallel Wireless, Inc", - [3]byte{44, 167, 128}: "True Technologies Inc.", - [3]byte{44, 168, 53}: "RIM", - [3]byte{44, 171, 0}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{44, 171, 37}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT", - [3]byte{44, 171, 164}: "Cisco SPVTG", - [3]byte{44, 171, 235}: "Cisco Systems, Inc", - [3]byte{44, 172, 68}: "CONEXTOP", - [3]byte{44, 173, 19}: "SHENZHEN ZHILU TECHNOLOGY CO.,LTD", - [3]byte{44, 174, 43}: "Samsung Electronics Co.,Ltd", - [3]byte{44, 176, 93}: "NETGEAR", - [3]byte{44, 176, 223}: "Soliton Technologies Pvt Ltd", - [3]byte{44, 177, 21}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{44, 178, 26}: "Phicomm (Shanghai) Co., Ltd.", - [3]byte{44, 180, 58}: "Apple, Inc.", - [3]byte{44, 182, 147}: "Radware", - [3]byte{44, 182, 157}: "RED Digital Cinema", - [3]byte{44, 186, 186}: "Samsung Electronics Co.,Ltd", - [3]byte{44, 190, 8}: "Apple, Inc.", - [3]byte{44, 190, 151}: "Ingenieurbuero Bickele und Buehler GmbH", - [3]byte{44, 194, 96}: "Oracle Corporation", - [3]byte{44, 197, 72}: "IAdea Corporation", - [3]byte{44, 197, 211}: "Ruckus Wireless", - [3]byte{44, 204, 21}: "Nokia Corporation", - [3]byte{44, 205, 39}: "Precor Inc", - [3]byte{44, 205, 67}: "Summit Technology Group", - [3]byte{44, 205, 105}: "Aqavi.com", - [3]byte{44, 207, 88}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{44, 208, 45}: "Cisco Systems, Inc", - [3]byte{44, 208, 90}: "Liteon Technology Corporation", - [3]byte{44, 209, 65}: "IEEE Registration Authority", - [3]byte{44, 209, 218}: "Sanjole, Inc.", - [3]byte{44, 210, 231}: "Nokia Corporation", - [3]byte{44, 212, 68}: "FUJITSU LIMITED", - [3]byte{44, 220, 173}: "Wistron Neweb Corporation", - [3]byte{44, 221, 12}: "Discovergy GmbH", - [3]byte{44, 221, 149}: "Taicang T&W Electronics", - [3]byte{44, 221, 163}: "Point Grey Research Inc.", - [3]byte{44, 226, 168}: "DeviceDesign", - [3]byte{44, 228, 18}: "Sagemcom Broadband SAS", - [3]byte{44, 230, 204}: "Ruckus Wireless", - [3]byte{44, 232, 113}: "Alert Metalguard ApS", - [3]byte{44, 237, 235}: "Alpheus Digital Company Limited", - [3]byte{44, 238, 38}: "Petroleum Geo-Services", - [3]byte{44, 240, 162}: "Apple, Inc.", - [3]byte{44, 240, 238}: "Apple, Inc.", - [3]byte{44, 242, 3}: "EMKO ELEKTRONIK SAN VE TIC AS", - [3]byte{44, 244, 197}: "Avaya Inc", - [3]byte{44, 247, 241}: "Seeed Technology Inc.", - [3]byte{44, 250, 162}: "Alcatel-Lucent Enterprise", - [3]byte{44, 252, 228}: "CTEK Sweden AB", - [3]byte{44, 253, 55}: "Blue Calypso, Inc.", - [3]byte{44, 253, 161}: "ASUSTek COMPUTER INC.", - [3]byte{44, 253, 171}: "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.", - [3]byte{44, 255, 101}: "Oki Electric Industry Co., Ltd.", - [3]byte{48, 5, 63}: "JTI Co.,Ltd.", - [3]byte{48, 5, 92}: "Brother industries, LTD.", - [3]byte{48, 7, 77}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{48, 11, 156}: "Delta Mobile Systems, Inc.", - [3]byte{48, 12, 35}: "zte corporation", - [3]byte{48, 13, 42}: "Zhejiang Wellcom Technology Co.,Ltd.", - [3]byte{48, 13, 67}: "Microsoft Mobile Oy", - [3]byte{48, 14, 213}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{48, 14, 227}: "Aquantia Corporation", - [3]byte{48, 16, 179}: "Liteon Technology Corporation", - [3]byte{48, 16, 228}: "Apple, Inc.", - [3]byte{48, 20, 45}: "Piciorgros GmbH", - [3]byte{48, 20, 74}: "Wistron Neweb Corporation", - [3]byte{48, 21, 24}: "Ubiquitous Communication Co. ltd.", - [3]byte{48, 22, 141}: "ProLon", - [3]byte{48, 23, 200}: "Sony Mobile Communications AB", - [3]byte{48, 24, 207}: "DEOS control systems GmbH", - [3]byte{48, 25, 102}: "Samsung Electronics Co.,Ltd", - [3]byte{48, 26, 40}: "Mako Networks Ltd", - [3]byte{48, 33, 91}: "Shenzhen Ostar Display Electronic Co.,Ltd", - [3]byte{48, 41, 190}: "Shanghai MRDcom Co.,Ltd", - [3]byte{48, 45, 232}: "JDA, LLC (JDA Systems)", - [3]byte{48, 50, 148}: "W-IE-NE-R Plein & Baus GmbH", - [3]byte{48, 50, 212}: "Hanilstm Co., Ltd.", - [3]byte{48, 51, 53}: "Boosty", - [3]byte{48, 52, 210}: "Availink, Inc.", - [3]byte{48, 53, 173}: "Apple, Inc.", - [3]byte{48, 55, 166}: "Cisco Systems, Inc", - [3]byte{48, 56, 85}: "Nokia Corporation", - [3]byte{48, 57, 38}: "Sony Mobile Communications AB", - [3]byte{48, 57, 85}: "Shenzhen Jinhengjia Electronic Co., Ltd.", - [3]byte{48, 57, 242}: "ADB Broadband Italia", - [3]byte{48, 58, 100}: "Intel Corporate", - [3]byte{48, 61, 8}: "GLINTT TES S.A.", - [3]byte{48, 62, 173}: "Sonavox Canada Inc", - [3]byte{48, 65, 116}: "ALTEC LANSING LLC", - [3]byte{48, 66, 37}: "BURG-WÄCHTER KG", - [3]byte{48, 68, 73}: "PLATH GmbH", - [3]byte{48, 68, 135}: "Hefei Radio Communication Technology Co., Ltd", - [3]byte{48, 68, 161}: "Shanghai Nanchao Information Technology", - [3]byte{48, 70, 154}: "NETGEAR", - [3]byte{48, 73, 59}: "Nanjing Z-Com Wireless Co.,Ltd", - [3]byte{48, 76, 126}: "Panasonic Electric Works Automation Controls Techno Co.,Ltd.", - [3]byte{48, 78, 195}: "Tianjin Techua Technology Co., Ltd.", - [3]byte{48, 81, 248}: "BYK-Gardner GmbH", - [3]byte{48, 82, 90}: "NST Co., LTD", - [3]byte{48, 82, 203}: "Liteon Technology Corporation", - [3]byte{48, 85, 237}: "Trex Network LLC", - [3]byte{48, 87, 172}: "IRLAB LTD.", - [3]byte{48, 88, 144}: "Frontier Silicon Ltd", - [3]byte{48, 89, 91}: "streamnow AG", - [3]byte{48, 89, 183}: "Microsoft", - [3]byte{48, 90, 58}: "ASUSTek COMPUTER INC.", - [3]byte{48, 93, 56}: "Beissbarth", - [3]byte{48, 96, 35}: "ARRIS Group, Inc.", - [3]byte{48, 97, 18}: "PAV GmbH", - [3]byte{48, 97, 24}: "Paradom Inc.", - [3]byte{48, 99, 107}: "Apple, Inc.", - [3]byte{48, 101, 236}: "Wistron (ChongQing)", - [3]byte{48, 104, 140}: "Reach Technology Inc.", - [3]byte{48, 105, 75}: "RIM", - [3]byte{48, 108, 190}: "Skymotion Technology (HK) Limited", - [3]byte{48, 110, 92}: "Validus Technologies", - [3]byte{48, 113, 178}: "Hangzhou Prevail Optoelectronic Equipment Co.,LTD.", - [3]byte{48, 115, 80}: "Inpeco SA", - [3]byte{48, 116, 150}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{48, 117, 18}: "Sony Mobile Communications AB", - [3]byte{48, 118, 111}: "LG Electronics (Mobile Communications)", - [3]byte{48, 119, 203}: "Maike Industry(Shenzhen)CO.,LTD", - [3]byte{48, 120, 92}: "Partow Tamas Novin (Parman)", - [3]byte{48, 120, 107}: "TIANJIN Golden Pentagon Electronics Co., Ltd.", - [3]byte{48, 120, 194}: "Innowireless, Co. Ltd.", - [3]byte{48, 124, 48}: "RIM", - [3]byte{48, 124, 94}: "Juniper Networks", - [3]byte{48, 124, 178}: "ANOV FRANCE", - [3]byte{48, 126, 203}: "SFR", - [3]byte{48, 132, 84}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{48, 133, 169}: "ASUSTek COMPUTER INC.", - [3]byte{48, 135, 48}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{48, 135, 217}: "Ruckus Wireless", - [3]byte{48, 137, 118}: "DALIAN LAMBA TECHNOLOGY CO.,LTD", - [3]byte{48, 137, 153}: "Guangdong East Power Co.,", - [3]byte{48, 137, 211}: "HONGKONG UCLOUDLINK NETWORK TECHNOLOGY LIMITED", - [3]byte{48, 140, 251}: "Dropcam", - [3]byte{48, 141, 153}: "Hewlett Packard", - [3]byte{48, 144, 171}: "Apple, Inc.", - [3]byte{48, 145, 143}: "Technicolor", - [3]byte{48, 146, 246}: "SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD", - [3]byte{48, 149, 227}: "SHANGHAI SIMCOM LIMITED", - [3]byte{48, 150, 251}: "Samsung Electronics Co.,Ltd", - [3]byte{48, 153, 53}: "zte corporation", - [3]byte{48, 155, 173}: "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.", - [3]byte{48, 156, 35}: "Micro-Star INTL CO., LTD.", - [3]byte{48, 159, 251}: "Ardomus Networks Corporation", - [3]byte{48, 162, 32}: "ARG Telecom", - [3]byte{48, 162, 67}: "Shenzhen Prifox Innovation Technology Co., Ltd.", - [3]byte{48, 168, 219}: "Sony Mobile Communications AB", - [3]byte{48, 169, 222}: "LG Innotek", - [3]byte{48, 170, 189}: "Shanghai Reallytek Information Technology Co.,Ltd", - [3]byte{48, 174, 123}: "Deqing Dusun Electron CO., LTD", - [3]byte{48, 174, 164}: "Espressif Inc.", - [3]byte{48, 174, 246}: "Radio Mobile Access", - [3]byte{48, 177, 100}: "Power Electronics International Inc.", - [3]byte{48, 178, 22}: "Hytec Geraetebau GmbH", - [3]byte{48, 179, 162}: "Shenzhen Heguang Measurement & Control Technology Co.,Ltd", - [3]byte{48, 180, 158}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{48, 180, 184}: "LG Electronics", - [3]byte{48, 181, 194}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{48, 181, 241}: "Aitexin Technology Co., Ltd", - [3]byte{48, 182, 45}: "Mojo Networks, Inc.", - [3]byte{48, 182, 79}: "Juniper Networks", - [3]byte{48, 192, 27}: "Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd", - [3]byte{48, 195, 217}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{48, 197, 7}: "ECI Telecom Ltd.", - [3]byte{48, 199, 80}: "MIC Technology Group", - [3]byte{48, 199, 174}: "Samsung Electronics Co.,Ltd", - [3]byte{48, 200, 42}: "WI-BIZ srl", - [3]byte{48, 203, 248}: "Samsung Electronics Co.,Ltd", - [3]byte{48, 205, 167}: "Samsung Electronics Co.,Ltd", - [3]byte{48, 209, 126}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{48, 211, 45}: "devolo AG", - [3]byte{48, 211, 87}: "Logosol, Inc.", - [3]byte{48, 211, 134}: "zte corporation", - [3]byte{48, 212, 106}: "Autosales Incorporated", - [3]byte{48, 213, 135}: "Samsung Electronics Co.,Ltd", - [3]byte{48, 214, 201}: "Samsung Electronics Co.,Ltd", - [3]byte{48, 222, 134}: "Cedac Software S.r.l.", - [3]byte{48, 224, 144}: "Linctronix Ltd,", - [3]byte{48, 225, 113}: "Hewlett Packard", - [3]byte{48, 227, 122}: "Intel Corporate", - [3]byte{48, 228, 142}: "Vodafone UK", - [3]byte{48, 228, 219}: "Cisco Systems, Inc", - [3]byte{48, 235, 31}: "Skylab M&C Technology Co.,Ltd", - [3]byte{48, 235, 37}: "INTEK DIGITAL", - [3]byte{48, 239, 209}: "Alstom Strongwish (Shenzhen) Co., Ltd.", - [3]byte{48, 243, 29}: "zte corporation", - [3]byte{48, 243, 53}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{48, 243, 58}: "+plugg srl", - [3]byte{48, 244, 47}: "ESP", - [3]byte{48, 246, 185}: "Ecocentric Energy", - [3]byte{48, 247, 13}: "Cisco Systems, Inc", - [3]byte{48, 247, 114}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{48, 247, 127}: "S Mobile Devices Limited", - [3]byte{48, 247, 197}: "Apple, Inc.", - [3]byte{48, 247, 215}: "Thread Technology Co., Ltd", - [3]byte{48, 249, 237}: "Sony Corporation", - [3]byte{48, 250, 183}: "Tunai Creative", - [3]byte{48, 251, 148}: "Shanghai Fangzhiwei Information Technology CO.,Ltd.", - [3]byte{48, 252, 104}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{48, 253, 17}: "MACROTECH (USA) INC.", - [3]byte{48, 254, 49}: "Nokia", - [3]byte{48, 255, 246}: "HangZhou KuoHeng Technology Co.,ltd", - [3]byte{52, 0, 138}: "IEEE Registration Authority", - [3]byte{52, 0, 163}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{52, 2, 134}: "Intel Corporate", - [3]byte{52, 2, 155}: "CloudBerry Technologies Private Limited", - [3]byte{52, 4, 158}: "IEEE Registration Authority", - [3]byte{52, 7, 79}: "AccelStor, Inc.", - [3]byte{52, 7, 251}: "Ericsson AB", - [3]byte{52, 8, 4}: "D-Link Corporation", - [3]byte{52, 8, 188}: "Apple, Inc.", - [3]byte{52, 10, 34}: "TOP-ACCESS ELECTRONICS CO LTD", - [3]byte{52, 10, 255}: "Qingdao Hisense Communications Co.,Ltd.", - [3]byte{52, 11, 64}: "MIOS ELETTRONICA SRL", - [3]byte{52, 12, 237}: "Moduel AB", - [3]byte{52, 18, 144}: "Treeview Co.,Ltd.", - [3]byte{52, 18, 152}: "Apple, Inc.", - [3]byte{52, 19, 168}: "Mediplan Limited", - [3]byte{52, 19, 232}: "Intel Corporate", - [3]byte{52, 20, 95}: "Samsung Electronics Co.,Ltd", - [3]byte{52, 21, 19}: "Texas Instruments", - [3]byte{52, 21, 158}: "Apple, Inc.", - [3]byte{52, 23, 235}: "Dell Inc.", - [3]byte{52, 26, 53}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{52, 26, 76}: "SHENZHEN WEIBU ELECTRONICS CO.,LTD.", - [3]byte{52, 27, 34}: "Grandbeing Technology Co., Ltd", - [3]byte{52, 30, 107}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{52, 31, 228}: "ARRIS Group, Inc.", - [3]byte{52, 33, 9}: "Jensen Scandinavia AS", - [3]byte{52, 35, 135}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{52, 35, 186}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{52, 37, 93}: "Shenzhen Loadcom Technology Co.,Ltd", - [3]byte{52, 38, 6}: "CarePredict, Inc.", - [3]byte{52, 40, 240}: "ATN International Limited", - [3]byte{52, 41, 143}: "IEEE Registration Authority", - [3]byte{52, 41, 234}: "MCD ELECTRONICS SP. Z O.O.", - [3]byte{52, 42, 241}: "Texas Instruments", - [3]byte{52, 45, 13}: "Samsung Electronics Co.,Ltd", - [3]byte{52, 47, 110}: "Anywire corporation", - [3]byte{52, 49, 17}: "Samsung Electronics Co.,Ltd", - [3]byte{52, 49, 196}: "AVM GmbH", - [3]byte{52, 50, 230}: "Panasonic Industrial Devices Europe GmbH", - [3]byte{52, 54, 59}: "Apple, Inc.", - [3]byte{52, 55, 89}: "zte corporation", - [3]byte{52, 56, 175}: "Inlab Software GmbH", - [3]byte{52, 56, 183}: "HUMAX Co., Ltd.", - [3]byte{52, 61, 152}: "JinQianMao Technology Co.,Ltd.", - [3]byte{52, 61, 196}: "BUFFALO.INC", - [3]byte{52, 64, 181}: "IBM", - [3]byte{52, 65, 93}: "Intel Corporate", - [3]byte{52, 70, 111}: "HiTEM Engineering", - [3]byte{52, 75, 61}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{52, 75, 80}: "zte corporation", - [3]byte{52, 76, 164}: "amazipoint technology Ltd.", - [3]byte{52, 76, 200}: "Echodyne Corp", - [3]byte{52, 77, 234}: "zte corporation", - [3]byte{52, 77, 247}: "LG Electronics (Mobile Communications)", - [3]byte{52, 79, 63}: "IO-Power Technology Co., Ltd.", - [3]byte{52, 79, 92}: "R&M AG", - [3]byte{52, 79, 105}: "EKINOPS SAS", - [3]byte{52, 81, 170}: "JID GLOBAL", - [3]byte{52, 81, 201}: "Apple, Inc.", - [3]byte{52, 84, 60}: "TAKAOKA TOKO CO.,LTD.", - [3]byte{52, 86, 254}: "Cisco Meraki", - [3]byte{52, 87, 96}: "MitraStar Technology Corp.", - [3]byte{52, 91, 17}: "EVI HEAT AB", - [3]byte{52, 91, 187}: "GD Midea Air-Conditioning Equipment Co.,Ltd.", - [3]byte{52, 92, 64}: "Cargt Holdings LLC", - [3]byte{52, 93, 16}: "Wytek", - [3]byte{52, 97, 120}: "The Boeing Company", - [3]byte{52, 98, 136}: "Cisco Systems, Inc", - [3]byte{52, 100, 169}: "Hewlett Packard", - [3]byte{52, 104, 74}: "Teraworks Co., Ltd.", - [3]byte{52, 104, 149}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{52, 105, 135}: "zte corporation", - [3]byte{52, 106, 194}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{52, 107, 211}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{52, 108, 15}: "Pramod Telecom Pvt. Ltd", - [3]byte{52, 110, 138}: "Ecosense", - [3]byte{52, 110, 157}: "Ericsson AB", - [3]byte{52, 111, 144}: "Cisco Systems, Inc", - [3]byte{52, 111, 146}: "White Rodgers Division", - [3]byte{52, 111, 237}: "Enovation Controls", - [3]byte{52, 117, 199}: "Avaya Inc", - [3]byte{52, 118, 197}: "I-O DATA DEVICE, INC.", - [3]byte{52, 120, 119}: "O-Net Communications (Shenzhen) Limited", - [3]byte{52, 120, 215}: "Gionee Communication Equipment Co.,Ltd.", - [3]byte{52, 122, 96}: "ARRIS Group, Inc.", - [3]byte{52, 126, 57}: "Nokia Danmark A/S", - [3]byte{52, 128, 179}: "Xiaomi Communications Co Ltd", - [3]byte{52, 129, 55}: "UNICARD SA", - [3]byte{52, 129, 196}: "AVM GmbH", - [3]byte{52, 129, 244}: "SST Taiwan Ltd.", - [3]byte{52, 130, 222}: "Kiio Inc", - [3]byte{52, 131, 2}: "iFORCOM Co., Ltd", - [3]byte{52, 132, 70}: "Ericsson AB", - [3]byte{52, 133, 132}: "Aerohive Networks Inc.", - [3]byte{52, 134, 42}: "Heinz Lackmann GmbH & Co KG", - [3]byte{52, 135, 61}: "Quectel Wireless Solution Co.,Ltd.", - [3]byte{52, 136, 93}: "Logitech Far East", - [3]byte{52, 138, 123}: "Samsung Electronics Co.,Ltd", - [3]byte{52, 138, 174}: "Sagemcom Broadband SAS", - [3]byte{52, 143, 39}: "Ruckus Wireless", - [3]byte{52, 149, 219}: "Logitec Corporation", - [3]byte{52, 150, 114}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{52, 151, 246}: "ASUSTek COMPUTER INC.", - [3]byte{52, 151, 251}: "ADVANCED RF TECHNOLOGIES INC", - [3]byte{52, 153, 111}: "VPI Engineering", - [3]byte{52, 153, 113}: "Quanta Storage Inc.", - [3]byte{52, 153, 215}: "Universal Flow Monitors, Inc.", - [3]byte{52, 154, 13}: "ZBD Displays Ltd", - [3]byte{52, 155, 91}: "Maquet GmbH", - [3]byte{52, 157, 144}: "Heinzmann GmbH & CO. KG", - [3]byte{52, 158, 52}: "Evervictory Electronic Co.Ltd", - [3]byte{52, 161, 131}: "AWare, Inc", - [3]byte{52, 162, 162}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{52, 163, 149}: "Apple, Inc.", - [3]byte{52, 163, 191}: "Terewave. Inc.", - [3]byte{52, 165, 93}: "TECHNOSOFT INTERNATIONAL SRL", - [3]byte{52, 165, 225}: "Sensorist ApS", - [3]byte{52, 166, 140}: "Shine Profit Development Limited", - [3]byte{52, 167, 9}: "Trevil srl", - [3]byte{52, 167, 186}: "Fischer International Systems Corporation", - [3]byte{52, 168, 67}: "KYOCERA Display Corporation", - [3]byte{52, 168, 78}: "Cisco Systems, Inc", - [3]byte{52, 170, 139}: "Samsung Electronics Co.,Ltd", - [3]byte{52, 170, 153}: "Nokia", - [3]byte{52, 170, 238}: "Mikrovisatos Servisas UAB", - [3]byte{52, 171, 55}: "Apple, Inc.", - [3]byte{52, 173, 228}: "Shanghai Chint Power Systems Co., Ltd.", - [3]byte{52, 175, 44}: "Nintendo Co., Ltd.", - [3]byte{52, 177, 247}: "Texas Instruments", - [3]byte{52, 179, 84}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{52, 181, 113}: "PLDS", - [3]byte{52, 183, 253}: "Guangzhou Younghead Electronic Technology Co.,Ltd", - [3]byte{52, 186, 56}: "PAL MOHAN ELECTRONICS PVT LTD", - [3]byte{52, 186, 81}: "Se-Kure Controls, Inc.", - [3]byte{52, 186, 117}: "Tembo Systems, Inc.", - [3]byte{52, 186, 154}: "Asiatelco Technologies Co.", - [3]byte{52, 187, 31}: "BlackBerry RTS", - [3]byte{52, 187, 38}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{52, 188, 166}: "Beijing Ding Qing Technology, Ltd.", - [3]byte{52, 189, 200}: "Cisco Systems, Inc", - [3]byte{52, 189, 249}: "Shanghai WDK Industrial Co.,Ltd.", - [3]byte{52, 189, 250}: "Cisco SPVTG", - [3]byte{52, 190, 0}: "Samsung Electronics Co.,Ltd", - [3]byte{52, 191, 144}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{52, 192, 89}: "Apple, Inc.", - [3]byte{52, 192, 249}: "Rockwell Automation", - [3]byte{52, 195, 172}: "Samsung Electronics Co.,Ltd", - [3]byte{52, 195, 210}: "FN-LINK TECHNOLOGY LIMITED", - [3]byte{52, 197, 208}: "Hagleitner Hygiene International GmbH", - [3]byte{52, 198, 154}: "Enecsys Ltd", - [3]byte{52, 199, 49}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{52, 200, 3}: "Nokia Corporation", - [3]byte{52, 201, 157}: "EIDOLON COMMUNICATIONS TECHNOLOGY CO. LTD.", - [3]byte{52, 201, 240}: "LM Technologies Ltd", - [3]byte{52, 204, 40}: "Nexpring Co. LTD.,", - [3]byte{52, 205, 109}: "CommSky Technologies", - [3]byte{52, 205, 190}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{52, 206, 0}: "XIAOMI Electronics,CO.,LTD", - [3]byte{52, 206, 148}: "Parsec (Pty) Ltd", - [3]byte{52, 208, 155}: "MobilMAX Technology Inc.", - [3]byte{52, 208, 184}: "IEEE Registration Authority", - [3]byte{52, 210, 112}: "Amazon Technologies Inc.", - [3]byte{52, 210, 196}: "RENA GmbH Print Systeme", - [3]byte{52, 215, 180}: "Tributary Systems, Inc.", - [3]byte{52, 217, 84}: "WiBotic Inc.", - [3]byte{52, 219, 253}: "Cisco Systems, Inc", - [3]byte{52, 222, 26}: "Intel Corporate", - [3]byte{52, 222, 52}: "zte corporation", - [3]byte{52, 223, 42}: "Fujikon Industrial Co.,Limited", - [3]byte{52, 224, 207}: "zte corporation", - [3]byte{52, 224, 215}: "DONGGUAN QISHENG ELECTRONICS INDUSTRIAL CO., LTD", - [3]byte{52, 226, 253}: "Apple, Inc.", - [3]byte{52, 227, 128}: "Genexis B.V.", - [3]byte{52, 228, 42}: "Automatic Bar Controls Inc.", - [3]byte{52, 230, 173}: "Intel Corporate", - [3]byte{52, 230, 215}: "Dell Inc.", - [3]byte{52, 231, 11}: "HAN Networks Co., Ltd", - [3]byte{52, 231, 28}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{52, 233, 17}: "vivo Mobile Communication Co., Ltd.", - [3]byte{52, 234, 52}: "HangZhou Gubei Electronics Technology Co.,Ltd", - [3]byte{52, 237, 11}: "Shanghai XZ-COM.CO.,Ltd.", - [3]byte{52, 239, 68}: "2Wire Inc", - [3]byte{52, 239, 139}: "NTT Communications Corporation", - [3]byte{52, 240, 202}: "Shenzhen Linghangyuan Digital Technology Co.,Ltd.", - [3]byte{52, 243, 154}: "Intel Corporate", - [3]byte{52, 243, 155}: "WizLAN Ltd.", - [3]byte{52, 246, 45}: "SHARP Corporation", - [3]byte{52, 246, 75}: "Intel Corporate", - [3]byte{52, 246, 210}: "Panasonic Taiwan Co.,Ltd.", - [3]byte{52, 249, 104}: "ATEK Products, LLC", - [3]byte{52, 250, 64}: "Guangzhou Robustel Technologies Co., Limited", - [3]byte{52, 250, 159}: "Ruckus Wireless", - [3]byte{52, 252, 111}: "ALCEA", - [3]byte{52, 252, 185}: "Hewlett Packard Enterprise", - [3]byte{52, 252, 239}: "LG Electronics (Mobile Communications)", - [3]byte{56, 1, 149}: "Samsung Electronics Co.,Ltd", - [3]byte{56, 1, 151}: "TSST Global,Inc", - [3]byte{56, 1, 159}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD", - [3]byte{56, 5, 70}: "Foctek Photonics, Inc.", - [3]byte{56, 5, 172}: "Piller Group GmbH", - [3]byte{56, 6, 180}: "A.D.C. GmbH", - [3]byte{56, 7, 212}: "Zeppelin Systems GmbH", - [3]byte{56, 8, 253}: "Silca Spa", - [3]byte{56, 9, 164}: "Firefly Integrations", - [3]byte{56, 10, 10}: "Sky-City Communication and Electronics Limited Company", - [3]byte{56, 10, 148}: "Samsung Electronics Co.,Ltd", - [3]byte{56, 10, 171}: "Formlabs", - [3]byte{56, 11, 64}: "Samsung Electronics Co.,Ltd", - [3]byte{56, 13, 212}: "Primax Electronics Ltd.", - [3]byte{56, 14, 77}: "Cisco Systems, Inc", - [3]byte{56, 14, 123}: "V.P.S. Thai Co., Ltd", - [3]byte{56, 15, 74}: "Apple, Inc.", - [3]byte{56, 15, 228}: "Dedicated Network Partners Oy", - [3]byte{56, 16, 213}: "AVM Audiovisuelles Marketing und Computersysteme GmbH", - [3]byte{56, 22, 209}: "Samsung Electronics Co.,Ltd", - [3]byte{56, 23, 102}: "PROMZAKAZ LTD.", - [3]byte{56, 23, 195}: "Hewlett Packard Enterprise", - [3]byte{56, 23, 225}: "Technicolor CH USA Inc.", - [3]byte{56, 25, 47}: "Nokia Corporation", - [3]byte{56, 28, 26}: "Cisco Systems, Inc", - [3]byte{56, 28, 35}: "Hilan Technology CO.,LTD", - [3]byte{56, 28, 74}: "SIMCom Wireless Solutions Co.,Ltd.", - [3]byte{56, 29, 217}: "FN-LINK TECHNOLOGY LIMITED", - [3]byte{56, 32, 86}: "Cisco Systems, Inc", - [3]byte{56, 32, 168}: "ColorTokens, Inc.", - [3]byte{56, 33, 135}: "Midea Group Co., Ltd.", - [3]byte{56, 34, 157}: "ADB Broadband Italia", - [3]byte{56, 34, 214}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{56, 37, 107}: "Microsoft Mobile Oy", - [3]byte{56, 38, 43}: "UTran Technology", - [3]byte{56, 38, 205}: "ANDTEK", - [3]byte{56, 40, 234}: "Fujian Netcom Technology Co., LTD", - [3]byte{56, 41, 90}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{56, 41, 221}: "ONvocal Inc", - [3]byte{56, 43, 120}: "ECO PLUGS ENTERPRISE CO., LTD", - [3]byte{56, 44, 74}: "ASUSTek COMPUTER INC.", - [3]byte{56, 45, 209}: "Samsung Electronics Co.,Ltd", - [3]byte{56, 45, 232}: "Samsung Electronics Co.,Ltd", - [3]byte{56, 49, 172}: "WEG", - [3]byte{56, 55, 139}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{56, 58, 33}: "IEEE Registration Authority", - [3]byte{56, 59, 200}: "2Wire Inc", - [3]byte{56, 63, 16}: "DBL Technology Ltd.", - [3]byte{56, 66, 51}: "Wildeboer Bauteile GmbH", - [3]byte{56, 66, 166}: "Ingenieurbuero Stahlkopf", - [3]byte{56, 67, 105}: "Patrol Products Consortium LLC", - [3]byte{56, 67, 125}: "Compal Broadband Networks, Inc.", - [3]byte{56, 69, 76}: "Light Labs, Inc.", - [3]byte{56, 69, 140}: "MyCloud Technology corporation", - [3]byte{56, 70, 8}: "zte corporation", - [3]byte{56, 72, 76}: "Apple, Inc.", - [3]byte{56, 75, 118}: "AIRTAME ApS", - [3]byte{56, 76, 79}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{56, 76, 144}: "ARRIS Group, Inc.", - [3]byte{56, 79, 73}: "Juniper Networks", - [3]byte{56, 79, 240}: "AzureWave Technology Inc.", - [3]byte{56, 82, 26}: "Nokia", - [3]byte{56, 86, 16}: "CANDY HOUSE, Inc.", - [3]byte{56, 88, 12}: "Panaccess Systems GmbH", - [3]byte{56, 89, 248}: "MindMade Sp. z o.o.", - [3]byte{56, 89, 249}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{56, 90, 168}: "Beijing Zhongdun Security Technology Development Co.", - [3]byte{56, 95, 102}: "Cisco SPVTG", - [3]byte{56, 95, 195}: "Yu Jeong System, Co.Ltd", - [3]byte{56, 96, 119}: "PEGATRON CORPORATION", - [3]byte{56, 99, 187}: "Hewlett Packard", - [3]byte{56, 99, 246}: "3NOD MULTIMEDIA(SHENZHEN)CO.,LTD", - [3]byte{56, 102, 69}: "OOSIC Technology CO.,Ltd", - [3]byte{56, 102, 240}: "Apple, Inc.", - [3]byte{56, 103, 147}: "Asia Optical Co., Inc.", - [3]byte{56, 107, 28}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", - [3]byte{56, 107, 187}: "ARRIS Group, Inc.", - [3]byte{56, 108, 155}: "Ivy Biomedical", - [3]byte{56, 110, 33}: "Wasion Group Ltd.", - [3]byte{56, 110, 162}: "vivo Mobile Communication Co., Ltd.", - [3]byte{56, 112, 12}: "ARRIS Group, Inc.", - [3]byte{56, 113, 222}: "Apple, Inc.", - [3]byte{56, 114, 192}: "Comtrend Corporation", - [3]byte{56, 115, 234}: "IEEE Registration Authority", - [3]byte{56, 118, 202}: "Shenzhen Smart Intelligent Technology Co.Ltd", - [3]byte{56, 118, 209}: "Euronda SpA", - [3]byte{56, 123, 71}: "AKELA, Inc.", - [3]byte{56, 131, 69}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{56, 134, 2}: "Flexoptix GmbH", - [3]byte{56, 137, 220}: "Opticon Sensors Europe B.V.", - [3]byte{56, 138, 183}: "ITC Networks", - [3]byte{56, 140, 80}: "LG Electronics", - [3]byte{56, 142, 231}: "Fanhattan LLC", - [3]byte{56, 144, 165}: "Cisco Systems, Inc", - [3]byte{56, 145, 213}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{56, 145, 251}: "Xenox Holding BV", - [3]byte{56, 148, 150}: "Samsung Electronics Co.,Ltd", - [3]byte{56, 148, 224}: "Syrotech Networks. Ltd.", - [3]byte{56, 149, 146}: "Beijing Tendyron Corporation", - [3]byte{56, 151, 214}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{56, 152, 216}: "MERITECH CO.,LTD", - [3]byte{56, 154, 246}: "Samsung Electronics Co.,Ltd", - [3]byte{56, 157, 146}: "Seiko Epson Corporation", - [3]byte{56, 159, 90}: "C-Kur TV Inc.", - [3]byte{56, 159, 131}: "OTN Systems N.V.", - [3]byte{56, 162, 140}: "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.", - [3]byte{56, 164, 237}: "Xiaomi Communications Co Ltd", - [3]byte{56, 165, 60}: "COMECER Netherlands", - [3]byte{56, 165, 182}: "SHENZHEN MEGMEET ELECTRICAL CO.,LTD", - [3]byte{56, 166, 206}: "BSkyB Ltd", - [3]byte{56, 168, 81}: "Moog, Ing", - [3]byte{56, 168, 107}: "Orga BV", - [3]byte{56, 169, 95}: "Actifio Inc", - [3]byte{56, 170, 60}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{56, 172, 61}: "Nephos Inc", - [3]byte{56, 173, 142}: "New H3C Technologies Co., Ltd", - [3]byte{56, 173, 190}: "New H3C Technologies Co., Ltd", - [3]byte{56, 175, 215}: "FUJITSU LIMITED", - [3]byte{56, 177, 45}: "Sonotronic Nagel GmbH", - [3]byte{56, 177, 219}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{56, 181, 77}: "Apple, Inc.", - [3]byte{56, 181, 189}: "E.G.O. Elektro-Ger", - [3]byte{56, 183, 37}: "Wistron Infocomm (Zhongshan) Corporation", - [3]byte{56, 183, 77}: "Fijowave Limited", - [3]byte{56, 184, 235}: "IEEE Registration Authority", - [3]byte{56, 187, 35}: "OzVision America LLC", - [3]byte{56, 187, 60}: "Avaya Inc", - [3]byte{56, 188, 1}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{56, 188, 26}: "MEIZU Technology Co., Ltd.", - [3]byte{56, 191, 47}: "Espec Corp.", - [3]byte{56, 191, 51}: "NEC CASIO Mobile Communications", - [3]byte{56, 192, 150}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{56, 199, 10}: "WiFiSong", - [3]byte{56, 199, 186}: "CS Services Co.,Ltd.", - [3]byte{56, 200, 92}: "Cisco SPVTG", - [3]byte{56, 201, 134}: "Apple, Inc.", - [3]byte{56, 201, 169}: "SMART High Reliability Solutions, Inc.", - [3]byte{56, 202, 151}: "Contour Design LLC", - [3]byte{56, 202, 218}: "Apple, Inc.", - [3]byte{56, 205, 7}: "Beijing FaceCam Technology Co., Ltd.", - [3]byte{56, 209, 53}: "EasyIO Corporation Sdn. Bhd.", - [3]byte{56, 210, 105}: "Texas Instruments", - [3]byte{56, 212, 11}: "Samsung Electronics Co.,Ltd", - [3]byte{56, 213, 71}: "ASUSTek COMPUTER INC.", - [3]byte{56, 214, 32}: "Limidea Concept Pte. Ltd.", - [3]byte{56, 215, 202}: "7HUGS LABS", - [3]byte{56, 216, 47}: "zte corporation", - [3]byte{56, 219, 187}: "Sunbow Telecom Co., Ltd.", - [3]byte{56, 222, 96}: "Mohlenhoff GmbH", - [3]byte{56, 224, 142}: "Mitsubishi Electric Corporation", - [3]byte{56, 226, 221}: "zte corporation", - [3]byte{56, 227, 197}: "Taicang T&W Electronics", - [3]byte{56, 229, 149}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT", - [3]byte{56, 231, 216}: "HTC Corporation", - [3]byte{56, 232, 223}: "b gmbh medien + datenbanken", - [3]byte{56, 233, 140}: "Reco S.p.A.", - [3]byte{56, 234, 167}: "Hewlett Packard", - [3]byte{56, 236, 17}: "Novatek Microelectronics Corp.", - [3]byte{56, 236, 228}: "Samsung Electronics Co.,Ltd", - [3]byte{56, 237, 24}: "Cisco Systems, Inc", - [3]byte{56, 238, 157}: "Anedo Ltd.", - [3]byte{56, 240, 152}: "Vapor Stone Rail Systems", - [3]byte{56, 240, 200}: "Livestream", - [3]byte{56, 241, 53}: "SensorTec-Canada", - [3]byte{56, 242, 62}: "Microsoft Mobile Oy", - [3]byte{56, 243, 63}: "TATSUNO CORPORATION", - [3]byte{56, 245, 87}: "JOLATA, INC.", - [3]byte{56, 245, 151}: "home2net GmbH", - [3]byte{56, 247, 8}: "National Resource Management, Inc.", - [3]byte{56, 247, 61}: "Amazon Technologies Inc.", - [3]byte{56, 247, 178}: "SEOJUN ELECTRIC", - [3]byte{56, 248, 137}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{56, 248, 183}: "V2COM PARTICIPACOES S.A.", - [3]byte{56, 248, 202}: "OWIN Inc.", - [3]byte{56, 250, 202}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd", - [3]byte{56, 253, 254}: "IEEE Registration Authority", - [3]byte{56, 254, 197}: "Ellips B.V.", - [3]byte{56, 255, 54}: "Ruckus Wireless", - [3]byte{60, 2, 177}: "Creation Technologies LP", - [3]byte{60, 4, 191}: "PRAVIS SYSTEMS Co.Ltd.,", - [3]byte{60, 5, 24}: "Samsung Electronics Co.,Ltd", - [3]byte{60, 5, 171}: "Product Creation Studio", - [3]byte{60, 7, 84}: "Apple, Inc.", - [3]byte{60, 7, 113}: "Sony Corporation", - [3]byte{60, 8, 30}: "Beijing Yupont Electric Power Technology Co.,Ltd", - [3]byte{60, 8, 246}: "Cisco Systems, Inc", - [3]byte{60, 9, 109}: "Powerhouse Dynamics", - [3]byte{60, 12, 72}: "Servergy, Inc.", - [3]byte{60, 12, 219}: "UNIONMAN TECHNOLOGY CO.,LTD", - [3]byte{60, 14, 35}: "Cisco Systems, Inc", - [3]byte{60, 15, 193}: "KBC Networks", - [3]byte{60, 16, 64}: "daesung network", - [3]byte{60, 16, 111}: "ALBAHITH TECHNOLOGIES", - [3]byte{60, 16, 230}: "PHAZR Inc.", - [3]byte{60, 17, 178}: "Fraunhofer FIT", - [3]byte{60, 21, 194}: "Apple, Inc.", - [3]byte{60, 21, 234}: "TESCOM CO., LTD.", - [3]byte{60, 24, 159}: "Nokia Corporation", - [3]byte{60, 24, 160}: "Luxshare Precision Industry Company Limited", - [3]byte{60, 25, 21}: "GFI Chrono Time", - [3]byte{60, 25, 125}: "Ericsson AB", - [3]byte{60, 26, 15}: "ClearSky Data", - [3]byte{60, 26, 87}: "Cardiopulmonary Corp", - [3]byte{60, 26, 121}: "Huayuan Technology CO.,LTD", - [3]byte{60, 28, 190}: "JADAK LLC", - [3]byte{60, 30, 4}: "D-Link International", - [3]byte{60, 30, 19}: "HANGZHOU SUNRISE TECHNOLOGY CO., LTD", - [3]byte{60, 37, 215}: "Nokia Corporation", - [3]byte{60, 38, 213}: "Sotera Wireless", - [3]byte{60, 39, 99}: "SLE quality engineering GmbH & Co. KG", - [3]byte{60, 42, 244}: "Brother Industries, LTD.", - [3]byte{60, 44, 148}: "杭州德澜科技有限公司(HangZhou Delan Technology Co.,Ltd)", - [3]byte{60, 44, 153}: "Edgecore Networks Corporation", - [3]byte{60, 45, 183}: "Texas Instruments", - [3]byte{60, 46, 249}: "Apple, Inc.", - [3]byte{60, 46, 255}: "Apple, Inc.", - [3]byte{60, 47, 58}: "SFORZATO Corp.", - [3]byte{60, 48, 12}: "Dewar Electronics Pty Ltd", - [3]byte{60, 49, 120}: "Qolsys Inc.", - [3]byte{60, 51, 0}: "Shenzhen Bilian electronic CO.,LTD", - [3]byte{60, 53, 86}: "Cognitec Systems GmbH", - [3]byte{60, 54, 61}: "Nokia Corporation", - [3]byte{60, 54, 228}: "ARRIS Group, Inc.", - [3]byte{60, 56, 136}: "ConnectQuest, llc", - [3]byte{60, 57, 195}: "JW Electronics Co., Ltd.", - [3]byte{60, 57, 231}: "IEEE Registration Authority", - [3]byte{60, 58, 115}: "Avaya Inc", - [3]byte{60, 63, 81}: "2CRSI", - [3]byte{60, 64, 79}: "GUANGDONG PISEN ELECTRONICS CO.,LTD", - [3]byte{60, 67, 142}: "ARRIS Group, Inc.", - [3]byte{60, 70, 216}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{60, 71, 17}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{60, 73, 55}: "ASSMANN Electronic GmbH", - [3]byte{60, 74, 146}: "Hewlett Packard", - [3]byte{60, 76, 105}: "Infinity System S.L.", - [3]byte{60, 76, 208}: "CERAGON NETWORKS", - [3]byte{60, 78, 71}: "Etronic A/S", - [3]byte{60, 82, 130}: "Hewlett Packard", - [3]byte{60, 87, 189}: "Kessler Crane Inc.", - [3]byte{60, 87, 213}: "FiveCo", - [3]byte{60, 89, 30}: "TCL King Electrical Appliances (Huizhou) Co., Ltd", - [3]byte{60, 90, 55}: "Samsung Electronics Co.,Ltd", - [3]byte{60, 90, 180}: "Google, Inc.", - [3]byte{60, 92, 195}: "Shenzhen First Blue Chip Technology Ltd", - [3]byte{60, 94, 195}: "Cisco Systems, Inc", - [3]byte{60, 95, 1}: "Synerchip Co., Ltd.", - [3]byte{60, 97, 4}: "Juniper Networks", - [3]byte{60, 98, 0}: "Samsung Electronics Co.,Ltd", - [3]byte{60, 98, 120}: "SHENZHEN JETNET TECHNOLOGY CO.,LTD.", - [3]byte{60, 103, 22}: "Lily Robotics", - [3]byte{60, 103, 44}: "Sciovid Inc.", - [3]byte{60, 103, 140}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{60, 104, 22}: "VXi Corporation", - [3]byte{60, 106, 125}: "Niigata Power Systems Co., Ltd.", - [3]byte{60, 106, 157}: "Dexatek Technology LTD.", - [3]byte{60, 110, 99}: "Mitron OY", - [3]byte{60, 111, 69}: "Fiberpro Inc.", - [3]byte{60, 111, 234}: "Panasonic India Pvt. Ltd.", - [3]byte{60, 111, 247}: "EnTek Systems, Inc.", - [3]byte{60, 112, 89}: "MakerBot Industries", - [3]byte{60, 116, 55}: "RIM", - [3]byte{60, 117, 74}: "ARRIS Group, Inc.", - [3]byte{60, 119, 230}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{60, 120, 67}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{60, 120, 115}: "Airsonics", - [3]byte{60, 122, 138}: "ARRIS Group, Inc.", - [3]byte{60, 125, 177}: "Texas Instruments", - [3]byte{60, 127, 111}: "Telechips, Inc.", - [3]byte{60, 128, 170}: "Ransnet Singapore Pte Ltd", - [3]byte{60, 129, 216}: "Sagemcom Broadband SAS", - [3]byte{60, 131, 30}: "CKD Corporation", - [3]byte{60, 131, 117}: "Microsoft Corporation", - [3]byte{60, 131, 181}: "Advance Vision Electronics Co. Ltd.", - [3]byte{60, 134, 168}: "Sangshin elecom .co,, LTD", - [3]byte{60, 137, 112}: "Neosfar", - [3]byte{60, 137, 166}: "KAPELSE", - [3]byte{60, 138, 176}: "Juniper Networks", - [3]byte{60, 138, 229}: "Tensun Information Technology(Hangzhou) Co.,LTD", - [3]byte{60, 139, 205}: "Alcatel-Lucent Shanghai Bell Co., Ltd", - [3]byte{60, 139, 254}: "Samsung Electronics Co.,Ltd", - [3]byte{60, 140, 64}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{60, 140, 248}: "TRENDnet, Inc.", - [3]byte{60, 144, 102}: "SmartRG, Inc.", - [3]byte{60, 145, 43}: "Vexata Inc", - [3]byte{60, 145, 87}: "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd", - [3]byte{60, 145, 116}: "ALONG COMMUNICATION TECHNOLOGY", - [3]byte{60, 146, 220}: "Octopod Technology Co. Ltd.", - [3]byte{60, 148, 213}: "Juniper Networks", - [3]byte{60, 149, 9}: "Liteon Technology Corporation", - [3]byte{60, 151, 14}: "Wistron InfoComm(Kunshan)Co.,Ltd.", - [3]byte{60, 151, 126}: "IPS Technology Limited", - [3]byte{60, 152, 191}: "Quest Controls, Inc.", - [3]byte{60, 153, 247}: "Lansentechnology AB", - [3]byte{60, 154, 119}: "Technicolor CH USA Inc.", - [3]byte{60, 159, 129}: "Shenzhen CATIC Bit Communications Technology Co.,Ltd", - [3]byte{60, 160, 103}: "Liteon Technology Corporation", - [3]byte{60, 161, 13}: "Samsung Electronics Co.,Ltd", - [3]byte{60, 163, 8}: "Texas Instruments", - [3]byte{60, 163, 21}: "Bless Information & Communications Co., Ltd", - [3]byte{60, 163, 26}: "Oilfind International LLC", - [3]byte{60, 163, 72}: "vivo Mobile Communication Co., Ltd.", - [3]byte{60, 165, 129}: "vivo Mobile Communication Co., Ltd.", - [3]byte{60, 166, 22}: "vivo Mobile Communication Co., Ltd.", - [3]byte{60, 167, 43}: "MRV Communications (Networks) LTD", - [3]byte{60, 168, 42}: "Hewlett Packard", - [3]byte{60, 169, 244}: "Intel Corporate", - [3]byte{60, 170, 63}: "iKey, Ltd.", - [3]byte{60, 171, 142}: "Apple, Inc.", - [3]byte{60, 174, 105}: "ESA Elektroschaltanlagen Grimma GmbH", - [3]byte{60, 177, 91}: "Avaya Inc", - [3]byte{60, 177, 127}: "Wattwatchers Pty Ld", - [3]byte{60, 182, 183}: "vivo Mobile Communication Co., Ltd.", - [3]byte{60, 183, 43}: "PLUMgrid Inc", - [3]byte{60, 183, 146}: "Hitachi Maxell, Ltd., Optronics Division", - [3]byte{60, 184, 122}: "Private", - [3]byte{60, 185, 166}: "Belden Deutschland GmbH", - [3]byte{60, 187, 115}: "Shenzhen Xinguodu Technology Co., Ltd.", - [3]byte{60, 187, 253}: "Samsung Electronics Co.,Ltd", - [3]byte{60, 189, 62}: "Beijing Xiaomi Electronics Co., Ltd.", - [3]byte{60, 189, 216}: "LG ELECTRONICS INC", - [3]byte{60, 190, 225}: "NIKON CORPORATION", - [3]byte{60, 192, 121}: "Shenzhen One-Nine Intelligent Electronic Science and Technology Co., Ltd", - [3]byte{60, 192, 198}: "d&b audiotechnik GmbH", - [3]byte{60, 193, 44}: "AES Corporation", - [3]byte{60, 193, 246}: "Melange Systems Pvt. Ltd.", - [3]byte{60, 194, 67}: "Nokia Corporation", - [3]byte{60, 194, 225}: "XINHUA CONTROL ENGINEERING CO.,LTD", - [3]byte{60, 201, 158}: "Huiyang Technology Co., Ltd", - [3]byte{60, 202, 135}: "Iders Incorporated", - [3]byte{60, 203, 124}: "TCT mobile ltd", - [3]byte{60, 205, 90}: "Technische Alternative GmbH", - [3]byte{60, 205, 147}: "LG ELECTRONICS INC", - [3]byte{60, 206, 21}: "Mercedes-Benz USA, LLC", - [3]byte{60, 206, 115}: "Cisco Systems, Inc", - [3]byte{60, 207, 91}: "ICOMM HK LIMITED", - [3]byte{60, 208, 248}: "Apple, Inc.", - [3]byte{60, 209, 110}: "Telepower Communication Co., Ltd", - [3]byte{60, 212, 214}: "WirelessWERX, Inc", - [3]byte{60, 215, 218}: "SK Mtek microelectronics(shenzhen)limited", - [3]byte{60, 217, 43}: "Hewlett Packard", - [3]byte{60, 217, 206}: "Eclipse WiFi", - [3]byte{60, 218, 42}: "zte corporation", - [3]byte{60, 221, 137}: "SOMO HOLDINGS & TECH. CO.,LTD.", - [3]byte{60, 223, 30}: "Cisco Systems, Inc", - [3]byte{60, 223, 169}: "ARRIS Group, Inc.", - [3]byte{60, 223, 189}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{60, 224, 114}: "Apple, Inc.", - [3]byte{60, 229, 166}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{60, 229, 180}: "KIDASEN INDUSTRIA E COMERCIO DE ANTENAS LTDA", - [3]byte{60, 230, 36}: "LG Display", - [3]byte{60, 234, 79}: "2Wire Inc", - [3]byte{60, 234, 251}: "NSE AG", - [3]byte{60, 239, 140}: "Zhejiang Dahua Technology Co., Ltd.", - [3]byte{60, 243, 146}: "Virtualtek. Co. Ltd", - [3]byte{60, 245, 44}: "DSPECIALISTS GmbH", - [3]byte{60, 245, 145}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{60, 247, 42}: "Nokia Corporation", - [3]byte{60, 247, 72}: "Shenzhen Linsn Technology Development Co.,Ltd", - [3]byte{60, 247, 164}: "Samsung Electronics Co.,Ltd", - [3]byte{60, 248, 8}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{60, 248, 98}: "Intel Corporate", - [3]byte{60, 250, 67}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{60, 251, 150}: "Emcraft Systems LLC", - [3]byte{60, 253, 254}: "Intel Corporate", - [3]byte{64, 0, 224}: "Derek(Shaoguan)Limited", - [3]byte{64, 1, 7}: "Arista Corp", - [3]byte{64, 1, 122}: "Cisco Systems, Inc", - [3]byte{64, 1, 198}: "3COM EUROPE LTD", - [3]byte{64, 4, 12}: "A&T", - [3]byte{64, 7, 192}: "Railtec Systems GmbH", - [3]byte{64, 13, 16}: "ARRIS Group, Inc.", - [3]byte{64, 14, 103}: "Tremol Ltd.", - [3]byte{64, 14, 133}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{64, 17, 220}: "Sonance", - [3]byte{64, 18, 228}: "Compass-EOS", - [3]byte{64, 19, 217}: "Global ES", - [3]byte{64, 21, 151}: "Protect America, Inc.", - [3]byte{64, 22, 59}: "Samsung Electronics Co.,Ltd", - [3]byte{64, 22, 126}: "ASUSTek COMPUTER INC.", - [3]byte{64, 22, 159}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{64, 22, 250}: "EKM Metering", - [3]byte{64, 24, 177}: "Aerohive Networks Inc.", - [3]byte{64, 24, 215}: "Smartronix, Inc.", - [3]byte{64, 27, 95}: "Weifang GoerTek Technology Co.,Ltd.", - [3]byte{64, 29, 89}: "Biometric Associates, LP", - [3]byte{64, 34, 237}: "Digital Projection Ltd", - [3]byte{64, 37, 194}: "Intel Corporate", - [3]byte{64, 39, 11}: "Mobileeco Co., Ltd", - [3]byte{64, 40, 20}: "RFI Engineering", - [3]byte{64, 43, 161}: "Sony Mobile Communications AB", - [3]byte{64, 44, 244}: "Universal Global Scientific Industrial Co., Ltd.", - [3]byte{64, 46, 40}: "MiXTelematics", - [3]byte{64, 48, 4}: "Apple, Inc.", - [3]byte{64, 48, 103}: "Conlog (Pty) Ltd", - [3]byte{64, 51, 26}: "Apple, Inc.", - [3]byte{64, 51, 108}: "Godrej & Boyce Mfg. co. ltd", - [3]byte{64, 55, 173}: "Macro Image Technology, Inc.", - [3]byte{64, 60, 252}: "Apple, Inc.", - [3]byte{64, 61, 236}: "HUMAX Co., Ltd.", - [3]byte{64, 63, 140}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{64, 64, 34}: "ZIV", - [3]byte{64, 64, 107}: "Icomera", - [3]byte{64, 64, 167}: "Sony Mobile Communications AB", - [3]byte{64, 66, 41}: "Layer3TV, Inc", - [3]byte{64, 69, 218}: "Spreadtrum Communications (Shanghai) Co., Ltd.", - [3]byte{64, 71, 106}: "AG Acquisition Corp. d.b.a. ASTRO Gaming", - [3]byte{64, 72, 253}: "IEEE Registration Authority", - [3]byte{64, 73, 15}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{64, 73, 138}: "Synapticon GmbH", - [3]byte{64, 74, 3}: "Zyxel Communications Corporation", - [3]byte{64, 74, 24}: "Addrek Smart Solutions", - [3]byte{64, 74, 212}: "Widex A/S", - [3]byte{64, 77, 127}: "Apple, Inc.", - [3]byte{64, 77, 142}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{64, 78, 54}: "HTC Corporation", - [3]byte{64, 78, 235}: "Higher Way Electronic Co., Ltd.", - [3]byte{64, 80, 224}: "Milton Security Group LLC", - [3]byte{64, 81, 108}: "Grandex International Corporation", - [3]byte{64, 82, 13}: "Pico Technology", - [3]byte{64, 84, 228}: "Wearsafe Labs Inc", - [3]byte{64, 85, 57}: "Cisco Systems, Inc", - [3]byte{64, 86, 12}: "In Home Displays Ltd", - [3]byte{64, 86, 45}: "Smartron India Pvt ltd", - [3]byte{64, 90, 155}: "ANOVO", - [3]byte{64, 92, 253}: "Dell Inc.", - [3]byte{64, 93, 130}: "NETGEAR", - [3]byte{64, 94, 225}: "Shenzhen H&T Intelligent Control Co.,Ltd.", - [3]byte{64, 95, 190}: "RIM", - [3]byte{64, 95, 194}: "Texas Instruments", - [3]byte{64, 96, 90}: "Hawkeye Tech Co. Ltd", - [3]byte{64, 97, 134}: "MICRO-STAR INT'L CO.,LTD", - [3]byte{64, 97, 142}: "Stella-Green Co", - [3]byte{64, 98, 182}: "Tele system communication", - [3]byte{64, 101, 163}: "Sagemcom Broadband SAS", - [3]byte{64, 102, 122}: "mediola - connected living AG", - [3]byte{64, 104, 38}: "Thales UK Limited", - [3]byte{64, 106, 142}: "Hangzhou Puwell OE Tech Ltd.", - [3]byte{64, 106, 171}: "RIM", - [3]byte{64, 108, 143}: "Apple, Inc.", - [3]byte{64, 111, 42}: "BlackBerry RTS", - [3]byte{64, 112, 9}: "ARRIS Group, Inc.", - [3]byte{64, 112, 74}: "Power Idea Technology Limited", - [3]byte{64, 112, 116}: "Life Technology (China) Co., Ltd", - [3]byte{64, 113, 131}: "Juniper Networks", - [3]byte{64, 116, 150}: "aFUN TECHNOLOGY INC.", - [3]byte{64, 120, 106}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{64, 120, 117}: "IMBEL - Industria de Material Belico do Brasil", - [3]byte{64, 122, 128}: "Nokia Corporation", - [3]byte{64, 123, 27}: "Mettle Networks Inc.", - [3]byte{64, 124, 125}: "Nokia", - [3]byte{64, 125, 15}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{64, 127, 224}: "Glory Star Technics (ShenZhen) Limited", - [3]byte{64, 130, 86}: "Continental Automotive GmbH", - [3]byte{64, 131, 222}: "Zebra Technologies Inc", - [3]byte{64, 132, 147}: "Clavister AB", - [3]byte{64, 134, 46}: "JDM MOBILE INTERNET SOLUTION CO., LTD.", - [3]byte{64, 136, 5}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{64, 136, 224}: "Beijing Ereneben Information Technology Limited Shenzhen Branch", - [3]byte{64, 138, 154}: "TITENG CO., Ltd.", - [3]byte{64, 139, 7}: "Actiontec Electronics, Inc", - [3]byte{64, 139, 246}: "Shenzhen TCL New Technology Co., Ltd", - [3]byte{64, 141, 92}: "GIGA-BYTE TECHNOLOGY CO.,LTD.", - [3]byte{64, 149, 88}: "Aisino Corporation", - [3]byte{64, 149, 189}: "NTmore.Co.,Ltd", - [3]byte{64, 151, 209}: "BK Electronics cc", - [3]byte{64, 152, 76}: "Casacom Solutions AG", - [3]byte{64, 152, 78}: "Texas Instruments", - [3]byte{64, 152, 123}: "Aisino Corporation", - [3]byte{64, 153, 34}: "AzureWave Technology Inc.", - [3]byte{64, 155, 13}: "Shenzhen Yourf Kwan Industrial Co., Ltd", - [3]byte{64, 155, 205}: "D-Link International", - [3]byte{64, 156, 40}: "Apple, Inc.", - [3]byte{64, 159, 56}: "AzureWave Technology Inc.", - [3]byte{64, 159, 135}: "Jide Technology (Hong Kong) Limited", - [3]byte{64, 159, 199}: "BAEKCHUN I&C Co., Ltd.", - [3]byte{64, 163, 204}: "Intel Corporate", - [3]byte{64, 165, 239}: "Shenzhen Four Seas Global Link Network Technology Co., Ltd.", - [3]byte{64, 166, 119}: "Juniper Networks", - [3]byte{64, 166, 164}: "PassivSystems Ltd", - [3]byte{64, 166, 217}: "Apple, Inc.", - [3]byte{64, 166, 232}: "Cisco Systems, Inc", - [3]byte{64, 168, 240}: "Hewlett Packard", - [3]byte{64, 169, 63}: "Private", - [3]byte{64, 172, 141}: "Data Management, Inc.", - [3]byte{64, 176, 52}: "Hewlett Packard", - [3]byte{64, 176, 250}: "LG Electronics (Mobile Communications)", - [3]byte{64, 178, 200}: "Nortel Networks", - [3]byte{64, 179, 149}: "Apple, Inc.", - [3]byte{64, 179, 205}: "Chiyoda Electronics Co.,Ltd.", - [3]byte{64, 179, 252}: "Logital Co. Limited", - [3]byte{64, 180, 205}: "Amazon Technologies Inc.", - [3]byte{64, 180, 240}: "Juniper Networks", - [3]byte{64, 182, 136}: "LEGIC Identsystems AG", - [3]byte{64, 182, 177}: "SUNGSAM CO,.Ltd", - [3]byte{64, 183, 243}: "ARRIS Group, Inc.", - [3]byte{64, 184, 55}: "Sony Mobile Communications AB", - [3]byte{64, 184, 154}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{64, 185, 60}: "Hewlett Packard Enterprise", - [3]byte{64, 186, 97}: "ARIMA Communications Corp.", - [3]byte{64, 188, 115}: "Cronoplast S.L.", - [3]byte{64, 188, 139}: "itelio GmbH", - [3]byte{64, 189, 158}: "Physio-Control, Inc", - [3]byte{64, 191, 23}: "Digistar Telecom. SA", - [3]byte{64, 194, 69}: "Shenzhen Hexicom Technology Co., Ltd.", - [3]byte{64, 196, 214}: "ChongQing Camyu Technology Development Co.,Ltd.", - [3]byte{64, 198, 42}: "Shanghai Jing Ren Electronic Technology Co., Ltd.", - [3]byte{64, 199, 41}: "Sagemcom Broadband SAS", - [3]byte{64, 199, 201}: "Naviit Inc.", - [3]byte{64, 200, 203}: "AM Telecom co., Ltd.", - [3]byte{64, 203, 168}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{64, 205, 58}: "Z3 Technology", - [3]byte{64, 206, 36}: "Cisco Systems, Inc", - [3]byte{64, 210, 138}: "Nintendo Co., Ltd.", - [3]byte{64, 211, 45}: "Apple, Inc.", - [3]byte{64, 211, 87}: "Ison Technology Co., Ltd.", - [3]byte{64, 211, 174}: "Samsung Electronics Co.,Ltd", - [3]byte{64, 212, 14}: "Biodata Ltd", - [3]byte{64, 213, 89}: "MICRO S.E.R.I.", - [3]byte{64, 214, 60}: "Equitech Industrial(DongGuan)Co.,Ltd", - [3]byte{64, 216, 85}: "IEEE Registration Authority", - [3]byte{64, 226, 48}: "AzureWave Technology Inc.", - [3]byte{64, 227, 214}: "Aruba Networks", - [3]byte{64, 231, 48}: "DEY Storage Systems, Inc.", - [3]byte{64, 231, 147}: "Shenzhen Siviton Technology Co.,Ltd", - [3]byte{64, 234, 206}: "FOUNDER BROADBAND NETWORK SERVICE CO.,LTD", - [3]byte{64, 236, 248}: "Siemens AG", - [3]byte{64, 237, 152}: "IEEE Registration Authority", - [3]byte{64, 239, 76}: "Fihonest communication co.,Ltd", - [3]byte{64, 240, 47}: "Liteon Technology Corporation", - [3]byte{64, 241, 76}: "ISE Europe SPRL", - [3]byte{64, 242, 1}: "Sagemcom Broadband SAS", - [3]byte{64, 242, 233}: "IBM", - [3]byte{64, 243, 8}: "Murata Manufacturing Co., Ltd.", - [3]byte{64, 243, 133}: "IEEE Registration Authority", - [3]byte{64, 244, 7}: "Nintendo Co., Ltd.", - [3]byte{64, 244, 19}: "Rubezh", - [3]byte{64, 244, 32}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD", - [3]byte{64, 244, 236}: "Cisco Systems, Inc", - [3]byte{64, 245, 46}: "Leica Microsystems (Schweiz) AG", - [3]byte{64, 250, 127}: "Preh Car Connect GmbH", - [3]byte{64, 252, 137}: "ARRIS Group, Inc.", - [3]byte{64, 254, 13}: "MAXIO", - [3]byte{68, 0, 16}: "Apple, Inc.", - [3]byte{68, 3, 44}: "Intel Corporate", - [3]byte{68, 3, 167}: "Cisco Systems, Inc", - [3]byte{68, 4, 68}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{68, 9, 184}: "Salcomp (Shenzhen) CO., LTD.", - [3]byte{68, 12, 253}: "NetMan Co., Ltd.", - [3]byte{68, 17, 2}: "EDMI Europe Ltd", - [3]byte{68, 17, 194}: "Telegartner Karl Gartner GmbH", - [3]byte{68, 19, 25}: "WKK TECHNOLOGY LTD.", - [3]byte{68, 20, 65}: "AudioControl Inc.", - [3]byte{68, 24, 79}: "Fitview", - [3]byte{68, 25, 182}: "Hangzhou Hikvision Digital Technology Co.,Ltd.", - [3]byte{68, 28, 168}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{68, 30, 145}: "ARVIDA Intelligent Electronics Technology Co.,Ltd.", - [3]byte{68, 30, 161}: "Hewlett Packard", - [3]byte{68, 35, 170}: "Farmage Co., Ltd.", - [3]byte{68, 37, 187}: "Bamboo Entertainment Corporation", - [3]byte{68, 41, 56}: "NietZsche enterprise Co.Ltd.", - [3]byte{68, 42, 96}: "Apple, Inc.", - [3]byte{68, 42, 255}: "E3 Technology, Inc.", - [3]byte{68, 43, 3}: "Cisco Systems, Inc", - [3]byte{68, 44, 5}: "AMPAK Technology, Inc.", - [3]byte{68, 49, 146}: "Hewlett Packard", - [3]byte{68, 50, 42}: "Avaya Inc", - [3]byte{68, 50, 200}: "Technicolor CH USA Inc.", - [3]byte{68, 51, 76}: "Shenzhen Bilian electronic CO.,LTD", - [3]byte{68, 52, 143}: "MXT INDUSTRIAL LTDA", - [3]byte{68, 53, 111}: "Neterix", - [3]byte{68, 55, 8}: "MRV Comunications", - [3]byte{68, 55, 25}: "2 Save Energy Ltd", - [3]byte{68, 55, 111}: "Young Electric Sign Co", - [3]byte{68, 55, 230}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{68, 56, 57}: "Cumulus Networks, inc", - [3]byte{68, 57, 196}: "Universal Global Scientific Industrial Co., Ltd.", - [3]byte{68, 60, 156}: "Pintsch Tiefenbach GmbH", - [3]byte{68, 61, 33}: "Nuvolt", - [3]byte{68, 62, 178}: "DEOTRON Co., LTD.", - [3]byte{68, 68, 80}: "OttoQ", - [3]byte{68, 72, 145}: "HDMI Licensing, LLC", - [3]byte{68, 72, 193}: "Hewlett Packard Enterprise", - [3]byte{68, 74, 101}: "Silverflare Ltd.", - [3]byte{68, 74, 176}: "Zhejiang Moorgen Intelligence Technology Co., Ltd", - [3]byte{68, 76, 12}: "Apple, Inc.", - [3]byte{68, 76, 168}: "Arista Networks", - [3]byte{68, 78, 26}: "Samsung Electronics Co.,Ltd", - [3]byte{68, 78, 109}: "AVM Audiovisuelles Marketing und Computersysteme GmbH", - [3]byte{68, 79, 94}: "Pan Studios Co.,Ltd.", - [3]byte{68, 81, 219}: "Raytheon BBN Technologies", - [3]byte{68, 84, 192}: "Thompson Aerospace", - [3]byte{68, 85, 177}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{68, 86, 141}: "PNC Technologies Co., Ltd.", - [3]byte{68, 86, 183}: "Spawn Labs, Inc", - [3]byte{68, 88, 41}: "Cisco SPVTG", - [3]byte{68, 89, 159}: "Criticare Systems, Inc", - [3]byte{68, 94, 205}: "Razer Inc", - [3]byte{68, 94, 243}: "Tonalite Holding B.V.", - [3]byte{68, 95, 122}: "Shihlin Electric & Engineering Corp.", - [3]byte{68, 95, 140}: "Intercel Group Limited", - [3]byte{68, 97, 50}: "ecobee inc", - [3]byte{68, 97, 156}: "FONsystem co. ltd.", - [3]byte{68, 98, 70}: "Comat AG", - [3]byte{68, 101, 13}: "Amazon Technologies Inc.", - [3]byte{68, 101, 106}: "Mega Video Electronic(HK) Industry Co., Ltd", - [3]byte{68, 102, 110}: "IP-LINE", - [3]byte{68, 103, 85}: "Orbit Irrigation", - [3]byte{68, 104, 171}: "JUIN COMPANY, LIMITED", - [3]byte{68, 106, 46}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{68, 106, 183}: "ARRIS Group, Inc.", - [3]byte{68, 108, 36}: "Reallin Electronic Co.,Ltd", - [3]byte{68, 109, 87}: "Liteon Technology Corporation", - [3]byte{68, 109, 108}: "Samsung Electronics Co.,Ltd", - [3]byte{68, 110, 229}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{68, 112, 11}: "IFFU", - [3]byte{68, 112, 152}: "MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED", - [3]byte{68, 115, 214}: "Logitech", - [3]byte{68, 116, 108}: "Sony Mobile Communications AB", - [3]byte{68, 120, 62}: "Samsung Electronics Co.,Ltd", - [3]byte{68, 123, 187}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{68, 123, 196}: "DualShine Technology(SZ)Co.,Ltd", - [3]byte{68, 124, 127}: "Innolight Technology Corporation", - [3]byte{68, 125, 165}: "VTION INFORMATION TECHNOLOGY (FUJIAN) CO.,LTD", - [3]byte{68, 126, 118}: "Trek Technology (S) Pte Ltd", - [3]byte{68, 126, 149}: "Alpha and Omega, Inc", - [3]byte{68, 127, 119}: "Connected Home", - [3]byte{68, 128, 235}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{68, 130, 229}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{68, 131, 18}: "Star-Net", - [3]byte{68, 133, 0}: "Intel Corporate", - [3]byte{68, 134, 193}: "Siemens Low Voltage & Products", - [3]byte{68, 135, 35}: "HOYA SERVICE CORPORATION", - [3]byte{68, 135, 252}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{68, 136, 203}: "Camco Technologies NV", - [3]byte{68, 138, 91}: "Micro-Star INT'L CO., LTD.", - [3]byte{68, 140, 82}: "KTIS CO., Ltd", - [3]byte{68, 142, 18}: "DT Research, Inc.", - [3]byte{68, 142, 129}: "VIG", - [3]byte{68, 143, 23}: "Samsung Electronics Co., Ltd. ARTIK", - [3]byte{68, 145, 96}: "Murata Manufacturing Co., Ltd.", - [3]byte{68, 145, 219}: "Shanghai Huaqin Telecom Technology Co.,Ltd", - [3]byte{68, 148, 252}: "NETGEAR", - [3]byte{68, 149, 250}: "Qingdao Santong Digital Technology Co.Ltd", - [3]byte{68, 150, 43}: "Aidon Oy", - [3]byte{68, 151, 90}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD", - [3]byte{68, 155, 120}: "The Now Factory", - [3]byte{68, 156, 181}: "Alcomp, Inc", - [3]byte{68, 159, 127}: "DataCore Software Corporation", - [3]byte{68, 164, 45}: "TCT mobile ltd", - [3]byte{68, 166, 137}: "PROMAX ELECTRONICA SA", - [3]byte{68, 166, 229}: "THINKING TECHNOLOGY CO.,LTD", - [3]byte{68, 167, 207}: "Murata Manufacturing Co., Ltd.", - [3]byte{68, 168, 66}: "Dell Inc.", - [3]byte{68, 168, 194}: "SEWOO TECH CO., LTD", - [3]byte{68, 170, 39}: "udworks Co., Ltd.", - [3]byte{68, 170, 80}: "Juniper Networks", - [3]byte{68, 170, 232}: "Nanotec Electronic GmbH & Co. KG", - [3]byte{68, 170, 245}: "ARRIS Group, Inc.", - [3]byte{68, 173, 25}: "XINGFEI (H.K)LIMITED", - [3]byte{68, 173, 217}: "Cisco Systems, Inc", - [3]byte{68, 179, 45}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{68, 179, 130}: "Kuang-chi Institute of Advanced Technology", - [3]byte{68, 180, 18}: "SIUS AG", - [3]byte{68, 186, 70}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD", - [3]byte{68, 191, 227}: "Shenzhen Longtech Electronics Co.,Ltd", - [3]byte{68, 193, 92}: "Texas Instruments", - [3]byte{68, 194, 51}: "Guangzhou Comet Technology Development Co.Ltd", - [3]byte{68, 195, 6}: "SIFROM Inc.", - [3]byte{68, 195, 70}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{68, 195, 155}: "OOO RUBEZH NPO", - [3]byte{68, 196, 169}: "Opticom Communication, LLC", - [3]byte{68, 197, 111}: "NGN Easy Satfinder (Tianjin) Electronic Co., Ltd", - [3]byte{68, 198, 155}: "Wuhan Feng Tian Information Network CO.,LTD", - [3]byte{68, 200, 116}: "China Mobile Group Device Co.,Ltd.", - [3]byte{68, 201, 162}: "Greenwald Industries", - [3]byte{68, 205, 14}: "FLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.", - [3]byte{68, 206, 125}: "SFR", - [3]byte{68, 209, 94}: "Shanghai Kingto Information Technology Ltd", - [3]byte{68, 209, 250}: "Shenzhen Yunlink Technology Co., Ltd", - [3]byte{68, 210, 68}: "Seiko Epson Corporation", - [3]byte{68, 210, 202}: "Anvia TV Oy", - [3]byte{68, 211, 202}: "Cisco Systems, Inc", - [3]byte{68, 212, 55}: "Inteno Broadband Technology AB", - [3]byte{68, 212, 224}: "Sony Mobile Communications AB", - [3]byte{68, 213, 165}: "AddOn Computer", - [3]byte{68, 214, 61}: "Talari Networks", - [3]byte{68, 214, 225}: "Snuza International Pty. Ltd.", - [3]byte{68, 216, 50}: "AzureWave Technology Inc.", - [3]byte{68, 216, 132}: "Apple, Inc.", - [3]byte{68, 217, 231}: "Ubiquiti Networks Inc.", - [3]byte{68, 220, 145}: "PLANEX COMMUNICATIONS INC.", - [3]byte{68, 220, 203}: "SEMINDIA SYSTEMS PVT LTD", - [3]byte{68, 224, 142}: "Cisco SPVTG", - [3]byte{68, 225, 55}: "ARRIS Group, Inc.", - [3]byte{68, 228, 154}: "OMNITRONICS PTY LTD", - [3]byte{68, 228, 217}: "Cisco Systems, Inc", - [3]byte{68, 232, 165}: "Myreka Technologies Sdn. Bhd.", - [3]byte{68, 233, 221}: "Sagemcom Broadband SAS", - [3]byte{68, 234, 75}: "Actlas Inc.", - [3]byte{68, 234, 216}: "Texas Instruments", - [3]byte{68, 237, 87}: "Longicorn, inc.", - [3]byte{68, 238, 2}: "MTI Ltd.", - [3]byte{68, 238, 48}: "Budelmann Elektronik GmbH", - [3]byte{68, 240, 52}: "Kaonmedia CO., LTD.", - [3]byte{68, 244, 54}: "zte corporation", - [3]byte{68, 244, 89}: "Samsung Electronics Co.,Ltd", - [3]byte{68, 244, 119}: "Juniper Networks", - [3]byte{68, 248, 73}: "Union Pacific Railroad", - [3]byte{68, 251, 66}: "Apple, Inc.", - [3]byte{68, 253, 163}: "Everysight LTD.", - [3]byte{72, 0, 49}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{72, 0, 51}: "Technicolor CH USA Inc.", - [3]byte{72, 2, 42}: "B-Link Electronic Limited", - [3]byte{72, 3, 98}: "DESAY ELECTRONICS(HUIZHOU)CO.,LTD", - [3]byte{72, 6, 106}: "Tempered Networks, Inc.", - [3]byte{72, 12, 73}: "NAKAYO Inc", - [3]byte{72, 14, 236}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{72, 15, 207}: "Hewlett Packard", - [3]byte{72, 16, 99}: "NTT Innovation Institute, Inc.", - [3]byte{72, 18, 73}: "Luxcom Technologies Inc.", - [3]byte{72, 19, 126}: "Samsung Electronics Co.,Ltd", - [3]byte{72, 19, 243}: "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.", - [3]byte{72, 23, 76}: "MicroPower technologies", - [3]byte{72, 24, 66}: "Shanghai Winaas Co. Equipment Co. Ltd.", - [3]byte{72, 26, 132}: "Pointer Telocation Ltd", - [3]byte{72, 27, 210}: "Intron Scientific co., ltd.", - [3]byte{72, 29, 112}: "Cisco SPVTG", - [3]byte{72, 38, 232}: "Tek-Air Systems, Inc.", - [3]byte{72, 39, 234}: "Samsung Electronics Co.,Ltd", - [3]byte{72, 40, 47}: "zte corporation", - [3]byte{72, 44, 234}: "Motorola Inc Business Light Radios", - [3]byte{72, 51, 221}: "ZENNIO AVANCE Y TECNOLOGIA, S.L.", - [3]byte{72, 52, 61}: "IEP GmbH", - [3]byte{72, 54, 95}: "Wintecronics Ltd.", - [3]byte{72, 57, 116}: "Proware Technologies Co., Ltd.", - [3]byte{72, 59, 56}: "Apple, Inc.", - [3]byte{72, 60, 12}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{72, 61, 50}: "Syscor Controls & Automation", - [3]byte{72, 67, 90}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{72, 67, 124}: "Apple, Inc.", - [3]byte{72, 68, 135}: "Cisco SPVTG", - [3]byte{72, 68, 247}: "Samsung Electronics Co.,Ltd", - [3]byte{72, 69, 32}: "Intel Corporate", - [3]byte{72, 70, 241}: "Uros Oy", - [3]byte{72, 70, 251}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{72, 73, 199}: "Samsung Electronics Co.,Ltd", - [3]byte{72, 75, 170}: "Apple, Inc.", - [3]byte{72, 77, 126}: "Dell Inc.", - [3]byte{72, 80, 115}: "Microsoft Corporation", - [3]byte{72, 81, 183}: "Intel Corporate", - [3]byte{72, 82, 97}: "SOREEL", - [3]byte{72, 84, 21}: "NET RULES TECNOLOGIA EIRELI", - [3]byte{72, 85, 92}: "Wu Qi Technologies,Inc.", - [3]byte{72, 85, 95}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{72, 87, 221}: "Facebook Inc", - [3]byte{72, 89, 41}: "LG Electronics (Mobile Communications)", - [3]byte{72, 89, 164}: "zte corporation", - [3]byte{72, 90, 63}: "WISOL", - [3]byte{72, 90, 182}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{72, 91, 57}: "ASUSTek COMPUTER INC.", - [3]byte{72, 93, 54}: "Verizon", - [3]byte{72, 93, 96}: "AzureWave Technology Inc.", - [3]byte{72, 96, 188}: "Apple, Inc.", - [3]byte{72, 97, 163}: "Concern Axion JSC", - [3]byte{72, 98, 118}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{72, 101, 238}: "IEEE Registration Authority", - [3]byte{72, 107, 44}: "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.", - [3]byte{72, 107, 145}: "Fleetwood Group Inc.", - [3]byte{72, 109, 187}: "Vestel Elektronik San ve Tic. A.Ş.", - [3]byte{72, 110, 115}: "Pica8, Inc.", - [3]byte{72, 110, 251}: "Davit System Technology Co., Ltd.", - [3]byte{72, 111, 210}: "StorSimple Inc", - [3]byte{72, 113, 25}: "SGB GROUP LTD.", - [3]byte{72, 116, 110}: "Apple, Inc.", - [3]byte{72, 118, 4}: "Private", - [3]byte{72, 122, 85}: "ALE International", - [3]byte{72, 122, 218}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{72, 123, 107}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{72, 125, 46}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{72, 130, 68}: "Life Fitness / Div. of Brunswick", - [3]byte{72, 130, 242}: "Appel Elektronik GmbH", - [3]byte{72, 131, 199}: "Sagemcom Broadband SAS", - [3]byte{72, 134, 232}: "Microsoft Corporation", - [3]byte{72, 136, 3}: "ManTechnology Inc.", - [3]byte{72, 136, 202}: "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.", - [3]byte{72, 138, 210}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", - [3]byte{72, 141, 54}: "Arcadyan Corporation", - [3]byte{72, 142, 66}: "DIGALOG GmbH", - [3]byte{72, 142, 239}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{72, 145, 83}: "Weinmann Geräte für Medizin GmbH + Co. KG", - [3]byte{72, 145, 246}: "Shenzhen Reach software technology CO.,LTD", - [3]byte{72, 154, 66}: "Technomate Ltd", - [3]byte{72, 155, 226}: "SCI Innovations Ltd", - [3]byte{72, 157, 24}: "Flashbay Limited", - [3]byte{72, 157, 36}: "BlackBerry RTS", - [3]byte{72, 161, 149}: "Apple, Inc.", - [3]byte{72, 162, 45}: "Shenzhen Huaxuchang Telecom Technology Co.,Ltd", - [3]byte{72, 162, 183}: "Kodofon JSC", - [3]byte{72, 163, 128}: "Gionee Communication Equipment Co.,Ltd.", - [3]byte{72, 166, 210}: "GJsun Optical Science and Tech Co.,Ltd.", - [3]byte{72, 167, 78}: "zte corporation", - [3]byte{72, 169, 210}: "Wistron Neweb Corporation", - [3]byte{72, 170, 93}: "Store Electronic Systems", - [3]byte{72, 173, 8}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{72, 178, 83}: "Marketaxess Corporation", - [3]byte{72, 181, 167}: "Glory Horse Industries Ltd.", - [3]byte{72, 182, 32}: "ROLI Ltd.", - [3]byte{72, 184, 222}: "HOMEWINS TECHNOLOGY CO.,LTD.", - [3]byte{72, 185, 119}: "PulseOn Oy", - [3]byte{72, 185, 194}: "Teletics Inc.", - [3]byte{72, 186, 78}: "Hewlett Packard", - [3]byte{72, 188, 166}: "\u200bASUNG TECHNO CO.,Ltd", - [3]byte{72, 190, 45}: "Symanitron", - [3]byte{72, 191, 107}: "Apple, Inc.", - [3]byte{72, 191, 116}: "Baicells Technologies Co.,LTD", - [3]byte{72, 192, 73}: "Broad Telecom SA", - [3]byte{72, 192, 147}: "Xirrus, Inc.", - [3]byte{72, 193, 172}: "PLANTRONICS, INC.", - [3]byte{72, 197, 141}: "Lear Corporation GmbH", - [3]byte{72, 198, 99}: "GTO Access Systems LLC", - [3]byte{72, 200, 98}: "Simo Wireless,Inc.", - [3]byte{72, 200, 182}: "SysTec GmbH", - [3]byte{72, 203, 110}: "Cello Electronics (UK) Ltd", - [3]byte{72, 208, 207}: "Universal Electronics, Inc.", - [3]byte{72, 209, 142}: "Metis Communication Co.,Ltd", - [3]byte{72, 210, 36}: "Liteon Technology Corporation", - [3]byte{72, 211, 67}: "ARRIS Group, Inc.", - [3]byte{72, 211, 93}: "Private", - [3]byte{72, 213, 57}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{72, 213, 76}: "Jeda Networks", - [3]byte{72, 214, 213}: "Google, Inc.", - [3]byte{72, 215, 5}: "Apple, Inc.", - [3]byte{72, 215, 255}: "BLANKOM Antennentechnik GmbH", - [3]byte{72, 216, 85}: "Telvent", - [3]byte{72, 216, 254}: "ClarIDy Solutions, Inc.", - [3]byte{72, 218, 150}: "Eddy Smart Home Solutions Inc.", - [3]byte{72, 219, 80}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{72, 220, 251}: "Nokia Corporation", - [3]byte{72, 223, 28}: "Wuhan NEC Fibre Optic Communications industry Co. Ltd", - [3]byte{72, 223, 55}: "Hewlett Packard Enterprise", - [3]byte{72, 225, 175}: "Vity", - [3]byte{72, 226, 68}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{72, 233, 241}: "Apple, Inc.", - [3]byte{72, 234, 99}: "Zhejiang Uniview Technologies Co., Ltd.", - [3]byte{72, 235, 48}: "ETERNA TECHNOLOGY, INC.", - [3]byte{72, 236, 91}: "Nokia", - [3]byte{72, 237, 128}: "daesung eltec", - [3]byte{72, 238, 7}: "Silver Palm Technologies LLC", - [3]byte{72, 238, 12}: "D-Link International", - [3]byte{72, 238, 134}: "UTStarcom (China) Co.,Ltd", - [3]byte{72, 240, 123}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{72, 242, 48}: "Ubizcore Co.,LTD", - [3]byte{72, 243, 23}: "Private", - [3]byte{72, 244, 125}: "TechVision Holding Internation Limited", - [3]byte{72, 247, 192}: "Technicolor CH USA Inc.", - [3]byte{72, 247, 241}: "Nokia", - [3]byte{72, 248, 179}: "Cisco-Linksys, LLC", - [3]byte{72, 248, 225}: "Nokia", - [3]byte{72, 249, 37}: "Maestronic", - [3]byte{72, 249, 124}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{72, 252, 182}: "LAVA INTERNATIONAL(H.K) LIMITED", - [3]byte{72, 252, 184}: "Woodstream Corporation", - [3]byte{72, 253, 142}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{72, 254, 234}: "HOMA B.V.", - [3]byte{76, 0, 130}: "Cisco Systems, Inc", - [3]byte{76, 2, 46}: "CMR KOREA CO., LTD", - [3]byte{76, 2, 137}: "LEX COMPUTECH CO., LTD", - [3]byte{76, 6, 138}: "Basler Electric Company", - [3]byte{76, 7, 201}: "COMPUTER OFFICE Co.,Ltd.", - [3]byte{76, 9, 180}: "zte corporation", - [3]byte{76, 9, 212}: "Arcadyan Technology Corporation", - [3]byte{76, 11, 58}: "TCT mobile ltd", - [3]byte{76, 11, 190}: "Microsoft", - [3]byte{76, 13, 238}: "JABIL CIRCUIT (SHANGHAI) LTD.", - [3]byte{76, 15, 110}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{76, 15, 199}: "Earda Electronics Co.,Ltd", - [3]byte{76, 17, 191}: "Zhejiang Dahua Technology Co., Ltd.", - [3]byte{76, 19, 101}: "Emplus Technologies", - [3]byte{76, 20, 128}: "NOREGON SYSTEMS, INC", - [3]byte{76, 20, 163}: "TCL Technoly Electronics (Huizhou) Co., Ltd.", - [3]byte{76, 22, 148}: "shenzhen sibituo Technology Co., Ltd", - [3]byte{76, 22, 241}: "zte corporation", - [3]byte{76, 22, 252}: "Juniper Networks", - [3]byte{76, 23, 235}: "Sagemcom Broadband SAS", - [3]byte{76, 24, 154}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{76, 26, 58}: "PRIMA Research And Production Enterprise Ltd.", - [3]byte{76, 26, 61}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{76, 26, 149}: "Novakon Co., Ltd.", - [3]byte{76, 31, 204}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{76, 33, 208}: "Sony Mobile Communications AB", - [3]byte{76, 34, 88}: "cozybit, Inc.", - [3]byte{76, 37, 120}: "Nokia Corporation", - [3]byte{76, 38, 231}: "Welgate Co., Ltd.", - [3]byte{76, 44, 128}: "Beijing Skyway Technologies Co.,Ltd", - [3]byte{76, 44, 131}: "Zhejiang KaNong Network Technology Co.,Ltd.", - [3]byte{76, 47, 157}: "ICM Controls", - [3]byte{76, 48, 137}: "Thales Transportation Systems GmbH", - [3]byte{76, 50, 45}: "TELEDATA NETWORKS", - [3]byte{76, 50, 117}: "Apple, Inc.", - [3]byte{76, 50, 217}: "M Rutty Holdings Pty. Ltd.", - [3]byte{76, 51, 78}: "HIGHTECH", - [3]byte{76, 52, 136}: "Intel Corporate", - [3]byte{76, 56, 213}: "MITAC COMPUTING TECHNOLOGY CORPORATION", - [3]byte{76, 56, 216}: "ARRIS Group, Inc.", - [3]byte{76, 57, 9}: "HPL Electric & Power Private Limited", - [3]byte{76, 57, 16}: "Newtek Electronics co., Ltd.", - [3]byte{76, 59, 116}: "VOGTEC(H.K.) Co., Ltd", - [3]byte{76, 60, 22}: "Samsung Electronics Co.,Ltd", - [3]byte{76, 72, 218}: "Beijing Autelan Technology Co.,Ltd", - [3]byte{76, 73, 227}: "Xiaomi Communications Co Ltd", - [3]byte{76, 75, 104}: "Mobile Device, Inc.", - [3]byte{76, 78, 3}: "TCT mobile ltd", - [3]byte{76, 78, 53}: "Cisco Systems, Inc", - [3]byte{76, 82, 98}: "Fujitsu Technology Solutions GmbH", - [3]byte{76, 84, 39}: "Linepro Sp. z o.o.", - [3]byte{76, 84, 153}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{76, 85, 133}: "Hamilton Systems", - [3]byte{76, 85, 184}: "Turkcell Teknoloji", - [3]byte{76, 85, 204}: "Zentri Pty Ltd", - [3]byte{76, 87, 202}: "Apple, Inc.", - [3]byte{76, 93, 205}: "Oy Finnish Electric Vehicle Technologies Ltd", - [3]byte{76, 94, 12}: "Routerboard.com", - [3]byte{76, 95, 210}: "Alcatel-Lucent", - [3]byte{76, 96, 213}: "airPointe of New Hampshire", - [3]byte{76, 96, 222}: "NETGEAR", - [3]byte{76, 98, 85}: "SANMINA-SCI SYSTEM DE MEXICO S.A. DE C.V.", - [3]byte{76, 99, 235}: "Application Solutions (Electronics and Vision) Ltd", - [3]byte{76, 100, 217}: "Guangdong Leawin Group Co., Ltd", - [3]byte{76, 101, 168}: "IEEE Registration Authority", - [3]byte{76, 102, 65}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{76, 110, 110}: "Comnect Technology CO.,LTD", - [3]byte{76, 114, 185}: "PEGATRON CORPORATION", - [3]byte{76, 115, 103}: "Genius Bytes Software Solutions GmbH", - [3]byte{76, 115, 165}: "KOVE", - [3]byte{76, 116, 3}: "BQ", - [3]byte{76, 116, 135}: "Leader Phone Communication Technology Co., Ltd.", - [3]byte{76, 116, 191}: "Apple, Inc.", - [3]byte{76, 118, 37}: "Dell Inc.", - [3]byte{76, 119, 79}: "Embedded Wireless Labs", - [3]byte{76, 120, 114}: "Cav. Uff. Giacomo Cimberio S.p.A.", - [3]byte{76, 120, 151}: "Arrowhead Alarm Products Ltd", - [3]byte{76, 121, 186}: "Intel Corporate", - [3]byte{76, 124, 95}: "Apple, Inc.", - [3]byte{76, 127, 98}: "Nokia Corporation", - [3]byte{76, 128, 79}: "Armstrong Monitoring Corp", - [3]byte{76, 128, 147}: "Intel Corporate", - [3]byte{76, 129, 32}: "Taicang T&W Electronics", - [3]byte{76, 130, 207}: "Echostar Technologies Corp", - [3]byte{76, 131, 222}: "Cisco SPVTG", - [3]byte{76, 139, 48}: "Actiontec Electronics, Inc", - [3]byte{76, 139, 85}: "Grupo Digicon", - [3]byte{76, 139, 239}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{76, 141, 121}: "Apple, Inc.", - [3]byte{76, 142, 204}: "SILKAN SA", - [3]byte{76, 143, 165}: "Jastec", - [3]byte{76, 145, 12}: "Lanix Internacional, S.A. de C.V.", - [3]byte{76, 150, 20}: "Juniper Networks", - [3]byte{76, 152, 239}: "Zeo", - [3]byte{76, 158, 128}: "KYOKKO ELECTRIC Co., Ltd.", - [3]byte{76, 158, 228}: "Hanyang Navicom Co.,Ltd.", - [3]byte{76, 158, 255}: "Zyxel Communications Corporation", - [3]byte{76, 160, 3}: "T-21 Technologies LLC", - [3]byte{76, 161, 97}: "Rain Bird Corporation", - [3]byte{76, 165, 21}: "Baikal Electronics JSC", - [3]byte{76, 165, 109}: "Samsung Electronics Co.,Ltd", - [3]byte{76, 167, 75}: "Alcatel Lucent", - [3]byte{76, 169, 40}: "Insensi", - [3]byte{76, 170, 22}: "AzureWave Technologies (Shanghai) Inc.", - [3]byte{76, 171, 51}: "KST technology", - [3]byte{76, 172, 10}: "zte corporation", - [3]byte{76, 174, 28}: "SaiNXT Technologies LLP", - [3]byte{76, 174, 49}: "ShengHai Electronics (Shenzhen) Ltd", - [3]byte{76, 176, 8}: "Shenzhen Gwelltimes Technology Co.,Ltd", - [3]byte{76, 176, 232}: "Beijing RongZhi xinghua technology co., LTD", - [3]byte{76, 177, 108}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{76, 177, 153}: "Apple, Inc.", - [3]byte{76, 178, 28}: "Maxphotonics Co.,Ltd", - [3]byte{76, 180, 74}: "NANOWAVE Technologies Inc.", - [3]byte{76, 180, 234}: "HRD (S) PTE., LTD.", - [3]byte{76, 183, 109}: "Novi Security", - [3]byte{76, 184, 28}: "SAM Electronics GmbH", - [3]byte{76, 184, 44}: "Cambridge Mobile Telematics, Inc.", - [3]byte{76, 184, 181}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{76, 185, 200}: "CONET CO., LTD.", - [3]byte{76, 186, 163}: "Bison Electronics Inc.", - [3]byte{76, 187, 88}: "Chicony Electronics Co., Ltd.", - [3]byte{76, 188, 66}: "Shenzhen Hangsheng Electronics Co.,Ltd.", - [3]byte{76, 188, 165}: "Samsung Electronics Co.,Ltd", - [3]byte{76, 189, 143}: "Hangzhou Hikvision Digital Technology Co.,Ltd.", - [3]byte{76, 196, 82}: "Shang Hai Tyd. Electon Technology Ltd.", - [3]byte{76, 198, 2}: "Radios, Inc.", - [3]byte{76, 198, 129}: "Shenzhen Aisat Electronic Co., Ltd.", - [3]byte{76, 201, 79}: "Nokia", - [3]byte{76, 202, 83}: "Skyera, Inc.", - [3]byte{76, 203, 245}: "zte corporation", - [3]byte{76, 204, 52}: "Motorola Solutions Inc.", - [3]byte{76, 204, 106}: "Micro-Star INTL CO., LTD.", - [3]byte{76, 208, 138}: "HUMAX Co., Ltd.", - [3]byte{76, 214, 55}: "Qsono Electronics Co., Ltd", - [3]byte{76, 215, 182}: "Helmer Scientific", - [3]byte{76, 217, 196}: "Magneti Marelli Automotive Electronics (Guangzhou) Co. Ltd", - [3]byte{76, 223, 61}: "TEAM ENGINEERS ADVANCE TECHNOLOGIES INDIA PVT LTD", - [3]byte{76, 225, 115}: "IEEE Registration Authority", - [3]byte{76, 225, 187}: "Zhuhai HiFocus Technology Co., Ltd.", - [3]byte{76, 226, 241}: "sclak srl", - [3]byte{76, 230, 118}: "BUFFALO.INC", - [3]byte{76, 233, 51}: "RailComm, LLC", - [3]byte{76, 235, 66}: "Intel Corporate", - [3]byte{76, 236, 239}: "Soraa, Inc.", - [3]byte{76, 237, 222}: "ASKEY COMPUTER CORP", - [3]byte{76, 238, 176}: "SHC Netzwerktechnik GmbH", - [3]byte{76, 240, 46}: "Vifa Denmark A/S", - [3]byte{76, 242, 191}: "Cambridge Industries(Group) Co.,Ltd.", - [3]byte{76, 244, 91}: "Blue Clover Devices", - [3]byte{76, 245, 160}: "Scalable Network Technologies Inc", - [3]byte{76, 247, 55}: "SamJi Electronics Co., Ltd", - [3]byte{76, 249, 93}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{76, 250, 202}: "Cambridge Industries(Group) Co.,Ltd.", - [3]byte{76, 251, 69}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{76, 255, 18}: "Fuze Entertainment Co., ltd", - [3]byte{80, 0, 140}: "Hong Kong Telecommunications (HKT) Limited", - [3]byte{80, 1, 107}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{80, 1, 187}: "Samsung Electronics Co.,Ltd", - [3]byte{80, 1, 217}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{80, 4, 184}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{80, 5, 61}: "CyWee Group Ltd", - [3]byte{80, 6, 4}: "Cisco Systems, Inc", - [3]byte{80, 6, 171}: "Cisco Systems, Inc", - [3]byte{80, 9, 89}: "Technicolor CH USA Inc.", - [3]byte{80, 11, 50}: "Foxda Technology Industrial(ShenZhen)Co.,LTD", - [3]byte{80, 11, 145}: "IEEE Registration Authority", - [3]byte{80, 14, 109}: "TrafficCast International", - [3]byte{80, 15, 128}: "Cisco Systems, Inc", - [3]byte{80, 15, 245}: "Tenda Technology Co.,Ltd.Dongguan branch", - [3]byte{80, 17, 235}: "SilverNet Ltd", - [3]byte{80, 20, 181}: "Richfit Information Technology Co., Ltd", - [3]byte{80, 23, 255}: "Cisco Systems, Inc", - [3]byte{80, 24, 76}: "Platina Systems Inc.", - [3]byte{80, 26, 165}: "GN Netcom A/S", - [3]byte{80, 26, 197}: "Microsoft", - [3]byte{80, 28, 191}: "Cisco Systems, Inc", - [3]byte{80, 30, 45}: "StreamUnlimited Engineering GmbH", - [3]byte{80, 32, 107}: "Emerson Climate Technologies Transportation Solutions", - [3]byte{80, 34, 103}: "PixeLINK", - [3]byte{80, 37, 43}: "Nethra Imaging Incorporated", - [3]byte{80, 38, 144}: "FUJITSU LIMITED", - [3]byte{80, 39, 199}: "TECHNART Co.,Ltd", - [3]byte{80, 41, 77}: "NANJING IOT SENSOR TECHNOLOGY CO,LTD", - [3]byte{80, 42, 126}: "Smart electronic GmbH", - [3]byte{80, 42, 139}: "Telekom Research and Development Sdn Bhd", - [3]byte{80, 43, 115}: "Tenda Technology Co.,Ltd.Dongguan branch", - [3]byte{80, 45, 29}: "Nokia Corporation", - [3]byte{80, 45, 162}: "Intel Corporate", - [3]byte{80, 45, 244}: "Phytec Messtechnik GmbH", - [3]byte{80, 46, 92}: "HTC Corporation", - [3]byte{80, 46, 206}: "Asahi Electronics Co.,Ltd", - [3]byte{80, 49, 173}: "ABB Global Industries and Services Private Limited", - [3]byte{80, 50, 55}: "Apple, Inc.", - [3]byte{80, 50, 117}: "Samsung Electronics Co.,Ltd", - [3]byte{80, 51, 139}: "Texas Instruments", - [3]byte{80, 51, 240}: "YICHEN (SHENZHEN) TECHNOLOGY CO.LTD", - [3]byte{80, 57, 85}: "Cisco SPVTG", - [3]byte{80, 58, 125}: "AlphaTech PLC Int’l Co., Ltd.", - [3]byte{80, 58, 160}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", - [3]byte{80, 60, 196}: "Lenovo Mobile Communication Technology Ltd.", - [3]byte{80, 60, 234}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{80, 61, 161}: "Samsung Electronics Co.,Ltd", - [3]byte{80, 61, 229}: "Cisco Systems, Inc", - [3]byte{80, 62, 170}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{80, 63, 86}: "Syncmold Enterprise Corp", - [3]byte{80, 63, 152}: "CMITECH", - [3]byte{80, 64, 97}: "Nokia", - [3]byte{80, 69, 247}: "Liuhe Intelligence Technology Ltd.", - [3]byte{80, 70, 93}: "ASUSTek COMPUTER INC.", - [3]byte{80, 72, 235}: "BEIJING HAIHEJINSHENG NETWORK TECHNOLOGY CO. LTD.", - [3]byte{80, 74, 94}: "Masimo Corporation", - [3]byte{80, 74, 110}: "NETGEAR", - [3]byte{80, 75, 91}: "CONTROLtronic GmbH", - [3]byte{80, 78, 220}: "Ping Communication", - [3]byte{80, 79, 148}: "Loxone Electronics GmbH", - [3]byte{80, 80, 42}: "Egardia", - [3]byte{80, 80, 101}: "TAKT Corporation", - [3]byte{80, 82, 210}: "Hangzhou Telin Technologies Co., Limited", - [3]byte{80, 85, 39}: "LG Electronics (Mobile Communications)", - [3]byte{80, 86, 99}: "Texas Instruments", - [3]byte{80, 86, 168}: "Jolla Ltd", - [3]byte{80, 86, 191}: "Samsung Electronics Co.,Ltd", - [3]byte{80, 87, 168}: "Cisco Systems, Inc", - [3]byte{80, 88, 0}: "WyTec International, Inc.", - [3]byte{80, 88, 79}: "waytotec,Inc.", - [3]byte{80, 90, 198}: "GUANGDONG SUPER TELECOM CO.,LTD.", - [3]byte{80, 96, 40}: "Xirrus Inc.", - [3]byte{80, 97, 132}: "Avaya Inc", - [3]byte{80, 97, 214}: "Indu-Sol GmbH", - [3]byte{80, 99, 19}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{80, 100, 43}: "XIAOMI Electronics,CO.,LTD", - [3]byte{80, 100, 65}: "Greenlee", - [3]byte{80, 101, 131}: "Texas Instruments", - [3]byte{80, 101, 243}: "Hewlett Packard", - [3]byte{80, 103, 135}: "Planet Networks", - [3]byte{80, 103, 174}: "Cisco Systems, Inc", - [3]byte{80, 103, 240}: "Zyxel Communications Corporation", - [3]byte{80, 104, 10}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{80, 106, 3}: "NETGEAR", - [3]byte{80, 107, 141}: "Nutanix", - [3]byte{80, 110, 146}: "Innocent Technology Co., Ltd.", - [3]byte{80, 111, 152}: "Sehaj Synergy Technologies Private Limited", - [3]byte{80, 111, 154}: "Wi-Fi Alliance", - [3]byte{80, 112, 229}: "He Shan World Fair Electronics Technology Limited", - [3]byte{80, 114, 36}: "Texas Instruments", - [3]byte{80, 114, 77}: "BEG Brueck Electronic GmbH", - [3]byte{80, 118, 145}: "Tekpea, Inc.", - [3]byte{80, 118, 166}: "Ecil Informatica Ind. Com. Ltda", - [3]byte{80, 119, 5}: "Samsung Electronics Co.,Ltd", - [3]byte{80, 121, 91}: "Interexport Telecomunicaciones S.A.", - [3]byte{80, 122, 85}: "Apple, Inc.", - [3]byte{80, 123, 157}: "LCFC(HeFei) Electronics Technology co., ltd", - [3]byte{80, 125, 2}: "BIODIT", - [3]byte{80, 126, 93}: "Arcadyan Technology Corporation", - [3]byte{80, 130, 213}: "Apple, Inc.", - [3]byte{80, 133, 105}: "Samsung Electronics Co.,Ltd", - [3]byte{80, 135, 137}: "Cisco Systems, Inc", - [3]byte{80, 135, 184}: "Nuvyyo Inc", - [3]byte{80, 137, 101}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", - [3]byte{80, 138, 15}: "SHENZHEN FISE TECHNOLOGY HOLDING CO.,LTD.", - [3]byte{80, 138, 66}: "Uptmate Technology Co., LTD", - [3]byte{80, 138, 203}: "SHENZHEN MAXMADE TECHNOLOGY CO., LTD.", - [3]byte{80, 140, 119}: "DIRMEIER Schanktechnik GmbH &Co KG", - [3]byte{80, 140, 177}: "Texas Instruments", - [3]byte{80, 141, 111}: "CHAHOO Limited", - [3]byte{80, 143, 76}: "Xiaomi Communications Co Ltd", - [3]byte{80, 146, 185}: "Samsung Electronics Co.,Ltd", - [3]byte{80, 147, 79}: "Gradual Tecnologia Ltda.", - [3]byte{80, 151, 114}: "Westinghouse Digital", - [3]byte{80, 152, 113}: "Inventum Technologies Private Limited", - [3]byte{80, 152, 243}: "Rheem Australia Pty Ltd", - [3]byte{80, 154, 76}: "Dell Inc.", - [3]byte{80, 158, 167}: "Samsung Electronics Co.,Ltd", - [3]byte{80, 159, 39}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{80, 159, 59}: "OI ELECTRIC CO.,LTD", - [3]byte{80, 160, 84}: "Actineon", - [3]byte{80, 160, 191}: "Alba Fiber Systems Inc.", - [3]byte{80, 164, 200}: "Samsung Electronics Co.,Ltd", - [3]byte{80, 164, 208}: "IEEE Registration Authority", - [3]byte{80, 166, 227}: "David Clark Company", - [3]byte{80, 167, 21}: "Aboundi, Inc.", - [3]byte{80, 167, 43}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{80, 167, 51}: "Ruckus Wireless", - [3]byte{80, 168, 58}: "S Mobile Devices Limited", - [3]byte{80, 169, 222}: "Smartcom - Bulgaria AD", - [3]byte{80, 171, 62}: "Qibixx AG", - [3]byte{80, 171, 191}: "Hoseo Telecom", - [3]byte{80, 173, 213}: "Dynalec Corporation", - [3]byte{80, 175, 115}: "Shenzhen Bitland Information Technology Co., Ltd.", - [3]byte{80, 179, 99}: "Digitron da Amazonia S/A", - [3]byte{80, 182, 149}: "Micropoint Biotechnologies,Inc.", - [3]byte{80, 183, 195}: "Samsung Electronics Co.,Ltd", - [3]byte{80, 184, 136}: "wi2be Tecnologia S/A", - [3]byte{80, 184, 162}: "ImTech Technologies LLC,", - [3]byte{80, 189, 95}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{80, 192, 6}: "Carmanah Signs", - [3]byte{80, 194, 113}: "SECURETECH INC", - [3]byte{80, 197, 141}: "Juniper Networks", - [3]byte{80, 199, 191}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{80, 200, 229}: "Samsung Electronics Co.,Ltd", - [3]byte{80, 201, 113}: "GN Netcom A/S", - [3]byte{80, 201, 160}: "SKIPPER AS", - [3]byte{80, 204, 248}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{80, 205, 34}: "Avaya Inc", - [3]byte{80, 205, 50}: "NanJing Chaoran Science & Technology Co.,Ltd.", - [3]byte{80, 206, 117}: "Measy Electronics Co., Ltd.", - [3]byte{80, 210, 19}: "CviLux Corporation", - [3]byte{80, 210, 116}: "Steffes Corporation", - [3]byte{80, 211, 127}: "Yu Fly Mikly Way Science and Technology Co., Ltd.", - [3]byte{80, 213, 156}: "Thai Habel Industrial Co., Ltd.", - [3]byte{80, 214, 215}: "Takahata Precision", - [3]byte{80, 215, 83}: "CONELCOM GmbH", - [3]byte{80, 218, 0}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{80, 221, 79}: "Automation Components, Inc", - [3]byte{80, 223, 149}: "Lytx", - [3]byte{80, 224, 199}: "TurControlSystme AG", - [3]byte{80, 225, 74}: "Private", - [3]byte{80, 229, 73}: "GIGA-BYTE TECHNOLOGY CO.,LTD.", - [3]byte{80, 230, 102}: "Shenzhen Techtion Electronics Co., Ltd.", - [3]byte{80, 233, 113}: "Jibo, Inc.", - [3]byte{80, 234, 214}: "Apple, Inc.", - [3]byte{80, 235, 26}: "Brocade Communications Systems, Inc.", - [3]byte{80, 237, 120}: "Changzhou Yongse Infotech Co.,Ltd", - [3]byte{80, 237, 148}: "EGATEL SL", - [3]byte{80, 240, 3}: "Open Stack, Inc.", - [3]byte{80, 240, 211}: "Samsung Electronics Co.,Ltd", - [3]byte{80, 241, 74}: "Texas Instruments", - [3]byte{80, 244, 60}: "Leeo Inc", - [3]byte{80, 245, 32}: "Samsung Electronics Co.,Ltd", - [3]byte{80, 245, 218}: "Amazon Technologies Inc.", - [3]byte{80, 246, 26}: "Kunshan JADE Technologies co., Ltd.", - [3]byte{80, 247, 34}: "Cisco Systems, Inc", - [3]byte{80, 250, 132}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{80, 250, 171}: "L-tek d.o.o.", - [3]byte{80, 252, 48}: "Treehouse Labs", - [3]byte{80, 252, 159}: "Samsung Electronics Co.,Ltd", - [3]byte{80, 254, 242}: "Sify Technologies Ltd", - [3]byte{80, 255, 32}: "Keenetic Limited", - [3]byte{80, 255, 153}: "IEEE Registration Authority", - [3]byte{84, 2, 55}: "Teltronic AG", - [3]byte{84, 3, 132}: "Hangkong Nano IC Technologies Co., Ltd", - [3]byte{84, 3, 245}: "EBN Technology Corp.", - [3]byte{84, 4, 150}: "Gigawave LTD", - [3]byte{84, 4, 166}: "ASUSTek COMPUTER INC.", - [3]byte{84, 5, 54}: "Vivago Oy", - [3]byte{84, 5, 95}: "Alcatel Lucent", - [3]byte{84, 5, 147}: "WOORI ELEC Co.,Ltd", - [3]byte{84, 9, 85}: "zte corporation", - [3]byte{84, 9, 141}: "deister electronic GmbH", - [3]byte{84, 16, 236}: "Microchip Technology Inc.", - [3]byte{84, 17, 47}: "Sulzer Pump Solutions Finland Oy", - [3]byte{84, 17, 95}: "Atamo Pty Ltd", - [3]byte{84, 19, 121}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{84, 20, 115}: "Wingtech Group (HongKong)Limited", - [3]byte{84, 20, 253}: "Orbbec 3D Technology International", - [3]byte{84, 25, 200}: "vivo Mobile Communication Co., Ltd.", - [3]byte{84, 27, 93}: "Techno-Innov", - [3]byte{84, 29, 251}: "Freestyle Energy Ltd", - [3]byte{84, 30, 86}: "Juniper Networks", - [3]byte{84, 31, 213}: "Advantage Electronics", - [3]byte{84, 32, 24}: "Tely Labs", - [3]byte{84, 33, 96}: "Resolution Products", - [3]byte{84, 34, 248}: "zte corporation", - [3]byte{84, 37, 234}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{84, 38, 150}: "Apple, Inc.", - [3]byte{84, 39, 30}: "AzureWave Technology Inc.", - [3]byte{84, 39, 88}: "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.", - [3]byte{84, 39, 108}: "Jiangsu Houge Technology Corp.", - [3]byte{84, 42, 156}: "LSY Defense, LLC.", - [3]byte{84, 42, 162}: "Alpha Networks Inc.", - [3]byte{84, 43, 87}: "Night Owl SP", - [3]byte{84, 44, 234}: "PROTECTRON", - [3]byte{84, 47, 137}: "Euclid Laboratories, Inc.", - [3]byte{84, 47, 138}: "TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO", - [3]byte{84, 49, 49}: "Raster Vision Ltd", - [3]byte{84, 51, 203}: "Apple, Inc.", - [3]byte{84, 53, 48}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{84, 53, 223}: "Symeo GmbH", - [3]byte{84, 54, 155}: "1Verge Internet Technology (Beijing) Co., Ltd.", - [3]byte{84, 57, 104}: "Edgewater Networks Inc", - [3]byte{84, 57, 223}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{84, 59, 48}: "duagon AG", - [3]byte{84, 61, 55}: "Ruckus Wireless", - [3]byte{84, 64, 173}: "Samsung Electronics Co.,Ltd", - [3]byte{84, 66, 73}: "Sony Corporation", - [3]byte{84, 68, 8}: "Nokia Corporation", - [3]byte{84, 70, 107}: "Shenzhen CZTIC Electronic Technology Co., Ltd", - [3]byte{84, 72, 156}: "CDOUBLES ELECTRONICS CO. LTD.", - [3]byte{84, 74, 0}: "Cisco Systems, Inc", - [3]byte{84, 74, 5}: "wenglor sensoric gmbh", - [3]byte{84, 74, 22}: "Texas Instruments", - [3]byte{84, 75, 140}: "Juniper Networks", - [3]byte{84, 78, 69}: "Private", - [3]byte{84, 78, 144}: "Apple, Inc.", - [3]byte{84, 81, 27}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{84, 81, 70}: "AMG Systems Ltd.", - [3]byte{84, 83, 237}: "Sony Corporation", - [3]byte{84, 84, 20}: "Digital RF Corea, Inc", - [3]byte{84, 84, 207}: "PROBEDIGITAL CO.,LTD", - [3]byte{84, 90, 166}: "Espressif Inc.", - [3]byte{84, 94, 189}: "NL Technologies", - [3]byte{84, 95, 169}: "Teracom Limited", - [3]byte{84, 96, 9}: "Google, Inc.", - [3]byte{84, 97, 114}: "ZODIAC AEROSPACE SAS", - [3]byte{84, 97, 234}: "Zaplox AB", - [3]byte{84, 100, 217}: "Sagemcom Broadband SAS", - [3]byte{84, 101, 222}: "ARRIS Group, Inc.", - [3]byte{84, 102, 108}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{84, 103, 81}: "Compal Broadband Networks, Inc.", - [3]byte{84, 108, 14}: "Texas Instruments", - [3]byte{84, 109, 82}: "TOPVIEW OPTRONICS CORP.", - [3]byte{84, 114, 79}: "Apple, Inc.", - [3]byte{84, 115, 152}: "Toyo Electronics Corporation", - [3]byte{84, 116, 230}: "Webtech Wireless", - [3]byte{84, 117, 149}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{84, 117, 208}: "Cisco Systems, Inc", - [3]byte{84, 120, 26}: "Cisco Systems, Inc", - [3]byte{84, 121, 117}: "Nokia Corporation", - [3]byte{84, 122, 82}: "CTE International srl", - [3]byte{84, 124, 105}: "Cisco Systems, Inc", - [3]byte{84, 125, 205}: "Texas Instruments", - [3]byte{84, 127, 84}: "INGENICO", - [3]byte{84, 127, 168}: "TELCO systems, s.r.o.", - [3]byte{84, 127, 238}: "Cisco Systems, Inc", - [3]byte{84, 129, 173}: "Eagle Research Corporation", - [3]byte{84, 132, 123}: "Digital Devices GmbH", - [3]byte{84, 136, 14}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{84, 137, 34}: "Zelfy Inc", - [3]byte{84, 137, 152}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{84, 140, 160}: "Liteon Technology Corporation", - [3]byte{84, 146, 190}: "Samsung Electronics Co.,Ltd", - [3]byte{84, 147, 89}: "SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.", - [3]byte{84, 148, 120}: "Silvershore Technology Partners", - [3]byte{84, 154, 17}: "IEEE Registration Authority", - [3]byte{84, 154, 22}: "Uzushio Electric Co.,Ltd.", - [3]byte{84, 154, 76}: "GUANGDONG HOMECARE TECHNOLOGY CO.,LTD.", - [3]byte{84, 155, 18}: "Samsung Electronics Co.,Ltd", - [3]byte{84, 157, 133}: "EnerAccess inc", - [3]byte{84, 159, 19}: "Apple, Inc.", - [3]byte{84, 159, 53}: "Dell Inc.", - [3]byte{84, 160, 79}: "t-mac Technologies Ltd", - [3]byte{84, 160, 80}: "ASUSTek COMPUTER INC.", - [3]byte{84, 162, 116}: "Cisco Systems, Inc", - [3]byte{84, 163, 27}: "Shenzhen Linkworld Technology Co,.LTD", - [3]byte{84, 163, 250}: "BQT Solutions (Australia)Pty Ltd", - [3]byte{84, 165, 27}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{84, 165, 75}: "NSC Communications Siberia Ltd", - [3]byte{84, 166, 25}: "Alcatel-Lucent Shanghai Bell Co., Ltd", - [3]byte{84, 169, 212}: "Minibar Systems", - [3]byte{84, 171, 58}: "QUANTA COMPUTER INC.", - [3]byte{84, 174, 39}: "Apple, Inc.", - [3]byte{84, 177, 33}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{84, 181, 108}: "Xi'an NovaStar Tech Co., Ltd", - [3]byte{84, 182, 32}: "SUHDOL E&C Co.Ltd.", - [3]byte{84, 183, 83}: "Hunan Fenghui Yinjia Science And Technology Co.,Ltd", - [3]byte{84, 184, 10}: "D-Link International", - [3]byte{84, 189, 121}: "Samsung Electronics Co.,Ltd", - [3]byte{84, 190, 83}: "zte corporation", - [3]byte{84, 190, 247}: "PEGATRON CORPORATION", - [3]byte{84, 196, 21}: "Hangzhou Hikvision Digital Technology Co.,Ltd.", - [3]byte{84, 197, 122}: "Sunnovo International Limited", - [3]byte{84, 200, 15}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{84, 201, 223}: "FN-LINK TECHNOLOGY LIMITED", - [3]byte{84, 205, 16}: "Panasonic Mobile Communications Co.,Ltd.", - [3]byte{84, 205, 167}: "Fujian Shenzhou Electronic Co.,Ltd", - [3]byte{84, 205, 238}: "ShenZhen Apexis Electronic Co.,Ltd", - [3]byte{84, 208, 180}: "Xiamen Four-Faith Communication Technology Co.,Ltd", - [3]byte{84, 208, 237}: "AXIM Communications", - [3]byte{84, 209, 99}: "MAX-TECH,INC", - [3]byte{84, 209, 176}: "Universal Laser Systems, Inc", - [3]byte{84, 210, 114}: "Nuki Home Solutions GmbH", - [3]byte{84, 212, 111}: "Cisco SPVTG", - [3]byte{84, 215, 81}: "Proximus", - [3]byte{84, 217, 228}: "BRILLIANTTS CO., LTD", - [3]byte{84, 220, 29}: "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd", - [3]byte{84, 223, 0}: "Ulterius Technologies, LLC", - [3]byte{84, 223, 36}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{84, 223, 99}: "Intrakey technologies GmbH", - [3]byte{84, 224, 50}: "Juniper Networks", - [3]byte{84, 224, 97}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD", - [3]byte{84, 225, 64}: "INGENICO", - [3]byte{84, 225, 173}: "LCFC(HeFei) Electronics Technology co., ltd", - [3]byte{84, 226, 200}: "Dongguan Aoyuan Electronics Technology Co., Ltd", - [3]byte{84, 226, 224}: "ARRIS Group, Inc.", - [3]byte{84, 227, 176}: "JVL Industri Elektronik", - [3]byte{84, 227, 246}: "Alcatel-Lucent", - [3]byte{84, 228, 58}: "Apple, Inc.", - [3]byte{84, 228, 189}: "FN-LINK TECHNOLOGY LIMITED", - [3]byte{84, 230, 63}: "ShenZhen LingKeWeiEr Technology Co., Ltd.", - [3]byte{84, 230, 252}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{84, 234, 168}: "Apple, Inc.", - [3]byte{84, 237, 163}: "Navdy, Inc.", - [3]byte{84, 238, 117}: "Wistron InfoComm(Kunshan)Co.,Ltd.", - [3]byte{84, 239, 146}: "Shenzhen Elink Technology Co., LTD", - [3]byte{84, 239, 254}: "Fullpower Technologies, Inc.", - [3]byte{84, 242, 1}: "Samsung Electronics Co.,Ltd", - [3]byte{84, 245, 182}: "ORIENTAL PACIFIC INTERNATIONAL LIMITED", - [3]byte{84, 246, 102}: "Berthold Technologies GmbH and Co.KG", - [3]byte{84, 246, 197}: "FUJIAN STAR-NET COMMUNICATION CO.,LTD", - [3]byte{84, 248, 118}: "ABB AG", - [3]byte{84, 250, 62}: "Samsung Electronics Co.,Ltd", - [3]byte{84, 250, 150}: "Nokia", - [3]byte{84, 251, 88}: "WISEWARE, Lda", - [3]byte{84, 253, 191}: "Scheidt & Bachmann GmbH", - [3]byte{84, 255, 130}: "Davit Solution co.", - [3]byte{84, 255, 207}: "Mopria Alliance", - [3]byte{88, 0, 187}: "Juniper Networks", - [3]byte{88, 0, 227}: "Liteon Technology Corporation", - [3]byte{88, 4, 84}: "ICOMM HK LIMITED", - [3]byte{88, 4, 203}: "Tianjin Huisun Technology Co.,Ltd.", - [3]byte{88, 5, 40}: "LABRIS NETWORKS", - [3]byte{88, 5, 86}: "Elettronica GF S.r.L.", - [3]byte{88, 8, 250}: "Fiber Optic & telecommunication INC.", - [3]byte{88, 9, 67}: "Private", - [3]byte{88, 9, 229}: "Kivic Inc.", - [3]byte{88, 10, 32}: "Cisco Systems, Inc", - [3]byte{88, 16, 140}: "Intelbras", - [3]byte{88, 18, 67}: "AcSiP Technology Corp.", - [3]byte{88, 22, 38}: "Avaya Inc", - [3]byte{88, 23, 12}: "Sony Mobile Communications AB", - [3]byte{88, 25, 248}: "ARRIS Group, Inc.", - [3]byte{88, 28, 189}: "Affinegy", - [3]byte{88, 29, 145}: "Advanced Mobile Telecom co.,ltd.", - [3]byte{88, 31, 40}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{88, 31, 103}: "Open-m technology limited", - [3]byte{88, 31, 170}: "Apple, Inc.", - [3]byte{88, 31, 239}: "Tuttnaer LTD", - [3]byte{88, 32, 177}: "Hewlett Packard", - [3]byte{88, 33, 54}: "KMB systems, s.r.o.", - [3]byte{88, 35, 140}: "Technicolor CH USA Inc.", - [3]byte{88, 42, 247}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{88, 43, 219}: "Pax AB", - [3]byte{88, 46, 254}: "Lighting Science Group", - [3]byte{88, 47, 66}: "Universal Electric Corporation", - [3]byte{88, 49, 18}: "DRUST", - [3]byte{88, 50, 119}: "Reliance Communications LLC", - [3]byte{88, 52, 59}: "Glovast Technology Ltd.", - [3]byte{88, 53, 217}: "Cisco Systems, Inc", - [3]byte{88, 56, 121}: "RICOH COMPANY, LTD.", - [3]byte{88, 60, 198}: "Omneality Ltd.", - [3]byte{88, 63, 84}: "LG Electronics (Mobile Communications)", - [3]byte{88, 64, 78}: "Apple, Inc.", - [3]byte{88, 66, 228}: "Baxter International Inc", - [3]byte{88, 68, 152}: "Xiaomi Communications Co Ltd", - [3]byte{88, 70, 143}: "Koncar Electronics and Informatics", - [3]byte{88, 70, 225}: "Baxter International Inc", - [3]byte{88, 71, 4}: "Shenzhen Webridge Technology Co.,Ltd", - [3]byte{88, 72, 34}: "Sony Mobile Communications AB", - [3]byte{88, 72, 192}: "COFLEC", - [3]byte{88, 73, 37}: "E3 Enterprise", - [3]byte{88, 73, 59}: "Palo Alto Networks", - [3]byte{88, 73, 186}: "Chitai Electronic Corp.", - [3]byte{88, 76, 25}: "Chongqing Guohong Technology Development Company Limited", - [3]byte{88, 76, 238}: "Digital One Technologies, Limited", - [3]byte{88, 80, 118}: "Linear Equipamentos Eletronicos SA", - [3]byte{88, 80, 171}: "TLS Corporation", - [3]byte{88, 80, 230}: "Best Buy Corporation", - [3]byte{88, 82, 138}: "Mitsubishi Electric Corporation", - [3]byte{88, 83, 192}: "Beijing Guang Runtong Technology Development Company co.,Ltd", - [3]byte{88, 85, 202}: "Apple, Inc.", - [3]byte{88, 86, 232}: "ARRIS Group, Inc.", - [3]byte{88, 87, 13}: "Danfoss Solar Inverters", - [3]byte{88, 96, 95}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{88, 97, 99}: "Quantum Networks (SG) Pte. Ltd.", - [3]byte{88, 99, 86}: "FN-LINK TECHNOLOGY LIMITED", - [3]byte{88, 99, 154}: "TPL SYSTEMES", - [3]byte{88, 101, 230}: "INFOMARK CO., LTD.", - [3]byte{88, 102, 186}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{88, 103, 26}: "Barnes&Noble", - [3]byte{88, 103, 127}: "Clare Controls Inc.", - [3]byte{88, 104, 93}: "Tempo Australia Pty Ltd", - [3]byte{88, 105, 108}: "Ruijie Networks Co.,LTD", - [3]byte{88, 105, 249}: "Fusion Transactive Ltd.", - [3]byte{88, 106, 177}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{88, 109, 143}: "Cisco-Linksys, LLC", - [3]byte{88, 110, 214}: "Private", - [3]byte{88, 112, 198}: "Shanghai Xiaoyi Technology Co., Ltd.", - [3]byte{88, 117, 33}: "CJSC RTSoft", - [3]byte{88, 118, 117}: "Beijing ECHO Technologies Co.,Ltd", - [3]byte{88, 118, 197}: "DIGI I'S LTD", - [3]byte{88, 122, 77}: "Stonesoft Corporation", - [3]byte{88, 122, 98}: "Texas Instruments", - [3]byte{88, 123, 233}: "AirPro Technology India Pvt. Ltd", - [3]byte{88, 126, 97}: "Qingdao Hisense Communications Co.,Ltd.", - [3]byte{88, 127, 87}: "Apple, Inc.", - [3]byte{88, 127, 102}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{88, 127, 183}: "SONAR INDUSTRIAL CO., LTD.", - [3]byte{88, 127, 200}: "S2M", - [3]byte{88, 130, 29}: "H. Schomäcker GmbH", - [3]byte{88, 130, 168}: "Microsoft", - [3]byte{88, 132, 228}: "IP500 Alliance e.V.", - [3]byte{88, 133, 110}: "QSC AG", - [3]byte{88, 135, 76}: "LITE-ON CLEAN ENERGY TECHNOLOGY CORP.", - [3]byte{88, 135, 226}: "Shenzhen Coship Electronics Co., Ltd.", - [3]byte{88, 138, 90}: "Dell Inc.", - [3]byte{88, 139, 243}: "Zyxel Communications Corporation", - [3]byte{88, 141, 9}: "Cisco Systems, Inc", - [3]byte{88, 141, 100}: "Xi'an Clevbee Technology Co.,Ltd", - [3]byte{88, 144, 67}: "Sagemcom Broadband SAS", - [3]byte{88, 145, 207}: "Intel Corporate", - [3]byte{88, 146, 13}: "Kinetic Avionics Limited", - [3]byte{88, 147, 150}: "Ruckus Wireless", - [3]byte{88, 148, 107}: "Intel Corporate", - [3]byte{88, 148, 207}: "Vertex Standard LMR, Inc.", - [3]byte{88, 151, 30}: "Cisco Systems, Inc", - [3]byte{88, 151, 189}: "Cisco Systems, Inc", - [3]byte{88, 152, 53}: "Technicolor", - [3]byte{88, 152, 111}: "Revolution Display", - [3]byte{88, 155, 11}: "Shineway Technologies, Inc.", - [3]byte{88, 156, 252}: "FreeBSD Foundation", - [3]byte{88, 160, 203}: "TrackNet, Inc", - [3]byte{88, 162, 181}: "LG Electronics (Mobile Communications)", - [3]byte{88, 167, 111}: "iD corporation", - [3]byte{88, 168, 57}: "Intel Corporate", - [3]byte{88, 172, 120}: "Cisco Systems, Inc", - [3]byte{88, 176, 53}: "Apple, Inc.", - [3]byte{88, 176, 212}: "ZuniData Systems Inc.", - [3]byte{88, 180, 45}: "YSTen Technology Co.,Ltd", - [3]byte{88, 182, 51}: "Ruckus Wireless", - [3]byte{88, 185, 97}: "SOLEM Electronique", - [3]byte{88, 185, 225}: "Crystalfontz America, Inc.", - [3]byte{88, 188, 39}: "Cisco Systems, Inc", - [3]byte{88, 188, 143}: "Cognitive Systems Corp.", - [3]byte{88, 189, 163}: "Nintendo Co., Ltd.", - [3]byte{88, 189, 249}: "Sigrand", - [3]byte{88, 191, 234}: "Cisco Systems, Inc", - [3]byte{88, 193, 122}: "Cambium Networks Limited", - [3]byte{88, 194, 50}: "NEC Corporation", - [3]byte{88, 195, 139}: "Samsung Electronics Co.,Ltd", - [3]byte{88, 197, 131}: "ITEL MOBILE LIMITED", - [3]byte{88, 197, 203}: "Samsung Electronics Co.,Ltd", - [3]byte{88, 201, 53}: "Chiun Mai Communication Systems, Inc", - [3]byte{88, 207, 75}: "Lufkin Industries", - [3]byte{88, 208, 113}: "BW Broadcast", - [3]byte{88, 208, 143}: "IEEE 1904.1 Working Group", - [3]byte{88, 214, 122}: "TCPlink", - [3]byte{88, 214, 211}: "Dairy Cheq Inc", - [3]byte{88, 217, 213}: "Tenda Technology Co.,Ltd.Dongguan branch", - [3]byte{88, 219, 141}: "Fast Co., Ltd.", - [3]byte{88, 220, 109}: "Exceptional Innovation, Inc.", - [3]byte{88, 224, 44}: "Micro Technic A/S", - [3]byte{88, 225, 108}: "Ying Hua Information Technology (Shanghai)Co., LTD", - [3]byte{88, 226, 143}: "Apple, Inc.", - [3]byte{88, 227, 38}: "Compass Technologies Inc.", - [3]byte{88, 228, 118}: "CENTRON COMMUNICATIONS TECHNOLOGIES FUJIAN CO.,LTD", - [3]byte{88, 230, 54}: "EVRsafe Technologies", - [3]byte{88, 231, 71}: "Deltanet AG", - [3]byte{88, 232, 8}: "AUTONICS CORPORATION", - [3]byte{88, 232, 118}: "IEEE Registration Authority", - [3]byte{88, 235, 20}: "Proteus Digital Health", - [3]byte{88, 236, 225}: "Newport Corporation", - [3]byte{88, 238, 206}: "Icon Time Systems", - [3]byte{88, 239, 104}: "Belkin International Inc.", - [3]byte{88, 241, 2}: "BLU Products Inc.", - [3]byte{88, 243, 135}: "HCCP", - [3]byte{88, 243, 156}: "Cisco Systems, Inc", - [3]byte{88, 244, 150}: "Source Chain", - [3]byte{88, 246, 123}: "Xia Men UnionCore Technology LTD.", - [3]byte{88, 246, 191}: "Kyoto University", - [3]byte{88, 249, 142}: "SECUDOS GmbH", - [3]byte{88, 251, 132}: "Intel Corporate", - [3]byte{88, 252, 115}: "Arria Live Media, Inc.", - [3]byte{88, 252, 219}: "IEEE Registration Authority", - [3]byte{88, 253, 32}: "Bravida Sakerhet AB", - [3]byte{92, 2, 106}: "Applied Vision Corporation", - [3]byte{92, 3, 57}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{92, 7, 111}: "Thought Creator", - [3]byte{92, 9, 121}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{92, 10, 91}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{92, 12, 14}: "Guizhou Huaxintong Semiconductor Technology Co Ltd", - [3]byte{92, 12, 187}: "CELIZION Inc.", - [3]byte{92, 14, 139}: "Extreme Networks, Inc.", - [3]byte{92, 17, 147}: "Seal One AG", - [3]byte{92, 20, 55}: "Thyssenkrupp Aufzugswerke GmbH", - [3]byte{92, 21, 21}: "ADVAN", - [3]byte{92, 21, 225}: "AIDC TECHNOLOGY (S) PTE LTD", - [3]byte{92, 22, 199}: "Big Switch Networks", - [3]byte{92, 23, 55}: "I-View Now, LLC.", - [3]byte{92, 23, 211}: "LGE", - [3]byte{92, 24, 181}: "Talon Communications", - [3]byte{92, 26, 111}: "Cambridge Industries(Group) Co.,Ltd.", - [3]byte{92, 32, 208}: "Asoni Communication Co., Ltd.", - [3]byte{92, 34, 196}: "DAE EUN ELETRONICS CO., LTD", - [3]byte{92, 36, 67}: "O-Sung Telecom Co., Ltd.", - [3]byte{92, 36, 121}: "Baltech AG", - [3]byte{92, 37, 76}: "Avire Global Pte Ltd", - [3]byte{92, 38, 10}: "Dell Inc.", - [3]byte{92, 42, 239}: "Open Access Pty Ltd", - [3]byte{92, 43, 245}: "Vivint Wireless Inc.", - [3]byte{92, 46, 89}: "Samsung Electronics Co.,Ltd", - [3]byte{92, 46, 210}: "ABC(XiSheng) Electronics Co.,Ltd", - [3]byte{92, 49, 62}: "Texas Instruments", - [3]byte{92, 51, 39}: "Spazio Italia srl", - [3]byte{92, 51, 92}: "Swissphone Telecom AG", - [3]byte{92, 51, 142}: "Alpha Networks Inc.", - [3]byte{92, 53, 59}: "Compal Broadband Networks, Inc.", - [3]byte{92, 53, 218}: "There Corporation Oy", - [3]byte{92, 54, 184}: "TCL King Electrical Appliances (Huizhou) Co., Ltd", - [3]byte{92, 56, 224}: "Shanghai Super Electronics Technology Co.,LTD", - [3]byte{92, 59, 53}: "Gehirn Inc.", - [3]byte{92, 60, 39}: "Samsung Electronics Co.,Ltd", - [3]byte{92, 64, 88}: "Jefferson Audio Video Systems, Inc.", - [3]byte{92, 65, 231}: "Wiatec International Ltd.", - [3]byte{92, 67, 210}: "HAZEMEYER", - [3]byte{92, 69, 39}: "Juniper Networks", - [3]byte{92, 73, 121}: "AVM Audiovisuelles Marketing und Computersysteme GmbH", - [3]byte{92, 73, 125}: "Samsung Electronics Co.,Ltd", - [3]byte{92, 74, 31}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD", - [3]byte{92, 74, 38}: "Enguity Technology Corp", - [3]byte{92, 76, 169}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{92, 80, 21}: "Cisco Systems, Inc", - [3]byte{92, 81, 79}: "Intel Corporate", - [3]byte{92, 81, 129}: "Samsung Electronics Co.,Ltd", - [3]byte{92, 81, 136}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{92, 82, 30}: "Nintendo Co.,Ltd", - [3]byte{92, 84, 109}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{92, 86, 237}: "3pleplay Electronics Private Limited", - [3]byte{92, 87, 26}: "ARRIS Group, Inc.", - [3]byte{92, 87, 200}: "Nokia Corporation", - [3]byte{92, 88, 25}: "Jingsheng Technology Co., Ltd.", - [3]byte{92, 89, 72}: "Apple, Inc.", - [3]byte{92, 91, 53}: "Mist Systems, Inc.", - [3]byte{92, 91, 194}: "YIK Corporation", - [3]byte{92, 94, 171}: "Juniper Networks", - [3]byte{92, 95, 103}: "Intel Corporate", - [3]byte{92, 99, 191}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{92, 103, 118}: "IDS Imaging Development Systems GmbH", - [3]byte{92, 105, 132}: "NUVICO", - [3]byte{92, 106, 125}: "KENTKART EGE ELEKTRONIK SAN. VE TIC. LTD. STI.", - [3]byte{92, 106, 128}: "Zyxel Communications Corporation", - [3]byte{92, 107, 50}: "Texas Instruments", - [3]byte{92, 107, 79}: "Hello Inc.", - [3]byte{92, 109, 32}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{92, 111, 79}: "S.A. SISTEL", - [3]byte{92, 112, 163}: "LG Electronics (Mobile Communications)", - [3]byte{92, 119, 87}: "Haivision Network Video", - [3]byte{92, 119, 118}: "TCT mobile ltd", - [3]byte{92, 125, 94}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{92, 129, 167}: "Network Devices Pty Ltd", - [3]byte{92, 131, 143}: "Cisco Systems, Inc", - [3]byte{92, 132, 134}: "Brightsource Industries Israel LTD", - [3]byte{92, 134, 19}: "Beijing Zhoenet Technology Co., Ltd", - [3]byte{92, 134, 74}: "Secret Labs LLC", - [3]byte{92, 134, 92}: "Samsung Electronics Co.,Ltd", - [3]byte{92, 134, 193}: "DONGGUAN SOLUM ELECTRONICS CO.,LTD", - [3]byte{92, 135, 120}: "Cybertelbridge co.,ltd", - [3]byte{92, 137, 154}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{92, 137, 212}: "Beijing Banner Electric Co.,Ltd", - [3]byte{92, 138, 56}: "Hewlett Packard", - [3]byte{92, 141, 45}: "Shanghai Wellpay Information Technology Co., Ltd", - [3]byte{92, 141, 78}: "Apple, Inc.", - [3]byte{92, 143, 224}: "ARRIS Group, Inc.", - [3]byte{92, 147, 162}: "Liteon Technology Corporation", - [3]byte{92, 149, 174}: "Apple, Inc.", - [3]byte{92, 150, 86}: "AzureWave Technology Inc.", - [3]byte{92, 150, 106}: "RTNET", - [3]byte{92, 150, 157}: "Apple, Inc.", - [3]byte{92, 151, 243}: "Apple, Inc.", - [3]byte{92, 153, 96}: "Samsung Electronics Co.,Ltd", - [3]byte{92, 154, 216}: "FUJITSU LIMITED", - [3]byte{92, 161, 118}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD", - [3]byte{92, 161, 120}: "TableTop Media (dba Ziosk)", - [3]byte{92, 163, 157}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{92, 163, 235}: "Lokel s.r.o.", - [3]byte{92, 164, 138}: "Cisco Systems, Inc", - [3]byte{92, 168, 106}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{92, 169, 51}: "Luma Home", - [3]byte{92, 170, 253}: "Sonos, Inc.", - [3]byte{92, 172, 76}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{92, 173, 118}: "Shenzhen TCL New Technology Co., Ltd", - [3]byte{92, 173, 207}: "Apple, Inc.", - [3]byte{92, 175, 6}: "LG Electronics (Mobile Communications)", - [3]byte{92, 176, 102}: "ARRIS Group, Inc.", - [3]byte{92, 179, 149}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{92, 180, 62}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{92, 181, 36}: "Sony Mobile Communications AB", - [3]byte{92, 181, 89}: "CNEX Labs", - [3]byte{92, 182, 204}: "NovaComm Technologies Inc.", - [3]byte{92, 184, 203}: "Allis Communications", - [3]byte{92, 185, 1}: "Hewlett Packard", - [3]byte{92, 186, 55}: "Microsoft Corporation", - [3]byte{92, 189, 158}: "HONGKONG MIRACLE EAGLE TECHNOLOGY(GROUP) LIMITED", - [3]byte{92, 194, 19}: "Fr. Sauter AG", - [3]byte{92, 195, 7}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{92, 197, 212}: "Intel Corporate", - [3]byte{92, 198, 208}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd", - [3]byte{92, 198, 233}: "Edifier International", - [3]byte{92, 199, 215}: "AZROAD TECHNOLOGY COMPANY LIMITED", - [3]byte{92, 201, 211}: "PALLADIUM ENERGY ELETRONICA DA AMAZONIA LTDA", - [3]byte{92, 202, 26}: "Microsoft Mobile Oy", - [3]byte{92, 202, 50}: "Theben AG", - [3]byte{92, 204, 160}: "Gridwiz Inc.", - [3]byte{92, 204, 255}: "Techroutes Network Pvt Ltd", - [3]byte{92, 206, 173}: "CDYNE Corporation", - [3]byte{92, 207, 127}: "Espressif Inc.", - [3]byte{92, 209, 53}: "Xtreme Power Systems", - [3]byte{92, 210, 228}: "Intel Corporate", - [3]byte{92, 212, 27}: "UCZOON Technology Co., LTD", - [3]byte{92, 212, 171}: "Zektor", - [3]byte{92, 214, 31}: "Qardio, Inc", - [3]byte{92, 217, 152}: "D-Link Corporation", - [3]byte{92, 218, 212}: "Murata Manufacturing Co., Ltd.", - [3]byte{92, 220, 150}: "Arcadyan Technology Corporation", - [3]byte{92, 221, 112}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{92, 224, 197}: "Intel Corporate", - [3]byte{92, 224, 202}: "FeiTian United (Beijing) System Technology Co., Ltd.", - [3]byte{92, 224, 246}: "NIC.br- Nucleo de Informacao e Coordenacao do Ponto BR", - [3]byte{92, 226, 35}: "Delphin Technology AG", - [3]byte{92, 226, 134}: "Nortel Networks", - [3]byte{92, 226, 140}: "Zyxel Communications Corporation", - [3]byte{92, 226, 244}: "AcSiP Technology Corp.", - [3]byte{92, 227, 14}: "ARRIS Group, Inc.", - [3]byte{92, 227, 182}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{92, 231, 191}: "New Singularity International Technical Development Co.,Ltd", - [3]byte{92, 232, 183}: "Oraimo Technology Limited", - [3]byte{92, 232, 235}: "Samsung Electronics Co.,Ltd", - [3]byte{92, 234, 29}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{92, 235, 78}: "R. STAHL HMI Systems GmbH", - [3]byte{92, 235, 104}: "Cheerstar Technology Co., Ltd", - [3]byte{92, 238, 121}: "Global Digitech Co LTD", - [3]byte{92, 242, 7}: "Speco Technologies", - [3]byte{92, 242, 134}: "IEEE Registration Authority", - [3]byte{92, 243, 112}: "CC&C Technologies, Inc", - [3]byte{92, 243, 252}: "IBM Corp", - [3]byte{92, 244, 171}: "Zyxel Communications Corporation", - [3]byte{92, 245, 13}: "Institute of microelectronic applications", - [3]byte{92, 245, 218}: "Apple, Inc.", - [3]byte{92, 246, 220}: "Samsung Electronics Co.,Ltd", - [3]byte{92, 247, 195}: "SYNTECH (HK) TECHNOLOGY LIMITED", - [3]byte{92, 247, 230}: "Apple, Inc.", - [3]byte{92, 248, 33}: "Texas Instruments", - [3]byte{92, 248, 161}: "Murata Manufacturing Co., Ltd.", - [3]byte{92, 249, 56}: "Apple, Inc.", - [3]byte{92, 249, 106}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{92, 249, 221}: "Dell Inc.", - [3]byte{92, 249, 240}: "Atomos Engineering P/L", - [3]byte{92, 252, 102}: "Cisco Systems, Inc", - [3]byte{92, 255, 53}: "Wistron Corporation", - [3]byte{92, 255, 255}: "Shenzhen Kezhonglong Optoelectronic Technology Co., Ltd", - [3]byte{96, 1, 148}: "Espressif Inc.", - [3]byte{96, 2, 146}: "PEGATRON CORPORATION", - [3]byte{96, 2, 180}: "Wistron Neweb Corporation", - [3]byte{96, 3, 8}: "Apple, Inc.", - [3]byte{96, 3, 71}: "Billion Electric Co. Ltd.", - [3]byte{96, 4, 23}: "POSBANK CO.,LTD", - [3]byte{96, 8, 16}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{96, 8, 55}: "ivvi Scientific(Nanchang)Co.Ltd", - [3]byte{96, 11, 3}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{96, 15, 119}: "SilverPlus, Inc", - [3]byte{96, 17, 153}: "Siama Systems Inc", - [3]byte{96, 18, 131}: "TSB REAL TIME LOCATION SYSTEMS S.L.", - [3]byte{96, 18, 139}: "CANON INC.", - [3]byte{96, 20, 102}: "zte corporation", - [3]byte{96, 20, 179}: "CyberTAN Technology Inc.", - [3]byte{96, 21, 199}: "IdaTech", - [3]byte{96, 24, 3}: "Daikin Air-conditioning (Shanghai) Co., Ltd.", - [3]byte{96, 24, 46}: "ShenZhen Protruly Electronic Ltd co.", - [3]byte{96, 24, 136}: "zte corporation", - [3]byte{96, 25, 12}: "RRAMAC", - [3]byte{96, 25, 41}: "VOLTRONIC POWER TECHNOLOGY(SHENZHEN) CORP.", - [3]byte{96, 25, 112}: "HUIZHOU QIAOXING ELECTRONICS TECHNOLOGY CO., LTD.", - [3]byte{96, 25, 113}: "ARRIS Group, Inc.", - [3]byte{96, 29, 15}: "Midnite Solar", - [3]byte{96, 30, 2}: "EltexAlatau", - [3]byte{96, 33, 1}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{96, 33, 3}: "I4VINE, INC", - [3]byte{96, 33, 192}: "Murata Manufacturing Co., Ltd.", - [3]byte{96, 36, 193}: "Jiangsu Zhongxun Electronic Technology Co., Ltd", - [3]byte{96, 39, 28}: "VIDEOR E. Hartig GmbH", - [3]byte{96, 42, 84}: "CardioTek B.V.", - [3]byte{96, 42, 208}: "Cisco SPVTG", - [3]byte{96, 46, 32}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{96, 49, 59}: "Sunnovo International Limited", - [3]byte{96, 49, 151}: "Zyxel Communications Corporation", - [3]byte{96, 50, 240}: "Mplus technology", - [3]byte{96, 51, 75}: "Apple, Inc.", - [3]byte{96, 53, 83}: "Buwon Technology", - [3]byte{96, 54, 150}: "The Sapling Company", - [3]byte{96, 54, 221}: "Intel Corporate", - [3]byte{96, 56, 14}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{96, 56, 224}: "Belkin International Inc.", - [3]byte{96, 57, 31}: "ABB Ltd", - [3]byte{96, 61, 38}: "Technicolor CH USA Inc.", - [3]byte{96, 62, 123}: "Gafachi, Inc.", - [3]byte{96, 62, 202}: "Cambridge Medical Robotics Ltd", - [3]byte{96, 63, 197}: "COX CO., LTD", - [3]byte{96, 66, 127}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD", - [3]byte{96, 68, 245}: "Easy Digital Ltd.", - [3]byte{96, 69, 94}: "Liptel s.r.o.", - [3]byte{96, 69, 189}: "Microsoft", - [3]byte{96, 69, 203}: "ASUSTek COMPUTER INC.", - [3]byte{96, 70, 22}: "XIAMEN VANN INTELLIGENT CO., LTD", - [3]byte{96, 71, 98}: "Beijing Sensoro Technology Co.,Ltd.", - [3]byte{96, 71, 212}: "FORICS Electronic Technology Co., Ltd.", - [3]byte{96, 72, 38}: "Newbridge Technologies Int. Ltd.", - [3]byte{96, 73, 193}: "Avaya Inc", - [3]byte{96, 74, 28}: "SUYIN Corporation", - [3]byte{96, 75, 170}: "Private", - [3]byte{96, 80, 193}: "Kinetek Sports", - [3]byte{96, 81, 44}: "TCT mobile ltd", - [3]byte{96, 82, 208}: "FACTS Engineering", - [3]byte{96, 83, 23}: "Sandstone Technologies", - [3]byte{96, 84, 100}: "Eyedro Green Solutions Inc.", - [3]byte{96, 87, 24}: "Intel Corporate", - [3]byte{96, 91, 180}: "AzureWave Technology Inc.", - [3]byte{96, 96, 31}: "SZ DJI TECHNOLOGY CO.,LTD", - [3]byte{96, 99, 249}: "Ciholas, Inc.", - [3]byte{96, 99, 253}: "Transcend Communication Beijing Co.,Ltd.", - [3]byte{96, 100, 5}: "Texas Instruments", - [3]byte{96, 100, 83}: "AOD Co.,Ltd.", - [3]byte{96, 100, 161}: "RADiflow Ltd.", - [3]byte{96, 103, 32}: "Intel Corporate", - [3]byte{96, 105, 68}: "Apple, Inc.", - [3]byte{96, 105, 155}: "isepos GmbH", - [3]byte{96, 107, 189}: "Samsung Electronics Co.,Ltd", - [3]byte{96, 108, 102}: "Intel Corporate", - [3]byte{96, 109, 60}: "Luxshare Precision Industry Company Limited", - [3]byte{96, 109, 199}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{96, 114, 11}: "BLU Products Inc", - [3]byte{96, 115, 92}: "Cisco Systems, Inc", - [3]byte{96, 115, 188}: "zte corporation", - [3]byte{96, 116, 141}: "Atmaca Elektronik", - [3]byte{96, 118, 136}: "Velodyne", - [3]byte{96, 119, 226}: "Samsung Electronics Co.,Ltd", - [3]byte{96, 126, 221}: "Microsoft Mobile Oy", - [3]byte{96, 129, 43}: "Custom Control Concepts", - [3]byte{96, 129, 249}: "Helium Systems, Inc", - [3]byte{96, 131, 52}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{96, 131, 178}: "GkWare e.K.", - [3]byte{96, 132, 59}: "Soladigm, Inc.", - [3]byte{96, 134, 69}: "Avery Weigh-Tronix, LLC", - [3]byte{96, 137, 60}: "Thermo Fisher Scientific P.O.A.", - [3]byte{96, 137, 177}: "Key Digital Systems", - [3]byte{96, 137, 183}: "KAEL MÜHENDİSLİK ELEKTRONİK TİCARET SANAYİ LİMİTED ŞİRKETİ", - [3]byte{96, 140, 43}: "Hanson Technology", - [3]byte{96, 140, 230}: "ARRIS Group, Inc.", - [3]byte{96, 141, 23}: "Sentrus Government Systems Division, Inc", - [3]byte{96, 142, 8}: "Samsung Electronics Co.,Ltd", - [3]byte{96, 143, 92}: "Samsung Electronics Co.,Ltd", - [3]byte{96, 144, 132}: "DSSD Inc", - [3]byte{96, 145, 243}: "vivo Mobile Communication Co., Ltd.", - [3]byte{96, 146, 23}: "Apple, Inc.", - [3]byte{96, 150, 32}: "Private", - [3]byte{96, 153, 209}: "Vuzix / Lenovo", - [3]byte{96, 154, 164}: "GVI SECURITY INC.", - [3]byte{96, 154, 193}: "Apple, Inc.", - [3]byte{96, 155, 200}: "Hipad Intelligent Technology Co., Ltd.", - [3]byte{96, 156, 159}: "Brocade Communications Systems, Inc.", - [3]byte{96, 158, 100}: "Vivonic GmbH", - [3]byte{96, 159, 157}: "CloudSwitch", - [3]byte{96, 161, 10}: "Samsung Electronics Co.,Ltd", - [3]byte{96, 163, 125}: "Apple, Inc.", - [3]byte{96, 164, 76}: "ASUSTek COMPUTER INC.", - [3]byte{96, 164, 208}: "Samsung Electronics Co.,Ltd", - [3]byte{96, 168, 254}: "Nokia", - [3]byte{96, 169, 176}: "Merchandising Technologies, Inc", - [3]byte{96, 172, 200}: "KunTeng Inc.", - [3]byte{96, 175, 109}: "Samsung Electronics Co.,Ltd", - [3]byte{96, 177, 133}: "ATH system", - [3]byte{96, 179, 135}: "Synergics Technologies GmbH", - [3]byte{96, 179, 196}: "Elber Srl", - [3]byte{96, 180, 247}: "Plume Design Inc", - [3]byte{96, 182, 6}: "Phorus", - [3]byte{96, 182, 23}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{96, 185, 51}: "Deutron Electronics Corp.", - [3]byte{96, 185, 130}: "RO.VE.R. Laboratories S.p.A.", - [3]byte{96, 186, 24}: "nextLAP GmbH", - [3]byte{96, 187, 12}: "Beijing HuaqinWorld Technology Co,Ltd", - [3]byte{96, 188, 76}: "EWM Hightec Welding GmbH", - [3]byte{96, 189, 145}: "Move Innovation", - [3]byte{96, 190, 181}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{96, 192, 191}: "ON Semiconductor", - [3]byte{96, 193, 203}: "Fujian Great Power PLC Equipment Co.,Ltd", - [3]byte{96, 195, 151}: "2Wire Inc", - [3]byte{96, 197, 71}: "Apple, Inc.", - [3]byte{96, 197, 168}: "Beijing LT Honway Technology Co.,Ltd", - [3]byte{96, 197, 173}: "Samsung Electronics Co.,Ltd", - [3]byte{96, 198, 88}: "PHYTRONIX Co.,Ltd.", - [3]byte{96, 199, 152}: "Verifone", - [3]byte{96, 201, 128}: "Trymus", - [3]byte{96, 203, 251}: "AirScape Inc.", - [3]byte{96, 205, 169}: "Abloomy", - [3]byte{96, 205, 197}: "Taiwan Carol Electronics., Ltd", - [3]byte{96, 208, 169}: "Samsung Electronics Co.,Ltd", - [3]byte{96, 209, 170}: "Vishal Telecommunications Pvt Ltd", - [3]byte{96, 210, 98}: "Tzukuri Pty Ltd", - [3]byte{96, 210, 185}: "REALAND BIO CO., LTD.", - [3]byte{96, 211, 10}: "Quatius Limited", - [3]byte{96, 215, 227}: "IEEE Registration Authority", - [3]byte{96, 216, 25}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{96, 217, 160}: "Lenovo Mobile Communication Technology Ltd.", - [3]byte{96, 217, 199}: "Apple, Inc.", - [3]byte{96, 218, 35}: "Estech Co.,Ltd", - [3]byte{96, 218, 131}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{96, 219, 42}: "HNS", - [3]byte{96, 222, 68}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{96, 224, 14}: "SHINSEI ELECTRONICS CO LTD", - [3]byte{96, 227, 39}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{96, 227, 172}: "LG Electronics (Mobile Communications)", - [3]byte{96, 230, 188}: "Sino-Telecom Technology Co.,Ltd.", - [3]byte{96, 231, 1}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{96, 231, 138}: "UNISEM", - [3]byte{96, 233, 86}: "Ayla Networks, Inc", - [3]byte{96, 235, 105}: "QUANTA COMPUTER INC.", - [3]byte{96, 238, 92}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD", - [3]byte{96, 239, 198}: "Shenzhen Chima Technologies Co Limited", - [3]byte{96, 241, 61}: "JABLOCOM s.r.o.", - [3]byte{96, 241, 137}: "Murata Manufacturing Co., Ltd.", - [3]byte{96, 242, 129}: "TRANWO TECHNOLOGY CO., LTD.", - [3]byte{96, 242, 239}: "VisionVera International Co., Ltd.", - [3]byte{96, 243, 218}: "Logic Way GmbH", - [3]byte{96, 244, 69}: "Apple, Inc.", - [3]byte{96, 244, 148}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{96, 245, 156}: "CRU-Dataport", - [3]byte{96, 246, 115}: "TERUMO CORPORATION", - [3]byte{96, 246, 119}: "Intel Corporate", - [3]byte{96, 248, 29}: "Apple, Inc.", - [3]byte{96, 250, 205}: "Apple, Inc.", - [3]byte{96, 251, 66}: "Apple, Inc.", - [3]byte{96, 253, 86}: "WOORISYSTEMS CO., Ltd", - [3]byte{96, 254, 30}: "China Palms Telecom.Ltd", - [3]byte{96, 254, 32}: "2Wire Inc", - [3]byte{96, 254, 197}: "Apple, Inc.", - [3]byte{96, 254, 249}: "Thomas & Betts", - [3]byte{96, 255, 221}: "C.E. ELECTRONICS, INC", - [3]byte{100, 0, 45}: "Powerlinq Co., LTD", - [3]byte{100, 0, 106}: "Dell Inc.", - [3]byte{100, 0, 241}: "Cisco Systems, Inc", - [3]byte{100, 5, 190}: "NEW LIGHT LED", - [3]byte{100, 5, 233}: "Shenzhen WayOS Technology Crop., Ltd.", - [3]byte{100, 9, 76}: "Beijing Superbee Wireless Technology Co.,Ltd", - [3]byte{100, 9, 128}: "Xiaomi Communications Co Ltd", - [3]byte{100, 11, 74}: "Digital Telecom Technology Limited", - [3]byte{100, 13, 206}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", - [3]byte{100, 13, 230}: "Petra Systems", - [3]byte{100, 14, 54}: "TAZTAG", - [3]byte{100, 14, 148}: "Pluribus Networks, Inc.", - [3]byte{100, 15, 40}: "2Wire Inc", - [3]byte{100, 16, 132}: "HEXIUM Technical Development Co., Ltd.", - [3]byte{100, 18, 37}: "Cisco Systems, Inc", - [3]byte{100, 18, 105}: "ARRIS Group, Inc.", - [3]byte{100, 19, 108}: "zte corporation", - [3]byte{100, 22, 102}: "Nest Labs Inc.", - [3]byte{100, 22, 127}: "Polycom", - [3]byte{100, 22, 141}: "Cisco Systems, Inc", - [3]byte{100, 22, 240}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{100, 26, 34}: "Heliospectra AB", - [3]byte{100, 28, 103}: "DIGIBRAS INDUSTRIA DO BRASILS/A", - [3]byte{100, 30, 129}: "Dowslake Microsystems", - [3]byte{100, 32, 12}: "Apple, Inc.", - [3]byte{100, 32, 159}: "Tilgin AB", - [3]byte{100, 33, 132}: "Nippon Denki Kagaku Co.,LTD", - [3]byte{100, 34, 22}: "Shandong Taixin Electronic co.,Ltd", - [3]byte{100, 36, 0}: "Xorcom Ltd.", - [3]byte{100, 39, 55}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{100, 43, 138}: "ALL BEST Industrial Co., Ltd.", - [3]byte{100, 45, 183}: "SEUNGIL ELECTRONICS", - [3]byte{100, 49, 80}: "Hewlett Packard", - [3]byte{100, 49, 126}: "Dexin Corporation", - [3]byte{100, 50, 168}: "Intel Corporate", - [3]byte{100, 52, 9}: "BITwave Pte Ltd", - [3]byte{100, 53, 28}: "e-CON SYSTEMS INDIA PVT LTD", - [3]byte{100, 58, 177}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD", - [3]byte{100, 62, 140}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{100, 63, 95}: "Exablaze", - [3]byte{100, 66, 20}: "Swisscom Energy Solutions AG", - [3]byte{100, 67, 70}: "GuangDong Quick Network Computer CO.,LTD", - [3]byte{100, 71, 224}: "Feitian Technologies Co., Ltd", - [3]byte{100, 75, 195}: "Shanghai WOASiS Telecommunications Ltd., Co.", - [3]byte{100, 75, 240}: "CalDigit, Inc", - [3]byte{100, 77, 112}: "dSPACE GmbH", - [3]byte{100, 79, 116}: "LENUS Co., Ltd.", - [3]byte{100, 79, 176}: "Hyunjin.com", - [3]byte{100, 81, 6}: "Hewlett Packard", - [3]byte{100, 81, 126}: "LONG BEN (DONGGUAN) ELECTRONIC TECHNOLOGY CO.,LTD.", - [3]byte{100, 82, 153}: "The Chamberlain Group, Inc", - [3]byte{100, 83, 93}: "Frauscher Sensortechnik", - [3]byte{100, 84, 34}: "Equinox Payments", - [3]byte{100, 85, 99}: "Intelight Inc.", - [3]byte{100, 85, 127}: "NSFOCUS Information Technology Co., Ltd.", - [3]byte{100, 85, 177}: "ARRIS Group, Inc.", - [3]byte{100, 86, 1}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{100, 89, 248}: "Vodafone Omnitel B.V.", - [3]byte{100, 90, 4}: "Chicony Electronics Co., Ltd.", - [3]byte{100, 93, 146}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD", - [3]byte{100, 93, 215}: "Shenzhen Lifesense Medical Electronics Co., Ltd.", - [3]byte{100, 94, 190}: "Yahoo! JAPAN", - [3]byte{100, 95, 255}: "Nicolet Neuro", - [3]byte{100, 97, 132}: "VELUX", - [3]byte{100, 98, 35}: "Cellient Co., Ltd.", - [3]byte{100, 100, 155}: "Juniper Networks", - [3]byte{100, 101, 192}: "Nuvon, Inc", - [3]byte{100, 102, 179}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{100, 103, 7}: "Beijing Omnific Technology, Ltd.", - [3]byte{100, 104, 12}: "Comtrend Corporation", - [3]byte{100, 105, 188}: "Hytera Communications Co .,ltd", - [3]byte{100, 106, 82}: "Avaya Inc", - [3]byte{100, 106, 116}: "AUTH-SERVERS, LLC", - [3]byte{100, 108, 178}: "Samsung Electronics Co.,Ltd", - [3]byte{100, 110, 105}: "Liteon Technology Corporation", - [3]byte{100, 110, 108}: "Radio Datacom LLC", - [3]byte{100, 110, 234}: "Iskratel d.o.o.", - [3]byte{100, 112, 2}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{100, 114, 216}: "GooWi Technology Co.,Limited", - [3]byte{100, 115, 226}: "Arbiter Systems, Inc.", - [3]byte{100, 116, 246}: "Shooter Detection Systems", - [3]byte{100, 118, 87}: "Innovative Security Designs", - [3]byte{100, 118, 186}: "Apple, Inc.", - [3]byte{100, 119, 125}: "Hitron Technologies. Inc", - [3]byte{100, 119, 145}: "Samsung Electronics Co.,Ltd", - [3]byte{100, 121, 167}: "Phison Electronics Corp.", - [3]byte{100, 123, 212}: "Texas Instruments", - [3]byte{100, 124, 52}: "Ubee Interactive Co., Limited", - [3]byte{100, 125, 129}: "YOKOTA INDUSTRIAL CO,.LTD", - [3]byte{100, 127, 218}: "TEKTELIC Communications Inc.", - [3]byte{100, 128, 139}: "VG Controls, Inc.", - [3]byte{100, 128, 153}: "Intel Corporate", - [3]byte{100, 129, 37}: "Alphatron Marine BV", - [3]byte{100, 135, 136}: "Juniper Networks", - [3]byte{100, 135, 215}: "ADB Broadband Italia", - [3]byte{100, 136, 255}: "Sichuan Changhong Electric Ltd.", - [3]byte{100, 137, 154}: "LG Electronics (Mobile Communications)", - [3]byte{100, 141, 158}: "IVT Electronic Co.,Ltd", - [3]byte{100, 153, 93}: "LGE", - [3]byte{100, 153, 104}: "Elentec", - [3]byte{100, 153, 160}: "AG Elektronik AB", - [3]byte{100, 154, 8}: "Shenzhen SuperElectron Technology Co.,LTD", - [3]byte{100, 154, 18}: "P2 Mobile Technologies Limited", - [3]byte{100, 154, 190}: "Apple, Inc.", - [3]byte{100, 155, 36}: "V Technology Co., Ltd.", - [3]byte{100, 156, 129}: "Qualcomm Inc.", - [3]byte{100, 156, 142}: "Texas Instruments", - [3]byte{100, 158, 243}: "Cisco Systems, Inc", - [3]byte{100, 159, 247}: "Kone OYj", - [3]byte{100, 160, 231}: "Cisco Systems, Inc", - [3]byte{100, 162, 50}: "OOO Samlight", - [3]byte{100, 163, 65}: "Wonderlan (Beijing) Technology Co., Ltd.", - [3]byte{100, 163, 203}: "Apple, Inc.", - [3]byte{100, 165, 195}: "Apple, Inc.", - [3]byte{100, 166, 81}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{100, 166, 143}: "Zhongshan Readboy Electronics Co.,Ltd", - [3]byte{100, 167, 105}: "HTC Corporation", - [3]byte{100, 167, 221}: "Avaya Inc", - [3]byte{100, 168, 55}: "Juni Korea Co., Ltd", - [3]byte{100, 174, 12}: "Cisco Systems, Inc", - [3]byte{100, 174, 136}: "Polytec GmbH", - [3]byte{100, 176, 166}: "Apple, Inc.", - [3]byte{100, 178, 29}: "Chengdu Phycom Tech Co., Ltd.", - [3]byte{100, 179, 16}: "Samsung Electronics Co.,Ltd", - [3]byte{100, 179, 112}: "PowerComm Solutions LLC", - [3]byte{100, 180, 115}: "Xiaomi Communications Co Ltd", - [3]byte{100, 181, 198}: "Nintendo Co.,Ltd", - [3]byte{100, 182, 74}: "ViVOtech, Inc.", - [3]byte{100, 184, 83}: "Samsung Electronics Co.,Ltd", - [3]byte{100, 185, 232}: "Apple, Inc.", - [3]byte{100, 186, 189}: "SDJ Technologies, Inc.", - [3]byte{100, 188, 12}: "LG Electronics (Mobile Communications)", - [3]byte{100, 188, 17}: "CombiQ AB", - [3]byte{100, 195, 84}: "Avaya Inc", - [3]byte{100, 197, 170}: "South African Broadcasting Corporation", - [3]byte{100, 198, 103}: "Barnes&Noble", - [3]byte{100, 198, 175}: "AXERRA Networks Ltd", - [3]byte{100, 201, 68}: "LARK Technologies, Inc", - [3]byte{100, 203, 163}: "Pointmobile", - [3]byte{100, 204, 46}: "Xiaomi Communications Co Ltd", - [3]byte{100, 207, 217}: "Texas Instruments", - [3]byte{100, 208, 45}: "Next Generation Integration (NGI)", - [3]byte{100, 209, 84}: "Routerboard.com", - [3]byte{100, 209, 163}: "Sitecom Europe BV", - [3]byte{100, 210, 65}: "Keith & Koep GmbH", - [3]byte{100, 212, 189}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{100, 212, 218}: "Intel Corporate", - [3]byte{100, 216, 20}: "Cisco Systems, Inc", - [3]byte{100, 217, 18}: "Solidica, Inc.", - [3]byte{100, 217, 84}: "Taicang T&W Electronics", - [3]byte{100, 217, 137}: "Cisco Systems, Inc", - [3]byte{100, 218, 160}: "Robert Bosch Smart Home GmbH", - [3]byte{100, 219, 24}: "OpenPattern", - [3]byte{100, 219, 67}: "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.", - [3]byte{100, 219, 129}: "Syszone Co., Ltd.", - [3]byte{100, 219, 160}: "Select Comfort", - [3]byte{100, 220, 1}: "Static Systems Group PLC", - [3]byte{100, 222, 28}: "Kingnetic Pte Ltd", - [3]byte{100, 223, 233}: "ATEME", - [3]byte{100, 225, 97}: "DEP Corp.", - [3]byte{100, 229, 153}: "EFM Networks", - [3]byte{100, 230, 37}: "Woxu Wireless Co., Ltd", - [3]byte{100, 230, 130}: "Apple, Inc.", - [3]byte{100, 232, 79}: "Serialway Communication Technology Co. Ltd", - [3]byte{100, 232, 146}: "Morio Denki Co., Ltd.", - [3]byte{100, 232, 230}: "global moisture management system", - [3]byte{100, 233, 80}: "Cisco Systems, Inc", - [3]byte{100, 234, 197}: "SiboTech Automation Co., Ltd.", - [3]byte{100, 235, 140}: "Seiko Epson Corporation", - [3]byte{100, 237, 87}: "ARRIS Group, Inc.", - [3]byte{100, 237, 98}: "WOORI SYSTEMS Co., Ltd", - [3]byte{100, 242, 66}: "Gerdes Aktiengesellschaft", - [3]byte{100, 245, 14}: "Kinion Technology Company Limited", - [3]byte{100, 246, 157}: "Cisco Systems, Inc", - [3]byte{100, 248, 138}: "China Mobile IOT Company Limited", - [3]byte{100, 249, 112}: "Kenade Electronics Technology Co.,LTD.", - [3]byte{100, 249, 135}: "Avvasi Inc.", - [3]byte{100, 251, 80}: "RoomReady/Zdi, Inc.", - [3]byte{100, 251, 129}: "IEEE Registration Authority", - [3]byte{100, 252, 140}: "Zonar Systems", - [3]byte{104, 2, 53}: "Konten Networks Inc.", - [3]byte{104, 5, 113}: "Samsung Electronics Co.,Ltd", - [3]byte{104, 5, 202}: "Intel Corporate", - [3]byte{104, 7, 21}: "Intel Corporate", - [3]byte{104, 9, 39}: "Apple, Inc.", - [3]byte{104, 10, 215}: "Yancheng Kecheng Optoelectronic Technology Co., Ltd", - [3]byte{104, 18, 45}: "Special Instrument Development Co., Ltd.", - [3]byte{104, 18, 149}: "Lupine Lighting Systems GmbH", - [3]byte{104, 20, 1}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{104, 21, 144}: "Sagemcom Broadband SAS", - [3]byte{104, 21, 211}: "Zaklady Elektroniki i Mechaniki Precyzyjnej R&G S.A.", - [3]byte{104, 22, 5}: "Systems And Electronic Development FZCO", - [3]byte{104, 23, 41}: "Intel Corporate", - [3]byte{104, 25, 63}: "Digital Airways", - [3]byte{104, 26, 178}: "zte corporation", - [3]byte{104, 28, 162}: "Rosewill Inc.", - [3]byte{104, 29, 100}: "Sunwave Communications Co., Ltd", - [3]byte{104, 29, 239}: "Shenzhen CYX Technology Co., Ltd.", - [3]byte{104, 30, 139}: "InfoSight Corporation", - [3]byte{104, 31, 64}: "Blu Wireless Technology Ltd", - [3]byte{104, 31, 216}: "Siemens Industry, Inc.", - [3]byte{104, 35, 75}: "Nihon Dengyo Kousaku", - [3]byte{104, 38, 42}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD", - [3]byte{104, 39, 55}: "Samsung Electronics Co.,Ltd", - [3]byte{104, 40, 186}: "Dejai", - [3]byte{104, 40, 246}: "Vubiq Networks, Inc.", - [3]byte{104, 45, 220}: "Wuhan Changjiang Electro-Communication Equipment CO.,LTD", - [3]byte{104, 49, 254}: "Teladin Co.,Ltd.", - [3]byte{104, 53, 99}: "SHENZHEN LIOWN ELECTRONICS CO.,LTD.", - [3]byte{104, 54, 181}: "DriveScale, Inc.", - [3]byte{104, 55, 233}: "Amazon Technologies Inc.", - [3]byte{104, 59, 30}: "Countwise LTD", - [3]byte{104, 60, 125}: "Magic Intelligence Technology Limited", - [3]byte{104, 62, 2}: "SIEMENS AG, Digital Factory, Motion Control System", - [3]byte{104, 62, 52}: "MEIZU Technology Co., Ltd.", - [3]byte{104, 62, 236}: "ERECA", - [3]byte{104, 67, 82}: "Bhuu Limited", - [3]byte{104, 72, 152}: "Samsung Electronics Co.,Ltd", - [3]byte{104, 75, 136}: "Galtronics Telemetry Inc.", - [3]byte{104, 76, 168}: "Shenzhen Herotel Tech. Co., Ltd.", - [3]byte{104, 81, 183}: "PowerCloud Systems, Inc.", - [3]byte{104, 83, 108}: "SPnS Co.,Ltd", - [3]byte{104, 83, 136}: "P&S Technology", - [3]byte{104, 84, 193}: "ColorTokens, Inc.", - [3]byte{104, 84, 237}: "Alcatel-Lucent", - [3]byte{104, 84, 245}: "enLighted Inc", - [3]byte{104, 84, 253}: "Amazon Technologies Inc.", - [3]byte{104, 88, 197}: "ZF TRW Automotive", - [3]byte{104, 89, 127}: "Alcatel Lucent", - [3]byte{104, 91, 53}: "Apple, Inc.", - [3]byte{104, 91, 54}: "POWERTECH INDUSTRIAL CO., LTD.", - [3]byte{104, 93, 67}: "Intel Corporate", - [3]byte{104, 94, 107}: "PowerRay Co., Ltd.", - [3]byte{104, 99, 89}: "Advanced Digital Broadcast SA", - [3]byte{104, 100, 75}: "Apple, Inc.", - [3]byte{104, 105, 46}: "Zycoo Co.,Ltd", - [3]byte{104, 105, 117}: "Angler Labs Inc", - [3]byte{104, 105, 242}: "ComAp s.r.o.", - [3]byte{104, 110, 35}: "Wi3 Inc.", - [3]byte{104, 110, 72}: "Prophet Electronic Technology Corp.,Ltd", - [3]byte{104, 114, 81}: "Ubiquiti Networks Inc.", - [3]byte{104, 114, 220}: "CETORY.TV Company Limited", - [3]byte{104, 118, 79}: "Sony Mobile Communications AB", - [3]byte{104, 120, 72}: "Westunitis Co., Ltd.", - [3]byte{104, 120, 76}: "Nortel Networks", - [3]byte{104, 121, 36}: "ELS-GmbH & Co. KG", - [3]byte{104, 121, 237}: "SHARP Corporation", - [3]byte{104, 124, 200}: "Measurement Systems S. de R.L.", - [3]byte{104, 124, 213}: "Y Soft Corporation, a.s.", - [3]byte{104, 127, 116}: "Cisco-Linksys, LLC", - [3]byte{104, 131, 26}: "Pandora Mobility Corporation", - [3]byte{104, 132, 112}: "eSSys Co.,Ltd", - [3]byte{104, 133, 64}: "IGI Mobile, Inc.", - [3]byte{104, 133, 106}: "OuterLink Corporation", - [3]byte{104, 134, 167}: "Cisco Systems, Inc", - [3]byte{104, 134, 231}: "Orbotix, Inc.", - [3]byte{104, 135, 107}: "INQ Mobile Limited", - [3]byte{104, 137, 193}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{104, 138, 181}: "EDP Servicos", - [3]byte{104, 138, 240}: "zte corporation", - [3]byte{104, 141, 182}: "AETEK INC.", - [3]byte{104, 143, 132}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{104, 145, 208}: "IEEE Registration Authority", - [3]byte{104, 146, 52}: "Ruckus Wireless", - [3]byte{104, 147, 97}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{104, 148, 35}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{104, 150, 123}: "Apple, Inc.", - [3]byte{104, 151, 75}: "Shenzhen Costar Electronics Co. Ltd.", - [3]byte{104, 151, 232}: "Society of Motion Picture & Television Engineers", - [3]byte{104, 153, 205}: "Cisco Systems, Inc", - [3]byte{104, 154, 183}: "Atelier Vision Corporation", - [3]byte{104, 156, 94}: "AcSiP Technology Corp.", - [3]byte{104, 156, 112}: "Apple, Inc.", - [3]byte{104, 156, 226}: "Cisco Systems, Inc", - [3]byte{104, 158, 25}: "Texas Instruments", - [3]byte{104, 159, 240}: "zte corporation", - [3]byte{104, 160, 246}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{104, 161, 183}: "Honghao Mingchuan Technology (Beijing) CO.,Ltd.", - [3]byte{104, 163, 120}: "FREEBOX SAS", - [3]byte{104, 163, 196}: "Liteon Technology Corporation", - [3]byte{104, 164, 14}: "BSH Hausgeräte GmbH", - [3]byte{104, 166, 130}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{104, 168, 40}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{104, 168, 109}: "Apple, Inc.", - [3]byte{104, 170, 210}: "DATECS LTD.,", - [3]byte{104, 171, 138}: "RF IDeas", - [3]byte{104, 174, 32}: "Apple, Inc.", - [3]byte{104, 175, 19}: "Futura Mobility", - [3]byte{104, 176, 148}: "INESA ELECTRON CO.,LTD", - [3]byte{104, 179, 94}: "Shenzhen Neostra Technology Co.Ltd", - [3]byte{104, 180, 58}: "WaterFurnace International, Inc.", - [3]byte{104, 181, 153}: "Hewlett Packard", - [3]byte{104, 182, 252}: "Hitron Technologies. Inc", - [3]byte{104, 184, 217}: "Act KDE, Inc.", - [3]byte{104, 185, 131}: "b-plus GmbH", - [3]byte{104, 188, 12}: "Cisco Systems, Inc", - [3]byte{104, 189, 171}: "Cisco Systems, Inc", - [3]byte{104, 196, 77}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{104, 198, 58}: "Espressif Inc.", - [3]byte{104, 201, 11}: "Texas Instruments", - [3]byte{104, 202, 0}: "Octopus Systems Limited", - [3]byte{104, 204, 110}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{104, 204, 156}: "Mine Site Technologies", - [3]byte{104, 205, 15}: "U Tek Company Limited", - [3]byte{104, 206, 78}: "L-3 Communications Infrared Products", - [3]byte{104, 209, 253}: "Shenzhen Trimax Technology Co.,Ltd", - [3]byte{104, 210, 71}: "Portalis LC", - [3]byte{104, 217, 37}: "ProSys Development Services", - [3]byte{104, 217, 60}: "Apple, Inc.", - [3]byte{104, 219, 84}: "Phicomm (Shanghai) Co., Ltd.", - [3]byte{104, 219, 103}: "Nantong Coship Electronics Co., Ltd", - [3]byte{104, 219, 150}: "OPWILL Technologies CO .,LTD", - [3]byte{104, 219, 202}: "Apple, Inc.", - [3]byte{104, 220, 232}: "PacketStorm Communications", - [3]byte{104, 223, 221}: "Xiaomi Communications Co Ltd", - [3]byte{104, 225, 102}: "Private", - [3]byte{104, 228, 31}: "Unglaube Identech GmbH", - [3]byte{104, 232, 235}: "Linktel Technologies Co.,Ltd", - [3]byte{104, 235, 174}: "Samsung Electronics Co.,Ltd", - [3]byte{104, 235, 197}: "Angstrem Telecom", - [3]byte{104, 236, 98}: "YODO Technology Corp. Ltd.", - [3]byte{104, 236, 197}: "Intel Corporate", - [3]byte{104, 237, 67}: "BlackBerry RTS", - [3]byte{104, 237, 164}: "Shenzhen Seavo Technology Co.,Ltd", - [3]byte{104, 238, 150}: "Cisco SPVTG", - [3]byte{104, 239, 189}: "Cisco Systems, Inc", - [3]byte{104, 240, 109}: "ALONG INDUSTRIAL CO., LIMITED", - [3]byte{104, 240, 188}: "Shenzhen LiWiFi Technology Co., Ltd", - [3]byte{104, 241, 37}: "Data Controls Inc.", - [3]byte{104, 247, 40}: "LCFC(HeFei) Electronics Technology co., ltd", - [3]byte{104, 248, 149}: "Redflow Limited", - [3]byte{104, 249, 86}: "Objetivos y Servicio de Valor Añadido", - [3]byte{104, 251, 126}: "Apple, Inc.", - [3]byte{104, 251, 149}: "Generalplus Technology Inc.", - [3]byte{104, 252, 179}: "Next Level Security Systems, Inc.", - [3]byte{108, 2, 115}: "Shenzhen Jin Yun Video Equipment Co., Ltd.", - [3]byte{108, 4, 96}: "RBH Access Technologies Inc.", - [3]byte{108, 5, 213}: "Ethertronics Inc", - [3]byte{108, 9, 10}: "GEMATICA SRL", - [3]byte{108, 9, 214}: "Digiquest Electronics LTD", - [3]byte{108, 11, 132}: "Universal Global Scientific Industrial Co., Ltd.", - [3]byte{108, 14, 13}: "Sony Mobile Communications AB", - [3]byte{108, 14, 230}: "Chengdu Xiyida Electronic Technology Co,.Ltd", - [3]byte{108, 15, 106}: "JDC Tech Co., Ltd.", - [3]byte{108, 20, 247}: "Erhardt+Leimer GmbH", - [3]byte{108, 21, 249}: "Nautronix Limited", - [3]byte{108, 22, 14}: "ShotTracker", - [3]byte{108, 24, 17}: "Decatur Electronics", - [3]byte{108, 25, 143}: "D-Link International", - [3]byte{108, 25, 192}: "Apple, Inc.", - [3]byte{108, 30, 112}: "Guangzhou YBDS IT Co.,Ltd", - [3]byte{108, 30, 144}: "Hansol Technics Co., Ltd.", - [3]byte{108, 32, 86}: "Cisco Systems, Inc", - [3]byte{108, 34, 171}: "Ainsworth Game Technology", - [3]byte{108, 35, 185}: "Sony Mobile Communications AB", - [3]byte{108, 36, 131}: "Microsoft Mobile Oy", - [3]byte{108, 37, 185}: "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.", - [3]byte{108, 39, 121}: "Microsoft Mobile Oy", - [3]byte{108, 41, 149}: "Intel Corporate", - [3]byte{108, 42, 203}: "Paxton Access Ltd", - [3]byte{108, 44, 6}: "OOO NPP Systemotechnika-NN", - [3]byte{108, 46, 51}: "Accelink Technologies Co.,Ltd.", - [3]byte{108, 46, 114}: "B&B EXPORTING LIMITED", - [3]byte{108, 46, 133}: "Sagemcom Broadband SAS", - [3]byte{108, 47, 44}: "Samsung Electronics Co.,Ltd", - [3]byte{108, 50, 222}: "Indieon Technologies Pvt. Ltd.", - [3]byte{108, 51, 169}: "Magicjack LP", - [3]byte{108, 56, 161}: "Ubee Interactive Co., Limited", - [3]byte{108, 57, 29}: "Beijing ZhongHuaHun Network Information center", - [3]byte{108, 58, 132}: "Shenzhen Aero-Startech. Co.Ltd", - [3]byte{108, 59, 107}: "Routerboard.com", - [3]byte{108, 59, 229}: "Hewlett Packard", - [3]byte{108, 60, 83}: "SoundHawk Corp", - [3]byte{108, 62, 109}: "Apple, Inc.", - [3]byte{108, 62, 156}: "KE Knestel Elektronik GmbH", - [3]byte{108, 64, 8}: "Apple, Inc.", - [3]byte{108, 64, 198}: "Nimbus Data Systems, Inc.", - [3]byte{108, 65, 106}: "Cisco Systems, Inc", - [3]byte{108, 68, 24}: "Zappware", - [3]byte{108, 69, 152}: "Antex Electronic Corp.", - [3]byte{108, 73, 193}: "o2ones Co., Ltd.", - [3]byte{108, 74, 57}: "BITA", - [3]byte{108, 75, 127}: "Vossloh-Schwabe Deutschland GmbH", - [3]byte{108, 75, 144}: "LiteON", - [3]byte{108, 78, 134}: "Third Millennium Systems Ltd.", - [3]byte{108, 80, 77}: "Cisco Systems, Inc", - [3]byte{108, 86, 151}: "Amazon Technologies Inc.", - [3]byte{108, 87, 121}: "Aclima, Inc.", - [3]byte{108, 89, 64}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", - [3]byte{108, 89, 118}: "Shanghai Tricheer Technology Co.,Ltd.", - [3]byte{108, 90, 52}: "Shenzhen Haitianxiong Electronic Co., Ltd.", - [3]byte{108, 90, 181}: "TCL Technoly Electronics (Huizhou) Co., Ltd.", - [3]byte{108, 92, 20}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{108, 92, 222}: "SunReports, Inc.", - [3]byte{108, 93, 99}: "ShenZhen Rapoo Technology Co., Ltd.", - [3]byte{108, 94, 122}: "Ubiquitous Internet Telecom Co., Ltd", - [3]byte{108, 95, 28}: "Lenovo Mobile Communication Technology Ltd.", - [3]byte{108, 96, 235}: "ZHI YUAN ELECTRONICS CO., LIMITED", - [3]byte{108, 97, 38}: "Rinicom Holdings", - [3]byte{108, 98, 109}: "Micro-Star INT'L CO., LTD", - [3]byte{108, 100, 26}: "Penguin Computing", - [3]byte{108, 110, 254}: "Core Logic Inc.", - [3]byte{108, 111, 24}: "Stereotaxis, Inc.", - [3]byte{108, 112, 57}: "Novar GmbH", - [3]byte{108, 112, 159}: "Apple, Inc.", - [3]byte{108, 113, 189}: "EZELINK TELECOM", - [3]byte{108, 113, 217}: "AzureWave Technology Inc.", - [3]byte{108, 114, 32}: "D-Link International", - [3]byte{108, 114, 231}: "Apple, Inc.", - [3]byte{108, 117, 13}: "WiFiSONG", - [3]byte{108, 118, 96}: "KYOCERA CORPORATION", - [3]byte{108, 129, 254}: "Mitsuba Corporation", - [3]byte{108, 131, 54}: "Samsung Electronics Co.,Ltd", - [3]byte{108, 131, 102}: "Nanjing SAC Power Grid Automation Co., Ltd.", - [3]byte{108, 134, 134}: "Technonia", - [3]byte{108, 136, 20}: "Intel Corporate", - [3]byte{108, 139, 47}: "zte corporation", - [3]byte{108, 140, 219}: "Otus Technologies Ltd", - [3]byte{108, 141, 101}: "Wireless Glue Networks, Inc.", - [3]byte{108, 141, 193}: "Apple, Inc.", - [3]byte{108, 143, 181}: "Microsoft Mobile Oy", - [3]byte{108, 144, 177}: "SanLogic Inc", - [3]byte{108, 146, 191}: "Inspur Electronic Information Industry Co.,Ltd.", - [3]byte{108, 147, 84}: "Yaojin Technology (Shenzhen) Co., LTD.", - [3]byte{108, 148, 248}: "Apple, Inc.", - [3]byte{108, 149, 34}: "Scalys", - [3]byte{108, 150, 207}: "Apple, Inc.", - [3]byte{108, 152, 235}: "Riverbed Technology, Inc.", - [3]byte{108, 153, 137}: "Cisco Systems, Inc", - [3]byte{108, 154, 201}: "Valentine Research, Inc.", - [3]byte{108, 155, 2}: "Nokia Corporation", - [3]byte{108, 156, 233}: "Nimble Storage", - [3]byte{108, 156, 237}: "Cisco Systems, Inc", - [3]byte{108, 161, 0}: "Intel Corporate", - [3]byte{108, 166, 130}: "EDAM information & communications", - [3]byte{108, 167, 95}: "zte corporation", - [3]byte{108, 167, 128}: "Nokia Corporation", - [3]byte{108, 167, 250}: "YOUNGBO ENGINEERING INC.", - [3]byte{108, 168, 73}: "Avaya Inc", - [3]byte{108, 168, 88}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{108, 169, 6}: "Telefield Ltd", - [3]byte{108, 169, 111}: "TransPacket AS", - [3]byte{108, 170, 179}: "Ruckus Wireless", - [3]byte{108, 171, 49}: "Apple, Inc.", - [3]byte{108, 171, 77}: "Digital Payment Technologies", - [3]byte{108, 172, 96}: "Venetex Corp", - [3]byte{108, 173, 63}: "Hubbell Building Automation, Inc.", - [3]byte{108, 173, 239}: "KZ Broadband Technologies, Ltd.", - [3]byte{108, 173, 248}: "AzureWave Technology Inc.", - [3]byte{108, 174, 139}: "IBM Corporation", - [3]byte{108, 176, 206}: "NETGEAR", - [3]byte{108, 178, 39}: "Sony Video & Sound Products Inc.", - [3]byte{108, 178, 174}: "Cisco Systems, Inc", - [3]byte{108, 179, 17}: "Shenzhen Lianrui Electronics Co.,Ltd", - [3]byte{108, 179, 80}: "Anhui comhigher tech co.,ltd", - [3]byte{108, 180, 167}: "Landauer, Inc.", - [3]byte{108, 181, 107}: "HUMAX Co., Ltd.", - [3]byte{108, 183, 73}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{108, 183, 244}: "Samsung Electronics Co.,Ltd", - [3]byte{108, 185, 197}: "Delta Networks, Inc.", - [3]byte{108, 190, 233}: "Alcatel-Lucent IPD", - [3]byte{108, 191, 181}: "Noon Technology Co., Ltd", - [3]byte{108, 193, 71}: "Xiamen Hanin Electronic Technology Co., Ltd", - [3]byte{108, 193, 210}: "ARRIS Group, Inc.", - [3]byte{108, 194, 23}: "Hewlett Packard", - [3]byte{108, 194, 107}: "Apple, Inc.", - [3]byte{108, 202, 8}: "ARRIS Group, Inc.", - [3]byte{108, 208, 50}: "LG Electronics", - [3]byte{108, 209, 70}: "Smartek d.o.o.", - [3]byte{108, 209, 176}: "WING SING ELECTRONICS HONG KONG LIMITED", - [3]byte{108, 214, 138}: "LG Electronics (Mobile Communications)", - [3]byte{108, 220, 106}: "Promethean Limited", - [3]byte{108, 221, 48}: "Cisco Systems, Inc", - [3]byte{108, 224, 30}: "Modcam AB", - [3]byte{108, 224, 176}: "SOUND4", - [3]byte{108, 227, 182}: "Nera Telecommunications Ltd.", - [3]byte{108, 228, 206}: "Villiger Security Solutions AG", - [3]byte{108, 232, 115}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{108, 233, 7}: "Nokia Corporation", - [3]byte{108, 233, 131}: "Gastron Co., LTD.", - [3]byte{108, 235, 178}: "Dongguan Sen DongLv Electronics Co.,Ltd", - [3]byte{108, 236, 90}: "Hon Hai Precision Ind. CO.,Ltd.", - [3]byte{108, 236, 161}: "SHENZHEN CLOU ELECTRONICS CO. LTD.", - [3]byte{108, 236, 235}: "Texas Instruments", - [3]byte{108, 239, 198}: "SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.", - [3]byte{108, 240, 73}: "GIGA-BYTE TECHNOLOGY CO.,LTD.", - [3]byte{108, 243, 115}: "Samsung Electronics Co.,Ltd", - [3]byte{108, 243, 127}: "Aruba Networks", - [3]byte{108, 245, 232}: "Mooredoll Inc.", - [3]byte{108, 249, 124}: "Nanoptix Inc.", - [3]byte{108, 249, 210}: "Chengdu Goods for the Road Electronic Technology C", - [3]byte{108, 250, 88}: "Avaya Inc", - [3]byte{108, 250, 137}: "Cisco Systems, Inc", - [3]byte{108, 250, 167}: "AMPAK Technology, Inc.", - [3]byte{108, 253, 185}: "Proware Technologies Co Ltd.", - [3]byte{108, 255, 190}: "MPB Communications Inc.", - [3]byte{112, 1, 54}: "FATEK Automation Corporation", - [3]byte{112, 2, 88}: "01DB-METRAVIB", - [3]byte{112, 5, 20}: "LG Electronics (Mobile Communications)", - [3]byte{112, 11, 192}: "Dewav Technology Company", - [3]byte{112, 15, 199}: "SHENZHEN IKINLOOP TECHNOLOGY CO.,LTD.", - [3]byte{112, 15, 236}: "Poindus Systems Corp.", - [3]byte{112, 16, 92}: "Cisco Systems, Inc", - [3]byte{112, 16, 111}: "Hewlett Packard Enterprise", - [3]byte{112, 17, 36}: "Apple, Inc.", - [3]byte{112, 17, 174}: "Music Life LTD", - [3]byte{112, 20, 4}: "Limited Liability Company", - [3]byte{112, 20, 166}: "Apple, Inc.", - [3]byte{112, 24, 139}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{112, 26, 4}: "Liteon Technology Corporation", - [3]byte{112, 26, 237}: "ADVAS CO., LTD.", - [3]byte{112, 28, 231}: "Intel Corporate", - [3]byte{112, 29, 127}: "Comtech Technology Co., Ltd.", - [3]byte{112, 29, 196}: "NorthStar Battery Company, LLC", - [3]byte{112, 31, 83}: "Cisco Systems, Inc", - [3]byte{112, 32, 132}: "Hon Hai Precision Ind. Co., Ltd.", - [3]byte{112, 35, 147}: "fos4X GmbH", - [3]byte{112, 37, 38}: "Nokia", - [3]byte{112, 37, 89}: "CyberTAN Technology Inc.", - [3]byte{112, 38, 5}: "SONY Visual Products Inc.", - [3]byte{112, 40, 139}: "Samsung Electronics Co.,Ltd", - [3]byte{112, 41, 0}: "Shenzhen ChipTrip Technology Co,Ltd", - [3]byte{112, 42, 125}: "EpSpot AB", - [3]byte{112, 43, 29}: "E-Domus International Limited", - [3]byte{112, 44, 31}: "Wisol", - [3]byte{112, 45, 132}: "i4C Innovations", - [3]byte{112, 45, 209}: "Newings Communication CO., LTD.", - [3]byte{112, 46, 34}: "zte corporation", - [3]byte{112, 47, 75}: "PolyVision Inc.", - [3]byte{112, 47, 151}: "Aava Mobile Oy", - [3]byte{112, 48, 24}: "Avaya Inc", - [3]byte{112, 48, 93}: "Ubiquoss Inc", - [3]byte{112, 48, 94}: "Nanjing Zhongke Menglian Information Technology Co.,LTD", - [3]byte{112, 49, 135}: "ACX GmbH", - [3]byte{112, 50, 213}: "Athena Wireless Communications Inc", - [3]byte{112, 56, 17}: "Invensys Rail", - [3]byte{112, 56, 180}: "Low Tech Solutions", - [3]byte{112, 56, 238}: "Avaya Inc", - [3]byte{112, 58, 14}: "Aruba Networks", - [3]byte{112, 58, 203}: "Google, Inc.", - [3]byte{112, 58, 216}: "Shenzhen Afoundry Electronic Co., Ltd", - [3]byte{112, 60, 3}: "RadiAnt Co.,Ltd", - [3]byte{112, 60, 57}: "SEAWING Kft", - [3]byte{112, 61, 21}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{112, 62, 172}: "Apple, Inc.", - [3]byte{112, 65, 183}: "Edwards Lifesciences LLC", - [3]byte{112, 70, 66}: "CHYNG HONG ELECTRONIC CO., LTD.", - [3]byte{112, 71, 233}: "vivo Mobile Communication Co., Ltd.", - [3]byte{112, 72, 15}: "Apple, Inc.", - [3]byte{112, 74, 174}: "Xstream Flow (Pty) Ltd", - [3]byte{112, 74, 228}: "Rinstrum Pty Ltd", - [3]byte{112, 76, 165}: "Fortinet, Inc.", - [3]byte{112, 76, 237}: "TMRG, Inc.", - [3]byte{112, 77, 123}: "ASUSTek COMPUTER INC.", - [3]byte{112, 78, 1}: "KWANGWON TECH CO., LTD.", - [3]byte{112, 78, 102}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD", - [3]byte{112, 79, 87}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{112, 80, 175}: "BSkyB Ltd", - [3]byte{112, 82, 197}: "Avaya Inc", - [3]byte{112, 83, 63}: "Alfa Instrumentos Eletronicos Ltda.", - [3]byte{112, 84, 210}: "PEGATRON CORPORATION", - [3]byte{112, 84, 245}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{112, 86, 129}: "Apple, Inc.", - [3]byte{112, 88, 18}: "Panasonic Corporation AVC Networks Company", - [3]byte{112, 88, 150}: "InShow Technology", - [3]byte{112, 89, 87}: "Medallion Instrumentation Systems", - [3]byte{112, 89, 134}: "OOO TTV", - [3]byte{112, 90, 15}: "Hewlett Packard", - [3]byte{112, 90, 158}: "Technicolor CH USA Inc.", - [3]byte{112, 90, 182}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{112, 91, 46}: "M2Communication Inc.", - [3]byte{112, 92, 173}: "Konami Gaming Inc", - [3]byte{112, 94, 170}: "Action Target, Inc.", - [3]byte{112, 96, 222}: "LaVision GmbH", - [3]byte{112, 97, 115}: "Calantec GmbH", - [3]byte{112, 98, 184}: "D-Link International", - [3]byte{112, 100, 23}: "ORBIS TECNOLOGIA ELECTRICA S.A.", - [3]byte{112, 101, 130}: "Suzhou Hanming Technologies Co., Ltd.", - [3]byte{112, 101, 163}: "Kandao lightforge Co., Ltd.", - [3]byte{112, 102, 27}: "Sonova AG", - [3]byte{112, 104, 121}: "Saijo Denki International Co., Ltd.", - [3]byte{112, 107, 185}: "Cisco Systems, Inc", - [3]byte{112, 109, 236}: "Wifi-soft LLC", - [3]byte{112, 110, 109}: "Cisco Systems, Inc", - [3]byte{112, 111, 129}: "Private", - [3]byte{112, 112, 13}: "Apple, Inc.", - [3]byte{112, 112, 76}: "Purple Communications, Inc", - [3]byte{112, 112, 139}: "Cisco Systems, Inc", - [3]byte{112, 113, 179}: "Brain Corporation", - [3]byte{112, 113, 188}: "PEGATRON CORPORATION", - [3]byte{112, 114, 13}: "Lenovo Mobile Communication Technology Ltd.", - [3]byte{112, 114, 60}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{112, 114, 207}: "EdgeCore Networks", - [3]byte{112, 115, 203}: "Apple, Inc.", - [3]byte{112, 118, 48}: "ARRIS Group, Inc.", - [3]byte{112, 118, 221}: "Oxyguard International A/S", - [3]byte{112, 118, 240}: "LevelOne Communications (India) Private Limited", - [3]byte{112, 118, 255}: "KERLINK", - [3]byte{112, 119, 129}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{112, 120, 139}: "vivo Mobile Communication Co., Ltd.", - [3]byte{112, 121, 56}: "Wuxi Zhanrui Electronic Technology Co.,LTD", - [3]byte{112, 121, 144}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{112, 123, 232}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{112, 124, 24}: "ADATA Technology Co., Ltd", - [3]byte{112, 124, 105}: "Avaya Inc", - [3]byte{112, 125, 149}: "Shenzhen City LinwlanTechnology Co. Ltd.", - [3]byte{112, 125, 185}: "Cisco Systems, Inc", - [3]byte{112, 126, 67}: "ARRIS Group, Inc.", - [3]byte{112, 126, 222}: "NASTEC LTD.", - [3]byte{112, 129, 5}: "Cisco Systems, Inc", - [3]byte{112, 129, 235}: "Apple, Inc.", - [3]byte{112, 130, 14}: "as electronics GmbH", - [3]byte{112, 130, 142}: "OleumTech Corporation", - [3]byte{112, 133, 194}: "ASRock Incorporation", - [3]byte{112, 133, 198}: "ARRIS Group, Inc.", - [3]byte{112, 134, 193}: "Texas Instruments", - [3]byte{112, 136, 77}: "JAPAN RADIO CO., LTD.", - [3]byte{112, 138, 9}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{112, 139, 120}: "citygrow technology co., ltd", - [3]byte{112, 139, 205}: "ASUSTek COMPUTER INC.", - [3]byte{112, 141, 9}: "Nokia Corporation", - [3]byte{112, 145, 143}: "Weber-Stephen Products LLC", - [3]byte{112, 145, 243}: "Universal Electronics, Inc.", - [3]byte{112, 147, 131}: "Intelligent Optical Network High Tech CO.,LTD.", - [3]byte{112, 147, 248}: "Space Monkey, Inc.", - [3]byte{112, 151, 86}: "Happyelectronics Co.,Ltd", - [3]byte{112, 153, 28}: "Shenzhen Honesty Electronics Co.,Ltd", - [3]byte{112, 154, 11}: "Italian Institute of Technology", - [3]byte{112, 155, 165}: "Shenzhen Y&D Electronics Co.,LTD.", - [3]byte{112, 155, 252}: "Bryton Inc.", - [3]byte{112, 156, 143}: "Nero AG", - [3]byte{112, 158, 41}: "Sony Interactive Entertainment Inc.", - [3]byte{112, 158, 134}: "X6D Limited", - [3]byte{112, 159, 45}: "zte corporation", - [3]byte{112, 161, 145}: "Trendsetter Medical, LLC", - [3]byte{112, 162, 179}: "Apple, Inc.", - [3]byte{112, 164, 28}: "Advanced Wireless Dynamics S.L.", - [3]byte{112, 166, 106}: "Prox Dynamics AS", - [3]byte{112, 168, 76}: "MONAD., Inc.", - [3]byte{112, 168, 227}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{112, 170, 178}: "BlackBerry RTS", - [3]byte{112, 173, 84}: "Malvern Instruments Ltd", - [3]byte{112, 175, 36}: "TP Vision Belgium NV", - [3]byte{112, 175, 37}: "Nishiyama Industry Co.,LTD.", - [3]byte{112, 175, 106}: "SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.", - [3]byte{112, 176, 53}: "Shenzhen Zowee Technology Co., Ltd", - [3]byte{112, 176, 140}: "Shenou Communication Equipment Co.,Ltd", - [3]byte{112, 177, 78}: "ARRIS Group, Inc.", - [3]byte{112, 178, 101}: "Hiltron s.r.l.", - [3]byte{112, 179, 213}: "IEEE Registration Authority", - [3]byte{112, 181, 153}: "Embedded Technologies s.r.o.", - [3]byte{112, 183, 226}: "Jiangsu Miter Technology Co.,Ltd.", - [3]byte{112, 185, 33}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{112, 186, 239}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{112, 191, 62}: "Charles River Laboratories", - [3]byte{112, 198, 172}: "Bosch Automotive Aftermarket", - [3]byte{112, 199, 111}: "INNO S", - [3]byte{112, 202, 77}: "Shenzhen lnovance Technology Co.,Ltd.", - [3]byte{112, 202, 155}: "Cisco Systems, Inc", - [3]byte{112, 205, 96}: "Apple, Inc.", - [3]byte{112, 211, 121}: "Cisco Systems, Inc", - [3]byte{112, 212, 242}: "RIM", - [3]byte{112, 213, 126}: "Scalar Corporation", - [3]byte{112, 213, 231}: "Wellcore Corporation", - [3]byte{112, 214, 182}: "Metrum Technologies", - [3]byte{112, 216, 128}: "Upos System sp. z o.o.", - [3]byte{112, 217, 35}: "vivo Mobile Communication Co., Ltd.", - [3]byte{112, 217, 49}: "Cambridge Industries(Group) Co.,Ltd.", - [3]byte{112, 218, 156}: "TECSEN", - [3]byte{112, 219, 152}: "Cisco Systems, Inc", - [3]byte{112, 221, 161}: "Tellabs", - [3]byte{112, 222, 226}: "Apple, Inc.", - [3]byte{112, 222, 249}: "FAI WAH INTERNATIONAL (HONG KONG) LIMITED", - [3]byte{112, 223, 47}: "Cisco Systems, Inc", - [3]byte{112, 224, 39}: "HONGYU COMMUNICATION TECHNOLOGY LIMITED", - [3]byte{112, 225, 57}: "3view Ltd", - [3]byte{112, 225, 253}: "FLEXTRONICS", - [3]byte{112, 226, 76}: "SAE IT-systems GmbH & Co. KG", - [3]byte{112, 226, 132}: "Wistron Infocomm (Zhongshan) Corporation", - [3]byte{112, 228, 34}: "Cisco Systems, Inc", - [3]byte{112, 229, 110}: "Texas Instruments", - [3]byte{112, 231, 44}: "Apple, Inc.", - [3]byte{112, 232, 67}: "Beijing C&W Optical Communication Technology Co.,Ltd.", - [3]byte{112, 236, 228}: "Apple, Inc.", - [3]byte{112, 238, 80}: "Netatmo", - [3]byte{112, 238, 163}: "Eoptolink Technology Inc. Ltd,", - [3]byte{112, 240, 135}: "Apple, Inc.", - [3]byte{112, 241, 28}: "Shenzhen Ogemray Technology Co.,Ltd", - [3]byte{112, 241, 118}: "Data Modul AG", - [3]byte{112, 241, 150}: "Actiontec Electronics, Inc", - [3]byte{112, 241, 161}: "Liteon Technology Corporation", - [3]byte{112, 241, 229}: "Xetawave LLC", - [3]byte{112, 243, 90}: "Cisco Systems, Inc", - [3]byte{112, 243, 149}: "Universal Global Scientific Industrial Co., Ltd.", - [3]byte{112, 248, 231}: "IEEE Registration Authority", - [3]byte{112, 249, 39}: "Samsung Electronics Co.,Ltd", - [3]byte{112, 249, 109}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{112, 252, 140}: "OneAccess SA", - [3]byte{112, 255, 92}: "Cheerzing Communication(Xiamen)Technology Co.,Ltd", - [3]byte{112, 255, 118}: "Texas Instruments", - [3]byte{116, 3, 189}: "BUFFALO.INC", - [3]byte{116, 4, 43}: "Lenovo Mobile Communication (Wuhan) Company Limited", - [3]byte{116, 10, 188}: "LightwaveRF Technology Ltd", - [3]byte{116, 14, 219}: "Optowiz Co., Ltd", - [3]byte{116, 20, 137}: "SRT Wireless", - [3]byte{116, 21, 226}: "Tri-Sen Systems Corporation", - [3]byte{116, 24, 101}: "Shanghai DareGlobal Technologies Co.,Ltd", - [3]byte{116, 25, 248}: "IEEE Registration Authority", - [3]byte{116, 26, 224}: "IEEE Registration Authority", - [3]byte{116, 27, 178}: "Apple, Inc.", - [3]byte{116, 28, 39}: "ITEL MOBILE LIMITED", - [3]byte{116, 30, 147}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{116, 31, 74}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{116, 35, 68}: "Xiaomi Communications Co Ltd", - [3]byte{116, 37, 138}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{116, 38, 172}: "Cisco Systems, Inc", - [3]byte{116, 39, 60}: "ChangYang Technology (Nanjing) Co., LTD", - [3]byte{116, 39, 234}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{116, 40, 87}: "Mayfield Robotics", - [3]byte{116, 41, 175}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{116, 43, 15}: "Infinidat Ltd.", - [3]byte{116, 43, 98}: "FUJITSU LIMITED", - [3]byte{116, 45, 10}: "Norfolk Elektronik AG", - [3]byte{116, 46, 252}: "DirectPacket Research, Inc,", - [3]byte{116, 47, 104}: "AzureWave Technology Inc.", - [3]byte{116, 49, 112}: "Arcadyan Technology Corporation", - [3]byte{116, 50, 86}: "NT-ware Systemprg GmbH", - [3]byte{116, 55, 47}: "Tongfang Shenzhen Cloudcomputing Technology Co.,Ltd", - [3]byte{116, 55, 59}: "UNINET Co.,Ltd.", - [3]byte{116, 56, 137}: "ANNAX Anzeigesysteme GmbH", - [3]byte{116, 58, 101}: "NEC Corporation", - [3]byte{116, 62, 43}: "Ruckus Wireless", - [3]byte{116, 62, 203}: "Gentrice tech", - [3]byte{116, 68, 1}: "NETGEAR", - [3]byte{116, 69, 138}: "Samsung Electronics Co.,Ltd", - [3]byte{116, 70, 160}: "Hewlett Packard", - [3]byte{116, 74, 164}: "zte corporation", - [3]byte{116, 75, 233}: "EXPLORER HYPERTECH CO.,LTD", - [3]byte{116, 77, 121}: "Arrive Systems Inc.", - [3]byte{116, 81, 186}: "Xiaomi Communications Co Ltd", - [3]byte{116, 83, 39}: "COMMSEN CO., LIMITED", - [3]byte{116, 84, 39}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD", - [3]byte{116, 84, 125}: "Cisco SPVTG", - [3]byte{116, 86, 18}: "ARRIS Group, Inc.", - [3]byte{116, 87, 152}: "TRUMPF Laser GmbH + Co. KG", - [3]byte{116, 90, 170}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{116, 92, 75}: "GN Audio A/S", - [3]byte{116, 92, 159}: "TCT mobile ltd", - [3]byte{116, 94, 28}: "PIONEER CORPORATION", - [3]byte{116, 95, 0}: "Samsung Semiconductor Inc.", - [3]byte{116, 95, 174}: "TSL PPL", - [3]byte{116, 97, 75}: "Chongqing Huijiatong Information Technology Co., Ltd.", - [3]byte{116, 99, 223}: "VTS GmbH", - [3]byte{116, 101, 209}: "Atlinks", - [3]byte{116, 102, 48}: "T:mi Ytti", - [3]byte{116, 103, 247}: "Extreme Networks, Inc.", - [3]byte{116, 106, 58}: "Aperi Corporation", - [3]byte{116, 106, 137}: "Rezolt Corporation", - [3]byte{116, 106, 143}: "VS Vision Systems GmbH", - [3]byte{116, 107, 130}: "MOVEK", - [3]byte{116, 110, 228}: "Asia Vital Components Co.,Ltd.", - [3]byte{116, 111, 25}: "ICARVISIONS (SHENZHEN) TECHNOLOGY CO., LTD.", - [3]byte{116, 111, 61}: "Contec GmbH", - [3]byte{116, 111, 247}: "Wistron Neweb Corporation", - [3]byte{116, 114, 176}: "Guangzhou Shiyuan Electronics Co., Ltd.", - [3]byte{116, 114, 242}: "Chipsip Technology Co., Ltd.", - [3]byte{116, 115, 54}: "MICRODIGTAL Inc", - [3]byte{116, 117, 72}: "Amazon Technologies Inc.", - [3]byte{116, 120, 24}: "Jurumani Solutions", - [3]byte{116, 123, 122}: "ETH Inc.", - [3]byte{116, 125, 36}: "Phicomm (Shanghai) Co., Ltd.", - [3]byte{116, 125, 182}: "Aliwei Communications, Inc", - [3]byte{116, 126, 26}: "Red Embedded Design Limited", - [3]byte{116, 126, 45}: "Beijing Thomson CITIC Digital Technology Co. LTD.", - [3]byte{116, 129, 20}: "Apple, Inc.", - [3]byte{116, 129, 154}: "PT. Hartono Istana Teknologi", - [3]byte{116, 131, 239}: "Arista Networks", - [3]byte{116, 133, 42}: "PEGATRON CORPORATION", - [3]byte{116, 134, 11}: "Cisco Systems, Inc", - [3]byte{116, 134, 122}: "Dell Inc.", - [3]byte{116, 135, 169}: "OCT Technology Co., Ltd.", - [3]byte{116, 136, 42}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{116, 136, 139}: "ADB Broadband Italia", - [3]byte{116, 138, 105}: "Korea Image Technology Co., Ltd", - [3]byte{116, 141, 8}: "Apple, Inc.", - [3]byte{116, 142, 8}: "Bestek Corp.", - [3]byte{116, 142, 248}: "Brocade Communications Systems, Inc.", - [3]byte{116, 143, 27}: "MasterImage 3D", - [3]byte{116, 143, 77}: "MEN Mikro Elektronik GmbH", - [3]byte{116, 144, 80}: "Renesas Electronics Corporation", - [3]byte{116, 145, 26}: "Ruckus Wireless", - [3]byte{116, 145, 189}: "Four systems Co.,Ltd.", - [3]byte{116, 147, 164}: "Zebra Technologies Corp.", - [3]byte{116, 148, 61}: "AgJunction", - [3]byte{116, 149, 236}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{116, 150, 55}: "Todaair Electronic Co., Ltd", - [3]byte{116, 151, 129}: "zte corporation", - [3]byte{116, 153, 117}: "IBM Corporation", - [3]byte{116, 156, 82}: "Huizhou Desay SV Automotive Co., Ltd.", - [3]byte{116, 156, 227}: "KodaCloud Canada, Inc", - [3]byte{116, 157, 143}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{116, 157, 220}: "2Wire Inc", - [3]byte{116, 160, 47}: "Cisco Systems, Inc", - [3]byte{116, 160, 99}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{116, 162, 230}: "Cisco Systems, Inc", - [3]byte{116, 163, 74}: "ZIMI CORPORATION", - [3]byte{116, 164, 167}: "QRS Music Technologies, Inc.", - [3]byte{116, 164, 181}: "Powerleader Science and Technology Co. Ltd.", - [3]byte{116, 165, 40}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{116, 167, 34}: "LG Electronics (Mobile Communications)", - [3]byte{116, 167, 142}: "zte corporation", - [3]byte{116, 172, 95}: "Qiku Internet Network Scientific (Shenzhen) Co., Ltd.", - [3]byte{116, 173, 183}: "China Mobile Group Device Co.,Ltd.", - [3]byte{116, 174, 118}: "iNovo Broadband, Inc.", - [3]byte{116, 176, 12}: "Network Video Technologies, Inc", - [3]byte{116, 180, 114}: "CIESSE", - [3]byte{116, 181, 126}: "zte corporation", - [3]byte{116, 185, 235}: "JinQianMao Technology Co.,Ltd.", - [3]byte{116, 186, 219}: "Longconn Electornics(shenzhen)Co.,Ltd", - [3]byte{116, 187, 211}: "Shenzhen xeme Communication Co., Ltd.", - [3]byte{116, 190, 8}: "ATEK Products, LLC", - [3]byte{116, 191, 161}: "HYUNTECK", - [3]byte{116, 191, 183}: "Nusoft Corporation", - [3]byte{116, 194, 70}: "Amazon Technologies Inc.", - [3]byte{116, 195, 48}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD", - [3]byte{116, 198, 33}: "Zhejiang Hite Renewable Energy Co.,LTD", - [3]byte{116, 198, 59}: "AzureWave Technology Inc.", - [3]byte{116, 201, 154}: "Ericsson AB", - [3]byte{116, 201, 163}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{116, 202, 37}: "Calxeda, Inc.", - [3]byte{116, 204, 57}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{116, 205, 12}: "Smith Myers Communications Ltd.", - [3]byte{116, 206, 86}: "Packet Force Technology Limited Company", - [3]byte{116, 208, 43}: "ASUSTek COMPUTER INC.", - [3]byte{116, 208, 220}: "Ericsson AB", - [3]byte{116, 210, 29}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{116, 212, 53}: "GIGA-BYTE TECHNOLOGY CO.,LTD.", - [3]byte{116, 214, 117}: "WYMA Tecnologia", - [3]byte{116, 214, 234}: "Texas Instruments", - [3]byte{116, 215, 202}: "Panasonic Corporation Automotive", - [3]byte{116, 216, 80}: "Evrisko Systems", - [3]byte{116, 218, 56}: "Edimax Technology Co. Ltd.", - [3]byte{116, 218, 218}: "D-Link International", - [3]byte{116, 218, 234}: "Texas Instruments", - [3]byte{116, 219, 209}: "Ebay Inc", - [3]byte{116, 222, 43}: "Liteon Technology Corporation", - [3]byte{116, 223, 191}: "Liteon Technology Corporation", - [3]byte{116, 224, 110}: "Ergophone GmbH", - [3]byte{116, 225, 74}: "IEEE Registration Authority", - [3]byte{116, 225, 154}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{116, 225, 182}: "Apple, Inc.", - [3]byte{116, 226, 119}: "Vizmonet Pte Ltd", - [3]byte{116, 226, 140}: "Microsoft Corporation", - [3]byte{116, 226, 245}: "Apple, Inc.", - [3]byte{116, 228, 36}: "APISTE CORPORATION", - [3]byte{116, 229, 11}: "Intel Corporate", - [3]byte{116, 229, 55}: "RADSPIN", - [3]byte{116, 229, 67}: "Liteon Technology Corporation", - [3]byte{116, 229, 249}: "Intel Corporate", - [3]byte{116, 230, 15}: "TECNO MOBILE LIMITED", - [3]byte{116, 230, 226}: "Dell Inc.", - [3]byte{116, 231, 198}: "ARRIS Group, Inc.", - [3]byte{116, 234, 58}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{116, 234, 200}: "New H3C Technologies Co., Ltd", - [3]byte{116, 234, 203}: "New H3C Technologies Co., Ltd", - [3]byte{116, 234, 232}: "ARRIS Group, Inc.", - [3]byte{116, 236, 241}: "Acumen", - [3]byte{116, 240, 109}: "AzureWave Technology Inc.", - [3]byte{116, 240, 125}: "BnCOM Co.,Ltd", - [3]byte{116, 241, 2}: "Beijing HCHCOM Technology Co., Ltd", - [3]byte{116, 244, 19}: "Maxwell Forest", - [3]byte{116, 246, 18}: "ARRIS Group, Inc.", - [3]byte{116, 246, 28}: "HTC Corporation", - [3]byte{116, 246, 97}: "Schneider Electric Fire & Security Oy", - [3]byte{116, 247, 38}: "Neuron Robotics", - [3]byte{116, 248, 93}: "Berkeley Nucleonics Corp", - [3]byte{116, 248, 219}: "IEEE Registration Authority", - [3]byte{116, 249, 26}: "Onface", - [3]byte{116, 253, 160}: "Compupal (Group) Corporation", - [3]byte{116, 254, 72}: "ADVANTECH CO., LTD.", - [3]byte{116, 255, 76}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd", - [3]byte{116, 255, 125}: "Wren Sound Systems, LLC", - [3]byte{120, 0, 158}: "Samsung Electronics Co.,Ltd", - [3]byte{120, 2, 143}: "Adaptive Spectrum and Signal Alignment (ASSIA), Inc.", - [3]byte{120, 2, 177}: "Cisco Systems, Inc", - [3]byte{120, 2, 183}: "ShenZhen Ultra Easy Technology CO.,LTD", - [3]byte{120, 2, 248}: "Xiaomi Communications Co Ltd", - [3]byte{120, 5, 65}: "Queclink Wireless Solutions Co., Ltd", - [3]byte{120, 7, 56}: "Z.U.K. Elzab S.A.", - [3]byte{120, 10, 199}: "Baofeng TV Co., Ltd.", - [3]byte{120, 12, 184}: "Intel Corporate", - [3]byte{120, 17, 133}: "NBS Payment Solutions Inc.", - [3]byte{120, 17, 220}: "XIAOMI Electronics,CO.,LTD", - [3]byte{120, 18, 184}: "ORANTEK LIMITED", - [3]byte{120, 24, 129}: "AzureWave Technology Inc.", - [3]byte{120, 25, 46}: "NASCENT Technology", - [3]byte{120, 25, 247}: "Juniper Networks", - [3]byte{120, 28, 90}: "SHARP Corporation", - [3]byte{120, 29, 186}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{120, 29, 253}: "Jabil Inc", - [3]byte{120, 31, 219}: "Samsung Electronics Co.,Ltd", - [3]byte{120, 32, 121}: "ID Tech", - [3]byte{120, 34, 61}: "Affirmed Networks", - [3]byte{120, 35, 174}: "ARRIS Group, Inc.", - [3]byte{120, 36, 175}: "ASUSTek COMPUTER INC.", - [3]byte{120, 37, 68}: "Omnima Limited", - [3]byte{120, 37, 173}: "Samsung Electronics Co.,Ltd", - [3]byte{120, 40, 202}: "Sonos, Inc.", - [3]byte{120, 43, 203}: "Dell Inc.", - [3]byte{120, 45, 126}: "TRENDnet, Inc.", - [3]byte{120, 46, 239}: "Nokia Corporation", - [3]byte{120, 48, 59}: "Stephen Technologies Co.,Limited", - [3]byte{120, 48, 225}: "UltraClenz, LLC", - [3]byte{120, 49, 43}: "zte corporation", - [3]byte{120, 49, 193}: "Apple, Inc.", - [3]byte{120, 50, 27}: "D-Link International", - [3]byte{120, 50, 79}: "Millennium Group, Inc.", - [3]byte{120, 54, 144}: "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd", - [3]byte{120, 58, 132}: "Apple, Inc.", - [3]byte{120, 60, 227}: "Kai-EE", - [3]byte{120, 61, 91}: "TELNET Redes Inteligentes S.A.", - [3]byte{120, 62, 83}: "BSkyB Ltd", - [3]byte{120, 63, 21}: "EasySYNC Ltd.", - [3]byte{120, 64, 228}: "Samsung Electronics Co.,Ltd", - [3]byte{120, 68, 5}: "FUJITU(HONG KONG) ELECTRONIC Co.,LTD.", - [3]byte{120, 68, 118}: "Zioncom Electronics (Shenzhen) Ltd.", - [3]byte{120, 68, 253}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{120, 69, 1}: "Biamp Systems", - [3]byte{120, 69, 97}: "CyberTAN Technology Inc.", - [3]byte{120, 69, 196}: "Dell Inc.", - [3]byte{120, 70, 196}: "DAEHAP HYPER-TECH", - [3]byte{120, 71, 29}: "Samsung Electronics Co.,Ltd", - [3]byte{120, 72, 89}: "Hewlett Packard", - [3]byte{120, 73, 29}: "The Will-Burt Company", - [3]byte{120, 75, 8}: "f.robotics acquisitions ltd", - [3]byte{120, 75, 135}: "Murata Manufacturing Co., Ltd.", - [3]byte{120, 79, 67}: "Apple, Inc.", - [3]byte{120, 81, 12}: "LiveU Ltd.", - [3]byte{120, 82, 26}: "Samsung Electronics Co.,Ltd", - [3]byte{120, 82, 98}: "Shenzhen Hojy Software Co., Ltd.", - [3]byte{120, 83, 242}: "ROXTON Ltd.", - [3]byte{120, 84, 46}: "D-Link International", - [3]byte{120, 85, 23}: "SankyuElectronics", - [3]byte{120, 87, 18}: "Mobile Integration Workgroup", - [3]byte{120, 88, 243}: "Vachen Co.,Ltd", - [3]byte{120, 89, 62}: "RAFI GmbH & Co.KG", - [3]byte{120, 89, 94}: "Samsung Electronics Co.,Ltd", - [3]byte{120, 89, 104}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{120, 92, 40}: "Prime Motion Inc.", - [3]byte{120, 92, 114}: "Hioso Technology Co., Ltd.", - [3]byte{120, 95, 76}: "Argox Information Co., Ltd.", - [3]byte{120, 97, 124}: "MITSUMI ELECTRIC CO.,LTD.", - [3]byte{120, 98, 86}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{120, 100, 230}: "Green Motive Technology Limited", - [3]byte{120, 102, 174}: "ZTEC Instruments, Inc.", - [3]byte{120, 103, 215}: "Apple, Inc.", - [3]byte{120, 104, 247}: "YSTen Technology Co.,Ltd", - [3]byte{120, 106, 137}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{120, 108, 28}: "Apple, Inc.", - [3]byte{120, 109, 148}: "Palo Alto Networks", - [3]byte{120, 113, 156}: "ARRIS Group, Inc.", - [3]byte{120, 123, 138}: "Apple, Inc.", - [3]byte{120, 125, 72}: "ITEL MOBILE LIMITED", - [3]byte{120, 126, 97}: "Apple, Inc.", - [3]byte{120, 127, 98}: "GiK mbH", - [3]byte{120, 128, 56}: "FUNAI ELECTRIC CO., LTD.", - [3]byte{120, 129, 2}: "Sercomm Corporation.", - [3]byte{120, 129, 143}: "Server Racks Australia Pty Ltd", - [3]byte{120, 132, 60}: "Sony Corporation", - [3]byte{120, 132, 238}: "INDRA ESPACIO S.A.", - [3]byte{120, 135, 13}: "Unifiedgateways India Private Limited", - [3]byte{120, 136, 109}: "Apple, Inc.", - [3]byte{120, 136, 138}: "CDR Sp. z o.o. Sp. k.", - [3]byte{120, 137, 115}: "CMC", - [3]byte{120, 138, 32}: "Ubiquiti Networks Inc.", - [3]byte{120, 139, 119}: "Standar Telecom", - [3]byte{120, 140, 77}: "Indyme Solutions, LLC", - [3]byte{120, 140, 84}: "Eltek Technologies LTD", - [3]byte{120, 141, 247}: "Hitron Technologies. Inc", - [3]byte{120, 142, 51}: "Jiangsu SEUIC Technology Co.,Ltd", - [3]byte{120, 146, 62}: "Nokia Corporation", - [3]byte{120, 146, 156}: "Intel Corporate", - [3]byte{120, 148, 180}: "Sercomm Corporation.", - [3]byte{120, 150, 130}: "zte corporation", - [3]byte{120, 150, 132}: "ARRIS Group, Inc.", - [3]byte{120, 152, 253}: "Q9 Networks Inc.", - [3]byte{120, 153, 92}: "Nationz Technologies Inc", - [3]byte{120, 153, 102}: "Musilab Electronics (DongGuan)Co.,Ltd.", - [3]byte{120, 153, 143}: "MEDILINE ITALIA SRL", - [3]byte{120, 156, 133}: "August Home, Inc.", - [3]byte{120, 156, 231}: "Shenzhen Aikede Technology Co., Ltd", - [3]byte{120, 158, 208}: "Samsung Electronics Co.,Ltd", - [3]byte{120, 159, 76}: "HOERBIGER Elektronik GmbH", - [3]byte{120, 159, 112}: "Apple, Inc.", - [3]byte{120, 159, 135}: "Siemens AG I IA PP PRM", - [3]byte{120, 160, 81}: "iiNet Labs Pty Ltd", - [3]byte{120, 161, 6}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{120, 161, 131}: "Advidia", - [3]byte{120, 162, 160}: "Nintendo Co., Ltd.", - [3]byte{120, 163, 81}: "SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD", - [3]byte{120, 163, 228}: "Apple, Inc.", - [3]byte{120, 165, 4}: "Texas Instruments", - [3]byte{120, 165, 221}: "Shenzhen Smarteye Digital Electronics Co., Ltd", - [3]byte{120, 166, 131}: "Precidata", - [3]byte{120, 166, 189}: "DAEYEON Control&Instrument Co,.Ltd", - [3]byte{120, 166, 225}: "Brocade Communications Systems, Inc.", - [3]byte{120, 167, 20}: "Amphenol", - [3]byte{120, 168, 115}: "Samsung Electronics Co.,Ltd", - [3]byte{120, 171, 96}: "ABB Australia", - [3]byte{120, 171, 187}: "Samsung Electronics Co.,Ltd", - [3]byte{120, 172, 191}: "Igneous Systems", - [3]byte{120, 172, 192}: "Hewlett Packard", - [3]byte{120, 174, 12}: "Far South Networks", - [3]byte{120, 175, 88}: "GIMASI SA", - [3]byte{120, 178, 141}: "Beijing Tengling Technology CO.Ltd", - [3]byte{120, 179, 185}: "ShangHai sunup lighting CO.,LTD", - [3]byte{120, 179, 206}: "Elo touch solutions", - [3]byte{120, 181, 210}: "Ever Treasure Industrial Limited", - [3]byte{120, 182, 193}: "AOBO Telecom Co.,Ltd", - [3]byte{120, 184, 26}: "INTER SALES A/S", - [3]byte{120, 184, 75}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD", - [3]byte{120, 186, 208}: "Shinybow Technology Co. Ltd.", - [3]byte{120, 186, 249}: "Cisco Systems, Inc", - [3]byte{120, 188, 26}: "Cisco Systems, Inc", - [3]byte{120, 189, 188}: "Samsung Electronics Co.,Ltd", - [3]byte{120, 190, 182}: "Enhanced Vision", - [3]byte{120, 190, 189}: "STULZ GmbH", - [3]byte{120, 193, 167}: "zte corporation", - [3]byte{120, 194, 192}: "IEEE Registration Authority", - [3]byte{120, 195, 233}: "Samsung Electronics Co.,Ltd", - [3]byte{120, 196, 14}: "H&D Wireless", - [3]byte{120, 196, 171}: "Shenzhen Runsil Technology Co.,Ltd", - [3]byte{120, 197, 229}: "Texas Instruments", - [3]byte{120, 198, 187}: "Innovasic, Inc.", - [3]byte{120, 202, 4}: "Nokia Corporation", - [3]byte{120, 202, 57}: "Apple, Inc.", - [3]byte{120, 202, 94}: "ELNO", - [3]byte{120, 202, 131}: "IEEE Registration Authority", - [3]byte{120, 203, 51}: "DHC Software Co.,Ltd", - [3]byte{120, 203, 104}: "DAEHAP HYPER-TECH", - [3]byte{120, 205, 142}: "SMC Networks Inc", - [3]byte{120, 208, 4}: "Neousys Technology Inc.", - [3]byte{120, 209, 41}: "Vicos", - [3]byte{120, 211, 79}: "Pace-O-Matic, Inc.", - [3]byte{120, 211, 141}: "HONGKONG YUNLINK TECHNOLOGY LIMITED", - [3]byte{120, 213, 181}: "NAVIELEKTRO KY", - [3]byte{120, 214, 111}: "Aristocrat Technologies Australia Pty. Ltd.", - [3]byte{120, 214, 178}: "Toshiba", - [3]byte{120, 214, 240}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{120, 215, 82}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{120, 215, 95}: "Apple, Inc.", - [3]byte{120, 216, 0}: "IEEE Registration Authority", - [3]byte{120, 217, 159}: "NuCom HK Ltd.", - [3]byte{120, 218, 110}: "Cisco Systems, Inc", - [3]byte{120, 218, 179}: "GBO Technology", - [3]byte{120, 221, 8}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{120, 221, 214}: "c-scape", - [3]byte{120, 221, 217}: "Guangzhou Shiyuan Electronics Co., Ltd.", - [3]byte{120, 222, 228}: "Texas Instruments", - [3]byte{120, 225, 3}: "Amazon Technologies Inc.", - [3]byte{120, 227, 181}: "Hewlett Packard", - [3]byte{120, 228, 0}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{120, 231, 209}: "Hewlett Packard", - [3]byte{120, 232, 182}: "zte corporation", - [3]byte{120, 233, 128}: "RainUs Co.,Ltd", - [3]byte{120, 235, 20}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD", - [3]byte{120, 235, 57}: "Instituto Nacional de Tecnología Industrial", - [3]byte{120, 236, 34}: "Shanghai Qihui Telecom Technology Co., LTD", - [3]byte{120, 236, 116}: "Kyland-USA", - [3]byte{120, 239, 76}: "Unetconvergence Co., Ltd.", - [3]byte{120, 242, 158}: "PEGATRON CORPORATION", - [3]byte{120, 245, 87}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{120, 245, 229}: "BEGA Gantenbrink-Leuchten KG", - [3]byte{120, 245, 253}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{120, 247, 190}: "Samsung Electronics Co.,Ltd", - [3]byte{120, 247, 208}: "Silverbrook Research", - [3]byte{120, 248, 130}: "LG Electronics (Mobile Communications)", - [3]byte{120, 249, 68}: "Private", - [3]byte{120, 252, 20}: "Family Zone Cyber Safety Ltd", - [3]byte{120, 253, 148}: "Apple, Inc.", - [3]byte{120, 254, 61}: "Juniper Networks", - [3]byte{120, 254, 65}: "Socus networks", - [3]byte{120, 254, 226}: "Shanghai Diveo Technology Co., Ltd", - [3]byte{120, 255, 87}: "Intel Corporate", - [3]byte{120, 255, 202}: "TECNO MOBILE LIMITED", - [3]byte{124, 1, 10}: "Texas Instruments", - [3]byte{124, 1, 135}: "Curtis Instruments, Inc.", - [3]byte{124, 1, 145}: "Apple, Inc.", - [3]byte{124, 2, 188}: "Hansung Electronics Co. LTD", - [3]byte{124, 3, 76}: "Sagemcom Broadband SAS", - [3]byte{124, 3, 201}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{124, 3, 216}: "Sagemcom Broadband SAS", - [3]byte{124, 4, 208}: "Apple, Inc.", - [3]byte{124, 5, 7}: "PEGATRON CORPORATION", - [3]byte{124, 5, 30}: "RAFAEL LTD.", - [3]byte{124, 6, 35}: "Ultra Electronics Sonar System Division", - [3]byte{124, 8, 217}: "Shanghai B-Star Technology Co", - [3]byte{124, 9, 43}: "Bekey A/S", - [3]byte{124, 10, 80}: "J-MEX Inc.", - [3]byte{124, 11, 198}: "Samsung Electronics Co.,Ltd", - [3]byte{124, 14, 206}: "Cisco Systems, Inc", - [3]byte{124, 16, 21}: "Brilliant Home Technology, Inc.", - [3]byte{124, 17, 190}: "Apple, Inc.", - [3]byte{124, 17, 203}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{124, 17, 205}: "QianTang Technology", - [3]byte{124, 20, 118}: "Damall Technologies SAS", - [3]byte{124, 22, 13}: "Saia-Burgess Controls AG", - [3]byte{124, 24, 205}: "E-TRON Co.,Ltd.", - [3]byte{124, 26, 3}: "8Locations Co., Ltd.", - [3]byte{124, 26, 252}: "Dalian Co-Edifice Video Technology Co., Ltd", - [3]byte{124, 28, 78}: "LG Innotek", - [3]byte{124, 28, 104}: "Samsung Electronics Co.,Ltd", - [3]byte{124, 28, 241}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{124, 29, 217}: "Xiaomi Communications Co Ltd", - [3]byte{124, 30, 82}: "Microsoft", - [3]byte{124, 30, 179}: "2N TELEKOMUNIKACE a.s.", - [3]byte{124, 32, 72}: "KoamTac", - [3]byte{124, 32, 100}: "Alcatel-Lucent IPD", - [3]byte{124, 37, 135}: "chaowifi.com", - [3]byte{124, 38, 52}: "ARRIS Group, Inc.", - [3]byte{124, 38, 100}: "Sagemcom Broadband SAS", - [3]byte{124, 43, 225}: "Shenzhen Ferex Electrical Co.,Ltd", - [3]byte{124, 44, 243}: "Secure Electrans Ltd", - [3]byte{124, 46, 13}: "Blackmagic Design", - [3]byte{124, 46, 221}: "Samsung Electronics Co.,Ltd", - [3]byte{124, 47, 128}: "Gigaset Communications GmbH", - [3]byte{124, 51, 110}: "MEG Electronics Inc.", - [3]byte{124, 53, 72}: "Transcend Information", - [3]byte{124, 56, 102}: "Texas Instruments", - [3]byte{124, 56, 108}: "Real Time Logic", - [3]byte{124, 57, 32}: "SSOMA SECURITY", - [3]byte{124, 59, 213}: "Imago Group", - [3]byte{124, 60, 182}: "Shenzhen Homecare Technology Co.,Ltd.", - [3]byte{124, 62, 157}: "PATECH", - [3]byte{124, 67, 143}: "E-Band Communications Corp.", - [3]byte{124, 68, 76}: "Entertainment Solutions, S.L.", - [3]byte{124, 70, 133}: "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.", - [3]byte{124, 71, 124}: "IEEE Registration Authority", - [3]byte{124, 73, 185}: "Plexus Manufacturing Sdn Bhd", - [3]byte{124, 74, 130}: "Portsmith LLC", - [3]byte{124, 74, 168}: "MindTree Wireless PVT Ltd", - [3]byte{124, 75, 120}: "Red Sun Synthesis Pte Ltd", - [3]byte{124, 76, 88}: "Scale Computing, Inc.", - [3]byte{124, 76, 165}: "BSkyB Ltd", - [3]byte{124, 79, 125}: "Sawwave", - [3]byte{124, 79, 181}: "Arcadyan Technology Corporation", - [3]byte{124, 80, 73}: "Apple, Inc.", - [3]byte{124, 83, 74}: "Metamako", - [3]byte{124, 85, 231}: "YSI, Inc.", - [3]byte{124, 87, 78}: "COBI GmbH", - [3]byte{124, 90, 28}: "Sophos Ltd", - [3]byte{124, 90, 103}: "JNC Systems, Inc.", - [3]byte{124, 92, 248}: "Intel Corporate", - [3]byte{124, 96, 151}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{124, 97, 147}: "HTC Corporation", - [3]byte{124, 100, 86}: "Samsung Electronics Co.,Ltd", - [3]byte{124, 102, 157}: "Texas Instruments", - [3]byte{124, 103, 162}: "Intel Corporate", - [3]byte{124, 105, 246}: "Cisco Systems, Inc", - [3]byte{124, 106, 179}: "IBC TECHNOLOGIES INC.", - [3]byte{124, 106, 195}: "GatesAir, Inc", - [3]byte{124, 106, 219}: "SafeTone Technology Co.,Ltd", - [3]byte{124, 106, 243}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{124, 107, 51}: "Tenyu Tech Co. Ltd.", - [3]byte{124, 107, 82}: "Tigaro Wireless", - [3]byte{124, 107, 247}: "NTI co., ltd.", - [3]byte{124, 108, 57}: "PIXSYS SRL", - [3]byte{124, 108, 143}: "AMS NEVE LTD", - [3]byte{124, 109, 98}: "Apple, Inc.", - [3]byte{124, 109, 248}: "Apple, Inc.", - [3]byte{124, 111, 6}: "Caterpillar Trimble Control Technologies", - [3]byte{124, 111, 248}: "ShenZhen ACTO Digital Video Technology Co.,Ltd.", - [3]byte{124, 112, 188}: "IEEE Registration Authority", - [3]byte{124, 113, 118}: "Wuxi iData Technology Company Ltd.", - [3]byte{124, 114, 228}: "Unikey Technologies", - [3]byte{124, 115, 139}: "Cocoon Alarm Ltd", - [3]byte{124, 118, 48}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{124, 118, 53}: "Intel Corporate", - [3]byte{124, 118, 115}: "ENMAS GmbH", - [3]byte{124, 120, 126}: "Samsung Electronics Co.,Ltd", - [3]byte{124, 121, 232}: "PayRange Inc.", - [3]byte{124, 122, 83}: "Phytrex Technology Corp.", - [3]byte{124, 122, 145}: "Intel Corporate", - [3]byte{124, 123, 139}: "Control Concepts, Inc.", - [3]byte{124, 123, 228}: "Z'SEDAI KENKYUSHO CORPORATION", - [3]byte{124, 125, 61}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{124, 125, 65}: "Jinmuyu Electronics Co., Ltd.", - [3]byte{124, 130, 45}: "Nortec", - [3]byte{124, 130, 116}: "Shenzhen Hikeen Technology CO.,LTD", - [3]byte{124, 131, 6}: "Glen Dimplex Nordic as", - [3]byte{124, 139, 202}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{124, 141, 145}: "Shanghai Hongzhuo Information Technology co.,LTD", - [3]byte{124, 142, 228}: "Texas Instruments", - [3]byte{124, 145, 34}: "Samsung Electronics Co.,Ltd", - [3]byte{124, 148, 178}: "Philips Healthcare PCCI", - [3]byte{124, 149, 177}: "Aerohive Networks Inc.", - [3]byte{124, 149, 243}: "Cisco Systems, Inc", - [3]byte{124, 151, 99}: "Openmatics s.r.o.", - [3]byte{124, 154, 155}: "VSE valencia smart energy", - [3]byte{124, 161, 93}: "GN ReSound A/S", - [3]byte{124, 162, 55}: "King Slide Technology CO., LTD.", - [3]byte{124, 162, 62}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{124, 162, 155}: "D.SignT GmbH & Co. KG", - [3]byte{124, 166, 29}: "MHL, LLC", - [3]byte{124, 169, 125}: "Objenious", - [3]byte{124, 171, 37}: "MESMO TECHNOLOGY INC.", - [3]byte{124, 172, 178}: "Bosch Software Innovations GmbH", - [3]byte{124, 173, 116}: "Cisco Systems, Inc", - [3]byte{124, 176, 62}: "OSRAM GmbH", - [3]byte{124, 176, 194}: "Intel Corporate", - [3]byte{124, 177, 93}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{124, 177, 119}: "Satelco AG", - [3]byte{124, 178, 27}: "Cisco SPVTG", - [3]byte{124, 178, 50}: "Hui Zhou Gaoshengda Technology Co.,LTD", - [3]byte{124, 178, 92}: "Acacia Communications", - [3]byte{124, 181, 66}: "ACES Technology", - [3]byte{124, 183, 51}: "ASKEY COMPUTER CORP", - [3]byte{124, 183, 123}: "Paradigm Electronics Inc", - [3]byte{124, 185, 96}: "Shanghai X-Cheng telecom LTD", - [3]byte{124, 186, 204}: "IEEE Registration Authority", - [3]byte{124, 187, 111}: "Cosco Electronics Co., Ltd.", - [3]byte{124, 187, 138}: "Nintendo Co., Ltd.", - [3]byte{124, 189, 6}: "AE REFUsol", - [3]byte{124, 191, 136}: "Mobilicom LTD", - [3]byte{124, 191, 177}: "ARRIS Group, Inc.", - [3]byte{124, 195, 161}: "Apple, Inc.", - [3]byte{124, 196, 239}: "Devialet", - [3]byte{124, 197, 55}: "Apple, Inc.", - [3]byte{124, 198, 196}: "Kolff Computer Supplies b.v.", - [3]byte{124, 199, 9}: "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.", - [3]byte{124, 200, 171}: "Acro Associates, Inc.", - [3]byte{124, 200, 208}: "TIANJIN YAAN TECHNOLOGY CO., LTD.", - [3]byte{124, 200, 215}: "Damalisk", - [3]byte{124, 201, 90}: "Dell EMC", - [3]byte{124, 203, 13}: "Antaira Technologies, LLC", - [3]byte{124, 203, 226}: "IEEE Registration Authority", - [3]byte{124, 204, 31}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD", - [3]byte{124, 204, 184}: "Intel Corporate", - [3]byte{124, 205, 17}: "MS-Magnet", - [3]byte{124, 205, 60}: "Guangzhou Juzing Technology Co., Ltd", - [3]byte{124, 207, 207}: "Shanghai SEARI Intelligent System Co., Ltd", - [3]byte{124, 209, 195}: "Apple, Inc.", - [3]byte{124, 211, 10}: "INVENTEC Corporation", - [3]byte{124, 215, 98}: "Freestyle Technology Pty Ltd", - [3]byte{124, 216, 68}: "Enmotus Inc", - [3]byte{124, 217, 254}: "New Cosmos Electric Co., Ltd.", - [3]byte{124, 218, 132}: "Dongnian Networks Inc.", - [3]byte{124, 221, 17}: "Chongqing MAS SCI&TECH.Co.,Ltd", - [3]byte{124, 221, 32}: "IOXOS Technologies S.A.", - [3]byte{124, 221, 118}: "Suzhou Hanming Technologies Co., Ltd.", - [3]byte{124, 221, 144}: "Shenzhen Ogemray Technology Co., Ltd.", - [3]byte{124, 224, 68}: "NEON Inc", - [3]byte{124, 225, 255}: "Computer Performance, Inc. DBA Digital Loggers, Inc.", - [3]byte{124, 226, 202}: "Juniper Networks", - [3]byte{124, 228, 170}: "Private", - [3]byte{124, 229, 36}: "Quirky, Inc.", - [3]byte{124, 229, 107}: "ESEN Optoelectronics Technology Co.,Ltd.", - [3]byte{124, 233, 124}: "ITEL MOBILE LIMITED", - [3]byte{124, 233, 211}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{124, 235, 127}: "Dmet Products Corp.", - [3]byte{124, 235, 174}: "Ridgeline Instruments", - [3]byte{124, 235, 234}: "ASCT", - [3]byte{124, 236, 121}: "Texas Instruments", - [3]byte{124, 237, 141}: "Microsoft", - [3]byte{124, 239, 24}: "Creative Product Design Pty. Ltd.", - [3]byte{124, 239, 138}: "Inhon International Ltd.", - [3]byte{124, 240, 95}: "Apple, Inc.", - [3]byte{124, 240, 152}: "Bee Beans Technologies, Inc.", - [3]byte{124, 240, 186}: "Linkwell Telesystems Pvt Ltd", - [3]byte{124, 244, 41}: "NUUO Inc.", - [3]byte{124, 248, 84}: "Samsung Electronics Co.,Ltd", - [3]byte{124, 249, 14}: "Samsung Electronics Co.,Ltd", - [3]byte{124, 249, 92}: "U.I. Lapp GmbH", - [3]byte{124, 250, 223}: "Apple, Inc.", - [3]byte{124, 252, 60}: "Visteon Corporation", - [3]byte{124, 254, 40}: "Salutron Inc.", - [3]byte{124, 254, 78}: "Shenzhen Safe vision Technology Co.,LTD", - [3]byte{124, 254, 144}: "Mellanox Technologies, Inc.", - [3]byte{124, 255, 98}: "Huizhou Super Electron Technology Co.,Ltd.", - [3]byte{128, 0, 11}: "Intel Corporate", - [3]byte{128, 0, 16}: "AT&T", - [3]byte{128, 0, 110}: "Apple, Inc.", - [3]byte{128, 1, 132}: "HTC Corporation", - [3]byte{128, 2, 223}: "ORA Inc.", - [3]byte{128, 5, 223}: "Montage Technology Group Limited", - [3]byte{128, 7, 162}: "Esson Technology Inc.", - [3]byte{128, 9, 2}: "Keysight Technologies, Inc.", - [3]byte{128, 10, 6}: "COMTEC co.,ltd", - [3]byte{128, 10, 128}: "IEEE Registration Authority", - [3]byte{128, 11, 81}: "Chengdu XGimi Technology Co.,Ltd", - [3]byte{128, 13, 215}: "Latticework, Inc", - [3]byte{128, 14, 36}: "ForgetBox", - [3]byte{128, 19, 130}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{128, 20, 64}: "Sunlit System Technology Corp", - [3]byte{128, 20, 168}: "Guangzhou V-SOLUTION Electronic Technology Co., Ltd.", - [3]byte{128, 22, 183}: "Brunel University", - [3]byte{128, 23, 125}: "Nortel Networks", - [3]byte{128, 24, 68}: "Dell Inc.", - [3]byte{128, 24, 167}: "Samsung Electronics Co.,Ltd", - [3]byte{128, 25, 52}: "Intel Corporate", - [3]byte{128, 25, 103}: "Shanghai Reallytek Information Technology Co.,Ltd", - [3]byte{128, 25, 254}: "JianLing Technology CO., LTD", - [3]byte{128, 29, 170}: "Avaya Inc", - [3]byte{128, 31, 2}: "Edimax Technology Co. Ltd.", - [3]byte{128, 32, 175}: "Trade FIDES, a.s.", - [3]byte{128, 34, 117}: "Beijing Beny Wave Technology Co Ltd", - [3]byte{128, 38, 137}: "D-Link International", - [3]byte{128, 41, 148}: "Technicolor CH USA Inc.", - [3]byte{128, 42, 168}: "Ubiquiti Networks Inc.", - [3]byte{128, 42, 250}: "Germaneers GmbH", - [3]byte{128, 45, 225}: "Solarbridge Technologies", - [3]byte{128, 46, 20}: "azeti Networks AG", - [3]byte{128, 47, 222}: "Zurich Instruments AG", - [3]byte{128, 48, 220}: "Texas Instruments", - [3]byte{128, 52, 87}: "OT Systems Limited", - [3]byte{128, 55, 115}: "NETGEAR", - [3]byte{128, 56, 150}: "SHARP Corporation", - [3]byte{128, 56, 188}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{128, 56, 253}: "LeapFrog Enterprises, Inc.", - [3]byte{128, 57, 229}: "PATLITE CORPORATION", - [3]byte{128, 58, 10}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{128, 58, 89}: "AT&T", - [3]byte{128, 59, 42}: "ABB Xiamen Low Voltage Equipment Co.,Ltd.", - [3]byte{128, 59, 154}: "ghe-ces electronic ag", - [3]byte{128, 59, 246}: "LOOK EASY INTERNATIONAL LIMITED", - [3]byte{128, 63, 93}: "Winstars Technology Ltd", - [3]byte{128, 63, 214}: "bytes at work AG", - [3]byte{128, 65, 78}: "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.", - [3]byte{128, 66, 124}: "Adolf Tedsen GmbH & Co. KG", - [3]byte{128, 71, 49}: "Packet Design, Inc.", - [3]byte{128, 72, 165}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD", - [3]byte{128, 73, 113}: "Apple, Inc.", - [3]byte{128, 75, 32}: "Ventilation Control", - [3]byte{128, 78, 129}: "Samsung Electronics Co.,Ltd", - [3]byte{128, 79, 88}: "ThinkEco, Inc.", - [3]byte{128, 80, 27}: "Nokia Corporation", - [3]byte{128, 80, 103}: "W & D TECHNOLOGY CORPORATION", - [3]byte{128, 86, 242}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{128, 87, 25}: "Samsung Electronics Co.,Ltd", - [3]byte{128, 88, 197}: "NovaTec Kommunikationstechnik GmbH", - [3]byte{128, 88, 248}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{128, 89, 253}: "Noviga", - [3]byte{128, 90, 4}: "LG Electronics (Mobile Communications)", - [3]byte{128, 94, 12}: "YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.", - [3]byte{128, 94, 192}: "YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.", - [3]byte{128, 96, 7}: "RIM", - [3]byte{128, 97, 95}: "Beijing Sinead Technology Co., Ltd.", - [3]byte{128, 97, 143}: "Shenzhen sangfei consumer communications co.,ltd", - [3]byte{128, 100, 89}: "Nimbus Inc.", - [3]byte{128, 101, 109}: "Samsung Electronics Co.,Ltd", - [3]byte{128, 101, 233}: "BenQ Corporation", - [3]byte{128, 102, 41}: "Prescope Technologies CO.,LTD.", - [3]byte{128, 106, 176}: "Shenzhen TINNO Mobile Technology Corp.", - [3]byte{128, 108, 27}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{128, 108, 139}: "KAESER KOMPRESSOREN AG", - [3]byte{128, 108, 188}: "NET New Electronic Technology GmbH", - [3]byte{128, 113, 31}: "Juniper Networks", - [3]byte{128, 113, 122}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{128, 115, 159}: "KYOCERA CORPORATION", - [3]byte{128, 116, 89}: "K's Co.,Ltd.", - [3]byte{128, 118, 147}: "Newag SA", - [3]byte{128, 121, 174}: "ShanDong Tecsunrise Co.,Ltd", - [3]byte{128, 122, 127}: "ABB Genway Xiamen Electrical Equipment CO., LTD", - [3]byte{128, 122, 191}: "HTC Corporation", - [3]byte{128, 123, 30}: "Corsair Components", - [3]byte{128, 123, 133}: "IEEE Registration Authority", - [3]byte{128, 125, 27}: "Neosystem Co. Ltd.", - [3]byte{128, 125, 227}: "Chongqing Sichuan Instrument Microcircuit Co.LTD.", - [3]byte{128, 129, 165}: "TONGQING COMMUNICATION EQUIPMENT (SHENZHEN) Co.,Ltd", - [3]byte{128, 130, 135}: "ATCOM Technology Co.Ltd.", - [3]byte{128, 134, 152}: "Netronics Technologies Inc.", - [3]byte{128, 134, 242}: "Intel Corporate", - [3]byte{128, 137, 23}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{128, 139, 92}: "Shenzhen Runhuicheng Technology Co., Ltd", - [3]byte{128, 140, 151}: "Kaonmedia CO., LTD.", - [3]byte{128, 141, 183}: "Hewlett Packard Enterprise", - [3]byte{128, 145, 42}: "Lih Rong electronic Enterprise Co., Ltd.", - [3]byte{128, 145, 192}: "AgileMesh, Inc.", - [3]byte{128, 146, 159}: "Apple, Inc.", - [3]byte{128, 147, 147}: "Xapt GmbH", - [3]byte{128, 148, 108}: "TOKYO RADAR CORPORATION", - [3]byte{128, 150, 177}: "ARRIS Group, Inc.", - [3]byte{128, 150, 202}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{128, 151, 27}: "Altenergy Power System,Inc.", - [3]byte{128, 155, 32}: "Intel Corporate", - [3]byte{128, 159, 171}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{128, 160, 54}: "Shanghai MXCHIP Information Technology Co., Ltd.", - [3]byte{128, 161, 171}: "Intellisis", - [3]byte{128, 161, 215}: "Shanghai DareGlobal Technologies Co.,Ltd", - [3]byte{128, 165, 137}: "AzureWave Technology Inc.", - [3]byte{128, 168, 93}: "Osterhout Design Group", - [3]byte{128, 170, 164}: "USAG", - [3]byte{128, 172, 172}: "Juniper Networks", - [3]byte{128, 173, 103}: "Kasda Networks Inc", - [3]byte{128, 176, 61}: "Apple, Inc.", - [3]byte{128, 178, 25}: "ELEKTRON TECHNOLOGY UK LIMITED", - [3]byte{128, 178, 52}: "Technicolor CH USA Inc.", - [3]byte{128, 178, 137}: "Forworld Electronics Ltd.", - [3]byte{128, 179, 42}: "Alstom Grid", - [3]byte{128, 182, 134}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{128, 183, 8}: "Blue Danube Systems, Inc", - [3]byte{128, 183, 9}: "Viptela, Inc", - [3]byte{128, 185, 92}: "ELFTECH Co., Ltd.", - [3]byte{128, 186, 172}: "TeleAdapt Ltd", - [3]byte{128, 186, 230}: "Neets", - [3]byte{128, 187, 235}: "Satmap Systems Ltd", - [3]byte{128, 190, 5}: "Apple, Inc.", - [3]byte{128, 193, 110}: "Hewlett Packard", - [3]byte{128, 197, 230}: "Microsoft Corporation", - [3]byte{128, 197, 242}: "AzureWave Technology Inc.", - [3]byte{128, 198, 63}: "Remec Broadband Wireless , LLC", - [3]byte{128, 198, 171}: "Technicolor CH USA Inc.", - [3]byte{128, 198, 202}: "Endian s.r.l.", - [3]byte{128, 199, 85}: "Panasonic Appliances Company", - [3]byte{128, 200, 98}: "Openpeak, Inc", - [3]byte{128, 206, 177}: "Theissen Training Systems GmbH", - [3]byte{128, 207, 65}: "Lenovo Mobile Communication Technology Ltd.", - [3]byte{128, 208, 25}: "Embed, Inc", - [3]byte{128, 208, 155}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{128, 209, 96}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{128, 209, 139}: "Hangzhou I'converge Technology Co.,Ltd", - [3]byte{128, 210, 29}: "AzureWave Technology Inc.", - [3]byte{128, 212, 51}: "LzLabs GmbH", - [3]byte{128, 212, 165}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{128, 214, 5}: "Apple, Inc.", - [3]byte{128, 215, 51}: "QSR Automations, Inc.", - [3]byte{128, 219, 49}: "Power Quotient International Co., Ltd.", - [3]byte{128, 224, 29}: "Cisco Systems, Inc", - [3]byte{128, 228, 218}: "IEEE Registration Authority", - [3]byte{128, 230, 80}: "Apple, Inc.", - [3]byte{128, 232, 111}: "Cisco Systems, Inc", - [3]byte{128, 234, 35}: "Wistron Neweb Corporation", - [3]byte{128, 234, 150}: "Apple, Inc.", - [3]byte{128, 234, 202}: "Dialog Semiconductor Hellas SA", - [3]byte{128, 235, 119}: "Wistron Corporation", - [3]byte{128, 237, 44}: "Apple, Inc.", - [3]byte{128, 238, 115}: "Shuttle Inc.", - [3]byte{128, 242, 94}: "Kyynel", - [3]byte{128, 245, 3}: "ARRIS Group, Inc.", - [3]byte{128, 245, 147}: "IRCO Sistemas de Telecomunicación S.A.", - [3]byte{128, 246, 46}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{128, 248, 235}: "RayTight", - [3]byte{128, 250, 91}: "CLEVO CO.", - [3]byte{128, 251, 6}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{128, 255, 168}: "UNIDIS", - [3]byte{132, 0, 45}: "PEGATRON CORPORATION", - [3]byte{132, 0, 210}: "Sony Mobile Communications AB", - [3]byte{132, 1, 167}: "Greyware Automation Products, Inc", - [3]byte{132, 4, 210}: "Kirale Technologies SL", - [3]byte{132, 11, 45}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{132, 15, 69}: "Shanghai GMT Digital Technologies Co., Ltd", - [3]byte{132, 16, 13}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{132, 17, 158}: "Samsung Electronics Co.,Ltd", - [3]byte{132, 22, 249}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{132, 23, 21}: "GP Electronics (HK) Ltd.", - [3]byte{132, 23, 102}: "Weifang GoerTek Technology Co.,Ltd.", - [3]byte{132, 24, 38}: "Osram GmbH", - [3]byte{132, 24, 58}: "Ruckus Wireless", - [3]byte{132, 24, 136}: "Juniper Networks", - [3]byte{132, 27, 56}: "Shenzhen Excelsecu Data Technology Co.,Ltd", - [3]byte{132, 27, 94}: "NETGEAR", - [3]byte{132, 30, 38}: "KERNEL-I Co.,LTD", - [3]byte{132, 32, 150}: "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.", - [3]byte{132, 33, 65}: "Shenzhen Ginwave Technologies Ltd.", - [3]byte{132, 33, 241}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{132, 36, 141}: "Zebra Technologies Inc", - [3]byte{132, 37, 25}: "Samsung Electronics", - [3]byte{132, 37, 63}: "silex technology, Inc.", - [3]byte{132, 37, 164}: "Tariox Limited", - [3]byte{132, 37, 219}: "Samsung Electronics Co.,Ltd", - [3]byte{132, 38, 21}: "ADB Broadband Italia", - [3]byte{132, 38, 43}: "Nokia", - [3]byte{132, 38, 144}: "BEIJING THOUGHT SCIENCE CO.,LTD.", - [3]byte{132, 39, 206}: "Corporation of the Presiding Bishop of The Church of Jesus Christ of Latter-day Saints", - [3]byte{132, 40, 90}: "Saffron Solutions Inc", - [3]byte{132, 41, 20}: "EMPORIA TELECOM Produktions- und VertriebsgesmbH & Co KG", - [3]byte{132, 41, 153}: "Apple, Inc.", - [3]byte{132, 43, 43}: "Dell Inc.", - [3]byte{132, 43, 80}: "Huria Co.,Ltd.", - [3]byte{132, 43, 188}: "Modelleisenbahn GmbH", - [3]byte{132, 44, 128}: "Sichuan Changhong Electric Ltd.", - [3]byte{132, 46, 39}: "Samsung Electronics Co.,Ltd", - [3]byte{132, 47, 117}: "Innokas Group", - [3]byte{132, 48, 229}: "SkyHawke Technologies, LLC", - [3]byte{132, 50, 234}: "ANHUI WANZTEN P&T CO., LTD", - [3]byte{132, 52, 151}: "Hewlett Packard", - [3]byte{132, 54, 17}: "hyungseul publishing networks", - [3]byte{132, 56, 53}: "Apple, Inc.", - [3]byte{132, 56, 56}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{132, 58, 75}: "Intel Corporate", - [3]byte{132, 61, 198}: "Cisco Systems, Inc", - [3]byte{132, 63, 78}: "Tri-Tech Manufacturing, Inc.", - [3]byte{132, 64, 118}: "Drivenets", - [3]byte{132, 65, 103}: "Apple, Inc.", - [3]byte{132, 68, 100}: "ServerU Inc", - [3]byte{132, 71, 101}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{132, 72, 35}: "WOXTER TECHNOLOGY Co. Ltd", - [3]byte{132, 73, 21}: "vArmour Networks, Inc.", - [3]byte{132, 75, 183}: "Beijing Sankuai Online Technology Co.,Ltd", - [3]byte{132, 75, 245}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{132, 79, 3}: "Ablelink Electronics Ltd", - [3]byte{132, 80, 154}: "Easy Soft TV Co., Ltd", - [3]byte{132, 81, 129}: "Samsung Electronics Co.,Ltd", - [3]byte{132, 85, 165}: "Samsung Electronics Co.,Ltd", - [3]byte{132, 86, 156}: "Coho Data, Inc.,", - [3]byte{132, 87, 135}: "DVR C&C Co., Ltd.", - [3]byte{132, 90, 129}: "ffly4u", - [3]byte{132, 91, 18}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{132, 92, 147}: "Chabrier Services", - [3]byte{132, 93, 215}: "Shenzhen Netcom Electronics Co.,Ltd", - [3]byte{132, 97, 160}: "ARRIS Group, Inc.", - [3]byte{132, 98, 35}: "Shenzhen Coship Electronics Co., Ltd.", - [3]byte{132, 98, 166}: "EuroCB (Phils), Inc.", - [3]byte{132, 99, 214}: "Microsoft Corporation", - [3]byte{132, 104, 62}: "Intel Corporate", - [3]byte{132, 106, 237}: "Wireless Tsukamoto.,co.LTD", - [3]byte{132, 110, 177}: "Park Assist LLC", - [3]byte{132, 114, 7}: "I&C Technology", - [3]byte{132, 115, 3}: "Letv Mobile and Intelligent Information Technology (Beijing) Corporation Ltd.", - [3]byte{132, 116, 42}: "zte corporation", - [3]byte{132, 118, 22}: "Addat s.r.o.", - [3]byte{132, 119, 120}: "Cochlear Limited", - [3]byte{132, 120, 139}: "Apple, Inc.", - [3]byte{132, 120, 172}: "Cisco Systems, Inc", - [3]byte{132, 121, 51}: "profichip GmbH", - [3]byte{132, 121, 115}: "Shanghai Baud Data Communication Co.,Ltd.", - [3]byte{132, 122, 136}: "HTC Corporation", - [3]byte{132, 123, 235}: "Dell Inc.", - [3]byte{132, 125, 80}: "Holley Metering Limited", - [3]byte{132, 126, 64}: "Texas Instruments", - [3]byte{132, 128, 45}: "Cisco Systems, Inc", - [3]byte{132, 130, 244}: "Beijing Huasun Unicreate Technology Co., Ltd", - [3]byte{132, 131, 25}: "Hangzhou Zero Zero Technology Co., Ltd.", - [3]byte{132, 131, 54}: "Newrun", - [3]byte{132, 131, 113}: "Avaya Inc", - [3]byte{132, 132, 51}: "Paradox Engineering SA", - [3]byte{132, 133, 6}: "Apple, Inc.", - [3]byte{132, 133, 10}: "Hella Sonnen- und Wetterschutztechnik GmbH", - [3]byte{132, 134, 243}: "Greenvity Communications", - [3]byte{132, 137, 173}: "Apple, Inc.", - [3]byte{132, 141, 132}: "Rajant Corporation", - [3]byte{132, 141, 199}: "Cisco SPVTG", - [3]byte{132, 142, 12}: "Apple, Inc.", - [3]byte{132, 142, 150}: "Embertec Pty Ltd", - [3]byte{132, 142, 223}: "Sony Mobile Communications AB", - [3]byte{132, 143, 105}: "Dell Inc.", - [3]byte{132, 144, 0}: "Arnold & Richter Cine Technik", - [3]byte{132, 147, 12}: "InCoax Networks Europe AB", - [3]byte{132, 148, 140}: "Hitron Technologies. Inc", - [3]byte{132, 150, 129}: "Cathay Communication Co.,Ltd", - [3]byte{132, 150, 216}: "ARRIS Group, Inc.", - [3]byte{132, 151, 184}: "Memjet Inc.", - [3]byte{132, 152, 102}: "Samsung Electronics Co.,Ltd", - [3]byte{132, 156, 166}: "Arcadyan Technology Corporation", - [3]byte{132, 157, 100}: "SMC Corporation", - [3]byte{132, 157, 197}: "Centera Photonics Inc.", - [3]byte{132, 159, 181}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{132, 161, 52}: "Apple, Inc.", - [3]byte{132, 161, 209}: "Sagemcom Broadband SAS", - [3]byte{132, 164, 35}: "Sagemcom Broadband SAS", - [3]byte{132, 164, 102}: "Samsung Electronics Co.,Ltd", - [3]byte{132, 166, 200}: "Intel Corporate", - [3]byte{132, 167, 131}: "Alcatel Lucent", - [3]byte{132, 167, 136}: "Perples", - [3]byte{132, 168, 228}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{132, 169, 145}: "Cyber Trans Japan Co.,Ltd.", - [3]byte{132, 169, 196}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{132, 170, 156}: "MitraStar Technology Corp.", - [3]byte{132, 172, 164}: "Beijing Novel Super Digital TV Technology Co., Ltd", - [3]byte{132, 172, 251}: "Crouzet Automatismes", - [3]byte{132, 173, 88}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{132, 175, 31}: "Beat System Service Co,. Ltd.", - [3]byte{132, 175, 236}: "BUFFALO.INC", - [3]byte{132, 177, 83}: "Apple, Inc.", - [3]byte{132, 178, 97}: "Cisco Systems, Inc", - [3]byte{132, 181, 23}: "Cisco Systems, Inc", - [3]byte{132, 181, 65}: "Samsung Electronics Co.,Ltd", - [3]byte{132, 181, 156}: "Juniper Networks", - [3]byte{132, 184, 2}: "Cisco Systems, Inc", - [3]byte{132, 186, 59}: "CANON INC.", - [3]byte{132, 190, 82}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{132, 192, 239}: "Samsung Electronics Co.,Ltd", - [3]byte{132, 193, 193}: "Juniper Networks", - [3]byte{132, 194, 228}: "Jiangsu Qinheng Co., Ltd.", - [3]byte{132, 195, 232}: "Vaillant GmbH", - [3]byte{132, 199, 39}: "Gnodal Ltd", - [3]byte{132, 199, 169}: "C3PO S.A.", - [3]byte{132, 199, 234}: "Sony Mobile Communications AB", - [3]byte{132, 200, 177}: "Incognito Software Systems Inc.", - [3]byte{132, 201, 178}: "D-Link International", - [3]byte{132, 205, 98}: "ShenZhen IDWELL Technology CO.,Ltd", - [3]byte{132, 207, 191}: "Fairphone", - [3]byte{132, 211, 42}: "IEEE 1905.1", - [3]byte{132, 212, 126}: "Aruba Networks", - [3]byte{132, 212, 200}: "Widex A/S", - [3]byte{132, 214, 208}: "Amazon Technologies Inc.", - [3]byte{132, 217, 49}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{132, 217, 200}: "Unipattern Co.,", - [3]byte{132, 219, 47}: "Sierra Wireless Inc", - [3]byte{132, 219, 172}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{132, 219, 252}: "Nokia", - [3]byte{132, 221, 32}: "Texas Instruments", - [3]byte{132, 221, 183}: "Cilag GmbH International", - [3]byte{132, 222, 61}: "Crystal Vision Ltd", - [3]byte{132, 223, 12}: "NET2GRID BV", - [3]byte{132, 223, 25}: "Chuango Security Technology Corporation", - [3]byte{132, 224, 88}: "ARRIS Group, Inc.", - [3]byte{132, 224, 244}: "IEEE Registration Authority", - [3]byte{132, 227, 35}: "Green Wave Telecommunication SDN BHD", - [3]byte{132, 227, 39}: "TAILYN TECHNOLOGIES INC", - [3]byte{132, 228, 217}: "Shenzhen NEED technology Ltd.", - [3]byte{132, 230, 41}: "Bluwan SA", - [3]byte{132, 231, 20}: "Liang Herng Enterprise,Co.Ltd.", - [3]byte{132, 234, 153}: "Vieworks", - [3]byte{132, 235, 24}: "Texas Instruments", - [3]byte{132, 237, 51}: "BBMC Co.,Ltd", - [3]byte{132, 239, 24}: "Intel Corporate", - [3]byte{132, 241, 41}: "Metrascale Inc.", - [3]byte{132, 244, 147}: "OMS spol. s.r.o.", - [3]byte{132, 246, 76}: "Cross Point BV", - [3]byte{132, 246, 250}: "Miovision Technologies Incorporated", - [3]byte{132, 252, 172}: "Apple, Inc.", - [3]byte{132, 252, 254}: "Apple, Inc.", - [3]byte{132, 254, 158}: "RTC Industries, Inc.", - [3]byte{132, 254, 220}: "Borqs Beijing Ltd.", - [3]byte{136, 1, 242}: "Vitec System Engineering Inc.", - [3]byte{136, 3, 85}: "Arcadyan Technology Corporation", - [3]byte{136, 7, 75}: "LG Electronics (Mobile Communications)", - [3]byte{136, 9, 5}: "MTMCommunications", - [3]byte{136, 9, 175}: "Masimo Corporation", - [3]byte{136, 15, 16}: "Huami Information Technology Co.,Ltd.", - [3]byte{136, 15, 182}: "Jabil Circuits India Pvt Ltd,-EHTP unit", - [3]byte{136, 16, 54}: "Panodic(ShenZhen) Electronics Limted", - [3]byte{136, 18, 78}: "Qualcomm Inc.", - [3]byte{136, 20, 43}: "Protonic Holland", - [3]byte{136, 21, 68}: "Cisco Meraki", - [3]byte{136, 24, 174}: "Tamron Co., Ltd", - [3]byte{136, 27, 153}: "SHENZHEN XIN FEI JIA ELECTRONIC CO. LTD.", - [3]byte{136, 29, 252}: "Cisco Systems, Inc", - [3]byte{136, 31, 161}: "Apple, Inc.", - [3]byte{136, 32, 18}: "LMI Technologies", - [3]byte{136, 33, 227}: "Nebusens, S.L.", - [3]byte{136, 35, 100}: "Watchnet DVR Inc", - [3]byte{136, 35, 254}: "TTTech Computertechnik AG", - [3]byte{136, 37, 44}: "Arcadyan Technology Corporation", - [3]byte{136, 37, 147}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{136, 40, 179}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{136, 41, 80}: "Dalian Netmoon Tech Develop Co.,Ltd", - [3]byte{136, 43, 215}: "ADDÉNERGIE TECHNOLOGIES", - [3]byte{136, 46, 90}: "storONE", - [3]byte{136, 48, 138}: "Murata Manufacturing Co., Ltd.", - [3]byte{136, 50, 155}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{136, 51, 20}: "Texas Instruments", - [3]byte{136, 51, 190}: "Ivenix, Inc.", - [3]byte{136, 53, 76}: "Transics", - [3]byte{136, 54, 18}: "SRC Computers, LLC", - [3]byte{136, 54, 95}: "LG Electronics (Mobile Communications)", - [3]byte{136, 54, 108}: "EFM Networks", - [3]byte{136, 59, 139}: "Cheering Connection Co. Ltd.", - [3]byte{136, 60, 28}: "MERCURY CORPORATION", - [3]byte{136, 63, 211}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{136, 65, 87}: "Shenzhen Atsmart Technology Co.,Ltd.", - [3]byte{136, 65, 193}: "ORBISAT DA AMAZONIA IND E AEROL SA", - [3]byte{136, 65, 252}: "AirTies Wireless Networks", - [3]byte{136, 67, 225}: "Cisco Systems, Inc", - [3]byte{136, 68, 119}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{136, 68, 246}: "Nokia Corporation", - [3]byte{136, 70, 42}: "Telechips Inc.", - [3]byte{136, 74, 234}: "Texas Instruments", - [3]byte{136, 75, 57}: "Siemens AG, Healthcare Sector", - [3]byte{136, 76, 207}: "Pulzze Systems, Inc", - [3]byte{136, 80, 221}: "Infiniband Trade Association", - [3]byte{136, 81, 251}: "Hewlett Packard", - [3]byte{136, 83, 46}: "Intel Corporate", - [3]byte{136, 83, 149}: "Apple, Inc.", - [3]byte{136, 83, 212}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{136, 87, 109}: "XTA Electronics Ltd", - [3]byte{136, 87, 238}: "BUFFALO.INC", - [3]byte{136, 90, 146}: "Cisco Systems, Inc", - [3]byte{136, 91, 221}: "Aerohive Networks Inc.", - [3]byte{136, 92, 71}: "Alcatel Lucent", - [3]byte{136, 93, 144}: "IEEE Registration Authority", - [3]byte{136, 93, 251}: "zte corporation", - [3]byte{136, 97, 90}: "Siano Mobile Silicon Ltd.", - [3]byte{136, 99, 223}: "Apple, Inc.", - [3]byte{136, 102, 57}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{136, 102, 165}: "Apple, Inc.", - [3]byte{136, 104, 92}: "Shenzhen ChuangDao & Perpetual Eternal Technology Co.,Ltd", - [3]byte{136, 106, 177}: "vivo Mobile Communication Co., Ltd.", - [3]byte{136, 106, 227}: "Alpha Networks Inc.", - [3]byte{136, 107, 15}: "Bluegiga Technologies OY", - [3]byte{136, 107, 68}: "Sunnovo International Limited", - [3]byte{136, 107, 110}: "Apple, Inc.", - [3]byte{136, 107, 118}: "CHINA HOPEFUL GROUP HOPEFUL ELECTRIC CO.,LTD", - [3]byte{136, 112, 51}: "Hangzhou Silan Microelectronic Inc", - [3]byte{136, 112, 140}: "Lenovo Mobile Communication Technology Ltd.", - [3]byte{136, 112, 239}: "SC Professional Trading Co., Ltd.", - [3]byte{136, 113, 229}: "Amazon Technologies Inc.", - [3]byte{136, 115, 132}: "Toshiba", - [3]byte{136, 115, 152}: "K2E Tekpoint", - [3]byte{136, 117, 86}: "Cisco Systems, Inc", - [3]byte{136, 117, 152}: "Samsung Electronics Co.,Ltd", - [3]byte{136, 120, 115}: "Intel Corporate", - [3]byte{136, 120, 156}: "Game Technologies SA", - [3]byte{136, 121, 91}: "Konka Group Co., Ltd.", - [3]byte{136, 121, 126}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{136, 122, 49}: "Velankani Electronics Pvt. Ltd.", - [3]byte{136, 127, 3}: "Comper Technology Investment Limited", - [3]byte{136, 130, 121}: "Shenzhen RB-LINK Intelligent Technology Co.Ltd", - [3]byte{136, 131, 34}: "Samsung Electronics Co.,Ltd", - [3]byte{136, 131, 93}: "FN-LINK TECHNOLOGY LIMITED", - [3]byte{136, 134, 3}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{136, 134, 160}: "Simton Technologies, Ltd.", - [3]byte{136, 134, 194}: "STABILO International GmbH", - [3]byte{136, 135, 23}: "CANON INC.", - [3]byte{136, 135, 221}: "DarbeeVision Inc.", - [3]byte{136, 137, 20}: "All Components Incorporated", - [3]byte{136, 137, 100}: "GSI Electronics Inc.", - [3]byte{136, 139, 93}: "Storage Appliance Corporation", - [3]byte{136, 140, 25}: "Brady Corp Asia Pacific Ltd", - [3]byte{136, 144, 141}: "Cisco Systems, Inc", - [3]byte{136, 145, 102}: "Viewcooper Corp.", - [3]byte{136, 145, 221}: "Racktivity", - [3]byte{136, 148, 113}: "Brocade Communications Systems, Inc.", - [3]byte{136, 148, 126}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{136, 148, 249}: "Gemicom Technology, Inc.", - [3]byte{136, 149, 185}: "Unified Packet Systems Crop", - [3]byte{136, 150, 118}: "TTC MARCONI s.r.o.", - [3]byte{136, 150, 182}: "Global Fire Equipment S.A.", - [3]byte{136, 150, 242}: "Valeo Schalter und Sensoren GmbH", - [3]byte{136, 151, 223}: "Entrypass Corporation Sdn. Bhd.", - [3]byte{136, 152, 33}: "TERAON", - [3]byte{136, 155, 57}: "Samsung Electronics Co.,Ltd", - [3]byte{136, 156, 166}: "BTB Korea INC", - [3]byte{136, 159, 250}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{136, 160, 132}: "Formation Data Systems", - [3]byte{136, 162, 94}: "Juniper Networks", - [3]byte{136, 162, 215}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{136, 163, 204}: "Amatis Controls", - [3]byte{136, 165, 189}: "QPCOM INC.", - [3]byte{136, 166, 198}: "Sagemcom Broadband SAS", - [3]byte{136, 167, 60}: "Ragentek Technology Group", - [3]byte{136, 172, 193}: "Generiton Co., Ltd.", - [3]byte{136, 173, 67}: "PEGATRON CORPORATION", - [3]byte{136, 173, 210}: "Samsung Electronics Co.,Ltd", - [3]byte{136, 174, 29}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{136, 177, 17}: "Intel Corporate", - [3]byte{136, 177, 104}: "Delta Control GmbH", - [3]byte{136, 177, 225}: "Mojo Networks, Inc.", - [3]byte{136, 180, 166}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{136, 182, 39}: "Gembird Europe BV", - [3]byte{136, 184, 208}: "Dongguan Koppo Electronic Co.,Ltd", - [3]byte{136, 186, 127}: "Qfiednet Co., Ltd.", - [3]byte{136, 189, 120}: "Flaircomm Microelectronics,Inc.", - [3]byte{136, 191, 213}: "Simple Audio Ltd", - [3]byte{136, 194, 66}: "Poynt Co.", - [3]byte{136, 194, 85}: "Texas Instruments", - [3]byte{136, 195, 110}: "Beijing Ereneben lnformation Technology Limited", - [3]byte{136, 195, 179}: "SOVICO", - [3]byte{136, 198, 38}: "Logitech, Inc", - [3]byte{136, 198, 99}: "Apple, Inc.", - [3]byte{136, 201, 208}: "LG Electronics (Mobile Communications)", - [3]byte{136, 203, 135}: "Apple, Inc.", - [3]byte{136, 203, 165}: "Suzhou Torchstar Intelligent Technology Co.,Ltd", - [3]byte{136, 204, 69}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd", - [3]byte{136, 206, 250}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{136, 207, 152}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{136, 208, 57}: "TCL Technoly Electronics(Huizhou).,Ltd", - [3]byte{136, 209, 113}: "BEGHELLI S.P.A", - [3]byte{136, 210, 116}: "zte corporation", - [3]byte{136, 211, 123}: "FirmTek, LLC", - [3]byte{136, 213, 12}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{136, 215, 188}: "DEP Company", - [3]byte{136, 215, 246}: "ASUSTek COMPUTER INC.", - [3]byte{136, 217, 98}: "Canopus Systems US LLC", - [3]byte{136, 218, 26}: "Redpine Signals, Inc.", - [3]byte{136, 220, 150}: "SENAO Networks, Inc.", - [3]byte{136, 221, 121}: "Voltaire", - [3]byte{136, 222, 169}: "Roku, Inc.", - [3]byte{136, 224, 160}: "Shenzhen VisionSTOR Technologies Co., Ltd", - [3]byte{136, 224, 243}: "Juniper Networks", - [3]byte{136, 225, 97}: "Art Beijing Science and Technology Development Co., Ltd.", - [3]byte{136, 227, 171}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{136, 230, 3}: "Avotek corporation", - [3]byte{136, 230, 40}: "Shenzhen Kezhonglong Optoelectronic Technology Co.,Ltd", - [3]byte{136, 231, 18}: "Whirlpool Corporation", - [3]byte{136, 231, 166}: "iKnowledge Integration Corp.", - [3]byte{136, 232, 127}: "Apple, Inc.", - [3]byte{136, 232, 248}: "YONG TAI ELECTRONIC (DONGGUAN) LTD.", - [3]byte{136, 233, 23}: "Tamaggo", - [3]byte{136, 237, 28}: "Cudo Communication Co., Ltd.", - [3]byte{136, 240, 49}: "Cisco Systems, Inc", - [3]byte{136, 240, 119}: "Cisco Systems, Inc", - [3]byte{136, 244, 136}: "cellon communications technology(shenzhen)Co.,Ltd.", - [3]byte{136, 244, 144}: "Jetmobile Pte Ltd", - [3]byte{136, 247, 199}: "Technicolor CH USA Inc.", - [3]byte{136, 253, 21}: "LINEEYE CO., LTD", - [3]byte{136, 254, 214}: "ShangHai WangYong Software Co., Ltd.", - [3]byte{140, 0, 109}: "Apple, Inc.", - [3]byte{140, 4, 255}: "Technicolor CH USA Inc.", - [3]byte{140, 5, 81}: "Koubachi AG", - [3]byte{140, 7, 140}: "FLOW DATA INC", - [3]byte{140, 8, 139}: "Remote Solution", - [3]byte{140, 9, 244}: "ARRIS Group, Inc.", - [3]byte{140, 12, 144}: "Ruckus Wireless", - [3]byte{140, 12, 163}: "Amper", - [3]byte{140, 13, 118}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{140, 14, 227}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{140, 15, 111}: "PEGATRON CORPORATION", - [3]byte{140, 15, 131}: "Angie Hospitality LLC", - [3]byte{140, 16, 212}: "Sagemcom Broadband SAS", - [3]byte{140, 17, 203}: "ABUS Security-Center GmbH & Co. KG", - [3]byte{140, 20, 125}: "IEEE Registration Authority", - [3]byte{140, 24, 217}: "Shenzhen RF Technology Co., Ltd", - [3]byte{140, 25, 45}: "IEEE Registration Authority", - [3]byte{140, 26, 191}: "Samsung Electronics Co.,Ltd", - [3]byte{140, 31, 148}: "RF Surgical System Inc.", - [3]byte{140, 33, 10}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{140, 37, 5}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{140, 39, 29}: "QuantHouse", - [3]byte{140, 39, 138}: "Vocollect Inc", - [3]byte{140, 41, 55}: "Apple, Inc.", - [3]byte{140, 45, 170}: "Apple, Inc.", - [3]byte{140, 47, 57}: "IBA Dosimetry GmbH", - [3]byte{140, 47, 166}: "Solid Optics B.V.", - [3]byte{140, 51, 48}: "EmFirst Co., Ltd.", - [3]byte{140, 51, 87}: "HiteVision Digital Media Technology Co.,Ltd.", - [3]byte{140, 52, 253}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{140, 57, 92}: "Bit4id Srl", - [3]byte{140, 58, 227}: "LG Electronics (Mobile Communications)", - [3]byte{140, 59, 173}: "NETGEAR", - [3]byte{140, 60, 7}: "Skiva Technologies, Inc.", - [3]byte{140, 60, 74}: "NAKAYO Inc", - [3]byte{140, 65, 242}: "RDA Technologies Ltd.", - [3]byte{140, 68, 53}: "Shanghai BroadMobi Communication Technology Co., Ltd.", - [3]byte{140, 69, 0}: "Murata Manufacturing Co., Ltd.", - [3]byte{140, 74, 238}: "GIGA TMS INC", - [3]byte{140, 75, 89}: "3D Imaging & Simulations Corp", - [3]byte{140, 76, 220}: "PLANEX COMMUNICATIONS INC.", - [3]byte{140, 77, 185}: "Unmonday Ltd", - [3]byte{140, 77, 234}: "Cerio Corporation", - [3]byte{140, 81, 5}: "Shenzhen ireadygo Information Technology CO.,LTD.", - [3]byte{140, 83, 247}: "A&D ENGINEERING CO., LTD.", - [3]byte{140, 84, 29}: "LGE", - [3]byte{140, 86, 157}: "Imaging Solutions Group", - [3]byte{140, 86, 197}: "Nintendo Co., Ltd.", - [3]byte{140, 87, 155}: "Wistron Neweb Corporation", - [3]byte{140, 87, 253}: "LVX Western", - [3]byte{140, 88, 119}: "Apple, Inc.", - [3]byte{140, 89, 139}: "C Technologies AB", - [3]byte{140, 89, 195}: "ADB Italia", - [3]byte{140, 90, 240}: "Exeltech Solar Products", - [3]byte{140, 91, 240}: "ARRIS Group, Inc.", - [3]byte{140, 92, 161}: "d-broad,INC", - [3]byte{140, 93, 96}: "UCI Corporation Co.,Ltd.", - [3]byte{140, 95, 72}: "Continental Intelligent Transportation Systems LLC", - [3]byte{140, 95, 223}: "Beijing Railway Signal Factory", - [3]byte{140, 96, 79}: "Cisco Systems, Inc", - [3]byte{140, 96, 231}: "MPGIO CO.,LTD", - [3]byte{140, 97, 2}: "Beijing Baofengmojing Technologies Co., Ltd", - [3]byte{140, 100, 11}: "Beyond Devices d.o.o.", - [3]byte{140, 100, 34}: "Sony Mobile Communications AB", - [3]byte{140, 104, 120}: "Nortek-AS", - [3]byte{140, 106, 228}: "Viogem Limited", - [3]byte{140, 109, 80}: "SHENZHEN MTC CO LTD", - [3]byte{140, 112, 90}: "Intel Corporate", - [3]byte{140, 113, 248}: "Samsung Electronics Co.,Ltd", - [3]byte{140, 115, 110}: "FUJITSU LIMITED", - [3]byte{140, 118, 193}: "Goden Tech Limited", - [3]byte{140, 119, 18}: "Samsung Electronics Co.,Ltd", - [3]byte{140, 119, 22}: "LONGCHEER TELECOMMUNICATION LIMITED", - [3]byte{140, 120, 215}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD", - [3]byte{140, 121, 103}: "zte corporation", - [3]byte{140, 123, 157}: "Apple, Inc.", - [3]byte{140, 124, 146}: "Apple, Inc.", - [3]byte{140, 124, 181}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{140, 124, 255}: "Brocade Communications Systems, Inc.", - [3]byte{140, 126, 179}: "Lytro, Inc.", - [3]byte{140, 127, 59}: "ARRIS Group, Inc.", - [3]byte{140, 130, 168}: "Insigma Technology Co.,Ltd", - [3]byte{140, 131, 157}: "SHENZHEN XINYUPENG ELECTRONIC TECHNOLOGY CO., LTD", - [3]byte{140, 132, 1}: "Private", - [3]byte{140, 133, 128}: "Smart Innovation LLC", - [3]byte{140, 133, 144}: "Apple, Inc.", - [3]byte{140, 135, 59}: "Leica Camera AG", - [3]byte{140, 137, 122}: "AUGTEK", - [3]byte{140, 137, 165}: "Micro-Star INT'L CO., LTD", - [3]byte{140, 138, 110}: "ESTUN AUTOMATION TECHNOLOY CO., LTD", - [3]byte{140, 138, 187}: "Beijing Orient View Technology Co., Ltd.", - [3]byte{140, 139, 131}: "Texas Instruments", - [3]byte{140, 142, 118}: "taskit GmbH", - [3]byte{140, 142, 242}: "Apple, Inc.", - [3]byte{140, 143, 233}: "Apple, Inc.", - [3]byte{140, 144, 211}: "Nokia", - [3]byte{140, 145, 9}: "Toyoshima Electric Technoeogy(Suzhou) Co.,Ltd.", - [3]byte{140, 146, 54}: "Aus.Linx Technology Co., Ltd.", - [3]byte{140, 147, 81}: "Jigowatts Inc.", - [3]byte{140, 148, 207}: "Encell Technology, Inc.", - [3]byte{140, 153, 230}: "TCT mobile ltd", - [3]byte{140, 159, 59}: "Qingdao Hisense Communications Co.,Ltd.", - [3]byte{140, 160, 72}: "Beijing NeTopChip Technology Co.,LTD", - [3]byte{140, 162, 253}: "Starry, Inc.", - [3]byte{140, 165, 161}: "Oregano Systems - Design & Consulting GmbH", - [3]byte{140, 166, 223}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{140, 169, 130}: "Intel Corporate", - [3]byte{140, 171, 142}: "Shanghai Feixun Communication Co.,Ltd.", - [3]byte{140, 174, 76}: "Plugable Technologies", - [3]byte{140, 174, 137}: "Y-cam Solutions Ltd", - [3]byte{140, 176, 148}: "Airtech I&C Co., Ltd", - [3]byte{140, 182, 79}: "Cisco Systems, Inc", - [3]byte{140, 183, 247}: "Shenzhen UniStrong Science & Technology Co., Ltd", - [3]byte{140, 184, 44}: "IPitomy Communications", - [3]byte{140, 184, 100}: "AcSiP Technology Corp.", - [3]byte{140, 190, 190}: "Xiaomi Communications Co Ltd", - [3]byte{140, 191, 157}: "Shanghai Xinyou Information Technology Ltd. Co.", - [3]byte{140, 191, 166}: "Samsung Electronics Co.,Ltd", - [3]byte{140, 193, 33}: "Panasonic Corporation AVC Networks Company", - [3]byte{140, 197, 225}: "ShenZhen Konka Telecommunication Technology Co.,Ltd", - [3]byte{140, 198, 97}: "Current, powered by GE", - [3]byte{140, 199, 170}: "Radinet Communications Inc.", - [3]byte{140, 199, 208}: "zhejiang ebang communication co.,ltd", - [3]byte{140, 200, 205}: "Samsung Electronics Co.,Ltd", - [3]byte{140, 200, 244}: "IEEE Registration Authority", - [3]byte{140, 205, 162}: "ACTP, Inc.", - [3]byte{140, 205, 232}: "Nintendo Co., Ltd.", - [3]byte{140, 207, 9}: "Dell EMC", - [3]byte{140, 207, 92}: "BEFEGA GmbH", - [3]byte{140, 209, 123}: "CG Mobile", - [3]byte{140, 210, 233}: "YOKOTE SEIKO CO., LTD.", - [3]byte{140, 211, 162}: "VisSim AS", - [3]byte{140, 212, 142}: "ITEL MOBILE LIMITED", - [3]byte{140, 214, 40}: "Ikor Metering", - [3]byte{140, 219, 37}: "ESG Solutions", - [3]byte{140, 220, 212}: "Hewlett Packard", - [3]byte{140, 221, 141}: "Wifly-City System Inc.", - [3]byte{140, 222, 82}: "ISSC Technologies Corp.", - [3]byte{140, 222, 153}: "Comlab Inc.", - [3]byte{140, 223, 157}: "NEC Corporation", - [3]byte{140, 224, 129}: "zte corporation", - [3]byte{140, 225, 23}: "zte corporation", - [3]byte{140, 226, 218}: "Circle Media Inc", - [3]byte{140, 227, 142}: "Toshiba Memory Corporation", - [3]byte{140, 231, 72}: "Private", - [3]byte{140, 231, 140}: "DK Networks", - [3]byte{140, 231, 179}: "Sonardyne International Ltd", - [3]byte{140, 234, 27}: "Edgecore Networks Corporation", - [3]byte{140, 235, 198}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{140, 236, 75}: "Dell Inc.", - [3]byte{140, 238, 198}: "Precepscion Pty. Ltd.", - [3]byte{140, 242, 40}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", - [3]byte{140, 245, 163}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{140, 248, 19}: "ORANGE POLSKA", - [3]byte{140, 249, 69}: "Power Automation pte Ltd", - [3]byte{140, 249, 201}: "MESADA Technology Co.,Ltd.", - [3]byte{140, 250, 186}: "Apple, Inc.", - [3]byte{140, 253, 240}: "Qualcomm Inc.", - [3]byte{140, 254, 180}: "VSOONTECH ELECTRONICS CO., LIMITED", - [3]byte{144, 0, 78}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{144, 0, 219}: "Samsung Electronics Co.,Ltd", - [3]byte{144, 1, 59}: "Sagemcom Broadband SAS", - [3]byte{144, 2, 138}: "Shenzhen Shidean Legrand Electronic Products Co.,Ltd", - [3]byte{144, 2, 169}: "Zhejiang Dahua Technology Co., Ltd.", - [3]byte{144, 3, 37}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{144, 3, 183}: "PARROT SA", - [3]byte{144, 6, 40}: "Samsung Electronics Co.,Ltd", - [3]byte{144, 9, 23}: "Far-sighted mobile", - [3]byte{144, 10, 26}: "Taicang T&W Electronics", - [3]byte{144, 10, 57}: "Wiio, Inc.", - [3]byte{144, 10, 58}: "PSG Plastic Service GmbH", - [3]byte{144, 11, 193}: "Sprocomm Technologies CO.,Ltd", - [3]byte{144, 12, 180}: "Alinket Electronic Technology Co., Ltd", - [3]byte{144, 13, 102}: "Digimore Electronics Co., Ltd", - [3]byte{144, 13, 203}: "ARRIS Group, Inc.", - [3]byte{144, 14, 131}: "Monico Monitoring, Inc.", - [3]byte{144, 23, 17}: "Hagenuk Marinekommunikation GmbH", - [3]byte{144, 23, 155}: "Nanomegas", - [3]byte{144, 23, 172}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{144, 24, 94}: "Apex Tool Group GmbH & Co OHG", - [3]byte{144, 24, 124}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{144, 24, 174}: "Shanghai Meridian Technologies, Co. Ltd.", - [3]byte{144, 25, 0}: "SCS SA", - [3]byte{144, 26, 202}: "ARRIS Group, Inc.", - [3]byte{144, 27, 14}: "Fujitsu Technology Solutions GmbH", - [3]byte{144, 29, 39}: "zte corporation", - [3]byte{144, 30, 221}: "GREAT COMPUTER CORPORATION", - [3]byte{144, 32, 58}: "BYD Precision Manufacture Co.,Ltd", - [3]byte{144, 32, 131}: "General Engine Management Systems Ltd.", - [3]byte{144, 33, 6}: "BSkyB Ltd", - [3]byte{144, 33, 85}: "HTC Corporation", - [3]byte{144, 33, 129}: "Shanghai Huaqin Telecom Technology Co.,Ltd", - [3]byte{144, 35, 236}: "Availink, Inc.", - [3]byte{144, 39, 228}: "Apple, Inc.", - [3]byte{144, 43, 52}: "GIGA-BYTE TECHNOLOGY CO.,LTD.", - [3]byte{144, 44, 199}: "C-MAX Asia Limited", - [3]byte{144, 46, 28}: "Intel Corporate", - [3]byte{144, 46, 135}: "LabJack", - [3]byte{144, 49, 205}: "Onyx Healthcare Inc.", - [3]byte{144, 50, 75}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{144, 52, 43}: "Gatekeeper Systems, Inc.", - [3]byte{144, 52, 252}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{144, 53, 110}: "Vodafone Omnitel N.V.", - [3]byte{144, 56, 9}: "Ericsson AB", - [3]byte{144, 56, 223}: "Changzhou Tiannengbo System Co. Ltd.", - [3]byte{144, 58, 160}: "Nokia", - [3]byte{144, 58, 230}: "PARROT SA", - [3]byte{144, 60, 146}: "Apple, Inc.", - [3]byte{144, 60, 174}: "Yunnan KSEC Digital Technology Co.,Ltd.", - [3]byte{144, 61, 90}: "Shenzhen Wision Technology Holding Limited", - [3]byte{144, 61, 107}: "Zicon Technology Corp.", - [3]byte{144, 61, 189}: "SECURE METERS LIMITED", - [3]byte{144, 62, 171}: "ARRIS Group, Inc.", - [3]byte{144, 69, 6}: "Tokyo Boeki Medisys Inc.", - [3]byte{144, 70, 162}: "Tedipay UK Ltd", - [3]byte{144, 70, 183}: "Vadaro Pte Ltd", - [3]byte{144, 71, 22}: "RORZE CORPORATION", - [3]byte{144, 72, 154}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{144, 73, 250}: "Intel Corporate", - [3]byte{144, 76, 229}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{144, 77, 74}: "Sagemcom Broadband SAS", - [3]byte{144, 78, 43}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{144, 78, 145}: "IEEE Registration Authority", - [3]byte{144, 80, 90}: "unGlue, Inc", - [3]byte{144, 80, 123}: "Advanced PANMOBIL Systems GmbH & Co. KG", - [3]byte{144, 80, 202}: "Hitron Technologies. Inc", - [3]byte{144, 81, 63}: "Elettronica Santerno SpA", - [3]byte{144, 84, 70}: "TES ELECTRONIC SOLUTIONS", - [3]byte{144, 85, 174}: "Ericsson, EAB/RWI/K", - [3]byte{144, 86, 130}: "Lenbrook Industries Limited", - [3]byte{144, 86, 146}: "Autotalks Ltd.", - [3]byte{144, 89, 175}: "Texas Instruments", - [3]byte{144, 92, 68}: "Compal Broadband Networks, Inc.", - [3]byte{144, 95, 46}: "TCT mobile ltd", - [3]byte{144, 95, 141}: "modas GmbH", - [3]byte{144, 96, 241}: "Apple, Inc.", - [3]byte{144, 97, 12}: "Fida International (S) Pte Ltd", - [3]byte{144, 97, 174}: "Intel Corporate", - [3]byte{144, 103, 23}: "Alphion India Private Limited", - [3]byte{144, 103, 28}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{144, 103, 181}: "Alcatel-Lucent", - [3]byte{144, 103, 243}: "Alcatel Lucent", - [3]byte{144, 104, 195}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{144, 108, 172}: "Fortinet, Inc.", - [3]byte{144, 109, 200}: "DLG Automação Industrial Ltda", - [3]byte{144, 110, 187}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{144, 111, 24}: "Private", - [3]byte{144, 111, 169}: "NANJING PUTIAN TELECOMMUNICATIONS TECHNOLOGY CO.,LTD.", - [3]byte{144, 112, 37}: "Garea Microsys Co.,Ltd.", - [3]byte{144, 112, 101}: "Texas Instruments", - [3]byte{144, 114, 64}: "Apple, Inc.", - [3]byte{144, 114, 130}: "Sagemcom Broadband SAS", - [3]byte{144, 121, 144}: "Benchmark Electronics Romania SRL", - [3]byte{144, 122, 10}: "Gebr. Bode GmbH & Co KG", - [3]byte{144, 122, 40}: "Beijing Morncloud Information And Technology Co. Ltd.", - [3]byte{144, 122, 241}: "Wally", - [3]byte{144, 126, 186}: "UTEK TECHNOLOGY (SHENZHEN) CO.,LTD", - [3]byte{144, 127, 97}: "Chicony Electronics Co., Ltd.", - [3]byte{144, 130, 96}: "IEEE 1904.1 Working Group", - [3]byte{144, 131, 122}: "General Electric Water & Process Technologies", - [3]byte{144, 132, 13}: "Apple, Inc.", - [3]byte{144, 132, 43}: "LEGO System A/S", - [3]byte{144, 134, 116}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD", - [3]byte{144, 136, 162}: "IONICS TECHNOLOGY ME LTDA", - [3]byte{144, 140, 9}: "Total Phase", - [3]byte{144, 140, 68}: "H.K ZONGMU TECHNOLOGY CO., LTD.", - [3]byte{144, 140, 99}: "GZ Weedong Networks Technology Co. , Ltd", - [3]byte{144, 141, 29}: "GH Technologies", - [3]byte{144, 141, 108}: "Apple, Inc.", - [3]byte{144, 141, 120}: "D-Link International", - [3]byte{144, 143, 207}: "UNO System Co., Ltd", - [3]byte{144, 144, 60}: "TRISON TECHNOLOGY CORPORATION", - [3]byte{144, 144, 96}: "RSI VIDEO TECHNOLOGIES", - [3]byte{144, 146, 180}: "Diehl BGT Defence GmbH & Co. KG", - [3]byte{144, 148, 228}: "D-Link International", - [3]byte{144, 151, 213}: "Espressif Inc.", - [3]byte{144, 151, 243}: "Samsung Electronics Co.,Ltd", - [3]byte{144, 152, 100}: "Impex-Sat GmbH&Co KG", - [3]byte{144, 153, 22}: "ELVEES NeoTek OJSC", - [3]byte{144, 157, 125}: "ARRIS Group, Inc.", - [3]byte{144, 157, 224}: "Newland Design + Assoc. Inc.", - [3]byte{144, 159, 51}: "EFM Networks", - [3]byte{144, 159, 67}: "Accutron Instruments Inc.", - [3]byte{144, 162, 16}: "United Telecoms Ltd", - [3]byte{144, 162, 218}: "GHEO SA", - [3]byte{144, 163, 101}: "HMD Global Oy", - [3]byte{144, 164, 106}: "SISNET CO., LTD", - [3]byte{144, 164, 222}: "Wistron Neweb Corporation", - [3]byte{144, 166, 47}: "NAVER", - [3]byte{144, 167, 131}: "JSW PACIFIC CORPORATION", - [3]byte{144, 167, 193}: "Pakedge Device and Software Inc.", - [3]byte{144, 172, 63}: "BrightSign LLC", - [3]byte{144, 173, 247}: "vivo Mobile Communication Co., Ltd.", - [3]byte{144, 174, 27}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{144, 176, 237}: "Apple, Inc.", - [3]byte{144, 177, 28}: "Dell Inc.", - [3]byte{144, 177, 52}: "ARRIS Group, Inc.", - [3]byte{144, 177, 224}: "Beijing Nebula Link Technology Co., Ltd", - [3]byte{144, 178, 31}: "Apple, Inc.", - [3]byte{144, 182, 134}: "Murata Manufacturing Co., Ltd.", - [3]byte{144, 184, 208}: "Joyent, Inc.", - [3]byte{144, 185, 49}: "Apple, Inc.", - [3]byte{144, 185, 125}: "Johnson Outdoors Marine Electronics d/b/a Minnkota", - [3]byte{144, 193, 21}: "Sony Mobile Communications AB", - [3]byte{144, 193, 198}: "Apple, Inc.", - [3]byte{144, 195, 95}: "Nanjing Jiahao Technology Co., Ltd.", - [3]byte{144, 198, 130}: "IEEE Registration Authority", - [3]byte{144, 199, 146}: "ARRIS Group, Inc.", - [3]byte{144, 199, 216}: "zte corporation", - [3]byte{144, 201, 155}: "Recore Systems", - [3]byte{144, 204, 36}: "Synaptics, Inc", - [3]byte{144, 205, 182}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{144, 207, 21}: "Nokia Corporation", - [3]byte{144, 207, 111}: "Dlogixs Co Ltd", - [3]byte{144, 207, 125}: "Qingdao Hisense Communications Co.,Ltd.", - [3]byte{144, 209, 27}: "Palomar Medical Technologies", - [3]byte{144, 215, 79}: "Bookeen", - [3]byte{144, 215, 190}: "Wavelab Global Inc.", - [3]byte{144, 215, 235}: "Texas Instruments", - [3]byte{144, 216, 82}: "Comtec Co., Ltd.", - [3]byte{144, 216, 243}: "zte corporation", - [3]byte{144, 217, 44}: "HUG-WITSCHI AG", - [3]byte{144, 218, 78}: "AVANU", - [3]byte{144, 218, 106}: "FOCUS H&S Co., Ltd.", - [3]byte{144, 219, 70}: "E-LEAD ELECTRONIC CO., LTD", - [3]byte{144, 223, 183}: "s.m.s smart microwave sensors GmbH", - [3]byte{144, 223, 251}: "HOMERIDER SYSTEMS", - [3]byte{144, 224, 240}: "IEEE 1722a Working Group", - [3]byte{144, 226, 186}: "Intel Corporate", - [3]byte{144, 230, 186}: "ASUSTek COMPUTER INC.", - [3]byte{144, 231, 196}: "HTC Corporation", - [3]byte{144, 234, 96}: "SPI Lasers Ltd", - [3]byte{144, 236, 80}: "C.O.B.O. SPA", - [3]byte{144, 238, 217}: "UNIVERSAL DE DESARROLLOS ELECTRÓNICOS, SA", - [3]byte{144, 239, 104}: "Zyxel Communications Corporation", - [3]byte{144, 240, 82}: "MEIZU Technology Co., Ltd.", - [3]byte{144, 241, 170}: "Samsung Electronics Co.,Ltd", - [3]byte{144, 241, 176}: "Hangzhou Anheng Info&Tech CO.,LTD", - [3]byte{144, 242, 120}: "Radius Gateway", - [3]byte{144, 243, 5}: "HUMAX Co., Ltd.", - [3]byte{144, 243, 183}: "Kirisun Communications Co., Ltd.", - [3]byte{144, 244, 193}: "Rand McNally", - [3]byte{144, 246, 82}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{144, 247, 47}: "Phillips Machine & Welding Co., Inc.", - [3]byte{144, 251, 91}: "Avaya Inc", - [3]byte{144, 251, 166}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{144, 253, 97}: "Apple, Inc.", - [3]byte{144, 253, 159}: "Silicon Laboratories", - [3]byte{144, 255, 121}: "Metro Ethernet Forum", - [3]byte{148, 0, 6}: "jinyoung", - [3]byte{148, 0, 112}: "Nokia Corporation", - [3]byte{148, 1, 73}: "AutoHotBox", - [3]byte{148, 1, 194}: "Samsung Electronics Co.,Ltd", - [3]byte{148, 4, 156}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{148, 5, 182}: "Liling FullRiver Electronics & Technology Ltd", - [3]byte{148, 9, 55}: "HUMAX Co., Ltd.", - [3]byte{148, 11, 45}: "NetView Technologies(Shenzhen) Co., Ltd", - [3]byte{148, 11, 213}: "Himax Technologies, Inc", - [3]byte{148, 12, 109}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{148, 14, 107}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{148, 16, 62}: "Belkin International Inc.", - [3]byte{148, 17, 218}: "ITF Fröschl GmbH", - [3]byte{148, 20, 122}: "vivo Mobile Communication Co., Ltd.", - [3]byte{148, 22, 115}: "Point Core SARL", - [3]byte{148, 24, 130}: "Hewlett Packard Enterprise", - [3]byte{148, 29, 28}: "TLab West Systems AB", - [3]byte{148, 32, 83}: "Nokia Corporation", - [3]byte{148, 33, 151}: "Stalmart Technology Limited", - [3]byte{148, 35, 110}: "Shenzhen Junlan Electronic Ltd", - [3]byte{148, 40, 46}: "New H3C Technologies Co., Ltd", - [3]byte{148, 42, 63}: "Diversey Inc", - [3]byte{148, 44, 179}: "HUMAX Co., Ltd.", - [3]byte{148, 46, 23}: "Schneider Electric Canada Inc", - [3]byte{148, 46, 99}: "Finsécur", - [3]byte{148, 49, 155}: "Alphatronics BV", - [3]byte{148, 51, 221}: "Taco Inc", - [3]byte{148, 53, 10}: "Samsung Electronics Co.,Ltd", - [3]byte{148, 54, 224}: "Sichuan Bihong Broadcast & Television New Technologies Co.,Ltd", - [3]byte{148, 57, 229}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{148, 58, 240}: "Nokia Corporation", - [3]byte{148, 59, 177}: "Kaonmedia CO., LTD.", - [3]byte{148, 61, 201}: "Asahi Net, Inc.", - [3]byte{148, 63, 194}: "Hewlett Packard Enterprise", - [3]byte{148, 64, 162}: "Anywave Communication Technologies, Inc.", - [3]byte{148, 65, 193}: "Mini-Cam Limited", - [3]byte{148, 68, 68}: "LG Innotek", - [3]byte{148, 68, 82}: "Belkin International Inc.", - [3]byte{148, 70, 150}: "BaudTec Corporation", - [3]byte{148, 73, 150}: "WiSilica Inc", - [3]byte{148, 74, 9}: "BitWise Controls", - [3]byte{148, 74, 12}: "Sercomm Corporation", - [3]byte{148, 80, 71}: "Rechnerbetriebsgruppe", - [3]byte{148, 80, 137}: "SimonsVoss Technologies GmbH", - [3]byte{148, 81, 3}: "Samsung Electronics Co.,Ltd", - [3]byte{148, 81, 61}: "iSmart Alarm, Inc.", - [3]byte{148, 81, 191}: "Hyundai ESG", - [3]byte{148, 83, 48}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{148, 84, 147}: "Rigado, LLC", - [3]byte{148, 87, 165}: "Hewlett Packard", - [3]byte{148, 89, 7}: "Shanghai HITE-BELDEN Network Technology Co., Ltd.", - [3]byte{148, 89, 45}: "EKE Building Technology Systems Ltd", - [3]byte{148, 91, 126}: "TRILOBIT LTDA.", - [3]byte{148, 97, 30}: "Wata Electronics Co.,Ltd.", - [3]byte{148, 97, 36}: "Pason Systems", - [3]byte{148, 98, 105}: "ARRIS Group, Inc.", - [3]byte{148, 99, 209}: "Samsung Electronics Co.,Ltd", - [3]byte{148, 101, 45}: "OnePlus Technology (Shenzhen) Co., Ltd", - [3]byte{148, 101, 156}: "Intel Corporate", - [3]byte{148, 102, 231}: "WOM Engineering", - [3]byte{148, 112, 210}: "WINFIRM TECHNOLOGY", - [3]byte{148, 113, 172}: "TCT mobile ltd", - [3]byte{148, 117, 110}: "QinetiQ North America", - [3]byte{148, 118, 183}: "Samsung Electronics Co.,Ltd", - [3]byte{148, 119, 43}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{148, 123, 190}: "Ubicquia", - [3]byte{148, 123, 231}: "Samsung Electronics Co.,Ltd", - [3]byte{148, 124, 62}: "Polewall Norge AS", - [3]byte{148, 126, 185}: "National Narrowband Network Communications Pty Ltd", - [3]byte{148, 129, 164}: "Azuray Technologies", - [3]byte{148, 133, 122}: "Evantage Industries Corp", - [3]byte{148, 134, 205}: "SEOUL ELECTRONICS&TELECOM", - [3]byte{148, 134, 212}: "Surveillance Pro Corporation", - [3]byte{148, 135, 124}: "ARRIS Group, Inc.", - [3]byte{148, 136, 21}: "Infinique Worldwide Inc", - [3]byte{148, 136, 84}: "Texas Instruments", - [3]byte{148, 136, 94}: "Surfilter Network Technology Co., Ltd.", - [3]byte{148, 139, 3}: "EAGET Innovation and Technology Co., Ltd.", - [3]byte{148, 139, 193}: "Samsung Electronics Co.,Ltd", - [3]byte{148, 141, 80}: "Beamex Oy Ab", - [3]byte{148, 142, 137}: "INDUSTRIAS UNIDAS SA DE CV", - [3]byte{148, 143, 238}: "Verizon Telematics", - [3]byte{148, 146, 188}: "SYNTECH(HK) TECHNOLOGY LIMITED", - [3]byte{148, 148, 38}: "Apple, Inc.", - [3]byte{148, 149, 160}: "Google, Inc.", - [3]byte{148, 152, 162}: "Shanghai LISTEN TECH.LTD", - [3]byte{148, 153, 1}: "Shenzhen YITOA Digital Appliance CO.,LTD", - [3]byte{148, 154, 169}: "Microsoft Corporation", - [3]byte{148, 155, 253}: "Trans New Technology, Inc.", - [3]byte{148, 156, 85}: "Alta Data Technologies", - [3]byte{148, 159, 62}: "Sonos, Inc.", - [3]byte{148, 159, 63}: "Optek Digital Technology company limited", - [3]byte{148, 159, 180}: "ChengDu JiaFaAnTai Technology Co.,Ltd", - [3]byte{148, 160, 78}: "Bostex Technology Co., LTD", - [3]byte{148, 161, 162}: "AMPAK Technology, Inc.", - [3]byte{148, 167, 183}: "zte corporation", - [3]byte{148, 167, 188}: "BodyMedia, Inc.", - [3]byte{148, 170, 184}: "Joview(Beijing) Technology Co. Ltd.", - [3]byte{148, 171, 222}: "OMX Technology - FZE", - [3]byte{148, 172, 202}: "trivum technologies GmbH", - [3]byte{148, 174, 97}: "Alcatel Lucent", - [3]byte{148, 174, 227}: "Belden Hirschmann Industries (Suzhou) Ltd.", - [3]byte{148, 177, 10}: "Samsung Electronics Co.,Ltd", - [3]byte{148, 178, 204}: "PIONEER CORPORATION", - [3]byte{148, 180, 15}: "Aruba Networks", - [3]byte{148, 184, 25}: "Nokia", - [3]byte{148, 184, 197}: "RuggedCom Inc.", - [3]byte{148, 185, 180}: "Aptos Technology", - [3]byte{148, 186, 49}: "Visiontec da Amazônia Ltda.", - [3]byte{148, 186, 86}: "Shenzhen Coship Electronics Co., Ltd.", - [3]byte{148, 187, 174}: "Husqvarna AB", - [3]byte{148, 191, 30}: "eflow Inc. / Smart Device Planning and Development Division", - [3]byte{148, 191, 149}: "Shenzhen Coship Electronics Co., Ltd", - [3]byte{148, 192, 20}: "Sorter Sp. j. Konrad Grzeszczyk MichaA, Ziomek", - [3]byte{148, 192, 56}: "Tallac Networks", - [3]byte{148, 193, 80}: "2Wire Inc", - [3]byte{148, 195, 228}: "SCA Schucker Gmbh & Co KG", - [3]byte{148, 196, 233}: "PowerLayer Microsystems HongKong Limited", - [3]byte{148, 198, 145}: "EliteGroup Computer Systems Co., LTD", - [3]byte{148, 198, 235}: "NOVA electronics, Inc.", - [3]byte{148, 199, 175}: "Raylios Technology", - [3]byte{148, 201, 96}: "Zhongshan B&T technology.co.,ltd", - [3]byte{148, 201, 98}: "Teseq AG", - [3]byte{148, 202, 15}: "Honeywell Analytics", - [3]byte{148, 204, 185}: "ARRIS Group, Inc.", - [3]byte{148, 205, 172}: "Creowave Oy", - [3]byte{148, 206, 44}: "Sony Mobile Communications AB", - [3]byte{148, 206, 49}: "CTS Limited", - [3]byte{148, 208, 25}: "Cydle Corp.", - [3]byte{148, 208, 41}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{148, 212, 23}: "GPI KOREA INC.", - [3]byte{148, 212, 105}: "Cisco Systems, Inc", - [3]byte{148, 214, 14}: "shenzhen yunmao information technologies co., ltd", - [3]byte{148, 215, 35}: "Shanghai DareGlobal Technologies Co.,Ltd", - [3]byte{148, 215, 113}: "Samsung Electronics Co.,Ltd", - [3]byte{148, 216, 89}: "TCT mobile ltd", - [3]byte{148, 217, 60}: "ENELPS", - [3]byte{148, 217, 179}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{148, 219, 73}: "SITCORP", - [3]byte{148, 219, 201}: "AzureWave Technology Inc.", - [3]byte{148, 219, 218}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{148, 221, 63}: "A+V Link Technologies, Corp.", - [3]byte{148, 222, 14}: "SmartOptics AS", - [3]byte{148, 222, 128}: "GIGA-BYTE TECHNOLOGY CO.,LTD.", - [3]byte{148, 223, 78}: "Wistron InfoComm(Kunshan)Co.,Ltd.", - [3]byte{148, 223, 88}: "IJ Electron CO.,Ltd.", - [3]byte{148, 224, 208}: "HealthStream Taiwan Inc.", - [3]byte{148, 226, 38}: "D. ORtiz Consulting, LLC", - [3]byte{148, 226, 253}: "Boge Kompressoren OTTO Boge GmbH & Co. KG", - [3]byte{148, 227, 109}: "Texas Instruments", - [3]byte{148, 231, 17}: "Xirka Dama Persada PT", - [3]byte{148, 232, 72}: "FYLDE MICRO LTD", - [3]byte{148, 232, 197}: "ARRIS Group, Inc.", - [3]byte{148, 233, 106}: "Apple, Inc.", - [3]byte{148, 233, 121}: "Liteon Technology Corporation", - [3]byte{148, 233, 140}: "Nokia", - [3]byte{148, 235, 44}: "Google, Inc.", - [3]byte{148, 235, 205}: "BlackBerry RTS", - [3]byte{148, 241, 40}: "Hewlett Packard Enterprise", - [3]byte{148, 241, 158}: "HUIZHOU MAORONG INTELLIGENT TECHNOLOGY CO.,LTD", - [3]byte{148, 242, 120}: "Elma Electronic", - [3]byte{148, 245, 81}: "Cadi Scientific Pte Ltd", - [3]byte{148, 246, 101}: "Ruckus Wireless", - [3]byte{148, 246, 146}: "Geminico co.,Ltd.", - [3]byte{148, 246, 163}: "Apple, Inc.", - [3]byte{148, 247, 32}: "Tianjin Deviser Electronics Instrument Co., Ltd", - [3]byte{148, 250, 232}: "Shenzhen Eycom Technology Co., Ltd", - [3]byte{148, 251, 41}: "Zebra Technologies Inc.", - [3]byte{148, 251, 178}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT", - [3]byte{148, 253, 29}: "WhereWhen Corp", - [3]byte{148, 253, 46}: "Shanghai Uniscope Technologies Co.,Ltd", - [3]byte{148, 254, 34}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{148, 254, 244}: "Sagemcom Broadband SAS", - [3]byte{152, 0, 116}: "Raisecom Technology CO., LTD", - [3]byte{152, 0, 193}: "GuangZhou CREATOR Technology Co.,Ltd.(CHINA)", - [3]byte{152, 0, 198}: "Apple, Inc.", - [3]byte{152, 1, 167}: "Apple, Inc.", - [3]byte{152, 2, 132}: "Theobroma Systems GmbH", - [3]byte{152, 2, 216}: "IEEE Registration Authority", - [3]byte{152, 3, 160}: "ABB n.v. Power Quality Products", - [3]byte{152, 3, 216}: "Apple, Inc.", - [3]byte{152, 7, 45}: "Texas Instruments", - [3]byte{152, 12, 130}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{152, 12, 165}: "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.", - [3]byte{152, 13, 46}: "HTC Corporation", - [3]byte{152, 14, 228}: "Private", - [3]byte{152, 16, 148}: "Shenzhen Vsun communication technology Co.,ltd", - [3]byte{152, 16, 232}: "Apple, Inc.", - [3]byte{152, 19, 51}: "zte corporation", - [3]byte{152, 22, 236}: "IC Intracom", - [3]byte{152, 29, 250}: "Samsung Electronics Co.,Ltd", - [3]byte{152, 30, 15}: "Jeelan (Shanghai Jeelan Technology Information Inc", - [3]byte{152, 31, 177}: "Shenzhen Lemon Network Technology Co.,Ltd", - [3]byte{152, 32, 142}: "Definium Technologies", - [3]byte{152, 34, 239}: "Liteon Technology Corporation", - [3]byte{152, 35, 78}: "Micromedia AG", - [3]byte{152, 38, 42}: "Applied Research Associates, Inc", - [3]byte{152, 40, 166}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{152, 41, 29}: "Jaguar de Mexico, SA de CV", - [3]byte{152, 41, 63}: "Fujian Start Computer Equipment Co.,Ltd", - [3]byte{152, 41, 166}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{152, 44, 190}: "2Wire Inc", - [3]byte{152, 45, 86}: "Resolution Audio", - [3]byte{152, 45, 104}: "Samsung Electronics Co., Ltd", - [3]byte{152, 45, 186}: "Fibergate Inc.", - [3]byte{152, 47, 60}: "Sichuan Changhong Electric Ltd.", - [3]byte{152, 48, 0}: "Beijing KEMACOM Technologies Co., Ltd.", - [3]byte{152, 48, 113}: "DAIKYUNG VASCOM", - [3]byte{152, 52, 157}: "Krauss Maffei Technologies GmbH", - [3]byte{152, 53, 113}: "Sub10 Systems Ltd", - [3]byte{152, 53, 184}: "Assembled Products Corporation", - [3]byte{152, 55, 19}: "PT.Navicom Indonesia", - [3]byte{152, 57, 142}: "Samsung Electronics Co.,Ltd", - [3]byte{152, 59, 22}: "AMPAK Technology, Inc.", - [3]byte{152, 63, 159}: "China SSJ (Suzhou) Network Technology Inc.", - [3]byte{152, 64, 187}: "Dell Inc.", - [3]byte{152, 66, 70}: "SOL INDUSTRY PTE., LTD", - [3]byte{152, 67, 218}: "INTERTECH", - [3]byte{152, 71, 60}: "SHANGHAI SUNMON COMMUNICATION TECHNOGY CO.,LTD", - [3]byte{152, 74, 71}: "CHG Hospital Beds", - [3]byte{152, 75, 74}: "ARRIS Group, Inc.", - [3]byte{152, 75, 225}: "Hewlett Packard", - [3]byte{152, 76, 4}: "Zhangzhou Keneng Electrical Equipment Co Ltd", - [3]byte{152, 76, 211}: "Mantis Deposition", - [3]byte{152, 78, 151}: "Starlight Marketing (H. K.) Ltd.", - [3]byte{152, 79, 238}: "Intel Corporate", - [3]byte{152, 82, 177}: "Samsung Electronics Co.,Ltd", - [3]byte{152, 84, 27}: "Intel Corporate", - [3]byte{152, 87, 211}: "HON HAI-CCPBG PRECISION IND.CO.,LTD.", - [3]byte{152, 88, 138}: "SYSGRATION Ltd.", - [3]byte{152, 89, 69}: "Texas Instruments", - [3]byte{152, 90, 235}: "Apple, Inc.", - [3]byte{152, 91, 176}: "KMDATA INC.", - [3]byte{152, 92, 147}: "SBG Systems SAS", - [3]byte{152, 93, 70}: "PeopleNet Communication", - [3]byte{152, 93, 173}: "Texas Instruments", - [3]byte{152, 94, 27}: "ConversDigital Co., Ltd.", - [3]byte{152, 95, 211}: "Microsoft Corporation", - [3]byte{152, 96, 34}: "EMW Co., Ltd.", - [3]byte{152, 102, 234}: "Industrial Control Communications, Inc.", - [3]byte{152, 107, 61}: "ARRIS Group, Inc.", - [3]byte{152, 108, 92}: "Jiangxi Gosun Guard Security Co.,Ltd", - [3]byte{152, 108, 245}: "zte corporation", - [3]byte{152, 109, 53}: "IEEE Registration Authority", - [3]byte{152, 109, 200}: "TOSHIBA MITSUBISHI-ELECTRIC INDUSTRIAL SYSTEMS CORPORATION", - [3]byte{152, 111, 96}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{152, 112, 232}: "INNATECH SDN BHD", - [3]byte{152, 115, 196}: "Sage Electronic Engineering LLC", - [3]byte{152, 116, 61}: "Shenzhen Jun Kai Hengye Technology Co. Ltd", - [3]byte{152, 116, 218}: "Infinix mobility limited", - [3]byte{152, 118, 182}: "Adafruit", - [3]byte{152, 119, 112}: "Pep Digital Technology (Guangzhou) Co., Ltd", - [3]byte{152, 123, 243}: "Texas Instruments", - [3]byte{152, 126, 70}: "Emizon Networks Limited", - [3]byte{152, 130, 23}: "Disruptive Ltd", - [3]byte{152, 131, 137}: "Samsung Electronics Co.,Ltd", - [3]byte{152, 132, 227}: "Texas Instruments", - [3]byte{152, 134, 177}: "Flyaudio corporation (China)", - [3]byte{152, 135, 68}: "Wuxi Hongda Science and Technology Co.,LTD", - [3]byte{152, 137, 237}: "Anadem Information Inc.", - [3]byte{152, 139, 93}: "Sagemcom Broadband SAS", - [3]byte{152, 139, 173}: "Corintech Ltd.", - [3]byte{152, 142, 52}: "ZHEJIANG BOXSAM ELECTRONIC CO.,LTD", - [3]byte{152, 142, 74}: "NOXUS(BEIJING) TECHNOLOGY CO.,LTD", - [3]byte{152, 142, 221}: "TE Connectivity Limerick", - [3]byte{152, 144, 128}: "Linkpower Network System Inc Ltd.", - [3]byte{152, 144, 150}: "Dell Inc.", - [3]byte{152, 147, 204}: "LG ELECTRONICS INC", - [3]byte{152, 148, 73}: "Skyworth Wireless Technology Ltd.", - [3]byte{152, 151, 209}: "MitraStar Technology Corp.", - [3]byte{152, 156, 87}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{152, 158, 99}: "Apple, Inc.", - [3]byte{152, 164, 14}: "Snap, Inc.", - [3]byte{152, 167, 176}: "MCST ZAO", - [3]byte{152, 170, 60}: "Will i-tech Co., Ltd.", - [3]byte{152, 170, 215}: "BLUE WAVE NETWORKING CO LTD", - [3]byte{152, 170, 252}: "IEEE Registration Authority", - [3]byte{152, 176, 57}: "Nokia", - [3]byte{152, 182, 233}: "Nintendo Co.,Ltd", - [3]byte{152, 184, 227}: "Apple, Inc.", - [3]byte{152, 187, 30}: "BYD Precision Manufacture Company Ltd.", - [3]byte{152, 188, 87}: "SVA TECHNOLOGIES CO.LTD", - [3]byte{152, 188, 153}: "Edeltech Co.,Ltd.", - [3]byte{152, 190, 148}: "IBM", - [3]byte{152, 192, 235}: "Global Regency Ltd", - [3]byte{152, 197, 219}: "Ericsson AB", - [3]byte{152, 200, 69}: "PacketAccess", - [3]byte{152, 203, 39}: "Galore Networks Pvt. Ltd.", - [3]byte{152, 205, 180}: "Virident Systems, Inc.", - [3]byte{152, 207, 83}: "BBK EDUCATIONAL ELECTRONICS CORP.,LTD.", - [3]byte{152, 210, 147}: "Google, Inc.", - [3]byte{152, 211, 49}: "Shenzhen Bolutek Technology Co.,Ltd.", - [3]byte{152, 211, 210}: "MEKRA Lang GmbH & Co. KG", - [3]byte{152, 214, 134}: "Chyi Lee industry Co., ltd.", - [3]byte{152, 214, 187}: "Apple, Inc.", - [3]byte{152, 214, 247}: "LG Electronics (Mobile Communications)", - [3]byte{152, 216, 140}: "Nortel Networks", - [3]byte{152, 218, 146}: "Vuzix Corporation", - [3]byte{152, 220, 217}: "UNITEC Co., Ltd.", - [3]byte{152, 221, 234}: "Infinix mobility limited", - [3]byte{152, 222, 208}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{152, 224, 217}: "Apple, Inc.", - [3]byte{152, 225, 101}: "Accutome", - [3]byte{152, 228, 118}: "Zentan", - [3]byte{152, 231, 154}: "Foxconn(NanJing) Communication Co.,Ltd.", - [3]byte{152, 231, 244}: "Hewlett Packard", - [3]byte{152, 231, 245}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{152, 232, 72}: "Axiim", - [3]byte{152, 236, 101}: "Cosesy ApS", - [3]byte{152, 238, 203}: "Wistron Infocomm (Zhongshan) Corporation", - [3]byte{152, 239, 155}: "OHSUNG", - [3]byte{152, 240, 88}: "Lynxspring, Incl.", - [3]byte{152, 240, 171}: "Apple, Inc.", - [3]byte{152, 241, 112}: "Murata Manufacturing Co., Ltd.", - [3]byte{152, 241, 153}: "NEC Platforms, Ltd.", - [3]byte{152, 242, 179}: "Hewlett Packard Enterprise", - [3]byte{152, 244, 40}: "zte corporation", - [3]byte{152, 245, 55}: "zte corporation", - [3]byte{152, 245, 169}: "OHSUNG", - [3]byte{152, 247, 215}: "ARRIS Group, Inc.", - [3]byte{152, 248, 193}: "IDT Technology Limited", - [3]byte{152, 248, 219}: "Marini Impianti Industriali s.r.l.", - [3]byte{152, 250, 227}: "Xiaomi Communications Co Ltd", - [3]byte{152, 251, 18}: "Grand Electronics (HK) Ltd", - [3]byte{152, 252, 17}: "Cisco-Linksys, LLC", - [3]byte{152, 253, 116}: "ACT.CO.LTD", - [3]byte{152, 253, 180}: "Primax Electronics Ltd.", - [3]byte{152, 254, 3}: "Ericsson - North America", - [3]byte{152, 254, 148}: "Apple, Inc.", - [3]byte{152, 255, 106}: "OTEC(Shanghai)Technology Co.,Ltd.", - [3]byte{152, 255, 208}: "Lenovo Mobile Communication Technology Ltd.", - [3]byte{156, 1, 17}: "Shenzhen Newabel Electronic Co., Ltd.", - [3]byte{156, 2, 152}: "Samsung Electronics Co.,Ltd", - [3]byte{156, 3, 158}: "Beijing Winchannel Software Technology Co., Ltd", - [3]byte{156, 4, 115}: "Tecmobile (International) Ltd.", - [3]byte{156, 4, 235}: "Apple, Inc.", - [3]byte{156, 6, 27}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{156, 6, 110}: "Hytera Communications Corporation Limited", - [3]byte{156, 13, 172}: "Tymphany HK Limited", - [3]byte{156, 14, 74}: "Shenzhen Vastking Electronic Co.,Ltd.", - [3]byte{156, 19, 171}: "Chanson Water Co., Ltd.", - [3]byte{156, 20, 101}: "Edata Elektronik San. ve Tic. A.Ş.", - [3]byte{156, 24, 116}: "Nokia Danmark A/S", - [3]byte{156, 28, 18}: "Aruba Networks", - [3]byte{156, 29, 88}: "Texas Instruments", - [3]byte{156, 30, 149}: "Actiontec Electronics, Inc", - [3]byte{156, 31, 221}: "Accupix Inc.", - [3]byte{156, 32, 123}: "Apple, Inc.", - [3]byte{156, 33, 106}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{156, 34, 14}: "TASCAN Systems GmbH", - [3]byte{156, 40, 64}: "Discovery Technology,LTD..", - [3]byte{156, 40, 191}: "Continental Automotive Czech Republic s.r.o.", - [3]byte{156, 40, 239}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{156, 41, 63}: "Apple, Inc.", - [3]byte{156, 42, 112}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{156, 42, 131}: "Samsung Electronics Co.,Ltd", - [3]byte{156, 48, 91}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{156, 48, 102}: "RWE Effizienz GmbH", - [3]byte{156, 49, 120}: "Foshan Huadian Intelligent Communications Teachnologies Co.,Ltd", - [3]byte{156, 49, 182}: "Kulite Semiconductor Products Inc", - [3]byte{156, 50, 169}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD", - [3]byte{156, 52, 38}: "ARRIS Group, Inc.", - [3]byte{156, 53, 131}: "Nipro Diagnostics, Inc", - [3]byte{156, 53, 235}: "Apple, Inc.", - [3]byte{156, 55, 244}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{156, 58, 175}: "Samsung Electronics Co.,Ltd", - [3]byte{156, 61, 207}: "NETGEAR", - [3]byte{156, 62, 170}: "EnvyLogic Co.,Ltd.", - [3]byte{156, 65, 124}: "Hame Technology Co., Limited", - [3]byte{156, 68, 61}: "CHENGDU XUGUANG TECHNOLOGY CO, LTD", - [3]byte{156, 68, 166}: "SwiftTest, Inc.", - [3]byte{156, 69, 99}: "DIMEP Sistemas", - [3]byte{156, 74, 123}: "Nokia Corporation", - [3]byte{156, 76, 174}: "Mesa Labs", - [3]byte{156, 78, 32}: "Cisco Systems, Inc", - [3]byte{156, 78, 54}: "Intel Corporate", - [3]byte{156, 78, 142}: "ALT Systems Ltd", - [3]byte{156, 78, 191}: "BoxCast", - [3]byte{156, 79, 207}: "TCT mobile ltd", - [3]byte{156, 79, 218}: "Apple, Inc.", - [3]byte{156, 80, 238}: "Cambridge Industries(Group) Co.,Ltd.", - [3]byte{156, 82, 248}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{156, 83, 205}: "ENGICAM s.r.l.", - [3]byte{156, 84, 28}: "Shenzhen My-power Technology Co.,Ltd", - [3]byte{156, 84, 202}: "Zhengzhou VCOM Science and Technology Co.,Ltd", - [3]byte{156, 85, 180}: "I.S.E. S.r.l.", - [3]byte{156, 87, 17}: "Feitian Xunda(Beijing) Aeronautical Information Technology Co., Ltd.", - [3]byte{156, 87, 173}: "Cisco Systems, Inc", - [3]byte{156, 91, 150}: "NMR Corporation", - [3]byte{156, 92, 141}: "FIREMAX INDÚSTRIA E COMÉRCIO DE PRODUTOS ELETRÔNICOS LTDA", - [3]byte{156, 92, 142}: "ASUSTek COMPUTER INC.", - [3]byte{156, 92, 249}: "Sony Mobile Communications AB", - [3]byte{156, 93, 18}: "Aerohive Networks Inc.", - [3]byte{156, 93, 149}: "VTC Electronics Corp.", - [3]byte{156, 94, 115}: "Calibre UK LTD", - [3]byte{156, 97, 29}: "Omni-ID USA, Inc.", - [3]byte{156, 97, 33}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD", - [3]byte{156, 98, 171}: "Sumavision Technologies Co.,Ltd", - [3]byte{156, 99, 237}: "zte corporation", - [3]byte{156, 100, 94}: "Harman Consumer Group", - [3]byte{156, 101, 176}: "Samsung Electronics Co.,Ltd", - [3]byte{156, 101, 238}: "DASAN Network Solutions", - [3]byte{156, 101, 249}: "AcSiP Technology Corp.", - [3]byte{156, 102, 80}: "Glodio Technolies Co.,Ltd Tianjin Branch", - [3]byte{156, 104, 91}: "Octonion SA", - [3]byte{156, 106, 190}: "QEES ApS.", - [3]byte{156, 108, 21}: "Microsoft Corporation", - [3]byte{156, 111, 82}: "zte corporation", - [3]byte{156, 116, 26}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{156, 117, 20}: "Wildix srl", - [3]byte{156, 119, 170}: "NADASNV", - [3]byte{156, 121, 172}: "Suntec Software(Shanghai) Co., Ltd.", - [3]byte{156, 122, 3}: "Ciena Corporation", - [3]byte{156, 123, 210}: "NEOLAB Convergence", - [3]byte{156, 125, 163}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{156, 128, 125}: "SYSCABLE Korea Inc.", - [3]byte{156, 128, 223}: "Arcadyan Technology Corporation", - [3]byte{156, 131, 191}: "PRO-VISION, Inc.", - [3]byte{156, 132, 191}: "Apple, Inc.", - [3]byte{156, 134, 218}: "Phoenix Geophysics Ltd.", - [3]byte{156, 136, 136}: "Simac Techniek NV", - [3]byte{156, 136, 173}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{156, 139, 160}: "Apple, Inc.", - [3]byte{156, 139, 241}: "The Warehouse Limited", - [3]byte{156, 140, 110}: "Samsung Electronics Co.,Ltd", - [3]byte{156, 141, 26}: "INTEG process group inc", - [3]byte{156, 141, 124}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{156, 141, 211}: "Leonton Technologies", - [3]byte{156, 142, 153}: "Hewlett Packard", - [3]byte{156, 142, 205}: "Amcrest Technologies", - [3]byte{156, 142, 220}: "Teracom Limited", - [3]byte{156, 147, 78}: "Xerox Corporation", - [3]byte{156, 147, 228}: "Private", - [3]byte{156, 149, 248}: "SmartDoor Systems, LLC", - [3]byte{156, 151, 38}: "Technicolor", - [3]byte{156, 152, 17}: "Guangzhou Sunrise Electronics Development Co., Ltd", - [3]byte{156, 153, 160}: "Xiaomi Communications Co Ltd", - [3]byte{156, 156, 29}: "Starkey Labs Inc.", - [3]byte{156, 156, 64}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD", - [3]byte{156, 157, 93}: "Raden Inc", - [3]byte{156, 161, 10}: "SCLE SFE", - [3]byte{156, 161, 52}: "Nike, Inc.", - [3]byte{156, 163, 169}: "Guangzhou Juan Optical and Electronical Tech Joint Stock Co., Ltd", - [3]byte{156, 163, 186}: "SAKURA Internet Inc.", - [3]byte{156, 165, 119}: "Osorno Enterprises Inc.", - [3]byte{156, 165, 192}: "vivo Mobile Communication Co., Ltd.", - [3]byte{156, 166, 157}: "Whaley Technology Co.Ltd", - [3]byte{156, 169, 228}: "zte corporation", - [3]byte{156, 172, 109}: "Universal Electronics, Inc.", - [3]byte{156, 173, 151}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{156, 173, 239}: "Obihai Technology, Inc.", - [3]byte{156, 174, 211}: "Seiko Epson Corporation", - [3]byte{156, 175, 111}: "ITEL MOBILE LIMITED", - [3]byte{156, 175, 202}: "Cisco Systems, Inc", - [3]byte{156, 176, 8}: "Ubiquitous Computing Technology Corporation", - [3]byte{156, 178, 6}: "PROCENTEC", - [3]byte{156, 178, 178}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{156, 182, 84}: "Hewlett Packard", - [3]byte{156, 182, 208}: "Rivet Networks", - [3]byte{156, 183, 13}: "Liteon Technology Corporation", - [3]byte{156, 183, 147}: "Creatcomm Technology Inc.", - [3]byte{156, 187, 152}: "Shen Zhen RND Electronic Co.,LTD", - [3]byte{156, 189, 157}: "SkyDisk, Inc.", - [3]byte{156, 190, 224}: "Biosoundlab Co., Ltd.", - [3]byte{156, 192, 119}: "PrintCounts, LLC", - [3]byte{156, 192, 210}: "Conductix-Wampfler GmbH", - [3]byte{156, 193, 114}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{156, 199, 166}: "AVM GmbH", - [3]byte{156, 199, 209}: "SHARP Corporation", - [3]byte{156, 200, 174}: "Becton, Dickinson and Company", - [3]byte{156, 202, 217}: "Nokia Corporation", - [3]byte{156, 204, 131}: "Juniper Networks", - [3]byte{156, 205, 130}: "CHENG UEI PRECISION INDUSTRY CO.,LTD", - [3]byte{156, 210, 30}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{156, 210, 75}: "zte corporation", - [3]byte{156, 211, 50}: "PLC Technology Ltd", - [3]byte{156, 211, 91}: "Samsung Electronics Co.,Ltd", - [3]byte{156, 211, 109}: "NETGEAR", - [3]byte{156, 212, 139}: "Innolux Technology Europe BV", - [3]byte{156, 214, 67}: "D-Link International", - [3]byte{156, 217, 23}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{156, 217, 203}: "Lesira Manufacturing Pty Ltd", - [3]byte{156, 218, 62}: "Intel Corporate", - [3]byte{156, 220, 113}: "Hewlett Packard Enterprise", - [3]byte{156, 221, 31}: "Intelligent Steward Co.,Ltd", - [3]byte{156, 223, 3}: "Harman/Becker Automotive Systems GmbH", - [3]byte{156, 223, 177}: "Shenzhen Crave Communication Co., LTD", - [3]byte{156, 224, 99}: "Samsung Electronics Co.,Ltd", - [3]byte{156, 225, 14}: "NCTech Ltd", - [3]byte{156, 225, 214}: "Junger Audio-Studiotechnik GmbH", - [3]byte{156, 226, 48}: "JULONG CO,.LTD.", - [3]byte{156, 227, 63}: "Apple, Inc.", - [3]byte{156, 227, 116}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{156, 230, 53}: "Nintendo Co., Ltd.", - [3]byte{156, 230, 231}: "Samsung Electronics Co.,Ltd", - [3]byte{156, 231, 189}: "Winduskorea co., Ltd", - [3]byte{156, 233, 81}: "Shenzhen Sang Fei Consumer Communications Ltd., Co.", - [3]byte{156, 235, 232}: "BizLink (Kunshan) Co.,Ltd", - [3]byte{156, 239, 213}: "Panda Wireless, Inc.", - [3]byte{156, 243, 135}: "Apple, Inc.", - [3]byte{156, 244, 142}: "Apple, Inc.", - [3]byte{156, 246, 26}: "UTC Fire and Security", - [3]byte{156, 246, 125}: "Ricardo Prague, s.r.o.", - [3]byte{156, 248, 219}: "shenzhen eyunmei technology co,.ltd", - [3]byte{156, 249, 56}: "AREVA NP GmbH", - [3]byte{156, 251, 213}: "vivo Mobile Communication Co., Ltd.", - [3]byte{156, 251, 241}: "MESOMATIC GmbH & Co.KG", - [3]byte{156, 252, 1}: "Apple, Inc.", - [3]byte{156, 252, 209}: "Aetheris Technology (Shanghai) Co., Ltd.", - [3]byte{156, 255, 190}: "OTSL Inc.", - [3]byte{160, 2, 220}: "Amazon Technologies Inc.", - [3]byte{160, 3, 99}: "Robert Bosch Healthcare GmbH", - [3]byte{160, 4, 62}: "Parker Hannifin Manufacturing Germany GmbH & Co. KG", - [3]byte{160, 4, 96}: "NETGEAR", - [3]byte{160, 6, 39}: "NEXPA System", - [3]byte{160, 7, 152}: "Samsung Electronics Co.,Ltd", - [3]byte{160, 7, 182}: "Advanced Technical Support, Inc.", - [3]byte{160, 8, 111}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{160, 9, 76}: "CenturyLink", - [3]byte{160, 9, 237}: "Avaya Inc", - [3]byte{160, 10, 191}: "Wieson Technologies Co., Ltd.", - [3]byte{160, 11, 186}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{160, 12, 161}: "SKTB SKiT", - [3]byte{160, 16, 129}: "Samsung Electronics Co.,Ltd", - [3]byte{160, 18, 144}: "Avaya Inc", - [3]byte{160, 18, 219}: "TABUCHI ELECTRIC CO.,LTD", - [3]byte{160, 19, 59}: "HiTi Digital, Inc.", - [3]byte{160, 19, 203}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{160, 20, 61}: "PARROT SA", - [3]byte{160, 22, 92}: "Triteka LTD", - [3]byte{160, 24, 40}: "Apple, Inc.", - [3]byte{160, 24, 89}: "Shenzhen Yidashi Electronics Co Ltd", - [3]byte{160, 25, 23}: "Bertel S.p.a.", - [3]byte{160, 27, 41}: "Sagemcom Broadband SAS", - [3]byte{160, 28, 5}: "NIMAX TELECOM CO.,LTD.", - [3]byte{160, 29, 72}: "Hewlett Packard", - [3]byte{160, 30, 11}: "MINIX Technology Limited", - [3]byte{160, 32, 166}: "Espressif Inc.", - [3]byte{160, 33, 149}: "Samsung Electronics Co.,Ltd", - [3]byte{160, 33, 183}: "NETGEAR", - [3]byte{160, 35, 27}: "TeleComp R&D Corp.", - [3]byte{160, 35, 159}: "Cisco Systems, Inc", - [3]byte{160, 43, 184}: "Hewlett Packard", - [3]byte{160, 44, 54}: "FN-LINK TECHNOLOGY LIMITED", - [3]byte{160, 46, 243}: "United Integrated Services Co., Led.", - [3]byte{160, 50, 153}: "Lenovo (Beijing) Co., Ltd.", - [3]byte{160, 52, 27}: "TrackR, Inc", - [3]byte{160, 54, 159}: "Intel Corporate", - [3]byte{160, 54, 240}: "Comprehensive Power", - [3]byte{160, 54, 250}: "Ettus Research LLC", - [3]byte{160, 57, 247}: "LG Electronics (Mobile Communications)", - [3]byte{160, 58, 117}: "PSS Belgium N.V.", - [3]byte{160, 59, 27}: "Inspire Tech", - [3]byte{160, 59, 227}: "Apple, Inc.", - [3]byte{160, 61, 111}: "Cisco Systems, Inc", - [3]byte{160, 62, 107}: "IEEE Registration Authority", - [3]byte{160, 64, 37}: "Actioncable, Inc.", - [3]byte{160, 64, 65}: "SAMWONFA Co.,Ltd.", - [3]byte{160, 64, 160}: "NETGEAR", - [3]byte{160, 65, 94}: "Opsens Solution Inc.", - [3]byte{160, 65, 167}: "NL Ministry of Defense", - [3]byte{160, 66, 63}: "Tyan Computer Corp", - [3]byte{160, 67, 219}: "Sitael S.p.A.", - [3]byte{160, 72, 28}: "Hewlett Packard", - [3]byte{160, 76, 91}: "Shenzhen TINNO Mobile Technology Corp.", - [3]byte{160, 76, 193}: "Helixtech Corp.", - [3]byte{160, 78, 1}: "CENTRAL ENGINEERING co.,ltd.", - [3]byte{160, 78, 4}: "Nokia Corporation", - [3]byte{160, 78, 167}: "Apple, Inc.", - [3]byte{160, 79, 212}: "ADB Broadband Italia", - [3]byte{160, 81, 198}: "Avaya Inc", - [3]byte{160, 85, 79}: "Cisco Systems, Inc", - [3]byte{160, 85, 222}: "ARRIS Group, Inc.", - [3]byte{160, 86, 178}: "Harman/Becker Automotive Systems GmbH", - [3]byte{160, 89, 58}: "V.D.S. Video Display Systems srl", - [3]byte{160, 90, 164}: "Grand Products Nevada, Inc.", - [3]byte{160, 91, 33}: "ENVINET GmbH", - [3]byte{160, 93, 193}: "TMCT Co., LTD.", - [3]byte{160, 93, 231}: "DIRECTV, Inc.", - [3]byte{160, 94, 107}: "MELPER Co., Ltd.", - [3]byte{160, 96, 144}: "Samsung Electronics Co.,Ltd", - [3]byte{160, 99, 145}: "NETGEAR", - [3]byte{160, 100, 143}: "ASKEY COMPUTER CORP", - [3]byte{160, 101, 24}: "VNPT TECHNOLOGY", - [3]byte{160, 103, 190}: "Sicon srl", - [3]byte{160, 105, 134}: "Wellav Technologies Ltd", - [3]byte{160, 106, 0}: "Verilink Corporation", - [3]byte{160, 106, 68}: "Vizio, Inc", - [3]byte{160, 108, 236}: "RIM", - [3]byte{160, 109, 9}: "Intelcan Technosystems Inc.", - [3]byte{160, 110, 80}: "Nanotek Elektronik Sistemler Ltd. Sti.", - [3]byte{160, 111, 170}: "LG Innotek", - [3]byte{160, 112, 153}: "Beijing Huacan Electronics Co., Ltd", - [3]byte{160, 113, 169}: "Nokia Corporation", - [3]byte{160, 114, 44}: "HUMAX Co., Ltd.", - [3]byte{160, 114, 228}: "NJ SYSTEM CO.,LTD", - [3]byte{160, 115, 50}: "Cashmaster International Limited", - [3]byte{160, 115, 252}: "Rancore Technologies Private Limited", - [3]byte{160, 117, 145}: "Samsung Electronics Co.,Ltd", - [3]byte{160, 119, 113}: "Vialis BV", - [3]byte{160, 120, 186}: "Pantech Co., Ltd.", - [3]byte{160, 130, 31}: "Samsung Electronics Co.,Ltd", - [3]byte{160, 130, 172}: "Linear DMS Solutions Sdn. Bhd.", - [3]byte{160, 130, 199}: "P.T.I Co.,LTD", - [3]byte{160, 132, 203}: "SonicSensory,Inc.", - [3]byte{160, 134, 29}: "Chengdu Fuhuaxin Technology co.,Ltd", - [3]byte{160, 134, 198}: "Xiaomi Communications Co Ltd", - [3]byte{160, 134, 236}: "SAEHAN HITEC Co., Ltd", - [3]byte{160, 136, 105}: "Intel Corporate", - [3]byte{160, 136, 180}: "Intel Corporate", - [3]byte{160, 137, 228}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd", - [3]byte{160, 138, 135}: "HuiZhou KaiYue Electronic Co.,Ltd", - [3]byte{160, 140, 21}: "Gerhard D. Wempe KG", - [3]byte{160, 140, 155}: "Xtreme Technologies Corp", - [3]byte{160, 140, 248}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{160, 140, 253}: "Hewlett Packard", - [3]byte{160, 141, 22}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{160, 142, 120}: "Sagemcom Broadband SAS", - [3]byte{160, 144, 222}: "VEEDIMS,LLC", - [3]byte{160, 145, 105}: "LG Electronics (Mobile Communications)", - [3]byte{160, 145, 200}: "zte corporation", - [3]byte{160, 147, 71}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{160, 149, 12}: "China Mobile IOTCompany Limited", - [3]byte{160, 152, 5}: "OpenVox Communication Co Ltd", - [3]byte{160, 152, 237}: "Shandong Intelligent Optical Communication Development Co., Ltd.", - [3]byte{160, 153, 155}: "Apple, Inc.", - [3]byte{160, 154, 90}: "Time Domain", - [3]byte{160, 155, 189}: "Total Aviation Solutions Pty Ltd", - [3]byte{160, 157, 134}: "Alcatel-Lucent Shanghai Bell Co., Ltd", - [3]byte{160, 157, 145}: "SoundBridge", - [3]byte{160, 157, 193}: "China Dragon Technology Limited", - [3]byte{160, 158, 26}: "Polar Electro Oy", - [3]byte{160, 161, 48}: "DLI Taiwan Branch office", - [3]byte{160, 162, 60}: "GPMS", - [3]byte{160, 163, 59}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{160, 163, 226}: "Actiontec Electronics, Inc", - [3]byte{160, 166, 92}: "Supercomputing Systems AG", - [3]byte{160, 167, 99}: "Polytron Vertrieb GmbH", - [3]byte{160, 168, 205}: "Intel Corporate", - [3]byte{160, 170, 253}: "EraThink Technologies Corp.", - [3]byte{160, 171, 27}: "D-Link International", - [3]byte{160, 173, 161}: "JMR Electronics, Inc", - [3]byte{160, 175, 189}: "Intel Corporate", - [3]byte{160, 177, 0}: "ShenZhen Cando Electronics Co.,Ltd", - [3]byte{160, 179, 204}: "Hewlett Packard", - [3]byte{160, 180, 55}: "GD Mission Systems", - [3]byte{160, 180, 165}: "Samsung Electronics Co.,Ltd", - [3]byte{160, 181, 218}: "HongKong THTF Co., Ltd", - [3]byte{160, 182, 98}: "Acutvista Innovation Co., Ltd.", - [3]byte{160, 184, 248}: "Amgen U.S.A. Inc.", - [3]byte{160, 185, 237}: "Skytap", - [3]byte{160, 186, 184}: "Pixon Imaging", - [3]byte{160, 187, 62}: "IEEE Registration Authority", - [3]byte{160, 189, 205}: "BSkyB Ltd", - [3]byte{160, 191, 80}: "S.C. ADD-PRODUCTION S.R.L.", - [3]byte{160, 191, 165}: "CORESYS", - [3]byte{160, 194, 222}: "Costar Video Systems", - [3]byte{160, 195, 222}: "Triton Electronic Systems Ltd.", - [3]byte{160, 196, 165}: "SYGN HOUSE CO.,LTD", - [3]byte{160, 197, 98}: "ARRIS Group, Inc.", - [3]byte{160, 197, 137}: "Intel Corporate", - [3]byte{160, 197, 242}: "IEEE Registration Authority", - [3]byte{160, 198, 236}: "ShenZhen ANYK Technology Co.,LTD", - [3]byte{160, 201, 160}: "Murata Manufacturing Co., Ltd.", - [3]byte{160, 203, 253}: "Samsung Electronics Co.,Ltd", - [3]byte{160, 204, 43}: "Murata Manufacturing Co., Ltd.", - [3]byte{160, 206, 200}: "CE LINK LIMITED", - [3]byte{160, 207, 91}: "Cisco Systems, Inc", - [3]byte{160, 209, 42}: "AXPRO Technology Inc.", - [3]byte{160, 211, 122}: "Intel Corporate", - [3]byte{160, 211, 133}: "AUMA Riester GmbH & Co. KG", - [3]byte{160, 211, 193}: "Hewlett Packard", - [3]byte{160, 215, 149}: "Apple, Inc.", - [3]byte{160, 216, 111}: "Private", - [3]byte{160, 218, 146}: "Nanjing Glarun Atten Technology Co. Ltd.", - [3]byte{160, 220, 4}: "Becker-Antriebe GmbH", - [3]byte{160, 221, 151}: "PolarLink Technologies, Ltd", - [3]byte{160, 221, 229}: "SHARP Corporation", - [3]byte{160, 222, 5}: "JSC Irbis-T", - [3]byte{160, 224, 175}: "Cisco Systems, Inc", - [3]byte{160, 226, 1}: "AVTrace Ltd.(China)", - [3]byte{160, 226, 90}: "Amicus SK, s.r.o.", - [3]byte{160, 226, 149}: "DAT System Co.,Ltd", - [3]byte{160, 228, 83}: "Sony Mobile Communications AB", - [3]byte{160, 228, 203}: "Zyxel Communications Corporation", - [3]byte{160, 229, 52}: "Stratec Biomedical AG", - [3]byte{160, 229, 233}: "enimai Inc", - [3]byte{160, 230, 248}: "Texas Instruments", - [3]byte{160, 233, 219}: "Ningbo FreeWings Technologies Co.,Ltd", - [3]byte{160, 235, 118}: "AirCUVE Inc.", - [3]byte{160, 236, 128}: "zte corporation", - [3]byte{160, 236, 249}: "Cisco Systems, Inc", - [3]byte{160, 237, 205}: "Apple, Inc.", - [3]byte{160, 239, 132}: "Seine Image Int'l Co., Ltd", - [3]byte{160, 242, 23}: "GE Medical System(China) Co., Ltd.", - [3]byte{160, 243, 193}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{160, 243, 228}: "Alcatel-Lucent IPD", - [3]byte{160, 244, 25}: "Nokia Corporation", - [3]byte{160, 244, 80}: "HTC Corporation", - [3]byte{160, 244, 89}: "FN-LINK TECHNOLOGY LIMITED", - [3]byte{160, 244, 121}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{160, 246, 253}: "Texas Instruments", - [3]byte{160, 248, 73}: "Cisco Systems, Inc", - [3]byte{160, 248, 149}: "Shenzhen TINNO Mobile Technology Corp.", - [3]byte{160, 249, 224}: "VIVATEL COMPANY LIMITED", - [3]byte{160, 252, 110}: "Telegrafia a.s.", - [3]byte{160, 254, 97}: "Vivint Wireless Inc.", - [3]byte{160, 254, 145}: "AVAT Automation GmbH", - [3]byte{164, 1, 48}: "ABIsystems Co., LTD", - [3]byte{164, 2, 185}: "Intel Corporate", - [3]byte{164, 4, 80}: "nFore Technology Inc.", - [3]byte{164, 5, 158}: "STA Infinity LLP", - [3]byte{164, 7, 182}: "Samsung Electronics Co.,Ltd", - [3]byte{164, 8, 234}: "Murata Manufacturing Co., Ltd.", - [3]byte{164, 8, 245}: "Sagemcom Broadband SAS", - [3]byte{164, 9, 203}: "Alfred Kaercher GmbH & Co KG", - [3]byte{164, 11, 237}: "Carry Technology Co.,Ltd", - [3]byte{164, 12, 195}: "Cisco Systems, Inc", - [3]byte{164, 13, 188}: "Xiamen Intretech Inc.", - [3]byte{164, 14, 43}: "Facebook Inc", - [3]byte{164, 17, 21}: "Robert Bosch Engineering and Business Solutions pvt. Ltd.", - [3]byte{164, 17, 99}: "IEEE Registration Authority", - [3]byte{164, 18, 66}: "NEC Platforms, Ltd.", - [3]byte{164, 19, 78}: "Luxul", - [3]byte{164, 20, 55}: "Hangzhou Hikvision Digital Technology Co.,Ltd.", - [3]byte{164, 21, 102}: "Weifang GoerTek Technology Co.,Ltd.", - [3]byte{164, 21, 136}: "ARRIS Group, Inc.", - [3]byte{164, 23, 49}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{164, 24, 117}: "Cisco Systems, Inc", - [3]byte{164, 27, 192}: "Fastec Imaging Corporation", - [3]byte{164, 31, 114}: "Dell Inc.", - [3]byte{164, 33, 138}: "Nortel Networks", - [3]byte{164, 35, 5}: "Open Networking Laboratory", - [3]byte{164, 36, 179}: "FlatFrog Laboratories AB", - [3]byte{164, 36, 221}: "Cambrionix Ltd", - [3]byte{164, 37, 27}: "Avaya Inc", - [3]byte{164, 41, 64}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{164, 41, 131}: "Boeing Defence Australia", - [3]byte{164, 41, 183}: "bluesky", - [3]byte{164, 43, 140}: "NETGEAR", - [3]byte{164, 43, 176}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{164, 44, 8}: "Masterwork Automodules", - [3]byte{164, 49, 17}: "ZIV", - [3]byte{164, 49, 53}: "Apple, Inc.", - [3]byte{164, 51, 209}: "Fibrlink Communications Co.,Ltd.", - [3]byte{164, 52, 18}: "Thales Alenia Space", - [3]byte{164, 52, 217}: "Intel Corporate", - [3]byte{164, 52, 241}: "Texas Instruments", - [3]byte{164, 56, 49}: "RF elements s.r.o.", - [3]byte{164, 56, 252}: "Plastic Logic", - [3]byte{164, 58, 105}: "Vers Inc", - [3]byte{164, 59, 250}: "IEEE Registration Authority", - [3]byte{164, 61, 120}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{164, 62, 81}: "ANOV FRANCE", - [3]byte{164, 68, 209}: "Wingtech Group (HongKong)Limited", - [3]byte{164, 70, 107}: "EOC Technology", - [3]byte{164, 70, 250}: "AmTRAN Video Corporation", - [3]byte{164, 74, 211}: "ST Electronics(Shanghai) Co.,Ltd", - [3]byte{164, 75, 21}: "Sun Cupid Technology (HK) LTD", - [3]byte{164, 76, 17}: "Cisco Systems, Inc", - [3]byte{164, 76, 200}: "Dell Inc.", - [3]byte{164, 78, 45}: "Adaptive Wireless Solutions, LLC", - [3]byte{164, 78, 49}: "Intel Corporate", - [3]byte{164, 79, 41}: "IEEE Registration Authority", - [3]byte{164, 80, 85}: "busware.de", - [3]byte{164, 81, 111}: "Microsoft Mobile Oy", - [3]byte{164, 82, 111}: "ADB Broadband Italia", - [3]byte{164, 83, 133}: "Weifang GoerTek Technology Co.,Ltd.", - [3]byte{164, 86, 2}: "fenglian Technology Co.,Ltd.", - [3]byte{164, 86, 27}: "MCOT Corporation", - [3]byte{164, 86, 48}: "Cisco Systems, Inc", - [3]byte{164, 88, 15}: "IEEE Registration Authority", - [3]byte{164, 90, 28}: "smart-electronic GmbH", - [3]byte{164, 92, 39}: "Nintendo Co., Ltd.", - [3]byte{164, 93, 54}: "Hewlett Packard", - [3]byte{164, 93, 161}: "ADB Broadband Italia", - [3]byte{164, 94, 96}: "Apple, Inc.", - [3]byte{164, 96, 17}: "Verifone", - [3]byte{164, 96, 50}: "MRV Communications (Networks) LTD", - [3]byte{164, 98, 223}: "DS Global. Co., LTD", - [3]byte{164, 103, 6}: "Apple, Inc.", - [3]byte{164, 104, 188}: "Private", - [3]byte{164, 108, 42}: "Cisco Systems, Inc", - [3]byte{164, 108, 193}: "LTi REEnergy GmbH", - [3]byte{164, 110, 121}: "DFT System Co.Ltd", - [3]byte{164, 112, 214}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{164, 113, 116}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{164, 119, 51}: "Google, Inc.", - [3]byte{164, 119, 88}: "Ningbo Freewings Technologies Co.,Ltd", - [3]byte{164, 119, 96}: "Nokia Corporation", - [3]byte{164, 120, 134}: "Avaya Inc", - [3]byte{164, 121, 228}: "KLINFO Corp", - [3]byte{164, 122, 164}: "ARRIS Group, Inc.", - [3]byte{164, 122, 207}: "VIBICOM COMMUNICATIONS INC.", - [3]byte{164, 123, 44}: "Nokia", - [3]byte{164, 123, 133}: "ULTIMEDIA Co Ltd,", - [3]byte{164, 123, 157}: "Espressif Inc.", - [3]byte{164, 124, 20}: "ChargeStorm AB", - [3]byte{164, 124, 31}: "Cobham plc", - [3]byte{164, 126, 57}: "zte corporation", - [3]byte{164, 129, 238}: "Nokia Corporation", - [3]byte{164, 130, 105}: "Datrium, Inc.", - [3]byte{164, 132, 49}: "Samsung Electronics Co.,Ltd", - [3]byte{164, 133, 107}: "Q Electronics Ltd", - [3]byte{164, 134, 174}: "Quectel Wireless Solutions", - [3]byte{164, 137, 91}: "ARK INFOSOLUTIONS PVT LTD", - [3]byte{164, 140, 219}: "Lenovo", - [3]byte{164, 141, 59}: "Vizio, Inc", - [3]byte{164, 142, 10}: "DeLaval International AB", - [3]byte{164, 144, 5}: "CHINA GREATWALL COMPUTER SHENZHEN CO.,LTD", - [3]byte{164, 145, 177}: "Technicolor", - [3]byte{164, 147, 76}: "Cisco Systems, Inc", - [3]byte{164, 151, 187}: "Hitachi Industrial Equipment Systems Co.,Ltd", - [3]byte{164, 153, 71}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{164, 153, 129}: "FuJian Elite Power Tech CO.,LTD.", - [3]byte{164, 154, 88}: "Samsung Electronics Co.,Ltd", - [3]byte{164, 155, 19}: "Digital Check", - [3]byte{164, 155, 245}: "Hybridserver Tec GmbH", - [3]byte{164, 157, 73}: "Ketra, Inc.", - [3]byte{164, 158, 219}: "AutoCrib, Inc.", - [3]byte{164, 159, 133}: "Lyve Minds, Inc", - [3]byte{164, 159, 137}: "Shanghai Rui Rui Communication Technology Co.Ltd.", - [3]byte{164, 161, 194}: "Ericsson AB", - [3]byte{164, 161, 228}: "Innotube, Inc.", - [3]byte{164, 162, 74}: "Cisco SPVTG", - [3]byte{164, 164, 211}: "Bluebank Communication Technology Co.Ltd", - [3]byte{164, 166, 169}: "Private", - [3]byte{164, 168, 15}: "Shenzhen Coship Electronics Co., Ltd.", - [3]byte{164, 173, 0}: "Ragsdale Technology", - [3]byte{164, 173, 184}: "Vitec Group, Camera Dynamics Ltd", - [3]byte{164, 174, 154}: "Maestro Wireless Solutions ltd.", - [3]byte{164, 177, 33}: "Arantia 2010 S.L.", - [3]byte{164, 177, 151}: "Apple, Inc.", - [3]byte{164, 177, 233}: "Technicolor", - [3]byte{164, 177, 238}: "H. ZANDER GmbH & Co. KG", - [3]byte{164, 178, 167}: "Adaxys Solutions AG", - [3]byte{164, 179, 106}: "JSC SDO Chromatec", - [3]byte{164, 181, 46}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{164, 184, 5}: "Apple, Inc.", - [3]byte{164, 184, 24}: "PENTA Gesellschaft für elektronische Industriedatenverarbeitung mbH", - [3]byte{164, 185, 128}: "Parking BOXX Inc.", - [3]byte{164, 186, 118}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{164, 186, 219}: "Dell Inc.", - [3]byte{164, 187, 175}: "Lime Instruments", - [3]byte{164, 190, 97}: "EutroVision System, Inc.", - [3]byte{164, 191, 1}: "Intel Corporate", - [3]byte{164, 192, 199}: "ShenZhen Hitom Communication Technology Co..LTD", - [3]byte{164, 192, 225}: "Nintendo Co., Ltd.", - [3]byte{164, 193, 56}: "Telink Semiconductor (Taipei) Co. Ltd.", - [3]byte{164, 194, 171}: "Hangzhou LEAD-IT Information & Technology Co.,Ltd", - [3]byte{164, 195, 97}: "Apple, Inc.", - [3]byte{164, 196, 148}: "Intel Corporate", - [3]byte{164, 198, 79}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{164, 199, 222}: "Cambridge Industries(Group) Co.,Ltd.", - [3]byte{164, 202, 160}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{164, 204, 50}: "Inficomm Co., Ltd", - [3]byte{164, 208, 148}: "Erwin Peters Systemtechnik GmbH", - [3]byte{164, 209, 140}: "Apple, Inc.", - [3]byte{164, 209, 143}: "Shenzhen Skyee Optical Fiber Communication Technology Ltd.", - [3]byte{164, 209, 209}: "ECOtality North America", - [3]byte{164, 209, 210}: "Apple, Inc.", - [3]byte{164, 211, 181}: "GLITEL Stropkov, s.r.o.", - [3]byte{164, 213, 120}: "Texas Instruments", - [3]byte{164, 216, 86}: "Gimbal, Inc", - [3]byte{164, 216, 202}: "HONG KONG WATER WORLD TECHNOLOGY CO. LIMITED", - [3]byte{164, 217, 164}: "neXus ID Solutions AB", - [3]byte{164, 218, 63}: "Bionics Corp.", - [3]byte{164, 219, 46}: "Kingspan Environmental Ltd", - [3]byte{164, 219, 48}: "Liteon Technology Corporation", - [3]byte{164, 220, 190}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{164, 222, 80}: "Total Walther GmbH", - [3]byte{164, 222, 201}: "QLove Mobile Intelligence Information Technology (W.H.) Co. Ltd.", - [3]byte{164, 224, 230}: "FILIZOLA S.A. PESAGEM E AUTOMACAO", - [3]byte{164, 227, 46}: "Silicon & Software Systems Ltd.", - [3]byte{164, 227, 145}: "DENY FONTAINE", - [3]byte{164, 228, 184}: "BlackBerry RTS", - [3]byte{164, 229, 151}: "Gessler GmbH", - [3]byte{164, 230, 177}: "Shanghai Joindata Technology Co.,Ltd.", - [3]byte{164, 231, 49}: "Nokia Corporation", - [3]byte{164, 231, 228}: "Connex GmbH", - [3]byte{164, 233, 117}: "Apple, Inc.", - [3]byte{164, 233, 145}: "SISTEMAS AUDIOVISUALES ITELSIS S.L.", - [3]byte{164, 233, 163}: "Honest Technology Co., Ltd", - [3]byte{164, 235, 211}: "Samsung Electronics Co.,Ltd", - [3]byte{164, 237, 78}: "ARRIS Group, Inc.", - [3]byte{164, 238, 87}: "Seiko Epson Corporation", - [3]byte{164, 239, 82}: "Telewave Co., Ltd.", - [3]byte{164, 241, 232}: "Apple, Inc.", - [3]byte{164, 243, 193}: "Open Source Robotics Foundation, Inc.", - [3]byte{164, 243, 231}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{164, 244, 194}: "VNPT TECHNOLOGY", - [3]byte{164, 245, 34}: "CHOFU SEISAKUSHO CO.,LTD", - [3]byte{164, 247, 208}: "LAN Accessories Co., Ltd.", - [3]byte{164, 251, 141}: "Hangzhou Dunchong Technology Co.Ltd", - [3]byte{164, 252, 206}: "Security Expert Ltd.", - [3]byte{168, 1, 128}: "IMAGO Technologies GmbH", - [3]byte{168, 6, 0}: "Samsung Electronics Co.,Ltd", - [3]byte{168, 12, 13}: "Cisco Systems, Inc", - [3]byte{168, 12, 99}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{168, 12, 202}: "Shenzhen Sundray Technologies Company Limited", - [3]byte{168, 17, 252}: "ARRIS Group, Inc.", - [3]byte{168, 19, 116}: "Panasonic Corporation AVC Networks Company", - [3]byte{168, 21, 77}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{168, 21, 89}: "Breathometer, Inc.", - [3]byte{168, 21, 214}: "Shenzhen Meione Technology CO., LTD", - [3]byte{168, 22, 178}: "LG Electronics (Mobile Communications)", - [3]byte{168, 23, 88}: "Elektronik System i Umeå AB", - [3]byte{168, 27, 24}: "XTS CORP", - [3]byte{168, 27, 90}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{168, 27, 93}: "Foxtel Management Pty Ltd", - [3]byte{168, 27, 106}: "Texas Instruments", - [3]byte{168, 29, 22}: "AzureWave Technology Inc.", - [3]byte{168, 30, 132}: "QUANTA COMPUTER INC.", - [3]byte{168, 31, 175}: "KRYPTON POLSKA", - [3]byte{168, 32, 102}: "Apple, Inc.", - [3]byte{168, 36, 235}: "ZAO NPO Introtest", - [3]byte{168, 37, 235}: "Cambridge Industries(Group) Co.,Ltd.", - [3]byte{168, 38, 217}: "HTC Corporation", - [3]byte{168, 41, 76}: "Precision Optical Transceivers, Inc.", - [3]byte{168, 43, 181}: "Edgecore Networks Corporation", - [3]byte{168, 43, 214}: "Shina System Co., Ltd", - [3]byte{168, 48, 173}: "Weifang GoerTek Technology Co.,Ltd.", - [3]byte{168, 50, 154}: "Digicom Futuristic Technologies Ltd.", - [3]byte{168, 57, 68}: "Actiontec Electronics, Inc", - [3]byte{168, 64, 65}: "Dragino Technology Co., Limited", - [3]byte{168, 68, 129}: "Nokia Corporation", - [3]byte{168, 69, 205}: "Siselectron Technology LTD.", - [3]byte{168, 69, 233}: "Firich Enterprises CO., LTD.", - [3]byte{168, 71, 74}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{168, 73, 165}: "Lisantech Co., Ltd.", - [3]byte{168, 78, 63}: "Hitron Technologies. Inc", - [3]byte{168, 84, 178}: "Wistron Neweb Corporation", - [3]byte{168, 85, 106}: "Pocketnet Technology Inc.", - [3]byte{168, 87, 78}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{168, 88, 64}: "Cambridge Industries(Group) Co.,Ltd.", - [3]byte{168, 91, 120}: "Apple, Inc.", - [3]byte{168, 91, 176}: "Shenzhen Dehoo Technology Co.,Ltd", - [3]byte{168, 91, 243}: "Audivo GmbH", - [3]byte{168, 92, 44}: "Apple, Inc.", - [3]byte{168, 94, 228}: "12Sided Technology, LLC", - [3]byte{168, 96, 182}: "Apple, Inc.", - [3]byte{168, 97, 170}: "Cloudview Limited", - [3]byte{168, 98, 162}: "JIWUMEDIA CO., LTD.", - [3]byte{168, 99, 223}: "DISPLAIRE CORPORATION", - [3]byte{168, 99, 242}: "Texas Instruments", - [3]byte{168, 100, 5}: "nimbus 9, Inc", - [3]byte{168, 101, 178}: "DONGGUAN YISHANG ELECTRONIC TECHNOLOGY CO., LIMITED", - [3]byte{168, 102, 127}: "Apple, Inc.", - [3]byte{168, 106, 111}: "RIM", - [3]byte{168, 106, 193}: "HanbitEDS Co., Ltd.", - [3]byte{168, 107, 124}: "SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.", - [3]byte{168, 107, 173}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{168, 112, 165}: "UniComm Inc.", - [3]byte{168, 114, 133}: "IDT, INC.", - [3]byte{168, 116, 29}: "PHOENIX CONTACT Electronics GmbH", - [3]byte{168, 117, 214}: "FreeTek International Co., Ltd.", - [3]byte{168, 117, 226}: "Aventura Technologies, Inc.", - [3]byte{168, 119, 111}: "Zonoff", - [3]byte{168, 123, 57}: "Nokia Corporation", - [3]byte{168, 124, 1}: "Samsung Electronics Co.,Ltd", - [3]byte{168, 126, 51}: "Nokia Danmark A/S", - [3]byte{168, 128, 56}: "ShenZhen MovingComm Technology Co., Limited", - [3]byte{168, 129, 149}: "Samsung Electronics Co.,Ltd", - [3]byte{168, 129, 241}: "BMEYE B.V.", - [3]byte{168, 130, 0}: "Hisense Electric Co.,Ltd", - [3]byte{168, 130, 127}: "CIBN Oriental Network(Beijing) CO.,Ltd", - [3]byte{168, 134, 221}: "Apple, Inc.", - [3]byte{168, 135, 146}: "Broadband Antenna Tracking Systems", - [3]byte{168, 135, 237}: "ARC Wireless LLC", - [3]byte{168, 136, 8}: "Apple, Inc.", - [3]byte{168, 140, 238}: "MicroMade Galka i Drozdz sp.j.", - [3]byte{168, 141, 123}: "SunDroid Global limited.", - [3]byte{168, 142, 36}: "Apple, Inc.", - [3]byte{168, 144, 8}: "Beijing Yuecheng Technology Co. Ltd.", - [3]byte{168, 146, 44}: "LG Electronics (Mobile Communications)", - [3]byte{168, 147, 82}: "SHANGHAI ZHONGMI COMMUNICATION TECHNOLOGY CO.,LTD", - [3]byte{168, 147, 230}: "JIANGXI JINGGANGSHAN CKING COMMUNICATION TECHNOLOGY CO.,LTD", - [3]byte{168, 149, 176}: "Aker Subsea Ltd", - [3]byte{168, 150, 117}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{168, 150, 138}: "Apple, Inc.", - [3]byte{168, 151, 220}: "IBM", - [3]byte{168, 152, 198}: "Shinbo Co., Ltd.", - [3]byte{168, 153, 92}: "aizo ag", - [3]byte{168, 155, 16}: "inMotion Ltd.", - [3]byte{168, 157, 33}: "Cisco Systems, Inc", - [3]byte{168, 157, 210}: "Shanghai DareGlobal Technologies Co.,Ltd", - [3]byte{168, 159, 186}: "Samsung Electronics Co.,Ltd", - [3]byte{168, 159, 236}: "ARRIS Group, Inc.", - [3]byte{168, 160, 137}: "Tactical Communications", - [3]byte{168, 161, 152}: "TCT mobile ltd", - [3]byte{168, 165, 226}: "MSF-Vathauer Antriebstechnik GmbH & Co KG", - [3]byte{168, 166, 72}: "Qingdao Hisense Communications Co.,Ltd.", - [3]byte{168, 166, 104}: "zte corporation", - [3]byte{168, 167, 149}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{168, 173, 61}: "Alcatel-Lucent Shanghai Bell Co., Ltd", - [3]byte{168, 176, 174}: "LEONI", - [3]byte{168, 177, 212}: "Cisco Systems, Inc", - [3]byte{168, 178, 218}: "FUJITSU LIMITED", - [3]byte{168, 184, 110}: "LG Electronics (Mobile Communications)", - [3]byte{168, 185, 179}: "ESSYS", - [3]byte{168, 187, 80}: "WiZ IoT Company Limited", - [3]byte{168, 187, 207}: "Apple, Inc.", - [3]byte{168, 189, 26}: "Honey Bee (Hong Kong) Limited", - [3]byte{168, 189, 39}: "Hewlett Packard Enterprise", - [3]byte{168, 189, 58}: "UNIONMAN TECHNOLOGY CO.,LTD", - [3]byte{168, 190, 39}: "Apple, Inc.", - [3]byte{168, 194, 34}: "TM-Research Inc.", - [3]byte{168, 200, 58}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{168, 200, 127}: "Roqos, Inc.", - [3]byte{168, 202, 123}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{168, 203, 149}: "EAST BEST CO., LTD.", - [3]byte{168, 204, 197}: "Saab AB (publ)", - [3]byte{168, 206, 144}: "CVC", - [3]byte{168, 208, 227}: "Systech Electronics Ltd.", - [3]byte{168, 208, 229}: "Juniper Networks", - [3]byte{168, 210, 54}: "Lightware Visual Engineering", - [3]byte{168, 211, 200}: "Topcon Electronics GmbH & Co. KG", - [3]byte{168, 211, 247}: "Arcadyan Technology Corporation", - [3]byte{168, 212, 9}: "USA 111 Inc", - [3]byte{168, 213, 121}: "Beijing Chushang Science and Technology Co.,Ltd", - [3]byte{168, 216, 40}: "Ascensia Diabetes Care", - [3]byte{168, 216, 138}: "Wyconn", - [3]byte{168, 224, 24}: "Nokia Corporation", - [3]byte{168, 227, 238}: "Sony Interactive Entertainment Inc.", - [3]byte{168, 229, 57}: "Moimstone Co.,Ltd", - [3]byte{168, 231, 5}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{168, 232, 36}: "INIM ELECTRONICS S.R.L.", - [3]byte{168, 238, 198}: "Muuselabs NV/SA", - [3]byte{168, 239, 38}: "Tritonwave", - [3]byte{168, 240, 56}: "SHEN ZHEN SHI JIN HUA TAI ELECTRONICS CO.,LTD", - [3]byte{168, 242, 116}: "Samsung Electronics Co.,Ltd", - [3]byte{168, 244, 112}: "Fujian Newland Communication Science Technologies Co.,Ltd.", - [3]byte{168, 247, 224}: "PLANET Technology Corporation", - [3]byte{168, 249, 75}: "Eltex Enterprise Ltd.", - [3]byte{168, 250, 216}: "Apple, Inc.", - [3]byte{168, 251, 112}: "WiseSec L.t.d", - [3]byte{168, 252, 183}: "Consolidated Resource Imaging", - [3]byte{170, 0, 0}: "DIGITAL EQUIPMENT CORPORATION", - [3]byte{170, 0, 1}: "DIGITAL EQUIPMENT CORPORATION", - [3]byte{170, 0, 2}: "DIGITAL EQUIPMENT CORPORATION", - [3]byte{170, 0, 3}: "DIGITAL EQUIPMENT CORPORATION", - [3]byte{170, 0, 4}: "DIGITAL EQUIPMENT CORPORATION", - [3]byte{172, 1, 66}: "Uriel Technologies SIA", - [3]byte{172, 2, 202}: "HI Solutions, Inc.", - [3]byte{172, 2, 207}: "RW Tecnologia Industria e Comercio Ltda", - [3]byte{172, 2, 239}: "Comsis", - [3]byte{172, 4, 11}: "Peloton Interactive, Inc", - [3]byte{172, 4, 129}: "Jiangsu Huaxing Electronics Co., Ltd.", - [3]byte{172, 6, 19}: "Senselogix Ltd", - [3]byte{172, 6, 199}: "ServerNet S.r.l.", - [3]byte{172, 10, 97}: "Labor S.r.L.", - [3]byte{172, 13, 27}: "LG Electronics (Mobile Communications)", - [3]byte{172, 13, 254}: "Ekon GmbH - myGEKKO", - [3]byte{172, 17, 211}: "Suzhou HOTEK Video Technology Co. Ltd", - [3]byte{172, 20, 97}: "ATAW Co., Ltd.", - [3]byte{172, 20, 210}: "wi-daq, inc.", - [3]byte{172, 22, 45}: "Hewlett Packard", - [3]byte{172, 23, 2}: "Fibar Group sp. z o.o.", - [3]byte{172, 24, 38}: "Seiko Epson Corporation", - [3]byte{172, 25, 159}: "SUNGROW POWER SUPPLY CO.,LTD.", - [3]byte{172, 29, 223}: "IEEE Registration Authority", - [3]byte{172, 31, 107}: "Super Micro Computer, Inc.", - [3]byte{172, 31, 116}: "Apple, Inc.", - [3]byte{172, 31, 215}: "Real Vision Technology Co.,Ltd.", - [3]byte{172, 32, 46}: "Hitron Technologies. Inc", - [3]byte{172, 32, 62}: "Wuhan Tianyu Information Industry Co., Ltd.", - [3]byte{172, 32, 170}: "DMATEK Co., Ltd.", - [3]byte{172, 34, 5}: "Compal Broadband Networks, Inc.", - [3]byte{172, 34, 11}: "ASUSTek COMPUTER INC.", - [3]byte{172, 35, 63}: "Shenzhen Minew Technologies Co., Ltd.", - [3]byte{172, 41, 58}: "Apple, Inc.", - [3]byte{172, 42, 12}: "CSR ZHUZHOU INSTITUTE CO.,LTD.", - [3]byte{172, 43, 110}: "Intel Corporate", - [3]byte{172, 45, 163}: "TXTR GmbH", - [3]byte{172, 47, 168}: "Humannix Co.,Ltd.", - [3]byte{172, 49, 157}: "Shenzhen TG-NET Botone Technology Co.,Ltd.", - [3]byte{172, 52, 203}: "Shanhai GBCOM Communication Technology Co. Ltd", - [3]byte{172, 54, 19}: "Samsung Electronics Co.,Ltd", - [3]byte{172, 55, 67}: "HTC Corporation", - [3]byte{172, 56, 112}: "Lenovo Mobile Communication Technology Ltd.", - [3]byte{172, 58, 122}: "Roku, Inc.", - [3]byte{172, 60, 11}: "Apple, Inc.", - [3]byte{172, 60, 180}: "Nilan A/S", - [3]byte{172, 61, 5}: "Instorescreen Aisa", - [3]byte{172, 61, 117}: "HANGZHOU ZHIWAY TECHNOLOGIES CO.,LTD.", - [3]byte{172, 63, 164}: "TAIYO YUDEN CO.,LTD", - [3]byte{172, 64, 234}: "C&T Solution Inc.", - [3]byte{172, 65, 34}: "Eclipse Electronic Systems Inc.", - [3]byte{172, 68, 242}: "YAMAHA CORPORATION", - [3]byte{172, 71, 35}: "Genelec", - [3]byte{172, 72, 45}: "Ralinwi Nanjing Electronic Technology Co., Ltd.", - [3]byte{172, 74, 254}: "Hisense Broadband Multimedia Technology Co.,Ltd.", - [3]byte{172, 75, 200}: "Juniper Networks", - [3]byte{172, 78, 46}: "Shenzhen JingHanDa Electronics Co.Ltd", - [3]byte{172, 78, 145}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{172, 79, 252}: "SVS-VISTEK GmbH", - [3]byte{172, 80, 54}: "Pi-Coral Inc", - [3]byte{172, 81, 44}: "Infinix mobility limited", - [3]byte{172, 81, 53}: "MPI TECH", - [3]byte{172, 81, 238}: "Cambridge Communication Systems Ltd", - [3]byte{172, 84, 236}: "IEEE P1823 Standards Working Group", - [3]byte{172, 86, 44}: "LAVA INTERNATIONAL(H.K) LIMITED", - [3]byte{172, 88, 59}: "Human Assembler, Inc.", - [3]byte{172, 88, 123}: "JCT Healthcare", - [3]byte{172, 90, 20}: "Samsung Electronics Co.,Ltd", - [3]byte{172, 93, 16}: "Pace Americas", - [3]byte{172, 94, 140}: "Utillink", - [3]byte{172, 95, 62}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{172, 96, 182}: "Ericsson AB", - [3]byte{172, 97, 35}: "Drivven, Inc.", - [3]byte{172, 97, 117}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{172, 97, 234}: "Apple, Inc.", - [3]byte{172, 98, 13}: "Jabil Circuit(Wuxi) Co.,Ltd", - [3]byte{172, 99, 190}: "Amazon Technologies Inc.", - [3]byte{172, 100, 23}: "Siemens AG - Industrial Automation - EWA", - [3]byte{172, 100, 98}: "zte corporation", - [3]byte{172, 100, 221}: "IEEE Registration Authority", - [3]byte{172, 103, 6}: "Ruckus Wireless", - [3]byte{172, 103, 111}: "Electrocompaniet A.S.", - [3]byte{172, 107, 15}: "CADENCE DESIGN SYSTEMS INC", - [3]byte{172, 107, 172}: "Jenny Science AG", - [3]byte{172, 110, 26}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT", - [3]byte{172, 111, 79}: "Enspert Inc", - [3]byte{172, 111, 187}: "TATUNG Technology Inc.", - [3]byte{172, 111, 217}: "Valueplus Inc.", - [3]byte{172, 114, 54}: "Lexking Technology Co., Ltd.", - [3]byte{172, 114, 137}: "Intel Corporate", - [3]byte{172, 116, 9}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{172, 122, 66}: "iConnectivity", - [3]byte{172, 122, 77}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{172, 123, 161}: "Intel Corporate", - [3]byte{172, 126, 138}: "Cisco Systems, Inc", - [3]byte{172, 127, 62}: "Apple, Inc.", - [3]byte{172, 128, 214}: "Hexatronic AB", - [3]byte{172, 129, 18}: "Gemtek Technology Co., Ltd.", - [3]byte{172, 129, 243}: "Nokia Corporation", - [3]byte{172, 131, 23}: "Shenzhen Furtunetel Communication Co., Ltd", - [3]byte{172, 131, 240}: "ImmediaTV Corporation", - [3]byte{172, 131, 243}: "AMPAK Technology, Inc.", - [3]byte{172, 132, 198}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{172, 132, 201}: "Sagemcom Broadband SAS", - [3]byte{172, 133, 61}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{172, 134, 116}: "Open Mesh, Inc.", - [3]byte{172, 134, 126}: "Create New Technology (HK) Limited Company", - [3]byte{172, 135, 163}: "Apple, Inc.", - [3]byte{172, 137, 149}: "AzureWave Technology Inc.", - [3]byte{172, 138, 205}: "ROGER D.Wensker, G.Wensker sp.j.", - [3]byte{172, 141, 20}: "Smartrove Inc", - [3]byte{172, 147, 47}: "Nokia Corporation", - [3]byte{172, 148, 3}: "Envision Peripherals Inc", - [3]byte{172, 154, 34}: "NXP Semiconductors", - [3]byte{172, 154, 150}: "Lantiq Deutschland GmbH", - [3]byte{172, 155, 10}: "Sony Corporation", - [3]byte{172, 155, 132}: "Smak Tecnologia e Automacao", - [3]byte{172, 156, 228}: "Alcatel-Lucent Shanghai Bell Co., Ltd", - [3]byte{172, 158, 23}: "ASUSTek COMPUTER INC.", - [3]byte{172, 160, 22}: "Cisco Systems, Inc", - [3]byte{172, 162, 19}: "Shenzhen Bilian electronic CO.,LTD", - [3]byte{172, 162, 44}: "Baycity Technologies Ltd", - [3]byte{172, 163, 30}: "Aruba Networks", - [3]byte{172, 164, 48}: "Peerless AV", - [3]byte{172, 166, 103}: "Electronic Systems Protection, Inc.", - [3]byte{172, 169, 25}: "TrekStor GmbH", - [3]byte{172, 169, 160}: "Audioengine, Ltd.", - [3]byte{172, 171, 46}: "Beijing LasNubes Technology Co., Ltd.", - [3]byte{172, 171, 141}: "Lyngso Marine A/S", - [3]byte{172, 171, 191}: "AthenTek Inc.", - [3]byte{172, 175, 185}: "Samsung Electronics Co.,Ltd", - [3]byte{172, 179, 19}: "ARRIS Group, Inc.", - [3]byte{172, 181, 125}: "Liteon Technology Corporation", - [3]byte{172, 183, 79}: "METEL s.r.o.", - [3]byte{172, 184, 89}: "Uniband Electronic Corp,", - [3]byte{172, 188, 50}: "Apple, Inc.", - [3]byte{172, 189, 11}: "IMAC CO.,LTD", - [3]byte{172, 190, 117}: "Ufine Technologies Co.,Ltd.", - [3]byte{172, 190, 182}: "Visualedge Technology Co., Ltd.", - [3]byte{172, 193, 238}: "Xiaomi Communications Co Ltd", - [3]byte{172, 194, 236}: "CLT INT'L IND. CORP.", - [3]byte{172, 195, 58}: "Samsung Electronics Co.,Ltd", - [3]byte{172, 197, 27}: "Zhuhai Pantum Electronics Co., Ltd.", - [3]byte{172, 197, 149}: "Graphite Systems", - [3]byte{172, 198, 98}: "MitraStar Technology Corp.", - [3]byte{172, 198, 152}: "Kohzu Precision Co., Ltd.", - [3]byte{172, 199, 63}: "VITSMO CO., LTD.", - [3]byte{172, 201, 53}: "Ness Corporation", - [3]byte{172, 202, 84}: "Telldus Technologies AB", - [3]byte{172, 202, 142}: "ODA Technologies", - [3]byte{172, 202, 171}: "Virtual Electric Inc", - [3]byte{172, 202, 186}: "Midokura Co., Ltd.", - [3]byte{172, 203, 9}: "Hefcom Metering (Pty) Ltd", - [3]byte{172, 204, 142}: "Axis Communications AB", - [3]byte{172, 206, 143}: "HWA YAO TECHNOLOGIES CO., LTD", - [3]byte{172, 207, 35}: "Hi-flying electronics technology Co.,Ltd", - [3]byte{172, 207, 92}: "Apple, Inc.", - [3]byte{172, 207, 133}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{172, 208, 116}: "Espressif Inc.", - [3]byte{172, 209, 128}: "Crexendo Business Solutions, Inc.", - [3]byte{172, 209, 184}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{172, 211, 100}: "ABB SPA, ABB SACE DIV.", - [3]byte{172, 214, 87}: "Shaanxi GuoLian Digital TV Technology Co.,Ltd.", - [3]byte{172, 217, 214}: "tci GmbH", - [3]byte{172, 219, 218}: "Shenzhen Geniatech Inc, Ltd", - [3]byte{172, 220, 229}: "Procter & Gamble Company", - [3]byte{172, 222, 72}: "Private", - [3]byte{172, 224, 16}: "Liteon Technology Corporation", - [3]byte{172, 224, 105}: "ISAAC Instruments", - [3]byte{172, 226, 21}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{172, 226, 211}: "Hewlett Packard", - [3]byte{172, 227, 72}: "MadgeTech, Inc", - [3]byte{172, 228, 46}: "SK hynix", - [3]byte{172, 228, 181}: "Apple, Inc.", - [3]byte{172, 229, 240}: "Doppler Labs", - [3]byte{172, 230, 75}: "Shenzhen Baojia Battery Technology Co., Ltd.", - [3]byte{172, 231, 123}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD", - [3]byte{172, 232, 123}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{172, 232, 126}: "Bytemark Computer Consulting Ltd", - [3]byte{172, 233, 127}: "IoT Tech Limited", - [3]byte{172, 233, 170}: "Hay Systems Ltd", - [3]byte{172, 234, 106}: "GENIX INFOCOMM CO., LTD.", - [3]byte{172, 236, 128}: "ARRIS Group, Inc.", - [3]byte{172, 237, 92}: "Intel Corporate", - [3]byte{172, 238, 59}: "6harmonics Inc", - [3]byte{172, 238, 158}: "Samsung Electronics Co.,Ltd", - [3]byte{172, 240, 178}: "Becker Electronics Taiwan Ltd.", - [3]byte{172, 241, 223}: "D-Link International", - [3]byte{172, 242, 197}: "Cisco Systems, Inc", - [3]byte{172, 247, 243}: "Xiaomi Communications Co Ltd", - [3]byte{172, 248, 92}: "Private", - [3]byte{172, 249, 126}: "ELESYS INC.", - [3]byte{172, 253, 147}: "Weifang GoerTek Technology Co.,Ltd.", - [3]byte{172, 253, 206}: "Intel Corporate", - [3]byte{172, 253, 236}: "Apple, Inc.", - [3]byte{176, 0, 180}: "Cisco Systems, Inc", - [3]byte{176, 5, 148}: "Liteon Technology Corporation", - [3]byte{176, 8, 191}: "Vital Connect, Inc.", - [3]byte{176, 9, 211}: "Avizia", - [3]byte{176, 9, 218}: "Ring Solutions", - [3]byte{176, 16, 65}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{176, 18, 3}: "Dynamics Hong Kong Limited", - [3]byte{176, 18, 102}: "Futaba-Kikaku", - [3]byte{176, 20, 8}: "LIGHTSPEED INTERNATIONAL CO.", - [3]byte{176, 23, 67}: "EDISON GLOBAL CIRCUITS LLC", - [3]byte{176, 25, 198}: "Apple, Inc.", - [3]byte{176, 27, 124}: "Ontrol A.S.", - [3]byte{176, 27, 210}: "Le Shi Zhi Xin Electronic Technology (Tianjin) Limited", - [3]byte{176, 28, 145}: "Elim Co", - [3]byte{176, 31, 41}: "Helvetia INC.", - [3]byte{176, 31, 129}: "IEEE Registration Authority", - [3]byte{176, 36, 243}: "Progeny Systems", - [3]byte{176, 37, 170}: "Private", - [3]byte{176, 38, 40}: "Broadcom Limited", - [3]byte{176, 52, 149}: "Apple, Inc.", - [3]byte{176, 53, 11}: "MOBIWIRE MOBILES (NINGBO) CO.,LTD", - [3]byte{176, 53, 141}: "Nokia Corporation", - [3]byte{176, 53, 159}: "Intel Corporate", - [3]byte{176, 56, 41}: "Siliconware Precision Industries Co., Ltd.", - [3]byte{176, 56, 80}: "Nanjing CAS-ZDC IOT SYSTEM CO.,LTD", - [3]byte{176, 57, 86}: "NETGEAR", - [3]byte{176, 61, 150}: "Vision Valley FZ LLC", - [3]byte{176, 62, 176}: "MICRODIA Ltd.", - [3]byte{176, 64, 137}: "Senient Systems LTD", - [3]byte{176, 65, 29}: "ITTIM Technologies", - [3]byte{176, 67, 93}: "NuLEDs, Inc.", - [3]byte{176, 69, 21}: "mira fitness,LLC.", - [3]byte{176, 69, 25}: "TCT mobile ltd", - [3]byte{176, 69, 69}: "YACOUB Automation GmbH", - [3]byte{176, 70, 252}: "MitraStar Technology Corp.", - [3]byte{176, 71, 191}: "Samsung Electronics Co.,Ltd", - [3]byte{176, 72, 26}: "Apple, Inc.", - [3]byte{176, 72, 122}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{176, 73, 95}: "OMRON HEALTHCARE Co., Ltd.", - [3]byte{176, 75, 191}: "PT HAN SUNG ELECTORONICS INDONESIA", - [3]byte{176, 76, 5}: "Fresenius Medical Care Deutschland GmbH", - [3]byte{176, 78, 38}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{176, 80, 188}: "SHENZHEN BASICOM ELECTRONIC CO.,LTD.", - [3]byte{176, 81, 142}: "Holl technology CO.Ltd.", - [3]byte{176, 82, 22}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{176, 85, 8}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{176, 87, 6}: "Vallox Oy", - [3]byte{176, 88, 196}: "Broadcast Microwave Services, Inc", - [3]byte{176, 89, 71}: "Shenzhen Qihu Intelligent Technology Company Limited", - [3]byte{176, 90, 218}: "Hewlett Packard", - [3]byte{176, 91, 31}: "THERMO FISHER SCIENTIFIC S.P.A.", - [3]byte{176, 91, 103}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{176, 92, 229}: "Nokia Corporation", - [3]byte{176, 97, 199}: "Ericsson-LG Enterprise", - [3]byte{176, 101, 99}: "Shanghai Railway Communication Factory", - [3]byte{176, 101, 189}: "Apple, Inc.", - [3]byte{176, 104, 182}: "Hangzhou OYE Technology Co. Ltd", - [3]byte{176, 105, 113}: "DEI Sales, Inc.", - [3]byte{176, 108, 191}: "3ality Digital Systems GmbH", - [3]byte{176, 110, 191}: "ASUSTek COMPUTER INC.", - [3]byte{176, 112, 45}: "Apple, Inc.", - [3]byte{176, 114, 191}: "Murata Manufacturing Co., Ltd.", - [3]byte{176, 117, 12}: "QA Cafe", - [3]byte{176, 117, 77}: "Nokia", - [3]byte{176, 117, 213}: "zte corporation", - [3]byte{176, 119, 172}: "ARRIS Group, Inc.", - [3]byte{176, 120, 112}: "Wi-NEXT, Inc.", - [3]byte{176, 120, 240}: "Beijing HuaqinWorld Technology Co.,Ltd.", - [3]byte{176, 121, 8}: "Cummings Engineering", - [3]byte{176, 121, 60}: "Revolv Inc", - [3]byte{176, 121, 148}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{176, 125, 71}: "Cisco Systems, Inc", - [3]byte{176, 125, 98}: "Dipl.-Ing. H. Horstmann GmbH", - [3]byte{176, 126, 112}: "Zadara Storage Ltd.", - [3]byte{176, 127, 185}: "NETGEAR", - [3]byte{176, 128, 140}: "Laser Light Engines", - [3]byte{176, 129, 216}: "I-sys Corp", - [3]byte{176, 131, 254}: "Dell Inc.", - [3]byte{176, 134, 158}: "Chloride S.r.L", - [3]byte{176, 136, 7}: "Strata Worldwide", - [3]byte{176, 137, 0}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{176, 137, 145}: "LGE", - [3]byte{176, 137, 194}: "Zyptonite", - [3]byte{176, 142, 26}: "URadio Systems Co., Ltd", - [3]byte{176, 144, 116}: "Fulan Electronics Limited", - [3]byte{176, 144, 212}: "Shenzhen Hoin Internet Technology Co., Ltd", - [3]byte{176, 145, 34}: "Texas Instruments", - [3]byte{176, 145, 52}: "Taleo", - [3]byte{176, 145, 55}: "ISis ImageStream Internet Solutions, Inc", - [3]byte{176, 147, 91}: "ARRIS Group, Inc.", - [3]byte{176, 149, 142}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{176, 150, 108}: "Lanbowan Technology Ltd.", - [3]byte{176, 151, 58}: "E-Fuel Corporation", - [3]byte{176, 152, 43}: "Sagemcom Broadband SAS", - [3]byte{176, 152, 159}: "LG CNS", - [3]byte{176, 153, 40}: "FUJITSU LIMITED", - [3]byte{176, 154, 226}: "STEMMER IMAGING GmbH", - [3]byte{176, 155, 212}: "GNH Software India Private Limited", - [3]byte{176, 159, 186}: "Apple, Inc.", - [3]byte{176, 161, 10}: "Pivotal Systems Corporation", - [3]byte{176, 162, 231}: "Shenzhen TINNO Mobile Technology Corp.", - [3]byte{176, 163, 126}: "Qingdao Haier Telecom Co.,Ltd", - [3]byte{176, 167, 42}: "Ensemble Designs, Inc.", - [3]byte{176, 167, 55}: "Roku, Inc.", - [3]byte{176, 168, 110}: "Juniper Networks", - [3]byte{176, 170, 54}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{176, 170, 119}: "Cisco Systems, Inc", - [3]byte{176, 172, 250}: "FUJITSU LIMITED", - [3]byte{176, 173, 170}: "Avaya Inc", - [3]byte{176, 178, 143}: "Sagemcom Broadband SAS", - [3]byte{176, 178, 220}: "Zyxel Communications Corporation", - [3]byte{176, 179, 43}: "Slican Sp. z o.o.", - [3]byte{176, 180, 72}: "Texas Instruments", - [3]byte{176, 184, 213}: "Nanjing Nengrui Auto Equipment CO.,Ltd", - [3]byte{176, 185, 138}: "NETGEAR", - [3]byte{176, 189, 109}: "Echostreams Innovative Solutions", - [3]byte{176, 189, 161}: "ZAKLAD ELEKTRONICZNY SIMS", - [3]byte{176, 191, 153}: "WIZITDONGDO", - [3]byte{176, 192, 144}: "Chicony Electronics Co., Ltd.", - [3]byte{176, 193, 40}: "Adler ELREHA GmbH", - [3]byte{176, 193, 158}: "zte corporation", - [3]byte{176, 194, 5}: "BIONIME", - [3]byte{176, 194, 135}: "Technicolor CH USA Inc.", - [3]byte{176, 196, 108}: "Senseit", - [3]byte{176, 196, 231}: "Samsung Electronics Co.,Ltd", - [3]byte{176, 197, 84}: "D-Link International", - [3]byte{176, 197, 89}: "Samsung Electronics Co.,Ltd", - [3]byte{176, 197, 202}: "IEEE Registration Authority", - [3]byte{176, 198, 154}: "Juniper Networks", - [3]byte{176, 199, 69}: "BUFFALO.INC", - [3]byte{176, 200, 63}: "Jiangsu Cynray IOT Co., Ltd.", - [3]byte{176, 200, 173}: "People Power Company", - [3]byte{176, 201, 91}: "Beijing Symtech CO.,LTD", - [3]byte{176, 202, 104}: "Apple, Inc.", - [3]byte{176, 206, 24}: "Zhejiang shenghui lighting co.,Ltd", - [3]byte{176, 207, 77}: "MI-Zone Technology Ireland", - [3]byte{176, 208, 156}: "Samsung Electronics Co.,Ltd", - [3]byte{176, 210, 245}: "Vello Systems, Inc.", - [3]byte{176, 213, 157}: "Shenzhen Zowee Technology Co., Ltd", - [3]byte{176, 213, 204}: "Texas Instruments", - [3]byte{176, 215, 197}: "Logipix Ltd", - [3]byte{176, 215, 204}: "Tridonic GmbH & Co KG", - [3]byte{176, 218, 0}: "CERA ELECTRONIQUE", - [3]byte{176, 218, 249}: "ARRIS Group, Inc.", - [3]byte{176, 223, 58}: "Samsung Electronics Co.,Ltd", - [3]byte{176, 223, 193}: "Tenda Technology Co.,Ltd.Dongguan branch", - [3]byte{176, 224, 60}: "TCT mobile ltd", - [3]byte{176, 225, 126}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{176, 226, 53}: "Xiaomi Communications Co Ltd", - [3]byte{176, 226, 229}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{176, 227, 157}: "CAT SYSTEM CO.,LTD.", - [3]byte{176, 229, 14}: "NRG SYSTEMS INC", - [3]byte{176, 229, 237}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{176, 231, 84}: "2Wire Inc", - [3]byte{176, 232, 146}: "Seiko Epson Corporation", - [3]byte{176, 233, 126}: "Advanced Micro Peripherals", - [3]byte{176, 234, 188}: "ASKEY COMPUTER CORP", - [3]byte{176, 236, 113}: "Samsung Electronics Co.,Ltd", - [3]byte{176, 236, 143}: "GMX SAS", - [3]byte{176, 236, 225}: "Private", - [3]byte{176, 238, 69}: "AzureWave Technology Inc.", - [3]byte{176, 238, 123}: "Roku, Inc", - [3]byte{176, 241, 163}: "Fengfan (BeiJing) Technology Co., Ltd.", - [3]byte{176, 241, 188}: "Dhemax Ingenieros Ltda", - [3]byte{176, 241, 236}: "AMPAK Technology, Inc.", - [3]byte{176, 248, 147}: "Shanghai MXCHIP Information Technology Co., Ltd.", - [3]byte{176, 249, 99}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{176, 250, 235}: "Cisco Systems, Inc", - [3]byte{176, 252, 54}: "CyberTAN Technology Inc.", - [3]byte{176, 254, 189}: "Private", - [3]byte{180, 0, 22}: "INGENICO TERMINALS SAS", - [3]byte{180, 0, 156}: "CableWorld Ltd.", - [3]byte{180, 1, 66}: "GCI Science & Technology Co.,LTD", - [3]byte{180, 4, 24}: "Smartchip Integrated Inc.", - [3]byte{180, 5, 102}: "SP Best Corporation Co., LTD.", - [3]byte{180, 7, 249}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{180, 8, 50}: "TC Communications", - [3]byte{180, 10, 198}: "DEXON Systems Ltd.", - [3]byte{180, 11, 68}: "Smartisan Technology Co., Ltd.", - [3]byte{180, 11, 122}: "Brusa Elektronik AG", - [3]byte{180, 12, 37}: "Palo Alto Networks", - [3]byte{180, 14, 150}: "HERAN", - [3]byte{180, 14, 220}: "LG-Ericsson Co.,Ltd.", - [3]byte{180, 15, 59}: "Tenda Technology Co.,Ltd.Dongguan branch", - [3]byte{180, 20, 137}: "Cisco Systems, Inc", - [3]byte{180, 21, 19}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{180, 23, 128}: "DTI Group Ltd", - [3]byte{180, 24, 209}: "Apple, Inc.", - [3]byte{180, 29, 239}: "Internet Laboratories, Inc.", - [3]byte{180, 33, 29}: "Beijing GuangXin Technology Co., Ltd", - [3]byte{180, 33, 138}: "Dog Hunter LLC", - [3]byte{180, 36, 231}: "Codetek Technology Co.,Ltd", - [3]byte{180, 40, 241}: "E-Prime Co., Ltd.", - [3]byte{180, 41, 61}: "Shenzhen Urovo Technology Co.,Ltd.", - [3]byte{180, 42, 14}: "Technicolor CH USA Inc.", - [3]byte{180, 42, 57}: "ORBIT MERRET, spol. s r. o.", - [3]byte{180, 44, 146}: "Zhejiang Weirong Electronic Co., Ltd", - [3]byte{180, 44, 190}: "Direct Payment Solutions Limited", - [3]byte{180, 45, 86}: "Extreme Networks, Inc.", - [3]byte{180, 48, 82}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{180, 48, 192}: "York Instruments Ltd", - [3]byte{180, 49, 184}: "Aviwest", - [3]byte{180, 52, 108}: "MATSUNICHI DIGITAL TECHNOLOGY (HONG KONG) LIMITED", - [3]byte{180, 53, 100}: "Fujian Tian Cheng Electron Science & Technical Development Co.,Ltd.", - [3]byte{180, 53, 247}: "Zhejiang Pearmain Electronics Co.ltd.", - [3]byte{180, 54, 169}: "Fibocom Wireless Inc.", - [3]byte{180, 54, 227}: "KBVISION GROUP", - [3]byte{180, 55, 65}: "Consert, Inc.", - [3]byte{180, 55, 209}: "IEEE Registration Authority", - [3]byte{180, 57, 52}: "Pen Generations, Inc.", - [3]byte{180, 57, 214}: "ProCurve Networking by HP", - [3]byte{180, 58, 40}: "Samsung Electronics Co.,Ltd", - [3]byte{180, 61, 178}: "Degreane Horizon", - [3]byte{180, 62, 59}: "Viableware, Inc", - [3]byte{180, 65, 122}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT", - [3]byte{180, 67, 13}: "Broadlink Pty Ltd", - [3]byte{180, 71, 94}: "Avaya Inc", - [3]byte{180, 75, 210}: "Apple, Inc.", - [3]byte{180, 76, 194}: "NR ELECTRIC CO., LTD", - [3]byte{180, 79, 150}: "Zhejiang Xinzailing Technology co., ltd", - [3]byte{180, 81, 249}: "NB Software", - [3]byte{180, 82, 83}: "Seagate Technology", - [3]byte{180, 82, 125}: "Sony Mobile Communications AB", - [3]byte{180, 82, 126}: "Sony Mobile Communications AB", - [3]byte{180, 85, 112}: "Borea", - [3]byte{180, 86, 185}: "Teraspek Technologies Co.,Ltd", - [3]byte{180, 88, 97}: "CRemote, LLC", - [3]byte{180, 92, 164}: "Thing-talk Wireless Communication Technologies Corporation Limited", - [3]byte{180, 93, 80}: "Aruba Networks", - [3]byte{180, 97, 255}: "Lumigon A/S", - [3]byte{180, 98, 56}: "Exablox", - [3]byte{180, 98, 147}: "Samsung Electronics Co.,Ltd", - [3]byte{180, 98, 173}: "Elysia Germany GmbH", - [3]byte{180, 102, 152}: "Zealabs srl", - [3]byte{180, 103, 233}: "Qingdao GoerTek Technology Co., Ltd.", - [3]byte{180, 109, 53}: "Dalian Seasky Automation Co;Ltd", - [3]byte{180, 109, 131}: "Intel Corporate", - [3]byte{180, 115, 86}: "Hangzhou Treebear Networking Co., Ltd.", - [3]byte{180, 116, 67}: "Samsung Electronics Co.,Ltd", - [3]byte{180, 116, 71}: "CoreOS", - [3]byte{180, 116, 159}: "ASKEY COMPUTER CORP", - [3]byte{180, 117, 14}: "Belkin International Inc.", - [3]byte{180, 121, 167}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{180, 124, 41}: "Shenzhen Guzidi Technology Co.,Ltd", - [3]byte{180, 124, 156}: "Amazon Technologies Inc.", - [3]byte{180, 127, 94}: "Foresight Manufacture (S) Pte Ltd", - [3]byte{180, 130, 85}: "Research Products Corporation", - [3]byte{180, 130, 123}: "AKG Acoustics GmbH", - [3]byte{180, 130, 197}: "Relay2, Inc.", - [3]byte{180, 130, 254}: "ASKEY COMPUTER CORP", - [3]byte{180, 133, 71}: "Amptown System Company GmbH", - [3]byte{180, 137, 16}: "Coster T.E. S.P.A.", - [3]byte{180, 139, 25}: "Apple, Inc.", - [3]byte{180, 148, 78}: "WeTelecom Co., Ltd.", - [3]byte{180, 150, 145}: "Intel Corporate", - [3]byte{180, 152, 66}: "zte corporation", - [3]byte{180, 153, 76}: "Texas Instruments", - [3]byte{180, 153, 186}: "Hewlett Packard", - [3]byte{180, 156, 223}: "Apple, Inc.", - [3]byte{180, 157, 11}: "BQ", - [3]byte{180, 157, 180}: "Axion Technologies Inc.", - [3]byte{180, 158, 172}: "Imagik Int'l Corp", - [3]byte{180, 158, 230}: "SHENZHEN TECHNOLOGY CO LTD", - [3]byte{180, 163, 130}: "Hangzhou Hikvision Digital Technology Co.,Ltd.", - [3]byte{180, 164, 181}: "Zen Eye Co.,Ltd", - [3]byte{180, 164, 227}: "Cisco Systems, Inc", - [3]byte{180, 165, 169}: "MODI GmbH", - [3]byte{180, 165, 239}: "Sercomm Corporation.", - [3]byte{180, 168, 40}: "Shenzhen Concox Information Technology Co., Ltd", - [3]byte{180, 168, 43}: "Histar Digital Electronics Co., Ltd.", - [3]byte{180, 169, 90}: "Avaya Inc", - [3]byte{180, 169, 132}: "Symantec Corporation", - [3]byte{180, 169, 254}: "GHIA Technology (Shenzhen) LTD", - [3]byte{180, 170, 77}: "Ensequence, Inc.", - [3]byte{180, 171, 44}: "MtM Technology Corporation", - [3]byte{180, 174, 43}: "Microsoft", - [3]byte{180, 174, 111}: "Circle Reliance, Inc DBA Cranberry Networks", - [3]byte{180, 176, 23}: "Avaya Inc", - [3]byte{180, 177, 90}: "Siemens AG Energy Management Division", - [3]byte{180, 178, 101}: "DAEHO I&T", - [3]byte{180, 179, 98}: "zte corporation", - [3]byte{180, 179, 132}: "ShenZhen Figigantic Electronic Co.,Ltd", - [3]byte{180, 181, 47}: "Hewlett Packard", - [3]byte{180, 181, 66}: "Hubbell Power Systems, Inc.", - [3]byte{180, 181, 175}: "Minsung Electronics", - [3]byte{180, 182, 118}: "Intel Corporate", - [3]byte{180, 184, 89}: "Texa Spa", - [3]byte{180, 184, 141}: "Thuh Company", - [3]byte{180, 191, 246}: "Samsung Electronics Co.,Ltd", - [3]byte{180, 193, 112}: "Yi chip Microelectronics (Hangzhou) Co., Ltd", - [3]byte{180, 196, 78}: "VXL eTech Pvt Ltd", - [3]byte{180, 198, 248}: "Axilspot Communication", - [3]byte{180, 199, 153}: "Extreme Networks, Inc.", - [3]byte{180, 200, 16}: "UMPI Elettronica", - [3]byte{180, 204, 233}: "PROSYST", - [3]byte{180, 206, 246}: "HTC Corporation", - [3]byte{180, 207, 219}: "Shenzhen Jiuzhou Electric Co.,LTD", - [3]byte{180, 209, 53}: "Cloudistics", - [3]byte{180, 213, 189}: "Intel Corporate", - [3]byte{180, 214, 78}: "Caldero Limited", - [3]byte{180, 216, 169}: "BetterBots", - [3]byte{180, 216, 222}: "iota Computing, Inc.", - [3]byte{180, 221, 21}: "ControlThings Oy Ab", - [3]byte{180, 223, 59}: "Chromlech", - [3]byte{180, 223, 250}: "Litemax Electronics Inc.", - [3]byte{180, 224, 205}: "Fusion-io, Inc", - [3]byte{180, 225, 15}: "Dell Inc.", - [3]byte{180, 225, 196}: "Microsoft Mobile Oy", - [3]byte{180, 225, 235}: "Private", - [3]byte{180, 230, 42}: "LG Innotek", - [3]byte{180, 231, 130}: "Vivalnk", - [3]byte{180, 233, 176}: "Cisco Systems, Inc", - [3]byte{180, 237, 25}: "Pie Digital, Inc.", - [3]byte{180, 237, 84}: "Wohler Technologies", - [3]byte{180, 238, 180}: "ASKEY COMPUTER CORP", - [3]byte{180, 238, 212}: "Texas Instruments", - [3]byte{180, 239, 4}: "DAIHAN Scientific Co., Ltd.", - [3]byte{180, 239, 57}: "Samsung Electronics Co.,Ltd", - [3]byte{180, 239, 250}: "Lemobile Information Technology (Beijing) Co., Ltd.", - [3]byte{180, 240, 171}: "Apple, Inc.", - [3]byte{180, 241, 218}: "LG Electronics (Mobile Communications)", - [3]byte{180, 242, 232}: "ARRIS Group, Inc.", - [3]byte{180, 243, 35}: "PETATEL INC.", - [3]byte{180, 246, 28}: "Apple, Inc.", - [3]byte{180, 248, 30}: "Kinova", - [3]byte{180, 251, 228}: "Ubiquiti Networks Inc.", - [3]byte{180, 252, 117}: "SEMA Electronics(HK) CO.,LTD", - [3]byte{180, 254, 140}: "Centro Sicurezza Italia SpA", - [3]byte{184, 0, 24}: "Htel", - [3]byte{184, 3, 5}: "Intel Corporate", - [3]byte{184, 4, 21}: "Bayan Audio", - [3]byte{184, 5, 171}: "zte corporation", - [3]byte{184, 7, 22}: "vivo Mobile Communication Co., Ltd.", - [3]byte{184, 8, 207}: "Intel Corporate", - [3]byte{184, 8, 215}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{184, 9, 138}: "Apple, Inc.", - [3]byte{184, 11, 157}: "ROPEX Industrie-Elektronik GmbH", - [3]byte{184, 19, 233}: "Trace Live Network", - [3]byte{184, 20, 19}: "Keen High Holding(HK) Ltd.", - [3]byte{184, 22, 25}: "ARRIS Group, Inc.", - [3]byte{184, 22, 219}: "CHANT SINCERE CO.,LTD", - [3]byte{184, 23, 194}: "Apple, Inc.", - [3]byte{184, 24, 111}: "ORIENTAL MOTOR CO., LTD.", - [3]byte{184, 25, 153}: "Nesys", - [3]byte{184, 29, 170}: "LG Electronics (Mobile Communications)", - [3]byte{184, 32, 231}: "Guangzhou Horizontal Information & Network Integration Co. Ltd", - [3]byte{184, 34, 79}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD", - [3]byte{184, 36, 16}: "Magneti Marelli Slovakia s.r.o.", - [3]byte{184, 36, 26}: "SWEDA INFORMATICA LTDA", - [3]byte{184, 36, 240}: "SOYO Technology Development Co., Ltd.", - [3]byte{184, 38, 108}: "ANOV France", - [3]byte{184, 38, 212}: "Furukawa Industrial S.A. Produtos Elétricos", - [3]byte{184, 39, 235}: "Raspberry Pi Foundation", - [3]byte{184, 40, 139}: "Parker Hannifin Manufacturing (UK) Ltd", - [3]byte{184, 41, 247}: "Blaster Tech", - [3]byte{184, 42, 114}: "Dell Inc.", - [3]byte{184, 42, 220}: "EFR Europäische Funk-Rundsteuerung GmbH", - [3]byte{184, 44, 160}: "Honeywell HomMed", - [3]byte{184, 48, 168}: "Road-Track Telematics Development", - [3]byte{184, 50, 65}: "Wuhan Tianyu Information Industry Co., Ltd.", - [3]byte{184, 54, 216}: "Videoswitch", - [3]byte{184, 55, 101}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{184, 56, 97}: "Cisco Systems, Inc", - [3]byte{184, 56, 202}: "Kyokko Tsushin System CO.,LTD", - [3]byte{184, 58, 8}: "Tenda Technology Co.,Ltd.Dongguan branch", - [3]byte{184, 58, 123}: "Worldplay (Canada) Inc.", - [3]byte{184, 58, 157}: "Alarm.com", - [3]byte{184, 61, 78}: "Shenzhen Cultraview Digital Technology Co.,Ltd Shanghai Branch", - [3]byte{184, 62, 89}: "Roku, Inc.", - [3]byte{184, 65, 95}: "ASP AG", - [3]byte{184, 67, 228}: "Vlatacom", - [3]byte{184, 68, 217}: "Apple, Inc.", - [3]byte{184, 71, 198}: "SanJet Technology Corp.", - [3]byte{184, 79, 213}: "Microsoft Corporation", - [3]byte{184, 80, 1}: "Extreme Networks, Inc.", - [3]byte{184, 83, 172}: "Apple, Inc.", - [3]byte{184, 85, 16}: "Zioncom Electronics (Shenzhen) Ltd.", - [3]byte{184, 86, 189}: "ITT LLC", - [3]byte{184, 87, 216}: "Samsung Electronics Co.,Ltd", - [3]byte{184, 88, 16}: "NUMERA, INC.", - [3]byte{184, 90, 115}: "Samsung Electronics Co.,Ltd", - [3]byte{184, 90, 247}: "Ouya, Inc", - [3]byte{184, 90, 254}: "Handaer Communication Technology (Beijing) Co., Ltd", - [3]byte{184, 94, 123}: "Samsung Electronics Co.,Ltd", - [3]byte{184, 96, 145}: "Onnet Technologies and Innovations LLC", - [3]byte{184, 97, 111}: "Accton Technology Corp", - [3]byte{184, 98, 31}: "Cisco Systems, Inc", - [3]byte{184, 99, 77}: "Apple, Inc.", - [3]byte{184, 99, 188}: "ROBOTIS, Co, Ltd", - [3]byte{184, 100, 145}: "CK Telecom Ltd", - [3]byte{184, 101, 59}: "Bolymin, Inc.", - [3]byte{184, 105, 194}: "Sunitec Enterprise Co., Ltd.", - [3]byte{184, 107, 35}: "Toshiba", - [3]byte{184, 108, 232}: "Samsung Electronics Co.,Ltd", - [3]byte{184, 112, 244}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{184, 116, 36}: "Viessmann Elektronik GmbH", - [3]byte{184, 116, 71}: "Convergence Technologies", - [3]byte{184, 117, 192}: "PayPal, Inc.", - [3]byte{184, 118, 63}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{184, 119, 195}: "METER Group", - [3]byte{184, 120, 46}: "Apple, Inc.", - [3]byte{184, 120, 121}: "Roche Diagnostics GmbH", - [3]byte{184, 121, 126}: "Secure Meters (UK) Limited", - [3]byte{184, 122, 201}: "Siemens Ltd.", - [3]byte{184, 124, 242}: "Aerohive Networks Inc.", - [3]byte{184, 129, 152}: "Intel Corporate", - [3]byte{184, 134, 135}: "Liteon Technology Corporation", - [3]byte{184, 135, 30}: "Good Mind Industries Co., Ltd.", - [3]byte{184, 135, 168}: "Step Ahead Innovations Inc.", - [3]byte{184, 136, 227}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{184, 137, 129}: "Chengdu InnoThings Technology Co., Ltd.", - [3]byte{184, 137, 202}: "ILJIN ELECTRIC Co., Ltd.", - [3]byte{184, 138, 96}: "Intel Corporate", - [3]byte{184, 141, 18}: "Apple, Inc.", - [3]byte{184, 142, 58}: "Infinite Technologies JLT", - [3]byte{184, 142, 198}: "Stateless Networks", - [3]byte{184, 142, 223}: "Zencheer Communication Technology Co., Ltd.", - [3]byte{184, 143, 20}: "Analytica GmbH", - [3]byte{184, 146, 29}: "BG T&A", - [3]byte{184, 148, 210}: "Retail Innovation HTT AB", - [3]byte{184, 150, 116}: "AllDSP GmbH & Co. KG", - [3]byte{184, 151, 90}: "BIOSTAR Microtech Int'l Corp.", - [3]byte{184, 152, 176}: "Atlona Inc.", - [3]byte{184, 152, 247}: "Gionee Communication Equipment Co,Ltd.ShenZhen", - [3]byte{184, 153, 25}: "7signal Solutions, Inc", - [3]byte{184, 153, 176}: "Cohere Technologies", - [3]byte{184, 154, 205}: "ELITE OPTOELECTRONIC(ASIA)CO.,LTD", - [3]byte{184, 154, 237}: "OceanServer Technology, Inc", - [3]byte{184, 155, 201}: "SMC Networks Inc", - [3]byte{184, 155, 228}: "ABB Power Systems Power Generation", - [3]byte{184, 161, 117}: "Roku, Inc.", - [3]byte{184, 163, 134}: "D-Link International", - [3]byte{184, 163, 224}: "BenRui Technology Co.,Ltd", - [3]byte{184, 168, 175}: "Logic S.p.A.", - [3]byte{184, 172, 111}: "Dell Inc.", - [3]byte{184, 173, 62}: "BLUECOM", - [3]byte{184, 174, 110}: "Nintendo Co., Ltd.", - [3]byte{184, 174, 237}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{184, 175, 103}: "Hewlett Packard", - [3]byte{184, 177, 199}: "BT&COM CO.,LTD", - [3]byte{184, 178, 235}: "Googol Technology (HK) Limited", - [3]byte{184, 179, 220}: "DEREK (SHAOGUAN) LIMITED", - [3]byte{184, 180, 46}: "Gionee Communication Equipment Co,Ltd.ShenZhen", - [3]byte{184, 183, 215}: "2GIG Technologies", - [3]byte{184, 184, 30}: "Intel Corporate", - [3]byte{184, 185, 78}: "Shenzhen iBaby Labs, Inc.", - [3]byte{184, 186, 104}: "Xi'an Jizhong Digital Communication Co.,Ltd", - [3]byte{184, 186, 114}: "Cynove", - [3]byte{184, 187, 35}: "Guangdong Nufront CSC Co., Ltd", - [3]byte{184, 187, 109}: "ENERES Co.,Ltd.", - [3]byte{184, 187, 175}: "Samsung Electronics Co.,Ltd", - [3]byte{184, 188, 27}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{184, 189, 121}: "TrendPoint Systems", - [3]byte{184, 190, 191}: "Cisco Systems, Inc", - [3]byte{184, 191, 131}: "Intel Corporate", - [3]byte{184, 193, 17}: "Apple, Inc.", - [3]byte{184, 193, 162}: "Dragon Path Technologies Co., Limited", - [3]byte{184, 195, 191}: "Henan Chengshi NetWork Technology Co.,Ltd", - [3]byte{184, 196, 111}: "PRIMMCON INDUSTRIES INC", - [3]byte{184, 198, 142}: "Samsung Electronics Co.,Ltd", - [3]byte{184, 199, 22}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{184, 199, 93}: "Apple, Inc.", - [3]byte{184, 200, 85}: "Shanghai GBCOM Communication Technology Co.,Ltd.", - [3]byte{184, 200, 235}: "ITEL MOBILE LIMITED", - [3]byte{184, 202, 4}: "Holtek Semiconductor Inc.", - [3]byte{184, 202, 58}: "Dell Inc.", - [3]byte{184, 205, 147}: "Penetek, Inc", - [3]byte{184, 205, 167}: "Maxeler Technologies Ltd.", - [3]byte{184, 208, 111}: "GUANGZHOU HKUST FOK YING TUNG RESEARCH INSTITUTE", - [3]byte{184, 212, 157}: "M Seven System Ltd.", - [3]byte{184, 213, 11}: "Sunitec Enterprise Co.,Ltd", - [3]byte{184, 215, 175}: "Murata Manufacturing Co., Ltd.", - [3]byte{184, 216, 18}: "IEEE Registration Authority", - [3]byte{184, 217, 77}: "Sagemcom Broadband SAS", - [3]byte{184, 217, 206}: "Samsung Electronics Co.,Ltd", - [3]byte{184, 218, 241}: "Strahlenschutz- Entwicklungs- und Ausruestungsgesellschaft mbH", - [3]byte{184, 218, 247}: "Advanced Photonics, Inc.", - [3]byte{184, 219, 28}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{184, 220, 135}: "IAI Corporation", - [3]byte{184, 223, 107}: "SpotCam Co., Ltd.", - [3]byte{184, 229, 137}: "Payter BV", - [3]byte{184, 230, 37}: "2Wire Inc", - [3]byte{184, 231, 121}: "9Solutions Oy", - [3]byte{184, 232, 86}: "Apple, Inc.", - [3]byte{184, 233, 55}: "Sonos, Inc.", - [3]byte{184, 234, 170}: "ICG NETWORKS CO.,ltd", - [3]byte{184, 236, 163}: "Zyxel Communications Corporation", - [3]byte{184, 238, 14}: "Sagemcom Broadband SAS", - [3]byte{184, 238, 101}: "Liteon Technology Corporation", - [3]byte{184, 238, 121}: "YWire Technologies, Inc.", - [3]byte{184, 240, 128}: "SPS, INC.", - [3]byte{184, 243, 23}: "iSun Smasher Communications Private Limited", - [3]byte{184, 244, 208}: "Herrmann Ultraschalltechnik GmbH & Co. Kg", - [3]byte{184, 245, 231}: "WayTools, LLC", - [3]byte{184, 246, 177}: "Apple, Inc.", - [3]byte{184, 247, 50}: "Aryaka Networks Inc", - [3]byte{184, 247, 74}: "RCNTEC", - [3]byte{184, 248, 40}: "Changshu Gaoshida Optoelectronic Technology Co. Ltd.", - [3]byte{184, 248, 131}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{184, 248, 190}: "BLUECOM", - [3]byte{184, 249, 52}: "Sony Mobile Communications AB", - [3]byte{184, 252, 154}: "Le Shi Zhi Xin Electronic Technology (Tianjin) Limited", - [3]byte{184, 253, 50}: "Zhejiang ROICX Microelectronics", - [3]byte{184, 255, 97}: "Apple, Inc.", - [3]byte{184, 255, 111}: "Shanghai Typrotech Technology Co.Ltd", - [3]byte{184, 255, 179}: "MitraStar Technology Corp.", - [3]byte{184, 255, 254}: "Texas Instruments", - [3]byte{188, 2, 0}: "Stewart Audio", - [3]byte{188, 2, 74}: "HMD Global Oy", - [3]byte{188, 5, 67}: "AVM GmbH", - [3]byte{188, 13, 165}: "Texas Instruments", - [3]byte{188, 15, 43}: "FORTUNE TECHGROUP CO.,LTD", - [3]byte{188, 15, 100}: "Intel Corporate", - [3]byte{188, 18, 94}: "Beijing WisVideo INC.", - [3]byte{188, 20, 1}: "Hitron Technologies. Inc", - [3]byte{188, 20, 133}: "Samsung Electronics Co.,Ltd", - [3]byte{188, 20, 239}: "ITON Technology Limited", - [3]byte{188, 21, 166}: "Taiwan Jantek Electronics,Ltd.", - [3]byte{188, 21, 172}: "Vodafone Italia S.p.A.", - [3]byte{188, 22, 101}: "Cisco Systems, Inc", - [3]byte{188, 22, 245}: "Cisco Systems, Inc", - [3]byte{188, 26, 103}: "YF Technology Co., Ltd", - [3]byte{188, 28, 129}: "Sichuan iLink Technology Co., Ltd.", - [3]byte{188, 32, 164}: "Samsung Electronics Co.,Ltd", - [3]byte{188, 32, 186}: "Inspur (Shandong) Electronic Information Co., Ltd", - [3]byte{188, 37, 224}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{188, 37, 240}: "3D Display Technologies Co., Ltd.", - [3]byte{188, 38, 29}: "HONG KONG TECON TECHNOLOGY", - [3]byte{188, 40, 44}: "e-Smart Systems Pvt. Ltd", - [3]byte{188, 40, 70}: "NextBIT Computing Pvt. Ltd.", - [3]byte{188, 40, 214}: "Rowley Associates Limited", - [3]byte{188, 43, 107}: "Beijing Haier IC Design Co.,Ltd", - [3]byte{188, 43, 215}: "Revogi Innovation Co., Ltd.", - [3]byte{188, 44, 85}: "Bear Flag Design, Inc.", - [3]byte{188, 45, 152}: "ThinGlobal LLC", - [3]byte{188, 46, 72}: "ARRIS Group, Inc.", - [3]byte{188, 47, 61}: "vivo Mobile Communication Co., Ltd.", - [3]byte{188, 48, 91}: "Dell Inc.", - [3]byte{188, 48, 125}: "Wistron Neweb Corporation", - [3]byte{188, 48, 126}: "Wistron Neweb Corporation", - [3]byte{188, 52, 0}: "IEEE Registration Authority", - [3]byte{188, 53, 229}: "Hydro Systems Company", - [3]byte{188, 56, 210}: "Pandachip Limited", - [3]byte{188, 57, 166}: "CSUN System Technology Co.,LTD", - [3]byte{188, 57, 217}: "Z-TEC", - [3]byte{188, 58, 234}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{188, 59, 175}: "Apple, Inc.", - [3]byte{188, 61, 133}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{188, 62, 19}: "Accordance Systems Inc.", - [3]byte{188, 63, 143}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{188, 65, 0}: "CODACO ELECTRONIC s.r.o.", - [3]byte{188, 65, 1}: "Shenzhen TINNO Mobile Technology Corp.", - [3]byte{188, 67, 119}: "Hang Zhou Huite Technology Co.,ltd.", - [3]byte{188, 68, 52}: "Shenzhen TINNO Mobile Technology Corp.", - [3]byte{188, 68, 134}: "Samsung Electronics Co.,Ltd", - [3]byte{188, 68, 176}: "Elastifile", - [3]byte{188, 69, 46}: "Knowledge Development for POF S.L.", - [3]byte{188, 70, 153}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{188, 71, 96}: "Samsung Electronics Co.,Ltd", - [3]byte{188, 75, 121}: "SensingTek", - [3]byte{188, 76, 196}: "Apple, Inc.", - [3]byte{188, 77, 251}: "Hitron Technologies. Inc", - [3]byte{188, 78, 60}: "CORE STAFF CO., LTD.", - [3]byte{188, 78, 93}: "ZhongMiao Technology Co., Ltd.", - [3]byte{188, 81, 254}: "Swann communications Pty Ltd", - [3]byte{188, 82, 180}: "Nokia", - [3]byte{188, 82, 183}: "Apple, Inc.", - [3]byte{188, 84, 54}: "Apple, Inc.", - [3]byte{188, 84, 81}: "Samsung Electronics Co.,Ltd", - [3]byte{188, 84, 249}: "Drogoo Technology Co., Ltd.", - [3]byte{188, 84, 252}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", - [3]byte{188, 92, 76}: "ELECOM CO.,LTD.", - [3]byte{188, 95, 244}: "ASRock Incorporation", - [3]byte{188, 95, 246}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", - [3]byte{188, 96, 16}: "Qingdao Hisense Communications Co.,Ltd.", - [3]byte{188, 96, 167}: "Sony Interactive Entertainment Inc.", - [3]byte{188, 98, 14}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{188, 98, 159}: "Telenet Systems P. Ltd.", - [3]byte{188, 100, 75}: "ARRIS Group, Inc.", - [3]byte{188, 102, 65}: "IEEE Registration Authority", - [3]byte{188, 102, 222}: "Shadow Creator Information Technology Co.,Ltd.", - [3]byte{188, 103, 28}: "Cisco Systems, Inc", - [3]byte{188, 103, 120}: "Apple, Inc.", - [3]byte{188, 103, 132}: "Environics Oy", - [3]byte{188, 106, 22}: "tdvine", - [3]byte{188, 106, 41}: "Texas Instruments", - [3]byte{188, 106, 47}: "Henge Docks LLC", - [3]byte{188, 106, 68}: "Commend International GmbH", - [3]byte{188, 107, 77}: "Nokia", - [3]byte{188, 108, 33}: "Apple, Inc.", - [3]byte{188, 110, 100}: "Sony Mobile Communications AB", - [3]byte{188, 110, 118}: "Green Energy Options Ltd", - [3]byte{188, 113, 193}: "XTrillion, Inc.", - [3]byte{188, 114, 177}: "Samsung Electronics Co.,Ltd", - [3]byte{188, 116, 215}: "HangZhou JuRu Technology CO.,LTD", - [3]byte{188, 117, 116}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{188, 118, 78}: "Rackspace US, Inc.", - [3]byte{188, 118, 94}: "Samsung Electronics Co.,Ltd", - [3]byte{188, 118, 112}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{188, 119, 55}: "Intel Corporate", - [3]byte{188, 119, 159}: "SBM Co., Ltd.", - [3]byte{188, 121, 173}: "Samsung Electronics Co.,Ltd", - [3]byte{188, 125, 209}: "Radio Data Comms", - [3]byte{188, 129, 31}: "Ingate Systems", - [3]byte{188, 129, 153}: "BASIC Co.,Ltd.", - [3]byte{188, 130, 93}: "MITSUMI ELECTRIC CO.,LTD.", - [3]byte{188, 131, 133}: "Microsoft Corporation", - [3]byte{188, 131, 167}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD", - [3]byte{188, 133, 31}: "Samsung Electronics Co.,Ltd", - [3]byte{188, 133, 86}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{188, 136, 147}: "VILLBAU Ltd.", - [3]byte{188, 136, 195}: "Ningbo Dooya Mechanic & Electronic Technology Co., Ltd", - [3]byte{188, 138, 163}: "NHN Entertainment", - [3]byte{188, 138, 232}: "QING DAO HAIER TELECOM CO.,LTD.", - [3]byte{188, 139, 85}: "NPP ELIKS America Inc. DBA T&M Atlantic", - [3]byte{188, 140, 205}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{188, 141, 14}: "Nokia", - [3]byte{188, 144, 58}: "Robert Bosch GmbH", - [3]byte{188, 145, 181}: "Infinix mobility limited", - [3]byte{188, 146, 107}: "Apple, Inc.", - [3]byte{188, 150, 128}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT", - [3]byte{188, 152, 137}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{188, 153, 188}: "FonSee Technology Inc.", - [3]byte{188, 156, 49}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{188, 156, 197}: "Beijing Huafei Technology Co., Ltd.", - [3]byte{188, 157, 165}: "DASCOM Europe GmbH", - [3]byte{188, 159, 239}: "Apple, Inc.", - [3]byte{188, 160, 66}: "SHANGHAI FLYCO ELECTRICAL APPLIANCE CO.,LTD", - [3]byte{188, 164, 225}: "Nabto", - [3]byte{188, 168, 166}: "Intel Corporate", - [3]byte{188, 169, 32}: "Apple, Inc.", - [3]byte{188, 169, 214}: "Cyber-Rain, Inc.", - [3]byte{188, 173, 40}: "Hangzhou Hikvision Digital Technology Co.,Ltd.", - [3]byte{188, 173, 171}: "Avaya Inc", - [3]byte{188, 174, 197}: "ASUSTek COMPUTER INC.", - [3]byte{188, 177, 129}: "SHARP CORPORATION", - [3]byte{188, 177, 243}: "Samsung Electronics Co.,Ltd", - [3]byte{188, 179, 8}: "HONGKONG RAGENTEK COMMUNICATION TECHNOLOGY CO.,LIMITED", - [3]byte{188, 184, 82}: "Cybera, Inc.", - [3]byte{188, 186, 225}: "AREC Inc.", - [3]byte{188, 187, 201}: "Kellendonk Elektronik GmbH", - [3]byte{188, 188, 70}: "SKS Welding Systems GmbH", - [3]byte{188, 192, 15}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{188, 193, 104}: "DinBox Sverige AB", - [3]byte{188, 194, 58}: "Thomson Video Networks", - [3]byte{188, 195, 27}: "Kygo Life AS", - [3]byte{188, 195, 66}: "Panasonic Communications Co., Ltd.", - [3]byte{188, 196, 147}: "Cisco Systems, Inc", - [3]byte{188, 198, 26}: "SPECTRA EMBEDDED SYSTEMS", - [3]byte{188, 198, 219}: "Nokia Corporation", - [3]byte{188, 200, 16}: "Cisco SPVTG", - [3]byte{188, 202, 181}: "ARRIS Group, Inc.", - [3]byte{188, 205, 69}: "VOISMART", - [3]byte{188, 207, 204}: "HTC Corporation", - [3]byte{188, 209, 31}: "Samsung Electronics Co.,Ltd", - [3]byte{188, 209, 101}: "Cisco SPVTG", - [3]byte{188, 209, 119}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{188, 209, 211}: "Shenzhen TINNO Mobile Technology Corp.", - [3]byte{188, 213, 182}: "d2d technologies", - [3]byte{188, 215, 19}: "Owl Labs", - [3]byte{188, 217, 64}: "ASR Co,.Ltd.", - [3]byte{188, 224, 157}: "Eoslink", - [3]byte{188, 229, 159}: "WATERWORLD Technology Co.,LTD", - [3]byte{188, 230, 63}: "Samsung Electronics Co.,Ltd", - [3]byte{188, 231, 103}: "Quanzhou TDX Electronics Co., Ltd", - [3]byte{188, 234, 43}: "CityCom GmbH", - [3]byte{188, 234, 250}: "Hewlett Packard", - [3]byte{188, 235, 95}: "Fujian Beifeng Telecom Technology Co., Ltd.", - [3]byte{188, 236, 35}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD", - [3]byte{188, 236, 93}: "Apple, Inc.", - [3]byte{188, 238, 123}: "ASUSTek COMPUTER INC.", - [3]byte{188, 241, 242}: "Cisco Systems, Inc", - [3]byte{188, 242, 146}: "PLANTRONICS, INC.", - [3]byte{188, 242, 175}: "devolo AG", - [3]byte{188, 245, 172}: "LG Electronics (Mobile Communications)", - [3]byte{188, 246, 28}: "Geomodeling Wuxi Technology Co. Ltd.", - [3]byte{188, 246, 133}: "D-Link International", - [3]byte{188, 248, 17}: "Xiamen DNAKE Technology Co.,Ltd", - [3]byte{188, 254, 140}: "Altronic, LLC", - [3]byte{188, 255, 172}: "TOPCON CORPORATION", - [3]byte{188, 255, 235}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{192, 2, 141}: "WINSTAR Display CO.,Ltd", - [3]byte{192, 5, 194}: "ARRIS Group, Inc.", - [3]byte{192, 13, 126}: "Additech, Inc.", - [3]byte{192, 17, 115}: "Samsung Electronics Co.,Ltd", - [3]byte{192, 17, 166}: "Fort-Telecom ltd.", - [3]byte{192, 18, 66}: "Alpha Security Products", - [3]byte{192, 20, 61}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{192, 23, 77}: "Samsung Electronics Co.,Ltd", - [3]byte{192, 24, 133}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{192, 26, 218}: "Apple, Inc.", - [3]byte{192, 30, 155}: "Pixavi AS", - [3]byte{192, 33, 13}: "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.", - [3]byte{192, 34, 80}: "Private", - [3]byte{192, 37, 6}: "AVM GmbH", - [3]byte{192, 37, 92}: "Cisco Systems, Inc", - [3]byte{192, 37, 103}: "Nexxt Solutions", - [3]byte{192, 37, 162}: "NEC Platforms, Ltd.", - [3]byte{192, 37, 233}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{192, 39, 185}: "Beijing National Railway Research & Design Institute of Signal & Communication Co., Ltd.", - [3]byte{192, 40, 141}: "Logitech, Inc", - [3]byte{192, 41, 115}: "Audyssey Laboratories Inc.", - [3]byte{192, 41, 243}: "XySystem", - [3]byte{192, 43, 252}: "iNES. applied informatics GmbH", - [3]byte{192, 44, 122}: "Shenzhen Horn Audio Co.,Ltd.", - [3]byte{192, 45, 238}: "Cuff", - [3]byte{192, 47, 241}: "Volta Networks", - [3]byte{192, 51, 94}: "Microsoft", - [3]byte{192, 52, 180}: "Gigastone Corporation", - [3]byte{192, 53, 128}: "A&R TECH", - [3]byte{192, 53, 189}: "Velocytech Aps", - [3]byte{192, 53, 197}: "Prosoft Systems LTD", - [3]byte{192, 56, 150}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{192, 56, 249}: "Nokia Danmark A/S", - [3]byte{192, 59, 143}: "Minicom Digital Signage", - [3]byte{192, 61, 70}: "Shanghai Sango Network Technology Co.,Ltd", - [3]byte{192, 62, 15}: "BSkyB Ltd", - [3]byte{192, 63, 14}: "NETGEAR", - [3]byte{192, 63, 42}: "Biscotti, Inc.", - [3]byte{192, 63, 213}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{192, 65, 246}: "LG ELECTRONICS INC", - [3]byte{192, 67, 1}: "Epec Oy", - [3]byte{192, 68, 227}: "Shenzhen Sinkna Electronics Co., LTD", - [3]byte{192, 73, 61}: "MAITRISE TECHNOLOGIQUE", - [3]byte{192, 74, 0}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{192, 74, 9}: "Zhejiang Everbright Communication Equip. Co,. Ltd", - [3]byte{192, 77, 247}: "SERELEC", - [3]byte{192, 86, 39}: "Belkin International Inc.", - [3]byte{192, 86, 227}: "Hangzhou Hikvision Digital Technology Co.,Ltd.", - [3]byte{192, 87, 188}: "Avaya Inc", - [3]byte{192, 88, 167}: "Pico Systems Co., Ltd.", - [3]byte{192, 94, 111}: "V. Stonkaus firma Kodinis Raktas", - [3]byte{192, 94, 121}: "SHENZHEN HUAXUN ARK TECHNOLOGIES CO.,LTD", - [3]byte{192, 97, 24}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{192, 98, 107}: "Cisco Systems, Inc", - [3]byte{192, 99, 148}: "Apple, Inc.", - [3]byte{192, 100, 198}: "Nokia Corporation", - [3]byte{192, 101, 153}: "Samsung Electronics Co.,Ltd", - [3]byte{192, 103, 175}: "Cisco Systems, Inc", - [3]byte{192, 108, 15}: "Dobbs Stanford", - [3]byte{192, 108, 109}: "MagneMotion, Inc.", - [3]byte{192, 109, 26}: "Tianjin Henxinhuifeng Technology Co.,Ltd.", - [3]byte{192, 112, 9}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{192, 116, 43}: "SHENZHEN XUNLONG SOFTWARE CO.,LIMITED", - [3]byte{192, 123, 188}: "Cisco Systems, Inc", - [3]byte{192, 124, 209}: "PEGATRON CORPORATION", - [3]byte{192, 126, 64}: "SHENZHEN XDK COMMUNICATION EQUIPMENT CO.,LTD", - [3]byte{192, 129, 112}: "Effigis GeoSolutions", - [3]byte{192, 131, 10}: "2Wire Inc", - [3]byte{192, 132, 122}: "Apple, Inc.", - [3]byte{192, 132, 136}: "Finis Inc", - [3]byte{192, 133, 76}: "Ragentek Technology Group", - [3]byte{192, 135, 235}: "Samsung Electronics Co.,Ltd", - [3]byte{192, 136, 91}: "SnD Tech Co., Ltd.", - [3]byte{192, 137, 151}: "Samsung Electronics Co.,Ltd", - [3]byte{192, 138, 222}: "Ruckus Wireless", - [3]byte{192, 139, 111}: "S I Sistemas Inteligentes Eletrônicos Ltda", - [3]byte{192, 140, 96}: "Cisco Systems, Inc", - [3]byte{192, 145, 50}: "Patriot Memory", - [3]byte{192, 145, 52}: "ProCurve Networking by HP", - [3]byte{192, 151, 39}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{192, 152, 121}: "Acer Inc.", - [3]byte{192, 152, 229}: "University of Michigan", - [3]byte{192, 154, 113}: "XIAMEN MEITU MOBILE TECHNOLOGY CO.LTD", - [3]byte{192, 156, 4}: "Shaanxi GuoLian Digital TV Technology Co.,Ltd.", - [3]byte{192, 156, 146}: "COBY", - [3]byte{192, 157, 38}: "Topicon HK Lmd.", - [3]byte{192, 159, 5}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{192, 159, 66}: "Apple, Inc.", - [3]byte{192, 160, 13}: "ARRIS Group, Inc.", - [3]byte{192, 160, 187}: "D-Link International", - [3]byte{192, 160, 199}: "FAIRFIELD INDUSTRIES", - [3]byte{192, 160, 222}: "Multi Touch Oy", - [3]byte{192, 160, 226}: "Eden Innovations", - [3]byte{192, 161, 162}: "MarqMetrix", - [3]byte{192, 162, 109}: "Abbott Point of Care", - [3]byte{192, 163, 100}: "3D Systems Massachusetts", - [3]byte{192, 163, 158}: "EarthCam, Inc.", - [3]byte{192, 165, 62}: "Apple, Inc.", - [3]byte{192, 165, 221}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", - [3]byte{192, 170, 104}: "OSASI Technos Inc.", - [3]byte{192, 172, 84}: "Sagemcom Broadband SAS", - [3]byte{192, 179, 57}: "Comigo Ltd.", - [3]byte{192, 179, 87}: "Yoshiki Electronics Industry Ltd.", - [3]byte{192, 183, 19}: "Beijing Xiaoyuer Technology Co. Ltd.", - [3]byte{192, 184, 177}: "BitBox Ltd", - [3]byte{192, 186, 230}: "Application Solutions (Electronics and Vision) Ltd", - [3]byte{192, 189, 66}: "ZPA Smart Energy a.s.", - [3]byte{192, 189, 209}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{192, 191, 192}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{192, 193, 192}: "Cisco-Linksys, LLC", - [3]byte{192, 195, 182}: "Automatic Systems", - [3]byte{192, 197, 32}: "Ruckus Wireless", - [3]byte{192, 197, 34}: "ARRIS Group, Inc.", - [3]byte{192, 197, 105}: "SHANGHAI LYNUC CNC TECHNOLOGY CO.,LTD", - [3]byte{192, 198, 135}: "Cisco SPVTG", - [3]byte{192, 201, 70}: "MITSUYA LABORATORIES INC.", - [3]byte{192, 201, 118}: "Shenzhen TINNO Mobile Technology Corp.", - [3]byte{192, 203, 56}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{192, 204, 248}: "Apple, Inc.", - [3]byte{192, 206, 205}: "Apple, Inc.", - [3]byte{192, 207, 163}: "Creative Electronics & Software, Inc.", - [3]byte{192, 208, 18}: "Apple, Inc.", - [3]byte{192, 208, 68}: "Sagemcom Broadband SAS", - [3]byte{192, 211, 145}: "IEEE Registration Authority", - [3]byte{192, 211, 192}: "Samsung Electronics Co.,Ltd", - [3]byte{192, 217, 98}: "ASKEY COMPUTER CORP", - [3]byte{192, 217, 247}: "ShanDong Domor Intelligent S&T CO.,Ltd", - [3]byte{192, 218, 116}: "Hangzhou Sunyard Technology Co., Ltd.", - [3]byte{192, 220, 106}: "Qingdao Eastsoft Communication Technology Co.,LTD", - [3]byte{192, 223, 119}: "Conrad Electronic SE", - [3]byte{192, 228, 34}: "Texas Instruments", - [3]byte{192, 228, 45}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{192, 229, 78}: "ARIES Embedded GmbH", - [3]byte{192, 234, 228}: "Sonicwall", - [3]byte{192, 238, 64}: "Laird Technologies", - [3]byte{192, 238, 251}: "OnePlus Tech (Shenzhen) Ltd", - [3]byte{192, 241, 196}: "Pacidal Corporation Ltd.", - [3]byte{192, 242, 251}: "Apple, Inc.", - [3]byte{192, 246, 54}: "Hangzhou Kuaiyue Technologies, Ltd.", - [3]byte{192, 247, 157}: "Powercode", - [3]byte{192, 248, 218}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{192, 249, 69}: "Toshiba Toko Meter Systems Co., LTD.", - [3]byte{192, 249, 145}: "GME Standard Communications P/L", - [3]byte{192, 255, 212}: "NETGEAR", - [3]byte{196, 0, 6}: "Lipi Data Systems Ltd.", - [3]byte{196, 0, 73}: "Kamama", - [3]byte{196, 1, 66}: "MaxMedia Technology Limited", - [3]byte{196, 1, 124}: "Ruckus Wireless", - [3]byte{196, 1, 177}: "SeekTech INC", - [3]byte{196, 1, 206}: "PRESITION (2000) CO., LTD.", - [3]byte{196, 4, 21}: "NETGEAR", - [3]byte{196, 4, 123}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{196, 5, 40}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{196, 7, 47}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{196, 8, 74}: "Nokia", - [3]byte{196, 8, 128}: "Shenzhen UTEPO Tech Co., Ltd.", - [3]byte{196, 9, 56}: "FUJIAN STAR-NET COMMUNICATION CO.,LTD", - [3]byte{196, 10, 203}: "Cisco Systems, Inc", - [3]byte{196, 11, 203}: "Xiaomi Communications Co Ltd", - [3]byte{196, 14, 69}: "ACK Networks,Inc.", - [3]byte{196, 15, 9}: "Hermes electronic GmbH", - [3]byte{196, 16, 138}: "Ruckus Wireless", - [3]byte{196, 17, 224}: "Bull Group Co., Ltd", - [3]byte{196, 18, 245}: "D-Link International", - [3]byte{196, 19, 226}: "Aerohive Networks Inc.", - [3]byte{196, 20, 60}: "Cisco Systems, Inc", - [3]byte{196, 22, 250}: "Prysm Inc", - [3]byte{196, 23, 254}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{196, 25, 139}: "Dominion Voting Systems Corporation", - [3]byte{196, 25, 236}: "Qualisys AB", - [3]byte{196, 28, 255}: "Vizio, Inc", - [3]byte{196, 30, 206}: "HMI Sources Ltd.", - [3]byte{196, 33, 200}: "KYOCERA CORPORATION", - [3]byte{196, 35, 122}: "WhizNets Inc.", - [3]byte{196, 36, 46}: "Galvanic Applied Sciences Inc", - [3]byte{196, 38, 40}: "Airo Wireless", - [3]byte{196, 39, 149}: "Technicolor CH USA Inc.", - [3]byte{196, 40, 45}: "Embedded Intellect Pty Ltd", - [3]byte{196, 41, 29}: "KLEMSAN ELEKTRIK ELEKTRONIK SAN.VE TIC.AS.", - [3]byte{196, 44, 3}: "Apple, Inc.", - [3]byte{196, 47, 144}: "Hangzhou Hikvision Digital Technology Co.,Ltd.", - [3]byte{196, 48, 24}: "MCS Logic Inc.", - [3]byte{196, 52, 107}: "Hewlett Packard", - [3]byte{196, 54, 85}: "Shenzhen Fenglian Technology Co., Ltd.", - [3]byte{196, 54, 108}: "LG Innotek", - [3]byte{196, 54, 218}: "Rusteletech Ltd.", - [3]byte{196, 56, 211}: "TAGATEC CO.,LTD", - [3]byte{196, 57, 58}: "SMC Networks Inc", - [3]byte{196, 58, 159}: "Siconix Inc.", - [3]byte{196, 58, 190}: "Sony Mobile Communications AB", - [3]byte{196, 60, 60}: "CYBELEC SA", - [3]byte{196, 61, 199}: "NETGEAR", - [3]byte{196, 64, 68}: "RackTop Systems Inc.", - [3]byte{196, 66, 2}: "Samsung Electronics Co.,Ltd", - [3]byte{196, 67, 143}: "LG Electronics (Mobile Communications)", - [3]byte{196, 68, 160}: "Cisco Systems, Inc", - [3]byte{196, 69, 103}: "SAMBON PRECISON and ELECTRONICS", - [3]byte{196, 69, 236}: "Shanghai Yali Electron Co.,LTD", - [3]byte{196, 70, 25}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{196, 71, 63}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{196, 72, 56}: "Satcom Direct, Inc.", - [3]byte{196, 73, 187}: "MITSUMI ELECTRIC CO.,LTD.", - [3]byte{196, 74, 208}: "FIREFLIES SYSTEMS", - [3]byte{196, 75, 68}: "Omniprint Inc.", - [3]byte{196, 75, 209}: "Wallys Communications Teachnologies Co.,Ltd.", - [3]byte{196, 78, 31}: "BlueN", - [3]byte{196, 78, 172}: "Shenzhen Shiningworth Technology Co., Ltd.", - [3]byte{196, 80, 6}: "Samsung Electronics Co.,Ltd", - [3]byte{196, 84, 68}: "QUANTA COMPUTER INC.", - [3]byte{196, 85, 166}: "Cadac Holdings Ltd", - [3]byte{196, 85, 194}: "Bach-Simpson", - [3]byte{196, 86, 0}: "Galleon Embedded Computing", - [3]byte{196, 86, 254}: "Lava International Ltd.", - [3]byte{196, 87, 31}: "June Life Inc", - [3]byte{196, 87, 110}: "Samsung Electronics Co.,Ltd", - [3]byte{196, 88, 194}: "Shenzhen TATFOOK Technology Co., Ltd.", - [3]byte{196, 89, 118}: "Fugoo Coorporation", - [3]byte{196, 93, 216}: "HDMI Forum", - [3]byte{196, 96, 68}: "Everex Electronics Limited", - [3]byte{196, 98, 107}: "ZPT Vigantice", - [3]byte{196, 98, 234}: "Samsung Electronics Co.,Ltd", - [3]byte{196, 99, 84}: "U-Raku, Inc.", - [3]byte{196, 100, 19}: "Cisco Systems, Inc", - [3]byte{196, 102, 153}: "vivo Mobile Communication Co., Ltd.", - [3]byte{196, 103, 181}: "Libratone A/S", - [3]byte{196, 104, 208}: "VTech Telecommunications Ltd.", - [3]byte{196, 105, 62}: "Turbulence Design Inc.", - [3]byte{196, 106, 183}: "Xiaomi Communications Co Ltd", - [3]byte{196, 107, 180}: "myIDkey", - [3]byte{196, 109, 241}: "DataGravity", - [3]byte{196, 110, 31}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{196, 112, 11}: "GUANGZHOU CHIP TECHNOLOGIES CO.,LTD", - [3]byte{196, 113, 48}: "Fon Technology S.L.", - [3]byte{196, 113, 84}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{196, 113, 254}: "Cisco Systems, Inc", - [3]byte{196, 114, 149}: "Cisco Systems, Inc", - [3]byte{196, 115, 30}: "Samsung Electronics Co.,Ltd", - [3]byte{196, 119, 171}: "Beijing ASU Tech Co.,Ltd", - [3]byte{196, 119, 175}: "Advanced Digital Broadcast SA", - [3]byte{196, 123, 47}: "Beijing JoinHope Image Technology Ltd.", - [3]byte{196, 123, 163}: "NAVIS Inc.", - [3]byte{196, 124, 141}: "IEEE Registration Authority", - [3]byte{196, 125, 70}: "FUJITSU LIMITED", - [3]byte{196, 125, 79}: "Cisco Systems, Inc", - [3]byte{196, 125, 204}: "Zebra Technologies Inc", - [3]byte{196, 125, 254}: "A.N. Solutions GmbH", - [3]byte{196, 127, 81}: "Inventek Systems", - [3]byte{196, 130, 63}: "Fujian Newland Auto-ID Tech. Co,.Ltd.", - [3]byte{196, 130, 78}: "Changzhou Uchip Electronics Co., LTD.", - [3]byte{196, 131, 111}: "Ciena Corporation", - [3]byte{196, 133, 8}: "Intel Corporate", - [3]byte{196, 134, 233}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{196, 136, 229}: "Samsung Electronics Co.,Ltd", - [3]byte{196, 142, 143}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{196, 143, 7}: "Shenzhen Yihao Hulian Science and Technology Co., Ltd.", - [3]byte{196, 145, 58}: "Shenzhen Sanland Electronic Co., ltd.", - [3]byte{196, 146, 76}: "KEISOKUKI CENTER CO.,LTD.", - [3]byte{196, 147, 0}: "8Devices", - [3]byte{196, 147, 19}: "100fio networks technology llc", - [3]byte{196, 147, 128}: "Speedytel technology", - [3]byte{196, 149, 162}: "SHENZHEN WEIJIU INDUSTRY AND TRADE DEVELOPMENT CO., LTD", - [3]byte{196, 152, 5}: "Minieum Networks, Inc", - [3]byte{196, 154, 2}: "LG Electronics (Mobile Communications)", - [3]byte{196, 157, 237}: "Microsoft Corporation", - [3]byte{196, 158, 65}: "G24 Power Limited", - [3]byte{196, 159, 243}: "Mciao Technologies, Inc.", - [3]byte{196, 163, 102}: "zte corporation", - [3]byte{196, 168, 29}: "D-Link International", - [3]byte{196, 170, 161}: "SUMMIT DEVELOPMENT, spol.s r.o.", - [3]byte{196, 171, 178}: "vivo Mobile Communication Co., Ltd.", - [3]byte{196, 173, 33}: "MEDIAEDGE Corporation", - [3]byte{196, 173, 241}: "GOPEACE Inc.", - [3]byte{196, 174, 18}: "Samsung Electronics Co.,Ltd", - [3]byte{196, 179, 1}: "Apple, Inc.", - [3]byte{196, 181, 18}: "General Electric Digital Energy", - [3]byte{196, 185, 205}: "Cisco Systems, Inc", - [3]byte{196, 186, 153}: "I+ME Actia Informatik und Mikro-Elektronik GmbH", - [3]byte{196, 186, 163}: "Beijing Winicssec Technologies Co., Ltd.", - [3]byte{196, 187, 76}: "Zebra Information Tech Co. Ltd", - [3]byte{196, 187, 234}: "Pakedge Device and Software Inc", - [3]byte{196, 189, 106}: "SKF GmbH", - [3]byte{196, 190, 132}: "Texas Instruments", - [3]byte{196, 190, 212}: "Avaya Inc", - [3]byte{196, 192, 174}: "MIDORI ELECTRONIC CO., LTD.", - [3]byte{196, 193, 159}: "National Oilwell Varco Instrumentation, Monitoring, and Optimization (NOV IMO)", - [3]byte{196, 197, 99}: "TECNO MOBILE LIMITED", - [3]byte{196, 199, 85}: "Beijing HuaqinWorld Technology Co.,Ltd", - [3]byte{196, 201, 25}: "Energy Imports Ltd", - [3]byte{196, 201, 236}: "Gugaoo HK Limited", - [3]byte{196, 202, 217}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{196, 203, 107}: "Airista Flow, Inc.", - [3]byte{196, 205, 69}: "Beijing Boomsense Technology CO.,LTD.", - [3]byte{196, 205, 130}: "Hangzhou Lowan Information Technology Co., Ltd.", - [3]byte{196, 209, 151}: "Ventia Utility Services", - [3]byte{196, 212, 137}: "JiangSu Joyque Information Industry Co.,Ltd", - [3]byte{196, 214, 85}: "Tercel technology co.,ltd", - [3]byte{196, 217, 135}: "Intel Corporate", - [3]byte{196, 218, 38}: "NOBLEX SA", - [3]byte{196, 218, 125}: "Ivium Technologies B.V.", - [3]byte{196, 224, 50}: "IEEE 1904.1 Working Group", - [3]byte{196, 225, 124}: "U2S co.", - [3]byte{196, 229, 16}: "Mechatro, Inc.", - [3]byte{196, 231, 190}: "SCSpro Co.,Ltd", - [3]byte{196, 233, 47}: "AB Sciex", - [3]byte{196, 233, 132}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{196, 234, 29}: "Technicolor", - [3]byte{196, 235, 227}: "RRCN SAS", - [3]byte{196, 237, 186}: "Texas Instruments", - [3]byte{196, 238, 174}: "VSS Monitoring", - [3]byte{196, 238, 245}: "II-VI Incorporated", - [3]byte{196, 239, 112}: "Home Skinovations", - [3]byte{196, 240, 129}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{196, 241, 209}: "BEIJING SOGOU TECHNOLOGY DEVELOPMENT CO., LTD.", - [3]byte{196, 243, 18}: "Texas Instruments", - [3]byte{196, 244, 100}: "Spica international", - [3]byte{196, 245, 124}: "Brocade Communications Systems, Inc.", - [3]byte{196, 245, 165}: "Kumalift Co., Ltd.", - [3]byte{196, 252, 228}: "DishTV NZ Ltd", - [3]byte{196, 255, 31}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{200, 0, 132}: "Cisco Systems, Inc", - [3]byte{200, 2, 16}: "LG Innotek", - [3]byte{200, 2, 88}: "ITW GSE ApS", - [3]byte{200, 2, 143}: "Nova Electronics (Shanghai) Co., Ltd.", - [3]byte{200, 2, 166}: "Beijing Newmine Technology", - [3]byte{200, 7, 24}: "TDSi", - [3]byte{200, 8, 233}: "LG Electronics", - [3]byte{200, 10, 169}: "QUANTA COMPUTER INC.", - [3]byte{200, 12, 200}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{200, 14, 20}: "AVM Audiovisuelles Marketing und Computersysteme GmbH", - [3]byte{200, 14, 119}: "Le Shi Zhi Xin Electronic Technology (Tianjin) Limited", - [3]byte{200, 14, 149}: "OmniLync Inc.", - [3]byte{200, 16, 115}: "CENTURY OPTICOMM CO.,LTD", - [3]byte{200, 20, 81}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{200, 20, 121}: "Samsung Electronics Co.,Ltd", - [3]byte{200, 22, 165}: "Masimo Corporation", - [3]byte{200, 22, 189}: "Qingdao Hisense Communications Co.,Ltd.", - [3]byte{200, 25, 247}: "Samsung Electronics Co.,Ltd", - [3]byte{200, 26, 254}: "DLOGIC GmbH", - [3]byte{200, 27, 92}: "BCTech", - [3]byte{200, 27, 107}: "Innova Security", - [3]byte{200, 30, 142}: "ADV Security (S) Pte Ltd", - [3]byte{200, 30, 231}: "Apple, Inc.", - [3]byte{200, 31, 102}: "Dell Inc.", - [3]byte{200, 31, 190}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{200, 31, 234}: "Avaya Inc", - [3]byte{200, 32, 142}: "Storagedata", - [3]byte{200, 33, 88}: "Intel Corporate", - [3]byte{200, 37, 225}: "Lemobile Information Technology (Beijing) Co., Ltd", - [3]byte{200, 41, 42}: "Barun Electronics", - [3]byte{200, 42, 20}: "Apple, Inc.", - [3]byte{200, 46, 148}: "Halfa Enterprise Co., Ltd.", - [3]byte{200, 49, 104}: "eZEX corporation", - [3]byte{200, 50, 50}: "Hunting Innova", - [3]byte{200, 51, 75}: "Apple, Inc.", - [3]byte{200, 52, 142}: "Intel Corporate", - [3]byte{200, 53, 184}: "Ericsson, EAB/RWI/K", - [3]byte{200, 56, 112}: "Samsung Electronics Co.,Ltd", - [3]byte{200, 58, 53}: "Tenda Technology Co., Ltd.", - [3]byte{200, 58, 107}: "Roku, Inc", - [3]byte{200, 59, 69}: "JRI", - [3]byte{200, 60, 133}: "Apple, Inc.", - [3]byte{200, 61, 151}: "Nokia Corporation", - [3]byte{200, 61, 212}: "CyberTAN Technology Inc.", - [3]byte{200, 61, 252}: "Pioneer DJ Corporation", - [3]byte{200, 62, 153}: "Texas Instruments", - [3]byte{200, 62, 167}: "KUNBUS GmbH", - [3]byte{200, 63, 38}: "Microsoft Corporation", - [3]byte{200, 63, 180}: "ARRIS Group, Inc.", - [3]byte{200, 64, 41}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{200, 69, 41}: "IMK Networks Co.,Ltd", - [3]byte{200, 69, 68}: "Asia Pacific CIS (Wuxi) Co, Ltd", - [3]byte{200, 69, 143}: "Wyler AG", - [3]byte{200, 71, 140}: "Beken Corporation", - [3]byte{200, 72, 245}: "MEDISON Xray Co., Ltd", - [3]byte{200, 76, 117}: "Cisco Systems, Inc", - [3]byte{200, 80, 233}: "Raisecom Technology CO., LTD", - [3]byte{200, 81, 149}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{200, 86, 69}: "Intermas France", - [3]byte{200, 86, 99}: "Sunflex Europe GmbH", - [3]byte{200, 91, 118}: "LCFC(HeFei) Electronics Technology co., ltd", - [3]byte{200, 96, 0}: "ASUSTek COMPUTER INC.", - [3]byte{200, 99, 241}: "Sony Interactive Entertainment Inc.", - [3]byte{200, 100, 199}: "zte corporation", - [3]byte{200, 102, 44}: "Beijing Haitai Fangyuan High Technology Co,.Ltd.", - [3]byte{200, 102, 93}: "Aerohive Networks Inc.", - [3]byte{200, 103, 94}: "Aerohive Networks Inc.", - [3]byte{200, 105, 205}: "Apple, Inc.", - [3]byte{200, 108, 30}: "Display Systems Ltd", - [3]byte{200, 108, 135}: "Zyxel Communications Corporation", - [3]byte{200, 108, 182}: "Optcom Co., Ltd.", - [3]byte{200, 111, 29}: "Apple, Inc.", - [3]byte{200, 114, 72}: "Aplicom Oy", - [3]byte{200, 115, 36}: "Sow Cheng Technology Co. Ltd.", - [3]byte{200, 117, 91}: "Quantify Technology Pty. Ltd.", - [3]byte{200, 119, 139}: "Themis Computer", - [3]byte{200, 123, 91}: "zte corporation", - [3]byte{200, 124, 188}: "Valink Co., Ltd.", - [3]byte{200, 125, 119}: "Shenzhen Kingtech Communication Equipment Co.,Ltd", - [3]byte{200, 126, 117}: "Samsung Electronics Co.,Ltd", - [3]byte{200, 132, 57}: "Sunrise Technologies", - [3]byte{200, 132, 71}: "Beautiful Enterprise Co., Ltd", - [3]byte{200, 133, 80}: "Apple, Inc.", - [3]byte{200, 135, 34}: "Lumenpulse", - [3]byte{200, 135, 59}: "Net Optics", - [3]byte{200, 138, 131}: "Dongguan HuaHong Electronics Co.,Ltd", - [3]byte{200, 139, 71}: "Nolangroup S.P.A con Socio Unico", - [3]byte{200, 141, 131}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{200, 142, 209}: "IEEE Registration Authority", - [3]byte{200, 144, 62}: "Pakton Technologies", - [3]byte{200, 145, 249}: "Sagemcom Broadband SAS", - [3]byte{200, 147, 70}: "MXCHIP Company Limited", - [3]byte{200, 147, 131}: "Embedded Automation, Inc.", - [3]byte{200, 148, 187}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{200, 148, 210}: "Jiangsu Datang Electronic Products Co., Ltd", - [3]byte{200, 151, 159}: "Nokia Corporation", - [3]byte{200, 156, 29}: "Cisco Systems, Inc", - [3]byte{200, 156, 220}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{200, 159, 29}: "SHENZHEN COMMUNICATION TECHNOLOGIES CO.,LTD", - [3]byte{200, 159, 66}: "VDII Innovation AB", - [3]byte{200, 160, 48}: "Texas Instruments", - [3]byte{200, 161, 182}: "Shenzhen Longway Technologies Co., Ltd", - [3]byte{200, 161, 186}: "Neul Ltd", - [3]byte{200, 162, 206}: "Oasis Media Systems LLC", - [3]byte{200, 166, 32}: "Nebula, Inc", - [3]byte{200, 167, 10}: "Verizon Business", - [3]byte{200, 167, 41}: "SYStronics Co., Ltd.", - [3]byte{200, 168, 35}: "Samsung Electronics Co.,Ltd", - [3]byte{200, 169, 252}: "Goyoo Networks Inc.", - [3]byte{200, 170, 33}: "ARRIS Group, Inc.", - [3]byte{200, 170, 85}: "Hunan Comtom Electronic Incorporated Co.,Ltd", - [3]byte{200, 170, 204}: "Private", - [3]byte{200, 174, 156}: "Shanghai TYD Elecronic Technology Co. Ltd", - [3]byte{200, 175, 64}: "marco Systemanalyse und Entwicklung GmbH", - [3]byte{200, 175, 227}: "Hefei Radio Communication Technology Co., Ltd", - [3]byte{200, 178, 30}: "CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.", - [3]byte{200, 179, 115}: "Cisco-Linksys, LLC", - [3]byte{200, 181, 173}: "Hewlett Packard Enterprise", - [3]byte{200, 181, 183}: "Apple, Inc.", - [3]byte{200, 186, 148}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{200, 187, 211}: "Embrane", - [3]byte{200, 188, 200}: "Apple, Inc.", - [3]byte{200, 190, 25}: "D-Link International", - [3]byte{200, 193, 38}: "ZPM Industria e Comercio Ltda", - [3]byte{200, 193, 60}: "RuggedTek Hangzhou Co., Ltd", - [3]byte{200, 194, 198}: "Shanghai Airm2m Communication Technology Co., Ltd", - [3]byte{200, 197, 14}: "Shenzhen Primestone Network Technologies.Co., Ltd.", - [3]byte{200, 199, 145}: "Zero1.tv GmbH", - [3]byte{200, 203, 184}: "Hewlett Packard", - [3]byte{200, 205, 114}: "Sagemcom Broadband SAS", - [3]byte{200, 208, 25}: "Shanghai Tigercel Communication Technology Co.,Ltd", - [3]byte{200, 209, 11}: "Nokia Corporation", - [3]byte{200, 209, 42}: "Comtrend Corporation", - [3]byte{200, 209, 94}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{200, 209, 209}: "AGAiT Technology Corporation", - [3]byte{200, 210, 193}: "Jetlun (Shenzhen) Corporation", - [3]byte{200, 211, 163}: "D-Link International", - [3]byte{200, 211, 255}: "Hewlett Packard", - [3]byte{200, 212, 41}: "Muehlbauer AG", - [3]byte{200, 213, 144}: "FLIGHT DATA SYSTEMS", - [3]byte{200, 213, 254}: "Shenzhen Zowee Technology Co., Ltd", - [3]byte{200, 215, 25}: "Cisco-Linksys, LLC", - [3]byte{200, 215, 121}: "Qingdao Haier Telecom Co.,Ltd", - [3]byte{200, 215, 176}: "Samsung Electronics Co.,Ltd", - [3]byte{200, 219, 38}: "Logitech", - [3]byte{200, 221, 201}: "Lenovo Mobile Communication Technology Ltd.", - [3]byte{200, 222, 81}: "IntegraOptics", - [3]byte{200, 222, 201}: "Coriant", - [3]byte{200, 223, 124}: "Nokia Corporation", - [3]byte{200, 223, 132}: "Texas Instruments", - [3]byte{200, 224, 235}: "Apple, Inc.", - [3]byte{200, 225, 48}: "Milkyway Group Ltd", - [3]byte{200, 225, 167}: "Vertu Corporation Limited", - [3]byte{200, 228, 47}: "Technical Research Design and Development", - [3]byte{200, 231, 118}: "PTCOM Technology", - [3]byte{200, 231, 216}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", - [3]byte{200, 231, 240}: "Juniper Networks", - [3]byte{200, 238, 8}: "TANGTOP TECHNOLOGY CO.,LTD", - [3]byte{200, 238, 117}: "Pishion International Co. Ltd", - [3]byte{200, 238, 166}: "Shenzhen SHX Technology Co., Ltd", - [3]byte{200, 239, 46}: "Beijing Gefei Tech. Co., Ltd", - [3]byte{200, 242, 48}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{200, 243, 107}: "Yamato Scale Co.,Ltd.", - [3]byte{200, 243, 134}: "Shenzhen Xiaoniao Technology Co.,Ltd", - [3]byte{200, 244, 6}: "Avaya Inc", - [3]byte{200, 246, 80}: "Apple, Inc.", - [3]byte{200, 246, 141}: "S.E.TECHNOLOGIES LIMITED", - [3]byte{200, 247, 4}: "Building Block Video", - [3]byte{200, 247, 51}: "Intel Corporate", - [3]byte{200, 248, 109}: "Alcatel-Lucent Shanghai Bell Co., Ltd", - [3]byte{200, 249, 70}: "LOCOSYS Technology Inc.", - [3]byte{200, 249, 129}: "Seneca s.r.l.", - [3]byte{200, 249, 200}: "NewSharp Technology(SuZhou)Co,Ltd", - [3]byte{200, 249, 249}: "Cisco Systems, Inc", - [3]byte{200, 251, 38}: "Cisco SPVTG", - [3]byte{200, 253, 25}: "Texas Instruments", - [3]byte{200, 254, 48}: "Bejing DAYO Mobile Communication Technology Ltd.", - [3]byte{200, 255, 40}: "Liteon Technology Corporation", - [3]byte{200, 255, 119}: "Dyson Limited", - [3]byte{204, 0, 128}: "BETTINI SRL", - [3]byte{204, 3, 217}: "Cisco Meraki", - [3]byte{204, 3, 250}: "Technicolor CH USA Inc.", - [3]byte{204, 4, 124}: "G-WAY Microwave", - [3]byte{204, 4, 180}: "Select Comfort", - [3]byte{204, 5, 27}: "Samsung Electronics Co.,Ltd", - [3]byte{204, 6, 119}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{204, 7, 171}: "Samsung Electronics Co.,Ltd", - [3]byte{204, 7, 228}: "Lenovo Mobile Communication Technology Ltd.", - [3]byte{204, 8, 141}: "Apple, Inc.", - [3]byte{204, 8, 224}: "Apple, Inc.", - [3]byte{204, 9, 200}: "IMAQLIQ LTD", - [3]byte{204, 12, 218}: "Miljovakt AS", - [3]byte{204, 13, 236}: "Cisco SPVTG", - [3]byte{204, 16, 163}: "Beijing Nan Bao Technology Co., Ltd.", - [3]byte{204, 20, 166}: "Yichun MyEnergy Domain, Inc", - [3]byte{204, 22, 126}: "Cisco Systems, Inc", - [3]byte{204, 24, 123}: "Manzanita Systems, Inc.", - [3]byte{204, 25, 168}: "PT Inovação e Sistemas SA", - [3]byte{204, 26, 250}: "zte corporation", - [3]byte{204, 27, 224}: "IEEE Registration Authority", - [3]byte{204, 30, 255}: "Metrological Group BV", - [3]byte{204, 31, 196}: "InVue", - [3]byte{204, 32, 232}: "Apple, Inc.", - [3]byte{204, 34, 24}: "InnoDigital Co., Ltd.", - [3]byte{204, 34, 55}: "IEEE Registration Authority", - [3]byte{204, 37, 239}: "Apple, Inc.", - [3]byte{204, 38, 45}: "Verifi, LLC", - [3]byte{204, 41, 245}: "Apple, Inc.", - [3]byte{204, 42, 128}: "Micro-Biz intelligence solutions Co.,Ltd", - [3]byte{204, 45, 33}: "Tenda Technology Co.,Ltd.Dongguan branch", - [3]byte{204, 45, 131}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{204, 45, 140}: "LG ELECTRONICS INC", - [3]byte{204, 45, 224}: "Routerboard.com", - [3]byte{204, 47, 113}: "Intel Corporate", - [3]byte{204, 48, 128}: "VAIO Corporation", - [3]byte{204, 51, 187}: "Sagemcom Broadband SAS", - [3]byte{204, 52, 41}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{204, 52, 215}: "GEWISS S.P.A.", - [3]byte{204, 53, 64}: "Technicolor CH USA Inc.", - [3]byte{204, 55, 171}: "Edgecore Networks Corportation", - [3]byte{204, 57, 140}: "Shiningtek", - [3]byte{204, 58, 97}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{204, 58, 223}: "Private", - [3]byte{204, 59, 62}: "Lester Electrical", - [3]byte{204, 60, 63}: "SA.S.S. Datentechnik AG", - [3]byte{204, 61, 130}: "Intel Corporate", - [3]byte{204, 62, 95}: "Hewlett Packard", - [3]byte{204, 63, 29}: "Intesis Software SL", - [3]byte{204, 64, 208}: "NETGEAR", - [3]byte{204, 67, 227}: "Trump s.a.", - [3]byte{204, 68, 99}: "Apple, Inc.", - [3]byte{204, 70, 57}: "WAAV, Inc.", - [3]byte{204, 70, 214}: "Cisco Systems, Inc", - [3]byte{204, 71, 3}: "Intercon Systems Co., Ltd.", - [3]byte{204, 74, 225}: "fourtec -Fourier Technologies", - [3]byte{204, 75, 115}: "AMPAK Technology, Inc.", - [3]byte{204, 75, 251}: "Hellberg Safety AB", - [3]byte{204, 78, 36}: "Brocade Communications Systems, Inc.", - [3]byte{204, 78, 236}: "HUMAX Co., Ltd.", - [3]byte{204, 80, 10}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{204, 80, 28}: "KVH Industries, Inc.", - [3]byte{204, 80, 118}: "Ocom Communications, Inc.", - [3]byte{204, 82, 175}: "Universal Global Scientific Industrial Co., Ltd.", - [3]byte{204, 83, 181}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{204, 84, 89}: "OnTime Networks AS", - [3]byte{204, 85, 173}: "RIM", - [3]byte{204, 89, 62}: "TOUMAZ LTD", - [3]byte{204, 90, 83}: "Cisco Systems, Inc", - [3]byte{204, 92, 117}: "Weightech Com. Imp. Exp. Equip. Pesagem Ltda", - [3]byte{204, 93, 78}: "Zyxel Communications Corporation", - [3]byte{204, 93, 87}: "Information System Research Institute,Inc.", - [3]byte{204, 95, 191}: "Topwise 3G Communication Co., Ltd.", - [3]byte{204, 96, 187}: "Empower RF Systems", - [3]byte{204, 97, 229}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{204, 101, 173}: "ARRIS Group, Inc.", - [3]byte{204, 102, 178}: "Nokia", - [3]byte{204, 105, 176}: "Global Traffic Technologies, LLC", - [3]byte{204, 107, 152}: "Minetec Wireless Technologies", - [3]byte{204, 107, 241}: "Sound Masking Inc.", - [3]byte{204, 109, 160}: "Roku, Inc.", - [3]byte{204, 109, 239}: "TJK Tietolaite Oy", - [3]byte{204, 110, 164}: "Samsung Electronics Co.,Ltd", - [3]byte{204, 114, 15}: "Viscount Systems Inc.", - [3]byte{204, 115, 20}: "HONG KONG WHEATEK TECHNOLOGY LIMITED", - [3]byte{204, 116, 152}: "Filmetrics Inc.", - [3]byte{204, 118, 105}: "SEETECH", - [3]byte{204, 120, 95}: "Apple, Inc.", - [3]byte{204, 120, 171}: "Texas Instruments", - [3]byte{204, 121, 74}: "BLU Products Inc.", - [3]byte{204, 121, 207}: "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.", - [3]byte{204, 122, 48}: "CMAX Wireless Co., Ltd.", - [3]byte{204, 123, 53}: "zte corporation", - [3]byte{204, 125, 55}: "ARRIS Group, Inc.", - [3]byte{204, 126, 231}: "Panasonic Corporation AVC Networks Company", - [3]byte{204, 129, 218}: "Phicomm (Shanghai) Co., Ltd.", - [3]byte{204, 130, 235}: "KYOCERA CORPORATION", - [3]byte{204, 133, 108}: "SHENZHEN MDK DIGITAL TECHNOLOGY CO.,LTD", - [3]byte{204, 137, 253}: "Nokia Corporation", - [3]byte{204, 140, 218}: "Shenzhen Wei Da Intelligent Technology Go.,Ltd", - [3]byte{204, 140, 227}: "Texas Instruments", - [3]byte{204, 144, 147}: "Hansong Tehnologies", - [3]byte{204, 144, 232}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{204, 145, 43}: "TE Connectivity Touch Solutions", - [3]byte{204, 148, 74}: "Pfeiffer Vacuum GmbH", - [3]byte{204, 148, 112}: "Kinestral Technologies, Inc.", - [3]byte{204, 149, 215}: "Vizio, Inc", - [3]byte{204, 150, 53}: "LVS Co.,Ltd.", - [3]byte{204, 150, 160}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{204, 152, 145}: "Cisco Systems, Inc", - [3]byte{204, 158, 0}: "Nintendo Co., Ltd.", - [3]byte{204, 159, 53}: "Transbit Sp. z o.o.", - [3]byte{204, 159, 122}: "Chiun Mai Communication Systems, Inc", - [3]byte{204, 160, 229}: "DZG Metering GmbH", - [3]byte{204, 162, 25}: "SHENZHEN ALONG INVESTMENT CO.,LTD", - [3]byte{204, 162, 35}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{204, 162, 96}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD", - [3]byte{204, 163, 116}: "Guangdong Guanglian Electronic Technology Co.Ltd", - [3]byte{204, 164, 98}: "ARRIS Group, Inc.", - [3]byte{204, 164, 175}: "Shenzhen Sowell Technology Co., LTD", - [3]byte{204, 166, 20}: "AIFA TECHNOLOGY CORP.", - [3]byte{204, 175, 120}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{204, 176, 218}: "Liteon Technology Corporation", - [3]byte{204, 177, 26}: "Samsung Electronics Co.,Ltd", - [3]byte{204, 178, 85}: "D-Link International", - [3]byte{204, 179, 171}: "shenzhen Biocare Bio-Medical Equipment Co.,Ltd.", - [3]byte{204, 179, 248}: "FUJITSU ISOTEC LIMITED", - [3]byte{204, 181, 90}: "Fraunhofer ITWM", - [3]byte{204, 182, 145}: "NECMagnusCommunications", - [3]byte{204, 184, 136}: "AnB Securite s.a.", - [3]byte{204, 184, 168}: "AMPAK Technology, Inc.", - [3]byte{204, 184, 241}: "EAGLE KINGDOM TECHNOLOGIES LIMITED", - [3]byte{204, 189, 53}: "Steinel GmbH", - [3]byte{204, 189, 211}: "Ultimaker B.V.", - [3]byte{204, 190, 89}: "Calix Inc.", - [3]byte{204, 190, 113}: "OptiLogix BV", - [3]byte{204, 193, 4}: "Applied Technical Systems", - [3]byte{204, 195, 234}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{204, 197, 10}: "SHENZHEN DAJIAHAO TECHNOLOGY CO.,LTD", - [3]byte{204, 197, 239}: "Co-Comm Servicios Telecomunicaciones S.L.", - [3]byte{204, 198, 43}: "Tri-Systems Corporation", - [3]byte{204, 199, 96}: "Apple, Inc.", - [3]byte{204, 200, 215}: "CIAS Elettronica srl", - [3]byte{204, 204, 78}: "Sun Fountainhead USA. Corp", - [3]byte{204, 204, 129}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{204, 205, 100}: "SM-Electronic GmbH", - [3]byte{204, 206, 30}: "AVM Audiovisuelles Marketing und Computersysteme GmbH", - [3]byte{204, 206, 64}: "Janteq Corp", - [3]byte{204, 210, 155}: "Shenzhen Bopengfa Elec&Technology CO.,Ltd", - [3]byte{204, 211, 30}: "IEEE Registration Authority", - [3]byte{204, 211, 226}: "Jiangsu Yinhe Electronics Co.,Ltd.", - [3]byte{204, 213, 57}: "Cisco Systems, Inc", - [3]byte{204, 216, 17}: "Aiconn Technology Corporation", - [3]byte{204, 216, 193}: "Cisco Systems, Inc", - [3]byte{204, 217, 233}: "SCR Engineers Ltd.", - [3]byte{204, 224, 195}: "Mangstor, Inc.", - [3]byte{204, 225, 127}: "Juniper Networks", - [3]byte{204, 225, 213}: "BUFFALO.INC", - [3]byte{204, 231, 152}: "My Social Stuff", - [3]byte{204, 231, 223}: "American Magnetics, Inc.", - [3]byte{204, 232, 172}: "SOYEA Technology Co.,Ltd.", - [3]byte{204, 234, 28}: "DCONWORKS Co., Ltd", - [3]byte{204, 238, 217}: "VAHLE DETO GmbH", - [3]byte{204, 239, 72}: "Cisco Systems, Inc", - [3]byte{204, 243, 165}: "Chi Mei Communication Systems, Inc", - [3]byte{204, 244, 7}: "EUKREA ELECTROMATIQUE SARL", - [3]byte{204, 245, 56}: "3isysnetworks", - [3]byte{204, 246, 122}: "Ayecka Communication Systems LTD", - [3]byte{204, 248, 65}: "Lumewave", - [3]byte{204, 248, 240}: "Xi'an HISU Multimedia Technology Co.,Ltd.", - [3]byte{204, 249, 84}: "Avaya Inc", - [3]byte{204, 249, 87}: "u-blox AG", - [3]byte{204, 249, 232}: "Samsung Electronics Co.,Ltd", - [3]byte{204, 250, 0}: "LG Electronics (Mobile Communications)", - [3]byte{204, 251, 101}: "Nintendo Co., Ltd.", - [3]byte{204, 252, 109}: "RIZ TRANSMITTERS", - [3]byte{204, 252, 177}: "Wireless Technology, Inc.", - [3]byte{204, 253, 23}: "TCT mobile ltd", - [3]byte{204, 254, 60}: "Samsung Electronics Co.,Ltd", - [3]byte{208, 3, 75}: "Apple, Inc.", - [3]byte{208, 4, 1}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{208, 4, 146}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{208, 5, 42}: "Arcadyan Corporation", - [3]byte{208, 7, 144}: "Texas Instruments", - [3]byte{208, 7, 202}: "Juniper Networks", - [3]byte{208, 10, 171}: "Yokogawa Digital Computer Corporation", - [3]byte{208, 14, 164}: "Porsche Cars North America", - [3]byte{208, 14, 217}: "Taicang T&W Electronics", - [3]byte{208, 15, 109}: "T&W Electronics Company", - [3]byte{208, 18, 66}: "BIOS Corporation", - [3]byte{208, 19, 30}: "Sunrex Technology Corp", - [3]byte{208, 19, 253}: "LG Electronics (Mobile Communications)", - [3]byte{208, 21, 74}: "zte corporation", - [3]byte{208, 23, 106}: "Samsung Electronics Co.,Ltd", - [3]byte{208, 23, 194}: "ASUSTek COMPUTER INC.", - [3]byte{208, 26, 167}: "UniPrint", - [3]byte{208, 28, 187}: "Beijing Ctimes Digital Technology Co., Ltd.", - [3]byte{208, 34, 18}: "IEEE Registration Authority", - [3]byte{208, 34, 190}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{208, 35, 219}: "Apple, Inc.", - [3]byte{208, 37, 22}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", - [3]byte{208, 37, 68}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{208, 37, 152}: "Apple, Inc.", - [3]byte{208, 39, 136}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{208, 44, 69}: "littleBits Electronics, Inc.", - [3]byte{208, 45, 179}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{208, 49, 16}: "Ingenic Semiconductor Co.,Ltd", - [3]byte{208, 49, 105}: "Samsung Electronics Co.,Ltd", - [3]byte{208, 51, 17}: "Apple, Inc.", - [3]byte{208, 55, 66}: "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd", - [3]byte{208, 55, 97}: "Texas Instruments", - [3]byte{208, 57, 114}: "Texas Instruments", - [3]byte{208, 57, 179}: "ARRIS Group, Inc.", - [3]byte{208, 61, 195}: "AQ Corporation", - [3]byte{208, 62, 92}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{208, 67, 30}: "Dell Inc.", - [3]byte{208, 70, 220}: "Southwest Research Institute", - [3]byte{208, 72, 243}: "DATTUS Inc", - [3]byte{208, 73, 139}: "ZOOM SERVER", - [3]byte{208, 76, 193}: "SINTRONES Technology Corp.", - [3]byte{208, 77, 44}: "Roku, Inc.", - [3]byte{208, 79, 126}: "Apple, Inc.", - [3]byte{208, 80, 153}: "ASRock Incorporation", - [3]byte{208, 81, 98}: "Sony Mobile Communications AB", - [3]byte{208, 82, 168}: "Physical Graph Corporation", - [3]byte{208, 83, 73}: "Liteon Technology Corporation", - [3]byte{208, 84, 45}: "Cambridge Industries(Group) Co.,Ltd.", - [3]byte{208, 85, 178}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{208, 87, 76}: "Cisco Systems, Inc", - [3]byte{208, 87, 123}: "Intel Corporate", - [3]byte{208, 87, 133}: "Pantech Co., Ltd.", - [3]byte{208, 87, 161}: "Werma Signaltechnik GmbH & Co. KG", - [3]byte{208, 88, 117}: "Active Control Technology Inc.", - [3]byte{208, 88, 168}: "zte corporation", - [3]byte{208, 89, 149}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{208, 89, 195}: "CeraMicro Technology Corporation", - [3]byte{208, 89, 228}: "Samsung Electronics Co.,Ltd", - [3]byte{208, 90, 0}: "Technicolor CH USA Inc.", - [3]byte{208, 90, 15}: "I-BT DIGITAL CO.,LTD", - [3]byte{208, 90, 241}: "Shenzhen Pulier Tech CO.,Ltd", - [3]byte{208, 91, 168}: "zte corporation", - [3]byte{208, 92, 122}: "Sartura d.o.o.", - [3]byte{208, 95, 184}: "Texas Instruments", - [3]byte{208, 95, 206}: "Hitachi Data Systems", - [3]byte{208, 96, 140}: "zte corporation", - [3]byte{208, 98, 160}: "China Essence Technology (Zhumadian) Co., Ltd.", - [3]byte{208, 99, 77}: "Meiko Maschinenbau GmbH & Co. KG", - [3]byte{208, 99, 180}: "SolidRun Ltd.", - [3]byte{208, 101, 202}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{208, 102, 109}: "Shenzhen Bus-Lan Technology Co., Ltd.", - [3]byte{208, 102, 123}: "Samsung Electronics Co.,Ltd", - [3]byte{208, 103, 38}: "Hewlett Packard Enterprise", - [3]byte{208, 103, 229}: "Dell Inc.", - [3]byte{208, 105, 158}: "LUMINEX Lighting Control Equipment", - [3]byte{208, 105, 208}: "Verto Medical Solutions, LLC", - [3]byte{208, 106, 31}: "BSE CO.,LTD.", - [3]byte{208, 111, 74}: "TOPWELL INTERNATIONAL HOLDINGS LIMITED", - [3]byte{208, 111, 130}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{208, 113, 196}: "zte corporation", - [3]byte{208, 114, 220}: "Cisco Systems, Inc", - [3]byte{208, 115, 127}: "Mini-Circuits", - [3]byte{208, 115, 142}: "DONG OH PRECISION CO., LTD.", - [3]byte{208, 115, 213}: "LIFI LABS MANAGEMENT PTY LTD", - [3]byte{208, 117, 190}: "Reno A&E", - [3]byte{208, 118, 80}: "IEEE Registration Authority", - [3]byte{208, 122, 181}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{208, 124, 45}: "Leie IOT technology Co., Ltd", - [3]byte{208, 125, 229}: "Forward Pay Systems, Inc.", - [3]byte{208, 126, 40}: "Hewlett Packard", - [3]byte{208, 126, 53}: "Intel Corporate", - [3]byte{208, 127, 196}: "Ou Wei Technology Co.,Ltd. of Shenzhen City", - [3]byte{208, 131, 212}: "Xtel Wireless ApS", - [3]byte{208, 132, 176}: "Sagemcom Broadband SAS", - [3]byte{208, 135, 226}: "Samsung Electronics Co.,Ltd", - [3]byte{208, 137, 153}: "APCON, Inc.", - [3]byte{208, 138, 85}: "Skullcandy", - [3]byte{208, 139, 126}: "Passif Semiconductor", - [3]byte{208, 140, 181}: "Texas Instruments", - [3]byte{208, 140, 255}: "UPWIS AB", - [3]byte{208, 146, 158}: "Microsoft Corporation", - [3]byte{208, 147, 128}: "Ducere Technologies Pvt. Ltd.", - [3]byte{208, 147, 248}: "Stonestreet One LLC", - [3]byte{208, 148, 102}: "Dell Inc.", - [3]byte{208, 149, 199}: "Pantech Co., Ltd.", - [3]byte{208, 150, 251}: "DASAN Network Solutions", - [3]byte{208, 153, 213}: "Alcatel-Lucent", - [3]byte{208, 155, 5}: "Emtronix", - [3]byte{208, 156, 48}: "Foster Electric Company, Limited", - [3]byte{208, 157, 10}: "LINKCOM", - [3]byte{208, 157, 171}: "TCT mobile ltd", - [3]byte{208, 160, 214}: "Chengdu TD Tech Ltd.", - [3]byte{208, 163, 17}: "Neuberger Gebäudeautomation GmbH", - [3]byte{208, 164, 177}: "Sonifex Ltd.", - [3]byte{208, 165, 166}: "Cisco Systems, Inc", - [3]byte{208, 166, 55}: "Apple, Inc.", - [3]byte{208, 174, 236}: "Alpha Networks Inc.", - [3]byte{208, 175, 182}: "Linktop Technology Co., LTD", - [3]byte{208, 176, 205}: "Moen", - [3]byte{208, 177, 40}: "Samsung Electronics Co.,Ltd", - [3]byte{208, 178, 196}: "Technicolor CH USA Inc.", - [3]byte{208, 179, 63}: "Shenzhen TINNO Mobile Technology Corp.", - [3]byte{208, 180, 152}: "Robert Bosch LLC Automotive Electronics", - [3]byte{208, 181, 35}: "Bestcare Cloucal Corp.", - [3]byte{208, 181, 61}: "SEPRO ROBOTIQUE", - [3]byte{208, 181, 194}: "Texas Instruments", - [3]byte{208, 186, 228}: "Shanghai MXCHIP Information Technology Co., Ltd.", - [3]byte{208, 187, 128}: "SHL Telemedicine International Ltd.", - [3]byte{208, 189, 1}: "DS International", - [3]byte{208, 190, 44}: "CNSLink Co., Ltd.", - [3]byte{208, 191, 156}: "Hewlett Packard", - [3]byte{208, 192, 191}: "Actions Microelectronics Co., Ltd", - [3]byte{208, 193, 147}: "SKYBELL, INC", - [3]byte{208, 193, 177}: "Samsung Electronics Co.,Ltd", - [3]byte{208, 194, 130}: "Cisco Systems, Inc", - [3]byte{208, 196, 47}: "Tamagawa Seiki Co.,Ltd.", - [3]byte{208, 197, 243}: "Apple, Inc.", - [3]byte{208, 199, 137}: "Cisco Systems, Inc", - [3]byte{208, 199, 192}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{208, 205, 225}: "Scientech Electronics", - [3]byte{208, 207, 94}: "Energy Micro AS", - [3]byte{208, 208, 75}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{208, 208, 253}: "Cisco Systems, Inc", - [3]byte{208, 210, 18}: "K2NET Co.,Ltd.", - [3]byte{208, 210, 134}: "Beckman Coulter K.K.", - [3]byte{208, 210, 176}: "Apple, Inc.", - [3]byte{208, 211, 252}: "Mios, Ltd.", - [3]byte{208, 212, 18}: "ADB Broadband Italia", - [3]byte{208, 212, 113}: "MVTECH co., Ltd", - [3]byte{208, 214, 204}: "Wintop", - [3]byte{208, 217, 79}: "IEEE Registration Authority", - [3]byte{208, 219, 50}: "Nokia Corporation", - [3]byte{208, 223, 154}: "Liteon Technology Corporation", - [3]byte{208, 223, 178}: "Genie Networks Limited", - [3]byte{208, 223, 199}: "Samsung Electronics Co.,Ltd", - [3]byte{208, 225, 64}: "Apple, Inc.", - [3]byte{208, 227, 71}: "Yoga", - [3]byte{208, 228, 11}: "Wearable Inc.", - [3]byte{208, 228, 74}: "Murata Manufacturing Co., Ltd.", - [3]byte{208, 229, 77}: "ARRIS Group, Inc.", - [3]byte{208, 231, 130}: "AzureWave Technology Inc.", - [3]byte{208, 235, 3}: "Zhehua technology limited", - [3]byte{208, 235, 158}: "Seowoo Inc.", - [3]byte{208, 240, 219}: "Ericsson", - [3]byte{208, 242, 127}: "SteadyServ Technoligies, LLC", - [3]byte{208, 247, 59}: "Helmut Mauell GmbH Werk Weida", - [3]byte{208, 248, 140}: "Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.", - [3]byte{208, 250, 29}: "Qihoo 360 Technology Co.,Ltd", - [3]byte{208, 252, 204}: "Samsung Electronics Co.,Ltd", - [3]byte{208, 255, 80}: "Texas Instruments", - [3]byte{208, 255, 152}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{212, 0, 13}: "Phoenix Broadband Technologies, LLC.", - [3]byte{212, 0, 87}: "MC Technologies GmbH", - [3]byte{212, 1, 41}: "Broadcom", - [3]byte{212, 1, 109}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{212, 2, 74}: "Delphian Systems LLC", - [3]byte{212, 4, 205}: "ARRIS Group, Inc.", - [3]byte{212, 4, 255}: "Juniper Networks", - [3]byte{212, 5, 152}: "ARRIS Group, Inc.", - [3]byte{212, 10, 169}: "ARRIS Group, Inc.", - [3]byte{212, 11, 26}: "HTC Corporation", - [3]byte{212, 11, 185}: "Solid Semecs bv.", - [3]byte{212, 15, 178}: "Applied Micro Electronics AME bv", - [3]byte{212, 16, 144}: "iNFORM Systems AG", - [3]byte{212, 16, 207}: "Huanshun Network Science and Technology Co., Ltd.", - [3]byte{212, 17, 214}: "ShotSpotter, Inc.", - [3]byte{212, 18, 150}: "Anobit Technologies Ltd.", - [3]byte{212, 18, 187}: "Quadrant Components Inc. Ltd", - [3]byte{212, 19, 111}: "Asia Pacific Brands", - [3]byte{212, 26, 63}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{212, 28, 28}: "RCF S.P.A.", - [3]byte{212, 29, 113}: "Palo Alto Networks", - [3]byte{212, 30, 53}: "TOHO Electronics INC.", - [3]byte{212, 31, 12}: "JAI Oy", - [3]byte{212, 32, 109}: "HTC Corporation", - [3]byte{212, 33, 34}: "Sercomm Corporation", - [3]byte{212, 34, 63}: "Lenovo Mobile Communication Technology Ltd.", - [3]byte{212, 34, 78}: "Alcatel Lucent", - [3]byte{212, 37, 139}: "Intel Corporate", - [3]byte{212, 39, 81}: "Infopia Co., Ltd", - [3]byte{212, 40, 178}: "ioBridge, Inc.", - [3]byte{212, 40, 213}: "TCT mobile ltd", - [3]byte{212, 41, 234}: "Zimory GmbH", - [3]byte{212, 44, 15}: "ARRIS Group, Inc.", - [3]byte{212, 44, 61}: "Sky Light Digital Limited", - [3]byte{212, 44, 68}: "Cisco Systems, Inc", - [3]byte{212, 47, 35}: "Akenori PTE Ltd", - [3]byte{212, 49, 157}: "Sinwatec", - [3]byte{212, 50, 102}: "Fike Corporation", - [3]byte{212, 54, 57}: "Texas Instruments", - [3]byte{212, 54, 219}: "Jiangsu Toppower Automotive Electronics Co., Ltd", - [3]byte{212, 55, 215}: "zte corporation", - [3]byte{212, 56, 156}: "Sony Mobile Communications AB", - [3]byte{212, 58, 101}: "IGRS Engineering Lab Ltd.", - [3]byte{212, 58, 233}: "DONGGUAN ipt INDUSTRIAL CO., LTD", - [3]byte{212, 61, 103}: "Carma Industries Inc.", - [3]byte{212, 61, 126}: "Micro-Star Int'l Co, Ltd", - [3]byte{212, 64, 240}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{212, 65, 101}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD", - [3]byte{212, 67, 168}: "Changzhou Haojie Electric Co., Ltd.", - [3]byte{212, 69, 232}: "Jiangxi Hongpai Technology Co., Ltd.", - [3]byte{212, 75, 94}: "TAIYO YUDEN CO., LTD.", - [3]byte{212, 76, 36}: "Vuppalamritha Magnetic Components LTD", - [3]byte{212, 76, 156}: "Shenzhen YOOBAO Technology Co.Ltd", - [3]byte{212, 76, 167}: "Informtekhnika & Communication, LLC", - [3]byte{212, 79, 128}: "Kemper Digital GmbH", - [3]byte{212, 80, 63}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{212, 80, 122}: "CEIVA Logic, Inc", - [3]byte{212, 82, 42}: "TangoWiFi.com", - [3]byte{212, 82, 81}: "IBT Ingenieurbureau Broennimann Thun", - [3]byte{212, 82, 151}: "nSTREAMS Technologies, Inc.", - [3]byte{212, 83, 175}: "VIGO System S.A.", - [3]byte{212, 85, 86}: "Fiber Mountain Inc.", - [3]byte{212, 85, 190}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD", - [3]byte{212, 90, 178}: "Galleon Systems", - [3]byte{212, 92, 112}: "Wi-Fi Alliance", - [3]byte{212, 93, 66}: "Nokia Corporation", - [3]byte{212, 93, 223}: "PEGATRON CORPORATION", - [3]byte{212, 95, 37}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{212, 97, 46}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{212, 97, 50}: "Pro Concept Manufacturer Co.,Ltd.", - [3]byte{212, 97, 157}: "Apple, Inc.", - [3]byte{212, 97, 254}: "Hangzhou H3C Technologies Co., Limited", - [3]byte{212, 99, 198}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{212, 99, 254}: "Arcadyan Corporation", - [3]byte{212, 100, 247}: "CHENGDU USEE DIGITAL TECHNOLOGY CO., LTD", - [3]byte{212, 102, 168}: "Riedo Networks GmbH", - [3]byte{212, 103, 97}: "SAHAB TECHNOLOGY", - [3]byte{212, 103, 231}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{212, 104, 77}: "Ruckus Wireless", - [3]byte{212, 104, 103}: "Neoventus Design Group", - [3]byte{212, 104, 186}: "Shenzhen Sundray Technologies Company Limited", - [3]byte{212, 106, 106}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{212, 106, 145}: "Snap AV", - [3]byte{212, 106, 168}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{212, 108, 191}: "Goodrich ISR", - [3]byte{212, 108, 218}: "CSM GmbH", - [3]byte{212, 109, 80}: "Cisco Systems, Inc", - [3]byte{212, 110, 14}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{212, 110, 92}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{212, 111, 66}: "WAXESS USA Inc", - [3]byte{212, 114, 8}: "Bragi GmbH", - [3]byte{212, 118, 234}: "zte corporation", - [3]byte{212, 120, 86}: "Avaya Inc", - [3]byte{212, 121, 195}: "Cameronet GmbH & Co. KG", - [3]byte{212, 122, 226}: "Samsung Electronics Co.,Ltd", - [3]byte{212, 123, 53}: "NEO Monitors AS", - [3]byte{212, 123, 117}: "HARTING Electronics GmbH", - [3]byte{212, 123, 176}: "ASKEY COMPUTER CORP", - [3]byte{212, 125, 252}: "TECNO MOBILE LIMITED", - [3]byte{212, 129, 202}: "iDevices, LLC", - [3]byte{212, 129, 215}: "Dell Inc.", - [3]byte{212, 130, 62}: "Argosy Technologies, Ltd.", - [3]byte{212, 131, 4}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD", - [3]byte{212, 133, 100}: "Hewlett Packard", - [3]byte{212, 135, 216}: "Samsung Electronics Co.,Ltd", - [3]byte{212, 136, 63}: "HDPRO CO., LTD.", - [3]byte{212, 136, 144}: "Samsung Electronics Co.,Ltd", - [3]byte{212, 140, 181}: "Cisco Systems, Inc", - [3]byte{212, 141, 217}: "Meld Technology, Inc", - [3]byte{212, 143, 51}: "Microsoft Corporation", - [3]byte{212, 143, 170}: "Sogecam Industrial, S.A.", - [3]byte{212, 144, 224}: "Topcon Electronics GmbH & Co. KG", - [3]byte{212, 145, 175}: "Electroacustica General Iberica, S.A.", - [3]byte{212, 147, 152}: "Nokia Corporation", - [3]byte{212, 147, 160}: "Fidelix Oy", - [3]byte{212, 148, 90}: "COSMO CO., LTD", - [3]byte{212, 148, 161}: "Texas Instruments", - [3]byte{212, 148, 232}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{212, 149, 36}: "Clover Network, Inc.", - [3]byte{212, 150, 223}: "SUNGJIN C&T CO.,LTD", - [3]byte{212, 151, 11}: "Xiaomi Communications Co Ltd", - [3]byte{212, 154, 32}: "Apple, Inc.", - [3]byte{212, 155, 92}: "Chongqing Miedu Technology Co., Ltd.", - [3]byte{212, 156, 40}: "JayBird LLC", - [3]byte{212, 156, 142}: "University of FUKUI", - [3]byte{212, 158, 109}: "Wuhan Zhongyuan Huadian Science & Technology Co.,", - [3]byte{212, 160, 42}: "Cisco Systems, Inc", - [3]byte{212, 161, 72}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{212, 164, 37}: "SMAX Technology Co., Ltd.", - [3]byte{212, 164, 153}: "InView Technology Corporation", - [3]byte{212, 169, 40}: "GreenWave Reality Inc", - [3]byte{212, 170, 255}: "MICRO WORLD", - [3]byte{212, 172, 78}: "BODi rS, LLC", - [3]byte{212, 173, 45}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{212, 174, 5}: "Samsung Electronics Co.,Ltd", - [3]byte{212, 174, 82}: "Dell Inc.", - [3]byte{212, 177, 16}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{212, 177, 105}: "Le Shi Zhi Xin Electronic Technology (Tianjin) Limited", - [3]byte{212, 178, 122}: "ARRIS Group, Inc.", - [3]byte{212, 180, 62}: "Messcomp Datentechnik GmbH", - [3]byte{212, 184, 255}: "Home Control Singapore Pte Ltd", - [3]byte{212, 190, 217}: "Dell Inc.", - [3]byte{212, 191, 45}: "SE Controls Asia Pacific Ltd", - [3]byte{212, 191, 127}: "UPVEL", - [3]byte{212, 193, 200}: "zte corporation", - [3]byte{212, 193, 252}: "Nokia Corporation", - [3]byte{212, 199, 102}: "Acentic GmbH", - [3]byte{212, 200, 176}: "Prime Electronics & Satellitics Inc.", - [3]byte{212, 201, 178}: "Quanergy Systems Inc", - [3]byte{212, 201, 239}: "Hewlett Packard", - [3]byte{212, 202, 109}: "Routerboard.com", - [3]byte{212, 202, 110}: "u-blox AG", - [3]byte{212, 203, 175}: "Nokia Corporation", - [3]byte{212, 206, 184}: "Enatel LTD", - [3]byte{212, 207, 55}: "Symbolic IO", - [3]byte{212, 207, 249}: "Shenzhen Sen5 Technology Co., Ltd.", - [3]byte{212, 209, 132}: "ADB Broadband Italia", - [3]byte{212, 210, 73}: "Power Ethernet", - [3]byte{212, 210, 229}: "BKAV Corporation", - [3]byte{212, 213, 13}: "Southwest Microwave, Inc", - [3]byte{212, 215, 72}: "Cisco Systems, Inc", - [3]byte{212, 215, 169}: "Shanghai Kaixiang Info Tech LTD", - [3]byte{212, 216, 152}: "Korea CNO Tech Co., Ltd", - [3]byte{212, 217, 25}: "GoPro", - [3]byte{212, 220, 205}: "Apple, Inc.", - [3]byte{212, 223, 87}: "Alpinion Medical Systems", - [3]byte{212, 224, 142}: "ValueHD Corporation", - [3]byte{212, 227, 44}: "S. Siedle & Sohne", - [3]byte{212, 227, 63}: "Nokia", - [3]byte{212, 232, 178}: "Samsung Electronics Co.,Ltd", - [3]byte{212, 233, 11}: "CVT CO.,LTD", - [3]byte{212, 234, 14}: "Avaya Inc", - [3]byte{212, 236, 12}: "Harley-Davidson Motor Company", - [3]byte{212, 236, 134}: "LinkedHope Intelligent Technologies Co., Ltd", - [3]byte{212, 238, 7}: "HIWIFI Co., Ltd.", - [3]byte{212, 240, 39}: "Navetas Energy Management", - [3]byte{212, 240, 180}: "Napco Security Technologies", - [3]byte{212, 241, 67}: "IPROAD.,Inc", - [3]byte{212, 242, 7}: "DIAODIAO(Beijing)Technology CO.,Ltd", - [3]byte{212, 244, 111}: "Apple, Inc.", - [3]byte{212, 244, 190}: "Palo Alto Networks", - [3]byte{212, 245, 19}: "Texas Instruments", - [3]byte{212, 246, 63}: "IEA S.R.L.", - [3]byte{212, 249, 161}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{216, 0, 77}: "Apple, Inc.", - [3]byte{216, 5, 46}: "Skyviia Corporation", - [3]byte{216, 6, 209}: "Honeywell Fire System (Shanghai) Co,. Ltd.", - [3]byte{216, 8, 49}: "Samsung Electronics Co.,Ltd", - [3]byte{216, 8, 245}: "Arcadia Networks Co. Ltd.", - [3]byte{216, 9, 195}: "Cercacor Labs", - [3]byte{216, 12, 207}: "C.G.V. S.A.S.", - [3]byte{216, 13, 227}: "FXI TECHNOLOGIES AS", - [3]byte{216, 15, 153}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{216, 20, 214}: "SURE SYSTEM Co Ltd", - [3]byte{216, 21, 13}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{216, 22, 10}: "Nippon Electro-Sensory Devices", - [3]byte{216, 22, 193}: "DEWAV (HK) ELECTRONICS LIMITED", - [3]byte{216, 24, 43}: "Conti Temic Microelectronic GmbH", - [3]byte{216, 25, 122}: "Nuheara Ltd", - [3]byte{216, 25, 206}: "Telesquare", - [3]byte{216, 27, 254}: "TWINLINX CORPORATION", - [3]byte{216, 28, 20}: "Compacta International, Ltd.", - [3]byte{216, 29, 114}: "Apple, Inc.", - [3]byte{216, 30, 222}: "B&W Group Ltd", - [3]byte{216, 31, 204}: "Brocade Communications Systems, Inc.", - [3]byte{216, 32, 159}: "Cubro Acronet GesmbH", - [3]byte{216, 34, 244}: "Avnet Silica", - [3]byte{216, 36, 189}: "Cisco Systems, Inc", - [3]byte{216, 37, 34}: "ARRIS Group, Inc.", - [3]byte{216, 37, 176}: "Rockeetech Systems Co.,Ltd.", - [3]byte{216, 38, 185}: "Guangdong Coagent Electronics S&T Co.,Ltd.", - [3]byte{216, 39, 12}: "MaxTronic International Co., Ltd.", - [3]byte{216, 40, 201}: "General Electric Consumer and Industrial", - [3]byte{216, 41, 22}: "Ascent Communication Technology", - [3]byte{216, 41, 134}: "Best Wish Technology LTD", - [3]byte{216, 42, 21}: "Leitner SpA", - [3]byte{216, 42, 126}: "Nokia Corporation", - [3]byte{216, 45, 155}: "Shenzhen G.Credit Communication Technology Co., Ltd", - [3]byte{216, 45, 225}: "Tricascade Inc.", - [3]byte{216, 48, 98}: "Apple, Inc.", - [3]byte{216, 49, 207}: "Samsung Electronics Co.,Ltd", - [3]byte{216, 50, 20}: "Tenda Technology Co.,Ltd.Dongguan branch", - [3]byte{216, 50, 90}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{216, 51, 127}: "Office FA.com Co.,Ltd.", - [3]byte{216, 55, 190}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT", - [3]byte{216, 56, 13}: "SHENZHEN IP-COM Network Co.,Ltd", - [3]byte{216, 56, 252}: "Ruckus Wireless", - [3]byte{216, 60, 105}: "Shenzhen TINNO Mobile Technology Corp.", - [3]byte{216, 66, 172}: "Shanghai Feixun Communication Co.,Ltd.", - [3]byte{216, 66, 226}: "Canary Connect, Inc.", - [3]byte{216, 67, 237}: "Suzuken", - [3]byte{216, 69, 43}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{216, 70, 6}: "Silicon Valley Global Marketing", - [3]byte{216, 71, 16}: "Sichuan Changhong Electric Ltd.", - [3]byte{216, 72, 238}: "Hangzhou Xueji Technology Co., Ltd.", - [3]byte{216, 73, 11}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{216, 73, 47}: "CANON INC.", - [3]byte{216, 74, 135}: "OI ELECTRIC CO.,LTD", - [3]byte{216, 75, 42}: "Cognitas Technologies, Inc.", - [3]byte{216, 79, 184}: "LG ELECTRONICS", - [3]byte{216, 80, 230}: "ASUSTek COMPUTER INC.", - [3]byte{216, 84, 58}: "Texas Instruments", - [3]byte{216, 84, 162}: "Aerohive Networks Inc.", - [3]byte{216, 85, 163}: "zte corporation", - [3]byte{216, 87, 239}: "Samsung Electronics Co.,Ltd", - [3]byte{216, 88, 215}: "CZ.NIC, z.s.p.o.", - [3]byte{216, 91, 42}: "Samsung Electronics Co.,Ltd", - [3]byte{216, 93, 76}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{216, 93, 132}: "CAx soft GmbH", - [3]byte{216, 93, 226}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{216, 93, 239}: "Busch-Jaeger Elektro GmbH", - [3]byte{216, 93, 251}: "Private", - [3]byte{216, 96, 176}: "bioMérieux Italia S.p.A.", - [3]byte{216, 96, 179}: "Guangdong Global Electronic Technology CO.,LTD", - [3]byte{216, 97, 98}: "Wistron Neweb Corporation", - [3]byte{216, 97, 148}: "Objetivos y Sevicios de Valor Añadido", - [3]byte{216, 98, 219}: "Eno Inc.", - [3]byte{216, 99, 117}: "Xiaomi Communications Co Ltd", - [3]byte{216, 101, 149}: "Toy's Myth Inc.", - [3]byte{216, 102, 198}: "Shenzhen Daystar Technology Co.,ltd", - [3]byte{216, 102, 238}: "BOXIN COMMUNICATION CO.,LTD.", - [3]byte{216, 103, 217}: "Cisco Systems, Inc", - [3]byte{216, 105, 96}: "Steinsvik", - [3]byte{216, 107, 247}: "Nintendo Co., Ltd.", - [3]byte{216, 108, 2}: "Huaqin Telecom Technology Co.,Ltd", - [3]byte{216, 108, 99}: "Google, Inc.", - [3]byte{216, 108, 233}: "Sagemcom Broadband SAS", - [3]byte{216, 113, 87}: "Lenovo Mobile Communication Technology Ltd.", - [3]byte{216, 116, 149}: "zte corporation", - [3]byte{216, 117, 51}: "Nokia Corporation", - [3]byte{216, 118, 10}: "Escort, Inc.", - [3]byte{216, 120, 229}: "KUHN SA", - [3]byte{216, 121, 136}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{216, 124, 221}: "SANIX INCORPORATED", - [3]byte{216, 126, 177}: "x.o.ware, inc.", - [3]byte{216, 128, 57}: "Microchip Technology Inc.", - [3]byte{216, 128, 60}: "Anhui Huami Information Technology Company Limited", - [3]byte{216, 129, 206}: "AHN INC.", - [3]byte{216, 132, 102}: "Extreme Networks, Inc.", - [3]byte{216, 135, 213}: "Leadcore Technology CO.,LTD", - [3]byte{216, 136, 206}: "RF Technology Pty Ltd", - [3]byte{216, 138, 59}: "UNIT-EM", - [3]byte{216, 139, 76}: "KingTing Tech.", - [3]byte{216, 141, 92}: "Elentec", - [3]byte{216, 143, 118}: "Apple, Inc.", - [3]byte{216, 144, 232}: "Samsung Electronics Co.,Ltd", - [3]byte{216, 147, 65}: "General Electric Global Research", - [3]byte{216, 148, 3}: "Hewlett Packard Enterprise", - [3]byte{216, 149, 47}: "Texas Instruments", - [3]byte{216, 150, 133}: "GoPro", - [3]byte{216, 150, 149}: "Apple, Inc.", - [3]byte{216, 150, 224}: "Alibaba Cloud Computing Ltd.", - [3]byte{216, 151, 59}: "Artesyn Embedded Technologies", - [3]byte{216, 151, 96}: "C2 Development, Inc.", - [3]byte{216, 151, 124}: "Grey Innovation", - [3]byte{216, 151, 186}: "PEGATRON CORPORATION", - [3]byte{216, 154, 52}: "Beijing SHENQI Technology Co., Ltd.", - [3]byte{216, 157, 103}: "Hewlett Packard", - [3]byte{216, 157, 185}: "eMegatech International Corp.", - [3]byte{216, 158, 63}: "Apple, Inc.", - [3]byte{216, 158, 243}: "Dell Inc.", - [3]byte{216, 160, 29}: "Espressif Inc.", - [3]byte{216, 161, 5}: "Syslane, Co., Ltd.", - [3]byte{216, 162, 94}: "Apple, Inc.", - [3]byte{216, 165, 52}: "Spectronix Corporation", - [3]byte{216, 173, 221}: "Sonavation, Inc.", - [3]byte{216, 174, 144}: "Itibia Technologies", - [3]byte{216, 175, 59}: "Hangzhou Bigbright Integrated communications system Co.,Ltd", - [3]byte{216, 175, 241}: "Panasonic Appliances Company", - [3]byte{216, 176, 46}: "Guangzhou Zonerich Business Machine Co., LTD.", - [3]byte{216, 176, 76}: "Jinan USR IOT Technology Co., Ltd.", - [3]byte{216, 177, 34}: "Juniper Networks", - [3]byte{216, 177, 42}: "Panasonic Mobile Communications Co.,Ltd.", - [3]byte{216, 177, 144}: "Cisco Systems, Inc", - [3]byte{216, 179, 119}: "HTC Corporation", - [3]byte{216, 182, 183}: "Comtrend Corporation", - [3]byte{216, 182, 193}: "NetworkAccountant, Inc.", - [3]byte{216, 182, 214}: "Blu Tether Limited", - [3]byte{216, 184, 246}: "Nantworks", - [3]byte{216, 185, 14}: "Triple Domain Vision Co.,Ltd.", - [3]byte{216, 187, 44}: "Apple, Inc.", - [3]byte{216, 191, 76}: "Victory Concept Electronics Limited", - [3]byte{216, 192, 104}: "Netgenetech.co.,ltd.", - [3]byte{216, 192, 106}: "Hunantv.com Interactive Entertainment Media Co.,Ltd.", - [3]byte{216, 195, 251}: "DETRACOM", - [3]byte{216, 196, 106}: "Murata Manufacturing Co., Ltd.", - [3]byte{216, 196, 151}: "Quanta Computer Inc.", - [3]byte{216, 196, 233}: "Samsung Electronics Co.,Ltd", - [3]byte{216, 198, 145}: "Hichan Technology Corp.", - [3]byte{216, 199, 113}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{216, 199, 200}: "Aruba Networks", - [3]byte{216, 200, 233}: "Phicomm (Shanghai) Co., Ltd.", - [3]byte{216, 201, 157}: "EA DISPLAY LIMITED", - [3]byte{216, 203, 138}: "Micro-Star INTL CO., LTD.", - [3]byte{216, 207, 156}: "Apple, Inc.", - [3]byte{216, 209, 203}: "Apple, Inc.", - [3]byte{216, 210, 124}: "JEMA ENERGY, SA", - [3]byte{216, 211, 133}: "Hewlett Packard", - [3]byte{216, 212, 60}: "Sony Corporation", - [3]byte{216, 213, 185}: "Rainforest Automation, Inc.", - [3]byte{216, 214, 126}: "GSK CNC EQUIPMENT CO.,LTD", - [3]byte{216, 215, 35}: "IDS, Inc", - [3]byte{216, 216, 102}: "SHENZHEN TOZED TECHNOLOGIES CO.,LTD.", - [3]byte{216, 218, 82}: "APATOR S.A.", - [3]byte{216, 220, 233}: "Kunshan Erlab ductless filtration system Co.,Ltd", - [3]byte{216, 221, 95}: "BALMUDA Inc.", - [3]byte{216, 221, 253}: "Texas Instruments", - [3]byte{216, 222, 206}: "ISUNG CO.,LTD", - [3]byte{216, 223, 13}: "beroNet GmbH", - [3]byte{216, 223, 122}: "Quest Software, Inc.", - [3]byte{216, 224, 4}: "Vodia Networks Inc", - [3]byte{216, 224, 184}: "BULAT LLC", - [3]byte{216, 224, 225}: "Samsung Electronics Co.,Ltd", - [3]byte{216, 227, 174}: "CIRTEC MEDICAL SYSTEMS", - [3]byte{216, 229, 109}: "TCT mobile ltd", - [3]byte{216, 231, 43}: "NetScout Systems, Inc.", - [3]byte{216, 231, 67}: "Wush, Inc", - [3]byte{216, 233, 82}: "KEOPSYS", - [3]byte{216, 235, 151}: "TRENDnet, Inc.", - [3]byte{216, 237, 28}: "Magna Technology SL", - [3]byte{216, 238, 120}: "Moog Protokraft", - [3]byte{216, 239, 205}: "Nokia", - [3]byte{216, 240, 242}: "Zeebo Inc", - [3]byte{216, 241, 240}: "Pepxim International Limited", - [3]byte{216, 247, 16}: "Libre Wireless Technologies Inc.", - [3]byte{216, 251, 17}: "AXACORE", - [3]byte{216, 251, 94}: "ASKEY COMPUTER CORP", - [3]byte{216, 251, 104}: "Cloud Corner Ltd.", - [3]byte{216, 252, 56}: "Giantec Semiconductor Inc", - [3]byte{216, 252, 147}: "Intel Corporate", - [3]byte{216, 254, 143}: "IDFone Co., Ltd.", - [3]byte{216, 254, 227}: "D-Link International", - [3]byte{220, 0, 119}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{220, 2, 101}: "Meditech Kft", - [3]byte{220, 2, 142}: "zte corporation", - [3]byte{220, 5, 47}: "National Products Inc.", - [3]byte{220, 5, 117}: "SIEMENS ENERGY AUTOMATION", - [3]byte{220, 5, 237}: "Nabtesco Corporation", - [3]byte{220, 7, 193}: "HangZhou QiYang Technology Co.,Ltd.", - [3]byte{220, 8, 86}: "Alcatel-Lucent Enterprise", - [3]byte{220, 9, 20}: "Talk-A-Phone Co.", - [3]byte{220, 9, 76}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{220, 11, 26}: "ADB Broadband Italia", - [3]byte{220, 11, 52}: "LG Electronics (Mobile Communications)", - [3]byte{220, 12, 45}: "WEIFANG GOERTEK ELECTRONICS CO.,LTD", - [3]byte{220, 12, 92}: "Apple, Inc.", - [3]byte{220, 13, 48}: "Shenzhen Feasycom Technology Co., Ltd.", - [3]byte{220, 14, 161}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{220, 21, 219}: "Ge Ruili Intelligent Technology ( Beijing ) Co., Ltd.", - [3]byte{220, 22, 162}: "Medtronic Diabetes", - [3]byte{220, 23, 90}: "Hitachi High-Technologies Corporation", - [3]byte{220, 23, 146}: "Captivate Network", - [3]byte{220, 26, 1}: "Ecoliv Technology ( Shenzhen ) Ltd.", - [3]byte{220, 26, 197}: "vivo Mobile Communication Co., Ltd.", - [3]byte{220, 29, 159}: "U & B tech", - [3]byte{220, 29, 212}: "Microstep-MIS spol. s r.o.", - [3]byte{220, 30, 163}: "Accensus LLC", - [3]byte{220, 32, 8}: "ASD Electronics Ltd", - [3]byte{220, 40, 52}: "HAKKO Corporation", - [3]byte{220, 41, 58}: "Shenzhen Nuoshi Technology Co., LTD.", - [3]byte{220, 42, 20}: "Shanghai Longjing Technology Co.", - [3]byte{220, 43, 42}: "Apple, Inc.", - [3]byte{220, 43, 97}: "Apple, Inc.", - [3]byte{220, 43, 102}: "InfoBLOCK S.A. de C.V.", - [3]byte{220, 43, 202}: "Zera GmbH", - [3]byte{220, 44, 38}: "Iton Technology Limited", - [3]byte{220, 45, 203}: "Beijing Unis HengYue Technology Co., Ltd.", - [3]byte{220, 46, 106}: "HCT. Co., Ltd.", - [3]byte{220, 47, 3}: "Step forward Group Co., Ltd.", - [3]byte{220, 48, 156}: "Heyrex Limited", - [3]byte{220, 51, 13}: "Qingdao Haier Telecom Co.,Ltd", - [3]byte{220, 51, 80}: "TechSAT GmbH", - [3]byte{220, 53, 241}: "Positivo Informática SA.", - [3]byte{220, 55, 20}: "Apple, Inc.", - [3]byte{220, 55, 82}: "GE", - [3]byte{220, 55, 210}: "Hunan HKT Electronic Technology Co., Ltd", - [3]byte{220, 56, 225}: "Juniper Networks", - [3]byte{220, 57, 121}: "Skyport Systems", - [3]byte{220, 58, 94}: "Roku, Inc.", - [3]byte{220, 60, 46}: "Manufacturing System Insights, Inc.", - [3]byte{220, 60, 132}: "Ticom Geomatics, Inc.", - [3]byte{220, 60, 246}: "Atomic Rules LLC", - [3]byte{220, 62, 81}: "Solberg & Andersen AS", - [3]byte{220, 62, 248}: "Nokia Corporation", - [3]byte{220, 65, 95}: "Apple, Inc.", - [3]byte{220, 68, 39}: "IEEE Registration Authority", - [3]byte{220, 68, 109}: "Allwinner Technology Co., Ltd", - [3]byte{220, 68, 182}: "Samsung Electronics Co.,Ltd", - [3]byte{220, 69, 23}: "ARRIS Group, Inc.", - [3]byte{220, 72, 178}: "Baraja Pty. Ltd.", - [3]byte{220, 73, 201}: "CASCO SIGNAL LTD", - [3]byte{220, 74, 62}: "Hewlett Packard", - [3]byte{220, 77, 35}: "MRV Comunications", - [3]byte{220, 78, 222}: "SHINYEI TECHNOLOGY CO., LTD.", - [3]byte{220, 79, 34}: "Espressif Inc.", - [3]byte{220, 83, 96}: "Intel Corporate", - [3]byte{220, 83, 124}: "Compal Broadband Networks, Inc.", - [3]byte{220, 85, 131}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{220, 86, 230}: "Shenzhen Bococom Technology Co.,LTD", - [3]byte{220, 87, 38}: "Power-One", - [3]byte{220, 94, 54}: "Paterson Technology", - [3]byte{220, 96, 161}: "Teledyne DALSA Professional Imaging", - [3]byte{220, 100, 124}: "C.R.S. iiMotion GmbH", - [3]byte{220, 100, 184}: "Shenzhen JingHanDa Electronics Co.Ltd", - [3]byte{220, 102, 58}: "Apacer Technology Inc.", - [3]byte{220, 102, 114}: "Samsung Electronics Co.,Ltd", - [3]byte{220, 104, 235}: "Nintendo Co.,Ltd", - [3]byte{220, 106, 234}: "Infinix mobility limited", - [3]byte{220, 109, 205}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{220, 111, 0}: "Livescribe, Inc.", - [3]byte{220, 111, 8}: "Bay Storage Technology", - [3]byte{220, 112, 20}: "Private", - [3]byte{220, 113, 68}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{220, 116, 168}: "Samsung Electronics Co.,Ltd", - [3]byte{220, 120, 52}: "LOGICOM SA", - [3]byte{220, 123, 148}: "Cisco Systems, Inc", - [3]byte{220, 127, 164}: "2Wire Inc", - [3]byte{220, 130, 91}: "JANUS, spol. s r.o.", - [3]byte{220, 130, 246}: "iPort", - [3]byte{220, 133, 222}: "AzureWave Technology Inc.", - [3]byte{220, 134, 216}: "Apple, Inc.", - [3]byte{220, 154, 142}: "Nanjing Cocomm electronics co., LTD", - [3]byte{220, 155, 30}: "Intercom, Inc.", - [3]byte{220, 155, 156}: "Apple, Inc.", - [3]byte{220, 156, 82}: "Sapphire Technology Limited.", - [3]byte{220, 156, 159}: "Shenzhen YOUHUA Technology Co., Ltd", - [3]byte{220, 159, 164}: "Nokia Corporation", - [3]byte{220, 159, 219}: "Ubiquiti Networks Inc.", - [3]byte{220, 163, 172}: "RBcloudtech", - [3]byte{220, 164, 202}: "Apple, Inc.", - [3]byte{220, 165, 244}: "Cisco Systems, Inc", - [3]byte{220, 166, 189}: "Beijing Lanbo Technology Co., Ltd.", - [3]byte{220, 167, 217}: "Compressor Controls Corp", - [3]byte{220, 168, 207}: "New Spin Golf, LLC.", - [3]byte{220, 169, 4}: "Apple, Inc.", - [3]byte{220, 169, 113}: "Intel Corporate", - [3]byte{220, 169, 137}: "MACANDC", - [3]byte{220, 173, 158}: "GreenPriz", - [3]byte{220, 174, 4}: "CELOXICA Ltd", - [3]byte{220, 176, 88}: "Bürkert Werke GmbH", - [3]byte{220, 179, 180}: "Honeywell Environmental & Combustion Controls (Tianjin) Co., Ltd.", - [3]byte{220, 180, 196}: "Microsoft XCG", - [3]byte{220, 190, 122}: "Zhejiang Nurotron Biotechnology Co.", - [3]byte{220, 191, 144}: "HUIZHOU QIAOXING TELECOMMUNICATION INDUSTRY CO.,LTD.", - [3]byte{220, 191, 233}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{220, 192, 219}: "Shenzhen Kaiboer Technology Co., Ltd.", - [3]byte{220, 192, 235}: "ASSA ABLOY CÔTE PICARDE", - [3]byte{220, 193, 1}: "SOLiD Technologies, Inc.", - [3]byte{220, 196, 34}: "Systembase Limited", - [3]byte{220, 198, 34}: "BUHEUNG SYSTEM", - [3]byte{220, 198, 75}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{220, 199, 147}: "Nokia Corporation", - [3]byte{220, 200, 245}: "Shanghai UMEinfo CO.,LTD.", - [3]byte{220, 203, 168}: "Explora Technologies Inc", - [3]byte{220, 206, 65}: "FE GLOBAL HONG KONG LIMITED", - [3]byte{220, 206, 188}: "Shenzhen JSR Technology Co.,Ltd.", - [3]byte{220, 206, 193}: "Cisco Systems, Inc", - [3]byte{220, 207, 148}: "Beijing Rongcheng Hutong Technology Co., Ltd.", - [3]byte{220, 207, 150}: "Samsung Electronics Co.,Ltd", - [3]byte{220, 208, 247}: "Bentek Systems Ltd.", - [3]byte{220, 210, 85}: "Kinpo Electronics, Inc.", - [3]byte{220, 210, 252}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{220, 211, 33}: "HUMAX Co., Ltd.", - [3]byte{220, 213, 42}: "Sunny Heart Limited", - [3]byte{220, 216, 124}: "Beijing Jingdong Century Trading Co., LTD.", - [3]byte{220, 216, 127}: "Shenzhen JoinCyber Telecom Equipment Ltd", - [3]byte{220, 217, 22}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{220, 218, 79}: "GETCK TECHNOLOGY, INC", - [3]byte{220, 219, 112}: "Tonfunk Systementwicklung und Service GmbH", - [3]byte{220, 220, 7}: "TRP Systems BV", - [3]byte{220, 222, 202}: "Akyllor", - [3]byte{220, 224, 38}: "Patrol Tag, Inc", - [3]byte{220, 225, 173}: "Shenzhen Wintop Photoelectric Technology Co., Ltd", - [3]byte{220, 226, 172}: "Lumens Digital Optics Inc.", - [3]byte{220, 229, 120}: "Experimental Factory of Scientific Engineering and Special Design Department", - [3]byte{220, 231, 28}: "AUG Elektronik GmbH", - [3]byte{220, 232, 56}: "CK Telecom (Shenzhen) Limited", - [3]byte{220, 235, 83}: "Wuhan QianXiao Elecronic Technology CO.,LTD", - [3]byte{220, 235, 148}: "Cisco Systems, Inc", - [3]byte{220, 236, 6}: "Heimi Network Technology Co., Ltd.", - [3]byte{220, 238, 6}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{220, 239, 9}: "NETGEAR", - [3]byte{220, 239, 202}: "Murata Manufacturing Co., Ltd.", - [3]byte{220, 240, 93}: "Letta Teknoloji", - [3]byte{220, 240, 144}: "Nubia Technology Co.,Ltd.", - [3]byte{220, 241, 16}: "Nokia Corporation", - [3]byte{220, 247, 85}: "SITRONIK", - [3]byte{220, 248, 88}: "Lorent Networks, Inc.", - [3]byte{220, 250, 213}: "STRONG Ges.m.b.H.", - [3]byte{220, 251, 2}: "BUFFALO.INC", - [3]byte{220, 254, 7}: "PEGATRON CORPORATION", - [3]byte{220, 254, 24}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{224, 3, 112}: "ShenZhen Continental Wireless Technology Co., Ltd.", - [3]byte{224, 5, 197}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{224, 6, 230}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{224, 7, 27}: "Hewlett Packard Enterprise", - [3]byte{224, 11, 40}: "Inovonics", - [3]byte{224, 12, 127}: "Nintendo Co., Ltd.", - [3]byte{224, 13, 185}: "Cree, Inc.", - [3]byte{224, 14, 218}: "Cisco Systems, Inc", - [3]byte{224, 16, 127}: "Ruckus Wireless", - [3]byte{224, 20, 62}: "Modoosis Inc.", - [3]byte{224, 24, 119}: "FUJITSU LIMITED", - [3]byte{224, 25, 29}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{224, 26, 234}: "Allied Telesis, Inc.", - [3]byte{224, 28, 65}: "Aerohive Networks Inc.", - [3]byte{224, 28, 238}: "Bravo Tech, Inc.", - [3]byte{224, 29, 56}: "Beijing HuaqinWorld Technology Co.,Ltd", - [3]byte{224, 29, 59}: "Cambridge Industries(Group) Co.,Ltd.", - [3]byte{224, 30, 7}: "Anite Telecoms US. Inc", - [3]byte{224, 31, 10}: "Xslent Energy Technologies. LLC", - [3]byte{224, 34, 2}: "ARRIS Group, Inc.", - [3]byte{224, 36, 127}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{224, 37, 56}: "Titan Pet Products", - [3]byte{224, 38, 48}: "Intrigue Technologies, Inc.", - [3]byte{224, 38, 54}: "Nortel Networks", - [3]byte{224, 39, 26}: "TTC Next-generation Home Network System WG", - [3]byte{224, 40, 97}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{224, 40, 109}: "AVM Audiovisuelles Marketing und Computersysteme GmbH", - [3]byte{224, 42, 130}: "Universal Global Scientific Industrial Co., Ltd.", - [3]byte{224, 44, 178}: "Lenovo Mobile Communication (Wuhan) Company Limited", - [3]byte{224, 44, 243}: "MRS Electronic GmbH", - [3]byte{224, 47, 109}: "Cisco Systems, Inc", - [3]byte{224, 48, 5}: "Alcatel-Lucent Shanghai Bell Co., Ltd", - [3]byte{224, 49, 158}: "Valve Corporation", - [3]byte{224, 49, 208}: "SZ Telstar CO., LTD", - [3]byte{224, 52, 228}: "Feit Electric Company, Inc.", - [3]byte{224, 53, 96}: "Challenger Supply Holdings, LLC", - [3]byte{224, 54, 118}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{224, 54, 227}: "Stage One International Co., Ltd.", - [3]byte{224, 55, 191}: "Wistron Neweb Corporation", - [3]byte{224, 57, 215}: "Plexxi, Inc.", - [3]byte{224, 60, 91}: "SHENZHEN JIAXINJIE ELECTRON CO.,LTD", - [3]byte{224, 62, 68}: "Broadcom", - [3]byte{224, 62, 74}: "Cavanagh Group International", - [3]byte{224, 62, 125}: "data-complex GmbH", - [3]byte{224, 63, 73}: "ASUSTek COMPUTER INC.", - [3]byte{224, 65, 54}: "MitraStar Technology Corp.", - [3]byte{224, 67, 219}: "Shenzhen ViewAt Technology Co.,Ltd.", - [3]byte{224, 70, 154}: "NETGEAR", - [3]byte{224, 72, 175}: "Premietech Limited", - [3]byte{224, 72, 211}: "MOBIWIRE MOBILES (NINGBO) CO.,LTD", - [3]byte{224, 75, 69}: "Hi-P Electronics Pte Ltd", - [3]byte{224, 79, 67}: "Universal Global Scientific Industrial Co., Ltd.", - [3]byte{224, 79, 189}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD", - [3]byte{224, 80, 139}: "Zhejiang Dahua Technology Co., Ltd.", - [3]byte{224, 81, 36}: "NXP Semiconductors", - [3]byte{224, 81, 99}: "Arcadyan Corporation", - [3]byte{224, 85, 61}: "Cisco Meraki", - [3]byte{224, 85, 151}: "Emergent Vision Technologies Inc.", - [3]byte{224, 86, 244}: "AxesNetwork Solutions inc.", - [3]byte{224, 88, 158}: "Laerdal Medical", - [3]byte{224, 91, 112}: "Innovid, Co., Ltd.", - [3]byte{224, 93, 166}: "Detlef Fink Elektronik & Softwareentwicklung", - [3]byte{224, 95, 69}: "Apple, Inc.", - [3]byte{224, 95, 185}: "Cisco Systems, Inc", - [3]byte{224, 96, 102}: "Sercomm Corporation", - [3]byte{224, 96, 137}: "Cloudleaf, Inc.", - [3]byte{224, 97, 178}: "HANGZHOU ZENOINTEL TECHNOLOGY CO., LTD", - [3]byte{224, 98, 144}: "Jinan Jovision Science & Technology Co., Ltd.", - [3]byte{224, 99, 229}: "Sony Mobile Communications AB", - [3]byte{224, 100, 187}: "DigiView S.r.l.", - [3]byte{224, 102, 120}: "Apple, Inc.", - [3]byte{224, 103, 179}: "C-Data Technology Co., Ltd", - [3]byte{224, 104, 109}: "Raybased AB", - [3]byte{224, 105, 149}: "PEGATRON CORPORATION", - [3]byte{224, 117, 10}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{224, 117, 125}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{224, 118, 208}: "AMPAK Technology, Inc.", - [3]byte{224, 120, 163}: "Shanghai Winner Information Technology Co.,Inc", - [3]byte{224, 124, 19}: "zte corporation", - [3]byte{224, 124, 98}: "Whistle Labs, Inc.", - [3]byte{224, 127, 83}: "TECHBOARD SRL", - [3]byte{224, 127, 136}: "EVIDENCE Network SIA", - [3]byte{224, 129, 119}: "GreenBytes, Inc.", - [3]byte{224, 132, 243}: "High Grade Controls Corporation", - [3]byte{224, 135, 177}: "Nata-Info Ltd.", - [3]byte{224, 136, 93}: "Technicolor CH USA Inc.", - [3]byte{224, 137, 157}: "Cisco Systems, Inc", - [3]byte{224, 138, 126}: "Exponent", - [3]byte{224, 142, 60}: "Aztech Electronics Pte Ltd", - [3]byte{224, 143, 236}: "REPOTEC CO., LTD.", - [3]byte{224, 145, 83}: "XAVi Technologies Corp.", - [3]byte{224, 145, 245}: "NETGEAR", - [3]byte{224, 148, 103}: "Intel Corporate", - [3]byte{224, 149, 121}: "ORTHOsoft inc, d/b/a Zimmer CAS", - [3]byte{224, 151, 150}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{224, 151, 242}: "Atomax Inc.", - [3]byte{224, 152, 97}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{224, 153, 113}: "Samsung Electronics Co.,Ltd", - [3]byte{224, 157, 49}: "Intel Corporate", - [3]byte{224, 157, 184}: "PLANEX COMMUNICATIONS INC.", - [3]byte{224, 157, 250}: "Wanan Hongsheng Electronic Co.Ltd", - [3]byte{224, 161, 152}: "NOJA Power Switchgear Pty Ltd", - [3]byte{224, 161, 215}: "SFR", - [3]byte{224, 163, 15}: "Pevco", - [3]byte{224, 163, 172}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{224, 166, 112}: "Nokia Corporation", - [3]byte{224, 167, 0}: "Verkada Inc", - [3]byte{224, 168, 184}: "Le Shi Zhi Xin Electronic Technology (Tianjin) Limited", - [3]byte{224, 170, 150}: "Samsung Electronics Co.,Ltd", - [3]byte{224, 170, 176}: "GENERAL VISION ELECTRONICS CO. LTD.", - [3]byte{224, 170, 219}: "Nanjing PANENG Technology Development Co.,Ltd", - [3]byte{224, 171, 254}: "Orb Networks, Inc.", - [3]byte{224, 172, 203}: "Apple, Inc.", - [3]byte{224, 172, 241}: "Cisco Systems, Inc", - [3]byte{224, 174, 94}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{224, 174, 178}: "Bender GmbH & Co.KG", - [3]byte{224, 174, 237}: "LOENK", - [3]byte{224, 175, 75}: "Pluribus Networks, Inc.", - [3]byte{224, 178, 241}: "FN-LINK TECHNOLOGY LIMITED", - [3]byte{224, 181, 45}: "Apple, Inc.", - [3]byte{224, 182, 245}: "IEEE Registration Authority", - [3]byte{224, 183, 10}: "ARRIS Group, Inc.", - [3]byte{224, 183, 177}: "ARRIS Group, Inc.", - [3]byte{224, 185, 77}: "SHENZHEN BILIAN ELECTRONIC CO.,LTD", - [3]byte{224, 185, 165}: "AzureWave Technology Inc.", - [3]byte{224, 185, 186}: "Apple, Inc.", - [3]byte{224, 185, 229}: "Technicolor", - [3]byte{224, 188, 67}: "C2 Microsystems, Inc.", - [3]byte{224, 192, 209}: "CK Telecom (Shenzhen) Limited", - [3]byte{224, 194, 134}: "Aisai Communication Technology Co., Ltd.", - [3]byte{224, 194, 183}: "Masimo Corporation", - [3]byte{224, 195, 243}: "zte corporation", - [3]byte{224, 198, 179}: "MilDef AB", - [3]byte{224, 199, 103}: "Apple, Inc.", - [3]byte{224, 199, 157}: "Texas Instruments", - [3]byte{224, 200, 106}: "SHENZHEN TW-SCIE Co., Ltd", - [3]byte{224, 201, 34}: "Jireh Energy Tech., Ltd.", - [3]byte{224, 201, 122}: "Apple, Inc.", - [3]byte{224, 202, 77}: "Shenzhen Unistar Communication Co.,LTD", - [3]byte{224, 202, 148}: "ASKEY COMPUTER CORP", - [3]byte{224, 203, 29}: "Private", - [3]byte{224, 203, 78}: "ASUSTek COMPUTER INC.", - [3]byte{224, 203, 188}: "Cisco Meraki", - [3]byte{224, 203, 238}: "Samsung Electronics Co.,Ltd", - [3]byte{224, 205, 253}: "Beijing E3Control Technology Co, LTD", - [3]byte{224, 206, 195}: "ASKEY COMPUTER CORP", - [3]byte{224, 207, 45}: "Gemintek Corporation", - [3]byte{224, 209, 10}: "Katoudenkikougyousyo co ltd", - [3]byte{224, 209, 115}: "Cisco Systems, Inc", - [3]byte{224, 209, 230}: "Aliph dba Jawbone", - [3]byte{224, 211, 26}: "EQUES Technology Co., Limited", - [3]byte{224, 213, 94}: "GIGA-BYTE TECHNOLOGY CO.,LTD.", - [3]byte{224, 215, 186}: "Texas Instruments", - [3]byte{224, 216, 72}: "Dell Inc.", - [3]byte{224, 217, 162}: "Hippih aps", - [3]byte{224, 217, 227}: "Eltex Enterprise Ltd.", - [3]byte{224, 218, 220}: "JVC KENWOOD Corporation", - [3]byte{224, 219, 16}: "Samsung Electronics Co.,Ltd", - [3]byte{224, 219, 85}: "Dell Inc.", - [3]byte{224, 219, 136}: "Open Standard Digital-IF Interface for SATCOM Systems", - [3]byte{224, 220, 160}: "Siemens Industrial Automation Products Ltd Chengdu", - [3]byte{224, 221, 192}: "vivo Mobile Communication Co., Ltd.", - [3]byte{224, 229, 207}: "Texas Instruments", - [3]byte{224, 230, 49}: "SNB TECHNOLOGIES LIMITED", - [3]byte{224, 231, 81}: "Nintendo Co., Ltd.", - [3]byte{224, 231, 187}: "Nureva, Inc.", - [3]byte{224, 232, 232}: "Olive Telecommunication Pvt. Ltd", - [3]byte{224, 237, 26}: "vastriver Technology Co., Ltd", - [3]byte{224, 237, 199}: "Shenzhen Friendcom Technology Development Co., Ltd", - [3]byte{224, 238, 27}: "Panasonic Automotive Systems Company of America", - [3]byte{224, 239, 37}: "Lintes Technology Co., Ltd.", - [3]byte{224, 242, 17}: "Digitalwatt", - [3]byte{224, 243, 121}: "Vaddio", - [3]byte{224, 245, 198}: "Apple, Inc.", - [3]byte{224, 245, 202}: "CHENG UEI PRECISION INDUSTRY CO.,LTD.", - [3]byte{224, 248, 71}: "Apple, Inc.", - [3]byte{224, 249, 190}: "Cloudena Corp.", - [3]byte{224, 250, 236}: "Platan sp. z o.o. sp. k.", - [3]byte{224, 255, 247}: "Softiron Inc.", - [3]byte{228, 2, 155}: "Intel Corporate", - [3]byte{228, 4, 57}: "TomTom Software Ltd", - [3]byte{228, 17, 91}: "Hewlett Packard", - [3]byte{228, 18, 24}: "ShenZhen Rapoo Technology Co., Ltd.", - [3]byte{228, 18, 29}: "Samsung Electronics Co.,Ltd", - [3]byte{228, 18, 137}: "topsystem Systemhaus GmbH", - [3]byte{228, 23, 216}: "8BITDO TECHNOLOGY HK LIMITED", - [3]byte{228, 24, 107}: "Zyxel Communications Corporation", - [3]byte{228, 26, 44}: "ZPE Systems, Inc.", - [3]byte{228, 28, 75}: "V2 TECHNOLOGY, INC.", - [3]byte{228, 29, 45}: "Mellanox Technologies, Inc.", - [3]byte{228, 31, 19}: "IBM Corp", - [3]byte{228, 34, 165}: "PLANTRONICS, INC.", - [3]byte{228, 35, 84}: "SHENZHEN FUZHI SOFTWARE TECHNOLOGY CO.,LTD", - [3]byte{228, 37, 231}: "Apple, Inc.", - [3]byte{228, 37, 233}: "Color-Chip", - [3]byte{228, 39, 113}: "Smartlabs", - [3]byte{228, 42, 211}: "Magneti Marelli S.p.A. Powertrain", - [3]byte{228, 43, 52}: "Apple, Inc.", - [3]byte{228, 44, 86}: "Lilee Systems, Ltd.", - [3]byte{228, 45, 2}: "TCT mobile ltd", - [3]byte{228, 47, 38}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{228, 47, 86}: "OptoMET GmbH", - [3]byte{228, 47, 246}: "Unicore communication Inc.", - [3]byte{228, 50, 203}: "Samsung Electronics Co.,Ltd", - [3]byte{228, 53, 147}: "Hangzhou GoTo technology Co.Ltd", - [3]byte{228, 53, 200}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{228, 53, 251}: "Sabre Technology (Hull) Ltd", - [3]byte{228, 55, 215}: "HENRI DEPAEPE S.A.S.", - [3]byte{228, 56, 242}: "Advantage Controls", - [3]byte{228, 58, 110}: "Shenzhen Zeroone Technology CO.,LTD", - [3]byte{228, 62, 215}: "Arcadyan Corporation", - [3]byte{228, 63, 162}: "Wuxi DSP Technologies Inc.", - [3]byte{228, 64, 226}: "Samsung Electronics Co.,Ltd", - [3]byte{228, 65, 230}: "Ottec Technology GmbH", - [3]byte{228, 66, 166}: "Intel Corporate", - [3]byte{228, 70, 189}: "C&C TECHNIC TAIWAN CO., LTD.", - [3]byte{228, 70, 218}: "Xiaomi Communications Co Ltd", - [3]byte{228, 71, 144}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{228, 72, 199}: "Cisco SPVTG", - [3]byte{228, 76, 108}: "Shenzhen Guo Wei Electronic Co,. Ltd.", - [3]byte{228, 78, 24}: "Gardasoft VisionLimited", - [3]byte{228, 79, 41}: "MA Lighting Technology GmbH", - [3]byte{228, 79, 95}: "EDS Elektronik Destek San.Tic.Ltd.Sti", - [3]byte{228, 80, 154}: "HW Communications Ltd", - [3]byte{228, 85, 234}: "Dedicated Computing", - [3]byte{228, 86, 20}: "Suttle Apparatus", - [3]byte{228, 87, 64}: "ARRIS Group, Inc.", - [3]byte{228, 87, 168}: "Stuart Manufacturing, Inc.", - [3]byte{228, 88, 184}: "Samsung Electronics Co.,Ltd", - [3]byte{228, 88, 231}: "Samsung Electronics Co.,Ltd", - [3]byte{228, 90, 162}: "vivo Mobile Communication Co., Ltd.", - [3]byte{228, 93, 81}: "SFR", - [3]byte{228, 93, 82}: "Avaya Inc", - [3]byte{228, 93, 117}: "Samsung Electronics Co.,Ltd", - [3]byte{228, 98, 81}: "HAO CHENG GROUP LIMITED", - [3]byte{228, 100, 73}: "ARRIS Group, Inc.", - [3]byte{228, 103, 186}: "Danish Interpretation Systems A/S", - [3]byte{228, 104, 163}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{228, 105, 90}: "Dictum Health, Inc.", - [3]byte{228, 108, 33}: "messMa GmbH", - [3]byte{228, 111, 19}: "D-Link International", - [3]byte{228, 112, 184}: "Intel Corporate", - [3]byte{228, 113, 133}: "Securifi Ltd", - [3]byte{228, 114, 226}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{228, 117, 30}: "Getinge Sterilization AB", - [3]byte{228, 119, 35}: "zte corporation", - [3]byte{228, 119, 107}: "AARTESYS AG", - [3]byte{228, 119, 212}: "Minrray Industry Co.,Ltd", - [3]byte{228, 123, 63}: "BEIJING CO-CLOUD TECHNOLOGY LTD.", - [3]byte{228, 124, 249}: "Samsung Electronics Co.,Ltd", - [3]byte{228, 125, 90}: "Beijing Hanbang Technology Corp.", - [3]byte{228, 125, 189}: "Samsung Electronics Co.,Ltd", - [3]byte{228, 125, 235}: "Shanghai Notion Information Technology CO.,LTD.", - [3]byte{228, 126, 102}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{228, 127, 178}: "FUJITSU LIMITED", - [3]byte{228, 129, 132}: "Nokia", - [3]byte{228, 129, 179}: "Shenzhen ACT Industrial Co.,Ltd.", - [3]byte{228, 131, 153}: "ARRIS Group, Inc.", - [3]byte{228, 133, 1}: "Geberit International AG", - [3]byte{228, 138, 213}: "RF WINDOW CO., LTD.", - [3]byte{228, 139, 127}: "Apple, Inc.", - [3]byte{228, 140, 15}: "Discovery Insure", - [3]byte{228, 141, 140}: "Routerboard.com", - [3]byte{228, 143, 52}: "Vodafone Italia S.p.A.", - [3]byte{228, 144, 105}: "Rockwell Automation", - [3]byte{228, 144, 126}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{228, 146, 231}: "Gridlink Tech. Co.,Ltd.", - [3]byte{228, 146, 251}: "Samsung Electronics Co.,Ltd", - [3]byte{228, 149, 110}: "IEEE Registration Authority", - [3]byte{228, 150, 174}: "ALTOGRAPHICS Inc.", - [3]byte{228, 151, 240}: "Shanghai VLC Technologies Ltd. Co.", - [3]byte{228, 152, 209}: "Microsoft Mobile Oy", - [3]byte{228, 152, 214}: "Apple, Inc.", - [3]byte{228, 154, 121}: "Apple, Inc.", - [3]byte{228, 154, 220}: "Apple, Inc.", - [3]byte{228, 158, 18}: "FREEBOX SAS", - [3]byte{228, 161, 230}: "Alcatel-Lucent Shanghai Bell Co., Ltd", - [3]byte{228, 163, 47}: "Shanghai Artimen Technology Co., Ltd.", - [3]byte{228, 163, 135}: "Control Solutions LLC", - [3]byte{228, 164, 113}: "Intel Corporate", - [3]byte{228, 165, 239}: "TRON LINK ELECTRONICS CO., LTD.", - [3]byte{228, 167, 73}: "Palo Alto Networks", - [3]byte{228, 167, 160}: "Intel Corporate", - [3]byte{228, 167, 197}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{228, 167, 253}: "Cellco Partnership", - [3]byte{228, 168, 182}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{228, 170, 93}: "Cisco Systems, Inc", - [3]byte{228, 171, 70}: "UAB Selteka", - [3]byte{228, 173, 125}: "SCL Elements", - [3]byte{228, 175, 161}: "HES-SO", - [3]byte{228, 176, 5}: "Beijing IQIYI Science & Technology Co., Ltd.", - [3]byte{228, 176, 33}: "Samsung Electronics Co.,Ltd", - [3]byte{228, 179, 24}: "Intel Corporate", - [3]byte{228, 186, 217}: "360 Fly Inc.", - [3]byte{228, 189, 75}: "zte corporation", - [3]byte{228, 190, 237}: "Netcore Technology Inc.", - [3]byte{228, 193, 70}: "Objetivos y Servicios de Valor A", - [3]byte{228, 193, 241}: "SHENZHEN SPOTMAU INFORMATION TECHNOLIGY CO., Ltd", - [3]byte{228, 194, 209}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{228, 198, 43}: "Airware", - [3]byte{228, 198, 61}: "Apple, Inc.", - [3]byte{228, 198, 230}: "Mophie, LLC", - [3]byte{228, 199, 34}: "Cisco Systems, Inc", - [3]byte{228, 200, 1}: "BLU Products Inc", - [3]byte{228, 200, 6}: "Ceiec Electric Technology Inc.", - [3]byte{228, 206, 2}: "WyreStorm Technologies Ltd", - [3]byte{228, 206, 112}: "Health & Life co., Ltd.", - [3]byte{228, 206, 143}: "Apple, Inc.", - [3]byte{228, 211, 50}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{228, 211, 241}: "Cisco Systems, Inc", - [3]byte{228, 213, 61}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{228, 215, 29}: "Oraya Therapeutics", - [3]byte{228, 221, 121}: "En-Vision America, Inc.", - [3]byte{228, 224, 197}: "Samsung Electronics Co.,Ltd", - [3]byte{228, 228, 9}: "LEIFHEIT AG", - [3]byte{228, 228, 171}: "Apple, Inc.", - [3]byte{228, 236, 16}: "Nokia Corporation", - [3]byte{228, 238, 253}: "MR&D Manufacturing", - [3]byte{228, 240, 4}: "Dell Inc.", - [3]byte{228, 240, 66}: "Google, Inc.", - [3]byte{228, 243, 101}: "Time-O-Matic, Inc.", - [3]byte{228, 243, 227}: "Shanghai iComhome Co.,Ltd.", - [3]byte{228, 243, 245}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", - [3]byte{228, 244, 198}: "NETGEAR", - [3]byte{228, 247, 161}: "Datafox GmbH", - [3]byte{228, 248, 156}: "Intel Corporate", - [3]byte{228, 248, 239}: "Samsung Electronics Co.,Ltd", - [3]byte{228, 249, 57}: "Minxon Hotel Technology INC.", - [3]byte{228, 250, 29}: "PAD Peripheral Advanced Design Inc.", - [3]byte{228, 250, 237}: "Samsung Electronics Co.,Ltd", - [3]byte{228, 250, 253}: "Intel Corporate", - [3]byte{228, 251, 93}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{228, 251, 143}: "MOBIWIRE MOBILES (NINGBO) CO.,LTD", - [3]byte{228, 254, 217}: "EDMI Europe Ltd", - [3]byte{228, 255, 221}: "ELECTRON INDIA", - [3]byte{232, 0, 54}: "Befs co,. ltd", - [3]byte{232, 3, 154}: "Samsung Electronics Co.,Ltd", - [3]byte{232, 4, 11}: "Apple, Inc.", - [3]byte{232, 4, 16}: "Private", - [3]byte{232, 4, 98}: "Cisco Systems, Inc", - [3]byte{232, 4, 243}: "Throughtek Co., Ltd.", - [3]byte{232, 5, 109}: "Nortel Networks", - [3]byte{232, 6, 136}: "Apple, Inc.", - [3]byte{232, 7, 52}: "Champion Optical Network Engineering, LLC", - [3]byte{232, 7, 191}: "SHENZHEN BOOMTECH INDUSTRY CO.,LTD", - [3]byte{232, 8, 139}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{232, 9, 69}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{232, 9, 89}: "Guoguang Electric Co.,Ltd", - [3]byte{232, 11, 19}: "Akib Systems Taiwan, INC", - [3]byte{232, 12, 56}: "DAEYOUNG INFORMATION SYSTEM CO., LTD", - [3]byte{232, 12, 117}: "Syncbak, Inc.", - [3]byte{232, 16, 46}: "Really Simple Software, Inc", - [3]byte{232, 17, 50}: "Samsung Electronics Co.,Ltd", - [3]byte{232, 17, 202}: "SHANDONG KAER ELECTRIC.CO.,LTD", - [3]byte{232, 19, 36}: "GuangZhou Bonsoninfo System CO.,LTD", - [3]byte{232, 19, 99}: "Comstock RD, Inc.", - [3]byte{232, 19, 103}: "AIRSOUND Inc.", - [3]byte{232, 21, 14}: "Nokia Corporation", - [3]byte{232, 22, 43}: "IDEO Security Co., Ltd.", - [3]byte{232, 23, 252}: "Fujitsu Cloud Technologies Limited", - [3]byte{232, 24, 99}: "IEEE Registration Authority", - [3]byte{232, 29, 168}: "Ruckus Wireless", - [3]byte{232, 32, 226}: "HUMAX Co., Ltd.", - [3]byte{232, 40, 119}: "TMY Co., Ltd.", - [3]byte{232, 40, 213}: "Cots Technology", - [3]byte{232, 42, 68}: "Liteon Technology Corporation", - [3]byte{232, 42, 234}: "Intel Corporate", - [3]byte{232, 46, 36}: "Out of the Fog Research LLC", - [3]byte{232, 51, 129}: "ARRIS Group, Inc.", - [3]byte{232, 52, 62}: "Beijing Infosec Technologies Co., LTD.", - [3]byte{232, 54, 29}: "Sense Labs, Inc.", - [3]byte{232, 55, 122}: "Zyxel Communications Corporation", - [3]byte{232, 57, 53}: "Hewlett Packard", - [3]byte{232, 57, 223}: "ASKEY COMPUTER CORP", - [3]byte{232, 58, 18}: "Samsung Electronics Co.,Ltd", - [3]byte{232, 58, 151}: "Toshiba Corporation", - [3]byte{232, 62, 182}: "RIM", - [3]byte{232, 62, 251}: "GEODESIC LTD.", - [3]byte{232, 62, 252}: "ARRIS Group, Inc.", - [3]byte{232, 64, 64}: "Cisco Systems, Inc", - [3]byte{232, 64, 242}: "PEGATRON CORPORATION", - [3]byte{232, 67, 182}: "QNAP Systems, Inc.", - [3]byte{232, 68, 126}: "Bitdefender SRL", - [3]byte{232, 72, 31}: "Advanced Automotive Antennas", - [3]byte{232, 77, 208}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{232, 78, 6}: "EDUP INTERNATIONAL (HK) CO., LTD", - [3]byte{232, 78, 132}: "Samsung Electronics Co.,Ltd", - [3]byte{232, 78, 206}: "Nintendo Co., Ltd.", - [3]byte{232, 80, 139}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{232, 81, 110}: "TSMART Inc.", - [3]byte{232, 81, 157}: "Yeonhab Precision Co.,LTD", - [3]byte{232, 84, 132}: "NEO Information Systems Co., Ltd.", - [3]byte{232, 85, 180}: "SAI Technology Inc.", - [3]byte{232, 86, 89}: "Advanced-Connectek Inc.", - [3]byte{232, 86, 214}: "NCTech Ltd", - [3]byte{232, 90, 167}: "LLC Emzior", - [3]byte{232, 91, 91}: "LG ELECTRONICS INC", - [3]byte{232, 91, 240}: "Imaging Diagnostics", - [3]byte{232, 93, 107}: "Luminate Wireless", - [3]byte{232, 94, 83}: "Infratec Datentechnik GmbH", - [3]byte{232, 97, 31}: "Dawning Information Industry Co.,Ltd", - [3]byte{232, 97, 126}: "Liteon Technology Corporation", - [3]byte{232, 97, 131}: "Black Diamond Advanced Technology, LLC", - [3]byte{232, 97, 190}: "Melec Inc.", - [3]byte{232, 101, 73}: "Cisco Systems, Inc", - [3]byte{232, 101, 212}: "Tenda Technology Co.,Ltd.Dongguan branch", - [3]byte{232, 102, 196}: "Diamanti", - [3]byte{232, 104, 25}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{232, 108, 218}: "Supercomputers and Neurocomputers Research Center", - [3]byte{232, 109, 82}: "ARRIS Group, Inc.", - [3]byte{232, 109, 84}: "Digit Mobile Inc", - [3]byte{232, 109, 101}: "AUDIO MOBIL Elektronik GmbH", - [3]byte{232, 109, 110}: "voestalpine SIGNALING Fareham Ltd.", - [3]byte{232, 111, 242}: "Actiontec Electronics, Inc", - [3]byte{232, 113, 141}: "Elsys Equipamentos Eletronicos Ltda", - [3]byte{232, 116, 230}: "ADB Broadband Italia", - [3]byte{232, 117, 127}: "FIRS Technologies(Shenzhen) Co., Ltd", - [3]byte{232, 120, 161}: "BEOVIEW INTERCOM DOO", - [3]byte{232, 122, 243}: "S5 Tech S.r.l.", - [3]byte{232, 128, 46}: "Apple, Inc.", - [3]byte{232, 128, 216}: "GNTEK Electronics Co.,Ltd.", - [3]byte{232, 130, 91}: "ARRIS Group, Inc.", - [3]byte{232, 135, 163}: "Loxley Public Company Limited", - [3]byte{232, 136, 108}: "Shenzhen SC Technologies Co.,LTD", - [3]byte{232, 137, 44}: "ARRIS Group, Inc.", - [3]byte{232, 141, 40}: "Apple, Inc.", - [3]byte{232, 141, 245}: "ZNYX Networks, Inc.", - [3]byte{232, 142, 96}: "NSD Corporation", - [3]byte{232, 145, 32}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{232, 146, 24}: "Arcontia International AB", - [3]byte{232, 146, 164}: "LG Electronics (Mobile Communications)", - [3]byte{232, 147, 9}: "Samsung Electronics Co.,Ltd", - [3]byte{232, 148, 76}: "Cogent Healthcare Systems Ltd", - [3]byte{232, 148, 246}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{232, 150, 6}: "testo Instruments (Shenzhen) Co., Ltd.", - [3]byte{232, 153, 90}: "PiiGAB, Processinformation i Goteborg AB", - [3]byte{232, 153, 196}: "HTC Corporation", - [3]byte{232, 154, 143}: "QUANTA COMPUTER INC.", - [3]byte{232, 154, 255}: "Fujian Landi Commercial Equipment Co.,Ltd", - [3]byte{232, 157, 135}: "Toshiba", - [3]byte{232, 158, 12}: "Private", - [3]byte{232, 158, 180}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{232, 159, 236}: "CHENGDU KT ELECTRONIC HI-TECH CO.,LTD", - [3]byte{232, 163, 100}: "Signal Path International / Peachtree Audio", - [3]byte{232, 164, 193}: "Deep Sea Electronics PLC", - [3]byte{232, 167, 242}: "sTraffic", - [3]byte{232, 171, 250}: "Shenzhen Reecam Tech.Ltd.", - [3]byte{232, 177, 252}: "Intel Corporate", - [3]byte{232, 178, 172}: "Apple, Inc.", - [3]byte{232, 180, 174}: "Shenzhen C&D Electronics Co.,Ltd", - [3]byte{232, 180, 200}: "Samsung Electronics Co.,Ltd", - [3]byte{232, 182, 194}: "Juniper Networks", - [3]byte{232, 183, 72}: "Cisco Systems, Inc", - [3]byte{232, 186, 112}: "Cisco Systems, Inc", - [3]byte{232, 187, 61}: "Sino Prime-Tech Limited", - [3]byte{232, 187, 168}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{232, 189, 209}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{232, 190, 129}: "Sagemcom Broadband SAS", - [3]byte{232, 193, 215}: "Philips", - [3]byte{232, 194, 41}: "H-Displays (MSC) Bhd", - [3]byte{232, 195, 32}: "Austco Communication Systems Pty Ltd", - [3]byte{232, 199, 79}: "Liteon Technology Corporation", - [3]byte{232, 203, 161}: "Nokia Corporation", - [3]byte{232, 204, 24}: "D-Link International", - [3]byte{232, 204, 50}: "Micronet LTD", - [3]byte{232, 205, 45}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{232, 206, 6}: "SkyHawke Technologies, LLC.", - [3]byte{232, 208, 250}: "MKS Instruments Deutschland GmbH", - [3]byte{232, 209, 27}: "ASKEY COMPUTER CORP", - [3]byte{232, 212, 131}: "ULTIMATE Europe Transportation Equipment GmbH", - [3]byte{232, 212, 224}: "Beijing BenyWave Technology Co., Ltd.", - [3]byte{232, 216, 25}: "AzureWave Technology Inc.", - [3]byte{232, 218, 150}: "Zhuhai Tianrui Electrical Power Tech. Co., Ltd.", - [3]byte{232, 218, 170}: "VideoHome Technology Corp.", - [3]byte{232, 222, 39}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{232, 222, 142}: "Integrated Device Technology (Malaysia) Sdn. Bhd.", - [3]byte{232, 222, 214}: "Intrising Networks, Inc.", - [3]byte{232, 223, 112}: "AVM Audiovisuelles Marketing und Computersysteme GmbH", - [3]byte{232, 223, 242}: "PRF Co., Ltd.", - [3]byte{232, 224, 143}: "GRAVOTECH MARKING SAS", - [3]byte{232, 224, 183}: "Toshiba", - [3]byte{232, 225, 225}: "Gemtek Technology Co., Ltd.", - [3]byte{232, 225, 226}: "Energotest", - [3]byte{232, 229, 214}: "Samsung Electronics Co.,Ltd", - [3]byte{232, 231, 50}: "Alcatel-Lucent Enterprise", - [3]byte{232, 231, 112}: "Warp9 Tech Design, Inc.", - [3]byte{232, 231, 118}: "Shenzhen Kootion Technology Co., Ltd", - [3]byte{232, 232, 117}: "iS5 Communications Inc.", - [3]byte{232, 234, 106}: "StarTech.com", - [3]byte{232, 234, 218}: "Denkovi Assembly Electronics LTD", - [3]byte{232, 235, 17}: "Texas Instruments", - [3]byte{232, 237, 5}: "ARRIS Group, Inc.", - [3]byte{232, 237, 243}: "Cisco Systems, Inc", - [3]byte{232, 239, 137}: "OPMEX Tech.", - [3]byte{232, 241, 176}: "Sagemcom Broadband SAS", - [3]byte{232, 242, 38}: "MILLSON CUSTOM SOLUTIONS INC.", - [3]byte{232, 242, 226}: "LG Innotek", - [3]byte{232, 242, 227}: "Starcor Beijing Co.,Limited", - [3]byte{232, 247, 36}: "Hewlett Packard Enterprise", - [3]byte{232, 249, 40}: "RFTECH SRL", - [3]byte{232, 252, 96}: "ELCOM Innovations Private Limited", - [3]byte{232, 252, 175}: "NETGEAR", - [3]byte{232, 253, 114}: "SHANGHAI LINGUO TECHNOLOGY CO., LTD.", - [3]byte{232, 253, 144}: "Turbostor", - [3]byte{232, 253, 232}: "CeLa Link Corporation", - [3]byte{236, 1, 51}: "TRINUS SYSTEMS INC.", - [3]byte{236, 1, 226}: "FOXCONN INTERCONNECT TECHNOLOGY", - [3]byte{236, 1, 238}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{236, 4, 65}: "ShenZhen TIGO Semiconductor Co., Ltd.", - [3]byte{236, 8, 107}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{236, 13, 154}: "Mellanox Technologies, Inc.", - [3]byte{236, 14, 196}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{236, 14, 214}: "ITECH INSTRUMENTS SAS", - [3]byte{236, 16, 123}: "Samsung Electronics Co.,Ltd", - [3]byte{236, 17, 32}: "FloDesign Wind Turbine Corporation", - [3]byte{236, 17, 39}: "Texas Instruments", - [3]byte{236, 19, 178}: "Netonix", - [3]byte{236, 19, 219}: "Juniper Networks", - [3]byte{236, 20, 246}: "BioControl AS", - [3]byte{236, 23, 47}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{236, 23, 102}: "Research Centre Module", - [3]byte{236, 26, 89}: "Belkin International Inc.", - [3]byte{236, 29, 127}: "zte corporation", - [3]byte{236, 29, 139}: "Cisco Systems, Inc", - [3]byte{236, 31, 114}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{236, 33, 159}: "VidaBox LLC", - [3]byte{236, 33, 229}: "Toshiba", - [3]byte{236, 34, 87}: "JiangSu NanJing University Electronic Information Technology Co.,Ltd", - [3]byte{236, 34, 128}: "D-Link International", - [3]byte{236, 35, 61}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{236, 35, 104}: "IntelliVoice Co.,Ltd.", - [3]byte{236, 35, 123}: "zte corporation", - [3]byte{236, 36, 184}: "Texas Instruments", - [3]byte{236, 38, 202}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{236, 38, 251}: "TECC CO.,LTD.", - [3]byte{236, 42, 240}: "Ypsomed AG", - [3]byte{236, 44, 73}: "University of Tokyo", - [3]byte{236, 46, 78}: "HITACHI-LG DATA STORAGE INC", - [3]byte{236, 48, 145}: "Cisco Systems, Inc", - [3]byte{236, 53, 134}: "Apple, Inc.", - [3]byte{236, 54, 63}: "Markov Corporation", - [3]byte{236, 56, 143}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{236, 59, 240}: "NovelSat", - [3]byte{236, 60, 90}: "SHEN ZHEN HENG SHENG HUI DIGITAL TECHNOLOGY CO.,LTD", - [3]byte{236, 60, 136}: "MCNEX Co.,Ltd.", - [3]byte{236, 61, 253}: "SHENZHEN BILIAN ELECTRONIC CO.,LTD", - [3]byte{236, 62, 9}: "PERFORMANCE DESIGNED PRODUCTS, LLC", - [3]byte{236, 62, 247}: "Juniper Networks", - [3]byte{236, 63, 5}: "Institute 706, The Second Academy China Aerospace Science & Industry Corp", - [3]byte{236, 66, 180}: "ADC Corporation", - [3]byte{236, 66, 240}: "ADL Embedded Solutions, Inc.", - [3]byte{236, 67, 139}: "YAPTV", - [3]byte{236, 67, 230}: "AWCER Ltd.", - [3]byte{236, 67, 246}: "Zyxel Communications Corporation", - [3]byte{236, 68, 118}: "Cisco Systems, Inc", - [3]byte{236, 70, 68}: "TTK SAS", - [3]byte{236, 70, 112}: "Meinberg Funkuhren GmbH & Co. KG", - [3]byte{236, 71, 60}: "Redwire, LLC", - [3]byte{236, 73, 147}: "Qihan Technology Co., Ltd", - [3]byte{236, 76, 77}: "ZAO NPK RoTeK", - [3]byte{236, 77, 71}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{236, 79, 130}: "Calix Inc.", - [3]byte{236, 81, 188}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{236, 82, 220}: "WORLD MEDIA AND TECHNOLOGY Corp.", - [3]byte{236, 84, 46}: "Shanghai XiMei Electronic Technology Co. Ltd", - [3]byte{236, 85, 249}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{236, 89, 231}: "Microsoft Corporation", - [3]byte{236, 90, 134}: "Yulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd", - [3]byte{236, 92, 105}: "MITSUBISHI HEAVY INDUSTRIES MECHATRONICS SYSTEMS,LTD.", - [3]byte{236, 95, 35}: "Qinghai Kimascend Electronics Technology Co. Ltd.", - [3]byte{236, 96, 224}: "AVI-ON LABS", - [3]byte{236, 98, 100}: "Global411 Internet Services, LLC", - [3]byte{236, 99, 229}: "ePBoard Design LLC", - [3]byte{236, 100, 231}: "MOCACARE Corporation", - [3]byte{236, 102, 209}: "B&W Group LTD", - [3]byte{236, 104, 129}: "Palo Alto Networks", - [3]byte{236, 108, 159}: "Chengdu Volans Technology CO.,LTD", - [3]byte{236, 112, 151}: "ARRIS Group, Inc.", - [3]byte{236, 113, 219}: "Shenzhen Baichuan Digital Technology Co., Ltd.", - [3]byte{236, 116, 186}: "Hirschmann Automation and Control GmbH", - [3]byte{236, 124, 116}: "Justone Technologies Co., Ltd.", - [3]byte{236, 125, 17}: "vivo Mobile Communication Co., Ltd.", - [3]byte{236, 125, 157}: "MEI", - [3]byte{236, 128, 9}: "NovaSparks", - [3]byte{236, 129, 147}: "Logitech, Inc", - [3]byte{236, 131, 80}: "Microsoft Corporation", - [3]byte{236, 131, 108}: "RM Tech Co., Ltd.", - [3]byte{236, 133, 47}: "Apple, Inc.", - [3]byte{236, 136, 143}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{236, 136, 146}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{236, 137, 245}: "Lenovo Mobile Communication Technology Ltd.", - [3]byte{236, 138, 76}: "zte corporation", - [3]byte{236, 138, 199}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{236, 140, 162}: "Ruckus Wireless", - [3]byte{236, 142, 173}: "DLX", - [3]byte{236, 142, 174}: "Nagravision SA", - [3]byte{236, 142, 181}: "Hewlett Packard", - [3]byte{236, 146, 51}: "Eddyfi NDT Inc", - [3]byte{236, 147, 39}: "MEMMERT GmbH + Co. KG", - [3]byte{236, 147, 237}: "DDoS-Guard LTD", - [3]byte{236, 150, 129}: "2276427 Ontario Inc", - [3]byte{236, 152, 108}: "Lufft Mess- und Regeltechnik GmbH", - [3]byte{236, 152, 193}: "Beijing Risbo Network Technology Co.,Ltd", - [3]byte{236, 154, 116}: "Hewlett Packard", - [3]byte{236, 155, 91}: "Nokia Corporation", - [3]byte{236, 155, 243}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{236, 158, 205}: "Artesyn Embedded Technologies", - [3]byte{236, 159, 13}: "IEEE Registration Authority", - [3]byte{236, 162, 155}: "Kemppi Oy", - [3]byte{236, 168, 107}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{236, 169, 250}: "GUANGDONG GENIUS TECHNOLOGY CO.,LTD.", - [3]byte{236, 170, 160}: "PEGATRON CORPORATION", - [3]byte{236, 173, 184}: "Apple, Inc.", - [3]byte{236, 176, 225}: "Ciena Corporation", - [3]byte{236, 177, 6}: "Acuro Networks, Inc", - [3]byte{236, 177, 215}: "Hewlett Packard", - [3]byte{236, 181, 65}: "SHINANO E and E Co.Ltd.", - [3]byte{236, 181, 250}: "Philips Lighting BV", - [3]byte{236, 184, 112}: "Beijing Heweinet Technology Co.,Ltd.", - [3]byte{236, 185, 7}: "CloudGenix Inc", - [3]byte{236, 186, 254}: "GIROPTIC", - [3]byte{236, 187, 174}: "Digivoice Tecnologia em Eletronica Ltda", - [3]byte{236, 189, 9}: "FUSION Electronics Ltd", - [3]byte{236, 189, 29}: "Cisco Systems, Inc", - [3]byte{236, 192, 106}: "PowerChord Group Limited", - [3]byte{236, 195, 138}: "Accuenergy (CANADA) Inc", - [3]byte{236, 200, 130}: "Cisco Systems, Inc", - [3]byte{236, 203, 48}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{236, 205, 109}: "Allied Telesis, Inc.", - [3]byte{236, 208, 14}: "MiraeRecognition Co., Ltd.", - [3]byte{236, 208, 64}: "GEA Farm Technologies GmbH", - [3]byte{236, 208, 159}: "Xiaomi Communications Co Ltd", - [3]byte{236, 209, 154}: "Zhuhai Liming Industries Co., Ltd", - [3]byte{236, 214, 138}: "Shenzhen JMicron Intelligent Technology Developmen", - [3]byte{236, 217, 37}: "RAMI", - [3]byte{236, 217, 80}: "IRT SA", - [3]byte{236, 217, 209}: "Shenzhen TG-NET Botone Technology Co.,Ltd.", - [3]byte{236, 222, 61}: "Lamprey Networks, Inc.", - [3]byte{236, 223, 58}: "vivo Mobile Communication Co., Ltd.", - [3]byte{236, 224, 155}: "Samsung Electronics Co.,Ltd", - [3]byte{236, 225, 84}: "Beijing Unisound Information Technology Co.,Ltd.", - [3]byte{236, 225, 169}: "Cisco Systems, Inc", - [3]byte{236, 226, 253}: "SKG Electric Group(Thailand) Co., Ltd.", - [3]byte{236, 229, 18}: "tado GmbH", - [3]byte{236, 229, 85}: "Hirschmann Automation", - [3]byte{236, 231, 68}: "Omntec mfg. inc", - [3]byte{236, 233, 11}: "SISTEMA SOLUCOES ELETRONICAS LTDA - EASYTECH", - [3]byte{236, 233, 21}: "STI Ltd", - [3]byte{236, 233, 248}: "Guang Zhou TRI-SUN Electronics Technology Co., Ltd", - [3]byte{236, 234, 3}: "DARFON LIGHTING CORP", - [3]byte{236, 235, 184}: "Hewlett Packard Enterprise", - [3]byte{236, 238, 216}: "ZTLX Network Technology Co.,Ltd", - [3]byte{236, 240, 14}: "AboCom", - [3]byte{236, 242, 54}: "NEOMONTANA ELECTRONICS", - [3]byte{236, 243, 66}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{236, 243, 91}: "Nokia Corporation", - [3]byte{236, 244, 81}: "Arcadyan Corporation", - [3]byte{236, 244, 187}: "Dell Inc.", - [3]byte{236, 247, 43}: "HD DIGITAL TECH CO., LTD.", - [3]byte{236, 248, 235}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD", - [3]byte{236, 250, 3}: "FCA", - [3]byte{236, 250, 170}: "The IMS Company", - [3]byte{236, 250, 188}: "Espressif Inc.", - [3]byte{236, 250, 244}: "SenRa Tech Pvt. Ltd", - [3]byte{236, 252, 85}: "A. Eberle GmbH & Co. KG", - [3]byte{236, 254, 126}: "BlueRadios, Inc.", - [3]byte{240, 0, 127}: "Janz - Contadores de Energia, SA", - [3]byte{240, 2, 43}: "Chrontel", - [3]byte{240, 2, 72}: "SmarteBuilding", - [3]byte{240, 3, 140}: "AzureWave Technology Inc.", - [3]byte{240, 7, 134}: "Shandong Bittel Electronics Co., Ltd", - [3]byte{240, 8, 241}: "Samsung Electronics Co.,Ltd", - [3]byte{240, 13, 92}: "JinQianMao Technology Co.,Ltd.", - [3]byte{240, 19, 195}: "SHENZHEN FENDA TECHNOLOGY CO., LTD", - [3]byte{240, 21, 160}: "KyungDong One Co., Ltd.", - [3]byte{240, 21, 185}: "PlayFusion Limited", - [3]byte{240, 24, 43}: "LG Chem", - [3]byte{240, 27, 108}: "vivo Mobile Communication Co., Ltd.", - [3]byte{240, 28, 19}: "LG Electronics (Mobile Communications)", - [3]byte{240, 28, 45}: "Juniper Networks", - [3]byte{240, 29, 188}: "Microsoft Corporation", - [3]byte{240, 30, 52}: "ORICO Technologies Co., Ltd", - [3]byte{240, 31, 175}: "Dell Inc.", - [3]byte{240, 33, 157}: "Cal-Comp Electronics & Communications Company Ltd.", - [3]byte{240, 34, 78}: "Esan electronic co.", - [3]byte{240, 35, 41}: "SHOWA DENKI CO.,LTD.", - [3]byte{240, 35, 185}: "IEEE Registration Authority", - [3]byte{240, 36, 5}: "OPUS High Technology Corporation", - [3]byte{240, 36, 8}: "Talaris (Sweden) AB", - [3]byte{240, 36, 117}: "Apple, Inc.", - [3]byte{240, 37, 114}: "Cisco Systems, Inc", - [3]byte{240, 37, 183}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{240, 38, 36}: "WAFA TECHNOLOGIES CO., LTD.", - [3]byte{240, 38, 76}: "Dr. Sigrist AG", - [3]byte{240, 39, 45}: "Amazon Technologies Inc.", - [3]byte{240, 39, 69}: "F-Secure Corporation", - [3]byte{240, 39, 101}: "Murata Manufacturing Co., Ltd.", - [3]byte{240, 41, 41}: "Cisco Systems, Inc", - [3]byte{240, 42, 35}: "Creative Next Design", - [3]byte{240, 42, 97}: "Waldo Networks, Inc.", - [3]byte{240, 47, 167}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{240, 47, 216}: "Bi2-Vision", - [3]byte{240, 50, 26}: "Mita-Teknik A/S", - [3]byte{240, 52, 4}: "TCT mobile ltd", - [3]byte{240, 55, 161}: "Huike Electronics (SHENZHEN) CO., LTD.", - [3]byte{240, 58, 75}: "Bloombase, Inc.", - [3]byte{240, 58, 85}: "Omega Elektronik AS", - [3]byte{240, 61, 3}: "TECNO MOBILE LIMITED", - [3]byte{240, 61, 41}: "Actility", - [3]byte{240, 62, 144}: "Ruckus Wireless", - [3]byte{240, 62, 191}: "GOGORO TAIWAN LIMITED", - [3]byte{240, 63, 248}: "R L Drake", - [3]byte{240, 64, 123}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{240, 66, 28}: "Intel Corporate", - [3]byte{240, 67, 53}: "DVN(Shanghai)Ltd.", - [3]byte{240, 67, 71}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{240, 69, 218}: "Texas Instruments", - [3]byte{240, 74, 43}: "PYRAMID Computer GmbH", - [3]byte{240, 75, 106}: "Scientific Production Association Siberian Arsenal, Ltd.", - [3]byte{240, 75, 242}: "JTECH Communications, Inc.", - [3]byte{240, 77, 162}: "Dell Inc.", - [3]byte{240, 79, 124}: "Private", - [3]byte{240, 88, 73}: "CareView Communications", - [3]byte{240, 90, 9}: "Samsung Electronics Co.,Ltd", - [3]byte{240, 91, 123}: "Samsung Electronics Co.,Ltd", - [3]byte{240, 92, 25}: "Aruba Networks", - [3]byte{240, 93, 137}: "Dycon Limited", - [3]byte{240, 93, 200}: "Duracell Powermat", - [3]byte{240, 95, 90}: "Getriebebau NORD GmbH and Co. KG", - [3]byte{240, 97, 48}: "Advantage Pharmacy Services, LLC", - [3]byte{240, 98, 13}: "Shenzhen Egreat Tech Corp.,Ltd", - [3]byte{240, 98, 129}: "ProCurve Networking by HP", - [3]byte{240, 101, 194}: "Yanfeng Visteon Electronics Technology (Shanghai) Co.,Ltd.", - [3]byte{240, 101, 221}: "Primax Electronics Ltd.", - [3]byte{240, 104, 83}: "Integrated Corporation", - [3]byte{240, 107, 202}: "Samsung Electronics Co.,Ltd", - [3]byte{240, 109, 120}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{240, 110, 11}: "Microsoft Corporation", - [3]byte{240, 110, 50}: "MICROTEL INNOVATION S.R.L.", - [3]byte{240, 114, 140}: "Samsung Electronics Co.,Ltd", - [3]byte{240, 115, 174}: "PEAK-System Technik", - [3]byte{240, 116, 133}: "NGD Systems, Inc.", - [3]byte{240, 116, 228}: "Thundercomm Technology Co., Ltd", - [3]byte{240, 118, 28}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{240, 119, 101}: "Sourcefire, Inc", - [3]byte{240, 119, 208}: "Xcellen", - [3]byte{240, 120, 22}: "Cisco Systems, Inc", - [3]byte{240, 121, 89}: "ASUSTek COMPUTER INC.", - [3]byte{240, 121, 96}: "Apple, Inc.", - [3]byte{240, 121, 232}: "GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD", - [3]byte{240, 123, 203}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{240, 125, 104}: "D-Link Corporation", - [3]byte{240, 127, 6}: "Cisco Systems, Inc", - [3]byte{240, 127, 12}: "Leopold Kostal GmbH &Co. KG", - [3]byte{240, 129, 175}: "IRZ AUTOMATION TECHNOLOGIES LTD", - [3]byte{240, 130, 97}: "Sagemcom Broadband SAS", - [3]byte{240, 132, 47}: "ADB Broadband Italia", - [3]byte{240, 132, 201}: "zte corporation", - [3]byte{240, 133, 193}: "SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.", - [3]byte{240, 138, 40}: "JIANGSU HENGSION ELECTRONIC S and T CO.,LTD", - [3]byte{240, 139, 254}: "COSTEL.,CO.LTD", - [3]byte{240, 140, 251}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{240, 142, 219}: "VeloCloud Networks", - [3]byte{240, 146, 28}: "Hewlett Packard", - [3]byte{240, 146, 180}: "SICHUAN TIANYI COMHEART TELECOMCO., LTD", - [3]byte{240, 147, 58}: "NxtConect", - [3]byte{240, 147, 197}: "Garland Technology", - [3]byte{240, 151, 229}: "TAMIO, INC", - [3]byte{240, 152, 56}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{240, 152, 157}: "Apple, Inc.", - [3]byte{240, 153, 191}: "Apple, Inc.", - [3]byte{240, 154, 81}: "Shanghai Viroyal Electronic Technology Company Limited", - [3]byte{240, 156, 187}: "RaonThink Inc.", - [3]byte{240, 156, 233}: "Aerohive Networks Inc.", - [3]byte{240, 158, 99}: "Cisco Systems, Inc", - [3]byte{240, 159, 194}: "Ubiquiti Networks Inc.", - [3]byte{240, 162, 37}: "Private", - [3]byte{240, 167, 100}: "GST Co., Ltd.", - [3]byte{240, 171, 84}: "MITSUMI ELECTRIC CO.,LTD.", - [3]byte{240, 172, 164}: "HBC-radiomatic", - [3]byte{240, 172, 215}: "IEEE Registration Authority", - [3]byte{240, 173, 78}: "Globalscale Technologies, Inc.", - [3]byte{240, 174, 81}: "Xi3 Corp", - [3]byte{240, 176, 82}: "Ruckus Wireless", - [3]byte{240, 176, 231}: "Apple, Inc.", - [3]byte{240, 178, 229}: "Cisco Systems, Inc", - [3]byte{240, 180, 41}: "Xiaomi Communications Co Ltd", - [3]byte{240, 180, 121}: "Apple, Inc.", - [3]byte{240, 182, 235}: "Poslab Technology Co., Ltd.", - [3]byte{240, 188, 200}: "MaxID (Pty) Ltd", - [3]byte{240, 189, 46}: "H+S Polatis Ltd", - [3]byte{240, 189, 241}: "Sipod Inc.", - [3]byte{240, 191, 151}: "Sony Corporation", - [3]byte{240, 193, 241}: "Apple, Inc.", - [3]byte{240, 194, 76}: "Zhejiang FeiYue Digital Technology Co., Ltd", - [3]byte{240, 194, 124}: "Mianyang Netop Telecom Equipment Co.,Ltd.", - [3]byte{240, 199, 127}: "Texas Instruments", - [3]byte{240, 200, 80}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{240, 200, 140}: "LeddarTech Inc.", - [3]byte{240, 203, 161}: "Apple, Inc.", - [3]byte{240, 209, 79}: "LINEAR LLC", - [3]byte{240, 209, 169}: "Apple, Inc.", - [3]byte{240, 209, 184}: "LEDVANCE", - [3]byte{240, 210, 241}: "Amazon Technologies Inc.", - [3]byte{240, 211, 167}: "CobaltRay Co., Ltd", - [3]byte{240, 211, 231}: "Sensometrix SA", - [3]byte{240, 212, 246}: "Lars Thrane A/S", - [3]byte{240, 213, 191}: "Intel Corporate", - [3]byte{240, 214, 87}: "ECHOSENS", - [3]byte{240, 215, 103}: "Axema Passagekontroll AB", - [3]byte{240, 215, 170}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{240, 217, 178}: "EXO S.A.", - [3]byte{240, 218, 124}: "RLH INDUSTRIES,INC.", - [3]byte{240, 219, 48}: "Yottabyte", - [3]byte{240, 219, 226}: "Apple, Inc.", - [3]byte{240, 219, 248}: "Apple, Inc.", - [3]byte{240, 220, 226}: "Apple, Inc.", - [3]byte{240, 222, 113}: "Shanghai EDO Technologies Co.,Ltd.", - [3]byte{240, 222, 185}: "ShangHai Y&Y Electronics Co., Ltd", - [3]byte{240, 222, 241}: "Wistron Infocomm (Zhongshan) Corporation", - [3]byte{240, 229, 195}: "Drägerwerk AG & Co. KG aA", - [3]byte{240, 231, 126}: "Samsung Electronics Co.,Ltd", - [3]byte{240, 235, 208}: "Shanghai Feixun Communication Co.,Ltd.", - [3]byte{240, 236, 57}: "Essec", - [3]byte{240, 237, 30}: "Bilkon Bilgisayar Kontrollu Cih. Im.Ltd.", - [3]byte{240, 238, 16}: "Samsung Electronics Co.,Ltd", - [3]byte{240, 238, 88}: "PACE Telematics GmbH", - [3]byte{240, 238, 187}: "VIPAR GmbH", - [3]byte{240, 239, 210}: "TF PAYMENT SERVICE CO., LTD", - [3]byte{240, 240, 2}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{240, 242, 73}: "Hitron Technologies. Inc", - [3]byte{240, 242, 96}: "Mobitec AB", - [3]byte{240, 243, 54}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{240, 245, 174}: "Adaptrum Inc.", - [3]byte{240, 246, 28}: "Apple, Inc.", - [3]byte{240, 246, 68}: "Whitesky Science & Technology Co.,Ltd.", - [3]byte{240, 246, 105}: "Motion Analysis Corporation", - [3]byte{240, 247, 85}: "Cisco Systems, Inc", - [3]byte{240, 247, 179}: "Phorm", - [3]byte{240, 248, 66}: "KEEBOX, Inc.", - [3]byte{240, 248, 242}: "Texas Instruments", - [3]byte{240, 249, 247}: "IES GmbH & Co. KG", - [3]byte{240, 253, 160}: "Acurix Networks Pty Ltd", - [3]byte{240, 254, 107}: "Shanghai High-Flying Electronics Technology Co., Ltd", - [3]byte{244, 3, 4}: "Google, Inc.", - [3]byte{244, 3, 33}: "BeNeXt B.V.", - [3]byte{244, 3, 47}: "Reduxio Systems", - [3]byte{244, 3, 67}: "Hewlett Packard Enterprise", - [3]byte{244, 4, 76}: "ValenceTech Limited", - [3]byte{244, 6, 105}: "Intel Corporate", - [3]byte{244, 6, 141}: "devolo AG", - [3]byte{244, 6, 165}: "Hangzhou Bianfeng Networking Technology Co., Ltd.", - [3]byte{244, 9, 216}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{244, 10, 74}: "INDUSNET Communication Technology Co.,LTD", - [3]byte{244, 11, 147}: "BlackBerry RTS", - [3]byte{244, 14, 17}: "IEEE Registration Authority", - [3]byte{244, 14, 34}: "Samsung Electronics Co.,Ltd", - [3]byte{244, 14, 131}: "ARRIS Group, Inc.", - [3]byte{244, 15, 27}: "Cisco Systems, Inc", - [3]byte{244, 15, 36}: "Apple, Inc.", - [3]byte{244, 15, 155}: "WAVELINK", - [3]byte{244, 21, 53}: "SPON Communication Technology Co.,Ltd", - [3]byte{244, 21, 99}: "F5 Networks, Inc.", - [3]byte{244, 21, 253}: "Shanghai Pateo Electronic Equipment Manufacturing Co., Ltd.", - [3]byte{244, 23, 184}: "AirTies Wireless Networks", - [3]byte{244, 27, 161}: "Apple, Inc.", - [3]byte{244, 30, 38}: "Simon-Kaloi Engineering", - [3]byte{244, 30, 94}: "RtBrick Inc.", - [3]byte{244, 31, 11}: "YAMABISHI Corporation", - [3]byte{244, 31, 136}: "zte corporation", - [3]byte{244, 31, 194}: "Cisco Systems, Inc", - [3]byte{244, 32, 18}: "Cuciniale GmbH", - [3]byte{244, 40, 51}: "MMPC Inc.", - [3]byte{244, 40, 83}: "Zioncom Electronics (Shenzhen) Ltd.", - [3]byte{244, 40, 150}: "SPECTO PAINEIS ELETRONICOS LTDA", - [3]byte{244, 41, 129}: "vivo Mobile Communication Co., Ltd.", - [3]byte{244, 43, 72}: "Ubiqam", - [3]byte{244, 44, 86}: "SENOR TECH CO LTD", - [3]byte{244, 48, 185}: "Hewlett Packard", - [3]byte{244, 49, 195}: "Apple, Inc.", - [3]byte{244, 54, 225}: "Abilis Systems SARL", - [3]byte{244, 55, 183}: "Apple, Inc.", - [3]byte{244, 56, 20}: "Shanghai Howell Electronic Co.,Ltd", - [3]byte{244, 61, 128}: "FAG Industrial Services GmbH", - [3]byte{244, 62, 97}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT", - [3]byte{244, 62, 157}: "Benu Networks, Inc.", - [3]byte{244, 65, 86}: "Arrikto Inc.", - [3]byte{244, 66, 39}: "S & S Research Inc.", - [3]byte{244, 66, 143}: "Samsung Electronics Co.,Ltd", - [3]byte{244, 68, 80}: "BND Co., Ltd.", - [3]byte{244, 69, 237}: "Portable Innovation Technology Ltd.", - [3]byte{244, 71, 19}: "Leading Public Performance Co., Ltd.", - [3]byte{244, 71, 42}: "Nanjing Rousing Sci. and Tech. Industrial Co., Ltd", - [3]byte{244, 72, 72}: "Amscreen Group Ltd", - [3]byte{244, 73, 239}: "EMSTONE", - [3]byte{244, 75, 42}: "Cisco SPVTG", - [3]byte{244, 76, 112}: "Skyworth Digital Technology(Shenzhen) Co.,Ltd", - [3]byte{244, 76, 127}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{244, 77, 23}: "GOLDCARD HIGH-TECH CO.,LTD.", - [3]byte{244, 77, 48}: "Elitegroup Computer Systems Co.,Ltd.", - [3]byte{244, 78, 5}: "Cisco Systems, Inc", - [3]byte{244, 78, 253}: "Actions Semiconductor Co.,Ltd.(Cayman Islands)", - [3]byte{244, 80, 235}: "Telechips Inc", - [3]byte{244, 82, 20}: "Mellanox Technologies, Inc.", - [3]byte{244, 84, 51}: "Rockwell Automation", - [3]byte{244, 85, 149}: "HENGBAO Corporation LTD.", - [3]byte{244, 85, 156}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{244, 85, 224}: "Niceway CNC Technology Co.,Ltd.Hunan Province", - [3]byte{244, 87, 62}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{244, 88, 66}: "Boxx TV Ltd", - [3]byte{244, 91, 115}: "Wanjiaan Interconnected Technology Co., Ltd", - [3]byte{244, 92, 137}: "Apple, Inc.", - [3]byte{244, 94, 171}: "Texas Instruments", - [3]byte{244, 95, 105}: "Matsufu Electronics distribution Company", - [3]byte{244, 95, 212}: "Cisco SPVTG", - [3]byte{244, 95, 247}: "DQ Technology Inc.", - [3]byte{244, 96, 13}: "Panoptic Technology, Inc", - [3]byte{244, 98, 208}: "Not for Radio, LLC", - [3]byte{244, 99, 73}: "Diffon Corporation", - [3]byte{244, 100, 93}: "Toshiba", - [3]byte{244, 103, 45}: "ShenZhen Topstar Technology Company", - [3]byte{244, 106, 146}: "SHENZHEN FAST TECHNOLOGIES CO.,LTD", - [3]byte{244, 106, 188}: "Adonit Corp. Ltd.", - [3]byte{244, 107, 239}: "Sagemcom Broadband SAS", - [3]byte{244, 109, 4}: "ASUSTek COMPUTER INC.", - [3]byte{244, 109, 226}: "zte corporation", - [3]byte{244, 110, 36}: "NEC Personal Computers, Ltd.", - [3]byte{244, 112, 171}: "vivo Mobile Communication Co., Ltd.", - [3]byte{244, 115, 202}: "Conversion Sound Inc.", - [3]byte{244, 118, 38}: "Viltechmeda UAB", - [3]byte{244, 122, 78}: "Woojeon&Handan", - [3]byte{244, 122, 204}: "SolidFire, Inc.", - [3]byte{244, 123, 94}: "Samsung Electronics Co.,Ltd", - [3]byte{244, 127, 53}: "Cisco Systems, Inc", - [3]byte{244, 129, 57}: "CANON INC.", - [3]byte{244, 131, 205}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{244, 131, 225}: "Shanghai Clouder Semiconductor Co.,Ltd", - [3]byte{244, 133, 198}: "FDT Technologies", - [3]byte{244, 135, 113}: "Infoblox", - [3]byte{244, 139, 50}: "Xiaomi Communications Co Ltd", - [3]byte{244, 140, 80}: "Intel Corporate", - [3]byte{244, 142, 9}: "Nokia Corporation", - [3]byte{244, 142, 56}: "Dell Inc.", - [3]byte{244, 142, 146}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{244, 144, 202}: "Tensorcom", - [3]byte{244, 144, 234}: "Deciso B.V.", - [3]byte{244, 145, 30}: "ZHUHAI EWPE INFORMATION TECHNOLOGY INC", - [3]byte{244, 147, 159}: "Hon Hai Precision Ind. Co., Ltd.", - [3]byte{244, 148, 97}: "NexGen Storage", - [3]byte{244, 148, 102}: "CountMax, ltd", - [3]byte{244, 150, 52}: "Intel Corporate", - [3]byte{244, 150, 81}: "NAKAYO Inc", - [3]byte{244, 153, 172}: "WEBER Schraubautomaten GmbH", - [3]byte{244, 158, 239}: "Taicang T&W Electronics", - [3]byte{244, 159, 84}: "Samsung Electronics Co.,Ltd", - [3]byte{244, 159, 243}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{244, 162, 148}: "EAGLE WORLD DEVELOPMENT CO., LIMITED", - [3]byte{244, 165, 42}: "Hawa Technologies Inc", - [3]byte{244, 167, 57}: "Juniper Networks", - [3]byte{244, 169, 151}: "CANON INC.", - [3]byte{244, 172, 193}: "Cisco Systems, Inc", - [3]byte{244, 177, 100}: "Lightning Telecommunications Technology Co. Ltd", - [3]byte{244, 179, 129}: "WindowMaster A/S", - [3]byte{244, 181, 32}: "Biostar Microtech international corp.", - [3]byte{244, 181, 47}: "Juniper Networks", - [3]byte{244, 181, 73}: "Xiamen Yeastar Information Technology Co., Ltd.", - [3]byte{244, 182, 229}: "TerraSem Co.,Ltd", - [3]byte{244, 183, 42}: "TIME INTERCONNECT LTD", - [3]byte{244, 183, 179}: "vivo Mobile Communication Co., Ltd.", - [3]byte{244, 183, 226}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{244, 184, 94}: "Texas Instruments", - [3]byte{244, 184, 167}: "zte corporation", - [3]byte{244, 189, 124}: "Chengdu jinshi communication Co., LTD", - [3]byte{244, 196, 71}: "Coagent International Enterprise Limited", - [3]byte{244, 196, 214}: "Shenzhen Xinfa Electronic Co.,ltd", - [3]byte{244, 198, 19}: "Alcatel-Lucent Shanghai Bell Co., Ltd", - [3]byte{244, 198, 215}: "blackned GmbH", - [3]byte{244, 199, 20}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{244, 199, 149}: "WEY Elektronik AG", - [3]byte{244, 202, 36}: "FreeBit Co., Ltd.", - [3]byte{244, 202, 229}: "FREEBOX SAS", - [3]byte{244, 203, 82}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{244, 204, 85}: "Juniper Networks", - [3]byte{244, 205, 144}: "Vispiron Rotec GmbH", - [3]byte{244, 206, 70}: "Hewlett Packard", - [3]byte{244, 207, 226}: "Cisco Systems, Inc", - [3]byte{244, 208, 50}: "Yunnan Ideal Information&Technology.,Ltd", - [3]byte{244, 210, 97}: "SEMOCON Co., Ltd", - [3]byte{244, 215, 178}: "LGS Innovations, LLC", - [3]byte{244, 217, 251}: "Samsung Electronics Co.,Ltd", - [3]byte{244, 220, 65}: "YOUNGZONE CULTURE (SHANGHAI) CORP", - [3]byte{244, 220, 77}: "Beijing CCD Digital Technology Co., Ltd", - [3]byte{244, 220, 218}: "Zhuhai Jiahe Communication Technology Co., limited", - [3]byte{244, 220, 249}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{244, 221, 158}: "GoPro", - [3]byte{244, 222, 12}: "ESPOD Ltd.", - [3]byte{244, 225, 66}: "Delta Elektronika BV", - [3]byte{244, 226, 4}: "Traqueur", - [3]byte{244, 227, 251}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{244, 228, 173}: "zte corporation", - [3]byte{244, 230, 215}: "Solar Power Technologies, Inc.", - [3]byte{244, 233, 38}: "Tianjin Zanpu Technology Inc.", - [3]byte{244, 233, 212}: "QLogic Corporation", - [3]byte{244, 234, 103}: "Cisco Systems, Inc", - [3]byte{244, 234, 181}: "Aerohive Networks Inc.", - [3]byte{244, 235, 56}: "Sagemcom Broadband SAS", - [3]byte{244, 236, 56}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{244, 237, 95}: "SHENZHEN KTC TECHNOLOGY GROUP", - [3]byte{244, 238, 20}: "SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.", - [3]byte{244, 239, 158}: "SGSG SCIENCE & TECHNOLOGY CO. LTD", - [3]byte{244, 241, 90}: "Apple, Inc.", - [3]byte{244, 241, 225}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{244, 242, 109}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{244, 243, 170}: "JBL GmbH & Co. KG", - [3]byte{244, 245, 36}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{244, 245, 165}: "Nokia Corporation", - [3]byte{244, 245, 216}: "Google, Inc.", - [3]byte{244, 245, 219}: "Xiaomi Communications Co Ltd", - [3]byte{244, 245, 232}: "Google, Inc.", - [3]byte{244, 246, 70}: "Dediprog Technology Co. Ltd.", - [3]byte{244, 249, 81}: "Apple, Inc.", - [3]byte{244, 252, 50}: "Texas Instruments", - [3]byte{244, 252, 177}: "JJ Corp", - [3]byte{244, 253, 43}: "ZOYI Company", - [3]byte{248, 1, 19}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{248, 2, 120}: "IEEE Registration Authority", - [3]byte{248, 3, 50}: "Khomp", - [3]byte{248, 3, 119}: "Apple, Inc.", - [3]byte{248, 4, 46}: "SAMSUNG ELECTRO-MECHANICS(THAILAND)", - [3]byte{248, 5, 28}: "DRS Imaging and Targeting Solutions", - [3]byte{248, 11, 190}: "ARRIS Group, Inc.", - [3]byte{248, 11, 203}: "Cisco Systems, Inc", - [3]byte{248, 11, 208}: "Datang Telecom communication terminal (Tianjin) Co., Ltd.", - [3]byte{248, 12, 243}: "LG Electronics (Mobile Communications)", - [3]byte{248, 13, 67}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{248, 13, 96}: "CANON INC.", - [3]byte{248, 13, 234}: "ZyCast Technology Inc.", - [3]byte{248, 15, 65}: "Wistron Infocomm (Zhongshan) Corporation", - [3]byte{248, 15, 132}: "Natural Security SAS", - [3]byte{248, 16, 55}: "Atopia Systems, LP", - [3]byte{248, 21, 71}: "Avaya Inc", - [3]byte{248, 22, 84}: "Intel Corporate", - [3]byte{248, 24, 151}: "2Wire Inc", - [3]byte{248, 26, 103}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{248, 28, 229}: "Telefonbau Behnke GmbH", - [3]byte{248, 29, 15}: "Hitron Technologies. Inc", - [3]byte{248, 29, 120}: "IEEE Registration Authority", - [3]byte{248, 29, 144}: "Solidwintech", - [3]byte{248, 29, 147}: "Longdhua(Beijing) Controls Technology Co.,Ltd", - [3]byte{248, 30, 223}: "Apple, Inc.", - [3]byte{248, 32, 85}: "Green Information System", - [3]byte{248, 34, 133}: "Cypress Technology CO., LTD.", - [3]byte{248, 35, 178}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{248, 36, 65}: "Yeelink", - [3]byte{248, 39, 147}: "Apple, Inc.", - [3]byte{248, 40, 25}: "Liteon Technology Corporation", - [3]byte{248, 43, 200}: "Jiangsu Switter Co., Ltd", - [3]byte{248, 44, 24}: "2Wire Inc", - [3]byte{248, 46, 219}: "RTW GmbH & Co. KG", - [3]byte{248, 47, 8}: "Molex", - [3]byte{248, 47, 91}: "eGauge Systems LLC", - [3]byte{248, 47, 168}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{248, 48, 148}: "Alcatel-Lucent Telecom Limited", - [3]byte{248, 49, 62}: "endeavour GmbH", - [3]byte{248, 50, 228}: "ASUSTek COMPUTER INC.", - [3]byte{248, 51, 118}: "Good Mind Innovation Co., Ltd.", - [3]byte{248, 52, 65}: "Intel Corporate", - [3]byte{248, 53, 83}: "Magenta Research Ltd.", - [3]byte{248, 53, 221}: "Gemtek Technology Co., Ltd.", - [3]byte{248, 61, 78}: "Softlink Automation System Co., Ltd", - [3]byte{248, 61, 255}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{248, 63, 81}: "Samsung Electronics Co.,Ltd", - [3]byte{248, 66, 251}: "Yasuda Joho Co.,ltd.", - [3]byte{248, 68, 227}: "Taicang T&W Electronics", - [3]byte{248, 69, 173}: "Konka Group Co., Ltd.", - [3]byte{248, 70, 28}: "Sony Interactive Entertainment Inc.", - [3]byte{248, 70, 45}: "SYNTEC Incorporation", - [3]byte{248, 71, 45}: "X2gen Digital Corp. Ltd", - [3]byte{248, 72, 151}: "Hitachi, Ltd.", - [3]byte{248, 74, 115}: "EUMTECH CO., LTD", - [3]byte{248, 74, 127}: "Innometriks Inc", - [3]byte{248, 74, 191}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{248, 79, 87}: "Cisco Systems, Inc", - [3]byte{248, 80, 99}: "Verathon", - [3]byte{248, 81, 109}: "Denwa Technology Corp.", - [3]byte{248, 82, 223}: "VNL Europe AB", - [3]byte{248, 84, 175}: "ECI Telecom Ltd.", - [3]byte{248, 87, 46}: "Core Brands, LLC", - [3]byte{248, 89, 113}: "Intel Corporate", - [3]byte{248, 90, 0}: "Sanford LP", - [3]byte{248, 91, 156}: "SB SYSTEMS Co.,Ltd", - [3]byte{248, 91, 201}: "M-Cube Spa", - [3]byte{248, 92, 69}: "IC Nexus Co. Ltd.", - [3]byte{248, 92, 77}: "NOKIA", - [3]byte{248, 95, 42}: "Nokia Corporation", - [3]byte{248, 98, 20}: "Apple, Inc.", - [3]byte{248, 98, 170}: "xn systems", - [3]byte{248, 99, 63}: "Intel Corporate", - [3]byte{248, 100, 101}: "Anova Applied Electronics, Inc.", - [3]byte{248, 102, 1}: "Suzhou Chi-tek information technology Co., Ltd", - [3]byte{248, 102, 209}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{248, 102, 242}: "Cisco Systems, Inc", - [3]byte{248, 105, 113}: "Seibu Electric Co.,", - [3]byte{248, 108, 225}: "Taicang T&W Electronics", - [3]byte{248, 110, 207}: "Arcx Inc", - [3]byte{248, 110, 238}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{248, 113, 254}: "The Goldman Sachs Group, Inc.", - [3]byte{248, 114, 234}: "Cisco Systems, Inc", - [3]byte{248, 115, 148}: "NETGEAR", - [3]byte{248, 115, 162}: "Avaya Inc", - [3]byte{248, 117, 136}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{248, 118, 155}: "Neopis Co., Ltd.", - [3]byte{248, 119, 184}: "Samsung Electronics Co.,Ltd", - [3]byte{248, 122, 239}: "Rosonix Technology, Inc.", - [3]byte{248, 123, 32}: "Cisco Systems, Inc", - [3]byte{248, 123, 98}: "FASTWEL INTERNATIONAL CO., LTD. Taiwan Branch", - [3]byte{248, 123, 122}: "ARRIS Group, Inc.", - [3]byte{248, 123, 140}: "Amped Wireless", - [3]byte{248, 128, 150}: "Elsys Equipamentos Eletrônicos Ltda", - [3]byte{248, 129, 26}: "OVERKIZ", - [3]byte{248, 132, 121}: "Yaojin Technology(Shenzhen)Co.,Ltd", - [3]byte{248, 132, 242}: "Samsung Electronics Co.,Ltd", - [3]byte{248, 138, 60}: "IEEE Registration Authority", - [3]byte{248, 140, 28}: "KAISHUN ELECTRONIC TECHNOLOGY CO., LTD. BEIJING", - [3]byte{248, 141, 239}: "Tenebraex", - [3]byte{248, 142, 133}: "Comtrend Corporation", - [3]byte{248, 143, 202}: "Google, Inc.", - [3]byte{248, 145, 42}: "GLP German Light Products GmbH", - [3]byte{248, 147, 243}: "VOLANS", - [3]byte{248, 148, 194}: "Intel Corporate", - [3]byte{248, 149, 80}: "Proton Products Chengdu Ltd", - [3]byte{248, 149, 199}: "LG Electronics (Mobile Communications)", - [3]byte{248, 151, 207}: "DAESHIN-INFORMATION TECHNOLOGY CO., LTD.", - [3]byte{248, 152, 58}: "Leeman International (HongKong) Limited", - [3]byte{248, 152, 185}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{248, 153, 85}: "Fortress Technology Inc", - [3]byte{248, 157, 13}: "Control Technology Inc.", - [3]byte{248, 157, 187}: "Tintri", - [3]byte{248, 159, 184}: "YAZAKI Energy System Corporation", - [3]byte{248, 160, 61}: "Dinstar Technologies Co., Ltd.", - [3]byte{248, 160, 151}: "ARRIS Group, Inc.", - [3]byte{248, 161, 136}: "LED Roadway Lighting", - [3]byte{248, 162, 180}: "RHEWA-WAAGENFABRIK August Freudewald GmbH &Co. KG", - [3]byte{248, 163, 79}: "zte corporation", - [3]byte{248, 164, 95}: "Xiaomi Communications Co Ltd", - [3]byte{248, 165, 197}: "Cisco Systems, Inc", - [3]byte{248, 169, 99}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{248, 169, 208}: "LG Electronics (Mobile Communications)", - [3]byte{248, 169, 222}: "PUISSANCE PLUS", - [3]byte{248, 170, 138}: "Axview Technology (Shenzhen) Co.,Ltd", - [3]byte{248, 171, 5}: "Sagemcom Broadband SAS", - [3]byte{248, 172, 109}: "Deltenna Ltd", - [3]byte{248, 177, 86}: "Dell Inc.", - [3]byte{248, 178, 243}: "GUANGZHOU BOSMA TECHNOLOGY CO.,LTD", - [3]byte{248, 181, 104}: "IEEE Registration Authority", - [3]byte{248, 181, 153}: "Guangzhou CHNAVS Digital Technology Co.,Ltd", - [3]byte{248, 183, 226}: "Cisco Systems, Inc", - [3]byte{248, 187, 191}: "eero inc.", - [3]byte{248, 188, 18}: "Dell Inc.", - [3]byte{248, 188, 65}: "Rosslare Enterprises Limited", - [3]byte{248, 190, 13}: "A2UICT Co.,Ltd.", - [3]byte{248, 191, 9}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{248, 192, 1}: "Juniper Networks", - [3]byte{248, 192, 145}: "Highgates Technology", - [3]byte{248, 194, 136}: "Cisco Systems, Inc", - [3]byte{248, 195, 114}: "TSUZUKI DENKI", - [3]byte{248, 195, 151}: "NZXT Corp. Ltd.", - [3]byte{248, 198, 120}: "Carefusion", - [3]byte{248, 201, 108}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{248, 202, 184}: "Dell Inc.", - [3]byte{248, 207, 197}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{248, 208, 39}: "Seiko Epson Corporation", - [3]byte{248, 208, 172}: "Sony Interactive Entertainment Inc.", - [3]byte{248, 208, 189}: "Samsung Electronics Co.,Ltd", - [3]byte{248, 209, 17}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{248, 211, 169}: "AXAN Networks", - [3]byte{248, 212, 98}: "Pumatronix Equipamentos Eletronicos Ltda.", - [3]byte{248, 215, 86}: "Simm Tronic Limited", - [3]byte{248, 215, 191}: "REV Ritter GmbH", - [3]byte{248, 218, 12}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{248, 218, 223}: "EcoTech, Inc.", - [3]byte{248, 218, 226}: "Beta LaserMike", - [3]byte{248, 218, 244}: "Taishan Online Technology Co., Ltd.", - [3]byte{248, 219, 76}: "PNY Technologies, INC.", - [3]byte{248, 219, 127}: "HTC Corporation", - [3]byte{248, 219, 136}: "Dell Inc.", - [3]byte{248, 220, 122}: "Variscite LTD", - [3]byte{248, 223, 168}: "zte corporation", - [3]byte{248, 224, 121}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{248, 228, 251}: "Actiontec Electronics, Inc", - [3]byte{248, 230, 26}: "Samsung Electronics Co.,Ltd", - [3]byte{248, 231, 30}: "Ruckus Wireless", - [3]byte{248, 231, 181}: "µTech Tecnologia LTDA", - [3]byte{248, 232, 17}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{248, 233, 3}: "D-Link International", - [3]byte{248, 233, 104}: "Egker Kft.", - [3]byte{248, 234, 10}: "Dipl.-Math. Michael Rauch", - [3]byte{248, 237, 165}: "ARRIS Group, Inc.", - [3]byte{248, 240, 5}: "Newport Media Inc.", - [3]byte{248, 240, 20}: "RackWare Inc.", - [3]byte{248, 240, 130}: "NAG LLC", - [3]byte{248, 241, 182}: "Motorola Mobility LLC, a Lenovo Company", - [3]byte{248, 242, 30}: "Intel Corporate", - [3]byte{248, 242, 90}: "G-Lab GmbH", - [3]byte{248, 244, 100}: "Rawe Electonic GmbH", - [3]byte{248, 247, 211}: "International Communications Corporation", - [3]byte{248, 247, 255}: "SYN-TECH SYSTEMS INC", - [3]byte{248, 251, 47}: "Santur Corporation", - [3]byte{248, 254, 92}: "Reciprocal Labs Corp", - [3]byte{248, 254, 168}: "Technico Japan Corporation", - [3]byte{248, 255, 11}: "Electronic Technology Inc.", - [3]byte{248, 255, 95}: "Shenzhen Communication Technology Co.,Ltd", - [3]byte{252, 0, 18}: "Toshiba Samsung Storage Technolgoy Korea Corporation", - [3]byte{252, 1, 124}: "Hon Hai Precision Ind. Co.,Ltd.", - [3]byte{252, 1, 158}: "VIEVU", - [3]byte{252, 1, 205}: "FUNDACION TEKNIKER", - [3]byte{252, 6, 71}: "Cortland Research, LLC", - [3]byte{252, 6, 237}: "M2Motive Technology Inc.", - [3]byte{252, 7, 160}: "LRE Medical GmbH", - [3]byte{252, 8, 74}: "FUJITSU LIMITED", - [3]byte{252, 8, 119}: "Prentke Romich Company", - [3]byte{252, 9, 216}: "ACTEON Group", - [3]byte{252, 9, 246}: "GUANGDONG TONZE ELECTRIC CO.,LTD", - [3]byte{252, 10, 129}: "Extreme Networks, Inc.", - [3]byte{252, 15, 75}: "Texas Instruments", - [3]byte{252, 15, 230}: "Sony Interactive Entertainment Inc.", - [3]byte{252, 16, 189}: "Control Sistematizado S.A.", - [3]byte{252, 16, 198}: "Taicang T&W Electronics", - [3]byte{252, 17, 134}: "Logic3 plc", - [3]byte{252, 19, 73}: "Global Apps Corp.", - [3]byte{252, 21, 180}: "Hewlett Packard", - [3]byte{252, 22, 7}: "Taian Technology(Wuxi) Co.,Ltd.", - [3]byte{252, 23, 148}: "InterCreative Co., Ltd", - [3]byte{252, 25, 16}: "Samsung Electronics Co.,Ltd", - [3]byte{252, 25, 208}: "Cloud Vision Networks Technology Co.,Ltd.", - [3]byte{252, 26, 17}: "vivo Mobile Communication Co., Ltd.", - [3]byte{252, 27, 255}: "V-ZUG AG", - [3]byte{252, 29, 89}: "I Smart Cities HK Ltd", - [3]byte{252, 29, 132}: "Autobase", - [3]byte{252, 30, 22}: "IPEVO corp", - [3]byte{252, 31, 25}: "SAMSUNG ELECTRO MECHANICS CO., LTD.", - [3]byte{252, 31, 192}: "EURECAM", - [3]byte{252, 34, 156}: "Han Kyung I Net Co.,Ltd.", - [3]byte{252, 35, 37}: "EosTek (Shenzhen) Co., Ltd.", - [3]byte{252, 37, 63}: "Apple, Inc.", - [3]byte{252, 39, 162}: "TRANS ELECTRIC CO., LTD.", - [3]byte{252, 42, 84}: "Connected Data, Inc.", - [3]byte{252, 45, 94}: "zte corporation", - [3]byte{252, 46, 45}: "Lorom Industrial Co.LTD.", - [3]byte{252, 47, 64}: "Calxeda, Inc.", - [3]byte{252, 47, 107}: "Everspin Technologies, Inc.", - [3]byte{252, 47, 170}: "Nokia", - [3]byte{252, 47, 239}: "UTT Technologies Co., Ltd.", - [3]byte{252, 50, 136}: "CELOT Wireless Co., Ltd", - [3]byte{252, 51, 95}: "Polyera", - [3]byte{252, 53, 152}: "Favite Inc.", - [3]byte{252, 53, 230}: "Visteon corp", - [3]byte{252, 55, 43}: "SICHUAN TIANYI COMHEART TELECOMCO.,LTD", - [3]byte{252, 60, 233}: "Tsingtong Technologies Co, Ltd.", - [3]byte{252, 61, 147}: "LONGCHEER TELECOMMUNICATION LIMITED", - [3]byte{252, 63, 124}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{252, 63, 171}: "Henan Lanxin Technology Co., Ltd", - [3]byte{252, 63, 219}: "Hewlett Packard", - [3]byte{252, 66, 3}: "Samsung Electronics Co.,Ltd", - [3]byte{252, 68, 99}: "Universal Audio, Inc", - [3]byte{252, 68, 153}: "Swarco LEA d.o.o.", - [3]byte{252, 69, 95}: "JIANGXI SHANSHUI OPTOELECTRONIC TECHNOLOGY CO.,LTD", - [3]byte{252, 69, 150}: "COMPAL INFORMATION (KUNSHAN) CO., LTD.", - [3]byte{252, 72, 239}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{252, 74, 233}: "Castlenet Technology Inc.", - [3]byte{252, 75, 28}: "INTERSENSOR S.R.L.", - [3]byte{252, 75, 188}: "Sunplus Technology Co., Ltd.", - [3]byte{252, 77, 140}: "SHENZHEN PANTE ELECTRONICS TECHNOLOGY CO., LTD", - [3]byte{252, 77, 212}: "Universal Global Scientific Industrial Co., Ltd.", - [3]byte{252, 80, 144}: "SIMEX Sp. z o.o.", - [3]byte{252, 81, 164}: "ARRIS Group, Inc.", - [3]byte{252, 82, 141}: "Technicolor CH USA Inc.", - [3]byte{252, 82, 206}: "Control iD", - [3]byte{252, 83, 158}: "Shanghai Wind Technologies Co.,Ltd", - [3]byte{252, 85, 220}: "Baltic Latvian Universal Electronics LLC", - [3]byte{252, 88, 250}: "Shen Zhen Shi Xin Zhong Xin Technology Co.,Ltd.", - [3]byte{252, 90, 29}: "Hitron Technologies. Inc", - [3]byte{252, 91, 36}: "Weibel Scientific A/S", - [3]byte{252, 91, 38}: "MikroBits", - [3]byte{252, 91, 57}: "Cisco Systems, Inc", - [3]byte{252, 96, 24}: "Zhejiang Kangtai Electric Co., Ltd.", - [3]byte{252, 97, 152}: "NEC Personal Products, Ltd", - [3]byte{252, 98, 110}: "Beijing MDC Telecom", - [3]byte{252, 98, 185}: "ALPS ELECTRIC CO.,LTD.", - [3]byte{252, 100, 186}: "Xiaomi Communications Co Ltd", - [3]byte{252, 101, 222}: "Amazon Technologies Inc.", - [3]byte{252, 104, 62}: "Directed Perception, Inc", - [3]byte{252, 108, 49}: "LXinstruments GmbH", - [3]byte{252, 109, 192}: "BME CORPORATION", - [3]byte{252, 111, 183}: "ARRIS Group, Inc.", - [3]byte{252, 117, 22}: "D-Link International", - [3]byte{252, 117, 230}: "Handreamnet", - [3]byte{252, 121, 11}: "Hitachi High Technologies America, Inc.", - [3]byte{252, 124, 231}: "FCI USA LLC", - [3]byte{252, 127, 86}: "CoSyst Control Systems GmbH", - [3]byte{252, 131, 41}: "Trei technics", - [3]byte{252, 131, 153}: "Avaya Inc", - [3]byte{252, 131, 198}: "N-Radio Technologies Co., Ltd.", - [3]byte{252, 139, 151}: "SHENZHEN GONGJIN ELECTRONICS CO.,LT", - [3]byte{252, 142, 126}: "ARRIS Group, Inc.", - [3]byte{252, 143, 144}: "Samsung Electronics Co.,Ltd", - [3]byte{252, 143, 196}: "Intelligent Technology Inc.", - [3]byte{252, 145, 20}: "Technicolor CH USA Inc.", - [3]byte{252, 146, 59}: "Nokia Corporation", - [3]byte{252, 148, 108}: "UBIVELOX", - [3]byte{252, 148, 227}: "Technicolor CH USA Inc.", - [3]byte{252, 153, 71}: "Cisco Systems, Inc", - [3]byte{252, 154, 250}: "Motus Global Inc.", - [3]byte{252, 157, 216}: "Beijing TongTongYiLian Science and Technology Ltd.", - [3]byte{252, 159, 174}: "Fidus Systems Inc", - [3]byte{252, 159, 225}: "CONWIN.Tech. Ltd", - [3]byte{252, 161, 62}: "Samsung Electronics Co.,Ltd", - [3]byte{252, 162, 42}: "PT. Callysta Multi Engineering", - [3]byte{252, 163, 134}: "SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD", - [3]byte{252, 166, 103}: "Amazon Technologies Inc.", - [3]byte{252, 168, 65}: "Avaya Inc", - [3]byte{252, 168, 154}: "Sunitec Enterprise Co.,Ltd", - [3]byte{252, 169, 176}: "MIARTECH (SHANGHAI),INC.", - [3]byte{252, 170, 20}: "GIGA-BYTE TECHNOLOGY CO.,LTD.", - [3]byte{252, 173, 15}: "QTS NETWORKS", - [3]byte{252, 175, 106}: "Qulsar Inc", - [3]byte{252, 175, 172}: "Socionext Inc.", - [3]byte{252, 176, 196}: "Shanghai DareGlobal Technologies Co.,Ltd", - [3]byte{252, 180, 230}: "ASKEY COMPUTER CORP", - [3]byte{252, 181, 138}: "Wapice Ltd.", - [3]byte{252, 182, 152}: "Cambridge Industries(Group) Co.,Ltd.", - [3]byte{252, 187, 161}: "Shenzhen Minicreate Technology Co.,Ltd", - [3]byte{252, 188, 156}: "Vimar Spa", - [3]byte{252, 194, 51}: "Private", - [3]byte{252, 194, 61}: "Atmel Corporation", - [3]byte{252, 194, 222}: "Murata Manufacturing Co., Ltd.", - [3]byte{252, 199, 52}: "Samsung Electronics Co.,Ltd", - [3]byte{252, 200, 151}: "zte corporation", - [3]byte{252, 202, 196}: "LifeHealth, LLC", - [3]byte{252, 204, 228}: "Ascon Ltd.", - [3]byte{252, 207, 67}: "HUIZHOU CITY HUIYANG DISTRICT MEISIQI INDUSTRY DEVELOPMENT CO,.LTD", - [3]byte{252, 207, 98}: "IBM Corp", - [3]byte{252, 212, 242}: "The Coca Cola Company", - [3]byte{252, 212, 246}: "Messana Air.Ray Conditioning s.r.l.", - [3]byte{252, 213, 217}: "Shenzhen SDMC Technology Co., Ltd.", - [3]byte{252, 214, 189}: "Robert Bosch GmbH", - [3]byte{252, 215, 51}: "TP-LINK TECHNOLOGIES CO.,LTD.", - [3]byte{252, 216, 23}: "Beijing Hesun Technologies Co.Ltd.", - [3]byte{252, 216, 72}: "Apple, Inc.", - [3]byte{252, 219, 150}: "ENERVALLEY CO., LTD", - [3]byte{252, 219, 179}: "Murata Manufacturing Co., Ltd.", - [3]byte{252, 220, 74}: "G-Wearables Corp.", - [3]byte{252, 221, 85}: "Shenzhen WeWins wireless Co.,Ltd", - [3]byte{252, 225, 134}: "A3M Co., LTD", - [3]byte{252, 225, 146}: "Sichuan Jinwangtong Electronic Science&Technology Co,.Ltd", - [3]byte{252, 225, 217}: "Stable Imaging Solutions LLC", - [3]byte{252, 225, 251}: "Array Networks", - [3]byte{252, 226, 63}: "CLAY PAKY SPA", - [3]byte{252, 227, 60}: "HUAWEI TECHNOLOGIES CO.,LTD", - [3]byte{252, 229, 87}: "Nokia Corporation", - [3]byte{252, 232, 146}: "Hangzhou Lancable Technology Co.,Ltd", - [3]byte{252, 233, 152}: "Apple, Inc.", - [3]byte{252, 236, 218}: "Ubiquiti Networks Inc.", - [3]byte{252, 237, 185}: "Arrayent", - [3]byte{252, 238, 230}: "FORMIKE ELECTRONIC CO., LTD", - [3]byte{252, 241, 54}: "Samsung Electronics Co.,Ltd", - [3]byte{252, 241, 82}: "Sony Corporation", - [3]byte{252, 241, 205}: "OPTEX-FA CO.,LTD.", - [3]byte{252, 245, 40}: "Zyxel Communications Corporation", - [3]byte{252, 246, 71}: "Fiberhome Telecommunication Technologies Co.,LTD", - [3]byte{252, 248, 174}: "Intel Corporate", - [3]byte{252, 248, 183}: "TRONTEQ Electronic", - [3]byte{252, 250, 247}: "Shanghai Baud Data Communication Co.,Ltd.", - [3]byte{252, 251, 251}: "Cisco Systems, Inc", - [3]byte{252, 252, 72}: "Apple, Inc.", - [3]byte{252, 254, 119}: "Hitachi Reftechno, Inc.", - [3]byte{252, 254, 194}: "Invensys Controls UK Limited", - [3]byte{252, 255, 170}: "IEEE Registration Authority", -} diff --git a/vendor/github.com/google/gopacket/packet_test.go b/vendor/github.com/google/gopacket/packet_test.go deleted file mode 100644 index bd05448..0000000 --- a/vendor/github.com/google/gopacket/packet_test.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package gopacket - -import ( - "io" - "reflect" - "testing" -) - -type embedded struct { - A, B int -} - -type embedding struct { - embedded - C, D int -} - -func TestDumpEmbedded(t *testing.T) { - e := embedding{embedded: embedded{A: 1, B: 2}, C: 3, D: 4} - if got, want := layerString(reflect.ValueOf(e), false, false), "{A=1 B=2 C=3 D=4}"; got != want { - t.Errorf("embedded dump mismatch:\n got: %v\n want: %v", got, want) - } -} - -type singlePacketSource [1][]byte - -func (s *singlePacketSource) ReadPacketData() ([]byte, CaptureInfo, error) { - if (*s)[0] == nil { - return nil, CaptureInfo{}, io.EOF - } - out := (*s)[0] - (*s)[0] = nil - return out, CaptureInfo{}, nil -} - -func TestConcatPacketSources(t *testing.T) { - sourceA := &singlePacketSource{[]byte{1}} - sourceB := &singlePacketSource{[]byte{2}} - sourceC := &singlePacketSource{[]byte{3}} - concat := ConcatFinitePacketDataSources(sourceA, sourceB, sourceC) - a, _, err := concat.ReadPacketData() - if err != nil || len(a) != 1 || a[0] != 1 { - t.Errorf("expected [1], got %v/%v", a, err) - } - b, _, err := concat.ReadPacketData() - if err != nil || len(b) != 1 || b[0] != 2 { - t.Errorf("expected [2], got %v/%v", b, err) - } - c, _, err := concat.ReadPacketData() - if err != nil || len(c) != 1 || c[0] != 3 { - t.Errorf("expected [3], got %v/%v", c, err) - } - if _, _, err := concat.ReadPacketData(); err != io.EOF { - t.Errorf("expected io.EOF, got %v", err) - } -} diff --git a/vendor/github.com/google/gopacket/pcap/doc.go b/vendor/github.com/google/gopacket/pcap/doc.go deleted file mode 100644 index 5bf8d86..0000000 --- a/vendor/github.com/google/gopacket/pcap/doc.go +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -/* -Package pcap allows users of gopacket to read packets off the wire or from -pcap files. - -This package is meant to be used with its parent, -http://github.com/google/gopacket, although it can also be used independently -if you just want to get packet data from the wire. - -Reading PCAP Files - -The following code can be used to read in data from a pcap file. - - if handle, err := pcap.OpenOffline("/path/to/my/file"); err != nil { - panic(err) - } else { - packetSource := gopacket.NewPacketSource(handle, handle.LinkType()) - for packet := range packetSource.Packets() { - handlePacket(packet) // Do something with a packet here. - } - } - -Reading Live Packets - -The following code can be used to read in data from a live device, in this case -"eth0". - - if handle, err := pcap.OpenLive("eth0", 1600, true, pcap.BlockForever); err != nil { - panic(err) - } else if err := handle.SetBPFFilter("tcp and port 80"); err != nil { // optional - panic(err) - } else { - packetSource := gopacket.NewPacketSource(handle, handle.LinkType()) - for packet := range packetSource.Packets() { - handlePacket(packet) // Do something with a packet here. - } - } - -Inactive Handles - -Newer PCAP functionality requires the concept of an 'inactive' PCAP handle. -Instead of constantly adding new arguments to pcap_open_live, users now call -pcap_create to create a handle, set it up with a bunch of optional function -calls, then call pcap_activate to activate it. This library mirrors that -mechanism, for those that want to expose/use these new features: - - inactive, err := pcap.NewInactiveHandle(deviceName) - if err != nil { - log.Fatal(err) - } - defer inactive.CleanUp() - - // Call various functions on inactive to set it up the way you'd like: - if err = inactive.SetTimeout(time.Minute); err != nil { - log.Fatal(err) - } else if err = inactive.SetTimestampSource("foo"); err != nil { - log.Fatal(err) - } - - // Finally, create the actual handle by calling Activate: - handle, err := inactive.Activate() // after this, inactive is no longer valid - if err != nil { - log.Fatal(err) - } - defer handle.Close() - - // Now use your handle as you see fit. - -PCAP Timeouts - -pcap.OpenLive and pcap.SetTimeout both take timeouts. -If you don't care about timeouts, just pass in BlockForever, -which should do what you expect with minimal fuss. - -A timeout of 0 is not recommended. Some platforms, like Macs -(http://www.manpages.info/macosx/pcap.3.html) say: - The read timeout is used to arrange that the read not necessarily return - immediately when a packet is seen, but that it wait for some amount of time - to allow more packets to arrive and to read multiple packets from the OS - kernel in one operation. -This means that if you only capture one packet, the kernel might decide to wait -'timeout' for more packets to batch with it before returning. A timeout of -0, then, means 'wait forever for more packets', which is... not good. - -To get around this, we've introduced the following behavior: if a negative -timeout is passed in, we set the positive timeout in the handle, then loop -internally in ReadPacketData/ZeroCopyReadPacketData when we see timeout -errors. - -PCAP File Writing - -This package does not implement PCAP file writing. However, gopacket/pcapgo -does! Look there if you'd like to write PCAP files. - -Note For Windows 10 Users - -If you're trying to use 64-bit winpcap on Windows 10, you might have to do -the crazy hijinks detailed at -http://stackoverflow.com/questions/38047858/compile-gopacket-on-windows-64bit -*/ -package pcap diff --git a/vendor/github.com/google/gopacket/pcap/gopacket_benchmark/benchmark.go b/vendor/github.com/google/gopacket/pcap/gopacket_benchmark/benchmark.go deleted file mode 100644 index cbcae17..0000000 --- a/vendor/github.com/google/gopacket/pcap/gopacket_benchmark/benchmark.go +++ /dev/null @@ -1,247 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// This benchmark reads in file /gopacket_benchmark.pcap and measures -// the time it takes to decode all packets from that file. If the file doesn't -// exist, it's pulled down from a publicly available location. However, you can -// feel free to substitute your own file at that location, in which case the -// benchmark will run on your own data. -// -// It's also useful for figuring out which packets may be causing errors. Pass -// in the --printErrors flag, and it'll print out error layers for each packet -// that has them. This includes any packets that it's just unable to decode, -// which is a great way to find new protocols to decode, and get test packets to -// write tests for them. -package main - -import ( - "compress/gzip" - "encoding/hex" - "flag" - "fmt" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" - "github.com/google/gopacket/pcap" - "github.com/google/gopacket/tcpassembly" - "io" - "io/ioutil" - "net/http" - "os" - "runtime" - "runtime/pprof" - "time" -) - -var decodeLazy *bool = flag.Bool("lazy", false, "If true, use lazy decoding") -var decodeNoCopy *bool = flag.Bool("nocopy", true, "If true, avoid an extra copy when decoding packets") -var printErrors *bool = flag.Bool("printErrors", false, "If true, check for and print error layers.") -var printLayers *bool = flag.Bool("printLayers", false, "If true, print out the layers of each packet") -var repeat *int = flag.Int("repeat", 5, "Read over the file N times") -var cpuProfile *string = flag.String("cpuprofile", "", "If set, write CPU profile to filename") -var url *string = flag.String("url", "http://www.ll.mit.edu/mission/communications/cyber/CSTcorpora/ideval/data/1999/training/week1/tuesday/inside.tcpdump.gz", "URL to gzip'd pcap file") - -type BufferPacketSource struct { - index int - data [][]byte - ci []gopacket.CaptureInfo -} - -func NewBufferPacketSource(p gopacket.PacketDataSource) *BufferPacketSource { - start := time.Now() - b := &BufferPacketSource{} - for { - data, ci, err := p.ReadPacketData() - if err == io.EOF { - break - } - b.data = append(b.data, data) - b.ci = append(b.ci, ci) - } - duration := time.Since(start) - fmt.Printf("Reading packet data into memory: %d packets in %v, %v per packet\n", len(b.data), duration, duration/time.Duration(len(b.data))) - return b -} - -func (b *BufferPacketSource) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) { - if b.index >= len(b.data) { - err = io.EOF - return - } - data = b.data[b.index] - ci = b.ci[b.index] - b.index++ - return -} - -func (b *BufferPacketSource) Reset() { - runtime.GC() - b.index = 0 -} - -func main() { - flag.Parse() - filename := os.TempDir() + string(os.PathSeparator) + "gopacket_benchmark.pcap" - if _, err := os.Stat(filename); err != nil { - // This URL points to a publicly available packet data set from a DARPA - // intrusion detection evaluation. See - // http://www.ll.mit.edu/mission/communications/cyber/CSTcorpora/ideval/data/1999/training/week1/index.html - // for more details. - fmt.Println("Local pcap file", filename, "doesn't exist, reading from", *url) - if resp, err := http.Get(*url); err != nil { - panic(err) - } else if out, err := os.Create(filename); err != nil { - panic(err) - } else if gz, err := gzip.NewReader(resp.Body); err != nil { - panic(err) - } else if n, err := io.Copy(out, gz); err != nil { - panic(err) - } else if err := gz.Close(); err != nil { - panic(err) - } else if err := out.Close(); err != nil { - panic(err) - } else { - fmt.Println("Successfully read", n, "bytes from url, unzipped to local storage") - } - } - fmt.Println("Reading file once through to hopefully cache most of it") - if f, err := os.Open(filename); err != nil { - panic(err) - } else if n, err := io.Copy(ioutil.Discard, f); err != nil { - panic(err) - } else if err := f.Close(); err != nil { - panic(err) - } else { - fmt.Println("Read in file", filename, ", total of", n, "bytes") - } - if *cpuProfile != "" { - if cpu, err := os.Create(*cpuProfile); err != nil { - panic(err) - } else if err := pprof.StartCPUProfile(cpu); err != nil { - panic(err) - } else { - defer func() { - pprof.StopCPUProfile() - cpu.Close() - }() - } - } - var packetDataSource *BufferPacketSource - var packetSource *gopacket.PacketSource - fmt.Printf("Opening file %q for read\n", filename) - if h, err := pcap.OpenOffline(filename); err != nil { - panic(err) - } else { - fmt.Println("Reading all packets into memory with BufferPacketSource.") - start := time.Now() - packetDataSource = NewBufferPacketSource(h) - duration := time.Since(start) - fmt.Printf("Time to read packet data into memory from file: %v\n", duration) - packetSource = gopacket.NewPacketSource(packetDataSource, h.LinkType()) - packetSource.DecodeOptions.Lazy = *decodeLazy - packetSource.DecodeOptions.NoCopy = *decodeNoCopy - } - fmt.Println() - for i := 0; i < *repeat; i++ { - packetDataSource.Reset() - fmt.Printf("Benchmarking decode %d/%d\n", i+1, *repeat) - benchmarkPacketDecode(packetSource) - } - fmt.Println() - for i := 0; i < *repeat; i++ { - packetDataSource.Reset() - fmt.Printf("Benchmarking decoding layer parser %d/%d\n", i+1, *repeat) - benchmarkLayerDecode(packetDataSource, false) - } - fmt.Println() - for i := 0; i < *repeat; i++ { - packetDataSource.Reset() - fmt.Printf("Benchmarking decoding layer parser with assembly %d/%d\n", i+1, *repeat) - benchmarkLayerDecode(packetDataSource, true) - } -} - -func benchmarkPacketDecode(packetSource *gopacket.PacketSource) { - count, errors := 0, 0 - start := time.Now() - for packet, err := packetSource.NextPacket(); err != io.EOF; packet, err = packetSource.NextPacket() { - if err != nil { - fmt.Println("Error reading in packet:", err) - continue - } - count++ - var hasError bool - if *printErrors && packet.ErrorLayer() != nil { - fmt.Println("\n\n\nError decoding packet:", packet.ErrorLayer().Error()) - fmt.Println(hex.Dump(packet.Data())) - fmt.Printf("%#v\n", packet.Data()) - errors++ - hasError = true - } - if *printLayers || hasError { - fmt.Printf("\n=== PACKET %d ===\n", count) - for _, l := range packet.Layers() { - fmt.Printf("--- LAYER %v ---\n%#v\n\n", l.LayerType(), l) - } - fmt.Println() - } - } - duration := time.Since(start) - fmt.Printf("\tRead in %v packets in %v, %v per packet\n", count, duration, duration/time.Duration(count)) - if *printErrors { - fmt.Printf("%v errors, successfully decoded %.02f%%\n", errors, float64(count-errors)*100.0/float64(count)) - } -} - -type streamFactory struct { -} - -func (s *streamFactory) New(netFlow, tcpFlow gopacket.Flow) tcpassembly.Stream { - return s -} -func (s *streamFactory) Reassembled([]tcpassembly.Reassembly) { -} -func (s *streamFactory) ReassemblyComplete() { -} - -func benchmarkLayerDecode(source *BufferPacketSource, assemble bool) { - var tcp layers.TCP - var ip layers.IPv4 - var eth layers.Ethernet - var udp layers.UDP - var icmp layers.ICMPv4 - var payload gopacket.Payload - parser := gopacket.NewDecodingLayerParser( - layers.LayerTypeEthernet, - ð, &ip, &icmp, &tcp, &udp, &payload) - pool := tcpassembly.NewStreamPool(&streamFactory{}) - assembler := tcpassembly.NewAssembler(pool) - var decoded []gopacket.LayerType - start := time.Now() - packets, decodedlayers, assembled := 0, 0, 0 - for { - packets++ - data, ci, err := source.ReadPacketData() - if err == io.EOF { - break - } else if err != nil { - fmt.Println("Error reading packet: ", err) - continue - } - err = parser.DecodeLayers(data, &decoded) - for _, typ := range decoded { - decodedlayers++ - if typ == layers.LayerTypeTCP && assemble { - assembled++ - assembler.AssembleWithTimestamp(ip.NetworkFlow(), &tcp, ci.Timestamp) - } - } - } - if assemble { - assembler.FlushAll() - } - duration := time.Since(start) - fmt.Printf("\tRead in %d packets in %v, decoded %v layers, assembled %v packets: %v per packet\n", packets, duration, decodedlayers, assembled, duration/time.Duration(packets)) -} diff --git a/vendor/github.com/google/gopacket/pcap/pcap.go b/vendor/github.com/google/gopacket/pcap/pcap.go deleted file mode 100644 index 1ecdf03..0000000 --- a/vendor/github.com/google/gopacket/pcap/pcap.go +++ /dev/null @@ -1,1005 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// Copyright 2009-2011 Andreas Krennmair. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package pcap - -/* -#cgo solaris LDFLAGS: -L /opt/local/lib -lpcap -#cgo linux LDFLAGS: -lpcap -#cgo dragonfly LDFLAGS: -lpcap -#cgo freebsd LDFLAGS: -lpcap -#cgo openbsd LDFLAGS: -lpcap -#cgo netbsd LDFLAGS: -lpcap -#cgo darwin LDFLAGS: -lpcap -#cgo windows CFLAGS: -I C:/WpdPack/Include -#cgo windows,386 LDFLAGS: -L C:/WpdPack/Lib -lwpcap -#cgo windows,amd64 LDFLAGS: -L C:/WpdPack/Lib/x64 -lwpcap -#include -#include - -// Some old versions of pcap don't define this constant. -#ifndef PCAP_NETMASK_UNKNOWN -#define PCAP_NETMASK_UNKNOWN 0xffffffff -#endif - -// libpcap doesn't actually export its version in a #define-guardable way, -// so we have to use other defined things to differentiate versions. -// We assume at least libpcap v1.1 at the moment. -// See http://upstream-tracker.org/versions/libpcap.html - -#ifndef PCAP_ERROR_TSTAMP_PRECISION_NOTSUP // < v1.5 - -int pcap_set_immediate_mode(pcap_t *p, int mode) { - return PCAP_ERROR; -} - -#ifndef PCAP_TSTAMP_HOST // < v1.2 - -int pcap_set_tstamp_type(pcap_t* p, int t) { return -1; } -int pcap_list_tstamp_types(pcap_t* p, int** t) { return 0; } -void pcap_free_tstamp_types(int *tstamp_types) {} -const char* pcap_tstamp_type_val_to_name(int t) { - return "pcap timestamp types not supported"; -} -int pcap_tstamp_type_name_to_val(const char* t) { - return PCAP_ERROR; -} - -#endif // < v1.2 -#endif // < v1.5 - -#ifndef PCAP_ERROR_PROMISC_PERM_DENIED -#define PCAP_ERROR_PROMISC_PERM_DENIED -11 -#endif - -// WinPcap doesn't export a pcap_statustostr, so use the less-specific -// pcap_strerror. Note that linking against something like cygwin libpcap -// may result is less-specific error messages. -#ifdef WIN32 -#define pcap_statustostr pcap_strerror - -// WinPcap also doesn't export pcap_can_set_rfmon and pcap_set_rfmon, -// as those are handled by separate libraries (airpcap). -// https://www.winpcap.org/docs/docs_412/html/group__wpcapfunc.html -// Stub out those functions here, returning values that indicate rfmon -// setting is unavailable/unsuccessful. -int pcap_can_set_rfmon(pcap_t *p) { - return 0; -} - -int pcap_set_rfmon(pcap_t *p, int rfmon) { - return PCAP_ERROR; -} -#endif - -// Windows, Macs, and Linux all use different time types. Joy. -#ifdef WIN32 -#define gopacket_time_secs_t long -#define gopacket_time_usecs_t long -#elif __APPLE__ -#define gopacket_time_secs_t __darwin_time_t -#define gopacket_time_usecs_t __darwin_suseconds_t -#elif __GLIBC__ -#define gopacket_time_secs_t __time_t -#define gopacket_time_usecs_t __suseconds_t -#else // Some form of linux/bsd/etc... -#include -#ifdef __OpenBSD__ -#define gopacket_time_secs_t u_int32_t -#define gopacket_time_usecs_t u_int32_t -#else -#define gopacket_time_secs_t time_t -#define gopacket_time_usecs_t suseconds_t -#endif -#endif -*/ -import "C" - -import ( - "errors" - "fmt" - "io" - "net" - "reflect" - "runtime" - "strconv" - "sync" - "sync/atomic" - "syscall" - "time" - "unsafe" - - "github.com/google/gopacket" - "github.com/google/gopacket/layers" -) - -const errorBufferSize = 256 - -// MaxBpfInstructions is the maximum number of BPF instructions supported (BPF_MAXINSNS), -// taken from Linux kernel: include/uapi/linux/bpf_common.h -// -// https://github.com/torvalds/linux/blob/master/include/uapi/linux/bpf_common.h -const MaxBpfInstructions = 4096 - -// 8 bytes per instruction, max 4096 instructions -const bpfInstructionBufferSize = 8 * MaxBpfInstructions - -// Handle provides a connection to a pcap handle, allowing users to read packets -// off the wire (Next), inject packets onto the wire (Inject), and -// perform a number of other functions to affect and understand packet output. -// -// Handles are already pcap_activate'd -type Handle struct { - // cptr is the handle for the actual pcap C object. - cptr *C.pcap_t - timeout time.Duration - device string - deviceIndex int - mu sync.Mutex - closeMu sync.Mutex - // stop is set to a non-zero value by Handle.Close to signal to - // getNextBufPtrLocked to stop trying to read packets - stop uint64 - - // Since pointers to these objects are passed into a C function, if - // they're declared locally then the Go compiler thinks they may have - // escaped into C-land, so it allocates them on the heap. This causes a - // huge memory hit, so to handle that we store them here instead. - pkthdr *C.struct_pcap_pkthdr - bufptr *C.u_char -} - -// Stats contains statistics on how many packets were handled by a pcap handle, -// and what was done with those packets. -type Stats struct { - PacketsReceived int - PacketsDropped int - PacketsIfDropped int -} - -// Interface describes a single network interface on a machine. -type Interface struct { - Name string - Description string - Addresses []InterfaceAddress - // TODO: add more elements -} - -// Datalink describes the datalink -type Datalink struct { - Name string - Description string -} - -// InterfaceAddress describes an address associated with an Interface. -// Currently, it's IPv4/6 specific. -type InterfaceAddress struct { - IP net.IP - Netmask net.IPMask // Netmask may be nil if we were unable to retrieve it. - // TODO: add broadcast + PtP dst ? -} - -// BPF is a compiled filter program, useful for offline packet matching. -type BPF struct { - orig string - bpf _Ctype_struct_bpf_program // takes a finalizer, not overriden by outsiders -} - -// BPFInstruction is a byte encoded structure holding a BPF instruction -type BPFInstruction struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -// BlockForever causes it to block forever waiting for packets, when passed -// into SetTimeout or OpenLive, while still returning incoming packets to userland relatively -// quickly. -const BlockForever = -time.Millisecond * 10 - -func timeoutMillis(timeout time.Duration) C.int { - // Flip sign if necessary. See package docs on timeout for reasoning behind this. - if timeout < 0 { - timeout *= -1 - } - // Round up - if timeout != 0 && timeout < time.Millisecond { - timeout = time.Millisecond - } - return C.int(timeout / time.Millisecond) -} - -// OpenLive opens a device and returns a *Handle. -// It takes as arguments the name of the device ("eth0"), the maximum size to -// read for each packet (snaplen), whether to put the interface in promiscuous -// mode, and a timeout. -// -// See the package documentation for important details regarding 'timeout'. -func OpenLive(device string, snaplen int32, promisc bool, timeout time.Duration) (handle *Handle, _ error) { - buf := (*C.char)(C.calloc(errorBufferSize, 1)) - defer C.free(unsafe.Pointer(buf)) - - var pro C.int - if promisc { - pro = 1 - } - p := &Handle{timeout: timeout, device: device} - - ifc, err := net.InterfaceByName(device) - if err != nil { - // The device wasn't found in the OS, but could be "any" - // Set index to 0 - p.deviceIndex = 0 - } else { - p.deviceIndex = ifc.Index - } - - dev := C.CString(device) - defer C.free(unsafe.Pointer(dev)) - - p.cptr = C.pcap_open_live(dev, C.int(snaplen), pro, timeoutMillis(timeout), buf) - if p.cptr == nil { - return nil, errors.New(C.GoString(buf)) - } - - if err := p.openLive(); err != nil { - C.pcap_close(p.cptr) - return nil, err - } - - return p, nil -} - -// OpenOffline opens a file and returns its contents as a *Handle. -func OpenOffline(file string) (handle *Handle, err error) { - buf := (*C.char)(C.calloc(errorBufferSize, 1)) - defer C.free(unsafe.Pointer(buf)) - cf := C.CString(file) - defer C.free(unsafe.Pointer(cf)) - - cptr := C.pcap_open_offline(cf, buf) - if cptr == nil { - return nil, errors.New(C.GoString(buf)) - } - return &Handle{cptr: cptr}, nil -} - -// NextError is the return code from a call to Next. -type NextError int32 - -// NextError implements the error interface. -func (n NextError) Error() string { - switch n { - case NextErrorOk: - return "OK" - case NextErrorTimeoutExpired: - return "Timeout Expired" - case NextErrorReadError: - return "Read Error" - case NextErrorNoMorePackets: - return "No More Packets In File" - case NextErrorNotActivated: - return "Not Activated" - } - return strconv.Itoa(int(n)) -} - -// NextError values. -const ( - NextErrorOk NextError = 1 - NextErrorTimeoutExpired NextError = 0 - NextErrorReadError NextError = -1 - // NextErrorNoMorePackets is returned when reading from a file (OpenOffline) and - // EOF is reached. When this happens, Next() returns io.EOF instead of this. - NextErrorNoMorePackets NextError = -2 - NextErrorNotActivated NextError = -3 -) - -// ReadPacketData returns the next packet read from the pcap handle, along with an error -// code associated with that packet. If the packet is read successfully, the -// returned error is nil. -func (p *Handle) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) { - p.mu.Lock() - err = p.getNextBufPtrLocked(&ci) - if err == nil { - data = C.GoBytes(unsafe.Pointer(p.bufptr), C.int(ci.CaptureLength)) - } - p.mu.Unlock() - if err == NextErrorTimeoutExpired { - runtime.Gosched() - } - return -} - -type activateError C.int - -const ( - aeNoError = 0 - aeActivated = C.PCAP_ERROR_ACTIVATED - aePromisc = C.PCAP_WARNING_PROMISC_NOTSUP - aeNoSuchDevice = C.PCAP_ERROR_NO_SUCH_DEVICE - aeDenied = C.PCAP_ERROR_PERM_DENIED - aeNotUp = C.PCAP_ERROR_IFACE_NOT_UP -) - -func (a activateError) Error() string { - switch a { - case aeNoError: - return "No Error" - case aeActivated: - return "Already Activated" - case aePromisc: - return "Cannot set as promisc" - case aeNoSuchDevice: - return "No Such Device" - case aeDenied: - return "Permission Denied" - case aeNotUp: - return "Interface Not Up" - default: - return fmt.Sprintf("unknown activated error: %d", a) - } -} - -// getNextBufPtrLocked is shared code for ReadPacketData and -// ZeroCopyReadPacketData. -func (p *Handle) getNextBufPtrLocked(ci *gopacket.CaptureInfo) error { - if p.cptr == nil { - return io.EOF - } - - for atomic.LoadUint64(&p.stop) == 0 { - // try to read a packet if one is immediately available - result := NextError(C.pcap_next_ex(p.cptr, &p.pkthdr, &p.bufptr)) - - switch result { - case NextErrorOk: - // got a packet, set capture info and return - sec := int64(p.pkthdr.ts.tv_sec) - // convert micros to nanos - nanos := int64(p.pkthdr.ts.tv_usec) * 1000 - - ci.Timestamp = time.Unix(sec, nanos) - ci.CaptureLength = int(p.pkthdr.caplen) - ci.Length = int(p.pkthdr.len) - ci.InterfaceIndex = p.deviceIndex - - return nil - case NextErrorNoMorePackets: - // no more packets, return EOF rather than libpcap-specific error - return io.EOF - case NextErrorTimeoutExpired: - // Negative timeout means to loop forever, instead of actually returning - // the timeout error. - if p.timeout < 0 { - // must have had a timeout... wait before trying again - p.waitForPacket() - continue - } - default: - return result - } - } - - // stop must be set - return io.EOF -} - -// ZeroCopyReadPacketData reads the next packet off the wire, and returns its data. -// The slice returned by ZeroCopyReadPacketData points to bytes owned by the -// the Handle. Each call to ZeroCopyReadPacketData invalidates any data previously -// returned by ZeroCopyReadPacketData. Care must be taken not to keep pointers -// to old bytes when using ZeroCopyReadPacketData... if you need to keep data past -// the next time you call ZeroCopyReadPacketData, use ReadPacketData, which copies -// the bytes into a new buffer for you. -// data1, _, _ := handle.ZeroCopyReadPacketData() -// // do everything you want with data1 here, copying bytes out of it if you'd like to keep them around. -// data2, _, _ := handle.ZeroCopyReadPacketData() // invalidates bytes in data1 -func (p *Handle) ZeroCopyReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) { - p.mu.Lock() - err = p.getNextBufPtrLocked(&ci) - if err == nil { - slice := (*reflect.SliceHeader)(unsafe.Pointer(&data)) - slice.Data = uintptr(unsafe.Pointer(p.bufptr)) - slice.Len = ci.CaptureLength - slice.Cap = ci.CaptureLength - } - p.mu.Unlock() - if err == NextErrorTimeoutExpired { - runtime.Gosched() - } - return -} - -// Close closes the underlying pcap handle. -func (p *Handle) Close() { - p.closeMu.Lock() - defer p.closeMu.Unlock() - - if p.cptr == nil { - return - } - - atomic.StoreUint64(&p.stop, 1) - - // wait for packet reader to stop - p.mu.Lock() - defer p.mu.Unlock() - - C.pcap_close(p.cptr) - p.cptr = nil -} - -// Error returns the current error associated with a pcap handle (pcap_geterr). -func (p *Handle) Error() error { - return errors.New(C.GoString(C.pcap_geterr(p.cptr))) -} - -// Stats returns statistics on the underlying pcap handle. -func (p *Handle) Stats() (stat *Stats, err error) { - var cstats _Ctype_struct_pcap_stat - if -1 == C.pcap_stats(p.cptr, &cstats) { - return nil, p.Error() - } - return &Stats{ - PacketsReceived: int(cstats.ps_recv), - PacketsDropped: int(cstats.ps_drop), - PacketsIfDropped: int(cstats.ps_ifdrop), - }, nil -} - -// ListDataLinks obtains a list of all possible data link types supported for an interface. -func (p *Handle) ListDataLinks() (datalinks []Datalink, err error) { - var dltbuf *C.int - - n := int(C.pcap_list_datalinks(p.cptr, &dltbuf)) - if -1 == n { - return nil, p.Error() - } - - defer C.pcap_free_datalinks(dltbuf) - - datalinks = make([]Datalink, n) - - dltArray := (*[100]C.int)(unsafe.Pointer(dltbuf)) - - for i := 0; i < n; i++ { - expr := C.pcap_datalink_val_to_name((*dltArray)[i]) - datalinks[i].Name = C.GoString(expr) - - expr = C.pcap_datalink_val_to_description((*dltArray)[i]) - datalinks[i].Description = C.GoString(expr) - } - - return datalinks, nil -} - -// pcap_compile is NOT thread-safe, so protect it. -var pcapCompileMu sync.Mutex - -// compileBPFFilter always returns an allocated _Ctype_struct_bpf_program -// It is the callers responsibility to free the memory again, e.g. -// -// C.pcap_freecode(&bpf) -// -func (p *Handle) compileBPFFilter(expr string) (_Ctype_struct_bpf_program, error) { - errorBuf := (*C.char)(C.calloc(errorBufferSize, 1)) - defer C.free(unsafe.Pointer(errorBuf)) - - var netp uint32 - var maskp uint32 - - // Only do the lookup on network interfaces. - // No device indicates we're handling a pcap file. - if len(p.device) > 0 { - dev := C.CString(p.device) - defer C.free(unsafe.Pointer(dev)) - if -1 == C.pcap_lookupnet( - dev, - (*C.bpf_u_int32)(unsafe.Pointer(&netp)), - (*C.bpf_u_int32)(unsafe.Pointer(&maskp)), - errorBuf, - ) { - // We can't lookup the network, but that could be because the interface - // doesn't have an IPv4. - } - } - - var bpf _Ctype_struct_bpf_program - cexpr := C.CString(expr) - defer C.free(unsafe.Pointer(cexpr)) - - pcapCompileMu.Lock() - defer pcapCompileMu.Unlock() - if -1 == C.pcap_compile(p.cptr, &bpf, cexpr, 1, C.bpf_u_int32(maskp)) { - return bpf, p.Error() - } - - return bpf, nil -} - -// CompileBPFFilter compiles and returns a BPF filter with given a link type and capture length. -func CompileBPFFilter(linkType layers.LinkType, captureLength int, expr string) ([]BPFInstruction, error) { - cptr := C.pcap_open_dead(C.int(linkType), C.int(captureLength)) - if cptr == nil { - return nil, errors.New("error opening dead capture") - } - - h := Handle{cptr: cptr} - defer h.Close() - return h.CompileBPFFilter(expr) -} - -// CompileBPFFilter compiles and returns a BPF filter for the pcap handle. -func (p *Handle) CompileBPFFilter(expr string) ([]BPFInstruction, error) { - bpf, err := p.compileBPFFilter(expr) - defer C.pcap_freecode(&bpf) - if err != nil { - return nil, err - } - - bpfInsn := (*[bpfInstructionBufferSize]_Ctype_struct_bpf_insn)(unsafe.Pointer(bpf.bf_insns))[0:bpf.bf_len:bpf.bf_len] - bpfInstruction := make([]BPFInstruction, len(bpfInsn), len(bpfInsn)) - - for i, v := range bpfInsn { - bpfInstruction[i].Code = uint16(v.code) - bpfInstruction[i].Jt = uint8(v.jt) - bpfInstruction[i].Jf = uint8(v.jf) - bpfInstruction[i].K = uint32(v.k) - } - - return bpfInstruction, nil -} - -// SetBPFFilter compiles and sets a BPF filter for the pcap handle. -func (p *Handle) SetBPFFilter(expr string) (err error) { - bpf, err := p.compileBPFFilter(expr) - defer C.pcap_freecode(&bpf) - if err != nil { - return err - } - - if -1 == C.pcap_setfilter(p.cptr, &bpf) { - return p.Error() - } - - return nil -} - -// SetBPFInstructionFilter may be used to apply a filter in BPF asm byte code format. -// -// Simplest way to generate BPF asm byte code is with tcpdump: -// tcpdump -dd 'udp' -// -// The output may be used directly to add a filter, e.g.: -// bpfInstructions := []pcap.BpfInstruction{ -// {0x28, 0, 0, 0x0000000c}, -// {0x15, 0, 9, 0x00000800}, -// {0x30, 0, 0, 0x00000017}, -// {0x15, 0, 7, 0x00000006}, -// {0x28, 0, 0, 0x00000014}, -// {0x45, 5, 0, 0x00001fff}, -// {0xb1, 0, 0, 0x0000000e}, -// {0x50, 0, 0, 0x0000001b}, -// {0x54, 0, 0, 0x00000012}, -// {0x15, 0, 1, 0x00000012}, -// {0x6, 0, 0, 0x0000ffff}, -// {0x6, 0, 0, 0x00000000}, -// } -// -// An other posibility is to write the bpf code in bpf asm. -// Documentation: https://www.kernel.org/doc/Documentation/networking/filter.txt -// -// To compile the code use bpf_asm from -// https://github.com/torvalds/linux/tree/master/tools/net -// -// The following command may be used to convert bpf_asm output to c/go struct, usable for SetBPFFilterByte: -// bpf_asm -c tcp.bpf -func (p *Handle) SetBPFInstructionFilter(bpfInstructions []BPFInstruction) (err error) { - bpf, err := bpfInstructionFilter(bpfInstructions) - if err != nil { - return err - } - - if -1 == C.pcap_setfilter(p.cptr, &bpf) { - C.pcap_freecode(&bpf) - return p.Error() - } - - C.pcap_freecode(&bpf) - - return nil -} -func bpfInstructionFilter(bpfInstructions []BPFInstruction) (bpf _Ctype_struct_bpf_program, err error) { - if len(bpfInstructions) < 1 { - return bpf, errors.New("bpfInstructions must not be empty") - } - - if len(bpfInstructions) > MaxBpfInstructions { - return bpf, fmt.Errorf("bpfInstructions must not be larger than %d", MaxBpfInstructions) - } - - bpf.bf_len = C.u_int(len(bpfInstructions)) - cbpfInsns := C.calloc(C.size_t(len(bpfInstructions)), C.size_t(unsafe.Sizeof(bpfInstructions[0]))) - - copy((*[bpfInstructionBufferSize]BPFInstruction)(cbpfInsns)[0:len(bpfInstructions)], bpfInstructions) - bpf.bf_insns = (*_Ctype_struct_bpf_insn)(cbpfInsns) - - return -} - -// NewBPF compiles the given string into a new filter program. -// -// BPF filters need to be created from activated handles, because they need to -// know the underlying link type to correctly compile their offsets. -func (p *Handle) NewBPF(expr string) (*BPF, error) { - bpf := &BPF{orig: expr} - cexpr := C.CString(expr) - defer C.free(unsafe.Pointer(cexpr)) - - pcapCompileMu.Lock() - defer pcapCompileMu.Unlock() - if C.pcap_compile(p.cptr, &bpf.bpf, cexpr /* optimize */, 1, C.PCAP_NETMASK_UNKNOWN) != 0 { - return nil, p.Error() - } - - runtime.SetFinalizer(bpf, destroyBPF) - return bpf, nil -} - -// NewBPFInstructionFilter sets the given BPFInstructions as new filter program. -// -// More details see func SetBPFInstructionFilter -// -// BPF filters need to be created from activated handles, because they need to -// know the underlying link type to correctly compile their offsets. -func (p *Handle) NewBPFInstructionFilter(bpfInstructions []BPFInstruction) (*BPF, error) { - var err error - bpf := &BPF{orig: "BPF Instruction Filter"} - - bpf.bpf, err = bpfInstructionFilter(bpfInstructions) - if err != nil { - return nil, err - } - - runtime.SetFinalizer(bpf, destroyBPF) - return bpf, nil -} -func destroyBPF(bpf *BPF) { - C.pcap_freecode(&bpf.bpf) -} - -// String returns the original string this BPF filter was compiled from. -func (b *BPF) String() string { - return b.orig -} - -// Matches returns true if the given packet data matches this filter. -func (b *BPF) Matches(ci gopacket.CaptureInfo, data []byte) bool { - var hdr C.struct_pcap_pkthdr - hdr.ts.tv_sec = C.gopacket_time_secs_t(ci.Timestamp.Unix()) - hdr.ts.tv_usec = C.gopacket_time_usecs_t(ci.Timestamp.Nanosecond() / 1000) - hdr.caplen = C.bpf_u_int32(len(data)) // Trust actual length over ci.Length. - hdr.len = C.bpf_u_int32(ci.Length) - dataptr := (*C.u_char)(unsafe.Pointer(&data[0])) - return C.pcap_offline_filter(&b.bpf, &hdr, dataptr) != 0 -} - -// Version returns pcap_lib_version. -func Version() string { - return C.GoString(C.pcap_lib_version()) -} - -// LinkType returns pcap_datalink, as a layers.LinkType. -func (p *Handle) LinkType() layers.LinkType { - return layers.LinkType(C.pcap_datalink(p.cptr)) -} - -// SetLinkType calls pcap_set_datalink on the pcap handle. -func (p *Handle) SetLinkType(dlt layers.LinkType) error { - if -1 == C.pcap_set_datalink(p.cptr, C.int(dlt)) { - return p.Error() - } - return nil -} - -// FindAllDevs attempts to enumerate all interfaces on the current machine. -func FindAllDevs() (ifs []Interface, err error) { - var buf *C.char - buf = (*C.char)(C.calloc(errorBufferSize, 1)) - defer C.free(unsafe.Pointer(buf)) - var alldevsp *C.pcap_if_t - - if -1 == C.pcap_findalldevs((**C.pcap_if_t)(&alldevsp), buf) { - return nil, errors.New(C.GoString(buf)) - } - defer C.pcap_freealldevs((*C.pcap_if_t)(alldevsp)) - dev := alldevsp - var i uint32 - for i = 0; dev != nil; dev = (*C.pcap_if_t)(dev.next) { - i++ - } - ifs = make([]Interface, i) - dev = alldevsp - for j := uint32(0); dev != nil; dev = (*C.pcap_if_t)(dev.next) { - var iface Interface - iface.Name = C.GoString(dev.name) - iface.Description = C.GoString(dev.description) - iface.Addresses = findalladdresses(dev.addresses) - // TODO: add more elements - ifs[j] = iface - j++ - } - return -} - -func findalladdresses(addresses *_Ctype_struct_pcap_addr) (retval []InterfaceAddress) { - // TODO - make it support more than IPv4 and IPv6? - retval = make([]InterfaceAddress, 0, 1) - for curaddr := addresses; curaddr != nil; curaddr = (*_Ctype_struct_pcap_addr)(curaddr.next) { - // Strangely, it appears that in some cases, we get a pcap address back from - // pcap_findalldevs with a nil .addr. It appears that we can skip over - // these. - if curaddr.addr == nil { - continue - } - var a InterfaceAddress - var err error - if a.IP, err = sockaddrToIP((*syscall.RawSockaddr)(unsafe.Pointer(curaddr.addr))); err != nil { - continue - } - // To be safe, we'll also check for netmask. - if curaddr.netmask == nil { - continue - } - if a.Netmask, err = sockaddrToIP((*syscall.RawSockaddr)(unsafe.Pointer(curaddr.netmask))); err != nil { - // If we got an IP address but we can't get a netmask, just return the IP - // address. - a.Netmask = nil - } - retval = append(retval, a) - } - return -} - -func sockaddrToIP(rsa *syscall.RawSockaddr) (IP []byte, err error) { - switch rsa.Family { - case syscall.AF_INET: - pp := (*syscall.RawSockaddrInet4)(unsafe.Pointer(rsa)) - IP = make([]byte, 4) - for i := 0; i < len(IP); i++ { - IP[i] = pp.Addr[i] - } - return - case syscall.AF_INET6: - pp := (*syscall.RawSockaddrInet6)(unsafe.Pointer(rsa)) - IP = make([]byte, 16) - for i := 0; i < len(IP); i++ { - IP[i] = pp.Addr[i] - } - return - } - err = errors.New("Unsupported address type") - return -} - -// WritePacketData calls pcap_sendpacket, injecting the given data into the pcap handle. -func (p *Handle) WritePacketData(data []byte) (err error) { - if -1 == C.pcap_sendpacket(p.cptr, (*C.u_char)(&data[0]), (C.int)(len(data))) { - err = p.Error() - } - return -} - -// Direction is used by Handle.SetDirection. -type Direction uint8 - -// Direction values for Handle.SetDirection. -const ( - DirectionIn Direction = C.PCAP_D_IN - DirectionOut Direction = C.PCAP_D_OUT - DirectionInOut Direction = C.PCAP_D_INOUT -) - -// SetDirection sets the direction for which packets will be captured. -func (p *Handle) SetDirection(direction Direction) error { - if direction != DirectionIn && direction != DirectionOut && direction != DirectionInOut { - return fmt.Errorf("Invalid direction: %v", direction) - } - if status := C.pcap_setdirection(p.cptr, (C.pcap_direction_t)(direction)); status < 0 { - return statusError(status) - } - return nil -} - -// TimestampSource tells PCAP which type of timestamp to use for packets. -type TimestampSource C.int - -// String returns the timestamp type as a human-readable string. -func (t TimestampSource) String() string { - return C.GoString(C.pcap_tstamp_type_val_to_name(C.int(t))) -} - -// TimestampSourceFromString translates a string into a timestamp type, case -// insensitive. -func TimestampSourceFromString(s string) (TimestampSource, error) { - cs := C.CString(s) - defer C.free(unsafe.Pointer(cs)) - t := C.pcap_tstamp_type_name_to_val(cs) - if t < 0 { - return 0, statusError(t) - } - return TimestampSource(t), nil -} - -func statusError(status C.int) error { - return errors.New(C.GoString(C.pcap_statustostr(status))) -} - -// InactiveHandle allows you to call pre-pcap_activate functions on your pcap -// handle to set it up just the way you'd like. -type InactiveHandle struct { - // cptr is the handle for the actual pcap C object. - cptr *C.pcap_t - device string - deviceIndex int - timeout time.Duration -} - -// Activate activates the handle. The current InactiveHandle becomes invalid -// and all future function calls on it will fail. -func (p *InactiveHandle) Activate() (*Handle, error) { - err := activateError(C.pcap_activate(p.cptr)) - if err != aeNoError { - return nil, err - } - h := &Handle{ - cptr: p.cptr, - timeout: p.timeout, - device: p.device, - deviceIndex: p.deviceIndex, - } - p.cptr = nil - return h, nil -} - -// CleanUp cleans up any stuff left over from a successful or failed building -// of a handle. -func (p *InactiveHandle) CleanUp() { - if p.cptr != nil { - C.pcap_close(p.cptr) - } -} - -// NewInactiveHandle creates a new InactiveHandle, which wraps an un-activated PCAP handle. -// Callers of NewInactiveHandle should immediately defer 'CleanUp', as in: -// inactive := NewInactiveHandle("eth0") -// defer inactive.CleanUp() -func NewInactiveHandle(device string) (*InactiveHandle, error) { - buf := (*C.char)(C.calloc(errorBufferSize, 1)) - defer C.free(unsafe.Pointer(buf)) - dev := C.CString(device) - defer C.free(unsafe.Pointer(dev)) - - // Try to get the interface index, but iy could be something like "any" - // in which case use 0, which doesn't exist in nature - deviceIndex := 0 - ifc, err := net.InterfaceByName(device) - if err == nil { - deviceIndex = ifc.Index - } - - // This copies a bunch of the pcap_open_live implementation from pcap.c: - cptr := C.pcap_create(dev, buf) - if cptr == nil { - return nil, errors.New(C.GoString(buf)) - } - return &InactiveHandle{cptr: cptr, device: device, deviceIndex: deviceIndex}, nil -} - -// SetSnapLen sets the snap length (max bytes per packet to capture). -func (p *InactiveHandle) SetSnapLen(snaplen int) error { - if status := C.pcap_set_snaplen(p.cptr, C.int(snaplen)); status < 0 { - return statusError(status) - } - return nil -} - -// SetPromisc sets the handle to either be promiscuous (capture packets -// unrelated to this host) or not. -func (p *InactiveHandle) SetPromisc(promisc bool) error { - var pro C.int - if promisc { - pro = 1 - } - if status := C.pcap_set_promisc(p.cptr, pro); status < 0 { - return statusError(status) - } - return nil -} - -// SetTimeout sets the read timeout for the handle. -// -// See the package documentation for important details regarding 'timeout'. -func (p *InactiveHandle) SetTimeout(timeout time.Duration) error { - if status := C.pcap_set_timeout(p.cptr, timeoutMillis(timeout)); status < 0 { - return statusError(status) - } - p.timeout = timeout - return nil -} - -// SupportedTimestamps returns a list of supported timstamp types for this -// handle. -func (p *InactiveHandle) SupportedTimestamps() (out []TimestampSource) { - var types *C.int - n := int(C.pcap_list_tstamp_types(p.cptr, &types)) - defer C.pcap_free_tstamp_types(types) - typesArray := (*[100]C.int)(unsafe.Pointer(types)) - for i := 0; i < n; i++ { - out = append(out, TimestampSource((*typesArray)[i])) - } - return -} - -// SetTimestampSource sets the type of timestamp generator PCAP uses when -// attaching timestamps to packets. -func (p *InactiveHandle) SetTimestampSource(t TimestampSource) error { - if status := C.pcap_set_tstamp_type(p.cptr, C.int(t)); status < 0 { - return statusError(status) - } - return nil -} - -// CannotSetRFMon is returned by SetRFMon if the handle does not allow -// setting RFMon because pcap_can_set_rfmon returns 0. -var CannotSetRFMon = errors.New("Cannot set rfmon for this handle") - -// SetRFMon turns on radio monitoring mode, similar to promiscuous mode but for -// wireless networks. If this mode is enabled, the interface will not need to -// associate with an access point before it can receive traffic. -func (p *InactiveHandle) SetRFMon(monitor bool) error { - var mon C.int - if monitor { - mon = 1 - } - switch canset := C.pcap_can_set_rfmon(p.cptr); canset { - case 0: - return CannotSetRFMon - case 1: - // success - default: - return statusError(canset) - } - if status := C.pcap_set_rfmon(p.cptr, mon); status != 0 { - return statusError(status) - } - return nil -} - -// SetBufferSize sets the buffer size (in bytes) of the handle. -func (p *InactiveHandle) SetBufferSize(bufferSize int) error { - if status := C.pcap_set_buffer_size(p.cptr, C.int(bufferSize)); status < 0 { - return statusError(status) - } - return nil -} - -// SetImmediateMode sets (or unsets) the immediate mode of the -// handle. In immediate mode, packets are delivered to the application -// as soon as they arrive. In other words, this overrides SetTimeout. -func (p *InactiveHandle) SetImmediateMode(mode bool) error { - var md C.int - if mode { - md = 1 - } - if status := C.pcap_set_immediate_mode(p.cptr, md); status < 0 { - return statusError(status) - } - return nil -} diff --git a/vendor/github.com/google/gopacket/pcap/pcap_test.go b/vendor/github.com/google/gopacket/pcap/pcap_test.go deleted file mode 100644 index 04f1812..0000000 --- a/vendor/github.com/google/gopacket/pcap/pcap_test.go +++ /dev/null @@ -1,308 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package pcap - -import ( - "fmt" - "io" - "io/ioutil" - "log" - "os" - "testing" - - "github.com/google/gopacket" - "github.com/google/gopacket/layers" -) - -func TestPcapNonexistentFile(t *testing.T) { - handle, err := OpenOffline("/path/to/nonexistent/file") - if err == nil { - t.Error("No error returned for nonexistent file open") - } else { - t.Logf("Error returned for nonexistent file: %v", err) - } - if handle != nil { - t.Error("Non-nil handle returned for nonexistent file open") - } -} - -func TestPcapFileRead(t *testing.T) { - invalidData := []byte{ - 0xAB, 0xAD, 0x1D, 0xEA, - } - - invalidPcap, err := ioutil.TempFile("", "invalid.pcap") - if err != nil { - t.Fatal(err) - } - defer os.Remove(invalidPcap.Name()) - - err = ioutil.WriteFile(invalidPcap.Name(), invalidData, 0644) - if err != nil { - t.Fatal(err) - } - defer invalidPcap.Close() - - for _, file := range []struct { - filename string - num int - expectedLayers []gopacket.LayerType - err string - }{ - {filename: "test_loopback.pcap", - num: 24, - expectedLayers: []gopacket.LayerType{ - layers.LayerTypeLoopback, - layers.LayerTypeIPv6, - layers.LayerTypeTCP, - }, - }, - {filename: "test_ethernet.pcap", - num: 16, - expectedLayers: []gopacket.LayerType{ - layers.LayerTypeEthernet, - layers.LayerTypeIPv4, - layers.LayerTypeTCP, - }, - }, - {filename: "test_dns.pcap", - num: 10, - expectedLayers: []gopacket.LayerType{ - layers.LayerTypeEthernet, - layers.LayerTypeIPv4, - layers.LayerTypeUDP, - layers.LayerTypeDNS, - }, - }, - {filename: invalidPcap.Name(), - num: 0, - err: "unknown file format", - }, - } { - t.Logf("\n\n\n\nProcessing file %s\n\n\n\n", file.filename) - - packets := []gopacket.Packet{} - if handle, err := OpenOffline(file.filename); err != nil { - if file.err != "" { - if err.Error() != file.err { - t.Errorf("expected message %q; got %q", file.err, err.Error()) - } - } else { - t.Fatal(err) - } - } else { - if file.err != "" { - t.Fatalf("Expected error, got none") - } - packetSource := gopacket.NewPacketSource(handle, handle.LinkType()) - for packet := range packetSource.Packets() { - packets = append(packets, packet) - } - } - if len(packets) != file.num { - t.Fatal("Incorrect number of packets, want", file.num, "got", len(packets)) - } - for i, p := range packets { - t.Log(p.Dump()) - for _, layertype := range file.expectedLayers { - if p.Layer(layertype) == nil { - t.Fatal("Packet", i, "has no layer type\n%s", layertype, p.Dump()) - } - } - } - } -} - -func TestBPF(t *testing.T) { - handle, err := OpenOffline("test_ethernet.pcap") - if err != nil { - t.Fatal(err) - } - - for _, expected := range []struct { - expr string - Error bool - Result bool - }{ - {"foobar", true, false}, - {"tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)", false, true}, - {"tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-ack", false, true}, - {"udp", false, false}, - } { - data, ci, err := handle.ReadPacketData() - if err != nil { - t.Fatal(err) - } - t.Log("Testing filter", expected.expr) - if bpf, err := handle.NewBPF(expected.expr); err != nil { - if !expected.Error { - t.Error(err, "while compiling filter was unexpected") - } - } else if expected.Error { - t.Error("expected error but didn't see one") - } else if matches := bpf.Matches(ci, data); matches != expected.Result { - t.Error("Filter result was", matches, "but should be", expected.Result) - } - } -} - -func TestBPFInstruction(t *testing.T) { - handle, err := OpenOffline("test_ethernet.pcap") - if err != nil { - t.Fatal(err) - } - - cntr := 0 - oversizedBpfInstructionBuffer := [MaxBpfInstructions + 1]BPFInstruction{} - - for _, expected := range []struct { - Filter string - BpfInstruction []BPFInstruction - Error bool - Result bool - }{ - // {"foobar", true, false}, - {"foobar", []BPFInstruction{}, true, false}, - - // tcpdump -dd 'tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)' - {"tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)", - []BPFInstruction{ - {0x28, 0, 0, 0x0000000c}, - {0x15, 0, 9, 0x00000800}, - {0x30, 0, 0, 0x00000017}, - {0x15, 0, 7, 0x00000006}, - {0x28, 0, 0, 0x00000014}, - {0x45, 5, 0, 0x00001fff}, - {0xb1, 0, 0, 0x0000000e}, - {0x50, 0, 0, 0x0000001b}, - {0x54, 0, 0, 0x00000012}, - {0x15, 0, 1, 0x00000012}, - {0x6, 0, 0, 0x0000ffff}, - {0x6, 0, 0, 0x00000000}, - }, false, true}, - - // tcpdump -dd 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-ack' - {"tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-ack", - []BPFInstruction{ - {0x28, 0, 0, 0x0000000c}, - {0x15, 0, 9, 0x00000800}, - {0x30, 0, 0, 0x00000017}, - {0x15, 0, 7, 0x00000006}, - {0x28, 0, 0, 0x00000014}, - {0x45, 5, 0, 0x00001fff}, - {0xb1, 0, 0, 0x0000000e}, - {0x50, 0, 0, 0x0000001b}, - {0x54, 0, 0, 0x00000012}, - {0x15, 0, 1, 0x00000010}, - {0x6, 0, 0, 0x0000ffff}, - {0x6, 0, 0, 0x00000000}, - }, false, true}, - - // tcpdump -dd 'udp' - {"udp", - []BPFInstruction{ - {0x28, 0, 0, 0x0000000c}, - {0x15, 0, 5, 0x000086dd}, - {0x30, 0, 0, 0x00000014}, - {0x15, 6, 0, 0x00000011}, - {0x15, 0, 6, 0x0000002c}, - {0x30, 0, 0, 0x00000036}, - {0x15, 3, 4, 0x00000011}, - {0x15, 0, 3, 0x00000800}, - {0x30, 0, 0, 0x00000017}, - {0x15, 0, 1, 0x00000011}, - {0x6, 0, 0, 0x0000ffff}, - {0x6, 0, 0, 0x00000000}, - }, false, false}, - - {"", oversizedBpfInstructionBuffer[:], true, false}, - } { - cntr++ - data, ci, err := handle.ReadPacketData() - if err != nil { - t.Fatal(err) - } - - t.Log("Testing BpfInstruction filter", cntr) - if bpf, err := handle.NewBPFInstructionFilter(expected.BpfInstruction); err != nil { - if !expected.Error { - t.Error(err, "while compiling filter was unexpected") - } - } else if expected.Error { - t.Error("expected error but didn't see one") - } else if matches := bpf.Matches(ci, data); matches != expected.Result { - t.Error("Filter result was", matches, "but should be", expected.Result) - } - - if expected.Filter != "" { - t.Log("Testing dead bpf filter", cntr) - if bpf, err := CompileBPFFilter(layers.LinkTypeEthernet, 65535, expected.Filter); err != nil { - if !expected.Error { - t.Error(err, "while compiling filter was unexpected") - } - } else if expected.Error { - t.Error("expected error but didn't see one") - } else { - if len(bpf) != len(expected.BpfInstruction) { - t.Errorf("expected %d instructions, got %d", len(expected.BpfInstruction), len(bpf)) - } - for i := 0; i < len(bpf); i++ { - if bpf[i] != expected.BpfInstruction[i] { - t.Errorf("expected instruction %d = %d, got %d", i, expected.BpfInstruction[i], bpf[i]) - } - } - } - } - } -} - -func ExampleBPF() { - handle, err := OpenOffline("test_ethernet.pcap") - if err != nil { - log.Fatal(err) - } - synack, err := handle.NewBPF("tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)") - if err != nil { - log.Fatal(err) - } - syn, err := handle.NewBPF("tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn") - if err != nil { - log.Fatal(err) - } - for { - data, ci, err := handle.ReadPacketData() - switch { - case err == io.EOF: - return - case err != nil: - log.Fatal(err) - case synack.Matches(ci, data): - fmt.Println("SYN/ACK packet") - case syn.Matches(ci, data): - fmt.Println("SYN packet") - default: - fmt.Println("SYN flag not set") - } - } - // Output: - // SYN packet - // SYN/ACK packet - // SYN flag not set - // SYN flag not set - // SYN flag not set - // SYN flag not set - // SYN flag not set - // SYN flag not set - // SYN flag not set - // SYN flag not set - // SYN flag not set - // SYN flag not set - // SYN flag not set - // SYN flag not set - // SYN flag not set - // SYN flag not set -} diff --git a/vendor/github.com/google/gopacket/pcap/pcap_tester.go b/vendor/github.com/google/gopacket/pcap/pcap_tester.go deleted file mode 100644 index ee32690..0000000 --- a/vendor/github.com/google/gopacket/pcap/pcap_tester.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// +build ignore - -// This binary tests that PCAP packet capture is working correctly by issuing -// HTTP requests, then making sure we actually capture data off the wire. -package main - -import ( - "errors" - "flag" - "fmt" - "log" - "net" - "net/http" - "os" - "time" - - "github.com/google/gopacket/pcap" -) - -var mode = flag.String("mode", "basic", "One of: basic,filtered,timestamp") - -func generatePackets() { - if resp, err := http.Get("http://code.google.com"); err != nil { - log.Printf("Could not get HTTP: %v", err) - } else { - resp.Body.Close() - } -} - -func main() { - flag.Parse() - ifaces, err := net.Interfaces() - if err != nil { - log.Fatal(err) - } - for _, iface := range ifaces { - log.Printf("Trying capture on %q", iface.Name) - if err := tryCapture(iface); err != nil { - log.Printf("Error capturing on %q: %v", iface.Name, err) - } else { - log.Printf("Successfully captured on %q", iface.Name) - return - } - } - os.Exit(1) -} - -func tryCapture(iface net.Interface) error { - if iface.Name[:2] == "lo" { - return errors.New("skipping loopback") - } - var h *pcap.Handle - var err error - switch *mode { - case "basic": - h, err = pcap.OpenLive(iface.Name, 65536, false, time.Second*3) - if err != nil { - return fmt.Errorf("openlive: %v", err) - } - defer h.Close() - case "filtered": - h, err = pcap.OpenLive(iface.Name, 65536, false, time.Second*3) - if err != nil { - return fmt.Errorf("openlive: %v", err) - } - defer h.Close() - if err := h.SetBPFFilter("port 80 or port 443"); err != nil { - return fmt.Errorf("setbpf: %v", err) - } - case "timestamp": - u, err := pcap.NewInactiveHandle(iface.Name) - if err != nil { - return err - } - defer u.CleanUp() - if err = u.SetSnapLen(65536); err != nil { - return err - } else if err = u.SetPromisc(false); err != nil { - return err - } else if err = u.SetTimeout(time.Second * 3); err != nil { - return err - } - sources := u.SupportedTimestamps() - if len(sources) == 0 { - return errors.New("no supported timestamp sources") - } else if err := u.SetTimestampSource(sources[0]); err != nil { - return fmt.Errorf("settimestampsource(%v): %v", sources[0], err) - } else if h, err = u.Activate(); err != nil { - return fmt.Errorf("could not activate: %v", err) - } - defer h.Close() - default: - panic("Invalid --mode: " + *mode) - } - go generatePackets() - h.ReadPacketData() // Do one dummy read to clear any timeouts. - data, ci, err := h.ReadPacketData() - if err != nil { - return fmt.Errorf("readpacketdata: %v", err) - } - log.Printf("Read packet, %v bytes, CI: %+v", len(data), ci) - return nil -} diff --git a/vendor/github.com/google/gopacket/pcap/pcap_unix.go b/vendor/github.com/google/gopacket/pcap/pcap_unix.go deleted file mode 100644 index b2a6dcd..0000000 --- a/vendor/github.com/google/gopacket/pcap/pcap_unix.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// Copyright 2009-2011 Andreas Krennmair. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. -// -// +build !windows - -package pcap - -/* -#include -#include - -// pcap_wait returns when the next packet is available or the timeout expires. -// Since it uses pcap_get_selectable_fd, it will not work in Windows. -int pcap_wait(pcap_t *p, int usec) { - fd_set fds; - int fd; - struct timeval tv; - - fd = pcap_get_selectable_fd(p); - if(fd < 0) { - return fd; - } - - FD_ZERO(&fds); - FD_SET(fd, &fds); - - tv.tv_sec = 0; - tv.tv_usec = usec; - - if(usec != 0) { - return select(fd+1, &fds, NULL, NULL, &tv); - } - - // block indefinitely if no timeout provided - return select(fd+1, &fds, NULL, NULL, NULL); -} -*/ -import "C" - -import ( - "errors" - "unsafe" -) - -func (p *Handle) openLive() error { - buf := (*C.char)(C.calloc(errorBufferSize, 1)) - defer C.free(unsafe.Pointer(buf)) - - // Change the device to non-blocking, we'll use pcap_wait to wait until the - // handle is ready to read. - if v := C.pcap_setnonblock(p.cptr, 1, buf); v == -1 { - return errors.New(C.GoString(buf)) - } - - return nil -} - -// waitForPacket waits for a packet or for the timeout to expire. -func (p *Handle) waitForPacket() { - // need to wait less than the read timeout according to pcap documentation. - // timeoutMillis rounds up to at least one millisecond so we can safely - // subtract up to a millisecond. - usec := timeoutMillis(p.timeout) * 1000 - usec -= 100 - - C.pcap_wait(p.cptr, usec) -} diff --git a/vendor/github.com/google/gopacket/pcap/pcap_windows.go b/vendor/github.com/google/gopacket/pcap/pcap_windows.go deleted file mode 100644 index e3df123..0000000 --- a/vendor/github.com/google/gopacket/pcap/pcap_windows.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// Copyright 2009-2011 Andreas Krennmair. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package pcap - -import ( - "runtime" -) - -func (p *Handle) openLive() error { - // do nothing - return nil -} - -// waitForPacket waits for a packet or for the timeout to expire. -func (p *Handle) waitForPacket() { - // can't use select() so instead just switch goroutines - runtime.Gosched() -} diff --git a/vendor/github.com/google/gopacket/pcap/pcapgo_test.go b/vendor/github.com/google/gopacket/pcap/pcapgo_test.go deleted file mode 100644 index 4de018a..0000000 --- a/vendor/github.com/google/gopacket/pcap/pcapgo_test.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package pcap - -import ( - "bytes" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" - "github.com/google/gopacket/pcapgo" - "io/ioutil" - "reflect" - "testing" - "time" -) - -func TestPCAPGoWrite(t *testing.T) { - f, err := ioutil.TempFile("", "pcapgo") - if err != nil { - t.Fatal(err) - } - data := []byte{0xab, 0xcd, 0xef, 0x01, 0x02, 0x03, 0x04} - ci := gopacket.CaptureInfo{ - Timestamp: time.Unix(12345667, 1234567000), - Length: 700, - CaptureLength: len(data), - } - func() { - defer f.Close() - w := pcapgo.NewWriter(f) - if err := w.WriteFileHeader(65536, layers.LinkTypeEthernet); err != nil { - t.Fatal(err) - } - if err := w.WritePacket(ci, data); err != nil { - t.Fatal(err) - } - }() - h, err := OpenOffline(f.Name()) - if err != nil { - t.Fatal(err) - } - defer h.Close() - gotData, gotCI, err := h.ReadPacketData() - if err != nil { - t.Fatal("could not read first packet:", err) - } - if !bytes.Equal(gotData, data) { - t.Errorf("byte mismatch:\nwant: %v\n got: %v", data, gotData) - } - if !reflect.DeepEqual(ci, gotCI) { - t.Errorf("CI mismatch:\nwant: %v\n got: %v", ci, gotCI) - } -} diff --git a/vendor/github.com/google/gopacket/pcap/test_dns.pcap b/vendor/github.com/google/gopacket/pcap/test_dns.pcap deleted file mode 100644 index 3a79f92..0000000 Binary files a/vendor/github.com/google/gopacket/pcap/test_dns.pcap and /dev/null differ diff --git a/vendor/github.com/google/gopacket/pcap/test_ethernet.pcap b/vendor/github.com/google/gopacket/pcap/test_ethernet.pcap deleted file mode 100644 index 1f8a87c..0000000 Binary files a/vendor/github.com/google/gopacket/pcap/test_ethernet.pcap and /dev/null differ diff --git a/vendor/github.com/google/gopacket/pcap/test_loopback.pcap b/vendor/github.com/google/gopacket/pcap/test_loopback.pcap deleted file mode 100644 index ddeb82c..0000000 Binary files a/vendor/github.com/google/gopacket/pcap/test_loopback.pcap and /dev/null differ diff --git a/vendor/github.com/google/gopacket/pcapgo/read.go b/vendor/github.com/google/gopacket/pcapgo/read.go deleted file mode 100644 index 5acd06f..0000000 --- a/vendor/github.com/google/gopacket/pcapgo/read.go +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2014 Damjan Cvetko. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package pcapgo - -import ( - "encoding/binary" - "errors" - "fmt" - "io" - "time" - - "bufio" - "compress/gzip" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" -) - -// Reader wraps an underlying io.Reader to read packet data in PCAP -// format. See http://wiki.wireshark.org/Development/LibpcapFileFormat -// for information on the file format. -// -// We currenty read v2.4 file format with nanosecond and microsecdond -// timestamp resolution in little-endian and big-endian encoding. -// -// If the PCAP data is gzip compressed it is transparently uncompressed -// by wrapping the given io.Reader with a gzip.Reader. -type Reader struct { - r io.Reader - byteOrder binary.ByteOrder - nanoSecsFactor uint32 - versionMajor uint16 - versionMinor uint16 - // timezone - // sigfigs - snaplen uint32 - linkType layers.LinkType - // reusable buffer - buf [16]byte -} - -const magicNanoseconds = 0xA1B23C4D -const magicMicrosecondsBigendian = 0xD4C3B2A1 -const magicNanosecondsBigendian = 0x4D3CB2A1 - -const magicGzip1 = 0x1f -const magicGzip2 = 0x8b - -// NewReader returns a new reader object, for reading packet data from -// the given reader. The reader must be open and header data is -// read from it at this point. -// If the file format is not supported an error is returned -// -// // Create new reader: -// f, _ := os.Open("/tmp/file.pcap") -// defer f.Close() -// r, err := NewReader(f) -// data, ci, err := r.ReadPacketData() -func NewReader(r io.Reader) (*Reader, error) { - ret := Reader{r: r} - if err := ret.readHeader(); err != nil { - return nil, err - } - return &ret, nil -} - -func (r *Reader) readHeader() error { - br := bufio.NewReader(r.r) - gzipMagic, err := br.Peek(2) - if err != nil { - return err - } - - if gzipMagic[0] == magicGzip1 && gzipMagic[1] == magicGzip2 { - if r.r, err = gzip.NewReader(br); err != nil { - return err - } - } else { - r.r = br - } - - buf := make([]byte, 24) - if n, err := io.ReadFull(r.r, buf); err != nil { - return err - } else if n < 24 { - return errors.New("Not enough data for read") - } - if magic := binary.LittleEndian.Uint32(buf[0:4]); magic == magicNanoseconds { - r.byteOrder = binary.LittleEndian - r.nanoSecsFactor = 1 - } else if magic == magicNanosecondsBigendian { - r.byteOrder = binary.BigEndian - r.nanoSecsFactor = 1 - } else if magic == magicMicroseconds { - r.byteOrder = binary.LittleEndian - r.nanoSecsFactor = 1000 - } else if magic == magicMicrosecondsBigendian { - r.byteOrder = binary.BigEndian - r.nanoSecsFactor = 1000 - } else { - return fmt.Errorf("Unknown magic %x", magic) - } - if r.versionMajor = r.byteOrder.Uint16(buf[4:6]); r.versionMajor != versionMajor { - return fmt.Errorf("Unknown major version %d", r.versionMajor) - } - if r.versionMinor = r.byteOrder.Uint16(buf[6:8]); r.versionMinor != versionMinor { - return fmt.Errorf("Unknown minor version %d", r.versionMinor) - } - // ignore timezone 8:12 and sigfigs 12:16 - r.snaplen = r.byteOrder.Uint32(buf[16:20]) - r.linkType = layers.LinkType(r.byteOrder.Uint32(buf[20:24])) - return nil -} - -// ReadPacketData reads next packet from file. -func (r *Reader) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) { - if ci, err = r.readPacketHeader(); err != nil { - return - } - if ci.CaptureLength > int(r.snaplen) { - err = fmt.Errorf("capture length exceeds snap length: %d > %d", 16+ci.CaptureLength, r.snaplen) - return - } - data = make([]byte, ci.CaptureLength) - _, err = io.ReadFull(r.r, data) - return data, ci, err -} - -func (r *Reader) readPacketHeader() (ci gopacket.CaptureInfo, err error) { - if _, err = io.ReadFull(r.r, r.buf[:]); err != nil { - return - } - ci.Timestamp = time.Unix(int64(r.byteOrder.Uint32(r.buf[0:4])), int64(r.byteOrder.Uint32(r.buf[4:8])*r.nanoSecsFactor)).UTC() - ci.CaptureLength = int(r.byteOrder.Uint32(r.buf[8:12])) - ci.Length = int(r.byteOrder.Uint32(r.buf[12:16])) - return -} - -// LinkType returns network, as a layers.LinkType. -func (r *Reader) LinkType() layers.LinkType { - return r.linkType -} - -// Snaplen returns the snapshot length of the capture file. -func (r *Reader) Snaplen() uint32 { - return r.snaplen -} - -// Reader formater -func (r *Reader) String() string { - return fmt.Sprintf("PcapFile maj: %x min: %x snaplen: %d linktype: %s", r.versionMajor, r.versionMinor, r.snaplen, r.linkType) -} diff --git a/vendor/github.com/google/gopacket/pcapgo/read_test.go b/vendor/github.com/google/gopacket/pcapgo/read_test.go deleted file mode 100644 index 87bf7ab..0000000 --- a/vendor/github.com/google/gopacket/pcapgo/read_test.go +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright 2014 Damjan Cvetko. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. -package pcapgo - -import ( - "bytes" - "testing" - "time" -) - -// test header read -func TestCreatePcapReader(t *testing.T) { - test := []byte{ - 0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - } - buf := bytes.NewBuffer(test) - _, err := NewReader(buf) - if err != nil { - t.Error(err) - t.FailNow() - } -} - -// test big endian file read -func TestCreatePcapReaderBigEndian(t *testing.T) { - test := []byte{ - 0xa1, 0xb2, 0xc3, 0xd4, 0x00, 0x02, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, - } - buf := bytes.NewBuffer(test) - _, err := NewReader(buf) - if err != nil { - t.Error(err) - t.FailNow() - } -} - -// test opening invalid data -func TestCreatePcapReaderFail(t *testing.T) { - test := []byte{ - 0xd0, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - } - buf := bytes.NewBuffer(test) - _, err := NewReader(buf) - if err == nil { - t.Error("Should fail but did not") - t.FailNow() - } -} - -func TestPacket(t *testing.T) { - test := []byte{ - 0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, // magic, maj, min - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // tz, sigfigs - 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // snaplen, linkType - 0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec - 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len - 0x01, 0x02, 0x03, 0x04, // data - } - - buf := bytes.NewBuffer(test) - r, err := NewReader(buf) - - data, ci, err := r.ReadPacketData() - if err != nil { - t.Error(err) - t.FailNow() - } - if !ci.Timestamp.Equal(time.Date(2014, 9, 18, 12, 13, 14, 1000, time.UTC)) { - t.Error("Invalid time read") - t.FailNow() - } - if ci.CaptureLength != 4 || ci.Length != 8 { - t.Error("Invalid CapLen or Len") - } - want := []byte{1, 2, 3, 4} - if !bytes.Equal(data, want) { - t.Errorf("buf mismatch:\nwant: %+v\ngot: %+v", want, data) - } -} - -func TestPacketNano(t *testing.T) { - test := []byte{ - 0x4d, 0x3c, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, // magic, maj, min - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // tz, sigfigs - 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // snaplen, linkType - 0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec - 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len - 0x01, 0x02, 0x03, 0x04, // data - } - - buf := bytes.NewBuffer(test) - r, err := NewReader(buf) - - data, ci, err := r.ReadPacketData() - if err != nil { - t.Error(err) - t.FailNow() - } - if !ci.Timestamp.Equal(time.Date(2014, 9, 18, 12, 13, 14, 1, time.UTC)) { - t.Error("Invalid time read") - t.FailNow() - } - if ci.CaptureLength != 4 || ci.Length != 8 { - t.Error("Invalid CapLen or Len") - } - want := []byte{1, 2, 3, 4} - if !bytes.Equal(data, want) { - t.Errorf("buf mismatch:\nwant: %+v\ngot: %+v", want, data) - } -} - -func TestGzipPacket(t *testing.T) { - test := []byte{ - 0x1f, 0x8b, 0x08, 0x08, 0x92, 0x4d, 0x81, 0x57, - 0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x00, 0xbb, - 0x72, 0x78, 0xd3, 0x42, 0x26, 0x06, 0x16, 0x06, - 0x18, 0xf8, 0xff, 0x9f, 0x81, 0x81, 0x11, 0x48, - 0x47, 0x9d, 0x91, 0x0a, 0x01, 0xd1, 0x20, 0x19, - 0x0e, 0x20, 0x66, 0x64, 0x62, 0x66, 0x01, 0x00, - 0xe4, 0x76, 0x9b, 0x75, 0x2c, 0x00, 0x00, 0x00, - } - buf := bytes.NewBuffer(test) - r, err := NewReader(buf) - if err != nil { - t.Error("Unexpected error returned:", err) - t.FailNow() - } - - data, ci, err := r.ReadPacketData() - if err != nil { - t.Error(err) - t.FailNow() - } - if !ci.Timestamp.Equal(time.Date(2014, 9, 18, 12, 13, 14, 1000, time.UTC)) { - t.Error("Invalid time read") - t.FailNow() - } - if ci.CaptureLength != 4 || ci.Length != 8 { - t.Error("Invalid CapLen or Len") - } - want := []byte{1, 2, 3, 4} - if !bytes.Equal(data, want) { - t.Errorf("buf mismatch:\nwant: %+v\ngot: %+v", want, data) - } -} - -func TestTruncatedGzipPacket(t *testing.T) { - test := []byte{ - 0x1f, 0x8b, 0x08, - } - buf := bytes.NewBuffer(test) - _, err := NewReader(buf) - if err == nil { - t.Error("Should fail but did not") - t.FailNow() - } -} - -func TestPacketBufferReuse(t *testing.T) { - test := []byte{ - 0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, // magic, maj, min - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // tz, sigfigs - 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // snaplen, linkType - 0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec - 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len - 0x01, 0x02, 0x03, 0x04, // data - 0x5A, 0xCC, 0x1A, 0x54, 0x01, 0x00, 0x00, 0x00, // sec, usec - 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, // cap len, full len - 0x01, 0x02, 0x03, 0x04, // data - } - - buf := bytes.NewBuffer(test) - r, err := NewReader(buf) - - data1, _, err := r.ReadPacketData() - if err != nil { - t.Error(err) - t.FailNow() - } - if want := []byte{1, 2, 3, 4}; !bytes.Equal(data1, want) { - t.Errorf("buf mismatch:\nwant: %+v\ngot: %+v", want, data1) - } - data2, _, err := r.ReadPacketData() - if err != nil { - t.Error(err) - t.FailNow() - } - for i := range data1 { - data1[i] = 0xff // modify data1 after getting data2, make sure we don't overlap buffers. - } - if want := []byte{1, 2, 3, 4}; !bytes.Equal(data2, want) { - t.Errorf("buf mismatch:\nwant: %+v\ngot: %+v", want, data2) - } -} diff --git a/vendor/github.com/google/gopacket/pcapgo/write.go b/vendor/github.com/google/gopacket/pcapgo/write.go deleted file mode 100644 index bfc312f..0000000 --- a/vendor/github.com/google/gopacket/pcapgo/write.go +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// Package pcapgo provides some native PCAP support, not requiring -// C libpcap to be installed. -package pcapgo - -import ( - "encoding/binary" - "fmt" - "io" - "time" - - "github.com/google/gopacket" - "github.com/google/gopacket/layers" -) - -// Writer wraps an underlying io.Writer to write packet data in PCAP -// format. See http://wiki.wireshark.org/Development/LibpcapFileFormat -// for information on the file format. -// -// For those that care, we currently write v2.4 files with nanosecond -// timestamp resolution and little-endian encoding. -type Writer struct { - w io.Writer -} - -const magicMicroseconds = 0xA1B2C3D4 -const versionMajor = 2 -const versionMinor = 4 - -// NewWriter returns a new writer object, for writing packet data out -// to the given writer. If this is a new empty writer (as opposed to -// an append), you must call WriteFileHeader before WritePacket. -// -// // Write a new file: -// f, _ := os.Create("/tmp/file.pcap") -// w := pcapgo.NewWriter(f) -// w.WriteFileHeader(65536, layers.LinkTypeEthernet) // new file, must do this. -// w.WritePacket(gopacket.CaptureInfo{...}, data1) -// f.Close() -// // Append to existing file (must have same snaplen and linktype) -// f2, _ := os.OpenFile("/tmp/file.pcap", os.O_APPEND, 0700) -// w2 := pcapgo.NewWriter(f2) -// // no need for file header, it's already written. -// w2.WritePacket(gopacket.CaptureInfo{...}, data2) -// f2.Close() -func NewWriter(w io.Writer) *Writer { - return &Writer{w: w} -} - -// WriteFileHeader writes a file header out to the writer. -// This must be called exactly once per output. -func (w *Writer) WriteFileHeader(snaplen uint32, linktype layers.LinkType) error { - var buf [24]byte - binary.LittleEndian.PutUint32(buf[0:4], magicMicroseconds) - binary.LittleEndian.PutUint16(buf[4:6], versionMajor) - binary.LittleEndian.PutUint16(buf[6:8], versionMinor) - // bytes 8:12 stay 0 (timezone = UTC) - // bytes 12:16 stay 0 (sigfigs is always set to zero, according to - // http://wiki.wireshark.org/Development/LibpcapFileFormat - binary.LittleEndian.PutUint32(buf[16:20], snaplen) - binary.LittleEndian.PutUint32(buf[20:24], uint32(linktype)) - _, err := w.w.Write(buf[:]) - return err -} - -const nanosPerMicro = 1000 - -func (w *Writer) writePacketHeader(ci gopacket.CaptureInfo) error { - var buf [16]byte - - t := ci.Timestamp - if t.IsZero() { - t = time.Now() - } - secs := t.Unix() - usecs := t.Nanosecond() / nanosPerMicro - binary.LittleEndian.PutUint32(buf[0:4], uint32(secs)) - binary.LittleEndian.PutUint32(buf[4:8], uint32(usecs)) - binary.LittleEndian.PutUint32(buf[8:12], uint32(ci.CaptureLength)) - binary.LittleEndian.PutUint32(buf[12:16], uint32(ci.Length)) - _, err := w.w.Write(buf[:]) - return err -} - -// WritePacket writes the given packet data out to the file. -func (w *Writer) WritePacket(ci gopacket.CaptureInfo, data []byte) error { - if ci.CaptureLength != len(data) { - return fmt.Errorf("capture length %d does not match data length %d", ci.CaptureLength, len(data)) - } - if ci.CaptureLength > ci.Length { - return fmt.Errorf("invalid capture info %+v: capture length > length", ci) - } - if err := w.writePacketHeader(ci); err != nil { - return fmt.Errorf("error writing packet header: %v", err) - } - _, err := w.w.Write(data) - return err -} diff --git a/vendor/github.com/google/gopacket/pcapgo/write_test.go b/vendor/github.com/google/gopacket/pcapgo/write_test.go deleted file mode 100644 index 5b87d6a..0000000 --- a/vendor/github.com/google/gopacket/pcapgo/write_test.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package pcapgo - -import ( - "bytes" - "github.com/google/gopacket" - "testing" - "time" -) - -func TestWriteHeader(t *testing.T) { - var buf bytes.Buffer - w := NewWriter(&buf) - w.WriteFileHeader(0x1234, 0x56) - want := []byte{ - 0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x34, 0x12, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, - } - if got := buf.Bytes(); !bytes.Equal(got, want) { - t.Errorf("buf mismatch:\nwant: %+v\ngot: %+v", want, got) - } -} - -func TestWritePacket(t *testing.T) { - ci := gopacket.CaptureInfo{ - Timestamp: time.Unix(0x01020304, 0xAA*1000), - Length: 0xABCD, - CaptureLength: 10, - } - data := []byte{9, 8, 7, 6, 5, 4, 3, 2, 1, 0} - var buf bytes.Buffer - w := NewWriter(&buf) - w.WritePacket(ci, data) - want := []byte{ - 0x04, 0x03, 0x02, 0x01, 0xAA, 0x00, 0x00, 0x00, - 0x0A, 0x00, 0x00, 0x00, 0xCD, 0xAB, 0x00, 0x00, - 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, - } - if got := buf.Bytes(); !bytes.Equal(got, want) { - t.Errorf("buf mismatch:\nwant: %+v\ngot: %+v", want, got) - } -} - -func TestCaptureInfoErrors(t *testing.T) { - data := []byte{1, 2, 3, 4} - ts := time.Unix(0, 0) - for _, test := range []gopacket.CaptureInfo{ - gopacket.CaptureInfo{ - Timestamp: ts, - Length: 5, - CaptureLength: 5, - }, - gopacket.CaptureInfo{ - Timestamp: ts, - Length: 3, - CaptureLength: 4, - }, - } { - var buf bytes.Buffer - w := NewWriter(&buf) - if err := w.WritePacket(test, data); err == nil { - t.Errorf("CaptureInfo %+v should have error", test) - } - } -} diff --git a/vendor/github.com/google/gopacket/pfring/doc.go b/vendor/github.com/google/gopacket/pfring/doc.go deleted file mode 100644 index 32baaf6..0000000 --- a/vendor/github.com/google/gopacket/pfring/doc.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -/*Package pfring wraps the PF_RING C library for Go. - -PF_RING is a high-performance packet capture library written by ntop.org (see -http://www.ntop.org/products/pf_ring/). This library allows you to utilize the -PF_RING library with gopacket to read packet data and decode it. - -This package is meant to be used with its parent, -http://github.com/google/gopacket, although it can also be used independently -if you just want to get packet data from the wire. - -Simple Example - -This is probably the simplest code you can use to start getting packets through -pfring: - - if ring, err := pfring.NewRing("eth0", 65536, pfring.FlagPromisc); err != nil { - panic(err) - } else if err := ring.SetBPFFilter("tcp and port 80"); err != nil { // optional - panic(err) - } else if err := ring.Enable(); err != nil { // Must do this!, or you get no packets! - panic(err) - } else { - packetSource := gopacket.NewPacketSource(ring, layers.LinkTypeEthernet) - for packet := range packetSource.Packets() { - handlePacket(packet) // Do something with a packet here. - } - } - -Pfring Tweaks - -PF_RING has a ton of optimizations and tweaks to make sure you get just the -packets you want. For example, if you're only using pfring to read packets, -consider running: - - ring.SetSocketMode(pfring.ReadOnly) - -If you only care about packets received on your interface (not those transmitted -by the interface), you can run: - - ring.SetDirection(pfring.ReceiveOnly) - -Pfring Clusters - -PF_RING has an idea of 'clusters', where multiple applications can all read from -the same cluster, and PF_RING will multiplex packets over that cluster such that -only one application receives each packet. We won't discuss this mechanism in -too much more detail (see the ntop.org docs for more info), but here's how to -utilize this with the pfring go library: - - ring.SetCluster(1, pfring.ClusterPerFlow5Tuple) -*/ -package pfring diff --git a/vendor/github.com/google/gopacket/pfring/pfring.go b/vendor/github.com/google/gopacket/pfring/pfring.go deleted file mode 100644 index 1d2fa68..0000000 --- a/vendor/github.com/google/gopacket/pfring/pfring.go +++ /dev/null @@ -1,343 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// Copyright 2009-2011 Andreas Krennmair. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package pfring - -/* -#cgo LDFLAGS: -lpfring -lpcap -#include -#include -#include - -int pfring_readpacketdatato_wrapper( - pfring* ring, - u_char* buffer, - u_int buffer_len, - struct pfring_pkthdr* hdr) { - // We can't pass a Go pointer to a Go pointer which means we can't pass - // buffer as a uchar**, like pfring_recv wants, for ReadPacketDataTo. So, - // this wrapper does the pointer conversion in C code. Since this isn't - // zero-copy, it turns out that the pointer-to-pointer part of things isn't - // actually used anyway. - return pfring_recv(ring, &buffer, buffer_len, hdr, 1); -} -*/ -import "C" - -// NOTE: If you install PF_RING with non-standard options, you may also need -// to use LDFLAGS -lnuma and/or -lrt. Both have been reported necessary if -// PF_RING is configured with --disable-bpf. - -import ( - "fmt" - "net" - "os" - "strconv" - "sync" - "time" - "unsafe" - - "github.com/google/gopacket" -) - -const errorBufferSize = 256 - -// Ring provides a handle to a pf_ring. -type Ring struct { - // cptr is the handle for the actual pcap C object. - cptr *C.pfring - snaplen int - useExtendedPacketHeader bool - interfaceIndex int - mu sync.Mutex - // Since pointers to these objects are passed into a C function, if - // they're declared locally then the Go compiler thinks they may have - // escaped into C-land, so it allocates them on the heap. This causes a - // huge memory hit, so to handle that we store them here instead. - pkthdr C.struct_pfring_pkthdr - bufPtr *C.u_char -} - -// Flag provides a set of boolean flags to use when creating a new ring. -type Flag uint32 - -// Set of flags that can be passed (OR'd together) to NewRing. -const ( - FlagReentrant Flag = C.PF_RING_REENTRANT - FlagLongHeader Flag = C.PF_RING_LONG_HEADER - FlagPromisc Flag = C.PF_RING_PROMISC - FlagDNASymmetricRSS Flag = C.PF_RING_DNA_SYMMETRIC_RSS - FlagTimestamp Flag = C.PF_RING_TIMESTAMP - FlagHWTimestamp Flag = C.PF_RING_HW_TIMESTAMP -) - -// NewRing creates a new PFRing. Note that when the ring is initially created, -// it is disabled. The caller must call Enable to start receiving packets. -// The caller should call Close on the given ring when finished with it. -func NewRing(device string, snaplen uint32, flags Flag) (ring *Ring, _ error) { - dev := C.CString(device) - defer C.free(unsafe.Pointer(dev)) - - cptr, err := C.pfring_open(dev, C.u_int32_t(snaplen), C.u_int32_t(flags)) - if cptr == nil || err != nil { - return nil, fmt.Errorf("pfring NewRing error: %v", err) - } - ring = &Ring{cptr: cptr, snaplen: int(snaplen)} - - if flags&FlagLongHeader == FlagLongHeader { - ring.useExtendedPacketHeader = true - } else { - ifc, err := net.InterfaceByName(device) - if err == nil { - ring.interfaceIndex = ifc.Index - } - } - ring.SetApplicationName(os.Args[0]) - return -} - -// Close closes the given Ring. After this call, the Ring should no longer be -// used. -func (r *Ring) Close() { - C.pfring_close(r.cptr) -} - -// NextResult is the return code from a call to Next. -type NextResult int32 - -// Set of results that could be returned from a call to get another packet. -const ( - NextNoPacketNonblocking NextResult = 0 - NextError NextResult = -1 - NextOk NextResult = 1 - NextNotEnabled NextResult = -7 -) - -// NextResult implements the error interface. -func (n NextResult) Error() string { - switch n { - case NextNoPacketNonblocking: - return "No packet available, nonblocking socket" - case NextError: - return "Generic error" - case NextOk: - return "Success (not an error)" - case NextNotEnabled: - return "Ring not enabled" - } - return strconv.Itoa(int(n)) -} - -// ReadPacketDataTo reads packet data into a user-supplied buffer. -// This function ignores snaplen and instead reads up to the length of the -// passed-in slice. -// The number of bytes read into data will be returned in ci.CaptureLength. -func (r *Ring) ReadPacketDataTo(data []byte) (ci gopacket.CaptureInfo, err error) { - // This tricky bufPtr points to the start of our slice data, so pfring_recv - // will actually write directly into our Go slice. Nice! - r.mu.Lock() - r.bufPtr = (*C.u_char)(unsafe.Pointer(&data[0])) - result := NextResult(C.pfring_readpacketdatato_wrapper(r.cptr, r.bufPtr, C.u_int(len(data)), &r.pkthdr)) - if result != NextOk { - err = result - r.mu.Unlock() - return - } - ci.Timestamp = time.Unix(int64(r.pkthdr.ts.tv_sec), - int64(r.pkthdr.ts.tv_usec)*1000) // convert micros to nanos - ci.CaptureLength = int(r.pkthdr.caplen) - ci.Length = int(r.pkthdr.len) - if r.useExtendedPacketHeader { - ci.InterfaceIndex = int(r.pkthdr.extended_hdr.if_index) - } else { - ci.InterfaceIndex = r.interfaceIndex - } - r.mu.Unlock() - return -} - -// ReadPacketData returns the next packet read from the pcap handle, along with an error -// code associated with that packet. If the packet is read successfully, the -// returned error is nil. -func (r *Ring) ReadPacketData() (data []byte, ci gopacket.CaptureInfo, err error) { - data = make([]byte, r.snaplen) - ci, err = r.ReadPacketDataTo(data) - if err != nil { - data = nil - return - } - data = data[:ci.CaptureLength] - return -} - -// ClusterType is a type of clustering used when balancing across multiple -// rings. -type ClusterType C.cluster_type - -const ( - // ClusterPerFlow clusters by - ClusterPerFlow ClusterType = C.cluster_per_flow - // ClusterRoundRobin round-robins packets between applications, ignoring - // packet information. - ClusterRoundRobin ClusterType = C.cluster_round_robin - // ClusterPerFlow2Tuple clusters by - ClusterPerFlow2Tuple ClusterType = C.cluster_per_flow_2_tuple - // ClusterPerFlow4Tuple clusters by - ClusterPerFlow4Tuple ClusterType = C.cluster_per_flow_4_tuple - // ClusterPerFlow5Tuple clusters by - ClusterPerFlow5Tuple ClusterType = C.cluster_per_flow_5_tuple - // ClusterPerFlowTCP5Tuple acts like ClusterPerFlow5Tuple for TCP packets and - // like ClusterPerFlow2Tuple for all other packets. - ClusterPerFlowTCP5Tuple ClusterType = C.cluster_per_flow_tcp_5_tuple -) - -// SetCluster sets which cluster the ring should be part of, and the cluster -// type to use. -func (r *Ring) SetCluster(cluster int, typ ClusterType) error { - if rv := C.pfring_set_cluster(r.cptr, C.u_int(cluster), C.cluster_type(typ)); rv != 0 { - return fmt.Errorf("Unable to set cluster, got error code %d", rv) - } - return nil -} - -// RemoveFromCluster removes the ring from the cluster it was put in with -// SetCluster. -func (r *Ring) RemoveFromCluster() error { - if rv := C.pfring_remove_from_cluster(r.cptr); rv != 0 { - return fmt.Errorf("Unable to remove from cluster, got error code %d", rv) - } - return nil -} - -// SetSamplingRate sets the sampling rate to 1/. -func (r *Ring) SetSamplingRate(rate int) error { - if rv := C.pfring_set_sampling_rate(r.cptr, C.u_int32_t(rate)); rv != 0 { - return fmt.Errorf("Unable to set sampling rate, got error code %d", rv) - } - return nil -} - -// SetBPFFilter sets the BPF filter for the ring. -func (r *Ring) SetBPFFilter(bpfFilter string) error { - filter := C.CString(bpfFilter) - defer C.free(unsafe.Pointer(filter)) - if rv := C.pfring_set_bpf_filter(r.cptr, filter); rv != 0 { - return fmt.Errorf("Unable to set BPF filter, got error code %d", rv) - } - return nil -} - -// RemoveBPFFilter removes the BPF filter from the ring. -func (r *Ring) RemoveBPFFilter() error { - if rv := C.pfring_remove_bpf_filter(r.cptr); rv != 0 { - return fmt.Errorf("Unable to remove BPF filter, got error code %d", rv) - } - return nil -} - -// WritePacketData uses the ring to send raw packet data to the interface. -func (r *Ring) WritePacketData(data []byte) error { - buf := (*C.char)(unsafe.Pointer(&data[0])) - if rv := C.pfring_send(r.cptr, buf, C.u_int(len(data)), 1); rv < 0 { - return fmt.Errorf("Unable to send packet data, got error code %d", rv) - } - return nil -} - -// Enable enables the given ring. This function MUST be called on each new -// ring after it has been set up, or that ring will NOT receive packets. -func (r *Ring) Enable() error { - if rv := C.pfring_enable_ring(r.cptr); rv != 0 { - return fmt.Errorf("Unable to enable ring, got error code %d", rv) - } - return nil -} - -// Disable disables the given ring. After this call, it will no longer receive -// packets. -func (r *Ring) Disable() error { - if rv := C.pfring_disable_ring(r.cptr); rv != 0 { - return fmt.Errorf("Unable to disable ring, got error code %d", rv) - } - return nil -} - -// Stats provides simple statistics on a ring. -type Stats struct { - Received, Dropped uint64 -} - -// Stats returns statistsics for the ring. -func (r *Ring) Stats() (s Stats, err error) { - var stats C.pfring_stat - if rv := C.pfring_stats(r.cptr, &stats); rv != 0 { - err = fmt.Errorf("Unable to get ring stats, got error code %d", rv) - return - } - s.Received = uint64(stats.recv) - s.Dropped = uint64(stats.drop) - return -} - -// Direction is a simple enum to set which packets (TX, RX, or both) a ring -// captures. -type Direction C.packet_direction - -const ( - // TransmitOnly will only capture packets transmitted by the ring's - // interface(s). - TransmitOnly Direction = C.tx_only_direction - // ReceiveOnly will only capture packets received by the ring's - // interface(s). - ReceiveOnly Direction = C.rx_only_direction - // ReceiveAndTransmit will capture both received and transmitted packets on - // the ring's interface(s). - ReceiveAndTransmit Direction = C.rx_and_tx_direction -) - -// SetDirection sets which packets should be captured by the ring. -func (r *Ring) SetDirection(d Direction) error { - if rv := C.pfring_set_direction(r.cptr, C.packet_direction(d)); rv != 0 { - return fmt.Errorf("Unable to set ring direction, got error code %d", rv) - } - return nil -} - -// SocketMode is an enum for setting whether a ring should read, write, or both. -type SocketMode C.socket_mode - -const ( - // WriteOnly sets up the ring to only send packets (Inject), not read them. - WriteOnly SocketMode = C.send_only_mode - // ReadOnly sets up the ring to only receive packets (ReadPacketData), not - // send them. - ReadOnly SocketMode = C.recv_only_mode - // WriteAndRead sets up the ring to both send and receive packets. - WriteAndRead SocketMode = C.send_and_recv_mode -) - -// SetSocketMode sets the mode of the ring socket to send, receive, or both. -func (r *Ring) SetSocketMode(s SocketMode) error { - if rv := C.pfring_set_socket_mode(r.cptr, C.socket_mode(s)); rv != 0 { - return fmt.Errorf("Unable to set socket mode, got error code %d", rv) - } - return nil -} - -// SetApplicationName sets a string name to the ring. This name is available in -// /proc stats for pf_ring. By default, NewRing automatically calls this with -// argv[0]. -func (r *Ring) SetApplicationName(name string) error { - buf := C.CString(name) - defer C.free(unsafe.Pointer(buf)) - if rv := C.pfring_set_application_name(r.cptr, buf); rv != 0 { - return fmt.Errorf("Unable to set ring application name, got error code %d", rv) - } - return nil -} diff --git a/vendor/github.com/google/gopacket/reassembly/cap2test.go b/vendor/github.com/google/gopacket/reassembly/cap2test.go deleted file mode 100644 index 1d43f1d..0000000 --- a/vendor/github.com/google/gopacket/reassembly/cap2test.go +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// +build ignore - -package main - -import ( - "bytes" - "flag" - "fmt" - "log" - "os" - "strings" - - "github.com/google/gopacket" - "github.com/google/gopacket/layers" - "github.com/google/gopacket/pcap" -) - -var input = flag.String("i", "", "Input filename") - -func main() { - var handler *pcap.Handle - var err error - flag.Parse() - if *input == "" { - log.Fatalf("Please specify input filename") - } - if handler, err = pcap.OpenOffline(*input); err != nil { - log.Fatalf("Failed to open: %s: %s", *input, err) - } - args := flag.Args() - if len(args) > 0 { - filter := strings.Join(args, " ") - if err := handler.SetBPFFilter(filter); err != nil { - log.Fatalf("Failed to set BPF filter \"%s\": %s", filter, err) - } - handler.Stats() - } - var decoder gopacket.Decoder - var ok bool - linkType := fmt.Sprintf("%s", handler.LinkType()) - if decoder, ok = gopacket.DecodersByLayerName[linkType]; !ok { - log.Fatalf("Failed to find decoder to pcap's linktype %s", linkType) - } - source := gopacket.NewPacketSource(handler, decoder) - count := uint64(0) - pktNonTcp := uint64(0) - pktTcp := uint64(0) - fmt.Println("test([]testSequence{") - for packet := range source.Packets() { - count++ - tcp := packet.Layer(layers.LayerTypeTCP) - if tcp == nil { - pktNonTcp++ - continue - } else { - pktTcp++ - tcp := tcp.(*layers.TCP) - //fmt.Printf("packet: %s\n", tcp) - var b bytes.Buffer - b.WriteString("{\n") - // TCP - b.WriteString("tcp: layers.TCP{\n") - if tcp.SYN { - b.WriteString(" SYN: true,\n") - } - if tcp.ACK { - b.WriteString(" ACK: true,\n") - } - if tcp.RST { - b.WriteString(" RST: true,\n") - } - if tcp.FIN { - b.WriteString(" FIN: true,\n") - } - b.WriteString(fmt.Sprintf(" SrcPort: %d,\n", tcp.SrcPort)) - b.WriteString(fmt.Sprintf(" DstPort: %d,\n", tcp.DstPort)) - b.WriteString(fmt.Sprintf(" Seq: %d,\n", tcp.Seq)) - b.WriteString(fmt.Sprintf(" Ack: %d,\n", tcp.Ack)) - b.WriteString(" BaseLayer: layers.BaseLayer{Payload: []byte{") - for _, p := range tcp.Payload { - b.WriteString(fmt.Sprintf("%d,", p)) - } - b.WriteString("}},\n") - b.WriteString("},\n") - // CaptureInfo - b.WriteString("ci: gopacket.CaptureInfo{\n") - ts := packet.Metadata().CaptureInfo.Timestamp - b.WriteString(fmt.Sprintf(" Timestamp: time.Unix(%d,%d),\n", ts.Unix(), ts.Nanosecond())) - b.WriteString("},\n") - // Struct - b.WriteString("},\n") - fmt.Print(b.String()) - } - - } - fmt.Println("})") - - fmt.Fprintf(os.Stderr, "Total: %d, TCP: %d, non-TCP: %d\n", count, pktTcp, pktNonTcp) -} diff --git a/vendor/github.com/google/gopacket/reassembly/memory.go b/vendor/github.com/google/gopacket/reassembly/memory.go deleted file mode 100644 index c1b2ae7..0000000 --- a/vendor/github.com/google/gopacket/reassembly/memory.go +++ /dev/null @@ -1,254 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package reassembly - -import ( - "flag" - "log" - "sync" - "time" - - "github.com/google/gopacket/layers" -) - -var memLog = flag.Bool("assembly_memuse_log", defaultDebug, "If true, the github.com/google/gopacket/reassembly library will log information regarding its memory use every once in a while.") - -/* - * pageCache - */ -// pageCache is a concurrency-unsafe store of page objects we use to avoid -// memory allocation as much as we can. -type pageCache struct { - free []*page - pcSize int - size, used int - pageRequests int64 - ops int - nextShrink int -} - -const initialAllocSize = 1024 - -func newPageCache() *pageCache { - pc := &pageCache{ - free: make([]*page, 0, initialAllocSize), - pcSize: initialAllocSize, - } - pc.grow() - return pc -} - -// grow exponentially increases the size of our page cache as much as necessary. -func (c *pageCache) grow() { - pages := make([]page, c.pcSize) - c.size += c.pcSize - for i := range pages { - c.free = append(c.free, &pages[i]) - } - if *memLog { - log.Println("PageCache: created", c.pcSize, "new pages, size:", c.size, "cap:", cap(c.free), "len:", len(c.free)) - } - // control next shrink attempt - c.nextShrink = c.pcSize - c.ops = 0 - // prepare for next alloc - c.pcSize *= 2 -} - -// Remove references to unused pages to let GC collect them -// Note: memory used by c.free itself it not collected. -func (c *pageCache) tryShrink() { - var min = c.pcSize / 2 - if min < initialAllocSize { - min = initialAllocSize - } - if len(c.free) <= min { - return - } - for i := range c.free[min:] { - c.free[min+i] = nil - } - c.size -= len(c.free) - min - c.free = c.free[:min] - c.pcSize = min -} - -// next returns a clean, ready-to-use page object. -func (c *pageCache) next(ts time.Time) (p *page) { - if *memLog { - c.pageRequests++ - if c.pageRequests&0xFFFF == 0 { - log.Println("PageCache:", c.pageRequests, "requested,", c.used, "used,", len(c.free), "free") - } - } - if len(c.free) == 0 { - c.grow() - } - i := len(c.free) - 1 - p, c.free = c.free[i], c.free[:i] - p.seen = ts - p.bytes = p.buf[:0] - c.used++ - if *memLog { - log.Printf("allocator returns %s\n", p) - } - c.ops++ - if c.ops > c.nextShrink { - c.ops = 0 - c.tryShrink() - } - - return p -} - -// replace replaces a page into the pageCache. -func (c *pageCache) replace(p *page) { - c.used-- - if *memLog { - log.Printf("replacing %s\n", p) - } - p.prev = nil - p.next = nil - c.free = append(c.free, p) -} - -/* - * StreamPool - */ - -// StreamPool stores all streams created by Assemblers, allowing multiple -// assemblers to work together on stream processing while enforcing the fact -// that a single stream receives its data serially. It is safe -// for concurrency, usable by multiple Assemblers at once. -// -// StreamPool handles the creation and storage of Stream objects used by one or -// more Assembler objects. When a new TCP stream is found by an Assembler, it -// creates an associated Stream by calling its StreamFactory's New method. -// Thereafter (until the stream is closed), that Stream object will receive -// assembled TCP data via Assembler's calls to the stream's Reassembled -// function. -// -// Like the Assembler, StreamPool attempts to minimize allocation. Unlike the -// Assembler, though, it does have to do some locking to make sure that the -// connection objects it stores are accessible to multiple Assemblers. -type StreamPool struct { - conns map[key]*connection - users int - mu sync.RWMutex - factory StreamFactory - free []*connection - all [][]connection - nextAlloc int - newConnectionCount int64 -} - -func (p *StreamPool) grow() { - conns := make([]connection, p.nextAlloc) - p.all = append(p.all, conns) - for i := range conns { - p.free = append(p.free, &conns[i]) - } - if *memLog { - log.Println("StreamPool: created", p.nextAlloc, "new connections") - } - p.nextAlloc *= 2 -} - -// Dump logs all connections -func (p *StreamPool) Dump() { - p.mu.Lock() - defer p.mu.Unlock() - log.Printf("Remaining %d connections: ", len(p.conns)) - for _, conn := range p.conns { - log.Printf("%v %s", conn.key, conn) - } -} - -func (p *StreamPool) remove(conn *connection) { - p.mu.Lock() - if _, ok := p.conns[conn.key]; ok { - delete(p.conns, conn.key) - p.free = append(p.free, conn) - } - p.mu.Unlock() -} - -// NewStreamPool creates a new connection pool. Streams will -// be created as necessary using the passed-in StreamFactory. -func NewStreamPool(factory StreamFactory) *StreamPool { - return &StreamPool{ - conns: make(map[key]*connection, initialAllocSize), - free: make([]*connection, 0, initialAllocSize), - factory: factory, - nextAlloc: initialAllocSize, - } -} - -func (p *StreamPool) connections() []*connection { - p.mu.RLock() - conns := make([]*connection, 0, len(p.conns)) - for _, conn := range p.conns { - conns = append(conns, conn) - } - p.mu.RUnlock() - return conns -} - -func (p *StreamPool) newConnection(k key, s Stream, ts time.Time) (c *connection, h *halfconnection, r *halfconnection) { - if *memLog { - p.newConnectionCount++ - if p.newConnectionCount&0x7FFF == 0 { - log.Println("StreamPool:", p.newConnectionCount, "requests,", len(p.conns), "used,", len(p.free), "free") - } - } - if len(p.free) == 0 { - p.grow() - } - index := len(p.free) - 1 - c, p.free = p.free[index], p.free[:index] - c.reset(k, s, ts) - return c, &c.c2s, &c.s2c -} - -func (p *StreamPool) getHalf(k key) (*connection, *halfconnection, *halfconnection) { - conn := p.conns[k] - if conn != nil { - return conn, &conn.c2s, &conn.s2c - } - rk := k.Reverse() - conn = p.conns[rk] - if conn != nil { - return conn, &conn.s2c, &conn.c2s - } - return nil, nil, nil -} - -// getConnection returns a connection. If end is true and a connection -// does not already exist, returns nil. This allows us to check for a -// connection without actually creating one if it doesn't already exist. -func (p *StreamPool) getConnection(k key, end bool, ts time.Time, tcp *layers.TCP, ac AssemblerContext) (*connection, *halfconnection, *halfconnection) { - p.mu.RLock() - conn, half, rev := p.getHalf(k) - p.mu.RUnlock() - if end || conn != nil { - return conn, half, rev - } - s := p.factory.New(k[0], k[1], tcp, ac) - p.mu.Lock() - defer p.mu.Unlock() - conn, half, rev = p.newConnection(k, s, ts) - conn2, half2, rev2 := p.getHalf(k) - if conn2 != nil { - if conn2.key != k { - panic("FIXME: other dir added in the meantime...") - } - // FIXME: delete s ? - return conn2, half2, rev2 - } - p.conns[k] = conn - return conn, half, rev -} diff --git a/vendor/github.com/google/gopacket/reassembly/tcpassembly.go b/vendor/github.com/google/gopacket/reassembly/tcpassembly.go deleted file mode 100644 index bdf0deb..0000000 --- a/vendor/github.com/google/gopacket/reassembly/tcpassembly.go +++ /dev/null @@ -1,1311 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// Package reassembly provides TCP stream re-assembly. -// -// The reassembly package implements uni-directional TCP reassembly, for use in -// packet-sniffing applications. The caller reads packets off the wire, then -// presents them to an Assembler in the form of gopacket layers.TCP packets -// (github.com/google/gopacket, github.com/google/gopacket/layers). -// -// The Assembler uses a user-supplied -// StreamFactory to create a user-defined Stream interface, then passes packet -// data in stream order to that object. A concurrency-safe StreamPool keeps -// track of all current Streams being reassembled, so multiple Assemblers may -// run at once to assemble packets while taking advantage of multiple cores. -// -// TODO: Add simplest example -package reassembly - -import ( - "encoding/hex" - "flag" - "fmt" - "log" - "sync" - "time" - - "github.com/google/gopacket" - "github.com/google/gopacket/layers" -) - -// TODO: -// - push to Stream on Ack -// - implement chunked (cheap) reads and Reader() interface -// - better organize file: split files: 'mem', 'misc' (seq + flow) - -var defaultDebug = false - -var debugLog = flag.Bool("assembly_debug_log", defaultDebug, "If true, the github.com/google/gopacket/reassembly library will log verbose debugging information (at least one line per packet)") - -const invalidSequence = -1 -const uint32Max = 0xFFFFFFFF - -// Sequence is a TCP sequence number. It provides a few convenience functions -// for handling TCP wrap-around. The sequence should always be in the range -// [0,0xFFFFFFFF]... its other bits are simply used in wrap-around calculations -// and should never be set. -type Sequence int64 - -// Difference defines an ordering for comparing TCP sequences that's safe for -// roll-overs. It returns: -// > 0 : if t comes after s -// < 0 : if t comes before s -// 0 : if t == s -// The number returned is the sequence difference, so 4.Difference(8) will -// return 4. -// -// It handles rollovers by considering any sequence in the first quarter of the -// uint32 space to be after any sequence in the last quarter of that space, thus -// wrapping the uint32 space. -func (s Sequence) Difference(t Sequence) int { - if s > uint32Max-uint32Max/4 && t < uint32Max/4 { - t += uint32Max - } else if t > uint32Max-uint32Max/4 && s < uint32Max/4 { - s += uint32Max - } - return int(t - s) -} - -// Add adds an integer to a sequence and returns the resulting sequence. -func (s Sequence) Add(t int) Sequence { - return (s + Sequence(t)) & uint32Max -} - -// TCPAssemblyStats provides some figures for a ScatterGather -type TCPAssemblyStats struct { - // For this ScatterGather - Chunks int - Packets int - // For the half connection, since last call to ReassembledSG() - QueuedBytes int - QueuedPackets int - OverlapBytes int - OverlapPackets int -} - -// ScatterGather is used to pass reassembled data and metadata of reassembled -// packets to a Stream via ReassembledSG -type ScatterGather interface { - // Returns the length of available bytes and saved bytes - Lengths() (int, int) - // Returns the bytes up to length (shall be <= available bytes) - Fetch(length int) []byte - // Tell to keep from offset - KeepFrom(offset int) - // Return CaptureInfo of packet corresponding to given offset - CaptureInfo(offset int) gopacket.CaptureInfo - // Return some info about the reassembled chunks - Info() (direction TCPFlowDirection, start bool, end bool, skip int) - // Return some stats regarding the state of the stream - Stats() TCPAssemblyStats -} - -// byteContainer is either a page or a livePacket -type byteContainer interface { - getBytes() []byte - length() int - convertToPages(*pageCache, int, AssemblerContext) (*page, *page, int) - captureInfo() gopacket.CaptureInfo - assemblerContext() AssemblerContext - release(*pageCache) int - isStart() bool - isEnd() bool - getSeq() Sequence - isPacket() bool -} - -// Implements a ScatterGather -type reassemblyObject struct { - all []byteContainer - Skip int - Direction TCPFlowDirection - saved int - toKeep int - // stats - queuedBytes int - queuedPackets int - overlapBytes int - overlapPackets int -} - -func (rl *reassemblyObject) Lengths() (int, int) { - l := 0 - for _, r := range rl.all { - l += r.length() - } - return l, rl.saved -} - -func (rl *reassemblyObject) Fetch(l int) []byte { - if l <= rl.all[0].length() { - return rl.all[0].getBytes()[:l] - } - bytes := make([]byte, 0, l) - for _, bc := range rl.all { - bytes = append(bytes, bc.getBytes()...) - } - return bytes[:l] -} - -func (rl *reassemblyObject) KeepFrom(offset int) { - rl.toKeep = offset -} - -func (rl *reassemblyObject) CaptureInfo(offset int) gopacket.CaptureInfo { - current := 0 - for _, r := range rl.all { - if current >= offset { - return r.captureInfo() - } - current += r.length() - } - // Invalid offset - return gopacket.CaptureInfo{} -} - -func (rl *reassemblyObject) Info() (TCPFlowDirection, bool, bool, int) { - return rl.Direction, rl.all[0].isStart(), rl.all[len(rl.all)-1].isEnd(), rl.Skip -} - -func (rl *reassemblyObject) Stats() TCPAssemblyStats { - packets := int(0) - for _, r := range rl.all { - if r.isPacket() { - packets++ - } - } - return TCPAssemblyStats{ - Chunks: len(rl.all), - Packets: packets, - QueuedBytes: rl.queuedBytes, - QueuedPackets: rl.queuedPackets, - OverlapBytes: rl.overlapBytes, - OverlapPackets: rl.overlapPackets, - } -} - -const pageBytes = 1900 - -// TCPFlowDirection distinguish the two half-connections directions. -// -// TCPDirClientToServer is assigned to half-connection for the first received -// packet, hence might be wrong if packets are not received in order. -// It's up to the caller (e.g. in Accept()) to decide if the direction should -// be interpretted differently. -type TCPFlowDirection bool - -// Value are not really useful -const ( - TCPDirClientToServer TCPFlowDirection = false - TCPDirServerToClient TCPFlowDirection = true -) - -func (dir TCPFlowDirection) String() string { - switch dir { - case TCPDirClientToServer: - return "client->server" - case TCPDirServerToClient: - return "server->client" - } - return "" -} - -// Reverse returns the reversed direction -func (dir TCPFlowDirection) Reverse() TCPFlowDirection { - return !dir -} - -/* page: implements a byteContainer */ - -// page is used to store TCP data we're not ready for yet (out-of-order -// packets). Unused pages are stored in and returned from a pageCache, which -// avoids memory allocation. Used pages are stored in a doubly-linked list in -// a connection. -type page struct { - bytes []byte - seq Sequence - prev, next *page - buf [pageBytes]byte - ac AssemblerContext // only set for the first page of a packet - seen time.Time - start, end bool -} - -func (p *page) getBytes() []byte { - return p.bytes -} -func (p *page) captureInfo() gopacket.CaptureInfo { - return p.ac.GetCaptureInfo() -} -func (p *page) assemblerContext() AssemblerContext { - return p.ac -} -func (p *page) convertToPages(pc *pageCache, skip int, ac AssemblerContext) (*page, *page, int) { - if skip != 0 { - p.bytes = p.bytes[skip:] - p.seq = p.seq.Add(skip) - } - p.prev, p.next = nil, nil - return p, p, 1 -} -func (p *page) length() int { - return len(p.bytes) -} -func (p *page) release(pc *pageCache) int { - pc.replace(p) - return 1 -} -func (p *page) isStart() bool { - return p.start -} -func (p *page) isEnd() bool { - return p.end -} -func (p *page) getSeq() Sequence { - return p.seq -} -func (p *page) isPacket() bool { - return p.ac != nil -} -func (p *page) String() string { - return fmt.Sprintf("page@%p{seq: %v, bytes:%d, -> nextSeq:%v} (prev:%p, next:%p)", p, p.seq, len(p.bytes), p.seq+Sequence(len(p.bytes)), p.prev, p.next) -} - -/* livePacket: implements a byteContainer */ -type livePacket struct { - bytes []byte - start bool - end bool - ci gopacket.CaptureInfo - ac AssemblerContext - seq Sequence -} - -func (lp *livePacket) getBytes() []byte { - return lp.bytes -} -func (lp *livePacket) captureInfo() gopacket.CaptureInfo { - return lp.ci -} -func (lp *livePacket) assemblerContext() AssemblerContext { - return lp.ac -} -func (lp *livePacket) length() int { - return len(lp.bytes) -} -func (lp *livePacket) isStart() bool { - return lp.start -} -func (lp *livePacket) isEnd() bool { - return lp.end -} -func (lp *livePacket) getSeq() Sequence { - return lp.seq -} -func (lp *livePacket) isPacket() bool { - return true -} - -// Creates a page (or set of pages) from a TCP packet: returns the first and last -// page in its doubly-linked list of new pages. -func (lp *livePacket) convertToPages(pc *pageCache, skip int, ac AssemblerContext) (*page, *page, int) { - ts := lp.ci.Timestamp - first := pc.next(ts) - current := first - current.prev = nil - first.ac = ac - numPages := 1 - seq, bytes := lp.seq.Add(skip), lp.bytes[skip:] - for { - length := min(len(bytes), pageBytes) - current.bytes = current.buf[:length] - copy(current.bytes, bytes) - current.seq = seq - bytes = bytes[length:] - if len(bytes) == 0 { - current.end = lp.isEnd() - current.next = nil - break - } - seq = seq.Add(length) - current.next = pc.next(ts) - current.next.prev = current - current = current.next - current.ac = nil - numPages++ - } - return first, current, numPages -} -func (lp *livePacket) estimateNumberOfPages() int { - return (len(lp.bytes) + pageBytes + 1) / pageBytes -} - -func (lp *livePacket) release(*pageCache) int { - return 0 -} - -// Stream is implemented by the caller to handle incoming reassembled -// TCP data. Callers create a StreamFactory, then StreamPool uses -// it to create a new Stream for every TCP stream. -// -// assembly will, in order: -// 1) Create the stream via StreamFactory.New -// 2) Call ReassembledSG 0 or more times, passing in reassembled TCP data in order -// 3) Call ReassemblyComplete one time, after which the stream is dereferenced by assembly. -type Stream interface { - // Tell whether the TCP packet should be accepted, start could be modified to force a start even if no SYN have been seen - Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, ackSeq Sequence, start *bool, ac AssemblerContext) bool - - // ReassembledSG is called zero or more times. - // ScatterGather is reused after each Reassembled call, - // so it's important to copy anything you need out of it, - // especially bytes (or use KeepFrom()) - ReassembledSG(sg ScatterGather, ac AssemblerContext) - - // ReassemblyComplete is called when assembly decides there is - // no more data for this Stream, either because a FIN or RST packet - // was seen, or because the stream has timed out without any new - // packet data (due to a call to FlushCloseOlderThan). - // It should return true if the connection should be removed from the pool - // It can return false if it want to see subsequent packets with Accept(), e.g. to - // see FIN-ACK, for deeper state-machine analysis. - ReassemblyComplete(ac AssemblerContext) bool -} - -// StreamFactory is used by assembly to create a new stream for each -// new TCP session. -type StreamFactory interface { - // New should return a new stream for the given TCP key. - New(netFlow, tcpFlow gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream -} - -type key [2]gopacket.Flow - -func (k *key) String() string { - return fmt.Sprintf("%s:%s", k[0], k[1]) -} - -func (k *key) Reverse() key { - return key{ - k[0].Reverse(), - k[1].Reverse(), - } -} - -const assemblerReturnValueInitialSize = 16 - -/* one-way connection, i.e. halfconnection */ -type halfconnection struct { - dir TCPFlowDirection - pages int // Number of pages used (both in first/last and saved) - saved *page // Doubly-linked list of in-order pages (seq < nextSeq) already given to Stream who told us to keep - first, last *page // Doubly-linked list of out-of-order pages (seq > nextSeq) - nextSeq Sequence // sequence number of in-order received bytes - ackSeq Sequence - created, lastSeen time.Time - stream Stream - closed bool - // for stats - queuedBytes int - queuedPackets int - overlapBytes int - overlapPackets int -} - -func (half *halfconnection) String() string { - closed := "" - if half.closed { - closed = "closed " - } - return fmt.Sprintf("%screated:%v, last:%v", closed, half.created, half.lastSeen) -} - -// Dump returns a string (crypticly) describing the halfconnction -func (half *halfconnection) Dump() string { - s := fmt.Sprintf("pages: %d\n"+ - "nextSeq: %d\n"+ - "ackSeq: %d\n"+ - "Seen : %s\n"+ - "dir: %s\n", half.pages, half.nextSeq, half.ackSeq, half.lastSeen, half.dir) - nb := 0 - for p := half.first; p != nil; p = p.next { - s += fmt.Sprintf(" Page[%d] %s len: %d\n", nb, p, len(p.bytes)) - nb++ - } - return s -} - -/* Bi-directionnal connection */ - -type connection struct { - key key // client->server - c2s, s2c halfconnection - mu sync.Mutex -} - -func (c *connection) reset(k key, s Stream, ts time.Time) { - c.key = k - base := halfconnection{ - nextSeq: invalidSequence, - ackSeq: invalidSequence, - created: ts, - lastSeen: ts, - stream: s, - } - c.c2s, c.s2c = base, base - c.c2s.dir, c.s2c.dir = TCPDirClientToServer, TCPDirServerToClient -} - -func (c *connection) String() string { - return fmt.Sprintf("c2s: %s, s2c: %s", &c.c2s, &c.s2c) -} - -/* - * Assembler - */ - -// DefaultAssemblerOptions provides default options for an assembler. -// These options are used by default when calling NewAssembler, so if -// modified before a NewAssembler call they'll affect the resulting Assembler. -// -// Note that the default options can result in ever-increasing memory usage -// unless one of the Flush* methods is called on a regular basis. -var DefaultAssemblerOptions = AssemblerOptions{ - MaxBufferedPagesPerConnection: 0, // unlimited - MaxBufferedPagesTotal: 0, // unlimited -} - -// AssemblerOptions controls the behavior of each assembler. Modify the -// options of each assembler you create to change their behavior. -type AssemblerOptions struct { - // MaxBufferedPagesTotal is an upper limit on the total number of pages to - // buffer while waiting for out-of-order packets. Once this limit is - // reached, the assembler will degrade to flushing every connection it - // gets a packet for. If <= 0, this is ignored. - MaxBufferedPagesTotal int - // MaxBufferedPagesPerConnection is an upper limit on the number of pages - // buffered for a single connection. Should this limit be reached for a - // particular connection, the smallest sequence number will be flushed, along - // with any contiguous data. If <= 0, this is ignored. - MaxBufferedPagesPerConnection int -} - -// Assembler handles reassembling TCP streams. It is not safe for -// concurrency... after passing a packet in via the Assemble call, the caller -// must wait for that call to return before calling Assemble again. Callers can -// get around this by creating multiple assemblers that share a StreamPool. In -// that case, each individual stream will still be handled serially (each stream -// has an individual mutex associated with it), however multiple assemblers can -// assemble different connections concurrently. -// -// The Assembler provides (hopefully) fast TCP stream re-assembly for sniffing -// applications written in Go. The Assembler uses the following methods to be -// as fast as possible, to keep packet processing speedy: -// -// Avoids Lock Contention -// -// Assemblers locks connections, but each connection has an individual lock, and -// rarely will two Assemblers be looking at the same connection. Assemblers -// lock the StreamPool when looking up connections, but they use Reader -// locks initially, and only force a write lock if they need to create a new -// connection or close one down. These happen much less frequently than -// individual packet handling. -// -// Each assembler runs in its own goroutine, and the only state shared between -// goroutines is through the StreamPool. Thus all internal Assembler state -// can be handled without any locking. -// -// NOTE: If you can guarantee that packets going to a set of Assemblers will -// contain information on different connections per Assembler (for example, -// they're already hashed by PF_RING hashing or some other hashing mechanism), -// then we recommend you use a seperate StreamPool per Assembler, thus -// avoiding all lock contention. Only when different Assemblers could receive -// packets for the same Stream should a StreamPool be shared between them. -// -// Avoids Memory Copying -// -// In the common case, handling of a single TCP packet should result in zero -// memory allocations. The Assembler will look up the connection, figure out -// that the packet has arrived in order, and immediately pass that packet on to -// the appropriate connection's handling code. Only if a packet arrives out of -// order is its contents copied and stored in memory for later. -// -// Avoids Memory Allocation -// -// Assemblers try very hard to not use memory allocation unless absolutely -// necessary. Packet data for sequential packets is passed directly to streams -// with no copying or allocation. Packet data for out-of-order packets is -// copied into reusable pages, and new pages are only allocated rarely when the -// page cache runs out. Page caches are Assembler-specific, thus not used -// concurrently and requiring no locking. -// -// Internal representations for connection objects are also reused over time. -// Because of this, the most common memory allocation done by the Assembler is -// generally what's done by the caller in StreamFactory.New. If no allocation -// is done there, then very little allocation is done ever, mostly to handle -// large increases in bandwidth or numbers of connections. -// -// TODO: The page caches used by an Assembler will grow to the size necessary -// to handle a workload, and currently will never shrink. This means that -// traffic spikes can result in large memory usage which isn't garbage -// collected when typical traffic levels return. -type Assembler struct { - AssemblerOptions - ret []byteContainer - pc *pageCache - connPool *StreamPool - cacheLP livePacket - cacheSG reassemblyObject - start bool -} - -// NewAssembler creates a new assembler. Pass in the StreamPool -// to use, may be shared across assemblers. -// -// This sets some sane defaults for the assembler options, -// see DefaultAssemblerOptions for details. -func NewAssembler(pool *StreamPool) *Assembler { - pool.mu.Lock() - pool.users++ - pool.mu.Unlock() - return &Assembler{ - ret: make([]byteContainer, assemblerReturnValueInitialSize), - pc: newPageCache(), - connPool: pool, - AssemblerOptions: DefaultAssemblerOptions, - } -} - -// Dump returns a short string describing the page usage of the Assembler -func (a *Assembler) Dump() string { - s := "" - s += fmt.Sprintf("pageCache: used: %d, size: %d, free: %d", a.pc.used, a.pc.size, len(a.pc.free)) - return s -} - -// AssemblerContext provides method to get metadata -type AssemblerContext interface { - GetCaptureInfo() gopacket.CaptureInfo -} - -// Implements AssemblerContext for Assemble() -type assemblerSimpleContext gopacket.CaptureInfo - -func (asc *assemblerSimpleContext) GetCaptureInfo() gopacket.CaptureInfo { - return gopacket.CaptureInfo(*asc) -} - -// Assemble calls AssembleWithContext with the current timestamp, useful for -// packets being read directly off the wire. -func (a *Assembler) Assemble(netFlow gopacket.Flow, t *layers.TCP) { - ctx := assemblerSimpleContext(gopacket.CaptureInfo{Timestamp: time.Now()}) - a.AssembleWithContext(netFlow, t, &ctx) -} - -type assemblerAction struct { - nextSeq Sequence - queue bool -} - -// AssembleWithContext reassembles the given TCP packet into its appropriate -// stream. -// -// The timestamp passed in must be the timestamp the packet was seen. -// For packets read off the wire, time.Now() should be fine. For packets read -// from PCAP files, CaptureInfo.Timestamp should be passed in. This timestamp -// will affect which streams are flushed by a call to FlushCloseOlderThan. -// -// Each AssembleWithContext call results in, in order: -// -// zero or one call to StreamFactory.New, creating a stream -// zero or one call to ReassembledSG on a single stream -// zero or one call to ReassemblyComplete on the same stream -func (a *Assembler) AssembleWithContext(netFlow gopacket.Flow, t *layers.TCP, ac AssemblerContext) { - var conn *connection - var half *halfconnection - var rev *halfconnection - - a.ret = a.ret[:0] - key := key{netFlow, t.TransportFlow()} - ci := ac.GetCaptureInfo() - timestamp := ci.Timestamp - - conn, half, rev = a.connPool.getConnection(key, false, timestamp, t, ac) - if conn == nil { - if *debugLog { - log.Printf("%v got empty packet on otherwise empty connection", key) - } - return - } - conn.mu.Lock() - defer conn.mu.Unlock() - if half.lastSeen.Before(timestamp) { - half.lastSeen = timestamp - } - a.start = half.nextSeq == invalidSequence && t.SYN - if !half.stream.Accept(t, ci, half.dir, rev.ackSeq, &a.start, ac) { - if *debugLog { - log.Printf("Ignoring packet") - } - return - } - if half.closed { - // this way is closed - return - } - - seq, ack, bytes := Sequence(t.Seq), Sequence(t.Ack), t.Payload - if t.ACK { - half.ackSeq = ack - } - // TODO: push when Ack is seen ?? - action := assemblerAction{ - nextSeq: Sequence(invalidSequence), - queue: true, - } - a.dump("AssembleWithContext()", half) - if half.nextSeq == invalidSequence { - if t.SYN { - if *debugLog { - log.Printf("%v saw first SYN packet, returning immediately, seq=%v", key, seq) - } - seq = seq.Add(1) - half.nextSeq = seq - action.queue = false - } else if a.start { - if *debugLog { - log.Printf("%v start forced", key) - } - half.nextSeq = seq - action.queue = false - } else { - if *debugLog { - log.Printf("%v waiting for start, storing into connection", key) - } - } - } else { - diff := half.nextSeq.Difference(seq) - if diff > 0 { - if *debugLog { - log.Printf("%v gap in sequence numbers (%v, %v) diff %v, storing into connection", key, half.nextSeq, seq, diff) - } - } else { - if *debugLog { - log.Printf("%v found contiguous data (%v, %v), returning immediately: len:%d", key, seq, half.nextSeq, len(bytes)) - } - action.queue = false - } - } - - action = a.handleBytes(bytes, seq, half, ci, t.SYN, t.RST || t.FIN, action, ac) - if len(a.ret) > 0 { - action.nextSeq = a.sendToConnection(conn, half, ac) - } - if action.nextSeq != invalidSequence { - half.nextSeq = action.nextSeq - if t.FIN { - half.nextSeq = half.nextSeq.Add(1) - } - } - if *debugLog { - log.Printf("%v nextSeq:%d", key, half.nextSeq) - } -} - -// Overlap strategies: -// - new packet overlaps with sent packets: -// 1) discard new overlapping part -// 2) overwrite old overlapped (TODO) -// - new packet overlaps existing queued packets: -// a) consider "age" by timestamp (TODO) -// b) consider "age" by being present -// Then -// 1) discard new overlapping part -// 2) overwrite queued part - -func (a *Assembler) checkOverlap(half *halfconnection, queue bool, ac AssemblerContext) { - var next *page - cur := half.last - bytes := a.cacheLP.bytes - start := a.cacheLP.seq - end := start.Add(len(bytes)) - - a.dump("before checkOverlap", half) - - // [s6 : e6] - // [s1:e1][s2:e2] -- [s3:e3] -- [s4:e4][s5:e5] - // [s <--ds-- : --de--> e] - for cur != nil { - - if *debugLog { - log.Printf("cur = %p (%s)\n", cur, cur) - } - - // end < cur.start: continue (5) - if end.Difference(cur.seq) > 0 { - if *debugLog { - log.Printf("case 5\n") - } - next = cur - cur = cur.prev - continue - } - - curEnd := cur.seq.Add(len(cur.bytes)) - // start > cur.end: stop (1) - if start.Difference(curEnd) <= 0 { - if *debugLog { - log.Printf("case 1\n") - } - break - } - - diffStart := start.Difference(cur.seq) - diffEnd := end.Difference(curEnd) - - // end > cur.end && start < cur.start: drop (3) - if diffEnd <= 0 && diffStart >= 0 { - if *debugLog { - log.Printf("case 3\n") - } - if cur.isPacket() { - half.overlapPackets++ - } - half.overlapBytes += len(cur.bytes) - // update links - if cur.prev != nil { - cur.prev.next = cur.next - } else { - half.first = cur.next - } - if cur.next != nil { - cur.next.prev = cur.prev - } else { - half.last = cur.prev - } - tmp := cur.prev - half.pages -= cur.release(a.pc) - cur = tmp - continue - } - - // end > cur.end && start < cur.end: drop cur's end (2) - if diffEnd < 0 && start.Difference(curEnd) > 0 { - if *debugLog { - log.Printf("case 2\n") - } - cur.bytes = cur.bytes[:-start.Difference(cur.seq)] - break - } else - - // start < cur.start && end > cur.start: drop cur's start (4) - if diffStart > 0 && end.Difference(cur.seq) < 0 { - if *debugLog { - log.Printf("case 4\n") - } - cur.bytes = cur.bytes[-end.Difference(cur.seq):] - cur.seq = cur.seq.Add(-end.Difference(cur.seq)) - next = cur - } else - - // end < cur.end && start > cur.start: replace bytes inside cur (6) - if diffEnd > 0 && diffStart < 0 { - if *debugLog { - log.Printf("case 6\n") - } - copy(cur.bytes[-diffStart:-diffStart+len(bytes)], bytes) - bytes = bytes[:0] - } else { - if *debugLog { - log.Printf("no overlap\n") - } - next = cur - } - cur = cur.prev - } - - // Split bytes into pages, and insert in queue - a.cacheLP.bytes = bytes - a.cacheLP.seq = start - if len(bytes) > 0 && queue { - p, p2, numPages := a.cacheLP.convertToPages(a.pc, 0, ac) - half.queuedPackets++ - half.queuedBytes += len(bytes) - half.pages += numPages - if cur != nil { - if *debugLog { - log.Printf("adding %s after %s", p, cur) - } - cur.next = p - p.prev = cur - } else { - if *debugLog { - log.Printf("adding %s as first", p) - } - half.first = p - } - if next != nil { - if *debugLog { - log.Printf("setting %s as next of new %s", next, p2) - } - p2.next = next - next.prev = p2 - } else { - if *debugLog { - log.Printf("setting %s as last", p2) - } - half.last = p2 - } - } - a.dump("After checkOverlap", half) -} - -// Warning: this is a low-level dumper, i.e. a.ret or a.cacheSG might -// be strange, but it could be ok. -func (a *Assembler) dump(text string, half *halfconnection) { - if !*debugLog { - return - } - log.Printf("%s: dump\n", text) - if half != nil { - p := half.first - if p == nil { - log.Printf(" * half.first = %p, no chunks queued\n", p) - } else { - s := 0 - nb := 0 - log.Printf(" * half.first = %p, queued chunks:", p) - for p != nil { - log.Printf("\t%s bytes:%s\n", p, hex.EncodeToString(p.bytes)) - s += len(p.bytes) - nb++ - p = p.next - } - log.Printf("\t%d chunks for %d bytes", nb, s) - } - log.Printf(" * half.last = %p\n", half.last) - log.Printf(" * half.saved = %p\n", half.saved) - p = half.saved - for p != nil { - log.Printf("\tseq:%d %s bytes:%s\n", p.getSeq(), p, hex.EncodeToString(p.bytes)) - p = p.next - } - } - log.Printf(" * a.ret\n") - for i, r := range a.ret { - log.Printf("\t%d: %s b:%s\n", i, r.captureInfo(), hex.EncodeToString(r.getBytes())) - } - log.Printf(" * a.cacheSG.all\n") - for i, r := range a.cacheSG.all { - log.Printf("\t%d: %s b:%s\n", i, r.captureInfo(), hex.EncodeToString(r.getBytes())) - } -} - -func (a *Assembler) overlapExisting(half *halfconnection, start, end Sequence, bytes []byte) ([]byte, Sequence) { - if half.nextSeq == invalidSequence { - // no start yet - return bytes, start - } - diff := start.Difference(half.nextSeq) - if diff == 0 { - return bytes, start - } - s := 0 - e := len(bytes) - // TODO: depending on strategy, we might want to shrink half.saved if possible - if e != 0 { - if *debugLog { - log.Printf("Overlap detected: ignoring current packet's first %d bytes", diff) - } - half.overlapPackets++ - half.overlapBytes += diff - } - start = start.Add(diff) - s += diff - if s >= e { - // Completely included in sent - s = e - } - bytes = bytes[s:] - e -= diff - return bytes, start -} - -// Prepare send or queue -func (a *Assembler) handleBytes(bytes []byte, seq Sequence, half *halfconnection, ci gopacket.CaptureInfo, start bool, end bool, action assemblerAction, ac AssemblerContext) assemblerAction { - a.cacheLP.bytes = bytes - a.cacheLP.start = start - a.cacheLP.end = end - a.cacheLP.seq = seq - a.cacheLP.ci = ci - a.cacheLP.ac = ac - - if action.queue { - a.checkOverlap(half, true, ac) - if (a.MaxBufferedPagesPerConnection > 0 && half.pages >= a.MaxBufferedPagesPerConnection) || - (a.MaxBufferedPagesTotal > 0 && a.pc.used >= a.MaxBufferedPagesTotal) { - if *debugLog { - log.Printf("hit max buffer size: %+v, %v, %v", a.AssemblerOptions, half.pages, a.pc.used) - } - action.queue = false - a.addNextFromConn(half) - } - a.dump("handleBytes after queue", half) - } else { - a.cacheLP.bytes, a.cacheLP.seq = a.overlapExisting(half, seq, seq.Add(len(bytes)), a.cacheLP.bytes) - a.checkOverlap(half, false, ac) - if len(a.cacheLP.bytes) != 0 || end || start { - a.ret = append(a.ret, &a.cacheLP) - } - a.dump("handleBytes after no queue", half) - } - return action -} - -func (a *Assembler) setStatsToSG(half *halfconnection) { - a.cacheSG.queuedBytes = half.queuedBytes - half.queuedBytes = 0 - a.cacheSG.queuedPackets = half.queuedPackets - half.queuedPackets = 0 - a.cacheSG.overlapBytes = half.overlapBytes - half.overlapBytes = 0 - a.cacheSG.overlapPackets = half.overlapPackets - half.overlapPackets = 0 -} - -// Build the ScatterGather object, i.e. prepend saved bytes and -// append continuous bytes. -func (a *Assembler) buildSG(half *halfconnection) (bool, Sequence) { - // find if there are skipped bytes - skip := -1 - if half.nextSeq != invalidSequence { - skip = half.nextSeq.Difference(a.ret[0].getSeq()) - } - last := a.ret[0].getSeq().Add(a.ret[0].length()) - // Prepend saved bytes - saved := a.addPending(half, a.ret[0].getSeq()) - // Append continuous bytes - nextSeq := a.addContiguous(half, last) - a.cacheSG.all = a.ret - a.cacheSG.Direction = half.dir - a.cacheSG.Skip = skip - a.cacheSG.saved = saved - a.cacheSG.toKeep = -1 - a.setStatsToSG(half) - a.dump("after buildSG", half) - return a.ret[len(a.ret)-1].isEnd(), nextSeq -} - -func (a *Assembler) cleanSG(half *halfconnection, ac AssemblerContext) { - cur := 0 - ndx := 0 - skip := 0 - - a.dump("cleanSG(start)", half) - - var r byteContainer - // Find first page to keep - if a.cacheSG.toKeep < 0 { - ndx = len(a.cacheSG.all) - } else { - skip = a.cacheSG.toKeep - found := false - for ndx, r = range a.cacheSG.all { - if a.cacheSG.toKeep < cur+r.length() { - found = true - break - } - cur += r.length() - if skip >= r.length() { - skip -= r.length() - } - } - if !found { - ndx++ - } - } - // Release consumed pages - for _, r := range a.cacheSG.all[:ndx] { - if r == half.saved { - if half.saved.next != nil { - half.saved.next.prev = nil - } - half.saved = half.saved.next - } else if r == half.first { - if half.first.next != nil { - half.first.next.prev = nil - } - if half.first == half.last { - half.first, half.last = nil, nil - } else { - half.first = half.first.next - } - } - half.pages -= r.release(a.pc) - } - a.dump("after consumed release", half) - // Keep un-consumed pages - nbKept := 0 - half.saved = nil - var saved *page - for _, r := range a.cacheSG.all[ndx:] { - first, last, nb := r.convertToPages(a.pc, skip, ac) - if half.saved == nil { - half.saved = first - } else { - saved.next = first - first.prev = saved - } - saved = last - nbKept += nb - } - if *debugLog { - log.Printf("Remaining %d chunks in SG\n", nbKept) - log.Printf("%s\n", a.Dump()) - a.dump("after cleanSG()", half) - } -} - -// sendToConnection sends the current values in a.ret to the connection, closing -// the connection if the last thing sent had End set. -func (a *Assembler) sendToConnection(conn *connection, half *halfconnection, ac AssemblerContext) Sequence { - if *debugLog { - log.Printf("sendToConnection\n") - } - end, nextSeq := a.buildSG(half) - half.stream.ReassembledSG(&a.cacheSG, ac) - a.cleanSG(half, ac) - if end { - a.closeHalfConnection(conn, half) - } - if *debugLog { - log.Printf("after sendToConnection: nextSeq: %d\n", nextSeq) - } - return nextSeq -} - -// -func (a *Assembler) addPending(half *halfconnection, firstSeq Sequence) int { - if half.saved == nil { - return 0 - } - s := 0 - ret := []byteContainer{} - for p := half.saved; p != nil; p = p.next { - if *debugLog { - log.Printf("adding pending @%p %s (%s)\n", p, p, hex.EncodeToString(p.bytes)) - } - ret = append(ret, p) - s += len(p.bytes) - } - if half.saved.seq.Add(s) != firstSeq { - // non-continuous saved: drop them - var next *page - for p := half.saved; p != nil; p = next { - next = p.next - p.release(a.pc) - } - half.saved = nil - ret = []byteContainer{} - s = 0 - } - - a.ret = append(ret, a.ret...) - return s -} - -// addContiguous adds contiguous byte-sets to a connection. -func (a *Assembler) addContiguous(half *halfconnection, lastSeq Sequence) Sequence { - page := half.first - if page == nil { - if *debugLog { - log.Printf("addContiguous(%d): no pages\n", lastSeq) - } - return lastSeq - } - if lastSeq == invalidSequence { - lastSeq = page.seq - } - for page != nil && lastSeq.Difference(page.seq) == 0 { - if *debugLog { - log.Printf("addContiguous: lastSeq: %d, first.seq=%d, page.seq=%d\n", half.nextSeq, half.first.seq, page.seq) - } - lastSeq = lastSeq.Add(len(page.bytes)) - a.ret = append(a.ret, page) - half.first = page.next - if half.first == nil { - half.last = nil - } - if page.next != nil { - page.next.prev = nil - } - page = page.next - } - return lastSeq -} - -// skipFlush skips the first set of bytes we're waiting for and returns the -// first set of bytes we have. If we have no bytes saved, it closes the -// connection. -func (a *Assembler) skipFlush(conn *connection, half *halfconnection) { - if *debugLog { - log.Printf("skipFlush %v\n", half.nextSeq) - } - // Well, it's embarassing it there is still something in half.saved - // FIXME: change API to give back saved + new/no packets - if half.first == nil { - a.closeHalfConnection(conn, half) - return - } - a.ret = a.ret[:0] - a.addNextFromConn(half) - nextSeq := a.sendToConnection(conn, half, a.ret[0].assemblerContext()) - if nextSeq != invalidSequence { - half.nextSeq = nextSeq - } -} - -func (a *Assembler) closeHalfConnection(conn *connection, half *halfconnection) { - if *debugLog { - log.Printf("%v closing", conn) - } - half.closed = true - for p := half.first; p != nil; p = p.next { - // FIXME: it should be already empty - a.pc.replace(p) - half.pages-- - } - if conn.s2c.closed && conn.c2s.closed { - if half.stream.ReassemblyComplete(nil) { //FIXME: which context to pass ? - a.connPool.remove(conn) - } - } -} - -// addNextFromConn pops the first page from a connection off and adds it to the -// return array. -func (a *Assembler) addNextFromConn(conn *halfconnection) { - if conn.first == nil { - return - } - if *debugLog { - log.Printf(" adding from conn (%v, %v) %v (%d)\n", conn.first.seq, conn.nextSeq, conn.nextSeq-conn.first.seq, len(conn.first.bytes)) - } - a.ret = append(a.ret, conn.first) - conn.first = conn.first.next - if conn.first != nil { - conn.first.prev = nil - } else { - conn.last = nil - } -} - -// FlushOptions provide options for flushing connections. -type FlushOptions struct { - T time.Time // If nonzero, only connections with data older than T are flushed - TC time.Time // If nonzero, only connections with data older than TC are closed (if no FIN/RST received) -} - -// FlushWithOptions finds any streams waiting for packets older than -// the given time T, and pushes through the data they have (IE: tells -// them to stop waiting and skip the data they're waiting for). -// -// It also closes streams older than TC (that can be set to zero, to keep -// long-lived stream alive, but to flush data anyway). -// -// Each Stream maintains a list of zero or more sets of bytes it has received -// out-of-order. For example, if it has processed up through sequence number -// 10, it might have bytes [15-20), [20-25), [30,50) in its list. Each set of -// bytes also has the timestamp it was originally viewed. A flush call will -// look at the smallest subsequent set of bytes, in this case [15-20), and if -// its timestamp is older than the passed-in time, it will push it and all -// contiguous byte-sets out to the Stream's Reassembled function. In this case, -// it will push [15-20), but also [20-25), since that's contiguous. It will -// only push [30-50) if its timestamp is also older than the passed-in time, -// otherwise it will wait until the next FlushCloseOlderThan to see if bytes -// [25-30) come in. -// -// Returns the number of connections flushed, and of those, the number closed -// because of the flush. -func (a *Assembler) FlushWithOptions(opt FlushOptions) (flushed, closed int) { - conns := a.connPool.connections() - closes := 0 - flushes := 0 - for _, conn := range conns { - remove := false - conn.mu.Lock() - for _, half := range []*halfconnection{&conn.s2c, &conn.c2s} { - flushed, closed := a.flushClose(conn, half, opt.T, opt.TC) - if flushed { - flushes++ - } - if closed { - closes++ - } - } - if conn.s2c.closed && conn.c2s.closed && conn.s2c.lastSeen.Before(opt.TC) && conn.c2s.lastSeen.Before(opt.TC) { - remove = true - } - conn.mu.Unlock() - if remove { - a.connPool.remove(conn) - } - } - return flushes, closes -} - -// FlushCloseOlderThan flushes and closes streams older than given time -func (a *Assembler) FlushCloseOlderThan(t time.Time) (flushed, closed int) { - return a.FlushWithOptions(FlushOptions{T: t, TC: t}) -} - -func (a *Assembler) flushClose(conn *connection, half *halfconnection, t time.Time, tc time.Time) (bool, bool) { - flushed, closed := false, false - if half.closed { - return flushed, closed - } - for half.first != nil && half.first.seen.Before(t) { - flushed = true - a.skipFlush(conn, half) - if half.closed { - closed = true - } - } - if !half.closed && half.first == nil && half.lastSeen.Before(tc) { - a.closeHalfConnection(conn, half) - closed = true - } - return flushed, closed -} - -// FlushAll flushes all remaining data into all remaining connections and closes -// those connections. It returns the total number of connections flushed/closed -// by the call. -func (a *Assembler) FlushAll() (closed int) { - conns := a.connPool.connections() - closed = len(conns) - for _, conn := range conns { - conn.mu.Lock() - for _, half := range []*halfconnection{&conn.s2c, &conn.c2s} { - for !half.closed { - a.skipFlush(conn, half) - } - if !half.closed { - a.closeHalfConnection(conn, half) - } - } - conn.mu.Unlock() - } - return -} - -func min(a, b int) int { - if a < b { - return a - } - return b -} diff --git a/vendor/github.com/google/gopacket/reassembly/tcpassembly_test.go b/vendor/github.com/google/gopacket/reassembly/tcpassembly_test.go deleted file mode 100644 index b29cf2f..0000000 --- a/vendor/github.com/google/gopacket/reassembly/tcpassembly_test.go +++ /dev/null @@ -1,1660 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package reassembly - -import ( - "encoding/hex" - "fmt" - "net" - "reflect" - "runtime" - "testing" - "time" - - "github.com/google/gopacket" - "github.com/google/gopacket/layers" -) - -var netFlow gopacket.Flow - -var testDebug = false - -func init() { - netFlow, _ = gopacket.FlowFromEndpoints( - layers.NewIPEndpoint(net.IP{1, 2, 3, 4}), - layers.NewIPEndpoint(net.IP{5, 6, 7, 8})) -} - -type Reassembly struct { - Bytes []byte - Start bool - End bool - Skip int -} - -type testSequence struct { - in layers.TCP - want []Reassembly -} - -/* For benchmark: do nothing */ -type testFactoryBench struct { -} - -func (t *testFactoryBench) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream { - return t -} -func (t *testFactoryBench) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool { - return true -} -func (t *testFactoryBench) ReassembledSG(sg ScatterGather, ac AssemblerContext) { -} -func (t *testFactoryBench) ReassemblyComplete(ac AssemblerContext) bool { - return true -} - -/* For tests: append bytes */ -type testFactory struct { - reassembly []Reassembly -} - -func (t *testFactory) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream { - return t -} -func (t *testFactory) Reassembled(r []Reassembly) { - t.reassembly = r - for i := 0; i < len(r); i++ { - //t.reassembly[i].Seen = time.Time{} - } -} -func (t *testFactory) ReassembledSG(sg ScatterGather, ac AssemblerContext) { - _, start, end, skip := sg.Info() - l, _ := sg.Lengths() - t.reassembly = append(t.reassembly, Reassembly{ - Bytes: sg.Fetch(l), - Skip: skip, - Start: start, - End: end, - }) -} - -func (t *testFactory) ReassemblyComplete(ac AssemblerContext) bool { - return true -} - -func (t *testFactory) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool { - return true -} - -/* For memory checks: counts bytes */ -type testMemoryFactory struct { - bytes int -} - -func (tf *testMemoryFactory) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream { - return tf -} -func (tf *testMemoryFactory) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool { - return true -} -func (tf *testMemoryFactory) ReassembledSG(sg ScatterGather, ac AssemblerContext) { - bytes, _ := sg.Lengths() - tf.bytes += bytes -} -func (tf *testMemoryFactory) ReassemblyComplete(ac AssemblerContext) bool { - return true -} - -/* - * Tests - */ - -func test(t *testing.T, s []testSequence) { - fact := &testFactory{} - p := NewStreamPool(fact) - a := NewAssembler(p) - a.MaxBufferedPagesPerConnection = 4 - for i, test := range s { - fact.reassembly = []Reassembly{} - if testDebug { - fmt.Printf("#### test: #%d: sending:%s\n", i, hex.EncodeToString(test.in.BaseLayer.Payload)) - } - a.Assemble(netFlow, &test.in) - final := []Reassembly{} - if len(test.want) > 0 { - final = append(final, Reassembly{}) - for _, w := range test.want { - final[0].Bytes = append(final[0].Bytes, w.Bytes...) - if w.End { - final[0].End = true - } - if w.Start { - final[0].Start = true - } - if w.Skip != 0 { - final[0].Skip = w.Skip - } - } - } - if !reflect.DeepEqual(fact.reassembly, final) { - t.Fatalf("test %v:\nwant: %v\n got: %v\n", i, final, fact.reassembly) - } - if testDebug { - fmt.Printf("test %v passing...(%s)\n", i, final) - } - } -} - -func TestReorder(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1001, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1004, - BaseLayer: layers.BaseLayer{Payload: []byte{4, 5, 6}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1010, - BaseLayer: layers.BaseLayer{Payload: []byte{10, 11, 12}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9}}, - }, - want: []Reassembly{ - Reassembly{ - Skip: -1, - Bytes: []byte{1, 2, 3}, - }, - Reassembly{ - Bytes: []byte{4, 5, 6}, - }, - Reassembly{ - Bytes: []byte{7, 8, 9}, - }, - Reassembly{ - Bytes: []byte{10, 11, 12}, - }, - }, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1016, - BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1019, - BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1013, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}}, - }, - want: []Reassembly{ - Reassembly{ - Bytes: []byte{1, 2, 3}, - }, - Reassembly{ - Bytes: []byte{2, 2, 3}, - }, - Reassembly{ - Bytes: []byte{3, 2, 3}, - }, - }, - }, - }) -} - -func TestMaxPerSkip(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1000, - SYN: true, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{1, 2, 3}, - }, - }, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1010, - BaseLayer: layers.BaseLayer{Payload: []byte{4, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1013, - BaseLayer: layers.BaseLayer{Payload: []byte{5, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1016, - BaseLayer: layers.BaseLayer{Payload: []byte{6, 2, 3}}, - }, - want: []Reassembly{ - Reassembly{ - Skip: 3, - Bytes: []byte{3, 2, 3}, - }, - Reassembly{ - Bytes: []byte{4, 2, 3}, - }, - Reassembly{ - Bytes: []byte{5, 2, 3}, - }, - Reassembly{ - Bytes: []byte{6, 2, 3}, - }, - }, - }, - }) -} - -func TestReorderFast(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{1, 2, 3}, - }, - }, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1004, - BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}}, - }, - want: []Reassembly{ - Reassembly{ - Bytes: []byte{2, 2, 3}, - }, - Reassembly{ - Bytes: []byte{3, 2, 3}, - }, - }, - }, - }) -} - -func TestOverlap(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, - }, - }, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}}, - }, - want: []Reassembly{ - Reassembly{ - Bytes: []byte{1, 2, 3, 4, 5}, - }, - }, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1010, - BaseLayer: layers.BaseLayer{Payload: []byte{0, 1, 2, 3, 4, 5, 6, 7}}, - }, - want: []Reassembly{ - Reassembly{ - Bytes: []byte{6, 7}, - }, - }, - }, - }) -} - -func TestBufferedOverlap1(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1010, - BaseLayer: layers.BaseLayer{Payload: []byte{0, 1, 2, 3, 4, 5, 6, 7}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, - }, - Reassembly{ - Bytes: []byte{1, 2, 3, 4, 5}, - }, - Reassembly{ - Bytes: []byte{6, 7}, - }, - }, - }, - }) -} - -func TestBufferedOverlapCase6(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1010, - BaseLayer: layers.BaseLayer{Payload: []byte{10, 11, 12, 13, 14}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, - }, - Reassembly{ - Bytes: []byte{11, 12, 13, 14, 5}, - }, - }, - }, - }) -} - -func TestBufferedOverlapExisting(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1000, - SYN: true, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{1, 2, 3, 4, 5, 6, 7}, - }, - }, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1005, - BaseLayer: layers.BaseLayer{Payload: []byte{5, 6, 7, 8, 9, 10}}, - }, - want: []Reassembly{ - Reassembly{ - Bytes: []byte{8, 9, 10}, - }, - }, - }, - }) -} - -func TestBufferedOverlapReemit(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1000, - SYN: true, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{1, 2, 3, 4, 5, 6, 7}, - }, - }, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1003, - BaseLayer: layers.BaseLayer{Payload: []byte{3, 4, 5}}, - }, - want: []Reassembly{}, - }, - }) -} - -func TestReorderRetransmission2(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1001, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1010, - BaseLayer: layers.BaseLayer{Payload: []byte{10, 11}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1004, - BaseLayer: layers.BaseLayer{Payload: []byte{6, 6, 6, 2, 2}}, - }, - want: []Reassembly{ - Reassembly{ - Skip: -1, - Bytes: []byte{1, 2, 3}, - }, - Reassembly{ - Bytes: []byte{6, 6, 6}, - }, - Reassembly{ - Bytes: []byte{2, 2, 3}, - }, - Reassembly{ - Bytes: []byte{10, 11}, - }, - }, - }, - }) -} - -func TestOverrun1(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 0xFFFFFFFF, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, - }, - }, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 10, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4}}, - }, - want: []Reassembly{ - Reassembly{ - Bytes: []byte{1, 2, 3, 4}, - }, - }, - }, - }) -} - -func TestOverrun2(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 10, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 0xFFFFFFFF, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, - }, - Reassembly{ - Bytes: []byte{1, 2, 3, 4}, - }, - }, - }, - }) -} - -func TestCacheLargePacket(t *testing.T) { - data := make([]byte, pageBytes*3) - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1001, - BaseLayer: layers.BaseLayer{Payload: data}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1000, - SYN: true, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{}, - }, - Reassembly{ - Bytes: data[:pageBytes], - }, - Reassembly{ - Bytes: data[pageBytes : pageBytes*2], - }, - Reassembly{ - Bytes: data[pageBytes*2 : pageBytes*3], - }, - }, - }, - }) -} - -/* - * Keep - */ -type testKeepFactory struct { - keep int - bytes []byte - skipped int - t *testing.T -} - -func (tkf *testKeepFactory) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream { - return tkf -} -func (tkf *testKeepFactory) ReassembledSG(sg ScatterGather, ac AssemblerContext) { - l, _ := sg.Lengths() - _, _, _, tkf.skipped = sg.Info() - tkf.bytes = sg.Fetch(l) - sg.KeepFrom(tkf.keep) -} -func (tkf *testKeepFactory) ReassemblyComplete(ac AssemblerContext) bool { - return true -} - -func (tkf *testKeepFactory) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool { - return true -} - -type testKeepSequence struct { - tcp layers.TCP - keep int - want []byte - skipped int -} - -func testKeep(t *testing.T, s []testKeepSequence) { - fact := &testKeepFactory{t: t} - p := NewStreamPool(fact) - a := NewAssembler(p) - a.MaxBufferedPagesPerConnection = 4 - port := layers.TCPPort(0) - for i, test := range s { - // Fake some values according to ports - flow := netFlow - dir := TCPDirClientToServer - if port == 0 { - port = test.tcp.SrcPort - } - if port != test.tcp.SrcPort { - dir = dir.Reverse() - flow = flow.Reverse() - } - test.tcp.SetInternalPortsForTesting() - fact.keep = test.keep - fact.bytes = []byte{} - if testDebug { - fmt.Printf("#### testKeep: #%d: sending:%s\n", i, hex.EncodeToString(test.tcp.BaseLayer.Payload)) - } - a.Assemble(flow, &test.tcp) - if !reflect.DeepEqual(fact.bytes, test.want) { - t.Fatalf("#%d: invalid bytes: got %v, expected %v", i, fact.bytes, test.want) - } - if fact.skipped != test.skipped { - t.Fatalf("#%d: expecting %d skipped bytes, got %d", i, test.skipped, fact.skipped) - } - if testDebug { - fmt.Printf("#### testKeep: #%d: bytes: %s\n", i, hex.EncodeToString(fact.bytes)) - } - } -} - -func TestKeepSimpleOnBoundary(t *testing.T) { - testKeep(t, []testKeepSequence{ - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - }, - keep: 0, - want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, - }, - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}}, - }, - want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5}, - }, - }) -} - -func TestKeepSimpleNotBoundaryLive(t *testing.T) { - testKeep(t, []testKeepSequence{ - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - }, - keep: 1, - want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, - }, - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}}, - }, - want: []byte{2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5}, - }, - }) -} - -func TestKeepSimpleNotBoundaryAlreadyKept(t *testing.T) { - testKeep(t, []testKeepSequence{ - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0x10}}, - }, - keep: 0, // 1→10 - want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0x10}, - }, - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15}}, - }, - keep: 11, // 12→15 - want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15}, - }, - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1016, - BaseLayer: layers.BaseLayer{Payload: []byte{0x16, 0x17, 0x18}}, - }, - want: []byte{0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18}, - }, - }) -} - -func TestKeepLonger(t *testing.T) { - testKeep(t, []testKeepSequence{ - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}, - }, - keep: 0, - want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, - }, - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 10, 11, 12, 13, 14, 15}}, - }, - keep: 0, - want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - }, - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1010, - BaseLayer: layers.BaseLayer{Payload: []byte{10, 11, 12, 13, 14, 15, 16, 17}}, - }, - want: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17}, - }, - }) -} - -func TestKeepWithFlush(t *testing.T) { - testKeep(t, []testKeepSequence{ - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1}}, - }, - keep: 1, - want: []byte{1}, - }, - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1003, - BaseLayer: layers.BaseLayer{Payload: []byte{3}}, - }, - keep: 0, - want: []byte{}, - }, - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1004, - BaseLayer: layers.BaseLayer{Payload: []byte{4}}, - }, - keep: 0, - want: []byte{}, - }, - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1006, - BaseLayer: layers.BaseLayer{Payload: []byte{6}}, - }, - keep: 0, - want: []byte{}, - }, - // Exceeding 4 pages: flushing first continuous pages - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1008, - BaseLayer: layers.BaseLayer{Payload: []byte{8}}, - }, - keep: 0, - skipped: 1, - want: []byte{3, 4}, - }, - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1010, - BaseLayer: layers.BaseLayer{Payload: []byte{10}}, - }, - keep: 0, - skipped: 1, - want: []byte{6}, - }, - { - tcp: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1012, - BaseLayer: layers.BaseLayer{Payload: []byte{12}}, - }, - keep: 0, - skipped: 1, - want: []byte{8}, - }, - }) -} - -/* - * FSM tests - */ -/* For FSM: bump nb on accepted packet */ -type testFSMFactory struct { - nb int - fsm TCPSimpleFSM -} - -func (t *testFSMFactory) New(a, b gopacket.Flow, tcp *layers.TCP, ac AssemblerContext) Stream { - return t -} -func (t *testFSMFactory) ReassembledSG(sg ScatterGather, ac AssemblerContext) { -} -func (t *testFSMFactory) ReassemblyComplete(ac AssemblerContext) bool { - return false -} - -func (t *testFSMFactory) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, seq Sequence, start *bool, ac AssemblerContext) bool { - ok := t.fsm.CheckState(tcp, dir) - if ok { - t.nb++ - } - return ok -} - -type testFSMSequence struct { - tcp layers.TCP - ci gopacket.CaptureInfo - nb int -} - -func (seq *testFSMSequence) GetCaptureInfo() gopacket.CaptureInfo { - return seq.ci -} - -func testFSM(t *testing.T, s []testFSMSequence) { - fact := &testFSMFactory{} - p := NewStreamPool(fact) - a := NewAssembler(p) - //a.MaxBufferedPagesPerConnection = 4 - fact.nb = 0 - port := layers.TCPPort(0) - for i, test := range s { - // Fake some values according to ports - flow := netFlow - dir := TCPDirClientToServer - if port == 0 { - port = test.tcp.SrcPort - } - if port != test.tcp.SrcPort { - dir = dir.Reverse() - flow = flow.Reverse() - } - test.tcp.SetInternalPortsForTesting() - a.AssembleWithContext(flow, &test.tcp, &test) - if fact.nb != test.nb { - t.Fatalf("#%d: packet rejected: got %d, expected %d", i, fact.nb, test.nb) - } - } -} - -func TestFSMnormalFlow(t *testing.T) { - testFSM(t, []testFSMSequence{ - { - tcp: layers.TCP{ - SYN: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511116, - Ack: 0, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 566690000), - }, - nb: 1, - }, - { - tcp: layers.TCP{ - SYN: true, - ACK: true, - SrcPort: 53, - DstPort: 54842, - Seq: 3465787765, - Ack: 374511117, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590332000), - }, - nb: 2, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511117, - Ack: 3465787766, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590346000), - }, - nb: 3, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511117, - Ack: 3465787766, - BaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590387000), - }, - nb: 4, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 53, - DstPort: 54842, - Seq: 3465787766, - Ack: 374511150, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 613687000), - }, - nb: 5, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 53, - DstPort: 54842, - Seq: 3465787766, - Ack: 374511150, - BaseLayer: layers.BaseLayer{Payload: []byte{8, 133, 104, 196, 132, 0, 0, 1, 0, 2, 0, 7, 0, 19, 2, 85, 83, 0, 0, 6, 0, 1, 2, 117, 115, 0, 0, 6, 0, 1, 0, 0, 3, 132, 0, 54, 1, 97, 5, 99, 99, 116, 108, 100, 192, 20, 10, 104, 111, 115, 116, 109, 97, 115, 116, 101, 114, 7, 110, 101, 117, 115, 116, 97, 114, 3, 98, 105, 122, 0, 120, 18, 40, 205, 0, 0, 3, 132, 0, 0, 3, 132, 0, 9, 58, 128, 0, 1, 81, 128, 192, 20, 0, 46, 0, 1, 0, 0, 3, 132, 0, 150, 0, 6, 5, 1, 0, 0, 3, 132, 85, 138, 90, 146, 85, 98, 191, 130, 27, 78, 2, 117, 115, 0, 69, 13, 35, 189, 141, 225, 107, 238, 108, 182, 207, 44, 105, 31, 212, 103, 32, 93, 217, 108, 20, 231, 188, 28, 241, 237, 104, 182, 117, 121, 195, 112, 64, 96, 237, 248, 6, 181, 186, 96, 60, 6, 18, 29, 188, 96, 201, 140, 251, 61, 71, 177, 108, 156, 9, 83, 125, 172, 188, 75, 81, 67, 218, 55, 93, 131, 243, 15, 190, 75, 4, 165, 226, 124, 49, 67, 142, 131, 239, 240, 76, 225, 10, 242, 68, 88, 240, 200, 27, 97, 102, 73, 92, 73, 133, 170, 175, 198, 99, 109, 90, 16, 162, 101, 95, 96, 102, 250, 91, 74, 80, 3, 87, 167, 50, 230, 9, 213, 7, 222, 197, 87, 183, 190, 148, 247, 207, 204, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 10, 1, 102, 5, 99, 99, 116, 108, 100, 192, 12, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 97, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 98, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 99, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 101, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 107, 193, 8, 192, 118, 0, 46, 0, 1, 0, 7, 233, 0, 0, 150, 0, 2, 5, 1, 0, 7, 233, 0, 85, 127, 33, 92, 85, 87, 134, 98, 27, 78, 2, 117, 115, 0, 19, 227, 175, 75, 88, 245, 164, 158, 150, 198, 57, 253, 150, 179, 161, 52, 24, 56, 229, 176, 175, 40, 45, 232, 188, 171, 131, 197, 107, 125, 218, 192, 78, 221, 146, 33, 114, 55, 43, 12, 131, 213, 51, 98, 37, 2, 102, 161, 232, 115, 177, 210, 51, 169, 215, 133, 56, 190, 91, 75, 8, 222, 231, 202, 139, 28, 187, 249, 72, 21, 23, 56, 63, 72, 126, 142, 242, 195, 242, 64, 208, 134, 100, 157, 197, 159, 43, 148, 20, 70, 117, 152, 159, 35, 200, 220, 49, 234, 173, 210, 91, 34, 210, 192, 7, 197, 112, 117, 208, 234, 42, 49, 133, 237, 197, 14, 244, 149, 191, 142, 36, 252, 42, 48, 182, 189, 9, 68, 1, 65, 5, 67, 67, 84, 76, 68, 193, 126, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 124, 70, 1, 66, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 125, 70, 194, 26, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 209, 174, 255, 255, 255, 255, 255, 255, 255, 255, 255, 126, 1, 67, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 127, 70, 1, 69, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 126, 70, 1, 70, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 209, 173, 58, 70, 194, 108, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 0, 54, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 1, 75, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 128, 70, 194, 154, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 226, 57, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 194, 2, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 230, 49, 85, 73, 83, 2, 27, 78, 2, 117, 115, 0, 82, 36, 11, 141, 74, 85, 70, 98, 179, 63, 173, 83, 8, 70, 155, 41, 102, 166, 140, 62, 71, 178, 130, 38, 171, 200, 180, 68, 2, 215, 45, 6, 43, 59, 171, 146, 223, 215, 9, 77, 5, 104, 167, 42, 237, 170, 30, 114, 205, 129, 59, 225, 152, 224, 79, 1, 65, 68, 208, 153, 121, 237, 199, 87, 2, 251, 100, 105, 59, 24, 73, 226, 169, 121, 250, 91, 41, 124, 14, 23, 135, 52, 2, 86, 72, 224, 100, 135, 70, 216, 16, 107, 84, 59, 13, 168, 58, 187, 54, 98, 230, 167, 246, 42, 46, 156, 206, 238, 120, 199, 25, 144, 98, 249, 70, 162, 34, 43, 145, 114, 186, 233, 47, 42, 75, 95, 152, 235, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 160, 95, 100, 37, 167, 82, 93, 165, 126, 247, 147, 173, 238, 154, 206, 174, 96, 175, 209, 7, 8, 169, 171, 223, 29, 201, 161, 177, 98, 54, 94, 62, 70, 127, 142, 109, 206, 42, 179, 109, 156, 160, 156, 20, 59, 24, 147, 164, 13, 121, 192, 84, 157, 26, 56, 177, 151, 210, 7, 197, 229, 110, 60, 58, 224, 42, 77, 5, 59, 80, 216, 221, 248, 19, 66, 102, 74, 199, 238, 120, 231, 201, 187, 29, 11, 46, 195, 164, 8, 221, 128, 25, 205, 42, 247, 152, 112, 176, 14, 117, 150, 223, 245, 32, 212, 107, 4, 245, 27, 126, 224, 216, 0, 89, 106, 238, 185, 206, 44, 56, 204, 175, 7, 139, 233, 228, 127, 175, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 28, 5, 3, 0, 0, 28, 32, 85, 108, 217, 174, 85, 69, 70, 242, 27, 78, 2, 117, 115, 0, 172, 117, 89, 89, 73, 249, 245, 211, 100, 127, 48, 135, 224, 97, 172, 146, 128, 30, 190, 72, 199, 170, 97, 179, 136, 109, 86, 110, 235, 214, 47, 50, 115, 11, 226, 168, 56, 198, 24, 212, 205, 207, 2, 116, 104, 112, 99, 234, 236, 44, 70, 19, 19, 215, 127, 200, 162, 215, 142, 45, 135, 91, 219, 217, 86, 231, 154, 87, 222, 161, 32, 66, 196, 55, 117, 20, 186, 9, 134, 252, 249, 219, 9, 196, 128, 8, 222, 201, 131, 210, 182, 232, 142, 72, 160, 171, 95, 231, 232, 156, 28, 34, 54, 94, 73, 183, 38, 160, 123, 175, 157, 21, 163, 8, 214, 155, 172, 237, 169, 28, 15, 138, 105, 107, 251, 109, 131, 240, 194, 72, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 77, 207, 197, 130, 236, 138, 192, 241, 225, 114, 8, 22, 76, 54, 43, 121, 42, 44, 9, 92, 56, 253, 224, 179, 191, 131, 40, 176, 94, 61, 33, 12, 43, 82, 156, 236, 211, 29, 187, 100, 220, 243, 24, 134, 42, 204, 46, 161, 214, 91, 68, 119, 40, 252, 53, 54, 146, 136, 196, 168, 204, 195, 131, 110, 6, 73, 16, 161, 86, 35, 150, 153, 162, 185, 227, 65, 228, 160, 203, 42, 250, 121, 14, 42, 115, 221, 232, 96, 99, 164, 230, 29, 195, 149, 85, 206, 41, 1, 252, 77, 188, 88, 8, 182, 37, 249, 6, 158, 6, 244, 158, 254, 141, 203, 6, 158, 198, 103, 130, 98, 123, 34, 245, 44, 126, 77, 24, 187, 194, 90, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 108, 194, 203, 85, 69, 51, 125, 27, 78, 2, 117, 115, 0, 86, 26, 187, 56, 252, 194, 199, 140, 229, 133, 186, 187, 20, 174, 26, 48, 212, 129, 10, 20, 167, 179, 53, 72, 176, 92, 153, 48, 146, 15, 163, 182, 80, 138, 181, 135, 98, 129, 17, 66, 55, 184, 76, 225, 72, 104, 7, 221, 40, 71, 41, 202, 246, 154, 166, 199, 74, 175, 146, 54, 25, 56, 115, 243}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 621198000), - }, - nb: 6, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511150, - Ack: 3465789226, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 621220000), - }, - nb: 7, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 53, - DstPort: 54842, - Seq: 3465789226, - Ack: 374511150, - BaseLayer: layers.BaseLayer{Payload: []byte{153, 141, 101, 187, 110, 15, 63, 42, 81, 100, 95, 68, 241, 85, 160, 227, 3, 1, 12, 80, 166, 1, 98, 2, 44, 98, 63, 203, 70, 164, 99, 195, 23, 152, 223, 253, 208, 10, 12, 19, 66, 121, 9, 158, 205, 96, 218, 0, 80, 70, 58, 95, 41, 124, 216, 13, 122, 135, 102, 200, 181, 233, 129, 174, 194, 108, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 108, 223, 157, 85, 69, 74, 55, 27, 78, 2, 117, 115, 0, 149, 71, 215, 149, 16, 165, 115, 229, 141, 136, 187, 158, 88, 225, 131, 231, 182, 218, 235, 27, 48, 65, 244, 77, 186, 135, 72, 18, 87, 52, 180, 128, 130, 67, 75, 173, 160, 243, 104, 178, 103, 117, 96, 209, 36, 51, 108, 47, 232, 214, 254, 15, 208, 182, 218, 174, 248, 237, 88, 150, 35, 190, 239, 249, 171, 151, 9, 236, 2, 252, 255, 13, 79, 190, 147, 36, 161, 210, 202, 80, 209, 136, 167, 180, 186, 68, 246, 249, 48, 123, 46, 11, 132, 103, 132, 207, 186, 68, 110, 133, 142, 109, 194, 19, 122, 57, 203, 217, 120, 93, 67, 168, 91, 252, 87, 38, 33, 228, 229, 162, 190, 170, 23, 188, 89, 15, 241, 71, 194, 108, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 28, 5, 3, 0, 0, 28, 32, 85, 108, 217, 174, 85, 69, 70, 242, 27, 78, 2, 117, 115, 0, 206, 97, 120, 37, 255, 252, 7, 156, 162, 192, 43, 84, 105, 94, 125, 55, 13, 247, 234, 9, 25, 100, 246, 25, 77, 168, 199, 208, 187, 209, 164, 123, 234, 138, 238, 15, 86, 45, 163, 108, 162, 117, 247, 128, 3, 187, 100, 185, 193, 191, 134, 86, 161, 254, 236, 99, 66, 66, 35, 173, 91, 243, 175, 3, 175, 94, 79, 68, 246, 109, 200, 154, 209, 185, 11, 210, 50, 147, 136, 213, 158, 81, 111, 17, 149, 239, 110, 114, 25, 234, 247, 158, 233, 33, 36, 181, 66, 84, 189, 37, 207, 58, 9, 171, 143, 66, 69, 137, 192, 6, 187, 59, 16, 51, 80, 56, 89, 170, 12, 195, 69, 133, 188, 110, 171, 17, 17, 213, 194, 154, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 123, 36, 154, 4, 158, 41, 96, 252, 116, 114, 16, 137, 28, 177, 206, 33, 192, 88, 89, 1, 69, 252, 206, 88, 89, 152, 210, 179, 248, 44, 202, 239, 95, 131, 126, 147, 249, 93, 57, 166, 215, 184, 211, 164, 196, 71, 170, 3, 25, 18, 177, 214, 94, 147, 181, 148, 197, 11, 171, 219, 107, 48, 105, 81, 239, 110, 249, 140, 68, 127, 193, 146, 176, 161, 246, 108, 75, 141, 205, 211, 73, 247, 125, 205, 120, 156, 82, 55, 130, 250, 26, 15, 44, 214, 91, 115, 11, 103, 22, 83, 184, 96, 107, 138, 2, 127, 168, 191, 92, 102, 137, 161, 63, 225, 134, 17, 178, 242, 11, 43, 8, 30, 164, 28, 140, 195, 83, 121, 194, 154, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 28, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 189, 98, 234, 251, 237, 24, 143, 210, 30, 242, 97, 66, 50, 211, 47, 109, 110, 121, 244, 239, 89, 0, 39, 92, 218, 155, 71, 5, 23, 136, 231, 107, 95, 52, 231, 118, 253, 206, 250, 178, 209, 136, 13, 36, 36, 54, 157, 237, 35, 110, 134, 253, 80, 237, 162, 163, 38, 21, 54, 241, 240, 253, 73, 33, 191, 128, 32, 6, 198, 165, 35, 203, 244, 15, 166, 250, 159, 67, 149, 56, 19, 243, 230, 87, 6, 44, 150, 90, 79, 107, 18, 121, 112, 23, 176, 104, 50, 110, 176, 138, 250, 6, 209, 22, 41, 73, 234, 4, 124, 233, 208, 218, 236, 117, 232, 217, 10, 172, 18, 215, 143, 119, 193, 113, 10, 59, 255, 221, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 622508000), - }, - nb: 8, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511150, - Ack: 3465789949, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 622531000), - }, - nb: 9, - }, - { - tcp: layers.TCP{ - ACK: true, - FIN: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511150, - Ack: 3465789949, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 622907000), - }, - nb: 10, - }, - { - tcp: layers.TCP{ - ACK: true, - FIN: true, - SrcPort: 53, - DstPort: 54842, - Seq: 3465789949, - Ack: 374511151, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 652784000), - }, - nb: 11, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511151, - Ack: 3465789950, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 652809000), - }, - nb: 12, - }, - }) -} - -func TestFSMearlyRST(t *testing.T) { - testFSM(t, []testFSMSequence{ - { - tcp: layers.TCP{ - SYN: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511116, - Ack: 0, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 566690000), - }, - nb: 1, - }, - { - tcp: layers.TCP{ - SYN: true, - ACK: true, - SrcPort: 53, - DstPort: 54842, - Seq: 3465787765, - Ack: 374511117, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590332000), - }, - nb: 2, - }, - { - tcp: layers.TCP{ - RST: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511117, - Ack: 3465787766, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590346000), - }, - nb: 3, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511117, - Ack: 3465787766, - BaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590387000), - }, - nb: 3, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 53, - DstPort: 54842, - Seq: 3465787766, - Ack: 374511150, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 613687000), - }, - nb: 3, - }, - }) -} - -func TestFSMestablishedThenRST(t *testing.T) { - testFSM(t, []testFSMSequence{ - { - tcp: layers.TCP{ - SYN: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511116, - Ack: 0, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 566690000), - }, - nb: 1, - }, - { - tcp: layers.TCP{ - SYN: true, - ACK: true, - SrcPort: 53, - DstPort: 54842, - Seq: 3465787765, - Ack: 374511117, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590332000), - }, - nb: 2, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511117, - Ack: 3465787766, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590346000), - }, - nb: 3, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511117, - Ack: 3465787766, - BaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590387000), - }, - nb: 4, - }, - { - tcp: layers.TCP{ - RST: true, - SrcPort: 53, - DstPort: 54842, - Seq: 3465787766, - Ack: 374511150, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 613687000), - }, - nb: 5, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 53, - DstPort: 54842, - Seq: 3465787766, - Ack: 374511150, - BaseLayer: layers.BaseLayer{Payload: []byte{8, 133, 104, 196, 132, 0, 0, 1, 0, 2, 0, 7, 0, 19, 2, 85, 83, 0, 0, 6, 0, 1, 2, 117, 115, 0, 0, 6, 0, 1, 0, 0, 3, 132, 0, 54, 1, 97, 5, 99, 99, 116, 108, 100, 192, 20, 10, 104, 111, 115, 116, 109, 97, 115, 116, 101, 114, 7, 110, 101, 117, 115, 116, 97, 114, 3, 98, 105, 122, 0, 120, 18, 40, 205, 0, 0, 3, 132, 0, 0, 3, 132, 0, 9, 58, 128, 0, 1, 81, 128, 192, 20, 0, 46, 0, 1, 0, 0, 3, 132, 0, 150, 0, 6, 5, 1, 0, 0, 3, 132, 85, 138, 90, 146, 85, 98, 191, 130, 27, 78, 2, 117, 115, 0, 69, 13, 35, 189, 141, 225, 107, 238, 108, 182, 207, 44, 105, 31, 212, 103, 32, 93, 217, 108, 20, 231, 188, 28, 241, 237, 104, 182, 117, 121, 195, 112, 64, 96, 237, 248, 6, 181, 186, 96, 60, 6, 18, 29, 188, 96, 201, 140, 251, 61, 71, 177, 108, 156, 9, 83, 125, 172, 188, 75, 81, 67, 218, 55, 93, 131, 243, 15, 190, 75, 4, 165, 226, 124, 49, 67, 142, 131, 239, 240, 76, 225, 10, 242, 68, 88, 240, 200, 27, 97, 102, 73, 92, 73, 133, 170, 175, 198, 99, 109, 90, 16, 162, 101, 95, 96, 102, 250, 91, 74, 80, 3, 87, 167, 50, 230, 9, 213, 7, 222, 197, 87, 183, 190, 148, 247, 207, 204, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 10, 1, 102, 5, 99, 99, 116, 108, 100, 192, 12, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 97, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 98, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 99, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 101, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 107, 193, 8, 192, 118, 0, 46, 0, 1, 0, 7, 233, 0, 0, 150, 0, 2, 5, 1, 0, 7, 233, 0, 85, 127, 33, 92, 85, 87, 134, 98, 27, 78, 2, 117, 115, 0, 19, 227, 175, 75, 88, 245, 164, 158, 150, 198, 57, 253, 150, 179, 161, 52, 24, 56, 229, 176, 175, 40, 45, 232, 188, 171, 131, 197, 107, 125, 218, 192, 78, 221, 146, 33, 114, 55, 43, 12, 131, 213, 51, 98, 37, 2, 102, 161, 232, 115, 177, 210, 51, 169, 215, 133, 56, 190, 91, 75, 8, 222, 231, 202, 139, 28, 187, 249, 72, 21, 23, 56, 63, 72, 126, 142, 242, 195, 242, 64, 208, 134, 100, 157, 197, 159, 43, 148, 20, 70, 117, 152, 159, 35, 200, 220, 49, 234, 173, 210, 91, 34, 210, 192, 7, 197, 112, 117, 208, 234, 42, 49, 133, 237, 197, 14, 244, 149, 191, 142, 36, 252, 42, 48, 182, 189, 9, 68, 1, 65, 5, 67, 67, 84, 76, 68, 193, 126, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 124, 70, 1, 66, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 125, 70, 194, 26, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 209, 174, 255, 255, 255, 255, 255, 255, 255, 255, 255, 126, 1, 67, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 127, 70, 1, 69, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 126, 70, 1, 70, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 209, 173, 58, 70, 194, 108, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 0, 54, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 1, 75, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 128, 70, 194, 154, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 226, 57, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 194, 2, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 230, 49, 85, 73, 83, 2, 27, 78, 2, 117, 115, 0, 82, 36, 11, 141, 74, 85, 70, 98, 179, 63, 173, 83, 8, 70, 155, 41, 102, 166, 140, 62, 71, 178, 130, 38, 171, 200, 180, 68, 2, 215, 45, 6, 43, 59, 171, 146, 223, 215, 9, 77, 5, 104, 167, 42, 237, 170, 30, 114, 205, 129, 59, 225, 152, 224, 79, 1, 65, 68, 208, 153, 121, 237, 199, 87, 2, 251, 100, 105, 59, 24, 73, 226, 169, 121, 250, 91, 41, 124, 14, 23, 135, 52, 2, 86, 72, 224, 100, 135, 70, 216, 16, 107, 84, 59, 13, 168, 58, 187, 54, 98, 230, 167, 246, 42, 46, 156, 206, 238, 120, 199, 25, 144, 98, 249, 70, 162, 34, 43, 145, 114, 186, 233, 47, 42, 75, 95, 152, 235, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 160, 95, 100, 37, 167, 82, 93, 165, 126, 247, 147, 173, 238, 154, 206, 174, 96, 175, 209, 7, 8, 169, 171, 223, 29, 201, 161, 177, 98, 54, 94, 62, 70, 127, 142, 109, 206, 42, 179, 109, 156, 160, 156, 20, 59, 24, 147, 164, 13, 121, 192, 84, 157, 26, 56, 177, 151, 210, 7, 197, 229, 110, 60, 58, 224, 42, 77, 5, 59, 80, 216, 221, 248, 19, 66, 102, 74, 199, 238, 120, 231, 201, 187, 29, 11, 46, 195, 164, 8, 221, 128, 25, 205, 42, 247, 152, 112, 176, 14, 117, 150, 223, 245, 32, 212, 107, 4, 245, 27, 126, 224, 216, 0, 89, 106, 238, 185, 206, 44, 56, 204, 175, 7, 139, 233, 228, 127, 175, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 28, 5, 3, 0, 0, 28, 32, 85, 108, 217, 174, 85, 69, 70, 242, 27, 78, 2, 117, 115, 0, 172, 117, 89, 89, 73, 249, 245, 211, 100, 127, 48, 135, 224, 97, 172, 146, 128, 30, 190, 72, 199, 170, 97, 179, 136, 109, 86, 110, 235, 214, 47, 50, 115, 11, 226, 168, 56, 198, 24, 212, 205, 207, 2, 116, 104, 112, 99, 234, 236, 44, 70, 19, 19, 215, 127, 200, 162, 215, 142, 45, 135, 91, 219, 217, 86, 231, 154, 87, 222, 161, 32, 66, 196, 55, 117, 20, 186, 9, 134, 252, 249, 219, 9, 196, 128, 8, 222, 201, 131, 210, 182, 232, 142, 72, 160, 171, 95, 231, 232, 156, 28, 34, 54, 94, 73, 183, 38, 160, 123, 175, 157, 21, 163, 8, 214, 155, 172, 237, 169, 28, 15, 138, 105, 107, 251, 109, 131, 240, 194, 72, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 77, 207, 197, 130, 236, 138, 192, 241, 225, 114, 8, 22, 76, 54, 43, 121, 42, 44, 9, 92, 56, 253, 224, 179, 191, 131, 40, 176, 94, 61, 33, 12, 43, 82, 156, 236, 211, 29, 187, 100, 220, 243, 24, 134, 42, 204, 46, 161, 214, 91, 68, 119, 40, 252, 53, 54, 146, 136, 196, 168, 204, 195, 131, 110, 6, 73, 16, 161, 86, 35, 150, 153, 162, 185, 227, 65, 228, 160, 203, 42, 250, 121, 14, 42, 115, 221, 232, 96, 99, 164, 230, 29, 195, 149, 85, 206, 41, 1, 252, 77, 188, 88, 8, 182, 37, 249, 6, 158, 6, 244, 158, 254, 141, 203, 6, 158, 198, 103, 130, 98, 123, 34, 245, 44, 126, 77, 24, 187, 194, 90, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 108, 194, 203, 85, 69, 51, 125, 27, 78, 2, 117, 115, 0, 86, 26, 187, 56, 252, 194, 199, 140, 229, 133, 186, 187, 20, 174, 26, 48, 212, 129, 10, 20, 167, 179, 53, 72, 176, 92, 153, 48, 146, 15, 163, 182, 80, 138, 181, 135, 98, 129, 17, 66, 55, 184, 76, 225, 72, 104, 7, 221, 40, 71, 41, 202, 246, 154, 166, 199, 74, 175, 146, 54, 25, 56, 115, 243}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 621198000), - }, - nb: 5, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511150, - Ack: 3465789226, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 621220000), - }, - nb: 5, - }, - }) -} - -func TestFSMmissingSYNACK(t *testing.T) { - testFSM(t, []testFSMSequence{ - { - tcp: layers.TCP{ - SYN: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511116, - Ack: 0, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 566690000), - }, - nb: 1, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511117, - Ack: 3465787766, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590346000), - }, - nb: 1, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511117, - Ack: 3465787766, - BaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590387000), - }, - nb: 1, - }, - }) -} - -/* - * Memory test - */ -func TestMemoryShrink(t *testing.T) { - tcp := layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 999, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - } - a := NewAssembler(NewStreamPool(&testFactoryBench{})) - var before runtime.MemStats - runtime.GC() - runtime.ReadMemStats(&before) - run := 1050 - // Allocate > initial - for i := 0; i < run; i++ { - a.Assemble(netFlow, &tcp) - if tcp.SYN { - tcp.SYN = false - tcp.Seq += 1 + 1 - } - tcp.Seq += 10 - } - var after runtime.MemStats - a.FlushAll() - runtime.GC() - runtime.ReadMemStats(&after) - if after.HeapAlloc < before.HeapAlloc { - t.Fatalf("Nothing allocated for %d run: before: %d, after: %d", run, before.HeapAlloc, after.HeapAlloc) - } - before = after - // Do ~ initial allocs+free() - run *= 2 - for i := 0; i < run; i++ { - a.Assemble(netFlow, &tcp) - if i%50 == 0 { - a.FlushAll() - } - tcp.Seq += 10 - } - runtime.GC() - runtime.ReadMemStats(&after) - if after.HeapAlloc >= before.HeapAlloc { - t.Fatalf("Nothing freed for %d run: before: %d, after: %d", run, before.HeapAlloc, after.HeapAlloc) - } -} - -/* - * Benchmark tests - */ -func BenchmarkSingleStreamNo(b *testing.B) { - t := layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - } - a := NewAssembler(NewStreamPool(&testFactoryBench{})) - for i := 0; i < b.N; i++ { - a.Assemble(netFlow, &t) - if t.SYN { - t.SYN = false - t.Seq++ - } - t.Seq += 10 - } -} - -func BenchmarkSingleStreamSkips(b *testing.B) { - t := layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - } - a := NewAssembler(NewStreamPool(&testFactoryBench{})) - skipped := false - for i := 0; i < b.N; i++ { - if i%10 == 9 { - t.Seq += 10 - skipped = true - } else if skipped { - t.Seq -= 20 - } - a.Assemble(netFlow, &t) - if t.SYN { - t.SYN = false - t.Seq++ - } - t.Seq += 10 - if skipped { - t.Seq += 10 - skipped = false - } - } -} - -func BenchmarkSingleStreamLoss(b *testing.B) { - t := layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - } - a := NewAssembler(NewStreamPool(&testFactoryBench{})) - for i := 0; i < b.N; i++ { - a.Assemble(netFlow, &t) - t.SYN = false - t.Seq += 11 - } -} - -func BenchmarkMultiStreamGrow(b *testing.B) { - t := layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 0, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - } - a := NewAssembler(NewStreamPool(&testFactoryBench{})) - for i := 0; i < b.N; i++ { - t.SrcPort = layers.TCPPort(i) - a.Assemble(netFlow, &t) - t.Seq += 10 - } -} - -func BenchmarkMultiStreamConn(b *testing.B) { - t := layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 0, - SYN: true, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - } - a := NewAssembler(NewStreamPool(&testFactoryBench{})) - for i := 0; i < b.N; i++ { - t.SrcPort = layers.TCPPort(i) - a.Assemble(netFlow, &t) - if i%65536 == 65535 { - if t.SYN { - t.SYN = false - t.Seq++ - } - t.Seq += 10 - } - } -} - -type testMemoryContext struct{} - -func (t *testMemoryContext) GetCaptureInfo() gopacket.CaptureInfo { - return gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590387000), - } -} - -func TestFullyOrderedAndCompleteStreamDoesNotAlloc(t *testing.T) { - c2s := layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 0, - SYN: true, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - } - s2c := layers.TCP{ - SrcPort: c2s.DstPort, - DstPort: c2s.SrcPort, - Seq: 0, - SYN: true, - ACK: true, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - } - tf := testMemoryFactory{} - a := NewAssembler(NewStreamPool(&tf)) - - ctx := &testMemoryContext{} - // First packet - a.AssembleWithContext(netFlow, &c2s, ctx) - a.AssembleWithContext(netFlow.Reverse(), &s2c, ctx) - c2s.SYN, s2c.SYN = false, false - c2s.ACK = true - c2s.Seq++ - s2c.Seq++ - N := 1000 - if n := testing.AllocsPerRun(N, func() { - c2s.Seq += 10 - s2c.Seq += 10 - c2s.Ack += 10 - s2c.Ack += 10 - a.AssembleWithContext(netFlow, &c2s, ctx) - a.AssembleWithContext(netFlow.Reverse(), &s2c, ctx) - }); n > 0 { - t.Error(n, "mallocs for normal TCP stream") - } - // Ensure all bytes have been through the stream - // +1 for first packet and +1 because AllocsPerRun seems to run fun N+1 times. - if tf.bytes != 10*2*(N+1+1) { - t.Error(tf.bytes, "bytes handled, expected", 10*2*(N+1+1)) - } -} diff --git a/vendor/github.com/google/gopacket/reassembly/tcpcheck.go b/vendor/github.com/google/gopacket/reassembly/tcpcheck.go deleted file mode 100644 index 4b52aba..0000000 --- a/vendor/github.com/google/gopacket/reassembly/tcpcheck.go +++ /dev/null @@ -1,246 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package reassembly - -import ( - "encoding/binary" - "fmt" - - "github.com/google/gopacket" - "github.com/google/gopacket/layers" -) - -/* - * Check TCP packet against options (window, MSS) - */ - -type tcpStreamOptions struct { - mss int - scale int - receiveWindow uint -} - -// TCPOptionCheck contains options for the two directions -type TCPOptionCheck struct { - options [2]tcpStreamOptions -} - -func (t *TCPOptionCheck) getOptions(dir TCPFlowDirection) *tcpStreamOptions { - if dir == TCPDirClientToServer { - return &t.options[0] - } - return &t.options[1] -} - -// NewTCPOptionCheck creates default options -func NewTCPOptionCheck() TCPOptionCheck { - return TCPOptionCheck{ - options: [2]tcpStreamOptions{ - tcpStreamOptions{ - mss: 0, - scale: -1, - receiveWindow: 0, - }, tcpStreamOptions{ - mss: 0, - scale: -1, - receiveWindow: 0, - }, - }, - } -} - -// Accept checks whether the packet should be accepted by checking TCP options -func (t *TCPOptionCheck) Accept(tcp *layers.TCP, ci gopacket.CaptureInfo, dir TCPFlowDirection, acked Sequence, start *bool) error { - options := t.getOptions(dir) - if tcp.SYN { - mss := -1 - scale := -1 - for _, o := range tcp.Options { - // MSS - if o.OptionType == 2 { - if len(o.OptionData) != 2 { - return fmt.Errorf("MSS option data length expected 2, got %d", len(o.OptionData)) - } - mss = int(binary.BigEndian.Uint16(o.OptionData[:2])) - } - // Window scaling - if o.OptionType == 3 { - if len(o.OptionData) != 1 { - return fmt.Errorf("Window scaling length expected: 1, got %d", len(o.OptionData)) - } - scale = int(o.OptionData[0]) - } - } - options.mss = mss - options.scale = scale - } else { - if acked != invalidSequence { - revOptions := t.getOptions(dir.Reverse()) - length := len(tcp.Payload) - - // Check packet is in the correct window - diff := acked.Difference(Sequence(tcp.Seq)) - if diff == -1 && (length == 1 || length == 0) { - // This is probably a Keep-alive - // TODO: check byte is ok - } else if diff < 0 { - return fmt.Errorf("Re-emitted packet (diff:%d,seq:%d,rev-ack:%d)", diff, - tcp.Seq, acked) - } else if revOptions.mss > 0 && length > revOptions.mss { - return fmt.Errorf("%d > mss (%d)", length, revOptions.mss) - } else if revOptions.receiveWindow != 0 && revOptions.scale < 0 && diff > int(revOptions.receiveWindow) { - return fmt.Errorf("%d > receiveWindow(%d)", diff, revOptions.receiveWindow) - } - } - } - // Compute receiveWindow - options.receiveWindow = uint(tcp.Window) - if options.scale > 0 { - options.receiveWindow = options.receiveWindow << (uint(options.scale)) - } - return nil -} - -// TCPSimpleFSM implements a very simple TCP state machine -// -// Usage: -// When implementing a Stream interface and to avoid to consider packets that -// would be rejected due to client/server's TCP stack, the Accept() can call -// TCPSimpleFSM.CheckState(). -// -// Limitations: -// - packet should be received in-order. -// - no check on sequence number is performed -// - no RST -type TCPSimpleFSM struct { - dir TCPFlowDirection - state int - options TCPSimpleFSMOptions -} - -// TCPSimpleFSMOptions holds options for TCPSimpleFSM -type TCPSimpleFSMOptions struct { - SupportMissingEstablishment bool // Allow missing SYN, SYN+ACK, ACK -} - -// Internal values of state machine -const ( - TCPStateClosed = 0 - TCPStateSynSent = 1 - TCPStateEstablished = 2 - TCPStateCloseWait = 3 - TCPStateLastAck = 4 - TCPStateReset = 5 -) - -// NewTCPSimpleFSM creates a new TCPSimpleFSM -func NewTCPSimpleFSM(options TCPSimpleFSMOptions) *TCPSimpleFSM { - return &TCPSimpleFSM{ - state: TCPStateClosed, - options: options, - } -} - -func (t *TCPSimpleFSM) String() string { - switch t.state { - case TCPStateClosed: - return "Closed" - case TCPStateSynSent: - return "SynSent" - case TCPStateEstablished: - return "Established" - case TCPStateCloseWait: - return "CloseWait" - case TCPStateLastAck: - return "LastAck" - case TCPStateReset: - return "Reset" - } - return "?" -} - -// CheckState returns false if tcp is invalid wrt current state or update the state machine's state -func (t *TCPSimpleFSM) CheckState(tcp *layers.TCP, dir TCPFlowDirection) bool { - if t.state == TCPStateClosed && t.options.SupportMissingEstablishment && !(tcp.SYN && !tcp.ACK) { - /* try to figure out state */ - switch true { - case tcp.SYN && tcp.ACK: - t.state = TCPStateSynSent - t.dir = dir.Reverse() - case tcp.FIN && !tcp.ACK: - t.state = TCPStateEstablished - case tcp.FIN && tcp.ACK: - t.state = TCPStateCloseWait - t.dir = dir.Reverse() - default: - t.state = TCPStateEstablished - } - } - - switch t.state { - /* openning connection */ - case TCPStateClosed: - if tcp.SYN && !tcp.ACK { - t.dir = dir - t.state = TCPStateSynSent - return true - } - case TCPStateSynSent: - if tcp.RST { - t.state = TCPStateReset - return true - } - - if tcp.SYN && tcp.ACK && dir == t.dir.Reverse() { - t.state = TCPStateEstablished - return true - } - if tcp.SYN && !tcp.ACK && dir == t.dir { - // re-transmission - return true - } - /* established */ - case TCPStateEstablished: - if tcp.RST { - t.state = TCPStateReset - return true - } - - if tcp.FIN { - t.state = TCPStateCloseWait - t.dir = dir - return true - } - // accept any packet - return true - /* closing connection */ - case TCPStateCloseWait: - if tcp.RST { - t.state = TCPStateReset - return true - } - - if tcp.FIN && tcp.ACK && dir == t.dir.Reverse() { - t.state = TCPStateLastAck - return true - } - if tcp.ACK { - return true - } - case TCPStateLastAck: - if tcp.RST { - t.state = TCPStateReset - return true - } - - if tcp.ACK && t.dir == dir { - t.state = TCPStateClosed - return true - } - } - return false -} diff --git a/vendor/github.com/google/gopacket/reassembly/tcpcheck_test.go b/vendor/github.com/google/gopacket/reassembly/tcpcheck_test.go deleted file mode 100644 index 4c2391d..0000000 --- a/vendor/github.com/google/gopacket/reassembly/tcpcheck_test.go +++ /dev/null @@ -1,249 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package reassembly - -import ( - "testing" - "time" - - "github.com/google/gopacket" - "github.com/google/gopacket/layers" -) - -// netFlow declared in tcpassembly_test - -/* - * FSM tests - */ - -type testCheckFSMSequence struct { - tcp layers.TCP - ci gopacket.CaptureInfo - expected bool -} - -func testCheckFSM(t *testing.T, options TCPSimpleFSMOptions, s []testCheckFSMSequence) { - fsm := NewTCPSimpleFSM(options) - port := layers.TCPPort(0) - for i, test := range s { - // Fake some values according to ports - flow := netFlow - dir := TCPDirClientToServer - if port == 0 { - port = test.tcp.SrcPort - } - if port != test.tcp.SrcPort { - dir = dir.Reverse() - flow = flow.Reverse() - } - res := fsm.CheckState(&test.tcp, dir) - if res != test.expected { - t.Fatalf("#%d: packet rejected (%s): got %s, expected %s. State:%s", i, gopacket.LayerDump(&test.tcp), res, test.expected, fsm.String()) - } - } -} - -func TestCheckFSM(t *testing.T) { - testCheckFSM(t, TCPSimpleFSMOptions{}, []testCheckFSMSequence{ - { - tcp: layers.TCP{ - SYN: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511116, - Ack: 0, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 566690000), - }, - expected: true, - }, - { - tcp: layers.TCP{ - SYN: true, - ACK: true, - SrcPort: 53, - DstPort: 54842, - Seq: 3465787765, - Ack: 374511117, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590332000), - }, - expected: true, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511117, - Ack: 3465787766, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590346000), - }, - expected: true, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511117, - Ack: 3465787766, - BaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590387000), - }, - expected: true, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 53, - DstPort: 54842, - Seq: 3465787766, - Ack: 374511150, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 613687000), - }, - expected: true, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 53, - DstPort: 54842, - Seq: 3465787766, - Ack: 374511150, - BaseLayer: layers.BaseLayer{Payload: []byte{8, 133, 104, 196, 132, 0, 0, 1, 0, 2, 0, 7, 0, 19, 2, 85, 83, 0, 0, 6, 0, 1, 2, 117, 115, 0, 0, 6, 0, 1, 0, 0, 3, 132, 0, 54, 1, 97, 5, 99, 99, 116, 108, 100, 192, 20, 10, 104, 111, 115, 116, 109, 97, 115, 116, 101, 114, 7, 110, 101, 117, 115, 116, 97, 114, 3, 98, 105, 122, 0, 120, 18, 40, 205, 0, 0, 3, 132, 0, 0, 3, 132, 0, 9, 58, 128, 0, 1, 81, 128, 192, 20, 0, 46, 0, 1, 0, 0, 3, 132, 0, 150, 0, 6, 5, 1, 0, 0, 3, 132, 85, 138, 90, 146, 85, 98, 191, 130, 27, 78, 2, 117, 115, 0, 69, 13, 35, 189, 141, 225, 107, 238, 108, 182, 207, 44, 105, 31, 212, 103, 32, 93, 217, 108, 20, 231, 188, 28, 241, 237, 104, 182, 117, 121, 195, 112, 64, 96, 237, 248, 6, 181, 186, 96, 60, 6, 18, 29, 188, 96, 201, 140, 251, 61, 71, 177, 108, 156, 9, 83, 125, 172, 188, 75, 81, 67, 218, 55, 93, 131, 243, 15, 190, 75, 4, 165, 226, 124, 49, 67, 142, 131, 239, 240, 76, 225, 10, 242, 68, 88, 240, 200, 27, 97, 102, 73, 92, 73, 133, 170, 175, 198, 99, 109, 90, 16, 162, 101, 95, 96, 102, 250, 91, 74, 80, 3, 87, 167, 50, 230, 9, 213, 7, 222, 197, 87, 183, 190, 148, 247, 207, 204, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 10, 1, 102, 5, 99, 99, 116, 108, 100, 192, 12, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 97, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 98, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 99, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 101, 193, 8, 192, 118, 0, 2, 0, 1, 0, 7, 233, 0, 0, 4, 1, 107, 193, 8, 192, 118, 0, 46, 0, 1, 0, 7, 233, 0, 0, 150, 0, 2, 5, 1, 0, 7, 233, 0, 85, 127, 33, 92, 85, 87, 134, 98, 27, 78, 2, 117, 115, 0, 19, 227, 175, 75, 88, 245, 164, 158, 150, 198, 57, 253, 150, 179, 161, 52, 24, 56, 229, 176, 175, 40, 45, 232, 188, 171, 131, 197, 107, 125, 218, 192, 78, 221, 146, 33, 114, 55, 43, 12, 131, 213, 51, 98, 37, 2, 102, 161, 232, 115, 177, 210, 51, 169, 215, 133, 56, 190, 91, 75, 8, 222, 231, 202, 139, 28, 187, 249, 72, 21, 23, 56, 63, 72, 126, 142, 242, 195, 242, 64, 208, 134, 100, 157, 197, 159, 43, 148, 20, 70, 117, 152, 159, 35, 200, 220, 49, 234, 173, 210, 91, 34, 210, 192, 7, 197, 112, 117, 208, 234, 42, 49, 133, 237, 197, 14, 244, 149, 191, 142, 36, 252, 42, 48, 182, 189, 9, 68, 1, 65, 5, 67, 67, 84, 76, 68, 193, 126, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 124, 70, 1, 66, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 125, 70, 194, 26, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 209, 174, 255, 255, 255, 255, 255, 255, 255, 255, 255, 126, 1, 67, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 127, 70, 1, 69, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 126, 70, 1, 70, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 209, 173, 58, 70, 194, 108, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 0, 54, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 1, 75, 194, 4, 0, 1, 0, 1, 0, 0, 28, 32, 0, 4, 156, 154, 128, 70, 194, 154, 0, 28, 0, 1, 0, 0, 28, 32, 0, 16, 32, 1, 5, 3, 226, 57, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 194, 2, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 230, 49, 85, 73, 83, 2, 27, 78, 2, 117, 115, 0, 82, 36, 11, 141, 74, 85, 70, 98, 179, 63, 173, 83, 8, 70, 155, 41, 102, 166, 140, 62, 71, 178, 130, 38, 171, 200, 180, 68, 2, 215, 45, 6, 43, 59, 171, 146, 223, 215, 9, 77, 5, 104, 167, 42, 237, 170, 30, 114, 205, 129, 59, 225, 152, 224, 79, 1, 65, 68, 208, 153, 121, 237, 199, 87, 2, 251, 100, 105, 59, 24, 73, 226, 169, 121, 250, 91, 41, 124, 14, 23, 135, 52, 2, 86, 72, 224, 100, 135, 70, 216, 16, 107, 84, 59, 13, 168, 58, 187, 54, 98, 230, 167, 246, 42, 46, 156, 206, 238, 120, 199, 25, 144, 98, 249, 70, 162, 34, 43, 145, 114, 186, 233, 47, 42, 75, 95, 152, 235, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 160, 95, 100, 37, 167, 82, 93, 165, 126, 247, 147, 173, 238, 154, 206, 174, 96, 175, 209, 7, 8, 169, 171, 223, 29, 201, 161, 177, 98, 54, 94, 62, 70, 127, 142, 109, 206, 42, 179, 109, 156, 160, 156, 20, 59, 24, 147, 164, 13, 121, 192, 84, 157, 26, 56, 177, 151, 210, 7, 197, 229, 110, 60, 58, 224, 42, 77, 5, 59, 80, 216, 221, 248, 19, 66, 102, 74, 199, 238, 120, 231, 201, 187, 29, 11, 46, 195, 164, 8, 221, 128, 25, 205, 42, 247, 152, 112, 176, 14, 117, 150, 223, 245, 32, 212, 107, 4, 245, 27, 126, 224, 216, 0, 89, 106, 238, 185, 206, 44, 56, 204, 175, 7, 139, 233, 228, 127, 175, 194, 26, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 28, 5, 3, 0, 0, 28, 32, 85, 108, 217, 174, 85, 69, 70, 242, 27, 78, 2, 117, 115, 0, 172, 117, 89, 89, 73, 249, 245, 211, 100, 127, 48, 135, 224, 97, 172, 146, 128, 30, 190, 72, 199, 170, 97, 179, 136, 109, 86, 110, 235, 214, 47, 50, 115, 11, 226, 168, 56, 198, 24, 212, 205, 207, 2, 116, 104, 112, 99, 234, 236, 44, 70, 19, 19, 215, 127, 200, 162, 215, 142, 45, 135, 91, 219, 217, 86, 231, 154, 87, 222, 161, 32, 66, 196, 55, 117, 20, 186, 9, 134, 252, 249, 219, 9, 196, 128, 8, 222, 201, 131, 210, 182, 232, 142, 72, 160, 171, 95, 231, 232, 156, 28, 34, 54, 94, 73, 183, 38, 160, 123, 175, 157, 21, 163, 8, 214, 155, 172, 237, 169, 28, 15, 138, 105, 107, 251, 109, 131, 240, 194, 72, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 112, 190, 140, 85, 73, 36, 78, 27, 78, 2, 117, 115, 0, 77, 207, 197, 130, 236, 138, 192, 241, 225, 114, 8, 22, 76, 54, 43, 121, 42, 44, 9, 92, 56, 253, 224, 179, 191, 131, 40, 176, 94, 61, 33, 12, 43, 82, 156, 236, 211, 29, 187, 100, 220, 243, 24, 134, 42, 204, 46, 161, 214, 91, 68, 119, 40, 252, 53, 54, 146, 136, 196, 168, 204, 195, 131, 110, 6, 73, 16, 161, 86, 35, 150, 153, 162, 185, 227, 65, 228, 160, 203, 42, 250, 121, 14, 42, 115, 221, 232, 96, 99, 164, 230, 29, 195, 149, 85, 206, 41, 1, 252, 77, 188, 88, 8, 182, 37, 249, 6, 158, 6, 244, 158, 254, 141, 203, 6, 158, 198, 103, 130, 98, 123, 34, 245, 44, 126, 77, 24, 187, 194, 90, 0, 46, 0, 1, 0, 0, 28, 32, 0, 150, 0, 1, 5, 3, 0, 0, 28, 32, 85, 108, 194, 203, 85, 69, 51, 125, 27, 78, 2, 117, 115, 0, 86, 26, 187, 56, 252, 194, 199, 140, 229, 133, 186, 187, 20, 174, 26, 48, 212, 129, 10, 20, 167, 179, 53, 72, 176, 92, 153, 48, 146, 15, 163, 182, 80, 138, 181, 135, 98, 129, 17, 66, 55, 184, 76, 225, 72, 104, 7, 221, 40, 71, 41, 202, 246, 154, 166, 199, 74, 175, 146, 54, 25, 56, 115, 243}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 621198000), - }, - expected: true, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511150, - Ack: 3465789226, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 621220000), - }, - expected: true, - }, - }) -} - -func TestCheckFSMmissingSYNACK(t *testing.T) { - testCheckFSM(t, TCPSimpleFSMOptions{}, []testCheckFSMSequence{ - { - tcp: layers.TCP{ - SYN: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511116, - Ack: 0, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 566690000), - }, - expected: true, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511117, - Ack: 3465787766, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590346000), - }, - expected: false, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 374511117, - Ack: 3465787766, - BaseLayer: layers.BaseLayer{Payload: []byte{0, 31, 104, 196, 0, 32, 0, 1, 0, 0, 0, 0, 0, 1, 2, 85, 83, 0, 0, 6, 0, 1, 0, 0, 41, 16, 0, 0, 0, 128, 0, 0, 0}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590387000), - }, - expected: false, - }, - }) -} - -// Support packets w/o SYN (+SYN+ACK) depending on option -func TestCheckFSMmissingSYN(t *testing.T) { - for _, val := range []bool{false, true} { - testCheckFSM(t, TCPSimpleFSMOptions{SupportMissingEstablishment: val}, []testCheckFSMSequence{ - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 54842, - DstPort: 53, - Seq: 12, - Ack: 1012, - BaseLayer: layers.BaseLayer{Payload: []byte{1}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 566690000), - }, - expected: val, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 53, - DstPort: 54842, - Seq: 1012, - Ack: 13, - BaseLayer: layers.BaseLayer{Payload: []byte{2}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590346000), - }, - expected: val, - }, - { - tcp: layers.TCP{ - ACK: true, - SrcPort: 53, - DstPort: 54842, - Seq: 1013, - Ack: 13, - BaseLayer: layers.BaseLayer{Payload: []byte{3}}, - }, - ci: gopacket.CaptureInfo{ - Timestamp: time.Unix(1432538521, 590387000), - }, - expected: val, - }, - }) - } -} diff --git a/vendor/github.com/google/gopacket/routing/common.go b/vendor/github.com/google/gopacket/routing/common.go deleted file mode 100644 index a6746d4..0000000 --- a/vendor/github.com/google/gopacket/routing/common.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package routing - -import ( - "net" -) - -// Router implements simple IPv4/IPv6 routing based on the kernel's routing -// table. This routing library has very few features and may actually route -// incorrectly in some cases, but it should work the majority of the time. -type Router interface { - // Route returns where to route a packet based on the packet's source - // and destination IP address. - // - // Callers may pass in nil for src, in which case the src is treated as - // either 0.0.0.0 or ::, depending on whether dst is a v4 or v6 address. - // - // It returns the interface on which to send the packet, the gateway IP - // to send the packet to (if necessary), the preferred src IP to use (if - // available). If the preferred src address is not given in the routing - // table, the first IP address of the interface is provided. - // - // If an error is encountered, iface, geteway, and - // preferredSrc will be nil, and err will be set. - Route(dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error) - - // RouteWithSrc routes based on source information as well as destination - // information. Either or both of input/src can be nil. If both are, this - // should behave exactly like Route(dst) - RouteWithSrc(input net.HardwareAddr, src, dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error) -} diff --git a/vendor/github.com/google/gopacket/routing/other.go b/vendor/github.com/google/gopacket/routing/other.go deleted file mode 100644 index b53fea9..0000000 --- a/vendor/github.com/google/gopacket/routing/other.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// +build !linux - -// Package routing is currently only supported in Linux, but the build system requires a valid go file for all architectures. - -package routing - -func New() (Router, error) { - panic("router only implemented in linux") -} diff --git a/vendor/github.com/google/gopacket/routing/routing.go b/vendor/github.com/google/gopacket/routing/routing.go deleted file mode 100644 index cbbeb6e..0000000 --- a/vendor/github.com/google/gopacket/routing/routing.go +++ /dev/null @@ -1,241 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// +build linux - -// Package routing provides a very basic but mostly functional implementation of -// a routing table for IPv4/IPv6 addresses. It uses a routing table pulled from -// the kernel via netlink to find the correct interface, gateway, and preferred -// source IP address for packets destined to a particular location. -// -// The routing package is meant to be used with applications that are sending -// raw packet data, which don't have the benefit of having the kernel route -// packets for them. -package routing - -import ( - "bytes" - "errors" - "fmt" - "net" - "sort" - "strings" - "syscall" - "unsafe" -) - -// Pulled from http://man7.org/linux/man-pages/man7/rtnetlink.7.html -// See the section on RTM_NEWROUTE, specifically 'struct rtmsg'. -type routeInfoInMemory struct { - Family byte - DstLen byte - SrcLen byte - TOS byte - - Table byte - Protocol byte - Scope byte - Type byte - - Flags uint32 -} - -// rtInfo contains information on a single route. -type rtInfo struct { - Src, Dst *net.IPNet - Gateway, PrefSrc net.IP - // We currently ignore the InputIface. - InputIface, OutputIface uint32 - Priority uint32 -} - -// routeSlice implements sort.Interface to sort routes by Priority. -type routeSlice []*rtInfo - -func (r routeSlice) Len() int { - return len(r) -} -func (r routeSlice) Less(i, j int) bool { - return r[i].Priority < r[j].Priority -} -func (r routeSlice) Swap(i, j int) { - r[i], r[j] = r[j], r[i] -} - -type router struct { - ifaces []net.Interface - addrs []ipAddrs - v4, v6 routeSlice -} - -func (r *router) String() string { - strs := []string{"ROUTER", "--- V4 ---"} - for _, route := range r.v4 { - strs = append(strs, fmt.Sprintf("%+v", *route)) - } - strs = append(strs, "--- V6 ---") - for _, route := range r.v6 { - strs = append(strs, fmt.Sprintf("%+v", *route)) - } - return strings.Join(strs, "\n") -} - -type ipAddrs struct { - v4, v6 net.IP -} - -func (r *router) Route(dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error) { - return r.RouteWithSrc(nil, nil, dst) -} - -func (r *router) RouteWithSrc(input net.HardwareAddr, src, dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error) { - var ifaceIndex int - switch { - case dst.To4() != nil: - ifaceIndex, gateway, preferredSrc, err = r.route(r.v4, input, src, dst) - case dst.To16() != nil: - ifaceIndex, gateway, preferredSrc, err = r.route(r.v6, input, src, dst) - default: - err = errors.New("IP is not valid as IPv4 or IPv6") - return - } - - // Interfaces are 1-indexed, but we store them in a 0-indexed array. - ifaceIndex-- - - iface = &r.ifaces[ifaceIndex] - if preferredSrc == nil { - switch { - case dst.To4() != nil: - preferredSrc = r.addrs[ifaceIndex].v4 - case dst.To16() != nil: - preferredSrc = r.addrs[ifaceIndex].v6 - } - } - return -} - -func (r *router) route(routes routeSlice, input net.HardwareAddr, src, dst net.IP) (iface int, gateway, preferredSrc net.IP, err error) { - var inputIndex uint32 - if input != nil { - for i, iface := range r.ifaces { - if bytes.Equal(input, iface.HardwareAddr) { - // Convert from zero- to one-indexed. - inputIndex = uint32(i + 1) - break - } - } - } - for _, rt := range routes { - if rt.InputIface != 0 && rt.InputIface != inputIndex { - continue - } - if rt.Src != nil && !rt.Src.Contains(src) { - continue - } - if rt.Dst != nil && !rt.Dst.Contains(dst) { - continue - } - return int(rt.OutputIface), rt.Gateway, rt.PrefSrc, nil - } - err = fmt.Errorf("no route found for %v", dst) - return -} - -// New creates a new router object. The router returned by New currently does -// not update its routes after construction... care should be taken for -// long-running programs to call New() regularly to take into account any -// changes to the routing table which have occurred since the last New() call. -func New() (Router, error) { - rtr := &router{} - tab, err := syscall.NetlinkRIB(syscall.RTM_GETROUTE, syscall.AF_UNSPEC) - if err != nil { - return nil, err - } - msgs, err := syscall.ParseNetlinkMessage(tab) - if err != nil { - return nil, err - } -loop: - for _, m := range msgs { - switch m.Header.Type { - case syscall.NLMSG_DONE: - break loop - case syscall.RTM_NEWROUTE: - rt := (*routeInfoInMemory)(unsafe.Pointer(&m.Data[0])) - routeInfo := rtInfo{} - attrs, err := syscall.ParseNetlinkRouteAttr(&m) - if err != nil { - return nil, err - } - switch rt.Family { - case syscall.AF_INET: - rtr.v4 = append(rtr.v4, &routeInfo) - case syscall.AF_INET6: - rtr.v6 = append(rtr.v6, &routeInfo) - default: - continue loop - } - for _, attr := range attrs { - switch attr.Attr.Type { - case syscall.RTA_DST: - routeInfo.Dst = &net.IPNet{ - IP: net.IP(attr.Value), - Mask: net.CIDRMask(int(rt.DstLen), len(attr.Value)*8), - } - case syscall.RTA_SRC: - routeInfo.Src = &net.IPNet{ - IP: net.IP(attr.Value), - Mask: net.CIDRMask(int(rt.SrcLen), len(attr.Value)*8), - } - case syscall.RTA_GATEWAY: - routeInfo.Gateway = net.IP(attr.Value) - case syscall.RTA_PREFSRC: - routeInfo.PrefSrc = net.IP(attr.Value) - case syscall.RTA_IIF: - routeInfo.InputIface = *(*uint32)(unsafe.Pointer(&attr.Value[0])) - case syscall.RTA_OIF: - routeInfo.OutputIface = *(*uint32)(unsafe.Pointer(&attr.Value[0])) - case syscall.RTA_PRIORITY: - routeInfo.Priority = *(*uint32)(unsafe.Pointer(&attr.Value[0])) - } - } - } - } - sort.Sort(rtr.v4) - sort.Sort(rtr.v6) - ifaces, err := net.Interfaces() - if err != nil { - return nil, err - } - for i, iface := range ifaces { - if i != iface.Index-1 { - return nil, fmt.Errorf("out of order iface %d = %v", i, iface) - } - rtr.ifaces = append(rtr.ifaces, iface) - var addrs ipAddrs - ifaceAddrs, err := iface.Addrs() - if err != nil { - return nil, err - } - for _, addr := range ifaceAddrs { - if inet, ok := addr.(*net.IPNet); ok { - // Go has a nasty habit of giving you IPv4s as ::ffff:1.2.3.4 instead of 1.2.3.4. - // We want to use mapped v4 addresses as v4 preferred addresses, never as v6 - // preferred addresses. - if v4 := inet.IP.To4(); v4 != nil { - if addrs.v4 == nil { - addrs.v4 = v4 - } - } else if addrs.v6 == nil { - addrs.v6 = inet.IP - } - } - } - rtr.addrs = append(rtr.addrs, addrs) - } - return rtr, nil -} diff --git a/vendor/github.com/google/gopacket/tcpassembly/assembly.go b/vendor/github.com/google/gopacket/tcpassembly/assembly.go deleted file mode 100644 index 50f6487..0000000 --- a/vendor/github.com/google/gopacket/tcpassembly/assembly.go +++ /dev/null @@ -1,788 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// Package tcpassembly provides TCP stream re-assembly. -// -// The tcpassembly package implements uni-directional TCP reassembly, for use in -// packet-sniffing applications. The caller reads packets off the wire, then -// presents them to an Assembler in the form of gopacket layers.TCP packets -// (github.com/google/gopacket, github.com/google/gopacket/layers). -// -// The Assembler uses a user-supplied -// StreamFactory to create a user-defined Stream interface, then passes packet -// data in stream order to that object. A concurrency-safe StreamPool keeps -// track of all current Streams being reassembled, so multiple Assemblers may -// run at once to assemble packets while taking advantage of multiple cores. -package tcpassembly - -import ( - "flag" - "fmt" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" - "log" - "sync" - "time" -) - -var memLog = flag.Bool("assembly_memuse_log", false, "If true, the github.com/google/gopacket/tcpassembly library will log information regarding its memory use every once in a while.") -var debugLog = flag.Bool("assembly_debug_log", false, "If true, the github.com/google/gopacket/tcpassembly library will log verbose debugging information (at least one line per packet)") - -const invalidSequence = -1 -const uint32Max = 0xFFFFFFFF - -// Sequence is a TCP sequence number. It provides a few convenience functions -// for handling TCP wrap-around. The sequence should always be in the range -// [0,0xFFFFFFFF]... its other bits are simply used in wrap-around calculations -// and should never be set. -type Sequence int64 - -// Difference defines an ordering for comparing TCP sequences that's safe for -// roll-overs. It returns: -// > 0 : if t comes after s -// < 0 : if t comes before s -// 0 : if t == s -// The number returned is the sequence difference, so 4.Difference(8) will -// return 4. -// -// It handles rollovers by considering any sequence in the first quarter of the -// uint32 space to be after any sequence in the last quarter of that space, thus -// wrapping the uint32 space. -func (s Sequence) Difference(t Sequence) int { - if s > uint32Max-uint32Max/4 && t < uint32Max/4 { - t += uint32Max - } else if t > uint32Max-uint32Max/4 && s < uint32Max/4 { - s += uint32Max - } - return int(t - s) -} - -// Add adds an integer to a sequence and returns the resulting sequence. -func (s Sequence) Add(t int) Sequence { - return (s + Sequence(t)) & uint32Max -} - -// Reassembly objects are passed by an Assembler into Streams using the -// Reassembled call. Callers should not need to create these structs themselves -// except for testing. -type Reassembly struct { - // Bytes is the next set of bytes in the stream. May be empty. - Bytes []byte - // Skip is set to non-zero if bytes were skipped between this and the - // last Reassembly. If this is the first packet in a connection and we - // didn't see the start, we have no idea how many bytes we skipped, so - // we set it to -1. Otherwise, it's set to the number of bytes skipped. - Skip int - // Start is set if this set of bytes has a TCP SYN accompanying it. - Start bool - // End is set if this set of bytes has a TCP FIN or RST accompanying it. - End bool - // Seen is the timestamp this set of bytes was pulled off the wire. - Seen time.Time -} - -const pageBytes = 1900 - -// page is used to store TCP data we're not ready for yet (out-of-order -// packets). Unused pages are stored in and returned from a pageCache, which -// avoids memory allocation. Used pages are stored in a doubly-linked list in -// a connection. -type page struct { - Reassembly - seq Sequence - index int - prev, next *page - buf [pageBytes]byte -} - -// pageCache is a concurrency-unsafe store of page objects we use to avoid -// memory allocation as much as we can. It grows but never shrinks. -type pageCache struct { - free []*page - pcSize int - size, used int - pages [][]page - pageRequests int64 -} - -const initialAllocSize = 1024 - -func newPageCache() *pageCache { - pc := &pageCache{ - free: make([]*page, 0, initialAllocSize), - pcSize: initialAllocSize, - } - pc.grow() - return pc -} - -// grow exponentially increases the size of our page cache as much as necessary. -func (c *pageCache) grow() { - pages := make([]page, c.pcSize) - c.pages = append(c.pages, pages) - c.size += c.pcSize - for i := range pages { - c.free = append(c.free, &pages[i]) - } - if *memLog { - log.Println("PageCache: created", c.pcSize, "new pages") - } - c.pcSize *= 2 -} - -// next returns a clean, ready-to-use page object. -func (c *pageCache) next(ts time.Time) (p *page) { - if *memLog { - c.pageRequests++ - if c.pageRequests&0xFFFF == 0 { - log.Println("PageCache:", c.pageRequests, "requested,", c.used, "used,", len(c.free), "free") - } - } - if len(c.free) == 0 { - c.grow() - } - i := len(c.free) - 1 - p, c.free = c.free[i], c.free[:i] - p.prev = nil - p.next = nil - p.Seen = ts - p.Bytes = p.buf[:0] - c.used++ - return p -} - -// replace replaces a page into the pageCache. -func (c *pageCache) replace(p *page) { - c.used-- - c.free = append(c.free, p) -} - -// Stream is implemented by the caller to handle incoming reassembled -// TCP data. Callers create a StreamFactory, then StreamPool uses -// it to create a new Stream for every TCP stream. -// -// assembly will, in order: -// 1) Create the stream via StreamFactory.New -// 2) Call Reassembled 0 or more times, passing in reassembled TCP data in order -// 3) Call ReassemblyComplete one time, after which the stream is dereferenced by assembly. -type Stream interface { - // Reassembled is called zero or more times. assembly guarantees - // that the set of all Reassembly objects passed in during all - // calls are presented in the order they appear in the TCP stream. - // Reassembly objects are reused after each Reassembled call, - // so it's important to copy anything you need out of them - // (specifically out of Reassembly.Bytes) that you need to stay - // around after you return from the Reassembled call. - Reassembled([]Reassembly) - // ReassemblyComplete is called when assembly decides there is - // no more data for this Stream, either because a FIN or RST packet - // was seen, or because the stream has timed out without any new - // packet data (due to a call to FlushOlderThan). - ReassemblyComplete() -} - -// StreamFactory is used by assembly to create a new stream for each -// new TCP session. -type StreamFactory interface { - // New should return a new stream for the given TCP key. - New(netFlow, tcpFlow gopacket.Flow) Stream -} - -func (p *StreamPool) connections() []*connection { - p.mu.RLock() - conns := make([]*connection, 0, len(p.conns)) - for _, conn := range p.conns { - conns = append(conns, conn) - } - p.mu.RUnlock() - return conns -} - -// FlushOptions provide options for flushing connections. -type FlushOptions struct { - T time.Time // If nonzero, only connections with data older than T are flushed - CloseAll bool // If true, ALL connections are closed post flush, not just those that correctly see FIN/RST. -} - -// FlushWithOptions finds any streams waiting for packets older than -// the given time, and pushes through the data they have (IE: tells -// them to stop waiting and skip the data they're waiting for). -// -// Each Stream maintains a list of zero or more sets of bytes it has received -// out-of-order. For example, if it has processed up through sequence number -// 10, it might have bytes [15-20), [20-25), [30,50) in its list. Each set of -// bytes also has the timestamp it was originally viewed. A flush call will -// look at the smallest subsequent set of bytes, in this case [15-20), and if -// its timestamp is older than the passed-in time, it will push it and all -// contiguous byte-sets out to the Stream's Reassembled function. In this case, -// it will push [15-20), but also [20-25), since that's contiguous. It will -// only push [30-50) if its timestamp is also older than the passed-in time, -// otherwise it will wait until the next FlushOlderThan to see if bytes [25-30) -// come in. -// -// If it pushes all bytes (or there were no sets of bytes to begin with) -// AND the connection has not received any bytes since the passed-in time, -// the connection will be closed. -// -// If CloseAll is set, it will close out connections that have been drained. -// Regardless of the CloseAll setting, connections stale for the specified -// time will be closed. -// -// Returns the number of connections flushed, and of those, the number closed -// because of the flush. -func (a *Assembler) FlushWithOptions(opt FlushOptions) (flushed, closed int) { - conns := a.connPool.connections() - closes := 0 - flushes := 0 - for _, conn := range conns { - flushed := false - conn.mu.Lock() - if conn.closed { - // Already closed connection, nothing to do here. - conn.mu.Unlock() - continue - } - for conn.first != nil && conn.first.Seen.Before(opt.T) { - a.skipFlush(conn) - flushed = true - if conn.closed { - closes++ - break - } - } - if opt.CloseAll && !conn.closed && conn.first == nil && conn.lastSeen.Before(opt.T) { - flushed = true - a.closeConnection(conn) - closes++ - } - if flushed { - flushes++ - } - conn.mu.Unlock() - } - return flushes, closes -} - -// FlushOlderThan calls FlushWithOptions with the CloseAll option set to true. -func (a *Assembler) FlushOlderThan(t time.Time) (flushed, closed int) { - return a.FlushWithOptions(FlushOptions{CloseAll: true, T: t}) -} - -// FlushAll flushes all remaining data into all remaining connections, closing -// those connections. It returns the total number of connections flushed/closed -// by the call. -func (a *Assembler) FlushAll() (closed int) { - conns := a.connPool.connections() - closed = len(conns) - for _, conn := range conns { - conn.mu.Lock() - for !conn.closed { - a.skipFlush(conn) - } - conn.mu.Unlock() - } - return -} - -type key [2]gopacket.Flow - -func (k *key) String() string { - return fmt.Sprintf("%s:%s", k[0], k[1]) -} - -// StreamPool stores all streams created by Assemblers, allowing multiple -// assemblers to work together on stream processing while enforcing the fact -// that a single stream receives its data serially. It is safe -// for concurrency, usable by multiple Assemblers at once. -// -// StreamPool handles the creation and storage of Stream objects used by one or -// more Assembler objects. When a new TCP stream is found by an Assembler, it -// creates an associated Stream by calling its StreamFactory's New method. -// Thereafter (until the stream is closed), that Stream object will receive -// assembled TCP data via Assembler's calls to the stream's Reassembled -// function. -// -// Like the Assembler, StreamPool attempts to minimize allocation. Unlike the -// Assembler, though, it does have to do some locking to make sure that the -// connection objects it stores are accessible to multiple Assemblers. -type StreamPool struct { - conns map[key]*connection - users int - mu sync.RWMutex - factory StreamFactory - free []*connection - all [][]connection - nextAlloc int - newConnectionCount int64 -} - -func (p *StreamPool) grow() { - conns := make([]connection, p.nextAlloc) - p.all = append(p.all, conns) - for i := range conns { - p.free = append(p.free, &conns[i]) - } - if *memLog { - log.Println("StreamPool: created", p.nextAlloc, "new connections") - } - p.nextAlloc *= 2 -} - -// NewStreamPool creates a new connection pool. Streams will -// be created as necessary using the passed-in StreamFactory. -func NewStreamPool(factory StreamFactory) *StreamPool { - return &StreamPool{ - conns: make(map[key]*connection, initialAllocSize), - free: make([]*connection, 0, initialAllocSize), - factory: factory, - nextAlloc: initialAllocSize, - } -} - -const assemblerReturnValueInitialSize = 16 - -// NewAssembler creates a new assembler. Pass in the StreamPool -// to use, may be shared across assemblers. -// -// This sets some sane defaults for the assembler options, -// see DefaultAssemblerOptions for details. -func NewAssembler(pool *StreamPool) *Assembler { - pool.mu.Lock() - pool.users++ - pool.mu.Unlock() - return &Assembler{ - ret: make([]Reassembly, assemblerReturnValueInitialSize), - pc: newPageCache(), - connPool: pool, - AssemblerOptions: DefaultAssemblerOptions, - } -} - -// DefaultAssemblerOptions provides default options for an assembler. -// These options are used by default when calling NewAssembler, so if -// modified before a NewAssembler call they'll affect the resulting Assembler. -// -// Note that the default options can result in ever-increasing memory usage -// unless one of the Flush* methods is called on a regular basis. -var DefaultAssemblerOptions = AssemblerOptions{ - MaxBufferedPagesPerConnection: 0, // unlimited - MaxBufferedPagesTotal: 0, // unlimited -} - -type connection struct { - key key - pages int - first, last *page - nextSeq Sequence - created, lastSeen time.Time - stream Stream - closed bool - mu sync.Mutex -} - -func (c *connection) reset(k key, s Stream, ts time.Time) { - c.key = k - c.pages = 0 - c.first, c.last = nil, nil - c.nextSeq = invalidSequence - c.created = ts - c.stream = s - c.closed = false -} - -// AssemblerOptions controls the behavior of each assembler. Modify the -// options of each assembler you create to change their behavior. -type AssemblerOptions struct { - // MaxBufferedPagesTotal is an upper limit on the total number of pages to - // buffer while waiting for out-of-order packets. Once this limit is - // reached, the assembler will degrade to flushing every connection it - // gets a packet for. If <= 0, this is ignored. - MaxBufferedPagesTotal int - // MaxBufferedPagesPerConnection is an upper limit on the number of pages - // buffered for a single connection. Should this limit be reached for a - // particular connection, the smallest sequence number will be flushed, along - // with any contiguous data. If <= 0, this is ignored. - MaxBufferedPagesPerConnection int -} - -// Assembler handles reassembling TCP streams. It is not safe for -// concurrency... after passing a packet in via the Assemble call, the caller -// must wait for that call to return before calling Assemble again. Callers can -// get around this by creating multiple assemblers that share a StreamPool. In -// that case, each individual stream will still be handled serially (each stream -// has an individual mutex associated with it), however multiple assemblers can -// assemble different connections concurrently. -// -// The Assembler provides (hopefully) fast TCP stream re-assembly for sniffing -// applications written in Go. The Assembler uses the following methods to be -// as fast as possible, to keep packet processing speedy: -// -// Avoids Lock Contention -// -// Assemblers locks connections, but each connection has an individual lock, and -// rarely will two Assemblers be looking at the same connection. Assemblers -// lock the StreamPool when looking up connections, but they use Reader -// locks initially, and only force a write lock if they need to create a new -// connection or close one down. These happen much less frequently than -// individual packet handling. -// -// Each assembler runs in its own goroutine, and the only state shared between -// goroutines is through the StreamPool. Thus all internal Assembler state -// can be handled without any locking. -// -// NOTE: If you can guarantee that packets going to a set of Assemblers will -// contain information on different connections per Assembler (for example, -// they're already hashed by PF_RING hashing or some other hashing mechanism), -// then we recommend you use a seperate StreamPool per Assembler, thus -// avoiding all lock contention. Only when different Assemblers could receive -// packets for the same Stream should a StreamPool be shared between them. -// -// Avoids Memory Copying -// -// In the common case, handling of a single TCP packet should result in zero -// memory allocations. The Assembler will look up the connection, figure out -// that the packet has arrived in order, and immediately pass that packet on to -// the appropriate connection's handling code. Only if a packet arrives out of -// order is its contents copied and stored in memory for later. -// -// Avoids Memory Allocation -// -// Assemblers try very hard to not use memory allocation unless absolutely -// necessary. Packet data for sequential packets is passed directly to streams -// with no copying or allocation. Packet data for out-of-order packets is -// copied into reusable pages, and new pages are only allocated rarely when the -// page cache runs out. Page caches are Assembler-specific, thus not used -// concurrently and requiring no locking. -// -// Internal representations for connection objects are also reused over time. -// Because of this, the most common memory allocation done by the Assembler is -// generally what's done by the caller in StreamFactory.New. If no allocation -// is done there, then very little allocation is done ever, mostly to handle -// large increases in bandwidth or numbers of connections. -// -// TODO: The page caches used by an Assembler will grow to the size necessary -// to handle a workload, and currently will never shrink. This means that -// traffic spikes can result in large memory usage which isn't garbage -// collected when typical traffic levels return. -type Assembler struct { - AssemblerOptions - ret []Reassembly - pc *pageCache - connPool *StreamPool -} - -func (p *StreamPool) newConnection(k key, s Stream, ts time.Time) (c *connection) { - if *memLog { - p.newConnectionCount++ - if p.newConnectionCount&0x7FFF == 0 { - log.Println("StreamPool:", p.newConnectionCount, "requests,", len(p.conns), "used,", len(p.free), "free") - } - } - if len(p.free) == 0 { - p.grow() - } - index := len(p.free) - 1 - c, p.free = p.free[index], p.free[:index] - c.reset(k, s, ts) - return c -} - -// getConnection returns a connection. If end is true and a connection -// does not already exist, returns nil. This allows us to check for a -// connection without actually creating one if it doesn't already exist. -func (p *StreamPool) getConnection(k key, end bool, ts time.Time) *connection { - p.mu.RLock() - conn := p.conns[k] - p.mu.RUnlock() - if end || conn != nil { - return conn - } - s := p.factory.New(k[0], k[1]) - p.mu.Lock() - conn = p.newConnection(k, s, ts) - if conn2 := p.conns[k]; conn2 != nil { - p.mu.Unlock() - return conn2 - } - p.conns[k] = conn - p.mu.Unlock() - return conn -} - -// Assemble calls AssembleWithTimestamp with the current timestamp, useful for -// packets being read directly off the wire. -func (a *Assembler) Assemble(netFlow gopacket.Flow, t *layers.TCP) { - a.AssembleWithTimestamp(netFlow, t, time.Now()) -} - -// AssembleWithTimestamp reassembles the given TCP packet into its appropriate -// stream. -// -// The timestamp passed in must be the timestamp the packet was seen. -// For packets read off the wire, time.Now() should be fine. For packets read -// from PCAP files, CaptureInfo.Timestamp should be passed in. This timestamp -// will affect which streams are flushed by a call to FlushOlderThan. -// -// Each Assemble call results in, in order: -// -// zero or one calls to StreamFactory.New, creating a stream -// zero or one calls to Reassembled on a single stream -// zero or one calls to ReassemblyComplete on the same stream -func (a *Assembler) AssembleWithTimestamp(netFlow gopacket.Flow, t *layers.TCP, timestamp time.Time) { - // Ignore empty TCP packets - if !t.SYN && !t.FIN && !t.RST && len(t.LayerPayload()) == 0 { - if *debugLog { - log.Println("ignoring useless packet") - } - return - } - - a.ret = a.ret[:0] - key := key{netFlow, t.TransportFlow()} - var conn *connection - // This for loop handles a race condition where a connection will close, lock - // the connection pool, and remove itself, but before it locked the connection - // pool it's returned to another Assemble statement. This should loop 0-1 - // times for the VAST majority of cases. - for { - conn = a.connPool.getConnection( - key, !t.SYN && len(t.LayerPayload()) == 0, timestamp) - if conn == nil { - if *debugLog { - log.Printf("%v got empty packet on otherwise empty connection", key) - } - return - } - conn.mu.Lock() - if !conn.closed { - break - } - conn.mu.Unlock() - } - if conn.lastSeen.Before(timestamp) { - conn.lastSeen = timestamp - } - seq, bytes := Sequence(t.Seq), t.Payload - if conn.nextSeq == invalidSequence { - if t.SYN { - if *debugLog { - log.Printf("%v saw first SYN packet, returning immediately, seq=%v", key, seq) - } - a.ret = append(a.ret, Reassembly{ - Bytes: bytes, - Skip: 0, - Start: true, - Seen: timestamp, - }) - conn.nextSeq = seq.Add(len(bytes) + 1) - } else { - if *debugLog { - log.Printf("%v waiting for start, storing into connection", key) - } - a.insertIntoConn(t, conn, timestamp) - } - } else if diff := conn.nextSeq.Difference(seq); diff > 0 { - if *debugLog { - log.Printf("%v gap in sequence numbers (%v, %v) diff %v, storing into connection", key, conn.nextSeq, seq, diff) - } - a.insertIntoConn(t, conn, timestamp) - } else { - bytes, conn.nextSeq = byteSpan(conn.nextSeq, seq, bytes) - if *debugLog { - log.Printf("%v found contiguous data (%v, %v), returning immediately", key, seq, conn.nextSeq) - } - a.ret = append(a.ret, Reassembly{ - Bytes: bytes, - Skip: 0, - End: t.RST || t.FIN, - Seen: timestamp, - }) - } - if len(a.ret) > 0 { - a.sendToConnection(conn) - } - conn.mu.Unlock() -} - -func byteSpan(expected, received Sequence, bytes []byte) (toSend []byte, next Sequence) { - if expected == invalidSequence { - return bytes, received.Add(len(bytes)) - } - span := int(received.Difference(expected)) - if span <= 0 { - return bytes, received.Add(len(bytes)) - } else if len(bytes) < span { - return nil, expected - } - return bytes[span:], expected.Add(len(bytes) - span) -} - -// sendToConnection sends the current values in a.ret to the connection, closing -// the connection if the last thing sent had End set. -func (a *Assembler) sendToConnection(conn *connection) { - a.addContiguous(conn) - if conn.stream == nil { - panic("why?") - } - conn.stream.Reassembled(a.ret) - if a.ret[len(a.ret)-1].End { - a.closeConnection(conn) - } -} - -// addContiguous adds contiguous byte-sets to a connection. -func (a *Assembler) addContiguous(conn *connection) { - for conn.first != nil && conn.nextSeq.Difference(conn.first.seq) <= 0 { - a.addNextFromConn(conn) - } -} - -// skipFlush skips the first set of bytes we're waiting for and returns the -// first set of bytes we have. If we have no bytes pending, it closes the -// connection. -func (a *Assembler) skipFlush(conn *connection) { - if *debugLog { - log.Printf("%v skipFlush %v", conn.key, conn.nextSeq) - } - if conn.first == nil { - a.closeConnection(conn) - return - } - a.ret = a.ret[:0] - a.addNextFromConn(conn) - a.addContiguous(conn) - a.sendToConnection(conn) -} - -func (p *StreamPool) remove(conn *connection) { - p.mu.Lock() - delete(p.conns, conn.key) - p.free = append(p.free, conn) - p.mu.Unlock() -} - -func (a *Assembler) closeConnection(conn *connection) { - if *debugLog { - log.Printf("%v closing", conn.key) - } - conn.stream.ReassemblyComplete() - conn.closed = true - a.connPool.remove(conn) - for p := conn.first; p != nil; p = p.next { - a.pc.replace(p) - } -} - -// traverseConn traverses our doubly-linked list of pages for the correct -// position to put the given sequence number. Note that it traverses backwards, -// starting at the highest sequence number and going down, since we assume the -// common case is that TCP packets for a stream will appear in-order, with -// minimal loss or packet reordering. -func (c *connection) traverseConn(seq Sequence) (prev, current *page) { - prev = c.last - for prev != nil && prev.seq.Difference(seq) < 0 { - current = prev - prev = current.prev - } - return -} - -// pushBetween inserts the doubly-linked list first-...-last in between the -// nodes prev-next in another doubly-linked list. If prev is nil, makes first -// the new first page in the connection's list. If next is nil, makes last the -// new last page in the list. first/last may point to the same page. -func (c *connection) pushBetween(prev, next, first, last *page) { - // Maintain our doubly linked list - if next == nil || c.last == nil { - c.last = last - } else { - last.next = next - next.prev = last - } - if prev == nil || c.first == nil { - c.first = first - } else { - first.prev = prev - prev.next = first - } -} - -func (a *Assembler) insertIntoConn(t *layers.TCP, conn *connection, ts time.Time) { - if conn.first != nil && conn.first.seq == conn.nextSeq { - panic("wtf") - } - p, p2, numPages := a.pagesFromTCP(t, ts) - prev, current := conn.traverseConn(Sequence(t.Seq)) - conn.pushBetween(prev, current, p, p2) - conn.pages += numPages - if (a.MaxBufferedPagesPerConnection > 0 && conn.pages >= a.MaxBufferedPagesPerConnection) || - (a.MaxBufferedPagesTotal > 0 && a.pc.used >= a.MaxBufferedPagesTotal) { - if *debugLog { - log.Printf("%v hit max buffer size: %+v, %v, %v", conn.key, a.AssemblerOptions, conn.pages, a.pc.used) - } - a.addNextFromConn(conn) - } -} - -// pagesFromTCP creates a page (or set of pages) from a TCP packet. Note that -// it should NEVER receive a SYN packet, as it doesn't handle sequences -// correctly. -// -// It returns the first and last page in its doubly-linked list of new pages. -func (a *Assembler) pagesFromTCP(t *layers.TCP, ts time.Time) (p, p2 *page, numPages int) { - first := a.pc.next(ts) - current := first - numPages++ - seq, bytes := Sequence(t.Seq), t.Payload - for { - length := min(len(bytes), pageBytes) - current.Bytes = current.buf[:length] - copy(current.Bytes, bytes) - current.seq = seq - bytes = bytes[length:] - if len(bytes) == 0 { - break - } - seq = seq.Add(length) - current.next = a.pc.next(ts) - current.next.prev = current - current = current.next - numPages++ - } - current.End = t.RST || t.FIN - return first, current, numPages -} - -// addNextFromConn pops the first page from a connection off and adds it to the -// return array. -func (a *Assembler) addNextFromConn(conn *connection) { - if conn.nextSeq == invalidSequence { - conn.first.Skip = -1 - } else if diff := conn.nextSeq.Difference(conn.first.seq); diff > 0 { - conn.first.Skip = int(diff) - } - conn.first.Bytes, conn.nextSeq = byteSpan(conn.nextSeq, conn.first.seq, conn.first.Bytes) - if *debugLog { - log.Printf("%v adding from conn (%v, %v)", conn.key, conn.first.seq, conn.nextSeq) - } - a.ret = append(a.ret, conn.first.Reassembly) - a.pc.replace(conn.first) - if conn.first == conn.last { - conn.first = nil - conn.last = nil - } else { - conn.first = conn.first.next - conn.first.prev = nil - } - conn.pages-- -} - -func min(a, b int) int { - if a < b { - return a - } - return b -} diff --git a/vendor/github.com/google/gopacket/tcpassembly/assembly_test.go b/vendor/github.com/google/gopacket/tcpassembly/assembly_test.go deleted file mode 100644 index 1bd2842..0000000 --- a/vendor/github.com/google/gopacket/tcpassembly/assembly_test.go +++ /dev/null @@ -1,562 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package tcpassembly - -import ( - "github.com/google/gopacket" - "github.com/google/gopacket/layers" - "net" - "reflect" - "testing" - "time" -) - -var netFlow gopacket.Flow - -func init() { - netFlow, _ = gopacket.FlowFromEndpoints( - layers.NewIPEndpoint(net.IP{1, 2, 3, 4}), - layers.NewIPEndpoint(net.IP{5, 6, 7, 8})) -} - -type testSequence struct { - in layers.TCP - want []Reassembly -} - -type testFactory struct { - reassembly []Reassembly -} - -func (t *testFactory) New(a, b gopacket.Flow) Stream { - return t -} -func (t *testFactory) Reassembled(r []Reassembly) { - t.reassembly = r - for i := 0; i < len(r); i++ { - t.reassembly[i].Seen = time.Time{} - } -} -func (t *testFactory) ReassemblyComplete() { -} - -func test(t *testing.T, s []testSequence) { - fact := &testFactory{} - p := NewStreamPool(fact) - a := NewAssembler(p) - a.MaxBufferedPagesPerConnection = 4 - for i, test := range s { - fact.reassembly = []Reassembly{} - a.Assemble(netFlow, &test.in) - if !reflect.DeepEqual(fact.reassembly, test.want) { - t.Fatalf("test %v:\nwant: %v\n got: %v\n", i, test.want, fact.reassembly) - } - } -} - -func TestReorder(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1001, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1004, - BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1010, - BaseLayer: layers.BaseLayer{Payload: []byte{4, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}}, - }, - want: []Reassembly{ - Reassembly{ - Skip: -1, - Bytes: []byte{1, 2, 3}, - }, - Reassembly{ - Bytes: []byte{2, 2, 3}, - }, - Reassembly{ - Bytes: []byte{3, 2, 3}, - }, - Reassembly{ - Bytes: []byte{4, 2, 3}, - }, - }, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1016, - BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1019, - BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1013, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}}, - }, - want: []Reassembly{ - Reassembly{ - Bytes: []byte{1, 2, 3}, - }, - Reassembly{ - Bytes: []byte{2, 2, 3}, - }, - Reassembly{ - Bytes: []byte{3, 2, 3}, - }, - }, - }, - }) -} - -func TestMaxPerSkip(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1000, - SYN: true, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{1, 2, 3}, - }, - }, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1010, - BaseLayer: layers.BaseLayer{Payload: []byte{4, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1013, - BaseLayer: layers.BaseLayer{Payload: []byte{5, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1016, - BaseLayer: layers.BaseLayer{Payload: []byte{6, 2, 3}}, - }, - want: []Reassembly{ - Reassembly{ - Skip: 3, - Bytes: []byte{3, 2, 3}, - }, - Reassembly{ - Bytes: []byte{4, 2, 3}, - }, - Reassembly{ - Bytes: []byte{5, 2, 3}, - }, - Reassembly{ - Bytes: []byte{6, 2, 3}, - }, - }, - }, - }) -} - -func TestReorderFast(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{1, 2, 3}, - }, - }, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{3, 2, 3}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1004, - BaseLayer: layers.BaseLayer{Payload: []byte{2, 2, 3}}, - }, - want: []Reassembly{ - Reassembly{ - Bytes: []byte{2, 2, 3}, - }, - Reassembly{ - Bytes: []byte{3, 2, 3}, - }, - }, - }, - }) -} - -func TestOverlap(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, - }, - }, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}}, - }, - want: []Reassembly{ - Reassembly{ - Bytes: []byte{1, 2, 3, 4, 5}, - }, - }, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1010, - BaseLayer: layers.BaseLayer{Payload: []byte{0, 1, 2, 3, 4, 5, 6, 7}}, - }, - want: []Reassembly{ - Reassembly{ - Bytes: []byte{6, 7}, - }, - }, - }, - }) -} - -func TestBufferedOverlap(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1007, - BaseLayer: layers.BaseLayer{Payload: []byte{7, 8, 9, 0, 1, 2, 3, 4, 5}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1010, - BaseLayer: layers.BaseLayer{Payload: []byte{0, 1, 2, 3, 4, 5, 6, 7}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, - }, - Reassembly{ - Bytes: []byte{1, 2, 3, 4, 5}, - }, - Reassembly{ - Bytes: []byte{6, 7}, - }, - }, - }, - }) -} - -func TestOverrun1(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 0xFFFFFFFF, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, - }, - }, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 10, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4}}, - }, - want: []Reassembly{ - Reassembly{ - Bytes: []byte{1, 2, 3, 4}, - }, - }, - }, - }) -} - -func TestOverrun2(t *testing.T) { - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 10, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4}}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 0xFFFFFFFF, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, - }, - Reassembly{ - Bytes: []byte{1, 2, 3, 4}, - }, - }, - }, - }) -} - -func TestCacheLargePacket(t *testing.T) { - data := make([]byte, pageBytes*3) - test(t, []testSequence{ - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1001, - BaseLayer: layers.BaseLayer{Payload: data}, - }, - want: []Reassembly{}, - }, - { - in: layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 1000, - SYN: true, - BaseLayer: layers.BaseLayer{Payload: []byte{}}, - }, - want: []Reassembly{ - Reassembly{ - Start: true, - Bytes: []byte{}, - }, - Reassembly{ - Bytes: data[:pageBytes], - }, - Reassembly{ - Bytes: data[pageBytes : pageBytes*2], - }, - Reassembly{ - Bytes: data[pageBytes*2 : pageBytes*3], - }, - }, - }, - }) -} - -func BenchmarkSingleStream(b *testing.B) { - t := layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - } - a := NewAssembler(NewStreamPool(&testFactory{})) - for i := 0; i < b.N; i++ { - a.Assemble(netFlow, &t) - if t.SYN { - t.SYN = false - t.Seq++ - } - t.Seq += 10 - } -} - -func BenchmarkSingleStreamSkips(b *testing.B) { - t := layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - } - a := NewAssembler(NewStreamPool(&testFactory{})) - skipped := false - for i := 0; i < b.N; i++ { - if i%10 == 9 { - t.Seq += 10 - skipped = true - } else if skipped { - t.Seq -= 20 - } - a.Assemble(netFlow, &t) - if t.SYN { - t.SYN = false - t.Seq++ - } - t.Seq += 10 - if skipped { - t.Seq += 10 - skipped = false - } - } -} - -func BenchmarkSingleStreamLoss(b *testing.B) { - t := layers.TCP{ - SrcPort: 1, - DstPort: 2, - SYN: true, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - } - a := NewAssembler(NewStreamPool(&testFactory{})) - for i := 0; i < b.N; i++ { - a.Assemble(netFlow, &t) - t.SYN = false - t.Seq += 11 - } -} - -func BenchmarkMultiStreamGrow(b *testing.B) { - t := layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 0, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - } - a := NewAssembler(NewStreamPool(&testFactory{})) - for i := 0; i < b.N; i++ { - t.SrcPort = layers.TCPPort(i) - a.Assemble(netFlow, &t) - t.Seq += 10 - } -} - -func BenchmarkMultiStreamConn(b *testing.B) { - t := layers.TCP{ - SrcPort: 1, - DstPort: 2, - Seq: 0, - SYN: true, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}}, - } - a := NewAssembler(NewStreamPool(&testFactory{})) - for i := 0; i < b.N; i++ { - t.SrcPort = layers.TCPPort(i) - a.Assemble(netFlow, &t) - if i%65536 == 65535 { - if t.SYN { - t.SYN = false - t.Seq++ - } - t.Seq += 10 - } - } -} diff --git a/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader.go b/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader.go deleted file mode 100644 index 092b811..0000000 --- a/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader.go +++ /dev/null @@ -1,210 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -// Package tcpreader provides an implementation for tcpassembly.Stream which presents -// the caller with an io.Reader for easy processing. -// -// The assembly package handles packet data reordering, but its output is -// library-specific, thus not usable by the majority of external Go libraries. -// The io.Reader interface, on the other hand, is used throughout much of Go -// code as an easy mechanism for reading in data streams and decoding them. For -// example, the net/http package provides the ReadRequest function, which can -// parase an HTTP request from a live data stream, just what we'd want when -// sniffing HTTP traffic. Using ReaderStream, this is relatively easy to set -// up: -// -// // Create our StreamFactory -// type httpStreamFactory struct {} -// func (f *httpStreamFactory) New(a, b gopacket.Flow) { -// r := tcpreader.NewReaderStream(false) -// go printRequests(r) -// return &r -// } -// func printRequests(r io.Reader) { -// // Convert to bufio, since that's what ReadRequest wants. -// buf := bufio.NewReader(r) -// for { -// if req, err := http.ReadRequest(buf); err == io.EOF { -// return -// } else if err != nil { -// log.Println("Error parsing HTTP requests:", err) -// } else { -// fmt.Println("HTTP REQUEST:", req) -// fmt.Println("Body contains", tcpreader.DiscardBytesToEOF(req.Body), "bytes") -// } -// } -// } -// -// Using just this code, we're able to reference a powerful, built-in library -// for HTTP request parsing to do all the dirty-work of parsing requests from -// the wire in real-time. Pass this stream factory to an tcpassembly.StreamPool, -// start up an tcpassembly.Assembler, and you're good to go! -package tcpreader - -import ( - "errors" - "github.com/google/gopacket/tcpassembly" - "io" -) - -var discardBuffer = make([]byte, 4096) - -// DiscardBytesToFirstError will read in all bytes up to the first error -// reported by the given reader, then return the number of bytes discarded -// and the error encountered. -func DiscardBytesToFirstError(r io.Reader) (discarded int, err error) { - for { - n, e := r.Read(discardBuffer) - discarded += n - if e != nil { - return discarded, e - } - } -} - -// DiscardBytesToEOF will read in all bytes from a Reader until it -// encounters an io.EOF, then return the number of bytes. Be careful -// of this... if used on a Reader that returns a non-io.EOF error -// consistently, this will loop forever discarding that error while -// it waits for an EOF. -func DiscardBytesToEOF(r io.Reader) (discarded int) { - for { - n, e := DiscardBytesToFirstError(r) - discarded += n - if e == io.EOF { - return - } - } -} - -// ReaderStream implements both tcpassembly.Stream and io.Reader. You can use it -// as a building block to make simple, easy stream handlers. -// -// IMPORTANT: If you use a ReaderStream, you MUST read ALL BYTES from it, -// quickly. Not reading available bytes will block TCP stream reassembly. It's -// a common pattern to do this by starting a goroutine in the factory's New -// method: -// -// type myStreamHandler struct { -// r ReaderStream -// } -// func (m *myStreamHandler) run() { -// // Do something here that reads all of the ReaderStream, or your assembly -// // will block. -// fmt.Println(tcpreader.DiscardBytesToEOF(&m.r)) -// } -// func (f *myStreamFactory) New(a, b gopacket.Flow) tcpassembly.Stream { -// s := &myStreamHandler{} -// go s.run() -// // Return the ReaderStream as the stream that assembly should populate. -// return &s.r -// } -type ReaderStream struct { - ReaderStreamOptions - reassembled chan []tcpassembly.Reassembly - done chan bool - current []tcpassembly.Reassembly - closed bool - lossReported bool - first bool - initiated bool -} - -// ReaderStreamOptions provides user-resettable options for a ReaderStream. -type ReaderStreamOptions struct { - // LossErrors determines whether this stream will return - // ReaderStreamDataLoss errors from its Read function whenever it - // determines data has been lost. - LossErrors bool -} - -// NewReaderStream returns a new ReaderStream object. -func NewReaderStream() ReaderStream { - r := ReaderStream{ - reassembled: make(chan []tcpassembly.Reassembly), - done: make(chan bool), - first: true, - initiated: true, - } - return r -} - -// Reassembled implements tcpassembly.Stream's Reassembled function. -func (r *ReaderStream) Reassembled(reassembly []tcpassembly.Reassembly) { - if !r.initiated { - panic("ReaderStream not created via NewReaderStream") - } - r.reassembled <- reassembly - <-r.done -} - -// ReassemblyComplete implements tcpassembly.Stream's ReassemblyComplete function. -func (r *ReaderStream) ReassemblyComplete() { - close(r.reassembled) - close(r.done) -} - -// stripEmpty strips empty reassembly slices off the front of its current set of -// slices. -func (r *ReaderStream) stripEmpty() { - for len(r.current) > 0 && len(r.current[0].Bytes) == 0 { - r.current = r.current[1:] - r.lossReported = false - } -} - -// DataLost is returned by the ReaderStream's Read function when it encounters -// a Reassembly with Skip != 0. -var DataLost = errors.New("lost data") - -// Read implements io.Reader's Read function. -// Given a byte slice, it will either copy a non-zero number of bytes into -// that slice and return the number of bytes and a nil error, or it will -// leave slice p as is and return 0, io.EOF. -func (r *ReaderStream) Read(p []byte) (int, error) { - if !r.initiated { - panic("ReaderStream not created via NewReaderStream") - } - var ok bool - r.stripEmpty() - for !r.closed && len(r.current) == 0 { - if r.first { - r.first = false - } else { - r.done <- true - } - if r.current, ok = <-r.reassembled; ok { - r.stripEmpty() - } else { - r.closed = true - } - } - if len(r.current) > 0 { - current := &r.current[0] - if r.LossErrors && !r.lossReported && current.Skip != 0 { - r.lossReported = true - return 0, DataLost - } - length := copy(p, current.Bytes) - current.Bytes = current.Bytes[length:] - return length, nil - } - return 0, io.EOF -} - -// Close implements io.Closer's Close function, making ReaderStream a -// io.ReadCloser. It discards all remaining bytes in the reassembly in a -// manner that's safe for the assembler (IE: it doesn't block). -func (r *ReaderStream) Close() error { - r.current = nil - r.closed = true - for { - if _, ok := <-r.reassembled; !ok { - return nil - } - r.done <- true - } -} diff --git a/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader_test.go b/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader_test.go deleted file mode 100644 index 7da9fd9..0000000 --- a/vendor/github.com/google/gopacket/tcpassembly/tcpreader/reader_test.go +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package tcpreader - -import ( - "bytes" - "fmt" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" - "github.com/google/gopacket/tcpassembly" - "io" - "net" - "testing" -) - -var netFlow gopacket.Flow - -func init() { - netFlow, _ = gopacket.FlowFromEndpoints( - layers.NewIPEndpoint(net.IP{1, 2, 3, 4}), - layers.NewIPEndpoint(net.IP{5, 6, 7, 8})) -} - -type readReturn struct { - data []byte - err error -} -type readSequence struct { - in []layers.TCP - want []readReturn -} -type testReaderFactory struct { - lossErrors bool - readSize int - ReaderStream - output chan []byte -} - -func (t *testReaderFactory) New(a, b gopacket.Flow) tcpassembly.Stream { - return &t.ReaderStream -} - -func testReadSequence(t *testing.T, lossErrors bool, readSize int, seq readSequence) { - f := &testReaderFactory{ReaderStream: NewReaderStream()} - f.ReaderStream.LossErrors = lossErrors - p := tcpassembly.NewStreamPool(f) - a := tcpassembly.NewAssembler(p) - buf := make([]byte, readSize) - go func() { - for i, test := range seq.in { - fmt.Println("Assembling", i) - a.Assemble(netFlow, &test) - fmt.Println("Assembly done") - } - }() - for i, test := range seq.want { - fmt.Println("Waiting for read", i) - n, err := f.Read(buf[:]) - fmt.Println("Got read") - if n != len(test.data) { - t.Errorf("test %d want %d bytes, got %d bytes", i, len(test.data), n) - } else if err != test.err { - t.Errorf("test %d want err %v, got err %v", i, test.err, err) - } else if !bytes.Equal(buf[:n], test.data) { - t.Errorf("test %d\nwant: %v\n got: %v\n", i, test.data, buf[:n]) - } - } - fmt.Println("All done reads") -} - -func TestRead(t *testing.T) { - testReadSequence(t, false, 10, readSequence{ - in: []layers.TCP{ - { - SYN: true, - SrcPort: 1, - DstPort: 2, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}}, - }, - { - FIN: true, - SrcPort: 1, - DstPort: 2, - Seq: 1004, - }, - }, - want: []readReturn{ - {data: []byte{1, 2, 3}}, - {err: io.EOF}, - }, - }) -} - -func TestReadSmallChunks(t *testing.T) { - testReadSequence(t, false, 2, readSequence{ - in: []layers.TCP{ - { - SYN: true, - SrcPort: 1, - DstPort: 2, - Seq: 1000, - BaseLayer: layers.BaseLayer{Payload: []byte{1, 2, 3}}, - }, - { - FIN: true, - SrcPort: 1, - DstPort: 2, - Seq: 1004, - }, - }, - want: []readReturn{ - {data: []byte{1, 2}}, - {data: []byte{3}}, - {err: io.EOF}, - }, - }) -} - -func ExampleDiscardBytesToEOF() { - b := bytes.NewBuffer([]byte{1, 2, 3, 4, 5}) - fmt.Println(DiscardBytesToEOF(b)) - // Output: - // 5 -} diff --git a/vendor/github.com/google/gopacket/writer_test.go b/vendor/github.com/google/gopacket/writer_test.go deleted file mode 100644 index e19069b..0000000 --- a/vendor/github.com/google/gopacket/writer_test.go +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright 2012 Google, Inc. All rights reserved. -// -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file in the root of the source -// tree. - -package gopacket - -import ( - "fmt" - "testing" -) - -func TestExponentialSizeIncreasePrepend(t *testing.T) { - var b serializeBuffer - for i, test := range []struct { - prepend, size int - }{ - {2, 2}, - {2, 4}, - {2, 8}, - {2, 8}, - {2, 16}, - {2, 16}, - {2, 16}, - {2, 16}, - {2, 32}, - } { - b.PrependBytes(test.prepend) - if test.size != cap(b.data) { - t.Error(i, "size want", test.size, "got", cap(b.data)) - } - } - b.Clear() - if b.start != 32 { - t.Error(b.start) - } -} - -func TestExponentialSizeIncreaseAppend(t *testing.T) { - var b serializeBuffer - for i, test := range []struct { - appnd, size int - }{ - {2, 2}, - {2, 4}, - {2, 8}, - {2, 8}, - {2, 16}, - {2, 16}, - {2, 16}, - {2, 16}, - {2, 32}, - } { - b.AppendBytes(test.appnd) - if test.size != cap(b.data) { - t.Error(i, "size want", test.size, "got", cap(b.data)) - } - } - b.Clear() - if b.start != 0 { - t.Error(b.start) - } -} - -func ExampleSerializeBuffer() { - b := NewSerializeBuffer() - fmt.Println("1:", b.Bytes()) - bytes, _ := b.PrependBytes(3) - copy(bytes, []byte{1, 2, 3}) - fmt.Println("2:", b.Bytes()) - bytes, _ = b.AppendBytes(2) - copy(bytes, []byte{4, 5}) - fmt.Println("3:", b.Bytes()) - bytes, _ = b.PrependBytes(1) - copy(bytes, []byte{0}) - fmt.Println("4:", b.Bytes()) - bytes, _ = b.AppendBytes(3) - copy(bytes, []byte{6, 7, 8}) - fmt.Println("5:", b.Bytes()) - b.Clear() - fmt.Println("6:", b.Bytes()) - bytes, _ = b.PrependBytes(2) - copy(bytes, []byte{9, 9}) - fmt.Println("7:", b.Bytes()) - // Output: - // 1: [] - // 2: [1 2 3] - // 3: [1 2 3 4 5] - // 4: [0 1 2 3 4 5] - // 5: [0 1 2 3 4 5 6 7 8] - // 6: [] - // 7: [9 9] -} diff --git a/vendor/github.com/lunixbochs/struc/bench_test.go b/vendor/github.com/lunixbochs/struc/bench_test.go deleted file mode 100644 index d73c110..0000000 --- a/vendor/github.com/lunixbochs/struc/bench_test.go +++ /dev/null @@ -1,165 +0,0 @@ -package struc - -import ( - "bytes" - "encoding/binary" - "testing" -) - -type BenchExample struct { - Test [5]byte - A int32 - B, C, D int16 - Test2 [4]byte - Length int32 -} - -type BenchStrucExample struct { - Test [5]byte `struc:"[5]byte"` - A int `struc:"int32"` - B, C, D int `struc:"int16"` - Test2 [4]byte `struc:"[4]byte"` - Length int `struc:"int32,sizeof=Data"` - Data []byte -} - -var benchRef = &BenchExample{ - [5]byte{1, 2, 3, 4, 5}, - 1, 2, 3, 4, - [4]byte{1, 2, 3, 4}, - 8, -} - -var eightBytes = []byte("8bytestr") - -var benchStrucRef = &BenchStrucExample{ - [5]byte{1, 2, 3, 4, 5}, - 1, 2, 3, 4, - [4]byte{1, 2, 3, 4}, - 8, eightBytes, -} - -func BenchmarkEncode(b *testing.B) { - for i := 0; i < b.N; i++ { - var buf bytes.Buffer - err := Pack(&buf, benchStrucRef) - if err != nil { - b.Fatal(err) - } - } -} - -func BenchmarkStdlibEncode(b *testing.B) { - for i := 0; i < b.N; i++ { - var buf bytes.Buffer - err := binary.Write(&buf, binary.BigEndian, benchRef) - if err != nil { - b.Fatal(err) - } - _, err = buf.Write(eightBytes) - if err != nil { - b.Fatal(err) - } - } -} - -func BenchmarkManualEncode(b *testing.B) { - order := binary.BigEndian - s := benchStrucRef - for i := 0; i < b.N; i++ { - var buf bytes.Buffer - tmp := make([]byte, 29) - copy(tmp[0:5], s.Test[:]) - order.PutUint32(tmp[5:9], uint32(s.A)) - order.PutUint16(tmp[9:11], uint16(s.B)) - order.PutUint16(tmp[11:13], uint16(s.C)) - order.PutUint16(tmp[13:15], uint16(s.D)) - copy(tmp[15:19], s.Test2[:]) - order.PutUint32(tmp[19:23], uint32(s.Length)) - copy(tmp[23:], s.Data) - _, err := buf.Write(tmp) - if err != nil { - b.Fatal(err) - } - } -} - -func BenchmarkDecode(b *testing.B) { - var out BenchStrucExample - var buf bytes.Buffer - if err := Pack(&buf, benchStrucRef); err != nil { - b.Fatal(err) - } - bufBytes := buf.Bytes() - for i := 0; i < b.N; i++ { - buf := bytes.NewReader(bufBytes) - err := Unpack(buf, &out) - if err != nil { - b.Fatal(err) - } - out.Data = nil - } -} - -func BenchmarkStdlibDecode(b *testing.B) { - var out BenchExample - var buf bytes.Buffer - binary.Write(&buf, binary.BigEndian, *benchRef) - _, err := buf.Write(eightBytes) - if err != nil { - b.Fatal(err) - } - bufBytes := buf.Bytes() - for i := 0; i < b.N; i++ { - buf := bytes.NewReader(bufBytes) - err := binary.Read(buf, binary.BigEndian, &out) - if err != nil { - b.Fatal(err) - } - tmp := make([]byte, out.Length) - _, err = buf.Read(tmp) - if err != nil { - b.Fatal(err) - } - } -} - -func BenchmarkManualDecode(b *testing.B) { - var o BenchStrucExample - var buf bytes.Buffer - if err := Pack(&buf, benchStrucRef); err != nil { - b.Fatal(err) - } - tmp := buf.Bytes() - order := binary.BigEndian - for i := 0; i < b.N; i++ { - copy(o.Test[:], tmp[0:5]) - o.A = int(order.Uint32(tmp[5:9])) - o.B = int(order.Uint16(tmp[9:11])) - o.C = int(order.Uint16(tmp[11:13])) - o.D = int(order.Uint16(tmp[13:15])) - copy(o.Test2[:], tmp[15:19]) - o.Length = int(order.Uint32(tmp[19:23])) - o.Data = make([]byte, o.Length) - copy(o.Data, tmp[23:]) - } -} - -func BenchmarkFullEncode(b *testing.B) { - for i := 0; i < b.N; i++ { - var buf bytes.Buffer - if err := Pack(&buf, reference); err != nil { - b.Fatal(err) - } - } -} - -func BenchmarkFullDecode(b *testing.B) { - var out Example - for i := 0; i < b.N; i++ { - buf := bytes.NewBuffer(referenceBytes) - if err := Unpack(buf, &out); err != nil { - b.Fatal(err) - } - } -} diff --git a/vendor/github.com/lunixbochs/struc/custom_float16_test.go b/vendor/github.com/lunixbochs/struc/custom_float16_test.go deleted file mode 100644 index 11f73cb..0000000 --- a/vendor/github.com/lunixbochs/struc/custom_float16_test.go +++ /dev/null @@ -1,56 +0,0 @@ -package struc - -import ( - "bytes" - "encoding/binary" - "fmt" - "math" - "strconv" - "strings" - "testing" -) - -func TestFloat16(t *testing.T) { - // test cases from https://en.wikipedia.org/wiki/Half-precision_floating-point_format#Half_precision_examples - tests := []struct { - B string - F float64 - }{ - //s expnt significand - {"0 01111 0000000000", 1}, - {"0 01111 0000000001", 1.0009765625}, - {"1 10000 0000000000", -2}, - {"0 11110 1111111111", 65504}, - // {"0 00001 0000000000", 0.0000610352}, - // {"0 00000 1111111111", 0.0000609756}, - // {"0 00000 0000000001", 0.0000000596046}, - {"0 00000 0000000000", 0}, - // {"1 00000 0000000000", -0}, - {"0 11111 0000000000", math.Inf(1)}, - {"1 11111 0000000000", math.Inf(-1)}, - {"0 01101 0101010101", 0.333251953125}, - } - for _, test := range tests { - var buf bytes.Buffer - f := Float16(test.F) - if err := Pack(&buf, &f); err != nil { - t.Error("pack failed:", err) - continue - } - bitval, _ := strconv.ParseUint(strings.Replace(test.B, " ", "", -1), 2, 16) - tmp := binary.BigEndian.Uint16(buf.Bytes()) - if tmp != uint16(bitval) { - t.Errorf("incorrect pack: %s != %016b (%f)", test.B, tmp, test.F) - continue - } - var f2 Float16 - if err := Unpack(&buf, &f2); err != nil { - t.Error("unpack failed:", err) - continue - } - // let sprintf deal with (im)precision for me here - if fmt.Sprintf("%f", f) != fmt.Sprintf("%f", f2) { - t.Errorf("incorrect unpack: %016b %f != %f", bitval, f, f2) - } - } -} diff --git a/vendor/github.com/lunixbochs/struc/custom_test.go b/vendor/github.com/lunixbochs/struc/custom_test.go deleted file mode 100644 index e601166..0000000 --- a/vendor/github.com/lunixbochs/struc/custom_test.go +++ /dev/null @@ -1,97 +0,0 @@ -package struc - -import ( - "bytes" - "encoding/binary" - "io" - "strconv" - "testing" -) - -type Int3 uint32 - -func (i *Int3) Pack(p []byte, opt *Options) (int, error) { - var tmp [4]byte - binary.BigEndian.PutUint32(tmp[:], uint32(*i)) - copy(p, tmp[1:]) - return 3, nil -} -func (i *Int3) Unpack(r io.Reader, length int, opt *Options) error { - var tmp [4]byte - if _, err := r.Read(tmp[1:]); err != nil { - return err - } - *i = Int3(binary.BigEndian.Uint32(tmp[:])) - return nil -} -func (i *Int3) Size(opt *Options) int { - return 3 -} -func (i *Int3) String() string { - return strconv.FormatUint(uint64(*i), 10) -} - -func TestCustom(t *testing.T) { - var buf bytes.Buffer - var i Int3 = 3 - if err := Pack(&buf, &i); err != nil { - t.Fatal(err) - } - if !bytes.Equal(buf.Bytes(), []byte{0, 0, 3}) { - t.Fatal("error packing custom int") - } - var i2 Int3 - if err := Unpack(&buf, &i2); err != nil { - t.Fatal(err) - } - if i2 != 3 { - t.Fatal("error unpacking custom int") - } -} - -type Int3Struct struct { - I Int3 -} - -func TestCustomStruct(t *testing.T) { - var buf bytes.Buffer - i := Int3Struct{3} - if err := Pack(&buf, &i); err != nil { - t.Fatal(err) - } - if !bytes.Equal(buf.Bytes(), []byte{0, 0, 3}) { - t.Fatal("error packing custom int struct") - } - var i2 Int3Struct - if err := Unpack(&buf, &i2); err != nil { - t.Fatal(err) - } - if i2.I != 3 { - t.Fatal("error unpacking custom int struct") - } -} - -// TODO: slices of custom types don't work yet -/* -type Int3SliceStruct struct { - I [2]Int3 -} - -func TestCustomSliceStruct(t *testing.T) { - var buf bytes.Buffer - i := Int3SliceStruct{[2]Int3{3, 4}} - if err := Pack(&buf, &i); err != nil { - t.Fatal(err) - } - if !bytes.Equal(buf.Bytes(), []byte{0, 0, 3}) { - t.Fatal("error packing custom int struct") - } - var i2 Int3SliceStruct - if err := Unpack(&buf, &i2); err != nil { - t.Fatal(err) - } - if i2.I[0] != 3 && i2.I[1] != 4 { - t.Fatal("error unpacking custom int struct") - } -} -*/ diff --git a/vendor/github.com/lunixbochs/struc/field.go b/vendor/github.com/lunixbochs/struc/field.go index 5ab7da6..6e59c2a 100644 --- a/vendor/github.com/lunixbochs/struc/field.go +++ b/vendor/github.com/lunixbochs/struc/field.go @@ -222,13 +222,21 @@ func (f *Field) unpackVal(buf []byte, val reflect.Value, length int, options *Op case Bool, Int8, Int16, Int32, Int64, Uint8, Uint16, Uint32, Uint64: var n uint64 switch typ { - case Bool, Int8, Uint8: + case Int8: + n = uint64(int64(int8(buf[0]))) + case Int16: + n = uint64(int64(int16(order.Uint16(buf)))) + case Int32: + n = uint64(int64(int32(order.Uint32(buf)))) + case Int64: + n = uint64(int64(order.Uint64(buf))) + case Bool, Uint8: n = uint64(buf[0]) - case Int16, Uint16: + case Uint16: n = uint64(order.Uint16(buf)) - case Int32, Uint32: + case Uint32: n = uint64(order.Uint32(buf)) - case Int64, Uint64: + case Uint64: n = uint64(order.Uint64(buf)) } switch f.kind { diff --git a/vendor/github.com/lunixbochs/struc/field_test.go b/vendor/github.com/lunixbochs/struc/field_test.go deleted file mode 100644 index 45a07b2..0000000 --- a/vendor/github.com/lunixbochs/struc/field_test.go +++ /dev/null @@ -1,77 +0,0 @@ -package struc - -import ( - "bytes" - "testing" -) - -type badFloat struct { - BadFloat int `struc:"float64"` -} - -func TestBadFloatField(t *testing.T) { - buf := bytes.NewReader([]byte("00000000")) - err := Unpack(buf, &badFloat{}) - if err == nil { - t.Fatal("failed to error on bad float unpack") - } -} - -type emptyLengthField struct { - Strlen int `struc:"sizeof=Str"` - Str []byte -} - -func TestEmptyLengthField(t *testing.T) { - var buf bytes.Buffer - s := &emptyLengthField{0, []byte("test")} - o := &emptyLengthField{} - if err := Pack(&buf, s); err != nil { - t.Fatal(err) - } - if err := Unpack(&buf, o); err != nil { - t.Fatal(err) - } - if !bytes.Equal(s.Str, o.Str) { - t.Fatal("empty length field encode failed") - } -} - -type fixedSlicePad struct { - Field []byte `struc:"[4]byte"` -} - -func TestFixedSlicePad(t *testing.T) { - var buf bytes.Buffer - ref := []byte{0, 0, 0, 0} - s := &fixedSlicePad{} - if err := Pack(&buf, s); err != nil { - t.Fatal(err) - } - if !bytes.Equal(buf.Bytes(), ref) { - t.Fatal("implicit fixed slice pack failed") - } - if err := Unpack(&buf, s); err != nil { - t.Fatal(err) - } - if !bytes.Equal(s.Field, ref) { - t.Fatal("implicit fixed slice unpack failed") - } -} - -type sliceCap struct { - Len int `struc:"sizeof=Field"` - Field []byte -} - -func TestSliceCap(t *testing.T) { - var buf bytes.Buffer - tmp := &sliceCap{0, []byte("1234")} - if err := Pack(&buf, tmp); err != nil { - t.Fatal(err) - } - tmp.Field = make([]byte, 0, 4) - if err := Unpack(&buf, tmp); err != nil { - t.Fatal(err) - } -} diff --git a/vendor/github.com/lunixbochs/struc/fields_test.go b/vendor/github.com/lunixbochs/struc/fields_test.go deleted file mode 100644 index 850e377..0000000 --- a/vendor/github.com/lunixbochs/struc/fields_test.go +++ /dev/null @@ -1,59 +0,0 @@ -package struc - -import ( - "bytes" - "reflect" - "testing" -) - -var refVal = reflect.ValueOf(reference) - -func TestFieldsParse(t *testing.T) { - if _, err := parseFields(refVal); err != nil { - t.Fatal(err) - } -} - -func TestFieldsString(t *testing.T) { - fields, _ := parseFields(refVal) - fields.String() -} - -type sizefromStruct struct { - Size1 uint `struc:"sizeof=Var1"` - Var1 []byte - Size2 int `struc:"sizeof=Var2"` - Var2 []byte -} - -func TestFieldsSizefrom(t *testing.T) { - var test = sizefromStruct{ - Var1: []byte{1, 2, 3}, - Var2: []byte{4, 5, 6}, - } - var buf bytes.Buffer - err := Pack(&buf, &test) - if err != nil { - t.Fatal(err) - } - err = Unpack(&buf, &test) - if err != nil { - t.Fatal(err) - } -} - -type sizefromStructBad struct { - Size1 string `struc:"sizeof=Var1"` - Var1 []byte -} - -func TestFieldsSizefromBad(t *testing.T) { - var test = &sizefromStructBad{Var1: []byte{1, 2, 3}} - var buf bytes.Buffer - defer func() { - if err := recover(); err == nil { - t.Fatal("failed to panic on bad sizeof type") - } - }() - Pack(&buf, &test) -} diff --git a/vendor/github.com/lunixbochs/struc/packable_test.go b/vendor/github.com/lunixbochs/struc/packable_test.go deleted file mode 100644 index ec2bed9..0000000 --- a/vendor/github.com/lunixbochs/struc/packable_test.go +++ /dev/null @@ -1,123 +0,0 @@ -package struc - -import ( - "bytes" - "fmt" - "testing" -) - -var packableReference = []byte{ - 1, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, - 9, 10, 11, 12, 13, 14, 15, 16, - 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, -} - -func TestPackable(t *testing.T) { - var ( - buf bytes.Buffer - - i8 int8 = 1 - i16 int16 = 2 - i32 int32 = 3 - i64 int64 = 4 - u8 uint8 = 5 - u16 uint16 = 6 - u32 uint32 = 7 - u64 uint64 = 8 - - u8a = [8]uint8{9, 10, 11, 12, 13, 14, 15, 16} - u16a = [8]uint16{17, 18, 19, 20, 21, 22, 23, 24} - ) - // pack tests - if err := Pack(&buf, i8); err != nil { - t.Fatal(err) - } - if err := Pack(&buf, i16); err != nil { - t.Fatal(err) - } - if err := Pack(&buf, i32); err != nil { - t.Fatal(err) - } - if err := Pack(&buf, i64); err != nil { - t.Fatal(err) - } - if err := Pack(&buf, u8); err != nil { - t.Fatal(err) - } - if err := Pack(&buf, u16); err != nil { - t.Fatal(err) - } - if err := Pack(&buf, u32); err != nil { - t.Fatal(err) - } - if err := Pack(&buf, u64); err != nil { - t.Fatal(err) - } - if err := Pack(&buf, u8a[:]); err != nil { - t.Fatal(err) - } - if err := Pack(&buf, u16a[:]); err != nil { - t.Fatal(err) - } - if !bytes.Equal(buf.Bytes(), packableReference) { - fmt.Println(buf.Bytes()) - fmt.Println(packableReference) - t.Fatal("Packable Pack() did not match reference.") - } - // unpack tests - i8 = 0 - i16 = 0 - i32 = 0 - i64 = 0 - u8 = 0 - u16 = 0 - u32 = 0 - u64 = 0 - if err := Unpack(&buf, &i8); err != nil { - t.Fatal(err) - } - if err := Unpack(&buf, &i16); err != nil { - t.Fatal(err) - } - if err := Unpack(&buf, &i32); err != nil { - t.Fatal(err) - } - if err := Unpack(&buf, &i64); err != nil { - t.Fatal(err) - } - if err := Unpack(&buf, &u8); err != nil { - t.Fatal(err) - } - if err := Unpack(&buf, &u16); err != nil { - t.Fatal(err) - } - if err := Unpack(&buf, &u32); err != nil { - t.Fatal(err) - } - if err := Unpack(&buf, &u64); err != nil { - t.Fatal(err) - } - if err := Unpack(&buf, u8a[:]); err != nil { - t.Fatal(err) - } - if err := Unpack(&buf, u16a[:]); err != nil { - t.Fatal(err) - } - // unpack checks - if i8 != 1 || i16 != 2 || i32 != 3 || i64 != 4 { - t.Fatal("Signed integer unpack failed.") - } - if u8 != 5 || u16 != 6 || u32 != 7 || u64 != 8 { - t.Fatal("Unsigned integer unpack failed.") - } - for i := 0; i < 8; i++ { - if u8a[i] != uint8(i+9) { - t.Fatal("uint8 array unpack failed.") - } - } - for i := 0; i < 8; i++ { - if u16a[i] != uint16(i+17) { - t.Fatal("uint16 array unpack failed.") - } - } -} diff --git a/vendor/github.com/lunixbochs/struc/parse.go b/vendor/github.com/lunixbochs/struc/parse.go index 060f43d..43c5875 100644 --- a/vendor/github.com/lunixbochs/struc/parse.go +++ b/vendor/github.com/lunixbochs/struc/parse.go @@ -11,13 +11,14 @@ import ( "sync" ) -// struc:"int32,big,sizeof=Data" +// struc:"int32,big,sizeof=Data,skip,sizefrom=Len" type strucTag struct { - Type string - Order binary.ByteOrder - Sizeof string - Skip bool + Type string + Order binary.ByteOrder + Sizeof string + Skip bool + Sizefrom string } func parseStrucTag(tag reflect.StructTag) *strucTag { @@ -35,6 +36,9 @@ func parseStrucTag(tag reflect.StructTag) *strucTag { if strings.HasPrefix(s, "sizeof=") { tmp := strings.SplitN(s, "=", 2) t.Sizeof = tmp[1] + } else if strings.HasPrefix(s, "sizefrom=") { + tmp := strings.SplitN(s, "=", 2) + t.Sizefrom = tmp[1] } else if s == "big" { t.Order = binary.BigEndian } else if s == "little" { @@ -150,6 +154,13 @@ func parseFieldsLocked(v reflect.Value) (Fields, error) { if sizefrom, ok := sizeofMap[field.Name]; ok { f.Sizefrom = sizefrom } + if tag.Sizefrom != "" { + source, ok := t.FieldByName(tag.Sizefrom) + if !ok { + return nil, fmt.Errorf("struc: `sizefrom=%s` field does not exist", tag.Sizefrom) + } + f.Sizefrom = source.Index + } if f.Len == -1 && f.Sizefrom == nil { return nil, fmt.Errorf("struc: field `%s` is a slice with no length or sizeof field", field.Name) } diff --git a/vendor/github.com/lunixbochs/struc/parse_test.go b/vendor/github.com/lunixbochs/struc/parse_test.go deleted file mode 100644 index 861fdd1..0000000 --- a/vendor/github.com/lunixbochs/struc/parse_test.go +++ /dev/null @@ -1,62 +0,0 @@ -package struc - -import ( - "bytes" - "reflect" - "testing" -) - -func parseTest(data interface{}) error { - _, err := parseFields(reflect.ValueOf(data)) - return err -} - -type empty struct{} - -func TestEmptyStruc(t *testing.T) { - if err := parseTest(&empty{}); err == nil { - t.Fatal("failed to error on empty struct") - } -} - -type chanStruct struct { - Test chan int -} - -func TestChanError(t *testing.T) { - if err := parseTest(&chanStruct{}); err == nil { - // TODO: should probably ignore channel fields - t.Fatal("failed to error on struct containing channel") - } -} - -type badSizeof struct { - Size int `struc:"sizeof=Bad"` -} - -func TestBadSizeof(t *testing.T) { - if err := parseTest(&badSizeof{}); err == nil { - t.Fatal("failed to error on missing Sizeof target") - } -} - -type missingSize struct { - Test []byte -} - -func TestMissingSize(t *testing.T) { - if err := parseTest(&missingSize{}); err == nil { - t.Fatal("failed to error on missing field size") - } -} - -type badNested struct { - Empty empty -} - -func TestNestedParseError(t *testing.T) { - var buf bytes.Buffer - if err := Pack(&buf, &badNested{}); err == nil { - t.Fatal("failed to error on bad nested struct") - } -} diff --git a/vendor/github.com/lunixbochs/struc/struc_test.go b/vendor/github.com/lunixbochs/struc/struc_test.go deleted file mode 100644 index 4b50707..0000000 --- a/vendor/github.com/lunixbochs/struc/struc_test.go +++ /dev/null @@ -1,200 +0,0 @@ -package struc - -import ( - "bytes" - "encoding/binary" - "reflect" - "testing" -) - -type Nested struct { - Test2 int `struc:"int8"` -} - -type Example struct { - Pad []byte `struc:"[5]pad"` // 00 00 00 00 00 - I8f int `struc:"int8"` // 01 - I16f int `struc:"int16"` // 00 02 - I32f int `struc:"int32"` // 00 00 00 03 - I64f int `struc:"int64"` // 00 00 00 00 00 00 00 04 - U8f int `struc:"uint8,little"` // 05 - U16f int `struc:"uint16,little"` // 06 00 - U32f int `struc:"uint32,little"` // 07 00 00 00 - U64f int `struc:"uint64,little"` // 08 00 00 00 00 00 00 00 - Boolf int `struc:"bool"` // 01 - Byte4f []byte `struc:"[4]byte"` // "abcd" - - I8 int8 // 09 - I16 int16 // 00 0a - I32 int32 // 00 00 00 0b - I64 int64 // 00 00 00 00 00 00 00 0c - U8 uint8 `struc:"little"` // 0d - U16 uint16 `struc:"little"` // 0e 00 - U32 uint32 `struc:"little"` // 0f 00 00 00 - U64 uint64 `struc:"little"` // 10 00 00 00 00 00 00 00 - BoolT bool // 01 - BoolF bool // 00 - Byte4 [4]byte // "efgh" - Float1 float32 // 41 a0 00 00 - Float2 float64 // 41 35 00 00 00 00 00 00 - - Size int `struc:"sizeof=Str,little"` // 0a 00 00 00 - Str string `struc:"[]byte"` // "ijklmnopqr" - Strb string `struc:"[4]byte"` // "stuv" - - Size2 int `struc:"uint8,sizeof=Str2"` // 04 - Str2 string // "1234" - - Size3 int `struc:"uint8,sizeof=Bstr"` // 04 - Bstr []byte // "5678" - - Nested Nested // 00 00 00 01 - NestedP *Nested // 00 00 00 02 - TestP64 *int `struc:"int64"` // 00 00 00 05 - - NestedSize int `struc:"sizeof=NestedA"` // 00 00 00 02 - NestedA []Nested // [00 00 00 03, 00 00 00 04] - - Skip int `struc:"skip"` - - CustomTypeSize Int3 `struc:"sizeof=CustomTypeSizeArr"` // 00 00 00 04 - CustomTypeSizeArr []byte // "ABCD" -} - -var five = 5 - -var reference = &Example{ - nil, - 1, 2, 3, 4, 5, 6, 7, 8, 0, []byte{'a', 'b', 'c', 'd'}, - 9, 10, 11, 12, 13, 14, 15, 16, true, false, [4]byte{'e', 'f', 'g', 'h'}, - 20, 21, - 10, "ijklmnopqr", "stuv", - 4, "1234", - 4, []byte("5678"), - Nested{1}, &Nested{2}, &five, - 6, []Nested{{3}, {4}, {5}, {6}, {7}, {8}}, - 0, - Int3(4), []byte("ABCD"), -} - -var referenceBytes = []byte{ - 0, 0, 0, 0, 0, // pad(5) - 1, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, // fake int8-int64(1-4) - 5, 6, 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, // fake little-endian uint8-uint64(5-8) - 0, // fake bool(0) - 'a', 'b', 'c', 'd', // fake [4]byte - - 9, 0, 10, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 12, // real int8-int64(9-12) - 13, 14, 0, 15, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, // real little-endian uint8-uint64(13-16) - 1, 0, // real bool(1), bool(0) - 'e', 'f', 'g', 'h', // real [4]byte - 65, 160, 0, 0, // real float32(20) - 64, 53, 0, 0, 0, 0, 0, 0, // real float64(21) - - 10, 0, 0, 0, // little-endian int32(10) sizeof=Str - 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', // Str - 's', 't', 'u', 'v', // fake string([4]byte) - 04, '1', '2', '3', '4', // real string - 04, '5', '6', '7', '8', // fake []byte(string) - - 1, 2, // Nested{1}, Nested{2} - 0, 0, 0, 0, 0, 0, 0, 5, // &five - - 0, 0, 0, 6, // int32(6) - 3, 4, 5, 6, 7, 8, // [Nested{3}, ...Nested{8}] - - 0, 0, 4, 'A', 'B', 'C', 'D', // Int3(4), []byte("ABCD") -} - -func TestCodec(t *testing.T) { - var buf bytes.Buffer - if err := Pack(&buf, reference); err != nil { - t.Fatal(err) - } - out := &Example{} - if err := Unpack(&buf, out); err != nil { - t.Fatal(err) - } - if !reflect.DeepEqual(reference, out) { - t.Fatal("encode/decode failed") - } -} - -func TestEncode(t *testing.T) { - var buf bytes.Buffer - if err := Pack(&buf, reference); err != nil { - t.Fatal(err) - } - if !bytes.Equal(buf.Bytes(), referenceBytes) { - t.Fatal("encode failed") - } -} - -func TestDecode(t *testing.T) { - buf := bytes.NewReader(referenceBytes) - out := &Example{} - if err := Unpack(buf, out); err != nil { - t.Fatal(err) - } - if !reflect.DeepEqual(reference, out) { - t.Fatal("decode failed") - } -} - -func TestSizeof(t *testing.T) { - size, err := Sizeof(reference) - if err != nil { - t.Fatal(err) - } - if size != len(referenceBytes) { - t.Fatal("sizeof failed") - } -} - -type ExampleEndian struct { - T int `struc:"int16,big"` -} - -func TestEndianSwap(t *testing.T) { - var buf bytes.Buffer - big := &ExampleEndian{1} - if err := PackWithOrder(&buf, big, binary.BigEndian); err != nil { - t.Fatal(err) - } - little := &ExampleEndian{} - if err := UnpackWithOrder(&buf, little, binary.LittleEndian); err != nil { - t.Fatal(err) - } - if little.T != 256 { - t.Fatal("big -> little conversion failed") - } -} - -func TestNilValue(t *testing.T) { - var buf bytes.Buffer - if err := Pack(&buf, nil); err == nil { - t.Fatal("failed throw error for bad struct value") - } - if err := Unpack(&buf, nil); err == nil { - t.Fatal("failed throw error for bad struct value") - } - if _, err := Sizeof(nil); err == nil { - t.Fatal("failed to throw error for bad struct value") - } -} - -type sliceUnderrun struct { - Str string `struc:"[10]byte"` - Arr []uint16 `struc:"[10]uint16"` -} - -func TestSliceUnderrun(t *testing.T) { - var buf bytes.Buffer - v := sliceUnderrun{ - Str: "foo", - Arr: []uint16{1, 2, 3}, - } - if err := Pack(&buf, &v); err != nil { - t.Fatal(err) - } -} diff --git a/vendor/github.com/lunixbochs/struc/types_test.go b/vendor/github.com/lunixbochs/struc/types_test.go deleted file mode 100644 index 3b33e8f..0000000 --- a/vendor/github.com/lunixbochs/struc/types_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package struc - -import ( - "bytes" - "testing" -) - -func TestBadType(t *testing.T) { - defer func() { recover() }() - Type(-1).Size() - t.Fatal("failed to panic for invalid Type.Size()") -} - -func TestTypeString(t *testing.T) { - if Pad.String() != "pad" { - t.Fatal("type string representation failed") - } -} - -type sizeOffTest struct { - Size Size_t - Off Off_t -} - -func TestSizeOffTypes(t *testing.T) { - bits := []int{8, 16, 32, 64} - var buf bytes.Buffer - test := &sizeOffTest{1, 2} - for _, b := range bits { - if err := PackWithOptions(&buf, test, &Options{PtrSize: b}); err != nil { - t.Fatal(err) - } - } - reference := []byte{ - 1, 2, - 0, 1, 0, 2, - 0, 0, 0, 1, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, - } - if !bytes.Equal(reference, buf.Bytes()) { - t.Errorf("reference != bytes: %v", reference, buf.Bytes()) - } - reader := bytes.NewReader(buf.Bytes()) - for _, b := range bits { - out := &sizeOffTest{} - if err := UnpackWithOptions(reader, out, &Options{PtrSize: b}); err != nil { - t.Fatal(err) - } - if out.Size != 1 || out.Off != 2 { - t.Errorf("Size_t/Off_t mismatch: {%d, %d}\n%v", out.Size, out.Off, buf.Bytes()) - } - } -} diff --git a/vendor/github.com/onsi/gomega/format/format_suite_test.go b/vendor/github.com/onsi/gomega/format/format_suite_test.go deleted file mode 100644 index 8e65a95..0000000 --- a/vendor/github.com/onsi/gomega/format/format_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package format_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestFormat(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Format Suite") -} diff --git a/vendor/github.com/onsi/gomega/format/format_test.go b/vendor/github.com/onsi/gomega/format/format_test.go deleted file mode 100644 index a1a9031..0000000 --- a/vendor/github.com/onsi/gomega/format/format_test.go +++ /dev/null @@ -1,590 +0,0 @@ -package format_test - -import ( - "fmt" - "strings" - "time" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/format" - "github.com/onsi/gomega/types" -) - -//recursive struct - -type StringAlias string -type ByteAlias []byte -type IntAlias int - -type AStruct struct { - Exported string -} - -type SimpleStruct struct { - Name string - Enumeration int - Veritas bool - Data []byte - secret uint32 -} - -type ComplexStruct struct { - Strings []string - SimpleThings []*SimpleStruct - DataMaps map[int]ByteAlias -} - -type SecretiveStruct struct { - boolValue bool - intValue int - uintValue uint - uintptrValue uintptr - floatValue float32 - complexValue complex64 - chanValue chan bool - funcValue func() - pointerValue *int - sliceValue []string - byteSliceValue []byte - stringValue string - arrValue [3]int - byteArrValue [3]byte - mapValue map[string]int - structValue AStruct - interfaceValue interface{} -} - -type GoStringer struct { -} - -func (g GoStringer) GoString() string { - return "go-string" -} - -func (g GoStringer) String() string { - return "string" -} - -type Stringer struct { -} - -func (g Stringer) String() string { - return "string" -} - -type ctx struct { -} - -func (c *ctx) Deadline() (deadline time.Time, ok bool) { - return time.Time{}, false -} - -func (c *ctx) Done() <-chan struct{} { - return nil -} - -func (c *ctx) Err() error { - return nil -} - -func (c *ctx) Value(key interface{}) interface{} { - return nil -} - -var _ = Describe("Format", func() { - match := func(typeRepresentation string, valueRepresentation string, args ...interface{}) types.GomegaMatcher { - if len(args) > 0 { - valueRepresentation = fmt.Sprintf(valueRepresentation, args...) - } - return Equal(fmt.Sprintf("%s<%s>: %s", Indent, typeRepresentation, valueRepresentation)) - } - - matchRegexp := func(typeRepresentation string, valueRepresentation string, args ...interface{}) types.GomegaMatcher { - if len(args) > 0 { - valueRepresentation = fmt.Sprintf(valueRepresentation, args...) - } - return MatchRegexp(fmt.Sprintf("%s<%s>: %s", Indent, typeRepresentation, valueRepresentation)) - } - - hashMatchingRegexp := func(entries ...string) string { - entriesSwitch := "(" + strings.Join(entries, "|") + ")" - arr := make([]string, len(entries)) - for i := range arr { - arr[i] = entriesSwitch - } - return "{" + strings.Join(arr, ", ") + "}" - } - - Describe("Message", func() { - Context("with only an actual value", func() { - It("should print out an indented formatted representation of the value and the message", func() { - Ω(Message(3, "to be three.")).Should(Equal("Expected\n : 3\nto be three.")) - }) - }) - - Context("with an actual and an expected value", func() { - It("should print out an indented formatted representatino of both values, and the message", func() { - Ω(Message(3, "to equal", 4)).Should(Equal("Expected\n : 3\nto equal\n : 4")) - }) - }) - }) - - Describe("MessageWithDiff", func() { - It("shows the exact point where two long strings differ", func() { - stringWithB := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - stringWithZ := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - - Ω(MessageWithDiff(stringWithB, "to equal", stringWithZ)).Should(Equal(expectedLongStringFailureMessage)) - }) - - It("truncates the start of long strings that differ only at their end", func() { - stringWithB := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab" - stringWithZ := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz" - - Ω(MessageWithDiff(stringWithB, "to equal", stringWithZ)).Should(Equal(expectedTruncatedStartStringFailureMessage)) - }) - - It("truncates the start of long strings that differ only in length", func() { - smallString := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - largeString := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - - Ω(MessageWithDiff(largeString, "to equal", smallString)).Should(Equal(expectedTruncatedStartSizeFailureMessage)) - Ω(MessageWithDiff(smallString, "to equal", largeString)).Should(Equal(expectedTruncatedStartSizeSwappedFailureMessage)) - }) - - It("truncates the end of long strings that differ only at their start", func() { - stringWithB := "baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - stringWithZ := "zaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - - Ω(MessageWithDiff(stringWithB, "to equal", stringWithZ)).Should(Equal(expectedTruncatedEndStringFailureMessage)) - }) - }) - - Describe("IndentString", func() { - It("should indent the string", func() { - Ω(IndentString("foo\n bar\nbaz", 2)).Should(Equal(" foo\n bar\n baz")) - }) - }) - - Describe("Object", func() { - Describe("formatting boolean values", func() { - It("should give the type and format values correctly", func() { - Ω(Object(true, 1)).Should(match("bool", "true")) - Ω(Object(false, 1)).Should(match("bool", "false")) - }) - }) - - Describe("formatting numbers", func() { - It("should give the type and format values correctly", func() { - Ω(Object(int(3), 1)).Should(match("int", "3")) - Ω(Object(int8(3), 1)).Should(match("int8", "3")) - Ω(Object(int16(3), 1)).Should(match("int16", "3")) - Ω(Object(int32(3), 1)).Should(match("int32", "3")) - Ω(Object(int64(3), 1)).Should(match("int64", "3")) - - Ω(Object(uint(3), 1)).Should(match("uint", "3")) - Ω(Object(uint8(3), 1)).Should(match("uint8", "3")) - Ω(Object(uint16(3), 1)).Should(match("uint16", "3")) - Ω(Object(uint32(3), 1)).Should(match("uint32", "3")) - Ω(Object(uint64(3), 1)).Should(match("uint64", "3")) - }) - - It("should handle uintptr differently", func() { - Ω(Object(uintptr(3), 1)).Should(match("uintptr", "0x3")) - }) - }) - - Describe("formatting channels", func() { - It("should give the type and format values correctly", func() { - c := make(chan<- bool, 3) - c <- true - c <- false - Ω(Object(c, 1)).Should(match("chan<- bool | len:2, cap:3", "%v", c)) - }) - }) - - Describe("formatting strings", func() { - It("should give the type and format values correctly", func() { - s := "a\nb\nc" - Ω(Object(s, 1)).Should(match("string", `a - b - c`)) - }) - }) - - Describe("formatting []byte slices", func() { - Context("when the slice is made of printable bytes", func() { - It("should present it as string", func() { - b := []byte("a b c") - Ω(Object(b, 1)).Should(matchRegexp(`\[\]uint8 \| len:5, cap:\d+`, `a b c`)) - }) - }) - Context("when the slice contains non-printable bytes", func() { - It("should present it as slice", func() { - b := []byte("a b c\n\x01\x02\x03\xff\x1bH") - Ω(Object(b, 1)).Should(matchRegexp(`\[\]uint8 \| len:12, cap:\d+`, `\[97, 32, 98, 32, 99, 10, 1, 2, 3, 255, 27, 72\]`)) - }) - }) - }) - - Describe("formatting functions", func() { - It("should give the type and format values correctly", func() { - f := func(a string, b []int) ([]byte, error) { - return []byte("abc"), nil - } - Ω(Object(f, 1)).Should(match("func(string, []int) ([]uint8, error)", "%v", f)) - }) - }) - - Describe("formatting pointers", func() { - It("should give the type and dereference the value to format it correctly", func() { - a := 3 - Ω(Object(&a, 1)).Should(match(fmt.Sprintf("*int | %p", &a), "3")) - }) - - Context("when there are pointers to pointers...", func() { - It("should recursively deference the pointer until it gets to a value", func() { - a := 3 - var b *int - var c **int - var d ***int - b = &a - c = &b - d = &c - - Ω(Object(d, 1)).Should(match(fmt.Sprintf("***int | %p", d), "3")) - }) - }) - - Context("when the pointer points to nil", func() { - It("should say nil and not explode", func() { - var a *AStruct - Ω(Object(a, 1)).Should(match("*format_test.AStruct | 0x0", "nil")) - }) - }) - }) - - Describe("formatting arrays", func() { - It("should give the type and format values correctly", func() { - w := [3]string{"Jed Bartlet", "Toby Ziegler", "CJ Cregg"} - Ω(Object(w, 1)).Should(match("[3]string", `["Jed Bartlet", "Toby Ziegler", "CJ Cregg"]`)) - }) - - Context("with byte arrays", func() { - It("should give the type and format values correctly", func() { - w := [3]byte{17, 28, 19} - Ω(Object(w, 1)).Should(match("[3]uint8", `[17, 28, 19]`)) - }) - }) - }) - - Describe("formatting slices", func() { - It("should include the length and capacity in the type information", func() { - s := make([]bool, 3, 4) - Ω(Object(s, 1)).Should(match("[]bool | len:3, cap:4", "[false, false, false]")) - }) - - Context("when the slice contains long entries", func() { - It("should format the entries with newlines", func() { - w := []string{"Josiah Edward Bartlet", "Toby Ziegler", "CJ Cregg"} - expected := `[ - "Josiah Edward Bartlet", - "Toby Ziegler", - "CJ Cregg", - ]` - Ω(Object(w, 1)).Should(match("[]string | len:3, cap:3", expected)) - }) - }) - }) - - Describe("formatting maps", func() { - It("should include the length in the type information", func() { - m := make(map[int]bool, 5) - m[3] = true - m[4] = false - Ω(Object(m, 1)).Should(matchRegexp(`map\[int\]bool \| len:2`, hashMatchingRegexp("3: true", "4: false"))) - }) - - Context("when the slice contains long entries", func() { - It("should format the entries with newlines", func() { - m := map[string][]byte{} - m["Josiah Edward Bartlet"] = []byte("Martin Sheen") - m["Toby Ziegler"] = []byte("Richard Schiff") - m["CJ Cregg"] = []byte("Allison Janney") - expected := `{ - ("Josiah Edward Bartlet": "Martin Sheen"|"Toby Ziegler": "Richard Schiff"|"CJ Cregg": "Allison Janney"), - ("Josiah Edward Bartlet": "Martin Sheen"|"Toby Ziegler": "Richard Schiff"|"CJ Cregg": "Allison Janney"), - ("Josiah Edward Bartlet": "Martin Sheen"|"Toby Ziegler": "Richard Schiff"|"CJ Cregg": "Allison Janney"), - }` - Ω(Object(m, 1)).Should(matchRegexp(`map\[string\]\[\]uint8 \| len:3`, expected)) - }) - }) - }) - - Describe("formatting structs", func() { - It("should include the struct name and the field names", func() { - s := SimpleStruct{ - Name: "Oswald", - Enumeration: 17, - Veritas: true, - Data: []byte("datum"), - secret: 1983, - } - - Ω(Object(s, 1)).Should(match("format_test.SimpleStruct", `{Name: "Oswald", Enumeration: 17, Veritas: true, Data: "datum", secret: 1983}`)) - }) - - Context("when the struct contains long entries", func() { - It("should format the entries with new lines", func() { - s := &SimpleStruct{ - Name: "Mithrandir Gandalf Greyhame", - Enumeration: 2021, - Veritas: true, - Data: []byte("wizard"), - secret: 3, - } - - Ω(Object(s, 1)).Should(match(fmt.Sprintf("*format_test.SimpleStruct | %p", s), `{ - Name: "Mithrandir Gandalf Greyhame", - Enumeration: 2021, - Veritas: true, - Data: "wizard", - secret: 3, - }`)) - }) - }) - }) - - Describe("formatting nil values", func() { - It("should print out nil", func() { - Ω(Object(nil, 1)).Should(match("nil", "nil")) - var typedNil *AStruct - Ω(Object(typedNil, 1)).Should(match("*format_test.AStruct | 0x0", "nil")) - var c chan<- bool - Ω(Object(c, 1)).Should(match("chan<- bool | len:0, cap:0", "nil")) - var s []string - Ω(Object(s, 1)).Should(match("[]string | len:0, cap:0", "nil")) - var m map[string]bool - Ω(Object(m, 1)).Should(match("map[string]bool | len:0", "nil")) - }) - }) - - Describe("formatting aliased types", func() { - It("should print out the correct alias type", func() { - Ω(Object(StringAlias("alias"), 1)).Should(match("format_test.StringAlias", `alias`)) - Ω(Object(ByteAlias("alias"), 1)).Should(matchRegexp(`format_test\.ByteAlias \| len:5, cap:\d+`, `alias`)) - Ω(Object(IntAlias(3), 1)).Should(match("format_test.IntAlias", "3")) - }) - }) - - Describe("handling nested things", func() { - It("should produce a correctly nested representation", func() { - s := ComplexStruct{ - Strings: []string{"lots", "of", "short", "strings"}, - SimpleThings: []*SimpleStruct{ - {"short", 7, true, []byte("succinct"), 17}, - {"something longer", 427, true, []byte("designed to wrap around nicely"), 30}, - }, - DataMaps: map[int]ByteAlias{ - 17: ByteAlias("some substantially longer chunks of data"), - 1138: ByteAlias("that should make things wrap"), - }, - } - expected := `{ - Strings: \["lots", "of", "short", "strings"\], - SimpleThings: \[ - {Name: "short", Enumeration: 7, Veritas: true, Data: "succinct", secret: 17}, - { - Name: "something longer", - Enumeration: 427, - Veritas: true, - Data: "designed to wrap around nicely", - secret: 30, - }, - \], - DataMaps: { - (17: "some substantially longer chunks of data"|1138: "that should make things wrap"), - (17: "some substantially longer chunks of data"|1138: "that should make things wrap"), - }, - }` - Ω(Object(s, 1)).Should(matchRegexp(`format_test\.ComplexStruct`, expected)) - }) - }) - - Describe("formatting times", func() { - It("should format time as RFC3339", func() { - t := time.Date(2016, 10, 31, 9, 57, 23, 12345, time.UTC) - Ω(Object(t, 1)).Should(match("time.Time", `2016-10-31T09:57:23.000012345Z`)) - }) - }) - }) - - Describe("Handling unexported fields in structs", func() { - It("should handle all the various types correctly", func() { - a := int(5) - s := SecretiveStruct{ - boolValue: true, - intValue: 3, - uintValue: 4, - uintptrValue: 5, - floatValue: 6.0, - complexValue: complex(5.0, 3.0), - chanValue: make(chan bool, 2), - funcValue: func() {}, - pointerValue: &a, - sliceValue: []string{"string", "slice"}, - byteSliceValue: []byte("bytes"), - stringValue: "a string", - arrValue: [3]int{11, 12, 13}, - byteArrValue: [3]byte{17, 20, 32}, - mapValue: map[string]int{"a key": 20, "b key": 30}, - structValue: AStruct{"exported"}, - interfaceValue: map[string]int{"a key": 17}, - } - - expected := fmt.Sprintf(`{ - boolValue: true, - intValue: 3, - uintValue: 4, - uintptrValue: 0x5, - floatValue: 6, - complexValue: \(5\+3i\), - chanValue: %p, - funcValue: %p, - pointerValue: 5, - sliceValue: \["string", "slice"\], - byteSliceValue: "bytes", - stringValue: "a string", - arrValue: \[11, 12, 13\], - byteArrValue: \[17, 20, 32\], - mapValue: %s, - structValue: {Exported: "exported"}, - interfaceValue: {"a key": 17}, - }`, s.chanValue, s.funcValue, hashMatchingRegexp(`"a key": 20`, `"b key": 30`)) - - Ω(Object(s, 1)).Should(matchRegexp(`format_test\.SecretiveStruct`, expected)) - }) - }) - - Describe("Handling interfaces", func() { - It("should unpack the interface", func() { - outerHash := map[string]interface{}{} - innerHash := map[string]int{} - - innerHash["inner"] = 3 - outerHash["integer"] = 2 - outerHash["map"] = innerHash - - expected := hashMatchingRegexp(`"integer": 2`, `"map": {"inner": 3}`) - Ω(Object(outerHash, 1)).Should(matchRegexp(`map\[string\]interface {} \| len:2`, expected)) - }) - }) - - Describe("Handling recursive things", func() { - It("should not go crazy...", func() { - m := map[string]interface{}{} - m["integer"] = 2 - m["map"] = m - Ω(Object(m, 1)).Should(ContainSubstring("...")) - }) - - It("really should not go crazy...", func() { - type complexKey struct { - Value map[interface{}]int - } - - complexObject := complexKey{} - complexObject.Value = make(map[interface{}]int) - - complexObject.Value[&complexObject] = 2 - Ω(Object(complexObject, 1)).Should(ContainSubstring("...")) - }) - }) - - Describe("When instructed to use the Stringer representation", func() { - BeforeEach(func() { - UseStringerRepresentation = true - }) - - AfterEach(func() { - UseStringerRepresentation = false - }) - - Context("when passed a GoStringer", func() { - It("should use what GoString() returns", func() { - Ω(Object(GoStringer{}, 1)).Should(ContainSubstring(": go-string")) - }) - }) - - Context("when passed a stringer", func() { - It("should use what String() returns", func() { - Ω(Object(Stringer{}, 1)).Should(ContainSubstring(": string")) - }) - }) - }) - - Describe("Printing a context.Context field", func() { - - type structWithContext struct { - Context Ctx - Value string - } - - context := ctx{} - objWithContext := structWithContext{Value: "some-value", Context: &context} - - It("Suppresses the content by default", func() { - Ω(Object(objWithContext, 1)).Should(ContainSubstring("")) - }) - - It("Doesn't supress the context if it's the object being printed", func() { - Ω(Object(context, 1)).ShouldNot(MatchRegexp("^.*$")) - }) - - Context("PrintContextObjects is set", func() { - BeforeEach(func() { - PrintContextObjects = true - }) - - AfterEach(func() { - PrintContextObjects = false - }) - - It("Prints the context", func() { - Ω(Object(objWithContext, 1)).ShouldNot(ContainSubstring("")) - }) - }) - }) -}) - -var expectedLongStringFailureMessage = strings.TrimSpace(` -Expected - : "...aaaaabaaaaa..." -to equal | - : "...aaaaazaaaaa..." -`) -var expectedTruncatedEndStringFailureMessage = strings.TrimSpace(` -Expected - : "baaaaa..." -to equal | - : "zaaaaa..." -`) -var expectedTruncatedStartStringFailureMessage = strings.TrimSpace(` -Expected - : "...aaaaab" -to equal | - : "...aaaaaz" -`) -var expectedTruncatedStartSizeFailureMessage = strings.TrimSpace(` -Expected - : "...aaaaaa" -to equal | - : "...aaaaa" -`) -var expectedTruncatedStartSizeSwappedFailureMessage = strings.TrimSpace(` -Expected - : "...aaaa" -to equal | - : "...aaaaa" -`) diff --git a/vendor/github.com/onsi/gomega/gbytes/buffer.go b/vendor/github.com/onsi/gomega/gbytes/buffer.go deleted file mode 100644 index 8775b86..0000000 --- a/vendor/github.com/onsi/gomega/gbytes/buffer.go +++ /dev/null @@ -1,229 +0,0 @@ -/* -Package gbytes provides a buffer that supports incrementally detecting input. - -You use gbytes.Buffer with the gbytes.Say matcher. When Say finds a match, it fastforwards the buffer's read cursor to the end of that match. - -Subsequent matches against the buffer will only operate against data that appears *after* the read cursor. - -The read cursor is an opaque implementation detail that you cannot access. You should use the Say matcher to sift through the buffer. You can always -access the entire buffer's contents with Contents(). - -*/ -package gbytes - -import ( - "errors" - "fmt" - "io" - "regexp" - "sync" - "time" -) - -/* -gbytes.Buffer implements an io.Writer and can be used with the gbytes.Say matcher. - -You should only use a gbytes.Buffer in test code. It stores all writes in an in-memory buffer - behavior that is inappropriate for production code! -*/ -type Buffer struct { - contents []byte - readCursor uint64 - lock *sync.Mutex - detectCloser chan interface{} - closed bool -} - -/* -NewBuffer returns a new gbytes.Buffer -*/ -func NewBuffer() *Buffer { - return &Buffer{ - lock: &sync.Mutex{}, - } -} - -/* -BufferWithBytes returns a new gbytes.Buffer seeded with the passed in bytes -*/ -func BufferWithBytes(bytes []byte) *Buffer { - return &Buffer{ - lock: &sync.Mutex{}, - contents: bytes, - } -} - -/* -Write implements the io.Writer interface -*/ -func (b *Buffer) Write(p []byte) (n int, err error) { - b.lock.Lock() - defer b.lock.Unlock() - - if b.closed { - return 0, errors.New("attempt to write to closed buffer") - } - - b.contents = append(b.contents, p...) - return len(p), nil -} - -/* -Read implements the io.Reader interface. It advances the -cursor as it reads. - -Returns an error if called after Close. -*/ -func (b *Buffer) Read(d []byte) (int, error) { - b.lock.Lock() - defer b.lock.Unlock() - - if b.closed { - return 0, errors.New("attempt to read from closed buffer") - } - - if uint64(len(b.contents)) <= b.readCursor { - return 0, io.EOF - } - - n := copy(d, b.contents[b.readCursor:]) - b.readCursor += uint64(n) - - return n, nil -} - -/* -Close signifies that the buffer will no longer be written to -*/ -func (b *Buffer) Close() error { - b.lock.Lock() - defer b.lock.Unlock() - - b.closed = true - - return nil -} - -/* -Closed returns true if the buffer has been closed -*/ -func (b *Buffer) Closed() bool { - b.lock.Lock() - defer b.lock.Unlock() - - return b.closed -} - -/* -Contents returns all data ever written to the buffer. -*/ -func (b *Buffer) Contents() []byte { - b.lock.Lock() - defer b.lock.Unlock() - - contents := make([]byte, len(b.contents)) - copy(contents, b.contents) - return contents -} - -/* -Detect takes a regular expression and returns a channel. - -The channel will receive true the first time data matching the regular expression is written to the buffer. -The channel is subsequently closed and the buffer's read-cursor is fast-forwarded to just after the matching region. - -You typically don't need to use Detect and should use the ghttp.Say matcher instead. Detect is useful, however, in cases where your code must -be branch and handle different outputs written to the buffer. - -For example, consider a buffer hooked up to the stdout of a client library. You may (or may not, depending on state outside of your control) need to authenticate the client library. - -You could do something like: - -select { -case <-buffer.Detect("You are not logged in"): - //log in -case <-buffer.Detect("Success"): - //carry on -case <-time.After(time.Second): - //welp -} -buffer.CancelDetects() - -You should always call CancelDetects after using Detect. This will close any channels that have not detected and clean up the goroutines that were spawned to support them. - -Finally, you can pass detect a format string followed by variadic arguments. This will construct the regexp using fmt.Sprintf. -*/ -func (b *Buffer) Detect(desired string, args ...interface{}) chan bool { - formattedRegexp := desired - if len(args) > 0 { - formattedRegexp = fmt.Sprintf(desired, args...) - } - re := regexp.MustCompile(formattedRegexp) - - b.lock.Lock() - defer b.lock.Unlock() - - if b.detectCloser == nil { - b.detectCloser = make(chan interface{}) - } - - closer := b.detectCloser - response := make(chan bool) - go func() { - ticker := time.NewTicker(10 * time.Millisecond) - defer ticker.Stop() - defer close(response) - for { - select { - case <-ticker.C: - b.lock.Lock() - data, cursor := b.contents[b.readCursor:], b.readCursor - loc := re.FindIndex(data) - b.lock.Unlock() - - if loc != nil { - response <- true - b.lock.Lock() - newCursorPosition := cursor + uint64(loc[1]) - if newCursorPosition >= b.readCursor { - b.readCursor = newCursorPosition - } - b.lock.Unlock() - return - } - case <-closer: - return - } - } - }() - - return response -} - -/* -CancelDetects cancels any pending detects and cleans up their goroutines. You should always call this when you're done with a set of Detect channels. -*/ -func (b *Buffer) CancelDetects() { - b.lock.Lock() - defer b.lock.Unlock() - - close(b.detectCloser) - b.detectCloser = nil -} - -func (b *Buffer) didSay(re *regexp.Regexp) (bool, []byte) { - b.lock.Lock() - defer b.lock.Unlock() - - unreadBytes := b.contents[b.readCursor:] - copyOfUnreadBytes := make([]byte, len(unreadBytes)) - copy(copyOfUnreadBytes, unreadBytes) - - loc := re.FindIndex(unreadBytes) - - if loc != nil { - b.readCursor += uint64(loc[1]) - return true, copyOfUnreadBytes - } else { - return false, copyOfUnreadBytes - } -} diff --git a/vendor/github.com/onsi/gomega/gbytes/buffer_test.go b/vendor/github.com/onsi/gomega/gbytes/buffer_test.go deleted file mode 100644 index b111138..0000000 --- a/vendor/github.com/onsi/gomega/gbytes/buffer_test.go +++ /dev/null @@ -1,158 +0,0 @@ -package gbytes_test - -import ( - "io" - "time" - - . "github.com/onsi/gomega/gbytes" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Buffer", func() { - var buffer *Buffer - - BeforeEach(func() { - buffer = NewBuffer() - }) - - Describe("dumping the entire contents of the buffer", func() { - It("should return everything that's been written", func() { - buffer.Write([]byte("abc")) - buffer.Write([]byte("def")) - Ω(buffer.Contents()).Should(Equal([]byte("abcdef"))) - - Ω(buffer).Should(Say("bcd")) - Ω(buffer.Contents()).Should(Equal([]byte("abcdef"))) - }) - }) - - Describe("creating a buffer with bytes", func() { - It("should create the buffer with the cursor set to the beginning", func() { - buffer := BufferWithBytes([]byte("abcdef")) - Ω(buffer.Contents()).Should(Equal([]byte("abcdef"))) - Ω(buffer).Should(Say("abc")) - Ω(buffer).ShouldNot(Say("abc")) - Ω(buffer).Should(Say("def")) - }) - }) - - Describe("reading from a buffer", func() { - It("should read the current contents of the buffer", func() { - buffer := BufferWithBytes([]byte("abcde")) - - dest := make([]byte, 3) - n, err := buffer.Read(dest) - Ω(err).ShouldNot(HaveOccurred()) - Ω(n).Should(Equal(3)) - Ω(string(dest)).Should(Equal("abc")) - - dest = make([]byte, 3) - n, err = buffer.Read(dest) - Ω(err).ShouldNot(HaveOccurred()) - Ω(n).Should(Equal(2)) - Ω(string(dest[:n])).Should(Equal("de")) - - n, err = buffer.Read(dest) - Ω(err).Should(Equal(io.EOF)) - Ω(n).Should(Equal(0)) - }) - - Context("after the buffer has been closed", func() { - It("returns an error", func() { - buffer := BufferWithBytes([]byte("abcde")) - - buffer.Close() - - dest := make([]byte, 3) - n, err := buffer.Read(dest) - Ω(err).Should(HaveOccurred()) - Ω(n).Should(Equal(0)) - }) - }) - }) - - Describe("detecting regular expressions", func() { - It("should fire the appropriate channel when the passed in pattern matches, then close it", func(done Done) { - go func() { - time.Sleep(10 * time.Millisecond) - buffer.Write([]byte("abcde")) - }() - - A := buffer.Detect("%s", "a.c") - B := buffer.Detect("def") - - var gotIt bool - select { - case gotIt = <-A: - case <-B: - Fail("should not have gotten here") - } - - Ω(gotIt).Should(BeTrue()) - Eventually(A).Should(BeClosed()) - - buffer.Write([]byte("f")) - Eventually(B).Should(Receive()) - Eventually(B).Should(BeClosed()) - - close(done) - }) - - It("should fast-forward the buffer upon detection", func(done Done) { - buffer.Write([]byte("abcde")) - <-buffer.Detect("abc") - Ω(buffer).ShouldNot(Say("abc")) - Ω(buffer).Should(Say("de")) - close(done) - }) - - It("should only fast-forward the buffer when the channel is read, and only if doing so would not rewind it", func(done Done) { - buffer.Write([]byte("abcde")) - A := buffer.Detect("abc") - time.Sleep(20 * time.Millisecond) //give the goroutine a chance to detect and write to the channel - Ω(buffer).Should(Say("abcd")) - <-A - Ω(buffer).ShouldNot(Say("d")) - Ω(buffer).Should(Say("e")) - Eventually(A).Should(BeClosed()) - close(done) - }) - - It("should be possible to cancel a detection", func(done Done) { - A := buffer.Detect("abc") - B := buffer.Detect("def") - buffer.CancelDetects() - buffer.Write([]byte("abcdef")) - Eventually(A).Should(BeClosed()) - Eventually(B).Should(BeClosed()) - - Ω(buffer).Should(Say("bcde")) - <-buffer.Detect("f") - close(done) - }) - }) - - Describe("closing the buffer", func() { - It("should error when further write attempts are made", func() { - _, err := buffer.Write([]byte("abc")) - Ω(err).ShouldNot(HaveOccurred()) - - buffer.Close() - - _, err = buffer.Write([]byte("def")) - Ω(err).Should(HaveOccurred()) - - Ω(buffer.Contents()).Should(Equal([]byte("abc"))) - }) - - It("should be closed", func() { - Ω(buffer.Closed()).Should(BeFalse()) - - buffer.Close() - - Ω(buffer.Closed()).Should(BeTrue()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/gbytes/gbuffer_suite_test.go b/vendor/github.com/onsi/gomega/gbytes/gbuffer_suite_test.go deleted file mode 100644 index 3a7dc06..0000000 --- a/vendor/github.com/onsi/gomega/gbytes/gbuffer_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package gbytes_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestGbytes(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Gbytes Suite") -} diff --git a/vendor/github.com/onsi/gomega/gbytes/say_matcher.go b/vendor/github.com/onsi/gomega/gbytes/say_matcher.go deleted file mode 100644 index cbc266c..0000000 --- a/vendor/github.com/onsi/gomega/gbytes/say_matcher.go +++ /dev/null @@ -1,105 +0,0 @@ -package gbytes - -import ( - "fmt" - "regexp" - - "github.com/onsi/gomega/format" -) - -//Objects satisfying the BufferProvider can be used with the Say matcher. -type BufferProvider interface { - Buffer() *Buffer -} - -/* -Say is a Gomega matcher that operates on gbytes.Buffers: - - Ω(buffer).Should(Say("something")) - -will succeed if the unread portion of the buffer matches the regular expression "something". - -When Say succeeds, it fast forwards the gbytes.Buffer's read cursor to just after the succesful match. -Thus, subsequent calls to Say will only match against the unread portion of the buffer - -Say pairs very well with Eventually. To assert that a buffer eventually receives data matching "[123]-star" within 3 seconds you can: - - Eventually(buffer, 3).Should(Say("[123]-star")) - -Ditto with consistently. To assert that a buffer does not receive data matching "never-see-this" for 1 second you can: - - Consistently(buffer, 1).ShouldNot(Say("never-see-this")) - -In addition to bytes.Buffers, Say can operate on objects that implement the gbytes.BufferProvider interface. -In such cases, Say simply operates on the *gbytes.Buffer returned by Buffer() - -If the buffer is closed, the Say matcher will tell Eventually to abort. -*/ -func Say(expected string, args ...interface{}) *sayMatcher { - formattedRegexp := expected - if len(args) > 0 { - formattedRegexp = fmt.Sprintf(expected, args...) - } - return &sayMatcher{ - re: regexp.MustCompile(formattedRegexp), - } -} - -type sayMatcher struct { - re *regexp.Regexp - receivedSayings []byte -} - -func (m *sayMatcher) buffer(actual interface{}) (*Buffer, bool) { - var buffer *Buffer - - switch x := actual.(type) { - case *Buffer: - buffer = x - case BufferProvider: - buffer = x.Buffer() - default: - return nil, false - } - - return buffer, true -} - -func (m *sayMatcher) Match(actual interface{}) (success bool, err error) { - buffer, ok := m.buffer(actual) - if !ok { - return false, fmt.Errorf("Say must be passed a *gbytes.Buffer or BufferProvider. Got:\n%s", format.Object(actual, 1)) - } - - didSay, sayings := buffer.didSay(m.re) - m.receivedSayings = sayings - - return didSay, nil -} - -func (m *sayMatcher) FailureMessage(actual interface{}) (message string) { - return fmt.Sprintf( - "Got stuck at:\n%s\nWaiting for:\n%s", - format.IndentString(string(m.receivedSayings), 1), - format.IndentString(m.re.String(), 1), - ) -} - -func (m *sayMatcher) NegatedFailureMessage(actual interface{}) (message string) { - return fmt.Sprintf( - "Saw:\n%s\nWhich matches the unexpected:\n%s", - format.IndentString(string(m.receivedSayings), 1), - format.IndentString(m.re.String(), 1), - ) -} - -func (m *sayMatcher) MatchMayChangeInTheFuture(actual interface{}) bool { - switch x := actual.(type) { - case *Buffer: - return !x.Closed() - case BufferProvider: - return !x.Buffer().Closed() - default: - return true - } -} diff --git a/vendor/github.com/onsi/gomega/gbytes/say_matcher_test.go b/vendor/github.com/onsi/gomega/gbytes/say_matcher_test.go deleted file mode 100644 index 63fb3b3..0000000 --- a/vendor/github.com/onsi/gomega/gbytes/say_matcher_test.go +++ /dev/null @@ -1,163 +0,0 @@ -package gbytes_test - -import ( - . "github.com/onsi/gomega/gbytes" - "time" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -type speaker struct { - buffer *Buffer -} - -func (s *speaker) Buffer() *Buffer { - return s.buffer -} - -var _ = Describe("SayMatcher", func() { - var buffer *Buffer - - BeforeEach(func() { - buffer = NewBuffer() - buffer.Write([]byte("abc")) - }) - - Context("when actual is not a gexec Buffer, or a BufferProvider", func() { - It("should error", func() { - failures := InterceptGomegaFailures(func() { - Ω("foo").Should(Say("foo")) - }) - Ω(failures[0]).Should(ContainSubstring("*gbytes.Buffer")) - }) - }) - - Context("when a match is found", func() { - It("should succeed", func() { - Ω(buffer).Should(Say("abc")) - }) - - It("should support printf-like formatting", func() { - Ω(buffer).Should(Say("a%sc", "b")) - }) - - It("should use a regular expression", func() { - Ω(buffer).Should(Say("a.c")) - }) - - It("should fastforward the buffer", func() { - buffer.Write([]byte("def")) - Ω(buffer).Should(Say("abcd")) - Ω(buffer).Should(Say("ef")) - Ω(buffer).ShouldNot(Say("[a-z]")) - }) - }) - - Context("when no match is found", func() { - It("should not error", func() { - Ω(buffer).ShouldNot(Say("def")) - }) - - Context("when the buffer is closed", func() { - BeforeEach(func() { - buffer.Close() - }) - - It("should abort an eventually", func() { - t := time.Now() - failures := InterceptGomegaFailures(func() { - Eventually(buffer).Should(Say("def")) - }) - Eventually(buffer).ShouldNot(Say("def")) - Ω(time.Since(t)).Should(BeNumerically("<", 500*time.Millisecond)) - Ω(failures).Should(HaveLen(1)) - - t = time.Now() - Eventually(buffer).Should(Say("abc")) - Ω(time.Since(t)).Should(BeNumerically("<", 500*time.Millisecond)) - }) - - It("should abort a consistently", func() { - t := time.Now() - Consistently(buffer, 2.0).ShouldNot(Say("def")) - Ω(time.Since(t)).Should(BeNumerically("<", 500*time.Millisecond)) - }) - - It("should not error with a synchronous matcher", func() { - Ω(buffer).ShouldNot(Say("def")) - Ω(buffer).Should(Say("abc")) - }) - }) - }) - - Context("when a positive match fails", func() { - It("should report where it got stuck", func() { - Ω(buffer).Should(Say("abc")) - buffer.Write([]byte("def")) - failures := InterceptGomegaFailures(func() { - Ω(buffer).Should(Say("abc")) - }) - Ω(failures[0]).Should(ContainSubstring("Got stuck at:")) - Ω(failures[0]).Should(ContainSubstring("def")) - }) - }) - - Context("when a negative match fails", func() { - It("should report where it got stuck", func() { - failures := InterceptGomegaFailures(func() { - Ω(buffer).ShouldNot(Say("abc")) - }) - Ω(failures[0]).Should(ContainSubstring("Saw:")) - Ω(failures[0]).Should(ContainSubstring("Which matches the unexpected:")) - Ω(failures[0]).Should(ContainSubstring("abc")) - }) - }) - - Context("when a match is not found", func() { - It("should not fastforward the buffer", func() { - Ω(buffer).ShouldNot(Say("def")) - Ω(buffer).Should(Say("abc")) - }) - }) - - Context("a nice real-life example", func() { - It("should behave well", func() { - Ω(buffer).Should(Say("abc")) - go func() { - time.Sleep(10 * time.Millisecond) - buffer.Write([]byte("def")) - }() - Ω(buffer).ShouldNot(Say("def")) - Eventually(buffer).Should(Say("def")) - }) - }) - - Context("when actual is a BufferProvider", func() { - It("should use actual's buffer", func() { - s := &speaker{ - buffer: NewBuffer(), - } - - Ω(s).ShouldNot(Say("abc")) - - s.Buffer().Write([]byte("abc")) - Ω(s).Should(Say("abc")) - }) - - It("should abort an eventually", func() { - s := &speaker{ - buffer: NewBuffer(), - } - - s.buffer.Close() - - t := time.Now() - failures := InterceptGomegaFailures(func() { - Eventually(s).Should(Say("def")) - }) - Ω(failures).Should(HaveLen(1)) - Ω(time.Since(t)).Should(BeNumerically("<", 500*time.Millisecond)) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/gexec/_fixture/firefly/main.go b/vendor/github.com/onsi/gomega/gexec/_fixture/firefly/main.go deleted file mode 100644 index 16091c2..0000000 --- a/vendor/github.com/onsi/gomega/gexec/_fixture/firefly/main.go +++ /dev/null @@ -1,36 +0,0 @@ -package main - -import ( - "fmt" - "math/rand" - "os" - "strconv" - "time" -) - -var outQuote = "We've done the impossible, and that makes us mighty." -var errQuote = "Ah, curse your sudden but inevitable betrayal!" - -var randomQuotes = []string{ - "Can we maybe vote on the whole murdering people issue?", - "I swear by my pretty floral bonnet, I will end you.", - "My work's illegal, but at least it's honest.", -} - -func main() { - fmt.Fprintln(os.Stdout, outQuote) - fmt.Fprintln(os.Stderr, errQuote) - - randomIndex := rand.New(rand.NewSource(time.Now().UnixNano())).Intn(len(randomQuotes)) - - time.Sleep(100 * time.Millisecond) - - fmt.Fprintln(os.Stdout, randomQuotes[randomIndex]) - - if len(os.Args) == 2 { - exitCode, _ := strconv.Atoi(os.Args[1]) - os.Exit(exitCode) - } else { - os.Exit(randomIndex) - } -} diff --git a/vendor/github.com/onsi/gomega/gexec/build.go b/vendor/github.com/onsi/gomega/gexec/build.go deleted file mode 100644 index d11b2fd..0000000 --- a/vendor/github.com/onsi/gomega/gexec/build.go +++ /dev/null @@ -1,99 +0,0 @@ -package gexec - -import ( - "errors" - "fmt" - "io/ioutil" - "os" - "os/exec" - "path" - "path/filepath" - "runtime" - "sync" -) - -var ( - mu sync.Mutex - tmpDir string -) - -/* -Build uses go build to compile the package at packagePath. The resulting binary is saved off in a temporary directory. -A path pointing to this binary is returned. - -Build uses the $GOPATH set in your environment. It passes the variadic args on to `go build`. -*/ -func Build(packagePath string, args ...string) (compiledPath string, err error) { - return doBuild(os.Getenv("GOPATH"), packagePath, nil, args...) -} - -/* -BuildWithEnvironment is identical to Build but allows you to specify env vars to be set at build time. -*/ -func BuildWithEnvironment(packagePath string, env []string, args ...string) (compiledPath string, err error) { - return doBuild(os.Getenv("GOPATH"), packagePath, env, args...) -} - -/* -BuildIn is identical to Build but allows you to specify a custom $GOPATH (the first argument). -*/ -func BuildIn(gopath string, packagePath string, args ...string) (compiledPath string, err error) { - return doBuild(gopath, packagePath, nil, args...) -} - -func doBuild(gopath, packagePath string, env []string, args ...string) (compiledPath string, err error) { - tmpDir, err := temporaryDirectory() - if err != nil { - return "", err - } - - if len(gopath) == 0 { - return "", errors.New("$GOPATH not provided when building " + packagePath) - } - - executable := filepath.Join(tmpDir, path.Base(packagePath)) - if runtime.GOOS == "windows" { - executable = executable + ".exe" - } - - cmdArgs := append([]string{"build"}, args...) - cmdArgs = append(cmdArgs, "-o", executable, packagePath) - - build := exec.Command("go", cmdArgs...) - build.Env = append([]string{"GOPATH=" + gopath}, os.Environ()...) - build.Env = append(build.Env, env...) - - output, err := build.CombinedOutput() - if err != nil { - return "", fmt.Errorf("Failed to build %s:\n\nError:\n%s\n\nOutput:\n%s", packagePath, err, string(output)) - } - - return executable, nil -} - -/* -You should call CleanupBuildArtifacts before your test ends to clean up any temporary artifacts generated by -gexec. In Ginkgo this is typically done in an AfterSuite callback. -*/ -func CleanupBuildArtifacts() { - mu.Lock() - defer mu.Unlock() - if tmpDir != "" { - os.RemoveAll(tmpDir) - tmpDir = "" - } -} - -func temporaryDirectory() (string, error) { - var err error - mu.Lock() - defer mu.Unlock() - if tmpDir == "" { - tmpDir, err = ioutil.TempDir("", "gexec_artifacts") - if err != nil { - return "", err - } - } - - return ioutil.TempDir(tmpDir, "g") -} diff --git a/vendor/github.com/onsi/gomega/gexec/build_test.go b/vendor/github.com/onsi/gomega/gexec/build_test.go deleted file mode 100644 index 8df0790..0000000 --- a/vendor/github.com/onsi/gomega/gexec/build_test.go +++ /dev/null @@ -1,59 +0,0 @@ -package gexec_test - -import ( - "os" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gexec" -) - -var packagePath = "./_fixture/firefly" - -var _ = Describe(".Build", func() { - Context("when there have been previous calls to Build", func() { - BeforeEach(func() { - _, err := gexec.Build(packagePath) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("compiles the specified package", func() { - compiledPath, err := gexec.Build(packagePath) - Ω(err).ShouldNot(HaveOccurred()) - Ω(compiledPath).Should(BeAnExistingFile()) - }) - - Context("and CleanupBuildArtifacts has been called", func() { - BeforeEach(func() { - gexec.CleanupBuildArtifacts() - }) - - It("compiles the specified package", func() { - var err error - fireflyPath, err = gexec.Build(packagePath) - Ω(err).ShouldNot(HaveOccurred()) - Ω(fireflyPath).Should(BeAnExistingFile()) - }) - }) - }) -}) - -var _ = Describe(".BuildWithEnvironment", func() { - var err error - env := []string{ - "GOOS=linux", - "GOARCH=amd64", - } - - It("compiles the specified package with the specified env vars", func() { - compiledPath, err := gexec.BuildWithEnvironment(packagePath, env) - Ω(err).ShouldNot(HaveOccurred()) - Ω(compiledPath).Should(BeAnExistingFile()) - }) - - It("returns the environment to a good state", func() { - _, err = gexec.BuildWithEnvironment(packagePath, env) - Ω(err).ShouldNot(HaveOccurred()) - Ω(os.Environ()).ShouldNot(ContainElement("GOOS=linux")) - }) -}) diff --git a/vendor/github.com/onsi/gomega/gexec/exit_matcher.go b/vendor/github.com/onsi/gomega/gexec/exit_matcher.go deleted file mode 100644 index e6f4329..0000000 --- a/vendor/github.com/onsi/gomega/gexec/exit_matcher.go +++ /dev/null @@ -1,88 +0,0 @@ -package gexec - -import ( - "fmt" - - "github.com/onsi/gomega/format" -) - -/* -The Exit matcher operates on a session: - - Ω(session).Should(Exit()) - -Exit passes if the session has already exited. - -If no status code is provided, then Exit will succeed if the session has exited regardless of exit code. -Otherwise, Exit will only succeed if the process has exited with the provided status code. - -Note that the process must have already exited. To wait for a process to exit, use Eventually: - - Eventually(session, 3).Should(Exit(0)) -*/ -func Exit(optionalExitCode ...int) *exitMatcher { - exitCode := -1 - if len(optionalExitCode) > 0 { - exitCode = optionalExitCode[0] - } - - return &exitMatcher{ - exitCode: exitCode, - } -} - -type exitMatcher struct { - exitCode int - didExit bool - actualExitCode int -} - -type Exiter interface { - ExitCode() int -} - -func (m *exitMatcher) Match(actual interface{}) (success bool, err error) { - exiter, ok := actual.(Exiter) - if !ok { - return false, fmt.Errorf("Exit must be passed a gexec.Exiter (Missing method ExitCode() int) Got:\n%s", format.Object(actual, 1)) - } - - m.actualExitCode = exiter.ExitCode() - - if m.actualExitCode == -1 { - return false, nil - } - - if m.exitCode == -1 { - return true, nil - } - return m.exitCode == m.actualExitCode, nil -} - -func (m *exitMatcher) FailureMessage(actual interface{}) (message string) { - if m.actualExitCode == -1 { - return "Expected process to exit. It did not." - } else { - return format.Message(m.actualExitCode, "to match exit code:", m.exitCode) - } -} - -func (m *exitMatcher) NegatedFailureMessage(actual interface{}) (message string) { - if m.actualExitCode == -1 { - return "you really shouldn't be able to see this!" - } else { - if m.exitCode == -1 { - return "Expected process not to exit. It did." - } else { - return format.Message(m.actualExitCode, "not to match exit code:", m.exitCode) - } - } -} - -func (m *exitMatcher) MatchMayChangeInTheFuture(actual interface{}) bool { - session, ok := actual.(*Session) - if ok { - return session.ExitCode() == -1 - } - return true -} diff --git a/vendor/github.com/onsi/gomega/gexec/exit_matcher_test.go b/vendor/github.com/onsi/gomega/gexec/exit_matcher_test.go deleted file mode 100644 index 79615dd..0000000 --- a/vendor/github.com/onsi/gomega/gexec/exit_matcher_test.go +++ /dev/null @@ -1,113 +0,0 @@ -package gexec_test - -import ( - . "github.com/onsi/gomega/gexec" - "os/exec" - "time" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -type NeverExits struct{} - -func (e NeverExits) ExitCode() int { - return -1 -} - -var _ = Describe("ExitMatcher", func() { - var command *exec.Cmd - var session *Session - - BeforeEach(func() { - var err error - command = exec.Command(fireflyPath, "0") - session, err = Start(command, nil, nil) - Ω(err).ShouldNot(HaveOccurred()) - }) - - Describe("when passed something that is an Exiter", func() { - It("should act normally", func() { - failures := InterceptGomegaFailures(func() { - Ω(NeverExits{}).Should(Exit()) - }) - - Ω(failures[0]).Should(ContainSubstring("Expected process to exit. It did not.")) - }) - }) - - Describe("when passed something that is not an Exiter", func() { - It("should error", func() { - failures := InterceptGomegaFailures(func() { - Ω("aardvark").Should(Exit()) - }) - - Ω(failures[0]).Should(ContainSubstring("Exit must be passed a gexec.Exiter")) - }) - }) - - Context("with no exit code", func() { - It("should say the right things when it fails", func() { - Ω(session).ShouldNot(Exit()) - - failures := InterceptGomegaFailures(func() { - Ω(session).Should(Exit()) - }) - - Ω(failures[0]).Should(ContainSubstring("Expected process to exit. It did not.")) - - Eventually(session).Should(Exit()) - - Ω(session).Should(Exit()) - - failures = InterceptGomegaFailures(func() { - Ω(session).ShouldNot(Exit()) - }) - - Ω(failures[0]).Should(ContainSubstring("Expected process not to exit. It did.")) - }) - }) - - Context("with an exit code", func() { - It("should say the right things when it fails", func() { - Ω(session).ShouldNot(Exit(0)) - Ω(session).ShouldNot(Exit(1)) - - failures := InterceptGomegaFailures(func() { - Ω(session).Should(Exit(0)) - }) - - Ω(failures[0]).Should(ContainSubstring("Expected process to exit. It did not.")) - - Eventually(session).Should(Exit(0)) - - Ω(session).Should(Exit(0)) - - failures = InterceptGomegaFailures(func() { - Ω(session).Should(Exit(1)) - }) - - Ω(failures[0]).Should(ContainSubstring("to match exit code:")) - - Ω(session).ShouldNot(Exit(1)) - - failures = InterceptGomegaFailures(func() { - Ω(session).ShouldNot(Exit(0)) - }) - - Ω(failures[0]).Should(ContainSubstring("not to match exit code:")) - }) - }) - - Describe("bailing out early", func() { - It("should bail out early once the process exits", func() { - t := time.Now() - - failures := InterceptGomegaFailures(func() { - Eventually(session).Should(Exit(1)) - }) - Ω(time.Since(t)).Should(BeNumerically("<=", 500*time.Millisecond)) - Ω(failures).Should(HaveLen(1)) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/gexec/gexec_suite_test.go b/vendor/github.com/onsi/gomega/gexec/gexec_suite_test.go deleted file mode 100644 index 87672aa..0000000 --- a/vendor/github.com/onsi/gomega/gexec/gexec_suite_test.go +++ /dev/null @@ -1,26 +0,0 @@ -package gexec_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gexec" - - "testing" -) - -var fireflyPath string - -func TestGexec(t *testing.T) { - BeforeSuite(func() { - var err error - fireflyPath, err = gexec.Build("./_fixture/firefly") - Ω(err).ShouldNot(HaveOccurred()) - }) - - AfterSuite(func() { - gexec.CleanupBuildArtifacts() - }) - - RegisterFailHandler(Fail) - RunSpecs(t, "Gexec Suite") -} diff --git a/vendor/github.com/onsi/gomega/gexec/prefixed_writer.go b/vendor/github.com/onsi/gomega/gexec/prefixed_writer.go deleted file mode 100644 index 05e695a..0000000 --- a/vendor/github.com/onsi/gomega/gexec/prefixed_writer.go +++ /dev/null @@ -1,53 +0,0 @@ -package gexec - -import ( - "io" - "sync" -) - -/* -PrefixedWriter wraps an io.Writer, emiting the passed in prefix at the beginning of each new line. -This can be useful when running multiple gexec.Sessions concurrently - you can prefix the log output of each -session by passing in a PrefixedWriter: - -gexec.Start(cmd, NewPrefixedWriter("[my-cmd] ", GinkgoWriter), NewPrefixedWriter("[my-cmd] ", GinkgoWriter)) -*/ -type PrefixedWriter struct { - prefix []byte - writer io.Writer - lock *sync.Mutex - atStartOfLine bool -} - -func NewPrefixedWriter(prefix string, writer io.Writer) *PrefixedWriter { - return &PrefixedWriter{ - prefix: []byte(prefix), - writer: writer, - lock: &sync.Mutex{}, - atStartOfLine: true, - } -} - -func (w *PrefixedWriter) Write(b []byte) (int, error) { - w.lock.Lock() - defer w.lock.Unlock() - - toWrite := []byte{} - - for _, c := range b { - if w.atStartOfLine { - toWrite = append(toWrite, w.prefix...) - } - - toWrite = append(toWrite, c) - - w.atStartOfLine = c == '\n' - } - - _, err := w.writer.Write(toWrite) - if err != nil { - return 0, err - } - - return len(b), nil -} diff --git a/vendor/github.com/onsi/gomega/gexec/prefixed_writer_test.go b/vendor/github.com/onsi/gomega/gexec/prefixed_writer_test.go deleted file mode 100644 index 8657d0c..0000000 --- a/vendor/github.com/onsi/gomega/gexec/prefixed_writer_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package gexec_test - -import ( - "bytes" - - . "github.com/onsi/gomega/gexec" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("PrefixedWriter", func() { - var buffer *bytes.Buffer - var writer *PrefixedWriter - BeforeEach(func() { - buffer = &bytes.Buffer{} - writer = NewPrefixedWriter("[p]", buffer) - }) - - It("should emit the prefix on newlines", func() { - writer.Write([]byte("abc")) - writer.Write([]byte("def\n")) - writer.Write([]byte("hij\n")) - writer.Write([]byte("\n\n")) - writer.Write([]byte("klm\n\nnop")) - writer.Write([]byte("")) - writer.Write([]byte("qrs")) - writer.Write([]byte("\ntuv\nwx")) - writer.Write([]byte("yz\n\n")) - - Ω(buffer.String()).Should(Equal(`[p]abcdef -[p]hij -[p] -[p] -[p]klm -[p] -[p]nopqrs -[p]tuv -[p]wxyz -[p] -`)) - }) -}) diff --git a/vendor/github.com/onsi/gomega/gexec/session.go b/vendor/github.com/onsi/gomega/gexec/session.go deleted file mode 100644 index 387a72c..0000000 --- a/vendor/github.com/onsi/gomega/gexec/session.go +++ /dev/null @@ -1,305 +0,0 @@ -/* -Package gexec provides support for testing external processes. -*/ -package gexec - -import ( - "io" - "os" - "os/exec" - "reflect" - "sync" - "syscall" - - . "github.com/onsi/gomega" - "github.com/onsi/gomega/gbytes" -) - -const INVALID_EXIT_CODE = 254 - -type Session struct { - //The wrapped command - Command *exec.Cmd - - //A *gbytes.Buffer connected to the command's stdout - Out *gbytes.Buffer - - //A *gbytes.Buffer connected to the command's stderr - Err *gbytes.Buffer - - //A channel that will close when the command exits - Exited <-chan struct{} - - lock *sync.Mutex - exitCode int -} - -/* -Start starts the passed-in *exec.Cmd command. It wraps the command in a *gexec.Session. - -The session pipes the command's stdout and stderr to two *gbytes.Buffers available as properties on the session: session.Out and session.Err. -These buffers can be used with the gbytes.Say matcher to match against unread output: - - Ω(session.Out).Should(gbytes.Say("foo-out")) - Ω(session.Err).Should(gbytes.Say("foo-err")) - -In addition, Session satisfies the gbytes.BufferProvider interface and provides the stdout *gbytes.Buffer. This allows you to replace the first line, above, with: - - Ω(session).Should(gbytes.Say("foo-out")) - -When outWriter and/or errWriter are non-nil, the session will pipe stdout and/or stderr output both into the session *gybtes.Buffers and to the passed-in outWriter/errWriter. -This is useful for capturing the process's output or logging it to screen. In particular, when using Ginkgo it can be convenient to direct output to the GinkgoWriter: - - session, err := Start(command, GinkgoWriter, GinkgoWriter) - -This will log output when running tests in verbose mode, but - otherwise - will only log output when a test fails. - -The session wrapper is responsible for waiting on the *exec.Cmd command. You *should not* call command.Wait() yourself. -Instead, to assert that the command has exited you can use the gexec.Exit matcher: - - Ω(session).Should(gexec.Exit()) - -When the session exits it closes the stdout and stderr gbytes buffers. This will short circuit any -Eventuallys waiting for the buffers to Say something. -*/ -func Start(command *exec.Cmd, outWriter io.Writer, errWriter io.Writer) (*Session, error) { - exited := make(chan struct{}) - - session := &Session{ - Command: command, - Out: gbytes.NewBuffer(), - Err: gbytes.NewBuffer(), - Exited: exited, - lock: &sync.Mutex{}, - exitCode: -1, - } - - var commandOut, commandErr io.Writer - - commandOut, commandErr = session.Out, session.Err - - if outWriter != nil && !reflect.ValueOf(outWriter).IsNil() { - commandOut = io.MultiWriter(commandOut, outWriter) - } - - if errWriter != nil && !reflect.ValueOf(errWriter).IsNil() { - commandErr = io.MultiWriter(commandErr, errWriter) - } - - command.Stdout = commandOut - command.Stderr = commandErr - - err := command.Start() - if err == nil { - go session.monitorForExit(exited) - trackedSessionsMutex.Lock() - defer trackedSessionsMutex.Unlock() - trackedSessions = append(trackedSessions, session) - } - - return session, err -} - -/* -Buffer implements the gbytes.BufferProvider interface and returns s.Out -This allows you to make gbytes.Say matcher assertions against stdout without having to reference .Out: - - Eventually(session).Should(gbytes.Say("foo")) -*/ -func (s *Session) Buffer() *gbytes.Buffer { - return s.Out -} - -/* -ExitCode returns the wrapped command's exit code. If the command hasn't exited yet, ExitCode returns -1. - -To assert that the command has exited it is more convenient to use the Exit matcher: - - Eventually(s).Should(gexec.Exit()) - -When the process exits because it has received a particular signal, the exit code will be 128+signal-value -(See http://www.tldp.org/LDP/abs/html/exitcodes.html and http://man7.org/linux/man-pages/man7/signal.7.html) - -*/ -func (s *Session) ExitCode() int { - s.lock.Lock() - defer s.lock.Unlock() - return s.exitCode -} - -/* -Wait waits until the wrapped command exits. It can be passed an optional timeout. -If the command does not exit within the timeout, Wait will trigger a test failure. - -Wait returns the session, making it possible to chain: - - session.Wait().Out.Contents() - -will wait for the command to exit then return the entirety of Out's contents. - -Wait uses eventually under the hood and accepts the same timeout/polling intervals that eventually does. -*/ -func (s *Session) Wait(timeout ...interface{}) *Session { - EventuallyWithOffset(1, s, timeout...).Should(Exit()) - return s -} - -/* -Kill sends the running command a SIGKILL signal. It does not wait for the process to exit. - -If the command has already exited, Kill returns silently. - -The session is returned to enable chaining. -*/ -func (s *Session) Kill() *Session { - if s.ExitCode() != -1 { - return s - } - s.Command.Process.Kill() - return s -} - -/* -Interrupt sends the running command a SIGINT signal. It does not wait for the process to exit. - -If the command has already exited, Interrupt returns silently. - -The session is returned to enable chaining. -*/ -func (s *Session) Interrupt() *Session { - return s.Signal(syscall.SIGINT) -} - -/* -Terminate sends the running command a SIGTERM signal. It does not wait for the process to exit. - -If the command has already exited, Terminate returns silently. - -The session is returned to enable chaining. -*/ -func (s *Session) Terminate() *Session { - return s.Signal(syscall.SIGTERM) -} - -/* -Signal sends the running command the passed in signal. It does not wait for the process to exit. - -If the command has already exited, Signal returns silently. - -The session is returned to enable chaining. -*/ -func (s *Session) Signal(signal os.Signal) *Session { - if s.ExitCode() != -1 { - return s - } - s.Command.Process.Signal(signal) - return s -} - -func (s *Session) monitorForExit(exited chan<- struct{}) { - err := s.Command.Wait() - s.lock.Lock() - s.Out.Close() - s.Err.Close() - status := s.Command.ProcessState.Sys().(syscall.WaitStatus) - if status.Signaled() { - s.exitCode = 128 + int(status.Signal()) - } else { - exitStatus := status.ExitStatus() - if exitStatus == -1 && err != nil { - s.exitCode = INVALID_EXIT_CODE - } - s.exitCode = exitStatus - } - s.lock.Unlock() - - close(exited) -} - -var trackedSessions = []*Session{} -var trackedSessionsMutex = &sync.Mutex{} - -/* -Kill sends a SIGKILL signal to all the processes started by Run, and waits for them to exit. -The timeout specified is applied to each process killed. - -If any of the processes already exited, KillAndWait returns silently. -*/ -func KillAndWait(timeout ...interface{}) { - trackedSessionsMutex.Lock() - defer trackedSessionsMutex.Unlock() - for _, session := range trackedSessions { - session.Kill().Wait(timeout...) - } - trackedSessions = []*Session{} -} - -/* -Kill sends a SIGTERM signal to all the processes started by Run, and waits for them to exit. -The timeout specified is applied to each process killed. - -If any of the processes already exited, TerminateAndWait returns silently. -*/ -func TerminateAndWait(timeout ...interface{}) { - trackedSessionsMutex.Lock() - defer trackedSessionsMutex.Unlock() - for _, session := range trackedSessions { - session.Terminate().Wait(timeout...) - } -} - -/* -Kill sends a SIGKILL signal to all the processes started by Run. -It does not wait for the processes to exit. - -If any of the processes already exited, Kill returns silently. -*/ -func Kill() { - trackedSessionsMutex.Lock() - defer trackedSessionsMutex.Unlock() - for _, session := range trackedSessions { - session.Kill() - } -} - -/* -Terminate sends a SIGTERM signal to all the processes started by Run. -It does not wait for the processes to exit. - -If any of the processes already exited, Terminate returns silently. -*/ -func Terminate() { - trackedSessionsMutex.Lock() - defer trackedSessionsMutex.Unlock() - for _, session := range trackedSessions { - session.Terminate() - } -} - -/* -Signal sends the passed in signal to all the processes started by Run. -It does not wait for the processes to exit. - -If any of the processes already exited, Signal returns silently. -*/ -func Signal(signal os.Signal) { - trackedSessionsMutex.Lock() - defer trackedSessionsMutex.Unlock() - for _, session := range trackedSessions { - session.Signal(signal) - } -} - -/* -Interrupt sends the SIGINT signal to all the processes started by Run. -It does not wait for the processes to exit. - -If any of the processes already exited, Interrupt returns silently. -*/ -func Interrupt() { - trackedSessionsMutex.Lock() - defer trackedSessionsMutex.Unlock() - for _, session := range trackedSessions { - session.Interrupt() - } -} diff --git a/vendor/github.com/onsi/gomega/gexec/session_test.go b/vendor/github.com/onsi/gomega/gexec/session_test.go deleted file mode 100644 index b7841a0..0000000 --- a/vendor/github.com/onsi/gomega/gexec/session_test.go +++ /dev/null @@ -1,351 +0,0 @@ -package gexec_test - -import ( - "os/exec" - "syscall" - "time" - - . "github.com/onsi/gomega/gbytes" - . "github.com/onsi/gomega/gexec" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("Session", func() { - var command *exec.Cmd - var session *Session - - var outWriter, errWriter *Buffer - - BeforeEach(func() { - outWriter = nil - errWriter = nil - }) - - JustBeforeEach(func() { - command = exec.Command(fireflyPath) - var err error - session, err = Start(command, outWriter, errWriter) - Ω(err).ShouldNot(HaveOccurred()) - }) - - Context("running a command", func() { - It("should start the process", func() { - Ω(command.Process).ShouldNot(BeNil()) - }) - - It("should wrap the process's stdout and stderr with gbytes buffers", func(done Done) { - Eventually(session.Out).Should(Say("We've done the impossible, and that makes us mighty")) - Eventually(session.Err).Should(Say("Ah, curse your sudden but inevitable betrayal!")) - defer session.Out.CancelDetects() - - select { - case <-session.Out.Detect("Can we maybe vote on the whole murdering people issue"): - Eventually(session).Should(Exit(0)) - case <-session.Out.Detect("I swear by my pretty floral bonnet, I will end you."): - Eventually(session).Should(Exit(1)) - case <-session.Out.Detect("My work's illegal, but at least it's honest."): - Eventually(session).Should(Exit(2)) - } - - close(done) - }) - - It("should satisfy the gbytes.BufferProvider interface, passing Stdout", func() { - Eventually(session).Should(Say("We've done the impossible, and that makes us mighty")) - Eventually(session).Should(Exit()) - }) - }) - - Describe("providing the exit code", func() { - It("should provide the app's exit code", func() { - Ω(session.ExitCode()).Should(Equal(-1)) - - Eventually(session).Should(Exit()) - Ω(session.ExitCode()).Should(BeNumerically(">=", 0)) - Ω(session.ExitCode()).Should(BeNumerically("<", 3)) - }) - }) - - Describe("wait", func() { - It("should wait till the command exits", func() { - Ω(session.ExitCode()).Should(Equal(-1)) - Ω(session.Wait().ExitCode()).Should(BeNumerically(">=", 0)) - Ω(session.Wait().ExitCode()).Should(BeNumerically("<", 3)) - }) - }) - - Describe("exited", func() { - It("should close when the command exits", func() { - Eventually(session.Exited).Should(BeClosed()) - Ω(session.ExitCode()).ShouldNot(Equal(-1)) - }) - }) - - Describe("kill", func() { - It("should kill the command and don't wait for it to exit", func() { - session, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session.Kill() - Ω(session).ShouldNot(Exit(), "Should not exit immediately...") - Eventually(session).Should(Exit(128 + 9)) - }) - }) - - Describe("interrupt", func() { - It("should interrupt the command", func() { - session, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session.Interrupt() - Ω(session).ShouldNot(Exit(), "Should not exit immediately...") - Eventually(session).Should(Exit(128 + 2)) - }) - }) - - Describe("terminate", func() { - It("should terminate the command", func() { - session, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session.Terminate() - Ω(session).ShouldNot(Exit(), "Should not exit immediately...") - Eventually(session).Should(Exit(128 + 15)) - }) - }) - - Describe("signal", func() { - It("should send the signal to the command", func() { - session, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session.Signal(syscall.SIGABRT) - Ω(session).ShouldNot(Exit(), "Should not exit immediately...") - Eventually(session).Should(Exit(128 + 6)) - }) - }) - - Context("tracking sessions", func() { - BeforeEach(func() { - KillAndWait() - }) - - Describe("kill", func() { - It("should kill all the started sessions", func() { - session1, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session2, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session3, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - Kill() - - Eventually(session1).Should(Exit(128 + 9)) - Eventually(session2).Should(Exit(128 + 9)) - Eventually(session3).Should(Exit(128 + 9)) - }) - - It("should not wait for exit", func() { - session1, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - Kill() - Ω(session1).ShouldNot(Exit(), "Should not exit immediately...") - - Eventually(session1).Should(Exit(128 + 9)) - }) - - It("should not track unstarted sessions", func() { - _, err := Start(exec.Command("does not exist", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).Should(HaveOccurred()) - - session2, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session3, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - Kill() - - Eventually(session2).Should(Exit(128 + 9)) - Eventually(session3).Should(Exit(128 + 9)) - }) - - }) - - Describe("killAndWait", func() { - It("should kill all the started sessions and wait for them to finish", func() { - session1, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session2, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session3, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - KillAndWait() - Ω(session1).Should(Exit(128+9), "Should have exited") - Ω(session2).Should(Exit(128+9), "Should have exited") - Ω(session3).Should(Exit(128+9), "Should have exited") - }) - }) - - Describe("terminate", func() { - It("should terminate all the started sessions", func() { - session1, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session2, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session3, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - Terminate() - - Eventually(session1).Should(Exit(128 + 15)) - Eventually(session2).Should(Exit(128 + 15)) - Eventually(session3).Should(Exit(128 + 15)) - }) - - It("should not wait for exit", func() { - session1, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - Terminate() - - Ω(session1).ShouldNot(Exit(), "Should not exit immediately...") - }) - }) - - Describe("terminateAndWait", func() { - It("should terminate all the started sessions, and wait for them to exit", func() { - session1, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session2, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session3, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - TerminateAndWait() - - Ω(session1).Should(Exit(128+15), "Should have exited") - Ω(session2).Should(Exit(128+15), "Should have exited") - Ω(session3).Should(Exit(128+15), "Should have exited") - }) - }) - - Describe("signal", func() { - It("should signal all the started sessions", func() { - session1, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session2, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session3, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - Signal(syscall.SIGABRT) - - Eventually(session1).Should(Exit(128 + 6)) - Eventually(session2).Should(Exit(128 + 6)) - Eventually(session3).Should(Exit(128 + 6)) - }) - - It("should not wait", func() { - session1, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - Signal(syscall.SIGABRT) - - Ω(session1).ShouldNot(Exit(), "Should not exit immediately...") - }) - }) - - Describe("interrupt", func() { - It("should interrupt all the started sessions, and not wait", func() { - session1, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session2, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - session3, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - Interrupt() - - Eventually(session1).Should(Exit(128 + 2)) - Eventually(session2).Should(Exit(128 + 2)) - Eventually(session3).Should(Exit(128 + 2)) - }) - - It("should not wait", func() { - session1, err := Start(exec.Command("sleep", "10000000"), GinkgoWriter, GinkgoWriter) - Ω(err).ShouldNot(HaveOccurred()) - - Interrupt() - - Ω(session1).ShouldNot(Exit(), "Should not exit immediately...") - }) - }) - }) - - Context("when the command exits", func() { - It("should close the buffers", func() { - Eventually(session).Should(Exit()) - - Ω(session.Out.Closed()).Should(BeTrue()) - Ω(session.Err.Closed()).Should(BeTrue()) - - Ω(session.Out).Should(Say("We've done the impossible, and that makes us mighty")) - }) - - var So = It - - So("this means that eventually should short circuit", func() { - t := time.Now() - failures := InterceptGomegaFailures(func() { - Eventually(session).Should(Say("blah blah blah blah blah")) - }) - Ω(time.Since(t)).Should(BeNumerically("<=", 500*time.Millisecond)) - Ω(failures).Should(HaveLen(1)) - }) - }) - - Context("when wrapping out and err", func() { - BeforeEach(func() { - outWriter = NewBuffer() - errWriter = NewBuffer() - }) - - It("should route to both the provided writers and the gbytes buffers", func() { - Eventually(session.Out).Should(Say("We've done the impossible, and that makes us mighty")) - Eventually(session.Err).Should(Say("Ah, curse your sudden but inevitable betrayal!")) - - Ω(outWriter.Contents()).Should(ContainSubstring("We've done the impossible, and that makes us mighty")) - Ω(errWriter.Contents()).Should(ContainSubstring("Ah, curse your sudden but inevitable betrayal!")) - - Eventually(session).Should(Exit()) - - Ω(outWriter.Contents()).Should(Equal(session.Out.Contents())) - Ω(errWriter.Contents()).Should(Equal(session.Err.Contents())) - }) - }) - - Describe("when the command fails to start", func() { - It("should return an error", func() { - _, err := Start(exec.Command("agklsjdfas"), nil, nil) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/ghttp/handlers.go b/vendor/github.com/onsi/gomega/ghttp/handlers.go deleted file mode 100644 index 63ff691..0000000 --- a/vendor/github.com/onsi/gomega/ghttp/handlers.go +++ /dev/null @@ -1,313 +0,0 @@ -package ghttp - -import ( - "encoding/base64" - "encoding/json" - "fmt" - "io/ioutil" - "net/http" - "net/url" - "reflect" - - "github.com/golang/protobuf/proto" - . "github.com/onsi/gomega" - "github.com/onsi/gomega/types" -) - -//CombineHandler takes variadic list of handlers and produces one handler -//that calls each handler in order. -func CombineHandlers(handlers ...http.HandlerFunc) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - for _, handler := range handlers { - handler(w, req) - } - } -} - -//VerifyRequest returns a handler that verifies that a request uses the specified method to connect to the specified path -//You may also pass in an optional rawQuery string which is tested against the request's `req.URL.RawQuery` -// -//For path, you may pass in a string, in which case strict equality will be applied -//Alternatively you can pass in a matcher (ContainSubstring("/foo") and MatchRegexp("/foo/[a-f0-9]+") for example) -func VerifyRequest(method string, path interface{}, rawQuery ...string) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - Ω(req.Method).Should(Equal(method), "Method mismatch") - switch p := path.(type) { - case types.GomegaMatcher: - Ω(req.URL.Path).Should(p, "Path mismatch") - default: - Ω(req.URL.Path).Should(Equal(path), "Path mismatch") - } - if len(rawQuery) > 0 { - values, err := url.ParseQuery(rawQuery[0]) - Ω(err).ShouldNot(HaveOccurred(), "Expected RawQuery is malformed") - - Ω(req.URL.Query()).Should(Equal(values), "RawQuery mismatch") - } - } -} - -//VerifyContentType returns a handler that verifies that a request has a Content-Type header set to the -//specified value -func VerifyContentType(contentType string) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - Ω(req.Header.Get("Content-Type")).Should(Equal(contentType)) - } -} - -//VerifyBasicAuth returns a handler that verifies the request contains a BasicAuth Authorization header -//matching the passed in username and password -func VerifyBasicAuth(username string, password string) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - auth := req.Header.Get("Authorization") - Ω(auth).ShouldNot(Equal(""), "Authorization header must be specified") - - decoded, err := base64.StdEncoding.DecodeString(auth[6:]) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(string(decoded)).Should(Equal(fmt.Sprintf("%s:%s", username, password)), "Authorization mismatch") - } -} - -//VerifyHeader returns a handler that verifies the request contains the passed in headers. -//The passed in header keys are first canonicalized via http.CanonicalHeaderKey. -// -//The request must contain *all* the passed in headers, but it is allowed to have additional headers -//beyond the passed in set. -func VerifyHeader(header http.Header) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - for key, values := range header { - key = http.CanonicalHeaderKey(key) - Ω(req.Header[key]).Should(Equal(values), "Header mismatch for key: %s", key) - } - } -} - -//VerifyHeaderKV returns a handler that verifies the request contains a header matching the passed in key and values -//(recall that a `http.Header` is a mapping from string (key) to []string (values)) -//It is a convenience wrapper around `VerifyHeader` that allows you to avoid having to create an `http.Header` object. -func VerifyHeaderKV(key string, values ...string) http.HandlerFunc { - return VerifyHeader(http.Header{key: values}) -} - -//VerifyBody returns a handler that verifies that the body of the request matches the passed in byte array. -//It does this using Equal(). -func VerifyBody(expectedBody []byte) http.HandlerFunc { - return CombineHandlers( - func(w http.ResponseWriter, req *http.Request) { - body, err := ioutil.ReadAll(req.Body) - req.Body.Close() - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(Equal(expectedBody), "Body Mismatch") - }, - ) -} - -//VerifyJSON returns a handler that verifies that the body of the request is a valid JSON representation -//matching the passed in JSON string. It does this using Gomega's MatchJSON method -// -//VerifyJSON also verifies that the request's content type is application/json -func VerifyJSON(expectedJSON string) http.HandlerFunc { - return CombineHandlers( - VerifyContentType("application/json"), - func(w http.ResponseWriter, req *http.Request) { - body, err := ioutil.ReadAll(req.Body) - req.Body.Close() - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(MatchJSON(expectedJSON), "JSON Mismatch") - }, - ) -} - -//VerifyJSONRepresenting is similar to VerifyJSON. Instead of taking a JSON string, however, it -//takes an arbitrary JSON-encodable object and verifies that the requests's body is a JSON representation -//that matches the object -func VerifyJSONRepresenting(object interface{}) http.HandlerFunc { - data, err := json.Marshal(object) - Ω(err).ShouldNot(HaveOccurred()) - return CombineHandlers( - VerifyContentType("application/json"), - VerifyJSON(string(data)), - ) -} - -//VerifyForm returns a handler that verifies a request contains the specified form values. -// -//The request must contain *all* of the specified values, but it is allowed to have additional -//form values beyond the passed in set. -func VerifyForm(values url.Values) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - err := r.ParseForm() - Ω(err).ShouldNot(HaveOccurred()) - for key, vals := range values { - Ω(r.Form[key]).Should(Equal(vals), "Form mismatch for key: %s", key) - } - } -} - -//VerifyFormKV returns a handler that verifies a request contains a form key with the specified values. -// -//It is a convenience wrapper around `VerifyForm` that lets you avoid having to create a `url.Values` object. -func VerifyFormKV(key string, values ...string) http.HandlerFunc { - return VerifyForm(url.Values{key: values}) -} - -//VerifyProtoRepresenting returns a handler that verifies that the body of the request is a valid protobuf -//representation of the passed message. -// -//VerifyProtoRepresenting also verifies that the request's content type is application/x-protobuf -func VerifyProtoRepresenting(expected proto.Message) http.HandlerFunc { - return CombineHandlers( - VerifyContentType("application/x-protobuf"), - func(w http.ResponseWriter, req *http.Request) { - body, err := ioutil.ReadAll(req.Body) - Ω(err).ShouldNot(HaveOccurred()) - req.Body.Close() - - expectedType := reflect.TypeOf(expected) - actualValuePtr := reflect.New(expectedType.Elem()) - - actual, ok := actualValuePtr.Interface().(proto.Message) - Ω(ok).Should(BeTrue(), "Message value is not a proto.Message") - - err = proto.Unmarshal(body, actual) - Ω(err).ShouldNot(HaveOccurred(), "Failed to unmarshal protobuf") - - Ω(actual).Should(Equal(expected), "ProtoBuf Mismatch") - }, - ) -} - -func copyHeader(src http.Header, dst http.Header) { - for key, value := range src { - dst[key] = value - } -} - -/* -RespondWith returns a handler that responds to a request with the specified status code and body - -Body may be a string or []byte - -Also, RespondWith can be given an optional http.Header. The headers defined therein will be added to the response headers. -*/ -func RespondWith(statusCode int, body interface{}, optionalHeader ...http.Header) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - if len(optionalHeader) == 1 { - copyHeader(optionalHeader[0], w.Header()) - } - w.WriteHeader(statusCode) - switch x := body.(type) { - case string: - w.Write([]byte(x)) - case []byte: - w.Write(x) - default: - Ω(body).Should(BeNil(), "Invalid type for body. Should be string or []byte.") - } - } -} - -/* -RespondWithPtr returns a handler that responds to a request with the specified status code and body - -Unlike RespondWith, you pass RepondWithPtr a pointer to the status code and body allowing different tests -to share the same setup but specify different status codes and bodies. - -Also, RespondWithPtr can be given an optional http.Header. The headers defined therein will be added to the response headers. -Since the http.Header can be mutated after the fact you don't need to pass in a pointer. -*/ -func RespondWithPtr(statusCode *int, body interface{}, optionalHeader ...http.Header) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - if len(optionalHeader) == 1 { - copyHeader(optionalHeader[0], w.Header()) - } - w.WriteHeader(*statusCode) - if body != nil { - switch x := (body).(type) { - case *string: - w.Write([]byte(*x)) - case *[]byte: - w.Write(*x) - default: - Ω(body).Should(BeNil(), "Invalid type for body. Should be string or []byte.") - } - } - } -} - -/* -RespondWithJSONEncoded returns a handler that responds to a request with the specified status code and a body -containing the JSON-encoding of the passed in object - -Also, RespondWithJSONEncoded can be given an optional http.Header. The headers defined therein will be added to the response headers. -*/ -func RespondWithJSONEncoded(statusCode int, object interface{}, optionalHeader ...http.Header) http.HandlerFunc { - data, err := json.Marshal(object) - Ω(err).ShouldNot(HaveOccurred()) - - var headers http.Header - if len(optionalHeader) == 1 { - headers = optionalHeader[0] - } else { - headers = make(http.Header) - } - if _, found := headers["Content-Type"]; !found { - headers["Content-Type"] = []string{"application/json"} - } - return RespondWith(statusCode, string(data), headers) -} - -/* -RespondWithJSONEncodedPtr behaves like RespondWithJSONEncoded but takes a pointer -to a status code and object. - -This allows different tests to share the same setup but specify different status codes and JSON-encoded -objects. - -Also, RespondWithJSONEncodedPtr can be given an optional http.Header. The headers defined therein will be added to the response headers. -Since the http.Header can be mutated after the fact you don't need to pass in a pointer. -*/ -func RespondWithJSONEncodedPtr(statusCode *int, object interface{}, optionalHeader ...http.Header) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - data, err := json.Marshal(object) - Ω(err).ShouldNot(HaveOccurred()) - var headers http.Header - if len(optionalHeader) == 1 { - headers = optionalHeader[0] - } else { - headers = make(http.Header) - } - if _, found := headers["Content-Type"]; !found { - headers["Content-Type"] = []string{"application/json"} - } - copyHeader(headers, w.Header()) - w.WriteHeader(*statusCode) - w.Write(data) - } -} - -//RespondWithProto returns a handler that responds to a request with the specified status code and a body -//containing the protobuf serialization of the provided message. -// -//Also, RespondWithProto can be given an optional http.Header. The headers defined therein will be added to the response headers. -func RespondWithProto(statusCode int, message proto.Message, optionalHeader ...http.Header) http.HandlerFunc { - return func(w http.ResponseWriter, req *http.Request) { - data, err := proto.Marshal(message) - Ω(err).ShouldNot(HaveOccurred()) - - var headers http.Header - if len(optionalHeader) == 1 { - headers = optionalHeader[0] - } else { - headers = make(http.Header) - } - if _, found := headers["Content-Type"]; !found { - headers["Content-Type"] = []string{"application/x-protobuf"} - } - copyHeader(headers, w.Header()) - - w.WriteHeader(statusCode) - w.Write(data) - } -} diff --git a/vendor/github.com/onsi/gomega/ghttp/protobuf/protobuf.go b/vendor/github.com/onsi/gomega/ghttp/protobuf/protobuf.go deleted file mode 100644 index b2972bc..0000000 --- a/vendor/github.com/onsi/gomega/ghttp/protobuf/protobuf.go +++ /dev/null @@ -1,3 +0,0 @@ -package protobuf - -//go:generate protoc --go_out=. simple_message.proto diff --git a/vendor/github.com/onsi/gomega/ghttp/protobuf/simple_message.pb.go b/vendor/github.com/onsi/gomega/ghttp/protobuf/simple_message.pb.go deleted file mode 100644 index c55a484..0000000 --- a/vendor/github.com/onsi/gomega/ghttp/protobuf/simple_message.pb.go +++ /dev/null @@ -1,55 +0,0 @@ -// Code generated by protoc-gen-go. -// source: simple_message.proto -// DO NOT EDIT! - -/* -Package protobuf is a generated protocol buffer package. - -It is generated from these files: - simple_message.proto - -It has these top-level messages: - SimpleMessage -*/ -package protobuf - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -type SimpleMessage struct { - Description *string `protobuf:"bytes,1,req,name=description" json:"description,omitempty"` - Id *int32 `protobuf:"varint,2,req,name=id" json:"id,omitempty"` - Metadata *string `protobuf:"bytes,3,opt,name=metadata" json:"metadata,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *SimpleMessage) Reset() { *m = SimpleMessage{} } -func (m *SimpleMessage) String() string { return proto.CompactTextString(m) } -func (*SimpleMessage) ProtoMessage() {} - -func (m *SimpleMessage) GetDescription() string { - if m != nil && m.Description != nil { - return *m.Description - } - return "" -} - -func (m *SimpleMessage) GetId() int32 { - if m != nil && m.Id != nil { - return *m.Id - } - return 0 -} - -func (m *SimpleMessage) GetMetadata() string { - if m != nil && m.Metadata != nil { - return *m.Metadata - } - return "" -} diff --git a/vendor/github.com/onsi/gomega/ghttp/protobuf/simple_message.proto b/vendor/github.com/onsi/gomega/ghttp/protobuf/simple_message.proto deleted file mode 100644 index 35b7145..0000000 --- a/vendor/github.com/onsi/gomega/ghttp/protobuf/simple_message.proto +++ /dev/null @@ -1,9 +0,0 @@ -syntax = "proto2"; - -package protobuf; - -message SimpleMessage { - required string description = 1; - required int32 id = 2; - optional string metadata = 3; -} diff --git a/vendor/github.com/onsi/gomega/ghttp/test_server.go b/vendor/github.com/onsi/gomega/ghttp/test_server.go deleted file mode 100644 index 40d92de..0000000 --- a/vendor/github.com/onsi/gomega/ghttp/test_server.go +++ /dev/null @@ -1,381 +0,0 @@ -/* -Package ghttp supports testing HTTP clients by providing a test server (simply a thin wrapper around httptest's server) that supports -registering multiple handlers. Incoming requests are not routed between the different handlers -- rather it is merely the order of the handlers that matters. The first request is handled by the first -registered handler, the second request by the second handler, etc. - -The intent here is to have each handler *verify* that the incoming request is valid. To accomplish, ghttp -also provides a collection of bite-size handlers that each perform one aspect of request verification. These can -be composed together and registered with a ghttp server. The result is an expressive language for describing -the requests generated by the client under test. - -Here's a simple example, note that the server handler is only defined in one BeforeEach and then modified, as required, by the nested BeforeEaches. -A more comprehensive example is available at https://onsi.github.io/gomega/#_testing_http_clients - - var _ = Describe("A Sprockets Client", func() { - var server *ghttp.Server - var client *SprocketClient - BeforeEach(func() { - server = ghttp.NewServer() - client = NewSprocketClient(server.URL(), "skywalker", "tk427") - }) - - AfterEach(func() { - server.Close() - }) - - Describe("fetching sprockets", func() { - var statusCode int - var sprockets []Sprocket - BeforeEach(func() { - statusCode = http.StatusOK - sprockets = []Sprocket{} - server.AppendHandlers(ghttp.CombineHandlers( - ghttp.VerifyRequest("GET", "/sprockets"), - ghttp.VerifyBasicAuth("skywalker", "tk427"), - ghttp.RespondWithJSONEncodedPtr(&statusCode, &sprockets), - )) - }) - - Context("when requesting all sprockets", func() { - Context("when the response is succesful", func() { - BeforeEach(func() { - sprockets = []Sprocket{ - NewSprocket("Alfalfa"), - NewSprocket("Banana"), - } - }) - - It("should return the returned sprockets", func() { - Ω(client.Sprockets()).Should(Equal(sprockets)) - }) - }) - - Context("when the response is missing", func() { - BeforeEach(func() { - statusCode = http.StatusNotFound - }) - - It("should return an empty list of sprockets", func() { - Ω(client.Sprockets()).Should(BeEmpty()) - }) - }) - - Context("when the response fails to authenticate", func() { - BeforeEach(func() { - statusCode = http.StatusUnauthorized - }) - - It("should return an AuthenticationError error", func() { - sprockets, err := client.Sprockets() - Ω(sprockets).Should(BeEmpty()) - Ω(err).Should(MatchError(AuthenticationError)) - }) - }) - - Context("when the response is a server failure", func() { - BeforeEach(func() { - statusCode = http.StatusInternalServerError - }) - - It("should return an InternalError error", func() { - sprockets, err := client.Sprockets() - Ω(sprockets).Should(BeEmpty()) - Ω(err).Should(MatchError(InternalError)) - }) - }) - }) - - Context("when requesting some sprockets", func() { - BeforeEach(func() { - sprockets = []Sprocket{ - NewSprocket("Alfalfa"), - NewSprocket("Banana"), - } - - server.WrapHandler(0, ghttp.VerifyRequest("GET", "/sprockets", "filter=FOOD")) - }) - - It("should make the request with a filter", func() { - Ω(client.Sprockets("food")).Should(Equal(sprockets)) - }) - }) - }) - }) -*/ -package ghttp - -import ( - "fmt" - "io" - "io/ioutil" - "net/http" - "net/http/httptest" - "reflect" - "regexp" - "strings" - "sync" - - . "github.com/onsi/gomega" -) - -func new() *Server { - return &Server{ - AllowUnhandledRequests: false, - UnhandledRequestStatusCode: http.StatusInternalServerError, - writeLock: &sync.Mutex{}, - } -} - -type routedHandler struct { - method string - pathRegexp *regexp.Regexp - path string - handler http.HandlerFunc -} - -// NewServer returns a new `*ghttp.Server` that wraps an `httptest` server. The server is started automatically. -func NewServer() *Server { - s := new() - s.HTTPTestServer = httptest.NewServer(s) - return s -} - -// NewUnstartedServer return a new, unstarted, `*ghttp.Server`. Useful for specifying a custom listener on `server.HTTPTestServer`. -func NewUnstartedServer() *Server { - s := new() - s.HTTPTestServer = httptest.NewUnstartedServer(s) - return s -} - -// NewTLSServer returns a new `*ghttp.Server` that wraps an `httptest` TLS server. The server is started automatically. -func NewTLSServer() *Server { - s := new() - s.HTTPTestServer = httptest.NewTLSServer(s) - return s -} - -type Server struct { - //The underlying httptest server - HTTPTestServer *httptest.Server - - //Defaults to false. If set to true, the Server will allow more requests than there are registered handlers. - AllowUnhandledRequests bool - - //The status code returned when receiving an unhandled request. - //Defaults to http.StatusInternalServerError. - //Only applies if AllowUnhandledRequests is true - UnhandledRequestStatusCode int - - //If provided, ghttp will log about each request received to the provided io.Writer - //Defaults to nil - //If you're using Ginkgo, set this to GinkgoWriter to get improved output during failures - Writer io.Writer - - receivedRequests []*http.Request - requestHandlers []http.HandlerFunc - routedHandlers []routedHandler - - writeLock *sync.Mutex - calls int -} - -//Start() starts an unstarted ghttp server. It is a catastrophic error to call Start more than once (thanks, httptest). -func (s *Server) Start() { - s.HTTPTestServer.Start() -} - -//URL() returns a url that will hit the server -func (s *Server) URL() string { - return s.HTTPTestServer.URL -} - -//Addr() returns the address on which the server is listening. -func (s *Server) Addr() string { - return s.HTTPTestServer.Listener.Addr().String() -} - -//Close() should be called at the end of each test. It spins down and cleans up the test server. -func (s *Server) Close() { - s.writeLock.Lock() - server := s.HTTPTestServer - s.HTTPTestServer = nil - s.writeLock.Unlock() - - if server != nil { - server.Close() - } -} - -//ServeHTTP() makes Server an http.Handler -//When the server receives a request it handles the request in the following order: -// -//1. If the request matches a handler registered with RouteToHandler, that handler is called. -//2. Otherwise, if there are handlers registered via AppendHandlers, those handlers are called in order. -//3. If all registered handlers have been called then: -// a) If AllowUnhandledRequests is true, the request will be handled with response code of UnhandledRequestStatusCode -// b) If AllowUnhandledRequests is false, the request will not be handled and the current test will be marked as failed. -func (s *Server) ServeHTTP(w http.ResponseWriter, req *http.Request) { - s.writeLock.Lock() - defer func() { - e := recover() - if e != nil { - w.WriteHeader(http.StatusInternalServerError) - } - - //If the handler panics GHTTP will silently succeed. This is bad™. - //To catch this case we need to fail the test if the handler has panicked. - //However, if the handler is panicking because Ginkgo's causing it to panic (i.e. an assertion failed) - //then we shouldn't double-report the error as this will confuse people. - - //So: step 1, if this is a Ginkgo panic - do nothing, Ginkgo's aware of the failure - eAsString, ok := e.(string) - if ok && strings.Contains(eAsString, "defer GinkgoRecover()") { - return - } - - //If we're here, we have to do step 2: assert that the error is nil. This assertion will - //allow us to fail the test suite (note: we can't call Fail since Gomega is not allowed to import Ginkgo). - //Since a failed assertion throws a panic, and we are likely in a goroutine, we need to defer within our defer! - defer func() { - recover() - }() - Ω(e).Should(BeNil(), "Handler Panicked") - }() - - if s.Writer != nil { - s.Writer.Write([]byte(fmt.Sprintf("GHTTP Received Request: %s - %s\n", req.Method, req.URL))) - } - - s.receivedRequests = append(s.receivedRequests, req) - if routedHandler, ok := s.handlerForRoute(req.Method, req.URL.Path); ok { - s.writeLock.Unlock() - routedHandler(w, req) - } else if s.calls < len(s.requestHandlers) { - h := s.requestHandlers[s.calls] - s.calls++ - s.writeLock.Unlock() - h(w, req) - } else { - s.writeLock.Unlock() - if s.AllowUnhandledRequests { - ioutil.ReadAll(req.Body) - req.Body.Close() - w.WriteHeader(s.UnhandledRequestStatusCode) - } else { - Ω(req).Should(BeNil(), "Received Unhandled Request") - } - } -} - -//ReceivedRequests is an array containing all requests received by the server (both handled and unhandled requests) -func (s *Server) ReceivedRequests() []*http.Request { - s.writeLock.Lock() - defer s.writeLock.Unlock() - - return s.receivedRequests -} - -//RouteToHandler can be used to register handlers that will always handle requests that match -//the passed in method and path. -// -//The path may be either a string object or a *regexp.Regexp. -func (s *Server) RouteToHandler(method string, path interface{}, handler http.HandlerFunc) { - s.writeLock.Lock() - defer s.writeLock.Unlock() - - rh := routedHandler{ - method: method, - handler: handler, - } - - switch p := path.(type) { - case *regexp.Regexp: - rh.pathRegexp = p - case string: - rh.path = p - default: - panic("path must be a string or a regular expression") - } - - for i, existingRH := range s.routedHandlers { - if existingRH.method == method && - reflect.DeepEqual(existingRH.pathRegexp, rh.pathRegexp) && - existingRH.path == rh.path { - s.routedHandlers[i] = rh - return - } - } - s.routedHandlers = append(s.routedHandlers, rh) -} - -func (s *Server) handlerForRoute(method string, path string) (http.HandlerFunc, bool) { - for _, rh := range s.routedHandlers { - if rh.method == method { - if rh.pathRegexp != nil { - if rh.pathRegexp.Match([]byte(path)) { - return rh.handler, true - } - } else if rh.path == path { - return rh.handler, true - } - } - } - - return nil, false -} - -//AppendHandlers will appends http.HandlerFuncs to the server's list of registered handlers. The first incoming request is handled by the first handler, the second by the second, etc... -func (s *Server) AppendHandlers(handlers ...http.HandlerFunc) { - s.writeLock.Lock() - defer s.writeLock.Unlock() - - s.requestHandlers = append(s.requestHandlers, handlers...) -} - -//SetHandler overrides the registered handler at the passed in index with the passed in handler -//This is useful, for example, when a server has been set up in a shared context, but must be tweaked -//for a particular test. -func (s *Server) SetHandler(index int, handler http.HandlerFunc) { - s.writeLock.Lock() - defer s.writeLock.Unlock() - - s.requestHandlers[index] = handler -} - -//GetHandler returns the handler registered at the passed in index. -func (s *Server) GetHandler(index int) http.HandlerFunc { - s.writeLock.Lock() - defer s.writeLock.Unlock() - - return s.requestHandlers[index] -} - -func (s *Server) Reset() { - s.writeLock.Lock() - defer s.writeLock.Unlock() - - s.HTTPTestServer.CloseClientConnections() - s.calls = 0 - s.receivedRequests = nil - s.requestHandlers = nil - s.routedHandlers = nil -} - -//WrapHandler combines the passed in handler with the handler registered at the passed in index. -//This is useful, for example, when a server has been set up in a shared context but must be tweaked -//for a particular test. -// -//If the currently registered handler is A, and the new passed in handler is B then -//WrapHandler will generate a new handler that first calls A, then calls B, and assign it to index -func (s *Server) WrapHandler(index int, handler http.HandlerFunc) { - existingHandler := s.GetHandler(index) - s.SetHandler(index, CombineHandlers(existingHandler, handler)) -} - -func (s *Server) CloseClientConnections() { - s.writeLock.Lock() - defer s.writeLock.Unlock() - - s.HTTPTestServer.CloseClientConnections() -} diff --git a/vendor/github.com/onsi/gomega/ghttp/test_server_suite_test.go b/vendor/github.com/onsi/gomega/ghttp/test_server_suite_test.go deleted file mode 100644 index 7c12360..0000000 --- a/vendor/github.com/onsi/gomega/ghttp/test_server_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package ghttp_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestGHTTP(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "GHTTP Suite") -} diff --git a/vendor/github.com/onsi/gomega/ghttp/test_server_test.go b/vendor/github.com/onsi/gomega/ghttp/test_server_test.go deleted file mode 100644 index 88b3246..0000000 --- a/vendor/github.com/onsi/gomega/ghttp/test_server_test.go +++ /dev/null @@ -1,1089 +0,0 @@ -package ghttp_test - -import ( - "bytes" - "io" - "io/ioutil" - "net/http" - "net/url" - "regexp" - - "github.com/golang/protobuf/proto" - "github.com/onsi/gomega/gbytes" - "github.com/onsi/gomega/ghttp/protobuf" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/ghttp" -) - -var _ = Describe("TestServer", func() { - var ( - resp *http.Response - err error - s *Server - ) - - BeforeEach(func() { - s = NewServer() - }) - - AfterEach(func() { - s.Close() - }) - - Describe("Resetting the server", func() { - BeforeEach(func() { - s.RouteToHandler("GET", "/", func(w http.ResponseWriter, req *http.Request) {}) - s.AppendHandlers(func(w http.ResponseWriter, req *http.Request) {}) - http.Get(s.URL() + "/") - - Ω(s.ReceivedRequests()).Should(HaveLen(1)) - }) - - It("clears all handlers and call counts", func() { - s.Reset() - Ω(s.ReceivedRequests()).Should(HaveLen(0)) - Ω(func() { s.GetHandler(0) }).Should(Panic()) - }) - }) - - Describe("closing client connections", func() { - It("closes", func() { - s.RouteToHandler("GET", "/", - func(w http.ResponseWriter, req *http.Request) { - io.WriteString(w, req.RemoteAddr) - }, - ) - client := http.Client{Transport: &http.Transport{DisableKeepAlives: true}} - resp, err := client.Get(s.URL()) - Ω(err).ShouldNot(HaveOccurred()) - Ω(resp.StatusCode).Should(Equal(200)) - - body, err := ioutil.ReadAll(resp.Body) - resp.Body.Close() - Ω(err).ShouldNot(HaveOccurred()) - - s.CloseClientConnections() - - resp, err = client.Get(s.URL()) - Ω(err).ShouldNot(HaveOccurred()) - Ω(resp.StatusCode).Should(Equal(200)) - - body2, err := ioutil.ReadAll(resp.Body) - resp.Body.Close() - Ω(err).ShouldNot(HaveOccurred()) - - Ω(body2).ShouldNot(Equal(body)) - }) - }) - - Describe("closing server mulitple times", func() { - It("should not fail", func() { - s.Close() - Ω(s.Close).ShouldNot(Panic()) - }) - }) - - Describe("allowing unhandled requests", func() { - Context("when true", func() { - BeforeEach(func() { - s.AllowUnhandledRequests = true - s.UnhandledRequestStatusCode = http.StatusForbidden - resp, err = http.Get(s.URL() + "/foo") - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should allow unhandled requests and respond with the passed in status code", func() { - Ω(err).ShouldNot(HaveOccurred()) - Ω(resp.StatusCode).Should(Equal(http.StatusForbidden)) - - data, err := ioutil.ReadAll(resp.Body) - Ω(err).ShouldNot(HaveOccurred()) - Ω(data).Should(BeEmpty()) - }) - - It("should record the requests", func() { - Ω(s.ReceivedRequests()).Should(HaveLen(1)) - Ω(s.ReceivedRequests()[0].URL.Path).Should(Equal("/foo")) - }) - }) - - Context("when false", func() { - It("should fail when attempting a request", func() { - failures := InterceptGomegaFailures(func() { - http.Get(s.URL() + "/foo") - }) - - Ω(failures[0]).Should(ContainSubstring("Received Unhandled Request")) - }) - }) - }) - - Describe("Managing Handlers", func() { - var called []string - BeforeEach(func() { - called = []string{} - s.RouteToHandler("GET", "/routed", func(w http.ResponseWriter, req *http.Request) { - called = append(called, "r1") - }) - s.RouteToHandler("POST", regexp.MustCompile(`/routed\d`), func(w http.ResponseWriter, req *http.Request) { - called = append(called, "r2") - }) - s.AppendHandlers(func(w http.ResponseWriter, req *http.Request) { - called = append(called, "A") - }, func(w http.ResponseWriter, req *http.Request) { - called = append(called, "B") - }) - }) - - It("should prefer routed handlers if there is a match", func() { - http.Get(s.URL() + "/routed") - http.Post(s.URL()+"/routed7", "application/json", nil) - http.Get(s.URL() + "/foo") - http.Get(s.URL() + "/routed") - http.Post(s.URL()+"/routed9", "application/json", nil) - http.Get(s.URL() + "/bar") - - failures := InterceptGomegaFailures(func() { - http.Get(s.URL() + "/foo") - http.Get(s.URL() + "/routed/not/a/match") - http.Get(s.URL() + "/routed7") - http.Post(s.URL()+"/routed", "application/json", nil) - }) - - Ω(failures[0]).Should(ContainSubstring("Received Unhandled Request")) - Ω(failures).Should(HaveLen(4)) - - http.Post(s.URL()+"/routed3", "application/json", nil) - - Ω(called).Should(Equal([]string{"r1", "r2", "A", "r1", "r2", "B", "r2"})) - }) - - It("should override routed handlers when reregistered", func() { - s.RouteToHandler("GET", "/routed", func(w http.ResponseWriter, req *http.Request) { - called = append(called, "r3") - }) - s.RouteToHandler("POST", regexp.MustCompile(`/routed\d`), func(w http.ResponseWriter, req *http.Request) { - called = append(called, "r4") - }) - - http.Get(s.URL() + "/routed") - http.Post(s.URL()+"/routed7", "application/json", nil) - - Ω(called).Should(Equal([]string{"r3", "r4"})) - }) - - It("should call the appended handlers, in order, as requests come in", func() { - http.Get(s.URL() + "/foo") - Ω(called).Should(Equal([]string{"A"})) - - http.Get(s.URL() + "/foo") - Ω(called).Should(Equal([]string{"A", "B"})) - - failures := InterceptGomegaFailures(func() { - http.Get(s.URL() + "/foo") - }) - - Ω(failures[0]).Should(ContainSubstring("Received Unhandled Request")) - }) - - Describe("Overwriting an existing handler", func() { - BeforeEach(func() { - s.SetHandler(0, func(w http.ResponseWriter, req *http.Request) { - called = append(called, "C") - }) - }) - - It("should override the specified handler", func() { - http.Get(s.URL() + "/foo") - http.Get(s.URL() + "/foo") - Ω(called).Should(Equal([]string{"C", "B"})) - }) - }) - - Describe("Getting an existing handler", func() { - It("should return the handler func", func() { - s.GetHandler(1)(nil, nil) - Ω(called).Should(Equal([]string{"B"})) - }) - }) - - Describe("Wrapping an existing handler", func() { - BeforeEach(func() { - s.WrapHandler(0, func(w http.ResponseWriter, req *http.Request) { - called = append(called, "C") - }) - }) - - It("should wrap the existing handler in a new handler", func() { - http.Get(s.URL() + "/foo") - http.Get(s.URL() + "/foo") - Ω(called).Should(Equal([]string{"A", "C", "B"})) - }) - }) - }) - - Describe("When a handler fails", func() { - BeforeEach(func() { - s.UnhandledRequestStatusCode = http.StatusForbidden //just to be clear that 500s aren't coming from unhandled requests - }) - - Context("because the handler has panicked", func() { - BeforeEach(func() { - s.AppendHandlers(func(w http.ResponseWriter, req *http.Request) { - panic("bam") - }) - }) - - It("should respond with a 500 and make a failing assertion", func() { - var resp *http.Response - var err error - - failures := InterceptGomegaFailures(func() { - resp, err = http.Get(s.URL()) - }) - - Ω(err).ShouldNot(HaveOccurred()) - Ω(resp.StatusCode).Should(Equal(http.StatusInternalServerError)) - Ω(failures).Should(ConsistOf(ContainSubstring("Handler Panicked"))) - }) - }) - - Context("because an assertion has failed", func() { - BeforeEach(func() { - s.AppendHandlers(func(w http.ResponseWriter, req *http.Request) { - // Ω(true).Should(BeFalse()) <-- would be nice to do it this way, but the test just can't be written this way - - By("We're cheating a bit here -- we're throwing a GINKGO_PANIC which simulates a failed assertion") - panic(GINKGO_PANIC) - }) - }) - - It("should respond with a 500 and *not* make a failing assertion, instead relying on Ginkgo to have already been notified of the error", func() { - resp, err := http.Get(s.URL()) - - Ω(err).ShouldNot(HaveOccurred()) - Ω(resp.StatusCode).Should(Equal(http.StatusInternalServerError)) - }) - }) - }) - - Describe("Logging to the Writer", func() { - var buf *gbytes.Buffer - BeforeEach(func() { - buf = gbytes.NewBuffer() - s.Writer = buf - s.AppendHandlers(func(w http.ResponseWriter, req *http.Request) {}) - s.AppendHandlers(func(w http.ResponseWriter, req *http.Request) {}) - }) - - It("should write to the buffer when a request comes in", func() { - http.Get(s.URL() + "/foo") - Ω(buf).Should(gbytes.Say("GHTTP Received Request: GET - /foo\n")) - - http.Post(s.URL()+"/bar", "", nil) - Ω(buf).Should(gbytes.Say("GHTTP Received Request: POST - /bar\n")) - }) - }) - - Describe("Request Handlers", func() { - Describe("VerifyRequest", func() { - BeforeEach(func() { - s.AppendHandlers(VerifyRequest("GET", "/foo")) - }) - - It("should verify the method, path", func() { - resp, err = http.Get(s.URL() + "/foo?baz=bar") - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should verify the method, path", func() { - failures := InterceptGomegaFailures(func() { - http.Get(s.URL() + "/foo2") - }) - Ω(failures).Should(HaveLen(1)) - }) - - It("should verify the method, path", func() { - failures := InterceptGomegaFailures(func() { - http.Post(s.URL()+"/foo", "application/json", nil) - }) - Ω(failures).Should(HaveLen(1)) - }) - - Context("when passed a rawQuery", func() { - It("should also be possible to verify the rawQuery", func() { - s.SetHandler(0, VerifyRequest("GET", "/foo", "baz=bar")) - resp, err = http.Get(s.URL() + "/foo?baz=bar") - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should match irregardless of query parameter ordering", func() { - s.SetHandler(0, VerifyRequest("GET", "/foo", "type=get&name=money")) - u, _ := url.Parse(s.URL() + "/foo") - u.RawQuery = url.Values{ - "type": []string{"get"}, - "name": []string{"money"}, - }.Encode() - - resp, err = http.Get(u.String()) - Ω(err).ShouldNot(HaveOccurred()) - }) - }) - - Context("when passed a matcher for path", func() { - It("should apply the matcher", func() { - s.SetHandler(0, VerifyRequest("GET", MatchRegexp(`/foo/[a-f]*/3`))) - resp, err = http.Get(s.URL() + "/foo/abcdefa/3") - Ω(err).ShouldNot(HaveOccurred()) - }) - }) - }) - - Describe("VerifyContentType", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("GET", "/foo"), - VerifyContentType("application/octet-stream"), - )) - }) - - It("should verify the content type", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - req.Header.Set("Content-Type", "application/octet-stream") - - resp, err = http.DefaultClient.Do(req) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should verify the content type", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - req.Header.Set("Content-Type", "application/json") - - failures := InterceptGomegaFailures(func() { - http.DefaultClient.Do(req) - }) - Ω(failures).Should(HaveLen(1)) - }) - }) - - Describe("Verify BasicAuth", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("GET", "/foo"), - VerifyBasicAuth("bob", "password"), - )) - }) - - It("should verify basic auth", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - req.SetBasicAuth("bob", "password") - - resp, err = http.DefaultClient.Do(req) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should verify basic auth", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - req.SetBasicAuth("bob", "bassword") - - failures := InterceptGomegaFailures(func() { - http.DefaultClient.Do(req) - }) - Ω(failures).Should(HaveLen(1)) - }) - - It("should require basic auth header", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - - failures := InterceptGomegaFailures(func() { - http.DefaultClient.Do(req) - }) - Ω(failures).Should(ContainElement(ContainSubstring("Authorization header must be specified"))) - }) - }) - - Describe("VerifyHeader", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("GET", "/foo"), - VerifyHeader(http.Header{ - "accept": []string{"jpeg", "png"}, - "cache-control": []string{"omicron"}, - "Return-Path": []string{"hobbiton"}, - }), - )) - }) - - It("should verify the headers", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - req.Header.Add("Accept", "jpeg") - req.Header.Add("Accept", "png") - req.Header.Add("Cache-Control", "omicron") - req.Header.Add("return-path", "hobbiton") - - resp, err = http.DefaultClient.Do(req) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should verify the headers", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - req.Header.Add("Schmaccept", "jpeg") - req.Header.Add("Schmaccept", "png") - req.Header.Add("Cache-Control", "omicron") - req.Header.Add("return-path", "hobbiton") - - failures := InterceptGomegaFailures(func() { - http.DefaultClient.Do(req) - }) - Ω(failures).Should(HaveLen(1)) - }) - }) - - Describe("VerifyHeaderKV", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("GET", "/foo"), - VerifyHeaderKV("accept", "jpeg", "png"), - VerifyHeaderKV("cache-control", "omicron"), - VerifyHeaderKV("Return-Path", "hobbiton"), - )) - }) - - It("should verify the headers", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - req.Header.Add("Accept", "jpeg") - req.Header.Add("Accept", "png") - req.Header.Add("Cache-Control", "omicron") - req.Header.Add("return-path", "hobbiton") - - resp, err = http.DefaultClient.Do(req) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should verify the headers", func() { - req, err := http.NewRequest("GET", s.URL()+"/foo", nil) - Ω(err).ShouldNot(HaveOccurred()) - req.Header.Add("Accept", "jpeg") - req.Header.Add("Cache-Control", "omicron") - req.Header.Add("return-path", "hobbiton") - - failures := InterceptGomegaFailures(func() { - http.DefaultClient.Do(req) - }) - Ω(failures).Should(HaveLen(1)) - }) - }) - - Describe("VerifyBody", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - VerifyBody([]byte("some body")), - )) - }) - - It("should verify the body", func() { - resp, err = http.Post(s.URL()+"/foo", "", bytes.NewReader([]byte("some body"))) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should verify the body", func() { - failures := InterceptGomegaFailures(func() { - http.Post(s.URL()+"/foo", "", bytes.NewReader([]byte("wrong body"))) - }) - Ω(failures).Should(HaveLen(1)) - }) - }) - - Describe("VerifyJSON", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - VerifyJSON(`{"a":3, "b":2}`), - )) - }) - - It("should verify the json body and the content type", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", bytes.NewReader([]byte(`{"b":2, "a":3}`))) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should verify the json body and the content type", func() { - failures := InterceptGomegaFailures(func() { - http.Post(s.URL()+"/foo", "application/json", bytes.NewReader([]byte(`{"b":2, "a":4}`))) - }) - Ω(failures).Should(HaveLen(1)) - }) - - It("should verify the json body and the content type", func() { - failures := InterceptGomegaFailures(func() { - http.Post(s.URL()+"/foo", "application/not-json", bytes.NewReader([]byte(`{"b":2, "a":3}`))) - }) - Ω(failures).Should(HaveLen(1)) - }) - }) - - Describe("VerifyJSONRepresenting", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - VerifyJSONRepresenting([]int{1, 3, 5}), - )) - }) - - It("should verify the json body and the content type", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", bytes.NewReader([]byte(`[1,3,5]`))) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should verify the json body and the content type", func() { - failures := InterceptGomegaFailures(func() { - http.Post(s.URL()+"/foo", "application/json", bytes.NewReader([]byte(`[1,3]`))) - }) - Ω(failures).Should(HaveLen(1)) - }) - }) - - Describe("VerifyForm", func() { - var formValues url.Values - - BeforeEach(func() { - formValues = make(url.Values) - formValues.Add("users", "user1") - formValues.Add("users", "user2") - formValues.Add("group", "users") - }) - - Context("when encoded in the URL", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("GET", "/foo"), - VerifyForm(url.Values{ - "users": []string{"user1", "user2"}, - "group": []string{"users"}, - }), - )) - }) - - It("should verify form values", func() { - resp, err = http.Get(s.URL() + "/foo?" + formValues.Encode()) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should ignore extra values", func() { - formValues.Add("extra", "value") - resp, err = http.Get(s.URL() + "/foo?" + formValues.Encode()) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("fail on missing values", func() { - formValues.Del("group") - failures := InterceptGomegaFailures(func() { - resp, err = http.Get(s.URL() + "/foo?" + formValues.Encode()) - }) - Ω(failures).Should(HaveLen(1)) - }) - - It("fail on incorrect values", func() { - formValues.Set("group", "wheel") - failures := InterceptGomegaFailures(func() { - resp, err = http.Get(s.URL() + "/foo?" + formValues.Encode()) - }) - Ω(failures).Should(HaveLen(1)) - }) - }) - - Context("when present in the body", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - VerifyForm(url.Values{ - "users": []string{"user1", "user2"}, - "group": []string{"users"}, - }), - )) - }) - - It("should verify form values", func() { - resp, err = http.PostForm(s.URL()+"/foo", formValues) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should ignore extra values", func() { - formValues.Add("extra", "value") - resp, err = http.PostForm(s.URL()+"/foo", formValues) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("fail on missing values", func() { - formValues.Del("group") - failures := InterceptGomegaFailures(func() { - resp, err = http.PostForm(s.URL()+"/foo", formValues) - }) - Ω(failures).Should(HaveLen(1)) - }) - - It("fail on incorrect values", func() { - formValues.Set("group", "wheel") - failures := InterceptGomegaFailures(func() { - resp, err = http.PostForm(s.URL()+"/foo", formValues) - }) - Ω(failures).Should(HaveLen(1)) - }) - }) - }) - - Describe("VerifyFormKV", func() { - Context("when encoded in the URL", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("GET", "/foo"), - VerifyFormKV("users", "user1", "user2"), - )) - }) - - It("verifies the form value", func() { - resp, err = http.Get(s.URL() + "/foo?users=user1&users=user2") - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("verifies the form value", func() { - failures := InterceptGomegaFailures(func() { - resp, err = http.Get(s.URL() + "/foo?users=user1") - }) - Ω(failures).Should(HaveLen(1)) - }) - }) - - Context("when present in the body", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - VerifyFormKV("users", "user1", "user2"), - )) - }) - - It("verifies the form value", func() { - resp, err = http.PostForm(s.URL()+"/foo", url.Values{"users": []string{"user1", "user2"}}) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("verifies the form value", func() { - failures := InterceptGomegaFailures(func() { - resp, err = http.PostForm(s.URL()+"/foo", url.Values{"users": []string{"user1"}}) - }) - Ω(failures).Should(HaveLen(1)) - }) - }) - }) - - Describe("VerifyProtoRepresenting", func() { - var message *protobuf.SimpleMessage - - BeforeEach(func() { - message = new(protobuf.SimpleMessage) - message.Description = proto.String("A description") - message.Id = proto.Int32(0) - - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/proto"), - VerifyProtoRepresenting(message), - )) - }) - - It("verifies the proto body and the content type", func() { - serialized, err := proto.Marshal(message) - Ω(err).ShouldNot(HaveOccurred()) - - resp, err = http.Post(s.URL()+"/proto", "application/x-protobuf", bytes.NewReader(serialized)) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should verify the proto body and the content type", func() { - serialized, err := proto.Marshal(&protobuf.SimpleMessage{ - Description: proto.String("A description"), - Id: proto.Int32(0), - Metadata: proto.String("some metadata"), - }) - Ω(err).ShouldNot(HaveOccurred()) - - failures := InterceptGomegaFailures(func() { - http.Post(s.URL()+"/proto", "application/x-protobuf", bytes.NewReader(serialized)) - }) - Ω(failures).Should(HaveLen(1)) - }) - - It("should verify the proto body and the content type", func() { - serialized, err := proto.Marshal(message) - Ω(err).ShouldNot(HaveOccurred()) - - failures := InterceptGomegaFailures(func() { - http.Post(s.URL()+"/proto", "application/not-x-protobuf", bytes.NewReader(serialized)) - }) - Ω(failures).Should(HaveLen(1)) - }) - }) - - Describe("RespondWith", func() { - Context("without headers", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWith(http.StatusCreated, "sweet"), - ), CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWith(http.StatusOK, []byte("sour")), - )) - }) - - It("should return the response", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.StatusCode).Should(Equal(http.StatusCreated)) - - body, err := ioutil.ReadAll(resp.Body) - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(Equal([]byte("sweet"))) - - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.StatusCode).Should(Equal(http.StatusOK)) - - body, err = ioutil.ReadAll(resp.Body) - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(Equal([]byte("sour"))) - }) - }) - - Context("with headers", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWith(http.StatusCreated, "sweet", http.Header{"X-Custom-Header": []string{"my header"}}), - )) - }) - - It("should return the headers too", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.StatusCode).Should(Equal(http.StatusCreated)) - Ω(ioutil.ReadAll(resp.Body)).Should(Equal([]byte("sweet"))) - Ω(resp.Header.Get("X-Custom-Header")).Should(Equal("my header")) - }) - }) - }) - - Describe("RespondWithPtr", func() { - var code int - var byteBody []byte - var stringBody string - BeforeEach(func() { - code = http.StatusOK - byteBody = []byte("sweet") - stringBody = "sour" - - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWithPtr(&code, &byteBody), - ), CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWithPtr(&code, &stringBody), - )) - }) - - It("should return the response", func() { - code = http.StatusCreated - byteBody = []byte("tasty") - stringBody = "treat" - - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.StatusCode).Should(Equal(http.StatusCreated)) - - body, err := ioutil.ReadAll(resp.Body) - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(Equal([]byte("tasty"))) - - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.StatusCode).Should(Equal(http.StatusCreated)) - - body, err = ioutil.ReadAll(resp.Body) - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(Equal([]byte("treat"))) - }) - - Context("when passed a nil body", func() { - BeforeEach(func() { - s.SetHandler(0, CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWithPtr(&code, nil), - )) - }) - - It("should return an empty body and not explode", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - - Ω(err).ShouldNot(HaveOccurred()) - Ω(resp.StatusCode).Should(Equal(http.StatusOK)) - body, err := ioutil.ReadAll(resp.Body) - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(BeEmpty()) - - Ω(s.ReceivedRequests()).Should(HaveLen(1)) - }) - }) - }) - - Describe("RespondWithJSON", func() { - Context("when no optional headers are set", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWithJSONEncoded(http.StatusCreated, []int{1, 2, 3}), - )) - }) - - It("should return the response", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.StatusCode).Should(Equal(http.StatusCreated)) - - body, err := ioutil.ReadAll(resp.Body) - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(MatchJSON("[1,2,3]")) - }) - - It("should set the Content-Type header to application/json", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Content-Type"]).Should(Equal([]string{"application/json"})) - }) - }) - - Context("when optional headers are set", func() { - var headers http.Header - BeforeEach(func() { - headers = http.Header{"Stuff": []string{"things"}} - }) - - JustBeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWithJSONEncoded(http.StatusCreated, []int{1, 2, 3}, headers), - )) - }) - - It("should preserve those headers", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Stuff"]).Should(Equal([]string{"things"})) - }) - - It("should set the Content-Type header to application/json", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Content-Type"]).Should(Equal([]string{"application/json"})) - }) - - Context("when setting the Content-Type explicitly", func() { - BeforeEach(func() { - headers["Content-Type"] = []string{"not-json"} - }) - - It("should use the Content-Type header that was explicitly set", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Content-Type"]).Should(Equal([]string{"not-json"})) - }) - }) - }) - }) - - Describe("RespondWithJSONPtr", func() { - type testObject struct { - Key string - Value string - } - - var code int - var object testObject - - Context("when no optional headers are set", func() { - BeforeEach(func() { - code = http.StatusOK - object = testObject{} - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWithJSONEncodedPtr(&code, &object), - )) - }) - - It("should return the response", func() { - code = http.StatusCreated - object = testObject{ - Key: "Jim", - Value: "Codes", - } - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.StatusCode).Should(Equal(http.StatusCreated)) - - body, err := ioutil.ReadAll(resp.Body) - Ω(err).ShouldNot(HaveOccurred()) - Ω(body).Should(MatchJSON(`{"Key": "Jim", "Value": "Codes"}`)) - }) - - It("should set the Content-Type header to application/json", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Content-Type"]).Should(Equal([]string{"application/json"})) - }) - }) - - Context("when optional headers are set", func() { - var headers http.Header - BeforeEach(func() { - headers = http.Header{"Stuff": []string{"things"}} - }) - - JustBeforeEach(func() { - code = http.StatusOK - object = testObject{} - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/foo"), - RespondWithJSONEncodedPtr(&code, &object, headers), - )) - }) - - It("should preserve those headers", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Stuff"]).Should(Equal([]string{"things"})) - }) - - It("should set the Content-Type header to application/json", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Content-Type"]).Should(Equal([]string{"application/json"})) - }) - - Context("when setting the Content-Type explicitly", func() { - BeforeEach(func() { - headers["Content-Type"] = []string{"not-json"} - }) - - It("should use the Content-Type header that was explicitly set", func() { - resp, err = http.Post(s.URL()+"/foo", "application/json", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Content-Type"]).Should(Equal([]string{"not-json"})) - }) - }) - }) - }) - - Describe("RespondWithProto", func() { - var message *protobuf.SimpleMessage - - BeforeEach(func() { - message = new(protobuf.SimpleMessage) - message.Description = proto.String("A description") - message.Id = proto.Int32(99) - }) - - Context("when no optional headers are set", func() { - BeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/proto"), - RespondWithProto(http.StatusCreated, message), - )) - }) - - It("should return the response", func() { - resp, err = http.Post(s.URL()+"/proto", "application/x-protobuf", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.StatusCode).Should(Equal(http.StatusCreated)) - - var received protobuf.SimpleMessage - body, err := ioutil.ReadAll(resp.Body) - err = proto.Unmarshal(body, &received) - Ω(err).ShouldNot(HaveOccurred()) - }) - - It("should set the Content-Type header to application/x-protobuf", func() { - resp, err = http.Post(s.URL()+"/proto", "application/x-protobuf", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Content-Type"]).Should(Equal([]string{"application/x-protobuf"})) - }) - }) - - Context("when optional headers are set", func() { - var headers http.Header - BeforeEach(func() { - headers = http.Header{"Stuff": []string{"things"}} - }) - - JustBeforeEach(func() { - s.AppendHandlers(CombineHandlers( - VerifyRequest("POST", "/proto"), - RespondWithProto(http.StatusCreated, message, headers), - )) - }) - - It("should preserve those headers", func() { - resp, err = http.Post(s.URL()+"/proto", "application/x-protobuf", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Stuff"]).Should(Equal([]string{"things"})) - }) - - It("should set the Content-Type header to application/x-protobuf", func() { - resp, err = http.Post(s.URL()+"/proto", "application/x-protobuf", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Content-Type"]).Should(Equal([]string{"application/x-protobuf"})) - }) - - Context("when setting the Content-Type explicitly", func() { - BeforeEach(func() { - headers["Content-Type"] = []string{"not-x-protobuf"} - }) - - It("should use the Content-Type header that was explicitly set", func() { - resp, err = http.Post(s.URL()+"/proto", "application/x-protobuf", nil) - Ω(err).ShouldNot(HaveOccurred()) - - Ω(resp.Header["Content-Type"]).Should(Equal([]string{"not-x-protobuf"})) - }) - }) - }) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/gstruct/elements.go b/vendor/github.com/onsi/gomega/gstruct/elements.go deleted file mode 100644 index a315fa1..0000000 --- a/vendor/github.com/onsi/gomega/gstruct/elements.go +++ /dev/null @@ -1,145 +0,0 @@ -package gstruct - -import ( - "errors" - "fmt" - "reflect" - "runtime/debug" - - "github.com/onsi/gomega/format" - errorsutil "github.com/onsi/gomega/gstruct/errors" - "github.com/onsi/gomega/types" -) - -//MatchAllElements succeeds if every element of a slice matches the element matcher it maps to -//through the id function, and every element matcher is matched. -// Expect([]string{"a", "b"}).To(MatchAllElements(idFn, matchers.Elements{ -// "a": BeEqual("a"), -// "b": BeEqual("b"), -// }) -func MatchAllElements(identifier Identifier, elements Elements) types.GomegaMatcher { - return &ElementsMatcher{ - Identifier: identifier, - Elements: elements, - } -} - -//MatchElements succeeds if each element of a slice matches the element matcher it maps to -//through the id function. It can ignore extra elements and/or missing elements. -// Expect([]string{"a", "c"}).To(MatchElements(idFn, IgnoreMissing|IgnoreExtra, matchers.Elements{ -// "a": BeEqual("a") -// "b": BeEqual("b"), -// }) -func MatchElements(identifier Identifier, options Options, elements Elements) types.GomegaMatcher { - return &ElementsMatcher{ - Identifier: identifier, - Elements: elements, - IgnoreExtras: options&IgnoreExtras != 0, - IgnoreMissing: options&IgnoreMissing != 0, - AllowDuplicates: options&AllowDuplicates != 0, - } -} - -// ElementsMatcher is a NestingMatcher that applies custom matchers to each element of a slice mapped -// by the Identifier function. -// TODO: Extend this to work with arrays & maps (map the key) as well. -type ElementsMatcher struct { - // Matchers for each element. - Elements Elements - // Function mapping an element to the string key identifying its matcher. - Identifier Identifier - - // Whether to ignore extra elements or consider it an error. - IgnoreExtras bool - // Whether to ignore missing elements or consider it an error. - IgnoreMissing bool - // Whether to key duplicates when matching IDs. - AllowDuplicates bool - - // State. - failures []error -} - -// Element ID to matcher. -type Elements map[string]types.GomegaMatcher - -// Function for identifying (mapping) elements. -type Identifier func(element interface{}) string - -func (m *ElementsMatcher) Match(actual interface{}) (success bool, err error) { - if reflect.TypeOf(actual).Kind() != reflect.Slice { - return false, fmt.Errorf("%v is type %T, expected slice", actual, actual) - } - - m.failures = m.matchElements(actual) - if len(m.failures) > 0 { - return false, nil - } - return true, nil -} - -func (m *ElementsMatcher) matchElements(actual interface{}) (errs []error) { - // Provide more useful error messages in the case of a panic. - defer func() { - if err := recover(); err != nil { - errs = append(errs, fmt.Errorf("panic checking %+v: %v\n%s", actual, err, debug.Stack())) - } - }() - - val := reflect.ValueOf(actual) - elements := map[string]bool{} - for i := 0; i < val.Len(); i++ { - element := val.Index(i).Interface() - id := m.Identifier(element) - if elements[id] { - if !m.AllowDuplicates { - errs = append(errs, fmt.Errorf("found duplicate element ID %s", id)) - continue - } - } - elements[id] = true - - matcher, expected := m.Elements[id] - if !expected { - if !m.IgnoreExtras { - errs = append(errs, fmt.Errorf("unexpected element %s", id)) - } - continue - } - - match, err := matcher.Match(element) - if match { - continue - } - - if err == nil { - if nesting, ok := matcher.(errorsutil.NestingMatcher); ok { - err = errorsutil.AggregateError(nesting.Failures()) - } else { - err = errors.New(matcher.FailureMessage(element)) - } - } - errs = append(errs, errorsutil.Nest(fmt.Sprintf("[%s]", id), err)) - } - - for id := range m.Elements { - if !elements[id] && !m.IgnoreMissing { - errs = append(errs, fmt.Errorf("missing expected element %s", id)) - } - } - - return errs -} - -func (m *ElementsMatcher) FailureMessage(actual interface{}) (message string) { - failure := errorsutil.AggregateError(m.failures) - return format.Message(actual, fmt.Sprintf("to match elements: %v", failure)) -} - -func (m *ElementsMatcher) NegatedFailureMessage(actual interface{}) (message string) { - return format.Message(actual, "not to match elements") -} - -func (m *ElementsMatcher) Failures() []error { - return m.failures -} diff --git a/vendor/github.com/onsi/gomega/gstruct/elements_test.go b/vendor/github.com/onsi/gomega/gstruct/elements_test.go deleted file mode 100644 index 8ba78cb..0000000 --- a/vendor/github.com/onsi/gomega/gstruct/elements_test.go +++ /dev/null @@ -1,144 +0,0 @@ -package gstruct_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/gstruct" -) - -var _ = Describe("Slice", func() { - allElements := []string{"a", "b"} - missingElements := []string{"a"} - extraElements := []string{"a", "b", "c"} - duplicateElements := []string{"a", "a", "b"} - empty := []string{} - var nils []string - - It("should strictly match all elements", func() { - m := MatchAllElements(id, Elements{ - "b": Equal("b"), - "a": Equal("a"), - }) - Ω(allElements).Should(m, "should match all elements") - Ω(missingElements).ShouldNot(m, "should fail with missing elements") - Ω(extraElements).ShouldNot(m, "should fail with extra elements") - Ω(duplicateElements).ShouldNot(m, "should fail with duplicate elements") - Ω(nils).ShouldNot(m, "should fail with an uninitialized slice") - - m = MatchAllElements(id, Elements{ - "a": Equal("a"), - "b": Equal("fail"), - }) - Ω(allElements).ShouldNot(m, "should run nested matchers") - - m = MatchAllElements(id, Elements{}) - Ω(empty).Should(m, "should handle empty slices") - Ω(allElements).ShouldNot(m, "should handle only empty slices") - Ω(nils).Should(m, "should handle nil slices") - }) - - It("should ignore extra elements", func() { - m := MatchElements(id, IgnoreExtras, Elements{ - "b": Equal("b"), - "a": Equal("a"), - }) - Ω(allElements).Should(m, "should match all elements") - Ω(missingElements).ShouldNot(m, "should fail with missing elements") - Ω(extraElements).Should(m, "should ignore extra elements") - Ω(duplicateElements).ShouldNot(m, "should fail with duplicate elements") - Ω(nils).ShouldNot(m, "should fail with an uninitialized slice") - }) - - It("should ignore missing elements", func() { - m := MatchElements(id, IgnoreMissing, Elements{ - "a": Equal("a"), - "b": Equal("b"), - }) - Ω(allElements).Should(m, "should match all elements") - Ω(missingElements).Should(m, "should ignore missing elements") - Ω(extraElements).ShouldNot(m, "should fail with extra elements") - Ω(duplicateElements).ShouldNot(m, "should fail with duplicate elements") - Ω(nils).Should(m, "should ignore an uninitialized slice") - }) - - It("should ignore missing and extra elements", func() { - m := MatchElements(id, IgnoreMissing|IgnoreExtras, Elements{ - "a": Equal("a"), - "b": Equal("b"), - }) - Ω(allElements).Should(m, "should match all elements") - Ω(missingElements).Should(m, "should ignore missing elements") - Ω(extraElements).Should(m, "should ignore extra elements") - Ω(duplicateElements).ShouldNot(m, "should fail with duplicate elements") - Ω(nils).Should(m, "should ignore an uninitialized slice") - - m = MatchElements(id, IgnoreExtras|IgnoreMissing, Elements{ - "a": Equal("a"), - "b": Equal("fail"), - }) - Ω(allElements).ShouldNot(m, "should run nested matchers") - }) - - Context("with elements that share a key", func() { - nonUniqueID := func(element interface{}) string { - return element.(string)[0:1] - } - - allElements := []string{"a123", "a213", "b321"} - includingBadElements := []string{"a123", "b123", "b5555"} - extraElements := []string{"a123", "b1234", "c345"} - missingElements := []string{"b123", "b1234", "b1345"} - - It("should strictly allow multiple matches", func() { - m := MatchElements(nonUniqueID, AllowDuplicates, Elements{ - "a": ContainSubstring("1"), - "b": ContainSubstring("1"), - }) - Ω(allElements).Should(m, "should match all elements") - Ω(includingBadElements).ShouldNot(m, "should reject if a member fails the matcher") - Ω(extraElements).ShouldNot(m, "should reject with extra keys") - Ω(missingElements).ShouldNot(m, "should reject with missing keys") - Ω(nils).ShouldNot(m, "should fail with an uninitialized slice") - }) - - It("should ignore missing", func() { - m := MatchElements(nonUniqueID, AllowDuplicates|IgnoreMissing, Elements{ - "a": ContainSubstring("1"), - "b": ContainSubstring("1"), - }) - Ω(allElements).Should(m, "should match all elements") - Ω(includingBadElements).ShouldNot(m, "should reject if a member fails the matcher") - Ω(extraElements).ShouldNot(m, "should reject with extra keys") - Ω(missingElements).Should(m, "should allow missing keys") - Ω(nils).Should(m, "should allow an uninitialized slice") - }) - - It("should ignore extras", func() { - m := MatchElements(nonUniqueID, AllowDuplicates|IgnoreExtras, Elements{ - "a": ContainSubstring("1"), - "b": ContainSubstring("1"), - }) - Ω(allElements).Should(m, "should match all elements") - Ω(includingBadElements).ShouldNot(m, "should reject if a member fails the matcher") - Ω(extraElements).Should(m, "should allow extra keys") - Ω(missingElements).ShouldNot(m, "should reject missing keys") - Ω(nils).ShouldNot(m, "should reject an uninitialized slice") - }) - - It("should ignore missing and extras", func() { - m := MatchElements(nonUniqueID, AllowDuplicates|IgnoreExtras|IgnoreMissing, Elements{ - "a": ContainSubstring("1"), - "b": ContainSubstring("1"), - }) - Ω(allElements).Should(m, "should match all elements") - Ω(includingBadElements).ShouldNot(m, "should reject if a member fails the matcher") - Ω(extraElements).Should(m, "should allow extra keys") - Ω(missingElements).Should(m, "should allow missing keys") - Ω(nils).Should(m, "should allow an uninitialized slice") - }) - }) -}) - -func id(element interface{}) string { - return element.(string) -} diff --git a/vendor/github.com/onsi/gomega/gstruct/errors/nested_types.go b/vendor/github.com/onsi/gomega/gstruct/errors/nested_types.go deleted file mode 100644 index 188492b..0000000 --- a/vendor/github.com/onsi/gomega/gstruct/errors/nested_types.go +++ /dev/null @@ -1,72 +0,0 @@ -package errors - -import ( - "fmt" - "strings" - - "github.com/onsi/gomega/types" -) - -// A stateful matcher that nests other matchers within it and preserves the error types of the -// nested matcher failures. -type NestingMatcher interface { - types.GomegaMatcher - - // Returns the failures of nested matchers. - Failures() []error -} - -// An error type for labeling errors on deeply nested matchers. -type NestedError struct { - Path string - Err error -} - -func (e *NestedError) Error() string { - // Indent Errors. - indented := strings.Replace(e.Err.Error(), "\n", "\n\t", -1) - return fmt.Sprintf("%s:\n\t%v", e.Path, indented) -} - -// Create a NestedError with the given path. -// If err is a NestedError, prepend the path to it. -// If err is an AggregateError, recursively Nest each error. -func Nest(path string, err error) error { - if ag, ok := err.(AggregateError); ok { - var errs AggregateError - for _, e := range ag { - errs = append(errs, Nest(path, e)) - } - return errs - } - if ne, ok := err.(*NestedError); ok { - return &NestedError{ - Path: path + ne.Path, - Err: ne.Err, - } - } - return &NestedError{ - Path: path, - Err: err, - } -} - -// An error type for treating multiple errors as a single error. -type AggregateError []error - -// Error is part of the error interface. -func (err AggregateError) Error() string { - if len(err) == 0 { - // This should never happen, really. - return "" - } - if len(err) == 1 { - return err[0].Error() - } - result := fmt.Sprintf("[%s", err[0].Error()) - for i := 1; i < len(err); i++ { - result += fmt.Sprintf(", %s", err[i].Error()) - } - result += "]" - return result -} diff --git a/vendor/github.com/onsi/gomega/gstruct/fields.go b/vendor/github.com/onsi/gomega/gstruct/fields.go deleted file mode 100644 index f3c1575..0000000 --- a/vendor/github.com/onsi/gomega/gstruct/fields.go +++ /dev/null @@ -1,141 +0,0 @@ -package gstruct - -import ( - "errors" - "fmt" - "reflect" - "runtime/debug" - "strings" - - "github.com/onsi/gomega/format" - errorsutil "github.com/onsi/gomega/gstruct/errors" - "github.com/onsi/gomega/types" -) - -//MatchAllFields succeeds if every field of a struct matches the field matcher associated with -//it, and every element matcher is matched. -// Expect([]string{"a", "b"}).To(MatchAllFields(idFn, gstruct.Fields{ -// "a": BeEqual("a"), -// "b": BeEqual("b"), -// }) -func MatchAllFields(fields Fields) types.GomegaMatcher { - return &FieldsMatcher{ - Fields: fields, - } -} - -//MatchFields succeeds if each element of a struct matches the field matcher associated with -//it. It can ignore extra fields and/or missing fields. -// Expect([]string{"a", "c"}).To(MatchFields(idFn, IgnoreMissing|IgnoreExtra, gstruct.Fields{ -// "a": BeEqual("a") -// "b": BeEqual("b"), -// }) -func MatchFields(options Options, fields Fields) types.GomegaMatcher { - return &FieldsMatcher{ - Fields: fields, - IgnoreExtras: options&IgnoreExtras != 0, - IgnoreMissing: options&IgnoreMissing != 0, - } -} - -type FieldsMatcher struct { - // Matchers for each field. - Fields Fields - - // Whether to ignore extra elements or consider it an error. - IgnoreExtras bool - // Whether to ignore missing elements or consider it an error. - IgnoreMissing bool - - // State. - failures []error -} - -// Field name to matcher. -type Fields map[string]types.GomegaMatcher - -func (m *FieldsMatcher) Match(actual interface{}) (success bool, err error) { - if reflect.TypeOf(actual).Kind() != reflect.Struct { - return false, fmt.Errorf("%v is type %T, expected struct", actual, actual) - } - - m.failures = m.matchFields(actual) - if len(m.failures) > 0 { - return false, nil - } - return true, nil -} - -func (m *FieldsMatcher) matchFields(actual interface{}) (errs []error) { - val := reflect.ValueOf(actual) - typ := val.Type() - fields := map[string]bool{} - for i := 0; i < val.NumField(); i++ { - fieldName := typ.Field(i).Name - fields[fieldName] = true - - err := func() (err error) { - // This test relies heavily on reflect, which tends to panic. - // Recover here to provide more useful error messages in that case. - defer func() { - if r := recover(); r != nil { - err = fmt.Errorf("panic checking %+v: %v\n%s", actual, r, debug.Stack()) - } - }() - - matcher, expected := m.Fields[fieldName] - if !expected { - if !m.IgnoreExtras { - return fmt.Errorf("unexpected field %s: %+v", fieldName, actual) - } - return nil - } - - var field interface{} - if val.Field(i).IsValid() { - field = val.Field(i).Interface() - } else { - field = reflect.Zero(typ.Field(i).Type) - } - - match, err := matcher.Match(field) - if err != nil { - return err - } else if !match { - if nesting, ok := matcher.(errorsutil.NestingMatcher); ok { - return errorsutil.AggregateError(nesting.Failures()) - } - return errors.New(matcher.FailureMessage(field)) - } - return nil - }() - if err != nil { - errs = append(errs, errorsutil.Nest("."+fieldName, err)) - } - } - - for field := range m.Fields { - if !fields[field] && !m.IgnoreMissing { - errs = append(errs, fmt.Errorf("missing expected field %s", field)) - } - } - - return errs -} - -func (m *FieldsMatcher) FailureMessage(actual interface{}) (message string) { - failures := make([]string, len(m.failures)) - for i := range m.failures { - failures[i] = m.failures[i].Error() - } - return format.Message(reflect.TypeOf(actual).Name(), - fmt.Sprintf("to match fields: {\n%v\n}\n", strings.Join(failures, "\n"))) -} - -func (m *FieldsMatcher) NegatedFailureMessage(actual interface{}) (message string) { - return format.Message(actual, "not to match fields") -} - -func (m *FieldsMatcher) Failures() []error { - return m.failures -} diff --git a/vendor/github.com/onsi/gomega/gstruct/fields_test.go b/vendor/github.com/onsi/gomega/gstruct/fields_test.go deleted file mode 100644 index 61f4afc..0000000 --- a/vendor/github.com/onsi/gomega/gstruct/fields_test.go +++ /dev/null @@ -1,76 +0,0 @@ -package gstruct_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/gstruct" -) - -var _ = Describe("Struct", func() { - allFields := struct{ A, B string }{"a", "b"} - missingFields := struct{ A string }{"a"} - extraFields := struct{ A, B, C string }{"a", "b", "c"} - emptyFields := struct{ A, B string }{} - - It("should strictly match all fields", func() { - m := MatchAllFields(Fields{ - "B": Equal("b"), - "A": Equal("a"), - }) - Ω(allFields).Should(m, "should match all fields") - Ω(missingFields).ShouldNot(m, "should fail with missing fields") - Ω(extraFields).ShouldNot(m, "should fail with extra fields") - Ω(emptyFields).ShouldNot(m, "should fail with empty fields") - - m = MatchAllFields(Fields{ - "A": Equal("a"), - "B": Equal("fail"), - }) - Ω(allFields).ShouldNot(m, "should run nested matchers") - }) - - It("should handle empty structs", func() { - m := MatchAllFields(Fields{}) - Ω(struct{}{}).Should(m, "should handle empty structs") - Ω(allFields).ShouldNot(m, "should fail with extra fields") - }) - - It("should ignore missing fields", func() { - m := MatchFields(IgnoreMissing, Fields{ - "B": Equal("b"), - "A": Equal("a"), - }) - Ω(allFields).Should(m, "should match all fields") - Ω(missingFields).Should(m, "should ignore missing fields") - Ω(extraFields).ShouldNot(m, "should fail with extra fields") - Ω(emptyFields).ShouldNot(m, "should fail with empty fields") - }) - - It("should ignore extra fields", func() { - m := MatchFields(IgnoreExtras, Fields{ - "B": Equal("b"), - "A": Equal("a"), - }) - Ω(allFields).Should(m, "should match all fields") - Ω(missingFields).ShouldNot(m, "should fail with missing fields") - Ω(extraFields).Should(m, "should ignore extra fields") - Ω(emptyFields).ShouldNot(m, "should fail with empty fields") - }) - - It("should ignore missing and extra fields", func() { - m := MatchFields(IgnoreMissing|IgnoreExtras, Fields{ - "B": Equal("b"), - "A": Equal("a"), - }) - Ω(allFields).Should(m, "should match all fields") - Ω(missingFields).Should(m, "should ignore missing fields") - Ω(extraFields).Should(m, "should ignore extra fields") - Ω(emptyFields).ShouldNot(m, "should fail with empty fields") - - m = MatchFields(IgnoreMissing|IgnoreExtras, Fields{ - "A": Equal("a"), - "B": Equal("fail"), - }) - Ω(allFields).ShouldNot(m, "should run nested matchers") - }) -}) diff --git a/vendor/github.com/onsi/gomega/gstruct/gstruct_tests_suite_test.go b/vendor/github.com/onsi/gomega/gstruct/gstruct_tests_suite_test.go deleted file mode 100644 index d475663..0000000 --- a/vendor/github.com/onsi/gomega/gstruct/gstruct_tests_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package gstruct_test - -import ( - "testing" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -func Test(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Gstruct Suite") -} diff --git a/vendor/github.com/onsi/gomega/gstruct/ignore.go b/vendor/github.com/onsi/gomega/gstruct/ignore.go deleted file mode 100644 index 0365f32..0000000 --- a/vendor/github.com/onsi/gomega/gstruct/ignore.go +++ /dev/null @@ -1,37 +0,0 @@ -package gstruct - -import ( - "github.com/onsi/gomega/types" -) - -//Ignore ignores the actual value and always succeeds. -// Expect(nil).To(Ignore()) -// Expect(true).To(Ignore()) -func Ignore() types.GomegaMatcher { - return &IgnoreMatcher{true} -} - -//Reject ignores the actual value and always fails. It can be used in conjunction with IgnoreMissing -//to catch problematic elements, or to verify tests are running. -// Expect(nil).NotTo(Reject()) -// Expect(true).NotTo(Reject()) -func Reject() types.GomegaMatcher { - return &IgnoreMatcher{false} -} - -// A matcher that either always succeeds or always fails. -type IgnoreMatcher struct { - Succeed bool -} - -func (m *IgnoreMatcher) Match(actual interface{}) (bool, error) { - return m.Succeed, nil -} - -func (m *IgnoreMatcher) FailureMessage(_ interface{}) (message string) { - return "Unconditional failure" -} - -func (m *IgnoreMatcher) NegatedFailureMessage(_ interface{}) (message string) { - return "Unconditional success" -} diff --git a/vendor/github.com/onsi/gomega/gstruct/ignore_test.go b/vendor/github.com/onsi/gomega/gstruct/ignore_test.go deleted file mode 100644 index 70e1d40..0000000 --- a/vendor/github.com/onsi/gomega/gstruct/ignore_test.go +++ /dev/null @@ -1,23 +0,0 @@ -package gstruct_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/gstruct" -) - -var _ = Describe("Ignore", func() { - It("should always succeed", func() { - Ω(nil).Should(Ignore()) - Ω(struct{}{}).Should(Ignore()) - Ω(0).Should(Ignore()) - Ω(false).Should(Ignore()) - }) - - It("should always fail", func() { - Ω(nil).ShouldNot(Reject()) - Ω(struct{}{}).ShouldNot(Reject()) - Ω(1).ShouldNot(Reject()) - Ω(true).ShouldNot(Reject()) - }) -}) diff --git a/vendor/github.com/onsi/gomega/gstruct/pointer.go b/vendor/github.com/onsi/gomega/gstruct/pointer.go deleted file mode 100644 index 0a2f35d..0000000 --- a/vendor/github.com/onsi/gomega/gstruct/pointer.go +++ /dev/null @@ -1,56 +0,0 @@ -package gstruct - -import ( - "fmt" - "reflect" - - "github.com/onsi/gomega/format" - "github.com/onsi/gomega/types" -) - -//PointTo applies the given matcher to the value pointed to by actual. It fails if the pointer is -//nil. -// actual := 5 -// Expect(&actual).To(PointTo(Equal(5))) -func PointTo(matcher types.GomegaMatcher) types.GomegaMatcher { - return &PointerMatcher{ - Matcher: matcher, - } -} - -type PointerMatcher struct { - Matcher types.GomegaMatcher - - // Failure message. - failure string -} - -func (m *PointerMatcher) Match(actual interface{}) (bool, error) { - val := reflect.ValueOf(actual) - - // return error if actual type is not a pointer - if val.Kind() != reflect.Ptr { - return false, fmt.Errorf("PointerMatcher expects a pointer but we have '%s'", val.Kind()) - } - - if !val.IsValid() || val.IsNil() { - m.failure = format.Message(actual, "not to be ") - return false, nil - } - - // Forward the value. - elem := val.Elem().Interface() - match, err := m.Matcher.Match(elem) - if !match { - m.failure = m.Matcher.FailureMessage(elem) - } - return match, err -} - -func (m *PointerMatcher) FailureMessage(_ interface{}) (message string) { - return m.failure -} - -func (m *PointerMatcher) NegatedFailureMessage(actual interface{}) (message string) { - return m.Matcher.NegatedFailureMessage(actual) -} diff --git a/vendor/github.com/onsi/gomega/gstruct/pointer_test.go b/vendor/github.com/onsi/gomega/gstruct/pointer_test.go deleted file mode 100644 index b02081c..0000000 --- a/vendor/github.com/onsi/gomega/gstruct/pointer_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package gstruct_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/gstruct" -) - -var _ = Describe("PointTo", func() { - It("should fail when passed nil", func() { - var p *struct{} - Ω(p).Should(BeNil()) - }) - - It("should succeed when passed non-nil pointer", func() { - var s struct{} - Ω(&s).Should(PointTo(Ignore())) - }) - - It("should unwrap the pointee value", func() { - i := 1 - Ω(&i).Should(PointTo(Equal(1))) - Ω(&i).ShouldNot(PointTo(Equal(2))) - }) - - It("should work with nested pointers", func() { - i := 1 - ip := &i - ipp := &ip - Ω(ipp).Should(PointTo(PointTo(Equal(1)))) - Ω(ipp).ShouldNot(PointTo(PointTo(Equal(2)))) - }) -}) diff --git a/vendor/github.com/onsi/gomega/gstruct/types.go b/vendor/github.com/onsi/gomega/gstruct/types.go deleted file mode 100644 index 48cbbe8..0000000 --- a/vendor/github.com/onsi/gomega/gstruct/types.go +++ /dev/null @@ -1,15 +0,0 @@ -package gstruct - -//Options is the type for options passed to some matchers. -type Options int - -const ( - //IgnoreExtras tells the matcher to ignore extra elements or fields, rather than triggering a failure. - IgnoreExtras Options = 1 << iota - //IgnoreMissing tells the matcher to ignore missing elements or fields, rather than triggering a failure. - IgnoreMissing - //AllowDuplicates tells the matcher to permit multiple members of the slice to produce the same ID when - //considered by the indentifier function. All members that map to a given key must still match successfully - //with the matcher that is provided for that key. - AllowDuplicates -) diff --git a/vendor/github.com/onsi/gomega/internal/assertion/assertion_suite_test.go b/vendor/github.com/onsi/gomega/internal/assertion/assertion_suite_test.go deleted file mode 100644 index dae47a4..0000000 --- a/vendor/github.com/onsi/gomega/internal/assertion/assertion_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package assertion_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestAssertion(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Assertion Suite") -} diff --git a/vendor/github.com/onsi/gomega/internal/assertion/assertion_test.go b/vendor/github.com/onsi/gomega/internal/assertion/assertion_test.go deleted file mode 100644 index c03b7a3..0000000 --- a/vendor/github.com/onsi/gomega/internal/assertion/assertion_test.go +++ /dev/null @@ -1,252 +0,0 @@ -package assertion_test - -import ( - "errors" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/internal/assertion" - "github.com/onsi/gomega/internal/fakematcher" -) - -var _ = Describe("Assertion", func() { - var ( - a *Assertion - failureMessage string - failureCallerSkip int - matcher *fakematcher.FakeMatcher - ) - - input := "The thing I'm testing" - - var fakeFailHandler = func(message string, callerSkip ...int) { - failureMessage = message - if len(callerSkip) == 1 { - failureCallerSkip = callerSkip[0] - } - } - - BeforeEach(func() { - matcher = &fakematcher.FakeMatcher{} - failureMessage = "" - failureCallerSkip = 0 - a = New(input, fakeFailHandler, 1) - }) - - Context("when called", func() { - It("should pass the provided input value to the matcher", func() { - a.Should(matcher) - - Ω(matcher.ReceivedActual).Should(Equal(input)) - matcher.ReceivedActual = "" - - a.ShouldNot(matcher) - - Ω(matcher.ReceivedActual).Should(Equal(input)) - matcher.ReceivedActual = "" - - a.To(matcher) - - Ω(matcher.ReceivedActual).Should(Equal(input)) - matcher.ReceivedActual = "" - - a.ToNot(matcher) - - Ω(matcher.ReceivedActual).Should(Equal(input)) - matcher.ReceivedActual = "" - - a.NotTo(matcher) - - Ω(matcher.ReceivedActual).Should(Equal(input)) - }) - }) - - Context("when the matcher succeeds", func() { - BeforeEach(func() { - matcher.MatchesToReturn = true - matcher.ErrToReturn = nil - }) - - Context("and a positive assertion is being made", func() { - It("should not call the failure callback", func() { - a.Should(matcher) - Ω(failureMessage).Should(Equal("")) - }) - - It("should be true", func() { - Ω(a.Should(matcher)).Should(BeTrue()) - }) - }) - - Context("and a negative assertion is being made", func() { - It("should call the failure callback", func() { - a.ShouldNot(matcher) - Ω(failureMessage).Should(Equal("negative: The thing I'm testing")) - Ω(failureCallerSkip).Should(Equal(3)) - }) - - It("should be false", func() { - Ω(a.ShouldNot(matcher)).Should(BeFalse()) - }) - }) - }) - - Context("when the matcher fails", func() { - BeforeEach(func() { - matcher.MatchesToReturn = false - matcher.ErrToReturn = nil - }) - - Context("and a positive assertion is being made", func() { - It("should call the failure callback", func() { - a.Should(matcher) - Ω(failureMessage).Should(Equal("positive: The thing I'm testing")) - Ω(failureCallerSkip).Should(Equal(3)) - }) - - It("should be false", func() { - Ω(a.Should(matcher)).Should(BeFalse()) - }) - }) - - Context("and a negative assertion is being made", func() { - It("should not call the failure callback", func() { - a.ShouldNot(matcher) - Ω(failureMessage).Should(Equal("")) - }) - - It("should be true", func() { - Ω(a.ShouldNot(matcher)).Should(BeTrue()) - }) - }) - }) - - Context("When reporting a failure", func() { - BeforeEach(func() { - matcher.MatchesToReturn = false - matcher.ErrToReturn = nil - }) - - Context("and there is an optional description", func() { - It("should append the description to the failure message", func() { - a.Should(matcher, "A description") - Ω(failureMessage).Should(Equal("A description\npositive: The thing I'm testing")) - Ω(failureCallerSkip).Should(Equal(3)) - }) - }) - - Context("and there are multiple arguments to the optional description", func() { - It("should append the formatted description to the failure message", func() { - a.Should(matcher, "A description of [%d]", 3) - Ω(failureMessage).Should(Equal("A description of [3]\npositive: The thing I'm testing")) - Ω(failureCallerSkip).Should(Equal(3)) - }) - }) - }) - - Context("When the matcher returns an error", func() { - BeforeEach(func() { - matcher.ErrToReturn = errors.New("Kaboom!") - }) - - Context("and a positive assertion is being made", func() { - It("should call the failure callback", func() { - matcher.MatchesToReturn = true - a.Should(matcher) - Ω(failureMessage).Should(Equal("Kaboom!")) - Ω(failureCallerSkip).Should(Equal(3)) - }) - }) - - Context("and a negative assertion is being made", func() { - It("should call the failure callback", func() { - matcher.MatchesToReturn = false - a.ShouldNot(matcher) - Ω(failureMessage).Should(Equal("Kaboom!")) - Ω(failureCallerSkip).Should(Equal(3)) - }) - }) - - It("should always be false", func() { - Ω(a.Should(matcher)).Should(BeFalse()) - Ω(a.ShouldNot(matcher)).Should(BeFalse()) - }) - }) - - Context("when there are extra parameters", func() { - It("(a simple example)", func() { - Ω(func() (string, int, error) { - return "foo", 0, nil - }()).Should(Equal("foo")) - }) - - Context("when the parameters are all nil or zero", func() { - It("should invoke the matcher", func() { - matcher.MatchesToReturn = true - matcher.ErrToReturn = nil - - var typedNil []string - a = New(input, fakeFailHandler, 1, 0, nil, typedNil) - - result := a.Should(matcher) - Ω(result).Should(BeTrue()) - Ω(matcher.ReceivedActual).Should(Equal(input)) - - Ω(failureMessage).Should(BeZero()) - }) - }) - - Context("when any of the parameters are not nil or zero", func() { - It("should call the failure callback", func() { - matcher.MatchesToReturn = false - matcher.ErrToReturn = nil - - a = New(input, fakeFailHandler, 1, errors.New("foo")) - result := a.Should(matcher) - Ω(result).Should(BeFalse()) - Ω(matcher.ReceivedActual).Should(BeZero(), "The matcher doesn't even get called") - Ω(failureMessage).Should(ContainSubstring("foo")) - failureMessage = "" - - a = New(input, fakeFailHandler, 1, nil, 1) - result = a.ShouldNot(matcher) - Ω(result).Should(BeFalse()) - Ω(failureMessage).Should(ContainSubstring("1")) - failureMessage = "" - - a = New(input, fakeFailHandler, 1, nil, 0, []string{"foo"}) - result = a.To(matcher) - Ω(result).Should(BeFalse()) - Ω(failureMessage).Should(ContainSubstring("foo")) - failureMessage = "" - - a = New(input, fakeFailHandler, 1, nil, 0, []string{"foo"}) - result = a.ToNot(matcher) - Ω(result).Should(BeFalse()) - Ω(failureMessage).Should(ContainSubstring("foo")) - failureMessage = "" - - a = New(input, fakeFailHandler, 1, nil, 0, []string{"foo"}) - result = a.NotTo(matcher) - Ω(result).Should(BeFalse()) - Ω(failureMessage).Should(ContainSubstring("foo")) - Ω(failureCallerSkip).Should(Equal(3)) - }) - }) - }) - - Context("Making an assertion without a registered fail handler", func() { - It("should panic", func() { - defer func() { - e := recover() - RegisterFailHandler(Fail) - if e == nil { - Fail("expected a panic to have occurred") - } - }() - - RegisterFailHandler(nil) - Ω(true).Should(BeTrue()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/internal/asyncassertion/async_assertion_suite_test.go b/vendor/github.com/onsi/gomega/internal/asyncassertion/async_assertion_suite_test.go deleted file mode 100644 index bdb0c3d..0000000 --- a/vendor/github.com/onsi/gomega/internal/asyncassertion/async_assertion_suite_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package asyncassertion_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - "testing" -) - -func TestAsyncAssertion(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "AsyncAssertion Suite") -} diff --git a/vendor/github.com/onsi/gomega/internal/asyncassertion/async_assertion_test.go b/vendor/github.com/onsi/gomega/internal/asyncassertion/async_assertion_test.go deleted file mode 100644 index 3d7e348..0000000 --- a/vendor/github.com/onsi/gomega/internal/asyncassertion/async_assertion_test.go +++ /dev/null @@ -1,345 +0,0 @@ -package asyncassertion_test - -import ( - "errors" - "time" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/internal/asyncassertion" -) - -var _ = Describe("Async Assertion", func() { - var ( - failureMessage string - callerSkip int - ) - - var fakeFailHandler = func(message string, skip ...int) { - failureMessage = message - callerSkip = skip[0] - } - - BeforeEach(func() { - failureMessage = "" - callerSkip = 0 - }) - - Describe("Eventually", func() { - Context("the positive case", func() { - It("should poll the function and matcher", func() { - counter := 0 - a := New(AsyncAssertionTypeEventually, func() int { - counter++ - return counter - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.Should(BeNumerically("==", 5)) - Ω(failureMessage).Should(BeZero()) - }) - - It("should continue when the matcher errors", func() { - counter := 0 - a := New(AsyncAssertionTypeEventually, func() interface{} { - counter++ - if counter == 5 { - return "not-a-number" //this should cause the matcher to error - } - return counter - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.Should(BeNumerically("==", 5), "My description %d", 2) - - Ω(failureMessage).Should(ContainSubstring("Timed out after")) - Ω(failureMessage).Should(ContainSubstring("My description 2")) - Ω(callerSkip).Should(Equal(4)) - }) - - It("should be able to timeout", func() { - counter := 0 - a := New(AsyncAssertionTypeEventually, func() int { - counter++ - return counter - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.Should(BeNumerically(">", 100), "My description %d", 2) - - Ω(counter).Should(BeNumerically(">", 8)) - Ω(counter).Should(BeNumerically("<=", 10)) - Ω(failureMessage).Should(ContainSubstring("Timed out after")) - Ω(failureMessage).Should(MatchRegexp(`\: \d`), "Should pass the correct value to the matcher message formatter.") - Ω(failureMessage).Should(ContainSubstring("My description 2")) - Ω(callerSkip).Should(Equal(4)) - }) - }) - - Context("the negative case", func() { - It("should poll the function and matcher", func() { - counter := 0 - a := New(AsyncAssertionTypeEventually, func() int { - counter += 1 - return counter - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.ShouldNot(BeNumerically("<", 3)) - - Ω(counter).Should(Equal(3)) - Ω(failureMessage).Should(BeZero()) - }) - - It("should timeout when the matcher errors", func() { - a := New(AsyncAssertionTypeEventually, func() interface{} { - return 0 //this should cause the matcher to error - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.ShouldNot(HaveLen(0), "My description %d", 2) - - Ω(failureMessage).Should(ContainSubstring("Timed out after")) - Ω(failureMessage).Should(ContainSubstring("Error:")) - Ω(failureMessage).Should(ContainSubstring("My description 2")) - Ω(callerSkip).Should(Equal(4)) - }) - - It("should be able to timeout", func() { - a := New(AsyncAssertionTypeEventually, func() int { - return 0 - }, fakeFailHandler, time.Duration(0.1*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.ShouldNot(Equal(0), "My description %d", 2) - - Ω(failureMessage).Should(ContainSubstring("Timed out after")) - Ω(failureMessage).Should(ContainSubstring(": 0"), "Should pass the correct value to the matcher message formatter.") - Ω(failureMessage).Should(ContainSubstring("My description 2")) - Ω(callerSkip).Should(Equal(4)) - }) - }) - - Context("with a function that returns multiple values", func() { - It("should eventually succeed if the additional arguments are nil", func() { - i := 0 - Eventually(func() (int, error) { - i++ - return i, nil - }).Should(Equal(10)) - }) - - It("should eventually timeout if the additional arguments are not nil", func() { - i := 0 - a := New(AsyncAssertionTypeEventually, func() (int, error) { - i++ - return i, errors.New("bam") - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - a.Should(Equal(2)) - - Ω(failureMessage).Should(ContainSubstring("Timed out after")) - Ω(failureMessage).Should(ContainSubstring("Error:")) - Ω(failureMessage).Should(ContainSubstring("bam")) - Ω(callerSkip).Should(Equal(4)) - }) - }) - - Context("Making an assertion without a registered fail handler", func() { - It("should panic", func() { - defer func() { - e := recover() - RegisterFailHandler(Fail) - if e == nil { - Fail("expected a panic to have occurred") - } - }() - - RegisterFailHandler(nil) - c := make(chan bool, 1) - c <- true - Eventually(c).Should(Receive()) - }) - }) - }) - - Describe("Consistently", func() { - Describe("The positive case", func() { - Context("when the matcher consistently passes for the duration", func() { - It("should pass", func() { - calls := 0 - a := New(AsyncAssertionTypeConsistently, func() string { - calls++ - return "foo" - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.Should(Equal("foo")) - Ω(calls).Should(BeNumerically(">", 8)) - Ω(calls).Should(BeNumerically("<=", 10)) - Ω(failureMessage).Should(BeZero()) - }) - }) - - Context("when the matcher fails at some point", func() { - It("should fail", func() { - calls := 0 - a := New(AsyncAssertionTypeConsistently, func() interface{} { - calls++ - if calls > 5 { - return "bar" - } - return "foo" - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.Should(Equal("foo")) - Ω(failureMessage).Should(ContainSubstring("to equal")) - Ω(callerSkip).Should(Equal(4)) - }) - }) - - Context("when the matcher errors at some point", func() { - It("should fail", func() { - calls := 0 - a := New(AsyncAssertionTypeConsistently, func() interface{} { - calls++ - if calls > 5 { - return 3 - } - return []int{1, 2, 3} - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.Should(HaveLen(3)) - Ω(failureMessage).Should(ContainSubstring("HaveLen matcher expects")) - Ω(callerSkip).Should(Equal(4)) - }) - }) - }) - - Describe("The negative case", func() { - Context("when the matcher consistently passes for the duration", func() { - It("should pass", func() { - c := make(chan bool) - a := New(AsyncAssertionTypeConsistently, c, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.ShouldNot(Receive()) - Ω(failureMessage).Should(BeZero()) - }) - }) - - Context("when the matcher fails at some point", func() { - It("should fail", func() { - c := make(chan bool) - go func() { - time.Sleep(time.Duration(100 * time.Millisecond)) - c <- true - }() - - a := New(AsyncAssertionTypeConsistently, c, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.ShouldNot(Receive()) - Ω(failureMessage).Should(ContainSubstring("not to receive anything")) - }) - }) - - Context("when the matcher errors at some point", func() { - It("should fail", func() { - calls := 0 - a := New(AsyncAssertionTypeConsistently, func() interface{} { - calls++ - return calls - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - - a.ShouldNot(BeNumerically(">", 5)) - Ω(failureMessage).Should(ContainSubstring("not to be >")) - Ω(callerSkip).Should(Equal(4)) - }) - }) - }) - - Context("with a function that returns multiple values", func() { - It("should consistently succeed if the additional arguments are nil", func() { - i := 2 - Consistently(func() (int, error) { - i++ - return i, nil - }).Should(BeNumerically(">=", 2)) - }) - - It("should eventually timeout if the additional arguments are not nil", func() { - i := 2 - a := New(AsyncAssertionTypeEventually, func() (int, error) { - i++ - return i, errors.New("bam") - }, fakeFailHandler, time.Duration(0.2*float64(time.Second)), time.Duration(0.02*float64(time.Second)), 1) - a.Should(BeNumerically(">=", 2)) - - Ω(failureMessage).Should(ContainSubstring("Error:")) - Ω(failureMessage).Should(ContainSubstring("bam")) - Ω(callerSkip).Should(Equal(4)) - }) - }) - - Context("Making an assertion without a registered fail handler", func() { - It("should panic", func() { - defer func() { - e := recover() - RegisterFailHandler(Fail) - if e == nil { - Fail("expected a panic to have occurred") - } - }() - - RegisterFailHandler(nil) - c := make(chan bool) - Consistently(c).ShouldNot(Receive()) - }) - }) - }) - - Context("when passed a function with the wrong # or arguments & returns", func() { - It("should panic", func() { - Ω(func() { - New(AsyncAssertionTypeEventually, func() {}, fakeFailHandler, 0, 0, 1) - }).Should(Panic()) - - Ω(func() { - New(AsyncAssertionTypeEventually, func(a string) int { return 0 }, fakeFailHandler, 0, 0, 1) - }).Should(Panic()) - - Ω(func() { - New(AsyncAssertionTypeEventually, func() int { return 0 }, fakeFailHandler, 0, 0, 1) - }).ShouldNot(Panic()) - - Ω(func() { - New(AsyncAssertionTypeEventually, func() (int, error) { return 0, nil }, fakeFailHandler, 0, 0, 1) - }).ShouldNot(Panic()) - }) - }) - - Describe("bailing early", func() { - Context("when actual is a value", func() { - It("Eventually should bail out and fail early if the matcher says to", func() { - c := make(chan bool) - close(c) - - t := time.Now() - failures := InterceptGomegaFailures(func() { - Eventually(c, 0.1).Should(Receive()) - }) - Ω(time.Since(t)).Should(BeNumerically("<", 90*time.Millisecond)) - - Ω(failures).Should(HaveLen(1)) - }) - }) - - Context("when actual is a function", func() { - It("should never bail early", func() { - c := make(chan bool) - close(c) - - t := time.Now() - failures := InterceptGomegaFailures(func() { - Eventually(func() chan bool { - return c - }, 0.1).Should(Receive()) - }) - Ω(time.Since(t)).Should(BeNumerically(">=", 90*time.Millisecond)) - - Ω(failures).Should(HaveLen(1)) - }) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/internal/fakematcher/fake_matcher.go b/vendor/github.com/onsi/gomega/internal/fakematcher/fake_matcher.go deleted file mode 100644 index 6e351a7..0000000 --- a/vendor/github.com/onsi/gomega/internal/fakematcher/fake_matcher.go +++ /dev/null @@ -1,23 +0,0 @@ -package fakematcher - -import "fmt" - -type FakeMatcher struct { - ReceivedActual interface{} - MatchesToReturn bool - ErrToReturn error -} - -func (matcher *FakeMatcher) Match(actual interface{}) (bool, error) { - matcher.ReceivedActual = actual - - return matcher.MatchesToReturn, matcher.ErrToReturn -} - -func (matcher *FakeMatcher) FailureMessage(actual interface{}) string { - return fmt.Sprintf("positive: %v", actual) -} - -func (matcher *FakeMatcher) NegatedFailureMessage(actual interface{}) string { - return fmt.Sprintf("negative: %v", actual) -} diff --git a/vendor/github.com/onsi/gomega/internal/testingtsupport/testing_t_support_test.go b/vendor/github.com/onsi/gomega/internal/testingtsupport/testing_t_support_test.go deleted file mode 100644 index b9fbd6c..0000000 --- a/vendor/github.com/onsi/gomega/internal/testingtsupport/testing_t_support_test.go +++ /dev/null @@ -1,12 +0,0 @@ -package testingtsupport_test - -import ( - . "github.com/onsi/gomega" - - "testing" -) - -func TestTestingT(t *testing.T) { - RegisterTestingT(t) - Ω(true).Should(BeTrue()) -} diff --git a/vendor/github.com/onsi/gomega/matchers/and_test.go b/vendor/github.com/onsi/gomega/matchers/and_test.go deleted file mode 100644 index acf778c..0000000 --- a/vendor/github.com/onsi/gomega/matchers/and_test.go +++ /dev/null @@ -1,103 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" - "github.com/onsi/gomega/types" -) - -// sample data -var ( - // example input - input = "hi" - // some matchers that succeed against the input - true1 = HaveLen(2) - true2 = Equal("hi") - true3 = MatchRegexp("hi") - // some matchers that fail against the input. - false1 = HaveLen(1) - false2 = Equal("hip") - false3 = MatchRegexp("hope") -) - -// verifyFailureMessage expects the matcher to fail with the given input, and verifies the failure message. -func verifyFailureMessage(m types.GomegaMatcher, input string, expectedFailureMsgFragment string) { - Expect(m.Match(input)).To(BeFalse()) - Expect(m.FailureMessage(input)).To(Equal( - "Expected\n : " + input + "\n" + expectedFailureMsgFragment)) -} - -var _ = Describe("AndMatcher", func() { - It("works with positive cases", func() { - Expect(input).To(And()) - Expect(input).To(And(true1)) - Expect(input).To(And(true1, true2)) - Expect(input).To(And(true1, true2, true3)) - - // use alias - Expect(input).To(SatisfyAll(true1, true2, true3)) - }) - - It("works with negative cases", func() { - Expect(input).ToNot(And(false1, false2)) - Expect(input).ToNot(And(true1, true2, false3)) - Expect(input).ToNot(And(true1, false2, false3)) - Expect(input).ToNot(And(false1, true1, true2)) - }) - - Context("failure messages", func() { - Context("when match fails", func() { - It("gives a descriptive message", func() { - verifyFailureMessage(And(false1, true1), input, "to have length 1") - verifyFailureMessage(And(true1, false2), input, "to equal\n : hip") - verifyFailureMessage(And(true1, true2, false3), input, "to match regular expression\n : hope") - }) - }) - - Context("when match succeeds, but expected it to fail", func() { - It("gives a descriptive message", func() { - verifyFailureMessage(Not(And(true1, true2)), input, - `To not satisfy all of these matchers: [%!s(*matchers.HaveLenMatcher=&{2}) %!s(*matchers.EqualMatcher=&{hi})]`) - }) - }) - }) - - Context("MatchMayChangeInTheFuture", func() { - Context("Match returned false", func() { - Context("returns value of the failed matcher", func() { - It("false if failed matcher not going to change", func() { - // 3 matchers: 1st returns true, 2nd returns false and is not going to change, 3rd is never called - m := And(Not(BeNil()), Or(), Equal(1)) - Expect(m.Match("hi")).To(BeFalse()) - Expect(m.(*AndMatcher).MatchMayChangeInTheFuture("hi")).To(BeFalse()) // empty Or() indicates not going to change - }) - It("true if failed matcher indicates it might change", func() { - // 3 matchers: 1st returns true, 2nd returns false and "might" change, 3rd is never called - m := And(Not(BeNil()), Equal(5), Equal(1)) - Expect(m.Match("hi")).To(BeFalse()) - Expect(m.(*AndMatcher).MatchMayChangeInTheFuture("hi")).To(BeTrue()) // Equal(5) indicates it might change - }) - }) - }) - Context("Match returned true", func() { - It("returns true if any of the matchers could change", func() { - // 3 matchers, all return true, and all could change - m := And(Not(BeNil()), Equal("hi"), HaveLen(2)) - Expect(m.Match("hi")).To(BeTrue()) - Expect(m.(*AndMatcher).MatchMayChangeInTheFuture("hi")).To(BeTrue()) // all 3 of these matchers default to 'true' - }) - It("returns false if none of the matchers could change", func() { - // empty And() has the property of always matching, and never can change since there are no sub-matchers that could change - m := And() - Expect(m.Match("anything")).To(BeTrue()) - Expect(m.(*AndMatcher).MatchMayChangeInTheFuture("anything")).To(BeFalse()) - - // And() with 3 sub-matchers that return true, and can't change - m = And(And(), And(), And()) - Expect(m.Match("hi")).To(BeTrue()) - Expect(m.(*AndMatcher).MatchMayChangeInTheFuture("hi")).To(BeFalse()) // the 3 empty And()'s won't change - }) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher_test.go deleted file mode 100644 index d2280e0..0000000 --- a/vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("AssignableToTypeOf", func() { - Context("When asserting assignability between types", func() { - It("should do the right thing", func() { - Ω(0).Should(BeAssignableToTypeOf(0)) - Ω(5).Should(BeAssignableToTypeOf(-1)) - Ω("foo").Should(BeAssignableToTypeOf("bar")) - Ω(struct{ Foo string }{}).Should(BeAssignableToTypeOf(struct{ Foo string }{})) - - Ω(0).ShouldNot(BeAssignableToTypeOf("bar")) - Ω(5).ShouldNot(BeAssignableToTypeOf(struct{ Foo string }{})) - Ω("foo").ShouldNot(BeAssignableToTypeOf(42)) - }) - }) - - Context("When asserting nil values", func() { - It("should error", func() { - success, err := (&AssignableToTypeOfMatcher{Expected: nil}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/be_a_directory_test.go b/vendor/github.com/onsi/gomega/matchers/be_a_directory_test.go deleted file mode 100644 index e59d769..0000000 --- a/vendor/github.com/onsi/gomega/matchers/be_a_directory_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package matchers_test - -import ( - "io/ioutil" - "os" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeADirectoryMatcher", func() { - Context("when passed a string", func() { - It("should do the right thing", func() { - Ω("/dne/test").ShouldNot(BeADirectory()) - - tmpFile, err := ioutil.TempFile("", "gomega-test-tempfile") - Ω(err).ShouldNot(HaveOccurred()) - defer os.Remove(tmpFile.Name()) - Ω(tmpFile.Name()).ShouldNot(BeADirectory()) - - tmpDir, err := ioutil.TempDir("", "gomega-test-tempdir") - Ω(err).ShouldNot(HaveOccurred()) - defer os.Remove(tmpDir) - Ω(tmpDir).Should(BeADirectory()) - }) - }) - - Context("when passed something else", func() { - It("should error", func() { - success, err := (&BeADirectoryMatcher{}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeADirectoryMatcher{}).Match(true) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/be_a_regular_file_test.go b/vendor/github.com/onsi/gomega/matchers/be_a_regular_file_test.go deleted file mode 100644 index 951e750..0000000 --- a/vendor/github.com/onsi/gomega/matchers/be_a_regular_file_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package matchers_test - -import ( - "io/ioutil" - "os" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeARegularFileMatcher", func() { - Context("when passed a string", func() { - It("should do the right thing", func() { - Ω("/dne/test").ShouldNot(BeARegularFile()) - - tmpFile, err := ioutil.TempFile("", "gomega-test-tempfile") - Ω(err).ShouldNot(HaveOccurred()) - defer os.Remove(tmpFile.Name()) - Ω(tmpFile.Name()).Should(BeARegularFile()) - - tmpDir, err := ioutil.TempDir("", "gomega-test-tempdir") - Ω(err).ShouldNot(HaveOccurred()) - defer os.Remove(tmpDir) - Ω(tmpDir).ShouldNot(BeARegularFile()) - }) - }) - - Context("when passed something else", func() { - It("should error", func() { - success, err := (&BeARegularFileMatcher{}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeARegularFileMatcher{}).Match(true) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/be_an_existing_file_test.go b/vendor/github.com/onsi/gomega/matchers/be_an_existing_file_test.go deleted file mode 100644 index 775f7b6..0000000 --- a/vendor/github.com/onsi/gomega/matchers/be_an_existing_file_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package matchers_test - -import ( - "io/ioutil" - "os" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeAnExistingFileMatcher", func() { - Context("when passed a string", func() { - It("should do the right thing", func() { - Ω("/dne/test").ShouldNot(BeAnExistingFile()) - - tmpFile, err := ioutil.TempFile("", "gomega-test-tempfile") - Ω(err).ShouldNot(HaveOccurred()) - defer os.Remove(tmpFile.Name()) - Ω(tmpFile.Name()).Should(BeAnExistingFile()) - - tmpDir, err := ioutil.TempDir("", "gomega-test-tempdir") - Ω(err).ShouldNot(HaveOccurred()) - defer os.Remove(tmpDir) - Ω(tmpDir).Should(BeAnExistingFile()) - }) - }) - - Context("when passed something else", func() { - It("should error", func() { - success, err := (&BeAnExistingFileMatcher{}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeAnExistingFileMatcher{}).Match(true) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/be_closed_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/be_closed_matcher_test.go deleted file mode 100644 index b2c40c9..0000000 --- a/vendor/github.com/onsi/gomega/matchers/be_closed_matcher_test.go +++ /dev/null @@ -1,70 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeClosedMatcher", func() { - Context("when passed a channel", func() { - It("should do the right thing", func() { - openChannel := make(chan bool) - Ω(openChannel).ShouldNot(BeClosed()) - - var openReaderChannel <-chan bool - openReaderChannel = openChannel - Ω(openReaderChannel).ShouldNot(BeClosed()) - - closedChannel := make(chan bool) - close(closedChannel) - - Ω(closedChannel).Should(BeClosed()) - - var closedReaderChannel <-chan bool - closedReaderChannel = closedChannel - Ω(closedReaderChannel).Should(BeClosed()) - }) - }) - - Context("when passed a send-only channel", func() { - It("should error", func() { - openChannel := make(chan bool) - var openWriterChannel chan<- bool - openWriterChannel = openChannel - - success, err := (&BeClosedMatcher{}).Match(openWriterChannel) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - closedChannel := make(chan bool) - close(closedChannel) - - var closedWriterChannel chan<- bool - closedWriterChannel = closedChannel - - success, err = (&BeClosedMatcher{}).Match(closedWriterChannel) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - }) - }) - - Context("when passed something else", func() { - It("should error", func() { - var nilChannel chan bool - - success, err := (&BeClosedMatcher{}).Match(nilChannel) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeClosedMatcher{}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeClosedMatcher{}).Match(7) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/be_empty_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/be_empty_matcher_test.go deleted file mode 100644 index 541c1b9..0000000 --- a/vendor/github.com/onsi/gomega/matchers/be_empty_matcher_test.go +++ /dev/null @@ -1,52 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeEmpty", func() { - Context("when passed a supported type", func() { - It("should do the right thing", func() { - Ω("").Should(BeEmpty()) - Ω(" ").ShouldNot(BeEmpty()) - - Ω([0]int{}).Should(BeEmpty()) - Ω([1]int{1}).ShouldNot(BeEmpty()) - - Ω([]int{}).Should(BeEmpty()) - Ω([]int{1}).ShouldNot(BeEmpty()) - - Ω(map[string]int{}).Should(BeEmpty()) - Ω(map[string]int{"a": 1}).ShouldNot(BeEmpty()) - - c := make(chan bool, 1) - Ω(c).Should(BeEmpty()) - c <- true - Ω(c).ShouldNot(BeEmpty()) - }) - }) - - Context("when passed a correctly typed nil", func() { - It("should be true", func() { - var nilSlice []int - Ω(nilSlice).Should(BeEmpty()) - - var nilMap map[int]string - Ω(nilMap).Should(BeEmpty()) - }) - }) - - Context("when passed an unsupported type", func() { - It("should error", func() { - success, err := (&BeEmptyMatcher{}).Match(0) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeEmptyMatcher{}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher_test.go deleted file mode 100644 index def5104..0000000 --- a/vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher_test.go +++ /dev/null @@ -1,50 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeEquivalentTo", func() { - Context("when asserting that nil is equivalent to nil", func() { - It("should error", func() { - success, err := (&BeEquivalentToMatcher{Expected: nil}).Match(nil) - - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("When asserting on nil", func() { - It("should do the right thing", func() { - Ω("foo").ShouldNot(BeEquivalentTo(nil)) - Ω(nil).ShouldNot(BeEquivalentTo(3)) - Ω([]int{1, 2}).ShouldNot(BeEquivalentTo(nil)) - }) - }) - - Context("When asserting on type aliases", func() { - It("should the right thing", func() { - Ω(StringAlias("foo")).Should(BeEquivalentTo("foo")) - Ω("foo").Should(BeEquivalentTo(StringAlias("foo"))) - Ω(StringAlias("foo")).ShouldNot(BeEquivalentTo("bar")) - Ω("foo").ShouldNot(BeEquivalentTo(StringAlias("bar"))) - }) - }) - - Context("When asserting on numbers", func() { - It("should convert actual to expected and do the right thing", func() { - Ω(5).Should(BeEquivalentTo(5)) - Ω(5.0).Should(BeEquivalentTo(5.0)) - Ω(5).Should(BeEquivalentTo(5.0)) - - Ω(5).ShouldNot(BeEquivalentTo("5")) - Ω(5).ShouldNot(BeEquivalentTo(3)) - - //Here be dragons! - Ω(5.1).Should(BeEquivalentTo(5)) - Ω(5).ShouldNot(BeEquivalentTo(5.1)) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/be_false_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/be_false_matcher_test.go deleted file mode 100644 index 3965a2c..0000000 --- a/vendor/github.com/onsi/gomega/matchers/be_false_matcher_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeFalse", func() { - It("should handle true and false correctly", func() { - Ω(true).ShouldNot(BeFalse()) - Ω(false).Should(BeFalse()) - }) - - It("should only support booleans", func() { - success, err := (&BeFalseMatcher{}).Match("foo") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/be_identical_to_test.go b/vendor/github.com/onsi/gomega/matchers/be_identical_to_test.go deleted file mode 100644 index 8b90a1a..0000000 --- a/vendor/github.com/onsi/gomega/matchers/be_identical_to_test.go +++ /dev/null @@ -1,61 +0,0 @@ -package matchers_test - -import ( - "errors" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeIdenticalTo", func() { - Context("when asserting that nil equals nil", func() { - It("should error", func() { - success, err := (&BeIdenticalToMatcher{Expected: nil}).Match(nil) - - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - It("should treat the same pointer to a struct as identical", func() { - mySpecialStruct := myCustomType{} - Ω(&mySpecialStruct).Should(BeIdenticalTo(&mySpecialStruct)) - Ω(&myCustomType{}).ShouldNot(BeIdenticalTo(&mySpecialStruct)) - }) - - It("should be strict about types", func() { - Ω(5).ShouldNot(BeIdenticalTo("5")) - Ω(5).ShouldNot(BeIdenticalTo(5.0)) - Ω(5).ShouldNot(BeIdenticalTo(3)) - }) - - It("should treat primtives as identical", func() { - Ω("5").Should(BeIdenticalTo("5")) - Ω("5").ShouldNot(BeIdenticalTo("55")) - - Ω(5.55).Should(BeIdenticalTo(5.55)) - Ω(5.55).ShouldNot(BeIdenticalTo(6.66)) - - Ω(5).Should(BeIdenticalTo(5)) - Ω(5).ShouldNot(BeIdenticalTo(55)) - }) - - It("should treat the same pointers to a slice as identical", func() { - mySlice := []int{1, 2} - Ω(&mySlice).Should(BeIdenticalTo(&mySlice)) - Ω(&mySlice).ShouldNot(BeIdenticalTo(&[]int{1, 2})) - }) - - It("should treat the same pointers to a map as identical", func() { - myMap := map[string]string{"a": "b", "c": "d"} - Ω(&myMap).Should(BeIdenticalTo(&myMap)) - Ω(myMap).ShouldNot(BeIdenticalTo(map[string]string{"a": "b", "c": "d"})) - }) - - It("should treat the same pointers to an error as identical", func() { - myError := errors.New("foo") - Ω(&myError).Should(BeIdenticalTo(&myError)) - Ω(errors.New("foo")).ShouldNot(BeIdenticalTo(errors.New("bar"))) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/be_nil_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/be_nil_matcher_test.go deleted file mode 100644 index 7533253..0000000 --- a/vendor/github.com/onsi/gomega/matchers/be_nil_matcher_test.go +++ /dev/null @@ -1,28 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("BeNil", func() { - It("should succeed when passed nil", func() { - Ω(nil).Should(BeNil()) - }) - - It("should succeed when passed a typed nil", func() { - var a []int - Ω(a).Should(BeNil()) - }) - - It("should succeed when passing nil pointer", func() { - var f *struct{} - Ω(f).Should(BeNil()) - }) - - It("should not succeed when not passed nil", func() { - Ω(0).ShouldNot(BeNil()) - Ω(false).ShouldNot(BeNil()) - Ω("").ShouldNot(BeNil()) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher_test.go deleted file mode 100644 index 43fdb1f..0000000 --- a/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher_test.go +++ /dev/null @@ -1,148 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeNumerically", func() { - Context("when passed a number", func() { - It("should support ==", func() { - Ω(uint32(5)).Should(BeNumerically("==", 5)) - Ω(float64(5.0)).Should(BeNumerically("==", 5)) - Ω(int8(5)).Should(BeNumerically("==", 5)) - }) - - It("should not have false positives", func() { - Ω(5.1).ShouldNot(BeNumerically("==", 5)) - Ω(5).ShouldNot(BeNumerically("==", 5.1)) - }) - - It("should support >", func() { - Ω(uint32(5)).Should(BeNumerically(">", 4)) - Ω(float64(5.0)).Should(BeNumerically(">", 4.9)) - Ω(int8(5)).Should(BeNumerically(">", 4)) - - Ω(uint32(5)).ShouldNot(BeNumerically(">", 5)) - Ω(float64(5.0)).ShouldNot(BeNumerically(">", 5.0)) - Ω(int8(5)).ShouldNot(BeNumerically(">", 5)) - }) - - It("should support <", func() { - Ω(uint32(5)).Should(BeNumerically("<", 6)) - Ω(float64(5.0)).Should(BeNumerically("<", 5.1)) - Ω(int8(5)).Should(BeNumerically("<", 6)) - - Ω(uint32(5)).ShouldNot(BeNumerically("<", 5)) - Ω(float64(5.0)).ShouldNot(BeNumerically("<", 5.0)) - Ω(int8(5)).ShouldNot(BeNumerically("<", 5)) - }) - - It("should support >=", func() { - Ω(uint32(5)).Should(BeNumerically(">=", 4)) - Ω(float64(5.0)).Should(BeNumerically(">=", 4.9)) - Ω(int8(5)).Should(BeNumerically(">=", 4)) - - Ω(uint32(5)).Should(BeNumerically(">=", 5)) - Ω(float64(5.0)).Should(BeNumerically(">=", 5.0)) - Ω(int8(5)).Should(BeNumerically(">=", 5)) - - Ω(uint32(5)).ShouldNot(BeNumerically(">=", 6)) - Ω(float64(5.0)).ShouldNot(BeNumerically(">=", 5.1)) - Ω(int8(5)).ShouldNot(BeNumerically(">=", 6)) - }) - - It("should support <=", func() { - Ω(uint32(5)).Should(BeNumerically("<=", 6)) - Ω(float64(5.0)).Should(BeNumerically("<=", 5.1)) - Ω(int8(5)).Should(BeNumerically("<=", 6)) - - Ω(uint32(5)).Should(BeNumerically("<=", 5)) - Ω(float64(5.0)).Should(BeNumerically("<=", 5.0)) - Ω(int8(5)).Should(BeNumerically("<=", 5)) - - Ω(uint32(5)).ShouldNot(BeNumerically("<=", 4)) - Ω(float64(5.0)).ShouldNot(BeNumerically("<=", 4.9)) - Ω(int8(5)).Should(BeNumerically("<=", 5)) - }) - - Context("when passed ~", func() { - Context("when passed a float", func() { - Context("and there is no precision parameter", func() { - It("should default to 1e-8", func() { - Ω(5.00000001).Should(BeNumerically("~", 5.00000002)) - Ω(5.00000001).ShouldNot(BeNumerically("~", 5.0000001)) - }) - }) - - Context("and there is a precision parameter", func() { - It("should use the precision parameter", func() { - Ω(5.1).Should(BeNumerically("~", 5.19, 0.1)) - Ω(5.1).Should(BeNumerically("~", 5.01, 0.1)) - Ω(5.1).ShouldNot(BeNumerically("~", 5.22, 0.1)) - Ω(5.1).ShouldNot(BeNumerically("~", 4.98, 0.1)) - }) - }) - }) - - Context("when passed an int/uint", func() { - Context("and there is no precision parameter", func() { - It("should just do strict equality", func() { - Ω(5).Should(BeNumerically("~", 5)) - Ω(5).ShouldNot(BeNumerically("~", 6)) - Ω(uint(5)).ShouldNot(BeNumerically("~", 6)) - }) - }) - - Context("and there is a precision parameter", func() { - It("should use precision paramter", func() { - Ω(5).Should(BeNumerically("~", 6, 2)) - Ω(5).ShouldNot(BeNumerically("~", 8, 2)) - Ω(uint(5)).Should(BeNumerically("~", 6, 1)) - }) - }) - }) - }) - }) - - Context("when passed a non-number", func() { - It("should error", func() { - success, err := (&BeNumericallyMatcher{Comparator: "==", CompareTo: []interface{}{5}}).Match("foo") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeNumericallyMatcher{Comparator: "=="}).Match(5) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeNumericallyMatcher{Comparator: "~", CompareTo: []interface{}{3.0, "foo"}}).Match(5.0) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeNumericallyMatcher{Comparator: "==", CompareTo: []interface{}{"bar"}}).Match(5) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeNumericallyMatcher{Comparator: "==", CompareTo: []interface{}{"bar"}}).Match("foo") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeNumericallyMatcher{Comparator: "==", CompareTo: []interface{}{nil}}).Match(0) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeNumericallyMatcher{Comparator: "==", CompareTo: []interface{}{0}}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed an unsupported comparator", func() { - It("should error", func() { - success, err := (&BeNumericallyMatcher{Comparator: "!=", CompareTo: []interface{}{5}}).Match(4) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/be_sent_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/be_sent_matcher_test.go deleted file mode 100644 index 205d71f..0000000 --- a/vendor/github.com/onsi/gomega/matchers/be_sent_matcher_test.go +++ /dev/null @@ -1,106 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/gomega/matchers" - "time" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("BeSent", func() { - Context("when passed a channel and a matching type", func() { - Context("when the channel is ready to receive", func() { - It("should succeed and send the value down the channel", func() { - c := make(chan string) - d := make(chan string) - go func() { - val := <-c - d <- val - }() - - time.Sleep(10 * time.Millisecond) - - Ω(c).Should(BeSent("foo")) - Eventually(d).Should(Receive(Equal("foo"))) - }) - - It("should succeed (with a buffered channel)", func() { - c := make(chan string, 1) - Ω(c).Should(BeSent("foo")) - Ω(<-c).Should(Equal("foo")) - }) - }) - - Context("when the channel is not ready to receive", func() { - It("should fail and not send down the channel", func() { - c := make(chan string) - Ω(c).ShouldNot(BeSent("foo")) - Consistently(c).ShouldNot(Receive()) - }) - }) - - Context("when the channel is eventually ready to receive", func() { - It("should succeed", func() { - c := make(chan string) - d := make(chan string) - go func() { - time.Sleep(30 * time.Millisecond) - val := <-c - d <- val - }() - - Eventually(c).Should(BeSent("foo")) - Eventually(d).Should(Receive(Equal("foo"))) - }) - }) - - Context("when the channel is closed", func() { - It("should error", func() { - c := make(chan string) - close(c) - success, err := (&BeSentMatcher{Arg: "foo"}).Match(c) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - - It("should short-circuit Eventually", func() { - c := make(chan string) - close(c) - - t := time.Now() - failures := InterceptGomegaFailures(func() { - Eventually(c, 10.0).Should(BeSent("foo")) - }) - Ω(failures).Should(HaveLen(1)) - Ω(time.Since(t)).Should(BeNumerically("<", time.Second)) - }) - }) - }) - - Context("when passed a channel and a non-matching type", func() { - It("should error", func() { - success, err := (&BeSentMatcher{Arg: "foo"}).Match(make(chan int, 1)) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed a receive-only channel", func() { - It("should error", func() { - var c <-chan string - c = make(chan string, 1) - success, err := (&BeSentMatcher{Arg: "foo"}).Match(c) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed a nonchannel", func() { - It("should error", func() { - success, err := (&BeSentMatcher{Arg: "foo"}).Match("bar") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/be_temporally_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/be_temporally_matcher_test.go deleted file mode 100644 index feb33e5..0000000 --- a/vendor/github.com/onsi/gomega/matchers/be_temporally_matcher_test.go +++ /dev/null @@ -1,98 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" - "time" -) - -var _ = Describe("BeTemporally", func() { - - var t0, t1, t2 time.Time - BeforeEach(func() { - t0 = time.Now() - t1 = t0.Add(time.Second) - t2 = t0.Add(-time.Second) - }) - - Context("When comparing times", func() { - - It("should support ==", func() { - Ω(t0).Should(BeTemporally("==", t0)) - Ω(t1).ShouldNot(BeTemporally("==", t0)) - Ω(t0).ShouldNot(BeTemporally("==", t1)) - Ω(t0).ShouldNot(BeTemporally("==", time.Time{})) - }) - - It("should support >", func() { - Ω(t0).Should(BeTemporally(">", t2)) - Ω(t0).ShouldNot(BeTemporally(">", t0)) - Ω(t2).ShouldNot(BeTemporally(">", t0)) - }) - - It("should support <", func() { - Ω(t0).Should(BeTemporally("<", t1)) - Ω(t0).ShouldNot(BeTemporally("<", t0)) - Ω(t1).ShouldNot(BeTemporally("<", t0)) - }) - - It("should support >=", func() { - Ω(t0).Should(BeTemporally(">=", t2)) - Ω(t0).Should(BeTemporally(">=", t0)) - Ω(t0).ShouldNot(BeTemporally(">=", t1)) - }) - - It("should support <=", func() { - Ω(t0).Should(BeTemporally("<=", t1)) - Ω(t0).Should(BeTemporally("<=", t0)) - Ω(t0).ShouldNot(BeTemporally("<=", t2)) - }) - - Context("when passed ~", func() { - Context("and there is no precision parameter", func() { - BeforeEach(func() { - t1 = t0.Add(time.Millisecond / 2) - t2 = t0.Add(-2 * time.Millisecond) - }) - It("should approximate", func() { - Ω(t0).Should(BeTemporally("~", t0)) - Ω(t0).Should(BeTemporally("~", t1)) - Ω(t0).ShouldNot(BeTemporally("~", t2)) - }) - }) - - Context("and there is a precision parameter", func() { - BeforeEach(func() { - t2 = t0.Add(3 * time.Second) - }) - It("should use precision paramter", func() { - d := 2 * time.Second - Ω(t0).Should(BeTemporally("~", t0, d)) - Ω(t0).Should(BeTemporally("~", t1, d)) - Ω(t0).ShouldNot(BeTemporally("~", t2, d)) - }) - }) - }) - }) - - Context("when passed a non-time", func() { - It("should error", func() { - success, err := (&BeTemporallyMatcher{Comparator: "==", CompareTo: t0}).Match("foo") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&BeTemporallyMatcher{Comparator: "=="}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed an unsupported comparator", func() { - It("should error", func() { - success, err := (&BeTemporallyMatcher{Comparator: "!=", CompareTo: t0}).Match(t2) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/be_true_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/be_true_matcher_test.go deleted file mode 100644 index ca32e56..0000000 --- a/vendor/github.com/onsi/gomega/matchers/be_true_matcher_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("BeTrue", func() { - It("should handle true and false correctly", func() { - Ω(true).Should(BeTrue()) - Ω(false).ShouldNot(BeTrue()) - }) - - It("should only support booleans", func() { - success, err := (&BeTrueMatcher{}).Match("foo") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/be_zero_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/be_zero_matcher_test.go deleted file mode 100644 index 8ec3643..0000000 --- a/vendor/github.com/onsi/gomega/matchers/be_zero_matcher_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("BeZero", func() { - It("should succeed if the passed in object is the zero value for its type", func() { - Ω(nil).Should(BeZero()) - - Ω("").Should(BeZero()) - Ω(" ").ShouldNot(BeZero()) - - Ω(0).Should(BeZero()) - Ω(1).ShouldNot(BeZero()) - - Ω(0.0).Should(BeZero()) - Ω(0.1).ShouldNot(BeZero()) - - // Ω([]int{}).Should(BeZero()) - Ω([]int{1}).ShouldNot(BeZero()) - - // Ω(map[string]int{}).Should(BeZero()) - Ω(map[string]int{"a": 1}).ShouldNot(BeZero()) - - Ω(myCustomType{}).Should(BeZero()) - Ω(myCustomType{s: "a"}).ShouldNot(BeZero()) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/consist_of_test.go b/vendor/github.com/onsi/gomega/matchers/consist_of_test.go deleted file mode 100644 index dcd1afe..0000000 --- a/vendor/github.com/onsi/gomega/matchers/consist_of_test.go +++ /dev/null @@ -1,75 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -var _ = Describe("ConsistOf", func() { - Context("with a slice", func() { - It("should do the right thing", func() { - Ω([]string{"foo", "bar", "baz"}).Should(ConsistOf("foo", "bar", "baz")) - Ω([]string{"foo", "bar", "baz"}).Should(ConsistOf("foo", "bar", "baz")) - Ω([]string{"foo", "bar", "baz"}).Should(ConsistOf("baz", "bar", "foo")) - Ω([]string{"foo", "bar", "baz"}).ShouldNot(ConsistOf("baz", "bar", "foo", "foo")) - Ω([]string{"foo", "bar", "baz"}).ShouldNot(ConsistOf("baz", "foo")) - }) - }) - - Context("with an array", func() { - It("should do the right thing", func() { - Ω([3]string{"foo", "bar", "baz"}).Should(ConsistOf("foo", "bar", "baz")) - Ω([3]string{"foo", "bar", "baz"}).Should(ConsistOf("baz", "bar", "foo")) - Ω([3]string{"foo", "bar", "baz"}).ShouldNot(ConsistOf("baz", "bar", "foo", "foo")) - Ω([3]string{"foo", "bar", "baz"}).ShouldNot(ConsistOf("baz", "foo")) - }) - }) - - Context("with a map", func() { - It("should apply to the values", func() { - Ω(map[int]string{1: "foo", 2: "bar", 3: "baz"}).Should(ConsistOf("foo", "bar", "baz")) - Ω(map[int]string{1: "foo", 2: "bar", 3: "baz"}).Should(ConsistOf("baz", "bar", "foo")) - Ω(map[int]string{1: "foo", 2: "bar", 3: "baz"}).ShouldNot(ConsistOf("baz", "bar", "foo", "foo")) - Ω(map[int]string{1: "foo", 2: "bar", 3: "baz"}).ShouldNot(ConsistOf("baz", "foo")) - }) - - }) - - Context("with anything else", func() { - It("should error", func() { - failures := InterceptGomegaFailures(func() { - Ω("foo").Should(ConsistOf("f", "o", "o")) - }) - - Ω(failures).Should(HaveLen(1)) - }) - }) - - Context("when passed matchers", func() { - It("should pass if the matchers pass", func() { - Ω([]string{"foo", "bar", "baz"}).Should(ConsistOf("foo", MatchRegexp("^ba"), "baz")) - Ω([]string{"foo", "bar", "baz"}).ShouldNot(ConsistOf("foo", MatchRegexp("^ba"))) - Ω([]string{"foo", "bar", "baz"}).ShouldNot(ConsistOf("foo", MatchRegexp("^ba"), MatchRegexp("foo"))) - Ω([]string{"foo", "bar", "baz"}).Should(ConsistOf("foo", MatchRegexp("^ba"), MatchRegexp("^ba"))) - Ω([]string{"foo", "bar", "baz"}).ShouldNot(ConsistOf("foo", MatchRegexp("^ba"), MatchRegexp("turducken"))) - }) - - It("should not depend on the order of the matchers", func() { - Ω([][]int{[]int{1, 2}, []int{2}}).Should(ConsistOf(ContainElement(1), ContainElement(2))) - Ω([][]int{[]int{1, 2}, []int{2}}).Should(ConsistOf(ContainElement(2), ContainElement(1))) - }) - - Context("when a matcher errors", func() { - It("should soldier on", func() { - Ω([]string{"foo", "bar", "baz"}).ShouldNot(ConsistOf(BeFalse(), "foo", "bar")) - Ω([]interface{}{"foo", "bar", false}).Should(ConsistOf(BeFalse(), ContainSubstring("foo"), "bar")) - }) - }) - }) - - Context("when passed exactly one argument, and that argument is a slice", func() { - It("should match against the elements of that argument", func() { - Ω([]string{"foo", "bar", "baz"}).Should(ConsistOf([]string{"foo", "bar", "baz"})) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/contain_element_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/contain_element_matcher_test.go deleted file mode 100644 index 38ee518..0000000 --- a/vendor/github.com/onsi/gomega/matchers/contain_element_matcher_test.go +++ /dev/null @@ -1,76 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("ContainElement", func() { - Context("when passed a supported type", func() { - Context("and expecting a non-matcher", func() { - It("should do the right thing", func() { - Ω([2]int{1, 2}).Should(ContainElement(2)) - Ω([2]int{1, 2}).ShouldNot(ContainElement(3)) - - Ω([]int{1, 2}).Should(ContainElement(2)) - Ω([]int{1, 2}).ShouldNot(ContainElement(3)) - - Ω(map[string]int{"foo": 1, "bar": 2}).Should(ContainElement(2)) - Ω(map[int]int{3: 1, 4: 2}).ShouldNot(ContainElement(3)) - - arr := make([]myCustomType, 2) - arr[0] = myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b"}} - arr[1] = myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "c"}} - Ω(arr).Should(ContainElement(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b"}})) - Ω(arr).ShouldNot(ContainElement(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"b", "c"}})) - }) - }) - - Context("and expecting a matcher", func() { - It("should pass each element through the matcher", func() { - Ω([]int{1, 2, 3}).Should(ContainElement(BeNumerically(">=", 3))) - Ω([]int{1, 2, 3}).ShouldNot(ContainElement(BeNumerically(">", 3))) - Ω(map[string]int{"foo": 1, "bar": 2}).Should(ContainElement(BeNumerically(">=", 2))) - Ω(map[string]int{"foo": 1, "bar": 2}).ShouldNot(ContainElement(BeNumerically(">", 2))) - }) - - It("should power through even if the matcher ever fails", func() { - Ω([]interface{}{1, 2, "3", 4}).Should(ContainElement(BeNumerically(">=", 3))) - }) - - It("should fail if the matcher fails", func() { - actual := []interface{}{1, 2, "3", "4"} - success, err := (&ContainElementMatcher{Element: BeNumerically(">=", 3)}).Match(actual) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - }) - - Context("when passed a correctly typed nil", func() { - It("should operate succesfully on the passed in value", func() { - var nilSlice []int - Ω(nilSlice).ShouldNot(ContainElement(1)) - - var nilMap map[int]string - Ω(nilMap).ShouldNot(ContainElement("foo")) - }) - }) - - Context("when passed an unsupported type", func() { - It("should error", func() { - success, err := (&ContainElementMatcher{Element: 0}).Match(0) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&ContainElementMatcher{Element: 0}).Match("abc") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&ContainElementMatcher{Element: 0}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/contain_substring_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/contain_substring_matcher_test.go deleted file mode 100644 index 6935168..0000000 --- a/vendor/github.com/onsi/gomega/matchers/contain_substring_matcher_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("ContainSubstringMatcher", func() { - Context("when actual is a string", func() { - It("should match against the string", func() { - Ω("Marvelous").Should(ContainSubstring("rve")) - Ω("Marvelous").ShouldNot(ContainSubstring("boo")) - }) - }) - - Context("when the matcher is called with multiple arguments", func() { - It("should pass the string and arguments to sprintf", func() { - Ω("Marvelous3").Should(ContainSubstring("velous%d", 3)) - }) - }) - - Context("when actual is a stringer", func() { - It("should call the stringer and match agains the returned string", func() { - Ω(&myStringer{a: "Abc3"}).Should(ContainSubstring("bc3")) - }) - }) - - Context("when actual is neither a string nor a stringer", func() { - It("should error", func() { - success, err := (&ContainSubstringMatcher{Substr: "2"}).Match(2) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/equal_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/equal_matcher_test.go deleted file mode 100644 index 2add0b7..0000000 --- a/vendor/github.com/onsi/gomega/matchers/equal_matcher_test.go +++ /dev/null @@ -1,78 +0,0 @@ -package matchers_test - -import ( - "errors" - "strings" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("Equal", func() { - Context("when asserting that nil equals nil", func() { - It("should error", func() { - success, err := (&EqualMatcher{Expected: nil}).Match(nil) - - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("When asserting equality between objects", func() { - It("should do the right thing", func() { - Ω(5).Should(Equal(5)) - Ω(5.0).Should(Equal(5.0)) - - Ω(5).ShouldNot(Equal("5")) - Ω(5).ShouldNot(Equal(5.0)) - Ω(5).ShouldNot(Equal(3)) - - Ω("5").Should(Equal("5")) - Ω([]int{1, 2}).Should(Equal([]int{1, 2})) - Ω([]int{1, 2}).ShouldNot(Equal([]int{2, 1})) - Ω(map[string]string{"a": "b", "c": "d"}).Should(Equal(map[string]string{"a": "b", "c": "d"})) - Ω(map[string]string{"a": "b", "c": "d"}).ShouldNot(Equal(map[string]string{"a": "b", "c": "e"})) - Ω(errors.New("foo")).Should(Equal(errors.New("foo"))) - Ω(errors.New("foo")).ShouldNot(Equal(errors.New("bar"))) - - Ω(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b"}}).Should(Equal(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b"}})) - Ω(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b"}}).ShouldNot(Equal(myCustomType{s: "bar", n: 3, f: 2.0, arr: []string{"a", "b"}})) - Ω(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b"}}).ShouldNot(Equal(myCustomType{s: "foo", n: 2, f: 2.0, arr: []string{"a", "b"}})) - Ω(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b"}}).ShouldNot(Equal(myCustomType{s: "foo", n: 3, f: 3.0, arr: []string{"a", "b"}})) - Ω(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b"}}).ShouldNot(Equal(myCustomType{s: "foo", n: 3, f: 2.0, arr: []string{"a", "b", "c"}})) - }) - }) - - Describe("failure messages", func() { - It("shows the two strings simply when they are short", func() { - subject := EqualMatcher{Expected: "eric"} - - failureMessage := subject.FailureMessage("tim") - Ω(failureMessage).To(BeEquivalentTo(expectedShortStringFailureMessage)) - }) - - It("shows the exact point where two long strings differ", func() { - stringWithB := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - stringWithZ := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - - subject := EqualMatcher{Expected: stringWithZ} - - failureMessage := subject.FailureMessage(stringWithB) - Ω(failureMessage).To(BeEquivalentTo(expectedLongStringFailureMessage)) - }) - }) -}) - -var expectedShortStringFailureMessage = strings.TrimSpace(` -Expected - : tim -to equal - : eric -`) -var expectedLongStringFailureMessage = strings.TrimSpace(` -Expected - : "...aaaaabaaaaa..." -to equal | - : "...aaaaazaaaaa..." -`) diff --git a/vendor/github.com/onsi/gomega/matchers/have_cap_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/have_cap_matcher_test.go deleted file mode 100644 index a92a177..0000000 --- a/vendor/github.com/onsi/gomega/matchers/have_cap_matcher_test.go +++ /dev/null @@ -1,50 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("HaveCap", func() { - Context("when passed a supported type", func() { - It("should do the right thing", func() { - Ω([0]int{}).Should(HaveCap(0)) - Ω([2]int{1}).Should(HaveCap(2)) - - Ω([]int{}).Should(HaveCap(0)) - Ω([]int{1, 2, 3, 4, 5}[:2]).Should(HaveCap(5)) - Ω(make([]int, 0, 5)).Should(HaveCap(5)) - - c := make(chan bool, 3) - Ω(c).Should(HaveCap(3)) - c <- true - c <- true - Ω(c).Should(HaveCap(3)) - - Ω(make(chan bool)).Should(HaveCap(0)) - }) - }) - - Context("when passed a correctly typed nil", func() { - It("should operate succesfully on the passed in value", func() { - var nilSlice []int - Ω(nilSlice).Should(HaveCap(0)) - - var nilChan chan int - Ω(nilChan).Should(HaveCap(0)) - }) - }) - - Context("when passed an unsupported type", func() { - It("should error", func() { - success, err := (&HaveCapMatcher{Count: 0}).Match(0) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&HaveCapMatcher{Count: 0}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/have_key_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/have_key_matcher_test.go deleted file mode 100644 index c663e30..0000000 --- a/vendor/github.com/onsi/gomega/matchers/have_key_matcher_test.go +++ /dev/null @@ -1,73 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("HaveKey", func() { - var ( - stringKeys map[string]int - intKeys map[int]string - objKeys map[*myCustomType]string - - customA *myCustomType - customB *myCustomType - ) - BeforeEach(func() { - stringKeys = map[string]int{"foo": 2, "bar": 3} - intKeys = map[int]string{2: "foo", 3: "bar"} - - customA = &myCustomType{s: "a", n: 2, f: 2.3, arr: []string{"ice", "cream"}} - customB = &myCustomType{s: "b", n: 4, f: 3.1, arr: []string{"cake"}} - objKeys = map[*myCustomType]string{customA: "aardvark", customB: "kangaroo"} - }) - - Context("when passed a map", func() { - It("should do the right thing", func() { - Ω(stringKeys).Should(HaveKey("foo")) - Ω(stringKeys).ShouldNot(HaveKey("baz")) - - Ω(intKeys).Should(HaveKey(2)) - Ω(intKeys).ShouldNot(HaveKey(4)) - - Ω(objKeys).Should(HaveKey(customA)) - Ω(objKeys).Should(HaveKey(&myCustomType{s: "b", n: 4, f: 3.1, arr: []string{"cake"}})) - Ω(objKeys).ShouldNot(HaveKey(&myCustomType{s: "b", n: 4, f: 3.1, arr: []string{"apple", "pie"}})) - }) - }) - - Context("when passed a correctly typed nil", func() { - It("should operate succesfully on the passed in value", func() { - var nilMap map[int]string - Ω(nilMap).ShouldNot(HaveKey("foo")) - }) - }) - - Context("when the passed in key is actually a matcher", func() { - It("should pass each element through the matcher", func() { - Ω(stringKeys).Should(HaveKey(ContainSubstring("oo"))) - Ω(stringKeys).ShouldNot(HaveKey(ContainSubstring("foobar"))) - }) - - It("should fail if the matcher ever fails", func() { - actual := map[int]string{1: "a", 3: "b", 2: "c"} - success, err := (&HaveKeyMatcher{Key: ContainSubstring("ar")}).Match(actual) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed something that is not a map", func() { - It("should error", func() { - success, err := (&HaveKeyMatcher{Key: "foo"}).Match([]string{"foo"}) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&HaveKeyMatcher{Key: "foo"}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher_test.go deleted file mode 100644 index 06a2242..0000000 --- a/vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher_test.go +++ /dev/null @@ -1,82 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("HaveKeyWithValue", func() { - var ( - stringKeys map[string]int - intKeys map[int]string - objKeys map[*myCustomType]*myCustomType - - customA *myCustomType - customB *myCustomType - ) - BeforeEach(func() { - stringKeys = map[string]int{"foo": 2, "bar": 3} - intKeys = map[int]string{2: "foo", 3: "bar"} - - customA = &myCustomType{s: "a", n: 2, f: 2.3, arr: []string{"ice", "cream"}} - customB = &myCustomType{s: "b", n: 4, f: 3.1, arr: []string{"cake"}} - objKeys = map[*myCustomType]*myCustomType{customA: customA, customB: customA} - }) - - Context("when passed a map", func() { - It("should do the right thing", func() { - Ω(stringKeys).Should(HaveKeyWithValue("foo", 2)) - Ω(stringKeys).ShouldNot(HaveKeyWithValue("foo", 1)) - Ω(stringKeys).ShouldNot(HaveKeyWithValue("baz", 2)) - Ω(stringKeys).ShouldNot(HaveKeyWithValue("baz", 1)) - - Ω(intKeys).Should(HaveKeyWithValue(2, "foo")) - Ω(intKeys).ShouldNot(HaveKeyWithValue(4, "foo")) - Ω(intKeys).ShouldNot(HaveKeyWithValue(2, "baz")) - - Ω(objKeys).Should(HaveKeyWithValue(customA, customA)) - Ω(objKeys).Should(HaveKeyWithValue(&myCustomType{s: "b", n: 4, f: 3.1, arr: []string{"cake"}}, &myCustomType{s: "a", n: 2, f: 2.3, arr: []string{"ice", "cream"}})) - Ω(objKeys).ShouldNot(HaveKeyWithValue(&myCustomType{s: "b", n: 4, f: 3.1, arr: []string{"apple", "pie"}}, customA)) - }) - }) - - Context("when passed a correctly typed nil", func() { - It("should operate succesfully on the passed in value", func() { - var nilMap map[int]string - Ω(nilMap).ShouldNot(HaveKeyWithValue("foo", "bar")) - }) - }) - - Context("when the passed in key or value is actually a matcher", func() { - It("should pass each element through the matcher", func() { - Ω(stringKeys).Should(HaveKeyWithValue(ContainSubstring("oo"), 2)) - Ω(intKeys).Should(HaveKeyWithValue(2, ContainSubstring("oo"))) - Ω(stringKeys).ShouldNot(HaveKeyWithValue(ContainSubstring("foobar"), 2)) - }) - - It("should fail if the matcher ever fails", func() { - actual := map[int]string{1: "a", 3: "b", 2: "c"} - success, err := (&HaveKeyWithValueMatcher{Key: ContainSubstring("ar"), Value: 2}).Match(actual) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - otherActual := map[string]int{"a": 1, "b": 2, "c": 3} - success, err = (&HaveKeyWithValueMatcher{Key: "a", Value: ContainSubstring("1")}).Match(otherActual) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed something that is not a map", func() { - It("should error", func() { - success, err := (&HaveKeyWithValueMatcher{Key: "foo", Value: "bar"}).Match([]string{"foo"}) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&HaveKeyWithValueMatcher{Key: "foo", Value: "bar"}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/have_len_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/have_len_matcher_test.go deleted file mode 100644 index 1e6aa69..0000000 --- a/vendor/github.com/onsi/gomega/matchers/have_len_matcher_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("HaveLen", func() { - Context("when passed a supported type", func() { - It("should do the right thing", func() { - Ω("").Should(HaveLen(0)) - Ω("AA").Should(HaveLen(2)) - - Ω([0]int{}).Should(HaveLen(0)) - Ω([2]int{1, 2}).Should(HaveLen(2)) - - Ω([]int{}).Should(HaveLen(0)) - Ω([]int{1, 2, 3}).Should(HaveLen(3)) - - Ω(map[string]int{}).Should(HaveLen(0)) - Ω(map[string]int{"a": 1, "b": 2, "c": 3, "d": 4}).Should(HaveLen(4)) - - c := make(chan bool, 3) - Ω(c).Should(HaveLen(0)) - c <- true - c <- true - Ω(c).Should(HaveLen(2)) - }) - }) - - Context("when passed a correctly typed nil", func() { - It("should operate succesfully on the passed in value", func() { - var nilSlice []int - Ω(nilSlice).Should(HaveLen(0)) - - var nilMap map[int]string - Ω(nilMap).Should(HaveLen(0)) - }) - }) - - Context("when passed an unsupported type", func() { - It("should error", func() { - success, err := (&HaveLenMatcher{Count: 0}).Match(0) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&HaveLenMatcher{Count: 0}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/have_occurred_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/have_occurred_matcher_test.go deleted file mode 100644 index 009e23e..0000000 --- a/vendor/github.com/onsi/gomega/matchers/have_occurred_matcher_test.go +++ /dev/null @@ -1,58 +0,0 @@ -package matchers_test - -import ( - "errors" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -type CustomErr struct { - msg string -} - -func (e *CustomErr) Error() string { - return e.msg -} - -var _ = Describe("HaveOccurred", func() { - It("should succeed if matching an error", func() { - Ω(errors.New("Foo")).Should(HaveOccurred()) - }) - - It("should not succeed with nil", func() { - Ω(nil).ShouldNot(HaveOccurred()) - }) - - It("should only support errors and nil", func() { - success, err := (&HaveOccurredMatcher{}).Match("foo") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&HaveOccurredMatcher{}).Match("") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - - It("doesn't support non-error type", func() { - success, err := (&HaveOccurredMatcher{}).Match(AnyType{}) - Ω(success).Should(BeFalse()) - Ω(err).Should(MatchError("Expected an error-type. Got:\n : {}")) - }) - - It("doesn't support non-error pointer type", func() { - success, err := (&HaveOccurredMatcher{}).Match(&AnyType{}) - Ω(success).Should(BeFalse()) - Ω(err).Should(MatchError(MatchRegexp(`Expected an error-type. Got:\n <*matchers_test.AnyType | 0x[[:xdigit:]]+>: {}`))) - }) - - It("should succeed with pointer types that conform to error interface", func() { - err := &CustomErr{"ohai"} - Ω(err).Should(HaveOccurred()) - }) - - It("should not succeed with nil pointers to types that conform to error interface", func() { - var err *CustomErr = nil - Ω(err).ShouldNot(HaveOccurred()) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/have_prefix_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/have_prefix_matcher_test.go deleted file mode 100644 index bec3f97..0000000 --- a/vendor/github.com/onsi/gomega/matchers/have_prefix_matcher_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("HavePrefixMatcher", func() { - Context("when actual is a string", func() { - It("should match a string prefix", func() { - Ω("Ab").Should(HavePrefix("A")) - Ω("A").ShouldNot(HavePrefix("Ab")) - }) - }) - - Context("when the matcher is called with multiple arguments", func() { - It("should pass the string and arguments to sprintf", func() { - Ω("C3PO").Should(HavePrefix("C%dP", 3)) - }) - }) - - Context("when actual is a stringer", func() { - It("should call the stringer and match against the returned string", func() { - Ω(&myStringer{a: "Ab"}).Should(HavePrefix("A")) - }) - }) - - Context("when actual is neither a string nor a stringer", func() { - It("should error", func() { - success, err := (&HavePrefixMatcher{Prefix: "2"}).Match(2) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/have_suffix_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/have_suffix_matcher_test.go deleted file mode 100644 index 72e8975..0000000 --- a/vendor/github.com/onsi/gomega/matchers/have_suffix_matcher_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("HaveSuffixMatcher", func() { - Context("when actual is a string", func() { - It("should match a string suffix", func() { - Ω("Ab").Should(HaveSuffix("b")) - Ω("A").ShouldNot(HaveSuffix("Ab")) - }) - }) - - Context("when the matcher is called with multiple arguments", func() { - It("should pass the string and arguments to sprintf", func() { - Ω("C3PO").Should(HaveSuffix("%dPO", 3)) - }) - }) - - Context("when actual is a stringer", func() { - It("should call the stringer and match against the returned string", func() { - Ω(&myStringer{a: "Ab"}).Should(HaveSuffix("b")) - }) - }) - - Context("when actual is neither a string nor a stringer", func() { - It("should error", func() { - success, err := (&HaveSuffixMatcher{Suffix: "2"}).Match(2) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/match_error_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/match_error_matcher_test.go deleted file mode 100644 index 338b512..0000000 --- a/vendor/github.com/onsi/gomega/matchers/match_error_matcher_test.go +++ /dev/null @@ -1,93 +0,0 @@ -package matchers_test - -import ( - "errors" - "fmt" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -type CustomError struct { -} - -func (c CustomError) Error() string { - return "an error" -} - -var _ = Describe("MatchErrorMatcher", func() { - Context("When asserting against an error", func() { - It("should succeed when matching with an error", func() { - err := errors.New("an error") - fmtErr := fmt.Errorf("an error") - customErr := CustomError{} - - Ω(err).Should(MatchError(errors.New("an error"))) - Ω(err).ShouldNot(MatchError(errors.New("another error"))) - - Ω(fmtErr).Should(MatchError(errors.New("an error"))) - Ω(customErr).Should(MatchError(CustomError{})) - }) - - It("should succeed when matching with a string", func() { - err := errors.New("an error") - fmtErr := fmt.Errorf("an error") - customErr := CustomError{} - - Ω(err).Should(MatchError("an error")) - Ω(err).ShouldNot(MatchError("another error")) - - Ω(fmtErr).Should(MatchError("an error")) - Ω(customErr).Should(MatchError("an error")) - }) - - Context("when passed a matcher", func() { - It("should pass if the matcher passes against the error string", func() { - err := errors.New("error 123 abc") - - Ω(err).Should(MatchError(MatchRegexp(`\d{3}`))) - }) - - It("should fail if the matcher fails against the error string", func() { - err := errors.New("no digits") - Ω(err).ShouldNot(MatchError(MatchRegexp(`\d`))) - }) - }) - - It("should fail when passed anything else", func() { - actualErr := errors.New("an error") - _, err := (&MatchErrorMatcher{ - Expected: []byte("an error"), - }).Match(actualErr) - Ω(err).Should(HaveOccurred()) - - _, err = (&MatchErrorMatcher{ - Expected: 3, - }).Match(actualErr) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed nil", func() { - It("should fail", func() { - _, err := (&MatchErrorMatcher{ - Expected: "an error", - }).Match(nil) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed a non-error", func() { - It("should fail", func() { - _, err := (&MatchErrorMatcher{ - Expected: "an error", - }).Match("an error") - Ω(err).Should(HaveOccurred()) - - _, err = (&MatchErrorMatcher{ - Expected: "an error", - }).Match(3) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/match_json_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/match_json_matcher_test.go deleted file mode 100644 index 755c4ad..0000000 --- a/vendor/github.com/onsi/gomega/matchers/match_json_matcher_test.go +++ /dev/null @@ -1,73 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("MatchJSONMatcher", func() { - Context("When passed stringifiables", func() { - It("should succeed if the JSON matches", func() { - Ω("{}").Should(MatchJSON("{}")) - Ω(`{"a":1}`).Should(MatchJSON(`{"a":1}`)) - Ω(`{ - "a":1 - }`).Should(MatchJSON(`{"a":1}`)) - Ω(`{"a":1, "b":2}`).Should(MatchJSON(`{"b":2, "a":1}`)) - Ω(`{"a":1}`).ShouldNot(MatchJSON(`{"b":2, "a":1}`)) - }) - - It("should work with byte arrays", func() { - Ω([]byte("{}")).Should(MatchJSON([]byte("{}"))) - Ω("{}").Should(MatchJSON([]byte("{}"))) - Ω([]byte("{}")).Should(MatchJSON("{}")) - }) - }) - - Context("when the expected is not valid JSON", func() { - It("should error and explain why", func() { - success, err := (&MatchJSONMatcher{JSONToMatch: `{}`}).Match(`oops`) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - Ω(err.Error()).Should(ContainSubstring("Actual 'oops' should be valid JSON")) - }) - }) - - Context("when the actual is not valid JSON", func() { - It("should error and explain why", func() { - success, err := (&MatchJSONMatcher{JSONToMatch: `oops`}).Match(`{}`) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - Ω(err.Error()).Should(ContainSubstring("Expected 'oops' should be valid JSON")) - }) - }) - - Context("when the expected is neither a string nor a stringer nor a byte array", func() { - It("should error", func() { - success, err := (&MatchJSONMatcher{JSONToMatch: 2}).Match("{}") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - Ω(err.Error()).Should(ContainSubstring("MatchJSONMatcher matcher requires a string, stringer, or []byte. Got expected:\n : 2")) - - success, err = (&MatchJSONMatcher{JSONToMatch: nil}).Match("{}") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - Ω(err.Error()).Should(ContainSubstring("MatchJSONMatcher matcher requires a string, stringer, or []byte. Got expected:\n : nil")) - }) - }) - - Context("when the actual is neither a string nor a stringer nor a byte array", func() { - It("should error", func() { - success, err := (&MatchJSONMatcher{JSONToMatch: "{}"}).Match(2) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - Ω(err.Error()).Should(ContainSubstring("MatchJSONMatcher matcher requires a string, stringer, or []byte. Got actual:\n : 2")) - - success, err = (&MatchJSONMatcher{JSONToMatch: "{}"}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - Ω(err.Error()).Should(ContainSubstring("MatchJSONMatcher matcher requires a string, stringer, or []byte. Got actual:\n : nil")) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/match_regexp_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/match_regexp_matcher_test.go deleted file mode 100644 index bb521cc..0000000 --- a/vendor/github.com/onsi/gomega/matchers/match_regexp_matcher_test.go +++ /dev/null @@ -1,44 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("MatchRegexp", func() { - Context("when actual is a string", func() { - It("should match against the string", func() { - Ω(" a2!bla").Should(MatchRegexp(`\d!`)) - Ω(" a2!bla").ShouldNot(MatchRegexp(`[A-Z]`)) - }) - }) - - Context("when actual is a stringer", func() { - It("should call the stringer and match agains the returned string", func() { - Ω(&myStringer{a: "Abc3"}).Should(MatchRegexp(`[A-Z][a-z]+\d`)) - }) - }) - - Context("when the matcher is called with multiple arguments", func() { - It("should pass the string and arguments to sprintf", func() { - Ω(" a23!bla").Should(MatchRegexp(`\d%d!`, 3)) - }) - }) - - Context("when actual is neither a string nor a stringer", func() { - It("should error", func() { - success, err := (&MatchRegexpMatcher{Regexp: `\d`}).Match(2) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when the passed in regexp fails to compile", func() { - It("should error", func() { - success, err := (&MatchRegexpMatcher{Regexp: "("}).Match("Foo") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/match_yaml_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/match_yaml_matcher_test.go deleted file mode 100644 index 8e63de1..0000000 --- a/vendor/github.com/onsi/gomega/matchers/match_yaml_matcher_test.go +++ /dev/null @@ -1,94 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("MatchYAMLMatcher", func() { - Context("When passed stringifiables", func() { - It("should succeed if the YAML matches", func() { - Expect("---").Should(MatchYAML("")) - Expect("a: 1").Should(MatchYAML(`{"a":1}`)) - Expect("a: 1\nb: 2").Should(MatchYAML(`{"b":2, "a":1}`)) - }) - - It("should explain if the YAML does not match when it should", func() { - message := (&MatchYAMLMatcher{YAMLToMatch: "a: 1"}).FailureMessage("b: 2") - Expect(message).To(MatchRegexp(`Expected\s+: b: 2\s+to match YAML of\s+: a: 1`)) - }) - - It("should normalise the expected and actual when explaining if the YAML does not match when it should", func() { - message := (&MatchYAMLMatcher{YAMLToMatch: "a: 'one'"}).FailureMessage("{b: two}") - Expect(message).To(MatchRegexp(`Expected\s+: b: two\s+to match YAML of\s+: a: one`)) - }) - - It("should explain if the YAML matches when it should not", func() { - message := (&MatchYAMLMatcher{YAMLToMatch: "a: 1"}).NegatedFailureMessage("a: 1") - Expect(message).To(MatchRegexp(`Expected\s+: a: 1\s+not to match YAML of\s+: a: 1`)) - }) - - It("should normalise the expected and actual when explaining if the YAML matches when it should not", func() { - message := (&MatchYAMLMatcher{YAMLToMatch: "a: 'one'"}).NegatedFailureMessage("{a: one}") - Expect(message).To(MatchRegexp(`Expected\s+: a: one\s+not to match YAML of\s+: a: one`)) - }) - - It("should fail if the YAML does not match", func() { - Expect("a: 1").ShouldNot(MatchYAML(`{"b":2, "a":1}`)) - }) - - It("should work with byte arrays", func() { - Expect([]byte("a: 1")).Should(MatchYAML([]byte("a: 1"))) - Expect("a: 1").Should(MatchYAML([]byte("a: 1"))) - Expect([]byte("a: 1")).Should(MatchYAML("a: 1")) - }) - }) - - Context("when the expected is not valid YAML", func() { - It("should error and explain why", func() { - success, err := (&MatchYAMLMatcher{YAMLToMatch: ""}).Match("good:\nbad") - Expect(success).Should(BeFalse()) - Expect(err).Should(HaveOccurred()) - Expect(err.Error()).Should(ContainSubstring("Actual 'good:\nbad' should be valid YAML")) - }) - }) - - Context("when the actual is not valid YAML", func() { - It("should error and explain why", func() { - success, err := (&MatchYAMLMatcher{YAMLToMatch: "good:\nbad"}).Match("") - Expect(success).Should(BeFalse()) - Expect(err).Should(HaveOccurred()) - Expect(err.Error()).Should(ContainSubstring("Expected 'good:\nbad' should be valid YAML")) - }) - }) - - Context("when the expected is neither a string nor a stringer nor a byte array", func() { - It("should error", func() { - success, err := (&MatchYAMLMatcher{YAMLToMatch: 2}).Match("") - Expect(success).Should(BeFalse()) - Expect(err).Should(HaveOccurred()) - Expect(err.Error()).Should(ContainSubstring("MatchYAMLMatcher matcher requires a string, stringer, or []byte. Got expected:\n : 2")) - - success, err = (&MatchYAMLMatcher{YAMLToMatch: nil}).Match("") - Expect(success).Should(BeFalse()) - Expect(err).Should(HaveOccurred()) - Expect(err.Error()).Should(ContainSubstring("MatchYAMLMatcher matcher requires a string, stringer, or []byte. Got expected:\n : nil")) - }) - }) - - Context("when the actual is neither a string nor a stringer nor a byte array", func() { - It("should error", func() { - success, err := (&MatchYAMLMatcher{YAMLToMatch: ""}).Match(2) - Expect(success).Should(BeFalse()) - Expect(err).Should(HaveOccurred()) - Expect(err.Error()).Should(ContainSubstring("MatchYAMLMatcher matcher requires a string, stringer, or []byte. Got actual:\n : 2")) - - success, err = (&MatchYAMLMatcher{YAMLToMatch: ""}).Match(nil) - Expect(success).Should(BeFalse()) - Expect(err).Should(HaveOccurred()) - Expect(err.Error()).Should(ContainSubstring("MatchYAMLMatcher matcher requires a string, stringer, or []byte. Got actual:\n : nil")) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/matcher_tests_suite_test.go b/vendor/github.com/onsi/gomega/matchers/matcher_tests_suite_test.go deleted file mode 100644 index 01b11b9..0000000 --- a/vendor/github.com/onsi/gomega/matchers/matcher_tests_suite_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package matchers_test - -import ( - "testing" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" -) - -type myStringer struct { - a string -} - -func (s *myStringer) String() string { - return s.a -} - -type StringAlias string - -type myCustomType struct { - s string - n int - f float32 - arr []string -} - -func Test(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Gomega Matchers") -} diff --git a/vendor/github.com/onsi/gomega/matchers/not_test.go b/vendor/github.com/onsi/gomega/matchers/not_test.go deleted file mode 100644 index b3c1fdb..0000000 --- a/vendor/github.com/onsi/gomega/matchers/not_test.go +++ /dev/null @@ -1,57 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("NotMatcher", func() { - Context("basic examples", func() { - It("works", func() { - Expect(input).To(Not(false1)) - Expect(input).To(Not(Not(true2))) - Expect(input).ToNot(Not(true3)) - Expect(input).ToNot(Not(Not(false1))) - Expect(input).To(Not(Not(Not(false2)))) - }) - }) - - Context("De Morgan's laws", func() { - It("~(A && B) == ~A || ~B", func() { - Expect(input).To(Not(And(false1, false2))) - Expect(input).To(Or(Not(false1), Not(false2))) - }) - It("~(A || B) == ~A && ~B", func() { - Expect(input).To(Not(Or(false1, false2))) - Expect(input).To(And(Not(false1), Not(false2))) - }) - }) - - Context("failure messages are opposite of original matchers' failure messages", func() { - Context("when match fails", func() { - It("gives a descriptive message", func() { - verifyFailureMessage(Not(HaveLen(2)), input, "not to have length 2") - }) - }) - - Context("when match succeeds, but expected it to fail", func() { - It("gives a descriptive message", func() { - verifyFailureMessage(Not(Not(HaveLen(3))), input, "to have length 3") - }) - }) - }) - - Context("MatchMayChangeInTheFuture()", func() { - It("Propagates value from wrapped matcher", func() { - m := Not(Or()) // an empty Or() always returns false, and indicates it cannot change - Expect(m.Match("anything")).To(BeTrue()) - Expect(m.(*NotMatcher).MatchMayChangeInTheFuture("anything")).To(BeFalse()) - }) - It("Defaults to true", func() { - m := Not(Equal(1)) // Equal does not have this method - Expect(m.Match(2)).To(BeTrue()) - Expect(m.(*NotMatcher).MatchMayChangeInTheFuture(2)).To(BeTrue()) // defaults to true - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/or_test.go b/vendor/github.com/onsi/gomega/matchers/or_test.go deleted file mode 100644 index 9589a17..0000000 --- a/vendor/github.com/onsi/gomega/matchers/or_test.go +++ /dev/null @@ -1,85 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("OrMatcher", func() { - It("works with positive cases", func() { - Expect(input).To(Or(true1)) - Expect(input).To(Or(true1, true2)) - Expect(input).To(Or(true1, false1)) - Expect(input).To(Or(false1, true2)) - Expect(input).To(Or(true1, true2, true3)) - Expect(input).To(Or(true1, true2, false3)) - Expect(input).To(Or(true1, false2, true3)) - Expect(input).To(Or(false1, true2, true3)) - Expect(input).To(Or(true1, false2, false3)) - Expect(input).To(Or(false1, false2, true3)) - - // use alias - Expect(input).To(SatisfyAny(false1, false2, true3)) - }) - - It("works with negative cases", func() { - Expect(input).ToNot(Or()) - Expect(input).ToNot(Or(false1)) - Expect(input).ToNot(Or(false1, false2)) - Expect(input).ToNot(Or(false1, false2, false3)) - }) - - Context("failure messages", func() { - Context("when match fails", func() { - It("gives a descriptive message", func() { - verifyFailureMessage(Or(false1, false2), input, - "To satisfy at least one of these matchers: [%!s(*matchers.HaveLenMatcher=&{1}) %!s(*matchers.EqualMatcher=&{hip})]") - }) - }) - - Context("when match succeeds, but expected it to fail", func() { - It("gives a descriptive message", func() { - verifyFailureMessage(Not(Or(true1, true2)), input, `not to have length 2`) - }) - }) - }) - - Context("MatchMayChangeInTheFuture", func() { - Context("Match returned false", func() { - It("returns true if any of the matchers could change", func() { - // 3 matchers, all return false, and all could change - m := Or(BeNil(), Equal("hip"), HaveLen(1)) - Expect(m.Match("hi")).To(BeFalse()) - Expect(m.(*OrMatcher).MatchMayChangeInTheFuture("hi")).To(BeTrue()) // all 3 of these matchers default to 'true' - }) - It("returns false if none of the matchers could change", func() { - // empty Or() has the property of never matching, and never can change since there are no sub-matchers that could change - m := Or() - Expect(m.Match("anything")).To(BeFalse()) - Expect(m.(*OrMatcher).MatchMayChangeInTheFuture("anything")).To(BeFalse()) - - // Or() with 3 sub-matchers that return false, and can't change - m = Or(Or(), Or(), Or()) - Expect(m.Match("hi")).To(BeFalse()) - Expect(m.(*OrMatcher).MatchMayChangeInTheFuture("hi")).To(BeFalse()) // the 3 empty Or()'s won't change - }) - }) - Context("Match returned true", func() { - Context("returns value of the successful matcher", func() { - It("false if successful matcher not going to change", func() { - // 3 matchers: 1st returns false, 2nd returns true and is not going to change, 3rd is never called - m := Or(BeNil(), And(), Equal(1)) - Expect(m.Match("hi")).To(BeTrue()) - Expect(m.(*OrMatcher).MatchMayChangeInTheFuture("hi")).To(BeFalse()) - }) - It("true if successful matcher indicates it might change", func() { - // 3 matchers: 1st returns false, 2nd returns true and "might" change, 3rd is never called - m := Or(Not(BeNil()), Equal("hi"), Equal(1)) - Expect(m.Match("hi")).To(BeTrue()) - Expect(m.(*OrMatcher).MatchMayChangeInTheFuture("hi")).To(BeTrue()) // Equal("hi") indicates it might change - }) - }) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/panic_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/panic_matcher_test.go deleted file mode 100644 index 6b859a7..0000000 --- a/vendor/github.com/onsi/gomega/matchers/panic_matcher_test.go +++ /dev/null @@ -1,45 +0,0 @@ -package matchers_test - -import ( - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("Panic", func() { - Context("when passed something that's not a function that takes zero arguments and returns nothing", func() { - It("should error", func() { - success, err := (&PanicMatcher{}).Match("foo") - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&PanicMatcher{}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&PanicMatcher{}).Match(func(foo string) {}) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&PanicMatcher{}).Match(func() string { return "bar" }) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when passed a function of the correct type", func() { - It("should call the function and pass if the function panics", func() { - Ω(func() { panic("ack!") }).Should(Panic()) - Ω(func() {}).ShouldNot(Panic()) - }) - }) - - Context("when assertion fails", func() { - It("should print the object passed to Panic", func() { - failuresMessages := InterceptGomegaFailures(func() { - Ω(func() { panic("ack!") }).ShouldNot(Panic()) - }) - Ω(failuresMessages).Should(ConsistOf(MatchRegexp("not to panic, but panicked with\\s*: ack!"))) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/receive_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/receive_matcher_test.go deleted file mode 100644 index 938c078..0000000 --- a/vendor/github.com/onsi/gomega/matchers/receive_matcher_test.go +++ /dev/null @@ -1,280 +0,0 @@ -package matchers_test - -import ( - "time" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -type kungFuActor interface { - DrunkenMaster() bool -} - -type jackie struct { - name string -} - -func (j *jackie) DrunkenMaster() bool { - return true -} - -var _ = Describe("ReceiveMatcher", func() { - Context("with no argument", func() { - Context("for a buffered channel", func() { - It("should succeed", func() { - channel := make(chan bool, 1) - - Ω(channel).ShouldNot(Receive()) - - channel <- true - - Ω(channel).Should(Receive()) - }) - }) - - Context("for an unbuffered channel", func() { - It("should succeed (eventually)", func() { - channel := make(chan bool) - - Ω(channel).ShouldNot(Receive()) - - go func() { - time.Sleep(10 * time.Millisecond) - channel <- true - }() - - Eventually(channel).Should(Receive()) - }) - }) - }) - - Context("with a pointer argument", func() { - Context("of the correct type", func() { - It("should write the value received on the channel to the pointer", func() { - channel := make(chan int, 1) - - var value int - - Ω(channel).ShouldNot(Receive(&value)) - Ω(value).Should(BeZero()) - - channel <- 17 - - Ω(channel).Should(Receive(&value)) - Ω(value).Should(Equal(17)) - }) - }) - - Context("to various types of objects", func() { - It("should work", func() { - //channels of strings - stringChan := make(chan string, 1) - stringChan <- "foo" - - var s string - Ω(stringChan).Should(Receive(&s)) - Ω(s).Should(Equal("foo")) - - //channels of slices - sliceChan := make(chan []bool, 1) - sliceChan <- []bool{true, true, false} - - var sl []bool - Ω(sliceChan).Should(Receive(&sl)) - Ω(sl).Should(Equal([]bool{true, true, false})) - - //channels of channels - chanChan := make(chan chan bool, 1) - c := make(chan bool) - chanChan <- c - - var receivedC chan bool - Ω(chanChan).Should(Receive(&receivedC)) - Ω(receivedC).Should(Equal(c)) - - //channels of interfaces - jackieChan := make(chan kungFuActor, 1) - aJackie := &jackie{name: "Jackie Chan"} - jackieChan <- aJackie - - var theJackie kungFuActor - Ω(jackieChan).Should(Receive(&theJackie)) - Ω(theJackie).Should(Equal(aJackie)) - }) - }) - - Context("of the wrong type", func() { - It("should error", func() { - channel := make(chan int) - var incorrectType bool - - success, err := (&ReceiveMatcher{Arg: &incorrectType}).Match(channel) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - var notAPointer int - success, err = (&ReceiveMatcher{Arg: notAPointer}).Match(channel) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - }) - - Context("with a matcher", func() { - It("should defer to the underlying matcher", func() { - intChannel := make(chan int, 1) - intChannel <- 3 - Ω(intChannel).Should(Receive(Equal(3))) - - intChannel <- 2 - Ω(intChannel).ShouldNot(Receive(Equal(3))) - - stringChannel := make(chan []string, 1) - stringChannel <- []string{"foo", "bar", "baz"} - Ω(stringChannel).Should(Receive(ContainElement(ContainSubstring("fo")))) - - stringChannel <- []string{"foo", "bar", "baz"} - Ω(stringChannel).ShouldNot(Receive(ContainElement(ContainSubstring("archipelago")))) - }) - - It("should defer to the underlying matcher for the message", func() { - matcher := Receive(Equal(3)) - channel := make(chan int, 1) - channel <- 2 - matcher.Match(channel) - Ω(matcher.FailureMessage(channel)).Should(MatchRegexp(`Expected\s+: 2\s+to equal\s+: 3`)) - - channel <- 3 - matcher.Match(channel) - Ω(matcher.NegatedFailureMessage(channel)).Should(MatchRegexp(`Expected\s+: 3\s+not to equal\s+: 3`)) - }) - - It("should work just fine with Eventually", func() { - stringChannel := make(chan string) - - go func() { - time.Sleep(5 * time.Millisecond) - stringChannel <- "A" - time.Sleep(5 * time.Millisecond) - stringChannel <- "B" - }() - - Eventually(stringChannel).Should(Receive(Equal("B"))) - }) - - Context("if the matcher errors", func() { - It("should error", func() { - channel := make(chan int, 1) - channel <- 3 - success, err := (&ReceiveMatcher{Arg: ContainSubstring("three")}).Match(channel) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("if nothing is received", func() { - It("should fail", func() { - channel := make(chan int, 1) - success, err := (&ReceiveMatcher{Arg: Equal(1)}).Match(channel) - Ω(success).Should(BeFalse()) - Ω(err).ShouldNot(HaveOccurred()) - }) - }) - }) - - Context("When actual is a *closed* channel", func() { - Context("for a buffered channel", func() { - It("should work until it hits the end of the buffer", func() { - channel := make(chan bool, 1) - channel <- true - - close(channel) - - Ω(channel).Should(Receive()) - Ω(channel).ShouldNot(Receive()) - }) - }) - - Context("for an unbuffered channel", func() { - It("should always fail", func() { - channel := make(chan bool) - close(channel) - - Ω(channel).ShouldNot(Receive()) - }) - }) - }) - - Context("When actual is a send-only channel", func() { - It("should error", func() { - channel := make(chan bool) - - var writerChannel chan<- bool - writerChannel = channel - - success, err := (&ReceiveMatcher{}).Match(writerChannel) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Context("when acutal is a non-channel", func() { - It("should error", func() { - var nilChannel chan bool - - success, err := (&ReceiveMatcher{}).Match(nilChannel) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&ReceiveMatcher{}).Match(nil) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - - success, err = (&ReceiveMatcher{}).Match(3) - Ω(success).Should(BeFalse()) - Ω(err).Should(HaveOccurred()) - }) - }) - - Describe("when used with eventually and a custom matcher", func() { - It("should return the matcher's error when a failing value is received on the channel, instead of the must receive something failure", func() { - failures := InterceptGomegaFailures(func() { - c := make(chan string, 0) - Eventually(c, 0.01).Should(Receive(Equal("hello"))) - }) - Ω(failures[0]).Should(ContainSubstring("When passed a matcher, ReceiveMatcher's channel *must* receive something.")) - - failures = InterceptGomegaFailures(func() { - c := make(chan string, 1) - c <- "hi" - Eventually(c, 0.01).Should(Receive(Equal("hello"))) - }) - Ω(failures[0]).Should(ContainSubstring(": hello")) - }) - }) - - Describe("Bailing early", func() { - It("should bail early when passed a closed channel", func() { - c := make(chan bool) - close(c) - - t := time.Now() - failures := InterceptGomegaFailures(func() { - Eventually(c).Should(Receive()) - }) - Ω(time.Since(t)).Should(BeNumerically("<", 500*time.Millisecond)) - Ω(failures).Should(HaveLen(1)) - }) - - It("should bail early when passed a non-channel", func() { - t := time.Now() - failures := InterceptGomegaFailures(func() { - Eventually(3).Should(Receive()) - }) - Ω(time.Since(t)).Should(BeNumerically("<", 500*time.Millisecond)) - Ω(failures).Should(HaveLen(1)) - }) - }) -}) diff --git a/vendor/github.com/onsi/gomega/matchers/succeed_matcher_test.go b/vendor/github.com/onsi/gomega/matchers/succeed_matcher_test.go deleted file mode 100644 index 6b62c8b..0000000 --- a/vendor/github.com/onsi/gomega/matchers/succeed_matcher_test.go +++ /dev/null @@ -1,62 +0,0 @@ -package matchers_test - -import ( - "errors" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -func Erroring() error { - return errors.New("bam") -} - -func NotErroring() error { - return nil -} - -type AnyType struct{} - -func Invalid() *AnyType { - return nil -} - -var _ = Describe("Succeed", func() { - It("should succeed if the function succeeds", func() { - Ω(NotErroring()).Should(Succeed()) - }) - - It("should succeed (in the negated) if the function errored", func() { - Ω(Erroring()).ShouldNot(Succeed()) - }) - - It("should not if passed a non-error", func() { - success, err := (&SucceedMatcher{}).Match(Invalid()) - Ω(success).Should(BeFalse()) - Ω(err).Should(MatchError("Expected an error-type. Got:\n <*matchers_test.AnyType | 0x0>: nil")) - }) - - It("doesn't support non-error type", func() { - success, err := (&SucceedMatcher{}).Match(AnyType{}) - Ω(success).Should(BeFalse()) - Ω(err).Should(MatchError("Expected an error-type. Got:\n : {}")) - }) - - It("doesn't support non-error pointer type", func() { - success, err := (&SucceedMatcher{}).Match(&AnyType{}) - Ω(success).Should(BeFalse()) - Ω(err).Should(MatchError(MatchRegexp(`Expected an error-type. Got:\n <*matchers_test.AnyType | 0x[[:xdigit:]]+>: {}`))) - }) - - It("should not succeed with pointer types that conform to error interface", func() { - err := &CustomErr{"ohai"} - Ω(err).ShouldNot(Succeed()) - }) - - It("should succeed with nil pointers to types that conform to error interface", func() { - var err *CustomErr = nil - Ω(err).Should(Succeed()) - }) - -}) diff --git a/vendor/github.com/onsi/gomega/matchers/support/goraph/MIT.LICENSE b/vendor/github.com/onsi/gomega/matchers/support/goraph/MIT.LICENSE deleted file mode 100644 index 8edd817..0000000 --- a/vendor/github.com/onsi/gomega/matchers/support/goraph/MIT.LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2014 Amit Kumar Gupta - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/github.com/onsi/gomega/matchers/with_transform_test.go b/vendor/github.com/onsi/gomega/matchers/with_transform_test.go deleted file mode 100644 index e52bf8e..0000000 --- a/vendor/github.com/onsi/gomega/matchers/with_transform_test.go +++ /dev/null @@ -1,102 +0,0 @@ -package matchers_test - -import ( - "errors" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - . "github.com/onsi/gomega/matchers" -) - -var _ = Describe("WithTransformMatcher", func() { - - var plus1 = func(i int) int { return i + 1 } - - Context("Panic if transform function invalid", func() { - panicsWithTransformer := func(transform interface{}) { - ExpectWithOffset(1, func() { WithTransform(transform, nil) }).To(Panic()) - } - It("nil", func() { - panicsWithTransformer(nil) - }) - Context("Invalid number of args, but correct return value count", func() { - It("zero", func() { - panicsWithTransformer(func() int { return 5 }) - }) - It("two", func() { - panicsWithTransformer(func(i, j int) int { return 5 }) - }) - }) - Context("Invalid number of return values, but correct number of arguments", func() { - It("zero", func() { - panicsWithTransformer(func(i int) {}) - }) - It("two", func() { - panicsWithTransformer(func(i int) (int, int) { return 5, 6 }) - }) - }) - }) - - It("works with positive cases", func() { - Expect(1).To(WithTransform(plus1, Equal(2))) - Expect(1).To(WithTransform(plus1, WithTransform(plus1, Equal(3)))) - Expect(1).To(WithTransform(plus1, And(Equal(2), BeNumerically(">", 1)))) - - // transform expects custom type - type S struct { - A int - B string - } - transformer := func(s S) string { return s.B } - Expect(S{1, "hi"}).To(WithTransform(transformer, Equal("hi"))) - - // transform expects interface - errString := func(e error) string { return e.Error() } - Expect(errors.New("abc")).To(WithTransform(errString, Equal("abc"))) - }) - - It("works with negative cases", func() { - Expect(1).ToNot(WithTransform(plus1, Equal(3))) - Expect(1).ToNot(WithTransform(plus1, WithTransform(plus1, Equal(2)))) - }) - - Context("failure messages", func() { - Context("when match fails", func() { - It("gives a descriptive message", func() { - m := WithTransform(plus1, Equal(3)) - Expect(m.Match(1)).To(BeFalse()) - Expect(m.FailureMessage(1)).To(Equal("Expected\n : 2\nto equal\n : 3")) - }) - }) - - Context("when match succeeds, but expected it to fail", func() { - It("gives a descriptive message", func() { - m := Not(WithTransform(plus1, Equal(3))) - Expect(m.Match(2)).To(BeFalse()) - Expect(m.FailureMessage(2)).To(Equal("Expected\n : 3\nnot to equal\n : 3")) - }) - }) - - Context("actual value is incompatible with transform function's argument type", func() { - It("gracefully fails if transform cannot be performed", func() { - m := WithTransform(plus1, Equal(3)) - result, err := m.Match("hi") // give it a string but transform expects int; doesn't panic - Expect(result).To(BeFalse()) - Expect(err).To(MatchError("Transform function expects 'int' but we have 'string'")) - }) - }) - }) - - Context("MatchMayChangeInTheFuture()", func() { - It("Propagates value from wrapped matcher on the transformed value", func() { - m := WithTransform(plus1, Or()) // empty Or() always returns false, and indicates it cannot change - Expect(m.Match(1)).To(BeFalse()) - Expect(m.(*WithTransformMatcher).MatchMayChangeInTheFuture(1)).To(BeFalse()) // empty Or() indicates cannot change - }) - It("Defaults to true", func() { - m := WithTransform(plus1, Equal(2)) // Equal does not have this method - Expect(m.Match(1)).To(BeTrue()) - Expect(m.(*WithTransformMatcher).MatchMayChangeInTheFuture(1)).To(BeTrue()) // defaults to true - }) - }) -}) diff --git a/vendor/github.com/pkg/profile/example_test.go b/vendor/github.com/pkg/profile/example_test.go deleted file mode 100644 index 98a54b5..0000000 --- a/vendor/github.com/pkg/profile/example_test.go +++ /dev/null @@ -1,58 +0,0 @@ -package profile_test - -import ( - "flag" - "os" - - "github.com/pkg/profile" -) - -func ExampleStart() { - // start a simple CPU profile and register - // a defer to Stop (flush) the profiling data. - defer profile.Start().Stop() -} - -func ExampleCPUProfile() { - // CPU profiling is the default profiling mode, but you can specify it - // explicitly for completeness. - defer profile.Start(profile.CPUProfile).Stop() -} - -func ExampleMemProfile() { - // use memory profiling, rather than the default cpu profiling. - defer profile.Start(profile.MemProfile).Stop() -} - -func ExampleMemProfileRate() { - // use memory profiling with custom rate. - defer profile.Start(profile.MemProfileRate(2048)).Stop() -} - -func ExampleProfilePath() { - // set the location that the profile will be written to - defer profile.Start(profile.ProfilePath(os.Getenv("HOME"))).Stop() -} - -func ExampleNoShutdownHook() { - // disable the automatic shutdown hook. - defer profile.Start(profile.NoShutdownHook).Stop() -} - -func ExampleStart_withFlags() { - // use the flags package to selectively enable profiling. - mode := flag.String("profile.mode", "", "enable profiling mode, one of [cpu, mem, mutex, block]") - flag.Parse() - switch *mode { - case "cpu": - defer profile.Start(profile.CPUProfile).Stop() - case "mem": - defer profile.Start(profile.MemProfile).Stop() - case "mutex": - defer profile.Start(profile.MutexProfile).Stop() - case "block": - defer profile.Start(profile.BlockProfile).Stop() - default: - // do nothing - } -} diff --git a/vendor/github.com/pkg/profile/profile_test.go b/vendor/github.com/pkg/profile/profile_test.go deleted file mode 100644 index e33012c..0000000 --- a/vendor/github.com/pkg/profile/profile_test.go +++ /dev/null @@ -1,330 +0,0 @@ -package profile - -import ( - "bufio" - "bytes" - "io" - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "strings" - "testing" -) - -type checkFn func(t *testing.T, stdout, stderr []byte, err error) - -func TestProfile(t *testing.T) { - f, err := ioutil.TempFile("", "profile_test") - if err != nil { - t.Fatal(err) - } - defer os.Remove(f.Name()) - - var profileTests = []struct { - name string - code string - checks []checkFn - }{{ - name: "default profile (cpu)", - code: ` -package main - -import "github.com/pkg/profile" - -func main() { - defer profile.Start().Stop() -} -`, - checks: []checkFn{ - NoStdout, - Stderr("profile: cpu profiling enabled"), - NoErr, - }, - }, { - name: "memory profile", - code: ` -package main - -import "github.com/pkg/profile" - -func main() { - defer profile.Start(profile.MemProfile).Stop() -} -`, - checks: []checkFn{ - NoStdout, - Stderr("profile: memory profiling enabled"), - NoErr, - }, - }, { - name: "memory profile (rate 2048)", - code: ` -package main - -import "github.com/pkg/profile" - -func main() { - defer profile.Start(profile.MemProfileRate(2048)).Stop() -} -`, - checks: []checkFn{ - NoStdout, - Stderr("profile: memory profiling enabled (rate 2048)"), - NoErr, - }, - }, { - name: "double start", - code: ` -package main - -import "github.com/pkg/profile" - -func main() { - profile.Start() - profile.Start() -} -`, - checks: []checkFn{ - NoStdout, - Stderr("cpu profiling enabled", "profile: Start() already called"), - Err, - }, - }, { - name: "block profile", - code: ` -package main - -import "github.com/pkg/profile" - -func main() { - defer profile.Start(profile.BlockProfile).Stop() -} -`, - checks: []checkFn{ - NoStdout, - Stderr("profile: block profiling enabled"), - NoErr, - }, - }, { - name: "mutex profile", - code: ` -package main - -import "github.com/pkg/profile" - -func main() { - defer profile.Start(profile.MutexProfile).Stop() -} -`, - checks: []checkFn{ - NoStdout, - Stderr("profile: mutex profiling enabled"), - NoErr, - }, - }, { - name: "profile path", - code: ` -package main - -import "github.com/pkg/profile" - -func main() { - defer profile.Start(profile.ProfilePath(".")).Stop() -} -`, - checks: []checkFn{ - NoStdout, - Stderr("profile: cpu profiling enabled, cpu.pprof"), - NoErr, - }, - }, { - name: "profile path error", - code: ` -package main - -import "github.com/pkg/profile" - -func main() { - defer profile.Start(profile.ProfilePath("` + f.Name() + `")).Stop() -} -`, - checks: []checkFn{ - NoStdout, - Stderr("could not create initial output"), - Err, - }, - }, { - name: "multiple profile sessions", - code: ` -package main - -import "github.com/pkg/profile" - -func main() { - profile.Start(profile.CPUProfile).Stop() - profile.Start(profile.MemProfile).Stop() - profile.Start(profile.BlockProfile).Stop() - profile.Start(profile.CPUProfile).Stop() - profile.Start(profile.MutexProfile).Stop() -} -`, - checks: []checkFn{ - NoStdout, - Stderr("profile: cpu profiling enabled", - "profile: cpu profiling disabled", - "profile: memory profiling enabled", - "profile: memory profiling disabled", - "profile: block profiling enabled", - "profile: block profiling disabled", - "profile: cpu profiling enabled", - "profile: cpu profiling disabled", - "profile: mutex profiling enabled", - "profile: mutex profiling disabled"), - NoErr, - }, - }, { - name: "profile quiet", - code: ` -package main - -import "github.com/pkg/profile" - -func main() { - defer profile.Start(profile.Quiet).Stop() -} -`, - checks: []checkFn{NoStdout, NoStderr, NoErr}, - }} - for _, tt := range profileTests { - t.Log(tt.name) - stdout, stderr, err := runTest(t, tt.code) - for _, f := range tt.checks { - f(t, stdout, stderr, err) - } - } -} - -// NoStdout checks that stdout was blank. -func NoStdout(t *testing.T, stdout, _ []byte, _ error) { - if len := len(stdout); len > 0 { - t.Errorf("stdout: wanted 0 bytes, got %d", len) - } -} - -// Stderr verifies that the given lines match the output from stderr -func Stderr(lines ...string) checkFn { - return func(t *testing.T, _, stderr []byte, _ error) { - r := bytes.NewReader(stderr) - if !validateOutput(r, lines) { - t.Errorf("stderr: wanted '%s', got '%s'", lines, stderr) - } - } -} - -// NoStderr checks that stderr was blank. -func NoStderr(t *testing.T, _, stderr []byte, _ error) { - if len := len(stderr); len > 0 { - t.Errorf("stderr: wanted 0 bytes, got %d", len) - } -} - -// Err checks that there was an error returned -func Err(t *testing.T, _, _ []byte, err error) { - if err == nil { - t.Errorf("expected error") - } -} - -// NoErr checks that err was nil -func NoErr(t *testing.T, _, _ []byte, err error) { - if err != nil { - t.Errorf("error: expected nil, got %v", err) - } -} - -// validatedOutput validates the given slice of lines against data from the given reader. -func validateOutput(r io.Reader, want []string) bool { - s := bufio.NewScanner(r) - for _, line := range want { - if !s.Scan() || !strings.Contains(s.Text(), line) { - return false - } - } - return true -} - -var validateOutputTests = []struct { - input string - lines []string - want bool -}{{ - input: "", - want: true, -}, { - input: `profile: yes -`, - want: true, -}, { - input: `profile: yes -`, - lines: []string{"profile: yes"}, - want: true, -}, { - input: `profile: yes -profile: no -`, - lines: []string{"profile: yes"}, - want: true, -}, { - input: `profile: yes -profile: no -`, - lines: []string{"profile: yes", "profile: no"}, - want: true, -}, { - input: `profile: yes -profile: no -`, - lines: []string{"profile: no"}, - want: false, -}} - -func TestValidateOutput(t *testing.T) { - for _, tt := range validateOutputTests { - r := strings.NewReader(tt.input) - got := validateOutput(r, tt.lines) - if tt.want != got { - t.Errorf("validateOutput(%q, %q), want %v, got %v", tt.input, tt.lines, tt.want, got) - } - } -} - -// runTest executes the go program supplied and returns the contents of stdout, -// stderr, and an error which may contain status information about the result -// of the program. -func runTest(t *testing.T, code string) ([]byte, []byte, error) { - chk := func(err error) { - if err != nil { - t.Fatal(err) - } - } - gopath, err := ioutil.TempDir("", "profile-gopath") - chk(err) - defer os.RemoveAll(gopath) - - srcdir := filepath.Join(gopath, "src") - err = os.Mkdir(srcdir, 0755) - chk(err) - src := filepath.Join(srcdir, "main.go") - err = ioutil.WriteFile(src, []byte(code), 0644) - chk(err) - - cmd := exec.Command("go", "run", src) - - var stdout, stderr bytes.Buffer - cmd.Stdout = &stdout - cmd.Stderr = &stderr - err = cmd.Run() - return stdout.Bytes(), stderr.Bytes(), err -} diff --git a/vendor/github.com/pkg/profile/trace_test.go b/vendor/github.com/pkg/profile/trace_test.go deleted file mode 100644 index 6a61d79..0000000 --- a/vendor/github.com/pkg/profile/trace_test.go +++ /dev/null @@ -1,8 +0,0 @@ -package profile_test - -import "github.com/pkg/profile" - -func ExampleTraceProfile() { - // use execution tracing, rather than the default cpu profiling. - defer profile.Start(profile.TraceProfile).Stop() -} diff --git a/vendor/github.com/sirupsen/logrus/alt_exit_test.go b/vendor/github.com/sirupsen/logrus/alt_exit_test.go deleted file mode 100644 index d182963..0000000 --- a/vendor/github.com/sirupsen/logrus/alt_exit_test.go +++ /dev/null @@ -1,74 +0,0 @@ -package logrus - -import ( - "io/ioutil" - "os/exec" - "testing" - "time" -) - -func TestRegister(t *testing.T) { - current := len(handlers) - RegisterExitHandler(func() {}) - if len(handlers) != current+1 { - t.Fatalf("can't add handler") - } -} - -func TestHandler(t *testing.T) { - gofile := "/tmp/testprog.go" - if err := ioutil.WriteFile(gofile, testprog, 0666); err != nil { - t.Fatalf("can't create go file") - } - - outfile := "/tmp/testprog.out" - arg := time.Now().UTC().String() - err := exec.Command("go", "run", gofile, outfile, arg).Run() - if err == nil { - t.Fatalf("completed normally, should have failed") - } - - data, err := ioutil.ReadFile(outfile) - if err != nil { - t.Fatalf("can't read output file %s", outfile) - } - - if string(data) != arg { - t.Fatalf("bad data") - } -} - -var testprog = []byte(` -// Test program for atexit, gets output file and data as arguments and writes -// data to output file in atexit handler. -package main - -import ( - "github.com/sirupsen/logrus" - "flag" - "fmt" - "io/ioutil" -) - -var outfile = "" -var data = "" - -func handler() { - ioutil.WriteFile(outfile, []byte(data), 0666) -} - -func badHandler() { - n := 0 - fmt.Println(1/n) -} - -func main() { - flag.Parse() - outfile = flag.Arg(0) - data = flag.Arg(1) - - logrus.RegisterExitHandler(handler) - logrus.RegisterExitHandler(badHandler) - logrus.Fatal("Bye bye") -} -`) diff --git a/vendor/github.com/sirupsen/logrus/entry_test.go b/vendor/github.com/sirupsen/logrus/entry_test.go deleted file mode 100644 index 99c3b41..0000000 --- a/vendor/github.com/sirupsen/logrus/entry_test.go +++ /dev/null @@ -1,77 +0,0 @@ -package logrus - -import ( - "bytes" - "fmt" - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestEntryWithError(t *testing.T) { - - assert := assert.New(t) - - defer func() { - ErrorKey = "error" - }() - - err := fmt.Errorf("kaboom at layer %d", 4711) - - assert.Equal(err, WithError(err).Data["error"]) - - logger := New() - logger.Out = &bytes.Buffer{} - entry := NewEntry(logger) - - assert.Equal(err, entry.WithError(err).Data["error"]) - - ErrorKey = "err" - - assert.Equal(err, entry.WithError(err).Data["err"]) - -} - -func TestEntryPanicln(t *testing.T) { - errBoom := fmt.Errorf("boom time") - - defer func() { - p := recover() - assert.NotNil(t, p) - - switch pVal := p.(type) { - case *Entry: - assert.Equal(t, "kaboom", pVal.Message) - assert.Equal(t, errBoom, pVal.Data["err"]) - default: - t.Fatalf("want type *Entry, got %T: %#v", pVal, pVal) - } - }() - - logger := New() - logger.Out = &bytes.Buffer{} - entry := NewEntry(logger) - entry.WithField("err", errBoom).Panicln("kaboom") -} - -func TestEntryPanicf(t *testing.T) { - errBoom := fmt.Errorf("boom again") - - defer func() { - p := recover() - assert.NotNil(t, p) - - switch pVal := p.(type) { - case *Entry: - assert.Equal(t, "kaboom true", pVal.Message) - assert.Equal(t, errBoom, pVal.Data["err"]) - default: - t.Fatalf("want type *Entry, got %T: %#v", pVal, pVal) - } - }() - - logger := New() - logger.Out = &bytes.Buffer{} - entry := NewEntry(logger) - entry.WithField("err", errBoom).Panicf("kaboom %v", true) -} diff --git a/vendor/github.com/sirupsen/logrus/examples/basic/basic.go b/vendor/github.com/sirupsen/logrus/examples/basic/basic.go deleted file mode 100644 index 3e112b4..0000000 --- a/vendor/github.com/sirupsen/logrus/examples/basic/basic.go +++ /dev/null @@ -1,59 +0,0 @@ -package main - -import ( - "github.com/sirupsen/logrus" - // "os" -) - -var log = logrus.New() - -func init() { - log.Formatter = new(logrus.JSONFormatter) - log.Formatter = new(logrus.TextFormatter) // default - - // file, err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY, 0666) - // if err == nil { - // log.Out = file - // } else { - // log.Info("Failed to log to file, using default stderr") - // } - - log.Level = logrus.DebugLevel -} - -func main() { - defer func() { - err := recover() - if err != nil { - log.WithFields(logrus.Fields{ - "omg": true, - "err": err, - "number": 100, - }).Fatal("The ice breaks!") - } - }() - - log.WithFields(logrus.Fields{ - "animal": "walrus", - "number": 8, - }).Debug("Started observing beach") - - log.WithFields(logrus.Fields{ - "animal": "walrus", - "size": 10, - }).Info("A group of walrus emerges from the ocean") - - log.WithFields(logrus.Fields{ - "omg": true, - "number": 122, - }).Warn("The group's number increased tremendously!") - - log.WithFields(logrus.Fields{ - "temperature": -4, - }).Debug("Temperature changes") - - log.WithFields(logrus.Fields{ - "animal": "orca", - "size": 9009, - }).Panic("It's over 9000!") -} diff --git a/vendor/github.com/sirupsen/logrus/examples/hook/hook.go b/vendor/github.com/sirupsen/logrus/examples/hook/hook.go deleted file mode 100644 index c8470c3..0000000 --- a/vendor/github.com/sirupsen/logrus/examples/hook/hook.go +++ /dev/null @@ -1,30 +0,0 @@ -package main - -import ( - "github.com/sirupsen/logrus" - "gopkg.in/gemnasium/logrus-airbrake-hook.v2" -) - -var log = logrus.New() - -func init() { - log.Formatter = new(logrus.TextFormatter) // default - log.Hooks.Add(airbrake.NewHook(123, "xyz", "development")) -} - -func main() { - log.WithFields(logrus.Fields{ - "animal": "walrus", - "size": 10, - }).Info("A group of walrus emerges from the ocean") - - log.WithFields(logrus.Fields{ - "omg": true, - "number": 122, - }).Warn("The group's number increased tremendously!") - - log.WithFields(logrus.Fields{ - "omg": true, - "number": 100, - }).Fatal("The ice breaks!") -} diff --git a/vendor/github.com/sirupsen/logrus/formatter_bench_test.go b/vendor/github.com/sirupsen/logrus/formatter_bench_test.go deleted file mode 100644 index d948158..0000000 --- a/vendor/github.com/sirupsen/logrus/formatter_bench_test.go +++ /dev/null @@ -1,101 +0,0 @@ -package logrus - -import ( - "fmt" - "testing" - "time" -) - -// smallFields is a small size data set for benchmarking -var smallFields = Fields{ - "foo": "bar", - "baz": "qux", - "one": "two", - "three": "four", -} - -// largeFields is a large size data set for benchmarking -var largeFields = Fields{ - "foo": "bar", - "baz": "qux", - "one": "two", - "three": "four", - "five": "six", - "seven": "eight", - "nine": "ten", - "eleven": "twelve", - "thirteen": "fourteen", - "fifteen": "sixteen", - "seventeen": "eighteen", - "nineteen": "twenty", - "a": "b", - "c": "d", - "e": "f", - "g": "h", - "i": "j", - "k": "l", - "m": "n", - "o": "p", - "q": "r", - "s": "t", - "u": "v", - "w": "x", - "y": "z", - "this": "will", - "make": "thirty", - "entries": "yeah", -} - -var errorFields = Fields{ - "foo": fmt.Errorf("bar"), - "baz": fmt.Errorf("qux"), -} - -func BenchmarkErrorTextFormatter(b *testing.B) { - doBenchmark(b, &TextFormatter{DisableColors: true}, errorFields) -} - -func BenchmarkSmallTextFormatter(b *testing.B) { - doBenchmark(b, &TextFormatter{DisableColors: true}, smallFields) -} - -func BenchmarkLargeTextFormatter(b *testing.B) { - doBenchmark(b, &TextFormatter{DisableColors: true}, largeFields) -} - -func BenchmarkSmallColoredTextFormatter(b *testing.B) { - doBenchmark(b, &TextFormatter{ForceColors: true}, smallFields) -} - -func BenchmarkLargeColoredTextFormatter(b *testing.B) { - doBenchmark(b, &TextFormatter{ForceColors: true}, largeFields) -} - -func BenchmarkSmallJSONFormatter(b *testing.B) { - doBenchmark(b, &JSONFormatter{}, smallFields) -} - -func BenchmarkLargeJSONFormatter(b *testing.B) { - doBenchmark(b, &JSONFormatter{}, largeFields) -} - -func doBenchmark(b *testing.B, formatter Formatter, fields Fields) { - logger := New() - - entry := &Entry{ - Time: time.Time{}, - Level: InfoLevel, - Message: "message", - Data: fields, - Logger: logger, - } - var d []byte - var err error - for i := 0; i < b.N; i++ { - d, err = formatter.Format(entry) - if err != nil { - b.Fatal(err) - } - b.SetBytes(int64(len(d))) - } -} diff --git a/vendor/github.com/sirupsen/logrus/hook_test.go b/vendor/github.com/sirupsen/logrus/hook_test.go deleted file mode 100644 index 13f34cb..0000000 --- a/vendor/github.com/sirupsen/logrus/hook_test.go +++ /dev/null @@ -1,122 +0,0 @@ -package logrus - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -type TestHook struct { - Fired bool -} - -func (hook *TestHook) Fire(entry *Entry) error { - hook.Fired = true - return nil -} - -func (hook *TestHook) Levels() []Level { - return []Level{ - DebugLevel, - InfoLevel, - WarnLevel, - ErrorLevel, - FatalLevel, - PanicLevel, - } -} - -func TestHookFires(t *testing.T) { - hook := new(TestHook) - - LogAndAssertJSON(t, func(log *Logger) { - log.Hooks.Add(hook) - assert.Equal(t, hook.Fired, false) - - log.Print("test") - }, func(fields Fields) { - assert.Equal(t, hook.Fired, true) - }) -} - -type ModifyHook struct { -} - -func (hook *ModifyHook) Fire(entry *Entry) error { - entry.Data["wow"] = "whale" - return nil -} - -func (hook *ModifyHook) Levels() []Level { - return []Level{ - DebugLevel, - InfoLevel, - WarnLevel, - ErrorLevel, - FatalLevel, - PanicLevel, - } -} - -func TestHookCanModifyEntry(t *testing.T) { - hook := new(ModifyHook) - - LogAndAssertJSON(t, func(log *Logger) { - log.Hooks.Add(hook) - log.WithField("wow", "elephant").Print("test") - }, func(fields Fields) { - assert.Equal(t, fields["wow"], "whale") - }) -} - -func TestCanFireMultipleHooks(t *testing.T) { - hook1 := new(ModifyHook) - hook2 := new(TestHook) - - LogAndAssertJSON(t, func(log *Logger) { - log.Hooks.Add(hook1) - log.Hooks.Add(hook2) - - log.WithField("wow", "elephant").Print("test") - }, func(fields Fields) { - assert.Equal(t, fields["wow"], "whale") - assert.Equal(t, hook2.Fired, true) - }) -} - -type ErrorHook struct { - Fired bool -} - -func (hook *ErrorHook) Fire(entry *Entry) error { - hook.Fired = true - return nil -} - -func (hook *ErrorHook) Levels() []Level { - return []Level{ - ErrorLevel, - } -} - -func TestErrorHookShouldntFireOnInfo(t *testing.T) { - hook := new(ErrorHook) - - LogAndAssertJSON(t, func(log *Logger) { - log.Hooks.Add(hook) - log.Info("test") - }, func(fields Fields) { - assert.Equal(t, hook.Fired, false) - }) -} - -func TestErrorHookShouldFireOnError(t *testing.T) { - hook := new(ErrorHook) - - LogAndAssertJSON(t, func(log *Logger) { - log.Hooks.Add(hook) - log.Error("test") - }, func(fields Fields) { - assert.Equal(t, hook.Fired, true) - }) -} diff --git a/vendor/github.com/sirupsen/logrus/hooks/syslog/README.md b/vendor/github.com/sirupsen/logrus/hooks/syslog/README.md deleted file mode 100644 index 92b391c..0000000 --- a/vendor/github.com/sirupsen/logrus/hooks/syslog/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# Syslog Hooks for Logrus :walrus: - -## Usage - -```go -import ( - "log/syslog" - "github.com/sirupsen/logrus" - logrus_syslog "github.com/sirupsen/logrus/hooks/syslog" -) - -func main() { - log := logrus.New() - hook, err := logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "") - - if err == nil { - log.Hooks.Add(hook) - } -} -``` - -If you want to connect to local syslog (Ex. "/dev/log" or "/var/run/syslog" or "/var/run/log"). Just assign empty string to the first two parameters of `NewSyslogHook`. It should look like the following. - -```go -import ( - "log/syslog" - "github.com/sirupsen/logrus" - logrus_syslog "github.com/sirupsen/logrus/hooks/syslog" -) - -func main() { - log := logrus.New() - hook, err := logrus_syslog.NewSyslogHook("", "", syslog.LOG_INFO, "") - - if err == nil { - log.Hooks.Add(hook) - } -} -``` diff --git a/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog.go b/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog.go deleted file mode 100644 index 204f001..0000000 --- a/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog.go +++ /dev/null @@ -1,54 +0,0 @@ -// +build !windows,!nacl,!plan9 - -package logrus_syslog - -import ( - "fmt" - "github.com/sirupsen/logrus" - "log/syslog" - "os" -) - -// SyslogHook to send logs via syslog. -type SyslogHook struct { - Writer *syslog.Writer - SyslogNetwork string - SyslogRaddr string -} - -// Creates a hook to be added to an instance of logger. This is called with -// `hook, err := NewSyslogHook("udp", "localhost:514", syslog.LOG_DEBUG, "")` -// `if err == nil { log.Hooks.Add(hook) }` -func NewSyslogHook(network, raddr string, priority syslog.Priority, tag string) (*SyslogHook, error) { - w, err := syslog.Dial(network, raddr, priority, tag) - return &SyslogHook{w, network, raddr}, err -} - -func (hook *SyslogHook) Fire(entry *logrus.Entry) error { - line, err := entry.String() - if err != nil { - fmt.Fprintf(os.Stderr, "Unable to read entry, %v", err) - return err - } - - switch entry.Level { - case logrus.PanicLevel: - return hook.Writer.Crit(line) - case logrus.FatalLevel: - return hook.Writer.Crit(line) - case logrus.ErrorLevel: - return hook.Writer.Err(line) - case logrus.WarnLevel: - return hook.Writer.Warning(line) - case logrus.InfoLevel: - return hook.Writer.Info(line) - case logrus.DebugLevel: - return hook.Writer.Debug(line) - default: - return nil - } -} - -func (hook *SyslogHook) Levels() []logrus.Level { - return logrus.AllLevels -} diff --git a/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog_test.go b/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog_test.go deleted file mode 100644 index 8d7fbe4..0000000 --- a/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog_test.go +++ /dev/null @@ -1,26 +0,0 @@ -package logrus_syslog - -import ( - "github.com/sirupsen/logrus" - "log/syslog" - "testing" -) - -func TestLocalhostAddAndPrint(t *testing.T) { - log := logrus.New() - hook, err := NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "") - - if err != nil { - t.Errorf("Unable to connect to local syslog.") - } - - log.Hooks.Add(hook) - - for _, level := range hook.Levels() { - if len(log.Hooks[level]) != 1 { - t.Errorf("SyslogHook was not added. The length of log.Hooks[%v]: %v", level, len(log.Hooks[level])) - } - } - - log.Info("Congratulations!") -} diff --git a/vendor/github.com/sirupsen/logrus/hooks/test/test.go b/vendor/github.com/sirupsen/logrus/hooks/test/test.go deleted file mode 100644 index 62c4845..0000000 --- a/vendor/github.com/sirupsen/logrus/hooks/test/test.go +++ /dev/null @@ -1,95 +0,0 @@ -// The Test package is used for testing logrus. It is here for backwards -// compatibility from when logrus' organization was upper-case. Please use -// lower-case logrus and the `null` package instead of this one. -package test - -import ( - "io/ioutil" - "sync" - - "github.com/sirupsen/logrus" -) - -// Hook is a hook designed for dealing with logs in test scenarios. -type Hook struct { - // Entries is an array of all entries that have been received by this hook. - // For safe access, use the AllEntries() method, rather than reading this - // value directly. - Entries []*logrus.Entry - mu sync.RWMutex -} - -// NewGlobal installs a test hook for the global logger. -func NewGlobal() *Hook { - - hook := new(Hook) - logrus.AddHook(hook) - - return hook - -} - -// NewLocal installs a test hook for a given local logger. -func NewLocal(logger *logrus.Logger) *Hook { - - hook := new(Hook) - logger.Hooks.Add(hook) - - return hook - -} - -// NewNullLogger creates a discarding logger and installs the test hook. -func NewNullLogger() (*logrus.Logger, *Hook) { - - logger := logrus.New() - logger.Out = ioutil.Discard - - return logger, NewLocal(logger) - -} - -func (t *Hook) Fire(e *logrus.Entry) error { - t.mu.Lock() - defer t.mu.Unlock() - t.Entries = append(t.Entries, e) - return nil -} - -func (t *Hook) Levels() []logrus.Level { - return logrus.AllLevels -} - -// LastEntry returns the last entry that was logged or nil. -func (t *Hook) LastEntry() *logrus.Entry { - t.mu.RLock() - defer t.mu.RUnlock() - i := len(t.Entries) - 1 - if i < 0 { - return nil - } - // Make a copy, for safety - e := *t.Entries[i] - return &e -} - -// AllEntries returns all entries that were logged. -func (t *Hook) AllEntries() []*logrus.Entry { - t.mu.RLock() - defer t.mu.RUnlock() - // Make a copy so the returned value won't race with future log requests - entries := make([]*logrus.Entry, len(t.Entries)) - for i, entry := range t.Entries { - // Make a copy, for safety - e := *entry - entries[i] = &e - } - return entries -} - -// Reset removes all Entries from this test hook. -func (t *Hook) Reset() { - t.mu.Lock() - defer t.mu.Unlock() - t.Entries = make([]*logrus.Entry, 0) -} diff --git a/vendor/github.com/sirupsen/logrus/hooks/test/test_test.go b/vendor/github.com/sirupsen/logrus/hooks/test/test_test.go deleted file mode 100644 index 3f55cfe..0000000 --- a/vendor/github.com/sirupsen/logrus/hooks/test/test_test.go +++ /dev/null @@ -1,39 +0,0 @@ -package test - -import ( - "testing" - - "github.com/sirupsen/logrus" - "github.com/stretchr/testify/assert" -) - -func TestAllHooks(t *testing.T) { - - assert := assert.New(t) - - logger, hook := NewNullLogger() - assert.Nil(hook.LastEntry()) - assert.Equal(0, len(hook.Entries)) - - logger.Error("Hello error") - assert.Equal(logrus.ErrorLevel, hook.LastEntry().Level) - assert.Equal("Hello error", hook.LastEntry().Message) - assert.Equal(1, len(hook.Entries)) - - logger.Warn("Hello warning") - assert.Equal(logrus.WarnLevel, hook.LastEntry().Level) - assert.Equal("Hello warning", hook.LastEntry().Message) - assert.Equal(2, len(hook.Entries)) - - hook.Reset() - assert.Nil(hook.LastEntry()) - assert.Equal(0, len(hook.Entries)) - - hook = NewGlobal() - - logrus.Error("Hello error") - assert.Equal(logrus.ErrorLevel, hook.LastEntry().Level) - assert.Equal("Hello error", hook.LastEntry().Message) - assert.Equal(1, len(hook.Entries)) - -} diff --git a/vendor/github.com/sirupsen/logrus/json_formatter_test.go b/vendor/github.com/sirupsen/logrus/json_formatter_test.go deleted file mode 100644 index 51093a7..0000000 --- a/vendor/github.com/sirupsen/logrus/json_formatter_test.go +++ /dev/null @@ -1,199 +0,0 @@ -package logrus - -import ( - "encoding/json" - "errors" - "strings" - "testing" -) - -func TestErrorNotLost(t *testing.T) { - formatter := &JSONFormatter{} - - b, err := formatter.Format(WithField("error", errors.New("wild walrus"))) - if err != nil { - t.Fatal("Unable to format entry: ", err) - } - - entry := make(map[string]interface{}) - err = json.Unmarshal(b, &entry) - if err != nil { - t.Fatal("Unable to unmarshal formatted entry: ", err) - } - - if entry["error"] != "wild walrus" { - t.Fatal("Error field not set") - } -} - -func TestErrorNotLostOnFieldNotNamedError(t *testing.T) { - formatter := &JSONFormatter{} - - b, err := formatter.Format(WithField("omg", errors.New("wild walrus"))) - if err != nil { - t.Fatal("Unable to format entry: ", err) - } - - entry := make(map[string]interface{}) - err = json.Unmarshal(b, &entry) - if err != nil { - t.Fatal("Unable to unmarshal formatted entry: ", err) - } - - if entry["omg"] != "wild walrus" { - t.Fatal("Error field not set") - } -} - -func TestFieldClashWithTime(t *testing.T) { - formatter := &JSONFormatter{} - - b, err := formatter.Format(WithField("time", "right now!")) - if err != nil { - t.Fatal("Unable to format entry: ", err) - } - - entry := make(map[string]interface{}) - err = json.Unmarshal(b, &entry) - if err != nil { - t.Fatal("Unable to unmarshal formatted entry: ", err) - } - - if entry["fields.time"] != "right now!" { - t.Fatal("fields.time not set to original time field") - } - - if entry["time"] != "0001-01-01T00:00:00Z" { - t.Fatal("time field not set to current time, was: ", entry["time"]) - } -} - -func TestFieldClashWithMsg(t *testing.T) { - formatter := &JSONFormatter{} - - b, err := formatter.Format(WithField("msg", "something")) - if err != nil { - t.Fatal("Unable to format entry: ", err) - } - - entry := make(map[string]interface{}) - err = json.Unmarshal(b, &entry) - if err != nil { - t.Fatal("Unable to unmarshal formatted entry: ", err) - } - - if entry["fields.msg"] != "something" { - t.Fatal("fields.msg not set to original msg field") - } -} - -func TestFieldClashWithLevel(t *testing.T) { - formatter := &JSONFormatter{} - - b, err := formatter.Format(WithField("level", "something")) - if err != nil { - t.Fatal("Unable to format entry: ", err) - } - - entry := make(map[string]interface{}) - err = json.Unmarshal(b, &entry) - if err != nil { - t.Fatal("Unable to unmarshal formatted entry: ", err) - } - - if entry["fields.level"] != "something" { - t.Fatal("fields.level not set to original level field") - } -} - -func TestJSONEntryEndsWithNewline(t *testing.T) { - formatter := &JSONFormatter{} - - b, err := formatter.Format(WithField("level", "something")) - if err != nil { - t.Fatal("Unable to format entry: ", err) - } - - if b[len(b)-1] != '\n' { - t.Fatal("Expected JSON log entry to end with a newline") - } -} - -func TestJSONMessageKey(t *testing.T) { - formatter := &JSONFormatter{ - FieldMap: FieldMap{ - FieldKeyMsg: "message", - }, - } - - b, err := formatter.Format(&Entry{Message: "oh hai"}) - if err != nil { - t.Fatal("Unable to format entry: ", err) - } - s := string(b) - if !(strings.Contains(s, "message") && strings.Contains(s, "oh hai")) { - t.Fatal("Expected JSON to format message key") - } -} - -func TestJSONLevelKey(t *testing.T) { - formatter := &JSONFormatter{ - FieldMap: FieldMap{ - FieldKeyLevel: "somelevel", - }, - } - - b, err := formatter.Format(WithField("level", "something")) - if err != nil { - t.Fatal("Unable to format entry: ", err) - } - s := string(b) - if !strings.Contains(s, "somelevel") { - t.Fatal("Expected JSON to format level key") - } -} - -func TestJSONTimeKey(t *testing.T) { - formatter := &JSONFormatter{ - FieldMap: FieldMap{ - FieldKeyTime: "timeywimey", - }, - } - - b, err := formatter.Format(WithField("level", "something")) - if err != nil { - t.Fatal("Unable to format entry: ", err) - } - s := string(b) - if !strings.Contains(s, "timeywimey") { - t.Fatal("Expected JSON to format time key") - } -} - -func TestJSONDisableTimestamp(t *testing.T) { - formatter := &JSONFormatter{ - DisableTimestamp: true, - } - - b, err := formatter.Format(WithField("level", "something")) - if err != nil { - t.Fatal("Unable to format entry: ", err) - } - s := string(b) - if strings.Contains(s, FieldKeyTime) { - t.Error("Did not prevent timestamp", s) - } -} - -func TestJSONEnableTimestamp(t *testing.T) { - formatter := &JSONFormatter{} - - b, err := formatter.Format(WithField("level", "something")) - if err != nil { - t.Fatal("Unable to format entry: ", err) - } - s := string(b) - if !strings.Contains(s, FieldKeyTime) { - t.Error("Timestamp not present", s) - } -} diff --git a/vendor/github.com/sirupsen/logrus/logger_bench_test.go b/vendor/github.com/sirupsen/logrus/logger_bench_test.go deleted file mode 100644 index dd23a35..0000000 --- a/vendor/github.com/sirupsen/logrus/logger_bench_test.go +++ /dev/null @@ -1,61 +0,0 @@ -package logrus - -import ( - "os" - "testing" -) - -// smallFields is a small size data set for benchmarking -var loggerFields = Fields{ - "foo": "bar", - "baz": "qux", - "one": "two", - "three": "four", -} - -func BenchmarkDummyLogger(b *testing.B) { - nullf, err := os.OpenFile("/dev/null", os.O_WRONLY, 0666) - if err != nil { - b.Fatalf("%v", err) - } - defer nullf.Close() - doLoggerBenchmark(b, nullf, &TextFormatter{DisableColors: true}, smallFields) -} - -func BenchmarkDummyLoggerNoLock(b *testing.B) { - nullf, err := os.OpenFile("/dev/null", os.O_WRONLY|os.O_APPEND, 0666) - if err != nil { - b.Fatalf("%v", err) - } - defer nullf.Close() - doLoggerBenchmarkNoLock(b, nullf, &TextFormatter{DisableColors: true}, smallFields) -} - -func doLoggerBenchmark(b *testing.B, out *os.File, formatter Formatter, fields Fields) { - logger := Logger{ - Out: out, - Level: InfoLevel, - Formatter: formatter, - } - entry := logger.WithFields(fields) - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - entry.Info("aaa") - } - }) -} - -func doLoggerBenchmarkNoLock(b *testing.B, out *os.File, formatter Formatter, fields Fields) { - logger := Logger{ - Out: out, - Level: InfoLevel, - Formatter: formatter, - } - logger.SetNoLock() - entry := logger.WithFields(fields) - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - entry.Info("aaa") - } - }) -} diff --git a/vendor/github.com/sirupsen/logrus/logrus_test.go b/vendor/github.com/sirupsen/logrus/logrus_test.go deleted file mode 100644 index 78cbc28..0000000 --- a/vendor/github.com/sirupsen/logrus/logrus_test.go +++ /dev/null @@ -1,386 +0,0 @@ -package logrus - -import ( - "bytes" - "encoding/json" - "strconv" - "strings" - "sync" - "testing" - - "github.com/stretchr/testify/assert" -) - -func LogAndAssertJSON(t *testing.T, log func(*Logger), assertions func(fields Fields)) { - var buffer bytes.Buffer - var fields Fields - - logger := New() - logger.Out = &buffer - logger.Formatter = new(JSONFormatter) - - log(logger) - - err := json.Unmarshal(buffer.Bytes(), &fields) - assert.Nil(t, err) - - assertions(fields) -} - -func LogAndAssertText(t *testing.T, log func(*Logger), assertions func(fields map[string]string)) { - var buffer bytes.Buffer - - logger := New() - logger.Out = &buffer - logger.Formatter = &TextFormatter{ - DisableColors: true, - } - - log(logger) - - fields := make(map[string]string) - for _, kv := range strings.Split(buffer.String(), " ") { - if !strings.Contains(kv, "=") { - continue - } - kvArr := strings.Split(kv, "=") - key := strings.TrimSpace(kvArr[0]) - val := kvArr[1] - if kvArr[1][0] == '"' { - var err error - val, err = strconv.Unquote(val) - assert.NoError(t, err) - } - fields[key] = val - } - assertions(fields) -} - -func TestPrint(t *testing.T) { - LogAndAssertJSON(t, func(log *Logger) { - log.Print("test") - }, func(fields Fields) { - assert.Equal(t, fields["msg"], "test") - assert.Equal(t, fields["level"], "info") - }) -} - -func TestInfo(t *testing.T) { - LogAndAssertJSON(t, func(log *Logger) { - log.Info("test") - }, func(fields Fields) { - assert.Equal(t, fields["msg"], "test") - assert.Equal(t, fields["level"], "info") - }) -} - -func TestWarn(t *testing.T) { - LogAndAssertJSON(t, func(log *Logger) { - log.Warn("test") - }, func(fields Fields) { - assert.Equal(t, fields["msg"], "test") - assert.Equal(t, fields["level"], "warning") - }) -} - -func TestInfolnShouldAddSpacesBetweenStrings(t *testing.T) { - LogAndAssertJSON(t, func(log *Logger) { - log.Infoln("test", "test") - }, func(fields Fields) { - assert.Equal(t, fields["msg"], "test test") - }) -} - -func TestInfolnShouldAddSpacesBetweenStringAndNonstring(t *testing.T) { - LogAndAssertJSON(t, func(log *Logger) { - log.Infoln("test", 10) - }, func(fields Fields) { - assert.Equal(t, fields["msg"], "test 10") - }) -} - -func TestInfolnShouldAddSpacesBetweenTwoNonStrings(t *testing.T) { - LogAndAssertJSON(t, func(log *Logger) { - log.Infoln(10, 10) - }, func(fields Fields) { - assert.Equal(t, fields["msg"], "10 10") - }) -} - -func TestInfoShouldAddSpacesBetweenTwoNonStrings(t *testing.T) { - LogAndAssertJSON(t, func(log *Logger) { - log.Infoln(10, 10) - }, func(fields Fields) { - assert.Equal(t, fields["msg"], "10 10") - }) -} - -func TestInfoShouldNotAddSpacesBetweenStringAndNonstring(t *testing.T) { - LogAndAssertJSON(t, func(log *Logger) { - log.Info("test", 10) - }, func(fields Fields) { - assert.Equal(t, fields["msg"], "test10") - }) -} - -func TestInfoShouldNotAddSpacesBetweenStrings(t *testing.T) { - LogAndAssertJSON(t, func(log *Logger) { - log.Info("test", "test") - }, func(fields Fields) { - assert.Equal(t, fields["msg"], "testtest") - }) -} - -func TestWithFieldsShouldAllowAssignments(t *testing.T) { - var buffer bytes.Buffer - var fields Fields - - logger := New() - logger.Out = &buffer - logger.Formatter = new(JSONFormatter) - - localLog := logger.WithFields(Fields{ - "key1": "value1", - }) - - localLog.WithField("key2", "value2").Info("test") - err := json.Unmarshal(buffer.Bytes(), &fields) - assert.Nil(t, err) - - assert.Equal(t, "value2", fields["key2"]) - assert.Equal(t, "value1", fields["key1"]) - - buffer = bytes.Buffer{} - fields = Fields{} - localLog.Info("test") - err = json.Unmarshal(buffer.Bytes(), &fields) - assert.Nil(t, err) - - _, ok := fields["key2"] - assert.Equal(t, false, ok) - assert.Equal(t, "value1", fields["key1"]) -} - -func TestUserSuppliedFieldDoesNotOverwriteDefaults(t *testing.T) { - LogAndAssertJSON(t, func(log *Logger) { - log.WithField("msg", "hello").Info("test") - }, func(fields Fields) { - assert.Equal(t, fields["msg"], "test") - }) -} - -func TestUserSuppliedMsgFieldHasPrefix(t *testing.T) { - LogAndAssertJSON(t, func(log *Logger) { - log.WithField("msg", "hello").Info("test") - }, func(fields Fields) { - assert.Equal(t, fields["msg"], "test") - assert.Equal(t, fields["fields.msg"], "hello") - }) -} - -func TestUserSuppliedTimeFieldHasPrefix(t *testing.T) { - LogAndAssertJSON(t, func(log *Logger) { - log.WithField("time", "hello").Info("test") - }, func(fields Fields) { - assert.Equal(t, fields["fields.time"], "hello") - }) -} - -func TestUserSuppliedLevelFieldHasPrefix(t *testing.T) { - LogAndAssertJSON(t, func(log *Logger) { - log.WithField("level", 1).Info("test") - }, func(fields Fields) { - assert.Equal(t, fields["level"], "info") - assert.Equal(t, fields["fields.level"], 1.0) // JSON has floats only - }) -} - -func TestDefaultFieldsAreNotPrefixed(t *testing.T) { - LogAndAssertText(t, func(log *Logger) { - ll := log.WithField("herp", "derp") - ll.Info("hello") - ll.Info("bye") - }, func(fields map[string]string) { - for _, fieldName := range []string{"fields.level", "fields.time", "fields.msg"} { - if _, ok := fields[fieldName]; ok { - t.Fatalf("should not have prefixed %q: %v", fieldName, fields) - } - } - }) -} - -func TestDoubleLoggingDoesntPrefixPreviousFields(t *testing.T) { - - var buffer bytes.Buffer - var fields Fields - - logger := New() - logger.Out = &buffer - logger.Formatter = new(JSONFormatter) - - llog := logger.WithField("context", "eating raw fish") - - llog.Info("looks delicious") - - err := json.Unmarshal(buffer.Bytes(), &fields) - assert.NoError(t, err, "should have decoded first message") - assert.Equal(t, len(fields), 4, "should only have msg/time/level/context fields") - assert.Equal(t, fields["msg"], "looks delicious") - assert.Equal(t, fields["context"], "eating raw fish") - - buffer.Reset() - - llog.Warn("omg it is!") - - err = json.Unmarshal(buffer.Bytes(), &fields) - assert.NoError(t, err, "should have decoded second message") - assert.Equal(t, len(fields), 4, "should only have msg/time/level/context fields") - assert.Equal(t, fields["msg"], "omg it is!") - assert.Equal(t, fields["context"], "eating raw fish") - assert.Nil(t, fields["fields.msg"], "should not have prefixed previous `msg` entry") - -} - -func TestConvertLevelToString(t *testing.T) { - assert.Equal(t, "debug", DebugLevel.String()) - assert.Equal(t, "info", InfoLevel.String()) - assert.Equal(t, "warning", WarnLevel.String()) - assert.Equal(t, "error", ErrorLevel.String()) - assert.Equal(t, "fatal", FatalLevel.String()) - assert.Equal(t, "panic", PanicLevel.String()) -} - -func TestParseLevel(t *testing.T) { - l, err := ParseLevel("panic") - assert.Nil(t, err) - assert.Equal(t, PanicLevel, l) - - l, err = ParseLevel("PANIC") - assert.Nil(t, err) - assert.Equal(t, PanicLevel, l) - - l, err = ParseLevel("fatal") - assert.Nil(t, err) - assert.Equal(t, FatalLevel, l) - - l, err = ParseLevel("FATAL") - assert.Nil(t, err) - assert.Equal(t, FatalLevel, l) - - l, err = ParseLevel("error") - assert.Nil(t, err) - assert.Equal(t, ErrorLevel, l) - - l, err = ParseLevel("ERROR") - assert.Nil(t, err) - assert.Equal(t, ErrorLevel, l) - - l, err = ParseLevel("warn") - assert.Nil(t, err) - assert.Equal(t, WarnLevel, l) - - l, err = ParseLevel("WARN") - assert.Nil(t, err) - assert.Equal(t, WarnLevel, l) - - l, err = ParseLevel("warning") - assert.Nil(t, err) - assert.Equal(t, WarnLevel, l) - - l, err = ParseLevel("WARNING") - assert.Nil(t, err) - assert.Equal(t, WarnLevel, l) - - l, err = ParseLevel("info") - assert.Nil(t, err) - assert.Equal(t, InfoLevel, l) - - l, err = ParseLevel("INFO") - assert.Nil(t, err) - assert.Equal(t, InfoLevel, l) - - l, err = ParseLevel("debug") - assert.Nil(t, err) - assert.Equal(t, DebugLevel, l) - - l, err = ParseLevel("DEBUG") - assert.Nil(t, err) - assert.Equal(t, DebugLevel, l) - - l, err = ParseLevel("invalid") - assert.Equal(t, "not a valid logrus Level: \"invalid\"", err.Error()) -} - -func TestGetSetLevelRace(t *testing.T) { - wg := sync.WaitGroup{} - for i := 0; i < 100; i++ { - wg.Add(1) - go func(i int) { - defer wg.Done() - if i%2 == 0 { - SetLevel(InfoLevel) - } else { - GetLevel() - } - }(i) - - } - wg.Wait() -} - -func TestLoggingRace(t *testing.T) { - logger := New() - - var wg sync.WaitGroup - wg.Add(100) - - for i := 0; i < 100; i++ { - go func() { - logger.Info("info") - wg.Done() - }() - } - wg.Wait() -} - -// Compile test -func TestLogrusInterface(t *testing.T) { - var buffer bytes.Buffer - fn := func(l FieldLogger) { - b := l.WithField("key", "value") - b.Debug("Test") - } - // test logger - logger := New() - logger.Out = &buffer - fn(logger) - - // test Entry - e := logger.WithField("another", "value") - fn(e) -} - -// Implements io.Writer using channels for synchronization, so we can wait on -// the Entry.Writer goroutine to write in a non-racey way. This does assume that -// there is a single call to Logger.Out for each message. -type channelWriter chan []byte - -func (cw channelWriter) Write(p []byte) (int, error) { - cw <- p - return len(p), nil -} - -func TestEntryWriter(t *testing.T) { - cw := channelWriter(make(chan []byte, 1)) - log := New() - log.Out = cw - log.Formatter = new(JSONFormatter) - log.WithField("foo", "bar").WriterLevel(WarnLevel).Write([]byte("hello\n")) - - bs := <-cw - var fields Fields - err := json.Unmarshal(bs, &fields) - assert.Nil(t, err) - assert.Equal(t, fields["foo"], "bar") - assert.Equal(t, fields["level"], "warning") -} diff --git a/vendor/github.com/sirupsen/logrus/text_formatter_test.go b/vendor/github.com/sirupsen/logrus/text_formatter_test.go deleted file mode 100644 index 9793b5f..0000000 --- a/vendor/github.com/sirupsen/logrus/text_formatter_test.go +++ /dev/null @@ -1,87 +0,0 @@ -package logrus - -import ( - "bytes" - "errors" - "strings" - "testing" - "time" -) - -func TestQuoting(t *testing.T) { - tf := &TextFormatter{DisableColors: true} - - checkQuoting := func(q bool, value interface{}) { - b, _ := tf.Format(WithField("test", value)) - idx := bytes.Index(b, ([]byte)("test=")) - cont := bytes.Contains(b[idx+5:], []byte(tf.QuoteCharacter)) - if cont != q { - if q { - t.Errorf("quoting expected for: %#v", value) - } else { - t.Errorf("quoting not expected for: %#v", value) - } - } - } - - checkQuoting(false, "") - checkQuoting(false, "abcd") - checkQuoting(false, "v1.0") - checkQuoting(false, "1234567890") - checkQuoting(true, "/foobar") - checkQuoting(true, "x y") - checkQuoting(true, "x,y") - checkQuoting(false, errors.New("invalid")) - checkQuoting(true, errors.New("invalid argument")) - - // Test for custom quote character. - tf.QuoteCharacter = "`" - checkQuoting(false, "") - checkQuoting(false, "abcd") - checkQuoting(true, "/foobar") - checkQuoting(true, errors.New("invalid argument")) - - // Test for multi-character quotes. - tf.QuoteCharacter = "§~±" - checkQuoting(false, "abcd") - checkQuoting(true, errors.New("invalid argument")) - - // Test for quoting empty fields. - tf.QuoteEmptyFields = true - checkQuoting(true, "") - checkQuoting(false, "abcd") - checkQuoting(true, errors.New("invalid argument")) -} - -func TestTimestampFormat(t *testing.T) { - checkTimeStr := func(format string) { - customFormatter := &TextFormatter{DisableColors: true, TimestampFormat: format} - customStr, _ := customFormatter.Format(WithField("test", "test")) - timeStart := bytes.Index(customStr, ([]byte)("time=")) - timeEnd := bytes.Index(customStr, ([]byte)("level=")) - timeStr := customStr[timeStart+5+len(customFormatter.QuoteCharacter) : timeEnd-1-len(customFormatter.QuoteCharacter)] - if format == "" { - format = time.RFC3339 - } - _, e := time.Parse(format, (string)(timeStr)) - if e != nil { - t.Errorf("time string \"%s\" did not match provided time format \"%s\": %s", timeStr, format, e) - } - } - - checkTimeStr("2006-01-02T15:04:05.000000000Z07:00") - checkTimeStr("Mon Jan _2 15:04:05 2006") - checkTimeStr("") -} - -func TestDisableTimestampWithColoredOutput(t *testing.T) { - tf := &TextFormatter{DisableTimestamp: true, ForceColors: true} - - b, _ := tf.Format(WithField("test", "test")) - if strings.Contains(string(b), "[0000]") { - t.Error("timestamp not expected when DisableTimestamp is true") - } -} - -// TODO add tests for sorting etc., this requires a parser for the text -// formatter output. diff --git a/vendor/golang.org/x/sys/.gitattributes b/vendor/golang.org/x/sys/.gitattributes deleted file mode 100644 index d2f212e..0000000 --- a/vendor/golang.org/x/sys/.gitattributes +++ /dev/null @@ -1,10 +0,0 @@ -# Treat all files in this repo as binary, with no git magic updating -# line endings. Windows users contributing to Go will need to use a -# modern version of git and editors capable of LF line endings. -# -# We'll prevent accidental CRLF line endings from entering the repo -# via the git-review gofmt checks. -# -# See golang.org/issue/9281 - -* -text diff --git a/vendor/golang.org/x/sys/.gitignore b/vendor/golang.org/x/sys/.gitignore deleted file mode 100644 index 8339fd6..0000000 --- a/vendor/golang.org/x/sys/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Add no patterns to .hgignore except for files generated by the build. -last-change diff --git a/vendor/golang.org/x/sys/CONTRIBUTING.md b/vendor/golang.org/x/sys/CONTRIBUTING.md deleted file mode 100644 index 88dff59..0000000 --- a/vendor/golang.org/x/sys/CONTRIBUTING.md +++ /dev/null @@ -1,31 +0,0 @@ -# Contributing to Go - -Go is an open source project. - -It is the work of hundreds of contributors. We appreciate your help! - - -## Filing issues - -When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions: - -1. What version of Go are you using (`go version`)? -2. What operating system and processor architecture are you using? -3. What did you do? -4. What did you expect to see? -5. What did you see instead? - -General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. -The gophers there will answer or ask you to file an issue if you've tripped over a bug. - -## Contributing code - -Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) -before sending patches. - -**We do not accept GitHub pull requests** -(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review). - -Unless otherwise noted, the Go source files are distributed under -the BSD-style license found in the LICENSE file. - diff --git a/vendor/golang.org/x/sys/README b/vendor/golang.org/x/sys/README deleted file mode 100644 index bd422b4..0000000 --- a/vendor/golang.org/x/sys/README +++ /dev/null @@ -1,3 +0,0 @@ -This repository holds supplemental Go packages for low-level interactions with the operating system. - -To submit changes to this repository, see http://golang.org/doc/contribute.html. diff --git a/vendor/golang.org/x/sys/codereview.cfg b/vendor/golang.org/x/sys/codereview.cfg deleted file mode 100644 index 3f8b14b..0000000 --- a/vendor/golang.org/x/sys/codereview.cfg +++ /dev/null @@ -1 +0,0 @@ -issuerepo: golang/go diff --git a/vendor/golang.org/x/sys/plan9/asm.s b/vendor/golang.org/x/sys/plan9/asm.s deleted file mode 100644 index d4ca868..0000000 --- a/vendor/golang.org/x/sys/plan9/asm.s +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -#include "textflag.h" - -TEXT ·use(SB),NOSPLIT,$0 - RET diff --git a/vendor/golang.org/x/sys/plan9/asm_plan9_386.s b/vendor/golang.org/x/sys/plan9/asm_plan9_386.s deleted file mode 100644 index bc5cab1..0000000 --- a/vendor/golang.org/x/sys/plan9/asm_plan9_386.s +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -#include "textflag.h" - -// -// System call support for 386, Plan 9 -// - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-32 - JMP syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-44 - JMP syscall·Syscall6(SB) - -TEXT ·RawSyscall(SB),NOSPLIT,$0-28 - JMP syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 - JMP syscall·RawSyscall6(SB) - -TEXT ·seek(SB),NOSPLIT,$0-36 - JMP syscall·seek(SB) - -TEXT ·exit(SB),NOSPLIT,$4-4 - JMP syscall·exit(SB) diff --git a/vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s b/vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s deleted file mode 100644 index d3448e6..0000000 --- a/vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -#include "textflag.h" - -// -// System call support for amd64, Plan 9 -// - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-64 - JMP syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-88 - JMP syscall·Syscall6(SB) - -TEXT ·RawSyscall(SB),NOSPLIT,$0-56 - JMP syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 - JMP syscall·RawSyscall6(SB) - -TEXT ·seek(SB),NOSPLIT,$0-56 - JMP syscall·seek(SB) - -TEXT ·exit(SB),NOSPLIT,$8-8 - JMP syscall·exit(SB) diff --git a/vendor/golang.org/x/sys/plan9/const_plan9.go b/vendor/golang.org/x/sys/plan9/const_plan9.go deleted file mode 100644 index b4e85a3..0000000 --- a/vendor/golang.org/x/sys/plan9/const_plan9.go +++ /dev/null @@ -1,70 +0,0 @@ -package plan9 - -// Plan 9 Constants - -// Open modes -const ( - O_RDONLY = 0 - O_WRONLY = 1 - O_RDWR = 2 - O_TRUNC = 16 - O_CLOEXEC = 32 - O_EXCL = 0x1000 -) - -// Rfork flags -const ( - RFNAMEG = 1 << 0 - RFENVG = 1 << 1 - RFFDG = 1 << 2 - RFNOTEG = 1 << 3 - RFPROC = 1 << 4 - RFMEM = 1 << 5 - RFNOWAIT = 1 << 6 - RFCNAMEG = 1 << 10 - RFCENVG = 1 << 11 - RFCFDG = 1 << 12 - RFREND = 1 << 13 - RFNOMNT = 1 << 14 -) - -// Qid.Type bits -const ( - QTDIR = 0x80 - QTAPPEND = 0x40 - QTEXCL = 0x20 - QTMOUNT = 0x10 - QTAUTH = 0x08 - QTTMP = 0x04 - QTFILE = 0x00 -) - -// Dir.Mode bits -const ( - DMDIR = 0x80000000 - DMAPPEND = 0x40000000 - DMEXCL = 0x20000000 - DMMOUNT = 0x10000000 - DMAUTH = 0x08000000 - DMTMP = 0x04000000 - DMREAD = 0x4 - DMWRITE = 0x2 - DMEXEC = 0x1 -) - -const ( - STATMAX = 65535 - ERRMAX = 128 - STATFIXLEN = 49 -) - -// Mount and bind flags -const ( - MREPL = 0x0000 - MBEFORE = 0x0001 - MAFTER = 0x0002 - MORDER = 0x0003 - MCREATE = 0x0004 - MCACHE = 0x0010 - MMASK = 0x0017 -) diff --git a/vendor/golang.org/x/sys/plan9/dir_plan9.go b/vendor/golang.org/x/sys/plan9/dir_plan9.go deleted file mode 100644 index 0955e0c..0000000 --- a/vendor/golang.org/x/sys/plan9/dir_plan9.go +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Plan 9 directory marshalling. See intro(5). - -package plan9 - -import "errors" - -var ( - ErrShortStat = errors.New("stat buffer too short") - ErrBadStat = errors.New("malformed stat buffer") - ErrBadName = errors.New("bad character in file name") -) - -// A Qid represents a 9P server's unique identification for a file. -type Qid struct { - Path uint64 // the file server's unique identification for the file - Vers uint32 // version number for given Path - Type uint8 // the type of the file (plan9.QTDIR for example) -} - -// A Dir contains the metadata for a file. -type Dir struct { - // system-modified data - Type uint16 // server type - Dev uint32 // server subtype - - // file data - Qid Qid // unique id from server - Mode uint32 // permissions - Atime uint32 // last read time - Mtime uint32 // last write time - Length int64 // file length - Name string // last element of path - Uid string // owner name - Gid string // group name - Muid string // last modifier name -} - -var nullDir = Dir{ - Type: ^uint16(0), - Dev: ^uint32(0), - Qid: Qid{ - Path: ^uint64(0), - Vers: ^uint32(0), - Type: ^uint8(0), - }, - Mode: ^uint32(0), - Atime: ^uint32(0), - Mtime: ^uint32(0), - Length: ^int64(0), -} - -// Null assigns special "don't touch" values to members of d to -// avoid modifying them during plan9.Wstat. -func (d *Dir) Null() { *d = nullDir } - -// Marshal encodes a 9P stat message corresponding to d into b -// -// If there isn't enough space in b for a stat message, ErrShortStat is returned. -func (d *Dir) Marshal(b []byte) (n int, err error) { - n = STATFIXLEN + len(d.Name) + len(d.Uid) + len(d.Gid) + len(d.Muid) - if n > len(b) { - return n, ErrShortStat - } - - for _, c := range d.Name { - if c == '/' { - return n, ErrBadName - } - } - - b = pbit16(b, uint16(n)-2) - b = pbit16(b, d.Type) - b = pbit32(b, d.Dev) - b = pbit8(b, d.Qid.Type) - b = pbit32(b, d.Qid.Vers) - b = pbit64(b, d.Qid.Path) - b = pbit32(b, d.Mode) - b = pbit32(b, d.Atime) - b = pbit32(b, d.Mtime) - b = pbit64(b, uint64(d.Length)) - b = pstring(b, d.Name) - b = pstring(b, d.Uid) - b = pstring(b, d.Gid) - b = pstring(b, d.Muid) - - return n, nil -} - -// UnmarshalDir decodes a single 9P stat message from b and returns the resulting Dir. -// -// If b is too small to hold a valid stat message, ErrShortStat is returned. -// -// If the stat message itself is invalid, ErrBadStat is returned. -func UnmarshalDir(b []byte) (*Dir, error) { - if len(b) < STATFIXLEN { - return nil, ErrShortStat - } - size, buf := gbit16(b) - if len(b) != int(size)+2 { - return nil, ErrBadStat - } - b = buf - - var d Dir - d.Type, b = gbit16(b) - d.Dev, b = gbit32(b) - d.Qid.Type, b = gbit8(b) - d.Qid.Vers, b = gbit32(b) - d.Qid.Path, b = gbit64(b) - d.Mode, b = gbit32(b) - d.Atime, b = gbit32(b) - d.Mtime, b = gbit32(b) - - n, b := gbit64(b) - d.Length = int64(n) - - var ok bool - if d.Name, b, ok = gstring(b); !ok { - return nil, ErrBadStat - } - if d.Uid, b, ok = gstring(b); !ok { - return nil, ErrBadStat - } - if d.Gid, b, ok = gstring(b); !ok { - return nil, ErrBadStat - } - if d.Muid, b, ok = gstring(b); !ok { - return nil, ErrBadStat - } - - return &d, nil -} - -// pbit8 copies the 8-bit number v to b and returns the remaining slice of b. -func pbit8(b []byte, v uint8) []byte { - b[0] = byte(v) - return b[1:] -} - -// pbit16 copies the 16-bit number v to b in little-endian order and returns the remaining slice of b. -func pbit16(b []byte, v uint16) []byte { - b[0] = byte(v) - b[1] = byte(v >> 8) - return b[2:] -} - -// pbit32 copies the 32-bit number v to b in little-endian order and returns the remaining slice of b. -func pbit32(b []byte, v uint32) []byte { - b[0] = byte(v) - b[1] = byte(v >> 8) - b[2] = byte(v >> 16) - b[3] = byte(v >> 24) - return b[4:] -} - -// pbit64 copies the 64-bit number v to b in little-endian order and returns the remaining slice of b. -func pbit64(b []byte, v uint64) []byte { - b[0] = byte(v) - b[1] = byte(v >> 8) - b[2] = byte(v >> 16) - b[3] = byte(v >> 24) - b[4] = byte(v >> 32) - b[5] = byte(v >> 40) - b[6] = byte(v >> 48) - b[7] = byte(v >> 56) - return b[8:] -} - -// pstring copies the string s to b, prepending it with a 16-bit length in little-endian order, and -// returning the remaining slice of b.. -func pstring(b []byte, s string) []byte { - b = pbit16(b, uint16(len(s))) - n := copy(b, s) - return b[n:] -} - -// gbit8 reads an 8-bit number from b and returns it with the remaining slice of b. -func gbit8(b []byte) (uint8, []byte) { - return uint8(b[0]), b[1:] -} - -// gbit16 reads a 16-bit number in little-endian order from b and returns it with the remaining slice of b. -func gbit16(b []byte) (uint16, []byte) { - return uint16(b[0]) | uint16(b[1])<<8, b[2:] -} - -// gbit32 reads a 32-bit number in little-endian order from b and returns it with the remaining slice of b. -func gbit32(b []byte) (uint32, []byte) { - return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24, b[4:] -} - -// gbit64 reads a 64-bit number in little-endian order from b and returns it with the remaining slice of b. -func gbit64(b []byte) (uint64, []byte) { - lo := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - hi := uint32(b[4]) | uint32(b[5])<<8 | uint32(b[6])<<16 | uint32(b[7])<<24 - return uint64(lo) | uint64(hi)<<32, b[8:] -} - -// gstring reads a string from b, prefixed with a 16-bit length in little-endian order. -// It returns the string with the remaining slice of b and a boolean. If the length is -// greater than the number of bytes in b, the boolean will be false. -func gstring(b []byte) (string, []byte, bool) { - n, b := gbit16(b) - if int(n) > len(b) { - return "", b, false - } - return string(b[:n]), b[n:], true -} diff --git a/vendor/golang.org/x/sys/plan9/env_plan9.go b/vendor/golang.org/x/sys/plan9/env_plan9.go deleted file mode 100644 index 25a96e7..0000000 --- a/vendor/golang.org/x/sys/plan9/env_plan9.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Plan 9 environment variables. - -package plan9 - -import ( - "syscall" -) - -func Getenv(key string) (value string, found bool) { - return syscall.Getenv(key) -} - -func Setenv(key, value string) error { - return syscall.Setenv(key, value) -} - -func Clearenv() { - syscall.Clearenv() -} - -func Environ() []string { - return syscall.Environ() -} diff --git a/vendor/golang.org/x/sys/plan9/env_unset.go b/vendor/golang.org/x/sys/plan9/env_unset.go deleted file mode 100644 index c37fc26..0000000 --- a/vendor/golang.org/x/sys/plan9/env_unset.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build go1.4 - -package plan9 - -import "syscall" - -func Unsetenv(key string) error { - // This was added in Go 1.4. - return syscall.Unsetenv(key) -} diff --git a/vendor/golang.org/x/sys/plan9/errors_plan9.go b/vendor/golang.org/x/sys/plan9/errors_plan9.go deleted file mode 100644 index 110cf6a..0000000 --- a/vendor/golang.org/x/sys/plan9/errors_plan9.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package plan9 - -import "syscall" - -// Constants -const ( - // Invented values to support what package os expects. - O_CREAT = 0x02000 - O_APPEND = 0x00400 - O_NOCTTY = 0x00000 - O_NONBLOCK = 0x00000 - O_SYNC = 0x00000 - O_ASYNC = 0x00000 - - S_IFMT = 0x1f000 - S_IFIFO = 0x1000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFBLK = 0x6000 - S_IFREG = 0x8000 - S_IFLNK = 0xa000 - S_IFSOCK = 0xc000 -) - -// Errors -var ( - EINVAL = syscall.NewError("bad arg in system call") - ENOTDIR = syscall.NewError("not a directory") - EISDIR = syscall.NewError("file is a directory") - ENOENT = syscall.NewError("file does not exist") - EEXIST = syscall.NewError("file already exists") - EMFILE = syscall.NewError("no free file descriptors") - EIO = syscall.NewError("i/o error") - ENAMETOOLONG = syscall.NewError("file name too long") - EINTR = syscall.NewError("interrupted") - EPERM = syscall.NewError("permission denied") - EBUSY = syscall.NewError("no free devices") - ETIMEDOUT = syscall.NewError("connection timed out") - EPLAN9 = syscall.NewError("not supported by plan 9") - - // The following errors do not correspond to any - // Plan 9 system messages. Invented to support - // what package os and others expect. - EACCES = syscall.NewError("access permission denied") - EAFNOSUPPORT = syscall.NewError("address family not supported by protocol") -) diff --git a/vendor/golang.org/x/sys/plan9/mkall.sh b/vendor/golang.org/x/sys/plan9/mkall.sh deleted file mode 100755 index 9f73c60..0000000 --- a/vendor/golang.org/x/sys/plan9/mkall.sh +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env bash -# Copyright 2009 The Go Authors. All rights reserved. -# Use of this source code is governed by a BSD-style -# license that can be found in the LICENSE file. - -# The plan9 package provides access to the raw system call -# interface of the underlying operating system. Porting Go to -# a new architecture/operating system combination requires -# some manual effort, though there are tools that automate -# much of the process. The auto-generated files have names -# beginning with z. -# -# This script runs or (given -n) prints suggested commands to generate z files -# for the current system. Running those commands is not automatic. -# This script is documentation more than anything else. -# -# * asm_${GOOS}_${GOARCH}.s -# -# This hand-written assembly file implements system call dispatch. -# There are three entry points: -# -# func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr); -# func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr); -# func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr); -# -# The first and second are the standard ones; they differ only in -# how many arguments can be passed to the kernel. -# The third is for low-level use by the ForkExec wrapper; -# unlike the first two, it does not call into the scheduler to -# let it know that a system call is running. -# -# * syscall_${GOOS}.go -# -# This hand-written Go file implements system calls that need -# special handling and lists "//sys" comments giving prototypes -# for ones that can be auto-generated. Mksyscall reads those -# comments to generate the stubs. -# -# * syscall_${GOOS}_${GOARCH}.go -# -# Same as syscall_${GOOS}.go except that it contains code specific -# to ${GOOS} on one particular architecture. -# -# * types_${GOOS}.c -# -# This hand-written C file includes standard C headers and then -# creates typedef or enum names beginning with a dollar sign -# (use of $ in variable names is a gcc extension). The hardest -# part about preparing this file is figuring out which headers to -# include and which symbols need to be #defined to get the -# actual data structures that pass through to the kernel system calls. -# Some C libraries present alternate versions for binary compatibility -# and translate them on the way in and out of system calls, but -# there is almost always a #define that can get the real ones. -# See types_darwin.c and types_linux.c for examples. -# -# * zerror_${GOOS}_${GOARCH}.go -# -# This machine-generated file defines the system's error numbers, -# error strings, and signal numbers. The generator is "mkerrors.sh". -# Usually no arguments are needed, but mkerrors.sh will pass its -# arguments on to godefs. -# -# * zsyscall_${GOOS}_${GOARCH}.go -# -# Generated by mksyscall.pl; see syscall_${GOOS}.go above. -# -# * zsysnum_${GOOS}_${GOARCH}.go -# -# Generated by mksysnum_${GOOS}. -# -# * ztypes_${GOOS}_${GOARCH}.go -# -# Generated by godefs; see types_${GOOS}.c above. - -GOOSARCH="${GOOS}_${GOARCH}" - -# defaults -mksyscall="./mksyscall.pl" -mkerrors="./mkerrors.sh" -zerrors="zerrors_$GOOSARCH.go" -mksysctl="" -zsysctl="zsysctl_$GOOSARCH.go" -mksysnum= -mktypes= -run="sh" - -case "$1" in --syscalls) - for i in zsyscall*go - do - sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i - rm _$i - done - exit 0 - ;; --n) - run="cat" - shift -esac - -case "$#" in -0) - ;; -*) - echo 'usage: mkall.sh [-n]' 1>&2 - exit 2 -esac - -case "$GOOSARCH" in -_* | *_ | _) - echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2 - exit 1 - ;; -plan9_386) - mkerrors= - mksyscall="./mksyscall.pl -l32 -plan9" - mksysnum="./mksysnum_plan9.sh /n/sources/plan9/sys/src/libc/9syscall/sys.h" - mktypes="XXX" - ;; -*) - echo 'unrecognized $GOOS_$GOARCH: ' "$GOOSARCH" 1>&2 - exit 1 - ;; -esac - -( - if [ -n "$mkerrors" ]; then echo "$mkerrors |gofmt >$zerrors"; fi - case "$GOOS" in - plan9) - syscall_goos="syscall_$GOOS.go" - if [ -n "$mksyscall" ]; then echo "$mksyscall $syscall_goos syscall_$GOOSARCH.go |gofmt >zsyscall_$GOOSARCH.go"; fi - ;; - esac - if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi - if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi - if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go |gofmt >ztypes_$GOOSARCH.go"; fi -) | $run diff --git a/vendor/golang.org/x/sys/plan9/mkerrors.sh b/vendor/golang.org/x/sys/plan9/mkerrors.sh deleted file mode 100755 index 052c86d..0000000 --- a/vendor/golang.org/x/sys/plan9/mkerrors.sh +++ /dev/null @@ -1,246 +0,0 @@ -#!/usr/bin/env bash -# Copyright 2009 The Go Authors. All rights reserved. -# Use of this source code is governed by a BSD-style -# license that can be found in the LICENSE file. - -# Generate Go code listing errors and other #defined constant -# values (ENAMETOOLONG etc.), by asking the preprocessor -# about the definitions. - -unset LANG -export LC_ALL=C -export LC_CTYPE=C - -CC=${CC:-gcc} - -uname=$(uname) - -includes=' -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -' - -ccflags="$@" - -# Write go tool cgo -godefs input. -( - echo package plan9 - echo - echo '/*' - indirect="includes_$(uname)" - echo "${!indirect} $includes" - echo '*/' - echo 'import "C"' - echo - echo 'const (' - - # The gcc command line prints all the #defines - # it encounters while processing the input - echo "${!indirect} $includes" | $CC -x c - -E -dM $ccflags | - awk ' - $1 != "#define" || $2 ~ /\(/ || $3 == "" {next} - - $2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next} # 386 registers - $2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next} - $2 ~ /^(SCM_SRCRT)$/ {next} - $2 ~ /^(MAP_FAILED)$/ {next} - - $2 !~ /^ETH_/ && - $2 !~ /^EPROC_/ && - $2 !~ /^EQUIV_/ && - $2 !~ /^EXPR_/ && - $2 ~ /^E[A-Z0-9_]+$/ || - $2 ~ /^B[0-9_]+$/ || - $2 ~ /^V[A-Z0-9]+$/ || - $2 ~ /^CS[A-Z0-9]/ || - $2 ~ /^I(SIG|CANON|CRNL|EXTEN|MAXBEL|STRIP|UTF8)$/ || - $2 ~ /^IGN/ || - $2 ~ /^IX(ON|ANY|OFF)$/ || - $2 ~ /^IN(LCR|PCK)$/ || - $2 ~ /(^FLU?SH)|(FLU?SH$)/ || - $2 ~ /^C(LOCAL|READ)$/ || - $2 == "BRKINT" || - $2 == "HUPCL" || - $2 == "PENDIN" || - $2 == "TOSTOP" || - $2 ~ /^PAR/ || - $2 ~ /^SIG[^_]/ || - $2 ~ /^O[CNPFP][A-Z]+[^_][A-Z]+$/ || - $2 ~ /^IN_/ || - $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || - $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|ICMP6|TCP|EVFILT|NOTE|EV|SHUT|PROT|MAP|PACKET|MSG|SCM|MCL|DT|MADV|PR)_/ || - $2 == "ICMPV6_FILTER" || - $2 == "SOMAXCONN" || - $2 == "NAME_MAX" || - $2 == "IFNAMSIZ" || - $2 ~ /^CTL_(MAXNAME|NET|QUERY)$/ || - $2 ~ /^SYSCTL_VERS/ || - $2 ~ /^(MS|MNT)_/ || - $2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ || - $2 ~ /^(O|F|FD|NAME|S|PTRACE|PT)_/ || - $2 ~ /^LINUX_REBOOT_CMD_/ || - $2 ~ /^LINUX_REBOOT_MAGIC[12]$/ || - $2 !~ "NLA_TYPE_MASK" && - $2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P)_/ || - $2 ~ /^SIOC/ || - $2 ~ /^TIOC/ || - $2 !~ "RTF_BITS" && - $2 ~ /^(IFF|IFT|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ || - $2 ~ /^BIOC/ || - $2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ || - $2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|NOFILE|STACK)|RLIM_INFINITY/ || - $2 ~ /^PRIO_(PROCESS|PGRP|USER)/ || - $2 ~ /^CLONE_[A-Z_]+/ || - $2 !~ /^(BPF_TIMEVAL)$/ && - $2 ~ /^(BPF|DLT)_/ || - $2 !~ "WMESGLEN" && - $2 ~ /^W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", $2, $2)} - $2 ~ /^__WCOREFLAG$/ {next} - $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} - - {next} - ' | sort - - echo ')' -) >_const.go - -# Pull out the error names for later. -errors=$( - echo '#include ' | $CC -x c - -E -dM $ccflags | - awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' | - sort -) - -# Pull out the signal names for later. -signals=$( - echo '#include ' | $CC -x c - -E -dM $ccflags | - awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' | - egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' | - sort -) - -# Again, writing regexps to a file. -echo '#include ' | $CC -x c - -E -dM $ccflags | - awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print "^\t" $2 "[ \t]*=" }' | - sort >_error.grep -echo '#include ' | $CC -x c - -E -dM $ccflags | - awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' | - egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' | - sort >_signal.grep - -echo '// mkerrors.sh' "$@" -echo '// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT' -echo -go tool cgo -godefs -- "$@" _const.go >_error.out -cat _error.out | grep -vf _error.grep | grep -vf _signal.grep -echo -echo '// Errors' -echo 'const (' -cat _error.out | grep -f _error.grep | sed 's/=\(.*\)/= Errno(\1)/' -echo ')' - -echo -echo '// Signals' -echo 'const (' -cat _error.out | grep -f _signal.grep | sed 's/=\(.*\)/= Signal(\1)/' -echo ')' - -# Run C program to print error and syscall strings. -( - echo -E " -#include -#include -#include -#include -#include -#include - -#define nelem(x) (sizeof(x)/sizeof((x)[0])) - -enum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below - -int errors[] = { -" - for i in $errors - do - echo -E ' '$i, - done - - echo -E " -}; - -int signals[] = { -" - for i in $signals - do - echo -E ' '$i, - done - - # Use -E because on some systems bash builtin interprets \n itself. - echo -E ' -}; - -static int -intcmp(const void *a, const void *b) -{ - return *(int*)a - *(int*)b; -} - -int -main(void) -{ - int i, j, e; - char buf[1024], *p; - - printf("\n\n// Error table\n"); - printf("var errors = [...]string {\n"); - qsort(errors, nelem(errors), sizeof errors[0], intcmp); - for(i=0; i 0 && errors[i-1] == e) - continue; - strcpy(buf, strerror(e)); - // lowercase first letter: Bad -> bad, but STREAM -> STREAM. - if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) - buf[0] += a - A; - printf("\t%d: \"%s\",\n", e, buf); - } - printf("}\n\n"); - - printf("\n\n// Signal table\n"); - printf("var signals = [...]string {\n"); - qsort(signals, nelem(signals), sizeof signals[0], intcmp); - for(i=0; i 0 && signals[i-1] == e) - continue; - strcpy(buf, strsignal(e)); - // lowercase first letter: Bad -> bad, but STREAM -> STREAM. - if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) - buf[0] += a - A; - // cut trailing : number. - p = strrchr(buf, ":"[0]); - if(p) - *p = '\0'; - printf("\t%d: \"%s\",\n", e, buf); - } - printf("}\n\n"); - - return 0; -} - -' -) >_errors.c - -$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out diff --git a/vendor/golang.org/x/sys/plan9/mksyscall.pl b/vendor/golang.org/x/sys/plan9/mksyscall.pl deleted file mode 100755 index ce8e1e4..0000000 --- a/vendor/golang.org/x/sys/plan9/mksyscall.pl +++ /dev/null @@ -1,319 +0,0 @@ -#!/usr/bin/env perl -# Copyright 2009 The Go Authors. All rights reserved. -# Use of this source code is governed by a BSD-style -# license that can be found in the LICENSE file. - -# This program reads a file containing function prototypes -# (like syscall_plan9.go) and generates system call bodies. -# The prototypes are marked by lines beginning with "//sys" -# and read like func declarations if //sys is replaced by func, but: -# * The parameter lists must give a name for each argument. -# This includes return parameters. -# * The parameter lists must give a type for each argument: -# the (x, y, z int) shorthand is not allowed. -# * If the return parameter is an error number, it must be named errno. - -# A line beginning with //sysnb is like //sys, except that the -# goroutine will not be suspended during the execution of the system -# call. This must only be used for system calls which can never -# block, as otherwise the system call could cause all goroutines to -# hang. - -use strict; - -my $cmdline = "mksyscall.pl " . join(' ', @ARGV); -my $errors = 0; -my $_32bit = ""; -my $plan9 = 0; -my $openbsd = 0; -my $netbsd = 0; -my $dragonfly = 0; -my $nacl = 0; -my $arm = 0; # 64-bit value should use (even, odd)-pair - -if($ARGV[0] eq "-b32") { - $_32bit = "big-endian"; - shift; -} elsif($ARGV[0] eq "-l32") { - $_32bit = "little-endian"; - shift; -} -if($ARGV[0] eq "-plan9") { - $plan9 = 1; - shift; -} -if($ARGV[0] eq "-openbsd") { - $openbsd = 1; - shift; -} -if($ARGV[0] eq "-netbsd") { - $netbsd = 1; - shift; -} -if($ARGV[0] eq "-dragonfly") { - $dragonfly = 1; - shift; -} -if($ARGV[0] eq "-nacl") { - $nacl = 1; - shift; -} -if($ARGV[0] eq "-arm") { - $arm = 1; - shift; -} - -if($ARGV[0] =~ /^-/) { - print STDERR "usage: mksyscall.pl [-b32 | -l32] [file ...]\n"; - exit 1; -} - -sub parseparamlist($) { - my ($list) = @_; - $list =~ s/^\s*//; - $list =~ s/\s*$//; - if($list eq "") { - return (); - } - return split(/\s*,\s*/, $list); -} - -sub parseparam($) { - my ($p) = @_; - if($p !~ /^(\S*) (\S*)$/) { - print STDERR "$ARGV:$.: malformed parameter: $p\n"; - $errors = 1; - return ("xx", "int"); - } - return ($1, $2); -} - -my $text = ""; -while(<>) { - chomp; - s/\s+/ /g; - s/^\s+//; - s/\s+$//; - my $nonblock = /^\/\/sysnb /; - next if !/^\/\/sys / && !$nonblock; - - # Line must be of the form - # func Open(path string, mode int, perm int) (fd int, errno error) - # Split into name, in params, out params. - if(!/^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*((?i)SYS_[A-Z0-9_]+))?$/) { - print STDERR "$ARGV:$.: malformed //sys declaration\n"; - $errors = 1; - next; - } - my ($func, $in, $out, $sysname) = ($2, $3, $4, $5); - - # Split argument lists on comma. - my @in = parseparamlist($in); - my @out = parseparamlist($out); - - # Try in vain to keep people from editing this file. - # The theory is that they jump into the middle of the file - # without reading the header. - $text .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"; - - # Go function header. - my $out_decl = @out ? sprintf(" (%s)", join(', ', @out)) : ""; - $text .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out_decl; - - # Check if err return available - my $errvar = ""; - foreach my $p (@out) { - my ($name, $type) = parseparam($p); - if($type eq "error") { - $errvar = $name; - last; - } - } - - # Prepare arguments to Syscall. - my @args = (); - my @uses = (); - my $n = 0; - foreach my $p (@in) { - my ($name, $type) = parseparam($p); - if($type =~ /^\*/) { - push @args, "uintptr(unsafe.Pointer($name))"; - } elsif($type eq "string" && $errvar ne "") { - $text .= "\tvar _p$n *byte\n"; - $text .= "\t_p$n, $errvar = BytePtrFromString($name)\n"; - $text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n"; - push @args, "uintptr(unsafe.Pointer(_p$n))"; - push @uses, "use(unsafe.Pointer(_p$n))"; - $n++; - } elsif($type eq "string") { - print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n"; - $text .= "\tvar _p$n *byte\n"; - $text .= "\t_p$n, _ = BytePtrFromString($name)\n"; - push @args, "uintptr(unsafe.Pointer(_p$n))"; - push @uses, "use(unsafe.Pointer(_p$n))"; - $n++; - } elsif($type =~ /^\[\](.*)/) { - # Convert slice into pointer, length. - # Have to be careful not to take address of &a[0] if len == 0: - # pass dummy pointer in that case. - # Used to pass nil, but some OSes or simulators reject write(fd, nil, 0). - $text .= "\tvar _p$n unsafe.Pointer\n"; - $text .= "\tif len($name) > 0 {\n\t\t_p$n = unsafe.Pointer(\&${name}[0])\n\t}"; - $text .= " else {\n\t\t_p$n = unsafe.Pointer(&_zero)\n\t}"; - $text .= "\n"; - push @args, "uintptr(_p$n)", "uintptr(len($name))"; - $n++; - } elsif($type eq "int64" && ($openbsd || $netbsd)) { - push @args, "0"; - if($_32bit eq "big-endian") { - push @args, "uintptr($name>>32)", "uintptr($name)"; - } elsif($_32bit eq "little-endian") { - push @args, "uintptr($name)", "uintptr($name>>32)"; - } else { - push @args, "uintptr($name)"; - } - } elsif($type eq "int64" && $dragonfly) { - if ($func !~ /^extp(read|write)/i) { - push @args, "0"; - } - if($_32bit eq "big-endian") { - push @args, "uintptr($name>>32)", "uintptr($name)"; - } elsif($_32bit eq "little-endian") { - push @args, "uintptr($name)", "uintptr($name>>32)"; - } else { - push @args, "uintptr($name)"; - } - } elsif($type eq "int64" && $_32bit ne "") { - if(@args % 2 && $arm) { - # arm abi specifies 64-bit argument uses - # (even, odd) pair - push @args, "0" - } - if($_32bit eq "big-endian") { - push @args, "uintptr($name>>32)", "uintptr($name)"; - } else { - push @args, "uintptr($name)", "uintptr($name>>32)"; - } - } else { - push @args, "uintptr($name)"; - } - } - - # Determine which form to use; pad args with zeros. - my $asm = "Syscall"; - if ($nonblock) { - $asm = "RawSyscall"; - } - if(@args <= 3) { - while(@args < 3) { - push @args, "0"; - } - } elsif(@args <= 6) { - $asm .= "6"; - while(@args < 6) { - push @args, "0"; - } - } elsif(@args <= 9) { - $asm .= "9"; - while(@args < 9) { - push @args, "0"; - } - } else { - print STDERR "$ARGV:$.: too many arguments to system call\n"; - } - - # System call number. - if($sysname eq "") { - $sysname = "SYS_$func"; - $sysname =~ s/([a-z])([A-Z])/${1}_$2/g; # turn FooBar into Foo_Bar - $sysname =~ y/a-z/A-Z/; - if($nacl) { - $sysname =~ y/A-Z/a-z/; - } - } - - # Actual call. - my $args = join(', ', @args); - my $call = "$asm($sysname, $args)"; - - # Assign return values. - my $body = ""; - my @ret = ("_", "_", "_"); - my $do_errno = 0; - for(my $i=0; $i<@out; $i++) { - my $p = $out[$i]; - my ($name, $type) = parseparam($p); - my $reg = ""; - if($name eq "err" && !$plan9) { - $reg = "e1"; - $ret[2] = $reg; - $do_errno = 1; - } elsif($name eq "err" && $plan9) { - $ret[0] = "r0"; - $ret[2] = "e1"; - next; - } else { - $reg = sprintf("r%d", $i); - $ret[$i] = $reg; - } - if($type eq "bool") { - $reg = "$reg != 0"; - } - if($type eq "int64" && $_32bit ne "") { - # 64-bit number in r1:r0 or r0:r1. - if($i+2 > @out) { - print STDERR "$ARGV:$.: not enough registers for int64 return\n"; - } - if($_32bit eq "big-endian") { - $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i, $i+1); - } else { - $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i+1, $i); - } - $ret[$i] = sprintf("r%d", $i); - $ret[$i+1] = sprintf("r%d", $i+1); - } - if($reg ne "e1" || $plan9) { - $body .= "\t$name = $type($reg)\n"; - } - } - if ($ret[0] eq "_" && $ret[1] eq "_" && $ret[2] eq "_") { - $text .= "\t$call\n"; - } else { - $text .= "\t$ret[0], $ret[1], $ret[2] := $call\n"; - } - foreach my $use (@uses) { - $text .= "\t$use\n"; - } - $text .= $body; - - if ($plan9 && $ret[2] eq "e1") { - $text .= "\tif int32(r0) == -1 {\n"; - $text .= "\t\terr = e1\n"; - $text .= "\t}\n"; - } elsif ($do_errno) { - $text .= "\tif e1 != 0 {\n"; - $text .= "\t\terr = e1\n"; - $text .= "\t}\n"; - } - $text .= "\treturn\n"; - $text .= "}\n\n"; -} - -chomp $text; -chomp $text; - -if($errors) { - exit 1; -} - -print <= 10 { - buf[i] = byte(val%10 + '0') - i-- - val /= 10 - } - buf[i] = byte(val + '0') - return string(buf[i:]) -} diff --git a/vendor/golang.org/x/sys/plan9/syscall.go b/vendor/golang.org/x/sys/plan9/syscall.go deleted file mode 100644 index df6f8c5..0000000 --- a/vendor/golang.org/x/sys/plan9/syscall.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build plan9 - -// Package plan9 contains an interface to the low-level operating system -// primitives. OS details vary depending on the underlying system, and -// by default, godoc will display the OS-specific documentation for the current -// system. If you want godoc to display documentation for another -// system, set $GOOS and $GOARCH to the desired system. For example, if -// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS -// to freebsd and $GOARCH to arm. -// The primary use of this package is inside other packages that provide a more -// portable interface to the system, such as "os", "time" and "net". Use -// those packages rather than this one if you can. -// For details of the functions and data types in this package consult -// the manuals for the appropriate operating system. -// These calls return err == nil to indicate success; otherwise -// err represents an operating system error describing the failure and -// holds a value of type syscall.ErrorString. -package plan9 // import "golang.org/x/sys/plan9" - -import "unsafe" - -// ByteSliceFromString returns a NUL-terminated slice of bytes -// containing the text of s. If s contains a NUL byte at any -// location, it returns (nil, EINVAL). -func ByteSliceFromString(s string) ([]byte, error) { - for i := 0; i < len(s); i++ { - if s[i] == 0 { - return nil, EINVAL - } - } - a := make([]byte, len(s)+1) - copy(a, s) - return a, nil -} - -// BytePtrFromString returns a pointer to a NUL-terminated array of -// bytes containing the text of s. If s contains a NUL byte at any -// location, it returns (nil, EINVAL). -func BytePtrFromString(s string) (*byte, error) { - a, err := ByteSliceFromString(s) - if err != nil { - return nil, err - } - return &a[0], nil -} - -// Single-word zero for use when we need a valid pointer to 0 bytes. -// See mksyscall.pl. -var _zero uintptr - -func (ts *Timespec) Unix() (sec int64, nsec int64) { - return int64(ts.Sec), int64(ts.Nsec) -} - -func (tv *Timeval) Unix() (sec int64, nsec int64) { - return int64(tv.Sec), int64(tv.Usec) * 1000 -} - -func (ts *Timespec) Nano() int64 { - return int64(ts.Sec)*1e9 + int64(ts.Nsec) -} - -func (tv *Timeval) Nano() int64 { - return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 -} - -// use is a no-op, but the compiler cannot see that it is. -// Calling use(p) ensures that p is kept live until that point. -//go:noescape -func use(p unsafe.Pointer) diff --git a/vendor/golang.org/x/sys/plan9/syscall_plan9.go b/vendor/golang.org/x/sys/plan9/syscall_plan9.go deleted file mode 100644 index d39d07d..0000000 --- a/vendor/golang.org/x/sys/plan9/syscall_plan9.go +++ /dev/null @@ -1,349 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Plan 9 system calls. -// This file is compiled as ordinary Go code, -// but it is also input to mksyscall, -// which parses the //sys lines and generates system call stubs. -// Note that sometimes we use a lowercase //sys name and -// wrap it in our own nicer implementation. - -package plan9 - -import ( - "syscall" - "unsafe" -) - -// A Note is a string describing a process note. -// It implements the os.Signal interface. -type Note string - -func (n Note) Signal() {} - -func (n Note) String() string { - return string(n) -} - -var ( - Stdin = 0 - Stdout = 1 - Stderr = 2 -) - -// For testing: clients can set this flag to force -// creation of IPv6 sockets to return EAFNOSUPPORT. -var SocketDisableIPv6 bool - -func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.ErrorString) -func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.ErrorString) -func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) -func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) - -func atoi(b []byte) (n uint) { - n = 0 - for i := 0; i < len(b); i++ { - n = n*10 + uint(b[i]-'0') - } - return -} - -func cstring(s []byte) string { - for i := range s { - if s[i] == 0 { - return string(s[0:i]) - } - } - return string(s) -} - -func errstr() string { - var buf [ERRMAX]byte - - RawSyscall(SYS_ERRSTR, uintptr(unsafe.Pointer(&buf[0])), uintptr(len(buf)), 0) - - buf[len(buf)-1] = 0 - return cstring(buf[:]) -} - -// Implemented in assembly to import from runtime. -func exit(code int) - -func Exit(code int) { exit(code) } - -func readnum(path string) (uint, error) { - var b [12]byte - - fd, e := Open(path, O_RDONLY) - if e != nil { - return 0, e - } - defer Close(fd) - - n, e := Pread(fd, b[:], 0) - - if e != nil { - return 0, e - } - - m := 0 - for ; m < n && b[m] == ' '; m++ { - } - - return atoi(b[m : n-1]), nil -} - -func Getpid() (pid int) { - n, _ := readnum("#c/pid") - return int(n) -} - -func Getppid() (ppid int) { - n, _ := readnum("#c/ppid") - return int(n) -} - -func Read(fd int, p []byte) (n int, err error) { - return Pread(fd, p, -1) -} - -func Write(fd int, p []byte) (n int, err error) { - return Pwrite(fd, p, -1) -} - -var ioSync int64 - -//sys fd2path(fd int, buf []byte) (err error) -func Fd2path(fd int) (path string, err error) { - var buf [512]byte - - e := fd2path(fd, buf[:]) - if e != nil { - return "", e - } - return cstring(buf[:]), nil -} - -//sys pipe(p *[2]int32) (err error) -func Pipe(p []int) (err error) { - if len(p) != 2 { - return syscall.ErrorString("bad arg in system call") - } - var pp [2]int32 - err = pipe(&pp) - p[0] = int(pp[0]) - p[1] = int(pp[1]) - return -} - -// Underlying system call writes to newoffset via pointer. -// Implemented in assembly to avoid allocation. -func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string) - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - newoffset, e := seek(0, fd, offset, whence) - - if newoffset == -1 { - err = syscall.ErrorString(e) - } - return -} - -func Mkdir(path string, mode uint32) (err error) { - fd, err := Create(path, O_RDONLY, DMDIR|mode) - - if fd != -1 { - Close(fd) - } - - return -} - -type Waitmsg struct { - Pid int - Time [3]uint32 - Msg string -} - -func (w Waitmsg) Exited() bool { return true } -func (w Waitmsg) Signaled() bool { return false } - -func (w Waitmsg) ExitStatus() int { - if len(w.Msg) == 0 { - // a normal exit returns no message - return 0 - } - return 1 -} - -//sys await(s []byte) (n int, err error) -func Await(w *Waitmsg) (err error) { - var buf [512]byte - var f [5][]byte - - n, err := await(buf[:]) - - if err != nil || w == nil { - return - } - - nf := 0 - p := 0 - for i := 0; i < n && nf < len(f)-1; i++ { - if buf[i] == ' ' { - f[nf] = buf[p:i] - p = i + 1 - nf++ - } - } - f[nf] = buf[p:] - nf++ - - if nf != len(f) { - return syscall.ErrorString("invalid wait message") - } - w.Pid = int(atoi(f[0])) - w.Time[0] = uint32(atoi(f[1])) - w.Time[1] = uint32(atoi(f[2])) - w.Time[2] = uint32(atoi(f[3])) - w.Msg = cstring(f[4]) - if w.Msg == "''" { - // await() returns '' for no error - w.Msg = "" - } - return -} - -func Unmount(name, old string) (err error) { - fixwd() - oldp, err := BytePtrFromString(old) - if err != nil { - return err - } - oldptr := uintptr(unsafe.Pointer(oldp)) - - var r0 uintptr - var e syscall.ErrorString - - // bind(2) man page: If name is zero, everything bound or mounted upon old is unbound or unmounted. - if name == "" { - r0, _, e = Syscall(SYS_UNMOUNT, _zero, oldptr, 0) - } else { - namep, err := BytePtrFromString(name) - if err != nil { - return err - } - r0, _, e = Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(namep)), oldptr, 0) - } - - if int32(r0) == -1 { - err = e - } - return -} - -func Fchdir(fd int) (err error) { - path, err := Fd2path(fd) - - if err != nil { - return - } - - return Chdir(path) -} - -type Timespec struct { - Sec int32 - Nsec int32 -} - -type Timeval struct { - Sec int32 - Usec int32 -} - -func NsecToTimeval(nsec int64) (tv Timeval) { - nsec += 999 // round up to microsecond - tv.Usec = int32(nsec % 1e9 / 1e3) - tv.Sec = int32(nsec / 1e9) - return -} - -func nsec() int64 { - var scratch int64 - - r0, _, _ := Syscall(SYS_NSEC, uintptr(unsafe.Pointer(&scratch)), 0, 0) - // TODO(aram): remove hack after I fix _nsec in the pc64 kernel. - if r0 == 0 { - return scratch - } - return int64(r0) -} - -func Gettimeofday(tv *Timeval) error { - nsec := nsec() - *tv = NsecToTimeval(nsec) - return nil -} - -func Getpagesize() int { return 0x1000 } - -func Getegid() (egid int) { return -1 } -func Geteuid() (euid int) { return -1 } -func Getgid() (gid int) { return -1 } -func Getuid() (uid int) { return -1 } - -func Getgroups() (gids []int, err error) { - return make([]int, 0), nil -} - -//sys open(path string, mode int) (fd int, err error) -func Open(path string, mode int) (fd int, err error) { - fixwd() - return open(path, mode) -} - -//sys create(path string, mode int, perm uint32) (fd int, err error) -func Create(path string, mode int, perm uint32) (fd int, err error) { - fixwd() - return create(path, mode, perm) -} - -//sys remove(path string) (err error) -func Remove(path string) error { - fixwd() - return remove(path) -} - -//sys stat(path string, edir []byte) (n int, err error) -func Stat(path string, edir []byte) (n int, err error) { - fixwd() - return stat(path, edir) -} - -//sys bind(name string, old string, flag int) (err error) -func Bind(name string, old string, flag int) (err error) { - fixwd() - return bind(name, old, flag) -} - -//sys mount(fd int, afd int, old string, flag int, aname string) (err error) -func Mount(fd int, afd int, old string, flag int, aname string) (err error) { - fixwd() - return mount(fd, afd, old, flag, aname) -} - -//sys wstat(path string, edir []byte) (err error) -func Wstat(path string, edir []byte) (err error) { - fixwd() - return wstat(path, edir) -} - -//sys chdir(path string) (err error) -//sys Dup(oldfd int, newfd int) (fd int, err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) -//sys Close(fd int) (err error) -//sys Fstat(fd int, edir []byte) (n int, err error) -//sys Fwstat(fd int, edir []byte) (err error) diff --git a/vendor/golang.org/x/sys/plan9/syscall_test.go b/vendor/golang.org/x/sys/plan9/syscall_test.go deleted file mode 100644 index 8f829ba..0000000 --- a/vendor/golang.org/x/sys/plan9/syscall_test.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build plan9 - -package plan9_test - -import ( - "testing" - - "golang.org/x/sys/plan9" -) - -func testSetGetenv(t *testing.T, key, value string) { - err := plan9.Setenv(key, value) - if err != nil { - t.Fatalf("Setenv failed to set %q: %v", value, err) - } - newvalue, found := plan9.Getenv(key) - if !found { - t.Fatalf("Getenv failed to find %v variable (want value %q)", key, value) - } - if newvalue != value { - t.Fatalf("Getenv(%v) = %q; want %q", key, newvalue, value) - } -} - -func TestEnv(t *testing.T) { - testSetGetenv(t, "TESTENV", "AVALUE") - // make sure TESTENV gets set to "", not deleted - testSetGetenv(t, "TESTENV", "") -} diff --git a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go deleted file mode 100644 index b35598a..0000000 --- a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go +++ /dev/null @@ -1,292 +0,0 @@ -// mksyscall.pl -l32 -plan9 syscall_plan9.go -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT - -package plan9 - -import "unsafe" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fd2path(fd int, buf []byte) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_FD2PATH, uintptr(fd), uintptr(_p0), uintptr(len(buf))) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe(p *[2]int32) (err error) { - r0, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func await(s []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(s) > 0 { - _p0 = unsafe.Pointer(&s[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_AWAIT, uintptr(_p0), uintptr(len(s)), 0) - n = int(r0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func open(path string, mode int) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - use(unsafe.Pointer(_p0)) - fd = int(r0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func create(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - use(unsafe.Pointer(_p0)) - fd = int(r0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func remove(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0) - use(unsafe.Pointer(_p0)) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func stat(path string, edir []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(edir) > 0 { - _p1 = unsafe.Pointer(&edir[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) - use(unsafe.Pointer(_p0)) - n = int(r0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(name string, old string, flag int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(old) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_BIND, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag)) - use(unsafe.Pointer(_p0)) - use(unsafe.Pointer(_p1)) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mount(fd int, afd int, old string, flag int, aname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(old) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(aname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_MOUNT, uintptr(fd), uintptr(afd), uintptr(unsafe.Pointer(_p0)), uintptr(flag), uintptr(unsafe.Pointer(_p1)), 0) - use(unsafe.Pointer(_p0)) - use(unsafe.Pointer(_p1)) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wstat(path string, edir []byte) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(edir) > 0 { - _p1 = unsafe.Pointer(&edir[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_WSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) - use(unsafe.Pointer(_p0)) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - use(unsafe.Pointer(_p0)) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(oldfd int, newfd int) (fd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), uintptr(newfd), 0) - fd = int(r0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) - n = int(r0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) - n = int(r0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - r0, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, edir []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(edir) > 0 { - _p0 = unsafe.Pointer(&edir[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir))) - n = int(r0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fwstat(fd int, edir []byte) (err error) { - var _p0 unsafe.Pointer - if len(edir) > 0 { - _p0 = unsafe.Pointer(&edir[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_FWSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir))) - if int32(r0) == -1 { - err = e1 - } - return -} diff --git a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go deleted file mode 100644 index b35598a..0000000 --- a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go +++ /dev/null @@ -1,292 +0,0 @@ -// mksyscall.pl -l32 -plan9 syscall_plan9.go -// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT - -package plan9 - -import "unsafe" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fd2path(fd int, buf []byte) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_FD2PATH, uintptr(fd), uintptr(_p0), uintptr(len(buf))) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe(p *[2]int32) (err error) { - r0, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func await(s []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(s) > 0 { - _p0 = unsafe.Pointer(&s[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_AWAIT, uintptr(_p0), uintptr(len(s)), 0) - n = int(r0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func open(path string, mode int) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - use(unsafe.Pointer(_p0)) - fd = int(r0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func create(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - use(unsafe.Pointer(_p0)) - fd = int(r0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func remove(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0) - use(unsafe.Pointer(_p0)) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func stat(path string, edir []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(edir) > 0 { - _p1 = unsafe.Pointer(&edir[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) - use(unsafe.Pointer(_p0)) - n = int(r0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(name string, old string, flag int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(old) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_BIND, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag)) - use(unsafe.Pointer(_p0)) - use(unsafe.Pointer(_p1)) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mount(fd int, afd int, old string, flag int, aname string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(old) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(aname) - if err != nil { - return - } - r0, _, e1 := Syscall6(SYS_MOUNT, uintptr(fd), uintptr(afd), uintptr(unsafe.Pointer(_p0)), uintptr(flag), uintptr(unsafe.Pointer(_p1)), 0) - use(unsafe.Pointer(_p0)) - use(unsafe.Pointer(_p1)) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wstat(path string, edir []byte) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(edir) > 0 { - _p1 = unsafe.Pointer(&edir[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_WSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) - use(unsafe.Pointer(_p0)) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) - use(unsafe.Pointer(_p0)) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(oldfd int, newfd int) (fd int, err error) { - r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), uintptr(newfd), 0) - fd = int(r0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) - n = int(r0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) - n = int(r0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - r0, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, edir []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(edir) > 0 { - _p0 = unsafe.Pointer(&edir[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir))) - n = int(r0) - if int32(r0) == -1 { - err = e1 - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fwstat(fd int, edir []byte) (err error) { - var _p0 unsafe.Pointer - if len(edir) > 0 { - _p0 = unsafe.Pointer(&edir[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_FWSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir))) - if int32(r0) == -1 { - err = e1 - } - return -} diff --git a/vendor/golang.org/x/sys/plan9/zsysnum_plan9.go b/vendor/golang.org/x/sys/plan9/zsysnum_plan9.go deleted file mode 100644 index 22e8abd..0000000 --- a/vendor/golang.org/x/sys/plan9/zsysnum_plan9.go +++ /dev/null @@ -1,49 +0,0 @@ -// mksysnum_plan9.sh /opt/plan9/sys/src/libc/9syscall/sys.h -// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT - -package plan9 - -const ( - SYS_SYSR1 = 0 - SYS_BIND = 2 - SYS_CHDIR = 3 - SYS_CLOSE = 4 - SYS_DUP = 5 - SYS_ALARM = 6 - SYS_EXEC = 7 - SYS_EXITS = 8 - SYS_FAUTH = 10 - SYS_SEGBRK = 12 - SYS_OPEN = 14 - SYS_OSEEK = 16 - SYS_SLEEP = 17 - SYS_RFORK = 19 - SYS_PIPE = 21 - SYS_CREATE = 22 - SYS_FD2PATH = 23 - SYS_BRK_ = 24 - SYS_REMOVE = 25 - SYS_NOTIFY = 28 - SYS_NOTED = 29 - SYS_SEGATTACH = 30 - SYS_SEGDETACH = 31 - SYS_SEGFREE = 32 - SYS_SEGFLUSH = 33 - SYS_RENDEZVOUS = 34 - SYS_UNMOUNT = 35 - SYS_SEMACQUIRE = 37 - SYS_SEMRELEASE = 38 - SYS_SEEK = 39 - SYS_FVERSION = 40 - SYS_ERRSTR = 41 - SYS_STAT = 42 - SYS_FSTAT = 43 - SYS_WSTAT = 44 - SYS_FWSTAT = 45 - SYS_MOUNT = 46 - SYS_AWAIT = 47 - SYS_PREAD = 50 - SYS_PWRITE = 51 - SYS_TSEMACQUIRE = 52 - SYS_NSEC = 53 -) diff --git a/vendor/golang.org/x/sys/unix/creds_test.go b/vendor/golang.org/x/sys/unix/creds_test.go deleted file mode 100644 index eaae7c3..0000000 --- a/vendor/golang.org/x/sys/unix/creds_test.go +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build linux - -package unix_test - -import ( - "bytes" - "net" - "os" - "syscall" - "testing" - - "golang.org/x/sys/unix" -) - -// TestSCMCredentials tests the sending and receiving of credentials -// (PID, UID, GID) in an ancillary message between two UNIX -// sockets. The SO_PASSCRED socket option is enabled on the sending -// socket for this to work. -func TestSCMCredentials(t *testing.T) { - fds, err := unix.Socketpair(unix.AF_LOCAL, unix.SOCK_STREAM, 0) - if err != nil { - t.Fatalf("Socketpair: %v", err) - } - defer unix.Close(fds[0]) - defer unix.Close(fds[1]) - - err = unix.SetsockoptInt(fds[0], unix.SOL_SOCKET, unix.SO_PASSCRED, 1) - if err != nil { - t.Fatalf("SetsockoptInt: %v", err) - } - - srvFile := os.NewFile(uintptr(fds[0]), "server") - defer srvFile.Close() - srv, err := net.FileConn(srvFile) - if err != nil { - t.Errorf("FileConn: %v", err) - return - } - defer srv.Close() - - cliFile := os.NewFile(uintptr(fds[1]), "client") - defer cliFile.Close() - cli, err := net.FileConn(cliFile) - if err != nil { - t.Errorf("FileConn: %v", err) - return - } - defer cli.Close() - - var ucred unix.Ucred - if os.Getuid() != 0 { - ucred.Pid = int32(os.Getpid()) - ucred.Uid = 0 - ucred.Gid = 0 - oob := unix.UnixCredentials(&ucred) - _, _, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil) - if op, ok := err.(*net.OpError); ok { - err = op.Err - } - if sys, ok := err.(*os.SyscallError); ok { - err = sys.Err - } - if err != syscall.EPERM { - t.Fatalf("WriteMsgUnix failed with %v, want EPERM", err) - } - } - - ucred.Pid = int32(os.Getpid()) - ucred.Uid = uint32(os.Getuid()) - ucred.Gid = uint32(os.Getgid()) - oob := unix.UnixCredentials(&ucred) - - // this is going to send a dummy byte - n, oobn, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil) - if err != nil { - t.Fatalf("WriteMsgUnix: %v", err) - } - if n != 0 { - t.Fatalf("WriteMsgUnix n = %d, want 0", n) - } - if oobn != len(oob) { - t.Fatalf("WriteMsgUnix oobn = %d, want %d", oobn, len(oob)) - } - - oob2 := make([]byte, 10*len(oob)) - n, oobn2, flags, _, err := srv.(*net.UnixConn).ReadMsgUnix(nil, oob2) - if err != nil { - t.Fatalf("ReadMsgUnix: %v", err) - } - if flags != 0 { - t.Fatalf("ReadMsgUnix flags = 0x%x, want 0", flags) - } - if n != 1 { - t.Fatalf("ReadMsgUnix n = %d, want 1 (dummy byte)", n) - } - if oobn2 != oobn { - // without SO_PASSCRED set on the socket, ReadMsgUnix will - // return zero oob bytes - t.Fatalf("ReadMsgUnix oobn = %d, want %d", oobn2, oobn) - } - oob2 = oob2[:oobn2] - if !bytes.Equal(oob, oob2) { - t.Fatal("ReadMsgUnix oob bytes don't match") - } - - scm, err := unix.ParseSocketControlMessage(oob2) - if err != nil { - t.Fatalf("ParseSocketControlMessage: %v", err) - } - newUcred, err := unix.ParseUnixCredentials(&scm[0]) - if err != nil { - t.Fatalf("ParseUnixCredentials: %v", err) - } - if *newUcred != ucred { - t.Fatalf("ParseUnixCredentials = %+v, want %+v", newUcred, ucred) - } -} diff --git a/vendor/golang.org/x/sys/unix/export_test.go b/vendor/golang.org/x/sys/unix/export_test.go deleted file mode 100644 index b4fdd97..0000000 --- a/vendor/golang.org/x/sys/unix/export_test.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build darwin dragonfly freebsd linux netbsd openbsd solaris - -package unix - -var Itoa = itoa diff --git a/vendor/golang.org/x/sys/unix/linux/Dockerfile b/vendor/golang.org/x/sys/unix/linux/Dockerfile deleted file mode 100644 index 4397143..0000000 --- a/vendor/golang.org/x/sys/unix/linux/Dockerfile +++ /dev/null @@ -1,48 +0,0 @@ -FROM ubuntu:16.04 - -# Dependencies to get the git sources and go binaries -RUN apt-get update && apt-get install -y \ - curl \ - git \ - && rm -rf /var/lib/apt/lists/* - -# Get the git sources. If not cached, this takes O(5 minutes). -WORKDIR /git -RUN git config --global advice.detachedHead false -# Linux Kernel: Released 19 Feb 2017 -RUN git clone --branch v4.10 --depth 1 https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux -# GNU C library: Released 05 Feb 2017 (we should try to get a secure way to clone this) -RUN git clone --branch glibc-2.25 --depth 1 git://sourceware.org/git/glibc.git - -# Get Go 1.8 (https://github.com/docker-library/golang/blob/master/1.8/Dockerfile) -ENV GOLANG_VERSION 1.8 -ENV GOLANG_DOWNLOAD_URL https://golang.org/dl/go$GOLANG_VERSION.linux-amd64.tar.gz -ENV GOLANG_DOWNLOAD_SHA256 53ab94104ee3923e228a2cb2116e5e462ad3ebaeea06ff04463479d7f12d27ca - -RUN curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz \ - && echo "$GOLANG_DOWNLOAD_SHA256 golang.tar.gz" | sha256sum -c - \ - && tar -C /usr/local -xzf golang.tar.gz \ - && rm golang.tar.gz - -ENV PATH /usr/local/go/bin:$PATH - -# Linux and Glibc build dependencies -RUN apt-get update && apt-get install -y \ - gawk make python \ - gcc gcc-multilib \ - gettext texinfo \ - && rm -rf /var/lib/apt/lists/* -# Emulator and cross compilers -RUN apt-get update && apt-get install -y \ - qemu \ - gcc-aarch64-linux-gnu gcc-arm-linux-gnueabi \ - gcc-mips-linux-gnu gcc-mips64-linux-gnuabi64 \ - gcc-mips64el-linux-gnuabi64 gcc-mipsel-linux-gnu \ - gcc-powerpc64-linux-gnu gcc-powerpc64le-linux-gnu \ - gcc-s390x-linux-gnu gcc-sparc64-linux-gnu \ - && rm -rf /var/lib/apt/lists/* - -# Let the scripts know they are in the docker environment -ENV GOLANG_SYS_BUILD docker -WORKDIR /build -ENTRYPOINT ["go", "run", "linux/mkall.go", "/git/linux", "/git/glibc"] diff --git a/vendor/golang.org/x/sys/unix/linux/mkall.go b/vendor/golang.org/x/sys/unix/linux/mkall.go deleted file mode 100644 index 429754f..0000000 --- a/vendor/golang.org/x/sys/unix/linux/mkall.go +++ /dev/null @@ -1,379 +0,0 @@ -// Copyright 2017 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// linux/mkall.go - Generates all Linux zsysnum, zsyscall, zerror, and ztype -// files for all 11 linux architectures supported by the go compiler. See -// README.md for more information about the build system. - -// To run it you must have a git checkout of the Linux kernel and glibc. Once -// the appropriate sources are ready, the program is run as: -// go run linux/mkall.go - -// +build ignore - -package main - -import ( - "fmt" - "os" - "os/exec" - "path/filepath" - "runtime" - "strings" -) - -// These will be paths to the appropriate source directories. -var LinuxDir string -var GlibcDir string - -const TempDir = "/tmp" -const IncludeDir = TempDir + "/include" // To hold our C headers -const BuildDir = TempDir + "/build" // To hold intermediate build files - -const GOOS = "linux" // Only for Linux targets -const BuildArch = "amd64" // Must be built on this architecture -const MinKernel = "2.6.23" // https://golang.org/doc/install#requirements - -type target struct { - GoArch string // Architecture name according to Go - LinuxArch string // Architecture name according to the Linux Kernel - GNUArch string // Architecture name according to GNU tools (https://wiki.debian.org/Multiarch/Tuples) - BigEndian bool // Default Little Endian - SignedChar bool // Is -fsigned-char needed (default no) - Bits int -} - -// List of the 11 Linux targets supported by the go compiler. sparc64 is not -// currently supported, though a port is in progress. -var targets = []target{ - { - GoArch: "386", - LinuxArch: "x86", - GNUArch: "i686-linux-gnu", // Note "i686" not "i386" - Bits: 32, - }, - { - GoArch: "amd64", - LinuxArch: "x86", - GNUArch: "x86_64-linux-gnu", - Bits: 64, - }, - { - GoArch: "arm64", - LinuxArch: "arm64", - GNUArch: "aarch64-linux-gnu", - SignedChar: true, - Bits: 64, - }, - { - GoArch: "arm", - LinuxArch: "arm", - GNUArch: "arm-linux-gnueabi", - Bits: 32, - }, - { - GoArch: "mips", - LinuxArch: "mips", - GNUArch: "mips-linux-gnu", - BigEndian: true, - Bits: 32, - }, - { - GoArch: "mipsle", - LinuxArch: "mips", - GNUArch: "mipsel-linux-gnu", - Bits: 32, - }, - { - GoArch: "mips64", - LinuxArch: "mips", - GNUArch: "mips64-linux-gnuabi64", - BigEndian: true, - Bits: 64, - }, - { - GoArch: "mips64le", - LinuxArch: "mips", - GNUArch: "mips64el-linux-gnuabi64", - Bits: 64, - }, - { - GoArch: "ppc64", - LinuxArch: "powerpc", - GNUArch: "powerpc64-linux-gnu", - BigEndian: true, - Bits: 64, - }, - { - GoArch: "ppc64le", - LinuxArch: "powerpc", - GNUArch: "powerpc64le-linux-gnu", - Bits: 64, - }, - { - GoArch: "s390x", - LinuxArch: "s390", - GNUArch: "s390x-linux-gnu", - BigEndian: true, - SignedChar: true, - Bits: 64, - }, - // { - // GoArch: "sparc64", - // LinuxArch: "sparc", - // GNUArch: "sparc64-linux-gnu", - // BigEndian: true, - // Bits: 64, - // }, -} - -func main() { - if runtime.GOOS != GOOS || runtime.GOARCH != BuildArch { - fmt.Printf("Build system has GOOS_GOARCH = %s_%s, need %s_%s\n", - runtime.GOOS, runtime.GOARCH, GOOS, BuildArch) - return - } - - // Check that we are using the new build system if we should - if os.Getenv("GOLANG_SYS_BUILD") != "docker" { - fmt.Println("In the new build system, mkall.go should not be called directly.") - fmt.Println("See README.md") - return - } - - // Parse the command line options - if len(os.Args) != 3 { - fmt.Println("USAGE: go run linux/mkall.go ") - return - } - LinuxDir = os.Args[1] - GlibcDir = os.Args[2] - - for _, t := range targets { - fmt.Printf("----- GENERATING: %s -----\n", t.GoArch) - if err := t.generateFiles(); err != nil { - fmt.Printf("%v\n***** FAILURE: %s *****\n\n", err, t.GoArch) - } else { - fmt.Printf("----- SUCCESS: %s -----\n\n", t.GoArch) - } - } -} - -// Makes an exec.Cmd with Stderr attached to os.Stderr -func makeCommand(name string, args ...string) *exec.Cmd { - cmd := exec.Command(name, args...) - cmd.Stderr = os.Stderr - return cmd -} - -// Runs the command, pipes output to a formatter, pipes that to an output file. -func (t *target) commandFormatOutput(formatter string, outputFile string, - name string, args ...string) (err error) { - mainCmd := makeCommand(name, args...) - - fmtCmd := makeCommand(formatter) - if formatter == "mkpost" { - fmtCmd = makeCommand("go", "run", "mkpost.go") - // Set GOARCH_TARGET so mkpost knows what GOARCH is.. - fmtCmd.Env = append(os.Environ(), "GOARCH_TARGET="+t.GoArch) - // Set GOARCH to host arch for mkpost, so it can run natively. - for i, s := range fmtCmd.Env { - if strings.HasPrefix(s, "GOARCH=") { - fmtCmd.Env[i] = "GOARCH=" + BuildArch - } - } - } - - // mainCmd | fmtCmd > outputFile - if fmtCmd.Stdin, err = mainCmd.StdoutPipe(); err != nil { - return - } - if fmtCmd.Stdout, err = os.Create(outputFile); err != nil { - return - } - - // Make sure the formatter eventually closes - if err = fmtCmd.Start(); err != nil { - return - } - defer func() { - fmtErr := fmtCmd.Wait() - if err == nil { - err = fmtErr - } - }() - - return mainCmd.Run() -} - -// Generates all the files for a Linux target -func (t *target) generateFiles() error { - // Setup environment variables - os.Setenv("GOOS", GOOS) - os.Setenv("GOARCH", t.GoArch) - - // Get appropriate compiler and emulator (unless on x86) - if t.LinuxArch != "x86" { - // Check/Setup cross compiler - compiler := t.GNUArch + "-gcc" - if _, err := exec.LookPath(compiler); err != nil { - return err - } - os.Setenv("CC", compiler) - - // Check/Setup emulator (usually first component of GNUArch) - qemuArchName := t.GNUArch[:strings.Index(t.GNUArch, "-")] - if t.LinuxArch == "powerpc" { - qemuArchName = t.GoArch - } - os.Setenv("GORUN", "qemu-"+qemuArchName) - } else { - os.Setenv("CC", "gcc") - } - - // Make the include directory and fill it with headers - if err := os.MkdirAll(IncludeDir, os.ModePerm); err != nil { - return err - } - defer os.RemoveAll(IncludeDir) - if err := t.makeHeaders(); err != nil { - return fmt.Errorf("could not make header files: %v", err) - } - fmt.Println("header files generated") - - // Make each of the four files - if err := t.makeZSysnumFile(); err != nil { - return fmt.Errorf("could not make zsysnum file: %v", err) - } - fmt.Println("zsysnum file generated") - - if err := t.makeZSyscallFile(); err != nil { - return fmt.Errorf("could not make zsyscall file: %v", err) - } - fmt.Println("zsyscall file generated") - - if err := t.makeZTypesFile(); err != nil { - return fmt.Errorf("could not make ztypes file: %v", err) - } - fmt.Println("ztypes file generated") - - if err := t.makeZErrorsFile(); err != nil { - return fmt.Errorf("could not make zerrors file: %v", err) - } - fmt.Println("zerrors file generated") - - return nil -} - -// Create the Linux and glibc headers in the include directory. -func (t *target) makeHeaders() error { - // Make the Linux headers we need for this architecture - linuxMake := makeCommand("make", "headers_install", "ARCH="+t.LinuxArch, "INSTALL_HDR_PATH="+TempDir) - linuxMake.Dir = LinuxDir - if err := linuxMake.Run(); err != nil { - return err - } - - // A Temporary build directory for glibc - if err := os.MkdirAll(BuildDir, os.ModePerm); err != nil { - return err - } - defer os.RemoveAll(BuildDir) - - // Make the glibc headers we need for this architecture - confScript := filepath.Join(GlibcDir, "configure") - glibcConf := makeCommand(confScript, "--prefix="+TempDir, "--host="+t.GNUArch, "--enable-kernel="+MinKernel) - glibcConf.Dir = BuildDir - if err := glibcConf.Run(); err != nil { - return err - } - glibcMake := makeCommand("make", "install-headers") - glibcMake.Dir = BuildDir - if err := glibcMake.Run(); err != nil { - return err - } - // We only need an empty stubs file - stubsFile := filepath.Join(IncludeDir, "gnu/stubs.h") - if file, err := os.Create(stubsFile); err != nil { - return err - } else { - file.Close() - } - - return nil -} - -// makes the zsysnum_linux_$GOARCH.go file -func (t *target) makeZSysnumFile() error { - zsysnumFile := fmt.Sprintf("zsysnum_linux_%s.go", t.GoArch) - unistdFile := filepath.Join(IncludeDir, "asm/unistd.h") - - args := append(t.cFlags(), unistdFile) - return t.commandFormatOutput("gofmt", zsysnumFile, "linux/mksysnum.pl", args...) -} - -// makes the zsyscall_linux_$GOARCH.go file -func (t *target) makeZSyscallFile() error { - zsyscallFile := fmt.Sprintf("zsyscall_linux_%s.go", t.GoArch) - // Find the correct architecture syscall file (might end with x.go) - archSyscallFile := fmt.Sprintf("syscall_linux_%s.go", t.GoArch) - if _, err := os.Stat(archSyscallFile); os.IsNotExist(err) { - shortArch := strings.TrimSuffix(t.GoArch, "le") - archSyscallFile = fmt.Sprintf("syscall_linux_%sx.go", shortArch) - } - - args := append(t.mksyscallFlags(), "-tags", "linux,"+t.GoArch, - "syscall_linux.go", archSyscallFile) - return t.commandFormatOutput("gofmt", zsyscallFile, "./mksyscall.pl", args...) -} - -// makes the zerrors_linux_$GOARCH.go file -func (t *target) makeZErrorsFile() error { - zerrorsFile := fmt.Sprintf("zerrors_linux_%s.go", t.GoArch) - - return t.commandFormatOutput("gofmt", zerrorsFile, "./mkerrors.sh", t.cFlags()...) -} - -// makes the ztypes_linux_$GOARCH.go file -func (t *target) makeZTypesFile() error { - ztypesFile := fmt.Sprintf("ztypes_linux_%s.go", t.GoArch) - - args := []string{"tool", "cgo", "-godefs", "--"} - args = append(args, t.cFlags()...) - args = append(args, "linux/types.go") - return t.commandFormatOutput("mkpost", ztypesFile, "go", args...) -} - -// Flags that should be given to gcc and cgo for this target -func (t *target) cFlags() []string { - // Compile statically to avoid cross-architecture dynamic linking. - flags := []string{"-Wall", "-Werror", "-static", "-I" + IncludeDir} - - // Architecture-specific flags - if t.SignedChar { - flags = append(flags, "-fsigned-char") - } - if t.LinuxArch == "x86" { - flags = append(flags, fmt.Sprintf("-m%d", t.Bits)) - } - - return flags -} - -// Flags that should be given to mksyscall for this target -func (t *target) mksyscallFlags() (flags []string) { - if t.Bits == 32 { - if t.BigEndian { - flags = append(flags, "-b32") - } else { - flags = append(flags, "-l32") - } - } - - // This flag menas a 64-bit value should use (even, odd)-pair. - if t.GoArch == "arm" || (t.LinuxArch == "mips" && t.Bits == 32) { - flags = append(flags, "-arm") - } - return -} diff --git a/vendor/golang.org/x/sys/unix/linux/mksysnum.pl b/vendor/golang.org/x/sys/unix/linux/mksysnum.pl deleted file mode 100755 index 63fd800..0000000 --- a/vendor/golang.org/x/sys/unix/linux/mksysnum.pl +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env perl -# Copyright 2009 The Go Authors. All rights reserved. -# Use of this source code is governed by a BSD-style -# license that can be found in the LICENSE file. - -use strict; - -if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") { - print STDERR "GOARCH or GOOS not defined in environment\n"; - exit 1; -} - -# Check that we are using the new build system if we should -if($ENV{'GOLANG_SYS_BUILD'} ne "docker") { - print STDERR "In the new build system, mksysnum should not be called directly.\n"; - print STDERR "See README.md\n"; - exit 1; -} - -my $command = "$0 ". join(' ', @ARGV); - -print < 999){ - # ignore deprecated syscalls that are no longer implemented - # https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/asm-generic/unistd.h?id=refs/heads/master#n716 - return; - } - $name =~ y/a-z/A-Z/; - $num = $num + $offset; - print " SYS_$name = $num;\n"; -} - -my $prev; -open(CC, "$ENV{'CC'} -E -dD @ARGV |") || die "can't run $ENV{'CC'}"; -while(){ - if(/^#define __NR_Linux\s+([0-9]+)/){ - # mips/mips64: extract offset - $offset = $1; - } - elsif(/^#define __NR(\w*)_SYSCALL_BASE\s+([0-9]+)/){ - # arm: extract offset - $offset = $1; - } - elsif(/^#define __NR_syscalls\s+/) { - # ignore redefinitions of __NR_syscalls - } - elsif(/^#define __NR_(\w*)Linux_syscalls\s+/) { - # mips/mips64: ignore definitions about the number of syscalls - } - elsif(/^#define __NR_(\w+)\s+([0-9]+)/){ - $prev = $2; - fmt($1, $2); - } - elsif(/^#define __NR3264_(\w+)\s+([0-9]+)/){ - $prev = $2; - fmt($1, $2); - } - elsif(/^#define __NR_(\w+)\s+\(\w+\+\s*([0-9]+)\)/){ - fmt($1, $prev+$2) - } - elsif(/^#define __NR_(\w+)\s+\(__NR_Linux \+ ([0-9]+)/){ - fmt($1, $2); - } - elsif(/^#define __NR_(\w+)\s+\(__NR_SYSCALL_BASE \+ ([0-9]+)/){ - fmt($1, $2); - } -} - -print < -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// On mips64, the glibc stat and kernel stat do not agree -#if (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI64) - -// Use the stat defined by the kernel with a few modifications. These are: -// * The time fields (like st_atime and st_atimensec) use the timespec -// struct (like st_atim) for consitancy with the glibc fields. -// * The padding fields get different names to not break compatibility. -// * st_blocks is signed, again for compatibility. -struct stat { - unsigned int st_dev; - unsigned int st_pad1[3]; // Reserved for st_dev expansion - - unsigned long st_ino; - - mode_t st_mode; - __u32 st_nlink; - - uid_t st_uid; - gid_t st_gid; - - unsigned int st_rdev; - unsigned int st_pad2[3]; // Reserved for st_rdev expansion - - off_t st_size; - - // These are declared as speperate fields in the kernel. Here we use - // the timespec struct for consistancy with the other stat structs. - struct timespec st_atim; - struct timespec st_mtim; - struct timespec st_ctim; - - unsigned int st_blksize; - unsigned int st_pad4; - - long st_blocks; -}; - -// These are needed because we do not include fcntl.h or sys/types.h -#include -#include - -#else - -// Use the stat defined by glibc -#include -#include - -#endif - -// Certain constants and structs are missing from the fs/crypto UAPI -#define FS_MAX_KEY_SIZE 64 -struct fscrypt_key { - __u32 mode; - __u8 raw[FS_MAX_KEY_SIZE]; - __u32 size; -}; - -#ifdef TCSETS2 -// On systems that have "struct termios2" use this as type Termios. -typedef struct termios2 termios_t; -#else -typedef struct termios termios_t; -#endif - -enum { - sizeofPtr = sizeof(void*), -}; - -union sockaddr_all { - struct sockaddr s1; // this one gets used for fields - struct sockaddr_in s2; // these pad it out - struct sockaddr_in6 s3; - struct sockaddr_un s4; - struct sockaddr_ll s5; - struct sockaddr_nl s6; -}; - -struct sockaddr_any { - struct sockaddr addr; - char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; -}; - -// copied from /usr/include/bluetooth/hci.h -struct sockaddr_hci { - sa_family_t hci_family; - unsigned short hci_dev; - unsigned short hci_channel; -};; - -// copied from /usr/include/linux/un.h -struct my_sockaddr_un { - sa_family_t sun_family; -#if defined(__ARM_EABI__) || defined(__powerpc64__) - // on ARM char is by default unsigned - signed char sun_path[108]; -#else - char sun_path[108]; -#endif -}; - -#ifdef __ARM_EABI__ -typedef struct user_regs PtraceRegs; -#elif defined(__aarch64__) -typedef struct user_pt_regs PtraceRegs; -#elif defined(__powerpc64__) -typedef struct pt_regs PtraceRegs; -#elif defined(__mips__) -typedef struct user PtraceRegs; -#elif defined(__s390x__) -typedef struct _user_regs_struct PtraceRegs; -#elif defined(__sparc__) -#include -typedef struct pt_regs PtraceRegs; -#else -typedef struct user_regs_struct PtraceRegs; -#endif - -#if defined(__s390x__) -typedef struct _user_psw_struct ptracePsw; -typedef struct _user_fpregs_struct ptraceFpregs; -typedef struct _user_per_struct ptracePer; -#else -typedef struct {} ptracePsw; -typedef struct {} ptraceFpregs; -typedef struct {} ptracePer; -#endif - -// The real epoll_event is a union, and godefs doesn't handle it well. -struct my_epoll_event { - uint32_t events; -#if defined(__ARM_EABI__) || defined(__aarch64__) || (defined(__mips__) && _MIPS_SIM == _ABIO32) - // padding is not specified in linux/eventpoll.h but added to conform to the - // alignment requirements of EABI - int32_t padFd; -#elif defined(__powerpc64__) || defined(__s390x__) || defined(__sparc__) - int32_t _padFd; -#endif - int32_t fd; - int32_t pad; -}; - -*/ -import "C" - -// Machine characteristics; for internal use. - -const ( - sizeofPtr = C.sizeofPtr - sizeofShort = C.sizeof_short - sizeofInt = C.sizeof_int - sizeofLong = C.sizeof_long - sizeofLongLong = C.sizeof_longlong - PathMax = C.PATH_MAX -) - -// Basic types - -type ( - _C_short C.short - _C_int C.int - _C_long C.long - _C_long_long C.longlong -) - -// Time - -type Timespec C.struct_timespec - -type Timeval C.struct_timeval - -type Timex C.struct_timex - -type Time_t C.time_t - -type Tms C.struct_tms - -type Utimbuf C.struct_utimbuf - -// Processes - -type Rusage C.struct_rusage - -type Rlimit C.struct_rlimit - -type _Gid_t C.gid_t - -// Files - -type Stat_t C.struct_stat - -type Statfs_t C.struct_statfs - -type Dirent C.struct_dirent - -type Fsid C.fsid_t - -type Flock_t C.struct_flock - -// Filesystem Encryption - -type FscryptPolicy C.struct_fscrypt_policy - -type FscryptKey C.struct_fscrypt_key - -// Advice to Fadvise - -const ( - FADV_NORMAL = C.POSIX_FADV_NORMAL - FADV_RANDOM = C.POSIX_FADV_RANDOM - FADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL - FADV_WILLNEED = C.POSIX_FADV_WILLNEED - FADV_DONTNEED = C.POSIX_FADV_DONTNEED - FADV_NOREUSE = C.POSIX_FADV_NOREUSE -) - -// Sockets - -type RawSockaddrInet4 C.struct_sockaddr_in - -type RawSockaddrInet6 C.struct_sockaddr_in6 - -type RawSockaddrUnix C.struct_my_sockaddr_un - -type RawSockaddrLinklayer C.struct_sockaddr_ll - -type RawSockaddrNetlink C.struct_sockaddr_nl - -type RawSockaddrHCI C.struct_sockaddr_hci - -type RawSockaddrCAN C.struct_sockaddr_can - -type RawSockaddrALG C.struct_sockaddr_alg - -type RawSockaddrVM C.struct_sockaddr_vm - -type RawSockaddr C.struct_sockaddr - -type RawSockaddrAny C.struct_sockaddr_any - -type _Socklen C.socklen_t - -type Linger C.struct_linger - -type Iovec C.struct_iovec - -type IPMreq C.struct_ip_mreq - -type IPMreqn C.struct_ip_mreqn - -type IPv6Mreq C.struct_ipv6_mreq - -type Msghdr C.struct_msghdr - -type Cmsghdr C.struct_cmsghdr - -type Inet4Pktinfo C.struct_in_pktinfo - -type Inet6Pktinfo C.struct_in6_pktinfo - -type IPv6MTUInfo C.struct_ip6_mtuinfo - -type ICMPv6Filter C.struct_icmp6_filter - -type Ucred C.struct_ucred - -type TCPInfo C.struct_tcp_info - -const ( - SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in - SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 - SizeofSockaddrAny = C.sizeof_struct_sockaddr_any - SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un - SizeofSockaddrLinklayer = C.sizeof_struct_sockaddr_ll - SizeofSockaddrNetlink = C.sizeof_struct_sockaddr_nl - SizeofSockaddrHCI = C.sizeof_struct_sockaddr_hci - SizeofSockaddrCAN = C.sizeof_struct_sockaddr_can - SizeofSockaddrALG = C.sizeof_struct_sockaddr_alg - SizeofSockaddrVM = C.sizeof_struct_sockaddr_vm - SizeofLinger = C.sizeof_struct_linger - SizeofIPMreq = C.sizeof_struct_ip_mreq - SizeofIPMreqn = C.sizeof_struct_ip_mreqn - SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq - SizeofMsghdr = C.sizeof_struct_msghdr - SizeofCmsghdr = C.sizeof_struct_cmsghdr - SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo - SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo - SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo - SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter - SizeofUcred = C.sizeof_struct_ucred - SizeofTCPInfo = C.sizeof_struct_tcp_info -) - -// Netlink routing and interface messages - -const ( - IFA_UNSPEC = C.IFA_UNSPEC - IFA_ADDRESS = C.IFA_ADDRESS - IFA_LOCAL = C.IFA_LOCAL - IFA_LABEL = C.IFA_LABEL - IFA_BROADCAST = C.IFA_BROADCAST - IFA_ANYCAST = C.IFA_ANYCAST - IFA_CACHEINFO = C.IFA_CACHEINFO - IFA_MULTICAST = C.IFA_MULTICAST - IFLA_UNSPEC = C.IFLA_UNSPEC - IFLA_ADDRESS = C.IFLA_ADDRESS - IFLA_BROADCAST = C.IFLA_BROADCAST - IFLA_IFNAME = C.IFLA_IFNAME - IFLA_MTU = C.IFLA_MTU - IFLA_LINK = C.IFLA_LINK - IFLA_QDISC = C.IFLA_QDISC - IFLA_STATS = C.IFLA_STATS - IFLA_COST = C.IFLA_COST - IFLA_PRIORITY = C.IFLA_PRIORITY - IFLA_MASTER = C.IFLA_MASTER - IFLA_WIRELESS = C.IFLA_WIRELESS - IFLA_PROTINFO = C.IFLA_PROTINFO - IFLA_TXQLEN = C.IFLA_TXQLEN - IFLA_MAP = C.IFLA_MAP - IFLA_WEIGHT = C.IFLA_WEIGHT - IFLA_OPERSTATE = C.IFLA_OPERSTATE - IFLA_LINKMODE = C.IFLA_LINKMODE - IFLA_LINKINFO = C.IFLA_LINKINFO - IFLA_NET_NS_PID = C.IFLA_NET_NS_PID - IFLA_IFALIAS = C.IFLA_IFALIAS - IFLA_MAX = C.IFLA_MAX - RT_SCOPE_UNIVERSE = C.RT_SCOPE_UNIVERSE - RT_SCOPE_SITE = C.RT_SCOPE_SITE - RT_SCOPE_LINK = C.RT_SCOPE_LINK - RT_SCOPE_HOST = C.RT_SCOPE_HOST - RT_SCOPE_NOWHERE = C.RT_SCOPE_NOWHERE - RT_TABLE_UNSPEC = C.RT_TABLE_UNSPEC - RT_TABLE_COMPAT = C.RT_TABLE_COMPAT - RT_TABLE_DEFAULT = C.RT_TABLE_DEFAULT - RT_TABLE_MAIN = C.RT_TABLE_MAIN - RT_TABLE_LOCAL = C.RT_TABLE_LOCAL - RT_TABLE_MAX = C.RT_TABLE_MAX - RTA_UNSPEC = C.RTA_UNSPEC - RTA_DST = C.RTA_DST - RTA_SRC = C.RTA_SRC - RTA_IIF = C.RTA_IIF - RTA_OIF = C.RTA_OIF - RTA_GATEWAY = C.RTA_GATEWAY - RTA_PRIORITY = C.RTA_PRIORITY - RTA_PREFSRC = C.RTA_PREFSRC - RTA_METRICS = C.RTA_METRICS - RTA_MULTIPATH = C.RTA_MULTIPATH - RTA_FLOW = C.RTA_FLOW - RTA_CACHEINFO = C.RTA_CACHEINFO - RTA_TABLE = C.RTA_TABLE - RTN_UNSPEC = C.RTN_UNSPEC - RTN_UNICAST = C.RTN_UNICAST - RTN_LOCAL = C.RTN_LOCAL - RTN_BROADCAST = C.RTN_BROADCAST - RTN_ANYCAST = C.RTN_ANYCAST - RTN_MULTICAST = C.RTN_MULTICAST - RTN_BLACKHOLE = C.RTN_BLACKHOLE - RTN_UNREACHABLE = C.RTN_UNREACHABLE - RTN_PROHIBIT = C.RTN_PROHIBIT - RTN_THROW = C.RTN_THROW - RTN_NAT = C.RTN_NAT - RTN_XRESOLVE = C.RTN_XRESOLVE - RTNLGRP_NONE = C.RTNLGRP_NONE - RTNLGRP_LINK = C.RTNLGRP_LINK - RTNLGRP_NOTIFY = C.RTNLGRP_NOTIFY - RTNLGRP_NEIGH = C.RTNLGRP_NEIGH - RTNLGRP_TC = C.RTNLGRP_TC - RTNLGRP_IPV4_IFADDR = C.RTNLGRP_IPV4_IFADDR - RTNLGRP_IPV4_MROUTE = C.RTNLGRP_IPV4_MROUTE - RTNLGRP_IPV4_ROUTE = C.RTNLGRP_IPV4_ROUTE - RTNLGRP_IPV4_RULE = C.RTNLGRP_IPV4_RULE - RTNLGRP_IPV6_IFADDR = C.RTNLGRP_IPV6_IFADDR - RTNLGRP_IPV6_MROUTE = C.RTNLGRP_IPV6_MROUTE - RTNLGRP_IPV6_ROUTE = C.RTNLGRP_IPV6_ROUTE - RTNLGRP_IPV6_IFINFO = C.RTNLGRP_IPV6_IFINFO - RTNLGRP_IPV6_PREFIX = C.RTNLGRP_IPV6_PREFIX - RTNLGRP_IPV6_RULE = C.RTNLGRP_IPV6_RULE - RTNLGRP_ND_USEROPT = C.RTNLGRP_ND_USEROPT - SizeofNlMsghdr = C.sizeof_struct_nlmsghdr - SizeofNlMsgerr = C.sizeof_struct_nlmsgerr - SizeofRtGenmsg = C.sizeof_struct_rtgenmsg - SizeofNlAttr = C.sizeof_struct_nlattr - SizeofRtAttr = C.sizeof_struct_rtattr - SizeofIfInfomsg = C.sizeof_struct_ifinfomsg - SizeofIfAddrmsg = C.sizeof_struct_ifaddrmsg - SizeofRtMsg = C.sizeof_struct_rtmsg - SizeofRtNexthop = C.sizeof_struct_rtnexthop -) - -type NlMsghdr C.struct_nlmsghdr - -type NlMsgerr C.struct_nlmsgerr - -type RtGenmsg C.struct_rtgenmsg - -type NlAttr C.struct_nlattr - -type RtAttr C.struct_rtattr - -type IfInfomsg C.struct_ifinfomsg - -type IfAddrmsg C.struct_ifaddrmsg - -type RtMsg C.struct_rtmsg - -type RtNexthop C.struct_rtnexthop - -// Linux socket filter - -const ( - SizeofSockFilter = C.sizeof_struct_sock_filter - SizeofSockFprog = C.sizeof_struct_sock_fprog -) - -type SockFilter C.struct_sock_filter - -type SockFprog C.struct_sock_fprog - -// Inotify - -type InotifyEvent C.struct_inotify_event - -const SizeofInotifyEvent = C.sizeof_struct_inotify_event - -// Ptrace - -// Register structures -type PtraceRegs C.PtraceRegs - -// Structures contained in PtraceRegs on s390x (exported by mkpost.go) -type PtracePsw C.ptracePsw - -type PtraceFpregs C.ptraceFpregs - -type PtracePer C.ptracePer - -// Misc - -type FdSet C.fd_set - -type Sysinfo_t C.struct_sysinfo - -type Utsname C.struct_utsname - -type Ustat_t C.struct_ustat - -type EpollEvent C.struct_my_epoll_event - -const ( - AT_FDCWD = C.AT_FDCWD - AT_REMOVEDIR = C.AT_REMOVEDIR - AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW - AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW -) - -type PollFd C.struct_pollfd - -const ( - POLLIN = C.POLLIN - POLLPRI = C.POLLPRI - POLLOUT = C.POLLOUT - POLLRDHUP = C.POLLRDHUP - POLLERR = C.POLLERR - POLLHUP = C.POLLHUP - POLLNVAL = C.POLLNVAL -) - -type Sigset_t C.sigset_t - -// sysconf information - -const _SC_PAGESIZE = C._SC_PAGESIZE - -// Terminal handling - -type Termios C.termios_t diff --git a/vendor/golang.org/x/sys/unix/mmap_unix_test.go b/vendor/golang.org/x/sys/unix/mmap_unix_test.go deleted file mode 100644 index 18ccec0..0000000 --- a/vendor/golang.org/x/sys/unix/mmap_unix_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build darwin dragonfly freebsd linux netbsd openbsd solaris - -package unix_test - -import ( - "testing" - - "golang.org/x/sys/unix" -) - -func TestMmap(t *testing.T) { - b, err := unix.Mmap(-1, 0, unix.Getpagesize(), unix.PROT_NONE, unix.MAP_ANON|unix.MAP_PRIVATE) - if err != nil { - t.Fatalf("Mmap: %v", err) - } - if err := unix.Munmap(b); err != nil { - t.Fatalf("Munmap: %v", err) - } -} diff --git a/vendor/golang.org/x/sys/unix/openbsd_test.go b/vendor/golang.org/x/sys/unix/openbsd_test.go deleted file mode 100644 index 734d765..0000000 --- a/vendor/golang.org/x/sys/unix/openbsd_test.go +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build openbsd - -// This, on the face of it, bizarre testing mechanism is necessary because -// the only reliable way to gauge whether or not a pledge(2) call has succeeded -// is that the program has been killed as a result of breaking its pledge. - -package unix_test - -import ( - "flag" - "fmt" - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "testing" - - "golang.org/x/sys/unix" -) - -type testProc struct { - fn func() // should always exit instead of returning - cleanup func() error // for instance, delete coredumps from testing pledge - success bool // whether zero-exit means success or failure -} - -var ( - testProcs = map[string]testProc{} - procName = "" -) - -const ( - optName = "sys-unix-internal-procname" -) - -func init() { - flag.StringVar(&procName, optName, "", "internal use only") -} - -// testCmd generates a proper command that, when executed, runs the test -// corresponding to the given key. -func testCmd(procName string) (*exec.Cmd, error) { - exe, err := filepath.Abs(os.Args[0]) - if err != nil { - return nil, err - } - cmd := exec.Command(exe, "-"+optName+"="+procName) - cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr - return cmd, nil -} - -// ExitsCorrectly is a comprehensive, one-line-of-use wrapper for testing -// a testProc with a key. -func ExitsCorrectly(procName string, t *testing.T) { - s := testProcs[procName] - c, err := testCmd(procName) - defer func() { - if s.cleanup() != nil { - t.Fatalf("Failed to run cleanup for %s", procName) - } - }() - if err != nil { - t.Fatalf("Failed to construct command for %s", procName) - } - if (c.Run() == nil) != s.success { - result := "succeed" - if !s.success { - result = "fail" - } - t.Fatalf("Process did not %s when it was supposed to", result) - } -} - -func TestMain(m *testing.M) { - flag.Parse() - if procName != "" { - testProcs[procName].fn() - } - os.Exit(m.Run()) -} - -// For example, add a test for pledge. -func init() { - testProcs["pledge"] = testProc{ - func() { - fmt.Println(unix.Pledge("", nil)) - os.Exit(0) - }, - func() error { - files, err := ioutil.ReadDir(".") - if err != nil { - return err - } - for _, file := range files { - if filepath.Ext(file.Name()) == ".core" { - if err := os.Remove(file.Name()); err != nil { - return err - } - } - } - return nil - }, - false, - } -} - -func TestPledge(t *testing.T) { - ExitsCorrectly("pledge", t) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd_test.go b/vendor/golang.org/x/sys/unix/syscall_bsd_test.go deleted file mode 100644 index d8085a0..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_bsd_test.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build darwin dragonfly freebsd openbsd - -package unix_test - -import ( - "os/exec" - "runtime" - "testing" - - "golang.org/x/sys/unix" -) - -const MNT_WAIT = 1 -const MNT_NOWAIT = 2 - -func TestGetfsstat(t *testing.T) { - const flags = MNT_NOWAIT // see golang.org/issue/16937 - n, err := unix.Getfsstat(nil, flags) - if err != nil { - t.Fatal(err) - } - - data := make([]unix.Statfs_t, n) - n2, err := unix.Getfsstat(data, flags) - if err != nil { - t.Fatal(err) - } - if n != n2 { - t.Errorf("Getfsstat(nil) = %d, but subsequent Getfsstat(slice) = %d", n, n2) - } - for i, stat := range data { - if stat == (unix.Statfs_t{}) { - t.Errorf("index %v is an empty Statfs_t struct", i) - } - } - if t.Failed() { - for i, stat := range data[:n2] { - t.Logf("data[%v] = %+v", i, stat) - } - mount, err := exec.Command("mount").CombinedOutput() - if err != nil { - t.Logf("mount: %v\n%s", err, mount) - } else { - t.Logf("mount: %s", mount) - } - } -} - -func TestSysctlRaw(t *testing.T) { - if runtime.GOOS == "openbsd" { - t.Skip("kern.proc.pid does not exist on OpenBSD") - } - - _, err := unix.SysctlRaw("kern.proc.pid", unix.Getpid()) - if err != nil { - t.Fatal(err) - } -} diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go deleted file mode 100644 index 3c3d825..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build freebsd - -package unix_test - -import ( - "testing" - - "golang.org/x/sys/unix" -) - -func TestSysctlUint64(t *testing.T) { - _, err := unix.SysctlUint64("security.mac.labeled") - if err != nil { - t.Fatal(err) - } -} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_test.go b/vendor/golang.org/x/sys/unix/syscall_linux_test.go deleted file mode 100644 index 91184ca..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_linux_test.go +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build linux - -package unix_test - -import ( - "io/ioutil" - "os" - "testing" - "time" - - "golang.org/x/sys/unix" -) - -func TestPoll(t *testing.T) { - f, cleanup := mktmpfifo(t) - defer cleanup() - - const timeout = 100 - - ok := make(chan bool, 1) - go func() { - select { - case <-time.After(10 * timeout * time.Millisecond): - t.Errorf("Poll: failed to timeout after %d milliseconds", 10*timeout) - case <-ok: - } - }() - - fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} - n, err := unix.Poll(fds, timeout) - ok <- true - if err != nil { - t.Errorf("Poll: unexpected error: %v", err) - return - } - if n != 0 { - t.Errorf("Poll: wrong number of events: got %v, expected %v", n, 0) - return - } -} - -func TestPpoll(t *testing.T) { - f, cleanup := mktmpfifo(t) - defer cleanup() - - const timeout = 100 * time.Millisecond - - ok := make(chan bool, 1) - go func() { - select { - case <-time.After(10 * timeout): - t.Errorf("Ppoll: failed to timeout after %d", 10*timeout) - case <-ok: - } - }() - - fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} - timeoutTs := unix.NsecToTimespec(int64(timeout)) - n, err := unix.Ppoll(fds, &timeoutTs, nil) - ok <- true - if err != nil { - t.Errorf("Ppoll: unexpected error: %v", err) - return - } - if n != 0 { - t.Errorf("Ppoll: wrong number of events: got %v, expected %v", n, 0) - return - } -} - -// mktmpfifo creates a temporary FIFO and provides a cleanup function. -func mktmpfifo(t *testing.T) (*os.File, func()) { - err := unix.Mkfifo("fifo", 0666) - if err != nil { - t.Fatalf("mktmpfifo: failed to create FIFO: %v", err) - } - - f, err := os.OpenFile("fifo", os.O_RDWR, 0666) - if err != nil { - os.Remove("fifo") - t.Fatalf("mktmpfifo: failed to open FIFO: %v", err) - } - - return f, func() { - f.Close() - os.Remove("fifo") - } -} - -func TestTime(t *testing.T) { - var ut unix.Time_t - ut2, err := unix.Time(&ut) - if err != nil { - t.Fatalf("Time: %v", err) - } - if ut != ut2 { - t.Errorf("Time: return value %v should be equal to argument %v", ut2, ut) - } - - var now time.Time - - for i := 0; i < 10; i++ { - ut, err = unix.Time(nil) - if err != nil { - t.Fatalf("Time: %v", err) - } - - now = time.Now() - - if int64(ut) == now.Unix() { - return - } - } - - t.Errorf("Time: return value %v should be nearly equal to time.Now().Unix() %v", ut, now.Unix()) -} - -func TestUtime(t *testing.T) { - defer chtmpdir(t)() - - touch(t, "file1") - - buf := &unix.Utimbuf{ - Modtime: 12345, - } - - err := unix.Utime("file1", buf) - if err != nil { - t.Fatalf("Utime: %v", err) - } - - fi, err := os.Stat("file1") - if err != nil { - t.Fatal(err) - } - - if fi.ModTime().Unix() != 12345 { - t.Errorf("Utime: failed to change modtime: expected %v, got %v", 12345, fi.ModTime().Unix()) - } -} - -func TestGetrlimit(t *testing.T) { - var rlim unix.Rlimit - err := unix.Getrlimit(unix.RLIMIT_AS, &rlim) - if err != nil { - t.Fatalf("Getrlimit: %v", err) - } -} - -// utilities taken from os/os_test.go - -func touch(t *testing.T, name string) { - f, err := os.Create(name) - if err != nil { - t.Fatal(err) - } - if err := f.Close(); err != nil { - t.Fatal(err) - } -} - -// chtmpdir changes the working directory to a new temporary directory and -// provides a cleanup function. Used when PWD is read-only. -func chtmpdir(t *testing.T) func() { - oldwd, err := os.Getwd() - if err != nil { - t.Fatalf("chtmpdir: %v", err) - } - d, err := ioutil.TempDir("", "test") - if err != nil { - t.Fatalf("chtmpdir: %v", err) - } - if err := os.Chdir(d); err != nil { - t.Fatalf("chtmpdir: %v", err) - } - return func() { - if err := os.Chdir(oldwd); err != nil { - t.Fatalf("chtmpdir: %v", err) - } - os.RemoveAll(d) - } -} diff --git a/vendor/golang.org/x/sys/unix/syscall_test.go b/vendor/golang.org/x/sys/unix/syscall_test.go deleted file mode 100644 index 95eac92..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_test.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build darwin dragonfly freebsd linux netbsd openbsd solaris - -package unix_test - -import ( - "fmt" - "testing" - - "golang.org/x/sys/unix" -) - -func testSetGetenv(t *testing.T, key, value string) { - err := unix.Setenv(key, value) - if err != nil { - t.Fatalf("Setenv failed to set %q: %v", value, err) - } - newvalue, found := unix.Getenv(key) - if !found { - t.Fatalf("Getenv failed to find %v variable (want value %q)", key, value) - } - if newvalue != value { - t.Fatalf("Getenv(%v) = %q; want %q", key, newvalue, value) - } -} - -func TestEnv(t *testing.T) { - testSetGetenv(t, "TESTENV", "AVALUE") - // make sure TESTENV gets set to "", not deleted - testSetGetenv(t, "TESTENV", "") -} - -func TestItoa(t *testing.T) { - // Make most negative integer: 0x8000... - i := 1 - for i<<1 != 0 { - i <<= 1 - } - if i >= 0 { - t.Fatal("bad math") - } - s := unix.Itoa(i) - f := fmt.Sprint(i) - if s != f { - t.Fatalf("itoa(%d) = %s, want %s", i, s, f) - } -} diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_test.go b/vendor/golang.org/x/sys/unix/syscall_unix_test.go deleted file mode 100644 index 49208a0..0000000 --- a/vendor/golang.org/x/sys/unix/syscall_unix_test.go +++ /dev/null @@ -1,353 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build darwin dragonfly freebsd linux netbsd openbsd solaris - -package unix_test - -import ( - "flag" - "fmt" - "io/ioutil" - "net" - "os" - "os/exec" - "path/filepath" - "runtime" - "testing" - "time" - - "golang.org/x/sys/unix" -) - -// Tests that below functions, structures and constants are consistent -// on all Unix-like systems. -func _() { - // program scheduling priority functions and constants - var ( - _ func(int, int, int) error = unix.Setpriority - _ func(int, int) (int, error) = unix.Getpriority - ) - const ( - _ int = unix.PRIO_USER - _ int = unix.PRIO_PROCESS - _ int = unix.PRIO_PGRP - ) - - // termios constants - const ( - _ int = unix.TCIFLUSH - _ int = unix.TCIOFLUSH - _ int = unix.TCOFLUSH - ) - - // fcntl file locking structure and constants - var ( - _ = unix.Flock_t{ - Type: int16(0), - Whence: int16(0), - Start: int64(0), - Len: int64(0), - Pid: int32(0), - } - ) - const ( - _ = unix.F_GETLK - _ = unix.F_SETLK - _ = unix.F_SETLKW - ) -} - -// TestFcntlFlock tests whether the file locking structure matches -// the calling convention of each kernel. -func TestFcntlFlock(t *testing.T) { - name := filepath.Join(os.TempDir(), "TestFcntlFlock") - fd, err := unix.Open(name, unix.O_CREAT|unix.O_RDWR|unix.O_CLOEXEC, 0) - if err != nil { - t.Fatalf("Open failed: %v", err) - } - defer unix.Unlink(name) - defer unix.Close(fd) - flock := unix.Flock_t{ - Type: unix.F_RDLCK, - Start: 0, Len: 0, Whence: 1, - } - if err := unix.FcntlFlock(uintptr(fd), unix.F_GETLK, &flock); err != nil { - t.Fatalf("FcntlFlock failed: %v", err) - } -} - -// TestPassFD tests passing a file descriptor over a Unix socket. -// -// This test involved both a parent and child process. The parent -// process is invoked as a normal test, with "go test", which then -// runs the child process by running the current test binary with args -// "-test.run=^TestPassFD$" and an environment variable used to signal -// that the test should become the child process instead. -func TestPassFD(t *testing.T) { - switch runtime.GOOS { - case "dragonfly": - // TODO(jsing): Figure out why sendmsg is returning EINVAL. - t.Skip("skipping test on dragonfly") - case "solaris": - // TODO(aram): Figure out why ReadMsgUnix is returning empty message. - t.Skip("skipping test on solaris, see issue 7402") - } - if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" { - passFDChild() - return - } - - tempDir, err := ioutil.TempDir("", "TestPassFD") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(tempDir) - - fds, err := unix.Socketpair(unix.AF_LOCAL, unix.SOCK_STREAM, 0) - if err != nil { - t.Fatalf("Socketpair: %v", err) - } - defer unix.Close(fds[0]) - defer unix.Close(fds[1]) - writeFile := os.NewFile(uintptr(fds[0]), "child-writes") - readFile := os.NewFile(uintptr(fds[1]), "parent-reads") - defer writeFile.Close() - defer readFile.Close() - - cmd := exec.Command(os.Args[0], "-test.run=^TestPassFD$", "--", tempDir) - cmd.Env = []string{"GO_WANT_HELPER_PROCESS=1"} - if lp := os.Getenv("LD_LIBRARY_PATH"); lp != "" { - cmd.Env = append(cmd.Env, "LD_LIBRARY_PATH="+lp) - } - cmd.ExtraFiles = []*os.File{writeFile} - - out, err := cmd.CombinedOutput() - if len(out) > 0 || err != nil { - t.Fatalf("child process: %q, %v", out, err) - } - - c, err := net.FileConn(readFile) - if err != nil { - t.Fatalf("FileConn: %v", err) - } - defer c.Close() - - uc, ok := c.(*net.UnixConn) - if !ok { - t.Fatalf("unexpected FileConn type; expected UnixConn, got %T", c) - } - - buf := make([]byte, 32) // expect 1 byte - oob := make([]byte, 32) // expect 24 bytes - closeUnix := time.AfterFunc(5*time.Second, func() { - t.Logf("timeout reading from unix socket") - uc.Close() - }) - _, oobn, _, _, err := uc.ReadMsgUnix(buf, oob) - closeUnix.Stop() - - scms, err := unix.ParseSocketControlMessage(oob[:oobn]) - if err != nil { - t.Fatalf("ParseSocketControlMessage: %v", err) - } - if len(scms) != 1 { - t.Fatalf("expected 1 SocketControlMessage; got scms = %#v", scms) - } - scm := scms[0] - gotFds, err := unix.ParseUnixRights(&scm) - if err != nil { - t.Fatalf("unix.ParseUnixRights: %v", err) - } - if len(gotFds) != 1 { - t.Fatalf("wanted 1 fd; got %#v", gotFds) - } - - f := os.NewFile(uintptr(gotFds[0]), "fd-from-child") - defer f.Close() - - got, err := ioutil.ReadAll(f) - want := "Hello from child process!\n" - if string(got) != want { - t.Errorf("child process ReadAll: %q, %v; want %q", got, err, want) - } -} - -// passFDChild is the child process used by TestPassFD. -func passFDChild() { - defer os.Exit(0) - - // Look for our fd. It should be fd 3, but we work around an fd leak - // bug here (http://golang.org/issue/2603) to let it be elsewhere. - var uc *net.UnixConn - for fd := uintptr(3); fd <= 10; fd++ { - f := os.NewFile(fd, "unix-conn") - var ok bool - netc, _ := net.FileConn(f) - uc, ok = netc.(*net.UnixConn) - if ok { - break - } - } - if uc == nil { - fmt.Println("failed to find unix fd") - return - } - - // Make a file f to send to our parent process on uc. - // We make it in tempDir, which our parent will clean up. - flag.Parse() - tempDir := flag.Arg(0) - f, err := ioutil.TempFile(tempDir, "") - if err != nil { - fmt.Printf("TempFile: %v", err) - return - } - - f.Write([]byte("Hello from child process!\n")) - f.Seek(0, 0) - - rights := unix.UnixRights(int(f.Fd())) - dummyByte := []byte("x") - n, oobn, err := uc.WriteMsgUnix(dummyByte, rights, nil) - if err != nil { - fmt.Printf("WriteMsgUnix: %v", err) - return - } - if n != 1 || oobn != len(rights) { - fmt.Printf("WriteMsgUnix = %d, %d; want 1, %d", n, oobn, len(rights)) - return - } -} - -// TestUnixRightsRoundtrip tests that UnixRights, ParseSocketControlMessage, -// and ParseUnixRights are able to successfully round-trip lists of file descriptors. -func TestUnixRightsRoundtrip(t *testing.T) { - testCases := [...][][]int{ - {{42}}, - {{1, 2}}, - {{3, 4, 5}}, - {{}}, - {{1, 2}, {3, 4, 5}, {}, {7}}, - } - for _, testCase := range testCases { - b := []byte{} - var n int - for _, fds := range testCase { - // Last assignment to n wins - n = len(b) + unix.CmsgLen(4*len(fds)) - b = append(b, unix.UnixRights(fds...)...) - } - // Truncate b - b = b[:n] - - scms, err := unix.ParseSocketControlMessage(b) - if err != nil { - t.Fatalf("ParseSocketControlMessage: %v", err) - } - if len(scms) != len(testCase) { - t.Fatalf("expected %v SocketControlMessage; got scms = %#v", len(testCase), scms) - } - for i, scm := range scms { - gotFds, err := unix.ParseUnixRights(&scm) - if err != nil { - t.Fatalf("ParseUnixRights: %v", err) - } - wantFds := testCase[i] - if len(gotFds) != len(wantFds) { - t.Fatalf("expected %v fds, got %#v", len(wantFds), gotFds) - } - for j, fd := range gotFds { - if fd != wantFds[j] { - t.Fatalf("expected fd %v, got %v", wantFds[j], fd) - } - } - } - } -} - -func TestRlimit(t *testing.T) { - var rlimit, zero unix.Rlimit - err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlimit) - if err != nil { - t.Fatalf("Getrlimit: save failed: %v", err) - } - if zero == rlimit { - t.Fatalf("Getrlimit: save failed: got zero value %#v", rlimit) - } - set := rlimit - set.Cur = set.Max - 1 - err = unix.Setrlimit(unix.RLIMIT_NOFILE, &set) - if err != nil { - t.Fatalf("Setrlimit: set failed: %#v %v", set, err) - } - var get unix.Rlimit - err = unix.Getrlimit(unix.RLIMIT_NOFILE, &get) - if err != nil { - t.Fatalf("Getrlimit: get failed: %v", err) - } - set = rlimit - set.Cur = set.Max - 1 - if set != get { - // Seems like Darwin requires some privilege to - // increase the soft limit of rlimit sandbox, though - // Setrlimit never reports an error. - switch runtime.GOOS { - case "darwin": - default: - t.Fatalf("Rlimit: change failed: wanted %#v got %#v", set, get) - } - } - err = unix.Setrlimit(unix.RLIMIT_NOFILE, &rlimit) - if err != nil { - t.Fatalf("Setrlimit: restore failed: %#v %v", rlimit, err) - } -} - -func TestSeekFailure(t *testing.T) { - _, err := unix.Seek(-1, 0, 0) - if err == nil { - t.Fatalf("Seek(-1, 0, 0) did not fail") - } - str := err.Error() // used to crash on Linux - t.Logf("Seek: %v", str) - if str == "" { - t.Fatalf("Seek(-1, 0, 0) return error with empty message") - } -} - -func TestDup(t *testing.T) { - file, err := ioutil.TempFile("", "TestDup") - if err != nil { - t.Fatalf("Tempfile failed: %v", err) - } - defer os.Remove(file.Name()) - defer file.Close() - f := int(file.Fd()) - - newFd, err := unix.Dup(f) - if err != nil { - t.Fatalf("Dup: %v", err) - } - - err = unix.Dup2(newFd, newFd+1) - if err != nil { - t.Fatalf("Dup2: %v", err) - } - - b1 := []byte("Test123") - b2 := make([]byte, 7) - _, err = unix.Write(newFd+1, b1) - if err != nil { - t.Fatalf("Write to dup2 fd failed: %v", err) - } - _, err = unix.Seek(f, 0, 0) - _, err = unix.Read(f, b2) - if err != nil { - t.Fatalf("Read back failed: %v", err) - } - if string(b1) != string(b2) { - t.Errorf("Dup: stdout write not in file, expected %v, got %v", string(b1), string(b2)) - } -} diff --git a/vendor/golang.org/x/sys/windows/asm_windows_386.s b/vendor/golang.org/x/sys/windows/asm_windows_386.s deleted file mode 100644 index 1c20dd2..0000000 --- a/vendor/golang.org/x/sys/windows/asm_windows_386.s +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// -// System calls for 386, Windows are implemented in runtime/syscall_windows.goc -// - -TEXT ·getprocaddress(SB), 7, $0-8 - JMP syscall·getprocaddress(SB) - -TEXT ·loadlibrary(SB), 7, $0-4 - JMP syscall·loadlibrary(SB) diff --git a/vendor/golang.org/x/sys/windows/asm_windows_amd64.s b/vendor/golang.org/x/sys/windows/asm_windows_amd64.s deleted file mode 100644 index 4d025ab..0000000 --- a/vendor/golang.org/x/sys/windows/asm_windows_amd64.s +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// -// System calls for amd64, Windows are implemented in runtime/syscall_windows.goc -// - -TEXT ·getprocaddress(SB), 7, $0-32 - JMP syscall·getprocaddress(SB) - -TEXT ·loadlibrary(SB), 7, $0-8 - JMP syscall·loadlibrary(SB) diff --git a/vendor/golang.org/x/sys/windows/dll_windows.go b/vendor/golang.org/x/sys/windows/dll_windows.go deleted file mode 100644 index 0f62046..0000000 --- a/vendor/golang.org/x/sys/windows/dll_windows.go +++ /dev/null @@ -1,378 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package windows - -import ( - "sync" - "sync/atomic" - "syscall" - "unsafe" -) - -// DLLError describes reasons for DLL load failures. -type DLLError struct { - Err error - ObjName string - Msg string -} - -func (e *DLLError) Error() string { return e.Msg } - -// Implemented in runtime/syscall_windows.goc; we provide jumps to them in our assembly file. -func loadlibrary(filename *uint16) (handle uintptr, err syscall.Errno) -func getprocaddress(handle uintptr, procname *uint8) (proc uintptr, err syscall.Errno) - -// A DLL implements access to a single DLL. -type DLL struct { - Name string - Handle Handle -} - -// LoadDLL loads DLL file into memory. -// -// Warning: using LoadDLL without an absolute path name is subject to -// DLL preloading attacks. To safely load a system DLL, use LazyDLL -// with System set to true, or use LoadLibraryEx directly. -func LoadDLL(name string) (dll *DLL, err error) { - namep, err := UTF16PtrFromString(name) - if err != nil { - return nil, err - } - h, e := loadlibrary(namep) - if e != 0 { - return nil, &DLLError{ - Err: e, - ObjName: name, - Msg: "Failed to load " + name + ": " + e.Error(), - } - } - d := &DLL{ - Name: name, - Handle: Handle(h), - } - return d, nil -} - -// MustLoadDLL is like LoadDLL but panics if load operation failes. -func MustLoadDLL(name string) *DLL { - d, e := LoadDLL(name) - if e != nil { - panic(e) - } - return d -} - -// FindProc searches DLL d for procedure named name and returns *Proc -// if found. It returns an error if search fails. -func (d *DLL) FindProc(name string) (proc *Proc, err error) { - namep, err := BytePtrFromString(name) - if err != nil { - return nil, err - } - a, e := getprocaddress(uintptr(d.Handle), namep) - if e != 0 { - return nil, &DLLError{ - Err: e, - ObjName: name, - Msg: "Failed to find " + name + " procedure in " + d.Name + ": " + e.Error(), - } - } - p := &Proc{ - Dll: d, - Name: name, - addr: a, - } - return p, nil -} - -// MustFindProc is like FindProc but panics if search fails. -func (d *DLL) MustFindProc(name string) *Proc { - p, e := d.FindProc(name) - if e != nil { - panic(e) - } - return p -} - -// Release unloads DLL d from memory. -func (d *DLL) Release() (err error) { - return FreeLibrary(d.Handle) -} - -// A Proc implements access to a procedure inside a DLL. -type Proc struct { - Dll *DLL - Name string - addr uintptr -} - -// Addr returns the address of the procedure represented by p. -// The return value can be passed to Syscall to run the procedure. -func (p *Proc) Addr() uintptr { - return p.addr -} - -//go:uintptrescapes - -// Call executes procedure p with arguments a. It will panic, if more then 15 arguments -// are supplied. -// -// The returned error is always non-nil, constructed from the result of GetLastError. -// Callers must inspect the primary return value to decide whether an error occurred -// (according to the semantics of the specific function being called) before consulting -// the error. The error will be guaranteed to contain windows.Errno. -func (p *Proc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) { - switch len(a) { - case 0: - return syscall.Syscall(p.Addr(), uintptr(len(a)), 0, 0, 0) - case 1: - return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], 0, 0) - case 2: - return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], 0) - case 3: - return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], a[2]) - case 4: - return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], 0, 0) - case 5: - return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], 0) - case 6: - return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5]) - case 7: - return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], 0, 0) - case 8: - return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 0) - case 9: - return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]) - case 10: - return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], 0, 0) - case 11: - return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], 0) - case 12: - return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11]) - case 13: - return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], 0, 0) - case 14: - return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], 0) - case 15: - return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14]) - default: - panic("Call " + p.Name + " with too many arguments " + itoa(len(a)) + ".") - } - return -} - -// A LazyDLL implements access to a single DLL. -// It will delay the load of the DLL until the first -// call to its Handle method or to one of its -// LazyProc's Addr method. -type LazyDLL struct { - Name string - - // System determines whether the DLL must be loaded from the - // Windows System directory, bypassing the normal DLL search - // path. - System bool - - mu sync.Mutex - dll *DLL // non nil once DLL is loaded -} - -// Load loads DLL file d.Name into memory. It returns an error if fails. -// Load will not try to load DLL, if it is already loaded into memory. -func (d *LazyDLL) Load() error { - // Non-racy version of: - // if d.dll != nil { - if atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&d.dll))) != nil { - return nil - } - d.mu.Lock() - defer d.mu.Unlock() - if d.dll != nil { - return nil - } - - // kernel32.dll is special, since it's where LoadLibraryEx comes from. - // The kernel already special-cases its name, so it's always - // loaded from system32. - var dll *DLL - var err error - if d.Name == "kernel32.dll" { - dll, err = LoadDLL(d.Name) - } else { - dll, err = loadLibraryEx(d.Name, d.System) - } - if err != nil { - return err - } - - // Non-racy version of: - // d.dll = dll - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&d.dll)), unsafe.Pointer(dll)) - return nil -} - -// mustLoad is like Load but panics if search fails. -func (d *LazyDLL) mustLoad() { - e := d.Load() - if e != nil { - panic(e) - } -} - -// Handle returns d's module handle. -func (d *LazyDLL) Handle() uintptr { - d.mustLoad() - return uintptr(d.dll.Handle) -} - -// NewProc returns a LazyProc for accessing the named procedure in the DLL d. -func (d *LazyDLL) NewProc(name string) *LazyProc { - return &LazyProc{l: d, Name: name} -} - -// NewLazyDLL creates new LazyDLL associated with DLL file. -func NewLazyDLL(name string) *LazyDLL { - return &LazyDLL{Name: name} -} - -// NewLazySystemDLL is like NewLazyDLL, but will only -// search Windows System directory for the DLL if name is -// a base name (like "advapi32.dll"). -func NewLazySystemDLL(name string) *LazyDLL { - return &LazyDLL{Name: name, System: true} -} - -// A LazyProc implements access to a procedure inside a LazyDLL. -// It delays the lookup until the Addr method is called. -type LazyProc struct { - Name string - - mu sync.Mutex - l *LazyDLL - proc *Proc -} - -// Find searches DLL for procedure named p.Name. It returns -// an error if search fails. Find will not search procedure, -// if it is already found and loaded into memory. -func (p *LazyProc) Find() error { - // Non-racy version of: - // if p.proc == nil { - if atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&p.proc))) == nil { - p.mu.Lock() - defer p.mu.Unlock() - if p.proc == nil { - e := p.l.Load() - if e != nil { - return e - } - proc, e := p.l.dll.FindProc(p.Name) - if e != nil { - return e - } - // Non-racy version of: - // p.proc = proc - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&p.proc)), unsafe.Pointer(proc)) - } - } - return nil -} - -// mustFind is like Find but panics if search fails. -func (p *LazyProc) mustFind() { - e := p.Find() - if e != nil { - panic(e) - } -} - -// Addr returns the address of the procedure represented by p. -// The return value can be passed to Syscall to run the procedure. -func (p *LazyProc) Addr() uintptr { - p.mustFind() - return p.proc.Addr() -} - -//go:uintptrescapes - -// Call executes procedure p with arguments a. It will panic, if more then 15 arguments -// are supplied. -// -// The returned error is always non-nil, constructed from the result of GetLastError. -// Callers must inspect the primary return value to decide whether an error occurred -// (according to the semantics of the specific function being called) before consulting -// the error. The error will be guaranteed to contain windows.Errno. -func (p *LazyProc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) { - p.mustFind() - return p.proc.Call(a...) -} - -var canDoSearchSystem32Once struct { - sync.Once - v bool -} - -func initCanDoSearchSystem32() { - // https://msdn.microsoft.com/en-us/library/ms684179(v=vs.85).aspx says: - // "Windows 7, Windows Server 2008 R2, Windows Vista, and Windows - // Server 2008: The LOAD_LIBRARY_SEARCH_* flags are available on - // systems that have KB2533623 installed. To determine whether the - // flags are available, use GetProcAddress to get the address of the - // AddDllDirectory, RemoveDllDirectory, or SetDefaultDllDirectories - // function. If GetProcAddress succeeds, the LOAD_LIBRARY_SEARCH_* - // flags can be used with LoadLibraryEx." - canDoSearchSystem32Once.v = (modkernel32.NewProc("AddDllDirectory").Find() == nil) -} - -func canDoSearchSystem32() bool { - canDoSearchSystem32Once.Do(initCanDoSearchSystem32) - return canDoSearchSystem32Once.v -} - -func isBaseName(name string) bool { - for _, c := range name { - if c == ':' || c == '/' || c == '\\' { - return false - } - } - return true -} - -// loadLibraryEx wraps the Windows LoadLibraryEx function. -// -// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms684179(v=vs.85).aspx -// -// If name is not an absolute path, LoadLibraryEx searches for the DLL -// in a variety of automatic locations unless constrained by flags. -// See: https://msdn.microsoft.com/en-us/library/ff919712%28VS.85%29.aspx -func loadLibraryEx(name string, system bool) (*DLL, error) { - loadDLL := name - var flags uintptr - if system { - if canDoSearchSystem32() { - const LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x00000800 - flags = LOAD_LIBRARY_SEARCH_SYSTEM32 - } else if isBaseName(name) { - // WindowsXP or unpatched Windows machine - // trying to load "foo.dll" out of the system - // folder, but LoadLibraryEx doesn't support - // that yet on their system, so emulate it. - windir, _ := Getenv("WINDIR") // old var; apparently works on XP - if windir == "" { - return nil, errString("%WINDIR% not defined") - } - loadDLL = windir + "\\System32\\" + name - } - } - h, err := LoadLibraryEx(loadDLL, 0, flags) - if err != nil { - return nil, err - } - return &DLL{Name: name, Handle: h}, nil -} - -type errString string - -func (s errString) Error() string { return string(s) } diff --git a/vendor/golang.org/x/sys/windows/env_unset.go b/vendor/golang.org/x/sys/windows/env_unset.go deleted file mode 100644 index 4ed03ae..0000000 --- a/vendor/golang.org/x/sys/windows/env_unset.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows -// +build go1.4 - -package windows - -import "syscall" - -func Unsetenv(key string) error { - // This was added in Go 1.4. - return syscall.Unsetenv(key) -} diff --git a/vendor/golang.org/x/sys/windows/env_windows.go b/vendor/golang.org/x/sys/windows/env_windows.go deleted file mode 100644 index a9d8ef4..0000000 --- a/vendor/golang.org/x/sys/windows/env_windows.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Windows environment variables. - -package windows - -import "syscall" - -func Getenv(key string) (value string, found bool) { - return syscall.Getenv(key) -} - -func Setenv(key, value string) error { - return syscall.Setenv(key, value) -} - -func Clearenv() { - syscall.Clearenv() -} - -func Environ() []string { - return syscall.Environ() -} diff --git a/vendor/golang.org/x/sys/windows/eventlog.go b/vendor/golang.org/x/sys/windows/eventlog.go deleted file mode 100644 index 40af946..0000000 --- a/vendor/golang.org/x/sys/windows/eventlog.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package windows - -const ( - EVENTLOG_SUCCESS = 0 - EVENTLOG_ERROR_TYPE = 1 - EVENTLOG_WARNING_TYPE = 2 - EVENTLOG_INFORMATION_TYPE = 4 - EVENTLOG_AUDIT_SUCCESS = 8 - EVENTLOG_AUDIT_FAILURE = 16 -) - -//sys RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) [failretval==0] = advapi32.RegisterEventSourceW -//sys DeregisterEventSource(handle Handle) (err error) = advapi32.DeregisterEventSource -//sys ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) = advapi32.ReportEventW diff --git a/vendor/golang.org/x/sys/windows/exec_windows.go b/vendor/golang.org/x/sys/windows/exec_windows.go deleted file mode 100644 index 3606c3a..0000000 --- a/vendor/golang.org/x/sys/windows/exec_windows.go +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Fork, exec, wait, etc. - -package windows - -// EscapeArg rewrites command line argument s as prescribed -// in http://msdn.microsoft.com/en-us/library/ms880421. -// This function returns "" (2 double quotes) if s is empty. -// Alternatively, these transformations are done: -// - every back slash (\) is doubled, but only if immediately -// followed by double quote ("); -// - every double quote (") is escaped by back slash (\); -// - finally, s is wrapped with double quotes (arg -> "arg"), -// but only if there is space or tab inside s. -func EscapeArg(s string) string { - if len(s) == 0 { - return "\"\"" - } - n := len(s) - hasSpace := false - for i := 0; i < len(s); i++ { - switch s[i] { - case '"', '\\': - n++ - case ' ', '\t': - hasSpace = true - } - } - if hasSpace { - n += 2 - } - if n == len(s) { - return s - } - - qs := make([]byte, n) - j := 0 - if hasSpace { - qs[j] = '"' - j++ - } - slashes := 0 - for i := 0; i < len(s); i++ { - switch s[i] { - default: - slashes = 0 - qs[j] = s[i] - case '\\': - slashes++ - qs[j] = s[i] - case '"': - for ; slashes > 0; slashes-- { - qs[j] = '\\' - j++ - } - qs[j] = '\\' - j++ - qs[j] = s[i] - } - j++ - } - if hasSpace { - for ; slashes > 0; slashes-- { - qs[j] = '\\' - j++ - } - qs[j] = '"' - j++ - } - return string(qs[:j]) -} - -func CloseOnExec(fd Handle) { - SetHandleInformation(Handle(fd), HANDLE_FLAG_INHERIT, 0) -} - -// FullPath retrieves the full path of the specified file. -func FullPath(name string) (path string, err error) { - p, err := UTF16PtrFromString(name) - if err != nil { - return "", err - } - n := uint32(100) - for { - buf := make([]uint16, n) - n, err = GetFullPathName(p, uint32(len(buf)), &buf[0], nil) - if err != nil { - return "", err - } - if n <= uint32(len(buf)) { - return UTF16ToString(buf[:n]), nil - } - } -} diff --git a/vendor/golang.org/x/sys/windows/mksyscall.go b/vendor/golang.org/x/sys/windows/mksyscall.go deleted file mode 100644 index e1c88c9..0000000 --- a/vendor/golang.org/x/sys/windows/mksyscall.go +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package windows - -//go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go eventlog.go service.go syscall_windows.go security_windows.go diff --git a/vendor/golang.org/x/sys/windows/race.go b/vendor/golang.org/x/sys/windows/race.go deleted file mode 100644 index 343e18a..0000000 --- a/vendor/golang.org/x/sys/windows/race.go +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows,race - -package windows - -import ( - "runtime" - "unsafe" -) - -const raceenabled = true - -func raceAcquire(addr unsafe.Pointer) { - runtime.RaceAcquire(addr) -} - -func raceReleaseMerge(addr unsafe.Pointer) { - runtime.RaceReleaseMerge(addr) -} - -func raceReadRange(addr unsafe.Pointer, len int) { - runtime.RaceReadRange(addr, len) -} - -func raceWriteRange(addr unsafe.Pointer, len int) { - runtime.RaceWriteRange(addr, len) -} diff --git a/vendor/golang.org/x/sys/windows/race0.go b/vendor/golang.org/x/sys/windows/race0.go deleted file mode 100644 index 17af843..0000000 --- a/vendor/golang.org/x/sys/windows/race0.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows,!race - -package windows - -import ( - "unsafe" -) - -const raceenabled = false - -func raceAcquire(addr unsafe.Pointer) { -} - -func raceReleaseMerge(addr unsafe.Pointer) { -} - -func raceReadRange(addr unsafe.Pointer, len int) { -} - -func raceWriteRange(addr unsafe.Pointer, len int) { -} diff --git a/vendor/golang.org/x/sys/windows/registry/export_test.go b/vendor/golang.org/x/sys/windows/registry/export_test.go deleted file mode 100644 index 8badf6f..0000000 --- a/vendor/golang.org/x/sys/windows/registry/export_test.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package registry - -func (k Key) SetValue(name string, valtype uint32, data []byte) error { - return k.setValue(name, valtype, data) -} diff --git a/vendor/golang.org/x/sys/windows/registry/key.go b/vendor/golang.org/x/sys/windows/registry/key.go deleted file mode 100644 index d0beb19..0000000 --- a/vendor/golang.org/x/sys/windows/registry/key.go +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -// Package registry provides access to the Windows registry. -// -// Here is a simple example, opening a registry key and reading a string value from it. -// -// k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE) -// if err != nil { -// log.Fatal(err) -// } -// defer k.Close() -// -// s, _, err := k.GetStringValue("SystemRoot") -// if err != nil { -// log.Fatal(err) -// } -// fmt.Printf("Windows system root is %q\n", s) -// -package registry - -import ( - "io" - "syscall" - "time" -) - -const ( - // Registry key security and access rights. - // See https://msdn.microsoft.com/en-us/library/windows/desktop/ms724878.aspx - // for details. - ALL_ACCESS = 0xf003f - CREATE_LINK = 0x00020 - CREATE_SUB_KEY = 0x00004 - ENUMERATE_SUB_KEYS = 0x00008 - EXECUTE = 0x20019 - NOTIFY = 0x00010 - QUERY_VALUE = 0x00001 - READ = 0x20019 - SET_VALUE = 0x00002 - WOW64_32KEY = 0x00200 - WOW64_64KEY = 0x00100 - WRITE = 0x20006 -) - -// Key is a handle to an open Windows registry key. -// Keys can be obtained by calling OpenKey; there are -// also some predefined root keys such as CURRENT_USER. -// Keys can be used directly in the Windows API. -type Key syscall.Handle - -const ( - // Windows defines some predefined root keys that are always open. - // An application can use these keys as entry points to the registry. - // Normally these keys are used in OpenKey to open new keys, - // but they can also be used anywhere a Key is required. - CLASSES_ROOT = Key(syscall.HKEY_CLASSES_ROOT) - CURRENT_USER = Key(syscall.HKEY_CURRENT_USER) - LOCAL_MACHINE = Key(syscall.HKEY_LOCAL_MACHINE) - USERS = Key(syscall.HKEY_USERS) - CURRENT_CONFIG = Key(syscall.HKEY_CURRENT_CONFIG) - PERFORMANCE_DATA = Key(syscall.HKEY_PERFORMANCE_DATA) -) - -// Close closes open key k. -func (k Key) Close() error { - return syscall.RegCloseKey(syscall.Handle(k)) -} - -// OpenKey opens a new key with path name relative to key k. -// It accepts any open key, including CURRENT_USER and others, -// and returns the new key and an error. -// The access parameter specifies desired access rights to the -// key to be opened. -func OpenKey(k Key, path string, access uint32) (Key, error) { - p, err := syscall.UTF16PtrFromString(path) - if err != nil { - return 0, err - } - var subkey syscall.Handle - err = syscall.RegOpenKeyEx(syscall.Handle(k), p, 0, access, &subkey) - if err != nil { - return 0, err - } - return Key(subkey), nil -} - -// OpenRemoteKey opens a predefined registry key on another -// computer pcname. The key to be opened is specified by k, but -// can only be one of LOCAL_MACHINE, PERFORMANCE_DATA or USERS. -// If pcname is "", OpenRemoteKey returns local computer key. -func OpenRemoteKey(pcname string, k Key) (Key, error) { - var err error - var p *uint16 - if pcname != "" { - p, err = syscall.UTF16PtrFromString(`\\` + pcname) - if err != nil { - return 0, err - } - } - var remoteKey syscall.Handle - err = regConnectRegistry(p, syscall.Handle(k), &remoteKey) - if err != nil { - return 0, err - } - return Key(remoteKey), nil -} - -// ReadSubKeyNames returns the names of subkeys of key k. -// The parameter n controls the number of returned names, -// analogous to the way os.File.Readdirnames works. -func (k Key) ReadSubKeyNames(n int) ([]string, error) { - ki, err := k.Stat() - if err != nil { - return nil, err - } - names := make([]string, 0, ki.SubKeyCount) - buf := make([]uint16, ki.MaxSubKeyLen+1) // extra room for terminating zero byte -loopItems: - for i := uint32(0); ; i++ { - if n > 0 { - if len(names) == n { - return names, nil - } - } - l := uint32(len(buf)) - for { - err := syscall.RegEnumKeyEx(syscall.Handle(k), i, &buf[0], &l, nil, nil, nil, nil) - if err == nil { - break - } - if err == syscall.ERROR_MORE_DATA { - // Double buffer size and try again. - l = uint32(2 * len(buf)) - buf = make([]uint16, l) - continue - } - if err == _ERROR_NO_MORE_ITEMS { - break loopItems - } - return names, err - } - names = append(names, syscall.UTF16ToString(buf[:l])) - } - if n > len(names) { - return names, io.EOF - } - return names, nil -} - -// CreateKey creates a key named path under open key k. -// CreateKey returns the new key and a boolean flag that reports -// whether the key already existed. -// The access parameter specifies the access rights for the key -// to be created. -func CreateKey(k Key, path string, access uint32) (newk Key, openedExisting bool, err error) { - var h syscall.Handle - var d uint32 - err = regCreateKeyEx(syscall.Handle(k), syscall.StringToUTF16Ptr(path), - 0, nil, _REG_OPTION_NON_VOLATILE, access, nil, &h, &d) - if err != nil { - return 0, false, err - } - return Key(h), d == _REG_OPENED_EXISTING_KEY, nil -} - -// DeleteKey deletes the subkey path of key k and its values. -func DeleteKey(k Key, path string) error { - return regDeleteKey(syscall.Handle(k), syscall.StringToUTF16Ptr(path)) -} - -// A KeyInfo describes the statistics of a key. It is returned by Stat. -type KeyInfo struct { - SubKeyCount uint32 - MaxSubKeyLen uint32 // size of the key's subkey with the longest name, in Unicode characters, not including the terminating zero byte - ValueCount uint32 - MaxValueNameLen uint32 // size of the key's longest value name, in Unicode characters, not including the terminating zero byte - MaxValueLen uint32 // longest data component among the key's values, in bytes - lastWriteTime syscall.Filetime -} - -// ModTime returns the key's last write time. -func (ki *KeyInfo) ModTime() time.Time { - return time.Unix(0, ki.lastWriteTime.Nanoseconds()) -} - -// Stat retrieves information about the open key k. -func (k Key) Stat() (*KeyInfo, error) { - var ki KeyInfo - err := syscall.RegQueryInfoKey(syscall.Handle(k), nil, nil, nil, - &ki.SubKeyCount, &ki.MaxSubKeyLen, nil, &ki.ValueCount, - &ki.MaxValueNameLen, &ki.MaxValueLen, nil, &ki.lastWriteTime) - if err != nil { - return nil, err - } - return &ki, nil -} diff --git a/vendor/golang.org/x/sys/windows/registry/mksyscall.go b/vendor/golang.org/x/sys/windows/registry/mksyscall.go deleted file mode 100644 index 0ac95ff..0000000 --- a/vendor/golang.org/x/sys/windows/registry/mksyscall.go +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package registry - -//go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go syscall.go diff --git a/vendor/golang.org/x/sys/windows/registry/registry_test.go b/vendor/golang.org/x/sys/windows/registry/registry_test.go deleted file mode 100644 index 9c1b782..0000000 --- a/vendor/golang.org/x/sys/windows/registry/registry_test.go +++ /dev/null @@ -1,756 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package registry_test - -import ( - "bytes" - "crypto/rand" - "os" - "syscall" - "testing" - "time" - "unsafe" - - "golang.org/x/sys/windows/registry" -) - -func randKeyName(prefix string) string { - const numbers = "0123456789" - buf := make([]byte, 10) - rand.Read(buf) - for i, b := range buf { - buf[i] = numbers[b%byte(len(numbers))] - } - return prefix + string(buf) -} - -func TestReadSubKeyNames(t *testing.T) { - k, err := registry.OpenKey(registry.CLASSES_ROOT, "TypeLib", registry.ENUMERATE_SUB_KEYS|registry.QUERY_VALUE) - if err != nil { - t.Fatal(err) - } - defer k.Close() - - names, err := k.ReadSubKeyNames(-1) - if err != nil { - t.Fatal(err) - } - var foundStdOle bool - for _, name := range names { - // Every PC has "stdole 2.0 OLE Automation" library installed. - if name == "{00020430-0000-0000-C000-000000000046}" { - foundStdOle = true - } - } - if !foundStdOle { - t.Fatal("could not find stdole 2.0 OLE Automation") - } -} - -func TestCreateOpenDeleteKey(t *testing.T) { - k, err := registry.OpenKey(registry.CURRENT_USER, "Software", registry.QUERY_VALUE) - if err != nil { - t.Fatal(err) - } - defer k.Close() - - testKName := randKeyName("TestCreateOpenDeleteKey_") - - testK, exist, err := registry.CreateKey(k, testKName, registry.CREATE_SUB_KEY) - if err != nil { - t.Fatal(err) - } - defer testK.Close() - - if exist { - t.Fatalf("key %q already exists", testKName) - } - - testKAgain, exist, err := registry.CreateKey(k, testKName, registry.CREATE_SUB_KEY) - if err != nil { - t.Fatal(err) - } - defer testKAgain.Close() - - if !exist { - t.Fatalf("key %q should already exist", testKName) - } - - testKOpened, err := registry.OpenKey(k, testKName, registry.ENUMERATE_SUB_KEYS) - if err != nil { - t.Fatal(err) - } - defer testKOpened.Close() - - err = registry.DeleteKey(k, testKName) - if err != nil { - t.Fatal(err) - } - - testKOpenedAgain, err := registry.OpenKey(k, testKName, registry.ENUMERATE_SUB_KEYS) - if err == nil { - defer testKOpenedAgain.Close() - t.Fatalf("key %q should already been deleted", testKName) - } - if err != registry.ErrNotExist { - t.Fatalf(`unexpected error ("not exist" expected): %v`, err) - } -} - -func equalStringSlice(a, b []string) bool { - if len(a) != len(b) { - return false - } - if a == nil { - return true - } - for i := range a { - if a[i] != b[i] { - return false - } - } - return true -} - -type ValueTest struct { - Type uint32 - Name string - Value interface{} - WillFail bool -} - -var ValueTests = []ValueTest{ - {Type: registry.SZ, Name: "String1", Value: ""}, - {Type: registry.SZ, Name: "String2", Value: "\000", WillFail: true}, - {Type: registry.SZ, Name: "String3", Value: "Hello World"}, - {Type: registry.SZ, Name: "String4", Value: "Hello World\000", WillFail: true}, - {Type: registry.EXPAND_SZ, Name: "ExpString1", Value: ""}, - {Type: registry.EXPAND_SZ, Name: "ExpString2", Value: "\000", WillFail: true}, - {Type: registry.EXPAND_SZ, Name: "ExpString3", Value: "Hello World"}, - {Type: registry.EXPAND_SZ, Name: "ExpString4", Value: "Hello\000World", WillFail: true}, - {Type: registry.EXPAND_SZ, Name: "ExpString5", Value: "%PATH%"}, - {Type: registry.EXPAND_SZ, Name: "ExpString6", Value: "%NO_SUCH_VARIABLE%"}, - {Type: registry.EXPAND_SZ, Name: "ExpString7", Value: "%PATH%;."}, - {Type: registry.BINARY, Name: "Binary1", Value: []byte{}}, - {Type: registry.BINARY, Name: "Binary2", Value: []byte{1, 2, 3}}, - {Type: registry.BINARY, Name: "Binary3", Value: []byte{3, 2, 1, 0, 1, 2, 3}}, - {Type: registry.DWORD, Name: "Dword1", Value: uint64(0)}, - {Type: registry.DWORD, Name: "Dword2", Value: uint64(1)}, - {Type: registry.DWORD, Name: "Dword3", Value: uint64(0xff)}, - {Type: registry.DWORD, Name: "Dword4", Value: uint64(0xffff)}, - {Type: registry.QWORD, Name: "Qword1", Value: uint64(0)}, - {Type: registry.QWORD, Name: "Qword2", Value: uint64(1)}, - {Type: registry.QWORD, Name: "Qword3", Value: uint64(0xff)}, - {Type: registry.QWORD, Name: "Qword4", Value: uint64(0xffff)}, - {Type: registry.QWORD, Name: "Qword5", Value: uint64(0xffffff)}, - {Type: registry.QWORD, Name: "Qword6", Value: uint64(0xffffffff)}, - {Type: registry.MULTI_SZ, Name: "MultiString1", Value: []string{"a", "b", "c"}}, - {Type: registry.MULTI_SZ, Name: "MultiString2", Value: []string{"abc", "", "cba"}}, - {Type: registry.MULTI_SZ, Name: "MultiString3", Value: []string{""}}, - {Type: registry.MULTI_SZ, Name: "MultiString4", Value: []string{"abcdef"}}, - {Type: registry.MULTI_SZ, Name: "MultiString5", Value: []string{"\000"}, WillFail: true}, - {Type: registry.MULTI_SZ, Name: "MultiString6", Value: []string{"a\000b"}, WillFail: true}, - {Type: registry.MULTI_SZ, Name: "MultiString7", Value: []string{"ab", "\000", "cd"}, WillFail: true}, - {Type: registry.MULTI_SZ, Name: "MultiString8", Value: []string{"\000", "cd"}, WillFail: true}, - {Type: registry.MULTI_SZ, Name: "MultiString9", Value: []string{"ab", "\000"}, WillFail: true}, -} - -func setValues(t *testing.T, k registry.Key) { - for _, test := range ValueTests { - var err error - switch test.Type { - case registry.SZ: - err = k.SetStringValue(test.Name, test.Value.(string)) - case registry.EXPAND_SZ: - err = k.SetExpandStringValue(test.Name, test.Value.(string)) - case registry.MULTI_SZ: - err = k.SetStringsValue(test.Name, test.Value.([]string)) - case registry.BINARY: - err = k.SetBinaryValue(test.Name, test.Value.([]byte)) - case registry.DWORD: - err = k.SetDWordValue(test.Name, uint32(test.Value.(uint64))) - case registry.QWORD: - err = k.SetQWordValue(test.Name, test.Value.(uint64)) - default: - t.Fatalf("unsupported type %d for %s value", test.Type, test.Name) - } - if test.WillFail { - if err == nil { - t.Fatalf("setting %s value %q should fail, but succeeded", test.Name, test.Value) - } - } else { - if err != nil { - t.Fatal(err) - } - } - } -} - -func enumerateValues(t *testing.T, k registry.Key) { - names, err := k.ReadValueNames(-1) - if err != nil { - t.Error(err) - return - } - haveNames := make(map[string]bool) - for _, n := range names { - haveNames[n] = false - } - for _, test := range ValueTests { - wantFound := !test.WillFail - _, haveFound := haveNames[test.Name] - if wantFound && !haveFound { - t.Errorf("value %s is not found while enumerating", test.Name) - } - if haveFound && !wantFound { - t.Errorf("value %s is found while enumerating, but expected to fail", test.Name) - } - if haveFound { - delete(haveNames, test.Name) - } - } - for n, v := range haveNames { - t.Errorf("value %s (%v) is found while enumerating, but has not been cretaed", n, v) - } -} - -func testErrNotExist(t *testing.T, name string, err error) { - if err == nil { - t.Errorf("%s value should not exist", name) - return - } - if err != registry.ErrNotExist { - t.Errorf("reading %s value should return 'not exist' error, but got: %s", name, err) - return - } -} - -func testErrUnexpectedType(t *testing.T, test ValueTest, gottype uint32, err error) { - if err == nil { - t.Errorf("GetXValue(%q) should not succeed", test.Name) - return - } - if err != registry.ErrUnexpectedType { - t.Errorf("reading %s value should return 'unexpected key value type' error, but got: %s", test.Name, err) - return - } - if gottype != test.Type { - t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) - return - } -} - -func testGetStringValue(t *testing.T, k registry.Key, test ValueTest) { - got, gottype, err := k.GetStringValue(test.Name) - if err != nil { - t.Errorf("GetStringValue(%s) failed: %v", test.Name, err) - return - } - if got != test.Value { - t.Errorf("want %s value %q, got %q", test.Name, test.Value, got) - return - } - if gottype != test.Type { - t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) - return - } - if gottype == registry.EXPAND_SZ { - _, err = registry.ExpandString(got) - if err != nil { - t.Errorf("ExpandString(%s) failed: %v", got, err) - return - } - } -} - -func testGetIntegerValue(t *testing.T, k registry.Key, test ValueTest) { - got, gottype, err := k.GetIntegerValue(test.Name) - if err != nil { - t.Errorf("GetIntegerValue(%s) failed: %v", test.Name, err) - return - } - if got != test.Value.(uint64) { - t.Errorf("want %s value %v, got %v", test.Name, test.Value, got) - return - } - if gottype != test.Type { - t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) - return - } -} - -func testGetBinaryValue(t *testing.T, k registry.Key, test ValueTest) { - got, gottype, err := k.GetBinaryValue(test.Name) - if err != nil { - t.Errorf("GetBinaryValue(%s) failed: %v", test.Name, err) - return - } - if !bytes.Equal(got, test.Value.([]byte)) { - t.Errorf("want %s value %v, got %v", test.Name, test.Value, got) - return - } - if gottype != test.Type { - t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) - return - } -} - -func testGetStringsValue(t *testing.T, k registry.Key, test ValueTest) { - got, gottype, err := k.GetStringsValue(test.Name) - if err != nil { - t.Errorf("GetStringsValue(%s) failed: %v", test.Name, err) - return - } - if !equalStringSlice(got, test.Value.([]string)) { - t.Errorf("want %s value %#v, got %#v", test.Name, test.Value, got) - return - } - if gottype != test.Type { - t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) - return - } -} - -func testGetValue(t *testing.T, k registry.Key, test ValueTest, size int) { - if size <= 0 { - return - } - // read data with no buffer - gotsize, gottype, err := k.GetValue(test.Name, nil) - if err != nil { - t.Errorf("GetValue(%s, [%d]byte) failed: %v", test.Name, size, err) - return - } - if gotsize != size { - t.Errorf("want %s value size of %d, got %v", test.Name, size, gotsize) - return - } - if gottype != test.Type { - t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) - return - } - // read data with short buffer - gotsize, gottype, err = k.GetValue(test.Name, make([]byte, size-1)) - if err == nil { - t.Errorf("GetValue(%s, [%d]byte) should fail, but suceeded", test.Name, size-1) - return - } - if err != registry.ErrShortBuffer { - t.Errorf("reading %s value should return 'short buffer' error, but got: %s", test.Name, err) - return - } - if gotsize != size { - t.Errorf("want %s value size of %d, got %v", test.Name, size, gotsize) - return - } - if gottype != test.Type { - t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) - return - } - // read full data - gotsize, gottype, err = k.GetValue(test.Name, make([]byte, size)) - if err != nil { - t.Errorf("GetValue(%s, [%d]byte) failed: %v", test.Name, size, err) - return - } - if gotsize != size { - t.Errorf("want %s value size of %d, got %v", test.Name, size, gotsize) - return - } - if gottype != test.Type { - t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) - return - } - // check GetValue returns ErrNotExist as required - _, _, err = k.GetValue(test.Name+"_not_there", make([]byte, size)) - if err == nil { - t.Errorf("GetValue(%q) should not succeed", test.Name) - return - } - if err != registry.ErrNotExist { - t.Errorf("GetValue(%q) should return 'not exist' error, but got: %s", test.Name, err) - return - } -} - -func testValues(t *testing.T, k registry.Key) { - for _, test := range ValueTests { - switch test.Type { - case registry.SZ, registry.EXPAND_SZ: - if test.WillFail { - _, _, err := k.GetStringValue(test.Name) - testErrNotExist(t, test.Name, err) - } else { - testGetStringValue(t, k, test) - _, gottype, err := k.GetIntegerValue(test.Name) - testErrUnexpectedType(t, test, gottype, err) - // Size of utf16 string in bytes is not perfect, - // but correct for current test values. - // Size also includes terminating 0. - testGetValue(t, k, test, (len(test.Value.(string))+1)*2) - } - _, _, err := k.GetStringValue(test.Name + "_string_not_created") - testErrNotExist(t, test.Name+"_string_not_created", err) - case registry.DWORD, registry.QWORD: - testGetIntegerValue(t, k, test) - _, gottype, err := k.GetBinaryValue(test.Name) - testErrUnexpectedType(t, test, gottype, err) - _, _, err = k.GetIntegerValue(test.Name + "_int_not_created") - testErrNotExist(t, test.Name+"_int_not_created", err) - size := 8 - if test.Type == registry.DWORD { - size = 4 - } - testGetValue(t, k, test, size) - case registry.BINARY: - testGetBinaryValue(t, k, test) - _, gottype, err := k.GetStringsValue(test.Name) - testErrUnexpectedType(t, test, gottype, err) - _, _, err = k.GetBinaryValue(test.Name + "_byte_not_created") - testErrNotExist(t, test.Name+"_byte_not_created", err) - testGetValue(t, k, test, len(test.Value.([]byte))) - case registry.MULTI_SZ: - if test.WillFail { - _, _, err := k.GetStringsValue(test.Name) - testErrNotExist(t, test.Name, err) - } else { - testGetStringsValue(t, k, test) - _, gottype, err := k.GetStringValue(test.Name) - testErrUnexpectedType(t, test, gottype, err) - size := 0 - for _, s := range test.Value.([]string) { - size += len(s) + 1 // nil terminated - } - size += 1 // extra nil at the end - size *= 2 // count bytes, not uint16 - testGetValue(t, k, test, size) - } - _, _, err := k.GetStringsValue(test.Name + "_strings_not_created") - testErrNotExist(t, test.Name+"_strings_not_created", err) - default: - t.Errorf("unsupported type %d for %s value", test.Type, test.Name) - continue - } - } -} - -func testStat(t *testing.T, k registry.Key) { - subk, _, err := registry.CreateKey(k, "subkey", registry.CREATE_SUB_KEY) - if err != nil { - t.Error(err) - return - } - defer subk.Close() - - defer registry.DeleteKey(k, "subkey") - - ki, err := k.Stat() - if err != nil { - t.Error(err) - return - } - if ki.SubKeyCount != 1 { - t.Error("key must have 1 subkey") - } - if ki.MaxSubKeyLen != 6 { - t.Error("key max subkey name length must be 6") - } - if ki.ValueCount != 24 { - t.Errorf("key must have 24 values, but is %d", ki.ValueCount) - } - if ki.MaxValueNameLen != 12 { - t.Errorf("key max value name length must be 10, but is %d", ki.MaxValueNameLen) - } - if ki.MaxValueLen != 38 { - t.Errorf("key max value length must be 38, but is %d", ki.MaxValueLen) - } - if mt, ct := ki.ModTime(), time.Now(); ct.Sub(mt) > 100*time.Millisecond { - t.Errorf("key mod time is not close to current time: mtime=%v current=%v delta=%v", mt, ct, ct.Sub(mt)) - } -} - -func deleteValues(t *testing.T, k registry.Key) { - for _, test := range ValueTests { - if test.WillFail { - continue - } - err := k.DeleteValue(test.Name) - if err != nil { - t.Error(err) - continue - } - } - names, err := k.ReadValueNames(-1) - if err != nil { - t.Error(err) - return - } - if len(names) != 0 { - t.Errorf("some values remain after deletion: %v", names) - } -} - -func TestValues(t *testing.T) { - softwareK, err := registry.OpenKey(registry.CURRENT_USER, "Software", registry.QUERY_VALUE) - if err != nil { - t.Fatal(err) - } - defer softwareK.Close() - - testKName := randKeyName("TestValues_") - - k, exist, err := registry.CreateKey(softwareK, testKName, registry.CREATE_SUB_KEY|registry.QUERY_VALUE|registry.SET_VALUE) - if err != nil { - t.Fatal(err) - } - defer k.Close() - - if exist { - t.Fatalf("key %q already exists", testKName) - } - - defer registry.DeleteKey(softwareK, testKName) - - setValues(t, k) - - enumerateValues(t, k) - - testValues(t, k) - - testStat(t, k) - - deleteValues(t, k) -} - -func walkKey(t *testing.T, k registry.Key, kname string) { - names, err := k.ReadValueNames(-1) - if err != nil { - t.Fatalf("reading value names of %s failed: %v", kname, err) - } - for _, name := range names { - _, valtype, err := k.GetValue(name, nil) - if err != nil { - t.Fatalf("reading value type of %s of %s failed: %v", name, kname, err) - } - switch valtype { - case registry.NONE: - case registry.SZ: - _, _, err := k.GetStringValue(name) - if err != nil { - t.Error(err) - } - case registry.EXPAND_SZ: - s, _, err := k.GetStringValue(name) - if err != nil { - t.Error(err) - } - _, err = registry.ExpandString(s) - if err != nil { - t.Error(err) - } - case registry.DWORD, registry.QWORD: - _, _, err := k.GetIntegerValue(name) - if err != nil { - t.Error(err) - } - case registry.BINARY: - _, _, err := k.GetBinaryValue(name) - if err != nil { - t.Error(err) - } - case registry.MULTI_SZ: - _, _, err := k.GetStringsValue(name) - if err != nil { - t.Error(err) - } - case registry.FULL_RESOURCE_DESCRIPTOR, registry.RESOURCE_LIST, registry.RESOURCE_REQUIREMENTS_LIST: - // TODO: not implemented - default: - t.Fatalf("value type %d of %s of %s failed: %v", valtype, name, kname, err) - } - } - - names, err = k.ReadSubKeyNames(-1) - if err != nil { - t.Fatalf("reading sub-keys of %s failed: %v", kname, err) - } - for _, name := range names { - func() { - subk, err := registry.OpenKey(k, name, registry.ENUMERATE_SUB_KEYS|registry.QUERY_VALUE) - if err != nil { - if err == syscall.ERROR_ACCESS_DENIED { - // ignore error, if we are not allowed to access this key - return - } - t.Fatalf("opening sub-keys %s of %s failed: %v", name, kname, err) - } - defer subk.Close() - - walkKey(t, subk, kname+`\`+name) - }() - } -} - -func TestWalkFullRegistry(t *testing.T) { - if testing.Short() { - t.Skip("skipping long running test in short mode") - } - walkKey(t, registry.CLASSES_ROOT, "CLASSES_ROOT") - walkKey(t, registry.CURRENT_USER, "CURRENT_USER") - walkKey(t, registry.LOCAL_MACHINE, "LOCAL_MACHINE") - walkKey(t, registry.USERS, "USERS") - walkKey(t, registry.CURRENT_CONFIG, "CURRENT_CONFIG") -} - -func TestExpandString(t *testing.T) { - got, err := registry.ExpandString("%PATH%") - if err != nil { - t.Fatal(err) - } - want := os.Getenv("PATH") - if got != want { - t.Errorf("want %q string expanded, got %q", want, got) - } -} - -func TestInvalidValues(t *testing.T) { - softwareK, err := registry.OpenKey(registry.CURRENT_USER, "Software", registry.QUERY_VALUE) - if err != nil { - t.Fatal(err) - } - defer softwareK.Close() - - testKName := randKeyName("TestInvalidValues_") - - k, exist, err := registry.CreateKey(softwareK, testKName, registry.CREATE_SUB_KEY|registry.QUERY_VALUE|registry.SET_VALUE) - if err != nil { - t.Fatal(err) - } - defer k.Close() - - if exist { - t.Fatalf("key %q already exists", testKName) - } - - defer registry.DeleteKey(softwareK, testKName) - - var tests = []struct { - Type uint32 - Name string - Data []byte - }{ - {registry.DWORD, "Dword1", nil}, - {registry.DWORD, "Dword2", []byte{1, 2, 3}}, - {registry.QWORD, "Qword1", nil}, - {registry.QWORD, "Qword2", []byte{1, 2, 3}}, - {registry.QWORD, "Qword3", []byte{1, 2, 3, 4, 5, 6, 7}}, - {registry.MULTI_SZ, "MultiString1", nil}, - {registry.MULTI_SZ, "MultiString2", []byte{0}}, - {registry.MULTI_SZ, "MultiString3", []byte{'a', 'b', 0}}, - {registry.MULTI_SZ, "MultiString4", []byte{'a', 0, 0, 'b', 0}}, - {registry.MULTI_SZ, "MultiString5", []byte{'a', 0, 0}}, - } - - for _, test := range tests { - err := k.SetValue(test.Name, test.Type, test.Data) - if err != nil { - t.Fatalf("SetValue for %q failed: %v", test.Name, err) - } - } - - for _, test := range tests { - switch test.Type { - case registry.DWORD, registry.QWORD: - value, valType, err := k.GetIntegerValue(test.Name) - if err == nil { - t.Errorf("GetIntegerValue(%q) succeeded. Returns type=%d value=%v", test.Name, valType, value) - } - case registry.MULTI_SZ: - value, valType, err := k.GetStringsValue(test.Name) - if err == nil { - if len(value) != 0 { - t.Errorf("GetStringsValue(%q) succeeded. Returns type=%d value=%v", test.Name, valType, value) - } - } - default: - t.Errorf("unsupported type %d for %s value", test.Type, test.Name) - } - } -} - -func TestGetMUIStringValue(t *testing.T) { - if err := registry.LoadRegLoadMUIString(); err != nil { - t.Skip("regLoadMUIString not supported; skipping") - } - if err := procGetDynamicTimeZoneInformation.Find(); err != nil { - t.Skipf("%s not supported; skipping", procGetDynamicTimeZoneInformation.Name) - } - var dtzi DynamicTimezoneinformation - if _, err := GetDynamicTimeZoneInformation(&dtzi); err != nil { - t.Fatal(err) - } - tzKeyName := syscall.UTF16ToString(dtzi.TimeZoneKeyName[:]) - timezoneK, err := registry.OpenKey(registry.LOCAL_MACHINE, - `SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\`+tzKeyName, registry.READ) - if err != nil { - t.Fatal(err) - } - defer timezoneK.Close() - - type testType struct { - name string - want string - } - var tests = []testType{ - {"MUI_Std", syscall.UTF16ToString(dtzi.StandardName[:])}, - } - if dtzi.DynamicDaylightTimeDisabled == 0 { - tests = append(tests, testType{"MUI_Dlt", syscall.UTF16ToString(dtzi.DaylightName[:])}) - } - - for _, test := range tests { - got, err := timezoneK.GetMUIStringValue(test.name) - if err != nil { - t.Error("GetMUIStringValue:", err) - } - - if got != test.want { - t.Errorf("GetMUIStringValue: %s: Got %q, want %q", test.name, got, test.want) - } - } -} - -type DynamicTimezoneinformation struct { - Bias int32 - StandardName [32]uint16 - StandardDate syscall.Systemtime - StandardBias int32 - DaylightName [32]uint16 - DaylightDate syscall.Systemtime - DaylightBias int32 - TimeZoneKeyName [128]uint16 - DynamicDaylightTimeDisabled uint8 -} - -var ( - kernel32DLL = syscall.NewLazyDLL("kernel32") - - procGetDynamicTimeZoneInformation = kernel32DLL.NewProc("GetDynamicTimeZoneInformation") -) - -func GetDynamicTimeZoneInformation(dtzi *DynamicTimezoneinformation) (rc uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetDynamicTimeZoneInformation.Addr(), 1, uintptr(unsafe.Pointer(dtzi)), 0, 0) - rc = uint32(r0) - if rc == 0xffffffff { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} diff --git a/vendor/golang.org/x/sys/windows/registry/syscall.go b/vendor/golang.org/x/sys/windows/registry/syscall.go deleted file mode 100644 index e66643c..0000000 --- a/vendor/golang.org/x/sys/windows/registry/syscall.go +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package registry - -import "syscall" - -const ( - _REG_OPTION_NON_VOLATILE = 0 - - _REG_CREATED_NEW_KEY = 1 - _REG_OPENED_EXISTING_KEY = 2 - - _ERROR_NO_MORE_ITEMS syscall.Errno = 259 -) - -func LoadRegLoadMUIString() error { - return procRegLoadMUIStringW.Find() -} - -//sys regCreateKeyEx(key syscall.Handle, subkey *uint16, reserved uint32, class *uint16, options uint32, desired uint32, sa *syscall.SecurityAttributes, result *syscall.Handle, disposition *uint32) (regerrno error) = advapi32.RegCreateKeyExW -//sys regDeleteKey(key syscall.Handle, subkey *uint16) (regerrno error) = advapi32.RegDeleteKeyW -//sys regSetValueEx(key syscall.Handle, valueName *uint16, reserved uint32, vtype uint32, buf *byte, bufsize uint32) (regerrno error) = advapi32.RegSetValueExW -//sys regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegEnumValueW -//sys regDeleteValue(key syscall.Handle, name *uint16) (regerrno error) = advapi32.RegDeleteValueW -//sys regLoadMUIString(key syscall.Handle, name *uint16, buf *uint16, buflen uint32, buflenCopied *uint32, flags uint32, dir *uint16) (regerrno error) = advapi32.RegLoadMUIStringW -//sys regConnectRegistry(machinename *uint16, key syscall.Handle, result *syscall.Handle) (regerrno error) = advapi32.RegConnectRegistryW - -//sys expandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) = kernel32.ExpandEnvironmentStringsW diff --git a/vendor/golang.org/x/sys/windows/registry/value.go b/vendor/golang.org/x/sys/windows/registry/value.go deleted file mode 100644 index 71d4e15..0000000 --- a/vendor/golang.org/x/sys/windows/registry/value.go +++ /dev/null @@ -1,384 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package registry - -import ( - "errors" - "io" - "syscall" - "unicode/utf16" - "unsafe" -) - -const ( - // Registry value types. - NONE = 0 - SZ = 1 - EXPAND_SZ = 2 - BINARY = 3 - DWORD = 4 - DWORD_BIG_ENDIAN = 5 - LINK = 6 - MULTI_SZ = 7 - RESOURCE_LIST = 8 - FULL_RESOURCE_DESCRIPTOR = 9 - RESOURCE_REQUIREMENTS_LIST = 10 - QWORD = 11 -) - -var ( - // ErrShortBuffer is returned when the buffer was too short for the operation. - ErrShortBuffer = syscall.ERROR_MORE_DATA - - // ErrNotExist is returned when a registry key or value does not exist. - ErrNotExist = syscall.ERROR_FILE_NOT_FOUND - - // ErrUnexpectedType is returned by Get*Value when the value's type was unexpected. - ErrUnexpectedType = errors.New("unexpected key value type") -) - -// GetValue retrieves the type and data for the specified value associated -// with an open key k. It fills up buffer buf and returns the retrieved -// byte count n. If buf is too small to fit the stored value it returns -// ErrShortBuffer error along with the required buffer size n. -// If no buffer is provided, it returns true and actual buffer size n. -// If no buffer is provided, GetValue returns the value's type only. -// If the value does not exist, the error returned is ErrNotExist. -// -// GetValue is a low level function. If value's type is known, use the appropriate -// Get*Value function instead. -func (k Key) GetValue(name string, buf []byte) (n int, valtype uint32, err error) { - pname, err := syscall.UTF16PtrFromString(name) - if err != nil { - return 0, 0, err - } - var pbuf *byte - if len(buf) > 0 { - pbuf = (*byte)(unsafe.Pointer(&buf[0])) - } - l := uint32(len(buf)) - err = syscall.RegQueryValueEx(syscall.Handle(k), pname, nil, &valtype, pbuf, &l) - if err != nil { - return int(l), valtype, err - } - return int(l), valtype, nil -} - -func (k Key) getValue(name string, buf []byte) (date []byte, valtype uint32, err error) { - p, err := syscall.UTF16PtrFromString(name) - if err != nil { - return nil, 0, err - } - var t uint32 - n := uint32(len(buf)) - for { - err = syscall.RegQueryValueEx(syscall.Handle(k), p, nil, &t, (*byte)(unsafe.Pointer(&buf[0])), &n) - if err == nil { - return buf[:n], t, nil - } - if err != syscall.ERROR_MORE_DATA { - return nil, 0, err - } - if n <= uint32(len(buf)) { - return nil, 0, err - } - buf = make([]byte, n) - } -} - -// GetStringValue retrieves the string value for the specified -// value name associated with an open key k. It also returns the value's type. -// If value does not exist, GetStringValue returns ErrNotExist. -// If value is not SZ or EXPAND_SZ, it will return the correct value -// type and ErrUnexpectedType. -func (k Key) GetStringValue(name string) (val string, valtype uint32, err error) { - data, typ, err2 := k.getValue(name, make([]byte, 64)) - if err2 != nil { - return "", typ, err2 - } - switch typ { - case SZ, EXPAND_SZ: - default: - return "", typ, ErrUnexpectedType - } - if len(data) == 0 { - return "", typ, nil - } - u := (*[1 << 29]uint16)(unsafe.Pointer(&data[0]))[:] - return syscall.UTF16ToString(u), typ, nil -} - -// GetMUIStringValue retrieves the localized string value for -// the specified value name associated with an open key k. -// If the value name doesn't exist or the localized string value -// can't be resolved, GetMUIStringValue returns ErrNotExist. -// GetMUIStringValue panics if the system doesn't support -// regLoadMUIString; use LoadRegLoadMUIString to check if -// regLoadMUIString is supported before calling this function. -func (k Key) GetMUIStringValue(name string) (string, error) { - pname, err := syscall.UTF16PtrFromString(name) - if err != nil { - return "", err - } - - buf := make([]uint16, 1024) - var buflen uint32 - var pdir *uint16 - - err = regLoadMUIString(syscall.Handle(k), pname, &buf[0], uint32(len(buf)), &buflen, 0, pdir) - if err == syscall.ERROR_FILE_NOT_FOUND { // Try fallback path - - // Try to resolve the string value using the system directory as - // a DLL search path; this assumes the string value is of the form - // @[path]\dllname,-strID but with no path given, e.g. @tzres.dll,-320. - - // This approach works with tzres.dll but may have to be revised - // in the future to allow callers to provide custom search paths. - - var s string - s, err = ExpandString("%SystemRoot%\\system32\\") - if err != nil { - return "", err - } - pdir, err = syscall.UTF16PtrFromString(s) - if err != nil { - return "", err - } - - err = regLoadMUIString(syscall.Handle(k), pname, &buf[0], uint32(len(buf)), &buflen, 0, pdir) - } - - for err == syscall.ERROR_MORE_DATA { // Grow buffer if needed - if buflen <= uint32(len(buf)) { - break // Buffer not growing, assume race; break - } - buf = make([]uint16, buflen) - err = regLoadMUIString(syscall.Handle(k), pname, &buf[0], uint32(len(buf)), &buflen, 0, pdir) - } - - if err != nil { - return "", err - } - - return syscall.UTF16ToString(buf), nil -} - -// ExpandString expands environment-variable strings and replaces -// them with the values defined for the current user. -// Use ExpandString to expand EXPAND_SZ strings. -func ExpandString(value string) (string, error) { - if value == "" { - return "", nil - } - p, err := syscall.UTF16PtrFromString(value) - if err != nil { - return "", err - } - r := make([]uint16, 100) - for { - n, err := expandEnvironmentStrings(p, &r[0], uint32(len(r))) - if err != nil { - return "", err - } - if n <= uint32(len(r)) { - u := (*[1 << 29]uint16)(unsafe.Pointer(&r[0]))[:] - return syscall.UTF16ToString(u), nil - } - r = make([]uint16, n) - } -} - -// GetStringsValue retrieves the []string value for the specified -// value name associated with an open key k. It also returns the value's type. -// If value does not exist, GetStringsValue returns ErrNotExist. -// If value is not MULTI_SZ, it will return the correct value -// type and ErrUnexpectedType. -func (k Key) GetStringsValue(name string) (val []string, valtype uint32, err error) { - data, typ, err2 := k.getValue(name, make([]byte, 64)) - if err2 != nil { - return nil, typ, err2 - } - if typ != MULTI_SZ { - return nil, typ, ErrUnexpectedType - } - if len(data) == 0 { - return nil, typ, nil - } - p := (*[1 << 29]uint16)(unsafe.Pointer(&data[0]))[:len(data)/2] - if len(p) == 0 { - return nil, typ, nil - } - if p[len(p)-1] == 0 { - p = p[:len(p)-1] // remove terminating null - } - val = make([]string, 0, 5) - from := 0 - for i, c := range p { - if c == 0 { - val = append(val, string(utf16.Decode(p[from:i]))) - from = i + 1 - } - } - return val, typ, nil -} - -// GetIntegerValue retrieves the integer value for the specified -// value name associated with an open key k. It also returns the value's type. -// If value does not exist, GetIntegerValue returns ErrNotExist. -// If value is not DWORD or QWORD, it will return the correct value -// type and ErrUnexpectedType. -func (k Key) GetIntegerValue(name string) (val uint64, valtype uint32, err error) { - data, typ, err2 := k.getValue(name, make([]byte, 8)) - if err2 != nil { - return 0, typ, err2 - } - switch typ { - case DWORD: - if len(data) != 4 { - return 0, typ, errors.New("DWORD value is not 4 bytes long") - } - return uint64(*(*uint32)(unsafe.Pointer(&data[0]))), DWORD, nil - case QWORD: - if len(data) != 8 { - return 0, typ, errors.New("QWORD value is not 8 bytes long") - } - return uint64(*(*uint64)(unsafe.Pointer(&data[0]))), QWORD, nil - default: - return 0, typ, ErrUnexpectedType - } -} - -// GetBinaryValue retrieves the binary value for the specified -// value name associated with an open key k. It also returns the value's type. -// If value does not exist, GetBinaryValue returns ErrNotExist. -// If value is not BINARY, it will return the correct value -// type and ErrUnexpectedType. -func (k Key) GetBinaryValue(name string) (val []byte, valtype uint32, err error) { - data, typ, err2 := k.getValue(name, make([]byte, 64)) - if err2 != nil { - return nil, typ, err2 - } - if typ != BINARY { - return nil, typ, ErrUnexpectedType - } - return data, typ, nil -} - -func (k Key) setValue(name string, valtype uint32, data []byte) error { - p, err := syscall.UTF16PtrFromString(name) - if err != nil { - return err - } - if len(data) == 0 { - return regSetValueEx(syscall.Handle(k), p, 0, valtype, nil, 0) - } - return regSetValueEx(syscall.Handle(k), p, 0, valtype, &data[0], uint32(len(data))) -} - -// SetDWordValue sets the data and type of a name value -// under key k to value and DWORD. -func (k Key) SetDWordValue(name string, value uint32) error { - return k.setValue(name, DWORD, (*[4]byte)(unsafe.Pointer(&value))[:]) -} - -// SetQWordValue sets the data and type of a name value -// under key k to value and QWORD. -func (k Key) SetQWordValue(name string, value uint64) error { - return k.setValue(name, QWORD, (*[8]byte)(unsafe.Pointer(&value))[:]) -} - -func (k Key) setStringValue(name string, valtype uint32, value string) error { - v, err := syscall.UTF16FromString(value) - if err != nil { - return err - } - buf := (*[1 << 29]byte)(unsafe.Pointer(&v[0]))[:len(v)*2] - return k.setValue(name, valtype, buf) -} - -// SetStringValue sets the data and type of a name value -// under key k to value and SZ. The value must not contain a zero byte. -func (k Key) SetStringValue(name, value string) error { - return k.setStringValue(name, SZ, value) -} - -// SetExpandStringValue sets the data and type of a name value -// under key k to value and EXPAND_SZ. The value must not contain a zero byte. -func (k Key) SetExpandStringValue(name, value string) error { - return k.setStringValue(name, EXPAND_SZ, value) -} - -// SetStringsValue sets the data and type of a name value -// under key k to value and MULTI_SZ. The value strings -// must not contain a zero byte. -func (k Key) SetStringsValue(name string, value []string) error { - ss := "" - for _, s := range value { - for i := 0; i < len(s); i++ { - if s[i] == 0 { - return errors.New("string cannot have 0 inside") - } - } - ss += s + "\x00" - } - v := utf16.Encode([]rune(ss + "\x00")) - buf := (*[1 << 29]byte)(unsafe.Pointer(&v[0]))[:len(v)*2] - return k.setValue(name, MULTI_SZ, buf) -} - -// SetBinaryValue sets the data and type of a name value -// under key k to value and BINARY. -func (k Key) SetBinaryValue(name string, value []byte) error { - return k.setValue(name, BINARY, value) -} - -// DeleteValue removes a named value from the key k. -func (k Key) DeleteValue(name string) error { - return regDeleteValue(syscall.Handle(k), syscall.StringToUTF16Ptr(name)) -} - -// ReadValueNames returns the value names of key k. -// The parameter n controls the number of returned names, -// analogous to the way os.File.Readdirnames works. -func (k Key) ReadValueNames(n int) ([]string, error) { - ki, err := k.Stat() - if err != nil { - return nil, err - } - names := make([]string, 0, ki.ValueCount) - buf := make([]uint16, ki.MaxValueNameLen+1) // extra room for terminating null character -loopItems: - for i := uint32(0); ; i++ { - if n > 0 { - if len(names) == n { - return names, nil - } - } - l := uint32(len(buf)) - for { - err := regEnumValue(syscall.Handle(k), i, &buf[0], &l, nil, nil, nil, nil) - if err == nil { - break - } - if err == syscall.ERROR_MORE_DATA { - // Double buffer size and try again. - l = uint32(2 * len(buf)) - buf = make([]uint16, l) - continue - } - if err == _ERROR_NO_MORE_ITEMS { - break loopItems - } - return names, err - } - names = append(names, syscall.UTF16ToString(buf[:l])) - } - if n > len(names) { - return names, io.EOF - } - return names, nil -} diff --git a/vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go deleted file mode 100644 index ceebdd7..0000000 --- a/vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go +++ /dev/null @@ -1,120 +0,0 @@ -// MACHINE GENERATED BY 'go generate' COMMAND; DO NOT EDIT - -package registry - -import ( - "syscall" - "unsafe" - - "golang.org/x/sys/windows" -) - -var _ unsafe.Pointer - -// Do the interface allocations only once for common -// Errno values. -const ( - errnoERROR_IO_PENDING = 997 -) - -var ( - errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) -) - -// errnoErr returns common boxed Errno values, to prevent -// allocations at runtime. -func errnoErr(e syscall.Errno) error { - switch e { - case 0: - return nil - case errnoERROR_IO_PENDING: - return errERROR_IO_PENDING - } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) - return e -} - -var ( - modadvapi32 = windows.NewLazySystemDLL("advapi32.dll") - modkernel32 = windows.NewLazySystemDLL("kernel32.dll") - - procRegCreateKeyExW = modadvapi32.NewProc("RegCreateKeyExW") - procRegDeleteKeyW = modadvapi32.NewProc("RegDeleteKeyW") - procRegSetValueExW = modadvapi32.NewProc("RegSetValueExW") - procRegEnumValueW = modadvapi32.NewProc("RegEnumValueW") - procRegDeleteValueW = modadvapi32.NewProc("RegDeleteValueW") - procRegLoadMUIStringW = modadvapi32.NewProc("RegLoadMUIStringW") - procRegConnectRegistryW = modadvapi32.NewProc("RegConnectRegistryW") - procExpandEnvironmentStringsW = modkernel32.NewProc("ExpandEnvironmentStringsW") -) - -func regCreateKeyEx(key syscall.Handle, subkey *uint16, reserved uint32, class *uint16, options uint32, desired uint32, sa *syscall.SecurityAttributes, result *syscall.Handle, disposition *uint32) (regerrno error) { - r0, _, _ := syscall.Syscall9(procRegCreateKeyExW.Addr(), 9, uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(reserved), uintptr(unsafe.Pointer(class)), uintptr(options), uintptr(desired), uintptr(unsafe.Pointer(sa)), uintptr(unsafe.Pointer(result)), uintptr(unsafe.Pointer(disposition))) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func regDeleteKey(key syscall.Handle, subkey *uint16) (regerrno error) { - r0, _, _ := syscall.Syscall(procRegDeleteKeyW.Addr(), 2, uintptr(key), uintptr(unsafe.Pointer(subkey)), 0) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func regSetValueEx(key syscall.Handle, valueName *uint16, reserved uint32, vtype uint32, buf *byte, bufsize uint32) (regerrno error) { - r0, _, _ := syscall.Syscall6(procRegSetValueExW.Addr(), 6, uintptr(key), uintptr(unsafe.Pointer(valueName)), uintptr(reserved), uintptr(vtype), uintptr(unsafe.Pointer(buf)), uintptr(bufsize)) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) { - r0, _, _ := syscall.Syscall9(procRegEnumValueW.Addr(), 8, uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen)), 0) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func regDeleteValue(key syscall.Handle, name *uint16) (regerrno error) { - r0, _, _ := syscall.Syscall(procRegDeleteValueW.Addr(), 2, uintptr(key), uintptr(unsafe.Pointer(name)), 0) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func regLoadMUIString(key syscall.Handle, name *uint16, buf *uint16, buflen uint32, buflenCopied *uint32, flags uint32, dir *uint16) (regerrno error) { - r0, _, _ := syscall.Syscall9(procRegLoadMUIStringW.Addr(), 7, uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(unsafe.Pointer(buflenCopied)), uintptr(flags), uintptr(unsafe.Pointer(dir)), 0, 0) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func regConnectRegistry(machinename *uint16, key syscall.Handle, result *syscall.Handle) (regerrno error) { - r0, _, _ := syscall.Syscall(procRegConnectRegistryW.Addr(), 3, uintptr(unsafe.Pointer(machinename)), uintptr(key), uintptr(unsafe.Pointer(result))) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func expandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procExpandEnvironmentStringsW.Addr(), 3, uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size)) - n = uint32(r0) - if n == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} diff --git a/vendor/golang.org/x/sys/windows/security_windows.go b/vendor/golang.org/x/sys/windows/security_windows.go deleted file mode 100644 index ca09bdd..0000000 --- a/vendor/golang.org/x/sys/windows/security_windows.go +++ /dev/null @@ -1,435 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package windows - -import ( - "syscall" - "unsafe" -) - -const ( - STANDARD_RIGHTS_REQUIRED = 0xf0000 - STANDARD_RIGHTS_READ = 0x20000 - STANDARD_RIGHTS_WRITE = 0x20000 - STANDARD_RIGHTS_EXECUTE = 0x20000 - STANDARD_RIGHTS_ALL = 0x1F0000 -) - -const ( - NameUnknown = 0 - NameFullyQualifiedDN = 1 - NameSamCompatible = 2 - NameDisplay = 3 - NameUniqueId = 6 - NameCanonical = 7 - NameUserPrincipal = 8 - NameCanonicalEx = 9 - NameServicePrincipal = 10 - NameDnsDomain = 12 -) - -// This function returns 1 byte BOOLEAN rather than the 4 byte BOOL. -// http://blogs.msdn.com/b/drnick/archive/2007/12/19/windows-and-upn-format-credentials.aspx -//sys TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint32, translatedName *uint16, nSize *uint32) (err error) [failretval&0xff==0] = secur32.TranslateNameW -//sys GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) [failretval&0xff==0] = secur32.GetUserNameExW - -// TranslateAccountName converts a directory service -// object name from one format to another. -func TranslateAccountName(username string, from, to uint32, initSize int) (string, error) { - u, e := UTF16PtrFromString(username) - if e != nil { - return "", e - } - n := uint32(50) - for { - b := make([]uint16, n) - e = TranslateName(u, from, to, &b[0], &n) - if e == nil { - return UTF16ToString(b[:n]), nil - } - if e != ERROR_INSUFFICIENT_BUFFER { - return "", e - } - if n <= uint32(len(b)) { - return "", e - } - } -} - -const ( - // do not reorder - NetSetupUnknownStatus = iota - NetSetupUnjoined - NetSetupWorkgroupName - NetSetupDomainName -) - -type UserInfo10 struct { - Name *uint16 - Comment *uint16 - UsrComment *uint16 - FullName *uint16 -} - -//sys NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) = netapi32.NetUserGetInfo -//sys NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) = netapi32.NetGetJoinInformation -//sys NetApiBufferFree(buf *byte) (neterr error) = netapi32.NetApiBufferFree - -const ( - // do not reorder - SidTypeUser = 1 + iota - SidTypeGroup - SidTypeDomain - SidTypeAlias - SidTypeWellKnownGroup - SidTypeDeletedAccount - SidTypeInvalid - SidTypeUnknown - SidTypeComputer - SidTypeLabel -) - -type SidIdentifierAuthority struct { - Value [6]byte -} - -var ( - SECURITY_NULL_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 0}} - SECURITY_WORLD_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 1}} - SECURITY_LOCAL_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 2}} - SECURITY_CREATOR_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 3}} - SECURITY_NON_UNIQUE_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 4}} - SECURITY_NT_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 5}} - SECURITY_MANDATORY_LABEL_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 16}} -) - -const ( - SECURITY_NULL_RID = 0 - SECURITY_WORLD_RID = 0 - SECURITY_LOCAL_RID = 0 - SECURITY_CREATOR_OWNER_RID = 0 - SECURITY_CREATOR_GROUP_RID = 1 - SECURITY_DIALUP_RID = 1 - SECURITY_NETWORK_RID = 2 - SECURITY_BATCH_RID = 3 - SECURITY_INTERACTIVE_RID = 4 - SECURITY_LOGON_IDS_RID = 5 - SECURITY_SERVICE_RID = 6 - SECURITY_LOCAL_SYSTEM_RID = 18 - SECURITY_BUILTIN_DOMAIN_RID = 32 - SECURITY_PRINCIPAL_SELF_RID = 10 - SECURITY_CREATOR_OWNER_SERVER_RID = 0x2 - SECURITY_CREATOR_GROUP_SERVER_RID = 0x3 - SECURITY_LOGON_IDS_RID_COUNT = 0x3 - SECURITY_ANONYMOUS_LOGON_RID = 0x7 - SECURITY_PROXY_RID = 0x8 - SECURITY_ENTERPRISE_CONTROLLERS_RID = 0x9 - SECURITY_SERVER_LOGON_RID = SECURITY_ENTERPRISE_CONTROLLERS_RID - SECURITY_AUTHENTICATED_USER_RID = 0xb - SECURITY_RESTRICTED_CODE_RID = 0xc - SECURITY_NT_NON_UNIQUE_RID = 0x15 -) - -//sys LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) = advapi32.LookupAccountSidW -//sys LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) = advapi32.LookupAccountNameW -//sys ConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) = advapi32.ConvertSidToStringSidW -//sys ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) = advapi32.ConvertStringSidToSidW -//sys GetLengthSid(sid *SID) (len uint32) = advapi32.GetLengthSid -//sys CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) = advapi32.CopySid -//sys AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) = advapi32.AllocateAndInitializeSid -//sys FreeSid(sid *SID) (err error) [failretval!=0] = advapi32.FreeSid -//sys EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) = advapi32.EqualSid - -// The security identifier (SID) structure is a variable-length -// structure used to uniquely identify users or groups. -type SID struct{} - -// StringToSid converts a string-format security identifier -// sid into a valid, functional sid. -func StringToSid(s string) (*SID, error) { - var sid *SID - p, e := UTF16PtrFromString(s) - if e != nil { - return nil, e - } - e = ConvertStringSidToSid(p, &sid) - if e != nil { - return nil, e - } - defer LocalFree((Handle)(unsafe.Pointer(sid))) - return sid.Copy() -} - -// LookupSID retrieves a security identifier sid for the account -// and the name of the domain on which the account was found. -// System specify target computer to search. -func LookupSID(system, account string) (sid *SID, domain string, accType uint32, err error) { - if len(account) == 0 { - return nil, "", 0, syscall.EINVAL - } - acc, e := UTF16PtrFromString(account) - if e != nil { - return nil, "", 0, e - } - var sys *uint16 - if len(system) > 0 { - sys, e = UTF16PtrFromString(system) - if e != nil { - return nil, "", 0, e - } - } - n := uint32(50) - dn := uint32(50) - for { - b := make([]byte, n) - db := make([]uint16, dn) - sid = (*SID)(unsafe.Pointer(&b[0])) - e = LookupAccountName(sys, acc, sid, &n, &db[0], &dn, &accType) - if e == nil { - return sid, UTF16ToString(db), accType, nil - } - if e != ERROR_INSUFFICIENT_BUFFER { - return nil, "", 0, e - } - if n <= uint32(len(b)) { - return nil, "", 0, e - } - } -} - -// String converts sid to a string format -// suitable for display, storage, or transmission. -func (sid *SID) String() (string, error) { - var s *uint16 - e := ConvertSidToStringSid(sid, &s) - if e != nil { - return "", e - } - defer LocalFree((Handle)(unsafe.Pointer(s))) - return UTF16ToString((*[256]uint16)(unsafe.Pointer(s))[:]), nil -} - -// Len returns the length, in bytes, of a valid security identifier sid. -func (sid *SID) Len() int { - return int(GetLengthSid(sid)) -} - -// Copy creates a duplicate of security identifier sid. -func (sid *SID) Copy() (*SID, error) { - b := make([]byte, sid.Len()) - sid2 := (*SID)(unsafe.Pointer(&b[0])) - e := CopySid(uint32(len(b)), sid2, sid) - if e != nil { - return nil, e - } - return sid2, nil -} - -// LookupAccount retrieves the name of the account for this sid -// and the name of the first domain on which this sid is found. -// System specify target computer to search for. -func (sid *SID) LookupAccount(system string) (account, domain string, accType uint32, err error) { - var sys *uint16 - if len(system) > 0 { - sys, err = UTF16PtrFromString(system) - if err != nil { - return "", "", 0, err - } - } - n := uint32(50) - dn := uint32(50) - for { - b := make([]uint16, n) - db := make([]uint16, dn) - e := LookupAccountSid(sys, sid, &b[0], &n, &db[0], &dn, &accType) - if e == nil { - return UTF16ToString(b), UTF16ToString(db), accType, nil - } - if e != ERROR_INSUFFICIENT_BUFFER { - return "", "", 0, e - } - if n <= uint32(len(b)) { - return "", "", 0, e - } - } -} - -const ( - // do not reorder - TOKEN_ASSIGN_PRIMARY = 1 << iota - TOKEN_DUPLICATE - TOKEN_IMPERSONATE - TOKEN_QUERY - TOKEN_QUERY_SOURCE - TOKEN_ADJUST_PRIVILEGES - TOKEN_ADJUST_GROUPS - TOKEN_ADJUST_DEFAULT - - TOKEN_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | - TOKEN_ASSIGN_PRIMARY | - TOKEN_DUPLICATE | - TOKEN_IMPERSONATE | - TOKEN_QUERY | - TOKEN_QUERY_SOURCE | - TOKEN_ADJUST_PRIVILEGES | - TOKEN_ADJUST_GROUPS | - TOKEN_ADJUST_DEFAULT - TOKEN_READ = STANDARD_RIGHTS_READ | TOKEN_QUERY - TOKEN_WRITE = STANDARD_RIGHTS_WRITE | - TOKEN_ADJUST_PRIVILEGES | - TOKEN_ADJUST_GROUPS | - TOKEN_ADJUST_DEFAULT - TOKEN_EXECUTE = STANDARD_RIGHTS_EXECUTE -) - -const ( - // do not reorder - TokenUser = 1 + iota - TokenGroups - TokenPrivileges - TokenOwner - TokenPrimaryGroup - TokenDefaultDacl - TokenSource - TokenType - TokenImpersonationLevel - TokenStatistics - TokenRestrictedSids - TokenSessionId - TokenGroupsAndPrivileges - TokenSessionReference - TokenSandBoxInert - TokenAuditPolicy - TokenOrigin - TokenElevationType - TokenLinkedToken - TokenElevation - TokenHasRestrictions - TokenAccessInformation - TokenVirtualizationAllowed - TokenVirtualizationEnabled - TokenIntegrityLevel - TokenUIAccess - TokenMandatoryPolicy - TokenLogonSid - MaxTokenInfoClass -) - -type SIDAndAttributes struct { - Sid *SID - Attributes uint32 -} - -type Tokenuser struct { - User SIDAndAttributes -} - -type Tokenprimarygroup struct { - PrimaryGroup *SID -} - -type Tokengroups struct { - GroupCount uint32 - Groups [1]SIDAndAttributes -} - -//sys OpenProcessToken(h Handle, access uint32, token *Token) (err error) = advapi32.OpenProcessToken -//sys GetTokenInformation(t Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) = advapi32.GetTokenInformation -//sys GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) = userenv.GetUserProfileDirectoryW - -// An access token contains the security information for a logon session. -// The system creates an access token when a user logs on, and every -// process executed on behalf of the user has a copy of the token. -// The token identifies the user, the user's groups, and the user's -// privileges. The system uses the token to control access to securable -// objects and to control the ability of the user to perform various -// system-related operations on the local computer. -type Token Handle - -// OpenCurrentProcessToken opens the access token -// associated with current process. -func OpenCurrentProcessToken() (Token, error) { - p, e := GetCurrentProcess() - if e != nil { - return 0, e - } - var t Token - e = OpenProcessToken(p, TOKEN_QUERY, &t) - if e != nil { - return 0, e - } - return t, nil -} - -// Close releases access to access token. -func (t Token) Close() error { - return CloseHandle(Handle(t)) -} - -// getInfo retrieves a specified type of information about an access token. -func (t Token) getInfo(class uint32, initSize int) (unsafe.Pointer, error) { - n := uint32(initSize) - for { - b := make([]byte, n) - e := GetTokenInformation(t, class, &b[0], uint32(len(b)), &n) - if e == nil { - return unsafe.Pointer(&b[0]), nil - } - if e != ERROR_INSUFFICIENT_BUFFER { - return nil, e - } - if n <= uint32(len(b)) { - return nil, e - } - } -} - -// GetTokenUser retrieves access token t user account information. -func (t Token) GetTokenUser() (*Tokenuser, error) { - i, e := t.getInfo(TokenUser, 50) - if e != nil { - return nil, e - } - return (*Tokenuser)(i), nil -} - -// GetTokenGroups retrieves group accounts associated with access token t. -func (t Token) GetTokenGroups() (*Tokengroups, error) { - i, e := t.getInfo(TokenGroups, 50) - if e != nil { - return nil, e - } - return (*Tokengroups)(i), nil -} - -// GetTokenPrimaryGroup retrieves access token t primary group information. -// A pointer to a SID structure representing a group that will become -// the primary group of any objects created by a process using this access token. -func (t Token) GetTokenPrimaryGroup() (*Tokenprimarygroup, error) { - i, e := t.getInfo(TokenPrimaryGroup, 50) - if e != nil { - return nil, e - } - return (*Tokenprimarygroup)(i), nil -} - -// GetUserProfileDirectory retrieves path to the -// root directory of the access token t user's profile. -func (t Token) GetUserProfileDirectory() (string, error) { - n := uint32(100) - for { - b := make([]uint16, n) - e := GetUserProfileDirectory(t, &b[0], &n) - if e == nil { - return UTF16ToString(b), nil - } - if e != ERROR_INSUFFICIENT_BUFFER { - return "", e - } - if n <= uint32(len(b)) { - return "", e - } - } -} diff --git a/vendor/golang.org/x/sys/windows/service.go b/vendor/golang.org/x/sys/windows/service.go deleted file mode 100644 index 1c11d39..0000000 --- a/vendor/golang.org/x/sys/windows/service.go +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package windows - -const ( - SC_MANAGER_CONNECT = 1 - SC_MANAGER_CREATE_SERVICE = 2 - SC_MANAGER_ENUMERATE_SERVICE = 4 - SC_MANAGER_LOCK = 8 - SC_MANAGER_QUERY_LOCK_STATUS = 16 - SC_MANAGER_MODIFY_BOOT_CONFIG = 32 - SC_MANAGER_ALL_ACCESS = 0xf003f -) - -//sys OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenSCManagerW - -const ( - SERVICE_KERNEL_DRIVER = 1 - SERVICE_FILE_SYSTEM_DRIVER = 2 - SERVICE_ADAPTER = 4 - SERVICE_RECOGNIZER_DRIVER = 8 - SERVICE_WIN32_OWN_PROCESS = 16 - SERVICE_WIN32_SHARE_PROCESS = 32 - SERVICE_WIN32 = SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS - SERVICE_INTERACTIVE_PROCESS = 256 - SERVICE_DRIVER = SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER - SERVICE_TYPE_ALL = SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS - - SERVICE_BOOT_START = 0 - SERVICE_SYSTEM_START = 1 - SERVICE_AUTO_START = 2 - SERVICE_DEMAND_START = 3 - SERVICE_DISABLED = 4 - - SERVICE_ERROR_IGNORE = 0 - SERVICE_ERROR_NORMAL = 1 - SERVICE_ERROR_SEVERE = 2 - SERVICE_ERROR_CRITICAL = 3 - - SC_STATUS_PROCESS_INFO = 0 - - SERVICE_STOPPED = 1 - SERVICE_START_PENDING = 2 - SERVICE_STOP_PENDING = 3 - SERVICE_RUNNING = 4 - SERVICE_CONTINUE_PENDING = 5 - SERVICE_PAUSE_PENDING = 6 - SERVICE_PAUSED = 7 - SERVICE_NO_CHANGE = 0xffffffff - - SERVICE_ACCEPT_STOP = 1 - SERVICE_ACCEPT_PAUSE_CONTINUE = 2 - SERVICE_ACCEPT_SHUTDOWN = 4 - SERVICE_ACCEPT_PARAMCHANGE = 8 - SERVICE_ACCEPT_NETBINDCHANGE = 16 - SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 32 - SERVICE_ACCEPT_POWEREVENT = 64 - SERVICE_ACCEPT_SESSIONCHANGE = 128 - - SERVICE_CONTROL_STOP = 1 - SERVICE_CONTROL_PAUSE = 2 - SERVICE_CONTROL_CONTINUE = 3 - SERVICE_CONTROL_INTERROGATE = 4 - SERVICE_CONTROL_SHUTDOWN = 5 - SERVICE_CONTROL_PARAMCHANGE = 6 - SERVICE_CONTROL_NETBINDADD = 7 - SERVICE_CONTROL_NETBINDREMOVE = 8 - SERVICE_CONTROL_NETBINDENABLE = 9 - SERVICE_CONTROL_NETBINDDISABLE = 10 - SERVICE_CONTROL_DEVICEEVENT = 11 - SERVICE_CONTROL_HARDWAREPROFILECHANGE = 12 - SERVICE_CONTROL_POWEREVENT = 13 - SERVICE_CONTROL_SESSIONCHANGE = 14 - - SERVICE_ACTIVE = 1 - SERVICE_INACTIVE = 2 - SERVICE_STATE_ALL = 3 - - SERVICE_QUERY_CONFIG = 1 - SERVICE_CHANGE_CONFIG = 2 - SERVICE_QUERY_STATUS = 4 - SERVICE_ENUMERATE_DEPENDENTS = 8 - SERVICE_START = 16 - SERVICE_STOP = 32 - SERVICE_PAUSE_CONTINUE = 64 - SERVICE_INTERROGATE = 128 - SERVICE_USER_DEFINED_CONTROL = 256 - SERVICE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS | SERVICE_START | SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_INTERROGATE | SERVICE_USER_DEFINED_CONTROL - SERVICE_RUNS_IN_SYSTEM_PROCESS = 1 - SERVICE_CONFIG_DESCRIPTION = 1 - SERVICE_CONFIG_FAILURE_ACTIONS = 2 - - NO_ERROR = 0 -) - -type SERVICE_STATUS struct { - ServiceType uint32 - CurrentState uint32 - ControlsAccepted uint32 - Win32ExitCode uint32 - ServiceSpecificExitCode uint32 - CheckPoint uint32 - WaitHint uint32 -} - -type SERVICE_TABLE_ENTRY struct { - ServiceName *uint16 - ServiceProc uintptr -} - -type QUERY_SERVICE_CONFIG struct { - ServiceType uint32 - StartType uint32 - ErrorControl uint32 - BinaryPathName *uint16 - LoadOrderGroup *uint16 - TagId uint32 - Dependencies *uint16 - ServiceStartName *uint16 - DisplayName *uint16 -} - -type SERVICE_DESCRIPTION struct { - Description *uint16 -} - -//sys CloseServiceHandle(handle Handle) (err error) = advapi32.CloseServiceHandle -//sys CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) [failretval==0] = advapi32.CreateServiceW -//sys OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenServiceW -//sys DeleteService(service Handle) (err error) = advapi32.DeleteService -//sys StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) = advapi32.StartServiceW -//sys QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) = advapi32.QueryServiceStatus -//sys ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) = advapi32.ControlService -//sys StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) = advapi32.StartServiceCtrlDispatcherW -//sys SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) = advapi32.SetServiceStatus -//sys ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) = advapi32.ChangeServiceConfigW -//sys QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfigW -//sys ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) = advapi32.ChangeServiceConfig2W -//sys QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfig2W diff --git a/vendor/golang.org/x/sys/windows/str.go b/vendor/golang.org/x/sys/windows/str.go deleted file mode 100644 index 917cc2a..0000000 --- a/vendor/golang.org/x/sys/windows/str.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package windows - -func itoa(val int) string { // do it here rather than with fmt to avoid dependency - if val < 0 { - return "-" + itoa(-val) - } - var buf [32]byte // big enough for int64 - i := len(buf) - 1 - for val >= 10 { - buf[i] = byte(val%10 + '0') - i-- - val /= 10 - } - buf[i] = byte(val + '0') - return string(buf[i:]) -} diff --git a/vendor/golang.org/x/sys/windows/svc/debug/log.go b/vendor/golang.org/x/sys/windows/svc/debug/log.go deleted file mode 100644 index e51ab42..0000000 --- a/vendor/golang.org/x/sys/windows/svc/debug/log.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package debug - -import ( - "os" - "strconv" -) - -// Log interface allows different log implementations to be used. -type Log interface { - Close() error - Info(eid uint32, msg string) error - Warning(eid uint32, msg string) error - Error(eid uint32, msg string) error -} - -// ConsoleLog provides access to the console. -type ConsoleLog struct { - Name string -} - -// New creates new ConsoleLog. -func New(source string) *ConsoleLog { - return &ConsoleLog{Name: source} -} - -// Close closes console log l. -func (l *ConsoleLog) Close() error { - return nil -} - -func (l *ConsoleLog) report(kind string, eid uint32, msg string) error { - s := l.Name + "." + kind + "(" + strconv.Itoa(int(eid)) + "): " + msg + "\n" - _, err := os.Stdout.Write([]byte(s)) - return err -} - -// Info writes an information event msg with event id eid to the console l. -func (l *ConsoleLog) Info(eid uint32, msg string) error { - return l.report("info", eid, msg) -} - -// Warning writes an warning event msg with event id eid to the console l. -func (l *ConsoleLog) Warning(eid uint32, msg string) error { - return l.report("warn", eid, msg) -} - -// Error writes an error event msg with event id eid to the console l. -func (l *ConsoleLog) Error(eid uint32, msg string) error { - return l.report("error", eid, msg) -} diff --git a/vendor/golang.org/x/sys/windows/svc/debug/service.go b/vendor/golang.org/x/sys/windows/svc/debug/service.go deleted file mode 100644 index d5ab94b..0000000 --- a/vendor/golang.org/x/sys/windows/svc/debug/service.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -// Package debug provides facilities to execute svc.Handler on console. -// -package debug - -import ( - "os" - "os/signal" - "syscall" - - "golang.org/x/sys/windows/svc" -) - -// Run executes service name by calling appropriate handler function. -// The process is running on console, unlike real service. Use Ctrl+C to -// send "Stop" command to your service. -func Run(name string, handler svc.Handler) error { - cmds := make(chan svc.ChangeRequest) - changes := make(chan svc.Status) - - sig := make(chan os.Signal) - signal.Notify(sig) - - go func() { - status := svc.Status{State: svc.Stopped} - for { - select { - case <-sig: - cmds <- svc.ChangeRequest{svc.Stop, status} - case status = <-changes: - } - } - }() - - _, errno := handler.Execute([]string{name}, cmds, changes) - if errno != 0 { - return syscall.Errno(errno) - } - return nil -} diff --git a/vendor/golang.org/x/sys/windows/svc/event.go b/vendor/golang.org/x/sys/windows/svc/event.go deleted file mode 100644 index 0508e22..0000000 --- a/vendor/golang.org/x/sys/windows/svc/event.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package svc - -import ( - "errors" - - "golang.org/x/sys/windows" -) - -// event represents auto-reset, initially non-signaled Windows event. -// It is used to communicate between go and asm parts of this package. -type event struct { - h windows.Handle -} - -func newEvent() (*event, error) { - h, err := windows.CreateEvent(nil, 0, 0, nil) - if err != nil { - return nil, err - } - return &event{h: h}, nil -} - -func (e *event) Close() error { - return windows.CloseHandle(e.h) -} - -func (e *event) Set() error { - return windows.SetEvent(e.h) -} - -func (e *event) Wait() error { - s, err := windows.WaitForSingleObject(e.h, windows.INFINITE) - switch s { - case windows.WAIT_OBJECT_0: - break - case windows.WAIT_FAILED: - return err - default: - return errors.New("unexpected result from WaitForSingleObject") - } - return nil -} diff --git a/vendor/golang.org/x/sys/windows/svc/eventlog/install.go b/vendor/golang.org/x/sys/windows/svc/eventlog/install.go deleted file mode 100644 index c76a376..0000000 --- a/vendor/golang.org/x/sys/windows/svc/eventlog/install.go +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package eventlog - -import ( - "errors" - - "golang.org/x/sys/windows" - "golang.org/x/sys/windows/registry" -) - -const ( - // Log levels. - Info = windows.EVENTLOG_INFORMATION_TYPE - Warning = windows.EVENTLOG_WARNING_TYPE - Error = windows.EVENTLOG_ERROR_TYPE -) - -const addKeyName = `SYSTEM\CurrentControlSet\Services\EventLog\Application` - -// Install modifies PC registry to allow logging with an event source src. -// It adds all required keys and values to the event log registry key. -// Install uses msgFile as the event message file. If useExpandKey is true, -// the event message file is installed as REG_EXPAND_SZ value, -// otherwise as REG_SZ. Use bitwise of log.Error, log.Warning and -// log.Info to specify events supported by the new event source. -func Install(src, msgFile string, useExpandKey bool, eventsSupported uint32) error { - appkey, err := registry.OpenKey(registry.LOCAL_MACHINE, addKeyName, registry.CREATE_SUB_KEY) - if err != nil { - return err - } - defer appkey.Close() - - sk, alreadyExist, err := registry.CreateKey(appkey, src, registry.SET_VALUE) - if err != nil { - return err - } - defer sk.Close() - if alreadyExist { - return errors.New(addKeyName + `\` + src + " registry key already exists") - } - - err = sk.SetDWordValue("CustomSource", 1) - if err != nil { - return err - } - if useExpandKey { - err = sk.SetExpandStringValue("EventMessageFile", msgFile) - } else { - err = sk.SetStringValue("EventMessageFile", msgFile) - } - if err != nil { - return err - } - err = sk.SetDWordValue("TypesSupported", eventsSupported) - if err != nil { - return err - } - return nil -} - -// InstallAsEventCreate is the same as Install, but uses -// %SystemRoot%\System32\EventCreate.exe as the event message file. -func InstallAsEventCreate(src string, eventsSupported uint32) error { - return Install(src, "%SystemRoot%\\System32\\EventCreate.exe", true, eventsSupported) -} - -// Remove deletes all registry elements installed by the correspondent Install. -func Remove(src string) error { - appkey, err := registry.OpenKey(registry.LOCAL_MACHINE, addKeyName, registry.SET_VALUE) - if err != nil { - return err - } - defer appkey.Close() - return registry.DeleteKey(appkey, src) -} diff --git a/vendor/golang.org/x/sys/windows/svc/eventlog/log.go b/vendor/golang.org/x/sys/windows/svc/eventlog/log.go deleted file mode 100644 index 46e5153..0000000 --- a/vendor/golang.org/x/sys/windows/svc/eventlog/log.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -// Package eventlog implements access to Windows event log. -// -package eventlog - -import ( - "errors" - "syscall" - - "golang.org/x/sys/windows" -) - -// Log provides access to the system log. -type Log struct { - Handle windows.Handle -} - -// Open retrieves a handle to the specified event log. -func Open(source string) (*Log, error) { - return OpenRemote("", source) -} - -// OpenRemote does the same as Open, but on different computer host. -func OpenRemote(host, source string) (*Log, error) { - if source == "" { - return nil, errors.New("Specify event log source") - } - var s *uint16 - if host != "" { - s = syscall.StringToUTF16Ptr(host) - } - h, err := windows.RegisterEventSource(s, syscall.StringToUTF16Ptr(source)) - if err != nil { - return nil, err - } - return &Log{Handle: h}, nil -} - -// Close closes event log l. -func (l *Log) Close() error { - return windows.DeregisterEventSource(l.Handle) -} - -func (l *Log) report(etype uint16, eid uint32, msg string) error { - ss := []*uint16{syscall.StringToUTF16Ptr(msg)} - return windows.ReportEvent(l.Handle, etype, 0, eid, 0, 1, 0, &ss[0], nil) -} - -// Info writes an information event msg with event id eid to the end of event log l. -// When EventCreate.exe is used, eid must be between 1 and 1000. -func (l *Log) Info(eid uint32, msg string) error { - return l.report(windows.EVENTLOG_INFORMATION_TYPE, eid, msg) -} - -// Warning writes an warning event msg with event id eid to the end of event log l. -// When EventCreate.exe is used, eid must be between 1 and 1000. -func (l *Log) Warning(eid uint32, msg string) error { - return l.report(windows.EVENTLOG_WARNING_TYPE, eid, msg) -} - -// Error writes an error event msg with event id eid to the end of event log l. -// When EventCreate.exe is used, eid must be between 1 and 1000. -func (l *Log) Error(eid uint32, msg string) error { - return l.report(windows.EVENTLOG_ERROR_TYPE, eid, msg) -} diff --git a/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go b/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go deleted file mode 100644 index 4dd8ad9..0000000 --- a/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package eventlog_test - -import ( - "testing" - - "golang.org/x/sys/windows/svc/eventlog" -) - -func TestLog(t *testing.T) { - if testing.Short() { - t.Skip("skipping test in short mode - it modifies system logs") - } - - const name = "mylog" - const supports = eventlog.Error | eventlog.Warning | eventlog.Info - err := eventlog.InstallAsEventCreate(name, supports) - if err != nil { - t.Fatalf("Install failed: %s", err) - } - defer func() { - err = eventlog.Remove(name) - if err != nil { - t.Fatalf("Remove failed: %s", err) - } - }() - - l, err := eventlog.Open(name) - if err != nil { - t.Fatalf("Open failed: %s", err) - } - defer l.Close() - - err = l.Info(1, "info") - if err != nil { - t.Fatalf("Info failed: %s", err) - } - err = l.Warning(2, "warning") - if err != nil { - t.Fatalf("Warning failed: %s", err) - } - err = l.Error(3, "error") - if err != nil { - t.Fatalf("Error failed: %s", err) - } -} diff --git a/vendor/golang.org/x/sys/windows/svc/example/beep.go b/vendor/golang.org/x/sys/windows/svc/example/beep.go deleted file mode 100644 index dcf2340..0000000 --- a/vendor/golang.org/x/sys/windows/svc/example/beep.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package main - -import ( - "syscall" -) - -// BUG(brainman): MessageBeep Windows api is broken on Windows 7, -// so this example does not beep when runs as service on Windows 7. - -var ( - beepFunc = syscall.MustLoadDLL("user32.dll").MustFindProc("MessageBeep") -) - -func beep() { - beepFunc.Call(0xffffffff) -} diff --git a/vendor/golang.org/x/sys/windows/svc/example/install.go b/vendor/golang.org/x/sys/windows/svc/example/install.go deleted file mode 100644 index 39cb00d..0000000 --- a/vendor/golang.org/x/sys/windows/svc/example/install.go +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package main - -import ( - "fmt" - "os" - "path/filepath" - - "golang.org/x/sys/windows/svc/eventlog" - "golang.org/x/sys/windows/svc/mgr" -) - -func exePath() (string, error) { - prog := os.Args[0] - p, err := filepath.Abs(prog) - if err != nil { - return "", err - } - fi, err := os.Stat(p) - if err == nil { - if !fi.Mode().IsDir() { - return p, nil - } - err = fmt.Errorf("%s is directory", p) - } - if filepath.Ext(p) == "" { - p += ".exe" - fi, err := os.Stat(p) - if err == nil { - if !fi.Mode().IsDir() { - return p, nil - } - err = fmt.Errorf("%s is directory", p) - } - } - return "", err -} - -func installService(name, desc string) error { - exepath, err := exePath() - if err != nil { - return err - } - m, err := mgr.Connect() - if err != nil { - return err - } - defer m.Disconnect() - s, err := m.OpenService(name) - if err == nil { - s.Close() - return fmt.Errorf("service %s already exists", name) - } - s, err = m.CreateService(name, exepath, mgr.Config{DisplayName: desc}, "is", "auto-started") - if err != nil { - return err - } - defer s.Close() - err = eventlog.InstallAsEventCreate(name, eventlog.Error|eventlog.Warning|eventlog.Info) - if err != nil { - s.Delete() - return fmt.Errorf("SetupEventLogSource() failed: %s", err) - } - return nil -} - -func removeService(name string) error { - m, err := mgr.Connect() - if err != nil { - return err - } - defer m.Disconnect() - s, err := m.OpenService(name) - if err != nil { - return fmt.Errorf("service %s is not installed", name) - } - defer s.Close() - err = s.Delete() - if err != nil { - return err - } - err = eventlog.Remove(name) - if err != nil { - return fmt.Errorf("RemoveEventLogSource() failed: %s", err) - } - return nil -} diff --git a/vendor/golang.org/x/sys/windows/svc/example/main.go b/vendor/golang.org/x/sys/windows/svc/example/main.go deleted file mode 100644 index dc96c08..0000000 --- a/vendor/golang.org/x/sys/windows/svc/example/main.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -// Example service program that beeps. -// -// The program demonstrates how to create Windows service and -// install / remove it on a computer. It also shows how to -// stop / start / pause / continue any service, and how to -// write to event log. It also shows how to use debug -// facilities available in debug package. -// -package main - -import ( - "fmt" - "log" - "os" - "strings" - - "golang.org/x/sys/windows/svc" -) - -func usage(errmsg string) { - fmt.Fprintf(os.Stderr, - "%s\n\n"+ - "usage: %s \n"+ - " where is one of\n"+ - " install, remove, debug, start, stop, pause or continue.\n", - errmsg, os.Args[0]) - os.Exit(2) -} - -func main() { - const svcName = "myservice" - - isIntSess, err := svc.IsAnInteractiveSession() - if err != nil { - log.Fatalf("failed to determine if we are running in an interactive session: %v", err) - } - if !isIntSess { - runService(svcName, false) - return - } - - if len(os.Args) < 2 { - usage("no command specified") - } - - cmd := strings.ToLower(os.Args[1]) - switch cmd { - case "debug": - runService(svcName, true) - return - case "install": - err = installService(svcName, "my service") - case "remove": - err = removeService(svcName) - case "start": - err = startService(svcName) - case "stop": - err = controlService(svcName, svc.Stop, svc.Stopped) - case "pause": - err = controlService(svcName, svc.Pause, svc.Paused) - case "continue": - err = controlService(svcName, svc.Continue, svc.Running) - default: - usage(fmt.Sprintf("invalid command %s", cmd)) - } - if err != nil { - log.Fatalf("failed to %s %s: %v", cmd, svcName, err) - } - return -} diff --git a/vendor/golang.org/x/sys/windows/svc/example/manage.go b/vendor/golang.org/x/sys/windows/svc/example/manage.go deleted file mode 100644 index 782dbd9..0000000 --- a/vendor/golang.org/x/sys/windows/svc/example/manage.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package main - -import ( - "fmt" - "time" - - "golang.org/x/sys/windows/svc" - "golang.org/x/sys/windows/svc/mgr" -) - -func startService(name string) error { - m, err := mgr.Connect() - if err != nil { - return err - } - defer m.Disconnect() - s, err := m.OpenService(name) - if err != nil { - return fmt.Errorf("could not access service: %v", err) - } - defer s.Close() - err = s.Start("is", "manual-started") - if err != nil { - return fmt.Errorf("could not start service: %v", err) - } - return nil -} - -func controlService(name string, c svc.Cmd, to svc.State) error { - m, err := mgr.Connect() - if err != nil { - return err - } - defer m.Disconnect() - s, err := m.OpenService(name) - if err != nil { - return fmt.Errorf("could not access service: %v", err) - } - defer s.Close() - status, err := s.Control(c) - if err != nil { - return fmt.Errorf("could not send control=%d: %v", c, err) - } - timeout := time.Now().Add(10 * time.Second) - for status.State != to { - if timeout.Before(time.Now()) { - return fmt.Errorf("timeout waiting for service to go to state=%d", to) - } - time.Sleep(300 * time.Millisecond) - status, err = s.Query() - if err != nil { - return fmt.Errorf("could not retrieve service status: %v", err) - } - } - return nil -} diff --git a/vendor/golang.org/x/sys/windows/svc/example/service.go b/vendor/golang.org/x/sys/windows/svc/example/service.go deleted file mode 100644 index 237e809..0000000 --- a/vendor/golang.org/x/sys/windows/svc/example/service.go +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package main - -import ( - "fmt" - "time" - - "golang.org/x/sys/windows/svc" - "golang.org/x/sys/windows/svc/debug" - "golang.org/x/sys/windows/svc/eventlog" -) - -var elog debug.Log - -type myservice struct{} - -func (m *myservice) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<- svc.Status) (ssec bool, errno uint32) { - const cmdsAccepted = svc.AcceptStop | svc.AcceptShutdown | svc.AcceptPauseAndContinue - changes <- svc.Status{State: svc.StartPending} - fasttick := time.Tick(500 * time.Millisecond) - slowtick := time.Tick(2 * time.Second) - tick := fasttick - changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted} -loop: - for { - select { - case <-tick: - beep() - elog.Info(1, "beep") - case c := <-r: - switch c.Cmd { - case svc.Interrogate: - changes <- c.CurrentStatus - // Testing deadlock from https://code.google.com/p/winsvc/issues/detail?id=4 - time.Sleep(100 * time.Millisecond) - changes <- c.CurrentStatus - case svc.Stop, svc.Shutdown: - break loop - case svc.Pause: - changes <- svc.Status{State: svc.Paused, Accepts: cmdsAccepted} - tick = slowtick - case svc.Continue: - changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted} - tick = fasttick - default: - elog.Error(1, fmt.Sprintf("unexpected control request #%d", c)) - } - } - } - changes <- svc.Status{State: svc.StopPending} - return -} - -func runService(name string, isDebug bool) { - var err error - if isDebug { - elog = debug.New(name) - } else { - elog, err = eventlog.Open(name) - if err != nil { - return - } - } - defer elog.Close() - - elog.Info(1, fmt.Sprintf("starting %s service", name)) - run := svc.Run - if isDebug { - run = debug.Run - } - err = run(name, &myservice{}) - if err != nil { - elog.Error(1, fmt.Sprintf("%s service failed: %v", name, err)) - return - } - elog.Info(1, fmt.Sprintf("%s service stopped", name)) -} diff --git a/vendor/golang.org/x/sys/windows/svc/go12.c b/vendor/golang.org/x/sys/windows/svc/go12.c deleted file mode 100644 index 6f1be1f..0000000 --- a/vendor/golang.org/x/sys/windows/svc/go12.c +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows -// +build !go1.3 - -// copied from pkg/runtime -typedef unsigned int uint32; -typedef unsigned long long int uint64; -#ifdef _64BIT -typedef uint64 uintptr; -#else -typedef uint32 uintptr; -#endif - -// from sys_386.s or sys_amd64.s -void ·servicemain(void); - -void -·getServiceMain(uintptr *r) -{ - *r = (uintptr)·servicemain; -} diff --git a/vendor/golang.org/x/sys/windows/svc/go12.go b/vendor/golang.org/x/sys/windows/svc/go12.go deleted file mode 100644 index 6f0a924..0000000 --- a/vendor/golang.org/x/sys/windows/svc/go12.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows -// +build !go1.3 - -package svc - -// from go12.c -func getServiceMain(r *uintptr) diff --git a/vendor/golang.org/x/sys/windows/svc/go13.go b/vendor/golang.org/x/sys/windows/svc/go13.go deleted file mode 100644 index 432a9e7..0000000 --- a/vendor/golang.org/x/sys/windows/svc/go13.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows -// +build go1.3 - -package svc - -import "unsafe" - -const ptrSize = 4 << (^uintptr(0) >> 63) // unsafe.Sizeof(uintptr(0)) but an ideal const - -// Should be a built-in for unsafe.Pointer? -func add(p unsafe.Pointer, x uintptr) unsafe.Pointer { - return unsafe.Pointer(uintptr(p) + x) -} - -// funcPC returns the entry PC of the function f. -// It assumes that f is a func value. Otherwise the behavior is undefined. -func funcPC(f interface{}) uintptr { - return **(**uintptr)(add(unsafe.Pointer(&f), ptrSize)) -} - -// from sys_386.s and sys_amd64.s -func servicectlhandler(ctl uint32) uintptr -func servicemain(argc uint32, argv **uint16) - -func getServiceMain(r *uintptr) { - *r = funcPC(servicemain) -} diff --git a/vendor/golang.org/x/sys/windows/svc/mgr/config.go b/vendor/golang.org/x/sys/windows/svc/mgr/config.go deleted file mode 100644 index 0a6edba..0000000 --- a/vendor/golang.org/x/sys/windows/svc/mgr/config.go +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package mgr - -import ( - "syscall" - "unicode/utf16" - "unsafe" - - "golang.org/x/sys/windows" -) - -const ( - // Service start types. - StartManual = windows.SERVICE_DEMAND_START // the service must be started manually - StartAutomatic = windows.SERVICE_AUTO_START // the service will start by itself whenever the computer reboots - StartDisabled = windows.SERVICE_DISABLED // the service cannot be started - - // The severity of the error, and action taken, - // if this service fails to start. - ErrorCritical = windows.SERVICE_ERROR_CRITICAL - ErrorIgnore = windows.SERVICE_ERROR_IGNORE - ErrorNormal = windows.SERVICE_ERROR_NORMAL - ErrorSevere = windows.SERVICE_ERROR_SEVERE -) - -// TODO(brainman): Password is not returned by windows.QueryServiceConfig, not sure how to get it. - -type Config struct { - ServiceType uint32 - StartType uint32 - ErrorControl uint32 - BinaryPathName string // fully qualified path to the service binary file, can also include arguments for an auto-start service - LoadOrderGroup string - TagId uint32 - Dependencies []string - ServiceStartName string // name of the account under which the service should run - DisplayName string - Password string - Description string -} - -func toString(p *uint16) string { - if p == nil { - return "" - } - return syscall.UTF16ToString((*[4096]uint16)(unsafe.Pointer(p))[:]) -} - -func toStringSlice(ps *uint16) []string { - if ps == nil { - return nil - } - r := make([]string, 0) - for from, i, p := 0, 0, (*[1 << 24]uint16)(unsafe.Pointer(ps)); true; i++ { - if p[i] == 0 { - // empty string marks the end - if i <= from { - break - } - r = append(r, string(utf16.Decode(p[from:i]))) - from = i + 1 - } - } - return r -} - -// Config retrieves service s configuration paramteres. -func (s *Service) Config() (Config, error) { - var p *windows.QUERY_SERVICE_CONFIG - n := uint32(1024) - for { - b := make([]byte, n) - p = (*windows.QUERY_SERVICE_CONFIG)(unsafe.Pointer(&b[0])) - err := windows.QueryServiceConfig(s.Handle, p, n, &n) - if err == nil { - break - } - if err.(syscall.Errno) != syscall.ERROR_INSUFFICIENT_BUFFER { - return Config{}, err - } - if n <= uint32(len(b)) { - return Config{}, err - } - } - - var p2 *windows.SERVICE_DESCRIPTION - n = uint32(1024) - for { - b := make([]byte, n) - p2 = (*windows.SERVICE_DESCRIPTION)(unsafe.Pointer(&b[0])) - err := windows.QueryServiceConfig2(s.Handle, - windows.SERVICE_CONFIG_DESCRIPTION, &b[0], n, &n) - if err == nil { - break - } - if err.(syscall.Errno) != syscall.ERROR_INSUFFICIENT_BUFFER { - return Config{}, err - } - if n <= uint32(len(b)) { - return Config{}, err - } - } - - return Config{ - ServiceType: p.ServiceType, - StartType: p.StartType, - ErrorControl: p.ErrorControl, - BinaryPathName: toString(p.BinaryPathName), - LoadOrderGroup: toString(p.LoadOrderGroup), - TagId: p.TagId, - Dependencies: toStringSlice(p.Dependencies), - ServiceStartName: toString(p.ServiceStartName), - DisplayName: toString(p.DisplayName), - Description: toString(p2.Description), - }, nil -} - -func updateDescription(handle windows.Handle, desc string) error { - d := windows.SERVICE_DESCRIPTION{toPtr(desc)} - return windows.ChangeServiceConfig2(handle, - windows.SERVICE_CONFIG_DESCRIPTION, (*byte)(unsafe.Pointer(&d))) -} - -// UpdateConfig updates service s configuration parameters. -func (s *Service) UpdateConfig(c Config) error { - err := windows.ChangeServiceConfig(s.Handle, c.ServiceType, c.StartType, - c.ErrorControl, toPtr(c.BinaryPathName), toPtr(c.LoadOrderGroup), - nil, toStringBlock(c.Dependencies), toPtr(c.ServiceStartName), - toPtr(c.Password), toPtr(c.DisplayName)) - if err != nil { - return err - } - return updateDescription(s.Handle, c.Description) -} diff --git a/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go b/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go deleted file mode 100644 index da8ceb6..0000000 --- a/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -// Package mgr can be used to manage Windows service programs. -// It can be used to install and remove them. It can also start, -// stop and pause them. The package can query / change current -// service state and config parameters. -// -package mgr - -import ( - "syscall" - "unicode/utf16" - - "golang.org/x/sys/windows" -) - -// Mgr is used to manage Windows service. -type Mgr struct { - Handle windows.Handle -} - -// Connect establishes a connection to the service control manager. -func Connect() (*Mgr, error) { - return ConnectRemote("") -} - -// ConnectRemote establishes a connection to the -// service control manager on computer named host. -func ConnectRemote(host string) (*Mgr, error) { - var s *uint16 - if host != "" { - s = syscall.StringToUTF16Ptr(host) - } - h, err := windows.OpenSCManager(s, nil, windows.SC_MANAGER_ALL_ACCESS) - if err != nil { - return nil, err - } - return &Mgr{Handle: h}, nil -} - -// Disconnect closes connection to the service control manager m. -func (m *Mgr) Disconnect() error { - return windows.CloseServiceHandle(m.Handle) -} - -func toPtr(s string) *uint16 { - if len(s) == 0 { - return nil - } - return syscall.StringToUTF16Ptr(s) -} - -// toStringBlock terminates strings in ss with 0, and then -// concatenates them together. It also adds extra 0 at the end. -func toStringBlock(ss []string) *uint16 { - if len(ss) == 0 { - return nil - } - t := "" - for _, s := range ss { - if s != "" { - t += s + "\x00" - } - } - if t == "" { - return nil - } - t += "\x00" - return &utf16.Encode([]rune(t))[0] -} - -// CreateService installs new service name on the system. -// The service will be executed by running exepath binary. -// Use config c to specify service parameters. -// If service StartType is set to StartAutomatic, -// args will be passed to svc.Handle.Execute. -func (m *Mgr) CreateService(name, exepath string, c Config, args ...string) (*Service, error) { - if c.StartType == 0 { - c.StartType = StartManual - } - if c.ErrorControl == 0 { - c.ErrorControl = ErrorNormal - } - if c.ServiceType == 0 { - c.ServiceType = windows.SERVICE_WIN32_OWN_PROCESS - } - s := syscall.EscapeArg(exepath) - for _, v := range args { - s += " " + syscall.EscapeArg(v) - } - h, err := windows.CreateService(m.Handle, toPtr(name), toPtr(c.DisplayName), - windows.SERVICE_ALL_ACCESS, c.ServiceType, - c.StartType, c.ErrorControl, toPtr(s), toPtr(c.LoadOrderGroup), - nil, toStringBlock(c.Dependencies), toPtr(c.ServiceStartName), toPtr(c.Password)) - if err != nil { - return nil, err - } - if c.Description != "" { - err = updateDescription(h, c.Description) - if err != nil { - return nil, err - } - } - return &Service{Name: name, Handle: h}, nil -} - -// OpenService retrieves access to service name, so it can -// be interrogated and controlled. -func (m *Mgr) OpenService(name string) (*Service, error) { - h, err := windows.OpenService(m.Handle, syscall.StringToUTF16Ptr(name), windows.SERVICE_ALL_ACCESS) - if err != nil { - return nil, err - } - return &Service{Name: name, Handle: h}, nil -} diff --git a/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go b/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go deleted file mode 100644 index 78be970..0000000 --- a/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package mgr_test - -import ( - "os" - "path/filepath" - "sort" - "strings" - "syscall" - "testing" - "time" - - "golang.org/x/sys/windows/svc/mgr" -) - -func TestOpenLanManServer(t *testing.T) { - m, err := mgr.Connect() - if err != nil { - if errno, ok := err.(syscall.Errno); ok && errno == syscall.ERROR_ACCESS_DENIED { - t.Skip("Skipping test: we don't have rights to manage services.") - } - t.Fatalf("SCM connection failed: %s", err) - } - defer m.Disconnect() - - s, err := m.OpenService("LanmanServer") - if err != nil { - t.Fatalf("OpenService(lanmanserver) failed: %s", err) - } - defer s.Close() - - _, err = s.Config() - if err != nil { - t.Fatalf("Config failed: %s", err) - } -} - -func install(t *testing.T, m *mgr.Mgr, name, exepath string, c mgr.Config) { - // Sometimes it takes a while for the service to get - // removed after previous test run. - for i := 0; ; i++ { - s, err := m.OpenService(name) - if err != nil { - break - } - s.Close() - - if i > 10 { - t.Fatalf("service %s already exists", name) - } - time.Sleep(300 * time.Millisecond) - } - - s, err := m.CreateService(name, exepath, c) - if err != nil { - t.Fatalf("CreateService(%s) failed: %v", name, err) - } - defer s.Close() -} - -func depString(d []string) string { - if len(d) == 0 { - return "" - } - for i := range d { - d[i] = strings.ToLower(d[i]) - } - ss := sort.StringSlice(d) - ss.Sort() - return strings.Join([]string(ss), " ") -} - -func testConfig(t *testing.T, s *mgr.Service, should mgr.Config) mgr.Config { - is, err := s.Config() - if err != nil { - t.Fatalf("Config failed: %s", err) - } - if should.DisplayName != is.DisplayName { - t.Fatalf("config mismatch: DisplayName is %q, but should have %q", is.DisplayName, should.DisplayName) - } - if should.StartType != is.StartType { - t.Fatalf("config mismatch: StartType is %v, but should have %v", is.StartType, should.StartType) - } - if should.Description != is.Description { - t.Fatalf("config mismatch: Description is %q, but should have %q", is.Description, should.Description) - } - if depString(should.Dependencies) != depString(is.Dependencies) { - t.Fatalf("config mismatch: Dependencies is %v, but should have %v", is.Dependencies, should.Dependencies) - } - return is -} - -func remove(t *testing.T, s *mgr.Service) { - err := s.Delete() - if err != nil { - t.Fatalf("Delete failed: %s", err) - } -} - -func TestMyService(t *testing.T) { - if testing.Short() { - t.Skip("skipping test in short mode - it modifies system services") - } - - const name = "myservice" - - m, err := mgr.Connect() - if err != nil { - if errno, ok := err.(syscall.Errno); ok && errno == syscall.ERROR_ACCESS_DENIED { - t.Skip("Skipping test: we don't have rights to manage services.") - } - t.Fatalf("SCM connection failed: %s", err) - } - defer m.Disconnect() - - c := mgr.Config{ - StartType: mgr.StartDisabled, - DisplayName: "my service", - Description: "my service is just a test", - Dependencies: []string{"LanmanServer", "W32Time"}, - } - - exename := os.Args[0] - exepath, err := filepath.Abs(exename) - if err != nil { - t.Fatalf("filepath.Abs(%s) failed: %s", exename, err) - } - - install(t, m, name, exepath, c) - - s, err := m.OpenService(name) - if err != nil { - t.Fatalf("service %s is not installed", name) - } - defer s.Close() - - c.BinaryPathName = exepath - c = testConfig(t, s, c) - - c.StartType = mgr.StartManual - err = s.UpdateConfig(c) - if err != nil { - t.Fatalf("UpdateConfig failed: %v", err) - } - - testConfig(t, s, c) - - remove(t, s) -} diff --git a/vendor/golang.org/x/sys/windows/svc/mgr/service.go b/vendor/golang.org/x/sys/windows/svc/mgr/service.go deleted file mode 100644 index 465f3c3..0000000 --- a/vendor/golang.org/x/sys/windows/svc/mgr/service.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package mgr - -import ( - "syscall" - - "golang.org/x/sys/windows" - "golang.org/x/sys/windows/svc" -) - -// TODO(brainman): Use EnumDependentServices to enumerate dependent services. - -// TODO(brainman): Use EnumServicesStatus to enumerate services in the specified service control manager database. - -// Service is used to access Windows service. -type Service struct { - Name string - Handle windows.Handle -} - -// Delete marks service s for deletion from the service control manager database. -func (s *Service) Delete() error { - return windows.DeleteService(s.Handle) -} - -// Close relinquish access to the service s. -func (s *Service) Close() error { - return windows.CloseServiceHandle(s.Handle) -} - -// Start starts service s. -// args will be passed to svc.Handler.Execute. -func (s *Service) Start(args ...string) error { - var p **uint16 - if len(args) > 0 { - vs := make([]*uint16, len(args)) - for i, _ := range vs { - vs[i] = syscall.StringToUTF16Ptr(args[i]) - } - p = &vs[0] - } - return windows.StartService(s.Handle, uint32(len(args)), p) -} - -// Control sends state change request c to the servce s. -func (s *Service) Control(c svc.Cmd) (svc.Status, error) { - var t windows.SERVICE_STATUS - err := windows.ControlService(s.Handle, uint32(c), &t) - if err != nil { - return svc.Status{}, err - } - return svc.Status{ - State: svc.State(t.CurrentState), - Accepts: svc.Accepted(t.ControlsAccepted), - }, nil -} - -// Query returns current status of service s. -func (s *Service) Query() (svc.Status, error) { - var t windows.SERVICE_STATUS - err := windows.QueryServiceStatus(s.Handle, &t) - if err != nil { - return svc.Status{}, err - } - return svc.Status{ - State: svc.State(t.CurrentState), - Accepts: svc.Accepted(t.ControlsAccepted), - }, nil -} diff --git a/vendor/golang.org/x/sys/windows/svc/security.go b/vendor/golang.org/x/sys/windows/svc/security.go deleted file mode 100644 index 6fbc923..0000000 --- a/vendor/golang.org/x/sys/windows/svc/security.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package svc - -import ( - "unsafe" - - "golang.org/x/sys/windows" -) - -func allocSid(subAuth0 uint32) (*windows.SID, error) { - var sid *windows.SID - err := windows.AllocateAndInitializeSid(&windows.SECURITY_NT_AUTHORITY, - 1, subAuth0, 0, 0, 0, 0, 0, 0, 0, &sid) - if err != nil { - return nil, err - } - return sid, nil -} - -// IsAnInteractiveSession determines if calling process is running interactively. -// It queries the process token for membership in the Interactive group. -// http://stackoverflow.com/questions/2668851/how-do-i-detect-that-my-application-is-running-as-service-or-in-an-interactive-s -func IsAnInteractiveSession() (bool, error) { - interSid, err := allocSid(windows.SECURITY_INTERACTIVE_RID) - if err != nil { - return false, err - } - defer windows.FreeSid(interSid) - - serviceSid, err := allocSid(windows.SECURITY_SERVICE_RID) - if err != nil { - return false, err - } - defer windows.FreeSid(serviceSid) - - t, err := windows.OpenCurrentProcessToken() - if err != nil { - return false, err - } - defer t.Close() - - gs, err := t.GetTokenGroups() - if err != nil { - return false, err - } - p := unsafe.Pointer(&gs.Groups[0]) - groups := (*[2 << 20]windows.SIDAndAttributes)(p)[:gs.GroupCount] - for _, g := range groups { - if windows.EqualSid(g.Sid, interSid) { - return true, nil - } - if windows.EqualSid(g.Sid, serviceSid) { - return false, nil - } - } - return false, nil -} diff --git a/vendor/golang.org/x/sys/windows/svc/service.go b/vendor/golang.org/x/sys/windows/svc/service.go deleted file mode 100644 index 9864f7a..0000000 --- a/vendor/golang.org/x/sys/windows/svc/service.go +++ /dev/null @@ -1,316 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -// Package svc provides everything required to build Windows service. -// -package svc - -import ( - "errors" - "runtime" - "syscall" - "unsafe" - - "golang.org/x/sys/windows" -) - -// State describes service execution state (Stopped, Running and so on). -type State uint32 - -const ( - Stopped = State(windows.SERVICE_STOPPED) - StartPending = State(windows.SERVICE_START_PENDING) - StopPending = State(windows.SERVICE_STOP_PENDING) - Running = State(windows.SERVICE_RUNNING) - ContinuePending = State(windows.SERVICE_CONTINUE_PENDING) - PausePending = State(windows.SERVICE_PAUSE_PENDING) - Paused = State(windows.SERVICE_PAUSED) -) - -// Cmd represents service state change request. It is sent to a service -// by the service manager, and should be actioned upon by the service. -type Cmd uint32 - -const ( - Stop = Cmd(windows.SERVICE_CONTROL_STOP) - Pause = Cmd(windows.SERVICE_CONTROL_PAUSE) - Continue = Cmd(windows.SERVICE_CONTROL_CONTINUE) - Interrogate = Cmd(windows.SERVICE_CONTROL_INTERROGATE) - Shutdown = Cmd(windows.SERVICE_CONTROL_SHUTDOWN) -) - -// Accepted is used to describe commands accepted by the service. -// Note that Interrogate is always accepted. -type Accepted uint32 - -const ( - AcceptStop = Accepted(windows.SERVICE_ACCEPT_STOP) - AcceptShutdown = Accepted(windows.SERVICE_ACCEPT_SHUTDOWN) - AcceptPauseAndContinue = Accepted(windows.SERVICE_ACCEPT_PAUSE_CONTINUE) -) - -// Status combines State and Accepted commands to fully describe running service. -type Status struct { - State State - Accepts Accepted - CheckPoint uint32 // used to report progress during a lengthy operation - WaitHint uint32 // estimated time required for a pending operation, in milliseconds -} - -// ChangeRequest is sent to the service Handler to request service status change. -type ChangeRequest struct { - Cmd Cmd - CurrentStatus Status -} - -// Handler is the interface that must be implemented to build Windows service. -type Handler interface { - - // Execute will be called by the package code at the start of - // the service, and the service will exit once Execute completes. - // Inside Execute you must read service change requests from r and - // act accordingly. You must keep service control manager up to date - // about state of your service by writing into s as required. - // args contains service name followed by argument strings passed - // to the service. - // You can provide service exit code in exitCode return parameter, - // with 0 being "no error". You can also indicate if exit code, - // if any, is service specific or not by using svcSpecificEC - // parameter. - Execute(args []string, r <-chan ChangeRequest, s chan<- Status) (svcSpecificEC bool, exitCode uint32) -} - -var ( - // These are used by asm code. - goWaitsH uintptr - cWaitsH uintptr - ssHandle uintptr - sName *uint16 - sArgc uintptr - sArgv **uint16 - ctlHandlerProc uintptr - cSetEvent uintptr - cWaitForSingleObject uintptr - cRegisterServiceCtrlHandlerW uintptr -) - -func init() { - k := syscall.MustLoadDLL("kernel32.dll") - cSetEvent = k.MustFindProc("SetEvent").Addr() - cWaitForSingleObject = k.MustFindProc("WaitForSingleObject").Addr() - a := syscall.MustLoadDLL("advapi32.dll") - cRegisterServiceCtrlHandlerW = a.MustFindProc("RegisterServiceCtrlHandlerW").Addr() -} - -type ctlEvent struct { - cmd Cmd - errno uint32 -} - -// service provides access to windows service api. -type service struct { - name string - h windows.Handle - cWaits *event - goWaits *event - c chan ctlEvent - handler Handler -} - -func newService(name string, handler Handler) (*service, error) { - var s service - var err error - s.name = name - s.c = make(chan ctlEvent) - s.handler = handler - s.cWaits, err = newEvent() - if err != nil { - return nil, err - } - s.goWaits, err = newEvent() - if err != nil { - s.cWaits.Close() - return nil, err - } - return &s, nil -} - -func (s *service) close() error { - s.cWaits.Close() - s.goWaits.Close() - return nil -} - -type exitCode struct { - isSvcSpecific bool - errno uint32 -} - -func (s *service) updateStatus(status *Status, ec *exitCode) error { - if s.h == 0 { - return errors.New("updateStatus with no service status handle") - } - var t windows.SERVICE_STATUS - t.ServiceType = windows.SERVICE_WIN32_OWN_PROCESS - t.CurrentState = uint32(status.State) - if status.Accepts&AcceptStop != 0 { - t.ControlsAccepted |= windows.SERVICE_ACCEPT_STOP - } - if status.Accepts&AcceptShutdown != 0 { - t.ControlsAccepted |= windows.SERVICE_ACCEPT_SHUTDOWN - } - if status.Accepts&AcceptPauseAndContinue != 0 { - t.ControlsAccepted |= windows.SERVICE_ACCEPT_PAUSE_CONTINUE - } - if ec.errno == 0 { - t.Win32ExitCode = windows.NO_ERROR - t.ServiceSpecificExitCode = windows.NO_ERROR - } else if ec.isSvcSpecific { - t.Win32ExitCode = uint32(windows.ERROR_SERVICE_SPECIFIC_ERROR) - t.ServiceSpecificExitCode = ec.errno - } else { - t.Win32ExitCode = ec.errno - t.ServiceSpecificExitCode = windows.NO_ERROR - } - t.CheckPoint = status.CheckPoint - t.WaitHint = status.WaitHint - return windows.SetServiceStatus(s.h, &t) -} - -const ( - sysErrSetServiceStatusFailed = uint32(syscall.APPLICATION_ERROR) + iota - sysErrNewThreadInCallback -) - -func (s *service) run() { - s.goWaits.Wait() - s.h = windows.Handle(ssHandle) - argv := (*[100]*int16)(unsafe.Pointer(sArgv))[:sArgc] - args := make([]string, len(argv)) - for i, a := range argv { - args[i] = syscall.UTF16ToString((*[1 << 20]uint16)(unsafe.Pointer(a))[:]) - } - - cmdsToHandler := make(chan ChangeRequest) - changesFromHandler := make(chan Status) - exitFromHandler := make(chan exitCode) - - go func() { - ss, errno := s.handler.Execute(args, cmdsToHandler, changesFromHandler) - exitFromHandler <- exitCode{ss, errno} - }() - - status := Status{State: Stopped} - ec := exitCode{isSvcSpecific: true, errno: 0} - var outch chan ChangeRequest - inch := s.c - var cmd Cmd -loop: - for { - select { - case r := <-inch: - if r.errno != 0 { - ec.errno = r.errno - break loop - } - inch = nil - outch = cmdsToHandler - cmd = r.cmd - case outch <- ChangeRequest{cmd, status}: - inch = s.c - outch = nil - case c := <-changesFromHandler: - err := s.updateStatus(&c, &ec) - if err != nil { - // best suitable error number - ec.errno = sysErrSetServiceStatusFailed - if err2, ok := err.(syscall.Errno); ok { - ec.errno = uint32(err2) - } - break loop - } - status = c - case ec = <-exitFromHandler: - break loop - } - } - - s.updateStatus(&Status{State: Stopped}, &ec) - s.cWaits.Set() -} - -func newCallback(fn interface{}) (cb uintptr, err error) { - defer func() { - r := recover() - if r == nil { - return - } - cb = 0 - switch v := r.(type) { - case string: - err = errors.New(v) - case error: - err = v - default: - err = errors.New("unexpected panic in syscall.NewCallback") - } - }() - return syscall.NewCallback(fn), nil -} - -// BUG(brainman): There is no mechanism to run multiple services -// inside one single executable. Perhaps, it can be overcome by -// using RegisterServiceCtrlHandlerEx Windows api. - -// Run executes service name by calling appropriate handler function. -func Run(name string, handler Handler) error { - runtime.LockOSThread() - - tid := windows.GetCurrentThreadId() - - s, err := newService(name, handler) - if err != nil { - return err - } - - ctlHandler := func(ctl uint32) uintptr { - e := ctlEvent{cmd: Cmd(ctl)} - // We assume that this callback function is running on - // the same thread as Run. Nowhere in MS documentation - // I could find statement to guarantee that. So putting - // check here to verify, otherwise things will go bad - // quickly, if ignored. - i := windows.GetCurrentThreadId() - if i != tid { - e.errno = sysErrNewThreadInCallback - } - s.c <- e - return 0 - } - - var svcmain uintptr - getServiceMain(&svcmain) - t := []windows.SERVICE_TABLE_ENTRY{ - {syscall.StringToUTF16Ptr(s.name), svcmain}, - {nil, 0}, - } - - goWaitsH = uintptr(s.goWaits.h) - cWaitsH = uintptr(s.cWaits.h) - sName = t[0].ServiceName - ctlHandlerProc, err = newCallback(ctlHandler) - if err != nil { - return err - } - - go s.run() - - err = windows.StartServiceCtrlDispatcher(&t[0]) - if err != nil { - return err - } - return nil -} diff --git a/vendor/golang.org/x/sys/windows/svc/svc_test.go b/vendor/golang.org/x/sys/windows/svc/svc_test.go deleted file mode 100644 index 764da54..0000000 --- a/vendor/golang.org/x/sys/windows/svc/svc_test.go +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package svc_test - -import ( - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "testing" - "time" - - "golang.org/x/sys/windows/svc" - "golang.org/x/sys/windows/svc/mgr" -) - -func getState(t *testing.T, s *mgr.Service) svc.State { - status, err := s.Query() - if err != nil { - t.Fatalf("Query(%s) failed: %s", s.Name, err) - } - return status.State -} - -func testState(t *testing.T, s *mgr.Service, want svc.State) { - have := getState(t, s) - if have != want { - t.Fatalf("%s state is=%d want=%d", s.Name, have, want) - } -} - -func waitState(t *testing.T, s *mgr.Service, want svc.State) { - for i := 0; ; i++ { - have := getState(t, s) - if have == want { - return - } - if i > 10 { - t.Fatalf("%s state is=%d, waiting timeout", s.Name, have) - } - time.Sleep(300 * time.Millisecond) - } -} - -func TestExample(t *testing.T) { - if testing.Short() { - t.Skip("skipping test in short mode - it modifies system services") - } - - const name = "myservice" - - m, err := mgr.Connect() - if err != nil { - t.Fatalf("SCM connection failed: %s", err) - } - defer m.Disconnect() - - dir, err := ioutil.TempDir("", "svc") - if err != nil { - t.Fatalf("failed to create temp directory: %v", err) - } - defer os.RemoveAll(dir) - - exepath := filepath.Join(dir, "a.exe") - o, err := exec.Command("go", "build", "-o", exepath, "golang.org/x/sys/windows/svc/example").CombinedOutput() - if err != nil { - t.Fatalf("failed to build service program: %v\n%v", err, string(o)) - } - - s, err := m.OpenService(name) - if err == nil { - err = s.Delete() - if err != nil { - s.Close() - t.Fatalf("Delete failed: %s", err) - } - s.Close() - } - s, err = m.CreateService(name, exepath, mgr.Config{DisplayName: "my service"}, "is", "auto-started") - if err != nil { - t.Fatalf("CreateService(%s) failed: %v", name, err) - } - defer s.Close() - - testState(t, s, svc.Stopped) - err = s.Start("is", "manual-started") - if err != nil { - t.Fatalf("Start(%s) failed: %s", s.Name, err) - } - waitState(t, s, svc.Running) - time.Sleep(1 * time.Second) - - // testing deadlock from issues 4. - _, err = s.Control(svc.Interrogate) - if err != nil { - t.Fatalf("Control(%s) failed: %s", s.Name, err) - } - _, err = s.Control(svc.Interrogate) - if err != nil { - t.Fatalf("Control(%s) failed: %s", s.Name, err) - } - time.Sleep(1 * time.Second) - - _, err = s.Control(svc.Stop) - if err != nil { - t.Fatalf("Control(%s) failed: %s", s.Name, err) - } - waitState(t, s, svc.Stopped) - - err = s.Delete() - if err != nil { - t.Fatalf("Delete failed: %s", err) - } -} diff --git a/vendor/golang.org/x/sys/windows/svc/sys_386.s b/vendor/golang.org/x/sys/windows/svc/sys_386.s deleted file mode 100644 index 5e11bfa..0000000 --- a/vendor/golang.org/x/sys/windows/svc/sys_386.s +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -// func servicemain(argc uint32, argv **uint16) -TEXT ·servicemain(SB),7,$0 - MOVL argc+0(FP), AX - MOVL AX, ·sArgc(SB) - MOVL argv+4(FP), AX - MOVL AX, ·sArgv(SB) - - PUSHL BP - PUSHL BX - PUSHL SI - PUSHL DI - - SUBL $12, SP - - MOVL ·sName(SB), AX - MOVL AX, (SP) - MOVL $·servicectlhandler(SB), AX - MOVL AX, 4(SP) - MOVL ·cRegisterServiceCtrlHandlerW(SB), AX - MOVL SP, BP - CALL AX - MOVL BP, SP - CMPL AX, $0 - JE exit - MOVL AX, ·ssHandle(SB) - - MOVL ·goWaitsH(SB), AX - MOVL AX, (SP) - MOVL ·cSetEvent(SB), AX - MOVL SP, BP - CALL AX - MOVL BP, SP - - MOVL ·cWaitsH(SB), AX - MOVL AX, (SP) - MOVL $-1, AX - MOVL AX, 4(SP) - MOVL ·cWaitForSingleObject(SB), AX - MOVL SP, BP - CALL AX - MOVL BP, SP - -exit: - ADDL $12, SP - - POPL DI - POPL SI - POPL BX - POPL BP - - MOVL 0(SP), CX - ADDL $12, SP - JMP CX - -// I do not know why, but this seems to be the only way to call -// ctlHandlerProc on Windows 7. - -// func servicectlhandler(ctl uint32) uintptr -TEXT ·servicectlhandler(SB),7,$0 - MOVL ·ctlHandlerProc(SB), CX - JMP CX diff --git a/vendor/golang.org/x/sys/windows/svc/sys_amd64.s b/vendor/golang.org/x/sys/windows/svc/sys_amd64.s deleted file mode 100644 index 87dbec8..0000000 --- a/vendor/golang.org/x/sys/windows/svc/sys_amd64.s +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -// func servicemain(argc uint32, argv **uint16) -TEXT ·servicemain(SB),7,$0 - MOVL CX, ·sArgc(SB) - MOVL DX, ·sArgv(SB) - - SUBQ $32, SP // stack for the first 4 syscall params - - MOVQ ·sName(SB), CX - MOVQ $·servicectlhandler(SB), DX - MOVQ ·cRegisterServiceCtrlHandlerW(SB), AX - CALL AX - CMPQ AX, $0 - JE exit - MOVQ AX, ·ssHandle(SB) - - MOVQ ·goWaitsH(SB), CX - MOVQ ·cSetEvent(SB), AX - CALL AX - - MOVQ ·cWaitsH(SB), CX - MOVQ $4294967295, DX - MOVQ ·cWaitForSingleObject(SB), AX - CALL AX - -exit: - ADDQ $32, SP - RET - -// I do not know why, but this seems to be the only way to call -// ctlHandlerProc on Windows 7. - -// func servicectlhandler(ctl uint32) uintptr -TEXT ·servicectlhandler(SB),7,$0 - MOVQ ·ctlHandlerProc(SB), AX - JMP AX diff --git a/vendor/golang.org/x/sys/windows/syscall.go b/vendor/golang.org/x/sys/windows/syscall.go deleted file mode 100644 index 4e2fbe8..0000000 --- a/vendor/golang.org/x/sys/windows/syscall.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -// Package windows contains an interface to the low-level operating system -// primitives. OS details vary depending on the underlying system, and -// by default, godoc will display the OS-specific documentation for the current -// system. If you want godoc to display syscall documentation for another -// system, set $GOOS and $GOARCH to the desired system. For example, if -// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS -// to freebsd and $GOARCH to arm. -// The primary use of this package is inside other packages that provide a more -// portable interface to the system, such as "os", "time" and "net". Use -// those packages rather than this one if you can. -// For details of the functions and data types in this package consult -// the manuals for the appropriate operating system. -// These calls return err == nil to indicate success; otherwise -// err represents an operating system error describing the failure and -// holds a value of type syscall.Errno. -package windows // import "golang.org/x/sys/windows" - -import ( - "syscall" -) - -// ByteSliceFromString returns a NUL-terminated slice of bytes -// containing the text of s. If s contains a NUL byte at any -// location, it returns (nil, syscall.EINVAL). -func ByteSliceFromString(s string) ([]byte, error) { - for i := 0; i < len(s); i++ { - if s[i] == 0 { - return nil, syscall.EINVAL - } - } - a := make([]byte, len(s)+1) - copy(a, s) - return a, nil -} - -// BytePtrFromString returns a pointer to a NUL-terminated array of -// bytes containing the text of s. If s contains a NUL byte at any -// location, it returns (nil, syscall.EINVAL). -func BytePtrFromString(s string) (*byte, error) { - a, err := ByteSliceFromString(s) - if err != nil { - return nil, err - } - return &a[0], nil -} - -// Single-word zero for use when we need a valid pointer to 0 bytes. -// See mksyscall.pl. -var _zero uintptr - -func (ts *Timespec) Unix() (sec int64, nsec int64) { - return int64(ts.Sec), int64(ts.Nsec) -} - -func (tv *Timeval) Unix() (sec int64, nsec int64) { - return int64(tv.Sec), int64(tv.Usec) * 1000 -} - -func (ts *Timespec) Nano() int64 { - return int64(ts.Sec)*1e9 + int64(ts.Nsec) -} - -func (tv *Timeval) Nano() int64 { - return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 -} diff --git a/vendor/golang.org/x/sys/windows/syscall_test.go b/vendor/golang.org/x/sys/windows/syscall_test.go deleted file mode 100644 index 62588b9..0000000 --- a/vendor/golang.org/x/sys/windows/syscall_test.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -package windows_test - -import ( - "testing" - - "golang.org/x/sys/windows" -) - -func testSetGetenv(t *testing.T, key, value string) { - err := windows.Setenv(key, value) - if err != nil { - t.Fatalf("Setenv failed to set %q: %v", value, err) - } - newvalue, found := windows.Getenv(key) - if !found { - t.Fatalf("Getenv failed to find %v variable (want value %q)", key, value) - } - if newvalue != value { - t.Fatalf("Getenv(%v) = %q; want %q", key, newvalue, value) - } -} - -func TestEnv(t *testing.T) { - testSetGetenv(t, "TESTENV", "AVALUE") - // make sure TESTENV gets set to "", not deleted - testSetGetenv(t, "TESTENV", "") -} diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go deleted file mode 100644 index 99b11fe..0000000 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ /dev/null @@ -1,991 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Windows system calls. - -package windows - -import ( - errorspkg "errors" - "sync" - "syscall" - "unicode/utf16" - "unsafe" -) - -type Handle uintptr - -const InvalidHandle = ^Handle(0) - -// StringToUTF16 is deprecated. Use UTF16FromString instead. -// If s contains a NUL byte this function panics instead of -// returning an error. -func StringToUTF16(s string) []uint16 { - a, err := UTF16FromString(s) - if err != nil { - panic("windows: string with NUL passed to StringToUTF16") - } - return a -} - -// UTF16FromString returns the UTF-16 encoding of the UTF-8 string -// s, with a terminating NUL added. If s contains a NUL byte at any -// location, it returns (nil, syscall.EINVAL). -func UTF16FromString(s string) ([]uint16, error) { - for i := 0; i < len(s); i++ { - if s[i] == 0 { - return nil, syscall.EINVAL - } - } - return utf16.Encode([]rune(s + "\x00")), nil -} - -// UTF16ToString returns the UTF-8 encoding of the UTF-16 sequence s, -// with a terminating NUL removed. -func UTF16ToString(s []uint16) string { - for i, v := range s { - if v == 0 { - s = s[0:i] - break - } - } - return string(utf16.Decode(s)) -} - -// StringToUTF16Ptr is deprecated. Use UTF16PtrFromString instead. -// If s contains a NUL byte this function panics instead of -// returning an error. -func StringToUTF16Ptr(s string) *uint16 { return &StringToUTF16(s)[0] } - -// UTF16PtrFromString returns pointer to the UTF-16 encoding of -// the UTF-8 string s, with a terminating NUL added. If s -// contains a NUL byte at any location, it returns (nil, syscall.EINVAL). -func UTF16PtrFromString(s string) (*uint16, error) { - a, err := UTF16FromString(s) - if err != nil { - return nil, err - } - return &a[0], nil -} - -func Getpagesize() int { return 4096 } - -// Converts a Go function to a function pointer conforming -// to the stdcall or cdecl calling convention. This is useful when -// interoperating with Windows code requiring callbacks. -// Implemented in runtime/syscall_windows.goc -func NewCallback(fn interface{}) uintptr -func NewCallbackCDecl(fn interface{}) uintptr - -// windows api calls - -//sys GetLastError() (lasterr error) -//sys LoadLibrary(libname string) (handle Handle, err error) = LoadLibraryW -//sys LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, err error) = LoadLibraryExW -//sys FreeLibrary(handle Handle) (err error) -//sys GetProcAddress(module Handle, procname string) (proc uintptr, err error) -//sys GetVersion() (ver uint32, err error) -//sys FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) = FormatMessageW -//sys ExitProcess(exitcode uint32) -//sys CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile int32) (handle Handle, err error) [failretval==InvalidHandle] = CreateFileW -//sys ReadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) -//sys WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) -//sys SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) [failretval==0xffffffff] -//sys CloseHandle(handle Handle) (err error) -//sys GetStdHandle(stdhandle uint32) (handle Handle, err error) [failretval==InvalidHandle] -//sys SetStdHandle(stdhandle uint32, handle Handle) (err error) -//sys findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstFileW -//sys findNextFile1(handle Handle, data *win32finddata1) (err error) = FindNextFileW -//sys FindClose(handle Handle) (err error) -//sys GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error) -//sys GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) = GetCurrentDirectoryW -//sys SetCurrentDirectory(path *uint16) (err error) = SetCurrentDirectoryW -//sys CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) = CreateDirectoryW -//sys RemoveDirectory(path *uint16) (err error) = RemoveDirectoryW -//sys DeleteFile(path *uint16) (err error) = DeleteFileW -//sys MoveFile(from *uint16, to *uint16) (err error) = MoveFileW -//sys MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) = MoveFileExW -//sys GetComputerName(buf *uint16, n *uint32) (err error) = GetComputerNameW -//sys GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW -//sys SetEndOfFile(handle Handle) (err error) -//sys GetSystemTimeAsFileTime(time *Filetime) -//sys GetSystemTimePreciseAsFileTime(time *Filetime) -//sys GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) [failretval==0xffffffff] -//sys CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uint32, threadcnt uint32) (handle Handle, err error) -//sys GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uint32, overlapped **Overlapped, timeout uint32) (err error) -//sys PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uint32, overlapped *Overlapped) (err error) -//sys CancelIo(s Handle) (err error) -//sys CancelIoEx(s Handle, o *Overlapped) (err error) -//sys CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = CreateProcessW -//sys OpenProcess(da uint32, inheritHandle bool, pid uint32) (handle Handle, err error) -//sys TerminateProcess(handle Handle, exitcode uint32) (err error) -//sys GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) -//sys GetStartupInfo(startupInfo *StartupInfo) (err error) = GetStartupInfoW -//sys GetCurrentProcess() (pseudoHandle Handle, err error) -//sys GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) -//sys DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) -//sys WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) [failretval==0xffffffff] -//sys GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) = GetTempPathW -//sys CreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (err error) -//sys GetFileType(filehandle Handle) (n uint32, err error) -//sys CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) = advapi32.CryptAcquireContextW -//sys CryptReleaseContext(provhandle Handle, flags uint32) (err error) = advapi32.CryptReleaseContext -//sys CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) = advapi32.CryptGenRandom -//sys GetEnvironmentStrings() (envs *uint16, err error) [failretval==nil] = kernel32.GetEnvironmentStringsW -//sys FreeEnvironmentStrings(envs *uint16) (err error) = kernel32.FreeEnvironmentStringsW -//sys GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) = kernel32.GetEnvironmentVariableW -//sys SetEnvironmentVariable(name *uint16, value *uint16) (err error) = kernel32.SetEnvironmentVariableW -//sys SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) -//sys GetFileAttributes(name *uint16) (attrs uint32, err error) [failretval==INVALID_FILE_ATTRIBUTES] = kernel32.GetFileAttributesW -//sys SetFileAttributes(name *uint16, attrs uint32) (err error) = kernel32.SetFileAttributesW -//sys GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) = kernel32.GetFileAttributesExW -//sys GetCommandLine() (cmd *uint16) = kernel32.GetCommandLineW -//sys CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) [failretval==nil] = shell32.CommandLineToArgvW -//sys LocalFree(hmem Handle) (handle Handle, err error) [failretval!=0] -//sys SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) -//sys FlushFileBuffers(handle Handle) (err error) -//sys GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) = kernel32.GetFullPathNameW -//sys GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) = kernel32.GetLongPathNameW -//sys GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) = kernel32.GetShortPathNameW -//sys CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) = kernel32.CreateFileMappingW -//sys MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error) -//sys UnmapViewOfFile(addr uintptr) (err error) -//sys FlushViewOfFile(addr uintptr, length uintptr) (err error) -//sys VirtualLock(addr uintptr, length uintptr) (err error) -//sys VirtualUnlock(addr uintptr, length uintptr) (err error) -//sys TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) = mswsock.TransmitFile -//sys ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) = kernel32.ReadDirectoryChangesW -//sys CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) = crypt32.CertOpenSystemStoreW -//sys CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) [failretval==InvalidHandle] = crypt32.CertOpenStore -//sys CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) [failretval==nil] = crypt32.CertEnumCertificatesInStore -//sys CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) = crypt32.CertAddCertificateContextToStore -//sys CertCloseStore(store Handle, flags uint32) (err error) = crypt32.CertCloseStore -//sys CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) = crypt32.CertGetCertificateChain -//sys CertFreeCertificateChain(ctx *CertChainContext) = crypt32.CertFreeCertificateChain -//sys CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) [failretval==nil] = crypt32.CertCreateCertificateContext -//sys CertFreeCertificateContext(ctx *CertContext) (err error) = crypt32.CertFreeCertificateContext -//sys CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) = crypt32.CertVerifyCertificateChainPolicy -//sys RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) = advapi32.RegOpenKeyExW -//sys RegCloseKey(key Handle) (regerrno error) = advapi32.RegCloseKey -//sys RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegQueryInfoKeyW -//sys RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegEnumKeyExW -//sys RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegQueryValueExW -//sys getCurrentProcessId() (pid uint32) = kernel32.GetCurrentProcessId -//sys GetConsoleMode(console Handle, mode *uint32) (err error) = kernel32.GetConsoleMode -//sys WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) = kernel32.WriteConsoleW -//sys ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) = kernel32.ReadConsoleW -//sys CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.CreateToolhelp32Snapshot -//sys Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32FirstW -//sys Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32NextW -//sys DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error) -// This function returns 1 byte BOOLEAN rather than the 4 byte BOOL. -//sys CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) [failretval&0xff==0] = CreateSymbolicLinkW -//sys CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) [failretval&0xff==0] = CreateHardLinkW -//sys GetCurrentThreadId() (id uint32) -//sys CreateEvent(eventAttrs *syscall.SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) = kernel32.CreateEventW -//sys SetEvent(event Handle) (err error) = kernel32.SetEvent - -// syscall interface implementation for other packages - -func Exit(code int) { ExitProcess(uint32(code)) } - -func makeInheritSa() *SecurityAttributes { - var sa SecurityAttributes - sa.Length = uint32(unsafe.Sizeof(sa)) - sa.InheritHandle = 1 - return &sa -} - -func Open(path string, mode int, perm uint32) (fd Handle, err error) { - if len(path) == 0 { - return InvalidHandle, ERROR_FILE_NOT_FOUND - } - pathp, err := UTF16PtrFromString(path) - if err != nil { - return InvalidHandle, err - } - var access uint32 - switch mode & (O_RDONLY | O_WRONLY | O_RDWR) { - case O_RDONLY: - access = GENERIC_READ - case O_WRONLY: - access = GENERIC_WRITE - case O_RDWR: - access = GENERIC_READ | GENERIC_WRITE - } - if mode&O_CREAT != 0 { - access |= GENERIC_WRITE - } - if mode&O_APPEND != 0 { - access &^= GENERIC_WRITE - access |= FILE_APPEND_DATA - } - sharemode := uint32(FILE_SHARE_READ | FILE_SHARE_WRITE) - var sa *SecurityAttributes - if mode&O_CLOEXEC == 0 { - sa = makeInheritSa() - } - var createmode uint32 - switch { - case mode&(O_CREAT|O_EXCL) == (O_CREAT | O_EXCL): - createmode = CREATE_NEW - case mode&(O_CREAT|O_TRUNC) == (O_CREAT | O_TRUNC): - createmode = CREATE_ALWAYS - case mode&O_CREAT == O_CREAT: - createmode = OPEN_ALWAYS - case mode&O_TRUNC == O_TRUNC: - createmode = TRUNCATE_EXISTING - default: - createmode = OPEN_EXISTING - } - h, e := CreateFile(pathp, access, sharemode, sa, createmode, FILE_ATTRIBUTE_NORMAL, 0) - return h, e -} - -func Read(fd Handle, p []byte) (n int, err error) { - var done uint32 - e := ReadFile(fd, p, &done, nil) - if e != nil { - if e == ERROR_BROKEN_PIPE { - // NOTE(brainman): work around ERROR_BROKEN_PIPE is returned on reading EOF from stdin - return 0, nil - } - return 0, e - } - if raceenabled { - if done > 0 { - raceWriteRange(unsafe.Pointer(&p[0]), int(done)) - } - raceAcquire(unsafe.Pointer(&ioSync)) - } - return int(done), nil -} - -func Write(fd Handle, p []byte) (n int, err error) { - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - var done uint32 - e := WriteFile(fd, p, &done, nil) - if e != nil { - return 0, e - } - if raceenabled && done > 0 { - raceReadRange(unsafe.Pointer(&p[0]), int(done)) - } - return int(done), nil -} - -var ioSync int64 - -func Seek(fd Handle, offset int64, whence int) (newoffset int64, err error) { - var w uint32 - switch whence { - case 0: - w = FILE_BEGIN - case 1: - w = FILE_CURRENT - case 2: - w = FILE_END - } - hi := int32(offset >> 32) - lo := int32(offset) - // use GetFileType to check pipe, pipe can't do seek - ft, _ := GetFileType(fd) - if ft == FILE_TYPE_PIPE { - return 0, syscall.EPIPE - } - rlo, e := SetFilePointer(fd, lo, &hi, w) - if e != nil { - return 0, e - } - return int64(hi)<<32 + int64(rlo), nil -} - -func Close(fd Handle) (err error) { - return CloseHandle(fd) -} - -var ( - Stdin = getStdHandle(STD_INPUT_HANDLE) - Stdout = getStdHandle(STD_OUTPUT_HANDLE) - Stderr = getStdHandle(STD_ERROR_HANDLE) -) - -func getStdHandle(stdhandle uint32) (fd Handle) { - r, _ := GetStdHandle(stdhandle) - CloseOnExec(r) - return r -} - -const ImplementsGetwd = true - -func Getwd() (wd string, err error) { - b := make([]uint16, 300) - n, e := GetCurrentDirectory(uint32(len(b)), &b[0]) - if e != nil { - return "", e - } - return string(utf16.Decode(b[0:n])), nil -} - -func Chdir(path string) (err error) { - pathp, err := UTF16PtrFromString(path) - if err != nil { - return err - } - return SetCurrentDirectory(pathp) -} - -func Mkdir(path string, mode uint32) (err error) { - pathp, err := UTF16PtrFromString(path) - if err != nil { - return err - } - return CreateDirectory(pathp, nil) -} - -func Rmdir(path string) (err error) { - pathp, err := UTF16PtrFromString(path) - if err != nil { - return err - } - return RemoveDirectory(pathp) -} - -func Unlink(path string) (err error) { - pathp, err := UTF16PtrFromString(path) - if err != nil { - return err - } - return DeleteFile(pathp) -} - -func Rename(oldpath, newpath string) (err error) { - from, err := UTF16PtrFromString(oldpath) - if err != nil { - return err - } - to, err := UTF16PtrFromString(newpath) - if err != nil { - return err - } - return MoveFileEx(from, to, MOVEFILE_REPLACE_EXISTING) -} - -func ComputerName() (name string, err error) { - var n uint32 = MAX_COMPUTERNAME_LENGTH + 1 - b := make([]uint16, n) - e := GetComputerName(&b[0], &n) - if e != nil { - return "", e - } - return string(utf16.Decode(b[0:n])), nil -} - -func Ftruncate(fd Handle, length int64) (err error) { - curoffset, e := Seek(fd, 0, 1) - if e != nil { - return e - } - defer Seek(fd, curoffset, 0) - _, e = Seek(fd, length, 0) - if e != nil { - return e - } - e = SetEndOfFile(fd) - if e != nil { - return e - } - return nil -} - -func Gettimeofday(tv *Timeval) (err error) { - var ft Filetime - GetSystemTimeAsFileTime(&ft) - *tv = NsecToTimeval(ft.Nanoseconds()) - return nil -} - -func Pipe(p []Handle) (err error) { - if len(p) != 2 { - return syscall.EINVAL - } - var r, w Handle - e := CreatePipe(&r, &w, makeInheritSa(), 0) - if e != nil { - return e - } - p[0] = r - p[1] = w - return nil -} - -func Utimes(path string, tv []Timeval) (err error) { - if len(tv) != 2 { - return syscall.EINVAL - } - pathp, e := UTF16PtrFromString(path) - if e != nil { - return e - } - h, e := CreateFile(pathp, - FILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, nil, - OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0) - if e != nil { - return e - } - defer Close(h) - a := NsecToFiletime(tv[0].Nanoseconds()) - w := NsecToFiletime(tv[1].Nanoseconds()) - return SetFileTime(h, nil, &a, &w) -} - -func UtimesNano(path string, ts []Timespec) (err error) { - if len(ts) != 2 { - return syscall.EINVAL - } - pathp, e := UTF16PtrFromString(path) - if e != nil { - return e - } - h, e := CreateFile(pathp, - FILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, nil, - OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0) - if e != nil { - return e - } - defer Close(h) - a := NsecToFiletime(TimespecToNsec(ts[0])) - w := NsecToFiletime(TimespecToNsec(ts[1])) - return SetFileTime(h, nil, &a, &w) -} - -func Fsync(fd Handle) (err error) { - return FlushFileBuffers(fd) -} - -func Chmod(path string, mode uint32) (err error) { - if mode == 0 { - return syscall.EINVAL - } - p, e := UTF16PtrFromString(path) - if e != nil { - return e - } - attrs, e := GetFileAttributes(p) - if e != nil { - return e - } - if mode&S_IWRITE != 0 { - attrs &^= FILE_ATTRIBUTE_READONLY - } else { - attrs |= FILE_ATTRIBUTE_READONLY - } - return SetFileAttributes(p, attrs) -} - -func LoadCancelIoEx() error { - return procCancelIoEx.Find() -} - -func LoadSetFileCompletionNotificationModes() error { - return procSetFileCompletionNotificationModes.Find() -} - -// net api calls - -const socket_error = uintptr(^uint32(0)) - -//sys WSAStartup(verreq uint32, data *WSAData) (sockerr error) = ws2_32.WSAStartup -//sys WSACleanup() (err error) [failretval==socket_error] = ws2_32.WSACleanup -//sys WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) [failretval==socket_error] = ws2_32.WSAIoctl -//sys socket(af int32, typ int32, protocol int32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.socket -//sys Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) [failretval==socket_error] = ws2_32.setsockopt -//sys Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) [failretval==socket_error] = ws2_32.getsockopt -//sys bind(s Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socket_error] = ws2_32.bind -//sys connect(s Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socket_error] = ws2_32.connect -//sys getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) [failretval==socket_error] = ws2_32.getsockname -//sys getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) [failretval==socket_error] = ws2_32.getpeername -//sys listen(s Handle, backlog int32) (err error) [failretval==socket_error] = ws2_32.listen -//sys shutdown(s Handle, how int32) (err error) [failretval==socket_error] = ws2_32.shutdown -//sys Closesocket(s Handle) (err error) [failretval==socket_error] = ws2_32.closesocket -//sys AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) = mswsock.AcceptEx -//sys GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) = mswsock.GetAcceptExSockaddrs -//sys WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecv -//sys WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASend -//sys WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecvFrom -//sys WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASendTo -//sys GetHostByName(name string) (h *Hostent, err error) [failretval==nil] = ws2_32.gethostbyname -//sys GetServByName(name string, proto string) (s *Servent, err error) [failretval==nil] = ws2_32.getservbyname -//sys Ntohs(netshort uint16) (u uint16) = ws2_32.ntohs -//sys GetProtoByName(name string) (p *Protoent, err error) [failretval==nil] = ws2_32.getprotobyname -//sys DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) = dnsapi.DnsQuery_W -//sys DnsRecordListFree(rl *DNSRecord, freetype uint32) = dnsapi.DnsRecordListFree -//sys DnsNameCompare(name1 *uint16, name2 *uint16) (same bool) = dnsapi.DnsNameCompare_W -//sys GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, result **AddrinfoW) (sockerr error) = ws2_32.GetAddrInfoW -//sys FreeAddrInfoW(addrinfo *AddrinfoW) = ws2_32.FreeAddrInfoW -//sys GetIfEntry(pIfRow *MibIfRow) (errcode error) = iphlpapi.GetIfEntry -//sys GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) = iphlpapi.GetAdaptersInfo -//sys SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) = kernel32.SetFileCompletionNotificationModes -//sys WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) [failretval==-1] = ws2_32.WSAEnumProtocolsW -//sys GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) = iphlpapi.GetAdaptersAddresses -//sys GetACP() (acp uint32) = kernel32.GetACP -//sys MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar - -// For testing: clients can set this flag to force -// creation of IPv6 sockets to return EAFNOSUPPORT. -var SocketDisableIPv6 bool - -type RawSockaddrInet4 struct { - Family uint16 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]uint8 -} - -type RawSockaddrInet6 struct { - Family uint16 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddr struct { - Family uint16 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [96]int8 -} - -type Sockaddr interface { - sockaddr() (ptr unsafe.Pointer, len int32, err error) // lowercase; only we can define Sockaddrs -} - -type SockaddrInet4 struct { - Port int - Addr [4]byte - raw RawSockaddrInet4 -} - -func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, int32, error) { - if sa.Port < 0 || sa.Port > 0xFFFF { - return nil, 0, syscall.EINVAL - } - sa.raw.Family = AF_INET - p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) - p[0] = byte(sa.Port >> 8) - p[1] = byte(sa.Port) - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } - return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil -} - -type SockaddrInet6 struct { - Port int - ZoneId uint32 - Addr [16]byte - raw RawSockaddrInet6 -} - -func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, int32, error) { - if sa.Port < 0 || sa.Port > 0xFFFF { - return nil, 0, syscall.EINVAL - } - sa.raw.Family = AF_INET6 - p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) - p[0] = byte(sa.Port >> 8) - p[1] = byte(sa.Port) - sa.raw.Scope_id = sa.ZoneId - for i := 0; i < len(sa.Addr); i++ { - sa.raw.Addr[i] = sa.Addr[i] - } - return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil -} - -type SockaddrUnix struct { - Name string -} - -func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, int32, error) { - // TODO(brainman): implement SockaddrUnix.sockaddr() - return nil, 0, syscall.EWINDOWS -} - -func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) { - switch rsa.Addr.Family { - case AF_UNIX: - return nil, syscall.EWINDOWS - - case AF_INET: - pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) - sa := new(SockaddrInet4) - p := (*[2]byte)(unsafe.Pointer(&pp.Port)) - sa.Port = int(p[0])<<8 + int(p[1]) - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } - return sa, nil - - case AF_INET6: - pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) - sa := new(SockaddrInet6) - p := (*[2]byte)(unsafe.Pointer(&pp.Port)) - sa.Port = int(p[0])<<8 + int(p[1]) - sa.ZoneId = pp.Scope_id - for i := 0; i < len(sa.Addr); i++ { - sa.Addr[i] = pp.Addr[i] - } - return sa, nil - } - return nil, syscall.EAFNOSUPPORT -} - -func Socket(domain, typ, proto int) (fd Handle, err error) { - if domain == AF_INET6 && SocketDisableIPv6 { - return InvalidHandle, syscall.EAFNOSUPPORT - } - return socket(int32(domain), int32(typ), int32(proto)) -} - -func SetsockoptInt(fd Handle, level, opt int, value int) (err error) { - v := int32(value) - return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&v)), int32(unsafe.Sizeof(v))) -} - -func Bind(fd Handle, sa Sockaddr) (err error) { - ptr, n, err := sa.sockaddr() - if err != nil { - return err - } - return bind(fd, ptr, n) -} - -func Connect(fd Handle, sa Sockaddr) (err error) { - ptr, n, err := sa.sockaddr() - if err != nil { - return err - } - return connect(fd, ptr, n) -} - -func Getsockname(fd Handle) (sa Sockaddr, err error) { - var rsa RawSockaddrAny - l := int32(unsafe.Sizeof(rsa)) - if err = getsockname(fd, &rsa, &l); err != nil { - return - } - return rsa.Sockaddr() -} - -func Getpeername(fd Handle) (sa Sockaddr, err error) { - var rsa RawSockaddrAny - l := int32(unsafe.Sizeof(rsa)) - if err = getpeername(fd, &rsa, &l); err != nil { - return - } - return rsa.Sockaddr() -} - -func Listen(s Handle, n int) (err error) { - return listen(s, int32(n)) -} - -func Shutdown(fd Handle, how int) (err error) { - return shutdown(fd, int32(how)) -} - -func WSASendto(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to Sockaddr, overlapped *Overlapped, croutine *byte) (err error) { - rsa, l, err := to.sockaddr() - if err != nil { - return err - } - return WSASendTo(s, bufs, bufcnt, sent, flags, (*RawSockaddrAny)(unsafe.Pointer(rsa)), l, overlapped, croutine) -} - -func LoadGetAddrInfo() error { - return procGetAddrInfoW.Find() -} - -var connectExFunc struct { - once sync.Once - addr uintptr - err error -} - -func LoadConnectEx() error { - connectExFunc.once.Do(func() { - var s Handle - s, connectExFunc.err = Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) - if connectExFunc.err != nil { - return - } - defer CloseHandle(s) - var n uint32 - connectExFunc.err = WSAIoctl(s, - SIO_GET_EXTENSION_FUNCTION_POINTER, - (*byte)(unsafe.Pointer(&WSAID_CONNECTEX)), - uint32(unsafe.Sizeof(WSAID_CONNECTEX)), - (*byte)(unsafe.Pointer(&connectExFunc.addr)), - uint32(unsafe.Sizeof(connectExFunc.addr)), - &n, nil, 0) - }) - return connectExFunc.err -} - -func connectEx(s Handle, name unsafe.Pointer, namelen int32, sendBuf *byte, sendDataLen uint32, bytesSent *uint32, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall9(connectExFunc.addr, 7, uintptr(s), uintptr(name), uintptr(namelen), uintptr(unsafe.Pointer(sendBuf)), uintptr(sendDataLen), uintptr(unsafe.Pointer(bytesSent)), uintptr(unsafe.Pointer(overlapped)), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func ConnectEx(fd Handle, sa Sockaddr, sendBuf *byte, sendDataLen uint32, bytesSent *uint32, overlapped *Overlapped) error { - err := LoadConnectEx() - if err != nil { - return errorspkg.New("failed to find ConnectEx: " + err.Error()) - } - ptr, n, err := sa.sockaddr() - if err != nil { - return err - } - return connectEx(fd, ptr, n, sendBuf, sendDataLen, bytesSent, overlapped) -} - -// Invented structures to support what package os expects. -type Rusage struct { - CreationTime Filetime - ExitTime Filetime - KernelTime Filetime - UserTime Filetime -} - -type WaitStatus struct { - ExitCode uint32 -} - -func (w WaitStatus) Exited() bool { return true } - -func (w WaitStatus) ExitStatus() int { return int(w.ExitCode) } - -func (w WaitStatus) Signal() Signal { return -1 } - -func (w WaitStatus) CoreDump() bool { return false } - -func (w WaitStatus) Stopped() bool { return false } - -func (w WaitStatus) Continued() bool { return false } - -func (w WaitStatus) StopSignal() Signal { return -1 } - -func (w WaitStatus) Signaled() bool { return false } - -func (w WaitStatus) TrapCause() int { return -1 } - -// Timespec is an invented structure on Windows, but here for -// consistency with the corresponding package for other operating systems. -type Timespec struct { - Sec int64 - Nsec int64 -} - -func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } - -func NsecToTimespec(nsec int64) (ts Timespec) { - ts.Sec = nsec / 1e9 - ts.Nsec = nsec % 1e9 - return -} - -// TODO(brainman): fix all needed for net - -func Accept(fd Handle) (nfd Handle, sa Sockaddr, err error) { return 0, nil, syscall.EWINDOWS } -func Recvfrom(fd Handle, p []byte, flags int) (n int, from Sockaddr, err error) { - return 0, nil, syscall.EWINDOWS -} -func Sendto(fd Handle, p []byte, flags int, to Sockaddr) (err error) { return syscall.EWINDOWS } -func SetsockoptTimeval(fd Handle, level, opt int, tv *Timeval) (err error) { return syscall.EWINDOWS } - -// The Linger struct is wrong but we only noticed after Go 1. -// sysLinger is the real system call structure. - -// BUG(brainman): The definition of Linger is not appropriate for direct use -// with Setsockopt and Getsockopt. -// Use SetsockoptLinger instead. - -type Linger struct { - Onoff int32 - Linger int32 -} - -type sysLinger struct { - Onoff uint16 - Linger uint16 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface uint32 -} - -func GetsockoptInt(fd Handle, level, opt int) (int, error) { return -1, syscall.EWINDOWS } - -func SetsockoptLinger(fd Handle, level, opt int, l *Linger) (err error) { - sys := sysLinger{Onoff: uint16(l.Onoff), Linger: uint16(l.Linger)} - return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&sys)), int32(unsafe.Sizeof(sys))) -} - -func SetsockoptInet4Addr(fd Handle, level, opt int, value [4]byte) (err error) { - return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&value[0])), 4) -} -func SetsockoptIPMreq(fd Handle, level, opt int, mreq *IPMreq) (err error) { - return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(mreq)), int32(unsafe.Sizeof(*mreq))) -} -func SetsockoptIPv6Mreq(fd Handle, level, opt int, mreq *IPv6Mreq) (err error) { - return syscall.EWINDOWS -} - -func Getpid() (pid int) { return int(getCurrentProcessId()) } - -func FindFirstFile(name *uint16, data *Win32finddata) (handle Handle, err error) { - // NOTE(rsc): The Win32finddata struct is wrong for the system call: - // the two paths are each one uint16 short. Use the correct struct, - // a win32finddata1, and then copy the results out. - // There is no loss of expressivity here, because the final - // uint16, if it is used, is supposed to be a NUL, and Go doesn't need that. - // For Go 1.1, we might avoid the allocation of win32finddata1 here - // by adding a final Bug [2]uint16 field to the struct and then - // adjusting the fields in the result directly. - var data1 win32finddata1 - handle, err = findFirstFile1(name, &data1) - if err == nil { - copyFindData(data, &data1) - } - return -} - -func FindNextFile(handle Handle, data *Win32finddata) (err error) { - var data1 win32finddata1 - err = findNextFile1(handle, &data1) - if err == nil { - copyFindData(data, &data1) - } - return -} - -func getProcessEntry(pid int) (*ProcessEntry32, error) { - snapshot, err := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) - if err != nil { - return nil, err - } - defer CloseHandle(snapshot) - var procEntry ProcessEntry32 - procEntry.Size = uint32(unsafe.Sizeof(procEntry)) - if err = Process32First(snapshot, &procEntry); err != nil { - return nil, err - } - for { - if procEntry.ProcessID == uint32(pid) { - return &procEntry, nil - } - err = Process32Next(snapshot, &procEntry) - if err != nil { - return nil, err - } - } -} - -func Getppid() (ppid int) { - pe, err := getProcessEntry(Getpid()) - if err != nil { - return -1 - } - return int(pe.ParentProcessID) -} - -// TODO(brainman): fix all needed for os -func Fchdir(fd Handle) (err error) { return syscall.EWINDOWS } -func Link(oldpath, newpath string) (err error) { return syscall.EWINDOWS } -func Symlink(path, link string) (err error) { return syscall.EWINDOWS } - -func Fchmod(fd Handle, mode uint32) (err error) { return syscall.EWINDOWS } -func Chown(path string, uid int, gid int) (err error) { return syscall.EWINDOWS } -func Lchown(path string, uid int, gid int) (err error) { return syscall.EWINDOWS } -func Fchown(fd Handle, uid int, gid int) (err error) { return syscall.EWINDOWS } - -func Getuid() (uid int) { return -1 } -func Geteuid() (euid int) { return -1 } -func Getgid() (gid int) { return -1 } -func Getegid() (egid int) { return -1 } -func Getgroups() (gids []int, err error) { return nil, syscall.EWINDOWS } - -type Signal int - -func (s Signal) Signal() {} - -func (s Signal) String() string { - if 0 <= s && int(s) < len(signals) { - str := signals[s] - if str != "" { - return str - } - } - return "signal " + itoa(int(s)) -} - -func LoadCreateSymbolicLink() error { - return procCreateSymbolicLinkW.Find() -} - -// Readlink returns the destination of the named symbolic link. -func Readlink(path string, buf []byte) (n int, err error) { - fd, err := CreateFile(StringToUTF16Ptr(path), GENERIC_READ, 0, nil, OPEN_EXISTING, - FILE_FLAG_OPEN_REPARSE_POINT|FILE_FLAG_BACKUP_SEMANTICS, 0) - if err != nil { - return -1, err - } - defer CloseHandle(fd) - - rdbbuf := make([]byte, MAXIMUM_REPARSE_DATA_BUFFER_SIZE) - var bytesReturned uint32 - err = DeviceIoControl(fd, FSCTL_GET_REPARSE_POINT, nil, 0, &rdbbuf[0], uint32(len(rdbbuf)), &bytesReturned, nil) - if err != nil { - return -1, err - } - - rdb := (*reparseDataBuffer)(unsafe.Pointer(&rdbbuf[0])) - var s string - switch rdb.ReparseTag { - case IO_REPARSE_TAG_SYMLINK: - data := (*symbolicLinkReparseBuffer)(unsafe.Pointer(&rdb.reparseBuffer)) - p := (*[0xffff]uint16)(unsafe.Pointer(&data.PathBuffer[0])) - s = UTF16ToString(p[data.PrintNameOffset/2 : (data.PrintNameLength-data.PrintNameOffset)/2]) - case IO_REPARSE_TAG_MOUNT_POINT: - data := (*mountPointReparseBuffer)(unsafe.Pointer(&rdb.reparseBuffer)) - p := (*[0xffff]uint16)(unsafe.Pointer(&data.PathBuffer[0])) - s = UTF16ToString(p[data.PrintNameOffset/2 : (data.PrintNameLength-data.PrintNameOffset)/2]) - default: - // the path is not a symlink or junction but another type of reparse - // point - return -1, syscall.ENOENT - } - n = copy(buf, []byte(s)) - - return n, nil -} diff --git a/vendor/golang.org/x/sys/windows/syscall_windows_test.go b/vendor/golang.org/x/sys/windows/syscall_windows_test.go deleted file mode 100644 index 0f73c11..0000000 --- a/vendor/golang.org/x/sys/windows/syscall_windows_test.go +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package windows_test - -import ( - "io/ioutil" - "os" - "path/filepath" - "syscall" - "testing" - "unsafe" - - "golang.org/x/sys/windows" -) - -func TestWin32finddata(t *testing.T) { - dir, err := ioutil.TempDir("", "go-build") - if err != nil { - t.Fatalf("failed to create temp directory: %v", err) - } - defer os.RemoveAll(dir) - - path := filepath.Join(dir, "long_name.and_extension") - f, err := os.Create(path) - if err != nil { - t.Fatalf("failed to create %v: %v", path, err) - } - f.Close() - - type X struct { - fd windows.Win32finddata - got byte - pad [10]byte // to protect ourselves - - } - var want byte = 2 // it is unlikely to have this character in the filename - x := X{got: want} - - pathp, _ := windows.UTF16PtrFromString(path) - h, err := windows.FindFirstFile(pathp, &(x.fd)) - if err != nil { - t.Fatalf("FindFirstFile failed: %v", err) - } - err = windows.FindClose(h) - if err != nil { - t.Fatalf("FindClose failed: %v", err) - } - - if x.got != want { - t.Fatalf("memory corruption: want=%d got=%d", want, x.got) - } -} - -func TestFormatMessage(t *testing.T) { - dll := windows.MustLoadDLL("pdh.dll") - - pdhOpenQuery := func(datasrc *uint16, userdata uint32, query *windows.Handle) (errno uintptr) { - r0, _, _ := syscall.Syscall(dll.MustFindProc("PdhOpenQueryW").Addr(), 3, uintptr(unsafe.Pointer(datasrc)), uintptr(userdata), uintptr(unsafe.Pointer(query))) - return r0 - } - - pdhCloseQuery := func(query windows.Handle) (errno uintptr) { - r0, _, _ := syscall.Syscall(dll.MustFindProc("PdhCloseQuery").Addr(), 1, uintptr(query), 0, 0) - return r0 - } - - var q windows.Handle - name, err := windows.UTF16PtrFromString("no_such_source") - if err != nil { - t.Fatal(err) - } - errno := pdhOpenQuery(name, 0, &q) - if errno == 0 { - pdhCloseQuery(q) - t.Fatal("PdhOpenQuery succeeded, but expected to fail.") - } - - const flags uint32 = syscall.FORMAT_MESSAGE_FROM_HMODULE | syscall.FORMAT_MESSAGE_ARGUMENT_ARRAY | syscall.FORMAT_MESSAGE_IGNORE_INSERTS - buf := make([]uint16, 300) - _, err = windows.FormatMessage(flags, uintptr(dll.Handle), uint32(errno), 0, buf, nil) - if err != nil { - t.Fatal("FormatMessage for handle=%x and errno=%x failed: %v", dll.Handle, errno, err) - } -} - -func abort(funcname string, err error) { - panic(funcname + " failed: " + err.Error()) -} - -func ExampleLoadLibrary() { - h, err := windows.LoadLibrary("kernel32.dll") - if err != nil { - abort("LoadLibrary", err) - } - defer windows.FreeLibrary(h) - proc, err := windows.GetProcAddress(h, "GetVersion") - if err != nil { - abort("GetProcAddress", err) - } - r, _, _ := syscall.Syscall(uintptr(proc), 0, 0, 0, 0) - major := byte(r) - minor := uint8(r >> 8) - build := uint16(r >> 16) - print("windows version ", major, ".", minor, " (Build ", build, ")\n") -} diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go deleted file mode 100644 index f7bc8d6..0000000 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ /dev/null @@ -1,2289 +0,0 @@ -// MACHINE GENERATED BY 'go generate' COMMAND; DO NOT EDIT - -package windows - -import ( - "syscall" - "unsafe" -) - -var _ unsafe.Pointer - -// Do the interface allocations only once for common -// Errno values. -const ( - errnoERROR_IO_PENDING = 997 -) - -var ( - errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) -) - -// errnoErr returns common boxed Errno values, to prevent -// allocations at runtime. -func errnoErr(e syscall.Errno) error { - switch e { - case 0: - return nil - case errnoERROR_IO_PENDING: - return errERROR_IO_PENDING - } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) - return e -} - -var ( - modadvapi32 = NewLazySystemDLL("advapi32.dll") - modkernel32 = NewLazySystemDLL("kernel32.dll") - modshell32 = NewLazySystemDLL("shell32.dll") - modmswsock = NewLazySystemDLL("mswsock.dll") - modcrypt32 = NewLazySystemDLL("crypt32.dll") - modws2_32 = NewLazySystemDLL("ws2_32.dll") - moddnsapi = NewLazySystemDLL("dnsapi.dll") - modiphlpapi = NewLazySystemDLL("iphlpapi.dll") - modsecur32 = NewLazySystemDLL("secur32.dll") - modnetapi32 = NewLazySystemDLL("netapi32.dll") - moduserenv = NewLazySystemDLL("userenv.dll") - - procRegisterEventSourceW = modadvapi32.NewProc("RegisterEventSourceW") - procDeregisterEventSource = modadvapi32.NewProc("DeregisterEventSource") - procReportEventW = modadvapi32.NewProc("ReportEventW") - procOpenSCManagerW = modadvapi32.NewProc("OpenSCManagerW") - procCloseServiceHandle = modadvapi32.NewProc("CloseServiceHandle") - procCreateServiceW = modadvapi32.NewProc("CreateServiceW") - procOpenServiceW = modadvapi32.NewProc("OpenServiceW") - procDeleteService = modadvapi32.NewProc("DeleteService") - procStartServiceW = modadvapi32.NewProc("StartServiceW") - procQueryServiceStatus = modadvapi32.NewProc("QueryServiceStatus") - procControlService = modadvapi32.NewProc("ControlService") - procStartServiceCtrlDispatcherW = modadvapi32.NewProc("StartServiceCtrlDispatcherW") - procSetServiceStatus = modadvapi32.NewProc("SetServiceStatus") - procChangeServiceConfigW = modadvapi32.NewProc("ChangeServiceConfigW") - procQueryServiceConfigW = modadvapi32.NewProc("QueryServiceConfigW") - procChangeServiceConfig2W = modadvapi32.NewProc("ChangeServiceConfig2W") - procQueryServiceConfig2W = modadvapi32.NewProc("QueryServiceConfig2W") - procGetLastError = modkernel32.NewProc("GetLastError") - procLoadLibraryW = modkernel32.NewProc("LoadLibraryW") - procLoadLibraryExW = modkernel32.NewProc("LoadLibraryExW") - procFreeLibrary = modkernel32.NewProc("FreeLibrary") - procGetProcAddress = modkernel32.NewProc("GetProcAddress") - procGetVersion = modkernel32.NewProc("GetVersion") - procFormatMessageW = modkernel32.NewProc("FormatMessageW") - procExitProcess = modkernel32.NewProc("ExitProcess") - procCreateFileW = modkernel32.NewProc("CreateFileW") - procReadFile = modkernel32.NewProc("ReadFile") - procWriteFile = modkernel32.NewProc("WriteFile") - procSetFilePointer = modkernel32.NewProc("SetFilePointer") - procCloseHandle = modkernel32.NewProc("CloseHandle") - procGetStdHandle = modkernel32.NewProc("GetStdHandle") - procSetStdHandle = modkernel32.NewProc("SetStdHandle") - procFindFirstFileW = modkernel32.NewProc("FindFirstFileW") - procFindNextFileW = modkernel32.NewProc("FindNextFileW") - procFindClose = modkernel32.NewProc("FindClose") - procGetFileInformationByHandle = modkernel32.NewProc("GetFileInformationByHandle") - procGetCurrentDirectoryW = modkernel32.NewProc("GetCurrentDirectoryW") - procSetCurrentDirectoryW = modkernel32.NewProc("SetCurrentDirectoryW") - procCreateDirectoryW = modkernel32.NewProc("CreateDirectoryW") - procRemoveDirectoryW = modkernel32.NewProc("RemoveDirectoryW") - procDeleteFileW = modkernel32.NewProc("DeleteFileW") - procMoveFileW = modkernel32.NewProc("MoveFileW") - procMoveFileExW = modkernel32.NewProc("MoveFileExW") - procGetComputerNameW = modkernel32.NewProc("GetComputerNameW") - procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW") - procSetEndOfFile = modkernel32.NewProc("SetEndOfFile") - procGetSystemTimeAsFileTime = modkernel32.NewProc("GetSystemTimeAsFileTime") - procGetSystemTimePreciseAsFileTime = modkernel32.NewProc("GetSystemTimePreciseAsFileTime") - procGetTimeZoneInformation = modkernel32.NewProc("GetTimeZoneInformation") - procCreateIoCompletionPort = modkernel32.NewProc("CreateIoCompletionPort") - procGetQueuedCompletionStatus = modkernel32.NewProc("GetQueuedCompletionStatus") - procPostQueuedCompletionStatus = modkernel32.NewProc("PostQueuedCompletionStatus") - procCancelIo = modkernel32.NewProc("CancelIo") - procCancelIoEx = modkernel32.NewProc("CancelIoEx") - procCreateProcessW = modkernel32.NewProc("CreateProcessW") - procOpenProcess = modkernel32.NewProc("OpenProcess") - procTerminateProcess = modkernel32.NewProc("TerminateProcess") - procGetExitCodeProcess = modkernel32.NewProc("GetExitCodeProcess") - procGetStartupInfoW = modkernel32.NewProc("GetStartupInfoW") - procGetCurrentProcess = modkernel32.NewProc("GetCurrentProcess") - procGetProcessTimes = modkernel32.NewProc("GetProcessTimes") - procDuplicateHandle = modkernel32.NewProc("DuplicateHandle") - procWaitForSingleObject = modkernel32.NewProc("WaitForSingleObject") - procGetTempPathW = modkernel32.NewProc("GetTempPathW") - procCreatePipe = modkernel32.NewProc("CreatePipe") - procGetFileType = modkernel32.NewProc("GetFileType") - procCryptAcquireContextW = modadvapi32.NewProc("CryptAcquireContextW") - procCryptReleaseContext = modadvapi32.NewProc("CryptReleaseContext") - procCryptGenRandom = modadvapi32.NewProc("CryptGenRandom") - procGetEnvironmentStringsW = modkernel32.NewProc("GetEnvironmentStringsW") - procFreeEnvironmentStringsW = modkernel32.NewProc("FreeEnvironmentStringsW") - procGetEnvironmentVariableW = modkernel32.NewProc("GetEnvironmentVariableW") - procSetEnvironmentVariableW = modkernel32.NewProc("SetEnvironmentVariableW") - procSetFileTime = modkernel32.NewProc("SetFileTime") - procGetFileAttributesW = modkernel32.NewProc("GetFileAttributesW") - procSetFileAttributesW = modkernel32.NewProc("SetFileAttributesW") - procGetFileAttributesExW = modkernel32.NewProc("GetFileAttributesExW") - procGetCommandLineW = modkernel32.NewProc("GetCommandLineW") - procCommandLineToArgvW = modshell32.NewProc("CommandLineToArgvW") - procLocalFree = modkernel32.NewProc("LocalFree") - procSetHandleInformation = modkernel32.NewProc("SetHandleInformation") - procFlushFileBuffers = modkernel32.NewProc("FlushFileBuffers") - procGetFullPathNameW = modkernel32.NewProc("GetFullPathNameW") - procGetLongPathNameW = modkernel32.NewProc("GetLongPathNameW") - procGetShortPathNameW = modkernel32.NewProc("GetShortPathNameW") - procCreateFileMappingW = modkernel32.NewProc("CreateFileMappingW") - procMapViewOfFile = modkernel32.NewProc("MapViewOfFile") - procUnmapViewOfFile = modkernel32.NewProc("UnmapViewOfFile") - procFlushViewOfFile = modkernel32.NewProc("FlushViewOfFile") - procVirtualLock = modkernel32.NewProc("VirtualLock") - procVirtualUnlock = modkernel32.NewProc("VirtualUnlock") - procTransmitFile = modmswsock.NewProc("TransmitFile") - procReadDirectoryChangesW = modkernel32.NewProc("ReadDirectoryChangesW") - procCertOpenSystemStoreW = modcrypt32.NewProc("CertOpenSystemStoreW") - procCertOpenStore = modcrypt32.NewProc("CertOpenStore") - procCertEnumCertificatesInStore = modcrypt32.NewProc("CertEnumCertificatesInStore") - procCertAddCertificateContextToStore = modcrypt32.NewProc("CertAddCertificateContextToStore") - procCertCloseStore = modcrypt32.NewProc("CertCloseStore") - procCertGetCertificateChain = modcrypt32.NewProc("CertGetCertificateChain") - procCertFreeCertificateChain = modcrypt32.NewProc("CertFreeCertificateChain") - procCertCreateCertificateContext = modcrypt32.NewProc("CertCreateCertificateContext") - procCertFreeCertificateContext = modcrypt32.NewProc("CertFreeCertificateContext") - procCertVerifyCertificateChainPolicy = modcrypt32.NewProc("CertVerifyCertificateChainPolicy") - procRegOpenKeyExW = modadvapi32.NewProc("RegOpenKeyExW") - procRegCloseKey = modadvapi32.NewProc("RegCloseKey") - procRegQueryInfoKeyW = modadvapi32.NewProc("RegQueryInfoKeyW") - procRegEnumKeyExW = modadvapi32.NewProc("RegEnumKeyExW") - procRegQueryValueExW = modadvapi32.NewProc("RegQueryValueExW") - procGetCurrentProcessId = modkernel32.NewProc("GetCurrentProcessId") - procGetConsoleMode = modkernel32.NewProc("GetConsoleMode") - procWriteConsoleW = modkernel32.NewProc("WriteConsoleW") - procReadConsoleW = modkernel32.NewProc("ReadConsoleW") - procCreateToolhelp32Snapshot = modkernel32.NewProc("CreateToolhelp32Snapshot") - procProcess32FirstW = modkernel32.NewProc("Process32FirstW") - procProcess32NextW = modkernel32.NewProc("Process32NextW") - procDeviceIoControl = modkernel32.NewProc("DeviceIoControl") - procCreateSymbolicLinkW = modkernel32.NewProc("CreateSymbolicLinkW") - procCreateHardLinkW = modkernel32.NewProc("CreateHardLinkW") - procGetCurrentThreadId = modkernel32.NewProc("GetCurrentThreadId") - procCreateEventW = modkernel32.NewProc("CreateEventW") - procSetEvent = modkernel32.NewProc("SetEvent") - procWSAStartup = modws2_32.NewProc("WSAStartup") - procWSACleanup = modws2_32.NewProc("WSACleanup") - procWSAIoctl = modws2_32.NewProc("WSAIoctl") - procsocket = modws2_32.NewProc("socket") - procsetsockopt = modws2_32.NewProc("setsockopt") - procgetsockopt = modws2_32.NewProc("getsockopt") - procbind = modws2_32.NewProc("bind") - procconnect = modws2_32.NewProc("connect") - procgetsockname = modws2_32.NewProc("getsockname") - procgetpeername = modws2_32.NewProc("getpeername") - proclisten = modws2_32.NewProc("listen") - procshutdown = modws2_32.NewProc("shutdown") - procclosesocket = modws2_32.NewProc("closesocket") - procAcceptEx = modmswsock.NewProc("AcceptEx") - procGetAcceptExSockaddrs = modmswsock.NewProc("GetAcceptExSockaddrs") - procWSARecv = modws2_32.NewProc("WSARecv") - procWSASend = modws2_32.NewProc("WSASend") - procWSARecvFrom = modws2_32.NewProc("WSARecvFrom") - procWSASendTo = modws2_32.NewProc("WSASendTo") - procgethostbyname = modws2_32.NewProc("gethostbyname") - procgetservbyname = modws2_32.NewProc("getservbyname") - procntohs = modws2_32.NewProc("ntohs") - procgetprotobyname = modws2_32.NewProc("getprotobyname") - procDnsQuery_W = moddnsapi.NewProc("DnsQuery_W") - procDnsRecordListFree = moddnsapi.NewProc("DnsRecordListFree") - procDnsNameCompare_W = moddnsapi.NewProc("DnsNameCompare_W") - procGetAddrInfoW = modws2_32.NewProc("GetAddrInfoW") - procFreeAddrInfoW = modws2_32.NewProc("FreeAddrInfoW") - procGetIfEntry = modiphlpapi.NewProc("GetIfEntry") - procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo") - procSetFileCompletionNotificationModes = modkernel32.NewProc("SetFileCompletionNotificationModes") - procWSAEnumProtocolsW = modws2_32.NewProc("WSAEnumProtocolsW") - procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses") - procGetACP = modkernel32.NewProc("GetACP") - procMultiByteToWideChar = modkernel32.NewProc("MultiByteToWideChar") - procTranslateNameW = modsecur32.NewProc("TranslateNameW") - procGetUserNameExW = modsecur32.NewProc("GetUserNameExW") - procNetUserGetInfo = modnetapi32.NewProc("NetUserGetInfo") - procNetGetJoinInformation = modnetapi32.NewProc("NetGetJoinInformation") - procNetApiBufferFree = modnetapi32.NewProc("NetApiBufferFree") - procLookupAccountSidW = modadvapi32.NewProc("LookupAccountSidW") - procLookupAccountNameW = modadvapi32.NewProc("LookupAccountNameW") - procConvertSidToStringSidW = modadvapi32.NewProc("ConvertSidToStringSidW") - procConvertStringSidToSidW = modadvapi32.NewProc("ConvertStringSidToSidW") - procGetLengthSid = modadvapi32.NewProc("GetLengthSid") - procCopySid = modadvapi32.NewProc("CopySid") - procAllocateAndInitializeSid = modadvapi32.NewProc("AllocateAndInitializeSid") - procFreeSid = modadvapi32.NewProc("FreeSid") - procEqualSid = modadvapi32.NewProc("EqualSid") - procOpenProcessToken = modadvapi32.NewProc("OpenProcessToken") - procGetTokenInformation = modadvapi32.NewProc("GetTokenInformation") - procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW") -) - -func RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procRegisterEventSourceW.Addr(), 2, uintptr(unsafe.Pointer(uncServerName)), uintptr(unsafe.Pointer(sourceName)), 0) - handle = Handle(r0) - if handle == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func DeregisterEventSource(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procDeregisterEventSource.Addr(), 1, uintptr(handle), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) { - r1, _, e1 := syscall.Syscall9(procReportEventW.Addr(), 9, uintptr(log), uintptr(etype), uintptr(category), uintptr(eventId), uintptr(usrSId), uintptr(numStrings), uintptr(dataSize), uintptr(unsafe.Pointer(strings)), uintptr(unsafe.Pointer(rawData))) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procOpenSCManagerW.Addr(), 3, uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(databaseName)), uintptr(access)) - handle = Handle(r0) - if handle == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CloseServiceHandle(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procCloseServiceHandle.Addr(), 1, uintptr(handle), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall15(procCreateServiceW.Addr(), 13, uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(unsafe.Pointer(displayName)), uintptr(access), uintptr(srvType), uintptr(startType), uintptr(errCtl), uintptr(unsafe.Pointer(pathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), 0, 0) - handle = Handle(r0) - if handle == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procOpenServiceW.Addr(), 3, uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(access)) - handle = Handle(r0) - if handle == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func DeleteService(service Handle) (err error) { - r1, _, e1 := syscall.Syscall(procDeleteService.Addr(), 1, uintptr(service), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) { - r1, _, e1 := syscall.Syscall(procStartServiceW.Addr(), 3, uintptr(service), uintptr(numArgs), uintptr(unsafe.Pointer(argVectors))) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) { - r1, _, e1 := syscall.Syscall(procQueryServiceStatus.Addr(), 2, uintptr(service), uintptr(unsafe.Pointer(status)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) { - r1, _, e1 := syscall.Syscall(procControlService.Addr(), 3, uintptr(service), uintptr(control), uintptr(unsafe.Pointer(status))) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) { - r1, _, e1 := syscall.Syscall(procStartServiceCtrlDispatcherW.Addr(), 1, uintptr(unsafe.Pointer(serviceTable)), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) { - r1, _, e1 := syscall.Syscall(procSetServiceStatus.Addr(), 2, uintptr(service), uintptr(unsafe.Pointer(serviceStatus)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) { - r1, _, e1 := syscall.Syscall12(procChangeServiceConfigW.Addr(), 11, uintptr(service), uintptr(serviceType), uintptr(startType), uintptr(errorControl), uintptr(unsafe.Pointer(binaryPathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), uintptr(unsafe.Pointer(displayName)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procQueryServiceConfigW.Addr(), 4, uintptr(service), uintptr(unsafe.Pointer(serviceConfig)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) { - r1, _, e1 := syscall.Syscall(procChangeServiceConfig2W.Addr(), 3, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(info))) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procQueryServiceConfig2W.Addr(), 5, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetLastError() (lasterr error) { - r0, _, _ := syscall.Syscall(procGetLastError.Addr(), 0, 0, 0, 0) - if r0 != 0 { - lasterr = syscall.Errno(r0) - } - return -} - -func LoadLibrary(libname string) (handle Handle, err error) { - var _p0 *uint16 - _p0, err = syscall.UTF16PtrFromString(libname) - if err != nil { - return - } - return _LoadLibrary(_p0) -} - -func _LoadLibrary(libname *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procLoadLibraryW.Addr(), 1, uintptr(unsafe.Pointer(libname)), 0, 0) - handle = Handle(r0) - if handle == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, err error) { - var _p0 *uint16 - _p0, err = syscall.UTF16PtrFromString(libname) - if err != nil { - return - } - return _LoadLibraryEx(_p0, zero, flags) -} - -func _LoadLibraryEx(libname *uint16, zero Handle, flags uintptr) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procLoadLibraryExW.Addr(), 3, uintptr(unsafe.Pointer(libname)), uintptr(zero), uintptr(flags)) - handle = Handle(r0) - if handle == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func FreeLibrary(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFreeLibrary.Addr(), 1, uintptr(handle), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetProcAddress(module Handle, procname string) (proc uintptr, err error) { - var _p0 *byte - _p0, err = syscall.BytePtrFromString(procname) - if err != nil { - return - } - return _GetProcAddress(module, _p0) -} - -func _GetProcAddress(module Handle, procname *byte) (proc uintptr, err error) { - r0, _, e1 := syscall.Syscall(procGetProcAddress.Addr(), 2, uintptr(module), uintptr(unsafe.Pointer(procname)), 0) - proc = uintptr(r0) - if proc == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetVersion() (ver uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetVersion.Addr(), 0, 0, 0, 0) - ver = uint32(r0) - if ver == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) { - var _p0 *uint16 - if len(buf) > 0 { - _p0 = &buf[0] - } - r0, _, e1 := syscall.Syscall9(procFormatMessageW.Addr(), 7, uintptr(flags), uintptr(msgsrc), uintptr(msgid), uintptr(langid), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(args)), 0, 0) - n = uint32(r0) - if n == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func ExitProcess(exitcode uint32) { - syscall.Syscall(procExitProcess.Addr(), 1, uintptr(exitcode), 0, 0) - return -} - -func CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile int32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall9(procCreateFileW.Addr(), 7, uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile), 0, 0) - handle = Handle(r0) - if handle == InvalidHandle { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func ReadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { - var _p0 *byte - if len(buf) > 0 { - _p0 = &buf[0] - } - r1, _, e1 := syscall.Syscall6(procReadFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { - var _p0 *byte - if len(buf) > 0 { - _p0 = &buf[0] - } - r1, _, e1 := syscall.Syscall6(procWriteFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) { - r0, _, e1 := syscall.Syscall6(procSetFilePointer.Addr(), 4, uintptr(handle), uintptr(lowoffset), uintptr(unsafe.Pointer(highoffsetptr)), uintptr(whence), 0, 0) - newlowoffset = uint32(r0) - if newlowoffset == 0xffffffff { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CloseHandle(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procCloseHandle.Addr(), 1, uintptr(handle), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetStdHandle(stdhandle uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procGetStdHandle.Addr(), 1, uintptr(stdhandle), 0, 0) - handle = Handle(r0) - if handle == InvalidHandle { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func SetStdHandle(stdhandle uint32, handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procSetStdHandle.Addr(), 2, uintptr(stdhandle), uintptr(handle), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procFindFirstFileW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(data)), 0) - handle = Handle(r0) - if handle == InvalidHandle { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func findNextFile1(handle Handle, data *win32finddata1) (err error) { - r1, _, e1 := syscall.Syscall(procFindNextFileW.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func FindClose(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFindClose.Addr(), 1, uintptr(handle), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error) { - r1, _, e1 := syscall.Syscall(procGetFileInformationByHandle.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetCurrentDirectoryW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0) - n = uint32(r0) - if n == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func SetCurrentDirectory(path *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procSetCurrentDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) { - r1, _, e1 := syscall.Syscall(procCreateDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(sa)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func RemoveDirectory(path *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procRemoveDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func DeleteFile(path *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procDeleteFileW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func MoveFile(from *uint16, to *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procMoveFileW.Addr(), 2, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procMoveFileExW.Addr(), 3, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), uintptr(flags)) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetComputerName(buf *uint16, n *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetComputerNameW.Addr(), 2, uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetComputerNameExW.Addr(), 3, uintptr(nametype), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n))) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func SetEndOfFile(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procSetEndOfFile.Addr(), 1, uintptr(handle), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetSystemTimeAsFileTime(time *Filetime) { - syscall.Syscall(procGetSystemTimeAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0) - return -} - -func GetSystemTimePreciseAsFileTime(time *Filetime) { - syscall.Syscall(procGetSystemTimePreciseAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0) - return -} - -func GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetTimeZoneInformation.Addr(), 1, uintptr(unsafe.Pointer(tzi)), 0, 0) - rc = uint32(r0) - if rc == 0xffffffff { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uint32, threadcnt uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCreateIoCompletionPort.Addr(), 4, uintptr(filehandle), uintptr(cphandle), uintptr(key), uintptr(threadcnt), 0, 0) - handle = Handle(r0) - if handle == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uint32, overlapped **Overlapped, timeout uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetQueuedCompletionStatus.Addr(), 5, uintptr(cphandle), uintptr(unsafe.Pointer(qty)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(overlapped)), uintptr(timeout), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uint32, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall6(procPostQueuedCompletionStatus.Addr(), 4, uintptr(cphandle), uintptr(qty), uintptr(key), uintptr(unsafe.Pointer(overlapped)), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CancelIo(s Handle) (err error) { - r1, _, e1 := syscall.Syscall(procCancelIo.Addr(), 1, uintptr(s), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CancelIoEx(s Handle, o *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall(procCancelIoEx.Addr(), 2, uintptr(s), uintptr(unsafe.Pointer(o)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) { - var _p0 uint32 - if inheritHandles { - _p0 = 1 - } else { - _p0 = 0 - } - r1, _, e1 := syscall.Syscall12(procCreateProcessW.Addr(), 10, uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo)), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func OpenProcess(da uint32, inheritHandle bool, pid uint32) (handle Handle, err error) { - var _p0 uint32 - if inheritHandle { - _p0 = 1 - } else { - _p0 = 0 - } - r0, _, e1 := syscall.Syscall(procOpenProcess.Addr(), 3, uintptr(da), uintptr(_p0), uintptr(pid)) - handle = Handle(r0) - if handle == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func TerminateProcess(handle Handle, exitcode uint32) (err error) { - r1, _, e1 := syscall.Syscall(procTerminateProcess.Addr(), 2, uintptr(handle), uintptr(exitcode), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetExitCodeProcess.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(exitcode)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetStartupInfo(startupInfo *StartupInfo) (err error) { - r1, _, e1 := syscall.Syscall(procGetStartupInfoW.Addr(), 1, uintptr(unsafe.Pointer(startupInfo)), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetCurrentProcess() (pseudoHandle Handle, err error) { - r0, _, e1 := syscall.Syscall(procGetCurrentProcess.Addr(), 0, 0, 0, 0) - pseudoHandle = Handle(r0) - if pseudoHandle == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) { - r1, _, e1 := syscall.Syscall6(procGetProcessTimes.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(creationTime)), uintptr(unsafe.Pointer(exitTime)), uintptr(unsafe.Pointer(kernelTime)), uintptr(unsafe.Pointer(userTime)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) { - var _p0 uint32 - if bInheritHandle { - _p0 = 1 - } else { - _p0 = 0 - } - r1, _, e1 := syscall.Syscall9(procDuplicateHandle.Addr(), 7, uintptr(hSourceProcessHandle), uintptr(hSourceHandle), uintptr(hTargetProcessHandle), uintptr(unsafe.Pointer(lpTargetHandle)), uintptr(dwDesiredAccess), uintptr(_p0), uintptr(dwOptions), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) { - r0, _, e1 := syscall.Syscall(procWaitForSingleObject.Addr(), 2, uintptr(handle), uintptr(waitMilliseconds), 0) - event = uint32(r0) - if event == 0xffffffff { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetTempPathW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0) - n = uint32(r0) - if n == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procCreatePipe.Addr(), 4, uintptr(unsafe.Pointer(readhandle)), uintptr(unsafe.Pointer(writehandle)), uintptr(unsafe.Pointer(sa)), uintptr(size), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetFileType(filehandle Handle) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetFileType.Addr(), 1, uintptr(filehandle), 0, 0) - n = uint32(r0) - if n == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procCryptAcquireContextW.Addr(), 5, uintptr(unsafe.Pointer(provhandle)), uintptr(unsafe.Pointer(container)), uintptr(unsafe.Pointer(provider)), uintptr(provtype), uintptr(flags), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CryptReleaseContext(provhandle Handle, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procCryptReleaseContext.Addr(), 2, uintptr(provhandle), uintptr(flags), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) { - r1, _, e1 := syscall.Syscall(procCryptGenRandom.Addr(), 3, uintptr(provhandle), uintptr(buflen), uintptr(unsafe.Pointer(buf))) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetEnvironmentStrings() (envs *uint16, err error) { - r0, _, e1 := syscall.Syscall(procGetEnvironmentStringsW.Addr(), 0, 0, 0, 0) - envs = (*uint16)(unsafe.Pointer(r0)) - if envs == nil { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func FreeEnvironmentStrings(envs *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procFreeEnvironmentStringsW.Addr(), 1, uintptr(unsafe.Pointer(envs)), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetEnvironmentVariableW.Addr(), 3, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(size)) - n = uint32(r0) - if n == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func SetEnvironmentVariable(name *uint16, value *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procSetEnvironmentVariableW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) { - r1, _, e1 := syscall.Syscall6(procSetFileTime.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime)), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetFileAttributes(name *uint16) (attrs uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetFileAttributesW.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) - attrs = uint32(r0) - if attrs == INVALID_FILE_ATTRIBUTES { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func SetFileAttributes(name *uint16, attrs uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetFileAttributesW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(attrs), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) { - r1, _, e1 := syscall.Syscall(procGetFileAttributesExW.Addr(), 3, uintptr(unsafe.Pointer(name)), uintptr(level), uintptr(unsafe.Pointer(info))) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetCommandLine() (cmd *uint16) { - r0, _, _ := syscall.Syscall(procGetCommandLineW.Addr(), 0, 0, 0, 0) - cmd = (*uint16)(unsafe.Pointer(r0)) - return -} - -func CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) { - r0, _, e1 := syscall.Syscall(procCommandLineToArgvW.Addr(), 2, uintptr(unsafe.Pointer(cmd)), uintptr(unsafe.Pointer(argc)), 0) - argv = (*[8192]*[8192]uint16)(unsafe.Pointer(r0)) - if argv == nil { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func LocalFree(hmem Handle) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procLocalFree.Addr(), 1, uintptr(hmem), 0, 0) - handle = Handle(r0) - if handle != 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetHandleInformation.Addr(), 3, uintptr(handle), uintptr(mask), uintptr(flags)) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func FlushFileBuffers(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFlushFileBuffers.Addr(), 1, uintptr(handle), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) { - r0, _, e1 := syscall.Syscall6(procGetFullPathNameW.Addr(), 4, uintptr(unsafe.Pointer(path)), uintptr(buflen), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(fname)), 0, 0) - n = uint32(r0) - if n == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetLongPathNameW.Addr(), 3, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(buf)), uintptr(buflen)) - n = uint32(r0) - if n == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetShortPathNameW.Addr(), 3, uintptr(unsafe.Pointer(longpath)), uintptr(unsafe.Pointer(shortpath)), uintptr(buflen)) - n = uint32(r0) - if n == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCreateFileMappingW.Addr(), 6, uintptr(fhandle), uintptr(unsafe.Pointer(sa)), uintptr(prot), uintptr(maxSizeHigh), uintptr(maxSizeLow), uintptr(unsafe.Pointer(name))) - handle = Handle(r0) - if handle == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error) { - r0, _, e1 := syscall.Syscall6(procMapViewOfFile.Addr(), 5, uintptr(handle), uintptr(access), uintptr(offsetHigh), uintptr(offsetLow), uintptr(length), 0) - addr = uintptr(r0) - if addr == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func UnmapViewOfFile(addr uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procUnmapViewOfFile.Addr(), 1, uintptr(addr), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func FlushViewOfFile(addr uintptr, length uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procFlushViewOfFile.Addr(), 2, uintptr(addr), uintptr(length), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func VirtualLock(addr uintptr, length uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procVirtualLock.Addr(), 2, uintptr(addr), uintptr(length), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func VirtualUnlock(addr uintptr, length uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procVirtualUnlock.Addr(), 2, uintptr(addr), uintptr(length), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procTransmitFile.Addr(), 7, uintptr(s), uintptr(handle), uintptr(bytesToWrite), uintptr(bytsPerSend), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(transmitFileBuf)), uintptr(flags), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) { - var _p0 uint32 - if watchSubTree { - _p0 = 1 - } else { - _p0 = 0 - } - r1, _, e1 := syscall.Syscall9(procReadDirectoryChangesW.Addr(), 8, uintptr(handle), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(_p0), uintptr(mask), uintptr(unsafe.Pointer(retlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) { - r0, _, e1 := syscall.Syscall(procCertOpenSystemStoreW.Addr(), 2, uintptr(hprov), uintptr(unsafe.Pointer(name)), 0) - store = Handle(r0) - if store == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCertOpenStore.Addr(), 5, uintptr(storeProvider), uintptr(msgAndCertEncodingType), uintptr(cryptProv), uintptr(flags), uintptr(para), 0) - handle = Handle(r0) - if handle == InvalidHandle { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) { - r0, _, e1 := syscall.Syscall(procCertEnumCertificatesInStore.Addr(), 2, uintptr(store), uintptr(unsafe.Pointer(prevContext)), 0) - context = (*CertContext)(unsafe.Pointer(r0)) - if context == nil { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) { - r1, _, e1 := syscall.Syscall6(procCertAddCertificateContextToStore.Addr(), 4, uintptr(store), uintptr(unsafe.Pointer(certContext)), uintptr(addDisposition), uintptr(unsafe.Pointer(storeContext)), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CertCloseStore(store Handle, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procCertCloseStore.Addr(), 2, uintptr(store), uintptr(flags), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) { - r1, _, e1 := syscall.Syscall9(procCertGetCertificateChain.Addr(), 8, uintptr(engine), uintptr(unsafe.Pointer(leaf)), uintptr(unsafe.Pointer(time)), uintptr(additionalStore), uintptr(unsafe.Pointer(para)), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(chainCtx)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CertFreeCertificateChain(ctx *CertChainContext) { - syscall.Syscall(procCertFreeCertificateChain.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0) - return -} - -func CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) { - r0, _, e1 := syscall.Syscall(procCertCreateCertificateContext.Addr(), 3, uintptr(certEncodingType), uintptr(unsafe.Pointer(certEncoded)), uintptr(encodedLen)) - context = (*CertContext)(unsafe.Pointer(r0)) - if context == nil { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CertFreeCertificateContext(ctx *CertContext) (err error) { - r1, _, e1 := syscall.Syscall(procCertFreeCertificateContext.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) { - r1, _, e1 := syscall.Syscall6(procCertVerifyCertificateChainPolicy.Addr(), 4, uintptr(policyOID), uintptr(unsafe.Pointer(chain)), uintptr(unsafe.Pointer(para)), uintptr(unsafe.Pointer(status)), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) { - r0, _, _ := syscall.Syscall6(procRegOpenKeyExW.Addr(), 5, uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(options), uintptr(desiredAccess), uintptr(unsafe.Pointer(result)), 0) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func RegCloseKey(key Handle) (regerrno error) { - r0, _, _ := syscall.Syscall(procRegCloseKey.Addr(), 1, uintptr(key), 0, 0) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) { - r0, _, _ := syscall.Syscall12(procRegQueryInfoKeyW.Addr(), 12, uintptr(key), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(subkeysLen)), uintptr(unsafe.Pointer(maxSubkeyLen)), uintptr(unsafe.Pointer(maxClassLen)), uintptr(unsafe.Pointer(valuesLen)), uintptr(unsafe.Pointer(maxValueNameLen)), uintptr(unsafe.Pointer(maxValueLen)), uintptr(unsafe.Pointer(saLen)), uintptr(unsafe.Pointer(lastWriteTime))) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) { - r0, _, _ := syscall.Syscall9(procRegEnumKeyExW.Addr(), 8, uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(lastWriteTime)), 0) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) { - r0, _, _ := syscall.Syscall6(procRegQueryValueExW.Addr(), 6, uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen))) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func getCurrentProcessId() (pid uint32) { - r0, _, _ := syscall.Syscall(procGetCurrentProcessId.Addr(), 0, 0, 0, 0) - pid = uint32(r0) - return -} - -func GetConsoleMode(console Handle, mode *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(mode)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) { - r1, _, e1 := syscall.Syscall6(procWriteConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(towrite), uintptr(unsafe.Pointer(written)), uintptr(unsafe.Pointer(reserved)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) { - r1, _, e1 := syscall.Syscall6(procReadConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(toread), uintptr(unsafe.Pointer(read)), uintptr(unsafe.Pointer(inputControl)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procCreateToolhelp32Snapshot.Addr(), 2, uintptr(flags), uintptr(processId), 0) - handle = Handle(r0) - if handle == InvalidHandle { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) { - r1, _, e1 := syscall.Syscall(procProcess32FirstW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) { - r1, _, e1 := syscall.Syscall(procProcess32NextW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall9(procDeviceIoControl.Addr(), 8, uintptr(handle), uintptr(ioControlCode), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferSize), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferSize), uintptr(unsafe.Pointer(bytesReturned)), uintptr(unsafe.Pointer(overlapped)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procCreateSymbolicLinkW.Addr(), 3, uintptr(unsafe.Pointer(symlinkfilename)), uintptr(unsafe.Pointer(targetfilename)), uintptr(flags)) - if r1&0xff == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procCreateHardLinkW.Addr(), 3, uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(existingfilename)), uintptr(reserved)) - if r1&0xff == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetCurrentThreadId() (id uint32) { - r0, _, _ := syscall.Syscall(procGetCurrentThreadId.Addr(), 0, 0, 0, 0) - id = uint32(r0) - return -} - -func CreateEvent(eventAttrs *syscall.SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCreateEventW.Addr(), 4, uintptr(unsafe.Pointer(eventAttrs)), uintptr(manualReset), uintptr(initialState), uintptr(unsafe.Pointer(name)), 0, 0) - handle = Handle(r0) - if handle == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func SetEvent(event Handle) (err error) { - r1, _, e1 := syscall.Syscall(procSetEvent.Addr(), 1, uintptr(event), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func WSAStartup(verreq uint32, data *WSAData) (sockerr error) { - r0, _, _ := syscall.Syscall(procWSAStartup.Addr(), 2, uintptr(verreq), uintptr(unsafe.Pointer(data)), 0) - if r0 != 0 { - sockerr = syscall.Errno(r0) - } - return -} - -func WSACleanup() (err error) { - r1, _, e1 := syscall.Syscall(procWSACleanup.Addr(), 0, 0, 0, 0) - if r1 == socket_error { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) { - r1, _, e1 := syscall.Syscall9(procWSAIoctl.Addr(), 9, uintptr(s), uintptr(iocc), uintptr(unsafe.Pointer(inbuf)), uintptr(cbif), uintptr(unsafe.Pointer(outbuf)), uintptr(cbob), uintptr(unsafe.Pointer(cbbr)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine)) - if r1 == socket_error { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func socket(af int32, typ int32, protocol int32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procsocket.Addr(), 3, uintptr(af), uintptr(typ), uintptr(protocol)) - handle = Handle(r0) - if handle == InvalidHandle { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) { - r1, _, e1 := syscall.Syscall6(procsetsockopt.Addr(), 5, uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(optlen), 0) - if r1 == socket_error { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) { - r1, _, e1 := syscall.Syscall6(procgetsockopt.Addr(), 5, uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(unsafe.Pointer(optlen)), 0) - if r1 == socket_error { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func bind(s Handle, name unsafe.Pointer, namelen int32) (err error) { - r1, _, e1 := syscall.Syscall(procbind.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen)) - if r1 == socket_error { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func connect(s Handle, name unsafe.Pointer, namelen int32) (err error) { - r1, _, e1 := syscall.Syscall(procconnect.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen)) - if r1 == socket_error { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) { - r1, _, e1 := syscall.Syscall(procgetsockname.Addr(), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if r1 == socket_error { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) { - r1, _, e1 := syscall.Syscall(procgetpeername.Addr(), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if r1 == socket_error { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func listen(s Handle, backlog int32) (err error) { - r1, _, e1 := syscall.Syscall(proclisten.Addr(), 2, uintptr(s), uintptr(backlog), 0) - if r1 == socket_error { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func shutdown(s Handle, how int32) (err error) { - r1, _, e1 := syscall.Syscall(procshutdown.Addr(), 2, uintptr(s), uintptr(how), 0) - if r1 == socket_error { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func Closesocket(s Handle) (err error) { - r1, _, e1 := syscall.Syscall(procclosesocket.Addr(), 1, uintptr(s), 0, 0) - if r1 == socket_error { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall9(procAcceptEx.Addr(), 8, uintptr(ls), uintptr(as), uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(overlapped)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) { - syscall.Syscall9(procGetAcceptExSockaddrs.Addr(), 8, uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(lrsa)), uintptr(unsafe.Pointer(lrsalen)), uintptr(unsafe.Pointer(rrsa)), uintptr(unsafe.Pointer(rrsalen)), 0) - return -} - -func WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) { - r1, _, e1 := syscall.Syscall9(procWSARecv.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0) - if r1 == socket_error { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) { - r1, _, e1 := syscall.Syscall9(procWSASend.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0) - if r1 == socket_error { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) { - r1, _, e1 := syscall.Syscall9(procWSARecvFrom.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) - if r1 == socket_error { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) { - r1, _, e1 := syscall.Syscall9(procWSASendTo.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(to)), uintptr(tolen), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) - if r1 == socket_error { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetHostByName(name string) (h *Hostent, err error) { - var _p0 *byte - _p0, err = syscall.BytePtrFromString(name) - if err != nil { - return - } - return _GetHostByName(_p0) -} - -func _GetHostByName(name *byte) (h *Hostent, err error) { - r0, _, e1 := syscall.Syscall(procgethostbyname.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) - h = (*Hostent)(unsafe.Pointer(r0)) - if h == nil { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetServByName(name string, proto string) (s *Servent, err error) { - var _p0 *byte - _p0, err = syscall.BytePtrFromString(name) - if err != nil { - return - } - var _p1 *byte - _p1, err = syscall.BytePtrFromString(proto) - if err != nil { - return - } - return _GetServByName(_p0, _p1) -} - -func _GetServByName(name *byte, proto *byte) (s *Servent, err error) { - r0, _, e1 := syscall.Syscall(procgetservbyname.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(proto)), 0) - s = (*Servent)(unsafe.Pointer(r0)) - if s == nil { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func Ntohs(netshort uint16) (u uint16) { - r0, _, _ := syscall.Syscall(procntohs.Addr(), 1, uintptr(netshort), 0, 0) - u = uint16(r0) - return -} - -func GetProtoByName(name string) (p *Protoent, err error) { - var _p0 *byte - _p0, err = syscall.BytePtrFromString(name) - if err != nil { - return - } - return _GetProtoByName(_p0) -} - -func _GetProtoByName(name *byte) (p *Protoent, err error) { - r0, _, e1 := syscall.Syscall(procgetprotobyname.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) - p = (*Protoent)(unsafe.Pointer(r0)) - if p == nil { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) { - var _p0 *uint16 - _p0, status = syscall.UTF16PtrFromString(name) - if status != nil { - return - } - return _DnsQuery(_p0, qtype, options, extra, qrs, pr) -} - -func _DnsQuery(name *uint16, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) { - r0, _, _ := syscall.Syscall6(procDnsQuery_W.Addr(), 6, uintptr(unsafe.Pointer(name)), uintptr(qtype), uintptr(options), uintptr(unsafe.Pointer(extra)), uintptr(unsafe.Pointer(qrs)), uintptr(unsafe.Pointer(pr))) - if r0 != 0 { - status = syscall.Errno(r0) - } - return -} - -func DnsRecordListFree(rl *DNSRecord, freetype uint32) { - syscall.Syscall(procDnsRecordListFree.Addr(), 2, uintptr(unsafe.Pointer(rl)), uintptr(freetype), 0) - return -} - -func DnsNameCompare(name1 *uint16, name2 *uint16) (same bool) { - r0, _, _ := syscall.Syscall(procDnsNameCompare_W.Addr(), 2, uintptr(unsafe.Pointer(name1)), uintptr(unsafe.Pointer(name2)), 0) - same = r0 != 0 - return -} - -func GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, result **AddrinfoW) (sockerr error) { - r0, _, _ := syscall.Syscall6(procGetAddrInfoW.Addr(), 4, uintptr(unsafe.Pointer(nodename)), uintptr(unsafe.Pointer(servicename)), uintptr(unsafe.Pointer(hints)), uintptr(unsafe.Pointer(result)), 0, 0) - if r0 != 0 { - sockerr = syscall.Errno(r0) - } - return -} - -func FreeAddrInfoW(addrinfo *AddrinfoW) { - syscall.Syscall(procFreeAddrInfoW.Addr(), 1, uintptr(unsafe.Pointer(addrinfo)), 0, 0) - return -} - -func GetIfEntry(pIfRow *MibIfRow) (errcode error) { - r0, _, _ := syscall.Syscall(procGetIfEntry.Addr(), 1, uintptr(unsafe.Pointer(pIfRow)), 0, 0) - if r0 != 0 { - errcode = syscall.Errno(r0) - } - return -} - -func GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) { - r0, _, _ := syscall.Syscall(procGetAdaptersInfo.Addr(), 2, uintptr(unsafe.Pointer(ai)), uintptr(unsafe.Pointer(ol)), 0) - if r0 != 0 { - errcode = syscall.Errno(r0) - } - return -} - -func SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) { - r1, _, e1 := syscall.Syscall(procSetFileCompletionNotificationModes.Addr(), 2, uintptr(handle), uintptr(flags), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) { - r0, _, e1 := syscall.Syscall(procWSAEnumProtocolsW.Addr(), 3, uintptr(unsafe.Pointer(protocols)), uintptr(unsafe.Pointer(protocolBuffer)), uintptr(unsafe.Pointer(bufferLength))) - n = int32(r0) - if n == -1 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) { - r0, _, _ := syscall.Syscall6(procGetAdaptersAddresses.Addr(), 5, uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer)), 0) - if r0 != 0 { - errcode = syscall.Errno(r0) - } - return -} - -func GetACP() (acp uint32) { - r0, _, _ := syscall.Syscall(procGetACP.Addr(), 0, 0, 0, 0) - acp = uint32(r0) - return -} - -func MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) { - r0, _, e1 := syscall.Syscall6(procMultiByteToWideChar.Addr(), 6, uintptr(codePage), uintptr(dwFlags), uintptr(unsafe.Pointer(str)), uintptr(nstr), uintptr(unsafe.Pointer(wchar)), uintptr(nwchar)) - nwrite = int32(r0) - if nwrite == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint32, translatedName *uint16, nSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procTranslateNameW.Addr(), 5, uintptr(unsafe.Pointer(accName)), uintptr(accNameFormat), uintptr(desiredNameFormat), uintptr(unsafe.Pointer(translatedName)), uintptr(unsafe.Pointer(nSize)), 0) - if r1&0xff == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetUserNameExW.Addr(), 3, uintptr(nameFormat), uintptr(unsafe.Pointer(nameBuffre)), uintptr(unsafe.Pointer(nSize))) - if r1&0xff == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) { - r0, _, _ := syscall.Syscall6(procNetUserGetInfo.Addr(), 4, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(userName)), uintptr(level), uintptr(unsafe.Pointer(buf)), 0, 0) - if r0 != 0 { - neterr = syscall.Errno(r0) - } - return -} - -func NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) { - r0, _, _ := syscall.Syscall(procNetGetJoinInformation.Addr(), 3, uintptr(unsafe.Pointer(server)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bufType))) - if r0 != 0 { - neterr = syscall.Errno(r0) - } - return -} - -func NetApiBufferFree(buf *byte) (neterr error) { - r0, _, _ := syscall.Syscall(procNetApiBufferFree.Addr(), 1, uintptr(unsafe.Pointer(buf)), 0, 0) - if r0 != 0 { - neterr = syscall.Errno(r0) - } - return -} - -func LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procLookupAccountSidW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procLookupAccountNameW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)), 0, 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func ConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) { - r1, _, e1 := syscall.Syscall(procConvertSidToStringSidW.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(stringSid)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) { - r1, _, e1 := syscall.Syscall(procConvertStringSidToSidW.Addr(), 2, uintptr(unsafe.Pointer(stringSid)), uintptr(unsafe.Pointer(sid)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetLengthSid(sid *SID) (len uint32) { - r0, _, _ := syscall.Syscall(procGetLengthSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) - len = uint32(r0) - return -} - -func CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) { - r1, _, e1 := syscall.Syscall(procCopySid.Addr(), 3, uintptr(destSidLen), uintptr(unsafe.Pointer(destSid)), uintptr(unsafe.Pointer(srcSid))) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) { - r1, _, e1 := syscall.Syscall12(procAllocateAndInitializeSid.Addr(), 11, uintptr(unsafe.Pointer(identAuth)), uintptr(subAuth), uintptr(subAuth0), uintptr(subAuth1), uintptr(subAuth2), uintptr(subAuth3), uintptr(subAuth4), uintptr(subAuth5), uintptr(subAuth6), uintptr(subAuth7), uintptr(unsafe.Pointer(sid)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func FreeSid(sid *SID) (err error) { - r1, _, e1 := syscall.Syscall(procFreeSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) - if r1 != 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) { - r0, _, _ := syscall.Syscall(procEqualSid.Addr(), 2, uintptr(unsafe.Pointer(sid1)), uintptr(unsafe.Pointer(sid2)), 0) - isEqual = r0 != 0 - return -} - -func OpenProcessToken(h Handle, access uint32, token *Token) (err error) { - r1, _, e1 := syscall.Syscall(procOpenProcessToken.Addr(), 3, uintptr(h), uintptr(access), uintptr(unsafe.Pointer(token))) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetTokenInformation(t Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetTokenInformation.Addr(), 5, uintptr(t), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen), uintptr(unsafe.Pointer(returnedLen)), 0) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetUserProfileDirectoryW.Addr(), 3, uintptr(t), uintptr(unsafe.Pointer(dir)), uintptr(unsafe.Pointer(dirLen))) - if r1 == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} diff --git a/vendor/golang.org/x/sys/windows/ztypes_windows.go b/vendor/golang.org/x/sys/windows/ztypes_windows.go deleted file mode 100644 index a907ff2..0000000 --- a/vendor/golang.org/x/sys/windows/ztypes_windows.go +++ /dev/null @@ -1,1242 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package windows - -import "syscall" - -const ( - // Windows errors. - ERROR_FILE_NOT_FOUND syscall.Errno = 2 - ERROR_PATH_NOT_FOUND syscall.Errno = 3 - ERROR_ACCESS_DENIED syscall.Errno = 5 - ERROR_NO_MORE_FILES syscall.Errno = 18 - ERROR_HANDLE_EOF syscall.Errno = 38 - ERROR_NETNAME_DELETED syscall.Errno = 64 - ERROR_FILE_EXISTS syscall.Errno = 80 - ERROR_BROKEN_PIPE syscall.Errno = 109 - ERROR_BUFFER_OVERFLOW syscall.Errno = 111 - ERROR_INSUFFICIENT_BUFFER syscall.Errno = 122 - ERROR_MOD_NOT_FOUND syscall.Errno = 126 - ERROR_PROC_NOT_FOUND syscall.Errno = 127 - ERROR_ALREADY_EXISTS syscall.Errno = 183 - ERROR_ENVVAR_NOT_FOUND syscall.Errno = 203 - ERROR_MORE_DATA syscall.Errno = 234 - ERROR_OPERATION_ABORTED syscall.Errno = 995 - ERROR_IO_PENDING syscall.Errno = 997 - ERROR_SERVICE_SPECIFIC_ERROR syscall.Errno = 1066 - ERROR_NOT_FOUND syscall.Errno = 1168 - ERROR_PRIVILEGE_NOT_HELD syscall.Errno = 1314 - WSAEACCES syscall.Errno = 10013 - WSAECONNRESET syscall.Errno = 10054 -) - -const ( - // Invented values to support what package os expects. - O_RDONLY = 0x00000 - O_WRONLY = 0x00001 - O_RDWR = 0x00002 - O_CREAT = 0x00040 - O_EXCL = 0x00080 - O_NOCTTY = 0x00100 - O_TRUNC = 0x00200 - O_NONBLOCK = 0x00800 - O_APPEND = 0x00400 - O_SYNC = 0x01000 - O_ASYNC = 0x02000 - O_CLOEXEC = 0x80000 -) - -const ( - // More invented values for signals - SIGHUP = Signal(0x1) - SIGINT = Signal(0x2) - SIGQUIT = Signal(0x3) - SIGILL = Signal(0x4) - SIGTRAP = Signal(0x5) - SIGABRT = Signal(0x6) - SIGBUS = Signal(0x7) - SIGFPE = Signal(0x8) - SIGKILL = Signal(0x9) - SIGSEGV = Signal(0xb) - SIGPIPE = Signal(0xd) - SIGALRM = Signal(0xe) - SIGTERM = Signal(0xf) -) - -var signals = [...]string{ - 1: "hangup", - 2: "interrupt", - 3: "quit", - 4: "illegal instruction", - 5: "trace/breakpoint trap", - 6: "aborted", - 7: "bus error", - 8: "floating point exception", - 9: "killed", - 10: "user defined signal 1", - 11: "segmentation fault", - 12: "user defined signal 2", - 13: "broken pipe", - 14: "alarm clock", - 15: "terminated", -} - -const ( - GENERIC_READ = 0x80000000 - GENERIC_WRITE = 0x40000000 - GENERIC_EXECUTE = 0x20000000 - GENERIC_ALL = 0x10000000 - - FILE_LIST_DIRECTORY = 0x00000001 - FILE_APPEND_DATA = 0x00000004 - FILE_WRITE_ATTRIBUTES = 0x00000100 - - FILE_SHARE_READ = 0x00000001 - FILE_SHARE_WRITE = 0x00000002 - FILE_SHARE_DELETE = 0x00000004 - FILE_ATTRIBUTE_READONLY = 0x00000001 - FILE_ATTRIBUTE_HIDDEN = 0x00000002 - FILE_ATTRIBUTE_SYSTEM = 0x00000004 - FILE_ATTRIBUTE_DIRECTORY = 0x00000010 - FILE_ATTRIBUTE_ARCHIVE = 0x00000020 - FILE_ATTRIBUTE_NORMAL = 0x00000080 - FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400 - - INVALID_FILE_ATTRIBUTES = 0xffffffff - - CREATE_NEW = 1 - CREATE_ALWAYS = 2 - OPEN_EXISTING = 3 - OPEN_ALWAYS = 4 - TRUNCATE_EXISTING = 5 - - FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000 - FILE_FLAG_BACKUP_SEMANTICS = 0x02000000 - FILE_FLAG_OVERLAPPED = 0x40000000 - - HANDLE_FLAG_INHERIT = 0x00000001 - STARTF_USESTDHANDLES = 0x00000100 - STARTF_USESHOWWINDOW = 0x00000001 - DUPLICATE_CLOSE_SOURCE = 0x00000001 - DUPLICATE_SAME_ACCESS = 0x00000002 - - STD_INPUT_HANDLE = -10 & (1<<32 - 1) - STD_OUTPUT_HANDLE = -11 & (1<<32 - 1) - STD_ERROR_HANDLE = -12 & (1<<32 - 1) - - FILE_BEGIN = 0 - FILE_CURRENT = 1 - FILE_END = 2 - - LANG_ENGLISH = 0x09 - SUBLANG_ENGLISH_US = 0x01 - - FORMAT_MESSAGE_ALLOCATE_BUFFER = 256 - FORMAT_MESSAGE_IGNORE_INSERTS = 512 - FORMAT_MESSAGE_FROM_STRING = 1024 - FORMAT_MESSAGE_FROM_HMODULE = 2048 - FORMAT_MESSAGE_FROM_SYSTEM = 4096 - FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192 - FORMAT_MESSAGE_MAX_WIDTH_MASK = 255 - - MAX_PATH = 260 - MAX_LONG_PATH = 32768 - - MAX_COMPUTERNAME_LENGTH = 15 - - TIME_ZONE_ID_UNKNOWN = 0 - TIME_ZONE_ID_STANDARD = 1 - - TIME_ZONE_ID_DAYLIGHT = 2 - IGNORE = 0 - INFINITE = 0xffffffff - - WAIT_TIMEOUT = 258 - WAIT_ABANDONED = 0x00000080 - WAIT_OBJECT_0 = 0x00000000 - WAIT_FAILED = 0xFFFFFFFF - - CREATE_NEW_PROCESS_GROUP = 0x00000200 - CREATE_UNICODE_ENVIRONMENT = 0x00000400 - - PROCESS_TERMINATE = 1 - PROCESS_QUERY_INFORMATION = 0x00000400 - SYNCHRONIZE = 0x00100000 - - PAGE_READONLY = 0x02 - PAGE_READWRITE = 0x04 - PAGE_WRITECOPY = 0x08 - PAGE_EXECUTE_READ = 0x20 - PAGE_EXECUTE_READWRITE = 0x40 - PAGE_EXECUTE_WRITECOPY = 0x80 - - FILE_MAP_COPY = 0x01 - FILE_MAP_WRITE = 0x02 - FILE_MAP_READ = 0x04 - FILE_MAP_EXECUTE = 0x20 - - CTRL_C_EVENT = 0 - CTRL_BREAK_EVENT = 1 - - // Windows reserves errors >= 1<<29 for application use. - APPLICATION_ERROR = 1 << 29 -) - -const ( - // flags for CreateToolhelp32Snapshot - TH32CS_SNAPHEAPLIST = 0x01 - TH32CS_SNAPPROCESS = 0x02 - TH32CS_SNAPTHREAD = 0x04 - TH32CS_SNAPMODULE = 0x08 - TH32CS_SNAPMODULE32 = 0x10 - TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD - TH32CS_INHERIT = 0x80000000 -) - -const ( - // filters for ReadDirectoryChangesW - FILE_NOTIFY_CHANGE_FILE_NAME = 0x001 - FILE_NOTIFY_CHANGE_DIR_NAME = 0x002 - FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x004 - FILE_NOTIFY_CHANGE_SIZE = 0x008 - FILE_NOTIFY_CHANGE_LAST_WRITE = 0x010 - FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x020 - FILE_NOTIFY_CHANGE_CREATION = 0x040 - FILE_NOTIFY_CHANGE_SECURITY = 0x100 -) - -const ( - // do not reorder - FILE_ACTION_ADDED = iota + 1 - FILE_ACTION_REMOVED - FILE_ACTION_MODIFIED - FILE_ACTION_RENAMED_OLD_NAME - FILE_ACTION_RENAMED_NEW_NAME -) - -const ( - // wincrypt.h - PROV_RSA_FULL = 1 - PROV_RSA_SIG = 2 - PROV_DSS = 3 - PROV_FORTEZZA = 4 - PROV_MS_EXCHANGE = 5 - PROV_SSL = 6 - PROV_RSA_SCHANNEL = 12 - PROV_DSS_DH = 13 - PROV_EC_ECDSA_SIG = 14 - PROV_EC_ECNRA_SIG = 15 - PROV_EC_ECDSA_FULL = 16 - PROV_EC_ECNRA_FULL = 17 - PROV_DH_SCHANNEL = 18 - PROV_SPYRUS_LYNKS = 20 - PROV_RNG = 21 - PROV_INTEL_SEC = 22 - PROV_REPLACE_OWF = 23 - PROV_RSA_AES = 24 - CRYPT_VERIFYCONTEXT = 0xF0000000 - CRYPT_NEWKEYSET = 0x00000008 - CRYPT_DELETEKEYSET = 0x00000010 - CRYPT_MACHINE_KEYSET = 0x00000020 - CRYPT_SILENT = 0x00000040 - CRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080 - - USAGE_MATCH_TYPE_AND = 0 - USAGE_MATCH_TYPE_OR = 1 - - X509_ASN_ENCODING = 0x00000001 - PKCS_7_ASN_ENCODING = 0x00010000 - - CERT_STORE_PROV_MEMORY = 2 - - CERT_STORE_ADD_ALWAYS = 4 - - CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004 - - CERT_TRUST_NO_ERROR = 0x00000000 - CERT_TRUST_IS_NOT_TIME_VALID = 0x00000001 - CERT_TRUST_IS_REVOKED = 0x00000004 - CERT_TRUST_IS_NOT_SIGNATURE_VALID = 0x00000008 - CERT_TRUST_IS_NOT_VALID_FOR_USAGE = 0x00000010 - CERT_TRUST_IS_UNTRUSTED_ROOT = 0x00000020 - CERT_TRUST_REVOCATION_STATUS_UNKNOWN = 0x00000040 - CERT_TRUST_IS_CYCLIC = 0x00000080 - CERT_TRUST_INVALID_EXTENSION = 0x00000100 - CERT_TRUST_INVALID_POLICY_CONSTRAINTS = 0x00000200 - CERT_TRUST_INVALID_BASIC_CONSTRAINTS = 0x00000400 - CERT_TRUST_INVALID_NAME_CONSTRAINTS = 0x00000800 - CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000 - CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT = 0x00002000 - CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000 - CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT = 0x00008000 - CERT_TRUST_IS_OFFLINE_REVOCATION = 0x01000000 - CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY = 0x02000000 - CERT_TRUST_IS_EXPLICIT_DISTRUST = 0x04000000 - CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT = 0x08000000 - - CERT_CHAIN_POLICY_BASE = 1 - CERT_CHAIN_POLICY_AUTHENTICODE = 2 - CERT_CHAIN_POLICY_AUTHENTICODE_TS = 3 - CERT_CHAIN_POLICY_SSL = 4 - CERT_CHAIN_POLICY_BASIC_CONSTRAINTS = 5 - CERT_CHAIN_POLICY_NT_AUTH = 6 - CERT_CHAIN_POLICY_MICROSOFT_ROOT = 7 - CERT_CHAIN_POLICY_EV = 8 - - CERT_E_EXPIRED = 0x800B0101 - CERT_E_ROLE = 0x800B0103 - CERT_E_PURPOSE = 0x800B0106 - CERT_E_UNTRUSTEDROOT = 0x800B0109 - CERT_E_CN_NO_MATCH = 0x800B010F - - AUTHTYPE_CLIENT = 1 - AUTHTYPE_SERVER = 2 -) - -var ( - OID_PKIX_KP_SERVER_AUTH = []byte("1.3.6.1.5.5.7.3.1\x00") - OID_SERVER_GATED_CRYPTO = []byte("1.3.6.1.4.1.311.10.3.3\x00") - OID_SGC_NETSCAPE = []byte("2.16.840.1.113730.4.1\x00") -) - -// Invented values to support what package os expects. -type Timeval struct { - Sec int32 - Usec int32 -} - -func (tv *Timeval) Nanoseconds() int64 { - return (int64(tv.Sec)*1e6 + int64(tv.Usec)) * 1e3 -} - -func NsecToTimeval(nsec int64) (tv Timeval) { - tv.Sec = int32(nsec / 1e9) - tv.Usec = int32(nsec % 1e9 / 1e3) - return -} - -type SecurityAttributes struct { - Length uint32 - SecurityDescriptor uintptr - InheritHandle uint32 -} - -type Overlapped struct { - Internal uintptr - InternalHigh uintptr - Offset uint32 - OffsetHigh uint32 - HEvent Handle -} - -type FileNotifyInformation struct { - NextEntryOffset uint32 - Action uint32 - FileNameLength uint32 - FileName uint16 -} - -type Filetime struct { - LowDateTime uint32 - HighDateTime uint32 -} - -// Nanoseconds returns Filetime ft in nanoseconds -// since Epoch (00:00:00 UTC, January 1, 1970). -func (ft *Filetime) Nanoseconds() int64 { - // 100-nanosecond intervals since January 1, 1601 - nsec := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime) - // change starting time to the Epoch (00:00:00 UTC, January 1, 1970) - nsec -= 116444736000000000 - // convert into nanoseconds - nsec *= 100 - return nsec -} - -func NsecToFiletime(nsec int64) (ft Filetime) { - // convert into 100-nanosecond - nsec /= 100 - // change starting time to January 1, 1601 - nsec += 116444736000000000 - // split into high / low - ft.LowDateTime = uint32(nsec & 0xffffffff) - ft.HighDateTime = uint32(nsec >> 32 & 0xffffffff) - return ft -} - -type Win32finddata struct { - FileAttributes uint32 - CreationTime Filetime - LastAccessTime Filetime - LastWriteTime Filetime - FileSizeHigh uint32 - FileSizeLow uint32 - Reserved0 uint32 - Reserved1 uint32 - FileName [MAX_PATH - 1]uint16 - AlternateFileName [13]uint16 -} - -// This is the actual system call structure. -// Win32finddata is what we committed to in Go 1. -type win32finddata1 struct { - FileAttributes uint32 - CreationTime Filetime - LastAccessTime Filetime - LastWriteTime Filetime - FileSizeHigh uint32 - FileSizeLow uint32 - Reserved0 uint32 - Reserved1 uint32 - FileName [MAX_PATH]uint16 - AlternateFileName [14]uint16 -} - -func copyFindData(dst *Win32finddata, src *win32finddata1) { - dst.FileAttributes = src.FileAttributes - dst.CreationTime = src.CreationTime - dst.LastAccessTime = src.LastAccessTime - dst.LastWriteTime = src.LastWriteTime - dst.FileSizeHigh = src.FileSizeHigh - dst.FileSizeLow = src.FileSizeLow - dst.Reserved0 = src.Reserved0 - dst.Reserved1 = src.Reserved1 - - // The src is 1 element bigger than dst, but it must be NUL. - copy(dst.FileName[:], src.FileName[:]) - copy(dst.AlternateFileName[:], src.AlternateFileName[:]) -} - -type ByHandleFileInformation struct { - FileAttributes uint32 - CreationTime Filetime - LastAccessTime Filetime - LastWriteTime Filetime - VolumeSerialNumber uint32 - FileSizeHigh uint32 - FileSizeLow uint32 - NumberOfLinks uint32 - FileIndexHigh uint32 - FileIndexLow uint32 -} - -const ( - GetFileExInfoStandard = 0 - GetFileExMaxInfoLevel = 1 -) - -type Win32FileAttributeData struct { - FileAttributes uint32 - CreationTime Filetime - LastAccessTime Filetime - LastWriteTime Filetime - FileSizeHigh uint32 - FileSizeLow uint32 -} - -// ShowWindow constants -const ( - // winuser.h - SW_HIDE = 0 - SW_NORMAL = 1 - SW_SHOWNORMAL = 1 - SW_SHOWMINIMIZED = 2 - SW_SHOWMAXIMIZED = 3 - SW_MAXIMIZE = 3 - SW_SHOWNOACTIVATE = 4 - SW_SHOW = 5 - SW_MINIMIZE = 6 - SW_SHOWMINNOACTIVE = 7 - SW_SHOWNA = 8 - SW_RESTORE = 9 - SW_SHOWDEFAULT = 10 - SW_FORCEMINIMIZE = 11 -) - -type StartupInfo struct { - Cb uint32 - _ *uint16 - Desktop *uint16 - Title *uint16 - X uint32 - Y uint32 - XSize uint32 - YSize uint32 - XCountChars uint32 - YCountChars uint32 - FillAttribute uint32 - Flags uint32 - ShowWindow uint16 - _ uint16 - _ *byte - StdInput Handle - StdOutput Handle - StdErr Handle -} - -type ProcessInformation struct { - Process Handle - Thread Handle - ProcessId uint32 - ThreadId uint32 -} - -type ProcessEntry32 struct { - Size uint32 - Usage uint32 - ProcessID uint32 - DefaultHeapID uintptr - ModuleID uint32 - Threads uint32 - ParentProcessID uint32 - PriClassBase int32 - Flags uint32 - ExeFile [MAX_PATH]uint16 -} - -type Systemtime struct { - Year uint16 - Month uint16 - DayOfWeek uint16 - Day uint16 - Hour uint16 - Minute uint16 - Second uint16 - Milliseconds uint16 -} - -type Timezoneinformation struct { - Bias int32 - StandardName [32]uint16 - StandardDate Systemtime - StandardBias int32 - DaylightName [32]uint16 - DaylightDate Systemtime - DaylightBias int32 -} - -// Socket related. - -const ( - AF_UNSPEC = 0 - AF_UNIX = 1 - AF_INET = 2 - AF_INET6 = 23 - AF_NETBIOS = 17 - - SOCK_STREAM = 1 - SOCK_DGRAM = 2 - SOCK_RAW = 3 - SOCK_SEQPACKET = 5 - - IPPROTO_IP = 0 - IPPROTO_IPV6 = 0x29 - IPPROTO_TCP = 6 - IPPROTO_UDP = 17 - - SOL_SOCKET = 0xffff - SO_REUSEADDR = 4 - SO_KEEPALIVE = 8 - SO_DONTROUTE = 16 - SO_BROADCAST = 32 - SO_LINGER = 128 - SO_RCVBUF = 0x1002 - SO_SNDBUF = 0x1001 - SO_UPDATE_ACCEPT_CONTEXT = 0x700b - SO_UPDATE_CONNECT_CONTEXT = 0x7010 - - IOC_OUT = 0x40000000 - IOC_IN = 0x80000000 - IOC_VENDOR = 0x18000000 - IOC_INOUT = IOC_IN | IOC_OUT - IOC_WS2 = 0x08000000 - SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6 - SIO_KEEPALIVE_VALS = IOC_IN | IOC_VENDOR | 4 - SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12 - - // cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460 - - IP_TOS = 0x3 - IP_TTL = 0x4 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_LOOP = 0xb - IP_ADD_MEMBERSHIP = 0xc - IP_DROP_MEMBERSHIP = 0xd - - IPV6_V6ONLY = 0x1b - IPV6_UNICAST_HOPS = 0x4 - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_LOOP = 0xb - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - - SOMAXCONN = 0x7fffffff - - TCP_NODELAY = 1 - - SHUT_RD = 0 - SHUT_WR = 1 - SHUT_RDWR = 2 - - WSADESCRIPTION_LEN = 256 - WSASYS_STATUS_LEN = 128 -) - -type WSABuf struct { - Len uint32 - Buf *byte -} - -// Invented values to support what package os expects. -const ( - S_IFMT = 0x1f000 - S_IFIFO = 0x1000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFBLK = 0x6000 - S_IFREG = 0x8000 - S_IFLNK = 0xa000 - S_IFSOCK = 0xc000 - S_ISUID = 0x800 - S_ISGID = 0x400 - S_ISVTX = 0x200 - S_IRUSR = 0x100 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXUSR = 0x40 -) - -const ( - FILE_TYPE_CHAR = 0x0002 - FILE_TYPE_DISK = 0x0001 - FILE_TYPE_PIPE = 0x0003 - FILE_TYPE_REMOTE = 0x8000 - FILE_TYPE_UNKNOWN = 0x0000 -) - -type Hostent struct { - Name *byte - Aliases **byte - AddrType uint16 - Length uint16 - AddrList **byte -} - -type Protoent struct { - Name *byte - Aliases **byte - Proto uint16 -} - -const ( - DNS_TYPE_A = 0x0001 - DNS_TYPE_NS = 0x0002 - DNS_TYPE_MD = 0x0003 - DNS_TYPE_MF = 0x0004 - DNS_TYPE_CNAME = 0x0005 - DNS_TYPE_SOA = 0x0006 - DNS_TYPE_MB = 0x0007 - DNS_TYPE_MG = 0x0008 - DNS_TYPE_MR = 0x0009 - DNS_TYPE_NULL = 0x000a - DNS_TYPE_WKS = 0x000b - DNS_TYPE_PTR = 0x000c - DNS_TYPE_HINFO = 0x000d - DNS_TYPE_MINFO = 0x000e - DNS_TYPE_MX = 0x000f - DNS_TYPE_TEXT = 0x0010 - DNS_TYPE_RP = 0x0011 - DNS_TYPE_AFSDB = 0x0012 - DNS_TYPE_X25 = 0x0013 - DNS_TYPE_ISDN = 0x0014 - DNS_TYPE_RT = 0x0015 - DNS_TYPE_NSAP = 0x0016 - DNS_TYPE_NSAPPTR = 0x0017 - DNS_TYPE_SIG = 0x0018 - DNS_TYPE_KEY = 0x0019 - DNS_TYPE_PX = 0x001a - DNS_TYPE_GPOS = 0x001b - DNS_TYPE_AAAA = 0x001c - DNS_TYPE_LOC = 0x001d - DNS_TYPE_NXT = 0x001e - DNS_TYPE_EID = 0x001f - DNS_TYPE_NIMLOC = 0x0020 - DNS_TYPE_SRV = 0x0021 - DNS_TYPE_ATMA = 0x0022 - DNS_TYPE_NAPTR = 0x0023 - DNS_TYPE_KX = 0x0024 - DNS_TYPE_CERT = 0x0025 - DNS_TYPE_A6 = 0x0026 - DNS_TYPE_DNAME = 0x0027 - DNS_TYPE_SINK = 0x0028 - DNS_TYPE_OPT = 0x0029 - DNS_TYPE_DS = 0x002B - DNS_TYPE_RRSIG = 0x002E - DNS_TYPE_NSEC = 0x002F - DNS_TYPE_DNSKEY = 0x0030 - DNS_TYPE_DHCID = 0x0031 - DNS_TYPE_UINFO = 0x0064 - DNS_TYPE_UID = 0x0065 - DNS_TYPE_GID = 0x0066 - DNS_TYPE_UNSPEC = 0x0067 - DNS_TYPE_ADDRS = 0x00f8 - DNS_TYPE_TKEY = 0x00f9 - DNS_TYPE_TSIG = 0x00fa - DNS_TYPE_IXFR = 0x00fb - DNS_TYPE_AXFR = 0x00fc - DNS_TYPE_MAILB = 0x00fd - DNS_TYPE_MAILA = 0x00fe - DNS_TYPE_ALL = 0x00ff - DNS_TYPE_ANY = 0x00ff - DNS_TYPE_WINS = 0xff01 - DNS_TYPE_WINSR = 0xff02 - DNS_TYPE_NBSTAT = 0xff01 -) - -const ( - DNS_INFO_NO_RECORDS = 0x251D -) - -const ( - // flags inside DNSRecord.Dw - DnsSectionQuestion = 0x0000 - DnsSectionAnswer = 0x0001 - DnsSectionAuthority = 0x0002 - DnsSectionAdditional = 0x0003 -) - -type DNSSRVData struct { - Target *uint16 - Priority uint16 - Weight uint16 - Port uint16 - Pad uint16 -} - -type DNSPTRData struct { - Host *uint16 -} - -type DNSMXData struct { - NameExchange *uint16 - Preference uint16 - Pad uint16 -} - -type DNSTXTData struct { - StringCount uint16 - StringArray [1]*uint16 -} - -type DNSRecord struct { - Next *DNSRecord - Name *uint16 - Type uint16 - Length uint16 - Dw uint32 - Ttl uint32 - Reserved uint32 - Data [40]byte -} - -const ( - TF_DISCONNECT = 1 - TF_REUSE_SOCKET = 2 - TF_WRITE_BEHIND = 4 - TF_USE_DEFAULT_WORKER = 0 - TF_USE_SYSTEM_THREAD = 16 - TF_USE_KERNEL_APC = 32 -) - -type TransmitFileBuffers struct { - Head uintptr - HeadLength uint32 - Tail uintptr - TailLength uint32 -} - -const ( - IFF_UP = 1 - IFF_BROADCAST = 2 - IFF_LOOPBACK = 4 - IFF_POINTTOPOINT = 8 - IFF_MULTICAST = 16 -) - -const SIO_GET_INTERFACE_LIST = 0x4004747F - -// TODO(mattn): SockaddrGen is union of sockaddr/sockaddr_in/sockaddr_in6_old. -// will be fixed to change variable type as suitable. - -type SockaddrGen [24]byte - -type InterfaceInfo struct { - Flags uint32 - Address SockaddrGen - BroadcastAddress SockaddrGen - Netmask SockaddrGen -} - -type IpAddressString struct { - String [16]byte -} - -type IpMaskString IpAddressString - -type IpAddrString struct { - Next *IpAddrString - IpAddress IpAddressString - IpMask IpMaskString - Context uint32 -} - -const MAX_ADAPTER_NAME_LENGTH = 256 -const MAX_ADAPTER_DESCRIPTION_LENGTH = 128 -const MAX_ADAPTER_ADDRESS_LENGTH = 8 - -type IpAdapterInfo struct { - Next *IpAdapterInfo - ComboIndex uint32 - AdapterName [MAX_ADAPTER_NAME_LENGTH + 4]byte - Description [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte - AddressLength uint32 - Address [MAX_ADAPTER_ADDRESS_LENGTH]byte - Index uint32 - Type uint32 - DhcpEnabled uint32 - CurrentIpAddress *IpAddrString - IpAddressList IpAddrString - GatewayList IpAddrString - DhcpServer IpAddrString - HaveWins bool - PrimaryWinsServer IpAddrString - SecondaryWinsServer IpAddrString - LeaseObtained int64 - LeaseExpires int64 -} - -const MAXLEN_PHYSADDR = 8 -const MAX_INTERFACE_NAME_LEN = 256 -const MAXLEN_IFDESCR = 256 - -type MibIfRow struct { - Name [MAX_INTERFACE_NAME_LEN]uint16 - Index uint32 - Type uint32 - Mtu uint32 - Speed uint32 - PhysAddrLen uint32 - PhysAddr [MAXLEN_PHYSADDR]byte - AdminStatus uint32 - OperStatus uint32 - LastChange uint32 - InOctets uint32 - InUcastPkts uint32 - InNUcastPkts uint32 - InDiscards uint32 - InErrors uint32 - InUnknownProtos uint32 - OutOctets uint32 - OutUcastPkts uint32 - OutNUcastPkts uint32 - OutDiscards uint32 - OutErrors uint32 - OutQLen uint32 - DescrLen uint32 - Descr [MAXLEN_IFDESCR]byte -} - -type CertContext struct { - EncodingType uint32 - EncodedCert *byte - Length uint32 - CertInfo uintptr - Store Handle -} - -type CertChainContext struct { - Size uint32 - TrustStatus CertTrustStatus - ChainCount uint32 - Chains **CertSimpleChain - LowerQualityChainCount uint32 - LowerQualityChains **CertChainContext - HasRevocationFreshnessTime uint32 - RevocationFreshnessTime uint32 -} - -type CertSimpleChain struct { - Size uint32 - TrustStatus CertTrustStatus - NumElements uint32 - Elements **CertChainElement - TrustListInfo uintptr - HasRevocationFreshnessTime uint32 - RevocationFreshnessTime uint32 -} - -type CertChainElement struct { - Size uint32 - CertContext *CertContext - TrustStatus CertTrustStatus - RevocationInfo *CertRevocationInfo - IssuanceUsage *CertEnhKeyUsage - ApplicationUsage *CertEnhKeyUsage - ExtendedErrorInfo *uint16 -} - -type CertRevocationInfo struct { - Size uint32 - RevocationResult uint32 - RevocationOid *byte - OidSpecificInfo uintptr - HasFreshnessTime uint32 - FreshnessTime uint32 - CrlInfo uintptr // *CertRevocationCrlInfo -} - -type CertTrustStatus struct { - ErrorStatus uint32 - InfoStatus uint32 -} - -type CertUsageMatch struct { - Type uint32 - Usage CertEnhKeyUsage -} - -type CertEnhKeyUsage struct { - Length uint32 - UsageIdentifiers **byte -} - -type CertChainPara struct { - Size uint32 - RequestedUsage CertUsageMatch - RequstedIssuancePolicy CertUsageMatch - URLRetrievalTimeout uint32 - CheckRevocationFreshnessTime uint32 - RevocationFreshnessTime uint32 - CacheResync *Filetime -} - -type CertChainPolicyPara struct { - Size uint32 - Flags uint32 - ExtraPolicyPara uintptr -} - -type SSLExtraCertChainPolicyPara struct { - Size uint32 - AuthType uint32 - Checks uint32 - ServerName *uint16 -} - -type CertChainPolicyStatus struct { - Size uint32 - Error uint32 - ChainIndex uint32 - ElementIndex uint32 - ExtraPolicyStatus uintptr -} - -const ( - // do not reorder - HKEY_CLASSES_ROOT = 0x80000000 + iota - HKEY_CURRENT_USER - HKEY_LOCAL_MACHINE - HKEY_USERS - HKEY_PERFORMANCE_DATA - HKEY_CURRENT_CONFIG - HKEY_DYN_DATA - - KEY_QUERY_VALUE = 1 - KEY_SET_VALUE = 2 - KEY_CREATE_SUB_KEY = 4 - KEY_ENUMERATE_SUB_KEYS = 8 - KEY_NOTIFY = 16 - KEY_CREATE_LINK = 32 - KEY_WRITE = 0x20006 - KEY_EXECUTE = 0x20019 - KEY_READ = 0x20019 - KEY_WOW64_64KEY = 0x0100 - KEY_WOW64_32KEY = 0x0200 - KEY_ALL_ACCESS = 0xf003f -) - -const ( - // do not reorder - REG_NONE = iota - REG_SZ - REG_EXPAND_SZ - REG_BINARY - REG_DWORD_LITTLE_ENDIAN - REG_DWORD_BIG_ENDIAN - REG_LINK - REG_MULTI_SZ - REG_RESOURCE_LIST - REG_FULL_RESOURCE_DESCRIPTOR - REG_RESOURCE_REQUIREMENTS_LIST - REG_QWORD_LITTLE_ENDIAN - REG_DWORD = REG_DWORD_LITTLE_ENDIAN - REG_QWORD = REG_QWORD_LITTLE_ENDIAN -) - -type AddrinfoW struct { - Flags int32 - Family int32 - Socktype int32 - Protocol int32 - Addrlen uintptr - Canonname *uint16 - Addr uintptr - Next *AddrinfoW -} - -const ( - AI_PASSIVE = 1 - AI_CANONNAME = 2 - AI_NUMERICHOST = 4 -) - -type GUID struct { - Data1 uint32 - Data2 uint16 - Data3 uint16 - Data4 [8]byte -} - -var WSAID_CONNECTEX = GUID{ - 0x25a207b9, - 0xddf3, - 0x4660, - [8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}, -} - -const ( - FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1 - FILE_SKIP_SET_EVENT_ON_HANDLE = 2 -) - -const ( - WSAPROTOCOL_LEN = 255 - MAX_PROTOCOL_CHAIN = 7 - BASE_PROTOCOL = 1 - LAYERED_PROTOCOL = 0 - - XP1_CONNECTIONLESS = 0x00000001 - XP1_GUARANTEED_DELIVERY = 0x00000002 - XP1_GUARANTEED_ORDER = 0x00000004 - XP1_MESSAGE_ORIENTED = 0x00000008 - XP1_PSEUDO_STREAM = 0x00000010 - XP1_GRACEFUL_CLOSE = 0x00000020 - XP1_EXPEDITED_DATA = 0x00000040 - XP1_CONNECT_DATA = 0x00000080 - XP1_DISCONNECT_DATA = 0x00000100 - XP1_SUPPORT_BROADCAST = 0x00000200 - XP1_SUPPORT_MULTIPOINT = 0x00000400 - XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800 - XP1_MULTIPOINT_DATA_PLANE = 0x00001000 - XP1_QOS_SUPPORTED = 0x00002000 - XP1_UNI_SEND = 0x00008000 - XP1_UNI_RECV = 0x00010000 - XP1_IFS_HANDLES = 0x00020000 - XP1_PARTIAL_MESSAGE = 0x00040000 - XP1_SAN_SUPPORT_SDP = 0x00080000 - - PFL_MULTIPLE_PROTO_ENTRIES = 0x00000001 - PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002 - PFL_HIDDEN = 0x00000004 - PFL_MATCHES_PROTOCOL_ZERO = 0x00000008 - PFL_NETWORKDIRECT_PROVIDER = 0x00000010 -) - -type WSAProtocolInfo struct { - ServiceFlags1 uint32 - ServiceFlags2 uint32 - ServiceFlags3 uint32 - ServiceFlags4 uint32 - ProviderFlags uint32 - ProviderId GUID - CatalogEntryId uint32 - ProtocolChain WSAProtocolChain - Version int32 - AddressFamily int32 - MaxSockAddr int32 - MinSockAddr int32 - SocketType int32 - Protocol int32 - ProtocolMaxOffset int32 - NetworkByteOrder int32 - SecurityScheme int32 - MessageSize uint32 - ProviderReserved uint32 - ProtocolName [WSAPROTOCOL_LEN + 1]uint16 -} - -type WSAProtocolChain struct { - ChainLen int32 - ChainEntries [MAX_PROTOCOL_CHAIN]uint32 -} - -type TCPKeepalive struct { - OnOff uint32 - Time uint32 - Interval uint32 -} - -type symbolicLinkReparseBuffer struct { - SubstituteNameOffset uint16 - SubstituteNameLength uint16 - PrintNameOffset uint16 - PrintNameLength uint16 - Flags uint32 - PathBuffer [1]uint16 -} - -type mountPointReparseBuffer struct { - SubstituteNameOffset uint16 - SubstituteNameLength uint16 - PrintNameOffset uint16 - PrintNameLength uint16 - PathBuffer [1]uint16 -} - -type reparseDataBuffer struct { - ReparseTag uint32 - ReparseDataLength uint16 - Reserved uint16 - - // GenericReparseBuffer - reparseBuffer byte -} - -const ( - FSCTL_GET_REPARSE_POINT = 0x900A8 - MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024 - IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003 - IO_REPARSE_TAG_SYMLINK = 0xA000000C - SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1 -) - -const ( - ComputerNameNetBIOS = 0 - ComputerNameDnsHostname = 1 - ComputerNameDnsDomain = 2 - ComputerNameDnsFullyQualified = 3 - ComputerNamePhysicalNetBIOS = 4 - ComputerNamePhysicalDnsHostname = 5 - ComputerNamePhysicalDnsDomain = 6 - ComputerNamePhysicalDnsFullyQualified = 7 - ComputerNameMax = 8 -) - -const ( - MOVEFILE_REPLACE_EXISTING = 0x1 - MOVEFILE_COPY_ALLOWED = 0x2 - MOVEFILE_DELAY_UNTIL_REBOOT = 0x4 - MOVEFILE_WRITE_THROUGH = 0x8 - MOVEFILE_CREATE_HARDLINK = 0x10 - MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20 -) - -const GAA_FLAG_INCLUDE_PREFIX = 0x00000010 - -const ( - IF_TYPE_OTHER = 1 - IF_TYPE_ETHERNET_CSMACD = 6 - IF_TYPE_ISO88025_TOKENRING = 9 - IF_TYPE_PPP = 23 - IF_TYPE_SOFTWARE_LOOPBACK = 24 - IF_TYPE_ATM = 37 - IF_TYPE_IEEE80211 = 71 - IF_TYPE_TUNNEL = 131 - IF_TYPE_IEEE1394 = 144 -) - -type SocketAddress struct { - Sockaddr *syscall.RawSockaddrAny - SockaddrLength int32 -} - -type IpAdapterUnicastAddress struct { - Length uint32 - Flags uint32 - Next *IpAdapterUnicastAddress - Address SocketAddress - PrefixOrigin int32 - SuffixOrigin int32 - DadState int32 - ValidLifetime uint32 - PreferredLifetime uint32 - LeaseLifetime uint32 - OnLinkPrefixLength uint8 -} - -type IpAdapterAnycastAddress struct { - Length uint32 - Flags uint32 - Next *IpAdapterAnycastAddress - Address SocketAddress -} - -type IpAdapterMulticastAddress struct { - Length uint32 - Flags uint32 - Next *IpAdapterMulticastAddress - Address SocketAddress -} - -type IpAdapterDnsServerAdapter struct { - Length uint32 - Reserved uint32 - Next *IpAdapterDnsServerAdapter - Address SocketAddress -} - -type IpAdapterPrefix struct { - Length uint32 - Flags uint32 - Next *IpAdapterPrefix - Address SocketAddress - PrefixLength uint32 -} - -type IpAdapterAddresses struct { - Length uint32 - IfIndex uint32 - Next *IpAdapterAddresses - AdapterName *byte - FirstUnicastAddress *IpAdapterUnicastAddress - FirstAnycastAddress *IpAdapterAnycastAddress - FirstMulticastAddress *IpAdapterMulticastAddress - FirstDnsServerAddress *IpAdapterDnsServerAdapter - DnsSuffix *uint16 - Description *uint16 - FriendlyName *uint16 - PhysicalAddress [syscall.MAX_ADAPTER_ADDRESS_LENGTH]byte - PhysicalAddressLength uint32 - Flags uint32 - Mtu uint32 - IfType uint32 - OperStatus uint32 - Ipv6IfIndex uint32 - ZoneIndices [16]uint32 - FirstPrefix *IpAdapterPrefix - /* more fields might be present here. */ -} - -const ( - IfOperStatusUp = 1 - IfOperStatusDown = 2 - IfOperStatusTesting = 3 - IfOperStatusUnknown = 4 - IfOperStatusDormant = 5 - IfOperStatusNotPresent = 6 - IfOperStatusLowerLayerDown = 7 -) diff --git a/vendor/golang.org/x/sys/windows/ztypes_windows_386.go b/vendor/golang.org/x/sys/windows/ztypes_windows_386.go deleted file mode 100644 index 10f33be..0000000 --- a/vendor/golang.org/x/sys/windows/ztypes_windows_386.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package windows - -type WSAData struct { - Version uint16 - HighVersion uint16 - Description [WSADESCRIPTION_LEN + 1]byte - SystemStatus [WSASYS_STATUS_LEN + 1]byte - MaxSockets uint16 - MaxUdpDg uint16 - VendorInfo *byte -} - -type Servent struct { - Name *byte - Aliases **byte - Port uint16 - Proto *byte -} diff --git a/vendor/golang.org/x/sys/windows/ztypes_windows_amd64.go b/vendor/golang.org/x/sys/windows/ztypes_windows_amd64.go deleted file mode 100644 index 3f272c2..0000000 --- a/vendor/golang.org/x/sys/windows/ztypes_windows_amd64.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package windows - -type WSAData struct { - Version uint16 - HighVersion uint16 - MaxSockets uint16 - MaxUdpDg uint16 - VendorInfo *byte - Description [WSADESCRIPTION_LEN + 1]byte - SystemStatus [WSASYS_STATUS_LEN + 1]byte -} - -type Servent struct { - Name *byte - Aliases **byte - Proto *byte - Port uint16 -} diff --git a/vendor/gopkg.in/yaml.v2/decode_test.go b/vendor/gopkg.in/yaml.v2/decode_test.go deleted file mode 100644 index a6fea0f..0000000 --- a/vendor/gopkg.in/yaml.v2/decode_test.go +++ /dev/null @@ -1,998 +0,0 @@ -package yaml_test - -import ( - "errors" - . "gopkg.in/check.v1" - "gopkg.in/yaml.v2" - "math" - "net" - "reflect" - "strings" - "time" -) - -var unmarshalIntTest = 123 - -var unmarshalTests = []struct { - data string - value interface{} -}{ - { - "", - &struct{}{}, - }, { - "{}", &struct{}{}, - }, { - "v: hi", - map[string]string{"v": "hi"}, - }, { - "v: hi", map[string]interface{}{"v": "hi"}, - }, { - "v: true", - map[string]string{"v": "true"}, - }, { - "v: true", - map[string]interface{}{"v": true}, - }, { - "v: 10", - map[string]interface{}{"v": 10}, - }, { - "v: 0b10", - map[string]interface{}{"v": 2}, - }, { - "v: 0xA", - map[string]interface{}{"v": 10}, - }, { - "v: 4294967296", - map[string]int64{"v": 4294967296}, - }, { - "v: 0.1", - map[string]interface{}{"v": 0.1}, - }, { - "v: .1", - map[string]interface{}{"v": 0.1}, - }, { - "v: .Inf", - map[string]interface{}{"v": math.Inf(+1)}, - }, { - "v: -.Inf", - map[string]interface{}{"v": math.Inf(-1)}, - }, { - "v: -10", - map[string]interface{}{"v": -10}, - }, { - "v: -.1", - map[string]interface{}{"v": -0.1}, - }, - - // Simple values. - { - "123", - &unmarshalIntTest, - }, - - // Floats from spec - { - "canonical: 6.8523e+5", - map[string]interface{}{"canonical": 6.8523e+5}, - }, { - "expo: 685.230_15e+03", - map[string]interface{}{"expo": 685.23015e+03}, - }, { - "fixed: 685_230.15", - map[string]interface{}{"fixed": 685230.15}, - }, { - "neginf: -.inf", - map[string]interface{}{"neginf": math.Inf(-1)}, - }, { - "fixed: 685_230.15", - map[string]float64{"fixed": 685230.15}, - }, - //{"sexa: 190:20:30.15", map[string]interface{}{"sexa": 0}}, // Unsupported - //{"notanum: .NaN", map[string]interface{}{"notanum": math.NaN()}}, // Equality of NaN fails. - - // Bools from spec - { - "canonical: y", - map[string]interface{}{"canonical": true}, - }, { - "answer: NO", - map[string]interface{}{"answer": false}, - }, { - "logical: True", - map[string]interface{}{"logical": true}, - }, { - "option: on", - map[string]interface{}{"option": true}, - }, { - "option: on", - map[string]bool{"option": true}, - }, - // Ints from spec - { - "canonical: 685230", - map[string]interface{}{"canonical": 685230}, - }, { - "decimal: +685_230", - map[string]interface{}{"decimal": 685230}, - }, { - "octal: 02472256", - map[string]interface{}{"octal": 685230}, - }, { - "hexa: 0x_0A_74_AE", - map[string]interface{}{"hexa": 685230}, - }, { - "bin: 0b1010_0111_0100_1010_1110", - map[string]interface{}{"bin": 685230}, - }, { - "bin: -0b101010", - map[string]interface{}{"bin": -42}, - }, { - "decimal: +685_230", - map[string]int{"decimal": 685230}, - }, - - //{"sexa: 190:20:30", map[string]interface{}{"sexa": 0}}, // Unsupported - - // Nulls from spec - { - "empty:", - map[string]interface{}{"empty": nil}, - }, { - "canonical: ~", - map[string]interface{}{"canonical": nil}, - }, { - "english: null", - map[string]interface{}{"english": nil}, - }, { - "~: null key", - map[interface{}]string{nil: "null key"}, - }, { - "empty:", - map[string]*bool{"empty": nil}, - }, - - // Flow sequence - { - "seq: [A,B]", - map[string]interface{}{"seq": []interface{}{"A", "B"}}, - }, { - "seq: [A,B,C,]", - map[string][]string{"seq": []string{"A", "B", "C"}}, - }, { - "seq: [A,1,C]", - map[string][]string{"seq": []string{"A", "1", "C"}}, - }, { - "seq: [A,1,C]", - map[string][]int{"seq": []int{1}}, - }, { - "seq: [A,1,C]", - map[string]interface{}{"seq": []interface{}{"A", 1, "C"}}, - }, - // Block sequence - { - "seq:\n - A\n - B", - map[string]interface{}{"seq": []interface{}{"A", "B"}}, - }, { - "seq:\n - A\n - B\n - C", - map[string][]string{"seq": []string{"A", "B", "C"}}, - }, { - "seq:\n - A\n - 1\n - C", - map[string][]string{"seq": []string{"A", "1", "C"}}, - }, { - "seq:\n - A\n - 1\n - C", - map[string][]int{"seq": []int{1}}, - }, { - "seq:\n - A\n - 1\n - C", - map[string]interface{}{"seq": []interface{}{"A", 1, "C"}}, - }, - - // Literal block scalar - { - "scalar: | # Comment\n\n literal\n\n \ttext\n\n", - map[string]string{"scalar": "\nliteral\n\n\ttext\n"}, - }, - - // Folded block scalar - { - "scalar: > # Comment\n\n folded\n line\n \n next\n line\n * one\n * two\n\n last\n line\n\n", - map[string]string{"scalar": "\nfolded line\nnext line\n * one\n * two\n\nlast line\n"}, - }, - - // Map inside interface with no type hints. - { - "a: {b: c}", - map[interface{}]interface{}{"a": map[interface{}]interface{}{"b": "c"}}, - }, - - // Structs and type conversions. - { - "hello: world", - &struct{ Hello string }{"world"}, - }, { - "a: {b: c}", - &struct{ A struct{ B string } }{struct{ B string }{"c"}}, - }, { - "a: {b: c}", - &struct{ A *struct{ B string } }{&struct{ B string }{"c"}}, - }, { - "a: {b: c}", - &struct{ A map[string]string }{map[string]string{"b": "c"}}, - }, { - "a: {b: c}", - &struct{ A *map[string]string }{&map[string]string{"b": "c"}}, - }, { - "a:", - &struct{ A map[string]string }{}, - }, { - "a: 1", - &struct{ A int }{1}, - }, { - "a: 1", - &struct{ A float64 }{1}, - }, { - "a: 1.0", - &struct{ A int }{1}, - }, { - "a: 1.0", - &struct{ A uint }{1}, - }, { - "a: [1, 2]", - &struct{ A []int }{[]int{1, 2}}, - }, { - "a: 1", - &struct{ B int }{0}, - }, { - "a: 1", - &struct { - B int "a" - }{1}, - }, { - "a: y", - &struct{ A bool }{true}, - }, - - // Some cross type conversions - { - "v: 42", - map[string]uint{"v": 42}, - }, { - "v: -42", - map[string]uint{}, - }, { - "v: 4294967296", - map[string]uint64{"v": 4294967296}, - }, { - "v: -4294967296", - map[string]uint64{}, - }, - - // int - { - "int_max: 2147483647", - map[string]int{"int_max": math.MaxInt32}, - }, - { - "int_min: -2147483648", - map[string]int{"int_min": math.MinInt32}, - }, - { - "int_overflow: 9223372036854775808", // math.MaxInt64 + 1 - map[string]int{}, - }, - - // int64 - { - "int64_max: 9223372036854775807", - map[string]int64{"int64_max": math.MaxInt64}, - }, - { - "int64_max_base2: 0b111111111111111111111111111111111111111111111111111111111111111", - map[string]int64{"int64_max_base2": math.MaxInt64}, - }, - { - "int64_min: -9223372036854775808", - map[string]int64{"int64_min": math.MinInt64}, - }, - { - "int64_neg_base2: -0b111111111111111111111111111111111111111111111111111111111111111", - map[string]int64{"int64_neg_base2": -math.MaxInt64}, - }, - { - "int64_overflow: 9223372036854775808", // math.MaxInt64 + 1 - map[string]int64{}, - }, - - // uint - { - "uint_min: 0", - map[string]uint{"uint_min": 0}, - }, - { - "uint_max: 4294967295", - map[string]uint{"uint_max": math.MaxUint32}, - }, - { - "uint_underflow: -1", - map[string]uint{}, - }, - - // uint64 - { - "uint64_min: 0", - map[string]uint{"uint64_min": 0}, - }, - { - "uint64_max: 18446744073709551615", - map[string]uint64{"uint64_max": math.MaxUint64}, - }, - { - "uint64_max_base2: 0b1111111111111111111111111111111111111111111111111111111111111111", - map[string]uint64{"uint64_max_base2": math.MaxUint64}, - }, - { - "uint64_maxint64: 9223372036854775807", - map[string]uint64{"uint64_maxint64": math.MaxInt64}, - }, - { - "uint64_underflow: -1", - map[string]uint64{}, - }, - - // float32 - { - "float32_max: 3.40282346638528859811704183484516925440e+38", - map[string]float32{"float32_max": math.MaxFloat32}, - }, - { - "float32_nonzero: 1.401298464324817070923729583289916131280e-45", - map[string]float32{"float32_nonzero": math.SmallestNonzeroFloat32}, - }, - { - "float32_maxuint64: 18446744073709551615", - map[string]float32{"float32_maxuint64": float32(math.MaxUint64)}, - }, - { - "float32_maxuint64+1: 18446744073709551616", - map[string]float32{"float32_maxuint64+1": float32(math.MaxUint64 + 1)}, - }, - - // float64 - { - "float64_max: 1.797693134862315708145274237317043567981e+308", - map[string]float64{"float64_max": math.MaxFloat64}, - }, - { - "float64_nonzero: 4.940656458412465441765687928682213723651e-324", - map[string]float64{"float64_nonzero": math.SmallestNonzeroFloat64}, - }, - { - "float64_maxuint64: 18446744073709551615", - map[string]float64{"float64_maxuint64": float64(math.MaxUint64)}, - }, - { - "float64_maxuint64+1: 18446744073709551616", - map[string]float64{"float64_maxuint64+1": float64(math.MaxUint64 + 1)}, - }, - - // Overflow cases. - { - "v: 4294967297", - map[string]int32{}, - }, { - "v: 128", - map[string]int8{}, - }, - - // Quoted values. - { - "'1': '\"2\"'", - map[interface{}]interface{}{"1": "\"2\""}, - }, { - "v:\n- A\n- 'B\n\n C'\n", - map[string][]string{"v": []string{"A", "B\nC"}}, - }, - - // Explicit tags. - { - "v: !!float '1.1'", - map[string]interface{}{"v": 1.1}, - }, { - "v: !!null ''", - map[string]interface{}{"v": nil}, - }, { - "%TAG !y! tag:yaml.org,2002:\n---\nv: !y!int '1'", - map[string]interface{}{"v": 1}, - }, - - // Anchors and aliases. - { - "a: &x 1\nb: &y 2\nc: *x\nd: *y\n", - &struct{ A, B, C, D int }{1, 2, 1, 2}, - }, { - "a: &a {c: 1}\nb: *a", - &struct { - A, B struct { - C int - } - }{struct{ C int }{1}, struct{ C int }{1}}, - }, { - "a: &a [1, 2]\nb: *a", - &struct{ B []int }{[]int{1, 2}}, - }, { - "b: *a\na: &a {c: 1}", - &struct { - A, B struct { - C int - } - }{struct{ C int }{1}, struct{ C int }{1}}, - }, - - // Bug #1133337 - { - "foo: ''", - map[string]*string{"foo": new(string)}, - }, { - "foo: null", - map[string]string{"foo": ""}, - }, { - "foo: null", - map[string]interface{}{"foo": nil}, - }, - - // Ignored field - { - "a: 1\nb: 2\n", - &struct { - A int - B int "-" - }{1, 0}, - }, - - // Bug #1191981 - { - "" + - "%YAML 1.1\n" + - "--- !!str\n" + - `"Generic line break (no glyph)\n\` + "\n" + - ` Generic line break (glyphed)\n\` + "\n" + - ` Line separator\u2028\` + "\n" + - ` Paragraph separator\u2029"` + "\n", - "" + - "Generic line break (no glyph)\n" + - "Generic line break (glyphed)\n" + - "Line separator\u2028Paragraph separator\u2029", - }, - - // Struct inlining - { - "a: 1\nb: 2\nc: 3\n", - &struct { - A int - C inlineB `yaml:",inline"` - }{1, inlineB{2, inlineC{3}}}, - }, - - // Map inlining - { - "a: 1\nb: 2\nc: 3\n", - &struct { - A int - C map[string]int `yaml:",inline"` - }{1, map[string]int{"b": 2, "c": 3}}, - }, - - // bug 1243827 - { - "a: -b_c", - map[string]interface{}{"a": "-b_c"}, - }, - { - "a: +b_c", - map[string]interface{}{"a": "+b_c"}, - }, - { - "a: 50cent_of_dollar", - map[string]interface{}{"a": "50cent_of_dollar"}, - }, - - // Duration - { - "a: 3s", - map[string]time.Duration{"a": 3 * time.Second}, - }, - - // Issue #24. - { - "a: ", - map[string]string{"a": ""}, - }, - - // Base 60 floats are obsolete and unsupported. - { - "a: 1:1\n", - map[string]string{"a": "1:1"}, - }, - - // Binary data. - { - "a: !!binary gIGC\n", - map[string]string{"a": "\x80\x81\x82"}, - }, { - "a: !!binary |\n " + strings.Repeat("kJCQ", 17) + "kJ\n CQ\n", - map[string]string{"a": strings.Repeat("\x90", 54)}, - }, { - "a: !!binary |\n " + strings.Repeat("A", 70) + "\n ==\n", - map[string]string{"a": strings.Repeat("\x00", 52)}, - }, - - // Ordered maps. - { - "{b: 2, a: 1, d: 4, c: 3, sub: {e: 5}}", - &yaml.MapSlice{{"b", 2}, {"a", 1}, {"d", 4}, {"c", 3}, {"sub", yaml.MapSlice{{"e", 5}}}}, - }, - - // Issue #39. - { - "a:\n b:\n c: d\n", - map[string]struct{ B interface{} }{"a": {map[interface{}]interface{}{"c": "d"}}}, - }, - - // Custom map type. - { - "a: {b: c}", - M{"a": M{"b": "c"}}, - }, - - // Support encoding.TextUnmarshaler. - { - "a: 1.2.3.4\n", - map[string]net.IP{"a": net.IPv4(1, 2, 3, 4)}, - }, - { - "a: 2015-02-24T18:19:39Z\n", - map[string]time.Time{"a": time.Unix(1424801979, 0).In(time.UTC)}, - }, - - // Encode empty lists as zero-length slices. - { - "a: []", - &struct{ A []int }{[]int{}}, - }, - - // UTF-16-LE - { - "\xff\xfe\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00\n\x00", - M{"ñoño": "very yes"}, - }, - // UTF-16-LE with surrogate. - { - "\xff\xfe\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00 \x00=\xd8\xd4\xdf\n\x00", - M{"ñoño": "very yes 🟔"}, - }, - - // UTF-16-BE - { - "\xfe\xff\x00\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00\n", - M{"ñoño": "very yes"}, - }, - // UTF-16-BE with surrogate. - { - "\xfe\xff\x00\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00 \xd8=\xdf\xd4\x00\n", - M{"ñoño": "very yes 🟔"}, - }, - - // YAML Float regex shouldn't match this - { - "a: 123456e1\n", - M{"a": "123456e1"}, - }, { - "a: 123456E1\n", - M{"a": "123456E1"}, - }, -} - -type M map[interface{}]interface{} - -type inlineB struct { - B int - inlineC `yaml:",inline"` -} - -type inlineC struct { - C int -} - -func (s *S) TestUnmarshal(c *C) { - for _, item := range unmarshalTests { - t := reflect.ValueOf(item.value).Type() - var value interface{} - switch t.Kind() { - case reflect.Map: - value = reflect.MakeMap(t).Interface() - case reflect.String: - value = reflect.New(t).Interface() - case reflect.Ptr: - value = reflect.New(t.Elem()).Interface() - default: - c.Fatalf("missing case for %s", t) - } - err := yaml.Unmarshal([]byte(item.data), value) - if _, ok := err.(*yaml.TypeError); !ok { - c.Assert(err, IsNil) - } - if t.Kind() == reflect.String { - c.Assert(*value.(*string), Equals, item.value) - } else { - c.Assert(value, DeepEquals, item.value) - } - } -} - -func (s *S) TestUnmarshalNaN(c *C) { - value := map[string]interface{}{} - err := yaml.Unmarshal([]byte("notanum: .NaN"), &value) - c.Assert(err, IsNil) - c.Assert(math.IsNaN(value["notanum"].(float64)), Equals, true) -} - -var unmarshalErrorTests = []struct { - data, error string -}{ - {"v: !!float 'error'", "yaml: cannot decode !!str `error` as a !!float"}, - {"v: [A,", "yaml: line 1: did not find expected node content"}, - {"v:\n- [A,", "yaml: line 2: did not find expected node content"}, - {"a: *b\n", "yaml: unknown anchor 'b' referenced"}, - {"a: &a\n b: *a\n", "yaml: anchor 'a' value contains itself"}, - {"value: -", "yaml: block sequence entries are not allowed in this context"}, - {"a: !!binary ==", "yaml: !!binary value contains invalid base64 data"}, - {"{[.]}", `yaml: invalid map key: \[\]interface \{\}\{"\."\}`}, - {"{{.}}", `yaml: invalid map key: map\[interface\ \{\}\]interface \{\}\{".":interface \{\}\(nil\)\}`}, -} - -func (s *S) TestUnmarshalErrors(c *C) { - for _, item := range unmarshalErrorTests { - var value interface{} - err := yaml.Unmarshal([]byte(item.data), &value) - c.Assert(err, ErrorMatches, item.error, Commentf("Partial unmarshal: %#v", value)) - } -} - -var unmarshalerTests = []struct { - data, tag string - value interface{} -}{ - {"_: {hi: there}", "!!map", map[interface{}]interface{}{"hi": "there"}}, - {"_: [1,A]", "!!seq", []interface{}{1, "A"}}, - {"_: 10", "!!int", 10}, - {"_: null", "!!null", nil}, - {`_: BAR!`, "!!str", "BAR!"}, - {`_: "BAR!"`, "!!str", "BAR!"}, - {"_: !!foo 'BAR!'", "!!foo", "BAR!"}, - {`_: ""`, "!!str", ""}, -} - -var unmarshalerResult = map[int]error{} - -type unmarshalerType struct { - value interface{} -} - -func (o *unmarshalerType) UnmarshalYAML(unmarshal func(v interface{}) error) error { - if err := unmarshal(&o.value); err != nil { - return err - } - if i, ok := o.value.(int); ok { - if result, ok := unmarshalerResult[i]; ok { - return result - } - } - return nil -} - -type unmarshalerPointer struct { - Field *unmarshalerType "_" -} - -type unmarshalerValue struct { - Field unmarshalerType "_" -} - -func (s *S) TestUnmarshalerPointerField(c *C) { - for _, item := range unmarshalerTests { - obj := &unmarshalerPointer{} - err := yaml.Unmarshal([]byte(item.data), obj) - c.Assert(err, IsNil) - if item.value == nil { - c.Assert(obj.Field, IsNil) - } else { - c.Assert(obj.Field, NotNil, Commentf("Pointer not initialized (%#v)", item.value)) - c.Assert(obj.Field.value, DeepEquals, item.value) - } - } -} - -func (s *S) TestUnmarshalerValueField(c *C) { - for _, item := range unmarshalerTests { - obj := &unmarshalerValue{} - err := yaml.Unmarshal([]byte(item.data), obj) - c.Assert(err, IsNil) - c.Assert(obj.Field, NotNil, Commentf("Pointer not initialized (%#v)", item.value)) - c.Assert(obj.Field.value, DeepEquals, item.value) - } -} - -func (s *S) TestUnmarshalerWholeDocument(c *C) { - obj := &unmarshalerType{} - err := yaml.Unmarshal([]byte(unmarshalerTests[0].data), obj) - c.Assert(err, IsNil) - value, ok := obj.value.(map[interface{}]interface{}) - c.Assert(ok, Equals, true, Commentf("value: %#v", obj.value)) - c.Assert(value["_"], DeepEquals, unmarshalerTests[0].value) -} - -func (s *S) TestUnmarshalerTypeError(c *C) { - unmarshalerResult[2] = &yaml.TypeError{[]string{"foo"}} - unmarshalerResult[4] = &yaml.TypeError{[]string{"bar"}} - defer func() { - delete(unmarshalerResult, 2) - delete(unmarshalerResult, 4) - }() - - type T struct { - Before int - After int - M map[string]*unmarshalerType - } - var v T - data := `{before: A, m: {abc: 1, def: 2, ghi: 3, jkl: 4}, after: B}` - err := yaml.Unmarshal([]byte(data), &v) - c.Assert(err, ErrorMatches, ""+ - "yaml: unmarshal errors:\n"+ - " line 1: cannot unmarshal !!str `A` into int\n"+ - " foo\n"+ - " bar\n"+ - " line 1: cannot unmarshal !!str `B` into int") - c.Assert(v.M["abc"], NotNil) - c.Assert(v.M["def"], IsNil) - c.Assert(v.M["ghi"], NotNil) - c.Assert(v.M["jkl"], IsNil) - - c.Assert(v.M["abc"].value, Equals, 1) - c.Assert(v.M["ghi"].value, Equals, 3) -} - -type proxyTypeError struct{} - -func (v *proxyTypeError) UnmarshalYAML(unmarshal func(interface{}) error) error { - var s string - var a int32 - var b int64 - if err := unmarshal(&s); err != nil { - panic(err) - } - if s == "a" { - if err := unmarshal(&b); err == nil { - panic("should have failed") - } - return unmarshal(&a) - } - if err := unmarshal(&a); err == nil { - panic("should have failed") - } - return unmarshal(&b) -} - -func (s *S) TestUnmarshalerTypeErrorProxying(c *C) { - type T struct { - Before int - After int - M map[string]*proxyTypeError - } - var v T - data := `{before: A, m: {abc: a, def: b}, after: B}` - err := yaml.Unmarshal([]byte(data), &v) - c.Assert(err, ErrorMatches, ""+ - "yaml: unmarshal errors:\n"+ - " line 1: cannot unmarshal !!str `A` into int\n"+ - " line 1: cannot unmarshal !!str `a` into int32\n"+ - " line 1: cannot unmarshal !!str `b` into int64\n"+ - " line 1: cannot unmarshal !!str `B` into int") -} - -type failingUnmarshaler struct{} - -var failingErr = errors.New("failingErr") - -func (ft *failingUnmarshaler) UnmarshalYAML(unmarshal func(interface{}) error) error { - return failingErr -} - -func (s *S) TestUnmarshalerError(c *C) { - err := yaml.Unmarshal([]byte("a: b"), &failingUnmarshaler{}) - c.Assert(err, Equals, failingErr) -} - -type sliceUnmarshaler []int - -func (su *sliceUnmarshaler) UnmarshalYAML(unmarshal func(interface{}) error) error { - var slice []int - err := unmarshal(&slice) - if err == nil { - *su = slice - return nil - } - - var intVal int - err = unmarshal(&intVal) - if err == nil { - *su = []int{intVal} - return nil - } - - return err -} - -func (s *S) TestUnmarshalerRetry(c *C) { - var su sliceUnmarshaler - err := yaml.Unmarshal([]byte("[1, 2, 3]"), &su) - c.Assert(err, IsNil) - c.Assert(su, DeepEquals, sliceUnmarshaler([]int{1, 2, 3})) - - err = yaml.Unmarshal([]byte("1"), &su) - c.Assert(err, IsNil) - c.Assert(su, DeepEquals, sliceUnmarshaler([]int{1})) -} - -// From http://yaml.org/type/merge.html -var mergeTests = ` -anchors: - list: - - &CENTER { "x": 1, "y": 2 } - - &LEFT { "x": 0, "y": 2 } - - &BIG { "r": 10 } - - &SMALL { "r": 1 } - -# All the following maps are equal: - -plain: - # Explicit keys - "x": 1 - "y": 2 - "r": 10 - label: center/big - -mergeOne: - # Merge one map - << : *CENTER - "r": 10 - label: center/big - -mergeMultiple: - # Merge multiple maps - << : [ *CENTER, *BIG ] - label: center/big - -override: - # Override - << : [ *BIG, *LEFT, *SMALL ] - "x": 1 - label: center/big - -shortTag: - # Explicit short merge tag - !!merge "<<" : [ *CENTER, *BIG ] - label: center/big - -longTag: - # Explicit merge long tag - ! "<<" : [ *CENTER, *BIG ] - label: center/big - -inlineMap: - # Inlined map - << : {"x": 1, "y": 2, "r": 10} - label: center/big - -inlineSequenceMap: - # Inlined map in sequence - << : [ *CENTER, {"r": 10} ] - label: center/big -` - -func (s *S) TestMerge(c *C) { - var want = map[interface{}]interface{}{ - "x": 1, - "y": 2, - "r": 10, - "label": "center/big", - } - - var m map[interface{}]interface{} - err := yaml.Unmarshal([]byte(mergeTests), &m) - c.Assert(err, IsNil) - for name, test := range m { - if name == "anchors" { - continue - } - c.Assert(test, DeepEquals, want, Commentf("test %q failed", name)) - } -} - -func (s *S) TestMergeStruct(c *C) { - type Data struct { - X, Y, R int - Label string - } - want := Data{1, 2, 10, "center/big"} - - var m map[string]Data - err := yaml.Unmarshal([]byte(mergeTests), &m) - c.Assert(err, IsNil) - for name, test := range m { - if name == "anchors" { - continue - } - c.Assert(test, Equals, want, Commentf("test %q failed", name)) - } -} - -var unmarshalNullTests = []func() interface{}{ - func() interface{} { var v interface{}; v = "v"; return &v }, - func() interface{} { var s = "s"; return &s }, - func() interface{} { var s = "s"; sptr := &s; return &sptr }, - func() interface{} { var i = 1; return &i }, - func() interface{} { var i = 1; iptr := &i; return &iptr }, - func() interface{} { m := map[string]int{"s": 1}; return &m }, - func() interface{} { m := map[string]int{"s": 1}; return m }, -} - -func (s *S) TestUnmarshalNull(c *C) { - for _, test := range unmarshalNullTests { - item := test() - zero := reflect.Zero(reflect.TypeOf(item).Elem()).Interface() - err := yaml.Unmarshal([]byte("null"), item) - c.Assert(err, IsNil) - if reflect.TypeOf(item).Kind() == reflect.Map { - c.Assert(reflect.ValueOf(item).Interface(), DeepEquals, reflect.MakeMap(reflect.TypeOf(item)).Interface()) - } else { - c.Assert(reflect.ValueOf(item).Elem().Interface(), DeepEquals, zero) - } - } -} - -func (s *S) TestUnmarshalSliceOnPreset(c *C) { - // Issue #48. - v := struct{ A []int }{[]int{1}} - yaml.Unmarshal([]byte("a: [2]"), &v) - c.Assert(v.A, DeepEquals, []int{2}) -} - -//var data []byte -//func init() { -// var err error -// data, err = ioutil.ReadFile("/tmp/file.yaml") -// if err != nil { -// panic(err) -// } -//} -// -//func (s *S) BenchmarkUnmarshal(c *C) { -// var err error -// for i := 0; i < c.N; i++ { -// var v map[string]interface{} -// err = yaml.Unmarshal(data, &v) -// } -// if err != nil { -// panic(err) -// } -//} -// -//func (s *S) BenchmarkMarshal(c *C) { -// var v map[string]interface{} -// yaml.Unmarshal(data, &v) -// c.ResetTimer() -// for i := 0; i < c.N; i++ { -// yaml.Marshal(&v) -// } -//} diff --git a/vendor/gopkg.in/yaml.v2/encode_test.go b/vendor/gopkg.in/yaml.v2/encode_test.go deleted file mode 100644 index 84099bd..0000000 --- a/vendor/gopkg.in/yaml.v2/encode_test.go +++ /dev/null @@ -1,501 +0,0 @@ -package yaml_test - -import ( - "fmt" - "math" - "strconv" - "strings" - "time" - - . "gopkg.in/check.v1" - "gopkg.in/yaml.v2" - "net" - "os" -) - -var marshalIntTest = 123 - -var marshalTests = []struct { - value interface{} - data string -}{ - { - nil, - "null\n", - }, { - &struct{}{}, - "{}\n", - }, { - map[string]string{"v": "hi"}, - "v: hi\n", - }, { - map[string]interface{}{"v": "hi"}, - "v: hi\n", - }, { - map[string]string{"v": "true"}, - "v: \"true\"\n", - }, { - map[string]string{"v": "false"}, - "v: \"false\"\n", - }, { - map[string]interface{}{"v": true}, - "v: true\n", - }, { - map[string]interface{}{"v": false}, - "v: false\n", - }, { - map[string]interface{}{"v": 10}, - "v: 10\n", - }, { - map[string]interface{}{"v": -10}, - "v: -10\n", - }, { - map[string]uint{"v": 42}, - "v: 42\n", - }, { - map[string]interface{}{"v": int64(4294967296)}, - "v: 4294967296\n", - }, { - map[string]int64{"v": int64(4294967296)}, - "v: 4294967296\n", - }, { - map[string]uint64{"v": 4294967296}, - "v: 4294967296\n", - }, { - map[string]interface{}{"v": "10"}, - "v: \"10\"\n", - }, { - map[string]interface{}{"v": 0.1}, - "v: 0.1\n", - }, { - map[string]interface{}{"v": float64(0.1)}, - "v: 0.1\n", - }, { - map[string]interface{}{"v": -0.1}, - "v: -0.1\n", - }, { - map[string]interface{}{"v": math.Inf(+1)}, - "v: .inf\n", - }, { - map[string]interface{}{"v": math.Inf(-1)}, - "v: -.inf\n", - }, { - map[string]interface{}{"v": math.NaN()}, - "v: .nan\n", - }, { - map[string]interface{}{"v": nil}, - "v: null\n", - }, { - map[string]interface{}{"v": ""}, - "v: \"\"\n", - }, { - map[string][]string{"v": []string{"A", "B"}}, - "v:\n- A\n- B\n", - }, { - map[string][]string{"v": []string{"A", "B\nC"}}, - "v:\n- A\n- |-\n B\n C\n", - }, { - map[string][]interface{}{"v": []interface{}{"A", 1, map[string][]int{"B": []int{2, 3}}}}, - "v:\n- A\n- 1\n- B:\n - 2\n - 3\n", - }, { - map[string]interface{}{"a": map[interface{}]interface{}{"b": "c"}}, - "a:\n b: c\n", - }, { - map[string]interface{}{"a": "-"}, - "a: '-'\n", - }, - - // Simple values. - { - &marshalIntTest, - "123\n", - }, - - // Structures - { - &struct{ Hello string }{"world"}, - "hello: world\n", - }, { - &struct { - A struct { - B string - } - }{struct{ B string }{"c"}}, - "a:\n b: c\n", - }, { - &struct { - A *struct { - B string - } - }{&struct{ B string }{"c"}}, - "a:\n b: c\n", - }, { - &struct { - A *struct { - B string - } - }{}, - "a: null\n", - }, { - &struct{ A int }{1}, - "a: 1\n", - }, { - &struct{ A []int }{[]int{1, 2}}, - "a:\n- 1\n- 2\n", - }, { - &struct { - B int "a" - }{1}, - "a: 1\n", - }, { - &struct{ A bool }{true}, - "a: true\n", - }, - - // Conditional flag - { - &struct { - A int "a,omitempty" - B int "b,omitempty" - }{1, 0}, - "a: 1\n", - }, { - &struct { - A int "a,omitempty" - B int "b,omitempty" - }{0, 0}, - "{}\n", - }, { - &struct { - A *struct{ X, y int } "a,omitempty,flow" - }{&struct{ X, y int }{1, 2}}, - "a: {x: 1}\n", - }, { - &struct { - A *struct{ X, y int } "a,omitempty,flow" - }{nil}, - "{}\n", - }, { - &struct { - A *struct{ X, y int } "a,omitempty,flow" - }{&struct{ X, y int }{}}, - "a: {x: 0}\n", - }, { - &struct { - A struct{ X, y int } "a,omitempty,flow" - }{struct{ X, y int }{1, 2}}, - "a: {x: 1}\n", - }, { - &struct { - A struct{ X, y int } "a,omitempty,flow" - }{struct{ X, y int }{0, 1}}, - "{}\n", - }, { - &struct { - A float64 "a,omitempty" - B float64 "b,omitempty" - }{1, 0}, - "a: 1\n", - }, - - // Flow flag - { - &struct { - A []int "a,flow" - }{[]int{1, 2}}, - "a: [1, 2]\n", - }, { - &struct { - A map[string]string "a,flow" - }{map[string]string{"b": "c", "d": "e"}}, - "a: {b: c, d: e}\n", - }, { - &struct { - A struct { - B, D string - } "a,flow" - }{struct{ B, D string }{"c", "e"}}, - "a: {b: c, d: e}\n", - }, - - // Unexported field - { - &struct { - u int - A int - }{0, 1}, - "a: 1\n", - }, - - // Ignored field - { - &struct { - A int - B int "-" - }{1, 2}, - "a: 1\n", - }, - - // Struct inlining - { - &struct { - A int - C inlineB `yaml:",inline"` - }{1, inlineB{2, inlineC{3}}}, - "a: 1\nb: 2\nc: 3\n", - }, - - // Map inlining - { - &struct { - A int - C map[string]int `yaml:",inline"` - }{1, map[string]int{"b": 2, "c": 3}}, - "a: 1\nb: 2\nc: 3\n", - }, - - // Duration - { - map[string]time.Duration{"a": 3 * time.Second}, - "a: 3s\n", - }, - - // Issue #24: bug in map merging logic. - { - map[string]string{"a": ""}, - "a: \n", - }, - - // Issue #34: marshal unsupported base 60 floats quoted for compatibility - // with old YAML 1.1 parsers. - { - map[string]string{"a": "1:1"}, - "a: \"1:1\"\n", - }, - - // Binary data. - { - map[string]string{"a": "\x00"}, - "a: \"\\0\"\n", - }, { - map[string]string{"a": "\x80\x81\x82"}, - "a: !!binary gIGC\n", - }, { - map[string]string{"a": strings.Repeat("\x90", 54)}, - "a: !!binary |\n " + strings.Repeat("kJCQ", 17) + "kJ\n CQ\n", - }, - - // Ordered maps. - { - &yaml.MapSlice{{"b", 2}, {"a", 1}, {"d", 4}, {"c", 3}, {"sub", yaml.MapSlice{{"e", 5}}}}, - "b: 2\na: 1\nd: 4\nc: 3\nsub:\n e: 5\n", - }, - - // Encode unicode as utf-8 rather than in escaped form. - { - map[string]string{"a": "你好"}, - "a: 你好\n", - }, - - // Support encoding.TextMarshaler. - { - map[string]net.IP{"a": net.IPv4(1, 2, 3, 4)}, - "a: 1.2.3.4\n", - }, - { - map[string]time.Time{"a": time.Unix(1424801979, 0)}, - "a: 2015-02-24T18:19:39Z\n", - }, - - // Ensure strings containing ": " are quoted (reported as PR #43, but not reproducible). - { - map[string]string{"a": "b: c"}, - "a: 'b: c'\n", - }, - - // Containing hash mark ('#') in string should be quoted - { - map[string]string{"a": "Hello #comment"}, - "a: 'Hello #comment'\n", - }, - { - map[string]string{"a": "你好 #comment"}, - "a: '你好 #comment'\n", - }, -} - -func (s *S) TestMarshal(c *C) { - defer os.Setenv("TZ", os.Getenv("TZ")) - os.Setenv("TZ", "UTC") - for _, item := range marshalTests { - data, err := yaml.Marshal(item.value) - c.Assert(err, IsNil) - c.Assert(string(data), Equals, item.data) - } -} - -var marshalErrorTests = []struct { - value interface{} - error string - panic string -}{{ - value: &struct { - B int - inlineB ",inline" - }{1, inlineB{2, inlineC{3}}}, - panic: `Duplicated key 'b' in struct struct \{ B int; .*`, -}, { - value: &struct { - A int - B map[string]int ",inline" - }{1, map[string]int{"a": 2}}, - panic: `Can't have key "a" in inlined map; conflicts with struct field`, -}} - -func (s *S) TestMarshalErrors(c *C) { - for _, item := range marshalErrorTests { - if item.panic != "" { - c.Assert(func() { yaml.Marshal(item.value) }, PanicMatches, item.panic) - } else { - _, err := yaml.Marshal(item.value) - c.Assert(err, ErrorMatches, item.error) - } - } -} - -func (s *S) TestMarshalTypeCache(c *C) { - var data []byte - var err error - func() { - type T struct{ A int } - data, err = yaml.Marshal(&T{}) - c.Assert(err, IsNil) - }() - func() { - type T struct{ B int } - data, err = yaml.Marshal(&T{}) - c.Assert(err, IsNil) - }() - c.Assert(string(data), Equals, "b: 0\n") -} - -var marshalerTests = []struct { - data string - value interface{} -}{ - {"_:\n hi: there\n", map[interface{}]interface{}{"hi": "there"}}, - {"_:\n- 1\n- A\n", []interface{}{1, "A"}}, - {"_: 10\n", 10}, - {"_: null\n", nil}, - {"_: BAR!\n", "BAR!"}, -} - -type marshalerType struct { - value interface{} -} - -func (o marshalerType) MarshalText() ([]byte, error) { - panic("MarshalText called on type with MarshalYAML") -} - -func (o marshalerType) MarshalYAML() (interface{}, error) { - return o.value, nil -} - -type marshalerValue struct { - Field marshalerType "_" -} - -func (s *S) TestMarshaler(c *C) { - for _, item := range marshalerTests { - obj := &marshalerValue{} - obj.Field.value = item.value - data, err := yaml.Marshal(obj) - c.Assert(err, IsNil) - c.Assert(string(data), Equals, string(item.data)) - } -} - -func (s *S) TestMarshalerWholeDocument(c *C) { - obj := &marshalerType{} - obj.value = map[string]string{"hello": "world!"} - data, err := yaml.Marshal(obj) - c.Assert(err, IsNil) - c.Assert(string(data), Equals, "hello: world!\n") -} - -type failingMarshaler struct{} - -func (ft *failingMarshaler) MarshalYAML() (interface{}, error) { - return nil, failingErr -} - -func (s *S) TestMarshalerError(c *C) { - _, err := yaml.Marshal(&failingMarshaler{}) - c.Assert(err, Equals, failingErr) -} - -func (s *S) TestSortedOutput(c *C) { - order := []interface{}{ - false, - true, - 1, - uint(1), - 1.0, - 1.1, - 1.2, - 2, - uint(2), - 2.0, - 2.1, - "", - ".1", - ".2", - ".a", - "1", - "2", - "a!10", - "a/2", - "a/10", - "a~10", - "ab/1", - "b/1", - "b/01", - "b/2", - "b/02", - "b/3", - "b/03", - "b1", - "b01", - "b3", - "c2.10", - "c10.2", - "d1", - "d12", - "d12a", - } - m := make(map[interface{}]int) - for _, k := range order { - m[k] = 1 - } - data, err := yaml.Marshal(m) - c.Assert(err, IsNil) - out := "\n" + string(data) - last := 0 - for i, k := range order { - repr := fmt.Sprint(k) - if s, ok := k.(string); ok { - if _, err = strconv.ParseFloat(repr, 32); s == "" || err == nil { - repr = `"` + repr + `"` - } - } - index := strings.Index(out, "\n"+repr+":") - if index == -1 { - c.Fatalf("%#v is not in the output: %#v", k, out) - } - if index < last { - c.Fatalf("%#v was generated before %#v: %q", k, order[i-1], out) - } - last = index - } -} diff --git a/vendor/gopkg.in/yaml.v2/suite_test.go b/vendor/gopkg.in/yaml.v2/suite_test.go deleted file mode 100644 index c5cf1ed..0000000 --- a/vendor/gopkg.in/yaml.v2/suite_test.go +++ /dev/null @@ -1,12 +0,0 @@ -package yaml_test - -import ( - . "gopkg.in/check.v1" - "testing" -) - -func Test(t *testing.T) { TestingT(t) } - -type S struct{} - -var _ = Suite(&S{}) -- cgit 1.2.3-korg