summaryrefslogtreecommitdiff
path: root/vendor/github.com
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com')
-rw-r--r--vendor/github.com/alexflint/go-filemutex/LICENSE21
-rw-r--r--vendor/github.com/alexflint/go-filemutex/README.md31
-rw-r--r--vendor/github.com/alexflint/go-filemutex/filemutex_flock.go67
-rw-r--r--vendor/github.com/alexflint/go-filemutex/filemutex_windows.go102
-rw-r--r--vendor/github.com/containernetworking/cni/LICENSE202
-rw-r--r--vendor/github.com/containernetworking/cni/pkg/skel/skel.go307
-rw-r--r--vendor/github.com/containernetworking/cni/pkg/types/020/types.go140
-rw-r--r--vendor/github.com/containernetworking/cni/pkg/types/args.go112
-rw-r--r--vendor/github.com/containernetworking/cni/pkg/types/current/types.go293
-rw-r--r--vendor/github.com/containernetworking/cni/pkg/types/types.go199
-rw-r--r--vendor/github.com/containernetworking/cni/pkg/version/conf.go37
-rw-r--r--vendor/github.com/containernetworking/cni/pkg/version/plugin.go144
-rw-r--r--vendor/github.com/containernetworking/cni/pkg/version/reconcile.go49
-rw-r--r--vendor/github.com/containernetworking/cni/pkg/version/version.go83
-rw-r--r--vendor/github.com/containernetworking/plugins/LICENSE201
-rw-r--r--vendor/github.com/containernetworking/plugins/pkg/ns/README.md41
-rw-r--r--vendor/github.com/containernetworking/plugins/pkg/ns/ns_linux.go216
-rw-r--r--vendor/github.com/containernetworking/plugins/pkg/testutils/bad_reader.go33
-rw-r--r--vendor/github.com/containernetworking/plugins/pkg/testutils/cmd.go112
-rw-r--r--vendor/github.com/containernetworking/plugins/pkg/testutils/netns_linux.go157
-rw-r--r--vendor/github.com/containernetworking/plugins/pkg/testutils/ping.go55
-rw-r--r--vendor/github.com/containernetworking/plugins/pkg/utils/buildversion/buildversion.go26
-rw-r--r--vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/disk/backend.go209
-rw-r--r--vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/disk/lock.go59
-rw-r--r--vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/store.go28
-rw-r--r--vendor/github.com/coreos/go-iptables/LICENSE191
-rw-r--r--vendor/github.com/coreos/go-iptables/NOTICE5
-rw-r--r--vendor/github.com/coreos/go-iptables/iptables/iptables.go598
-rw-r--r--vendor/github.com/coreos/go-iptables/iptables/lock.go84
-rw-r--r--vendor/github.com/hpcloud/tail/.gitignore3
-rw-r--r--vendor/github.com/hpcloud/tail/.travis.yml18
-rw-r--r--vendor/github.com/hpcloud/tail/CHANGES.md63
-rw-r--r--vendor/github.com/hpcloud/tail/Dockerfile19
-rw-r--r--vendor/github.com/hpcloud/tail/LICENSE.txt21
-rw-r--r--vendor/github.com/hpcloud/tail/Makefile11
-rw-r--r--vendor/github.com/hpcloud/tail/README.md28
-rw-r--r--vendor/github.com/hpcloud/tail/appveyor.yml11
-rw-r--r--vendor/github.com/hpcloud/tail/ratelimiter/Licence7
-rw-r--r--vendor/github.com/hpcloud/tail/ratelimiter/leakybucket.go97
-rw-r--r--vendor/github.com/hpcloud/tail/ratelimiter/memory.go58
-rw-r--r--vendor/github.com/hpcloud/tail/ratelimiter/storage.go6
-rw-r--r--vendor/github.com/hpcloud/tail/tail.go438
-rw-r--r--vendor/github.com/hpcloud/tail/tail_posix.go11
-rw-r--r--vendor/github.com/hpcloud/tail/tail_windows.go12
-rw-r--r--vendor/github.com/hpcloud/tail/util/util.go48
-rw-r--r--vendor/github.com/hpcloud/tail/watch/filechanges.go36
-rw-r--r--vendor/github.com/hpcloud/tail/watch/inotify.go128
-rw-r--r--vendor/github.com/hpcloud/tail/watch/inotify_tracker.go260
-rw-r--r--vendor/github.com/hpcloud/tail/watch/polling.go118
-rw-r--r--vendor/github.com/hpcloud/tail/watch/watch.go20
-rw-r--r--vendor/github.com/hpcloud/tail/winfile/winfile.go92
-rw-r--r--vendor/github.com/konsorten/go-windows-terminal-sequences/LICENSE9
-rw-r--r--vendor/github.com/konsorten/go-windows-terminal-sequences/README.md40
-rw-r--r--vendor/github.com/konsorten/go-windows-terminal-sequences/go.mod1
-rw-r--r--vendor/github.com/konsorten/go-windows-terminal-sequences/sequences.go36
-rw-r--r--vendor/github.com/onsi/ginkgo/.gitignore7
-rw-r--r--vendor/github.com/onsi/ginkgo/.travis.yml15
-rw-r--r--vendor/github.com/onsi/ginkgo/CHANGELOG.md244
-rw-r--r--vendor/github.com/onsi/ginkgo/CONTRIBUTING.md33
-rw-r--r--vendor/github.com/onsi/ginkgo/LICENSE20
-rw-r--r--vendor/github.com/onsi/ginkgo/README.md121
-rw-r--r--vendor/github.com/onsi/ginkgo/RELEASING.md14
-rw-r--r--vendor/github.com/onsi/ginkgo/config/config.go206
-rw-r--r--vendor/github.com/onsi/ginkgo/ginkgo_dsl.go619
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/codelocation/code_location.go48
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/containernode/container_node.go151
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/failer/failer.go92
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/leafnodes/benchmarker.go103
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/leafnodes/interfaces.go19
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/leafnodes/it_node.go47
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/leafnodes/measure_node.go62
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/leafnodes/runner.go117
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/leafnodes/setup_nodes.go48
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/leafnodes/suite_nodes.go55
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/leafnodes/synchronized_after_suite_node.go90
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/leafnodes/synchronized_before_suite_node.go181
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/remote/aggregator.go249
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/remote/forwarding_reporter.go147
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor.go13
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_unix.go83
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_win.go36
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/remote/server.go224
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_linux_arm64.go11
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_solaris.go9
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_unix.go11
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/spec/spec.go247
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/spec/specs.go144
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/spec_iterator/index_computer.go55
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/spec_iterator/parallel_spec_iterator.go59
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/spec_iterator/serial_spec_iterator.go45
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/spec_iterator/sharded_parallel_spec_iterator.go47
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/spec_iterator/spec_iterator.go20
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/specrunner/random_id.go15
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/specrunner/spec_runner.go411
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/suite/suite.go190
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/testingtproxy/testing_t_proxy.go76
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/writer/fake_writer.go36
-rw-r--r--vendor/github.com/onsi/ginkgo/internal/writer/writer.go89
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/default_reporter.go87
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/fake_reporter.go59
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/junit_reporter.go169
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/reporter.go15
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/stenographer/console_logging.go64
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/stenographer/fake_stenographer.go142
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/stenographer/stenographer.go572
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/LICENSE21
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/README.md43
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/colorable_others.go24
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/colorable_windows.go783
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/noncolorable.go57
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/LICENSE9
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/README.md37
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/doc.go2
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_appengine.go9
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_bsd.go18
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_linux.go18
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_solaris.go16
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_windows.go19
-rw-r--r--vendor/github.com/onsi/ginkgo/reporters/teamcity_reporter.go98
-rw-r--r--vendor/github.com/onsi/ginkgo/types/code_location.go15
-rw-r--r--vendor/github.com/onsi/ginkgo/types/synchronization.go30
-rw-r--r--vendor/github.com/onsi/ginkgo/types/types.go174
-rw-r--r--vendor/github.com/onsi/gomega/.gitignore5
-rw-r--r--vendor/github.com/onsi/gomega/.travis.yml18
-rw-r--r--vendor/github.com/onsi/gomega/CHANGELOG.md168
-rw-r--r--vendor/github.com/onsi/gomega/CONTRIBUTING.md14
-rw-r--r--vendor/github.com/onsi/gomega/LICENSE20
-rw-r--r--vendor/github.com/onsi/gomega/Makefile6
-rw-r--r--vendor/github.com/onsi/gomega/README.md21
-rw-r--r--vendor/github.com/onsi/gomega/RELEASING.md12
-rw-r--r--vendor/github.com/onsi/gomega/format/format.go397
-rw-r--r--vendor/github.com/onsi/gomega/go.mod15
-rw-r--r--vendor/github.com/onsi/gomega/go.sum24
-rw-r--r--vendor/github.com/onsi/gomega/gomega_dsl.go429
-rw-r--r--vendor/github.com/onsi/gomega/internal/assertion/assertion.go105
-rw-r--r--vendor/github.com/onsi/gomega/internal/asyncassertion/async_assertion.go196
-rw-r--r--vendor/github.com/onsi/gomega/internal/oraclematcher/oracle_matcher.go25
-rw-r--r--vendor/github.com/onsi/gomega/internal/testingtsupport/testing_t_support.go60
-rw-r--r--vendor/github.com/onsi/gomega/matchers.go443
-rw-r--r--vendor/github.com/onsi/gomega/matchers/and.go63
-rw-r--r--vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.go37
-rw-r--r--vendor/github.com/onsi/gomega/matchers/attributes_slice.go14
-rw-r--r--vendor/github.com/onsi/gomega/matchers/be_a_directory.go56
-rw-r--r--vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go56
-rw-r--r--vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go40
-rw-r--r--vendor/github.com/onsi/gomega/matchers/be_closed_matcher.go48
-rw-r--r--vendor/github.com/onsi/gomega/matchers/be_element_of_matcher.go57
-rw-r--r--vendor/github.com/onsi/gomega/matchers/be_empty_matcher.go29
-rw-r--r--vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.go36
-rw-r--r--vendor/github.com/onsi/gomega/matchers/be_false_matcher.go28
-rw-r--r--vendor/github.com/onsi/gomega/matchers/be_identical_to.go39
-rw-r--r--vendor/github.com/onsi/gomega/matchers/be_nil_matcher.go20
-rw-r--r--vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go134
-rw-r--r--vendor/github.com/onsi/gomega/matchers/be_sent_matcher.go73
-rw-r--r--vendor/github.com/onsi/gomega/matchers/be_temporally_matcher.go68
-rw-r--r--vendor/github.com/onsi/gomega/matchers/be_true_matcher.go28
-rw-r--r--vendor/github.com/onsi/gomega/matchers/be_zero_matcher.go28
-rw-r--r--vendor/github.com/onsi/gomega/matchers/consist_of.go82
-rw-r--r--vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go60
-rw-r--r--vendor/github.com/onsi/gomega/matchers/contain_substring_matcher.go40
-rw-r--r--vendor/github.com/onsi/gomega/matchers/equal_matcher.go42
-rw-r--r--vendor/github.com/onsi/gomega/matchers/have_cap_matcher.go30
-rw-r--r--vendor/github.com/onsi/gomega/matchers/have_key_matcher.go56
-rw-r--r--vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher.go76
-rw-r--r--vendor/github.com/onsi/gomega/matchers/have_len_matcher.go28
-rw-r--r--vendor/github.com/onsi/gomega/matchers/have_occurred_matcher.go35
-rw-r--r--vendor/github.com/onsi/gomega/matchers/have_prefix_matcher.go36
-rw-r--r--vendor/github.com/onsi/gomega/matchers/have_suffix_matcher.go36
-rw-r--r--vendor/github.com/onsi/gomega/matchers/match_error_matcher.go51
-rw-r--r--vendor/github.com/onsi/gomega/matchers/match_json_matcher.go65
-rw-r--r--vendor/github.com/onsi/gomega/matchers/match_regexp_matcher.go43
-rw-r--r--vendor/github.com/onsi/gomega/matchers/match_xml_matcher.go134
-rw-r--r--vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.go76
-rw-r--r--vendor/github.com/onsi/gomega/matchers/not.go30
-rw-r--r--vendor/github.com/onsi/gomega/matchers/or.go67
-rw-r--r--vendor/github.com/onsi/gomega/matchers/panic_matcher.go46
-rw-r--r--vendor/github.com/onsi/gomega/matchers/receive_matcher.go130
-rw-r--r--vendor/github.com/onsi/gomega/matchers/semi_structured_data_support.go94
-rw-r--r--vendor/github.com/onsi/gomega/matchers/succeed_matcher.go33
-rw-r--r--vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.go40
-rw-r--r--vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go159
-rw-r--r--vendor/github.com/onsi/gomega/matchers/support/goraph/edge/edge.go61
-rw-r--r--vendor/github.com/onsi/gomega/matchers/support/goraph/node/node.go7
-rw-r--r--vendor/github.com/onsi/gomega/matchers/support/goraph/util/util.go7
-rw-r--r--vendor/github.com/onsi/gomega/matchers/type_support.go182
-rw-r--r--vendor/github.com/onsi/gomega/matchers/with_transform.go72
-rw-r--r--vendor/github.com/onsi/gomega/types/types.go26
-rw-r--r--vendor/github.com/pkg/errors/.gitignore24
-rw-r--r--vendor/github.com/pkg/errors/.travis.yml15
-rw-r--r--vendor/github.com/pkg/errors/LICENSE23
-rw-r--r--vendor/github.com/pkg/errors/README.md52
-rw-r--r--vendor/github.com/pkg/errors/appveyor.yml32
-rw-r--r--vendor/github.com/pkg/errors/errors.go282
-rw-r--r--vendor/github.com/pkg/errors/stack.go147
-rw-r--r--vendor/github.com/sirupsen/logrus/.gitignore2
-rw-r--r--vendor/github.com/sirupsen/logrus/.travis.yml25
-rw-r--r--vendor/github.com/sirupsen/logrus/CHANGELOG.md200
-rw-r--r--vendor/github.com/sirupsen/logrus/LICENSE21
-rw-r--r--vendor/github.com/sirupsen/logrus/README.md495
-rw-r--r--vendor/github.com/sirupsen/logrus/alt_exit.go76
-rw-r--r--vendor/github.com/sirupsen/logrus/appveyor.yml14
-rw-r--r--vendor/github.com/sirupsen/logrus/doc.go26
-rw-r--r--vendor/github.com/sirupsen/logrus/entry.go407
-rw-r--r--vendor/github.com/sirupsen/logrus/exported.go225
-rw-r--r--vendor/github.com/sirupsen/logrus/formatter.go78
-rw-r--r--vendor/github.com/sirupsen/logrus/go.mod10
-rw-r--r--vendor/github.com/sirupsen/logrus/go.sum16
-rw-r--r--vendor/github.com/sirupsen/logrus/hooks.go34
-rw-r--r--vendor/github.com/sirupsen/logrus/json_formatter.go121
-rw-r--r--vendor/github.com/sirupsen/logrus/logger.go351
-rw-r--r--vendor/github.com/sirupsen/logrus/logrus.go186
-rw-r--r--vendor/github.com/sirupsen/logrus/terminal_check_appengine.go11
-rw-r--r--vendor/github.com/sirupsen/logrus/terminal_check_bsd.go13
-rw-r--r--vendor/github.com/sirupsen/logrus/terminal_check_no_terminal.go11
-rw-r--r--vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go17
-rw-r--r--vendor/github.com/sirupsen/logrus/terminal_check_solaris.go11
-rw-r--r--vendor/github.com/sirupsen/logrus/terminal_check_unix.go13
-rw-r--r--vendor/github.com/sirupsen/logrus/terminal_check_windows.go34
-rw-r--r--vendor/github.com/sirupsen/logrus/text_formatter.go295
-rw-r--r--vendor/github.com/sirupsen/logrus/writer.go64
-rw-r--r--vendor/github.com/vishvananda/netlink/.travis.yml13
-rw-r--r--vendor/github.com/vishvananda/netlink/CHANGELOG.md5
-rw-r--r--vendor/github.com/vishvananda/netlink/LICENSE192
-rw-r--r--vendor/github.com/vishvananda/netlink/Makefile30
-rw-r--r--vendor/github.com/vishvananda/netlink/README.md92
-rw-r--r--vendor/github.com/vishvananda/netlink/addr.go56
-rw-r--r--vendor/github.com/vishvananda/netlink/addr_linux.go354
-rw-r--r--vendor/github.com/vishvananda/netlink/bpf_linux.go53
-rw-r--r--vendor/github.com/vishvananda/netlink/bridge_linux.go115
-rw-r--r--vendor/github.com/vishvananda/netlink/class.go78
-rw-r--r--vendor/github.com/vishvananda/netlink/class_linux.go255
-rw-r--r--vendor/github.com/vishvananda/netlink/conntrack_linux.go371
-rw-r--r--vendor/github.com/vishvananda/netlink/conntrack_unspecified.go53
-rw-r--r--vendor/github.com/vishvananda/netlink/filter.go288
-rw-r--r--vendor/github.com/vishvananda/netlink/filter_linux.go639
-rw-r--r--vendor/github.com/vishvananda/netlink/fou.go21
-rw-r--r--vendor/github.com/vishvananda/netlink/fou_linux.go215
-rw-r--r--vendor/github.com/vishvananda/netlink/fou_unspecified.go15
-rw-r--r--vendor/github.com/vishvananda/netlink/genetlink_linux.go168
-rw-r--r--vendor/github.com/vishvananda/netlink/genetlink_unspecified.go25
-rw-r--r--vendor/github.com/vishvananda/netlink/gtp_linux.go239
-rw-r--r--vendor/github.com/vishvananda/netlink/handle_linux.go144
-rw-r--r--vendor/github.com/vishvananda/netlink/handle_unspecified.go258
-rw-r--r--vendor/github.com/vishvananda/netlink/ioctl_linux.go98
-rw-r--r--vendor/github.com/vishvananda/netlink/link.go846
-rw-r--r--vendor/github.com/vishvananda/netlink/link_linux.go2354
-rw-r--r--vendor/github.com/vishvananda/netlink/link_tuntap_linux.go14
-rw-r--r--vendor/github.com/vishvananda/netlink/neigh.go25
-rw-r--r--vendor/github.com/vishvananda/netlink/neigh_linux.go289
-rw-r--r--vendor/github.com/vishvananda/netlink/netlink.go39
-rw-r--r--vendor/github.com/vishvananda/netlink/netlink_linux.go11
-rw-r--r--vendor/github.com/vishvananda/netlink/netlink_unspecified.go225
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/addr_linux.go77
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/bridge_linux.go74
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/conntrack_linux.go189
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/genetlink_linux.go89
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/link_linux.go548
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/mpls_linux.go36
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/nl_linux.go738
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/nl_unspecified.go11
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/route_linux.go81
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/seg6_linux.go111
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/syscall.go78
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/tc_linux.go710
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/xfrm_linux.go296
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/xfrm_monitor_linux.go32
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/xfrm_policy_linux.go119
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/xfrm_state_linux.go334
-rw-r--r--vendor/github.com/vishvananda/netlink/order.go32
-rw-r--r--vendor/github.com/vishvananda/netlink/protinfo.go58
-rw-r--r--vendor/github.com/vishvananda/netlink/protinfo_linux.go75
-rw-r--r--vendor/github.com/vishvananda/netlink/qdisc.go292
-rw-r--r--vendor/github.com/vishvananda/netlink/qdisc_linux.go647
-rw-r--r--vendor/github.com/vishvananda/netlink/route.go178
-rw-r--r--vendor/github.com/vishvananda/netlink/route_linux.go878
-rw-r--r--vendor/github.com/vishvananda/netlink/route_unspecified.go11
-rw-r--r--vendor/github.com/vishvananda/netlink/rule.go42
-rw-r--r--vendor/github.com/vishvananda/netlink/rule_linux.go234
-rw-r--r--vendor/github.com/vishvananda/netlink/socket.go27
-rw-r--r--vendor/github.com/vishvananda/netlink/socket_linux.go159
-rw-r--r--vendor/github.com/vishvananda/netlink/xfrm.go75
-rw-r--r--vendor/github.com/vishvananda/netlink/xfrm_monitor_linux.go97
-rw-r--r--vendor/github.com/vishvananda/netlink/xfrm_policy.go74
-rw-r--r--vendor/github.com/vishvananda/netlink/xfrm_policy_linux.go256
-rw-r--r--vendor/github.com/vishvananda/netlink/xfrm_state.go129
-rw-r--r--vendor/github.com/vishvananda/netlink/xfrm_state_linux.go457
-rw-r--r--vendor/github.com/vishvananda/netns/LICENSE192
-rw-r--r--vendor/github.com/vishvananda/netns/README.md51
-rw-r--r--vendor/github.com/vishvananda/netns/netns.go80
-rw-r--r--vendor/github.com/vishvananda/netns/netns_linux.go230
-rw-r--r--vendor/github.com/vishvananda/netns/netns_unspecified.go43
291 files changed, 0 insertions, 35790 deletions
diff --git a/vendor/github.com/alexflint/go-filemutex/LICENSE b/vendor/github.com/alexflint/go-filemutex/LICENSE
deleted file mode 100644
index 150919f..0000000
--- a/vendor/github.com/alexflint/go-filemutex/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License
-
-Copyright (c) 2010-2017 Alex Flint.
-
-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/alexflint/go-filemutex/README.md b/vendor/github.com/alexflint/go-filemutex/README.md
deleted file mode 100644
index 30d05ff..0000000
--- a/vendor/github.com/alexflint/go-filemutex/README.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# FileMutex
-
-FileMutex is similar to `sync.RWMutex`, but also synchronizes across processes.
-On Linux, OSX, and other POSIX systems it uses the flock system call. On windows
-it uses the LockFileEx and UnlockFileEx system calls.
-
-```go
-import (
- "log"
- "github.com/alexflint/go-filemutex"
-)
-
-func main() {
- m, err := filemutex.New("/tmp/foo.lock")
- if err != nil {
- log.Fatalln("Directory did not exist or file could not created")
- }
-
- m.Lock() // Will block until lock can be acquired
-
- // Code here is protected by the mutex
-
- m.Unlock()
-}
-```
-
-### Installation
-
- go get github.com/alexflint/go-filemutex
-
-Forked from https://github.com/golang/build/tree/master/cmd/builder/filemutex_*.go
diff --git a/vendor/github.com/alexflint/go-filemutex/filemutex_flock.go b/vendor/github.com/alexflint/go-filemutex/filemutex_flock.go
deleted file mode 100644
index 2bb7752..0000000
--- a/vendor/github.com/alexflint/go-filemutex/filemutex_flock.go
+++ /dev/null
@@ -1,67 +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
-
-package filemutex
-
-import (
- "syscall"
-)
-
-const (
- mkdirPerm = 0750
-)
-
-// FileMutex is similar to sync.RWMutex, but also synchronizes across processes.
-// This implementation is based on flock syscall.
-type FileMutex struct {
- fd int
-}
-
-func New(filename string) (*FileMutex, error) {
- fd, err := syscall.Open(filename, syscall.O_CREAT|syscall.O_RDONLY, mkdirPerm)
- if err != nil {
- return nil, err
- }
- return &FileMutex{fd: fd}, nil
-}
-
-func (m *FileMutex) Lock() error {
- if err := syscall.Flock(m.fd, syscall.LOCK_EX); err != nil {
- return err
- }
- return nil
-}
-
-func (m *FileMutex) Unlock() error {
- if err := syscall.Flock(m.fd, syscall.LOCK_UN); err != nil {
- return err
- }
- return nil
-}
-
-func (m *FileMutex) RLock() error {
- if err := syscall.Flock(m.fd, syscall.LOCK_SH); err != nil {
- return err
- }
- return nil
-}
-
-func (m *FileMutex) RUnlock() error {
- if err := syscall.Flock(m.fd, syscall.LOCK_UN); err != nil {
- return err
- }
- return nil
-}
-
-// Close does an Unlock() combined with closing and unlinking the associated
-// lock file. You should create a New() FileMutex for every Lock() attempt if
-// using Close().
-func (m *FileMutex) Close() error {
- if err := syscall.Flock(m.fd, syscall.LOCK_UN); err != nil {
- return err
- }
- return syscall.Close(m.fd)
-}
diff --git a/vendor/github.com/alexflint/go-filemutex/filemutex_windows.go b/vendor/github.com/alexflint/go-filemutex/filemutex_windows.go
deleted file mode 100644
index 28797d2..0000000
--- a/vendor/github.com/alexflint/go-filemutex/filemutex_windows.go
+++ /dev/null
@@ -1,102 +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.
-
-package filemutex
-
-import (
- "syscall"
- "unsafe"
-)
-
-var (
- modkernel32 = syscall.NewLazyDLL("kernel32.dll")
- procLockFileEx = modkernel32.NewProc("LockFileEx")
- procUnlockFileEx = modkernel32.NewProc("UnlockFileEx")
-)
-
-const (
- lockfileExclusiveLock = 2
-)
-
-func lockFileEx(h syscall.Handle, flags, reserved, locklow, lockhigh uint32, ol *syscall.Overlapped) (err error) {
- r1, _, e1 := syscall.Syscall6(procLockFileEx.Addr(), 6, uintptr(h), uintptr(flags), uintptr(reserved), uintptr(locklow), uintptr(lockhigh), uintptr(unsafe.Pointer(ol)))
- if r1 == 0 {
- if e1 != 0 {
- err = error(e1)
- } else {
- err = syscall.EINVAL
- }
- }
- return
-}
-
-func unlockFileEx(h syscall.Handle, reserved, locklow, lockhigh uint32, ol *syscall.Overlapped) (err error) {
- r1, _, e1 := syscall.Syscall6(procUnlockFileEx.Addr(), 5, uintptr(h), uintptr(reserved), uintptr(locklow), uintptr(lockhigh), uintptr(unsafe.Pointer(ol)), 0)
- if r1 == 0 {
- if e1 != 0 {
- err = error(e1)
- } else {
- err = syscall.EINVAL
- }
- }
- return
-}
-
-// FileMutex is similar to sync.RWMutex, but also synchronizes across processes.
-// This implementation is based on flock syscall.
-type FileMutex struct {
- fd syscall.Handle
-}
-
-func New(filename string) (*FileMutex, error) {
- fd, err := syscall.CreateFile(&(syscall.StringToUTF16(filename)[0]), syscall.GENERIC_READ|syscall.GENERIC_WRITE,
- syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE, nil, syscall.OPEN_ALWAYS, syscall.FILE_ATTRIBUTE_NORMAL, 0)
- if err != nil {
- return nil, err
- }
- return &FileMutex{fd: fd}, nil
-}
-
-func (m *FileMutex) Lock() error {
- var ol syscall.Overlapped
- if err := lockFileEx(m.fd, lockfileExclusiveLock, 0, 1, 0, &ol); err != nil {
- return err
- }
- return nil
-}
-
-func (m *FileMutex) Unlock() error {
- var ol syscall.Overlapped
- if err := unlockFileEx(m.fd, 0, 1, 0, &ol); err != nil {
- return err
- }
- return nil
-}
-
-func (m *FileMutex) RLock() error {
- var ol syscall.Overlapped
- if err := lockFileEx(m.fd, 0, 0, 1, 0, &ol); err != nil {
- return err
- }
- return nil
-}
-
-func (m *FileMutex) RUnlock() error {
- var ol syscall.Overlapped
- if err := unlockFileEx(m.fd, 0, 1, 0, &ol); err != nil {
- return err
- }
- return nil
-}
-
-// Close does an Unlock() combined with closing and unlinking the associated
-// lock file. You should create a New() FileMutex for every Lock() attempt if
-// using Close().
-func (m *FileMutex) Close() error {
- var ol syscall.Overlapped
- if err := unlockFileEx(m.fd, 0, 1, 0, &ol); err != nil {
- return err
- }
- return syscall.Close(m.fd)
-}
diff --git a/vendor/github.com/containernetworking/cni/LICENSE b/vendor/github.com/containernetworking/cni/LICENSE
deleted file mode 100644
index 8f71f43..0000000
--- a/vendor/github.com/containernetworking/cni/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
diff --git a/vendor/github.com/containernetworking/cni/pkg/skel/skel.go b/vendor/github.com/containernetworking/cni/pkg/skel/skel.go
deleted file mode 100644
index af56b8a..0000000
--- a/vendor/github.com/containernetworking/cni/pkg/skel/skel.go
+++ /dev/null
@@ -1,307 +0,0 @@
-// Copyright 2014-2016 CNI authors
-//
-// 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.
-
-// Package skel provides skeleton code for a CNI plugin.
-// In particular, it implements argument parsing and validation.
-package skel
-
-import (
- "bytes"
- "encoding/json"
- "fmt"
- "io"
- "io/ioutil"
- "log"
- "os"
- "strings"
-
- "github.com/containernetworking/cni/pkg/types"
- "github.com/containernetworking/cni/pkg/version"
-)
-
-// CmdArgs captures all the arguments passed in to the plugin
-// via both env vars and stdin
-type CmdArgs struct {
- ContainerID string
- Netns string
- IfName string
- Args string
- Path string
- StdinData []byte
-}
-
-type dispatcher struct {
- Getenv func(string) string
- Stdin io.Reader
- Stdout io.Writer
- Stderr io.Writer
-
- ConfVersionDecoder version.ConfigDecoder
- VersionReconciler version.Reconciler
-}
-
-type reqForCmdEntry map[string]bool
-
-// internal only error to indicate lack of required environment variables
-type missingEnvError struct {
- msg string
-}
-
-func (e missingEnvError) Error() string {
- return e.msg
-}
-
-func (t *dispatcher) getCmdArgsFromEnv() (string, *CmdArgs, error) {
- var cmd, contID, netns, ifName, args, path string
-
- vars := []struct {
- name string
- val *string
- reqForCmd reqForCmdEntry
- }{
- {
- "CNI_COMMAND",
- &cmd,
- reqForCmdEntry{
- "ADD": true,
- "CHECK": true,
- "DEL": true,
- },
- },
- {
- "CNI_CONTAINERID",
- &contID,
- reqForCmdEntry{
- "ADD": true,
- "CHECK": true,
- "DEL": true,
- },
- },
- {
- "CNI_NETNS",
- &netns,
- reqForCmdEntry{
- "ADD": true,
- "CHECK": true,
- "DEL": false,
- },
- },
- {
- "CNI_IFNAME",
- &ifName,
- reqForCmdEntry{
- "ADD": true,
- "CHECK": true,
- "DEL": true,
- },
- },
- {
- "CNI_ARGS",
- &args,
- reqForCmdEntry{
- "ADD": false,
- "CHECK": false,
- "DEL": false,
- },
- },
- {
- "CNI_PATH",
- &path,
- reqForCmdEntry{
- "ADD": true,
- "CHECK": true,
- "DEL": true,
- },
- },
- }
-
- argsMissing := make([]string, 0)
- for _, v := range vars {
- *v.val = t.Getenv(v.name)
- if *v.val == "" {
- if v.reqForCmd[cmd] || v.name == "CNI_COMMAND" {
- argsMissing = append(argsMissing, v.name)
- }
- }
- }
-
- if len(argsMissing) > 0 {
- joined := strings.Join(argsMissing, ",")
- return "", nil, missingEnvError{fmt.Sprintf("required env variables [%s] missing", joined)}
- }
-
- if cmd == "VERSION" {
- t.Stdin = bytes.NewReader(nil)
- }
-
- stdinData, err := ioutil.ReadAll(t.Stdin)
- if err != nil {
- return "", nil, fmt.Errorf("error reading from stdin: %v", err)
- }
-
- cmdArgs := &CmdArgs{
- ContainerID: contID,
- Netns: netns,
- IfName: ifName,
- Args: args,
- Path: path,
- StdinData: stdinData,
- }
- return cmd, cmdArgs, nil
-}
-
-func createTypedError(f string, args ...interface{}) *types.Error {
- return &types.Error{
- Code: 100,
- Msg: fmt.Sprintf(f, args...),
- }
-}
-
-func (t *dispatcher) checkVersionAndCall(cmdArgs *CmdArgs, pluginVersionInfo version.PluginInfo, toCall func(*CmdArgs) error) error {
- configVersion, err := t.ConfVersionDecoder.Decode(cmdArgs.StdinData)
- if err != nil {
- return err
- }
- verErr := t.VersionReconciler.Check(configVersion, pluginVersionInfo)
- if verErr != nil {
- return &types.Error{
- Code: types.ErrIncompatibleCNIVersion,
- Msg: "incompatible CNI versions",
- Details: verErr.Details(),
- }
- }
-
- return toCall(cmdArgs)
-}
-
-func validateConfig(jsonBytes []byte) error {
- var conf struct {
- Name string `json:"name"`
- }
- if err := json.Unmarshal(jsonBytes, &conf); err != nil {
- return fmt.Errorf("error reading network config: %s", err)
- }
- if conf.Name == "" {
- return fmt.Errorf("missing network name")
- }
- return nil
-}
-
-func (t *dispatcher) pluginMain(cmdAdd, cmdCheck, cmdDel func(_ *CmdArgs) error, versionInfo version.PluginInfo, about string) *types.Error {
- cmd, cmdArgs, err := t.getCmdArgsFromEnv()
- if err != nil {
- // Print the about string to stderr when no command is set
- if _, ok := err.(missingEnvError); ok && t.Getenv("CNI_COMMAND") == "" && about != "" {
- fmt.Fprintln(t.Stderr, about)
- return nil
- }
- return createTypedError(err.Error())
- }
-
- if cmd != "VERSION" {
- err = validateConfig(cmdArgs.StdinData)
- if err != nil {
- return createTypedError(err.Error())
- }
- }
-
- switch cmd {
- case "ADD":
- err = t.checkVersionAndCall(cmdArgs, versionInfo, cmdAdd)
- case "CHECK":
- configVersion, err := t.ConfVersionDecoder.Decode(cmdArgs.StdinData)
- if err != nil {
- return createTypedError(err.Error())
- }
- if gtet, err := version.GreaterThanOrEqualTo(configVersion, "0.4.0"); err != nil {
- return createTypedError(err.Error())
- } else if !gtet {
- return &types.Error{
- Code: types.ErrIncompatibleCNIVersion,
- Msg: "config version does not allow CHECK",
- }
- }
- for _, pluginVersion := range versionInfo.SupportedVersions() {
- gtet, err := version.GreaterThanOrEqualTo(pluginVersion, configVersion)
- if err != nil {
- return createTypedError(err.Error())
- } else if gtet {
- if err := t.checkVersionAndCall(cmdArgs, versionInfo, cmdCheck); err != nil {
- return createTypedError(err.Error())
- }
- return nil
- }
- }
- return &types.Error{
- Code: types.ErrIncompatibleCNIVersion,
- Msg: "plugin version does not allow CHECK",
- }
- case "DEL":
- err = t.checkVersionAndCall(cmdArgs, versionInfo, cmdDel)
- case "VERSION":
- err = versionInfo.Encode(t.Stdout)
- default:
- return createTypedError("unknown CNI_COMMAND: %v", cmd)
- }
-
- if err != nil {
- if e, ok := err.(*types.Error); ok {
- // don't wrap Error in Error
- return e
- }
- return createTypedError(err.Error())
- }
- return nil
-}
-
-// PluginMainWithError is the core "main" for a plugin. It accepts
-// callback functions for add, check, and del CNI commands and returns an error.
-//
-// The caller must also specify what CNI spec versions the plugin supports.
-//
-// It is the responsibility of the caller to check for non-nil error return.
-//
-// For a plugin to comply with the CNI spec, it must print any error to stdout
-// as JSON and then exit with nonzero status code.
-//
-// To let this package automatically handle errors and call os.Exit(1) for you,
-// use PluginMain() instead.
-func PluginMainWithError(cmdAdd, cmdCheck, cmdDel func(_ *CmdArgs) error, versionInfo version.PluginInfo, about string) *types.Error {
- return (&dispatcher{
- Getenv: os.Getenv,
- Stdin: os.Stdin,
- Stdout: os.Stdout,
- Stderr: os.Stderr,
- }).pluginMain(cmdAdd, cmdCheck, cmdDel, versionInfo, about)
-}
-
-// PluginMain is the core "main" for a plugin which includes automatic error handling.
-//
-// The caller must also specify what CNI spec versions the plugin supports.
-//
-// The caller can specify an "about" string, which is printed on stderr
-// when no CNI_COMMAND is specified. The recommended output is "CNI plugin <foo> v<version>"
-//
-// When an error occurs in either cmdAdd, cmdCheck, or cmdDel, PluginMain will print the error
-// as JSON to stdout and call os.Exit(1).
-//
-// To have more control over error handling, use PluginMainWithError() instead.
-func PluginMain(cmdAdd, cmdCheck, cmdDel func(_ *CmdArgs) error, versionInfo version.PluginInfo, about string) {
- if e := PluginMainWithError(cmdAdd, cmdCheck, cmdDel, versionInfo, about); e != nil {
- if err := e.Print(); err != nil {
- log.Print("Error writing error JSON to stdout: ", err)
- }
- os.Exit(1)
- }
-}
diff --git a/vendor/github.com/containernetworking/cni/pkg/types/020/types.go b/vendor/github.com/containernetworking/cni/pkg/types/020/types.go
deleted file mode 100644
index 5325616..0000000
--- a/vendor/github.com/containernetworking/cni/pkg/types/020/types.go
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright 2016 CNI authors
-//
-// 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.
-
-package types020
-
-import (
- "encoding/json"
- "fmt"
- "io"
- "net"
- "os"
-
- "github.com/containernetworking/cni/pkg/types"
-)
-
-const ImplementedSpecVersion string = "0.2.0"
-
-var SupportedVersions = []string{"", "0.1.0", ImplementedSpecVersion}
-
-// Compatibility types for CNI version 0.1.0 and 0.2.0
-
-func NewResult(data []byte) (types.Result, error) {
- result := &Result{}
- if err := json.Unmarshal(data, result); err != nil {
- return nil, err
- }
- return result, nil
-}
-
-func GetResult(r types.Result) (*Result, error) {
- // We expect version 0.1.0/0.2.0 results
- result020, err := r.GetAsVersion(ImplementedSpecVersion)
- if err != nil {
- return nil, err
- }
- result, ok := result020.(*Result)
- if !ok {
- return nil, fmt.Errorf("failed to convert result")
- }
- return result, nil
-}
-
-// Result is what gets returned from the plugin (via stdout) to the caller
-type Result struct {
- CNIVersion string `json:"cniVersion,omitempty"`
- IP4 *IPConfig `json:"ip4,omitempty"`
- IP6 *IPConfig `json:"ip6,omitempty"`
- DNS types.DNS `json:"dns,omitempty"`
-}
-
-func (r *Result) Version() string {
- return ImplementedSpecVersion
-}
-
-func (r *Result) GetAsVersion(version string) (types.Result, error) {
- for _, supportedVersion := range SupportedVersions {
- if version == supportedVersion {
- r.CNIVersion = version
- return r, nil
- }
- }
- return nil, fmt.Errorf("cannot convert version %q to %s", SupportedVersions, version)
-}
-
-func (r *Result) Print() error {
- return r.PrintTo(os.Stdout)
-}
-
-func (r *Result) PrintTo(writer io.Writer) error {
- data, err := json.MarshalIndent(r, "", " ")
- if err != nil {
- return err
- }
- _, err = writer.Write(data)
- return err
-}
-
-// String returns a formatted string in the form of "[IP4: $1,][ IP6: $2,] DNS: $3" where
-// $1 represents the receiver's IPv4, $2 represents the receiver's IPv6 and $3 the
-// receiver's DNS. If $1 or $2 are nil, they won't be present in the returned string.
-func (r *Result) String() string {
- var str string
- if r.IP4 != nil {
- str = fmt.Sprintf("IP4:%+v, ", *r.IP4)
- }
- if r.IP6 != nil {
- str += fmt.Sprintf("IP6:%+v, ", *r.IP6)
- }
- return fmt.Sprintf("%sDNS:%+v", str, r.DNS)
-}
-
-// IPConfig contains values necessary to configure an interface
-type IPConfig struct {
- IP net.IPNet
- Gateway net.IP
- Routes []types.Route
-}
-
-// net.IPNet is not JSON (un)marshallable so this duality is needed
-// for our custom IPNet type
-
-// JSON (un)marshallable types
-type ipConfig struct {
- IP types.IPNet `json:"ip"`
- Gateway net.IP `json:"gateway,omitempty"`
- Routes []types.Route `json:"routes,omitempty"`
-}
-
-func (c *IPConfig) MarshalJSON() ([]byte, error) {
- ipc := ipConfig{
- IP: types.IPNet(c.IP),
- Gateway: c.Gateway,
- Routes: c.Routes,
- }
-
- return json.Marshal(ipc)
-}
-
-func (c *IPConfig) UnmarshalJSON(data []byte) error {
- ipc := ipConfig{}
- if err := json.Unmarshal(data, &ipc); err != nil {
- return err
- }
-
- c.IP = net.IPNet(ipc.IP)
- c.Gateway = ipc.Gateway
- c.Routes = ipc.Routes
- return nil
-}
diff --git a/vendor/github.com/containernetworking/cni/pkg/types/args.go b/vendor/github.com/containernetworking/cni/pkg/types/args.go
deleted file mode 100644
index bd8640f..0000000
--- a/vendor/github.com/containernetworking/cni/pkg/types/args.go
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2015 CNI authors
-//
-// 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.
-
-package types
-
-import (
- "encoding"
- "fmt"
- "reflect"
- "strings"
-)
-
-// UnmarshallableBool typedef for builtin bool
-// because builtin type's methods can't be declared
-type UnmarshallableBool bool
-
-// UnmarshalText implements the encoding.TextUnmarshaler interface.
-// Returns boolean true if the string is "1" or "[Tt]rue"
-// Returns boolean false if the string is "0" or "[Ff]alse"
-func (b *UnmarshallableBool) UnmarshalText(data []byte) error {
- s := strings.ToLower(string(data))
- switch s {
- case "1", "true":
- *b = true
- case "0", "false":
- *b = false
- default:
- return fmt.Errorf("Boolean unmarshal error: invalid input %s", s)
- }
- return nil
-}
-
-// UnmarshallableString typedef for builtin string
-type UnmarshallableString string
-
-// UnmarshalText implements the encoding.TextUnmarshaler interface.
-// Returns the string
-func (s *UnmarshallableString) UnmarshalText(data []byte) error {
- *s = UnmarshallableString(data)
- return nil
-}
-
-// CommonArgs contains the IgnoreUnknown argument
-// and must be embedded by all Arg structs
-type CommonArgs struct {
- IgnoreUnknown UnmarshallableBool `json:"ignoreunknown,omitempty"`
-}
-
-// GetKeyField is a helper function to receive Values
-// Values that represent a pointer to a struct
-func GetKeyField(keyString string, v reflect.Value) reflect.Value {
- return v.Elem().FieldByName(keyString)
-}
-
-// UnmarshalableArgsError is used to indicate error unmarshalling args
-// from the args-string in the form "K=V;K2=V2;..."
-type UnmarshalableArgsError struct {
- error
-}
-
-// LoadArgs parses args from a string in the form "K=V;K2=V2;..."
-func LoadArgs(args string, container interface{}) error {
- if args == "" {
- return nil
- }
-
- containerValue := reflect.ValueOf(container)
-
- pairs := strings.Split(args, ";")
- unknownArgs := []string{}
- for _, pair := range pairs {
- kv := strings.Split(pair, "=")
- if len(kv) != 2 {
- return fmt.Errorf("ARGS: invalid pair %q", pair)
- }
- keyString := kv[0]
- valueString := kv[1]
- keyField := GetKeyField(keyString, containerValue)
- if !keyField.IsValid() {
- unknownArgs = append(unknownArgs, pair)
- continue
- }
- keyFieldIface := keyField.Addr().Interface()
- u, ok := keyFieldIface.(encoding.TextUnmarshaler)
- if !ok {
- return UnmarshalableArgsError{fmt.Errorf(
- "ARGS: cannot unmarshal into field '%s' - type '%s' does not implement encoding.TextUnmarshaler",
- keyString, reflect.TypeOf(keyFieldIface))}
- }
- err := u.UnmarshalText([]byte(valueString))
- if err != nil {
- return fmt.Errorf("ARGS: error parsing value of pair %q: %v)", pair, err)
- }
- }
-
- isIgnoreUnknown := GetKeyField("IgnoreUnknown", containerValue).Bool()
- if len(unknownArgs) > 0 && !isIgnoreUnknown {
- return fmt.Errorf("ARGS: unknown args %q", unknownArgs)
- }
- return nil
-}
diff --git a/vendor/github.com/containernetworking/cni/pkg/types/current/types.go b/vendor/github.com/containernetworking/cni/pkg/types/current/types.go
deleted file mode 100644
index 7267a2e..0000000
--- a/vendor/github.com/containernetworking/cni/pkg/types/current/types.go
+++ /dev/null
@@ -1,293 +0,0 @@
-// Copyright 2016 CNI authors
-//
-// 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.
-
-package current
-
-import (
- "encoding/json"
- "fmt"
- "io"
- "net"
- "os"
-
- "github.com/containernetworking/cni/pkg/types"
- "github.com/containernetworking/cni/pkg/types/020"
-)
-
-const ImplementedSpecVersion string = "0.4.0"
-
-var SupportedVersions = []string{"0.3.0", "0.3.1", ImplementedSpecVersion}
-
-func NewResult(data []byte) (types.Result, error) {
- result := &Result{}
- if err := json.Unmarshal(data, result); err != nil {
- return nil, err
- }
- return result, nil
-}
-
-func GetResult(r types.Result) (*Result, error) {
- resultCurrent, err := r.GetAsVersion(ImplementedSpecVersion)
- if err != nil {
- return nil, err
- }
- result, ok := resultCurrent.(*Result)
- if !ok {
- return nil, fmt.Errorf("failed to convert result")
- }
- return result, nil
-}
-
-var resultConverters = []struct {
- versions []string
- convert func(types.Result) (*Result, error)
-}{
- {types020.SupportedVersions, convertFrom020},
- {SupportedVersions, convertFrom030},
-}
-
-func convertFrom020(result types.Result) (*Result, error) {
- oldResult, err := types020.GetResult(result)
- if err != nil {
- return nil, err
- }
-
- newResult := &Result{
- CNIVersion: ImplementedSpecVersion,
- DNS: oldResult.DNS,
- Routes: []*types.Route{},
- }
-
- if oldResult.IP4 != nil {
- newResult.IPs = append(newResult.IPs, &IPConfig{
- Version: "4",
- Address: oldResult.IP4.IP,
- Gateway: oldResult.IP4.Gateway,
- })
- for _, route := range oldResult.IP4.Routes {
- newResult.Routes = append(newResult.Routes, &types.Route{
- Dst: route.Dst,
- GW: route.GW,
- })
- }
- }
-
- if oldResult.IP6 != nil {
- newResult.IPs = append(newResult.IPs, &IPConfig{
- Version: "6",
- Address: oldResult.IP6.IP,
- Gateway: oldResult.IP6.Gateway,
- })
- for _, route := range oldResult.IP6.Routes {
- newResult.Routes = append(newResult.Routes, &types.Route{
- Dst: route.Dst,
- GW: route.GW,
- })
- }
- }
-
- return newResult, nil
-}
-
-func convertFrom030(result types.Result) (*Result, error) {
- newResult, ok := result.(*Result)
- if !ok {
- return nil, fmt.Errorf("failed to convert result")
- }
- newResult.CNIVersion = ImplementedSpecVersion
- return newResult, nil
-}
-
-func NewResultFromResult(result types.Result) (*Result, error) {
- version := result.Version()
- for _, converter := range resultConverters {
- for _, supportedVersion := range converter.versions {
- if version == supportedVersion {
- return converter.convert(result)
- }
- }
- }
- return nil, fmt.Errorf("unsupported CNI result22 version %q", version)
-}
-
-// Result is what gets returned from the plugin (via stdout) to the caller
-type Result struct {
- CNIVersion string `json:"cniVersion,omitempty"`
- Interfaces []*Interface `json:"interfaces,omitempty"`
- IPs []*IPConfig `json:"ips,omitempty"`
- Routes []*types.Route `json:"routes,omitempty"`
- DNS types.DNS `json:"dns,omitempty"`
-}
-
-// Convert to the older 0.2.0 CNI spec Result type
-func (r *Result) convertTo020() (*types020.Result, error) {
- oldResult := &types020.Result{
- CNIVersion: types020.ImplementedSpecVersion,
- DNS: r.DNS,
- }
-
- for _, ip := range r.IPs {
- // Only convert the first IP address of each version as 0.2.0
- // and earlier cannot handle multiple IP addresses
- if ip.Version == "4" && oldResult.IP4 == nil {
- oldResult.IP4 = &types020.IPConfig{
- IP: ip.Address,
- Gateway: ip.Gateway,
- }
- } else if ip.Version == "6" && oldResult.IP6 == nil {
- oldResult.IP6 = &types020.IPConfig{
- IP: ip.Address,
- Gateway: ip.Gateway,
- }
- }
-
- if oldResult.IP4 != nil && oldResult.IP6 != nil {
- break
- }
- }
-
- for _, route := range r.Routes {
- is4 := route.Dst.IP.To4() != nil
- if is4 && oldResult.IP4 != nil {
- oldResult.IP4.Routes = append(oldResult.IP4.Routes, types.Route{
- Dst: route.Dst,
- GW: route.GW,
- })
- } else if !is4 && oldResult.IP6 != nil {
- oldResult.IP6.Routes = append(oldResult.IP6.Routes, types.Route{
- Dst: route.Dst,
- GW: route.GW,
- })
- }
- }
-
- if oldResult.IP4 == nil && oldResult.IP6 == nil {
- return nil, fmt.Errorf("cannot convert: no valid IP addresses")
- }
-
- return oldResult, nil
-}
-
-func (r *Result) Version() string {
- return ImplementedSpecVersion
-}
-
-func (r *Result) GetAsVersion(version string) (types.Result, error) {
- switch version {
- case "0.3.0", "0.3.1", ImplementedSpecVersion:
- r.CNIVersion = version
- return r, nil
- case types020.SupportedVersions[0], types020.SupportedVersions[1], types020.SupportedVersions[2]:
- return r.convertTo020()
- }
- return nil, fmt.Errorf("cannot convert version 0.3.x to %q", version)
-}
-
-func (r *Result) Print() error {
- return r.PrintTo(os.Stdout)
-}
-
-func (r *Result) PrintTo(writer io.Writer) error {
- data, err := json.MarshalIndent(r, "", " ")
- if err != nil {
- return err
- }
- _, err = writer.Write(data)
- return err
-}
-
-// String returns a formatted string in the form of "[Interfaces: $1,][ IP: $2,] DNS: $3" where
-// $1 represents the receiver's Interfaces, $2 represents the receiver's IP addresses and $3 the
-// receiver's DNS. If $1 or $2 are nil, they won't be present in the returned string.
-func (r *Result) String() string {
- var str string
- if len(r.Interfaces) > 0 {
- str += fmt.Sprintf("Interfaces:%+v, ", r.Interfaces)
- }
- if len(r.IPs) > 0 {
- str += fmt.Sprintf("IP:%+v, ", r.IPs)
- }
- if len(r.Routes) > 0 {
- str += fmt.Sprintf("Routes:%+v, ", r.Routes)
- }
- return fmt.Sprintf("%sDNS:%+v", str, r.DNS)
-}
-
-// Convert this old version result to the current CNI version result
-func (r *Result) Convert() (*Result, error) {
- return r, nil
-}
-
-// Interface contains values about the created interfaces
-type Interface struct {
- Name string `json:"name"`
- Mac string `json:"mac,omitempty"`
- Sandbox string `json:"sandbox,omitempty"`
-}
-
-func (i *Interface) String() string {
- return fmt.Sprintf("%+v", *i)
-}
-
-// Int returns a pointer to the int value passed in. Used to
-// set the IPConfig.Interface field.
-func Int(v int) *int {
- return &v
-}
-
-// IPConfig contains values necessary to configure an IP address on an interface
-type IPConfig struct {
- // IP version, either "4" or "6"
- Version string
- // Index into Result structs Interfaces list
- Interface *int
- Address net.IPNet
- Gateway net.IP
-}
-
-func (i *IPConfig) String() string {
- return fmt.Sprintf("%+v", *i)
-}
-
-// JSON (un)marshallable types
-type ipConfig struct {
- Version string `json:"version"`
- Interface *int `json:"interface,omitempty"`
- Address types.IPNet `json:"address"`
- Gateway net.IP `json:"gateway,omitempty"`
-}
-
-func (c *IPConfig) MarshalJSON() ([]byte, error) {
- ipc := ipConfig{
- Version: c.Version,
- Interface: c.Interface,
- Address: types.IPNet(c.Address),
- Gateway: c.Gateway,
- }
-
- return json.Marshal(ipc)
-}
-
-func (c *IPConfig) UnmarshalJSON(data []byte) error {
- ipc := ipConfig{}
- if err := json.Unmarshal(data, &ipc); err != nil {
- return err
- }
-
- c.Version = ipc.Version
- c.Interface = ipc.Interface
- c.Address = net.IPNet(ipc.Address)
- c.Gateway = ipc.Gateway
- return nil
-}
diff --git a/vendor/github.com/containernetworking/cni/pkg/types/types.go b/vendor/github.com/containernetworking/cni/pkg/types/types.go
deleted file mode 100644
index d0d1100..0000000
--- a/vendor/github.com/containernetworking/cni/pkg/types/types.go
+++ /dev/null
@@ -1,199 +0,0 @@
-// Copyright 2015 CNI authors
-//
-// 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.
-
-package types
-
-import (
- "encoding/json"
- "errors"
- "fmt"
- "io"
- "net"
- "os"
-)
-
-// like net.IPNet but adds JSON marshalling and unmarshalling
-type IPNet net.IPNet
-
-// ParseCIDR takes a string like "10.2.3.1/24" and
-// return IPNet with "10.2.3.1" and /24 mask
-func ParseCIDR(s string) (*net.IPNet, error) {
- ip, ipn, err := net.ParseCIDR(s)
- if err != nil {
- return nil, err
- }
-
- ipn.IP = ip
- return ipn, nil
-}
-
-func (n IPNet) MarshalJSON() ([]byte, error) {
- return json.Marshal((*net.IPNet)(&n).String())
-}
-
-func (n *IPNet) UnmarshalJSON(data []byte) error {
- var s string
- if err := json.Unmarshal(data, &s); err != nil {
- return err
- }
-
- tmp, err := ParseCIDR(s)
- if err != nil {
- return err
- }
-
- *n = IPNet(*tmp)
- return nil
-}
-
-// NetConf describes a network.
-type NetConf struct {
- CNIVersion string `json:"cniVersion,omitempty"`
-
- Name string `json:"name,omitempty"`
- Type string `json:"type,omitempty"`
- Capabilities map[string]bool `json:"capabilities,omitempty"`
- IPAM IPAM `json:"ipam,omitempty"`
- DNS DNS `json:"dns"`
-
- RawPrevResult map[string]interface{} `json:"prevResult,omitempty"`
- PrevResult Result `json:"-"`
-}
-
-type IPAM struct {
- Type string `json:"type,omitempty"`
-}
-
-// NetConfList describes an ordered list of networks.
-type NetConfList struct {
- CNIVersion string `json:"cniVersion,omitempty"`
-
- Name string `json:"name,omitempty"`
- DisableCheck bool `json:"disableCheck,omitempty"`
- Plugins []*NetConf `json:"plugins,omitempty"`
-}
-
-type ResultFactoryFunc func([]byte) (Result, error)
-
-// Result is an interface that provides the result of plugin execution
-type Result interface {
- // The highest CNI specification result version the result supports
- // without having to convert
- Version() string
-
- // Returns the result converted into the requested CNI specification
- // result version, or an error if conversion failed
- GetAsVersion(version string) (Result, error)
-
- // Prints the result in JSON format to stdout
- Print() error
-
- // Prints the result in JSON format to provided writer
- PrintTo(writer io.Writer) error
-
- // Returns a JSON string representation of the result
- String() string
-}
-
-func PrintResult(result Result, version string) error {
- newResult, err := result.GetAsVersion(version)
- if err != nil {
- return err
- }
- return newResult.Print()
-}
-
-// DNS contains values interesting for DNS resolvers
-type DNS struct {
- Nameservers []string `json:"nameservers,omitempty"`
- Domain string `json:"domain,omitempty"`
- Search []string `json:"search,omitempty"`
- Options []string `json:"options,omitempty"`
-}
-
-type Route struct {
- Dst net.IPNet
- GW net.IP
-}
-
-func (r *Route) String() string {
- return fmt.Sprintf("%+v", *r)
-}
-
-// Well known error codes
-// see https://github.com/containernetworking/cni/blob/master/SPEC.md#well-known-error-codes
-const (
- ErrUnknown uint = iota // 0
- ErrIncompatibleCNIVersion // 1
- ErrUnsupportedField // 2
-)
-
-type Error struct {
- Code uint `json:"code"`
- Msg string `json:"msg"`
- Details string `json:"details,omitempty"`
-}
-
-func (e *Error) Error() string {
- details := ""
- if e.Details != "" {
- details = fmt.Sprintf("; %v", e.Details)
- }
- return fmt.Sprintf("%v%v", e.Msg, details)
-}
-
-func (e *Error) Print() error {
- return prettyPrint(e)
-}
-
-// net.IPNet is not JSON (un)marshallable so this duality is needed
-// for our custom IPNet type
-
-// JSON (un)marshallable types
-type route struct {
- Dst IPNet `json:"dst"`
- GW net.IP `json:"gw,omitempty"`
-}
-
-func (r *Route) UnmarshalJSON(data []byte) error {
- rt := route{}
- if err := json.Unmarshal(data, &rt); err != nil {
- return err
- }
-
- r.Dst = net.IPNet(rt.Dst)
- r.GW = rt.GW
- return nil
-}
-
-func (r Route) MarshalJSON() ([]byte, error) {
- rt := route{
- Dst: IPNet(r.Dst),
- GW: r.GW,
- }
-
- return json.Marshal(rt)
-}
-
-func prettyPrint(obj interface{}) error {
- data, err := json.MarshalIndent(obj, "", " ")
- if err != nil {
- return err
- }
- _, err = os.Stdout.Write(data)
- return err
-}
-
-// NotImplementedError is used to indicate that a method is not implemented for the given platform
-var NotImplementedError = errors.New("Not Implemented")
diff --git a/vendor/github.com/containernetworking/cni/pkg/version/conf.go b/vendor/github.com/containernetworking/cni/pkg/version/conf.go
deleted file mode 100644
index 3cca58b..0000000
--- a/vendor/github.com/containernetworking/cni/pkg/version/conf.go
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2016 CNI authors
-//
-// 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.
-
-package version
-
-import (
- "encoding/json"
- "fmt"
-)
-
-// ConfigDecoder can decode the CNI version available in network config data
-type ConfigDecoder struct{}
-
-func (*ConfigDecoder) Decode(jsonBytes []byte) (string, error) {
- var conf struct {
- CNIVersion string `json:"cniVersion"`
- }
- err := json.Unmarshal(jsonBytes, &conf)
- if err != nil {
- return "", fmt.Errorf("decoding version from network config: %s", err)
- }
- if conf.CNIVersion == "" {
- return "0.1.0", nil
- }
- return conf.CNIVersion, nil
-}
diff --git a/vendor/github.com/containernetworking/cni/pkg/version/plugin.go b/vendor/github.com/containernetworking/cni/pkg/version/plugin.go
deleted file mode 100644
index 1df4272..0000000
--- a/vendor/github.com/containernetworking/cni/pkg/version/plugin.go
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright 2016 CNI authors
-//
-// 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.
-
-package version
-
-import (
- "encoding/json"
- "fmt"
- "io"
- "strconv"
- "strings"
-)
-
-// PluginInfo reports information about CNI versioning
-type PluginInfo interface {
- // SupportedVersions returns one or more CNI spec versions that the plugin
- // supports. If input is provided in one of these versions, then the plugin
- // promises to use the same CNI version in its response
- SupportedVersions() []string
-
- // Encode writes this CNI version information as JSON to the given Writer
- Encode(io.Writer) error
-}
-
-type pluginInfo struct {
- CNIVersion_ string `json:"cniVersion"`
- SupportedVersions_ []string `json:"supportedVersions,omitempty"`
-}
-
-// pluginInfo implements the PluginInfo interface
-var _ PluginInfo = &pluginInfo{}
-
-func (p *pluginInfo) Encode(w io.Writer) error {
- return json.NewEncoder(w).Encode(p)
-}
-
-func (p *pluginInfo) SupportedVersions() []string {
- return p.SupportedVersions_
-}
-
-// PluginSupports returns a new PluginInfo that will report the given versions
-// as supported
-func PluginSupports(supportedVersions ...string) PluginInfo {
- if len(supportedVersions) < 1 {
- panic("programmer error: you must support at least one version")
- }
- return &pluginInfo{
- CNIVersion_: Current(),
- SupportedVersions_: supportedVersions,
- }
-}
-
-// PluginDecoder can decode the response returned by a plugin's VERSION command
-type PluginDecoder struct{}
-
-func (*PluginDecoder) Decode(jsonBytes []byte) (PluginInfo, error) {
- var info pluginInfo
- err := json.Unmarshal(jsonBytes, &info)
- if err != nil {
- return nil, fmt.Errorf("decoding version info: %s", err)
- }
- if info.CNIVersion_ == "" {
- return nil, fmt.Errorf("decoding version info: missing field cniVersion")
- }
- if len(info.SupportedVersions_) == 0 {
- if info.CNIVersion_ == "0.2.0" {
- return PluginSupports("0.1.0", "0.2.0"), nil
- }
- return nil, fmt.Errorf("decoding version info: missing field supportedVersions")
- }
- return &info, nil
-}
-
-// ParseVersion parses a version string like "3.0.1" or "0.4.5" into major,
-// minor, and micro numbers or returns an error
-func ParseVersion(version string) (int, int, int, error) {
- var major, minor, micro int
- if version == "" {
- return -1, -1, -1, fmt.Errorf("invalid version %q: the version is empty", version)
- }
-
- parts := strings.Split(version, ".")
- if len(parts) >= 4 {
- return -1, -1, -1, fmt.Errorf("invalid version %q: too many parts", version)
- }
-
- major, err := strconv.Atoi(parts[0])
- if err != nil {
- return -1, -1, -1, fmt.Errorf("failed to convert major version part %q: %v", parts[0], err)
- }
-
- if len(parts) >= 2 {
- minor, err = strconv.Atoi(parts[1])
- if err != nil {
- return -1, -1, -1, fmt.Errorf("failed to convert minor version part %q: %v", parts[1], err)
- }
- }
-
- if len(parts) >= 3 {
- micro, err = strconv.Atoi(parts[2])
- if err != nil {
- return -1, -1, -1, fmt.Errorf("failed to convert micro version part %q: %v", parts[2], err)
- }
- }
-
- return major, minor, micro, nil
-}
-
-// GreaterThanOrEqualTo takes two string versions, parses them into major/minor/micro
-// numbers, and compares them to determine whether the first version is greater
-// than or equal to the second
-func GreaterThanOrEqualTo(version, otherVersion string) (bool, error) {
- firstMajor, firstMinor, firstMicro, err := ParseVersion(version)
- if err != nil {
- return false, err
- }
-
- secondMajor, secondMinor, secondMicro, err := ParseVersion(otherVersion)
- if err != nil {
- return false, err
- }
-
- if firstMajor > secondMajor {
- return true, nil
- } else if firstMajor == secondMajor {
- if firstMinor > secondMinor {
- return true, nil
- } else if firstMinor == secondMinor && firstMicro >= secondMicro {
- return true, nil
- }
- }
- return false, nil
-}
diff --git a/vendor/github.com/containernetworking/cni/pkg/version/reconcile.go b/vendor/github.com/containernetworking/cni/pkg/version/reconcile.go
deleted file mode 100644
index 25c3810..0000000
--- a/vendor/github.com/containernetworking/cni/pkg/version/reconcile.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2016 CNI authors
-//
-// 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.
-
-package version
-
-import "fmt"
-
-type ErrorIncompatible struct {
- Config string
- Supported []string
-}
-
-func (e *ErrorIncompatible) Details() string {
- return fmt.Sprintf("config is %q, plugin supports %q", e.Config, e.Supported)
-}
-
-func (e *ErrorIncompatible) Error() string {
- return fmt.Sprintf("incompatible CNI versions: %s", e.Details())
-}
-
-type Reconciler struct{}
-
-func (r *Reconciler) Check(configVersion string, pluginInfo PluginInfo) *ErrorIncompatible {
- return r.CheckRaw(configVersion, pluginInfo.SupportedVersions())
-}
-
-func (*Reconciler) CheckRaw(configVersion string, supportedVersions []string) *ErrorIncompatible {
- for _, supportedVersion := range supportedVersions {
- if configVersion == supportedVersion {
- return nil
- }
- }
-
- return &ErrorIncompatible{
- Config: configVersion,
- Supported: supportedVersions,
- }
-}
diff --git a/vendor/github.com/containernetworking/cni/pkg/version/version.go b/vendor/github.com/containernetworking/cni/pkg/version/version.go
deleted file mode 100644
index 8f3508e..0000000
--- a/vendor/github.com/containernetworking/cni/pkg/version/version.go
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2016 CNI authors
-//
-// 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.
-
-package version
-
-import (
- "encoding/json"
- "fmt"
-
- "github.com/containernetworking/cni/pkg/types"
- "github.com/containernetworking/cni/pkg/types/020"
- "github.com/containernetworking/cni/pkg/types/current"
-)
-
-// Current reports the version of the CNI spec implemented by this library
-func Current() string {
- return "0.4.0"
-}
-
-// Legacy PluginInfo describes a plugin that is backwards compatible with the
-// CNI spec version 0.1.0. In particular, a runtime compiled against the 0.1.0
-// library ought to work correctly with a plugin that reports support for
-// Legacy versions.
-//
-// Any future CNI spec versions which meet this definition should be added to
-// this list.
-var Legacy = PluginSupports("0.1.0", "0.2.0")
-var All = PluginSupports("0.1.0", "0.2.0", "0.3.0", "0.3.1", "0.4.0")
-
-var resultFactories = []struct {
- supportedVersions []string
- newResult types.ResultFactoryFunc
-}{
- {current.SupportedVersions, current.NewResult},
- {types020.SupportedVersions, types020.NewResult},
-}
-
-// Finds a Result object matching the requested version (if any) and asks
-// that object to parse the plugin result, returning an error if parsing failed.
-func NewResult(version string, resultBytes []byte) (types.Result, error) {
- reconciler := &Reconciler{}
- for _, resultFactory := range resultFactories {
- err := reconciler.CheckRaw(version, resultFactory.supportedVersions)
- if err == nil {
- // Result supports this version
- return resultFactory.newResult(resultBytes)
- }
- }
-
- return nil, fmt.Errorf("unsupported CNI result version %q", version)
-}
-
-// ParsePrevResult parses a prevResult in a NetConf structure and sets
-// the NetConf's PrevResult member to the parsed Result object.
-func ParsePrevResult(conf *types.NetConf) error {
- if conf.RawPrevResult == nil {
- return nil
- }
-
- resultBytes, err := json.Marshal(conf.RawPrevResult)
- if err != nil {
- return fmt.Errorf("could not serialize prevResult: %v", err)
- }
-
- conf.RawPrevResult = nil
- conf.PrevResult, err = NewResult(conf.CNIVersion, resultBytes)
- if err != nil {
- return fmt.Errorf("could not parse prevResult: %v", err)
- }
-
- return nil
-}
diff --git a/vendor/github.com/containernetworking/plugins/LICENSE b/vendor/github.com/containernetworking/plugins/LICENSE
deleted file mode 100644
index 8dada3e..0000000
--- a/vendor/github.com/containernetworking/plugins/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/vendor/github.com/containernetworking/plugins/pkg/ns/README.md b/vendor/github.com/containernetworking/plugins/pkg/ns/README.md
deleted file mode 100644
index 1e265c7..0000000
--- a/vendor/github.com/containernetworking/plugins/pkg/ns/README.md
+++ /dev/null
@@ -1,41 +0,0 @@
-### Namespaces, Threads, and Go
-On Linux each OS thread can have a different network namespace. Go's thread scheduling model switches goroutines between OS threads based on OS thread load and whether the goroutine would block other goroutines. This can result in a goroutine switching network namespaces without notice and lead to errors in your code.
-
-### Namespace Switching
-Switching namespaces with the `ns.Set()` method is not recommended without additional strategies to prevent unexpected namespace changes when your goroutines switch OS threads.
-
-Go provides the `runtime.LockOSThread()` function to ensure a specific goroutine executes on its current OS thread and prevents any other goroutine from running in that thread until the locked one exits. Careful usage of `LockOSThread()` and goroutines can provide good control over which network namespace a given goroutine executes in.
-
-For example, you cannot rely on the `ns.Set()` namespace being the current namespace after the `Set()` call unless you do two things. First, the goroutine calling `Set()` must have previously called `LockOSThread()`. Second, you must ensure `runtime.UnlockOSThread()` is not called somewhere in-between. You also cannot rely on the initial network namespace remaining the current network namespace if any other code in your program switches namespaces, unless you have already called `LockOSThread()` in that goroutine. Note that `LockOSThread()` prevents the Go scheduler from optimally scheduling goroutines for best performance, so `LockOSThread()` should only be used in small, isolated goroutines that release the lock quickly.
-
-### Do() The Recommended Thing
-The `ns.Do()` method provides **partial** control over network namespaces for you by implementing these strategies. All code dependent on a particular network namespace (including the root namespace) should be wrapped in the `ns.Do()` method to ensure the correct namespace is selected for the duration of your code. For example:
-
-```go
-err = targetNs.Do(func(hostNs ns.NetNS) error {
- dummy := &netlink.Dummy{
- LinkAttrs: netlink.LinkAttrs{
- Name: "dummy0",
- },
- }
- return netlink.LinkAdd(dummy)
-})
-```
-
-Note this requirement to wrap every network call is very onerous - any libraries you call might call out to network services such as DNS, and all such calls need to be protected after you call `ns.Do()`. All goroutines spawned from within the `ns.Do` will not inherit the new namespace. The CNI plugins all exit very soon after calling `ns.Do()` which helps to minimize the problem.
-
-When a new thread is spawned in Linux, it inherits the namespace of its parent. In versions of go **prior to 1.10**, if the runtime spawns a new OS thread, it picks the parent randomly. If the chosen parent thread has been moved to a new namespace (even temporarily), the new OS thread will be permanently "stuck in the wrong namespace", and goroutines will non-deterministically switch namespaces as they are rescheduled.
-
-In short, **there was no safe way to change network namespaces, even temporarily, from within a long-lived, multithreaded Go process**. If you wish to do this, you must use go 1.10 or greater.
-
-
-### Creating network namespaces
-Earlier versions of this library managed namespace creation, but as CNI does not actually utilize this feature (and it was essentially unmaintained), it was removed. If you're writing a container runtime, you should implement namespace management yourself. However, there are some gotchas when doing so, especially around handling `/var/run/netns`. A reasonably correct reference implementation, borrowed from `rkt`, can be found in `pkg/testutils/netns_linux.go` if you're in need of a source of inspiration.
-
-
-### Further Reading
- - https://github.com/golang/go/wiki/LockOSThread
- - http://morsmachine.dk/go-scheduler
- - https://github.com/containernetworking/cni/issues/262
- - https://golang.org/pkg/runtime/
- - https://www.weave.works/blog/linux-namespaces-and-go-don-t-mix
diff --git a/vendor/github.com/containernetworking/plugins/pkg/ns/ns_linux.go b/vendor/github.com/containernetworking/plugins/pkg/ns/ns_linux.go
deleted file mode 100644
index 31ad5f6..0000000
--- a/vendor/github.com/containernetworking/plugins/pkg/ns/ns_linux.go
+++ /dev/null
@@ -1,216 +0,0 @@
-// Copyright 2015-2017 CNI authors
-//
-// 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.
-
-package ns
-
-import (
- "fmt"
- "os"
- "runtime"
- "sync"
- "syscall"
-
- "golang.org/x/sys/unix"
-)
-
-// Returns an object representing the current OS thread's network namespace
-func GetCurrentNS() (NetNS, error) {
- return GetNS(getCurrentThreadNetNSPath())
-}
-
-func getCurrentThreadNetNSPath() string {
- // /proc/self/ns/net returns the namespace of the main thread, not
- // of whatever thread this goroutine is running on. Make sure we
- // use the thread's net namespace since the thread is switching around
- return fmt.Sprintf("/proc/%d/task/%d/ns/net", os.Getpid(), unix.Gettid())
-}
-
-func (ns *netNS) Close() error {
- if err := ns.errorIfClosed(); err != nil {
- return err
- }
-
- if err := ns.file.Close(); err != nil {
- return fmt.Errorf("Failed to close %q: %v", ns.file.Name(), err)
- }
- ns.closed = true
-
- return nil
-}
-
-func (ns *netNS) Set() error {
- if err := ns.errorIfClosed(); err != nil {
- return err
- }
-
- if err := unix.Setns(int(ns.Fd()), unix.CLONE_NEWNET); err != nil {
- return fmt.Errorf("Error switching to ns %v: %v", ns.file.Name(), err)
- }
-
- return nil
-}
-
-type NetNS interface {
- // Executes the passed closure in this object's network namespace,
- // attempting to restore the original namespace before returning.
- // However, since each OS thread can have a different network namespace,
- // and Go's thread scheduling is highly variable, callers cannot
- // guarantee any specific namespace is set unless operations that
- // require that namespace are wrapped with Do(). Also, no code called
- // from Do() should call runtime.UnlockOSThread(), or the risk
- // of executing code in an incorrect namespace will be greater. See
- // https://github.com/golang/go/wiki/LockOSThread for further details.
- Do(toRun func(NetNS) error) error
-
- // Sets the current network namespace to this object's network namespace.
- // Note that since Go's thread scheduling is highly variable, callers
- // cannot guarantee the requested namespace will be the current namespace
- // after this function is called; to ensure this wrap operations that
- // require the namespace with Do() instead.
- Set() error
-
- // Returns the filesystem path representing this object's network namespace
- Path() string
-
- // Returns a file descriptor representing this object's network namespace
- Fd() uintptr
-
- // Cleans up this instance of the network namespace; if this instance
- // is the last user the namespace will be destroyed
- Close() error
-}
-
-type netNS struct {
- file *os.File
- closed bool
-}
-
-// netNS implements the NetNS interface
-var _ NetNS = &netNS{}
-
-const (
- // https://github.com/torvalds/linux/blob/master/include/uapi/linux/magic.h
- NSFS_MAGIC = 0x6e736673
- PROCFS_MAGIC = 0x9fa0
-)
-
-type NSPathNotExistErr struct{ msg string }
-
-func (e NSPathNotExistErr) Error() string { return e.msg }
-
-type NSPathNotNSErr struct{ msg string }
-
-func (e NSPathNotNSErr) Error() string { return e.msg }
-
-func IsNSorErr(nspath string) error {
- stat := syscall.Statfs_t{}
- if err := syscall.Statfs(nspath, &stat); err != nil {
- if os.IsNotExist(err) {
- err = NSPathNotExistErr{msg: fmt.Sprintf("failed to Statfs %q: %v", nspath, err)}
- } else {
- err = fmt.Errorf("failed to Statfs %q: %v", nspath, err)
- }
- return err
- }
-
- switch stat.Type {
- case PROCFS_MAGIC, NSFS_MAGIC:
- return nil
- default:
- return NSPathNotNSErr{msg: fmt.Sprintf("unknown FS magic on %q: %x", nspath, stat.Type)}
- }
-}
-
-// Returns an object representing the namespace referred to by @path
-func GetNS(nspath string) (NetNS, error) {
- err := IsNSorErr(nspath)
- if err != nil {
- return nil, err
- }
-
- fd, err := os.Open(nspath)
- if err != nil {
- return nil, err
- }
-
- return &netNS{file: fd}, nil
-}
-
-func (ns *netNS) Path() string {
- return ns.file.Name()
-}
-
-func (ns *netNS) Fd() uintptr {
- return ns.file.Fd()
-}
-
-func (ns *netNS) errorIfClosed() error {
- if ns.closed {
- return fmt.Errorf("%q has already been closed", ns.file.Name())
- }
- return nil
-}
-
-func (ns *netNS) Do(toRun func(NetNS) error) error {
- if err := ns.errorIfClosed(); err != nil {
- return err
- }
-
- containedCall := func(hostNS NetNS) error {
- threadNS, err := GetCurrentNS()
- if err != nil {
- return fmt.Errorf("failed to open current netns: %v", err)
- }
- defer threadNS.Close()
-
- // switch to target namespace
- if err = ns.Set(); err != nil {
- return fmt.Errorf("error switching to ns %v: %v", ns.file.Name(), err)
- }
- defer threadNS.Set() // switch back
-
- return toRun(hostNS)
- }
-
- // save a handle to current network namespace
- hostNS, err := GetCurrentNS()
- if err != nil {
- return fmt.Errorf("Failed to open current namespace: %v", err)
- }
- defer hostNS.Close()
-
- var wg sync.WaitGroup
- wg.Add(1)
-
- var innerError error
- go func() {
- defer wg.Done()
- runtime.LockOSThread()
- innerError = containedCall(hostNS)
- }()
- wg.Wait()
-
- return innerError
-}
-
-// WithNetNSPath executes the passed closure under the given network
-// namespace, restoring the original namespace afterwards.
-func WithNetNSPath(nspath string, toRun func(NetNS) error) error {
- ns, err := GetNS(nspath)
- if err != nil {
- return err
- }
- defer ns.Close()
- return ns.Do(toRun)
-}
diff --git a/vendor/github.com/containernetworking/plugins/pkg/testutils/bad_reader.go b/vendor/github.com/containernetworking/plugins/pkg/testutils/bad_reader.go
deleted file mode 100644
index f9d0ade..0000000
--- a/vendor/github.com/containernetworking/plugins/pkg/testutils/bad_reader.go
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2016 CNI authors
-//
-// 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.
-
-package testutils
-
-import "errors"
-
-// BadReader is an io.Reader which always errors
-type BadReader struct {
- Error error
-}
-
-func (r *BadReader) Read(buffer []byte) (int, error) {
- if r.Error != nil {
- return 0, r.Error
- }
- return 0, errors.New("banana")
-}
-
-func (r *BadReader) Close() error {
- return nil
-}
diff --git a/vendor/github.com/containernetworking/plugins/pkg/testutils/cmd.go b/vendor/github.com/containernetworking/plugins/pkg/testutils/cmd.go
deleted file mode 100644
index ce600f6..0000000
--- a/vendor/github.com/containernetworking/plugins/pkg/testutils/cmd.go
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2016 CNI authors
-//
-// 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.
-
-package testutils
-
-import (
- "io/ioutil"
- "os"
-
- "github.com/containernetworking/cni/pkg/skel"
- "github.com/containernetworking/cni/pkg/types"
- "github.com/containernetworking/cni/pkg/version"
-)
-
-func envCleanup() {
- os.Unsetenv("CNI_COMMAND")
- os.Unsetenv("CNI_PATH")
- os.Unsetenv("CNI_NETNS")
- os.Unsetenv("CNI_IFNAME")
- os.Unsetenv("CNI_CONTAINERID")
-}
-
-func CmdAdd(cniNetns, cniContainerID, cniIfname string, conf []byte, f func() error) (types.Result, []byte, error) {
- os.Setenv("CNI_COMMAND", "ADD")
- os.Setenv("CNI_PATH", os.Getenv("PATH"))
- os.Setenv("CNI_NETNS", cniNetns)
- os.Setenv("CNI_IFNAME", cniIfname)
- os.Setenv("CNI_CONTAINERID", cniContainerID)
- defer envCleanup()
-
- // Redirect stdout to capture plugin result
- oldStdout := os.Stdout
- r, w, err := os.Pipe()
- if err != nil {
- return nil, nil, err
- }
-
- os.Stdout = w
- err = f()
- w.Close()
-
- var out []byte
- if err == nil {
- out, err = ioutil.ReadAll(r)
- }
- os.Stdout = oldStdout
-
- // Return errors after restoring stdout so Ginkgo will correctly
- // emit verbose error information on stdout
- if err != nil {
- return nil, nil, err
- }
-
- // Plugin must return result in same version as specified in netconf
- versionDecoder := &version.ConfigDecoder{}
- confVersion, err := versionDecoder.Decode(conf)
- if err != nil {
- return nil, nil, err
- }
-
- result, err := version.NewResult(confVersion, out)
- if err != nil {
- return nil, nil, err
- }
-
- return result, out, nil
-}
-
-func CmdAddWithArgs(args *skel.CmdArgs, f func() error) (types.Result, []byte, error) {
- return CmdAdd(args.Netns, args.ContainerID, args.IfName, args.StdinData, f)
-}
-
-func CmdCheck(cniNetns, cniContainerID, cniIfname string, conf []byte, f func() error) error {
- os.Setenv("CNI_COMMAND", "CHECK")
- os.Setenv("CNI_PATH", os.Getenv("PATH"))
- os.Setenv("CNI_NETNS", cniNetns)
- os.Setenv("CNI_IFNAME", cniIfname)
- os.Setenv("CNI_CONTAINERID", cniContainerID)
- defer envCleanup()
-
- return f()
-}
-
-func CmdCheckWithArgs(args *skel.CmdArgs, f func() error) error {
- return CmdCheck(args.Netns, args.ContainerID, args.IfName, args.StdinData, f)
-}
-
-func CmdDel(cniNetns, cniContainerID, cniIfname string, f func() error) error {
- os.Setenv("CNI_COMMAND", "DEL")
- os.Setenv("CNI_PATH", os.Getenv("PATH"))
- os.Setenv("CNI_NETNS", cniNetns)
- os.Setenv("CNI_IFNAME", cniIfname)
- os.Setenv("CNI_CONTAINERID", cniContainerID)
- defer envCleanup()
-
- return f()
-}
-
-func CmdDelWithArgs(args *skel.CmdArgs, f func() error) error {
- return CmdDel(args.Netns, args.ContainerID, args.IfName, f)
-}
diff --git a/vendor/github.com/containernetworking/plugins/pkg/testutils/netns_linux.go b/vendor/github.com/containernetworking/plugins/pkg/testutils/netns_linux.go
deleted file mode 100644
index 6d56e40..0000000
--- a/vendor/github.com/containernetworking/plugins/pkg/testutils/netns_linux.go
+++ /dev/null
@@ -1,157 +0,0 @@
-// Copyright 2018 CNI authors
-//
-// 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.
-
-package testutils
-
-import (
- "crypto/rand"
- "fmt"
- "os"
- "path"
- "runtime"
- "strings"
- "sync"
-
- "github.com/containernetworking/plugins/pkg/ns"
- "golang.org/x/sys/unix"
-)
-
-const nsRunDir = "/var/run/netns"
-
-// Creates a new persistent (bind-mounted) network namespace and returns an object
-// representing that namespace, without switching to it.
-func NewNS() (ns.NetNS, error) {
-
- b := make([]byte, 16)
- _, err := rand.Reader.Read(b)
- if err != nil {
- return nil, fmt.Errorf("failed to generate random netns name: %v", err)
- }
-
- // Create the directory for mounting network namespaces
- // This needs to be a shared mountpoint in case it is mounted in to
- // other namespaces (containers)
- err = os.MkdirAll(nsRunDir, 0755)
- if err != nil {
- return nil, err
- }
-
- // Remount the namespace directory shared. This will fail if it is not
- // already a mountpoint, so bind-mount it on to itself to "upgrade" it
- // to a mountpoint.
- err = unix.Mount("", nsRunDir, "none", unix.MS_SHARED|unix.MS_REC, "")
- if err != nil {
- if err != unix.EINVAL {
- return nil, fmt.Errorf("mount --make-rshared %s failed: %q", nsRunDir, err)
- }
-
- // Recursively remount /var/run/netns on itself. The recursive flag is
- // so that any existing netns bindmounts are carried over.
- err = unix.Mount(nsRunDir, nsRunDir, "none", unix.MS_BIND|unix.MS_REC, "")
- if err != nil {
- return nil, fmt.Errorf("mount --rbind %s %s failed: %q", nsRunDir, nsRunDir, err)
- }
-
- // Now we can make it shared
- err = unix.Mount("", nsRunDir, "none", unix.MS_SHARED|unix.MS_REC, "")
- if err != nil {
- return nil, fmt.Errorf("mount --make-rshared %s failed: %q", nsRunDir, err)
- }
-
- }
-
- nsName := fmt.Sprintf("cnitest-%x-%x-%x-%x-%x", b[0:4], b[4:6], b[6:8], b[8:10], b[10:])
-
- // create an empty file at the mount point
- nsPath := path.Join(nsRunDir, nsName)
- mountPointFd, err := os.Create(nsPath)
- if err != nil {
- return nil, err
- }
- mountPointFd.Close()
-
- // Ensure the mount point is cleaned up on errors; if the namespace
- // was successfully mounted this will have no effect because the file
- // is in-use
- defer os.RemoveAll(nsPath)
-
- var wg sync.WaitGroup
- wg.Add(1)
-
- // do namespace work in a dedicated goroutine, so that we can safely
- // Lock/Unlock OSThread without upsetting the lock/unlock state of
- // the caller of this function
- go (func() {
- defer wg.Done()
- runtime.LockOSThread()
- // Don't unlock. By not unlocking, golang will kill the OS thread when the
- // goroutine is done (for go1.10+)
-
- var origNS ns.NetNS
- origNS, err = ns.GetNS(getCurrentThreadNetNSPath())
- if err != nil {
- return
- }
- defer origNS.Close()
-
- // create a new netns on the current thread
- err = unix.Unshare(unix.CLONE_NEWNET)
- if err != nil {
- return
- }
-
- // Put this thread back to the orig ns, since it might get reused (pre go1.10)
- defer origNS.Set()
-
- // bind mount the netns from the current thread (from /proc) onto the
- // mount point. This causes the namespace to persist, even when there
- // are no threads in the ns.
- err = unix.Mount(getCurrentThreadNetNSPath(), nsPath, "none", unix.MS_BIND, "")
- if err != nil {
- err = fmt.Errorf("failed to bind mount ns at %s: %v", nsPath, err)
- }
- })()
- wg.Wait()
-
- if err != nil {
- return nil, fmt.Errorf("failed to create namespace: %v", err)
- }
-
- return ns.GetNS(nsPath)
-}
-
-// UnmountNS unmounts the NS held by the netns object
-func UnmountNS(ns ns.NetNS) error {
- nsPath := ns.Path()
- // Only unmount if it's been bind-mounted (don't touch namespaces in /proc...)
- if strings.HasPrefix(nsPath, nsRunDir) {
- if err := unix.Unmount(nsPath, 0); err != nil {
- return fmt.Errorf("failed to unmount NS: at %s: %v", nsPath, err)
- }
-
- if err := os.Remove(nsPath); err != nil {
- return fmt.Errorf("failed to remove ns path %s: %v", nsPath, err)
- }
- }
-
- return nil
-}
-
-// getCurrentThreadNetNSPath copied from pkg/ns
-func getCurrentThreadNetNSPath() string {
- // /proc/self/ns/net returns the namespace of the main thread, not
- // of whatever thread this goroutine is running on. Make sure we
- // use the thread's net namespace since the thread is switching around
- return fmt.Sprintf("/proc/%d/task/%d/ns/net", os.Getpid(), unix.Gettid())
-}
diff --git a/vendor/github.com/containernetworking/plugins/pkg/testutils/ping.go b/vendor/github.com/containernetworking/plugins/pkg/testutils/ping.go
deleted file mode 100644
index 5ee9db1..0000000
--- a/vendor/github.com/containernetworking/plugins/pkg/testutils/ping.go
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2017 CNI authors
-//
-// 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.
-
-package testutils
-
-import (
- "bytes"
- "fmt"
- "os/exec"
- "strconv"
- "syscall"
-)
-
-// Ping shells out to the `ping` command. Returns nil if successful.
-func Ping(saddr, daddr string, isV6 bool, timeoutSec int) error {
- args := []string{
- "-c", "1",
- "-W", strconv.Itoa(timeoutSec),
- "-I", saddr,
- daddr,
- }
-
- bin := "ping"
- if isV6 {
- bin = "ping6"
- }
-
- cmd := exec.Command(bin, args...)
- var stderr bytes.Buffer
- cmd.Stderr = &stderr
-
- if err := cmd.Run(); err != nil {
- switch e := err.(type) {
- case *exec.ExitError:
- return fmt.Errorf("%v exit status %d: %s",
- args, e.Sys().(syscall.WaitStatus).ExitStatus(),
- stderr.String())
- default:
- return err
- }
- }
-
- return nil
-}
diff --git a/vendor/github.com/containernetworking/plugins/pkg/utils/buildversion/buildversion.go b/vendor/github.com/containernetworking/plugins/pkg/utils/buildversion/buildversion.go
deleted file mode 100644
index 734d418..0000000
--- a/vendor/github.com/containernetworking/plugins/pkg/utils/buildversion/buildversion.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2019 CNI authors
-//
-// 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.
-
-// Buildversion is a destination for the linker trickery so we can auto
-// set the build-version
-package buildversion
-
-import "fmt"
-
-// This is overridden in the linker script
-var BuildVersion = "version unknown"
-
-func BuildString(pluginName string) string {
- return fmt.Sprintf("CNI %s plugin %s", pluginName, BuildVersion)
-}
diff --git a/vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/disk/backend.go b/vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/disk/backend.go
deleted file mode 100644
index 56f1638..0000000
--- a/vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/disk/backend.go
+++ /dev/null
@@ -1,209 +0,0 @@
-// Copyright 2015 CNI authors
-//
-// 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.
-
-package disk
-
-import (
- "io/ioutil"
- "net"
- "os"
- "path/filepath"
- "runtime"
- "strings"
-
- "github.com/containernetworking/plugins/plugins/ipam/host-local/backend"
-)
-
-const lastIPFilePrefix = "last_reserved_ip."
-const LineBreak = "\r\n"
-
-var defaultDataDir = "/var/lib/cni/networks"
-
-// Store is a simple disk-backed store that creates one file per IP
-// address in a given directory. The contents of the file are the container ID.
-type Store struct {
- *FileLock
- dataDir string
-}
-
-// Store implements the Store interface
-var _ backend.Store = &Store{}
-
-func New(network, dataDir string) (*Store, error) {
- if dataDir == "" {
- dataDir = defaultDataDir
- }
- dir := filepath.Join(dataDir, network)
- if err := os.MkdirAll(dir, 0755); err != nil {
- return nil, err
- }
-
- lk, err := NewFileLock(dir)
- if err != nil {
- return nil, err
- }
- return &Store{lk, dir}, nil
-}
-
-func (s *Store) Reserve(id string, ifname string, ip net.IP, rangeID string) (bool, error) {
- fname := GetEscapedPath(s.dataDir, ip.String())
-
- f, err := os.OpenFile(fname, os.O_RDWR|os.O_EXCL|os.O_CREATE, 0644)
- if os.IsExist(err) {
- return false, nil
- }
- if err != nil {
- return false, err
- }
- if _, err := f.WriteString(strings.TrimSpace(id) + LineBreak + ifname); err != nil {
- f.Close()
- os.Remove(f.Name())
- return false, err
- }
- if err := f.Close(); err != nil {
- os.Remove(f.Name())
- return false, err
- }
- // store the reserved ip in lastIPFile
- ipfile := GetEscapedPath(s.dataDir, lastIPFilePrefix+rangeID)
- err = ioutil.WriteFile(ipfile, []byte(ip.String()), 0644)
- if err != nil {
- return false, err
- }
- return true, nil
-}
-
-// LastReservedIP returns the last reserved IP if exists
-func (s *Store) LastReservedIP(rangeID string) (net.IP, error) {
- ipfile := GetEscapedPath(s.dataDir, lastIPFilePrefix+rangeID)
- data, err := ioutil.ReadFile(ipfile)
- if err != nil {
- return nil, err
- }
- return net.ParseIP(string(data)), nil
-}
-
-func (s *Store) Release(ip net.IP) error {
- return os.Remove(GetEscapedPath(s.dataDir, ip.String()))
-}
-
-func (s *Store) FindByKey(id string, ifname string, match string) (bool, error) {
- found := false
-
- err := filepath.Walk(s.dataDir, func(path string, info os.FileInfo, err error) error {
- if err != nil || info.IsDir() {
- return nil
- }
- data, err := ioutil.ReadFile(path)
- if err != nil {
- return nil
- }
- if strings.TrimSpace(string(data)) == match {
- found = true
- }
- return nil
- })
- return found, err
-
-}
-
-func (s *Store) FindByID(id string, ifname string) bool {
- s.Lock()
- defer s.Unlock()
-
- found := false
- match := strings.TrimSpace(id) + LineBreak + ifname
- found, err := s.FindByKey(id, ifname, match)
-
- // Match anything created by this id
- if !found && err == nil {
- match := strings.TrimSpace(id)
- found, err = s.FindByKey(id, ifname, match)
- }
-
- return found
-}
-
-func (s *Store) ReleaseByKey(id string, ifname string, match string) (bool, error) {
- found := false
- err := filepath.Walk(s.dataDir, func(path string, info os.FileInfo, err error) error {
- if err != nil || info.IsDir() {
- return nil
- }
- data, err := ioutil.ReadFile(path)
- if err != nil {
- return nil
- }
- if strings.TrimSpace(string(data)) == match {
- if err := os.Remove(path); err != nil {
- return nil
- }
- found = true
- }
- return nil
- })
- return found, err
-
-}
-
-// N.B. This function eats errors to be tolerant and
-// release as much as possible
-func (s *Store) ReleaseByID(id string, ifname string) error {
- found := false
- match := strings.TrimSpace(id) + LineBreak + ifname
- found, err := s.ReleaseByKey(id, ifname, match)
-
- // For backwards compatibility, look for files written by a previous version
- if !found && err == nil {
- match := strings.TrimSpace(id)
- found, err = s.ReleaseByKey(id, ifname, match)
- }
- return err
-}
-
-// GetByID returns the IPs which have been allocated to the specific ID
-func (s *Store) GetByID(id string, ifname string) []net.IP {
- var ips []net.IP
-
- match := strings.TrimSpace(id) + LineBreak + ifname
- // matchOld for backwards compatibility
- matchOld := strings.TrimSpace(id)
-
- // walk through all ips in this network to get the ones which belong to a specific ID
- _ = filepath.Walk(s.dataDir, func(path string, info os.FileInfo, err error) error {
- if err != nil || info.IsDir() {
- return nil
- }
- data, err := ioutil.ReadFile(path)
- if err != nil {
- return nil
- }
- if strings.TrimSpace(string(data)) == match || strings.TrimSpace(string(data)) == matchOld {
- _, ipString := filepath.Split(path)
- if ip := net.ParseIP(ipString); ip != nil {
- ips = append(ips, ip)
- }
- }
- return nil
- })
-
- return ips
-}
-
-func GetEscapedPath(dataDir string, fname string) string {
- if runtime.GOOS == "windows" {
- fname = strings.Replace(fname, ":", "_", -1)
- }
- return filepath.Join(dataDir, fname)
-}
diff --git a/vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/disk/lock.go b/vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/disk/lock.go
deleted file mode 100644
index fe7b480..0000000
--- a/vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/disk/lock.go
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2015 CNI authors
-//
-// 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.
-
-package disk
-
-import (
- "github.com/alexflint/go-filemutex"
- "os"
- "path"
-)
-
-// FileLock wraps os.File to be used as a lock using flock
-type FileLock struct {
- f *filemutex.FileMutex
-}
-
-// NewFileLock opens file/dir at path and returns unlocked FileLock object
-func NewFileLock(lockPath string) (*FileLock, error) {
- fi, err := os.Stat(lockPath)
- if err != nil {
- return nil, err
- }
-
- if fi.IsDir() {
- lockPath = path.Join(lockPath, "lock")
- }
-
- f, err := filemutex.New(lockPath)
- if err != nil {
- return nil, err
- }
-
- return &FileLock{f}, nil
-}
-
-func (l *FileLock) Close() error {
- return l.f.Close()
-}
-
-// Lock acquires an exclusive lock
-func (l *FileLock) Lock() error {
- return l.f.Lock()
-}
-
-// Unlock releases the lock
-func (l *FileLock) Unlock() error {
- return l.f.Unlock()
-}
diff --git a/vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/store.go b/vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/store.go
deleted file mode 100644
index 7211ddf..0000000
--- a/vendor/github.com/containernetworking/plugins/plugins/ipam/host-local/backend/store.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2015 CNI authors
-//
-// 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.
-
-package backend
-
-import "net"
-
-type Store interface {
- Lock() error
- Unlock() error
- Close() error
- Reserve(id string, ifname string, ip net.IP, rangeID string) (bool, error)
- LastReservedIP(rangeID string) (net.IP, error)
- Release(ip net.IP) error
- ReleaseByID(id string, ifname string) error
- GetByID(id string, ifname string) []net.IP
-}
diff --git a/vendor/github.com/coreos/go-iptables/LICENSE b/vendor/github.com/coreos/go-iptables/LICENSE
deleted file mode 100644
index 37ec93a..0000000
--- a/vendor/github.com/coreos/go-iptables/LICENSE
+++ /dev/null
@@ -1,191 +0,0 @@
-Apache License
-Version 2.0, January 2004
-http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction, and
-distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by the copyright
-owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and all other entities
-that control, are controlled by, or are under common control with that entity.
-For the purposes of this definition, "control" means (i) the power, direct or
-indirect, to cause the direction or management of such entity, whether by
-contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
-outstanding shares, or (iii) beneficial ownership of such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity exercising
-permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications, including
-but not limited to software source code, documentation source, and configuration
-files.
-
-"Object" form shall mean any form resulting from mechanical transformation or
-translation of a Source form, including but not limited to compiled object code,
-generated documentation, and conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or Object form, made
-available under the License, as indicated by a copyright notice that is included
-in or attached to the work (an example is provided in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object form, that
-is based on (or derived from) the Work and for which the editorial revisions,
-annotations, elaborations, or other modifications represent, as a whole, an
-original work of authorship. For the purposes of this License, Derivative Works
-shall not include works that remain separable from, or merely link (or bind by
-name) to the interfaces of, the Work and Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including the original version
-of the Work and any modifications or additions to that Work or Derivative Works
-thereof, that is intentionally submitted to Licensor for inclusion in the Work
-by the copyright owner or by an individual or Legal Entity authorized to submit
-on behalf of the copyright owner. For the purposes of this definition,
-"submitted" means any form of electronic, verbal, or written communication sent
-to the Licensor or its representatives, including but not limited to
-communication on electronic mailing lists, source code control systems, and
-issue tracking systems that are managed by, or on behalf of, the Licensor for
-the purpose of discussing and improving the Work, but excluding communication
-that is conspicuously marked or otherwise designated in writing by the copyright
-owner as "Not a Contribution."
-
-"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
-of whom a Contribution has been received by Licensor and subsequently
-incorporated within the Work.
-
-2. Grant of Copyright License.
-
-Subject to the terms and conditions of this License, each Contributor hereby
-grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
-irrevocable copyright license to reproduce, prepare Derivative Works of,
-publicly display, publicly perform, sublicense, and distribute the Work and such
-Derivative Works in Source or Object form.
-
-3. Grant of Patent License.
-
-Subject to the terms and conditions of this License, each Contributor hereby
-grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
-irrevocable (except as stated in this section) patent license to make, have
-made, use, offer to sell, sell, import, and otherwise transfer the Work, where
-such license applies only to those patent claims licensable by such Contributor
-that are necessarily infringed by their Contribution(s) alone or by combination
-of their Contribution(s) with the Work to which such Contribution(s) was
-submitted. If You institute patent litigation against any entity (including a
-cross-claim or counterclaim in a lawsuit) alleging that the Work or a
-Contribution incorporated within the Work constitutes direct or contributory
-patent infringement, then any patent licenses granted to You under this License
-for that Work shall terminate as of the date such litigation is filed.
-
-4. Redistribution.
-
-You may reproduce and distribute copies of the Work or Derivative Works thereof
-in any medium, with or without modifications, and in Source or Object form,
-provided that You meet the following conditions:
-
-You must give any other recipients of the Work or Derivative Works a copy of
-this License; and
-You must cause any modified files to carry prominent notices stating that You
-changed the files; and
-You must retain, in the Source form of any Derivative Works that You distribute,
-all copyright, patent, trademark, and attribution notices from the Source form
-of the Work, excluding those notices that do not pertain to any part of the
-Derivative Works; and
-If the Work includes a "NOTICE" text file as part of its distribution, then any
-Derivative Works that You distribute must include a readable copy of the
-attribution notices contained within such NOTICE file, excluding those notices
-that do not pertain to any part of the Derivative Works, in at least one of the
-following places: within a NOTICE text file distributed as part of the
-Derivative Works; within the Source form or documentation, if provided along
-with the Derivative Works; or, within a display generated by the Derivative
-Works, if and wherever such third-party notices normally appear. The contents of
-the NOTICE file are for informational purposes only and do not modify the
-License. You may add Your own attribution notices within Derivative Works that
-You distribute, alongside or as an addendum to the NOTICE text from the Work,
-provided that such additional attribution notices cannot be construed as
-modifying the License.
-You may add Your own copyright statement to Your modifications and may provide
-additional or different license terms and conditions for use, reproduction, or
-distribution of Your modifications, or for any such Derivative Works as a whole,
-provided Your use, reproduction, and distribution of the Work otherwise complies
-with the conditions stated in this License.
-
-5. Submission of Contributions.
-
-Unless You explicitly state otherwise, any Contribution intentionally submitted
-for inclusion in the Work by You to the Licensor shall be under the terms and
-conditions of this License, without any additional terms or conditions.
-Notwithstanding the above, nothing herein shall supersede or modify the terms of
-any separate license agreement you may have executed with Licensor regarding
-such Contributions.
-
-6. Trademarks.
-
-This License does not grant permission to use the trade names, trademarks,
-service marks, or product names of the Licensor, except as required for
-reasonable and customary use in describing the origin of the Work and
-reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty.
-
-Unless required by applicable law or agreed to in writing, Licensor provides the
-Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
-including, without limitation, any warranties or conditions of TITLE,
-NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
-solely responsible for determining the appropriateness of using or
-redistributing the Work and assume any risks associated with Your exercise of
-permissions under this License.
-
-8. Limitation of Liability.
-
-In no event and under no legal theory, whether in tort (including negligence),
-contract, or otherwise, unless required by applicable law (such as deliberate
-and grossly negligent acts) or agreed to in writing, shall any Contributor be
-liable to You for damages, including any direct, indirect, special, incidental,
-or consequential damages of any character arising as a result of this License or
-out of the use or inability to use the Work (including but not limited to
-damages for loss of goodwill, work stoppage, computer failure or malfunction, or
-any and all other commercial damages or losses), even if such Contributor has
-been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability.
-
-While redistributing the Work or Derivative Works thereof, You may choose to
-offer, and charge a fee for, acceptance of support, warranty, indemnity, or
-other liability obligations and/or rights consistent with this License. However,
-in accepting such obligations, You may act only on Your own behalf and on Your
-sole responsibility, not on behalf of any other Contributor, and only if You
-agree to indemnify, defend, and hold each Contributor harmless for any liability
-incurred by, or claims asserted against, such Contributor by reason of your
-accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work
-
-To apply the Apache License to your work, attach the following boilerplate
-notice, with the fields enclosed by brackets "[]" replaced with your own
-identifying information. (Don't include the brackets!) The text should be
-enclosed in the appropriate comment syntax for the file format. We also
-recommend that a file or class name and description of purpose be included on
-the same "printed page" as the copyright notice for easier identification within
-third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/vendor/github.com/coreos/go-iptables/NOTICE b/vendor/github.com/coreos/go-iptables/NOTICE
deleted file mode 100644
index 23a0ada..0000000
--- a/vendor/github.com/coreos/go-iptables/NOTICE
+++ /dev/null
@@ -1,5 +0,0 @@
-CoreOS Project
-Copyright 2018 CoreOS, Inc
-
-This product includes software developed at CoreOS, Inc.
-(http://www.coreos.com/).
diff --git a/vendor/github.com/coreos/go-iptables/iptables/iptables.go b/vendor/github.com/coreos/go-iptables/iptables/iptables.go
deleted file mode 100644
index 2ed875b..0000000
--- a/vendor/github.com/coreos/go-iptables/iptables/iptables.go
+++ /dev/null
@@ -1,598 +0,0 @@
-// Copyright 2015 CoreOS, Inc.
-//
-// 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.
-
-package iptables
-
-import (
- "bytes"
- "fmt"
- "io"
- "net"
- "os/exec"
- "regexp"
- "strconv"
- "strings"
- "syscall"
-)
-
-// Adds the output of stderr to exec.ExitError
-type Error struct {
- exec.ExitError
- cmd exec.Cmd
- msg string
- proto Protocol
- exitStatus *int //for overriding
-}
-
-func (e *Error) ExitStatus() int {
- if e.exitStatus != nil {
- return *e.exitStatus
- }
- return e.Sys().(syscall.WaitStatus).ExitStatus()
-}
-
-func (e *Error) Error() string {
- return fmt.Sprintf("running %v: exit status %v: %v", e.cmd.Args, e.ExitStatus(), e.msg)
-}
-
-// IsNotExist returns true if the error is due to the chain or rule not existing
-func (e *Error) IsNotExist() bool {
- return e.ExitStatus() == 1 &&
- (e.msg == fmt.Sprintf("%s: Bad rule (does a matching rule exist in that chain?).\n", getIptablesCommand(e.proto)) ||
- e.msg == fmt.Sprintf("%s: No chain/target/match by that name.\n", getIptablesCommand(e.proto)))
-}
-
-// Protocol to differentiate between IPv4 and IPv6
-type Protocol byte
-
-const (
- ProtocolIPv4 Protocol = iota
- ProtocolIPv6
-)
-
-type IPTables struct {
- path string
- proto Protocol
- hasCheck bool
- hasWait bool
- hasRandomFully bool
- v1 int
- v2 int
- v3 int
- mode string // the underlying iptables operating mode, e.g. nf_tables
-}
-
-// Stat represents a structured statistic entry.
-type Stat struct {
- Packets uint64 `json:"pkts"`
- Bytes uint64 `json:"bytes"`
- Target string `json:"target"`
- Protocol string `json:"prot"`
- Opt string `json:"opt"`
- Input string `json:"in"`
- Output string `json:"out"`
- Source *net.IPNet `json:"source"`
- Destination *net.IPNet `json:"destination"`
- Options string `json:"options"`
-}
-
-// New creates a new IPTables.
-// For backwards compatibility, this always uses IPv4, i.e. "iptables".
-func New() (*IPTables, error) {
- return NewWithProtocol(ProtocolIPv4)
-}
-
-// New creates a new IPTables for the given proto.
-// The proto will determine which command is used, either "iptables" or "ip6tables".
-func NewWithProtocol(proto Protocol) (*IPTables, error) {
- path, err := exec.LookPath(getIptablesCommand(proto))
- if err != nil {
- return nil, err
- }
- vstring, err := getIptablesVersionString(path)
- v1, v2, v3, mode, err := extractIptablesVersion(vstring)
-
- checkPresent, waitPresent, randomFullyPresent := getIptablesCommandSupport(v1, v2, v3)
-
- ipt := IPTables{
- path: path,
- proto: proto,
- hasCheck: checkPresent,
- hasWait: waitPresent,
- hasRandomFully: randomFullyPresent,
- v1: v1,
- v2: v2,
- v3: v3,
- mode: mode,
- }
- return &ipt, nil
-}
-
-// Proto returns the protocol used by this IPTables.
-func (ipt *IPTables) Proto() Protocol {
- return ipt.proto
-}
-
-// Exists checks if given rulespec in specified table/chain exists
-func (ipt *IPTables) Exists(table, chain string, rulespec ...string) (bool, error) {
- if !ipt.hasCheck {
- return ipt.existsForOldIptables(table, chain, rulespec)
-
- }
- cmd := append([]string{"-t", table, "-C", chain}, rulespec...)
- err := ipt.run(cmd...)
- eerr, eok := err.(*Error)
- switch {
- case err == nil:
- return true, nil
- case eok && eerr.ExitStatus() == 1:
- return false, nil
- default:
- return false, err
- }
-}
-
-// Insert inserts rulespec to specified table/chain (in specified pos)
-func (ipt *IPTables) Insert(table, chain string, pos int, rulespec ...string) error {
- cmd := append([]string{"-t", table, "-I", chain, strconv.Itoa(pos)}, rulespec...)
- return ipt.run(cmd...)
-}
-
-// Append appends rulespec to specified table/chain
-func (ipt *IPTables) Append(table, chain string, rulespec ...string) error {
- cmd := append([]string{"-t", table, "-A", chain}, rulespec...)
- return ipt.run(cmd...)
-}
-
-// AppendUnique acts like Append except that it won't add a duplicate
-func (ipt *IPTables) AppendUnique(table, chain string, rulespec ...string) error {
- exists, err := ipt.Exists(table, chain, rulespec...)
- if err != nil {
- return err
- }
-
- if !exists {
- return ipt.Append(table, chain, rulespec...)
- }
-
- return nil
-}
-
-// Delete removes rulespec in specified table/chain
-func (ipt *IPTables) Delete(table, chain string, rulespec ...string) error {
- cmd := append([]string{"-t", table, "-D", chain}, rulespec...)
- return ipt.run(cmd...)
-}
-
-// List rules in specified table/chain
-func (ipt *IPTables) List(table, chain string) ([]string, error) {
- args := []string{"-t", table, "-S", chain}
- return ipt.executeList(args)
-}
-
-// List rules (with counters) in specified table/chain
-func (ipt *IPTables) ListWithCounters(table, chain string) ([]string, error) {
- args := []string{"-t", table, "-v", "-S", chain}
- return ipt.executeList(args)
-}
-
-// ListChains returns a slice containing the name of each chain in the specified table.
-func (ipt *IPTables) ListChains(table string) ([]string, error) {
- args := []string{"-t", table, "-S"}
-
- result, err := ipt.executeList(args)
- if err != nil {
- return nil, err
- }
-
- // Iterate over rules to find all default (-P) and user-specified (-N) chains.
- // Chains definition always come before rules.
- // Format is the following:
- // -P OUTPUT ACCEPT
- // -N Custom
- var chains []string
- for _, val := range result {
- if strings.HasPrefix(val, "-P") || strings.HasPrefix(val, "-N") {
- chains = append(chains, strings.Fields(val)[1])
- } else {
- break
- }
- }
- return chains, nil
-}
-
-// Stats lists rules including the byte and packet counts
-func (ipt *IPTables) Stats(table, chain string) ([][]string, error) {
- args := []string{"-t", table, "-L", chain, "-n", "-v", "-x"}
- lines, err := ipt.executeList(args)
- if err != nil {
- return nil, err
- }
-
- appendSubnet := func(addr string) string {
- if strings.IndexByte(addr, byte('/')) < 0 {
- if strings.IndexByte(addr, '.') < 0 {
- return addr + "/128"
- }
- return addr + "/32"
- }
- return addr
- }
-
- ipv6 := ipt.proto == ProtocolIPv6
-
- rows := [][]string{}
- for i, line := range lines {
- // Skip over chain name and field header
- if i < 2 {
- continue
- }
-
- // Fields:
- // 0=pkts 1=bytes 2=target 3=prot 4=opt 5=in 6=out 7=source 8=destination 9=options
- line = strings.TrimSpace(line)
- fields := strings.Fields(line)
-
- // The ip6tables verbose output cannot be naively split due to the default "opt"
- // field containing 2 single spaces.
- if ipv6 {
- // Check if field 6 is "opt" or "source" address
- dest := fields[6]
- ip, _, _ := net.ParseCIDR(dest)
- if ip == nil {
- ip = net.ParseIP(dest)
- }
-
- // If we detected a CIDR or IP, the "opt" field is empty.. insert it.
- if ip != nil {
- f := []string{}
- f = append(f, fields[:4]...)
- f = append(f, " ") // Empty "opt" field for ip6tables
- f = append(f, fields[4:]...)
- fields = f
- }
- }
-
- // Adjust "source" and "destination" to include netmask, to match regular
- // List output
- fields[7] = appendSubnet(fields[7])
- fields[8] = appendSubnet(fields[8])
-
- // Combine "options" fields 9... into a single space-delimited field.
- options := fields[9:]
- fields = fields[:9]
- fields = append(fields, strings.Join(options, " "))
- rows = append(rows, fields)
- }
- return rows, nil
-}
-
-// ParseStat parses a single statistic row into a Stat struct. The input should
-// be a string slice that is returned from calling the Stat method.
-func (ipt *IPTables) ParseStat(stat []string) (parsed Stat, err error) {
- // For forward-compatibility, expect at least 10 fields in the stat
- if len(stat) < 10 {
- return parsed, fmt.Errorf("stat contained fewer fields than expected")
- }
-
- // Convert the fields that are not plain strings
- parsed.Packets, err = strconv.ParseUint(stat[0], 0, 64)
- if err != nil {
- return parsed, fmt.Errorf(err.Error(), "could not parse packets")
- }
- parsed.Bytes, err = strconv.ParseUint(stat[1], 0, 64)
- if err != nil {
- return parsed, fmt.Errorf(err.Error(), "could not parse bytes")
- }
- _, parsed.Source, err = net.ParseCIDR(stat[7])
- if err != nil {
- return parsed, fmt.Errorf(err.Error(), "could not parse source")
- }
- _, parsed.Destination, err = net.ParseCIDR(stat[8])
- if err != nil {
- return parsed, fmt.Errorf(err.Error(), "could not parse destination")
- }
-
- // Put the fields that are strings
- parsed.Target = stat[2]
- parsed.Protocol = stat[3]
- parsed.Opt = stat[4]
- parsed.Input = stat[5]
- parsed.Output = stat[6]
- parsed.Options = stat[9]
-
- return parsed, nil
-}
-
-// StructuredStats returns statistics as structured data which may be further
-// parsed and marshaled.
-func (ipt *IPTables) StructuredStats(table, chain string) ([]Stat, error) {
- rawStats, err := ipt.Stats(table, chain)
- if err != nil {
- return nil, err
- }
-
- structStats := []Stat{}
- for _, rawStat := range rawStats {
- stat, err := ipt.ParseStat(rawStat)
- if err != nil {
- return nil, err
- }
- structStats = append(structStats, stat)
- }
-
- return structStats, nil
-}
-
-func (ipt *IPTables) executeList(args []string) ([]string, error) {
- var stdout bytes.Buffer
- if err := ipt.runWithOutput(args, &stdout); err != nil {
- return nil, err
- }
-
- rules := strings.Split(stdout.String(), "\n")
-
- // strip trailing newline
- if len(rules) > 0 && rules[len(rules)-1] == "" {
- rules = rules[:len(rules)-1]
- }
-
- // nftables mode doesn't return an error code when listing a non-existent
- // chain. Patch that up.
- if len(rules) == 0 && ipt.mode == "nf_tables" {
- v := 1
- return nil, &Error{
- cmd: exec.Cmd{Args: args},
- msg: fmt.Sprintf("%s: No chain/target/match by that name.\n", getIptablesCommand(ipt.proto)),
- proto: ipt.proto,
- exitStatus: &v,
- }
- }
-
- for i, rule := range rules {
- rules[i] = filterRuleOutput(rule)
- }
-
- return rules, nil
-}
-
-// NewChain creates a new chain in the specified table.
-// If the chain already exists, it will result in an error.
-func (ipt *IPTables) NewChain(table, chain string) error {
- return ipt.run("-t", table, "-N", chain)
-}
-
-const existsErr = 1
-
-// ClearChain flushed (deletes all rules) in the specified table/chain.
-// If the chain does not exist, a new one will be created
-func (ipt *IPTables) ClearChain(table, chain string) error {
- err := ipt.NewChain(table, chain)
-
- eerr, eok := err.(*Error)
- switch {
- case err == nil:
- return nil
- case eok && eerr.ExitStatus() == existsErr:
- // chain already exists. Flush (clear) it.
- return ipt.run("-t", table, "-F", chain)
- default:
- return err
- }
-}
-
-// RenameChain renames the old chain to the new one.
-func (ipt *IPTables) RenameChain(table, oldChain, newChain string) error {
- return ipt.run("-t", table, "-E", oldChain, newChain)
-}
-
-// DeleteChain deletes the chain in the specified table.
-// The chain must be empty
-func (ipt *IPTables) DeleteChain(table, chain string) error {
- return ipt.run("-t", table, "-X", chain)
-}
-
-// ChangePolicy changes policy on chain to target
-func (ipt *IPTables) ChangePolicy(table, chain, target string) error {
- return ipt.run("-t", table, "-P", chain, target)
-}
-
-// Check if the underlying iptables command supports the --random-fully flag
-func (ipt *IPTables) HasRandomFully() bool {
- return ipt.hasRandomFully
-}
-
-// Return version components of the underlying iptables command
-func (ipt *IPTables) GetIptablesVersion() (int, int, int) {
- return ipt.v1, ipt.v2, ipt.v3
-}
-
-// run runs an iptables command with the given arguments, ignoring
-// any stdout output
-func (ipt *IPTables) run(args ...string) error {
- return ipt.runWithOutput(args, nil)
-}
-
-// runWithOutput runs an iptables command with the given arguments,
-// writing any stdout output to the given writer
-func (ipt *IPTables) runWithOutput(args []string, stdout io.Writer) error {
- args = append([]string{ipt.path}, args...)
- if ipt.hasWait {
- args = append(args, "--wait")
- } else {
- fmu, err := newXtablesFileLock()
- if err != nil {
- return err
- }
- ul, err := fmu.tryLock()
- if err != nil {
- return err
- }
- defer ul.Unlock()
- }
-
- var stderr bytes.Buffer
- cmd := exec.Cmd{
- Path: ipt.path,
- Args: args,
- Stdout: stdout,
- Stderr: &stderr,
- }
-
- if err := cmd.Run(); err != nil {
- switch e := err.(type) {
- case *exec.ExitError:
- return &Error{*e, cmd, stderr.String(), ipt.proto, nil}
- default:
- return err
- }
- }
-
- return nil
-}
-
-// getIptablesCommand returns the correct command for the given protocol, either "iptables" or "ip6tables".
-func getIptablesCommand(proto Protocol) string {
- if proto == ProtocolIPv6 {
- return "ip6tables"
- } else {
- return "iptables"
- }
-}
-
-// Checks if iptables has the "-C" and "--wait" flag
-func getIptablesCommandSupport(v1 int, v2 int, v3 int) (bool, bool, bool) {
- return iptablesHasCheckCommand(v1, v2, v3), iptablesHasWaitCommand(v1, v2, v3), iptablesHasRandomFully(v1, v2, v3)
-}
-
-// getIptablesVersion returns the first three components of the iptables version
-// and the operating mode (e.g. nf_tables or legacy)
-// e.g. "iptables v1.3.66" would return (1, 3, 66, legacy, nil)
-func extractIptablesVersion(str string) (int, int, int, string, error) {
- versionMatcher := regexp.MustCompile(`v([0-9]+)\.([0-9]+)\.([0-9]+)(?:\s+\((\w+))?`)
- result := versionMatcher.FindStringSubmatch(str)
- if result == nil {
- return 0, 0, 0, "", fmt.Errorf("no iptables version found in string: %s", str)
- }
-
- v1, err := strconv.Atoi(result[1])
- if err != nil {
- return 0, 0, 0, "", err
- }
-
- v2, err := strconv.Atoi(result[2])
- if err != nil {
- return 0, 0, 0, "", err
- }
-
- v3, err := strconv.Atoi(result[3])
- if err != nil {
- return 0, 0, 0, "", err
- }
-
- mode := "legacy"
- if result[4] != "" {
- mode = result[4]
- }
- return v1, v2, v3, mode, nil
-}
-
-// Runs "iptables --version" to get the version string
-func getIptablesVersionString(path string) (string, error) {
- cmd := exec.Command(path, "--version")
- var out bytes.Buffer
- cmd.Stdout = &out
- err := cmd.Run()
- if err != nil {
- return "", err
- }
- return out.String(), nil
-}
-
-// Checks if an iptables version is after 1.4.11, when --check was added
-func iptablesHasCheckCommand(v1 int, v2 int, v3 int) bool {
- if v1 > 1 {
- return true
- }
- if v1 == 1 && v2 > 4 {
- return true
- }
- if v1 == 1 && v2 == 4 && v3 >= 11 {
- return true
- }
- return false
-}
-
-// Checks if an iptables version is after 1.4.20, when --wait was added
-func iptablesHasWaitCommand(v1 int, v2 int, v3 int) bool {
- if v1 > 1 {
- return true
- }
- if v1 == 1 && v2 > 4 {
- return true
- }
- if v1 == 1 && v2 == 4 && v3 >= 20 {
- return true
- }
- return false
-}
-
-// Checks if an iptables version is after 1.6.2, when --random-fully was added
-func iptablesHasRandomFully(v1 int, v2 int, v3 int) bool {
- if v1 > 1 {
- return true
- }
- if v1 == 1 && v2 > 6 {
- return true
- }
- if v1 == 1 && v2 == 6 && v3 >= 2 {
- return true
- }
- return false
-}
-
-// Checks if a rule specification exists for a table
-func (ipt *IPTables) existsForOldIptables(table, chain string, rulespec []string) (bool, error) {
- rs := strings.Join(append([]string{"-A", chain}, rulespec...), " ")
- args := []string{"-t", table, "-S"}
- var stdout bytes.Buffer
- err := ipt.runWithOutput(args, &stdout)
- if err != nil {
- return false, err
- }
- return strings.Contains(stdout.String(), rs), nil
-}
-
-// counterRegex is the regex used to detect nftables counter format
-var counterRegex = regexp.MustCompile(`^\[([0-9]+):([0-9]+)\] `)
-
-// filterRuleOutput works around some inconsistencies in output.
-// For example, when iptables is in legacy vs. nftables mode, it produces
-// different results.
-func filterRuleOutput(rule string) string {
- out := rule
-
- // work around an output difference in nftables mode where counters
- // are output in iptables-save format, rather than iptables -S format
- // The string begins with "[0:0]"
- //
- // Fixes #49
- if groups := counterRegex.FindStringSubmatch(out); groups != nil {
- // drop the brackets
- out = out[len(groups[0]):]
- out = fmt.Sprintf("%s -c %s %s", out, groups[1], groups[2])
- }
-
- return out
-}
diff --git a/vendor/github.com/coreos/go-iptables/iptables/lock.go b/vendor/github.com/coreos/go-iptables/iptables/lock.go
deleted file mode 100644
index a88e92b..0000000
--- a/vendor/github.com/coreos/go-iptables/iptables/lock.go
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2015 CoreOS, Inc.
-//
-// 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.
-
-package iptables
-
-import (
- "os"
- "sync"
- "syscall"
-)
-
-const (
- // In earlier versions of iptables, the xtables lock was implemented
- // via a Unix socket, but now flock is used via this lockfile:
- // http://git.netfilter.org/iptables/commit/?id=aa562a660d1555b13cffbac1e744033e91f82707
- // Note the LSB-conforming "/run" directory does not exist on old
- // distributions, so assume "/var" is symlinked
- xtablesLockFilePath = "/var/run/xtables.lock"
-
- defaultFilePerm = 0600
-)
-
-type Unlocker interface {
- Unlock() error
-}
-
-type nopUnlocker struct{}
-
-func (_ nopUnlocker) Unlock() error { return nil }
-
-type fileLock struct {
- // mu is used to protect against concurrent invocations from within this process
- mu sync.Mutex
- fd int
-}
-
-// tryLock takes an exclusive lock on the xtables lock file without blocking.
-// This is best-effort only: if the exclusive lock would block (i.e. because
-// another process already holds it), no error is returned. Otherwise, any
-// error encountered during the locking operation is returned.
-// The returned Unlocker should be used to release the lock when the caller is
-// done invoking iptables commands.
-func (l *fileLock) tryLock() (Unlocker, error) {
- l.mu.Lock()
- err := syscall.Flock(l.fd, syscall.LOCK_EX|syscall.LOCK_NB)
- switch err {
- case syscall.EWOULDBLOCK:
- l.mu.Unlock()
- return nopUnlocker{}, nil
- case nil:
- return l, nil
- default:
- l.mu.Unlock()
- return nil, err
- }
-}
-
-// Unlock closes the underlying file, which implicitly unlocks it as well. It
-// also unlocks the associated mutex.
-func (l *fileLock) Unlock() error {
- defer l.mu.Unlock()
- return syscall.Close(l.fd)
-}
-
-// newXtablesFileLock opens a new lock on the xtables lockfile without
-// acquiring the lock
-func newXtablesFileLock() (*fileLock, error) {
- fd, err := syscall.Open(xtablesLockFilePath, os.O_CREATE, defaultFilePerm)
- if err != nil {
- return nil, err
- }
- return &fileLock{fd: fd}, nil
-}
diff --git a/vendor/github.com/hpcloud/tail/.gitignore b/vendor/github.com/hpcloud/tail/.gitignore
deleted file mode 100644
index 6d9953c..0000000
--- a/vendor/github.com/hpcloud/tail/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.test
-.go
-
diff --git a/vendor/github.com/hpcloud/tail/.travis.yml b/vendor/github.com/hpcloud/tail/.travis.yml
deleted file mode 100644
index 9cf8bb7..0000000
--- a/vendor/github.com/hpcloud/tail/.travis.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-language: go
-
-script:
- - go test -race -v ./...
-
-go:
- - 1.4
- - 1.5
- - 1.6
- - tip
-
-matrix:
- allow_failures:
- - go: tip
-
-install:
- - go get gopkg.in/fsnotify.v1
- - go get gopkg.in/tomb.v1
diff --git a/vendor/github.com/hpcloud/tail/CHANGES.md b/vendor/github.com/hpcloud/tail/CHANGES.md
deleted file mode 100644
index 422790c..0000000
--- a/vendor/github.com/hpcloud/tail/CHANGES.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# API v1 (gopkg.in/hpcloud/tail.v1)
-
-## April, 2016
-
-* Migrated to godep, as depman is not longer supported
-* Introduced golang vendoring feature
-* Fixed issue [#57](https://github.com/hpcloud/tail/issues/57) related to reopen deleted file
-
-## July, 2015
-
-* Fix inotify watcher leak; remove `Cleanup` (#51)
-
-# API v0 (gopkg.in/hpcloud/tail.v0)
-
-## June, 2015
-
-* Don't return partial lines (PR #40)
-* Use stable version of fsnotify (#46)
-
-## July, 2014
-
-* Fix tail for Windows (PR #36)
-
-## May, 2014
-
-* Improved rate limiting using leaky bucket (PR #29)
-* Fix odd line splitting (PR #30)
-
-## Apr, 2014
-
-* LimitRate now discards read buffer (PR #28)
-* allow reading of longer lines if MaxLineSize is unset (PR #24)
-* updated deps.json to latest fsnotify (441bbc86b1)
-
-## Feb, 2014
-
-* added `Config.Logger` to suppress library logging
-
-## Nov, 2013
-
-* add Cleanup to remove leaky inotify watches (PR #20)
-
-## Aug, 2013
-
-* redesigned Location field (PR #12)
-* add tail.Tell (PR #14)
-
-## July, 2013
-
-* Rate limiting (PR #10)
-
-## May, 2013
-
-* Detect file deletions/renames in polling file watcher (PR #1)
-* Detect file truncation
-* Fix potential race condition when reopening the file (issue 5)
-* Fix potential blocking of `tail.Stop` (issue 4)
-* Fix uncleaned up ChangeEvents goroutines after calling tail.Stop
-* Support Follow=false
-
-## Feb, 2013
-
-* Initial open source release
diff --git a/vendor/github.com/hpcloud/tail/Dockerfile b/vendor/github.com/hpcloud/tail/Dockerfile
deleted file mode 100644
index cd297b9..0000000
--- a/vendor/github.com/hpcloud/tail/Dockerfile
+++ /dev/null
@@ -1,19 +0,0 @@
-FROM golang
-
-RUN mkdir -p $GOPATH/src/github.com/hpcloud/tail/
-ADD . $GOPATH/src/github.com/hpcloud/tail/
-
-# expecting to fetch dependencies successfully.
-RUN go get -v github.com/hpcloud/tail
-
-# expecting to run the test successfully.
-RUN go test -v github.com/hpcloud/tail
-
-# expecting to install successfully
-RUN go install -v github.com/hpcloud/tail
-RUN go install -v github.com/hpcloud/tail/cmd/gotail
-
-RUN $GOPATH/bin/gotail -h || true
-
-ENV PATH $GOPATH/bin:$PATH
-CMD ["gotail"]
diff --git a/vendor/github.com/hpcloud/tail/LICENSE.txt b/vendor/github.com/hpcloud/tail/LICENSE.txt
deleted file mode 100644
index 818d802..0000000
--- a/vendor/github.com/hpcloud/tail/LICENSE.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-# The MIT License (MIT)
-
-# © Copyright 2015 Hewlett Packard Enterprise Development LP
-Copyright (c) 2014 ActiveState
-
-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/hpcloud/tail/Makefile b/vendor/github.com/hpcloud/tail/Makefile
deleted file mode 100644
index 6591b24..0000000
--- a/vendor/github.com/hpcloud/tail/Makefile
+++ /dev/null
@@ -1,11 +0,0 @@
-default: test
-
-test: *.go
- go test -v -race ./...
-
-fmt:
- gofmt -w .
-
-# Run the test in an isolated environment.
-fulltest:
- docker build -t hpcloud/tail .
diff --git a/vendor/github.com/hpcloud/tail/README.md b/vendor/github.com/hpcloud/tail/README.md
deleted file mode 100644
index fb7fbc2..0000000
--- a/vendor/github.com/hpcloud/tail/README.md
+++ /dev/null
@@ -1,28 +0,0 @@
-[![Build Status](https://travis-ci.org/hpcloud/tail.svg)](https://travis-ci.org/hpcloud/tail)
-[![Build status](https://ci.appveyor.com/api/projects/status/kohpsf3rvhjhrox6?svg=true)](https://ci.appveyor.com/project/HelionCloudFoundry/tail)
-
-# Go package for tail-ing files
-
-A Go package striving to emulate the features of the BSD `tail` program.
-
-```Go
-t, err := tail.TailFile("/var/log/nginx.log", tail.Config{Follow: true})
-for line := range t.Lines {
- fmt.Println(line.Text)
-}
-```
-
-See [API documentation](http://godoc.org/github.com/hpcloud/tail).
-
-## Log rotation
-
-Tail comes with full support for truncation/move detection as it is
-designed to work with log rotation tools.
-
-## Installing
-
- go get github.com/hpcloud/tail/...
-
-## Windows support
-
-This package [needs assistance](https://github.com/hpcloud/tail/labels/Windows) for full Windows support.
diff --git a/vendor/github.com/hpcloud/tail/appveyor.yml b/vendor/github.com/hpcloud/tail/appveyor.yml
deleted file mode 100644
index d370055..0000000
--- a/vendor/github.com/hpcloud/tail/appveyor.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-version: 0.{build}
-skip_tags: true
-cache: C:\Users\appveyor\AppData\Local\NuGet\Cache
-build_script:
-- SET GOPATH=c:\workspace
-- go test -v -race ./...
-test: off
-clone_folder: c:\workspace\src\github.com\hpcloud\tail
-branches:
- only:
- - master
diff --git a/vendor/github.com/hpcloud/tail/ratelimiter/Licence b/vendor/github.com/hpcloud/tail/ratelimiter/Licence
deleted file mode 100644
index 434aab1..0000000
--- a/vendor/github.com/hpcloud/tail/ratelimiter/Licence
+++ /dev/null
@@ -1,7 +0,0 @@
-Copyright (C) 2013 99designs
-
-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/hpcloud/tail/ratelimiter/leakybucket.go b/vendor/github.com/hpcloud/tail/ratelimiter/leakybucket.go
deleted file mode 100644
index 358b69e..0000000
--- a/vendor/github.com/hpcloud/tail/ratelimiter/leakybucket.go
+++ /dev/null
@@ -1,97 +0,0 @@
-// Package ratelimiter implements the Leaky Bucket ratelimiting algorithm with memcached and in-memory backends.
-package ratelimiter
-
-import (
- "time"
-)
-
-type LeakyBucket struct {
- Size uint16
- Fill float64
- LeakInterval time.Duration // time.Duration for 1 unit of size to leak
- Lastupdate time.Time
- Now func() time.Time
-}
-
-func NewLeakyBucket(size uint16, leakInterval time.Duration) *LeakyBucket {
- bucket := LeakyBucket{
- Size: size,
- Fill: 0,
- LeakInterval: leakInterval,
- Now: time.Now,
- Lastupdate: time.Now(),
- }
-
- return &bucket
-}
-
-func (b *LeakyBucket) updateFill() {
- now := b.Now()
- if b.Fill > 0 {
- elapsed := now.Sub(b.Lastupdate)
-
- b.Fill -= float64(elapsed) / float64(b.LeakInterval)
- if b.Fill < 0 {
- b.Fill = 0
- }
- }
- b.Lastupdate = now
-}
-
-func (b *LeakyBucket) Pour(amount uint16) bool {
- b.updateFill()
-
- var newfill float64 = b.Fill + float64(amount)
-
- if newfill > float64(b.Size) {
- return false
- }
-
- b.Fill = newfill
-
- return true
-}
-
-// The time at which this bucket will be completely drained
-func (b *LeakyBucket) DrainedAt() time.Time {
- return b.Lastupdate.Add(time.Duration(b.Fill * float64(b.LeakInterval)))
-}
-
-// The duration until this bucket is completely drained
-func (b *LeakyBucket) TimeToDrain() time.Duration {
- return b.DrainedAt().Sub(b.Now())
-}
-
-func (b *LeakyBucket) TimeSinceLastUpdate() time.Duration {
- return b.Now().Sub(b.Lastupdate)
-}
-
-type LeakyBucketSer struct {
- Size uint16
- Fill float64
- LeakInterval time.Duration // time.Duration for 1 unit of size to leak
- Lastupdate time.Time
-}
-
-func (b *LeakyBucket) Serialise() *LeakyBucketSer {
- bucket := LeakyBucketSer{
- Size: b.Size,
- Fill: b.Fill,
- LeakInterval: b.LeakInterval,
- Lastupdate: b.Lastupdate,
- }
-
- return &bucket
-}
-
-func (b *LeakyBucketSer) DeSerialise() *LeakyBucket {
- bucket := LeakyBucket{
- Size: b.Size,
- Fill: b.Fill,
- LeakInterval: b.LeakInterval,
- Lastupdate: b.Lastupdate,
- Now: time.Now,
- }
-
- return &bucket
-}
diff --git a/vendor/github.com/hpcloud/tail/ratelimiter/memory.go b/vendor/github.com/hpcloud/tail/ratelimiter/memory.go
deleted file mode 100644
index 8f6a578..0000000
--- a/vendor/github.com/hpcloud/tail/ratelimiter/memory.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package ratelimiter
-
-import (
- "errors"
- "time"
-)
-
-const GC_SIZE int = 100
-
-type Memory struct {
- store map[string]LeakyBucket
- lastGCCollected time.Time
-}
-
-func NewMemory() *Memory {
- m := new(Memory)
- m.store = make(map[string]LeakyBucket)
- m.lastGCCollected = time.Now()
- return m
-}
-
-func (m *Memory) GetBucketFor(key string) (*LeakyBucket, error) {
-
- bucket, ok := m.store[key]
- if !ok {
- return nil, errors.New("miss")
- }
-
- return &bucket, nil
-}
-
-func (m *Memory) SetBucketFor(key string, bucket LeakyBucket) error {
-
- if len(m.store) > GC_SIZE {
- m.GarbageCollect()
- }
-
- m.store[key] = bucket
-
- return nil
-}
-
-func (m *Memory) GarbageCollect() {
- now := time.Now()
-
- // rate limit GC to once per minute
- if now.Add(60*time.Second).Unix() > m.lastGCCollected.Unix() {
-
- for key, bucket := range m.store {
- // if the bucket is drained, then GC
- if bucket.DrainedAt().Unix() > now.Unix() {
- delete(m.store, key)
- }
- }
-
- m.lastGCCollected = now
- }
-}
diff --git a/vendor/github.com/hpcloud/tail/ratelimiter/storage.go b/vendor/github.com/hpcloud/tail/ratelimiter/storage.go
deleted file mode 100644
index 89b2fe8..0000000
--- a/vendor/github.com/hpcloud/tail/ratelimiter/storage.go
+++ /dev/null
@@ -1,6 +0,0 @@
-package ratelimiter
-
-type Storage interface {
- GetBucketFor(string) (*LeakyBucket, error)
- SetBucketFor(string, LeakyBucket) error
-}
diff --git a/vendor/github.com/hpcloud/tail/tail.go b/vendor/github.com/hpcloud/tail/tail.go
deleted file mode 100644
index 2d252d6..0000000
--- a/vendor/github.com/hpcloud/tail/tail.go
+++ /dev/null
@@ -1,438 +0,0 @@
-// Copyright (c) 2015 HPE Software Inc. All rights reserved.
-// Copyright (c) 2013 ActiveState Software Inc. All rights reserved.
-
-package tail
-
-import (
- "bufio"
- "errors"
- "fmt"
- "io"
- "io/ioutil"
- "log"
- "os"
- "strings"
- "sync"
- "time"
-
- "github.com/hpcloud/tail/ratelimiter"
- "github.com/hpcloud/tail/util"
- "github.com/hpcloud/tail/watch"
- "gopkg.in/tomb.v1"
-)
-
-var (
- ErrStop = fmt.Errorf("tail should now stop")
-)
-
-type Line struct {
- Text string
- Time time.Time
- Err error // Error from tail
-}
-
-// NewLine returns a Line with present time.
-func NewLine(text string) *Line {
- return &Line{text, time.Now(), nil}
-}
-
-// SeekInfo represents arguments to `os.Seek`
-type SeekInfo struct {
- Offset int64
- Whence int // os.SEEK_*
-}
-
-type logger interface {
- Fatal(v ...interface{})
- Fatalf(format string, v ...interface{})
- Fatalln(v ...interface{})
- Panic(v ...interface{})
- Panicf(format string, v ...interface{})
- Panicln(v ...interface{})
- Print(v ...interface{})
- Printf(format string, v ...interface{})
- Println(v ...interface{})
-}
-
-// Config is used to specify how a file must be tailed.
-type Config struct {
- // File-specifc
- Location *SeekInfo // Seek to this location before tailing
- ReOpen bool // Reopen recreated files (tail -F)
- MustExist bool // Fail early if the file does not exist
- Poll bool // Poll for file changes instead of using inotify
- Pipe bool // Is a named pipe (mkfifo)
- RateLimiter *ratelimiter.LeakyBucket
-
- // Generic IO
- Follow bool // Continue looking for new lines (tail -f)
- MaxLineSize int // If non-zero, split longer lines into multiple lines
-
- // Logger, when nil, is set to tail.DefaultLogger
- // To disable logging: set field to tail.DiscardingLogger
- Logger logger
-}
-
-type Tail struct {
- Filename string
- Lines chan *Line
- Config
-
- file *os.File
- reader *bufio.Reader
-
- watcher watch.FileWatcher
- changes *watch.FileChanges
-
- tomb.Tomb // provides: Done, Kill, Dying
-
- lk sync.Mutex
-}
-
-var (
- // DefaultLogger is used when Config.Logger == nil
- DefaultLogger = log.New(os.Stderr, "", log.LstdFlags)
- // DiscardingLogger can be used to disable logging output
- DiscardingLogger = log.New(ioutil.Discard, "", 0)
-)
-
-// TailFile begins tailing the file. Output stream is made available
-// via the `Tail.Lines` channel. To handle errors during tailing,
-// invoke the `Wait` or `Err` method after finishing reading from the
-// `Lines` channel.
-func TailFile(filename string, config Config) (*Tail, error) {
- if config.ReOpen && !config.Follow {
- util.Fatal("cannot set ReOpen without Follow.")
- }
-
- t := &Tail{
- Filename: filename,
- Lines: make(chan *Line),
- Config: config,
- }
-
- // when Logger was not specified in config, use default logger
- if t.Logger == nil {
- t.Logger = log.New(os.Stderr, "", log.LstdFlags)
- }
-
- if t.Poll {
- t.watcher = watch.NewPollingFileWatcher(filename)
- } else {
- t.watcher = watch.NewInotifyFileWatcher(filename)
- }
-
- if t.MustExist {
- var err error
- t.file, err = OpenFile(t.Filename)
- if err != nil {
- return nil, err
- }
- }
-
- go t.tailFileSync()
-
- return t, nil
-}
-
-// Return the file's current position, like stdio's ftell().
-// But this value is not very accurate.
-// it may readed one line in the chan(tail.Lines),
-// so it may lost one line.
-func (tail *Tail) Tell() (offset int64, err error) {
- if tail.file == nil {
- return
- }
- offset, err = tail.file.Seek(0, os.SEEK_CUR)
- if err != nil {
- return
- }
-
- tail.lk.Lock()
- defer tail.lk.Unlock()
- if tail.reader == nil {
- return
- }
-
- offset -= int64(tail.reader.Buffered())
- return
-}
-
-// Stop stops the tailing activity.
-func (tail *Tail) Stop() error {
- tail.Kill(nil)
- return tail.Wait()
-}
-
-// StopAtEOF stops tailing as soon as the end of the file is reached.
-func (tail *Tail) StopAtEOF() error {
- tail.Kill(errStopAtEOF)
- return tail.Wait()
-}
-
-var errStopAtEOF = errors.New("tail: stop at eof")
-
-func (tail *Tail) close() {
- close(tail.Lines)
- tail.closeFile()
-}
-
-func (tail *Tail) closeFile() {
- if tail.file != nil {
- tail.file.Close()
- tail.file = nil
- }
-}
-
-func (tail *Tail) reopen() error {
- tail.closeFile()
- for {
- var err error
- tail.file, err = OpenFile(tail.Filename)
- if err != nil {
- if os.IsNotExist(err) {
- tail.Logger.Printf("Waiting for %s to appear...", tail.Filename)
- if err := tail.watcher.BlockUntilExists(&tail.Tomb); err != nil {
- if err == tomb.ErrDying {
- return err
- }
- return fmt.Errorf("Failed to detect creation of %s: %s", tail.Filename, err)
- }
- continue
- }
- return fmt.Errorf("Unable to open file %s: %s", tail.Filename, err)
- }
- break
- }
- return nil
-}
-
-func (tail *Tail) readLine() (string, error) {
- tail.lk.Lock()
- line, err := tail.reader.ReadString('\n')
- tail.lk.Unlock()
- if err != nil {
- // Note ReadString "returns the data read before the error" in
- // case of an error, including EOF, so we return it as is. The
- // caller is expected to process it if err is EOF.
- return line, err
- }
-
- line = strings.TrimRight(line, "\n")
-
- return line, err
-}
-
-func (tail *Tail) tailFileSync() {
- defer tail.Done()
- defer tail.close()
-
- if !tail.MustExist {
- // deferred first open.
- err := tail.reopen()
- if err != nil {
- if err != tomb.ErrDying {
- tail.Kill(err)
- }
- return
- }
- }
-
- // Seek to requested location on first open of the file.
- if tail.Location != nil {
- _, err := tail.file.Seek(tail.Location.Offset, tail.Location.Whence)
- tail.Logger.Printf("Seeked %s - %+v\n", tail.Filename, tail.Location)
- if err != nil {
- tail.Killf("Seek error on %s: %s", tail.Filename, err)
- return
- }
- }
-
- tail.openReader()
-
- var offset int64 = 0
- var err error
-
- // Read line by line.
- for {
- // do not seek in named pipes
- if !tail.Pipe {
- // grab the position in case we need to back up in the event of a half-line
- offset, err = tail.Tell()
- if err != nil {
- tail.Kill(err)
- return
- }
- }
-
- line, err := tail.readLine()
-
- // Process `line` even if err is EOF.
- if err == nil {
- cooloff := !tail.sendLine(line)
- if cooloff {
- // Wait a second before seeking till the end of
- // file when rate limit is reached.
- msg := fmt.Sprintf(
- "Too much log activity; waiting a second " +
- "before resuming tailing")
- tail.Lines <- &Line{msg, time.Now(), fmt.Errorf(msg)}
- select {
- case <-time.After(time.Second):
- case <-tail.Dying():
- return
- }
- if err := tail.seekEnd(); err != nil {
- tail.Kill(err)
- return
- }
- }
- } else if err == io.EOF {
- if !tail.Follow {
- if line != "" {
- tail.sendLine(line)
- }
- return
- }
-
- if tail.Follow && line != "" {
- // this has the potential to never return the last line if
- // it's not followed by a newline; seems a fair trade here
- err := tail.seekTo(SeekInfo{Offset: offset, Whence: 0})
- if err != nil {
- tail.Kill(err)
- return
- }
- }
-
- // When EOF is reached, wait for more data to become
- // available. Wait strategy is based on the `tail.watcher`
- // implementation (inotify or polling).
- err := tail.waitForChanges()
- if err != nil {
- if err != ErrStop {
- tail.Kill(err)
- }
- return
- }
- } else {
- // non-EOF error
- tail.Killf("Error reading %s: %s", tail.Filename, err)
- return
- }
-
- select {
- case <-tail.Dying():
- if tail.Err() == errStopAtEOF {
- continue
- }
- return
- default:
- }
- }
-}
-
-// waitForChanges waits until the file has been appended, deleted,
-// moved or truncated. When moved or deleted - the file will be
-// reopened if ReOpen is true. Truncated files are always reopened.
-func (tail *Tail) waitForChanges() error {
- if tail.changes == nil {
- pos, err := tail.file.Seek(0, os.SEEK_CUR)
- if err != nil {
- return err
- }
- tail.changes, err = tail.watcher.ChangeEvents(&tail.Tomb, pos)
- if err != nil {
- return err
- }
- }
-
- select {
- case <-tail.changes.Modified:
- return nil
- case <-tail.changes.Deleted:
- tail.changes = nil
- if tail.ReOpen {
- // XXX: we must not log from a library.
- tail.Logger.Printf("Re-opening moved/deleted file %s ...", tail.Filename)
- if err := tail.reopen(); err != nil {
- return err
- }
- tail.Logger.Printf("Successfully reopened %s", tail.Filename)
- tail.openReader()
- return nil
- } else {
- tail.Logger.Printf("Stopping tail as file no longer exists: %s", tail.Filename)
- return ErrStop
- }
- case <-tail.changes.Truncated:
- // Always reopen truncated files (Follow is true)
- tail.Logger.Printf("Re-opening truncated file %s ...", tail.Filename)
- if err := tail.reopen(); err != nil {
- return err
- }
- tail.Logger.Printf("Successfully reopened truncated %s", tail.Filename)
- tail.openReader()
- return nil
- case <-tail.Dying():
- return ErrStop
- }
- panic("unreachable")
-}
-
-func (tail *Tail) openReader() {
- if tail.MaxLineSize > 0 {
- // add 2 to account for newline characters
- tail.reader = bufio.NewReaderSize(tail.file, tail.MaxLineSize+2)
- } else {
- tail.reader = bufio.NewReader(tail.file)
- }
-}
-
-func (tail *Tail) seekEnd() error {
- return tail.seekTo(SeekInfo{Offset: 0, Whence: os.SEEK_END})
-}
-
-func (tail *Tail) seekTo(pos SeekInfo) error {
- _, err := tail.file.Seek(pos.Offset, pos.Whence)
- if err != nil {
- return fmt.Errorf("Seek error on %s: %s", tail.Filename, err)
- }
- // Reset the read buffer whenever the file is re-seek'ed
- tail.reader.Reset(tail.file)
- return nil
-}
-
-// sendLine sends the line(s) to Lines channel, splitting longer lines
-// if necessary. Return false if rate limit is reached.
-func (tail *Tail) sendLine(line string) bool {
- now := time.Now()
- lines := []string{line}
-
- // Split longer lines
- if tail.MaxLineSize > 0 && len(line) > tail.MaxLineSize {
- lines = util.PartitionString(line, tail.MaxLineSize)
- }
-
- for _, line := range lines {
- tail.Lines <- &Line{line, now, nil}
- }
-
- if tail.Config.RateLimiter != nil {
- ok := tail.Config.RateLimiter.Pour(uint16(len(lines)))
- if !ok {
- tail.Logger.Printf("Leaky bucket full (%v); entering 1s cooloff period.\n",
- tail.Filename)
- return false
- }
- }
-
- return true
-}
-
-// Cleanup removes inotify watches added by the tail package. This function is
-// meant to be invoked from a process's exit handler. Linux kernel may not
-// automatically remove inotify watches after the process exits.
-func (tail *Tail) Cleanup() {
- watch.Cleanup(tail.Filename)
-}
diff --git a/vendor/github.com/hpcloud/tail/tail_posix.go b/vendor/github.com/hpcloud/tail/tail_posix.go
deleted file mode 100644
index bc4dc33..0000000
--- a/vendor/github.com/hpcloud/tail/tail_posix.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build linux darwin freebsd netbsd openbsd
-
-package tail
-
-import (
- "os"
-)
-
-func OpenFile(name string) (file *os.File, err error) {
- return os.Open(name)
-}
diff --git a/vendor/github.com/hpcloud/tail/tail_windows.go b/vendor/github.com/hpcloud/tail/tail_windows.go
deleted file mode 100644
index ef2cfca..0000000
--- a/vendor/github.com/hpcloud/tail/tail_windows.go
+++ /dev/null
@@ -1,12 +0,0 @@
-// +build windows
-
-package tail
-
-import (
- "github.com/hpcloud/tail/winfile"
- "os"
-)
-
-func OpenFile(name string) (file *os.File, err error) {
- return winfile.OpenFile(name, os.O_RDONLY, 0)
-}
diff --git a/vendor/github.com/hpcloud/tail/util/util.go b/vendor/github.com/hpcloud/tail/util/util.go
deleted file mode 100644
index 54151fe..0000000
--- a/vendor/github.com/hpcloud/tail/util/util.go
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2015 HPE Software Inc. All rights reserved.
-// Copyright (c) 2013 ActiveState Software Inc. All rights reserved.
-
-package util
-
-import (
- "fmt"
- "log"
- "os"
- "runtime/debug"
-)
-
-type Logger struct {
- *log.Logger
-}
-
-var LOGGER = &Logger{log.New(os.Stderr, "", log.LstdFlags)}
-
-// fatal is like panic except it displays only the current goroutine's stack.
-func Fatal(format string, v ...interface{}) {
- // https://github.com/hpcloud/log/blob/master/log.go#L45
- LOGGER.Output(2, fmt.Sprintf("FATAL -- "+format, v...)+"\n"+string(debug.Stack()))
- os.Exit(1)
-}
-
-// partitionString partitions the string into chunks of given size,
-// with the last chunk of variable size.
-func PartitionString(s string, chunkSize int) []string {
- if chunkSize <= 0 {
- panic("invalid chunkSize")
- }
- length := len(s)
- chunks := 1 + length/chunkSize
- start := 0
- end := chunkSize
- parts := make([]string, 0, chunks)
- for {
- if end > length {
- end = length
- }
- parts = append(parts, s[start:end])
- if end == length {
- break
- }
- start, end = end, end+chunkSize
- }
- return parts
-}
diff --git a/vendor/github.com/hpcloud/tail/watch/filechanges.go b/vendor/github.com/hpcloud/tail/watch/filechanges.go
deleted file mode 100644
index 3ce5dce..0000000
--- a/vendor/github.com/hpcloud/tail/watch/filechanges.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package watch
-
-type FileChanges struct {
- Modified chan bool // Channel to get notified of modifications
- Truncated chan bool // Channel to get notified of truncations
- Deleted chan bool // Channel to get notified of deletions/renames
-}
-
-func NewFileChanges() *FileChanges {
- return &FileChanges{
- make(chan bool), make(chan bool), make(chan bool)}
-}
-
-func (fc *FileChanges) NotifyModified() {
- sendOnlyIfEmpty(fc.Modified)
-}
-
-func (fc *FileChanges) NotifyTruncated() {
- sendOnlyIfEmpty(fc.Truncated)
-}
-
-func (fc *FileChanges) NotifyDeleted() {
- sendOnlyIfEmpty(fc.Deleted)
-}
-
-// sendOnlyIfEmpty sends on a bool channel only if the channel has no
-// backlog to be read by other goroutines. This concurrency pattern
-// can be used to notify other goroutines if and only if they are
-// looking for it (i.e., subsequent notifications can be compressed
-// into one).
-func sendOnlyIfEmpty(ch chan bool) {
- select {
- case ch <- true:
- default:
- }
-}
diff --git a/vendor/github.com/hpcloud/tail/watch/inotify.go b/vendor/github.com/hpcloud/tail/watch/inotify.go
deleted file mode 100644
index 4478f1e..0000000
--- a/vendor/github.com/hpcloud/tail/watch/inotify.go
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright (c) 2015 HPE Software Inc. All rights reserved.
-// Copyright (c) 2013 ActiveState Software Inc. All rights reserved.
-
-package watch
-
-import (
- "fmt"
- "os"
- "path/filepath"
-
- "github.com/hpcloud/tail/util"
-
- "gopkg.in/fsnotify.v1"
- "gopkg.in/tomb.v1"
-)
-
-// InotifyFileWatcher uses inotify to monitor file changes.
-type InotifyFileWatcher struct {
- Filename string
- Size int64
-}
-
-func NewInotifyFileWatcher(filename string) *InotifyFileWatcher {
- fw := &InotifyFileWatcher{filepath.Clean(filename), 0}
- return fw
-}
-
-func (fw *InotifyFileWatcher) BlockUntilExists(t *tomb.Tomb) error {
- err := WatchCreate(fw.Filename)
- if err != nil {
- return err
- }
- defer RemoveWatchCreate(fw.Filename)
-
- // Do a real check now as the file might have been created before
- // calling `WatchFlags` above.
- if _, err = os.Stat(fw.Filename); !os.IsNotExist(err) {
- // file exists, or stat returned an error.
- return err
- }
-
- events := Events(fw.Filename)
-
- for {
- select {
- case evt, ok := <-events:
- if !ok {
- return fmt.Errorf("inotify watcher has been closed")
- }
- evtName, err := filepath.Abs(evt.Name)
- if err != nil {
- return err
- }
- fwFilename, err := filepath.Abs(fw.Filename)
- if err != nil {
- return err
- }
- if evtName == fwFilename {
- return nil
- }
- case <-t.Dying():
- return tomb.ErrDying
- }
- }
- panic("unreachable")
-}
-
-func (fw *InotifyFileWatcher) ChangeEvents(t *tomb.Tomb, pos int64) (*FileChanges, error) {
- err := Watch(fw.Filename)
- if err != nil {
- return nil, err
- }
-
- changes := NewFileChanges()
- fw.Size = pos
-
- go func() {
- defer RemoveWatch(fw.Filename)
-
- events := Events(fw.Filename)
-
- for {
- prevSize := fw.Size
-
- var evt fsnotify.Event
- var ok bool
-
- select {
- case evt, ok = <-events:
- if !ok {
- return
- }
- case <-t.Dying():
- return
- }
-
- switch {
- case evt.Op&fsnotify.Remove == fsnotify.Remove:
- fallthrough
-
- case evt.Op&fsnotify.Rename == fsnotify.Rename:
- changes.NotifyDeleted()
- return
-
- case evt.Op&fsnotify.Write == fsnotify.Write:
- fi, err := os.Stat(fw.Filename)
- if err != nil {
- if os.IsNotExist(err) {
- changes.NotifyDeleted()
- return
- }
- // XXX: report this error back to the user
- util.Fatal("Failed to stat file %v: %v", fw.Filename, err)
- }
- fw.Size = fi.Size()
-
- if prevSize > 0 && prevSize > fw.Size {
- changes.NotifyTruncated()
- } else {
- changes.NotifyModified()
- }
- prevSize = fw.Size
- }
- }
- }()
-
- return changes, nil
-}
diff --git a/vendor/github.com/hpcloud/tail/watch/inotify_tracker.go b/vendor/github.com/hpcloud/tail/watch/inotify_tracker.go
deleted file mode 100644
index 03be427..0000000
--- a/vendor/github.com/hpcloud/tail/watch/inotify_tracker.go
+++ /dev/null
@@ -1,260 +0,0 @@
-// Copyright (c) 2015 HPE Software Inc. All rights reserved.
-// Copyright (c) 2013 ActiveState Software Inc. All rights reserved.
-
-package watch
-
-import (
- "log"
- "os"
- "path/filepath"
- "sync"
- "syscall"
-
- "github.com/hpcloud/tail/util"
-
- "gopkg.in/fsnotify.v1"
-)
-
-type InotifyTracker struct {
- mux sync.Mutex
- watcher *fsnotify.Watcher
- chans map[string]chan fsnotify.Event
- done map[string]chan bool
- watchNums map[string]int
- watch chan *watchInfo
- remove chan *watchInfo
- error chan error
-}
-
-type watchInfo struct {
- op fsnotify.Op
- fname string
-}
-
-func (this *watchInfo) isCreate() bool {
- return this.op == fsnotify.Create
-}
-
-var (
- // globally shared InotifyTracker; ensures only one fsnotify.Watcher is used
- shared *InotifyTracker
-
- // these are used to ensure the shared InotifyTracker is run exactly once
- once = sync.Once{}
- goRun = func() {
- shared = &InotifyTracker{
- mux: sync.Mutex{},
- chans: make(map[string]chan fsnotify.Event),
- done: make(map[string]chan bool),
- watchNums: make(map[string]int),
- watch: make(chan *watchInfo),
- remove: make(chan *watchInfo),
- error: make(chan error),
- }
- go shared.run()
- }
-
- logger = log.New(os.Stderr, "", log.LstdFlags)
-)
-
-// Watch signals the run goroutine to begin watching the input filename
-func Watch(fname string) error {
- return watch(&watchInfo{
- fname: fname,
- })
-}
-
-// Watch create signals the run goroutine to begin watching the input filename
-// if call the WatchCreate function, don't call the Cleanup, call the RemoveWatchCreate
-func WatchCreate(fname string) error {
- return watch(&watchInfo{
- op: fsnotify.Create,
- fname: fname,
- })
-}
-
-func watch(winfo *watchInfo) error {
- // start running the shared InotifyTracker if not already running
- once.Do(goRun)
-
- winfo.fname = filepath.Clean(winfo.fname)
- shared.watch <- winfo
- return <-shared.error
-}
-
-// RemoveWatch signals the run goroutine to remove the watch for the input filename
-func RemoveWatch(fname string) {
- remove(&watchInfo{
- fname: fname,
- })
-}
-
-// RemoveWatch create signals the run goroutine to remove the watch for the input filename
-func RemoveWatchCreate(fname string) {
- remove(&watchInfo{
- op: fsnotify.Create,
- fname: fname,
- })
-}
-
-func remove(winfo *watchInfo) {
- // start running the shared InotifyTracker if not already running
- once.Do(goRun)
-
- winfo.fname = filepath.Clean(winfo.fname)
- shared.mux.Lock()
- done := shared.done[winfo.fname]
- if done != nil {
- delete(shared.done, winfo.fname)
- close(done)
- }
-
- fname := winfo.fname
- if winfo.isCreate() {
- // Watch for new files to be created in the parent directory.
- fname = filepath.Dir(fname)
- }
- shared.watchNums[fname]--
- watchNum := shared.watchNums[fname]
- if watchNum == 0 {
- delete(shared.watchNums, fname)
- }
- shared.mux.Unlock()
-
- // If we were the last ones to watch this file, unsubscribe from inotify.
- // This needs to happen after releasing the lock because fsnotify waits
- // synchronously for the kernel to acknowledge the removal of the watch
- // for this file, which causes us to deadlock if we still held the lock.
- if watchNum == 0 {
- shared.watcher.Remove(fname)
- }
- shared.remove <- winfo
-}
-
-// Events returns a channel to which FileEvents corresponding to the input filename
-// will be sent. This channel will be closed when removeWatch is called on this
-// filename.
-func Events(fname string) <-chan fsnotify.Event {
- shared.mux.Lock()
- defer shared.mux.Unlock()
-
- return shared.chans[fname]
-}
-
-// Cleanup removes the watch for the input filename if necessary.
-func Cleanup(fname string) {
- RemoveWatch(fname)
-}
-
-// watchFlags calls fsnotify.WatchFlags for the input filename and flags, creating
-// a new Watcher if the previous Watcher was closed.
-func (shared *InotifyTracker) addWatch(winfo *watchInfo) error {
- shared.mux.Lock()
- defer shared.mux.Unlock()
-
- if shared.chans[winfo.fname] == nil {
- shared.chans[winfo.fname] = make(chan fsnotify.Event)
- shared.done[winfo.fname] = make(chan bool)
- }
-
- fname := winfo.fname
- if winfo.isCreate() {
- // Watch for new files to be created in the parent directory.
- fname = filepath.Dir(fname)
- }
-
- // already in inotify watch
- if shared.watchNums[fname] > 0 {
- shared.watchNums[fname]++
- if winfo.isCreate() {
- shared.watchNums[winfo.fname]++
- }
- return nil
- }
-
- err := shared.watcher.Add(fname)
- if err == nil {
- shared.watchNums[fname]++
- if winfo.isCreate() {
- shared.watchNums[winfo.fname]++
- }
- }
- return err
-}
-
-// removeWatch calls fsnotify.RemoveWatch for the input filename and closes the
-// corresponding events channel.
-func (shared *InotifyTracker) removeWatch(winfo *watchInfo) {
- shared.mux.Lock()
- defer shared.mux.Unlock()
-
- ch := shared.chans[winfo.fname]
- if ch == nil {
- return
- }
-
- delete(shared.chans, winfo.fname)
- close(ch)
-
- if !winfo.isCreate() {
- return
- }
-
- shared.watchNums[winfo.fname]--
- if shared.watchNums[winfo.fname] == 0 {
- delete(shared.watchNums, winfo.fname)
- }
-}
-
-// sendEvent sends the input event to the appropriate Tail.
-func (shared *InotifyTracker) sendEvent(event fsnotify.Event) {
- name := filepath.Clean(event.Name)
-
- shared.mux.Lock()
- ch := shared.chans[name]
- done := shared.done[name]
- shared.mux.Unlock()
-
- if ch != nil && done != nil {
- select {
- case ch <- event:
- case <-done:
- }
- }
-}
-
-// run starts the goroutine in which the shared struct reads events from its
-// Watcher's Event channel and sends the events to the appropriate Tail.
-func (shared *InotifyTracker) run() {
- watcher, err := fsnotify.NewWatcher()
- if err != nil {
- util.Fatal("failed to create Watcher")
- }
- shared.watcher = watcher
-
- for {
- select {
- case winfo := <-shared.watch:
- shared.error <- shared.addWatch(winfo)
-
- case winfo := <-shared.remove:
- shared.removeWatch(winfo)
-
- case event, open := <-shared.watcher.Events:
- if !open {
- return
- }
- shared.sendEvent(event)
-
- case err, open := <-shared.watcher.Errors:
- if !open {
- return
- } else if err != nil {
- sysErr, ok := err.(*os.SyscallError)
- if !ok || sysErr.Err != syscall.EINTR {
- logger.Printf("Error in Watcher Error channel: %s", err)
- }
- }
- }
- }
-}
diff --git a/vendor/github.com/hpcloud/tail/watch/polling.go b/vendor/github.com/hpcloud/tail/watch/polling.go
deleted file mode 100644
index 49491f2..0000000
--- a/vendor/github.com/hpcloud/tail/watch/polling.go
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright (c) 2015 HPE Software Inc. All rights reserved.
-// Copyright (c) 2013 ActiveState Software Inc. All rights reserved.
-
-package watch
-
-import (
- "os"
- "runtime"
- "time"
-
- "github.com/hpcloud/tail/util"
- "gopkg.in/tomb.v1"
-)
-
-// PollingFileWatcher polls the file for changes.
-type PollingFileWatcher struct {
- Filename string
- Size int64
-}
-
-func NewPollingFileWatcher(filename string) *PollingFileWatcher {
- fw := &PollingFileWatcher{filename, 0}
- return fw
-}
-
-var POLL_DURATION time.Duration
-
-func (fw *PollingFileWatcher) BlockUntilExists(t *tomb.Tomb) error {
- for {
- if _, err := os.Stat(fw.Filename); err == nil {
- return nil
- } else if !os.IsNotExist(err) {
- return err
- }
- select {
- case <-time.After(POLL_DURATION):
- continue
- case <-t.Dying():
- return tomb.ErrDying
- }
- }
- panic("unreachable")
-}
-
-func (fw *PollingFileWatcher) ChangeEvents(t *tomb.Tomb, pos int64) (*FileChanges, error) {
- origFi, err := os.Stat(fw.Filename)
- if err != nil {
- return nil, err
- }
-
- changes := NewFileChanges()
- var prevModTime time.Time
-
- // XXX: use tomb.Tomb to cleanly manage these goroutines. replace
- // the fatal (below) with tomb's Kill.
-
- fw.Size = pos
-
- go func() {
- prevSize := fw.Size
- for {
- select {
- case <-t.Dying():
- return
- default:
- }
-
- time.Sleep(POLL_DURATION)
- fi, err := os.Stat(fw.Filename)
- if err != nil {
- // Windows cannot delete a file if a handle is still open (tail keeps one open)
- // so it gives access denied to anything trying to read it until all handles are released.
- if os.IsNotExist(err) || (runtime.GOOS == "windows" && os.IsPermission(err)) {
- // File does not exist (has been deleted).
- changes.NotifyDeleted()
- return
- }
-
- // XXX: report this error back to the user
- util.Fatal("Failed to stat file %v: %v", fw.Filename, err)
- }
-
- // File got moved/renamed?
- if !os.SameFile(origFi, fi) {
- changes.NotifyDeleted()
- return
- }
-
- // File got truncated?
- fw.Size = fi.Size()
- if prevSize > 0 && prevSize > fw.Size {
- changes.NotifyTruncated()
- prevSize = fw.Size
- continue
- }
- // File got bigger?
- if prevSize > 0 && prevSize < fw.Size {
- changes.NotifyModified()
- prevSize = fw.Size
- continue
- }
- prevSize = fw.Size
-
- // File was appended to (changed)?
- modTime := fi.ModTime()
- if modTime != prevModTime {
- prevModTime = modTime
- changes.NotifyModified()
- }
- }
- }()
-
- return changes, nil
-}
-
-func init() {
- POLL_DURATION = 250 * time.Millisecond
-}
diff --git a/vendor/github.com/hpcloud/tail/watch/watch.go b/vendor/github.com/hpcloud/tail/watch/watch.go
deleted file mode 100644
index 2e1783e..0000000
--- a/vendor/github.com/hpcloud/tail/watch/watch.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) 2015 HPE Software Inc. All rights reserved.
-// Copyright (c) 2013 ActiveState Software Inc. All rights reserved.
-
-package watch
-
-import "gopkg.in/tomb.v1"
-
-// FileWatcher monitors file-level events.
-type FileWatcher interface {
- // BlockUntilExists blocks until the file comes into existence.
- BlockUntilExists(*tomb.Tomb) error
-
- // ChangeEvents reports on changes to a file, be it modification,
- // deletion, renames or truncations. Returned FileChanges group of
- // channels will be closed, thus become unusable, after a deletion
- // or truncation event.
- // In order to properly report truncations, ChangeEvents requires
- // the caller to pass their current offset in the file.
- ChangeEvents(*tomb.Tomb, int64) (*FileChanges, error)
-}
diff --git a/vendor/github.com/hpcloud/tail/winfile/winfile.go b/vendor/github.com/hpcloud/tail/winfile/winfile.go
deleted file mode 100644
index aa7e7bc..0000000
--- a/vendor/github.com/hpcloud/tail/winfile/winfile.go
+++ /dev/null
@@ -1,92 +0,0 @@
-// +build windows
-
-package winfile
-
-import (
- "os"
- "syscall"
- "unsafe"
-)
-
-// issue also described here
-//https://codereview.appspot.com/8203043/
-
-// https://github.com/jnwhiteh/golang/blob/master/src/pkg/syscall/syscall_windows.go#L218
-func Open(path string, mode int, perm uint32) (fd syscall.Handle, err error) {
- if len(path) == 0 {
- return syscall.InvalidHandle, syscall.ERROR_FILE_NOT_FOUND
- }
- pathp, err := syscall.UTF16PtrFromString(path)
- if err != nil {
- return syscall.InvalidHandle, err
- }
- var access uint32
- switch mode & (syscall.O_RDONLY | syscall.O_WRONLY | syscall.O_RDWR) {
- case syscall.O_RDONLY:
- access = syscall.GENERIC_READ
- case syscall.O_WRONLY:
- access = syscall.GENERIC_WRITE
- case syscall.O_RDWR:
- access = syscall.GENERIC_READ | syscall.GENERIC_WRITE
- }
- if mode&syscall.O_CREAT != 0 {
- access |= syscall.GENERIC_WRITE
- }
- if mode&syscall.O_APPEND != 0 {
- access &^= syscall.GENERIC_WRITE
- access |= syscall.FILE_APPEND_DATA
- }
- sharemode := uint32(syscall.FILE_SHARE_READ | syscall.FILE_SHARE_WRITE | syscall.FILE_SHARE_DELETE)
- var sa *syscall.SecurityAttributes
- if mode&syscall.O_CLOEXEC == 0 {
- sa = makeInheritSa()
- }
- var createmode uint32
- switch {
- case mode&(syscall.O_CREAT|syscall.O_EXCL) == (syscall.O_CREAT | syscall.O_EXCL):
- createmode = syscall.CREATE_NEW
- case mode&(syscall.O_CREAT|syscall.O_TRUNC) == (syscall.O_CREAT | syscall.O_TRUNC):
- createmode = syscall.CREATE_ALWAYS
- case mode&syscall.O_CREAT == syscall.O_CREAT:
- createmode = syscall.OPEN_ALWAYS
- case mode&syscall.O_TRUNC == syscall.O_TRUNC:
- createmode = syscall.TRUNCATE_EXISTING
- default:
- createmode = syscall.OPEN_EXISTING
- }
- h, e := syscall.CreateFile(pathp, access, sharemode, sa, createmode, syscall.FILE_ATTRIBUTE_NORMAL, 0)
- return h, e
-}
-
-// https://github.com/jnwhiteh/golang/blob/master/src/pkg/syscall/syscall_windows.go#L211
-func makeInheritSa() *syscall.SecurityAttributes {
- var sa syscall.SecurityAttributes
- sa.Length = uint32(unsafe.Sizeof(sa))
- sa.InheritHandle = 1
- return &sa
-}
-
-// https://github.com/jnwhiteh/golang/blob/master/src/pkg/os/file_windows.go#L133
-func OpenFile(name string, flag int, perm os.FileMode) (file *os.File, err error) {
- r, e := Open(name, flag|syscall.O_CLOEXEC, syscallMode(perm))
- if e != nil {
- return nil, e
- }
- return os.NewFile(uintptr(r), name), nil
-}
-
-// https://github.com/jnwhiteh/golang/blob/master/src/pkg/os/file_posix.go#L61
-func syscallMode(i os.FileMode) (o uint32) {
- o |= uint32(i.Perm())
- if i&os.ModeSetuid != 0 {
- o |= syscall.S_ISUID
- }
- if i&os.ModeSetgid != 0 {
- o |= syscall.S_ISGID
- }
- if i&os.ModeSticky != 0 {
- o |= syscall.S_ISVTX
- }
- // No mapping for Go's ModeTemporary (plan9 only).
- return
-}
diff --git a/vendor/github.com/konsorten/go-windows-terminal-sequences/LICENSE b/vendor/github.com/konsorten/go-windows-terminal-sequences/LICENSE
deleted file mode 100644
index 14127cd..0000000
--- a/vendor/github.com/konsorten/go-windows-terminal-sequences/LICENSE
+++ /dev/null
@@ -1,9 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2017 marvin + konsorten GmbH (open-source@konsorten.de)
-
-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/konsorten/go-windows-terminal-sequences/README.md b/vendor/github.com/konsorten/go-windows-terminal-sequences/README.md
deleted file mode 100644
index 949b77e..0000000
--- a/vendor/github.com/konsorten/go-windows-terminal-sequences/README.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# Windows Terminal Sequences
-
-This library allow for enabling Windows terminal color support for Go.
-
-See [Console Virtual Terminal Sequences](https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences) for details.
-
-## Usage
-
-```go
-import (
- "syscall"
-
- sequences "github.com/konsorten/go-windows-terminal-sequences"
-)
-
-func main() {
- sequences.EnableVirtualTerminalProcessing(syscall.Stdout, true)
-}
-
-```
-
-## Authors
-
-The tool is sponsored by the [marvin + konsorten GmbH](http://www.konsorten.de).
-
-We thank all the authors who provided code to this library:
-
-* Felix Kollmann
-
-## License
-
-(The MIT License)
-
-Copyright (c) 2018 marvin + konsorten GmbH (open-source@konsorten.de)
-
-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/konsorten/go-windows-terminal-sequences/go.mod b/vendor/github.com/konsorten/go-windows-terminal-sequences/go.mod
deleted file mode 100644
index 716c613..0000000
--- a/vendor/github.com/konsorten/go-windows-terminal-sequences/go.mod
+++ /dev/null
@@ -1 +0,0 @@
-module github.com/konsorten/go-windows-terminal-sequences
diff --git a/vendor/github.com/konsorten/go-windows-terminal-sequences/sequences.go b/vendor/github.com/konsorten/go-windows-terminal-sequences/sequences.go
deleted file mode 100644
index ef18d8f..0000000
--- a/vendor/github.com/konsorten/go-windows-terminal-sequences/sequences.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// +build windows
-
-package sequences
-
-import (
- "syscall"
- "unsafe"
-)
-
-var (
- kernel32Dll *syscall.LazyDLL = syscall.NewLazyDLL("Kernel32.dll")
- setConsoleMode *syscall.LazyProc = kernel32Dll.NewProc("SetConsoleMode")
-)
-
-func EnableVirtualTerminalProcessing(stream syscall.Handle, enable bool) error {
- const ENABLE_VIRTUAL_TERMINAL_PROCESSING uint32 = 0x4
-
- var mode uint32
- err := syscall.GetConsoleMode(syscall.Stdout, &mode)
- if err != nil {
- return err
- }
-
- if enable {
- mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING
- } else {
- mode &^= ENABLE_VIRTUAL_TERMINAL_PROCESSING
- }
-
- ret, _, err := setConsoleMode.Call(uintptr(unsafe.Pointer(stream)), uintptr(mode))
- if ret == 0 {
- return err
- }
-
- return nil
-}
diff --git a/vendor/github.com/onsi/ginkgo/.gitignore b/vendor/github.com/onsi/ginkgo/.gitignore
deleted file mode 100644
index b9f9659..0000000
--- a/vendor/github.com/onsi/ginkgo/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-.DS_Store
-TODO
-tmp/**/*
-*.coverprofile
-.vscode
-.idea/
-*.log
diff --git a/vendor/github.com/onsi/ginkgo/.travis.yml b/vendor/github.com/onsi/ginkgo/.travis.yml
deleted file mode 100644
index 72e8ccf..0000000
--- a/vendor/github.com/onsi/ginkgo/.travis.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-language: go
-go:
- - 1.10.x
- - 1.11.x
- - 1.12.x
- - tip
-
-install:
- - go get -v -t ./...
- - go get golang.org/x/tools/cmd/cover
- - go get github.com/onsi/gomega
- - go install github.com/onsi/ginkgo/ginkgo
- - export PATH=$PATH:$HOME/gopath/bin
-
-script: $HOME/gopath/bin/ginkgo -r --randomizeAllSpecs --randomizeSuites --race --trace && go vet
diff --git a/vendor/github.com/onsi/ginkgo/CHANGELOG.md b/vendor/github.com/onsi/ginkgo/CHANGELOG.md
deleted file mode 100644
index aeadb66..0000000
--- a/vendor/github.com/onsi/ginkgo/CHANGELOG.md
+++ /dev/null
@@ -1,244 +0,0 @@
-## 1.10.1
-
-## Fixes
-- stack backtrace: fix skipping (#600) [2a4c0bd]
-
-## 1.10.0
-
-## Fixes
-- stack backtrace: fix alignment and skipping [66915d6]
-- fix typo in documentation [8f97b93]
-
-## 1.9.0
-
-## Features
-- Option to print output into report, when tests have passed [0545415]
-
-## Fixes
-- Fixed typos in comments [0ecbc58]
-- gofmt code [a7f8bfb]
-- Simplify code [7454d00]
-- Simplify concatenation, incrementation and function assignment [4825557]
-- Avoid unnecessary conversions [9d9403c]
-- JUnit: include more detailed information about panic [19cca4b]
-- Print help to stdout when the user asks for help [4cb7441]
-
-
-## 1.8.0
-
-### New Features
-- allow config of the vet flag for `go test` (#562) [3cd45fa]
-- Support projects using go modules [d56ee76]
-
-### Fixes and Minor Improvements
-- chore(godoc): fixes typos in Measurement funcs [dbaca8e]
-- Optimize focus to avoid allocations [f493786]
-- Ensure generated test file names are underscored [505cc35]
-
-## 1.7.0
-
-### New Features
-- Add JustAfterEach (#484) [0d4f080]
-
-### Fixes
-- Correctly round suite time in junit reporter [2445fc1]
-- Avoid using -i argument to go test for Golang 1.10+ [46bbc26]
-
-## 1.6.0
-
-### New Features
-- add --debug flag to emit node output to files (#499) [39febac]
-
-### Fixes
-- fix: for `go vet` to pass [69338ec]
-- docs: fix for contributing instructions [7004cb1]
-- consolidate and streamline contribution docs (#494) [d848015]
-- Make generated Junit file compatable with "Maven Surefire" (#488) [e51bee6]
-- all: gofmt [000d317]
-- Increase eventually timeout to 30s [c73579c]
-- Clarify asynchronous test behaviour [294d8f4]
-- Travis badge should only show master [26d2143]
-
-## 1.5.0 5/10/2018
-
-### New Features
-- Supports go v1.10 (#443, #446, #451) [e873237, 468e89e, e37dbfe, a37f4c0, c0b857d, bca5260, 4177ca8]
-- Add a When() synonym for Context() (#386) [747514b, 7484dad, 7354a07, dd826c8]
-- Re-add noisySkippings flag [652e15c]
-- Allow coverage to be displayed for focused specs (#367) [11459a8]
-- Handle -outputdir flag (#364) [228e3a8]
-- Handle -coverprofile flag (#355) [43392d5]
-
-### Fixes
-- When using custom reporters register the custom reporters *before* the default reporter. This allows users to see the output of any print statements in their customer reporters. (#365) [8382b23]
-- When running a test and calculating the coverage using the `-coverprofile` and `-outputdir` flags, Ginkgo fails with an error if the directory does not exist. This is due to an [issue in go 1.10](https://github.com/golang/go/issues/24588) (#446) [b36a6e0]
-- `unfocus` command ignores vendor folder (#459) [e5e551c, c556e43, a3b6351, 9a820dd]
-- Ignore packages whose tests are all ignored by go (#456) [7430ca7, 6d8be98]
-- Increase the threshold when checking time measuments (#455) [2f714bf, 68f622c]
-- Fix race condition in coverage tests (#423) [a5a8ff7, ab9c08b]
-- Add an extra new line after reporting spec run completion for test2json [874520d]
-- added name name field to junit reported testsuite [ae61c63]
-- Do not set the run time of a spec when the dryRun flag is used (#438) [457e2d9, ba8e856]
-- Process FWhen and FSpecify when unfocusing (#434) [9008c7b, ee65bd, df87dfe]
-- Synchronise the access to the state of specs to avoid race conditions (#430) [7d481bc, ae6829d]
-- Added Duration on GinkgoTestDescription (#383) [5f49dad, 528417e, 0747408, 329d7ed]
-- Fix Ginkgo stack trace on failure for Specify (#415) [b977ede, 65ca40e, 6c46eb8]
-- Update README with Go 1.6+, Golang -> Go (#409) [17f6b97, bc14b66, 20d1598]
-- Use fmt.Errorf instead of errors.New(fmt.Sprintf (#401) [a299f56, 44e2eaa]
-- Imports in generated code should follow conventions (#398) [0bec0b0, e8536d8]
-- Prevent data race error when Recording a benchmark value from multiple go routines (#390) [c0c4881, 7a241e9]
-- Replace GOPATH in Environment [4b883f0]
-
-
-## 1.4.0 7/16/2017
-
-- `ginkgo` now provides a hint if you accidentally forget to run `ginkgo bootstrap` to generate a `*_suite_test.go` file that actually invokes the Ginkgo test runner. [#345](https://github.com/onsi/ginkgo/pull/345)
-- thanks to improvements in `go test -c` `ginkgo` no longer needs to fix Go's compilation output to ensure compilation errors are expressed relative to the CWD. [#357]
-- `ginkgo watch -watchRegExp=...` allows you to specify a custom regular expression to watch. Only files matching the regular expression are watched for changes (the default is `\.go$`) [#356]
-- `ginkgo` now always emits compilation output. Previously, only failed compilation output was printed out. [#277]
-- `ginkgo -requireSuite` now fails the test run if there are `*_test.go` files but `go test` fails to detect any tests. Typically this means you forgot to run `ginkgo bootstrap` to generate a suite file. [#344]
-- `ginkgo -timeout=DURATION` allows you to adjust the timeout for the entire test suite (default is 24 hours) [#248]
-
-## 1.3.0 3/28/2017
-
-Improvements:
-
-- Significantly improved parallel test distribution. Now instead of pre-sharding test cases across workers (which can result in idle workers and poor test performance) Ginkgo uses a shared queue to keep all workers busy until all tests are complete. This improves test-time performance and consistency.
-- `Skip(message)` can be used to skip the current test.
-- Added `extensions/table` - a Ginkgo DSL for [Table Driven Tests](http://onsi.github.io/ginkgo/#table-driven-tests)
-- Add `GinkgoRandomSeed()` - shorthand for `config.GinkgoConfig.RandomSeed`
-- Support for retrying flaky tests with `--flakeAttempts`
-- `ginkgo ./...` now recurses as you'd expect
-- Added `Specify` a synonym for `It`
-- Support colorise on Windows
-- Broader support for various go compilation flags in the `ginkgo` CLI
-
-Bug Fixes:
-
-- Ginkgo tests now fail when you `panic(nil)` (#167)
-
-## 1.2.0 5/31/2015
-
-Improvements
-
-- `ginkgo -coverpkg` calls down to `go test -coverpkg` (#160)
-- `ginkgo -afterSuiteHook COMMAND` invokes the passed-in `COMMAND` after a test suite completes (#152)
-- Relaxed requirement for Go 1.4+. `ginkgo` now works with Go v1.3+ (#166)
-
-## 1.2.0-beta
-
-Ginkgo now requires Go 1.4+
-
-Improvements:
-
-- Call reporters in reverse order when announcing spec completion -- allows custom reporters to emit output before the default reporter does.
-- Improved focus behavior. Now, this:
-
- ```golang
- FDescribe("Some describe", func() {
- It("A", func() {})
-
- FIt("B", func() {})
- })
- ```
-
- will run `B` but *not* `A`. This tends to be a common usage pattern when in the thick of writing and debugging tests.
-- When `SIGINT` is received, Ginkgo will emit the contents of the `GinkgoWriter` before running the `AfterSuite`. Useful for debugging stuck tests.
-- When `--progress` is set, Ginkgo will write test progress (in particular, Ginkgo will say when it is about to run a BeforeEach, AfterEach, It, etc...) to the `GinkgoWriter`. This is useful for debugging stuck tests and tests that generate many logs.
-- Improved output when an error occurs in a setup or teardown block.
-- When `--dryRun` is set, Ginkgo will walk the spec tree and emit to its reporter *without* actually running anything. Best paired with `-v` to understand which specs will run in which order.
-- Add `By` to help document long `It`s. `By` simply writes to the `GinkgoWriter`.
-- Add support for precompiled tests:
- - `ginkgo build <path-to-package>` will now compile the package, producing a file named `package.test`
- - The compiled `package.test` file can be run directly. This runs the tests in series.
- - To run precompiled tests in parallel, you can run: `ginkgo -p package.test`
-- Support `bootstrap`ping and `generate`ing [Agouti](http://agouti.org) specs.
-- `ginkgo generate` and `ginkgo bootstrap` now honor the package name already defined in a given directory
-- The `ginkgo` CLI ignores `SIGQUIT`. Prevents its stack dump from interlacing with the underlying test suite's stack dump.
-- The `ginkgo` CLI now compiles tests into a temporary directory instead of the package directory. This necessitates upgrading to Go v1.4+.
-- `ginkgo -notify` now works on Linux
-
-Bug Fixes:
-
-- If --skipPackages is used and all packages are skipped, Ginkgo should exit 0.
-- Fix tempfile leak when running in parallel
-- Fix incorrect failure message when a panic occurs during a parallel test run
-- Fixed an issue where a pending test within a focused context (or a focused test within a pending context) would skip all other tests.
-- Be more consistent about handling SIGTERM as well as SIGINT
-- When interupted while concurrently compiling test suites in the background, Ginkgo now cleans up the compiled artifacts.
-- Fixed a long standing bug where `ginkgo -p` would hang if a process spawned by one of the Ginkgo parallel nodes does not exit. (Hooray!)
-
-## 1.1.0 (8/2/2014)
-
-No changes, just dropping the beta.
-
-## 1.1.0-beta (7/22/2014)
-New Features:
-
-- `ginkgo watch` now monitors packages *and their dependencies* for changes. The depth of the dependency tree can be modified with the `-depth` flag.
-- Test suites with a programmatic focus (`FIt`, `FDescribe`, etc...) exit with non-zero status code, even when they pass. This allows CI systems to detect accidental commits of focused test suites.
-- `ginkgo -p` runs the testsuite in parallel with an auto-detected number of nodes.
-- `ginkgo -tags=TAG_LIST` passes a list of tags down to the `go build` command.
-- `ginkgo --failFast` aborts the test suite after the first failure.
-- `ginkgo generate file_1 file_2` can take multiple file arguments.
-- Ginkgo now summarizes any spec failures that occured at the end of the test run.
-- `ginkgo --randomizeSuites` will run tests *suites* in random order using the generated/passed-in seed.
-
-Improvements:
-
-- `ginkgo -skipPackage` now takes a comma-separated list of strings. If the *relative path* to a package matches one of the entries in the comma-separated list, that package is skipped.
-- `ginkgo --untilItFails` no longer recompiles between attempts.
-- Ginkgo now panics when a runnable node (`It`, `BeforeEach`, `JustBeforeEach`, `AfterEach`, `Measure`) is nested within another runnable node. This is always a mistake. Any test suites that panic because of this change should be fixed.
-
-Bug Fixes:
-
-- `ginkgo boostrap` and `ginkgo generate` no longer fail when dealing with `hyphen-separated-packages`.
-- parallel specs are now better distributed across nodes - fixed a crashing bug where (for example) distributing 11 tests across 7 nodes would panic
-
-## 1.0.0 (5/24/2014)
-New Features:
-
-- Add `GinkgoParallelNode()` - shorthand for `config.GinkgoConfig.ParallelNode`
-
-Improvements:
-
-- When compilation fails, the compilation output is rewritten to present a correct *relative* path. Allows ⌘-clicking in iTerm open the file in your text editor.
-- `--untilItFails` and `ginkgo watch` now generate new random seeds between test runs, unless a particular random seed is specified.
-
-Bug Fixes:
-
-- `-cover` now generates a correctly combined coverprofile when running with in parallel with multiple `-node`s.
-- Print out the contents of the `GinkgoWriter` when `BeforeSuite` or `AfterSuite` fail.
-- Fix all remaining race conditions in Ginkgo's test suite.
-
-## 1.0.0-beta (4/14/2014)
-Breaking changes:
-
-- `thirdparty/gomocktestreporter` is gone. Use `GinkgoT()` instead
-- Modified the Reporter interface
-- `watch` is now a subcommand, not a flag.
-
-DSL changes:
-
-- `BeforeSuite` and `AfterSuite` for setting up and tearing down test suites.
-- `AfterSuite` is triggered on interrupt (`^C`) as well as exit.
-- `SynchronizedBeforeSuite` and `SynchronizedAfterSuite` for setting up and tearing down singleton resources across parallel nodes.
-
-CLI changes:
-
-- `watch` is now a subcommand, not a flag
-- `--nodot` flag can be passed to `ginkgo generate` and `ginkgo bootstrap` to avoid dot imports. This explicitly imports all exported identifiers in Ginkgo and Gomega. Refreshing this list can be done by running `ginkgo nodot`
-- Additional arguments can be passed to specs. Pass them after the `--` separator
-- `--skipPackage` flag takes a regexp and ignores any packages with package names passing said regexp.
-- `--trace` flag prints out full stack traces when errors occur, not just the line at which the error occurs.
-
-Misc:
-
-- Start using semantic versioning
-- Start maintaining changelog
-
-Major refactor:
-
-- Pull out Ginkgo's internal to `internal`
-- Rename `example` everywhere to `spec`
-- Much more!
diff --git a/vendor/github.com/onsi/ginkgo/CONTRIBUTING.md b/vendor/github.com/onsi/ginkgo/CONTRIBUTING.md
deleted file mode 100644
index 908b95c..0000000
--- a/vendor/github.com/onsi/ginkgo/CONTRIBUTING.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# Contributing to Ginkgo
-
-Your contributions to Ginkgo are essential for its long-term maintenance and improvement.
-
-- Please **open an issue first** - describe what problem you are trying to solve and give the community a forum for input and feedback ahead of investing time in writing code!
-- Ensure adequate test coverage:
- - When adding to the Ginkgo library, add unit and/or integration tests (under the `integration` folder).
- - When adding to the Ginkgo CLI, note that there are very few unit tests. Please add an integration test.
-- Update the documentation. Ginko uses `godoc` comments and documentation on the `gh-pages` branch.
- If relevant, please submit a docs PR to that branch alongside your code PR.
-
-Thanks for supporting Ginkgo!
-
-## Setup
-
-Fork the repo, then:
-
-```
-go get github.com/onsi/ginkgo
-go get github.com/onsi/gomega/...
-cd $GOPATH/src/github.com/onsi/ginkgo
-git remote add fork git@github.com:<NAME>/ginkgo.git
-
-ginkgo -r -p # ensure tests are green
-go vet ./... # ensure linter is happy
-```
-
-## Making the PR
- - go to a new branch `git checkout -b my-feature`
- - make your changes
- - run tests and linter again (see above)
- - `git push fork`
- - open PR 🎉
diff --git a/vendor/github.com/onsi/ginkgo/LICENSE b/vendor/github.com/onsi/ginkgo/LICENSE
deleted file mode 100644
index 9415ee7..0000000
--- a/vendor/github.com/onsi/ginkgo/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2013-2014 Onsi Fakhouri
-
-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/ginkgo/README.md b/vendor/github.com/onsi/ginkgo/README.md
deleted file mode 100644
index cdf8d05..0000000
--- a/vendor/github.com/onsi/ginkgo/README.md
+++ /dev/null
@@ -1,121 +0,0 @@
-![Ginkgo: A Go BDD Testing Framework](http://onsi.github.io/ginkgo/images/ginkgo.png)
-
-[![Build Status](https://travis-ci.org/onsi/ginkgo.svg?branch=master)](https://travis-ci.org/onsi/ginkgo)
-
-Jump to the [docs](http://onsi.github.io/ginkgo/) to learn more. To start rolling your Ginkgo tests *now* [keep reading](#set-me-up)!
-
-If you have a question, comment, bug report, feature request, etc. please open a GitHub issue.
-
-## Feature List
-
-- Ginkgo uses Go's `testing` package and can live alongside your existing `testing` tests. It's easy to [bootstrap](http://onsi.github.io/ginkgo/#bootstrapping-a-suite) and start writing your [first tests](http://onsi.github.io/ginkgo/#adding-specs-to-a-suite)
-
-- Structure your BDD-style tests expressively:
- - Nestable [`Describe`, `Context` and `When` container blocks](http://onsi.github.io/ginkgo/#organizing-specs-with-containers-describe-and-context)
- - [`BeforeEach` and `AfterEach` blocks](http://onsi.github.io/ginkgo/#extracting-common-setup-beforeeach) for setup and teardown
- - [`It` and `Specify` blocks](http://onsi.github.io/ginkgo/#individual-specs-) that hold your assertions
- - [`JustBeforeEach` blocks](http://onsi.github.io/ginkgo/#separating-creation-and-configuration-justbeforeeach) that separate creation from configuration (also known as the subject action pattern).
- - [`BeforeSuite` and `AfterSuite` blocks](http://onsi.github.io/ginkgo/#global-setup-and-teardown-beforesuite-and-aftersuite) to prep for and cleanup after a suite.
-
-- A comprehensive test runner that lets you:
- - Mark specs as [pending](http://onsi.github.io/ginkgo/#pending-specs)
- - [Focus](http://onsi.github.io/ginkgo/#focused-specs) individual specs, and groups of specs, either programmatically or on the command line
- - Run your tests in [random order](http://onsi.github.io/ginkgo/#spec-permutation), and then reuse random seeds to replicate the same order.
- - Break up your test suite into parallel processes for straightforward [test parallelization](http://onsi.github.io/ginkgo/#parallel-specs)
-
-- `ginkgo`: a command line interface with plenty of handy command line arguments for [running your tests](http://onsi.github.io/ginkgo/#running-tests) and [generating](http://onsi.github.io/ginkgo/#generators) test files. Here are a few choice examples:
- - `ginkgo -nodes=N` runs your tests in `N` parallel processes and print out coherent output in realtime
- - `ginkgo -cover` runs your tests using Go's code coverage tool
- - `ginkgo convert` converts an XUnit-style `testing` package to a Ginkgo-style package
- - `ginkgo -focus="REGEXP"` and `ginkgo -skip="REGEXP"` allow you to specify a subset of tests to run via regular expression
- - `ginkgo -r` runs all tests suites under the current directory
- - `ginkgo -v` prints out identifying information for each tests just before it runs
-
- And much more: run `ginkgo help` for details!
-
- The `ginkgo` CLI is convenient, but purely optional -- Ginkgo works just fine with `go test`
-
-- `ginkgo watch` [watches](https://onsi.github.io/ginkgo/#watching-for-changes) packages *and their dependencies* for changes, then reruns tests. Run tests immediately as you develop!
-
-- Built-in support for testing [asynchronicity](http://onsi.github.io/ginkgo/#asynchronous-tests)
-
-- Built-in support for [benchmarking](http://onsi.github.io/ginkgo/#benchmark-tests) your code. Control the number of benchmark samples as you gather runtimes and other, arbitrary, bits of numerical information about your code.
-
-- [Completions for Sublime Text](https://github.com/onsi/ginkgo-sublime-completions): just use [Package Control](https://sublime.wbond.net/) to install `Ginkgo Completions`.
-
-- [Completions for VSCode](https://github.com/onsi/vscode-ginkgo): just use VSCode's extension installer to install `vscode-ginkgo`.
-
-- Straightforward support for third-party testing libraries such as [Gomock](https://code.google.com/p/gomock/) and [Testify](https://github.com/stretchr/testify). Check out the [docs](http://onsi.github.io/ginkgo/#third-party-integrations) for details.
-
-- A modular architecture that lets you easily:
- - Write [custom reporters](http://onsi.github.io/ginkgo/#writing-custom-reporters) (for example, Ginkgo comes with a [JUnit XML reporter](http://onsi.github.io/ginkgo/#generating-junit-xml-output) and a TeamCity reporter).
- - [Adapt an existing matcher library (or write your own!)](http://onsi.github.io/ginkgo/#using-other-matcher-libraries) to work with Ginkgo
-
-## [Gomega](http://github.com/onsi/gomega): Ginkgo's Preferred Matcher Library
-
-Ginkgo is best paired with Gomega. Learn more about Gomega [here](http://onsi.github.io/gomega/)
-
-## [Agouti](http://github.com/sclevine/agouti): A Go Acceptance Testing Framework
-
-Agouti allows you run WebDriver integration tests. Learn more about Agouti [here](http://agouti.org)
-
-## Set Me Up!
-
-You'll need the Go command-line tools. Ginkgo is tested with Go 1.6+, but preferably you should get the latest. Follow the [installation instructions](https://golang.org/doc/install) if you don't have it installed.
-
-```bash
-
-go get -u github.com/onsi/ginkgo/ginkgo # installs the ginkgo CLI
-go get -u github.com/onsi/gomega/... # fetches the matcher library
-
-cd path/to/package/you/want/to/test
-
-ginkgo bootstrap # set up a new ginkgo suite
-ginkgo generate # will create a sample test file. edit this file and add your tests then...
-
-go test # to run your tests
-
-ginkgo # also runs your tests
-
-```
-
-## I'm new to Go: What are my testing options?
-
-Of course, I heartily recommend [Ginkgo](https://github.com/onsi/ginkgo) and [Gomega](https://github.com/onsi/gomega). Both packages are seeing heavy, daily, production use on a number of projects and boast a mature and comprehensive feature-set.
-
-With that said, it's great to know what your options are :)
-
-### What Go gives you out of the box
-
-Testing is a first class citizen in Go, however Go's built-in testing primitives are somewhat limited: The [testing](http://golang.org/pkg/testing) package provides basic XUnit style tests and no assertion library.
-
-### Matcher libraries for Go's XUnit style tests
-
-A number of matcher libraries have been written to augment Go's built-in XUnit style tests. Here are two that have gained traction:
-
-- [testify](https://github.com/stretchr/testify)
-- [gocheck](http://labix.org/gocheck)
-
-You can also use Ginkgo's matcher library [Gomega](https://github.com/onsi/gomega) in [XUnit style tests](http://onsi.github.io/gomega/#using-gomega-with-golangs-xunitstyle-tests)
-
-### BDD style testing frameworks
-
-There are a handful of BDD-style testing frameworks written for Go. Here are a few:
-
-- [Ginkgo](https://github.com/onsi/ginkgo) ;)
-- [GoConvey](https://github.com/smartystreets/goconvey)
-- [Goblin](https://github.com/franela/goblin)
-- [Mao](https://github.com/azer/mao)
-- [Zen](https://github.com/pranavraja/zen)
-
-Finally, @shageman has [put together](https://github.com/shageman/gotestit) a comprehensive comparison of Go testing libraries.
-
-Go explore!
-
-## License
-
-Ginkgo is MIT-Licensed
-
-## Contributing
-
-See [CONTRIBUTING.md](CONTRIBUTING.md)
diff --git a/vendor/github.com/onsi/ginkgo/RELEASING.md b/vendor/github.com/onsi/ginkgo/RELEASING.md
deleted file mode 100644
index 1e298c2..0000000
--- a/vendor/github.com/onsi/ginkgo/RELEASING.md
+++ /dev/null
@@ -1,14 +0,0 @@
-A Ginkgo release is a tagged git sha and a GitHub release. To cut a release:
-
-1. Ensure CHANGELOG.md is up to date.
- - Use `git log --pretty=format:'- %s [%h]' HEAD...vX.X.X` to list all the commits since the last release
- - Categorize the changes into
- - Breaking Changes (requires a major version)
- - New Features (minor version)
- - Fixes (fix version)
- - Maintenance (which in general should not be mentioned in `CHANGELOG.md` as they have no user impact)
-1. Update `VERSION` in `config/config.go`
-1. Create a commit with the version number as the commit message (e.g. `v1.3.0`)
-1. Tag the commit with the version number as the tag name (e.g. `v1.3.0`)
-1. Push the commit and tag to GitHub
-1. Create a new [GitHub release](https://help.github.com/articles/creating-releases/) with the version number as the tag (e.g. `v1.3.0`). List the key changes in the release notes.
diff --git a/vendor/github.com/onsi/ginkgo/config/config.go b/vendor/github.com/onsi/ginkgo/config/config.go
deleted file mode 100644
index ac55a5a..0000000
--- a/vendor/github.com/onsi/ginkgo/config/config.go
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
-Ginkgo accepts a number of configuration options.
-
-These are documented [here](http://onsi.github.io/ginkgo/#the_ginkgo_cli)
-
-You can also learn more via
-
- ginkgo help
-
-or (I kid you not):
-
- go test -asdf
-*/
-package config
-
-import (
- "flag"
- "time"
-
- "fmt"
-)
-
-const VERSION = "1.10.1"
-
-type GinkgoConfigType struct {
- RandomSeed int64
- RandomizeAllSpecs bool
- RegexScansFilePath bool
- FocusString string
- SkipString string
- SkipMeasurements bool
- FailOnPending bool
- FailFast bool
- FlakeAttempts int
- EmitSpecProgress bool
- DryRun bool
- DebugParallel bool
-
- ParallelNode int
- ParallelTotal int
- SyncHost string
- StreamHost string
-}
-
-var GinkgoConfig = GinkgoConfigType{}
-
-type DefaultReporterConfigType struct {
- NoColor bool
- SlowSpecThreshold float64
- NoisyPendings bool
- NoisySkippings bool
- Succinct bool
- Verbose bool
- FullTrace bool
- ReportPassed bool
-}
-
-var DefaultReporterConfig = DefaultReporterConfigType{}
-
-func processPrefix(prefix string) string {
- if prefix != "" {
- prefix += "."
- }
- return prefix
-}
-
-func Flags(flagSet *flag.FlagSet, prefix string, includeParallelFlags bool) {
- prefix = processPrefix(prefix)
- flagSet.Int64Var(&(GinkgoConfig.RandomSeed), prefix+"seed", time.Now().Unix(), "The seed used to randomize the spec suite.")
- flagSet.BoolVar(&(GinkgoConfig.RandomizeAllSpecs), prefix+"randomizeAllSpecs", false, "If set, ginkgo will randomize all specs together. By default, ginkgo only randomizes the top level Describe, Context and When groups.")
- flagSet.BoolVar(&(GinkgoConfig.SkipMeasurements), prefix+"skipMeasurements", false, "If set, ginkgo will skip any measurement specs.")
- flagSet.BoolVar(&(GinkgoConfig.FailOnPending), prefix+"failOnPending", false, "If set, ginkgo will mark the test suite as failed if any specs are pending.")
- flagSet.BoolVar(&(GinkgoConfig.FailFast), prefix+"failFast", false, "If set, ginkgo will stop running a test suite after a failure occurs.")
-
- flagSet.BoolVar(&(GinkgoConfig.DryRun), prefix+"dryRun", false, "If set, ginkgo will walk the test hierarchy without actually running anything. Best paired with -v.")
-
- flagSet.StringVar(&(GinkgoConfig.FocusString), prefix+"focus", "", "If set, ginkgo will only run specs that match this regular expression.")
- flagSet.StringVar(&(GinkgoConfig.SkipString), prefix+"skip", "", "If set, ginkgo will only run specs that do not match this regular expression.")
-
- flagSet.BoolVar(&(GinkgoConfig.RegexScansFilePath), prefix+"regexScansFilePath", false, "If set, ginkgo regex matching also will look at the file path (code location).")
-
- flagSet.IntVar(&(GinkgoConfig.FlakeAttempts), prefix+"flakeAttempts", 1, "Make up to this many attempts to run each spec. Please note that if any of the attempts succeed, the suite will not be failed. But any failures will still be recorded.")
-
- flagSet.BoolVar(&(GinkgoConfig.EmitSpecProgress), prefix+"progress", false, "If set, ginkgo will emit progress information as each spec runs to the GinkgoWriter.")
-
- flagSet.BoolVar(&(GinkgoConfig.DebugParallel), prefix+"debug", false, "If set, ginkgo will emit node output to files when running in parallel.")
-
- if includeParallelFlags {
- flagSet.IntVar(&(GinkgoConfig.ParallelNode), prefix+"parallel.node", 1, "This worker node's (one-indexed) node number. For running specs in parallel.")
- flagSet.IntVar(&(GinkgoConfig.ParallelTotal), prefix+"parallel.total", 1, "The total number of worker nodes. For running specs in parallel.")
- flagSet.StringVar(&(GinkgoConfig.SyncHost), prefix+"parallel.synchost", "", "The address for the server that will synchronize the running nodes.")
- flagSet.StringVar(&(GinkgoConfig.StreamHost), prefix+"parallel.streamhost", "", "The address for the server that the running nodes should stream data to.")
- }
-
- flagSet.BoolVar(&(DefaultReporterConfig.NoColor), prefix+"noColor", false, "If set, suppress color output in default reporter.")
- flagSet.Float64Var(&(DefaultReporterConfig.SlowSpecThreshold), prefix+"slowSpecThreshold", 5.0, "(in seconds) Specs that take longer to run than this threshold are flagged as slow by the default reporter.")
- flagSet.BoolVar(&(DefaultReporterConfig.NoisyPendings), prefix+"noisyPendings", true, "If set, default reporter will shout about pending tests.")
- flagSet.BoolVar(&(DefaultReporterConfig.NoisySkippings), prefix+"noisySkippings", true, "If set, default reporter will shout about skipping tests.")
- flagSet.BoolVar(&(DefaultReporterConfig.Verbose), prefix+"v", false, "If set, default reporter print out all specs as they begin.")
- flagSet.BoolVar(&(DefaultReporterConfig.Succinct), prefix+"succinct", false, "If set, default reporter prints out a very succinct report")
- flagSet.BoolVar(&(DefaultReporterConfig.FullTrace), prefix+"trace", false, "If set, default reporter prints out the full stack trace when a failure occurs")
- flagSet.BoolVar(&(DefaultReporterConfig.ReportPassed), prefix+"reportPassed", false, "If set, default reporter prints out captured output of passed tests.")
-}
-
-func BuildFlagArgs(prefix string, ginkgo GinkgoConfigType, reporter DefaultReporterConfigType) []string {
- prefix = processPrefix(prefix)
- result := make([]string, 0)
-
- if ginkgo.RandomSeed > 0 {
- result = append(result, fmt.Sprintf("--%sseed=%d", prefix, ginkgo.RandomSeed))
- }
-
- if ginkgo.RandomizeAllSpecs {
- result = append(result, fmt.Sprintf("--%srandomizeAllSpecs", prefix))
- }
-
- if ginkgo.SkipMeasurements {
- result = append(result, fmt.Sprintf("--%sskipMeasurements", prefix))
- }
-
- if ginkgo.FailOnPending {
- result = append(result, fmt.Sprintf("--%sfailOnPending", prefix))
- }
-
- if ginkgo.FailFast {
- result = append(result, fmt.Sprintf("--%sfailFast", prefix))
- }
-
- if ginkgo.DryRun {
- result = append(result, fmt.Sprintf("--%sdryRun", prefix))
- }
-
- if ginkgo.FocusString != "" {
- result = append(result, fmt.Sprintf("--%sfocus=%s", prefix, ginkgo.FocusString))
- }
-
- if ginkgo.SkipString != "" {
- result = append(result, fmt.Sprintf("--%sskip=%s", prefix, ginkgo.SkipString))
- }
-
- if ginkgo.FlakeAttempts > 1 {
- result = append(result, fmt.Sprintf("--%sflakeAttempts=%d", prefix, ginkgo.FlakeAttempts))
- }
-
- if ginkgo.EmitSpecProgress {
- result = append(result, fmt.Sprintf("--%sprogress", prefix))
- }
-
- if ginkgo.DebugParallel {
- result = append(result, fmt.Sprintf("--%sdebug", prefix))
- }
-
- if ginkgo.ParallelNode != 0 {
- result = append(result, fmt.Sprintf("--%sparallel.node=%d", prefix, ginkgo.ParallelNode))
- }
-
- if ginkgo.ParallelTotal != 0 {
- result = append(result, fmt.Sprintf("--%sparallel.total=%d", prefix, ginkgo.ParallelTotal))
- }
-
- if ginkgo.StreamHost != "" {
- result = append(result, fmt.Sprintf("--%sparallel.streamhost=%s", prefix, ginkgo.StreamHost))
- }
-
- if ginkgo.SyncHost != "" {
- result = append(result, fmt.Sprintf("--%sparallel.synchost=%s", prefix, ginkgo.SyncHost))
- }
-
- if ginkgo.RegexScansFilePath {
- result = append(result, fmt.Sprintf("--%sregexScansFilePath", prefix))
- }
-
- if reporter.NoColor {
- result = append(result, fmt.Sprintf("--%snoColor", prefix))
- }
-
- if reporter.SlowSpecThreshold > 0 {
- result = append(result, fmt.Sprintf("--%sslowSpecThreshold=%.5f", prefix, reporter.SlowSpecThreshold))
- }
-
- if !reporter.NoisyPendings {
- result = append(result, fmt.Sprintf("--%snoisyPendings=false", prefix))
- }
-
- if !reporter.NoisySkippings {
- result = append(result, fmt.Sprintf("--%snoisySkippings=false", prefix))
- }
-
- if reporter.Verbose {
- result = append(result, fmt.Sprintf("--%sv", prefix))
- }
-
- if reporter.Succinct {
- result = append(result, fmt.Sprintf("--%ssuccinct", prefix))
- }
-
- if reporter.FullTrace {
- result = append(result, fmt.Sprintf("--%strace", prefix))
- }
-
- if reporter.ReportPassed {
- result = append(result, fmt.Sprintf("--%sreportPassed", prefix))
- }
-
- return result
-}
diff --git a/vendor/github.com/onsi/ginkgo/ginkgo_dsl.go b/vendor/github.com/onsi/ginkgo/ginkgo_dsl.go
deleted file mode 100644
index 8734c06..0000000
--- a/vendor/github.com/onsi/ginkgo/ginkgo_dsl.go
+++ /dev/null
@@ -1,619 +0,0 @@
-/*
-Ginkgo is a BDD-style testing framework for Golang
-
-The godoc documentation describes Ginkgo's API. More comprehensive documentation (with examples!) is available at http://onsi.github.io/ginkgo/
-
-Ginkgo's preferred matcher library is [Gomega](http://github.com/onsi/gomega)
-
-Ginkgo on Github: http://github.com/onsi/ginkgo
-
-Ginkgo is MIT-Licensed
-*/
-package ginkgo
-
-import (
- "flag"
- "fmt"
- "io"
- "net/http"
- "os"
- "strings"
- "time"
-
- "github.com/onsi/ginkgo/config"
- "github.com/onsi/ginkgo/internal/codelocation"
- "github.com/onsi/ginkgo/internal/failer"
- "github.com/onsi/ginkgo/internal/remote"
- "github.com/onsi/ginkgo/internal/suite"
- "github.com/onsi/ginkgo/internal/testingtproxy"
- "github.com/onsi/ginkgo/internal/writer"
- "github.com/onsi/ginkgo/reporters"
- "github.com/onsi/ginkgo/reporters/stenographer"
- colorable "github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable"
- "github.com/onsi/ginkgo/types"
-)
-
-const GINKGO_VERSION = config.VERSION
-const GINKGO_PANIC = `
-Your test failed.
-Ginkgo panics to prevent subsequent assertions from running.
-Normally Ginkgo rescues this panic so you shouldn't see it.
-
-But, if you make an assertion in a goroutine, Ginkgo can't capture the panic.
-To circumvent this, you should call
-
- defer GinkgoRecover()
-
-at the top of the goroutine that caused this panic.
-`
-const defaultTimeout = 1
-
-var globalSuite *suite.Suite
-var globalFailer *failer.Failer
-
-func init() {
- config.Flags(flag.CommandLine, "ginkgo", true)
- GinkgoWriter = writer.New(os.Stdout)
- globalFailer = failer.New()
- globalSuite = suite.New(globalFailer)
-}
-
-//GinkgoWriter implements an io.Writer
-//When running in verbose mode any writes to GinkgoWriter will be immediately printed
-//to stdout. Otherwise, GinkgoWriter will buffer any writes produced during the current test and flush them to screen
-//only if the current test fails.
-var GinkgoWriter io.Writer
-
-//The interface by which Ginkgo receives *testing.T
-type GinkgoTestingT interface {
- Fail()
-}
-
-//GinkgoRandomSeed returns the seed used to randomize spec execution order. It is
-//useful for seeding your own pseudorandom number generators (PRNGs) to ensure
-//consistent executions from run to run, where your tests contain variability (for
-//example, when selecting random test data).
-func GinkgoRandomSeed() int64 {
- return config.GinkgoConfig.RandomSeed
-}
-
-//GinkgoParallelNode returns the parallel node number for the current ginkgo process
-//The node number is 1-indexed
-func GinkgoParallelNode() int {
- return config.GinkgoConfig.ParallelNode
-}
-
-//Some matcher libraries or legacy codebases require a *testing.T
-//GinkgoT implements an interface analogous to *testing.T and can be used if
-//the library in question accepts *testing.T through an interface
-//
-// For example, with testify:
-// assert.Equal(GinkgoT(), 123, 123, "they should be equal")
-//
-// Or with gomock:
-// gomock.NewController(GinkgoT())
-//
-// GinkgoT() takes an optional offset argument that can be used to get the
-// correct line number associated with the failure.
-func GinkgoT(optionalOffset ...int) GinkgoTInterface {
- offset := 3
- if len(optionalOffset) > 0 {
- offset = optionalOffset[0]
- }
- return testingtproxy.New(GinkgoWriter, Fail, offset)
-}
-
-//The interface returned by GinkgoT(). This covers most of the methods
-//in the testing package's T.
-type GinkgoTInterface interface {
- Fail()
- Error(args ...interface{})
- Errorf(format string, args ...interface{})
- FailNow()
- Fatal(args ...interface{})
- Fatalf(format string, args ...interface{})
- Log(args ...interface{})
- Logf(format string, args ...interface{})
- Failed() bool
- Parallel()
- Skip(args ...interface{})
- Skipf(format string, args ...interface{})
- SkipNow()
- Skipped() bool
-}
-
-//Custom Ginkgo test reporters must implement the Reporter interface.
-//
-//The custom reporter is passed in a SuiteSummary when the suite begins and ends,
-//and a SpecSummary just before a spec begins and just after a spec ends
-type Reporter reporters.Reporter
-
-//Asynchronous specs are given a channel of the Done type. You must close or write to the channel
-//to tell Ginkgo that your async test is done.
-type Done chan<- interface{}
-
-//GinkgoTestDescription represents the information about the current running test returned by CurrentGinkgoTestDescription
-// FullTestText: a concatenation of ComponentTexts and the TestText
-// ComponentTexts: a list of all texts for the Describes & Contexts leading up to the current test
-// TestText: the text in the actual It or Measure node
-// IsMeasurement: true if the current test is a measurement
-// FileName: the name of the file containing the current test
-// LineNumber: the line number for the current test
-// Failed: if the current test has failed, this will be true (useful in an AfterEach)
-type GinkgoTestDescription struct {
- FullTestText string
- ComponentTexts []string
- TestText string
-
- IsMeasurement bool
-
- FileName string
- LineNumber int
-
- Failed bool
- Duration time.Duration
-}
-
-//CurrentGinkgoTestDescripton returns information about the current running test.
-func CurrentGinkgoTestDescription() GinkgoTestDescription {
- summary, ok := globalSuite.CurrentRunningSpecSummary()
- if !ok {
- return GinkgoTestDescription{}
- }
-
- subjectCodeLocation := summary.ComponentCodeLocations[len(summary.ComponentCodeLocations)-1]
-
- return GinkgoTestDescription{
- ComponentTexts: summary.ComponentTexts[1:],
- FullTestText: strings.Join(summary.ComponentTexts[1:], " "),
- TestText: summary.ComponentTexts[len(summary.ComponentTexts)-1],
- IsMeasurement: summary.IsMeasurement,
- FileName: subjectCodeLocation.FileName,
- LineNumber: subjectCodeLocation.LineNumber,
- Failed: summary.HasFailureState(),
- Duration: summary.RunTime,
- }
-}
-
-//Measurement tests receive a Benchmarker.
-//
-//You use the Time() function to time how long the passed in body function takes to run
-//You use the RecordValue() function to track arbitrary numerical measurements.
-//The RecordValueWithPrecision() function can be used alternatively to provide the unit
-//and resolution of the numeric measurement.
-//The optional info argument is passed to the test reporter and can be used to
-// provide the measurement data to a custom reporter with context.
-//
-//See http://onsi.github.io/ginkgo/#benchmark_tests for more details
-type Benchmarker interface {
- Time(name string, body func(), info ...interface{}) (elapsedTime time.Duration)
- RecordValue(name string, value float64, info ...interface{})
- RecordValueWithPrecision(name string, value float64, units string, precision int, info ...interface{})
-}
-
-//RunSpecs is the entry point for the Ginkgo test runner.
-//You must call this within a Golang testing TestX(t *testing.T) function.
-//
-//To bootstrap a test suite you can use the Ginkgo CLI:
-//
-// ginkgo bootstrap
-func RunSpecs(t GinkgoTestingT, description string) bool {
- specReporters := []Reporter{buildDefaultReporter()}
- return RunSpecsWithCustomReporters(t, description, specReporters)
-}
-
-//To run your tests with Ginkgo's default reporter and your custom reporter(s), replace
-//RunSpecs() with this method.
-func RunSpecsWithDefaultAndCustomReporters(t GinkgoTestingT, description string, specReporters []Reporter) bool {
- specReporters = append(specReporters, buildDefaultReporter())
- return RunSpecsWithCustomReporters(t, description, specReporters)
-}
-
-//To run your tests with your custom reporter(s) (and *not* Ginkgo's default reporter), replace
-//RunSpecs() with this method. Note that parallel tests will not work correctly without the default reporter
-func RunSpecsWithCustomReporters(t GinkgoTestingT, description string, specReporters []Reporter) bool {
- writer := GinkgoWriter.(*writer.Writer)
- writer.SetStream(config.DefaultReporterConfig.Verbose)
- reporters := make([]reporters.Reporter, len(specReporters))
- for i, reporter := range specReporters {
- reporters[i] = reporter
- }
- passed, hasFocusedTests := globalSuite.Run(t, description, reporters, writer, config.GinkgoConfig)
- if passed && hasFocusedTests && strings.TrimSpace(os.Getenv("GINKGO_EDITOR_INTEGRATION")) == "" {
- fmt.Println("PASS | FOCUSED")
- os.Exit(types.GINKGO_FOCUS_EXIT_CODE)
- }
- return passed
-}
-
-func buildDefaultReporter() Reporter {
- remoteReportingServer := config.GinkgoConfig.StreamHost
- if remoteReportingServer == "" {
- stenographer := stenographer.New(!config.DefaultReporterConfig.NoColor, config.GinkgoConfig.FlakeAttempts > 1, colorable.NewColorableStdout())
- return reporters.NewDefaultReporter(config.DefaultReporterConfig, stenographer)
- } else {
- debugFile := ""
- if config.GinkgoConfig.DebugParallel {
- debugFile = fmt.Sprintf("ginkgo-node-%d.log", config.GinkgoConfig.ParallelNode)
- }
- return remote.NewForwardingReporter(config.DefaultReporterConfig, remoteReportingServer, &http.Client{}, remote.NewOutputInterceptor(), GinkgoWriter.(*writer.Writer), debugFile)
- }
-}
-
-//Skip notifies Ginkgo that the current spec was skipped.
-func Skip(message string, callerSkip ...int) {
- skip := 0
- if len(callerSkip) > 0 {
- skip = callerSkip[0]
- }
-
- globalFailer.Skip(message, codelocation.New(skip+1))
- panic(GINKGO_PANIC)
-}
-
-//Fail notifies Ginkgo that the current spec has failed. (Gomega will call Fail for you automatically when an assertion fails.)
-func Fail(message string, callerSkip ...int) {
- skip := 0
- if len(callerSkip) > 0 {
- skip = callerSkip[0]
- }
-
- globalFailer.Fail(message, codelocation.New(skip+1))
- panic(GINKGO_PANIC)
-}
-
-//GinkgoRecover should be deferred at the top of any spawned goroutine that (may) call `Fail`
-//Since Gomega assertions call fail, you should throw a `defer GinkgoRecover()` at the top of any goroutine that
-//calls out to Gomega
-//
-//Here's why: Ginkgo's `Fail` method records the failure and then panics to prevent
-//further assertions from running. This panic must be recovered. Ginkgo does this for you
-//if the panic originates in a Ginkgo node (an It, BeforeEach, etc...)
-//
-//Unfortunately, if a panic originates on a goroutine *launched* from one of these nodes there's no
-//way for Ginkgo to rescue the panic. To do this, you must remember to `defer GinkgoRecover()` at the top of such a goroutine.
-func GinkgoRecover() {
- e := recover()
- if e != nil {
- globalFailer.Panic(codelocation.New(1), e)
- }
-}
-
-//Describe blocks allow you to organize your specs. A Describe block can contain any number of
-//BeforeEach, AfterEach, JustBeforeEach, It, and Measurement blocks.
-//
-//In addition you can nest Describe, Context and When blocks. Describe, Context and When blocks are functionally
-//equivalent. The difference is purely semantic -- you typically Describe the behavior of an object
-//or method and, within that Describe, outline a number of Contexts and Whens.
-func Describe(text string, body func()) bool {
- globalSuite.PushContainerNode(text, body, types.FlagTypeNone, codelocation.New(1))
- return true
-}
-
-//You can focus the tests within a describe block using FDescribe
-func FDescribe(text string, body func()) bool {
- globalSuite.PushContainerNode(text, body, types.FlagTypeFocused, codelocation.New(1))
- return true
-}
-
-//You can mark the tests within a describe block as pending using PDescribe
-func PDescribe(text string, body func()) bool {
- globalSuite.PushContainerNode(text, body, types.FlagTypePending, codelocation.New(1))
- return true
-}
-
-//You can mark the tests within a describe block as pending using XDescribe
-func XDescribe(text string, body func()) bool {
- globalSuite.PushContainerNode(text, body, types.FlagTypePending, codelocation.New(1))
- return true
-}
-
-//Context blocks allow you to organize your specs. A Context block can contain any number of
-//BeforeEach, AfterEach, JustBeforeEach, It, and Measurement blocks.
-//
-//In addition you can nest Describe, Context and When blocks. Describe, Context and When blocks are functionally
-//equivalent. The difference is purely semantic -- you typical Describe the behavior of an object
-//or method and, within that Describe, outline a number of Contexts and Whens.
-func Context(text string, body func()) bool {
- globalSuite.PushContainerNode(text, body, types.FlagTypeNone, codelocation.New(1))
- return true
-}
-
-//You can focus the tests within a describe block using FContext
-func FContext(text string, body func()) bool {
- globalSuite.PushContainerNode(text, body, types.FlagTypeFocused, codelocation.New(1))
- return true
-}
-
-//You can mark the tests within a describe block as pending using PContext
-func PContext(text string, body func()) bool {
- globalSuite.PushContainerNode(text, body, types.FlagTypePending, codelocation.New(1))
- return true
-}
-
-//You can mark the tests within a describe block as pending using XContext
-func XContext(text string, body func()) bool {
- globalSuite.PushContainerNode(text, body, types.FlagTypePending, codelocation.New(1))
- return true
-}
-
-//When blocks allow you to organize your specs. A When block can contain any number of
-//BeforeEach, AfterEach, JustBeforeEach, It, and Measurement blocks.
-//
-//In addition you can nest Describe, Context and When blocks. Describe, Context and When blocks are functionally
-//equivalent. The difference is purely semantic -- you typical Describe the behavior of an object
-//or method and, within that Describe, outline a number of Contexts and Whens.
-func When(text string, body func()) bool {
- globalSuite.PushContainerNode("when "+text, body, types.FlagTypeNone, codelocation.New(1))
- return true
-}
-
-//You can focus the tests within a describe block using FWhen
-func FWhen(text string, body func()) bool {
- globalSuite.PushContainerNode("when "+text, body, types.FlagTypeFocused, codelocation.New(1))
- return true
-}
-
-//You can mark the tests within a describe block as pending using PWhen
-func PWhen(text string, body func()) bool {
- globalSuite.PushContainerNode("when "+text, body, types.FlagTypePending, codelocation.New(1))
- return true
-}
-
-//You can mark the tests within a describe block as pending using XWhen
-func XWhen(text string, body func()) bool {
- globalSuite.PushContainerNode("when "+text, body, types.FlagTypePending, codelocation.New(1))
- return true
-}
-
-//It blocks contain your test code and assertions. You cannot nest any other Ginkgo blocks
-//within an It block.
-//
-//Ginkgo will normally run It blocks synchronously. To perform asynchronous tests, pass a
-//function that accepts a Done channel. When you do this, you can also provide an optional timeout.
-func It(text string, body interface{}, timeout ...float64) bool {
- globalSuite.PushItNode(text, body, types.FlagTypeNone, codelocation.New(1), parseTimeout(timeout...))
- return true
-}
-
-//You can focus individual Its using FIt
-func FIt(text string, body interface{}, timeout ...float64) bool {
- globalSuite.PushItNode(text, body, types.FlagTypeFocused, codelocation.New(1), parseTimeout(timeout...))
- return true
-}
-
-//You can mark Its as pending using PIt
-func PIt(text string, _ ...interface{}) bool {
- globalSuite.PushItNode(text, func() {}, types.FlagTypePending, codelocation.New(1), 0)
- return true
-}
-
-//You can mark Its as pending using XIt
-func XIt(text string, _ ...interface{}) bool {
- globalSuite.PushItNode(text, func() {}, types.FlagTypePending, codelocation.New(1), 0)
- return true
-}
-
-//Specify blocks are aliases for It blocks and allow for more natural wording in situations
-//which "It" does not fit into a natural sentence flow. All the same protocols apply for Specify blocks
-//which apply to It blocks.
-func Specify(text string, body interface{}, timeout ...float64) bool {
- globalSuite.PushItNode(text, body, types.FlagTypeNone, codelocation.New(1), parseTimeout(timeout...))
- return true
-}
-
-//You can focus individual Specifys using FSpecify
-func FSpecify(text string, body interface{}, timeout ...float64) bool {
- globalSuite.PushItNode(text, body, types.FlagTypeFocused, codelocation.New(1), parseTimeout(timeout...))
- return true
-}
-
-//You can mark Specifys as pending using PSpecify
-func PSpecify(text string, is ...interface{}) bool {
- globalSuite.PushItNode(text, func() {}, types.FlagTypePending, codelocation.New(1), 0)
- return true
-}
-
-//You can mark Specifys as pending using XSpecify
-func XSpecify(text string, is ...interface{}) bool {
- globalSuite.PushItNode(text, func() {}, types.FlagTypePending, codelocation.New(1), 0)
- return true
-}
-
-//By allows you to better document large Its.
-//
-//Generally you should try to keep your Its short and to the point. This is not always possible, however,
-//especially in the context of integration tests that capture a particular workflow.
-//
-//By allows you to document such flows. By must be called within a runnable node (It, BeforeEach, Measure, etc...)
-//By will simply log the passed in text to the GinkgoWriter. If By is handed a function it will immediately run the function.
-func By(text string, callbacks ...func()) {
- preamble := "\x1b[1mSTEP\x1b[0m"
- if config.DefaultReporterConfig.NoColor {
- preamble = "STEP"
- }
- fmt.Fprintln(GinkgoWriter, preamble+": "+text)
- if len(callbacks) == 1 {
- callbacks[0]()
- }
- if len(callbacks) > 1 {
- panic("just one callback per By, please")
- }
-}
-
-//Measure blocks run the passed in body function repeatedly (determined by the samples argument)
-//and accumulate metrics provided to the Benchmarker by the body function.
-//
-//The body function must have the signature:
-// func(b Benchmarker)
-func Measure(text string, body interface{}, samples int) bool {
- globalSuite.PushMeasureNode(text, body, types.FlagTypeNone, codelocation.New(1), samples)
- return true
-}
-
-//You can focus individual Measures using FMeasure
-func FMeasure(text string, body interface{}, samples int) bool {
- globalSuite.PushMeasureNode(text, body, types.FlagTypeFocused, codelocation.New(1), samples)
- return true
-}
-
-//You can mark Measurements as pending using PMeasure
-func PMeasure(text string, _ ...interface{}) bool {
- globalSuite.PushMeasureNode(text, func(b Benchmarker) {}, types.FlagTypePending, codelocation.New(1), 0)
- return true
-}
-
-//You can mark Measurements as pending using XMeasure
-func XMeasure(text string, _ ...interface{}) bool {
- globalSuite.PushMeasureNode(text, func(b Benchmarker) {}, types.FlagTypePending, codelocation.New(1), 0)
- return true
-}
-
-//BeforeSuite blocks are run just once before any specs are run. When running in parallel, each
-//parallel node process will call BeforeSuite.
-//
-//BeforeSuite blocks can be made asynchronous by providing a body function that accepts a Done channel
-//
-//You may only register *one* BeforeSuite handler per test suite. You typically do so in your bootstrap file at the top level.
-func BeforeSuite(body interface{}, timeout ...float64) bool {
- globalSuite.SetBeforeSuiteNode(body, codelocation.New(1), parseTimeout(timeout...))
- return true
-}
-
-//AfterSuite blocks are *always* run after all the specs regardless of whether specs have passed or failed.
-//Moreover, if Ginkgo receives an interrupt signal (^C) it will attempt to run the AfterSuite before exiting.
-//
-//When running in parallel, each parallel node process will call AfterSuite.
-//
-//AfterSuite blocks can be made asynchronous by providing a body function that accepts a Done channel
-//
-//You may only register *one* AfterSuite handler per test suite. You typically do so in your bootstrap file at the top level.
-func AfterSuite(body interface{}, timeout ...float64) bool {
- globalSuite.SetAfterSuiteNode(body, codelocation.New(1), parseTimeout(timeout...))
- return true
-}
-
-//SynchronizedBeforeSuite blocks are primarily meant to solve the problem of setting up singleton external resources shared across
-//nodes when running tests in parallel. For example, say you have a shared database that you can only start one instance of that
-//must be used in your tests. When running in parallel, only one node should set up the database and all other nodes should wait
-//until that node is done before running.
-//
-//SynchronizedBeforeSuite accomplishes this by taking *two* function arguments. The first is only run on parallel node #1. The second is
-//run on all nodes, but *only* after the first function completes successfully. Ginkgo also makes it possible to send data from the first function (on Node 1)
-//to the second function (on all the other nodes).
-//
-//The functions have the following signatures. The first function (which only runs on node 1) has the signature:
-//
-// func() []byte
-//
-//or, to run asynchronously:
-//
-// func(done Done) []byte
-//
-//The byte array returned by the first function is then passed to the second function, which has the signature:
-//
-// func(data []byte)
-//
-//or, to run asynchronously:
-//
-// func(data []byte, done Done)
-//
-//Here's a simple pseudo-code example that starts a shared database on Node 1 and shares the database's address with the other nodes:
-//
-// var dbClient db.Client
-// var dbRunner db.Runner
-//
-// var _ = SynchronizedBeforeSuite(func() []byte {
-// dbRunner = db.NewRunner()
-// err := dbRunner.Start()
-// Ω(err).ShouldNot(HaveOccurred())
-// return []byte(dbRunner.URL)
-// }, func(data []byte) {
-// dbClient = db.NewClient()
-// err := dbClient.Connect(string(data))
-// Ω(err).ShouldNot(HaveOccurred())
-// })
-func SynchronizedBeforeSuite(node1Body interface{}, allNodesBody interface{}, timeout ...float64) bool {
- globalSuite.SetSynchronizedBeforeSuiteNode(
- node1Body,
- allNodesBody,
- codelocation.New(1),
- parseTimeout(timeout...),
- )
- return true
-}
-
-//SynchronizedAfterSuite blocks complement the SynchronizedBeforeSuite blocks in solving the problem of setting up
-//external singleton resources shared across nodes when running tests in parallel.
-//
-//SynchronizedAfterSuite accomplishes this by taking *two* function arguments. The first runs on all nodes. The second runs only on parallel node #1
-//and *only* after all other nodes have finished and exited. This ensures that node 1, and any resources it is running, remain alive until
-//all other nodes are finished.
-//
-//Both functions have the same signature: either func() or func(done Done) to run asynchronously.
-//
-//Here's a pseudo-code example that complements that given in SynchronizedBeforeSuite. Here, SynchronizedAfterSuite is used to tear down the shared database
-//only after all nodes have finished:
-//
-// var _ = SynchronizedAfterSuite(func() {
-// dbClient.Cleanup()
-// }, func() {
-// dbRunner.Stop()
-// })
-func SynchronizedAfterSuite(allNodesBody interface{}, node1Body interface{}, timeout ...float64) bool {
- globalSuite.SetSynchronizedAfterSuiteNode(
- allNodesBody,
- node1Body,
- codelocation.New(1),
- parseTimeout(timeout...),
- )
- return true
-}
-
-//BeforeEach blocks are run before It blocks. When multiple BeforeEach blocks are defined in nested
-//Describe and Context blocks the outermost BeforeEach blocks are run first.
-//
-//Like It blocks, BeforeEach blocks can be made asynchronous by providing a body function that accepts
-//a Done channel
-func BeforeEach(body interface{}, timeout ...float64) bool {
- globalSuite.PushBeforeEachNode(body, codelocation.New(1), parseTimeout(timeout...))
- return true
-}
-
-//JustBeforeEach blocks are run before It blocks but *after* all BeforeEach blocks. For more details,
-//read the [documentation](http://onsi.github.io/ginkgo/#separating_creation_and_configuration_)
-//
-//Like It blocks, BeforeEach blocks can be made asynchronous by providing a body function that accepts
-//a Done channel
-func JustBeforeEach(body interface{}, timeout ...float64) bool {
- globalSuite.PushJustBeforeEachNode(body, codelocation.New(1), parseTimeout(timeout...))
- return true
-}
-
-//JustAfterEach blocks are run after It blocks but *before* all AfterEach blocks. For more details,
-//read the [documentation](http://onsi.github.io/ginkgo/#separating_creation_and_configuration_)
-//
-//Like It blocks, JustAfterEach blocks can be made asynchronous by providing a body function that accepts
-//a Done channel
-func JustAfterEach(body interface{}, timeout ...float64) bool {
- globalSuite.PushJustAfterEachNode(body, codelocation.New(1), parseTimeout(timeout...))
- return true
-}
-
-//AfterEach blocks are run after It blocks. When multiple AfterEach blocks are defined in nested
-//Describe and Context blocks the innermost AfterEach blocks are run first.
-//
-//Like It blocks, AfterEach blocks can be made asynchronous by providing a body function that accepts
-//a Done channel
-func AfterEach(body interface{}, timeout ...float64) bool {
- globalSuite.PushAfterEachNode(body, codelocation.New(1), parseTimeout(timeout...))
- return true
-}
-
-func parseTimeout(timeout ...float64) time.Duration {
- if len(timeout) == 0 {
- return time.Duration(defaultTimeout * int64(time.Second))
- } else {
- return time.Duration(timeout[0] * float64(time.Second))
- }
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/codelocation/code_location.go b/vendor/github.com/onsi/ginkgo/internal/codelocation/code_location.go
deleted file mode 100644
index aa89d6c..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/codelocation/code_location.go
+++ /dev/null
@@ -1,48 +0,0 @@
-package codelocation
-
-import (
- "regexp"
- "runtime"
- "runtime/debug"
- "strings"
-
- "github.com/onsi/ginkgo/types"
-)
-
-func New(skip int) types.CodeLocation {
- _, file, line, _ := runtime.Caller(skip + 1)
- stackTrace := PruneStack(string(debug.Stack()), skip+1)
- return types.CodeLocation{FileName: file, LineNumber: line, FullStackTrace: stackTrace}
-}
-
-// PruneStack removes references to functions that are internal to Ginkgo
-// and the Go runtime from a stack string and a certain number of stack entries
-// at the beginning of the stack. The stack string has the format
-// as returned by runtime/debug.Stack. The leading goroutine information is
-// optional and always removed if present. Beware that runtime/debug.Stack
-// adds itself as first entry, so typically skip must be >= 1 to remove that
-// entry.
-func PruneStack(fullStackTrace string, skip int) string {
- stack := strings.Split(fullStackTrace, "\n")
- // Ensure that the even entries are the method names and the
- // the odd entries the source code information.
- if len(stack) > 0 && strings.HasPrefix(stack[0], "goroutine ") {
- // Ignore "goroutine 29 [running]:" line.
- stack = stack[1:]
- }
- // The "+1" is for skipping over the initial entry, which is
- // runtime/debug.Stack() itself.
- if len(stack) > 2*(skip+1) {
- stack = stack[2*(skip+1):]
- }
- prunedStack := []string{}
- re := regexp.MustCompile(`\/ginkgo\/|\/pkg\/testing\/|\/pkg\/runtime\/`)
- for i := 0; i < len(stack)/2; i++ {
- // We filter out based on the source code file name.
- if !re.Match([]byte(stack[i*2+1])) {
- prunedStack = append(prunedStack, stack[i*2])
- prunedStack = append(prunedStack, stack[i*2+1])
- }
- }
- return strings.Join(prunedStack, "\n")
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/containernode/container_node.go b/vendor/github.com/onsi/ginkgo/internal/containernode/container_node.go
deleted file mode 100644
index 0737746..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/containernode/container_node.go
+++ /dev/null
@@ -1,151 +0,0 @@
-package containernode
-
-import (
- "math/rand"
- "sort"
-
- "github.com/onsi/ginkgo/internal/leafnodes"
- "github.com/onsi/ginkgo/types"
-)
-
-type subjectOrContainerNode struct {
- containerNode *ContainerNode
- subjectNode leafnodes.SubjectNode
-}
-
-func (n subjectOrContainerNode) text() string {
- if n.containerNode != nil {
- return n.containerNode.Text()
- } else {
- return n.subjectNode.Text()
- }
-}
-
-type CollatedNodes struct {
- Containers []*ContainerNode
- Subject leafnodes.SubjectNode
-}
-
-type ContainerNode struct {
- text string
- flag types.FlagType
- codeLocation types.CodeLocation
-
- setupNodes []leafnodes.BasicNode
- subjectAndContainerNodes []subjectOrContainerNode
-}
-
-func New(text string, flag types.FlagType, codeLocation types.CodeLocation) *ContainerNode {
- return &ContainerNode{
- text: text,
- flag: flag,
- codeLocation: codeLocation,
- }
-}
-
-func (container *ContainerNode) Shuffle(r *rand.Rand) {
- sort.Sort(container)
- permutation := r.Perm(len(container.subjectAndContainerNodes))
- shuffledNodes := make([]subjectOrContainerNode, len(container.subjectAndContainerNodes))
- for i, j := range permutation {
- shuffledNodes[i] = container.subjectAndContainerNodes[j]
- }
- container.subjectAndContainerNodes = shuffledNodes
-}
-
-func (node *ContainerNode) BackPropagateProgrammaticFocus() bool {
- if node.flag == types.FlagTypePending {
- return false
- }
-
- shouldUnfocus := false
- for _, subjectOrContainerNode := range node.subjectAndContainerNodes {
- if subjectOrContainerNode.containerNode != nil {
- shouldUnfocus = subjectOrContainerNode.containerNode.BackPropagateProgrammaticFocus() || shouldUnfocus
- } else {
- shouldUnfocus = (subjectOrContainerNode.subjectNode.Flag() == types.FlagTypeFocused) || shouldUnfocus
- }
- }
-
- if shouldUnfocus {
- if node.flag == types.FlagTypeFocused {
- node.flag = types.FlagTypeNone
- }
- return true
- }
-
- return node.flag == types.FlagTypeFocused
-}
-
-func (node *ContainerNode) Collate() []CollatedNodes {
- return node.collate([]*ContainerNode{})
-}
-
-func (node *ContainerNode) collate(enclosingContainers []*ContainerNode) []CollatedNodes {
- collated := make([]CollatedNodes, 0)
-
- containers := make([]*ContainerNode, len(enclosingContainers))
- copy(containers, enclosingContainers)
- containers = append(containers, node)
-
- for _, subjectOrContainer := range node.subjectAndContainerNodes {
- if subjectOrContainer.containerNode != nil {
- collated = append(collated, subjectOrContainer.containerNode.collate(containers)...)
- } else {
- collated = append(collated, CollatedNodes{
- Containers: containers,
- Subject: subjectOrContainer.subjectNode,
- })
- }
- }
-
- return collated
-}
-
-func (node *ContainerNode) PushContainerNode(container *ContainerNode) {
- node.subjectAndContainerNodes = append(node.subjectAndContainerNodes, subjectOrContainerNode{containerNode: container})
-}
-
-func (node *ContainerNode) PushSubjectNode(subject leafnodes.SubjectNode) {
- node.subjectAndContainerNodes = append(node.subjectAndContainerNodes, subjectOrContainerNode{subjectNode: subject})
-}
-
-func (node *ContainerNode) PushSetupNode(setupNode leafnodes.BasicNode) {
- node.setupNodes = append(node.setupNodes, setupNode)
-}
-
-func (node *ContainerNode) SetupNodesOfType(nodeType types.SpecComponentType) []leafnodes.BasicNode {
- nodes := []leafnodes.BasicNode{}
- for _, setupNode := range node.setupNodes {
- if setupNode.Type() == nodeType {
- nodes = append(nodes, setupNode)
- }
- }
- return nodes
-}
-
-func (node *ContainerNode) Text() string {
- return node.text
-}
-
-func (node *ContainerNode) CodeLocation() types.CodeLocation {
- return node.codeLocation
-}
-
-func (node *ContainerNode) Flag() types.FlagType {
- return node.flag
-}
-
-//sort.Interface
-
-func (node *ContainerNode) Len() int {
- return len(node.subjectAndContainerNodes)
-}
-
-func (node *ContainerNode) Less(i, j int) bool {
- return node.subjectAndContainerNodes[i].text() < node.subjectAndContainerNodes[j].text()
-}
-
-func (node *ContainerNode) Swap(i, j int) {
- node.subjectAndContainerNodes[i], node.subjectAndContainerNodes[j] = node.subjectAndContainerNodes[j], node.subjectAndContainerNodes[i]
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/failer/failer.go b/vendor/github.com/onsi/ginkgo/internal/failer/failer.go
deleted file mode 100644
index 678ea25..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/failer/failer.go
+++ /dev/null
@@ -1,92 +0,0 @@
-package failer
-
-import (
- "fmt"
- "sync"
-
- "github.com/onsi/ginkgo/types"
-)
-
-type Failer struct {
- lock *sync.Mutex
- failure types.SpecFailure
- state types.SpecState
-}
-
-func New() *Failer {
- return &Failer{
- lock: &sync.Mutex{},
- state: types.SpecStatePassed,
- }
-}
-
-func (f *Failer) Panic(location types.CodeLocation, forwardedPanic interface{}) {
- f.lock.Lock()
- defer f.lock.Unlock()
-
- if f.state == types.SpecStatePassed {
- f.state = types.SpecStatePanicked
- f.failure = types.SpecFailure{
- Message: "Test Panicked",
- Location: location,
- ForwardedPanic: fmt.Sprintf("%v", forwardedPanic),
- }
- }
-}
-
-func (f *Failer) Timeout(location types.CodeLocation) {
- f.lock.Lock()
- defer f.lock.Unlock()
-
- if f.state == types.SpecStatePassed {
- f.state = types.SpecStateTimedOut
- f.failure = types.SpecFailure{
- Message: "Timed out",
- Location: location,
- }
- }
-}
-
-func (f *Failer) Fail(message string, location types.CodeLocation) {
- f.lock.Lock()
- defer f.lock.Unlock()
-
- if f.state == types.SpecStatePassed {
- f.state = types.SpecStateFailed
- f.failure = types.SpecFailure{
- Message: message,
- Location: location,
- }
- }
-}
-
-func (f *Failer) Drain(componentType types.SpecComponentType, componentIndex int, componentCodeLocation types.CodeLocation) (types.SpecFailure, types.SpecState) {
- f.lock.Lock()
- defer f.lock.Unlock()
-
- failure := f.failure
- outcome := f.state
- if outcome != types.SpecStatePassed {
- failure.ComponentType = componentType
- failure.ComponentIndex = componentIndex
- failure.ComponentCodeLocation = componentCodeLocation
- }
-
- f.state = types.SpecStatePassed
- f.failure = types.SpecFailure{}
-
- return failure, outcome
-}
-
-func (f *Failer) Skip(message string, location types.CodeLocation) {
- f.lock.Lock()
- defer f.lock.Unlock()
-
- if f.state == types.SpecStatePassed {
- f.state = types.SpecStateSkipped
- f.failure = types.SpecFailure{
- Message: message,
- Location: location,
- }
- }
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/leafnodes/benchmarker.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/benchmarker.go
deleted file mode 100644
index 393901e..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/leafnodes/benchmarker.go
+++ /dev/null
@@ -1,103 +0,0 @@
-package leafnodes
-
-import (
- "math"
- "time"
-
- "sync"
-
- "github.com/onsi/ginkgo/types"
-)
-
-type benchmarker struct {
- mu sync.Mutex
- measurements map[string]*types.SpecMeasurement
- orderCounter int
-}
-
-func newBenchmarker() *benchmarker {
- return &benchmarker{
- measurements: make(map[string]*types.SpecMeasurement),
- }
-}
-
-func (b *benchmarker) Time(name string, body func(), info ...interface{}) (elapsedTime time.Duration) {
- t := time.Now()
- body()
- elapsedTime = time.Since(t)
-
- b.mu.Lock()
- defer b.mu.Unlock()
- measurement := b.getMeasurement(name, "Fastest Time", "Slowest Time", "Average Time", "s", 3, info...)
- measurement.Results = append(measurement.Results, elapsedTime.Seconds())
-
- return
-}
-
-func (b *benchmarker) RecordValue(name string, value float64, info ...interface{}) {
- b.mu.Lock()
- measurement := b.getMeasurement(name, "Smallest", " Largest", " Average", "", 3, info...)
- defer b.mu.Unlock()
- measurement.Results = append(measurement.Results, value)
-}
-
-func (b *benchmarker) RecordValueWithPrecision(name string, value float64, units string, precision int, info ...interface{}) {
- b.mu.Lock()
- measurement := b.getMeasurement(name, "Smallest", " Largest", " Average", units, precision, info...)
- defer b.mu.Unlock()
- measurement.Results = append(measurement.Results, value)
-}
-
-func (b *benchmarker) getMeasurement(name string, smallestLabel string, largestLabel string, averageLabel string, units string, precision int, info ...interface{}) *types.SpecMeasurement {
- measurement, ok := b.measurements[name]
- if !ok {
- var computedInfo interface{}
- computedInfo = nil
- if len(info) > 0 {
- computedInfo = info[0]
- }
- measurement = &types.SpecMeasurement{
- Name: name,
- Info: computedInfo,
- Order: b.orderCounter,
- SmallestLabel: smallestLabel,
- LargestLabel: largestLabel,
- AverageLabel: averageLabel,
- Units: units,
- Precision: precision,
- Results: make([]float64, 0),
- }
- b.measurements[name] = measurement
- b.orderCounter++
- }
-
- return measurement
-}
-
-func (b *benchmarker) measurementsReport() map[string]*types.SpecMeasurement {
- b.mu.Lock()
- defer b.mu.Unlock()
- for _, measurement := range b.measurements {
- measurement.Smallest = math.MaxFloat64
- measurement.Largest = -math.MaxFloat64
- sum := float64(0)
- sumOfSquares := float64(0)
-
- for _, result := range measurement.Results {
- if result > measurement.Largest {
- measurement.Largest = result
- }
- if result < measurement.Smallest {
- measurement.Smallest = result
- }
- sum += result
- sumOfSquares += result * result
- }
-
- n := float64(len(measurement.Results))
- measurement.Average = sum / n
- measurement.StdDeviation = math.Sqrt(sumOfSquares/n - (sum/n)*(sum/n))
- }
-
- return b.measurements
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/leafnodes/interfaces.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/interfaces.go
deleted file mode 100644
index 8c3902d..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/leafnodes/interfaces.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package leafnodes
-
-import (
- "github.com/onsi/ginkgo/types"
-)
-
-type BasicNode interface {
- Type() types.SpecComponentType
- Run() (types.SpecState, types.SpecFailure)
- CodeLocation() types.CodeLocation
-}
-
-type SubjectNode interface {
- BasicNode
-
- Text() string
- Flag() types.FlagType
- Samples() int
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/leafnodes/it_node.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/it_node.go
deleted file mode 100644
index 6eded7b..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/leafnodes/it_node.go
+++ /dev/null
@@ -1,47 +0,0 @@
-package leafnodes
-
-import (
- "time"
-
- "github.com/onsi/ginkgo/internal/failer"
- "github.com/onsi/ginkgo/types"
-)
-
-type ItNode struct {
- runner *runner
-
- flag types.FlagType
- text string
-}
-
-func NewItNode(text string, body interface{}, flag types.FlagType, codeLocation types.CodeLocation, timeout time.Duration, failer *failer.Failer, componentIndex int) *ItNode {
- return &ItNode{
- runner: newRunner(body, codeLocation, timeout, failer, types.SpecComponentTypeIt, componentIndex),
- flag: flag,
- text: text,
- }
-}
-
-func (node *ItNode) Run() (outcome types.SpecState, failure types.SpecFailure) {
- return node.runner.run()
-}
-
-func (node *ItNode) Type() types.SpecComponentType {
- return types.SpecComponentTypeIt
-}
-
-func (node *ItNode) Text() string {
- return node.text
-}
-
-func (node *ItNode) Flag() types.FlagType {
- return node.flag
-}
-
-func (node *ItNode) CodeLocation() types.CodeLocation {
- return node.runner.codeLocation
-}
-
-func (node *ItNode) Samples() int {
- return 1
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/leafnodes/measure_node.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/measure_node.go
deleted file mode 100644
index 3ab9a6d..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/leafnodes/measure_node.go
+++ /dev/null
@@ -1,62 +0,0 @@
-package leafnodes
-
-import (
- "reflect"
-
- "github.com/onsi/ginkgo/internal/failer"
- "github.com/onsi/ginkgo/types"
-)
-
-type MeasureNode struct {
- runner *runner
-
- text string
- flag types.FlagType
- samples int
- benchmarker *benchmarker
-}
-
-func NewMeasureNode(text string, body interface{}, flag types.FlagType, codeLocation types.CodeLocation, samples int, failer *failer.Failer, componentIndex int) *MeasureNode {
- benchmarker := newBenchmarker()
-
- wrappedBody := func() {
- reflect.ValueOf(body).Call([]reflect.Value{reflect.ValueOf(benchmarker)})
- }
-
- return &MeasureNode{
- runner: newRunner(wrappedBody, codeLocation, 0, failer, types.SpecComponentTypeMeasure, componentIndex),
-
- text: text,
- flag: flag,
- samples: samples,
- benchmarker: benchmarker,
- }
-}
-
-func (node *MeasureNode) Run() (outcome types.SpecState, failure types.SpecFailure) {
- return node.runner.run()
-}
-
-func (node *MeasureNode) MeasurementsReport() map[string]*types.SpecMeasurement {
- return node.benchmarker.measurementsReport()
-}
-
-func (node *MeasureNode) Type() types.SpecComponentType {
- return types.SpecComponentTypeMeasure
-}
-
-func (node *MeasureNode) Text() string {
- return node.text
-}
-
-func (node *MeasureNode) Flag() types.FlagType {
- return node.flag
-}
-
-func (node *MeasureNode) CodeLocation() types.CodeLocation {
- return node.runner.codeLocation
-}
-
-func (node *MeasureNode) Samples() int {
- return node.samples
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/leafnodes/runner.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/runner.go
deleted file mode 100644
index 16cb66c..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/leafnodes/runner.go
+++ /dev/null
@@ -1,117 +0,0 @@
-package leafnodes
-
-import (
- "fmt"
- "reflect"
- "time"
-
- "github.com/onsi/ginkgo/internal/codelocation"
- "github.com/onsi/ginkgo/internal/failer"
- "github.com/onsi/ginkgo/types"
-)
-
-type runner struct {
- isAsync bool
- asyncFunc func(chan<- interface{})
- syncFunc func()
- codeLocation types.CodeLocation
- timeoutThreshold time.Duration
- nodeType types.SpecComponentType
- componentIndex int
- failer *failer.Failer
-}
-
-func newRunner(body interface{}, codeLocation types.CodeLocation, timeout time.Duration, failer *failer.Failer, nodeType types.SpecComponentType, componentIndex int) *runner {
- bodyType := reflect.TypeOf(body)
- if bodyType.Kind() != reflect.Func {
- panic(fmt.Sprintf("Expected a function but got something else at %v", codeLocation))
- }
-
- runner := &runner{
- codeLocation: codeLocation,
- timeoutThreshold: timeout,
- failer: failer,
- nodeType: nodeType,
- componentIndex: componentIndex,
- }
-
- switch bodyType.NumIn() {
- case 0:
- runner.syncFunc = body.(func())
- return runner
- case 1:
- if !(bodyType.In(0).Kind() == reflect.Chan && bodyType.In(0).Elem().Kind() == reflect.Interface) {
- panic(fmt.Sprintf("Must pass a Done channel to function at %v", codeLocation))
- }
-
- wrappedBody := func(done chan<- interface{}) {
- bodyValue := reflect.ValueOf(body)
- bodyValue.Call([]reflect.Value{reflect.ValueOf(done)})
- }
-
- runner.isAsync = true
- runner.asyncFunc = wrappedBody
- return runner
- }
-
- panic(fmt.Sprintf("Too many arguments to function at %v", codeLocation))
-}
-
-func (r *runner) run() (outcome types.SpecState, failure types.SpecFailure) {
- if r.isAsync {
- return r.runAsync()
- } else {
- return r.runSync()
- }
-}
-
-func (r *runner) runAsync() (outcome types.SpecState, failure types.SpecFailure) {
- done := make(chan interface{}, 1)
-
- go func() {
- finished := false
-
- defer func() {
- if e := recover(); e != nil || !finished {
- r.failer.Panic(codelocation.New(2), e)
- select {
- case <-done:
- break
- default:
- close(done)
- }
- }
- }()
-
- r.asyncFunc(done)
- finished = true
- }()
-
- // If this goroutine gets no CPU time before the select block,
- // the <-done case may complete even if the test took longer than the timeoutThreshold.
- // This can cause flaky behaviour, but we haven't seen it in the wild.
- select {
- case <-done:
- case <-time.After(r.timeoutThreshold):
- r.failer.Timeout(r.codeLocation)
- }
-
- failure, outcome = r.failer.Drain(r.nodeType, r.componentIndex, r.codeLocation)
- return
-}
-func (r *runner) runSync() (outcome types.SpecState, failure types.SpecFailure) {
- finished := false
-
- defer func() {
- if e := recover(); e != nil || !finished {
- r.failer.Panic(codelocation.New(2), e)
- }
-
- failure, outcome = r.failer.Drain(r.nodeType, r.componentIndex, r.codeLocation)
- }()
-
- r.syncFunc()
- finished = true
-
- return
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/leafnodes/setup_nodes.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/setup_nodes.go
deleted file mode 100644
index e3e9cb7..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/leafnodes/setup_nodes.go
+++ /dev/null
@@ -1,48 +0,0 @@
-package leafnodes
-
-import (
- "time"
-
- "github.com/onsi/ginkgo/internal/failer"
- "github.com/onsi/ginkgo/types"
-)
-
-type SetupNode struct {
- runner *runner
-}
-
-func (node *SetupNode) Run() (outcome types.SpecState, failure types.SpecFailure) {
- return node.runner.run()
-}
-
-func (node *SetupNode) Type() types.SpecComponentType {
- return node.runner.nodeType
-}
-
-func (node *SetupNode) CodeLocation() types.CodeLocation {
- return node.runner.codeLocation
-}
-
-func NewBeforeEachNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration, failer *failer.Failer, componentIndex int) *SetupNode {
- return &SetupNode{
- runner: newRunner(body, codeLocation, timeout, failer, types.SpecComponentTypeBeforeEach, componentIndex),
- }
-}
-
-func NewAfterEachNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration, failer *failer.Failer, componentIndex int) *SetupNode {
- return &SetupNode{
- runner: newRunner(body, codeLocation, timeout, failer, types.SpecComponentTypeAfterEach, componentIndex),
- }
-}
-
-func NewJustBeforeEachNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration, failer *failer.Failer, componentIndex int) *SetupNode {
- return &SetupNode{
- runner: newRunner(body, codeLocation, timeout, failer, types.SpecComponentTypeJustBeforeEach, componentIndex),
- }
-}
-
-func NewJustAfterEachNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration, failer *failer.Failer, componentIndex int) *SetupNode {
- return &SetupNode{
- runner: newRunner(body, codeLocation, timeout, failer, types.SpecComponentTypeJustAfterEach, componentIndex),
- }
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/leafnodes/suite_nodes.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/suite_nodes.go
deleted file mode 100644
index 80f16ed..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/leafnodes/suite_nodes.go
+++ /dev/null
@@ -1,55 +0,0 @@
-package leafnodes
-
-import (
- "time"
-
- "github.com/onsi/ginkgo/internal/failer"
- "github.com/onsi/ginkgo/types"
-)
-
-type SuiteNode interface {
- Run(parallelNode int, parallelTotal int, syncHost string) bool
- Passed() bool
- Summary() *types.SetupSummary
-}
-
-type simpleSuiteNode struct {
- runner *runner
- outcome types.SpecState
- failure types.SpecFailure
- runTime time.Duration
-}
-
-func (node *simpleSuiteNode) Run(parallelNode int, parallelTotal int, syncHost string) bool {
- t := time.Now()
- node.outcome, node.failure = node.runner.run()
- node.runTime = time.Since(t)
-
- return node.outcome == types.SpecStatePassed
-}
-
-func (node *simpleSuiteNode) Passed() bool {
- return node.outcome == types.SpecStatePassed
-}
-
-func (node *simpleSuiteNode) Summary() *types.SetupSummary {
- return &types.SetupSummary{
- ComponentType: node.runner.nodeType,
- CodeLocation: node.runner.codeLocation,
- State: node.outcome,
- RunTime: node.runTime,
- Failure: node.failure,
- }
-}
-
-func NewBeforeSuiteNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration, failer *failer.Failer) SuiteNode {
- return &simpleSuiteNode{
- runner: newRunner(body, codeLocation, timeout, failer, types.SpecComponentTypeBeforeSuite, 0),
- }
-}
-
-func NewAfterSuiteNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration, failer *failer.Failer) SuiteNode {
- return &simpleSuiteNode{
- runner: newRunner(body, codeLocation, timeout, failer, types.SpecComponentTypeAfterSuite, 0),
- }
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/leafnodes/synchronized_after_suite_node.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/synchronized_after_suite_node.go
deleted file mode 100644
index a721d0c..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/leafnodes/synchronized_after_suite_node.go
+++ /dev/null
@@ -1,90 +0,0 @@
-package leafnodes
-
-import (
- "encoding/json"
- "io/ioutil"
- "net/http"
- "time"
-
- "github.com/onsi/ginkgo/internal/failer"
- "github.com/onsi/ginkgo/types"
-)
-
-type synchronizedAfterSuiteNode struct {
- runnerA *runner
- runnerB *runner
-
- outcome types.SpecState
- failure types.SpecFailure
- runTime time.Duration
-}
-
-func NewSynchronizedAfterSuiteNode(bodyA interface{}, bodyB interface{}, codeLocation types.CodeLocation, timeout time.Duration, failer *failer.Failer) SuiteNode {
- return &synchronizedAfterSuiteNode{
- runnerA: newRunner(bodyA, codeLocation, timeout, failer, types.SpecComponentTypeAfterSuite, 0),
- runnerB: newRunner(bodyB, codeLocation, timeout, failer, types.SpecComponentTypeAfterSuite, 0),
- }
-}
-
-func (node *synchronizedAfterSuiteNode) Run(parallelNode int, parallelTotal int, syncHost string) bool {
- node.outcome, node.failure = node.runnerA.run()
-
- if parallelNode == 1 {
- if parallelTotal > 1 {
- node.waitUntilOtherNodesAreDone(syncHost)
- }
-
- outcome, failure := node.runnerB.run()
-
- if node.outcome == types.SpecStatePassed {
- node.outcome, node.failure = outcome, failure
- }
- }
-
- return node.outcome == types.SpecStatePassed
-}
-
-func (node *synchronizedAfterSuiteNode) Passed() bool {
- return node.outcome == types.SpecStatePassed
-}
-
-func (node *synchronizedAfterSuiteNode) Summary() *types.SetupSummary {
- return &types.SetupSummary{
- ComponentType: node.runnerA.nodeType,
- CodeLocation: node.runnerA.codeLocation,
- State: node.outcome,
- RunTime: node.runTime,
- Failure: node.failure,
- }
-}
-
-func (node *synchronizedAfterSuiteNode) waitUntilOtherNodesAreDone(syncHost string) {
- for {
- if node.canRun(syncHost) {
- return
- }
-
- time.Sleep(50 * time.Millisecond)
- }
-}
-
-func (node *synchronizedAfterSuiteNode) canRun(syncHost string) bool {
- resp, err := http.Get(syncHost + "/RemoteAfterSuiteData")
- if err != nil || resp.StatusCode != http.StatusOK {
- return false
- }
-
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- return false
- }
- resp.Body.Close()
-
- afterSuiteData := types.RemoteAfterSuiteData{}
- err = json.Unmarshal(body, &afterSuiteData)
- if err != nil {
- return false
- }
-
- return afterSuiteData.CanRun
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/leafnodes/synchronized_before_suite_node.go b/vendor/github.com/onsi/ginkgo/internal/leafnodes/synchronized_before_suite_node.go
deleted file mode 100644
index d5c8893..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/leafnodes/synchronized_before_suite_node.go
+++ /dev/null
@@ -1,181 +0,0 @@
-package leafnodes
-
-import (
- "bytes"
- "encoding/json"
- "io/ioutil"
- "net/http"
- "reflect"
- "time"
-
- "github.com/onsi/ginkgo/internal/failer"
- "github.com/onsi/ginkgo/types"
-)
-
-type synchronizedBeforeSuiteNode struct {
- runnerA *runner
- runnerB *runner
-
- data []byte
-
- outcome types.SpecState
- failure types.SpecFailure
- runTime time.Duration
-}
-
-func NewSynchronizedBeforeSuiteNode(bodyA interface{}, bodyB interface{}, codeLocation types.CodeLocation, timeout time.Duration, failer *failer.Failer) SuiteNode {
- node := &synchronizedBeforeSuiteNode{}
-
- node.runnerA = newRunner(node.wrapA(bodyA), codeLocation, timeout, failer, types.SpecComponentTypeBeforeSuite, 0)
- node.runnerB = newRunner(node.wrapB(bodyB), codeLocation, timeout, failer, types.SpecComponentTypeBeforeSuite, 0)
-
- return node
-}
-
-func (node *synchronizedBeforeSuiteNode) Run(parallelNode int, parallelTotal int, syncHost string) bool {
- t := time.Now()
- defer func() {
- node.runTime = time.Since(t)
- }()
-
- if parallelNode == 1 {
- node.outcome, node.failure = node.runA(parallelTotal, syncHost)
- } else {
- node.outcome, node.failure = node.waitForA(syncHost)
- }
-
- if node.outcome != types.SpecStatePassed {
- return false
- }
- node.outcome, node.failure = node.runnerB.run()
-
- return node.outcome == types.SpecStatePassed
-}
-
-func (node *synchronizedBeforeSuiteNode) runA(parallelTotal int, syncHost string) (types.SpecState, types.SpecFailure) {
- outcome, failure := node.runnerA.run()
-
- if parallelTotal > 1 {
- state := types.RemoteBeforeSuiteStatePassed
- if outcome != types.SpecStatePassed {
- state = types.RemoteBeforeSuiteStateFailed
- }
- json := (types.RemoteBeforeSuiteData{
- Data: node.data,
- State: state,
- }).ToJSON()
- http.Post(syncHost+"/BeforeSuiteState", "application/json", bytes.NewBuffer(json))
- }
-
- return outcome, failure
-}
-
-func (node *synchronizedBeforeSuiteNode) waitForA(syncHost string) (types.SpecState, types.SpecFailure) {
- failure := func(message string) types.SpecFailure {
- return types.SpecFailure{
- Message: message,
- Location: node.runnerA.codeLocation,
- ComponentType: node.runnerA.nodeType,
- ComponentIndex: node.runnerA.componentIndex,
- ComponentCodeLocation: node.runnerA.codeLocation,
- }
- }
- for {
- resp, err := http.Get(syncHost + "/BeforeSuiteState")
- if err != nil || resp.StatusCode != http.StatusOK {
- return types.SpecStateFailed, failure("Failed to fetch BeforeSuite state")
- }
-
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- return types.SpecStateFailed, failure("Failed to read BeforeSuite state")
- }
- resp.Body.Close()
-
- beforeSuiteData := types.RemoteBeforeSuiteData{}
- err = json.Unmarshal(body, &beforeSuiteData)
- if err != nil {
- return types.SpecStateFailed, failure("Failed to decode BeforeSuite state")
- }
-
- switch beforeSuiteData.State {
- case types.RemoteBeforeSuiteStatePassed:
- node.data = beforeSuiteData.Data
- return types.SpecStatePassed, types.SpecFailure{}
- case types.RemoteBeforeSuiteStateFailed:
- return types.SpecStateFailed, failure("BeforeSuite on Node 1 failed")
- case types.RemoteBeforeSuiteStateDisappeared:
- return types.SpecStateFailed, failure("Node 1 disappeared before completing BeforeSuite")
- }
-
- time.Sleep(50 * time.Millisecond)
- }
-}
-
-func (node *synchronizedBeforeSuiteNode) Passed() bool {
- return node.outcome == types.SpecStatePassed
-}
-
-func (node *synchronizedBeforeSuiteNode) Summary() *types.SetupSummary {
- return &types.SetupSummary{
- ComponentType: node.runnerA.nodeType,
- CodeLocation: node.runnerA.codeLocation,
- State: node.outcome,
- RunTime: node.runTime,
- Failure: node.failure,
- }
-}
-
-func (node *synchronizedBeforeSuiteNode) wrapA(bodyA interface{}) interface{} {
- typeA := reflect.TypeOf(bodyA)
- if typeA.Kind() != reflect.Func {
- panic("SynchronizedBeforeSuite expects a function as its first argument")
- }
-
- takesNothing := typeA.NumIn() == 0
- takesADoneChannel := typeA.NumIn() == 1 && typeA.In(0).Kind() == reflect.Chan && typeA.In(0).Elem().Kind() == reflect.Interface
- returnsBytes := typeA.NumOut() == 1 && typeA.Out(0).Kind() == reflect.Slice && typeA.Out(0).Elem().Kind() == reflect.Uint8
-
- if !((takesNothing || takesADoneChannel) && returnsBytes) {
- panic("SynchronizedBeforeSuite's first argument should be a function that returns []byte and either takes no arguments or takes a Done channel.")
- }
-
- if takesADoneChannel {
- return func(done chan<- interface{}) {
- out := reflect.ValueOf(bodyA).Call([]reflect.Value{reflect.ValueOf(done)})
- node.data = out[0].Interface().([]byte)
- }
- }
-
- return func() {
- out := reflect.ValueOf(bodyA).Call([]reflect.Value{})
- node.data = out[0].Interface().([]byte)
- }
-}
-
-func (node *synchronizedBeforeSuiteNode) wrapB(bodyB interface{}) interface{} {
- typeB := reflect.TypeOf(bodyB)
- if typeB.Kind() != reflect.Func {
- panic("SynchronizedBeforeSuite expects a function as its second argument")
- }
-
- returnsNothing := typeB.NumOut() == 0
- takesBytesOnly := typeB.NumIn() == 1 && typeB.In(0).Kind() == reflect.Slice && typeB.In(0).Elem().Kind() == reflect.Uint8
- takesBytesAndDone := typeB.NumIn() == 2 &&
- typeB.In(0).Kind() == reflect.Slice && typeB.In(0).Elem().Kind() == reflect.Uint8 &&
- typeB.In(1).Kind() == reflect.Chan && typeB.In(1).Elem().Kind() == reflect.Interface
-
- if !((takesBytesOnly || takesBytesAndDone) && returnsNothing) {
- panic("SynchronizedBeforeSuite's second argument should be a function that returns nothing and either takes []byte or ([]byte, Done)")
- }
-
- if takesBytesAndDone {
- return func(done chan<- interface{}) {
- reflect.ValueOf(bodyB).Call([]reflect.Value{reflect.ValueOf(node.data), reflect.ValueOf(done)})
- }
- }
-
- return func() {
- reflect.ValueOf(bodyB).Call([]reflect.Value{reflect.ValueOf(node.data)})
- }
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/aggregator.go b/vendor/github.com/onsi/ginkgo/internal/remote/aggregator.go
deleted file mode 100644
index f9ab300..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/remote/aggregator.go
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
-
-Aggregator is a reporter used by the Ginkgo CLI to aggregate and present parallel test output
-coherently as tests complete. You shouldn't need to use this in your code. To run tests in parallel:
-
- ginkgo -nodes=N
-
-where N is the number of nodes you desire.
-*/
-package remote
-
-import (
- "time"
-
- "github.com/onsi/ginkgo/config"
- "github.com/onsi/ginkgo/reporters/stenographer"
- "github.com/onsi/ginkgo/types"
-)
-
-type configAndSuite struct {
- config config.GinkgoConfigType
- summary *types.SuiteSummary
-}
-
-type Aggregator struct {
- nodeCount int
- config config.DefaultReporterConfigType
- stenographer stenographer.Stenographer
- result chan bool
-
- suiteBeginnings chan configAndSuite
- aggregatedSuiteBeginnings []configAndSuite
-
- beforeSuites chan *types.SetupSummary
- aggregatedBeforeSuites []*types.SetupSummary
-
- afterSuites chan *types.SetupSummary
- aggregatedAfterSuites []*types.SetupSummary
-
- specCompletions chan *types.SpecSummary
- completedSpecs []*types.SpecSummary
-
- suiteEndings chan *types.SuiteSummary
- aggregatedSuiteEndings []*types.SuiteSummary
- specs []*types.SpecSummary
-
- startTime time.Time
-}
-
-func NewAggregator(nodeCount int, result chan bool, config config.DefaultReporterConfigType, stenographer stenographer.Stenographer) *Aggregator {
- aggregator := &Aggregator{
- nodeCount: nodeCount,
- result: result,
- config: config,
- stenographer: stenographer,
-
- suiteBeginnings: make(chan configAndSuite),
- beforeSuites: make(chan *types.SetupSummary),
- afterSuites: make(chan *types.SetupSummary),
- specCompletions: make(chan *types.SpecSummary),
- suiteEndings: make(chan *types.SuiteSummary),
- }
-
- go aggregator.mux()
-
- return aggregator
-}
-
-func (aggregator *Aggregator) SpecSuiteWillBegin(config config.GinkgoConfigType, summary *types.SuiteSummary) {
- aggregator.suiteBeginnings <- configAndSuite{config, summary}
-}
-
-func (aggregator *Aggregator) BeforeSuiteDidRun(setupSummary *types.SetupSummary) {
- aggregator.beforeSuites <- setupSummary
-}
-
-func (aggregator *Aggregator) AfterSuiteDidRun(setupSummary *types.SetupSummary) {
- aggregator.afterSuites <- setupSummary
-}
-
-func (aggregator *Aggregator) SpecWillRun(specSummary *types.SpecSummary) {
- //noop
-}
-
-func (aggregator *Aggregator) SpecDidComplete(specSummary *types.SpecSummary) {
- aggregator.specCompletions <- specSummary
-}
-
-func (aggregator *Aggregator) SpecSuiteDidEnd(summary *types.SuiteSummary) {
- aggregator.suiteEndings <- summary
-}
-
-func (aggregator *Aggregator) mux() {
-loop:
- for {
- select {
- case configAndSuite := <-aggregator.suiteBeginnings:
- aggregator.registerSuiteBeginning(configAndSuite)
- case setupSummary := <-aggregator.beforeSuites:
- aggregator.registerBeforeSuite(setupSummary)
- case setupSummary := <-aggregator.afterSuites:
- aggregator.registerAfterSuite(setupSummary)
- case specSummary := <-aggregator.specCompletions:
- aggregator.registerSpecCompletion(specSummary)
- case suite := <-aggregator.suiteEndings:
- finished, passed := aggregator.registerSuiteEnding(suite)
- if finished {
- aggregator.result <- passed
- break loop
- }
- }
- }
-}
-
-func (aggregator *Aggregator) registerSuiteBeginning(configAndSuite configAndSuite) {
- aggregator.aggregatedSuiteBeginnings = append(aggregator.aggregatedSuiteBeginnings, configAndSuite)
-
- if len(aggregator.aggregatedSuiteBeginnings) == 1 {
- aggregator.startTime = time.Now()
- }
-
- if len(aggregator.aggregatedSuiteBeginnings) != aggregator.nodeCount {
- return
- }
-
- aggregator.stenographer.AnnounceSuite(configAndSuite.summary.SuiteDescription, configAndSuite.config.RandomSeed, configAndSuite.config.RandomizeAllSpecs, aggregator.config.Succinct)
-
- totalNumberOfSpecs := 0
- if len(aggregator.aggregatedSuiteBeginnings) > 0 {
- totalNumberOfSpecs = configAndSuite.summary.NumberOfSpecsBeforeParallelization
- }
-
- aggregator.stenographer.AnnounceTotalNumberOfSpecs(totalNumberOfSpecs, aggregator.config.Succinct)
- aggregator.stenographer.AnnounceAggregatedParallelRun(aggregator.nodeCount, aggregator.config.Succinct)
- aggregator.flushCompletedSpecs()
-}
-
-func (aggregator *Aggregator) registerBeforeSuite(setupSummary *types.SetupSummary) {
- aggregator.aggregatedBeforeSuites = append(aggregator.aggregatedBeforeSuites, setupSummary)
- aggregator.flushCompletedSpecs()
-}
-
-func (aggregator *Aggregator) registerAfterSuite(setupSummary *types.SetupSummary) {
- aggregator.aggregatedAfterSuites = append(aggregator.aggregatedAfterSuites, setupSummary)
- aggregator.flushCompletedSpecs()
-}
-
-func (aggregator *Aggregator) registerSpecCompletion(specSummary *types.SpecSummary) {
- aggregator.completedSpecs = append(aggregator.completedSpecs, specSummary)
- aggregator.specs = append(aggregator.specs, specSummary)
- aggregator.flushCompletedSpecs()
-}
-
-func (aggregator *Aggregator) flushCompletedSpecs() {
- if len(aggregator.aggregatedSuiteBeginnings) != aggregator.nodeCount {
- return
- }
-
- for _, setupSummary := range aggregator.aggregatedBeforeSuites {
- aggregator.announceBeforeSuite(setupSummary)
- }
-
- for _, specSummary := range aggregator.completedSpecs {
- aggregator.announceSpec(specSummary)
- }
-
- for _, setupSummary := range aggregator.aggregatedAfterSuites {
- aggregator.announceAfterSuite(setupSummary)
- }
-
- aggregator.aggregatedBeforeSuites = []*types.SetupSummary{}
- aggregator.completedSpecs = []*types.SpecSummary{}
- aggregator.aggregatedAfterSuites = []*types.SetupSummary{}
-}
-
-func (aggregator *Aggregator) announceBeforeSuite(setupSummary *types.SetupSummary) {
- aggregator.stenographer.AnnounceCapturedOutput(setupSummary.CapturedOutput)
- if setupSummary.State != types.SpecStatePassed {
- aggregator.stenographer.AnnounceBeforeSuiteFailure(setupSummary, aggregator.config.Succinct, aggregator.config.FullTrace)
- }
-}
-
-func (aggregator *Aggregator) announceAfterSuite(setupSummary *types.SetupSummary) {
- aggregator.stenographer.AnnounceCapturedOutput(setupSummary.CapturedOutput)
- if setupSummary.State != types.SpecStatePassed {
- aggregator.stenographer.AnnounceAfterSuiteFailure(setupSummary, aggregator.config.Succinct, aggregator.config.FullTrace)
- }
-}
-
-func (aggregator *Aggregator) announceSpec(specSummary *types.SpecSummary) {
- if aggregator.config.Verbose && specSummary.State != types.SpecStatePending && specSummary.State != types.SpecStateSkipped {
- aggregator.stenographer.AnnounceSpecWillRun(specSummary)
- }
-
- aggregator.stenographer.AnnounceCapturedOutput(specSummary.CapturedOutput)
-
- switch specSummary.State {
- case types.SpecStatePassed:
- if specSummary.IsMeasurement {
- aggregator.stenographer.AnnounceSuccesfulMeasurement(specSummary, aggregator.config.Succinct)
- } else if specSummary.RunTime.Seconds() >= aggregator.config.SlowSpecThreshold {
- aggregator.stenographer.AnnounceSuccesfulSlowSpec(specSummary, aggregator.config.Succinct)
- } else {
- aggregator.stenographer.AnnounceSuccesfulSpec(specSummary)
- }
-
- case types.SpecStatePending:
- aggregator.stenographer.AnnouncePendingSpec(specSummary, aggregator.config.NoisyPendings && !aggregator.config.Succinct)
- case types.SpecStateSkipped:
- aggregator.stenographer.AnnounceSkippedSpec(specSummary, aggregator.config.Succinct || !aggregator.config.NoisySkippings, aggregator.config.FullTrace)
- case types.SpecStateTimedOut:
- aggregator.stenographer.AnnounceSpecTimedOut(specSummary, aggregator.config.Succinct, aggregator.config.FullTrace)
- case types.SpecStatePanicked:
- aggregator.stenographer.AnnounceSpecPanicked(specSummary, aggregator.config.Succinct, aggregator.config.FullTrace)
- case types.SpecStateFailed:
- aggregator.stenographer.AnnounceSpecFailed(specSummary, aggregator.config.Succinct, aggregator.config.FullTrace)
- }
-}
-
-func (aggregator *Aggregator) registerSuiteEnding(suite *types.SuiteSummary) (finished bool, passed bool) {
- aggregator.aggregatedSuiteEndings = append(aggregator.aggregatedSuiteEndings, suite)
- if len(aggregator.aggregatedSuiteEndings) < aggregator.nodeCount {
- return false, false
- }
-
- aggregatedSuiteSummary := &types.SuiteSummary{}
- aggregatedSuiteSummary.SuiteSucceeded = true
-
- for _, suiteSummary := range aggregator.aggregatedSuiteEndings {
- if !suiteSummary.SuiteSucceeded {
- aggregatedSuiteSummary.SuiteSucceeded = false
- }
-
- aggregatedSuiteSummary.NumberOfSpecsThatWillBeRun += suiteSummary.NumberOfSpecsThatWillBeRun
- aggregatedSuiteSummary.NumberOfTotalSpecs += suiteSummary.NumberOfTotalSpecs
- aggregatedSuiteSummary.NumberOfPassedSpecs += suiteSummary.NumberOfPassedSpecs
- aggregatedSuiteSummary.NumberOfFailedSpecs += suiteSummary.NumberOfFailedSpecs
- aggregatedSuiteSummary.NumberOfPendingSpecs += suiteSummary.NumberOfPendingSpecs
- aggregatedSuiteSummary.NumberOfSkippedSpecs += suiteSummary.NumberOfSkippedSpecs
- aggregatedSuiteSummary.NumberOfFlakedSpecs += suiteSummary.NumberOfFlakedSpecs
- }
-
- aggregatedSuiteSummary.RunTime = time.Since(aggregator.startTime)
-
- aggregator.stenographer.SummarizeFailures(aggregator.specs)
- aggregator.stenographer.AnnounceSpecRunCompletion(aggregatedSuiteSummary, aggregator.config.Succinct)
-
- return true, aggregatedSuiteSummary.SuiteSucceeded
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/forwarding_reporter.go b/vendor/github.com/onsi/ginkgo/internal/remote/forwarding_reporter.go
deleted file mode 100644
index 284bc62..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/remote/forwarding_reporter.go
+++ /dev/null
@@ -1,147 +0,0 @@
-package remote
-
-import (
- "bytes"
- "encoding/json"
- "fmt"
- "io"
- "net/http"
- "os"
-
- "github.com/onsi/ginkgo/internal/writer"
- "github.com/onsi/ginkgo/reporters"
- "github.com/onsi/ginkgo/reporters/stenographer"
-
- "github.com/onsi/ginkgo/config"
- "github.com/onsi/ginkgo/types"
-)
-
-//An interface to net/http's client to allow the injection of fakes under test
-type Poster interface {
- Post(url string, bodyType string, body io.Reader) (resp *http.Response, err error)
-}
-
-/*
-The ForwardingReporter is a Ginkgo reporter that forwards information to
-a Ginkgo remote server.
-
-When streaming parallel test output, this repoter is automatically installed by Ginkgo.
-
-This is accomplished by passing in the GINKGO_REMOTE_REPORTING_SERVER environment variable to `go test`, the Ginkgo test runner
-detects this environment variable (which should contain the host of the server) and automatically installs a ForwardingReporter
-in place of Ginkgo's DefaultReporter.
-*/
-
-type ForwardingReporter struct {
- serverHost string
- poster Poster
- outputInterceptor OutputInterceptor
- debugMode bool
- debugFile *os.File
- nestedReporter *reporters.DefaultReporter
-}
-
-func NewForwardingReporter(config config.DefaultReporterConfigType, serverHost string, poster Poster, outputInterceptor OutputInterceptor, ginkgoWriter *writer.Writer, debugFile string) *ForwardingReporter {
- reporter := &ForwardingReporter{
- serverHost: serverHost,
- poster: poster,
- outputInterceptor: outputInterceptor,
- }
-
- if debugFile != "" {
- var err error
- reporter.debugMode = true
- reporter.debugFile, err = os.Create(debugFile)
- if err != nil {
- fmt.Println(err.Error())
- os.Exit(1)
- }
-
- if !config.Verbose {
- //if verbose is true then the GinkgoWriter emits to stdout. Don't _also_ redirect GinkgoWriter output as that will result in duplication.
- ginkgoWriter.AndRedirectTo(reporter.debugFile)
- }
- outputInterceptor.StreamTo(reporter.debugFile) //This is not working
-
- stenographer := stenographer.New(false, true, reporter.debugFile)
- config.Succinct = false
- config.Verbose = true
- config.FullTrace = true
- reporter.nestedReporter = reporters.NewDefaultReporter(config, stenographer)
- }
-
- return reporter
-}
-
-func (reporter *ForwardingReporter) post(path string, data interface{}) {
- encoded, _ := json.Marshal(data)
- buffer := bytes.NewBuffer(encoded)
- reporter.poster.Post(reporter.serverHost+path, "application/json", buffer)
-}
-
-func (reporter *ForwardingReporter) SpecSuiteWillBegin(conf config.GinkgoConfigType, summary *types.SuiteSummary) {
- data := struct {
- Config config.GinkgoConfigType `json:"config"`
- Summary *types.SuiteSummary `json:"suite-summary"`
- }{
- conf,
- summary,
- }
-
- reporter.outputInterceptor.StartInterceptingOutput()
- if reporter.debugMode {
- reporter.nestedReporter.SpecSuiteWillBegin(conf, summary)
- reporter.debugFile.Sync()
- }
- reporter.post("/SpecSuiteWillBegin", data)
-}
-
-func (reporter *ForwardingReporter) BeforeSuiteDidRun(setupSummary *types.SetupSummary) {
- output, _ := reporter.outputInterceptor.StopInterceptingAndReturnOutput()
- reporter.outputInterceptor.StartInterceptingOutput()
- setupSummary.CapturedOutput = output
- if reporter.debugMode {
- reporter.nestedReporter.BeforeSuiteDidRun(setupSummary)
- reporter.debugFile.Sync()
- }
- reporter.post("/BeforeSuiteDidRun", setupSummary)
-}
-
-func (reporter *ForwardingReporter) SpecWillRun(specSummary *types.SpecSummary) {
- if reporter.debugMode {
- reporter.nestedReporter.SpecWillRun(specSummary)
- reporter.debugFile.Sync()
- }
- reporter.post("/SpecWillRun", specSummary)
-}
-
-func (reporter *ForwardingReporter) SpecDidComplete(specSummary *types.SpecSummary) {
- output, _ := reporter.outputInterceptor.StopInterceptingAndReturnOutput()
- reporter.outputInterceptor.StartInterceptingOutput()
- specSummary.CapturedOutput = output
- if reporter.debugMode {
- reporter.nestedReporter.SpecDidComplete(specSummary)
- reporter.debugFile.Sync()
- }
- reporter.post("/SpecDidComplete", specSummary)
-}
-
-func (reporter *ForwardingReporter) AfterSuiteDidRun(setupSummary *types.SetupSummary) {
- output, _ := reporter.outputInterceptor.StopInterceptingAndReturnOutput()
- reporter.outputInterceptor.StartInterceptingOutput()
- setupSummary.CapturedOutput = output
- if reporter.debugMode {
- reporter.nestedReporter.AfterSuiteDidRun(setupSummary)
- reporter.debugFile.Sync()
- }
- reporter.post("/AfterSuiteDidRun", setupSummary)
-}
-
-func (reporter *ForwardingReporter) SpecSuiteDidEnd(summary *types.SuiteSummary) {
- reporter.outputInterceptor.StopInterceptingAndReturnOutput()
- if reporter.debugMode {
- reporter.nestedReporter.SpecSuiteDidEnd(summary)
- reporter.debugFile.Sync()
- }
- reporter.post("/SpecSuiteDidEnd", summary)
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor.go b/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor.go
deleted file mode 100644
index 5154abe..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package remote
-
-import "os"
-
-/*
-The OutputInterceptor is used by the ForwardingReporter to
-intercept and capture all stdin and stderr output during a test run.
-*/
-type OutputInterceptor interface {
- StartInterceptingOutput() error
- StopInterceptingAndReturnOutput() (string, error)
- StreamTo(*os.File)
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_unix.go b/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_unix.go
deleted file mode 100644
index ab6622a..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_unix.go
+++ /dev/null
@@ -1,83 +0,0 @@
-// +build freebsd openbsd netbsd dragonfly darwin linux solaris
-
-package remote
-
-import (
- "errors"
- "io/ioutil"
- "os"
-
- "github.com/hpcloud/tail"
-)
-
-func NewOutputInterceptor() OutputInterceptor {
- return &outputInterceptor{}
-}
-
-type outputInterceptor struct {
- redirectFile *os.File
- streamTarget *os.File
- intercepting bool
- tailer *tail.Tail
- doneTailing chan bool
-}
-
-func (interceptor *outputInterceptor) StartInterceptingOutput() error {
- if interceptor.intercepting {
- return errors.New("Already intercepting output!")
- }
- interceptor.intercepting = true
-
- var err error
-
- interceptor.redirectFile, err = ioutil.TempFile("", "ginkgo-output")
- if err != nil {
- return err
- }
-
- // Call a function in ./syscall_dup_*.go
- // If building for everything other than linux_arm64,
- // use a "normal" syscall.Dup2(oldfd, newfd) call. If building for linux_arm64 (which doesn't have syscall.Dup2)
- // call syscall.Dup3(oldfd, newfd, 0). They are nearly identical, see: http://linux.die.net/man/2/dup3
- syscallDup(int(interceptor.redirectFile.Fd()), 1)
- syscallDup(int(interceptor.redirectFile.Fd()), 2)
-
- if interceptor.streamTarget != nil {
- interceptor.tailer, _ = tail.TailFile(interceptor.redirectFile.Name(), tail.Config{Follow: true})
- interceptor.doneTailing = make(chan bool)
-
- go func() {
- for line := range interceptor.tailer.Lines {
- interceptor.streamTarget.Write([]byte(line.Text + "\n"))
- }
- close(interceptor.doneTailing)
- }()
- }
-
- return nil
-}
-
-func (interceptor *outputInterceptor) StopInterceptingAndReturnOutput() (string, error) {
- if !interceptor.intercepting {
- return "", errors.New("Not intercepting output!")
- }
-
- interceptor.redirectFile.Close()
- output, err := ioutil.ReadFile(interceptor.redirectFile.Name())
- os.Remove(interceptor.redirectFile.Name())
-
- interceptor.intercepting = false
-
- if interceptor.streamTarget != nil {
- interceptor.tailer.Stop()
- interceptor.tailer.Cleanup()
- <-interceptor.doneTailing
- interceptor.streamTarget.Sync()
- }
-
- return string(output), err
-}
-
-func (interceptor *outputInterceptor) StreamTo(out *os.File) {
- interceptor.streamTarget = out
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_win.go b/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_win.go
deleted file mode 100644
index 40c7903..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/remote/output_interceptor_win.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// +build windows
-
-package remote
-
-import (
- "errors"
- "os"
-)
-
-func NewOutputInterceptor() OutputInterceptor {
- return &outputInterceptor{}
-}
-
-type outputInterceptor struct {
- intercepting bool
-}
-
-func (interceptor *outputInterceptor) StartInterceptingOutput() error {
- if interceptor.intercepting {
- return errors.New("Already intercepting output!")
- }
- interceptor.intercepting = true
-
- // not working on windows...
-
- return nil
-}
-
-func (interceptor *outputInterceptor) StopInterceptingAndReturnOutput() (string, error) {
- // not working on windows...
- interceptor.intercepting = false
-
- return "", nil
-}
-
-func (interceptor *outputInterceptor) StreamTo(*os.File) {}
diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/server.go b/vendor/github.com/onsi/ginkgo/internal/remote/server.go
deleted file mode 100644
index 93e9dac..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/remote/server.go
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
-
-The remote package provides the pieces to allow Ginkgo test suites to report to remote listeners.
-This is used, primarily, to enable streaming parallel test output but has, in principal, broader applications (e.g. streaming test output to a browser).
-
-*/
-
-package remote
-
-import (
- "encoding/json"
- "io/ioutil"
- "net"
- "net/http"
- "sync"
-
- "github.com/onsi/ginkgo/internal/spec_iterator"
-
- "github.com/onsi/ginkgo/config"
- "github.com/onsi/ginkgo/reporters"
- "github.com/onsi/ginkgo/types"
-)
-
-/*
-Server spins up on an automatically selected port and listens for communication from the forwarding reporter.
-It then forwards that communication to attached reporters.
-*/
-type Server struct {
- listener net.Listener
- reporters []reporters.Reporter
- alives []func() bool
- lock *sync.Mutex
- beforeSuiteData types.RemoteBeforeSuiteData
- parallelTotal int
- counter int
-}
-
-//Create a new server, automatically selecting a port
-func NewServer(parallelTotal int) (*Server, error) {
- listener, err := net.Listen("tcp", "127.0.0.1:0")
- if err != nil {
- return nil, err
- }
- return &Server{
- listener: listener,
- lock: &sync.Mutex{},
- alives: make([]func() bool, parallelTotal),
- beforeSuiteData: types.RemoteBeforeSuiteData{Data: nil, State: types.RemoteBeforeSuiteStatePending},
- parallelTotal: parallelTotal,
- }, nil
-}
-
-//Start the server. You don't need to `go s.Start()`, just `s.Start()`
-func (server *Server) Start() {
- httpServer := &http.Server{}
- mux := http.NewServeMux()
- httpServer.Handler = mux
-
- //streaming endpoints
- mux.HandleFunc("/SpecSuiteWillBegin", server.specSuiteWillBegin)
- mux.HandleFunc("/BeforeSuiteDidRun", server.beforeSuiteDidRun)
- mux.HandleFunc("/AfterSuiteDidRun", server.afterSuiteDidRun)
- mux.HandleFunc("/SpecWillRun", server.specWillRun)
- mux.HandleFunc("/SpecDidComplete", server.specDidComplete)
- mux.HandleFunc("/SpecSuiteDidEnd", server.specSuiteDidEnd)
-
- //synchronization endpoints
- mux.HandleFunc("/BeforeSuiteState", server.handleBeforeSuiteState)
- mux.HandleFunc("/RemoteAfterSuiteData", server.handleRemoteAfterSuiteData)
- mux.HandleFunc("/counter", server.handleCounter)
- mux.HandleFunc("/has-counter", server.handleHasCounter) //for backward compatibility
-
- go httpServer.Serve(server.listener)
-}
-
-//Stop the server
-func (server *Server) Close() {
- server.listener.Close()
-}
-
-//The address the server can be reached it. Pass this into the `ForwardingReporter`.
-func (server *Server) Address() string {
- return "http://" + server.listener.Addr().String()
-}
-
-//
-// Streaming Endpoints
-//
-
-//The server will forward all received messages to Ginkgo reporters registered with `RegisterReporters`
-func (server *Server) readAll(request *http.Request) []byte {
- defer request.Body.Close()
- body, _ := ioutil.ReadAll(request.Body)
- return body
-}
-
-func (server *Server) RegisterReporters(reporters ...reporters.Reporter) {
- server.reporters = reporters
-}
-
-func (server *Server) specSuiteWillBegin(writer http.ResponseWriter, request *http.Request) {
- body := server.readAll(request)
-
- var data struct {
- Config config.GinkgoConfigType `json:"config"`
- Summary *types.SuiteSummary `json:"suite-summary"`
- }
-
- json.Unmarshal(body, &data)
-
- for _, reporter := range server.reporters {
- reporter.SpecSuiteWillBegin(data.Config, data.Summary)
- }
-}
-
-func (server *Server) beforeSuiteDidRun(writer http.ResponseWriter, request *http.Request) {
- body := server.readAll(request)
- var setupSummary *types.SetupSummary
- json.Unmarshal(body, &setupSummary)
-
- for _, reporter := range server.reporters {
- reporter.BeforeSuiteDidRun(setupSummary)
- }
-}
-
-func (server *Server) afterSuiteDidRun(writer http.ResponseWriter, request *http.Request) {
- body := server.readAll(request)
- var setupSummary *types.SetupSummary
- json.Unmarshal(body, &setupSummary)
-
- for _, reporter := range server.reporters {
- reporter.AfterSuiteDidRun(setupSummary)
- }
-}
-
-func (server *Server) specWillRun(writer http.ResponseWriter, request *http.Request) {
- body := server.readAll(request)
- var specSummary *types.SpecSummary
- json.Unmarshal(body, &specSummary)
-
- for _, reporter := range server.reporters {
- reporter.SpecWillRun(specSummary)
- }
-}
-
-func (server *Server) specDidComplete(writer http.ResponseWriter, request *http.Request) {
- body := server.readAll(request)
- var specSummary *types.SpecSummary
- json.Unmarshal(body, &specSummary)
-
- for _, reporter := range server.reporters {
- reporter.SpecDidComplete(specSummary)
- }
-}
-
-func (server *Server) specSuiteDidEnd(writer http.ResponseWriter, request *http.Request) {
- body := server.readAll(request)
- var suiteSummary *types.SuiteSummary
- json.Unmarshal(body, &suiteSummary)
-
- for _, reporter := range server.reporters {
- reporter.SpecSuiteDidEnd(suiteSummary)
- }
-}
-
-//
-// Synchronization Endpoints
-//
-
-func (server *Server) RegisterAlive(node int, alive func() bool) {
- server.lock.Lock()
- defer server.lock.Unlock()
- server.alives[node-1] = alive
-}
-
-func (server *Server) nodeIsAlive(node int) bool {
- server.lock.Lock()
- defer server.lock.Unlock()
- alive := server.alives[node-1]
- if alive == nil {
- return true
- }
- return alive()
-}
-
-func (server *Server) handleBeforeSuiteState(writer http.ResponseWriter, request *http.Request) {
- if request.Method == "POST" {
- dec := json.NewDecoder(request.Body)
- dec.Decode(&(server.beforeSuiteData))
- } else {
- beforeSuiteData := server.beforeSuiteData
- if beforeSuiteData.State == types.RemoteBeforeSuiteStatePending && !server.nodeIsAlive(1) {
- beforeSuiteData.State = types.RemoteBeforeSuiteStateDisappeared
- }
- enc := json.NewEncoder(writer)
- enc.Encode(beforeSuiteData)
- }
-}
-
-func (server *Server) handleRemoteAfterSuiteData(writer http.ResponseWriter, request *http.Request) {
- afterSuiteData := types.RemoteAfterSuiteData{
- CanRun: true,
- }
- for i := 2; i <= server.parallelTotal; i++ {
- afterSuiteData.CanRun = afterSuiteData.CanRun && !server.nodeIsAlive(i)
- }
-
- enc := json.NewEncoder(writer)
- enc.Encode(afterSuiteData)
-}
-
-func (server *Server) handleCounter(writer http.ResponseWriter, request *http.Request) {
- c := spec_iterator.Counter{}
- server.lock.Lock()
- c.Index = server.counter
- server.counter++
- server.lock.Unlock()
-
- json.NewEncoder(writer).Encode(c)
-}
-
-func (server *Server) handleHasCounter(writer http.ResponseWriter, request *http.Request) {
- writer.Write([]byte(""))
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_linux_arm64.go b/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_linux_arm64.go
deleted file mode 100644
index 9550d37..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_linux_arm64.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build linux,arm64
-
-package remote
-
-import "syscall"
-
-// linux_arm64 doesn't have syscall.Dup2 which ginkgo uses, so
-// use the nearly identical syscall.Dup3 instead
-func syscallDup(oldfd int, newfd int) (err error) {
- return syscall.Dup3(oldfd, newfd, 0)
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_solaris.go b/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_solaris.go
deleted file mode 100644
index 75ef7fb..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_solaris.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build solaris
-
-package remote
-
-import "golang.org/x/sys/unix"
-
-func syscallDup(oldfd int, newfd int) (err error) {
- return unix.Dup2(oldfd, newfd)
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_unix.go b/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_unix.go
deleted file mode 100644
index ef62559..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/remote/syscall_dup_unix.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build !linux !arm64
-// +build !windows
-// +build !solaris
-
-package remote
-
-import "syscall"
-
-func syscallDup(oldfd int, newfd int) (err error) {
- return syscall.Dup2(oldfd, newfd)
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/spec/spec.go b/vendor/github.com/onsi/ginkgo/internal/spec/spec.go
deleted file mode 100644
index 6eef40a..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/spec/spec.go
+++ /dev/null
@@ -1,247 +0,0 @@
-package spec
-
-import (
- "fmt"
- "io"
- "time"
-
- "sync"
-
- "github.com/onsi/ginkgo/internal/containernode"
- "github.com/onsi/ginkgo/internal/leafnodes"
- "github.com/onsi/ginkgo/types"
-)
-
-type Spec struct {
- subject leafnodes.SubjectNode
- focused bool
- announceProgress bool
-
- containers []*containernode.ContainerNode
-
- state types.SpecState
- runTime time.Duration
- startTime time.Time
- failure types.SpecFailure
- previousFailures bool
-
- stateMutex *sync.Mutex
-}
-
-func New(subject leafnodes.SubjectNode, containers []*containernode.ContainerNode, announceProgress bool) *Spec {
- spec := &Spec{
- subject: subject,
- containers: containers,
- focused: subject.Flag() == types.FlagTypeFocused,
- announceProgress: announceProgress,
- stateMutex: &sync.Mutex{},
- }
-
- spec.processFlag(subject.Flag())
- for i := len(containers) - 1; i >= 0; i-- {
- spec.processFlag(containers[i].Flag())
- }
-
- return spec
-}
-
-func (spec *Spec) processFlag(flag types.FlagType) {
- if flag == types.FlagTypeFocused {
- spec.focused = true
- } else if flag == types.FlagTypePending {
- spec.setState(types.SpecStatePending)
- }
-}
-
-func (spec *Spec) Skip() {
- spec.setState(types.SpecStateSkipped)
-}
-
-func (spec *Spec) Failed() bool {
- return spec.getState() == types.SpecStateFailed || spec.getState() == types.SpecStatePanicked || spec.getState() == types.SpecStateTimedOut
-}
-
-func (spec *Spec) Passed() bool {
- return spec.getState() == types.SpecStatePassed
-}
-
-func (spec *Spec) Flaked() bool {
- return spec.getState() == types.SpecStatePassed && spec.previousFailures
-}
-
-func (spec *Spec) Pending() bool {
- return spec.getState() == types.SpecStatePending
-}
-
-func (spec *Spec) Skipped() bool {
- return spec.getState() == types.SpecStateSkipped
-}
-
-func (spec *Spec) Focused() bool {
- return spec.focused
-}
-
-func (spec *Spec) IsMeasurement() bool {
- return spec.subject.Type() == types.SpecComponentTypeMeasure
-}
-
-func (spec *Spec) Summary(suiteID string) *types.SpecSummary {
- componentTexts := make([]string, len(spec.containers)+1)
- componentCodeLocations := make([]types.CodeLocation, len(spec.containers)+1)
-
- for i, container := range spec.containers {
- componentTexts[i] = container.Text()
- componentCodeLocations[i] = container.CodeLocation()
- }
-
- componentTexts[len(spec.containers)] = spec.subject.Text()
- componentCodeLocations[len(spec.containers)] = spec.subject.CodeLocation()
-
- runTime := spec.runTime
- if runTime == 0 && !spec.startTime.IsZero() {
- runTime = time.Since(spec.startTime)
- }
-
- return &types.SpecSummary{
- IsMeasurement: spec.IsMeasurement(),
- NumberOfSamples: spec.subject.Samples(),
- ComponentTexts: componentTexts,
- ComponentCodeLocations: componentCodeLocations,
- State: spec.getState(),
- RunTime: runTime,
- Failure: spec.failure,
- Measurements: spec.measurementsReport(),
- SuiteID: suiteID,
- }
-}
-
-func (spec *Spec) ConcatenatedString() string {
- s := ""
- for _, container := range spec.containers {
- s += container.Text() + " "
- }
-
- return s + spec.subject.Text()
-}
-
-func (spec *Spec) Run(writer io.Writer) {
- if spec.getState() == types.SpecStateFailed {
- spec.previousFailures = true
- }
-
- spec.startTime = time.Now()
- defer func() {
- spec.runTime = time.Since(spec.startTime)
- }()
-
- for sample := 0; sample < spec.subject.Samples(); sample++ {
- spec.runSample(sample, writer)
-
- if spec.getState() != types.SpecStatePassed {
- return
- }
- }
-}
-
-func (spec *Spec) getState() types.SpecState {
- spec.stateMutex.Lock()
- defer spec.stateMutex.Unlock()
- return spec.state
-}
-
-func (spec *Spec) setState(state types.SpecState) {
- spec.stateMutex.Lock()
- defer spec.stateMutex.Unlock()
- spec.state = state
-}
-
-func (spec *Spec) runSample(sample int, writer io.Writer) {
- spec.setState(types.SpecStatePassed)
- spec.failure = types.SpecFailure{}
- innerMostContainerIndexToUnwind := -1
-
- defer func() {
- for i := innerMostContainerIndexToUnwind; i >= 0; i-- {
- container := spec.containers[i]
- for _, justAfterEach := range container.SetupNodesOfType(types.SpecComponentTypeJustAfterEach) {
- spec.announceSetupNode(writer, "JustAfterEach", container, justAfterEach)
- justAfterEachState, justAfterEachFailure := justAfterEach.Run()
- if justAfterEachState != types.SpecStatePassed && spec.state == types.SpecStatePassed {
- spec.state = justAfterEachState
- spec.failure = justAfterEachFailure
- }
- }
- }
-
- for i := innerMostContainerIndexToUnwind; i >= 0; i-- {
- container := spec.containers[i]
- for _, afterEach := range container.SetupNodesOfType(types.SpecComponentTypeAfterEach) {
- spec.announceSetupNode(writer, "AfterEach", container, afterEach)
- afterEachState, afterEachFailure := afterEach.Run()
- if afterEachState != types.SpecStatePassed && spec.getState() == types.SpecStatePassed {
- spec.setState(afterEachState)
- spec.failure = afterEachFailure
- }
- }
- }
- }()
-
- for i, container := range spec.containers {
- innerMostContainerIndexToUnwind = i
- for _, beforeEach := range container.SetupNodesOfType(types.SpecComponentTypeBeforeEach) {
- spec.announceSetupNode(writer, "BeforeEach", container, beforeEach)
- s, f := beforeEach.Run()
- spec.failure = f
- spec.setState(s)
- if spec.getState() != types.SpecStatePassed {
- return
- }
- }
- }
-
- for _, container := range spec.containers {
- for _, justBeforeEach := range container.SetupNodesOfType(types.SpecComponentTypeJustBeforeEach) {
- spec.announceSetupNode(writer, "JustBeforeEach", container, justBeforeEach)
- s, f := justBeforeEach.Run()
- spec.failure = f
- spec.setState(s)
- if spec.getState() != types.SpecStatePassed {
- return
- }
- }
- }
-
- spec.announceSubject(writer, spec.subject)
- s, f := spec.subject.Run()
- spec.failure = f
- spec.setState(s)
-}
-
-func (spec *Spec) announceSetupNode(writer io.Writer, nodeType string, container *containernode.ContainerNode, setupNode leafnodes.BasicNode) {
- if spec.announceProgress {
- s := fmt.Sprintf("[%s] %s\n %s\n", nodeType, container.Text(), setupNode.CodeLocation().String())
- writer.Write([]byte(s))
- }
-}
-
-func (spec *Spec) announceSubject(writer io.Writer, subject leafnodes.SubjectNode) {
- if spec.announceProgress {
- nodeType := ""
- switch subject.Type() {
- case types.SpecComponentTypeIt:
- nodeType = "It"
- case types.SpecComponentTypeMeasure:
- nodeType = "Measure"
- }
- s := fmt.Sprintf("[%s] %s\n %s\n", nodeType, subject.Text(), subject.CodeLocation().String())
- writer.Write([]byte(s))
- }
-}
-
-func (spec *Spec) measurementsReport() map[string]*types.SpecMeasurement {
- if !spec.IsMeasurement() || spec.Failed() {
- return map[string]*types.SpecMeasurement{}
- }
-
- return spec.subject.(*leafnodes.MeasureNode).MeasurementsReport()
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/spec/specs.go b/vendor/github.com/onsi/ginkgo/internal/spec/specs.go
deleted file mode 100644
index 8a20071..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/spec/specs.go
+++ /dev/null
@@ -1,144 +0,0 @@
-package spec
-
-import (
- "math/rand"
- "regexp"
- "sort"
-)
-
-type Specs struct {
- specs []*Spec
- names []string
-
- hasProgrammaticFocus bool
- RegexScansFilePath bool
-}
-
-func NewSpecs(specs []*Spec) *Specs {
- names := make([]string, len(specs))
- for i, spec := range specs {
- names[i] = spec.ConcatenatedString()
- }
- return &Specs{
- specs: specs,
- names: names,
- }
-}
-
-func (e *Specs) Specs() []*Spec {
- return e.specs
-}
-
-func (e *Specs) HasProgrammaticFocus() bool {
- return e.hasProgrammaticFocus
-}
-
-func (e *Specs) Shuffle(r *rand.Rand) {
- sort.Sort(e)
- permutation := r.Perm(len(e.specs))
- shuffledSpecs := make([]*Spec, len(e.specs))
- names := make([]string, len(e.specs))
- for i, j := range permutation {
- shuffledSpecs[i] = e.specs[j]
- names[i] = e.names[j]
- }
- e.specs = shuffledSpecs
- e.names = names
-}
-
-func (e *Specs) ApplyFocus(description string, focusString string, skipString string) {
- if focusString == "" && skipString == "" {
- e.applyProgrammaticFocus()
- } else {
- e.applyRegExpFocusAndSkip(description, focusString, skipString)
- }
-}
-
-func (e *Specs) applyProgrammaticFocus() {
- e.hasProgrammaticFocus = false
- for _, spec := range e.specs {
- if spec.Focused() && !spec.Pending() {
- e.hasProgrammaticFocus = true
- break
- }
- }
-
- if e.hasProgrammaticFocus {
- for _, spec := range e.specs {
- if !spec.Focused() {
- spec.Skip()
- }
- }
- }
-}
-
-// toMatch returns a byte[] to be used by regex matchers. When adding new behaviours to the matching function,
-// this is the place which we append to.
-func (e *Specs) toMatch(description string, i int) []byte {
- if i > len(e.names) {
- return nil
- }
- if e.RegexScansFilePath {
- return []byte(
- description + " " +
- e.names[i] + " " +
- e.specs[i].subject.CodeLocation().FileName)
- } else {
- return []byte(
- description + " " +
- e.names[i])
- }
-}
-
-func (e *Specs) applyRegExpFocusAndSkip(description string, focusString string, skipString string) {
- var focusFilter *regexp.Regexp
- if focusString != "" {
- focusFilter = regexp.MustCompile(focusString)
- }
- var skipFilter *regexp.Regexp
- if skipString != "" {
- skipFilter = regexp.MustCompile(skipString)
- }
-
- for i, spec := range e.specs {
- matchesFocus := true
- matchesSkip := false
-
- toMatch := e.toMatch(description, i)
-
- if focusFilter != nil {
- matchesFocus = focusFilter.Match(toMatch)
- }
-
- if skipFilter != nil {
- matchesSkip = skipFilter.Match(toMatch)
- }
-
- if !matchesFocus || matchesSkip {
- spec.Skip()
- }
- }
-}
-
-func (e *Specs) SkipMeasurements() {
- for _, spec := range e.specs {
- if spec.IsMeasurement() {
- spec.Skip()
- }
- }
-}
-
-//sort.Interface
-
-func (e *Specs) Len() int {
- return len(e.specs)
-}
-
-func (e *Specs) Less(i, j int) bool {
- return e.names[i] < e.names[j]
-}
-
-func (e *Specs) Swap(i, j int) {
- e.names[i], e.names[j] = e.names[j], e.names[i]
- e.specs[i], e.specs[j] = e.specs[j], e.specs[i]
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/spec_iterator/index_computer.go b/vendor/github.com/onsi/ginkgo/internal/spec_iterator/index_computer.go
deleted file mode 100644
index 8227255..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/spec_iterator/index_computer.go
+++ /dev/null
@@ -1,55 +0,0 @@
-package spec_iterator
-
-func ParallelizedIndexRange(length int, parallelTotal int, parallelNode int) (startIndex int, count int) {
- if length == 0 {
- return 0, 0
- }
-
- // We have more nodes than tests. Trivial case.
- if parallelTotal >= length {
- if parallelNode > length {
- return 0, 0
- } else {
- return parallelNode - 1, 1
- }
- }
-
- // This is the minimum amount of tests that a node will be required to run
- minTestsPerNode := length / parallelTotal
-
- // This is the maximum amount of tests that a node will be required to run
- // The algorithm guarantees that this would be equal to at least the minimum amount
- // and at most one more
- maxTestsPerNode := minTestsPerNode
- if length%parallelTotal != 0 {
- maxTestsPerNode++
- }
-
- // Number of nodes that will have to run the maximum amount of tests per node
- numMaxLoadNodes := length % parallelTotal
-
- // Number of nodes that precede the current node and will have to run the maximum amount of tests per node
- var numPrecedingMaxLoadNodes int
- if parallelNode > numMaxLoadNodes {
- numPrecedingMaxLoadNodes = numMaxLoadNodes
- } else {
- numPrecedingMaxLoadNodes = parallelNode - 1
- }
-
- // Number of nodes that precede the current node and will have to run the minimum amount of tests per node
- var numPrecedingMinLoadNodes int
- if parallelNode <= numMaxLoadNodes {
- numPrecedingMinLoadNodes = 0
- } else {
- numPrecedingMinLoadNodes = parallelNode - numMaxLoadNodes - 1
- }
-
- // Evaluate the test start index and number of tests to run
- startIndex = numPrecedingMaxLoadNodes*maxTestsPerNode + numPrecedingMinLoadNodes*minTestsPerNode
- if parallelNode > numMaxLoadNodes {
- count = minTestsPerNode
- } else {
- count = maxTestsPerNode
- }
- return
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/spec_iterator/parallel_spec_iterator.go b/vendor/github.com/onsi/ginkgo/internal/spec_iterator/parallel_spec_iterator.go
deleted file mode 100644
index 99f548b..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/spec_iterator/parallel_spec_iterator.go
+++ /dev/null
@@ -1,59 +0,0 @@
-package spec_iterator
-
-import (
- "encoding/json"
- "fmt"
- "net/http"
-
- "github.com/onsi/ginkgo/internal/spec"
-)
-
-type ParallelIterator struct {
- specs []*spec.Spec
- host string
- client *http.Client
-}
-
-func NewParallelIterator(specs []*spec.Spec, host string) *ParallelIterator {
- return &ParallelIterator{
- specs: specs,
- host: host,
- client: &http.Client{},
- }
-}
-
-func (s *ParallelIterator) Next() (*spec.Spec, error) {
- resp, err := s.client.Get(s.host + "/counter")
- if err != nil {
- return nil, err
- }
- defer resp.Body.Close()
-
- if resp.StatusCode != http.StatusOK {
- return nil, fmt.Errorf("unexpected status code %d", resp.StatusCode)
- }
-
- var counter Counter
- err = json.NewDecoder(resp.Body).Decode(&counter)
- if err != nil {
- return nil, err
- }
-
- if counter.Index >= len(s.specs) {
- return nil, ErrClosed
- }
-
- return s.specs[counter.Index], nil
-}
-
-func (s *ParallelIterator) NumberOfSpecsPriorToIteration() int {
- return len(s.specs)
-}
-
-func (s *ParallelIterator) NumberOfSpecsToProcessIfKnown() (int, bool) {
- return -1, false
-}
-
-func (s *ParallelIterator) NumberOfSpecsThatWillBeRunIfKnown() (int, bool) {
- return -1, false
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/spec_iterator/serial_spec_iterator.go b/vendor/github.com/onsi/ginkgo/internal/spec_iterator/serial_spec_iterator.go
deleted file mode 100644
index a51c93b..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/spec_iterator/serial_spec_iterator.go
+++ /dev/null
@@ -1,45 +0,0 @@
-package spec_iterator
-
-import (
- "github.com/onsi/ginkgo/internal/spec"
-)
-
-type SerialIterator struct {
- specs []*spec.Spec
- index int
-}
-
-func NewSerialIterator(specs []*spec.Spec) *SerialIterator {
- return &SerialIterator{
- specs: specs,
- index: 0,
- }
-}
-
-func (s *SerialIterator) Next() (*spec.Spec, error) {
- if s.index >= len(s.specs) {
- return nil, ErrClosed
- }
-
- spec := s.specs[s.index]
- s.index += 1
- return spec, nil
-}
-
-func (s *SerialIterator) NumberOfSpecsPriorToIteration() int {
- return len(s.specs)
-}
-
-func (s *SerialIterator) NumberOfSpecsToProcessIfKnown() (int, bool) {
- return len(s.specs), true
-}
-
-func (s *SerialIterator) NumberOfSpecsThatWillBeRunIfKnown() (int, bool) {
- count := 0
- for _, s := range s.specs {
- if !s.Skipped() && !s.Pending() {
- count += 1
- }
- }
- return count, true
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/spec_iterator/sharded_parallel_spec_iterator.go b/vendor/github.com/onsi/ginkgo/internal/spec_iterator/sharded_parallel_spec_iterator.go
deleted file mode 100644
index ad4a3ea..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/spec_iterator/sharded_parallel_spec_iterator.go
+++ /dev/null
@@ -1,47 +0,0 @@
-package spec_iterator
-
-import "github.com/onsi/ginkgo/internal/spec"
-
-type ShardedParallelIterator struct {
- specs []*spec.Spec
- index int
- maxIndex int
-}
-
-func NewShardedParallelIterator(specs []*spec.Spec, total int, node int) *ShardedParallelIterator {
- startIndex, count := ParallelizedIndexRange(len(specs), total, node)
-
- return &ShardedParallelIterator{
- specs: specs,
- index: startIndex,
- maxIndex: startIndex + count,
- }
-}
-
-func (s *ShardedParallelIterator) Next() (*spec.Spec, error) {
- if s.index >= s.maxIndex {
- return nil, ErrClosed
- }
-
- spec := s.specs[s.index]
- s.index += 1
- return spec, nil
-}
-
-func (s *ShardedParallelIterator) NumberOfSpecsPriorToIteration() int {
- return len(s.specs)
-}
-
-func (s *ShardedParallelIterator) NumberOfSpecsToProcessIfKnown() (int, bool) {
- return s.maxIndex - s.index, true
-}
-
-func (s *ShardedParallelIterator) NumberOfSpecsThatWillBeRunIfKnown() (int, bool) {
- count := 0
- for i := s.index; i < s.maxIndex; i += 1 {
- if !s.specs[i].Skipped() && !s.specs[i].Pending() {
- count += 1
- }
- }
- return count, true
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/spec_iterator/spec_iterator.go b/vendor/github.com/onsi/ginkgo/internal/spec_iterator/spec_iterator.go
deleted file mode 100644
index 74bffad..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/spec_iterator/spec_iterator.go
+++ /dev/null
@@ -1,20 +0,0 @@
-package spec_iterator
-
-import (
- "errors"
-
- "github.com/onsi/ginkgo/internal/spec"
-)
-
-var ErrClosed = errors.New("no more specs to run")
-
-type SpecIterator interface {
- Next() (*spec.Spec, error)
- NumberOfSpecsPriorToIteration() int
- NumberOfSpecsToProcessIfKnown() (int, bool)
- NumberOfSpecsThatWillBeRunIfKnown() (int, bool)
-}
-
-type Counter struct {
- Index int `json:"index"`
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/specrunner/random_id.go b/vendor/github.com/onsi/ginkgo/internal/specrunner/random_id.go
deleted file mode 100644
index a0b8b62..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/specrunner/random_id.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package specrunner
-
-import (
- "crypto/rand"
- "fmt"
-)
-
-func randomID() string {
- b := make([]byte, 8)
- _, err := rand.Read(b)
- if err != nil {
- return ""
- }
- return fmt.Sprintf("%x-%x-%x-%x", b[0:2], b[2:4], b[4:6], b[6:8])
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/specrunner/spec_runner.go b/vendor/github.com/onsi/ginkgo/internal/specrunner/spec_runner.go
deleted file mode 100644
index c9a0a60..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/specrunner/spec_runner.go
+++ /dev/null
@@ -1,411 +0,0 @@
-package specrunner
-
-import (
- "fmt"
- "os"
- "os/signal"
- "sync"
- "syscall"
-
- "github.com/onsi/ginkgo/internal/spec_iterator"
-
- "github.com/onsi/ginkgo/config"
- "github.com/onsi/ginkgo/internal/leafnodes"
- "github.com/onsi/ginkgo/internal/spec"
- Writer "github.com/onsi/ginkgo/internal/writer"
- "github.com/onsi/ginkgo/reporters"
- "github.com/onsi/ginkgo/types"
-
- "time"
-)
-
-type SpecRunner struct {
- description string
- beforeSuiteNode leafnodes.SuiteNode
- iterator spec_iterator.SpecIterator
- afterSuiteNode leafnodes.SuiteNode
- reporters []reporters.Reporter
- startTime time.Time
- suiteID string
- runningSpec *spec.Spec
- writer Writer.WriterInterface
- config config.GinkgoConfigType
- interrupted bool
- processedSpecs []*spec.Spec
- lock *sync.Mutex
-}
-
-func New(description string, beforeSuiteNode leafnodes.SuiteNode, iterator spec_iterator.SpecIterator, afterSuiteNode leafnodes.SuiteNode, reporters []reporters.Reporter, writer Writer.WriterInterface, config config.GinkgoConfigType) *SpecRunner {
- return &SpecRunner{
- description: description,
- beforeSuiteNode: beforeSuiteNode,
- iterator: iterator,
- afterSuiteNode: afterSuiteNode,
- reporters: reporters,
- writer: writer,
- config: config,
- suiteID: randomID(),
- lock: &sync.Mutex{},
- }
-}
-
-func (runner *SpecRunner) Run() bool {
- if runner.config.DryRun {
- runner.performDryRun()
- return true
- }
-
- runner.reportSuiteWillBegin()
- signalRegistered := make(chan struct{})
- go runner.registerForInterrupts(signalRegistered)
- <-signalRegistered
-
- suitePassed := runner.runBeforeSuite()
-
- if suitePassed {
- suitePassed = runner.runSpecs()
- }
-
- runner.blockForeverIfInterrupted()
-
- suitePassed = runner.runAfterSuite() && suitePassed
-
- runner.reportSuiteDidEnd(suitePassed)
-
- return suitePassed
-}
-
-func (runner *SpecRunner) performDryRun() {
- runner.reportSuiteWillBegin()
-
- if runner.beforeSuiteNode != nil {
- summary := runner.beforeSuiteNode.Summary()
- summary.State = types.SpecStatePassed
- runner.reportBeforeSuite(summary)
- }
-
- for {
- spec, err := runner.iterator.Next()
- if err == spec_iterator.ErrClosed {
- break
- }
- if err != nil {
- fmt.Println("failed to iterate over tests:\n" + err.Error())
- break
- }
-
- runner.processedSpecs = append(runner.processedSpecs, spec)
-
- summary := spec.Summary(runner.suiteID)
- runner.reportSpecWillRun(summary)
- if summary.State == types.SpecStateInvalid {
- summary.State = types.SpecStatePassed
- }
- runner.reportSpecDidComplete(summary, false)
- }
-
- if runner.afterSuiteNode != nil {
- summary := runner.afterSuiteNode.Summary()
- summary.State = types.SpecStatePassed
- runner.reportAfterSuite(summary)
- }
-
- runner.reportSuiteDidEnd(true)
-}
-
-func (runner *SpecRunner) runBeforeSuite() bool {
- if runner.beforeSuiteNode == nil || runner.wasInterrupted() {
- return true
- }
-
- runner.writer.Truncate()
- conf := runner.config
- passed := runner.beforeSuiteNode.Run(conf.ParallelNode, conf.ParallelTotal, conf.SyncHost)
- if !passed {
- runner.writer.DumpOut()
- }
- runner.reportBeforeSuite(runner.beforeSuiteNode.Summary())
- return passed
-}
-
-func (runner *SpecRunner) runAfterSuite() bool {
- if runner.afterSuiteNode == nil {
- return true
- }
-
- runner.writer.Truncate()
- conf := runner.config
- passed := runner.afterSuiteNode.Run(conf.ParallelNode, conf.ParallelTotal, conf.SyncHost)
- if !passed {
- runner.writer.DumpOut()
- }
- runner.reportAfterSuite(runner.afterSuiteNode.Summary())
- return passed
-}
-
-func (runner *SpecRunner) runSpecs() bool {
- suiteFailed := false
- skipRemainingSpecs := false
- for {
- spec, err := runner.iterator.Next()
- if err == spec_iterator.ErrClosed {
- break
- }
- if err != nil {
- fmt.Println("failed to iterate over tests:\n" + err.Error())
- suiteFailed = true
- break
- }
-
- runner.processedSpecs = append(runner.processedSpecs, spec)
-
- if runner.wasInterrupted() {
- break
- }
- if skipRemainingSpecs {
- spec.Skip()
- }
-
- if !spec.Skipped() && !spec.Pending() {
- if passed := runner.runSpec(spec); !passed {
- suiteFailed = true
- }
- } else if spec.Pending() && runner.config.FailOnPending {
- runner.reportSpecWillRun(spec.Summary(runner.suiteID))
- suiteFailed = true
- runner.reportSpecDidComplete(spec.Summary(runner.suiteID), spec.Failed())
- } else {
- runner.reportSpecWillRun(spec.Summary(runner.suiteID))
- runner.reportSpecDidComplete(spec.Summary(runner.suiteID), spec.Failed())
- }
-
- if spec.Failed() && runner.config.FailFast {
- skipRemainingSpecs = true
- }
- }
-
- return !suiteFailed
-}
-
-func (runner *SpecRunner) runSpec(spec *spec.Spec) (passed bool) {
- maxAttempts := 1
- if runner.config.FlakeAttempts > 0 {
- // uninitialized configs count as 1
- maxAttempts = runner.config.FlakeAttempts
- }
-
- for i := 0; i < maxAttempts; i++ {
- runner.reportSpecWillRun(spec.Summary(runner.suiteID))
- runner.runningSpec = spec
- spec.Run(runner.writer)
- runner.runningSpec = nil
- runner.reportSpecDidComplete(spec.Summary(runner.suiteID), spec.Failed())
- if !spec.Failed() {
- return true
- }
- }
- return false
-}
-
-func (runner *SpecRunner) CurrentSpecSummary() (*types.SpecSummary, bool) {
- if runner.runningSpec == nil {
- return nil, false
- }
-
- return runner.runningSpec.Summary(runner.suiteID), true
-}
-
-func (runner *SpecRunner) registerForInterrupts(signalRegistered chan struct{}) {
- c := make(chan os.Signal, 1)
- signal.Notify(c, os.Interrupt, syscall.SIGTERM)
- close(signalRegistered)
-
- <-c
- signal.Stop(c)
- runner.markInterrupted()
- go runner.registerForHardInterrupts()
- runner.writer.DumpOutWithHeader(`
-Received interrupt. Emitting contents of GinkgoWriter...
----------------------------------------------------------
-`)
- if runner.afterSuiteNode != nil {
- fmt.Fprint(os.Stderr, `
----------------------------------------------------------
-Received interrupt. Running AfterSuite...
-^C again to terminate immediately
-`)
- runner.runAfterSuite()
- }
- runner.reportSuiteDidEnd(false)
- os.Exit(1)
-}
-
-func (runner *SpecRunner) registerForHardInterrupts() {
- c := make(chan os.Signal, 1)
- signal.Notify(c, os.Interrupt, syscall.SIGTERM)
-
- <-c
- fmt.Fprintln(os.Stderr, "\nReceived second interrupt. Shutting down.")
- os.Exit(1)
-}
-
-func (runner *SpecRunner) blockForeverIfInterrupted() {
- runner.lock.Lock()
- interrupted := runner.interrupted
- runner.lock.Unlock()
-
- if interrupted {
- select {}
- }
-}
-
-func (runner *SpecRunner) markInterrupted() {
- runner.lock.Lock()
- defer runner.lock.Unlock()
- runner.interrupted = true
-}
-
-func (runner *SpecRunner) wasInterrupted() bool {
- runner.lock.Lock()
- defer runner.lock.Unlock()
- return runner.interrupted
-}
-
-func (runner *SpecRunner) reportSuiteWillBegin() {
- runner.startTime = time.Now()
- summary := runner.suiteWillBeginSummary()
- for _, reporter := range runner.reporters {
- reporter.SpecSuiteWillBegin(runner.config, summary)
- }
-}
-
-func (runner *SpecRunner) reportBeforeSuite(summary *types.SetupSummary) {
- for _, reporter := range runner.reporters {
- reporter.BeforeSuiteDidRun(summary)
- }
-}
-
-func (runner *SpecRunner) reportAfterSuite(summary *types.SetupSummary) {
- for _, reporter := range runner.reporters {
- reporter.AfterSuiteDidRun(summary)
- }
-}
-
-func (runner *SpecRunner) reportSpecWillRun(summary *types.SpecSummary) {
- runner.writer.Truncate()
-
- for _, reporter := range runner.reporters {
- reporter.SpecWillRun(summary)
- }
-}
-
-func (runner *SpecRunner) reportSpecDidComplete(summary *types.SpecSummary, failed bool) {
- if len(summary.CapturedOutput) == 0 {
- summary.CapturedOutput = string(runner.writer.Bytes())
- }
- for i := len(runner.reporters) - 1; i >= 1; i-- {
- runner.reporters[i].SpecDidComplete(summary)
- }
-
- if failed {
- runner.writer.DumpOut()
- }
-
- runner.reporters[0].SpecDidComplete(summary)
-}
-
-func (runner *SpecRunner) reportSuiteDidEnd(success bool) {
- summary := runner.suiteDidEndSummary(success)
- summary.RunTime = time.Since(runner.startTime)
- for _, reporter := range runner.reporters {
- reporter.SpecSuiteDidEnd(summary)
- }
-}
-
-func (runner *SpecRunner) countSpecsThatRanSatisfying(filter func(ex *spec.Spec) bool) (count int) {
- count = 0
-
- for _, spec := range runner.processedSpecs {
- if filter(spec) {
- count++
- }
- }
-
- return count
-}
-
-func (runner *SpecRunner) suiteDidEndSummary(success bool) *types.SuiteSummary {
- numberOfSpecsThatWillBeRun := runner.countSpecsThatRanSatisfying(func(ex *spec.Spec) bool {
- return !ex.Skipped() && !ex.Pending()
- })
-
- numberOfPendingSpecs := runner.countSpecsThatRanSatisfying(func(ex *spec.Spec) bool {
- return ex.Pending()
- })
-
- numberOfSkippedSpecs := runner.countSpecsThatRanSatisfying(func(ex *spec.Spec) bool {
- return ex.Skipped()
- })
-
- numberOfPassedSpecs := runner.countSpecsThatRanSatisfying(func(ex *spec.Spec) bool {
- return ex.Passed()
- })
-
- numberOfFlakedSpecs := runner.countSpecsThatRanSatisfying(func(ex *spec.Spec) bool {
- return ex.Flaked()
- })
-
- numberOfFailedSpecs := runner.countSpecsThatRanSatisfying(func(ex *spec.Spec) bool {
- return ex.Failed()
- })
-
- if runner.beforeSuiteNode != nil && !runner.beforeSuiteNode.Passed() && !runner.config.DryRun {
- var known bool
- numberOfSpecsThatWillBeRun, known = runner.iterator.NumberOfSpecsThatWillBeRunIfKnown()
- if !known {
- numberOfSpecsThatWillBeRun = runner.iterator.NumberOfSpecsPriorToIteration()
- }
- numberOfFailedSpecs = numberOfSpecsThatWillBeRun
- }
-
- return &types.SuiteSummary{
- SuiteDescription: runner.description,
- SuiteSucceeded: success,
- SuiteID: runner.suiteID,
-
- NumberOfSpecsBeforeParallelization: runner.iterator.NumberOfSpecsPriorToIteration(),
- NumberOfTotalSpecs: len(runner.processedSpecs),
- NumberOfSpecsThatWillBeRun: numberOfSpecsThatWillBeRun,
- NumberOfPendingSpecs: numberOfPendingSpecs,
- NumberOfSkippedSpecs: numberOfSkippedSpecs,
- NumberOfPassedSpecs: numberOfPassedSpecs,
- NumberOfFailedSpecs: numberOfFailedSpecs,
- NumberOfFlakedSpecs: numberOfFlakedSpecs,
- }
-}
-
-func (runner *SpecRunner) suiteWillBeginSummary() *types.SuiteSummary {
- numTotal, known := runner.iterator.NumberOfSpecsToProcessIfKnown()
- if !known {
- numTotal = -1
- }
-
- numToRun, known := runner.iterator.NumberOfSpecsThatWillBeRunIfKnown()
- if !known {
- numToRun = -1
- }
-
- return &types.SuiteSummary{
- SuiteDescription: runner.description,
- SuiteID: runner.suiteID,
-
- NumberOfSpecsBeforeParallelization: runner.iterator.NumberOfSpecsPriorToIteration(),
- NumberOfTotalSpecs: numTotal,
- NumberOfSpecsThatWillBeRun: numToRun,
- NumberOfPendingSpecs: -1,
- NumberOfSkippedSpecs: -1,
- NumberOfPassedSpecs: -1,
- NumberOfFailedSpecs: -1,
- NumberOfFlakedSpecs: -1,
- }
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/suite/suite.go b/vendor/github.com/onsi/ginkgo/internal/suite/suite.go
deleted file mode 100644
index 3104bbc..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/suite/suite.go
+++ /dev/null
@@ -1,190 +0,0 @@
-package suite
-
-import (
- "math/rand"
- "net/http"
- "time"
-
- "github.com/onsi/ginkgo/internal/spec_iterator"
-
- "github.com/onsi/ginkgo/config"
- "github.com/onsi/ginkgo/internal/containernode"
- "github.com/onsi/ginkgo/internal/failer"
- "github.com/onsi/ginkgo/internal/leafnodes"
- "github.com/onsi/ginkgo/internal/spec"
- "github.com/onsi/ginkgo/internal/specrunner"
- "github.com/onsi/ginkgo/internal/writer"
- "github.com/onsi/ginkgo/reporters"
- "github.com/onsi/ginkgo/types"
-)
-
-type ginkgoTestingT interface {
- Fail()
-}
-
-type Suite struct {
- topLevelContainer *containernode.ContainerNode
- currentContainer *containernode.ContainerNode
- containerIndex int
- beforeSuiteNode leafnodes.SuiteNode
- afterSuiteNode leafnodes.SuiteNode
- runner *specrunner.SpecRunner
- failer *failer.Failer
- running bool
-}
-
-func New(failer *failer.Failer) *Suite {
- topLevelContainer := containernode.New("[Top Level]", types.FlagTypeNone, types.CodeLocation{})
-
- return &Suite{
- topLevelContainer: topLevelContainer,
- currentContainer: topLevelContainer,
- failer: failer,
- containerIndex: 1,
- }
-}
-
-func (suite *Suite) Run(t ginkgoTestingT, description string, reporters []reporters.Reporter, writer writer.WriterInterface, config config.GinkgoConfigType) (bool, bool) {
- if config.ParallelTotal < 1 {
- panic("ginkgo.parallel.total must be >= 1")
- }
-
- if config.ParallelNode > config.ParallelTotal || config.ParallelNode < 1 {
- panic("ginkgo.parallel.node is one-indexed and must be <= ginkgo.parallel.total")
- }
-
- r := rand.New(rand.NewSource(config.RandomSeed))
- suite.topLevelContainer.Shuffle(r)
- iterator, hasProgrammaticFocus := suite.generateSpecsIterator(description, config)
- suite.runner = specrunner.New(description, suite.beforeSuiteNode, iterator, suite.afterSuiteNode, reporters, writer, config)
-
- suite.running = true
- success := suite.runner.Run()
- if !success {
- t.Fail()
- }
- return success, hasProgrammaticFocus
-}
-
-func (suite *Suite) generateSpecsIterator(description string, config config.GinkgoConfigType) (spec_iterator.SpecIterator, bool) {
- specsSlice := []*spec.Spec{}
- suite.topLevelContainer.BackPropagateProgrammaticFocus()
- for _, collatedNodes := range suite.topLevelContainer.Collate() {
- specsSlice = append(specsSlice, spec.New(collatedNodes.Subject, collatedNodes.Containers, config.EmitSpecProgress))
- }
-
- specs := spec.NewSpecs(specsSlice)
- specs.RegexScansFilePath = config.RegexScansFilePath
-
- if config.RandomizeAllSpecs {
- specs.Shuffle(rand.New(rand.NewSource(config.RandomSeed)))
- }
-
- specs.ApplyFocus(description, config.FocusString, config.SkipString)
-
- if config.SkipMeasurements {
- specs.SkipMeasurements()
- }
-
- var iterator spec_iterator.SpecIterator
-
- if config.ParallelTotal > 1 {
- iterator = spec_iterator.NewParallelIterator(specs.Specs(), config.SyncHost)
- resp, err := http.Get(config.SyncHost + "/has-counter")
- if err != nil || resp.StatusCode != http.StatusOK {
- iterator = spec_iterator.NewShardedParallelIterator(specs.Specs(), config.ParallelTotal, config.ParallelNode)
- }
- } else {
- iterator = spec_iterator.NewSerialIterator(specs.Specs())
- }
-
- return iterator, specs.HasProgrammaticFocus()
-}
-
-func (suite *Suite) CurrentRunningSpecSummary() (*types.SpecSummary, bool) {
- return suite.runner.CurrentSpecSummary()
-}
-
-func (suite *Suite) SetBeforeSuiteNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) {
- if suite.beforeSuiteNode != nil {
- panic("You may only call BeforeSuite once!")
- }
- suite.beforeSuiteNode = leafnodes.NewBeforeSuiteNode(body, codeLocation, timeout, suite.failer)
-}
-
-func (suite *Suite) SetAfterSuiteNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) {
- if suite.afterSuiteNode != nil {
- panic("You may only call AfterSuite once!")
- }
- suite.afterSuiteNode = leafnodes.NewAfterSuiteNode(body, codeLocation, timeout, suite.failer)
-}
-
-func (suite *Suite) SetSynchronizedBeforeSuiteNode(bodyA interface{}, bodyB interface{}, codeLocation types.CodeLocation, timeout time.Duration) {
- if suite.beforeSuiteNode != nil {
- panic("You may only call BeforeSuite once!")
- }
- suite.beforeSuiteNode = leafnodes.NewSynchronizedBeforeSuiteNode(bodyA, bodyB, codeLocation, timeout, suite.failer)
-}
-
-func (suite *Suite) SetSynchronizedAfterSuiteNode(bodyA interface{}, bodyB interface{}, codeLocation types.CodeLocation, timeout time.Duration) {
- if suite.afterSuiteNode != nil {
- panic("You may only call AfterSuite once!")
- }
- suite.afterSuiteNode = leafnodes.NewSynchronizedAfterSuiteNode(bodyA, bodyB, codeLocation, timeout, suite.failer)
-}
-
-func (suite *Suite) PushContainerNode(text string, body func(), flag types.FlagType, codeLocation types.CodeLocation) {
- container := containernode.New(text, flag, codeLocation)
- suite.currentContainer.PushContainerNode(container)
-
- previousContainer := suite.currentContainer
- suite.currentContainer = container
- suite.containerIndex++
-
- body()
-
- suite.containerIndex--
- suite.currentContainer = previousContainer
-}
-
-func (suite *Suite) PushItNode(text string, body interface{}, flag types.FlagType, codeLocation types.CodeLocation, timeout time.Duration) {
- if suite.running {
- suite.failer.Fail("You may only call It from within a Describe, Context or When", codeLocation)
- }
- suite.currentContainer.PushSubjectNode(leafnodes.NewItNode(text, body, flag, codeLocation, timeout, suite.failer, suite.containerIndex))
-}
-
-func (suite *Suite) PushMeasureNode(text string, body interface{}, flag types.FlagType, codeLocation types.CodeLocation, samples int) {
- if suite.running {
- suite.failer.Fail("You may only call Measure from within a Describe, Context or When", codeLocation)
- }
- suite.currentContainer.PushSubjectNode(leafnodes.NewMeasureNode(text, body, flag, codeLocation, samples, suite.failer, suite.containerIndex))
-}
-
-func (suite *Suite) PushBeforeEachNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) {
- if suite.running {
- suite.failer.Fail("You may only call BeforeEach from within a Describe, Context or When", codeLocation)
- }
- suite.currentContainer.PushSetupNode(leafnodes.NewBeforeEachNode(body, codeLocation, timeout, suite.failer, suite.containerIndex))
-}
-
-func (suite *Suite) PushJustBeforeEachNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) {
- if suite.running {
- suite.failer.Fail("You may only call JustBeforeEach from within a Describe, Context or When", codeLocation)
- }
- suite.currentContainer.PushSetupNode(leafnodes.NewJustBeforeEachNode(body, codeLocation, timeout, suite.failer, suite.containerIndex))
-}
-
-func (suite *Suite) PushJustAfterEachNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) {
- if suite.running {
- suite.failer.Fail("You may only call JustAfterEach from within a Describe or Context", codeLocation)
- }
- suite.currentContainer.PushSetupNode(leafnodes.NewJustAfterEachNode(body, codeLocation, timeout, suite.failer, suite.containerIndex))
-}
-
-func (suite *Suite) PushAfterEachNode(body interface{}, codeLocation types.CodeLocation, timeout time.Duration) {
- if suite.running {
- suite.failer.Fail("You may only call AfterEach from within a Describe, Context or When", codeLocation)
- }
- suite.currentContainer.PushSetupNode(leafnodes.NewAfterEachNode(body, codeLocation, timeout, suite.failer, suite.containerIndex))
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/testingtproxy/testing_t_proxy.go b/vendor/github.com/onsi/ginkgo/internal/testingtproxy/testing_t_proxy.go
deleted file mode 100644
index 090445d..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/testingtproxy/testing_t_proxy.go
+++ /dev/null
@@ -1,76 +0,0 @@
-package testingtproxy
-
-import (
- "fmt"
- "io"
-)
-
-type failFunc func(message string, callerSkip ...int)
-
-func New(writer io.Writer, fail failFunc, offset int) *ginkgoTestingTProxy {
- return &ginkgoTestingTProxy{
- fail: fail,
- offset: offset,
- writer: writer,
- }
-}
-
-type ginkgoTestingTProxy struct {
- fail failFunc
- offset int
- writer io.Writer
-}
-
-func (t *ginkgoTestingTProxy) Error(args ...interface{}) {
- t.fail(fmt.Sprintln(args...), t.offset)
-}
-
-func (t *ginkgoTestingTProxy) Errorf(format string, args ...interface{}) {
- t.fail(fmt.Sprintf(format, args...), t.offset)
-}
-
-func (t *ginkgoTestingTProxy) Fail() {
- t.fail("failed", t.offset)
-}
-
-func (t *ginkgoTestingTProxy) FailNow() {
- t.fail("failed", t.offset)
-}
-
-func (t *ginkgoTestingTProxy) Fatal(args ...interface{}) {
- t.fail(fmt.Sprintln(args...), t.offset)
-}
-
-func (t *ginkgoTestingTProxy) Fatalf(format string, args ...interface{}) {
- t.fail(fmt.Sprintf(format, args...), t.offset)
-}
-
-func (t *ginkgoTestingTProxy) Log(args ...interface{}) {
- fmt.Fprintln(t.writer, args...)
-}
-
-func (t *ginkgoTestingTProxy) Logf(format string, args ...interface{}) {
- t.Log(fmt.Sprintf(format, args...))
-}
-
-func (t *ginkgoTestingTProxy) Failed() bool {
- return false
-}
-
-func (t *ginkgoTestingTProxy) Parallel() {
-}
-
-func (t *ginkgoTestingTProxy) Skip(args ...interface{}) {
- fmt.Println(args...)
-}
-
-func (t *ginkgoTestingTProxy) Skipf(format string, args ...interface{}) {
- t.Skip(fmt.Sprintf(format, args...))
-}
-
-func (t *ginkgoTestingTProxy) SkipNow() {
-}
-
-func (t *ginkgoTestingTProxy) Skipped() bool {
- return false
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/writer/fake_writer.go b/vendor/github.com/onsi/ginkgo/internal/writer/fake_writer.go
deleted file mode 100644
index 6739c3f..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/writer/fake_writer.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package writer
-
-type FakeGinkgoWriter struct {
- EventStream []string
-}
-
-func NewFake() *FakeGinkgoWriter {
- return &FakeGinkgoWriter{
- EventStream: []string{},
- }
-}
-
-func (writer *FakeGinkgoWriter) AddEvent(event string) {
- writer.EventStream = append(writer.EventStream, event)
-}
-
-func (writer *FakeGinkgoWriter) Truncate() {
- writer.EventStream = append(writer.EventStream, "TRUNCATE")
-}
-
-func (writer *FakeGinkgoWriter) DumpOut() {
- writer.EventStream = append(writer.EventStream, "DUMP")
-}
-
-func (writer *FakeGinkgoWriter) DumpOutWithHeader(header string) {
- writer.EventStream = append(writer.EventStream, "DUMP_WITH_HEADER: "+header)
-}
-
-func (writer *FakeGinkgoWriter) Bytes() []byte {
- writer.EventStream = append(writer.EventStream, "BYTES")
- return nil
-}
-
-func (writer *FakeGinkgoWriter) Write(data []byte) (n int, err error) {
- return 0, nil
-}
diff --git a/vendor/github.com/onsi/ginkgo/internal/writer/writer.go b/vendor/github.com/onsi/ginkgo/internal/writer/writer.go
deleted file mode 100644
index 98eca3b..0000000
--- a/vendor/github.com/onsi/ginkgo/internal/writer/writer.go
+++ /dev/null
@@ -1,89 +0,0 @@
-package writer
-
-import (
- "bytes"
- "io"
- "sync"
-)
-
-type WriterInterface interface {
- io.Writer
-
- Truncate()
- DumpOut()
- DumpOutWithHeader(header string)
- Bytes() []byte
-}
-
-type Writer struct {
- buffer *bytes.Buffer
- outWriter io.Writer
- lock *sync.Mutex
- stream bool
- redirector io.Writer
-}
-
-func New(outWriter io.Writer) *Writer {
- return &Writer{
- buffer: &bytes.Buffer{},
- lock: &sync.Mutex{},
- outWriter: outWriter,
- stream: true,
- }
-}
-
-func (w *Writer) AndRedirectTo(writer io.Writer) {
- w.redirector = writer
-}
-
-func (w *Writer) SetStream(stream bool) {
- w.lock.Lock()
- defer w.lock.Unlock()
- w.stream = stream
-}
-
-func (w *Writer) Write(b []byte) (n int, err error) {
- w.lock.Lock()
- defer w.lock.Unlock()
-
- n, err = w.buffer.Write(b)
- if w.redirector != nil {
- w.redirector.Write(b)
- }
- if w.stream {
- return w.outWriter.Write(b)
- }
- return n, err
-}
-
-func (w *Writer) Truncate() {
- w.lock.Lock()
- defer w.lock.Unlock()
- w.buffer.Reset()
-}
-
-func (w *Writer) DumpOut() {
- w.lock.Lock()
- defer w.lock.Unlock()
- if !w.stream {
- w.buffer.WriteTo(w.outWriter)
- }
-}
-
-func (w *Writer) Bytes() []byte {
- w.lock.Lock()
- defer w.lock.Unlock()
- b := w.buffer.Bytes()
- copied := make([]byte, len(b))
- copy(copied, b)
- return copied
-}
-
-func (w *Writer) DumpOutWithHeader(header string) {
- w.lock.Lock()
- defer w.lock.Unlock()
- if !w.stream && w.buffer.Len() > 0 {
- w.outWriter.Write([]byte(header))
- w.buffer.WriteTo(w.outWriter)
- }
-}
diff --git a/vendor/github.com/onsi/ginkgo/reporters/default_reporter.go b/vendor/github.com/onsi/ginkgo/reporters/default_reporter.go
deleted file mode 100644
index c76283b..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/default_reporter.go
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
-Ginkgo's Default Reporter
-
-A number of command line flags are available to tweak Ginkgo's default output.
-
-These are documented [here](http://onsi.github.io/ginkgo/#running_tests)
-*/
-package reporters
-
-import (
- "github.com/onsi/ginkgo/config"
- "github.com/onsi/ginkgo/reporters/stenographer"
- "github.com/onsi/ginkgo/types"
-)
-
-type DefaultReporter struct {
- config config.DefaultReporterConfigType
- stenographer stenographer.Stenographer
- specSummaries []*types.SpecSummary
-}
-
-func NewDefaultReporter(config config.DefaultReporterConfigType, stenographer stenographer.Stenographer) *DefaultReporter {
- return &DefaultReporter{
- config: config,
- stenographer: stenographer,
- }
-}
-
-func (reporter *DefaultReporter) SpecSuiteWillBegin(config config.GinkgoConfigType, summary *types.SuiteSummary) {
- reporter.stenographer.AnnounceSuite(summary.SuiteDescription, config.RandomSeed, config.RandomizeAllSpecs, reporter.config.Succinct)
- if config.ParallelTotal > 1 {
- reporter.stenographer.AnnounceParallelRun(config.ParallelNode, config.ParallelTotal, reporter.config.Succinct)
- } else {
- reporter.stenographer.AnnounceNumberOfSpecs(summary.NumberOfSpecsThatWillBeRun, summary.NumberOfTotalSpecs, reporter.config.Succinct)
- }
-}
-
-func (reporter *DefaultReporter) BeforeSuiteDidRun(setupSummary *types.SetupSummary) {
- if setupSummary.State != types.SpecStatePassed {
- reporter.stenographer.AnnounceBeforeSuiteFailure(setupSummary, reporter.config.Succinct, reporter.config.FullTrace)
- }
-}
-
-func (reporter *DefaultReporter) AfterSuiteDidRun(setupSummary *types.SetupSummary) {
- if setupSummary.State != types.SpecStatePassed {
- reporter.stenographer.AnnounceAfterSuiteFailure(setupSummary, reporter.config.Succinct, reporter.config.FullTrace)
- }
-}
-
-func (reporter *DefaultReporter) SpecWillRun(specSummary *types.SpecSummary) {
- if reporter.config.Verbose && !reporter.config.Succinct && specSummary.State != types.SpecStatePending && specSummary.State != types.SpecStateSkipped {
- reporter.stenographer.AnnounceSpecWillRun(specSummary)
- }
-}
-
-func (reporter *DefaultReporter) SpecDidComplete(specSummary *types.SpecSummary) {
- switch specSummary.State {
- case types.SpecStatePassed:
- if specSummary.IsMeasurement {
- reporter.stenographer.AnnounceSuccesfulMeasurement(specSummary, reporter.config.Succinct)
- } else if specSummary.RunTime.Seconds() >= reporter.config.SlowSpecThreshold {
- reporter.stenographer.AnnounceSuccesfulSlowSpec(specSummary, reporter.config.Succinct)
- } else {
- reporter.stenographer.AnnounceSuccesfulSpec(specSummary)
- if reporter.config.ReportPassed {
- reporter.stenographer.AnnounceCapturedOutput(specSummary.CapturedOutput)
- }
- }
- case types.SpecStatePending:
- reporter.stenographer.AnnouncePendingSpec(specSummary, reporter.config.NoisyPendings && !reporter.config.Succinct)
- case types.SpecStateSkipped:
- reporter.stenographer.AnnounceSkippedSpec(specSummary, reporter.config.Succinct || !reporter.config.NoisySkippings, reporter.config.FullTrace)
- case types.SpecStateTimedOut:
- reporter.stenographer.AnnounceSpecTimedOut(specSummary, reporter.config.Succinct, reporter.config.FullTrace)
- case types.SpecStatePanicked:
- reporter.stenographer.AnnounceSpecPanicked(specSummary, reporter.config.Succinct, reporter.config.FullTrace)
- case types.SpecStateFailed:
- reporter.stenographer.AnnounceSpecFailed(specSummary, reporter.config.Succinct, reporter.config.FullTrace)
- }
-
- reporter.specSummaries = append(reporter.specSummaries, specSummary)
-}
-
-func (reporter *DefaultReporter) SpecSuiteDidEnd(summary *types.SuiteSummary) {
- reporter.stenographer.SummarizeFailures(reporter.specSummaries)
- reporter.stenographer.AnnounceSpecRunCompletion(summary, reporter.config.Succinct)
-}
diff --git a/vendor/github.com/onsi/ginkgo/reporters/fake_reporter.go b/vendor/github.com/onsi/ginkgo/reporters/fake_reporter.go
deleted file mode 100644
index 27db479..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/fake_reporter.go
+++ /dev/null
@@ -1,59 +0,0 @@
-package reporters
-
-import (
- "github.com/onsi/ginkgo/config"
- "github.com/onsi/ginkgo/types"
-)
-
-//FakeReporter is useful for testing purposes
-type FakeReporter struct {
- Config config.GinkgoConfigType
-
- BeginSummary *types.SuiteSummary
- BeforeSuiteSummary *types.SetupSummary
- SpecWillRunSummaries []*types.SpecSummary
- SpecSummaries []*types.SpecSummary
- AfterSuiteSummary *types.SetupSummary
- EndSummary *types.SuiteSummary
-
- SpecWillRunStub func(specSummary *types.SpecSummary)
- SpecDidCompleteStub func(specSummary *types.SpecSummary)
-}
-
-func NewFakeReporter() *FakeReporter {
- return &FakeReporter{
- SpecWillRunSummaries: make([]*types.SpecSummary, 0),
- SpecSummaries: make([]*types.SpecSummary, 0),
- }
-}
-
-func (fakeR *FakeReporter) SpecSuiteWillBegin(config config.GinkgoConfigType, summary *types.SuiteSummary) {
- fakeR.Config = config
- fakeR.BeginSummary = summary
-}
-
-func (fakeR *FakeReporter) BeforeSuiteDidRun(setupSummary *types.SetupSummary) {
- fakeR.BeforeSuiteSummary = setupSummary
-}
-
-func (fakeR *FakeReporter) SpecWillRun(specSummary *types.SpecSummary) {
- if fakeR.SpecWillRunStub != nil {
- fakeR.SpecWillRunStub(specSummary)
- }
- fakeR.SpecWillRunSummaries = append(fakeR.SpecWillRunSummaries, specSummary)
-}
-
-func (fakeR *FakeReporter) SpecDidComplete(specSummary *types.SpecSummary) {
- if fakeR.SpecDidCompleteStub != nil {
- fakeR.SpecDidCompleteStub(specSummary)
- }
- fakeR.SpecSummaries = append(fakeR.SpecSummaries, specSummary)
-}
-
-func (fakeR *FakeReporter) AfterSuiteDidRun(setupSummary *types.SetupSummary) {
- fakeR.AfterSuiteSummary = setupSummary
-}
-
-func (fakeR *FakeReporter) SpecSuiteDidEnd(summary *types.SuiteSummary) {
- fakeR.EndSummary = summary
-}
diff --git a/vendor/github.com/onsi/ginkgo/reporters/junit_reporter.go b/vendor/github.com/onsi/ginkgo/reporters/junit_reporter.go
deleted file mode 100644
index 89a7c84..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/junit_reporter.go
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-
-JUnit XML Reporter for Ginkgo
-
-For usage instructions: http://onsi.github.io/ginkgo/#generating_junit_xml_output
-
-*/
-
-package reporters
-
-import (
- "encoding/xml"
- "fmt"
- "math"
- "os"
- "strings"
-
- "github.com/onsi/ginkgo/config"
- "github.com/onsi/ginkgo/types"
-)
-
-type JUnitTestSuite struct {
- XMLName xml.Name `xml:"testsuite"`
- TestCases []JUnitTestCase `xml:"testcase"`
- Name string `xml:"name,attr"`
- Tests int `xml:"tests,attr"`
- Failures int `xml:"failures,attr"`
- Errors int `xml:"errors,attr"`
- Time float64 `xml:"time,attr"`
-}
-
-type JUnitTestCase struct {
- Name string `xml:"name,attr"`
- ClassName string `xml:"classname,attr"`
- PassedMessage *JUnitPassedMessage `xml:"passed,omitempty"`
- FailureMessage *JUnitFailureMessage `xml:"failure,omitempty"`
- Skipped *JUnitSkipped `xml:"skipped,omitempty"`
- Time float64 `xml:"time,attr"`
- SystemOut string `xml:"system-out,omitempty"`
-}
-
-type JUnitPassedMessage struct {
- Message string `xml:",chardata"`
-}
-
-type JUnitFailureMessage struct {
- Type string `xml:"type,attr"`
- Message string `xml:",chardata"`
-}
-
-type JUnitSkipped struct {
- XMLName xml.Name `xml:"skipped"`
-}
-
-type JUnitReporter struct {
- suite JUnitTestSuite
- filename string
- testSuiteName string
- ReporterConfig config.DefaultReporterConfigType
-}
-
-//NewJUnitReporter creates a new JUnit XML reporter. The XML will be stored in the passed in filename.
-func NewJUnitReporter(filename string) *JUnitReporter {
- return &JUnitReporter{
- filename: filename,
- }
-}
-
-func (reporter *JUnitReporter) SpecSuiteWillBegin(ginkgoConfig config.GinkgoConfigType, summary *types.SuiteSummary) {
- reporter.suite = JUnitTestSuite{
- Name: summary.SuiteDescription,
- TestCases: []JUnitTestCase{},
- }
- reporter.testSuiteName = summary.SuiteDescription
- reporter.ReporterConfig = config.DefaultReporterConfig
-}
-
-func (reporter *JUnitReporter) SpecWillRun(specSummary *types.SpecSummary) {
-}
-
-func (reporter *JUnitReporter) BeforeSuiteDidRun(setupSummary *types.SetupSummary) {
- reporter.handleSetupSummary("BeforeSuite", setupSummary)
-}
-
-func (reporter *JUnitReporter) AfterSuiteDidRun(setupSummary *types.SetupSummary) {
- reporter.handleSetupSummary("AfterSuite", setupSummary)
-}
-
-func failureMessage(failure types.SpecFailure) string {
- return fmt.Sprintf("%s\n%s\n%s", failure.ComponentCodeLocation.String(), failure.Message, failure.Location.String())
-}
-
-func (reporter *JUnitReporter) handleSetupSummary(name string, setupSummary *types.SetupSummary) {
- if setupSummary.State != types.SpecStatePassed {
- testCase := JUnitTestCase{
- Name: name,
- ClassName: reporter.testSuiteName,
- }
-
- testCase.FailureMessage = &JUnitFailureMessage{
- Type: reporter.failureTypeForState(setupSummary.State),
- Message: failureMessage(setupSummary.Failure),
- }
- testCase.SystemOut = setupSummary.CapturedOutput
- testCase.Time = setupSummary.RunTime.Seconds()
- reporter.suite.TestCases = append(reporter.suite.TestCases, testCase)
- }
-}
-
-func (reporter *JUnitReporter) SpecDidComplete(specSummary *types.SpecSummary) {
- testCase := JUnitTestCase{
- Name: strings.Join(specSummary.ComponentTexts[1:], " "),
- ClassName: reporter.testSuiteName,
- }
- if reporter.ReporterConfig.ReportPassed && specSummary.State == types.SpecStatePassed {
- testCase.PassedMessage = &JUnitPassedMessage{
- Message: specSummary.CapturedOutput,
- }
- }
- if specSummary.State == types.SpecStateFailed || specSummary.State == types.SpecStateTimedOut || specSummary.State == types.SpecStatePanicked {
- testCase.FailureMessage = &JUnitFailureMessage{
- Type: reporter.failureTypeForState(specSummary.State),
- Message: failureMessage(specSummary.Failure),
- }
- if specSummary.State == types.SpecStatePanicked {
- testCase.FailureMessage.Message += fmt.Sprintf("\n\nPanic: %s\n\nFull stack:\n%s",
- specSummary.Failure.ForwardedPanic,
- specSummary.Failure.Location.FullStackTrace)
- }
- testCase.SystemOut = specSummary.CapturedOutput
- }
- if specSummary.State == types.SpecStateSkipped || specSummary.State == types.SpecStatePending {
- testCase.Skipped = &JUnitSkipped{}
- }
- testCase.Time = specSummary.RunTime.Seconds()
- reporter.suite.TestCases = append(reporter.suite.TestCases, testCase)
-}
-
-func (reporter *JUnitReporter) SpecSuiteDidEnd(summary *types.SuiteSummary) {
- reporter.suite.Tests = summary.NumberOfSpecsThatWillBeRun
- reporter.suite.Time = math.Trunc(summary.RunTime.Seconds()*1000) / 1000
- reporter.suite.Failures = summary.NumberOfFailedSpecs
- reporter.suite.Errors = 0
- file, err := os.Create(reporter.filename)
- if err != nil {
- fmt.Printf("Failed to create JUnit report file: %s\n\t%s", reporter.filename, err.Error())
- }
- defer file.Close()
- file.WriteString(xml.Header)
- encoder := xml.NewEncoder(file)
- encoder.Indent(" ", " ")
- err = encoder.Encode(reporter.suite)
- if err != nil {
- fmt.Printf("Failed to generate JUnit report\n\t%s", err.Error())
- }
-}
-
-func (reporter *JUnitReporter) failureTypeForState(state types.SpecState) string {
- switch state {
- case types.SpecStateFailed:
- return "Failure"
- case types.SpecStateTimedOut:
- return "Timeout"
- case types.SpecStatePanicked:
- return "Panic"
- default:
- return ""
- }
-}
diff --git a/vendor/github.com/onsi/ginkgo/reporters/reporter.go b/vendor/github.com/onsi/ginkgo/reporters/reporter.go
deleted file mode 100644
index 348b9df..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/reporter.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package reporters
-
-import (
- "github.com/onsi/ginkgo/config"
- "github.com/onsi/ginkgo/types"
-)
-
-type Reporter interface {
- SpecSuiteWillBegin(config config.GinkgoConfigType, summary *types.SuiteSummary)
- BeforeSuiteDidRun(setupSummary *types.SetupSummary)
- SpecWillRun(specSummary *types.SpecSummary)
- SpecDidComplete(specSummary *types.SpecSummary)
- AfterSuiteDidRun(setupSummary *types.SetupSummary)
- SpecSuiteDidEnd(summary *types.SuiteSummary)
-}
diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/console_logging.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/console_logging.go
deleted file mode 100644
index 45b8f88..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/console_logging.go
+++ /dev/null
@@ -1,64 +0,0 @@
-package stenographer
-
-import (
- "fmt"
- "strings"
-)
-
-func (s *consoleStenographer) colorize(colorCode string, format string, args ...interface{}) string {
- var out string
-
- if len(args) > 0 {
- out = fmt.Sprintf(format, args...)
- } else {
- out = format
- }
-
- if s.color {
- return fmt.Sprintf("%s%s%s", colorCode, out, defaultStyle)
- } else {
- return out
- }
-}
-
-func (s *consoleStenographer) printBanner(text string, bannerCharacter string) {
- fmt.Fprintln(s.w, text)
- fmt.Fprintln(s.w, strings.Repeat(bannerCharacter, len(text)))
-}
-
-func (s *consoleStenographer) printNewLine() {
- fmt.Fprintln(s.w, "")
-}
-
-func (s *consoleStenographer) printDelimiter() {
- fmt.Fprintln(s.w, s.colorize(grayColor, "%s", strings.Repeat("-", 30)))
-}
-
-func (s *consoleStenographer) print(indentation int, format string, args ...interface{}) {
- fmt.Fprint(s.w, s.indent(indentation, format, args...))
-}
-
-func (s *consoleStenographer) println(indentation int, format string, args ...interface{}) {
- fmt.Fprintln(s.w, s.indent(indentation, format, args...))
-}
-
-func (s *consoleStenographer) indent(indentation int, format string, args ...interface{}) string {
- var text string
-
- if len(args) > 0 {
- text = fmt.Sprintf(format, args...)
- } else {
- text = format
- }
-
- stringArray := strings.Split(text, "\n")
- padding := ""
- if indentation >= 0 {
- padding = strings.Repeat(" ", indentation)
- }
- for i, s := range stringArray {
- stringArray[i] = fmt.Sprintf("%s%s", padding, s)
- }
-
- return strings.Join(stringArray, "\n")
-}
diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/fake_stenographer.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/fake_stenographer.go
deleted file mode 100644
index 98854e7..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/fake_stenographer.go
+++ /dev/null
@@ -1,142 +0,0 @@
-package stenographer
-
-import (
- "sync"
-
- "github.com/onsi/ginkgo/types"
-)
-
-func NewFakeStenographerCall(method string, args ...interface{}) FakeStenographerCall {
- return FakeStenographerCall{
- Method: method,
- Args: args,
- }
-}
-
-type FakeStenographer struct {
- calls []FakeStenographerCall
- lock *sync.Mutex
-}
-
-type FakeStenographerCall struct {
- Method string
- Args []interface{}
-}
-
-func NewFakeStenographer() *FakeStenographer {
- stenographer := &FakeStenographer{
- lock: &sync.Mutex{},
- }
- stenographer.Reset()
- return stenographer
-}
-
-func (stenographer *FakeStenographer) Calls() []FakeStenographerCall {
- stenographer.lock.Lock()
- defer stenographer.lock.Unlock()
-
- return stenographer.calls
-}
-
-func (stenographer *FakeStenographer) Reset() {
- stenographer.lock.Lock()
- defer stenographer.lock.Unlock()
-
- stenographer.calls = make([]FakeStenographerCall, 0)
-}
-
-func (stenographer *FakeStenographer) CallsTo(method string) []FakeStenographerCall {
- stenographer.lock.Lock()
- defer stenographer.lock.Unlock()
-
- results := make([]FakeStenographerCall, 0)
- for _, call := range stenographer.calls {
- if call.Method == method {
- results = append(results, call)
- }
- }
-
- return results
-}
-
-func (stenographer *FakeStenographer) registerCall(method string, args ...interface{}) {
- stenographer.lock.Lock()
- defer stenographer.lock.Unlock()
-
- stenographer.calls = append(stenographer.calls, NewFakeStenographerCall(method, args...))
-}
-
-func (stenographer *FakeStenographer) AnnounceSuite(description string, randomSeed int64, randomizingAll bool, succinct bool) {
- stenographer.registerCall("AnnounceSuite", description, randomSeed, randomizingAll, succinct)
-}
-
-func (stenographer *FakeStenographer) AnnounceAggregatedParallelRun(nodes int, succinct bool) {
- stenographer.registerCall("AnnounceAggregatedParallelRun", nodes, succinct)
-}
-
-func (stenographer *FakeStenographer) AnnounceParallelRun(node int, nodes int, succinct bool) {
- stenographer.registerCall("AnnounceParallelRun", node, nodes, succinct)
-}
-
-func (stenographer *FakeStenographer) AnnounceNumberOfSpecs(specsToRun int, total int, succinct bool) {
- stenographer.registerCall("AnnounceNumberOfSpecs", specsToRun, total, succinct)
-}
-
-func (stenographer *FakeStenographer) AnnounceTotalNumberOfSpecs(total int, succinct bool) {
- stenographer.registerCall("AnnounceTotalNumberOfSpecs", total, succinct)
-}
-
-func (stenographer *FakeStenographer) AnnounceSpecRunCompletion(summary *types.SuiteSummary, succinct bool) {
- stenographer.registerCall("AnnounceSpecRunCompletion", summary, succinct)
-}
-
-func (stenographer *FakeStenographer) AnnounceSpecWillRun(spec *types.SpecSummary) {
- stenographer.registerCall("AnnounceSpecWillRun", spec)
-}
-
-func (stenographer *FakeStenographer) AnnounceBeforeSuiteFailure(summary *types.SetupSummary, succinct bool, fullTrace bool) {
- stenographer.registerCall("AnnounceBeforeSuiteFailure", summary, succinct, fullTrace)
-}
-
-func (stenographer *FakeStenographer) AnnounceAfterSuiteFailure(summary *types.SetupSummary, succinct bool, fullTrace bool) {
- stenographer.registerCall("AnnounceAfterSuiteFailure", summary, succinct, fullTrace)
-}
-func (stenographer *FakeStenographer) AnnounceCapturedOutput(output string) {
- stenographer.registerCall("AnnounceCapturedOutput", output)
-}
-
-func (stenographer *FakeStenographer) AnnounceSuccesfulSpec(spec *types.SpecSummary) {
- stenographer.registerCall("AnnounceSuccesfulSpec", spec)
-}
-
-func (stenographer *FakeStenographer) AnnounceSuccesfulSlowSpec(spec *types.SpecSummary, succinct bool) {
- stenographer.registerCall("AnnounceSuccesfulSlowSpec", spec, succinct)
-}
-
-func (stenographer *FakeStenographer) AnnounceSuccesfulMeasurement(spec *types.SpecSummary, succinct bool) {
- stenographer.registerCall("AnnounceSuccesfulMeasurement", spec, succinct)
-}
-
-func (stenographer *FakeStenographer) AnnouncePendingSpec(spec *types.SpecSummary, noisy bool) {
- stenographer.registerCall("AnnouncePendingSpec", spec, noisy)
-}
-
-func (stenographer *FakeStenographer) AnnounceSkippedSpec(spec *types.SpecSummary, succinct bool, fullTrace bool) {
- stenographer.registerCall("AnnounceSkippedSpec", spec, succinct, fullTrace)
-}
-
-func (stenographer *FakeStenographer) AnnounceSpecTimedOut(spec *types.SpecSummary, succinct bool, fullTrace bool) {
- stenographer.registerCall("AnnounceSpecTimedOut", spec, succinct, fullTrace)
-}
-
-func (stenographer *FakeStenographer) AnnounceSpecPanicked(spec *types.SpecSummary, succinct bool, fullTrace bool) {
- stenographer.registerCall("AnnounceSpecPanicked", spec, succinct, fullTrace)
-}
-
-func (stenographer *FakeStenographer) AnnounceSpecFailed(spec *types.SpecSummary, succinct bool, fullTrace bool) {
- stenographer.registerCall("AnnounceSpecFailed", spec, succinct, fullTrace)
-}
-
-func (stenographer *FakeStenographer) SummarizeFailures(summaries []*types.SpecSummary) {
- stenographer.registerCall("SummarizeFailures", summaries)
-}
diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/stenographer.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/stenographer.go
deleted file mode 100644
index 601c74d..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/stenographer.go
+++ /dev/null
@@ -1,572 +0,0 @@
-/*
-The stenographer is used by Ginkgo's reporters to generate output.
-
-Move along, nothing to see here.
-*/
-
-package stenographer
-
-import (
- "fmt"
- "io"
- "runtime"
- "strings"
-
- "github.com/onsi/ginkgo/types"
-)
-
-const defaultStyle = "\x1b[0m"
-const boldStyle = "\x1b[1m"
-const redColor = "\x1b[91m"
-const greenColor = "\x1b[32m"
-const yellowColor = "\x1b[33m"
-const cyanColor = "\x1b[36m"
-const grayColor = "\x1b[90m"
-const lightGrayColor = "\x1b[37m"
-
-type cursorStateType int
-
-const (
- cursorStateTop cursorStateType = iota
- cursorStateStreaming
- cursorStateMidBlock
- cursorStateEndBlock
-)
-
-type Stenographer interface {
- AnnounceSuite(description string, randomSeed int64, randomizingAll bool, succinct bool)
- AnnounceAggregatedParallelRun(nodes int, succinct bool)
- AnnounceParallelRun(node int, nodes int, succinct bool)
- AnnounceTotalNumberOfSpecs(total int, succinct bool)
- AnnounceNumberOfSpecs(specsToRun int, total int, succinct bool)
- AnnounceSpecRunCompletion(summary *types.SuiteSummary, succinct bool)
-
- AnnounceSpecWillRun(spec *types.SpecSummary)
- AnnounceBeforeSuiteFailure(summary *types.SetupSummary, succinct bool, fullTrace bool)
- AnnounceAfterSuiteFailure(summary *types.SetupSummary, succinct bool, fullTrace bool)
-
- AnnounceCapturedOutput(output string)
-
- AnnounceSuccesfulSpec(spec *types.SpecSummary)
- AnnounceSuccesfulSlowSpec(spec *types.SpecSummary, succinct bool)
- AnnounceSuccesfulMeasurement(spec *types.SpecSummary, succinct bool)
-
- AnnouncePendingSpec(spec *types.SpecSummary, noisy bool)
- AnnounceSkippedSpec(spec *types.SpecSummary, succinct bool, fullTrace bool)
-
- AnnounceSpecTimedOut(spec *types.SpecSummary, succinct bool, fullTrace bool)
- AnnounceSpecPanicked(spec *types.SpecSummary, succinct bool, fullTrace bool)
- AnnounceSpecFailed(spec *types.SpecSummary, succinct bool, fullTrace bool)
-
- SummarizeFailures(summaries []*types.SpecSummary)
-}
-
-func New(color bool, enableFlakes bool, writer io.Writer) Stenographer {
- denoter := "•"
- if runtime.GOOS == "windows" {
- denoter = "+"
- }
- return &consoleStenographer{
- color: color,
- denoter: denoter,
- cursorState: cursorStateTop,
- enableFlakes: enableFlakes,
- w: writer,
- }
-}
-
-type consoleStenographer struct {
- color bool
- denoter string
- cursorState cursorStateType
- enableFlakes bool
- w io.Writer
-}
-
-var alternatingColors = []string{defaultStyle, grayColor}
-
-func (s *consoleStenographer) AnnounceSuite(description string, randomSeed int64, randomizingAll bool, succinct bool) {
- if succinct {
- s.print(0, "[%d] %s ", randomSeed, s.colorize(boldStyle, description))
- return
- }
- s.printBanner(fmt.Sprintf("Running Suite: %s", description), "=")
- s.print(0, "Random Seed: %s", s.colorize(boldStyle, "%d", randomSeed))
- if randomizingAll {
- s.print(0, " - Will randomize all specs")
- }
- s.printNewLine()
-}
-
-func (s *consoleStenographer) AnnounceParallelRun(node int, nodes int, succinct bool) {
- if succinct {
- s.print(0, "- node #%d ", node)
- return
- }
- s.println(0,
- "Parallel test node %s/%s.",
- s.colorize(boldStyle, "%d", node),
- s.colorize(boldStyle, "%d", nodes),
- )
- s.printNewLine()
-}
-
-func (s *consoleStenographer) AnnounceAggregatedParallelRun(nodes int, succinct bool) {
- if succinct {
- s.print(0, "- %d nodes ", nodes)
- return
- }
- s.println(0,
- "Running in parallel across %s nodes",
- s.colorize(boldStyle, "%d", nodes),
- )
- s.printNewLine()
-}
-
-func (s *consoleStenographer) AnnounceNumberOfSpecs(specsToRun int, total int, succinct bool) {
- if succinct {
- s.print(0, "- %d/%d specs ", specsToRun, total)
- s.stream()
- return
- }
- s.println(0,
- "Will run %s of %s specs",
- s.colorize(boldStyle, "%d", specsToRun),
- s.colorize(boldStyle, "%d", total),
- )
-
- s.printNewLine()
-}
-
-func (s *consoleStenographer) AnnounceTotalNumberOfSpecs(total int, succinct bool) {
- if succinct {
- s.print(0, "- %d specs ", total)
- s.stream()
- return
- }
- s.println(0,
- "Will run %s specs",
- s.colorize(boldStyle, "%d", total),
- )
-
- s.printNewLine()
-}
-
-func (s *consoleStenographer) AnnounceSpecRunCompletion(summary *types.SuiteSummary, succinct bool) {
- if succinct && summary.SuiteSucceeded {
- s.print(0, " %s %s ", s.colorize(greenColor, "SUCCESS!"), summary.RunTime)
- return
- }
- s.printNewLine()
- color := greenColor
- if !summary.SuiteSucceeded {
- color = redColor
- }
- s.println(0, s.colorize(boldStyle+color, "Ran %d of %d Specs in %.3f seconds", summary.NumberOfSpecsThatWillBeRun, summary.NumberOfTotalSpecs, summary.RunTime.Seconds()))
-
- status := ""
- if summary.SuiteSucceeded {
- status = s.colorize(boldStyle+greenColor, "SUCCESS!")
- } else {
- status = s.colorize(boldStyle+redColor, "FAIL!")
- }
-
- flakes := ""
- if s.enableFlakes {
- flakes = " | " + s.colorize(yellowColor+boldStyle, "%d Flaked", summary.NumberOfFlakedSpecs)
- }
-
- s.print(0,
- "%s -- %s | %s | %s | %s\n",
- status,
- s.colorize(greenColor+boldStyle, "%d Passed", summary.NumberOfPassedSpecs),
- s.colorize(redColor+boldStyle, "%d Failed", summary.NumberOfFailedSpecs)+flakes,
- s.colorize(yellowColor+boldStyle, "%d Pending", summary.NumberOfPendingSpecs),
- s.colorize(cyanColor+boldStyle, "%d Skipped", summary.NumberOfSkippedSpecs),
- )
-}
-
-func (s *consoleStenographer) AnnounceSpecWillRun(spec *types.SpecSummary) {
- s.startBlock()
- for i, text := range spec.ComponentTexts[1 : len(spec.ComponentTexts)-1] {
- s.print(0, s.colorize(alternatingColors[i%2], text)+" ")
- }
-
- indentation := 0
- if len(spec.ComponentTexts) > 2 {
- indentation = 1
- s.printNewLine()
- }
- index := len(spec.ComponentTexts) - 1
- s.print(indentation, s.colorize(boldStyle, spec.ComponentTexts[index]))
- s.printNewLine()
- s.print(indentation, s.colorize(lightGrayColor, spec.ComponentCodeLocations[index].String()))
- s.printNewLine()
- s.midBlock()
-}
-
-func (s *consoleStenographer) AnnounceBeforeSuiteFailure(summary *types.SetupSummary, succinct bool, fullTrace bool) {
- s.announceSetupFailure("BeforeSuite", summary, succinct, fullTrace)
-}
-
-func (s *consoleStenographer) AnnounceAfterSuiteFailure(summary *types.SetupSummary, succinct bool, fullTrace bool) {
- s.announceSetupFailure("AfterSuite", summary, succinct, fullTrace)
-}
-
-func (s *consoleStenographer) announceSetupFailure(name string, summary *types.SetupSummary, succinct bool, fullTrace bool) {
- s.startBlock()
- var message string
- switch summary.State {
- case types.SpecStateFailed:
- message = "Failure"
- case types.SpecStatePanicked:
- message = "Panic"
- case types.SpecStateTimedOut:
- message = "Timeout"
- }
-
- s.println(0, s.colorize(redColor+boldStyle, "%s [%.3f seconds]", message, summary.RunTime.Seconds()))
-
- indentation := s.printCodeLocationBlock([]string{name}, []types.CodeLocation{summary.CodeLocation}, summary.ComponentType, 0, summary.State, true)
-
- s.printNewLine()
- s.printFailure(indentation, summary.State, summary.Failure, fullTrace)
-
- s.endBlock()
-}
-
-func (s *consoleStenographer) AnnounceCapturedOutput(output string) {
- if output == "" {
- return
- }
-
- s.startBlock()
- s.println(0, output)
- s.midBlock()
-}
-
-func (s *consoleStenographer) AnnounceSuccesfulSpec(spec *types.SpecSummary) {
- s.print(0, s.colorize(greenColor, s.denoter))
- s.stream()
-}
-
-func (s *consoleStenographer) AnnounceSuccesfulSlowSpec(spec *types.SpecSummary, succinct bool) {
- s.printBlockWithMessage(
- s.colorize(greenColor, "%s [SLOW TEST:%.3f seconds]", s.denoter, spec.RunTime.Seconds()),
- "",
- spec,
- succinct,
- )
-}
-
-func (s *consoleStenographer) AnnounceSuccesfulMeasurement(spec *types.SpecSummary, succinct bool) {
- s.printBlockWithMessage(
- s.colorize(greenColor, "%s [MEASUREMENT]", s.denoter),
- s.measurementReport(spec, succinct),
- spec,
- succinct,
- )
-}
-
-func (s *consoleStenographer) AnnouncePendingSpec(spec *types.SpecSummary, noisy bool) {
- if noisy {
- s.printBlockWithMessage(
- s.colorize(yellowColor, "P [PENDING]"),
- "",
- spec,
- false,
- )
- } else {
- s.print(0, s.colorize(yellowColor, "P"))
- s.stream()
- }
-}
-
-func (s *consoleStenographer) AnnounceSkippedSpec(spec *types.SpecSummary, succinct bool, fullTrace bool) {
- // Skips at runtime will have a non-empty spec.Failure. All others should be succinct.
- if succinct || spec.Failure == (types.SpecFailure{}) {
- s.print(0, s.colorize(cyanColor, "S"))
- s.stream()
- } else {
- s.startBlock()
- s.println(0, s.colorize(cyanColor+boldStyle, "S [SKIPPING]%s [%.3f seconds]", s.failureContext(spec.Failure.ComponentType), spec.RunTime.Seconds()))
-
- indentation := s.printCodeLocationBlock(spec.ComponentTexts, spec.ComponentCodeLocations, spec.Failure.ComponentType, spec.Failure.ComponentIndex, spec.State, succinct)
-
- s.printNewLine()
- s.printSkip(indentation, spec.Failure)
- s.endBlock()
- }
-}
-
-func (s *consoleStenographer) AnnounceSpecTimedOut(spec *types.SpecSummary, succinct bool, fullTrace bool) {
- s.printSpecFailure(fmt.Sprintf("%s... Timeout", s.denoter), spec, succinct, fullTrace)
-}
-
-func (s *consoleStenographer) AnnounceSpecPanicked(spec *types.SpecSummary, succinct bool, fullTrace bool) {
- s.printSpecFailure(fmt.Sprintf("%s! Panic", s.denoter), spec, succinct, fullTrace)
-}
-
-func (s *consoleStenographer) AnnounceSpecFailed(spec *types.SpecSummary, succinct bool, fullTrace bool) {
- s.printSpecFailure(fmt.Sprintf("%s Failure", s.denoter), spec, succinct, fullTrace)
-}
-
-func (s *consoleStenographer) SummarizeFailures(summaries []*types.SpecSummary) {
- failingSpecs := []*types.SpecSummary{}
-
- for _, summary := range summaries {
- if summary.HasFailureState() {
- failingSpecs = append(failingSpecs, summary)
- }
- }
-
- if len(failingSpecs) == 0 {
- return
- }
-
- s.printNewLine()
- s.printNewLine()
- plural := "s"
- if len(failingSpecs) == 1 {
- plural = ""
- }
- s.println(0, s.colorize(redColor+boldStyle, "Summarizing %d Failure%s:", len(failingSpecs), plural))
- for _, summary := range failingSpecs {
- s.printNewLine()
- if summary.HasFailureState() {
- if summary.TimedOut() {
- s.print(0, s.colorize(redColor+boldStyle, "[Timeout...] "))
- } else if summary.Panicked() {
- s.print(0, s.colorize(redColor+boldStyle, "[Panic!] "))
- } else if summary.Failed() {
- s.print(0, s.colorize(redColor+boldStyle, "[Fail] "))
- }
- s.printSpecContext(summary.ComponentTexts, summary.ComponentCodeLocations, summary.Failure.ComponentType, summary.Failure.ComponentIndex, summary.State, true)
- s.printNewLine()
- s.println(0, s.colorize(lightGrayColor, summary.Failure.Location.String()))
- }
- }
-}
-
-func (s *consoleStenographer) startBlock() {
- if s.cursorState == cursorStateStreaming {
- s.printNewLine()
- s.printDelimiter()
- } else if s.cursorState == cursorStateMidBlock {
- s.printNewLine()
- }
-}
-
-func (s *consoleStenographer) midBlock() {
- s.cursorState = cursorStateMidBlock
-}
-
-func (s *consoleStenographer) endBlock() {
- s.printDelimiter()
- s.cursorState = cursorStateEndBlock
-}
-
-func (s *consoleStenographer) stream() {
- s.cursorState = cursorStateStreaming
-}
-
-func (s *consoleStenographer) printBlockWithMessage(header string, message string, spec *types.SpecSummary, succinct bool) {
- s.startBlock()
- s.println(0, header)
-
- indentation := s.printCodeLocationBlock(spec.ComponentTexts, spec.ComponentCodeLocations, types.SpecComponentTypeInvalid, 0, spec.State, succinct)
-
- if message != "" {
- s.printNewLine()
- s.println(indentation, message)
- }
-
- s.endBlock()
-}
-
-func (s *consoleStenographer) printSpecFailure(message string, spec *types.SpecSummary, succinct bool, fullTrace bool) {
- s.startBlock()
- s.println(0, s.colorize(redColor+boldStyle, "%s%s [%.3f seconds]", message, s.failureContext(spec.Failure.ComponentType), spec.RunTime.Seconds()))
-
- indentation := s.printCodeLocationBlock(spec.ComponentTexts, spec.ComponentCodeLocations, spec.Failure.ComponentType, spec.Failure.ComponentIndex, spec.State, succinct)
-
- s.printNewLine()
- s.printFailure(indentation, spec.State, spec.Failure, fullTrace)
- s.endBlock()
-}
-
-func (s *consoleStenographer) failureContext(failedComponentType types.SpecComponentType) string {
- switch failedComponentType {
- case types.SpecComponentTypeBeforeSuite:
- return " in Suite Setup (BeforeSuite)"
- case types.SpecComponentTypeAfterSuite:
- return " in Suite Teardown (AfterSuite)"
- case types.SpecComponentTypeBeforeEach:
- return " in Spec Setup (BeforeEach)"
- case types.SpecComponentTypeJustBeforeEach:
- return " in Spec Setup (JustBeforeEach)"
- case types.SpecComponentTypeAfterEach:
- return " in Spec Teardown (AfterEach)"
- }
-
- return ""
-}
-
-func (s *consoleStenographer) printSkip(indentation int, spec types.SpecFailure) {
- s.println(indentation, s.colorize(cyanColor, spec.Message))
- s.printNewLine()
- s.println(indentation, spec.Location.String())
-}
-
-func (s *consoleStenographer) printFailure(indentation int, state types.SpecState, failure types.SpecFailure, fullTrace bool) {
- if state == types.SpecStatePanicked {
- s.println(indentation, s.colorize(redColor+boldStyle, failure.Message))
- s.println(indentation, s.colorize(redColor, failure.ForwardedPanic))
- s.println(indentation, failure.Location.String())
- s.printNewLine()
- s.println(indentation, s.colorize(redColor, "Full Stack Trace"))
- s.println(indentation, failure.Location.FullStackTrace)
- } else {
- s.println(indentation, s.colorize(redColor, failure.Message))
- s.printNewLine()
- s.println(indentation, failure.Location.String())
- if fullTrace {
- s.printNewLine()
- s.println(indentation, s.colorize(redColor, "Full Stack Trace"))
- s.println(indentation, failure.Location.FullStackTrace)
- }
- }
-}
-
-func (s *consoleStenographer) printSpecContext(componentTexts []string, componentCodeLocations []types.CodeLocation, failedComponentType types.SpecComponentType, failedComponentIndex int, state types.SpecState, succinct bool) int {
- startIndex := 1
- indentation := 0
-
- if len(componentTexts) == 1 {
- startIndex = 0
- }
-
- for i := startIndex; i < len(componentTexts); i++ {
- if (state.IsFailure() || state == types.SpecStateSkipped) && i == failedComponentIndex {
- color := redColor
- if state == types.SpecStateSkipped {
- color = cyanColor
- }
- blockType := ""
- switch failedComponentType {
- case types.SpecComponentTypeBeforeSuite:
- blockType = "BeforeSuite"
- case types.SpecComponentTypeAfterSuite:
- blockType = "AfterSuite"
- case types.SpecComponentTypeBeforeEach:
- blockType = "BeforeEach"
- case types.SpecComponentTypeJustBeforeEach:
- blockType = "JustBeforeEach"
- case types.SpecComponentTypeAfterEach:
- blockType = "AfterEach"
- case types.SpecComponentTypeIt:
- blockType = "It"
- case types.SpecComponentTypeMeasure:
- blockType = "Measurement"
- }
- if succinct {
- s.print(0, s.colorize(color+boldStyle, "[%s] %s ", blockType, componentTexts[i]))
- } else {
- s.println(indentation, s.colorize(color+boldStyle, "%s [%s]", componentTexts[i], blockType))
- s.println(indentation, s.colorize(grayColor, "%s", componentCodeLocations[i]))
- }
- } else {
- if succinct {
- s.print(0, s.colorize(alternatingColors[i%2], "%s ", componentTexts[i]))
- } else {
- s.println(indentation, componentTexts[i])
- s.println(indentation, s.colorize(grayColor, "%s", componentCodeLocations[i]))
- }
- }
- indentation++
- }
-
- return indentation
-}
-
-func (s *consoleStenographer) printCodeLocationBlock(componentTexts []string, componentCodeLocations []types.CodeLocation, failedComponentType types.SpecComponentType, failedComponentIndex int, state types.SpecState, succinct bool) int {
- indentation := s.printSpecContext(componentTexts, componentCodeLocations, failedComponentType, failedComponentIndex, state, succinct)
-
- if succinct {
- if len(componentTexts) > 0 {
- s.printNewLine()
- s.print(0, s.colorize(lightGrayColor, "%s", componentCodeLocations[len(componentCodeLocations)-1]))
- }
- s.printNewLine()
- indentation = 1
- } else {
- indentation--
- }
-
- return indentation
-}
-
-func (s *consoleStenographer) orderedMeasurementKeys(measurements map[string]*types.SpecMeasurement) []string {
- orderedKeys := make([]string, len(measurements))
- for key, measurement := range measurements {
- orderedKeys[measurement.Order] = key
- }
- return orderedKeys
-}
-
-func (s *consoleStenographer) measurementReport(spec *types.SpecSummary, succinct bool) string {
- if len(spec.Measurements) == 0 {
- return "Found no measurements"
- }
-
- message := []string{}
- orderedKeys := s.orderedMeasurementKeys(spec.Measurements)
-
- if succinct {
- message = append(message, fmt.Sprintf("%s samples:", s.colorize(boldStyle, "%d", spec.NumberOfSamples)))
- for _, key := range orderedKeys {
- measurement := spec.Measurements[key]
- message = append(message, fmt.Sprintf(" %s - %s: %s%s, %s: %s%s ± %s%s, %s: %s%s",
- s.colorize(boldStyle, "%s", measurement.Name),
- measurement.SmallestLabel,
- s.colorize(greenColor, measurement.PrecisionFmt(), measurement.Smallest),
- measurement.Units,
- measurement.AverageLabel,
- s.colorize(cyanColor, measurement.PrecisionFmt(), measurement.Average),
- measurement.Units,
- s.colorize(cyanColor, measurement.PrecisionFmt(), measurement.StdDeviation),
- measurement.Units,
- measurement.LargestLabel,
- s.colorize(redColor, measurement.PrecisionFmt(), measurement.Largest),
- measurement.Units,
- ))
- }
- } else {
- message = append(message, fmt.Sprintf("Ran %s samples:", s.colorize(boldStyle, "%d", spec.NumberOfSamples)))
- for _, key := range orderedKeys {
- measurement := spec.Measurements[key]
- info := ""
- if measurement.Info != nil {
- message = append(message, fmt.Sprintf("%v", measurement.Info))
- }
-
- message = append(message, fmt.Sprintf("%s:\n%s %s: %s%s\n %s: %s%s\n %s: %s%s ± %s%s",
- s.colorize(boldStyle, "%s", measurement.Name),
- info,
- measurement.SmallestLabel,
- s.colorize(greenColor, measurement.PrecisionFmt(), measurement.Smallest),
- measurement.Units,
- measurement.LargestLabel,
- s.colorize(redColor, measurement.PrecisionFmt(), measurement.Largest),
- measurement.Units,
- measurement.AverageLabel,
- s.colorize(cyanColor, measurement.PrecisionFmt(), measurement.Average),
- measurement.Units,
- s.colorize(cyanColor, measurement.PrecisionFmt(), measurement.StdDeviation),
- measurement.Units,
- ))
- }
- }
-
- return strings.Join(message, "\n")
-}
diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/LICENSE b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/LICENSE
deleted file mode 100644
index 91b5cef..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2016 Yasuhiro Matsumoto
-
-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/ginkgo/reporters/stenographer/support/go-colorable/README.md b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/README.md
deleted file mode 100644
index e84226a..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/README.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# go-colorable
-
-Colorable writer for windows.
-
-For example, most of logger packages doesn't show colors on windows. (I know we can do it with ansicon. But I don't want.)
-This package is possible to handle escape sequence for ansi color on windows.
-
-## Too Bad!
-
-![](https://raw.githubusercontent.com/mattn/go-colorable/gh-pages/bad.png)
-
-
-## So Good!
-
-![](https://raw.githubusercontent.com/mattn/go-colorable/gh-pages/good.png)
-
-## Usage
-
-```go
-logrus.SetFormatter(&logrus.TextFormatter{ForceColors: true})
-logrus.SetOutput(colorable.NewColorableStdout())
-
-logrus.Info("succeeded")
-logrus.Warn("not correct")
-logrus.Error("something error")
-logrus.Fatal("panic")
-```
-
-You can compile above code on non-windows OSs.
-
-## Installation
-
-```
-$ go get github.com/mattn/go-colorable
-```
-
-# License
-
-MIT
-
-# Author
-
-Yasuhiro Matsumoto (a.k.a mattn)
diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/colorable_others.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/colorable_others.go
deleted file mode 100644
index 52d6653..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/colorable_others.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build !windows
-
-package colorable
-
-import (
- "io"
- "os"
-)
-
-func NewColorable(file *os.File) io.Writer {
- if file == nil {
- panic("nil passed instead of *os.File to NewColorable()")
- }
-
- return file
-}
-
-func NewColorableStdout() io.Writer {
- return os.Stdout
-}
-
-func NewColorableStderr() io.Writer {
- return os.Stderr
-}
diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/colorable_windows.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/colorable_windows.go
deleted file mode 100644
index 1088009..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/colorable_windows.go
+++ /dev/null
@@ -1,783 +0,0 @@
-package colorable
-
-import (
- "bytes"
- "fmt"
- "io"
- "math"
- "os"
- "strconv"
- "strings"
- "syscall"
- "unsafe"
-
- "github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty"
-)
-
-const (
- foregroundBlue = 0x1
- foregroundGreen = 0x2
- foregroundRed = 0x4
- foregroundIntensity = 0x8
- foregroundMask = (foregroundRed | foregroundBlue | foregroundGreen | foregroundIntensity)
- backgroundBlue = 0x10
- backgroundGreen = 0x20
- backgroundRed = 0x40
- backgroundIntensity = 0x80
- backgroundMask = (backgroundRed | backgroundBlue | backgroundGreen | backgroundIntensity)
-)
-
-type wchar uint16
-type short int16
-type dword uint32
-type word uint16
-
-type coord struct {
- x short
- y short
-}
-
-type smallRect struct {
- left short
- top short
- right short
- bottom short
-}
-
-type consoleScreenBufferInfo struct {
- size coord
- cursorPosition coord
- attributes word
- window smallRect
- maximumWindowSize coord
-}
-
-var (
- kernel32 = syscall.NewLazyDLL("kernel32.dll")
- procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo")
- procSetConsoleTextAttribute = kernel32.NewProc("SetConsoleTextAttribute")
- procSetConsoleCursorPosition = kernel32.NewProc("SetConsoleCursorPosition")
- procFillConsoleOutputCharacter = kernel32.NewProc("FillConsoleOutputCharacterW")
- procFillConsoleOutputAttribute = kernel32.NewProc("FillConsoleOutputAttribute")
-)
-
-type Writer struct {
- out io.Writer
- handle syscall.Handle
- lastbuf bytes.Buffer
- oldattr word
-}
-
-func NewColorable(file *os.File) io.Writer {
- if file == nil {
- panic("nil passed instead of *os.File to NewColorable()")
- }
-
- if isatty.IsTerminal(file.Fd()) {
- var csbi consoleScreenBufferInfo
- handle := syscall.Handle(file.Fd())
- procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
- return &Writer{out: file, handle: handle, oldattr: csbi.attributes}
- } else {
- return file
- }
-}
-
-func NewColorableStdout() io.Writer {
- return NewColorable(os.Stdout)
-}
-
-func NewColorableStderr() io.Writer {
- return NewColorable(os.Stderr)
-}
-
-var color256 = map[int]int{
- 0: 0x000000,
- 1: 0x800000,
- 2: 0x008000,
- 3: 0x808000,
- 4: 0x000080,
- 5: 0x800080,
- 6: 0x008080,
- 7: 0xc0c0c0,
- 8: 0x808080,
- 9: 0xff0000,
- 10: 0x00ff00,
- 11: 0xffff00,
- 12: 0x0000ff,
- 13: 0xff00ff,
- 14: 0x00ffff,
- 15: 0xffffff,
- 16: 0x000000,
- 17: 0x00005f,
- 18: 0x000087,
- 19: 0x0000af,
- 20: 0x0000d7,
- 21: 0x0000ff,
- 22: 0x005f00,
- 23: 0x005f5f,
- 24: 0x005f87,
- 25: 0x005faf,
- 26: 0x005fd7,
- 27: 0x005fff,
- 28: 0x008700,
- 29: 0x00875f,
- 30: 0x008787,
- 31: 0x0087af,
- 32: 0x0087d7,
- 33: 0x0087ff,
- 34: 0x00af00,
- 35: 0x00af5f,
- 36: 0x00af87,
- 37: 0x00afaf,
- 38: 0x00afd7,
- 39: 0x00afff,
- 40: 0x00d700,
- 41: 0x00d75f,
- 42: 0x00d787,
- 43: 0x00d7af,
- 44: 0x00d7d7,
- 45: 0x00d7ff,
- 46: 0x00ff00,
- 47: 0x00ff5f,
- 48: 0x00ff87,
- 49: 0x00ffaf,
- 50: 0x00ffd7,
- 51: 0x00ffff,
- 52: 0x5f0000,
- 53: 0x5f005f,
- 54: 0x5f0087,
- 55: 0x5f00af,
- 56: 0x5f00d7,
- 57: 0x5f00ff,
- 58: 0x5f5f00,
- 59: 0x5f5f5f,
- 60: 0x5f5f87,
- 61: 0x5f5faf,
- 62: 0x5f5fd7,
- 63: 0x5f5fff,
- 64: 0x5f8700,
- 65: 0x5f875f,
- 66: 0x5f8787,
- 67: 0x5f87af,
- 68: 0x5f87d7,
- 69: 0x5f87ff,
- 70: 0x5faf00,
- 71: 0x5faf5f,
- 72: 0x5faf87,
- 73: 0x5fafaf,
- 74: 0x5fafd7,
- 75: 0x5fafff,
- 76: 0x5fd700,
- 77: 0x5fd75f,
- 78: 0x5fd787,
- 79: 0x5fd7af,
- 80: 0x5fd7d7,
- 81: 0x5fd7ff,
- 82: 0x5fff00,
- 83: 0x5fff5f,
- 84: 0x5fff87,
- 85: 0x5fffaf,
- 86: 0x5fffd7,
- 87: 0x5fffff,
- 88: 0x870000,
- 89: 0x87005f,
- 90: 0x870087,
- 91: 0x8700af,
- 92: 0x8700d7,
- 93: 0x8700ff,
- 94: 0x875f00,
- 95: 0x875f5f,
- 96: 0x875f87,
- 97: 0x875faf,
- 98: 0x875fd7,
- 99: 0x875fff,
- 100: 0x878700,
- 101: 0x87875f,
- 102: 0x878787,
- 103: 0x8787af,
- 104: 0x8787d7,
- 105: 0x8787ff,
- 106: 0x87af00,
- 107: 0x87af5f,
- 108: 0x87af87,
- 109: 0x87afaf,
- 110: 0x87afd7,
- 111: 0x87afff,
- 112: 0x87d700,
- 113: 0x87d75f,
- 114: 0x87d787,
- 115: 0x87d7af,
- 116: 0x87d7d7,
- 117: 0x87d7ff,
- 118: 0x87ff00,
- 119: 0x87ff5f,
- 120: 0x87ff87,
- 121: 0x87ffaf,
- 122: 0x87ffd7,
- 123: 0x87ffff,
- 124: 0xaf0000,
- 125: 0xaf005f,
- 126: 0xaf0087,
- 127: 0xaf00af,
- 128: 0xaf00d7,
- 129: 0xaf00ff,
- 130: 0xaf5f00,
- 131: 0xaf5f5f,
- 132: 0xaf5f87,
- 133: 0xaf5faf,
- 134: 0xaf5fd7,
- 135: 0xaf5fff,
- 136: 0xaf8700,
- 137: 0xaf875f,
- 138: 0xaf8787,
- 139: 0xaf87af,
- 140: 0xaf87d7,
- 141: 0xaf87ff,
- 142: 0xafaf00,
- 143: 0xafaf5f,
- 144: 0xafaf87,
- 145: 0xafafaf,
- 146: 0xafafd7,
- 147: 0xafafff,
- 148: 0xafd700,
- 149: 0xafd75f,
- 150: 0xafd787,
- 151: 0xafd7af,
- 152: 0xafd7d7,
- 153: 0xafd7ff,
- 154: 0xafff00,
- 155: 0xafff5f,
- 156: 0xafff87,
- 157: 0xafffaf,
- 158: 0xafffd7,
- 159: 0xafffff,
- 160: 0xd70000,
- 161: 0xd7005f,
- 162: 0xd70087,
- 163: 0xd700af,
- 164: 0xd700d7,
- 165: 0xd700ff,
- 166: 0xd75f00,
- 167: 0xd75f5f,
- 168: 0xd75f87,
- 169: 0xd75faf,
- 170: 0xd75fd7,
- 171: 0xd75fff,
- 172: 0xd78700,
- 173: 0xd7875f,
- 174: 0xd78787,
- 175: 0xd787af,
- 176: 0xd787d7,
- 177: 0xd787ff,
- 178: 0xd7af00,
- 179: 0xd7af5f,
- 180: 0xd7af87,
- 181: 0xd7afaf,
- 182: 0xd7afd7,
- 183: 0xd7afff,
- 184: 0xd7d700,
- 185: 0xd7d75f,
- 186: 0xd7d787,
- 187: 0xd7d7af,
- 188: 0xd7d7d7,
- 189: 0xd7d7ff,
- 190: 0xd7ff00,
- 191: 0xd7ff5f,
- 192: 0xd7ff87,
- 193: 0xd7ffaf,
- 194: 0xd7ffd7,
- 195: 0xd7ffff,
- 196: 0xff0000,
- 197: 0xff005f,
- 198: 0xff0087,
- 199: 0xff00af,
- 200: 0xff00d7,
- 201: 0xff00ff,
- 202: 0xff5f00,
- 203: 0xff5f5f,
- 204: 0xff5f87,
- 205: 0xff5faf,
- 206: 0xff5fd7,
- 207: 0xff5fff,
- 208: 0xff8700,
- 209: 0xff875f,
- 210: 0xff8787,
- 211: 0xff87af,
- 212: 0xff87d7,
- 213: 0xff87ff,
- 214: 0xffaf00,
- 215: 0xffaf5f,
- 216: 0xffaf87,
- 217: 0xffafaf,
- 218: 0xffafd7,
- 219: 0xffafff,
- 220: 0xffd700,
- 221: 0xffd75f,
- 222: 0xffd787,
- 223: 0xffd7af,
- 224: 0xffd7d7,
- 225: 0xffd7ff,
- 226: 0xffff00,
- 227: 0xffff5f,
- 228: 0xffff87,
- 229: 0xffffaf,
- 230: 0xffffd7,
- 231: 0xffffff,
- 232: 0x080808,
- 233: 0x121212,
- 234: 0x1c1c1c,
- 235: 0x262626,
- 236: 0x303030,
- 237: 0x3a3a3a,
- 238: 0x444444,
- 239: 0x4e4e4e,
- 240: 0x585858,
- 241: 0x626262,
- 242: 0x6c6c6c,
- 243: 0x767676,
- 244: 0x808080,
- 245: 0x8a8a8a,
- 246: 0x949494,
- 247: 0x9e9e9e,
- 248: 0xa8a8a8,
- 249: 0xb2b2b2,
- 250: 0xbcbcbc,
- 251: 0xc6c6c6,
- 252: 0xd0d0d0,
- 253: 0xdadada,
- 254: 0xe4e4e4,
- 255: 0xeeeeee,
-}
-
-func (w *Writer) Write(data []byte) (n int, err error) {
- var csbi consoleScreenBufferInfo
- procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
-
- er := bytes.NewBuffer(data)
-loop:
- for {
- r1, _, err := procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
- if r1 == 0 {
- break loop
- }
-
- c1, _, err := er.ReadRune()
- if err != nil {
- break loop
- }
- if c1 != 0x1b {
- fmt.Fprint(w.out, string(c1))
- continue
- }
- c2, _, err := er.ReadRune()
- if err != nil {
- w.lastbuf.WriteRune(c1)
- break loop
- }
- if c2 != 0x5b {
- w.lastbuf.WriteRune(c1)
- w.lastbuf.WriteRune(c2)
- continue
- }
-
- var buf bytes.Buffer
- var m rune
- for {
- c, _, err := er.ReadRune()
- if err != nil {
- w.lastbuf.WriteRune(c1)
- w.lastbuf.WriteRune(c2)
- w.lastbuf.Write(buf.Bytes())
- break loop
- }
- if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' {
- m = c
- break
- }
- buf.Write([]byte(string(c)))
- }
-
- var csbi consoleScreenBufferInfo
- switch m {
- case 'A':
- n, err = strconv.Atoi(buf.String())
- if err != nil {
- continue
- }
- procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
- csbi.cursorPosition.y -= short(n)
- procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
- case 'B':
- n, err = strconv.Atoi(buf.String())
- if err != nil {
- continue
- }
- procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
- csbi.cursorPosition.y += short(n)
- procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
- case 'C':
- n, err = strconv.Atoi(buf.String())
- if err != nil {
- continue
- }
- procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
- csbi.cursorPosition.x -= short(n)
- procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
- case 'D':
- n, err = strconv.Atoi(buf.String())
- if err != nil {
- continue
- }
- if n, err = strconv.Atoi(buf.String()); err == nil {
- var csbi consoleScreenBufferInfo
- procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
- csbi.cursorPosition.x += short(n)
- procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
- }
- case 'E':
- n, err = strconv.Atoi(buf.String())
- if err != nil {
- continue
- }
- procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
- csbi.cursorPosition.x = 0
- csbi.cursorPosition.y += short(n)
- procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
- case 'F':
- n, err = strconv.Atoi(buf.String())
- if err != nil {
- continue
- }
- procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
- csbi.cursorPosition.x = 0
- csbi.cursorPosition.y -= short(n)
- procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
- case 'G':
- n, err = strconv.Atoi(buf.String())
- if err != nil {
- continue
- }
- procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
- csbi.cursorPosition.x = short(n)
- procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
- case 'H':
- token := strings.Split(buf.String(), ";")
- if len(token) != 2 {
- continue
- }
- n1, err := strconv.Atoi(token[0])
- if err != nil {
- continue
- }
- n2, err := strconv.Atoi(token[1])
- if err != nil {
- continue
- }
- csbi.cursorPosition.x = short(n2)
- csbi.cursorPosition.x = short(n1)
- procSetConsoleCursorPosition.Call(uintptr(w.handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))
- case 'J':
- n, err := strconv.Atoi(buf.String())
- if err != nil {
- continue
- }
- var cursor coord
- switch n {
- case 0:
- cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y}
- case 1:
- cursor = coord{x: csbi.window.left, y: csbi.window.top}
- case 2:
- cursor = coord{x: csbi.window.left, y: csbi.window.top}
- }
- var count, written dword
- count = dword(csbi.size.x - csbi.cursorPosition.x + (csbi.size.y-csbi.cursorPosition.y)*csbi.size.x)
- procFillConsoleOutputCharacter.Call(uintptr(w.handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
- procFillConsoleOutputAttribute.Call(uintptr(w.handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
- case 'K':
- n, err := strconv.Atoi(buf.String())
- if err != nil {
- continue
- }
- var cursor coord
- switch n {
- case 0:
- cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y}
- case 1:
- cursor = coord{x: csbi.window.left, y: csbi.window.top + csbi.cursorPosition.y}
- case 2:
- cursor = coord{x: csbi.window.left, y: csbi.window.top + csbi.cursorPosition.y}
- }
- var count, written dword
- count = dword(csbi.size.x - csbi.cursorPosition.x)
- procFillConsoleOutputCharacter.Call(uintptr(w.handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
- procFillConsoleOutputAttribute.Call(uintptr(w.handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
- case 'm':
- attr := csbi.attributes
- cs := buf.String()
- if cs == "" {
- procSetConsoleTextAttribute.Call(uintptr(w.handle), uintptr(w.oldattr))
- continue
- }
- token := strings.Split(cs, ";")
- for i := 0; i < len(token); i += 1 {
- ns := token[i]
- if n, err = strconv.Atoi(ns); err == nil {
- switch {
- case n == 0 || n == 100:
- attr = w.oldattr
- case 1 <= n && n <= 5:
- attr |= foregroundIntensity
- case n == 7:
- attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4)
- case 22 == n || n == 25 || n == 25:
- attr |= foregroundIntensity
- case n == 27:
- attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4)
- case 30 <= n && n <= 37:
- attr = (attr & backgroundMask)
- if (n-30)&1 != 0 {
- attr |= foregroundRed
- }
- if (n-30)&2 != 0 {
- attr |= foregroundGreen
- }
- if (n-30)&4 != 0 {
- attr |= foregroundBlue
- }
- case n == 38: // set foreground color.
- if i < len(token)-2 && (token[i+1] == "5" || token[i+1] == "05") {
- if n256, err := strconv.Atoi(token[i+2]); err == nil {
- if n256foreAttr == nil {
- n256setup()
- }
- attr &= backgroundMask
- attr |= n256foreAttr[n256]
- i += 2
- }
- } else {
- attr = attr & (w.oldattr & backgroundMask)
- }
- case n == 39: // reset foreground color.
- attr &= backgroundMask
- attr |= w.oldattr & foregroundMask
- case 40 <= n && n <= 47:
- attr = (attr & foregroundMask)
- if (n-40)&1 != 0 {
- attr |= backgroundRed
- }
- if (n-40)&2 != 0 {
- attr |= backgroundGreen
- }
- if (n-40)&4 != 0 {
- attr |= backgroundBlue
- }
- case n == 48: // set background color.
- if i < len(token)-2 && token[i+1] == "5" {
- if n256, err := strconv.Atoi(token[i+2]); err == nil {
- if n256backAttr == nil {
- n256setup()
- }
- attr &= foregroundMask
- attr |= n256backAttr[n256]
- i += 2
- }
- } else {
- attr = attr & (w.oldattr & foregroundMask)
- }
- case n == 49: // reset foreground color.
- attr &= foregroundMask
- attr |= w.oldattr & backgroundMask
- case 90 <= n && n <= 97:
- attr = (attr & backgroundMask)
- attr |= foregroundIntensity
- if (n-90)&1 != 0 {
- attr |= foregroundRed
- }
- if (n-90)&2 != 0 {
- attr |= foregroundGreen
- }
- if (n-90)&4 != 0 {
- attr |= foregroundBlue
- }
- case 100 <= n && n <= 107:
- attr = (attr & foregroundMask)
- attr |= backgroundIntensity
- if (n-100)&1 != 0 {
- attr |= backgroundRed
- }
- if (n-100)&2 != 0 {
- attr |= backgroundGreen
- }
- if (n-100)&4 != 0 {
- attr |= backgroundBlue
- }
- }
- procSetConsoleTextAttribute.Call(uintptr(w.handle), uintptr(attr))
- }
- }
- }
- }
- return len(data) - w.lastbuf.Len(), nil
-}
-
-type consoleColor struct {
- rgb int
- red bool
- green bool
- blue bool
- intensity bool
-}
-
-func (c consoleColor) foregroundAttr() (attr word) {
- if c.red {
- attr |= foregroundRed
- }
- if c.green {
- attr |= foregroundGreen
- }
- if c.blue {
- attr |= foregroundBlue
- }
- if c.intensity {
- attr |= foregroundIntensity
- }
- return
-}
-
-func (c consoleColor) backgroundAttr() (attr word) {
- if c.red {
- attr |= backgroundRed
- }
- if c.green {
- attr |= backgroundGreen
- }
- if c.blue {
- attr |= backgroundBlue
- }
- if c.intensity {
- attr |= backgroundIntensity
- }
- return
-}
-
-var color16 = []consoleColor{
- consoleColor{0x000000, false, false, false, false},
- consoleColor{0x000080, false, false, true, false},
- consoleColor{0x008000, false, true, false, false},
- consoleColor{0x008080, false, true, true, false},
- consoleColor{0x800000, true, false, false, false},
- consoleColor{0x800080, true, false, true, false},
- consoleColor{0x808000, true, true, false, false},
- consoleColor{0xc0c0c0, true, true, true, false},
- consoleColor{0x808080, false, false, false, true},
- consoleColor{0x0000ff, false, false, true, true},
- consoleColor{0x00ff00, false, true, false, true},
- consoleColor{0x00ffff, false, true, true, true},
- consoleColor{0xff0000, true, false, false, true},
- consoleColor{0xff00ff, true, false, true, true},
- consoleColor{0xffff00, true, true, false, true},
- consoleColor{0xffffff, true, true, true, true},
-}
-
-type hsv struct {
- h, s, v float32
-}
-
-func (a hsv) dist(b hsv) float32 {
- dh := a.h - b.h
- switch {
- case dh > 0.5:
- dh = 1 - dh
- case dh < -0.5:
- dh = -1 - dh
- }
- ds := a.s - b.s
- dv := a.v - b.v
- return float32(math.Sqrt(float64(dh*dh + ds*ds + dv*dv)))
-}
-
-func toHSV(rgb int) hsv {
- r, g, b := float32((rgb&0xFF0000)>>16)/256.0,
- float32((rgb&0x00FF00)>>8)/256.0,
- float32(rgb&0x0000FF)/256.0
- min, max := minmax3f(r, g, b)
- h := max - min
- if h > 0 {
- if max == r {
- h = (g - b) / h
- if h < 0 {
- h += 6
- }
- } else if max == g {
- h = 2 + (b-r)/h
- } else {
- h = 4 + (r-g)/h
- }
- }
- h /= 6.0
- s := max - min
- if max != 0 {
- s /= max
- }
- v := max
- return hsv{h: h, s: s, v: v}
-}
-
-type hsvTable []hsv
-
-func toHSVTable(rgbTable []consoleColor) hsvTable {
- t := make(hsvTable, len(rgbTable))
- for i, c := range rgbTable {
- t[i] = toHSV(c.rgb)
- }
- return t
-}
-
-func (t hsvTable) find(rgb int) consoleColor {
- hsv := toHSV(rgb)
- n := 7
- l := float32(5.0)
- for i, p := range t {
- d := hsv.dist(p)
- if d < l {
- l, n = d, i
- }
- }
- return color16[n]
-}
-
-func minmax3f(a, b, c float32) (min, max float32) {
- if a < b {
- if b < c {
- return a, c
- } else if a < c {
- return a, b
- } else {
- return c, b
- }
- } else {
- if a < c {
- return b, c
- } else if b < c {
- return b, a
- } else {
- return c, a
- }
- }
-}
-
-var n256foreAttr []word
-var n256backAttr []word
-
-func n256setup() {
- n256foreAttr = make([]word, 256)
- n256backAttr = make([]word, 256)
- t := toHSVTable(color16)
- for i, rgb := range color256 {
- c := t.find(rgb)
- n256foreAttr[i] = c.foregroundAttr()
- n256backAttr[i] = c.backgroundAttr()
- }
-}
diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/noncolorable.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/noncolorable.go
deleted file mode 100644
index fb976db..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable/noncolorable.go
+++ /dev/null
@@ -1,57 +0,0 @@
-package colorable
-
-import (
- "bytes"
- "fmt"
- "io"
-)
-
-type NonColorable struct {
- out io.Writer
- lastbuf bytes.Buffer
-}
-
-func NewNonColorable(w io.Writer) io.Writer {
- return &NonColorable{out: w}
-}
-
-func (w *NonColorable) Write(data []byte) (n int, err error) {
- er := bytes.NewBuffer(data)
-loop:
- for {
- c1, _, err := er.ReadRune()
- if err != nil {
- break loop
- }
- if c1 != 0x1b {
- fmt.Fprint(w.out, string(c1))
- continue
- }
- c2, _, err := er.ReadRune()
- if err != nil {
- w.lastbuf.WriteRune(c1)
- break loop
- }
- if c2 != 0x5b {
- w.lastbuf.WriteRune(c1)
- w.lastbuf.WriteRune(c2)
- continue
- }
-
- var buf bytes.Buffer
- for {
- c, _, err := er.ReadRune()
- if err != nil {
- w.lastbuf.WriteRune(c1)
- w.lastbuf.WriteRune(c2)
- w.lastbuf.Write(buf.Bytes())
- break loop
- }
- if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' {
- break
- }
- buf.Write([]byte(string(c)))
- }
- }
- return len(data) - w.lastbuf.Len(), nil
-}
diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/LICENSE b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/LICENSE
deleted file mode 100644
index 65dc692..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/LICENSE
+++ /dev/null
@@ -1,9 +0,0 @@
-Copyright (c) Yasuhiro MATSUMOTO <mattn.jp@gmail.com>
-
-MIT License (Expat)
-
-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/ginkgo/reporters/stenographer/support/go-isatty/README.md b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/README.md
deleted file mode 100644
index 74845de..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# go-isatty
-
-isatty for golang
-
-## Usage
-
-```go
-package main
-
-import (
- "fmt"
- "github.com/mattn/go-isatty"
- "os"
-)
-
-func main() {
- if isatty.IsTerminal(os.Stdout.Fd()) {
- fmt.Println("Is Terminal")
- } else {
- fmt.Println("Is Not Terminal")
- }
-}
-```
-
-## Installation
-
-```
-$ go get github.com/mattn/go-isatty
-```
-
-# License
-
-MIT
-
-# Author
-
-Yasuhiro Matsumoto (a.k.a mattn)
diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/doc.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/doc.go
deleted file mode 100644
index 17d4f90..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/doc.go
+++ /dev/null
@@ -1,2 +0,0 @@
-// Package isatty implements interface to isatty
-package isatty
diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_appengine.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_appengine.go
deleted file mode 100644
index 83c5887..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_appengine.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build appengine
-
-package isatty
-
-// IsTerminal returns true if the file descriptor is terminal which
-// is always false on on appengine classic which is a sandboxed PaaS.
-func IsTerminal(fd uintptr) bool {
- return false
-}
diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_bsd.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_bsd.go
deleted file mode 100644
index 98ffe86..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_bsd.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// +build darwin freebsd openbsd netbsd
-// +build !appengine
-
-package isatty
-
-import (
- "syscall"
- "unsafe"
-)
-
-const ioctlReadTermios = syscall.TIOCGETA
-
-// IsTerminal return true if the file descriptor is terminal.
-func IsTerminal(fd uintptr) bool {
- var termios syscall.Termios
- _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0)
- return err == 0
-}
diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_linux.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_linux.go
deleted file mode 100644
index 9d24bac..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_linux.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// +build linux
-// +build !appengine
-
-package isatty
-
-import (
- "syscall"
- "unsafe"
-)
-
-const ioctlReadTermios = syscall.TCGETS
-
-// IsTerminal return true if the file descriptor is terminal.
-func IsTerminal(fd uintptr) bool {
- var termios syscall.Termios
- _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0)
- return err == 0
-}
diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_solaris.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_solaris.go
deleted file mode 100644
index 1f0c6bf..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_solaris.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// +build solaris
-// +build !appengine
-
-package isatty
-
-import (
- "golang.org/x/sys/unix"
-)
-
-// IsTerminal returns true if the given file descriptor is a terminal.
-// see: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libbc/libc/gen/common/isatty.c
-func IsTerminal(fd uintptr) bool {
- var termio unix.Termio
- err := unix.IoctlSetTermio(int(fd), unix.TCGETA, &termio)
- return err == nil
-}
diff --git a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_windows.go b/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_windows.go
deleted file mode 100644
index 83c398b..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty/isatty_windows.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build windows
-// +build !appengine
-
-package isatty
-
-import (
- "syscall"
- "unsafe"
-)
-
-var kernel32 = syscall.NewLazyDLL("kernel32.dll")
-var procGetConsoleMode = kernel32.NewProc("GetConsoleMode")
-
-// IsTerminal return true if the file descriptor is terminal.
-func IsTerminal(fd uintptr) bool {
- var st uint32
- r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, fd, uintptr(unsafe.Pointer(&st)), 0)
- return r != 0 && e == 0
-}
diff --git a/vendor/github.com/onsi/ginkgo/reporters/teamcity_reporter.go b/vendor/github.com/onsi/ginkgo/reporters/teamcity_reporter.go
deleted file mode 100644
index c8e27b2..0000000
--- a/vendor/github.com/onsi/ginkgo/reporters/teamcity_reporter.go
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
-
-TeamCity Reporter for Ginkgo
-
-Makes use of TeamCity's support for Service Messages
-http://confluence.jetbrains.com/display/TCD7/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-ReportingTests
-*/
-
-package reporters
-
-import (
- "fmt"
- "io"
- "strings"
-
- "github.com/onsi/ginkgo/config"
- "github.com/onsi/ginkgo/types"
-)
-
-const (
- messageId = "##teamcity"
-)
-
-type TeamCityReporter struct {
- writer io.Writer
- testSuiteName string
- ReporterConfig config.DefaultReporterConfigType
-}
-
-func NewTeamCityReporter(writer io.Writer) *TeamCityReporter {
- return &TeamCityReporter{
- writer: writer,
- }
-}
-
-func (reporter *TeamCityReporter) SpecSuiteWillBegin(config config.GinkgoConfigType, summary *types.SuiteSummary) {
- reporter.testSuiteName = escape(summary.SuiteDescription)
- fmt.Fprintf(reporter.writer, "%s[testSuiteStarted name='%s']", messageId, reporter.testSuiteName)
-}
-
-func (reporter *TeamCityReporter) BeforeSuiteDidRun(setupSummary *types.SetupSummary) {
- reporter.handleSetupSummary("BeforeSuite", setupSummary)
-}
-
-func (reporter *TeamCityReporter) AfterSuiteDidRun(setupSummary *types.SetupSummary) {
- reporter.handleSetupSummary("AfterSuite", setupSummary)
-}
-
-func (reporter *TeamCityReporter) handleSetupSummary(name string, setupSummary *types.SetupSummary) {
- if setupSummary.State != types.SpecStatePassed {
- testName := escape(name)
- fmt.Fprintf(reporter.writer, "%s[testStarted name='%s']", messageId, testName)
- message := escape(setupSummary.Failure.ComponentCodeLocation.String())
- details := escape(setupSummary.Failure.Message)
- fmt.Fprintf(reporter.writer, "%s[testFailed name='%s' message='%s' details='%s']", messageId, testName, message, details)
- durationInMilliseconds := setupSummary.RunTime.Seconds() * 1000
- fmt.Fprintf(reporter.writer, "%s[testFinished name='%s' duration='%v']", messageId, testName, durationInMilliseconds)
- }
-}
-
-func (reporter *TeamCityReporter) SpecWillRun(specSummary *types.SpecSummary) {
- testName := escape(strings.Join(specSummary.ComponentTexts[1:], " "))
- fmt.Fprintf(reporter.writer, "%s[testStarted name='%s']", messageId, testName)
-}
-
-func (reporter *TeamCityReporter) SpecDidComplete(specSummary *types.SpecSummary) {
- testName := escape(strings.Join(specSummary.ComponentTexts[1:], " "))
-
- if reporter.ReporterConfig.ReportPassed && specSummary.State == types.SpecStatePassed {
- details := escape(specSummary.CapturedOutput)
- fmt.Fprintf(reporter.writer, "%s[testPassed name='%s' details='%s']", messageId, testName, details)
- }
- if specSummary.State == types.SpecStateFailed || specSummary.State == types.SpecStateTimedOut || specSummary.State == types.SpecStatePanicked {
- message := escape(specSummary.Failure.ComponentCodeLocation.String())
- details := escape(specSummary.Failure.Message)
- fmt.Fprintf(reporter.writer, "%s[testFailed name='%s' message='%s' details='%s']", messageId, testName, message, details)
- }
- if specSummary.State == types.SpecStateSkipped || specSummary.State == types.SpecStatePending {
- fmt.Fprintf(reporter.writer, "%s[testIgnored name='%s']", messageId, testName)
- }
-
- durationInMilliseconds := specSummary.RunTime.Seconds() * 1000
- fmt.Fprintf(reporter.writer, "%s[testFinished name='%s' duration='%v']", messageId, testName, durationInMilliseconds)
-}
-
-func (reporter *TeamCityReporter) SpecSuiteDidEnd(summary *types.SuiteSummary) {
- fmt.Fprintf(reporter.writer, "%s[testSuiteFinished name='%s']", messageId, reporter.testSuiteName)
-}
-
-func escape(output string) string {
- output = strings.Replace(output, "|", "||", -1)
- output = strings.Replace(output, "'", "|'", -1)
- output = strings.Replace(output, "\n", "|n", -1)
- output = strings.Replace(output, "\r", "|r", -1)
- output = strings.Replace(output, "[", "|[", -1)
- output = strings.Replace(output, "]", "|]", -1)
- return output
-}
diff --git a/vendor/github.com/onsi/ginkgo/types/code_location.go b/vendor/github.com/onsi/ginkgo/types/code_location.go
deleted file mode 100644
index 935a89e..0000000
--- a/vendor/github.com/onsi/ginkgo/types/code_location.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package types
-
-import (
- "fmt"
-)
-
-type CodeLocation struct {
- FileName string
- LineNumber int
- FullStackTrace string
-}
-
-func (codeLocation CodeLocation) String() string {
- return fmt.Sprintf("%s:%d", codeLocation.FileName, codeLocation.LineNumber)
-}
diff --git a/vendor/github.com/onsi/ginkgo/types/synchronization.go b/vendor/github.com/onsi/ginkgo/types/synchronization.go
deleted file mode 100644
index fdd6ed5..0000000
--- a/vendor/github.com/onsi/ginkgo/types/synchronization.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package types
-
-import (
- "encoding/json"
-)
-
-type RemoteBeforeSuiteState int
-
-const (
- RemoteBeforeSuiteStateInvalid RemoteBeforeSuiteState = iota
-
- RemoteBeforeSuiteStatePending
- RemoteBeforeSuiteStatePassed
- RemoteBeforeSuiteStateFailed
- RemoteBeforeSuiteStateDisappeared
-)
-
-type RemoteBeforeSuiteData struct {
- Data []byte
- State RemoteBeforeSuiteState
-}
-
-func (r RemoteBeforeSuiteData) ToJSON() []byte {
- data, _ := json.Marshal(r)
- return data
-}
-
-type RemoteAfterSuiteData struct {
- CanRun bool
-}
diff --git a/vendor/github.com/onsi/ginkgo/types/types.go b/vendor/github.com/onsi/ginkgo/types/types.go
deleted file mode 100644
index e4e32b7..0000000
--- a/vendor/github.com/onsi/ginkgo/types/types.go
+++ /dev/null
@@ -1,174 +0,0 @@
-package types
-
-import (
- "strconv"
- "time"
-)
-
-const GINKGO_FOCUS_EXIT_CODE = 197
-
-/*
-SuiteSummary represents the a summary of the test suite and is passed to both
-Reporter.SpecSuiteWillBegin
-Reporter.SpecSuiteDidEnd
-
-this is unfortunate as these two methods should receive different objects. When running in parallel
-each node does not deterministically know how many specs it will end up running.
-
-Unfortunately making such a change would break backward compatibility.
-
-Until Ginkgo 2.0 comes out we will continue to reuse this struct but populate unknown fields
-with -1.
-*/
-type SuiteSummary struct {
- SuiteDescription string
- SuiteSucceeded bool
- SuiteID string
-
- NumberOfSpecsBeforeParallelization int
- NumberOfTotalSpecs int
- NumberOfSpecsThatWillBeRun int
- NumberOfPendingSpecs int
- NumberOfSkippedSpecs int
- NumberOfPassedSpecs int
- NumberOfFailedSpecs int
- // Flaked specs are those that failed initially, but then passed on a
- // subsequent try.
- NumberOfFlakedSpecs int
- RunTime time.Duration
-}
-
-type SpecSummary struct {
- ComponentTexts []string
- ComponentCodeLocations []CodeLocation
-
- State SpecState
- RunTime time.Duration
- Failure SpecFailure
- IsMeasurement bool
- NumberOfSamples int
- Measurements map[string]*SpecMeasurement
-
- CapturedOutput string
- SuiteID string
-}
-
-func (s SpecSummary) HasFailureState() bool {
- return s.State.IsFailure()
-}
-
-func (s SpecSummary) TimedOut() bool {
- return s.State == SpecStateTimedOut
-}
-
-func (s SpecSummary) Panicked() bool {
- return s.State == SpecStatePanicked
-}
-
-func (s SpecSummary) Failed() bool {
- return s.State == SpecStateFailed
-}
-
-func (s SpecSummary) Passed() bool {
- return s.State == SpecStatePassed
-}
-
-func (s SpecSummary) Skipped() bool {
- return s.State == SpecStateSkipped
-}
-
-func (s SpecSummary) Pending() bool {
- return s.State == SpecStatePending
-}
-
-type SetupSummary struct {
- ComponentType SpecComponentType
- CodeLocation CodeLocation
-
- State SpecState
- RunTime time.Duration
- Failure SpecFailure
-
- CapturedOutput string
- SuiteID string
-}
-
-type SpecFailure struct {
- Message string
- Location CodeLocation
- ForwardedPanic string
-
- ComponentIndex int
- ComponentType SpecComponentType
- ComponentCodeLocation CodeLocation
-}
-
-type SpecMeasurement struct {
- Name string
- Info interface{}
- Order int
-
- Results []float64
-
- Smallest float64
- Largest float64
- Average float64
- StdDeviation float64
-
- SmallestLabel string
- LargestLabel string
- AverageLabel string
- Units string
- Precision int
-}
-
-func (s SpecMeasurement) PrecisionFmt() string {
- if s.Precision == 0 {
- return "%f"
- }
-
- str := strconv.Itoa(s.Precision)
-
- return "%." + str + "f"
-}
-
-type SpecState uint
-
-const (
- SpecStateInvalid SpecState = iota
-
- SpecStatePending
- SpecStateSkipped
- SpecStatePassed
- SpecStateFailed
- SpecStatePanicked
- SpecStateTimedOut
-)
-
-func (state SpecState) IsFailure() bool {
- return state == SpecStateTimedOut || state == SpecStatePanicked || state == SpecStateFailed
-}
-
-type SpecComponentType uint
-
-const (
- SpecComponentTypeInvalid SpecComponentType = iota
-
- SpecComponentTypeContainer
- SpecComponentTypeBeforeSuite
- SpecComponentTypeAfterSuite
- SpecComponentTypeBeforeEach
- SpecComponentTypeJustBeforeEach
- SpecComponentTypeJustAfterEach
- SpecComponentTypeAfterEach
- SpecComponentTypeIt
- SpecComponentTypeMeasure
-)
-
-type FlagType uint
-
-const (
- FlagTypeNone FlagType = iota
- FlagTypeFocused
- FlagTypePending
-)
diff --git a/vendor/github.com/onsi/gomega/.gitignore b/vendor/github.com/onsi/gomega/.gitignore
deleted file mode 100644
index 720c13c..0000000
--- a/vendor/github.com/onsi/gomega/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.DS_Store
-*.test
-.
-.idea
-gomega.iml
diff --git a/vendor/github.com/onsi/gomega/.travis.yml b/vendor/github.com/onsi/gomega/.travis.yml
deleted file mode 100644
index d147e45..0000000
--- a/vendor/github.com/onsi/gomega/.travis.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-language: go
-
-go:
- - 1.10.x
- - 1.11.x
- - 1.12.x
- - gotip
-
-env:
- - GO111MODULE=on
-
-install:
- - go get -v ./...
- - go build ./...
- - go get github.com/onsi/ginkgo
- - go install github.com/onsi/ginkgo/ginkgo
-
-script: make test
diff --git a/vendor/github.com/onsi/gomega/CHANGELOG.md b/vendor/github.com/onsi/gomega/CHANGELOG.md
deleted file mode 100644
index f670740..0000000
--- a/vendor/github.com/onsi/gomega/CHANGELOG.md
+++ /dev/null
@@ -1,168 +0,0 @@
-## 1.7.0
-
-### Features
-- export format property variables (#347) [642e5ba]
-
-### Fixes
-- minor fix in the documentation of ExpectWithOffset (#358) [beea727]
-
-## 1.6.0
-
-### Features
-
-- Display special chars on error [41e1b26]
-- Add BeElementOf matcher [6a48b48]
-
-### Fixes
-
-- Remove duplication in XML matcher tests [cc1a6cb]
-- Remove unnecessary conversions (#357) [7bf756a]
-- Fixed import order (#353) [2e3b965]
-- Added missing error handling in test (#355) [c98d3eb]
-- Simplify code (#356) [0001ed9]
-- Simplify code (#354) [0d9100e]
-- Fixed typos (#352) [3f647c4]
-- Add failure message tests to BeElementOf matcher [efe19c3]
-- Update go-testcov untested sections [37ee382]
-- Mark all uncovered files so go-testcov ./... works [53b150e]
-- Reenable gotip in travis [5c249dc]
-- Fix the typo of comment (#345) [f0e010e]
-- Optimize contain_element_matcher [abeb93d]
-
-
-## 1.5.0
-
-### Features
-
-- Added MatchKeys matchers [8b909fc]
-
-### Fixes and Minor Improvements
-
-- Add type aliases to remove stuttering [03b0461]
-- Don't run session_test.go on windows (#324) [5533ce8]
-
-## 1.4.3
-
-### Fixes:
-
-- ensure file name and line numbers are correctly reported for XUnit [6fff58f]
-- Fixed matcher for content-type (#305) [69d9b43]
-
-## 1.4.2
-
-### Fixes:
-
-- Add go.mod and go.sum files to define the gomega go module [f3de367, a085d30]
-- Work around go vet issue with Go v1.11 (#300) [40dd6ad]
-- Better output when using with go XUnit-style tests, fixes #255 (#297) [29a4b97]
-- Fix MatchJSON fail to parse json.RawMessage (#298) [ae19f1b]
-- show threshold in failure message of BeNumericallyMatcher (#293) [4bbecc8]
-
-## 1.4.1
-
-### Fixes:
-
-- Update documentation formatting and examples (#289) [9be8410]
-- allow 'Receive' matcher to be used with concrete types (#286) [41673fd]
-- Fix data race in ghttp server (#283) [7ac6b01]
-- Travis badge should only show master [cc102ab]
-
-## 1.4.0
-
-### Features
-- Make string pretty diff user configurable (#273) [eb112ce, 649b44d]
-
-### Fixes
-- Use httputil.DumpRequest to pretty-print unhandled requests (#278) [a4ff0fc, b7d1a52]
-- fix typo floa32 > float32 (#272) [041ae3b, 6e33911]
-- Fix link to documentation on adding your own matchers (#270) [bb2c830, fcebc62]
-- Use setters and getters to avoid race condition (#262) [13057c3, a9c79f1]
-- Avoid sending a signal if the process is not alive (#259) [b8043e5, 4fc1762]
-- Improve message from AssignableToTypeOf when expected value is nil (#281) [9c1fb20]
-
-## 1.3.0
-
-Improvements:
-
-- The `Equal` matcher matches byte slices more performantly.
-- Improved how `MatchError` matches error strings.
-- `MatchXML` ignores the order of xml node attributes.
-- Improve support for XUnit style golang tests. ([#254](https://github.com/onsi/gomega/issues/254))
-
-Bug Fixes:
-
-- Diff generation now handles multi-byte sequences correctly.
-- Multiple goroutines can now call `gexec.Build` concurrently.
-
-## 1.2.0
-
-Improvements:
-
-- Added `BeSent` which attempts to send a value down a channel and fails if the attempt blocks. Can be paired with `Eventually` to safely send a value down a channel with a timeout.
-- `Ω`, `Expect`, `Eventually`, and `Consistently` now immediately `panic` if there is no registered fail handler. This is always a mistake that can hide failing tests.
-- `Receive()` no longer errors when passed a closed channel, it's perfectly fine to attempt to read from a closed channel so Ω(c).Should(Receive()) always fails and Ω(c).ShoudlNot(Receive()) always passes with a closed channel.
-- Added `HavePrefix` and `HaveSuffix` matchers.
-- `ghttp` can now handle concurrent requests.
-- Added `Succeed` which allows one to write `Ω(MyFunction()).Should(Succeed())`.
-- Improved `ghttp`'s behavior around failing assertions and panics:
- - If a registered handler makes a failing assertion `ghttp` will return `500`.
- - If a registered handler panics, `ghttp` will return `500` *and* fail the test. This is new behavior that may cause existing code to break. This code is almost certainly incorrect and creating a false positive.
-- `ghttp` servers can take an `io.Writer`. `ghttp` will write a line to the writer when each request arrives.
-- Added `WithTransform` matcher to allow munging input data before feeding into the relevant matcher
-- Added boolean `And`, `Or`, and `Not` matchers to allow creating composite matchers
-- Added `gbytes.TimeoutCloser`, `gbytes.TimeoutReader`, and `gbytes.TimeoutWriter` - these are convenience wrappers that timeout if the underlying Closer/Reader/Writer does not return within the alloted time.
-- Added `gbytes.BufferReader` - this constructs a `gbytes.Buffer` that asynchronously reads the passed-in `io.Reader` into its buffer.
-
-Bug Fixes:
-- gexec: `session.Wait` now uses `EventuallyWithOffset` to get the right line number in the failure.
-- `ContainElement` no longer bails if a passed-in matcher errors.
-
-## 1.0 (8/2/2014)
-
-No changes. Dropping "beta" from the version number.
-
-## 1.0.0-beta (7/8/2014)
-Breaking Changes:
-
-- Changed OmegaMatcher interface. Instead of having `Match` return failure messages, two new methods `FailureMessage` and `NegatedFailureMessage` are called instead.
-- Moved and renamed OmegaFailHandler to types.GomegaFailHandler and OmegaMatcher to types.GomegaMatcher. Any references to OmegaMatcher in any custom matchers will need to be changed to point to types.GomegaMatcher
-
-New Test-Support Features:
-
-- `ghttp`: supports testing http clients
- - Provides a flexible fake http server
- - Provides a collection of chainable http handlers that perform assertions.
-- `gbytes`: supports making ordered assertions against streams of data
- - Provides a `gbytes.Buffer`
- - Provides a `Say` matcher to perform ordered assertions against output data
-- `gexec`: supports testing external processes
- - Provides support for building Go binaries
- - Wraps and starts `exec.Cmd` commands
- - Makes it easy to assert against stdout and stderr
- - Makes it easy to send signals and wait for processes to exit
- - Provides an `Exit` matcher to assert against exit code.
-
-DSL Changes:
-
-- `Eventually` and `Consistently` can accept `time.Duration` interval and polling inputs.
-- The default timeouts for `Eventually` and `Consistently` are now configurable.
-
-New Matchers:
-
-- `ConsistOf`: order-independent assertion against the elements of an array/slice or keys of a map.
-- `BeTemporally`: like `BeNumerically` but for `time.Time`
-- `HaveKeyWithValue`: asserts a map has a given key with the given value.
-
-Updated Matchers:
-
-- `Receive` matcher can take a matcher as an argument and passes only if the channel under test receives an objet that satisfies the passed-in matcher.
-- Matchers that implement `MatchMayChangeInTheFuture(actual interface{}) bool` can inform `Eventually` and/or `Consistently` when a match has no chance of changing status in the future. For example, `Receive` returns `false` when a channel is closed.
-
-Misc:
-
-- Start using semantic versioning
-- Start maintaining changelog
-
-Major refactor:
-
-- Pull out Gomega's internal to `internal`
diff --git a/vendor/github.com/onsi/gomega/CONTRIBUTING.md b/vendor/github.com/onsi/gomega/CONTRIBUTING.md
deleted file mode 100644
index 0d7a099..0000000
--- a/vendor/github.com/onsi/gomega/CONTRIBUTING.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Contributing to Gomega
-
-Your contributions to Gomega are essential for its long-term maintenance and improvement. To make a contribution:
-
-- Please **open an issue first** - describe what problem you are trying to solve and give the community a forum for input and feedback ahead of investing time in writing code!
-- Ensure adequate test coverage:
- - Make sure to add appropriate unit tests
- - Please run all tests locally (`ginkgo -r -p`) and make sure they go green before submitting the PR
- - Please run following linter locally `go vet ./...` and make sure output does not contain any warnings
-- Update the documentation. In addition to standard `godoc` comments Gomega has extensive documentation on the `gh-pages` branch. If relevant, please submit a docs PR to that branch alongside your code PR.
-
-If you're a committer, check out RELEASING.md to learn how to cut a release.
-
-Thanks for supporting Gomega!
diff --git a/vendor/github.com/onsi/gomega/LICENSE b/vendor/github.com/onsi/gomega/LICENSE
deleted file mode 100644
index 9415ee7..0000000
--- a/vendor/github.com/onsi/gomega/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2013-2014 Onsi Fakhouri
-
-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/Makefile b/vendor/github.com/onsi/gomega/Makefile
deleted file mode 100644
index c92cd56..0000000
--- a/vendor/github.com/onsi/gomega/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-test:
- [ -z "`gofmt -s -w -l -e .`" ]
- go vet
- ginkgo -p -r --randomizeAllSpecs --failOnPending --randomizeSuites --race
-
-.PHONY: test
diff --git a/vendor/github.com/onsi/gomega/README.md b/vendor/github.com/onsi/gomega/README.md
deleted file mode 100644
index 76aa6b5..0000000
--- a/vendor/github.com/onsi/gomega/README.md
+++ /dev/null
@@ -1,21 +0,0 @@
-![Gomega: Ginkgo's Preferred Matcher Library](http://onsi.github.io/gomega/images/gomega.png)
-
-[![Build Status](https://travis-ci.org/onsi/gomega.svg?branch=master)](https://travis-ci.org/onsi/gomega)
-
-Jump straight to the [docs](http://onsi.github.io/gomega/) to learn about Gomega, including a list of [all available matchers](http://onsi.github.io/gomega/#provided-matchers).
-
-If you have a question, comment, bug report, feature request, etc. please open a GitHub issue.
-
-## [Ginkgo](http://github.com/onsi/ginkgo): a BDD Testing Framework for Golang
-
-Learn more about Ginkgo [here](http://onsi.github.io/ginkgo/)
-
-## Community Matchers
-
-A collection of community matchers is available on the [wiki](https://github.com/onsi/gomega/wiki).
-
-## License
-
-Gomega is MIT-Licensed
-
-The `ConsistOf` matcher uses [goraph](https://github.com/amitkgupta/goraph) which is embedded in the source to simplify distribution. goraph has an MIT license.
diff --git a/vendor/github.com/onsi/gomega/RELEASING.md b/vendor/github.com/onsi/gomega/RELEASING.md
deleted file mode 100644
index 998d64e..0000000
--- a/vendor/github.com/onsi/gomega/RELEASING.md
+++ /dev/null
@@ -1,12 +0,0 @@
-A Gomega release is a tagged sha and a GitHub release. To cut a release:
-
-1. Ensure CHANGELOG.md is up to date.
- - Use `git log --pretty=format:'- %s [%h]' HEAD...vX.X.X` to list all the commits since the last release
- - Categorize the changes into
- - Breaking Changes (requires a major version)
- - New Features (minor version)
- - Fixes (fix version)
- - Maintenance (which in general should not be mentioned in `CHANGELOG.md` as they have no user impact)
-2. Update GOMEGA_VERSION in `gomega_dsl.go`
-3. Push a commit with the version number as the commit message (e.g. `v1.3.0`)
-4. Create a new [GitHub release](https://help.github.com/articles/creating-releases/) with the version number as the tag (e.g. `v1.3.0`). List the key changes in the release notes.
diff --git a/vendor/github.com/onsi/gomega/format/format.go b/vendor/github.com/onsi/gomega/format/format.go
deleted file mode 100644
index fae25ad..0000000
--- a/vendor/github.com/onsi/gomega/format/format.go
+++ /dev/null
@@ -1,397 +0,0 @@
-/*
-Gomega's format package pretty-prints objects. It explores input objects recursively and generates formatted, indented output with type information.
-*/
-
-// untested sections: 4
-
-package format
-
-import (
- "fmt"
- "reflect"
- "strconv"
- "strings"
- "time"
-)
-
-// Use MaxDepth to set the maximum recursion depth when printing deeply nested objects
-var MaxDepth = uint(10)
-
-/*
-By default, all objects (even those that implement fmt.Stringer and fmt.GoStringer) are recursively inspected to generate output.
-
-Set UseStringerRepresentation = true to use GoString (for fmt.GoStringers) or String (for fmt.Stringer) instead.
-
-Note that GoString and String don't always have all the information you need to understand why a test failed!
-*/
-var UseStringerRepresentation = false
-
-/*
-Print the content of context objects. By default it will be suppressed.
-
-Set PrintContextObjects = true to enable printing of the context internals.
-*/
-var PrintContextObjects = false
-
-// TruncatedDiff choose if we should display a truncated pretty diff or not
-var TruncatedDiff = true
-
-// TruncateThreshold (default 50) specifies the maximum length string to print in string comparison assertion error
-// messages.
-var TruncateThreshold uint = 50
-
-// CharactersAroundMismatchToInclude (default 5) specifies how many contextual characters should be printed before and
-// after the first diff location in a truncated string assertion error message.
-var CharactersAroundMismatchToInclude uint = 5
-
-// Ctx interface defined here to keep backwards compatibility with go < 1.7
-// It matches the context.Context interface
-type Ctx interface {
- Deadline() (deadline time.Time, ok bool)
- Done() <-chan struct{}
- Err() error
- Value(key interface{}) interface{}
-}
-
-var contextType = reflect.TypeOf((*Ctx)(nil)).Elem()
-var timeType = reflect.TypeOf(time.Time{})
-
-//The default indentation string emitted by the format package
-var Indent = " "
-
-var longFormThreshold = 20
-
-/*
-Generates a formatted matcher success/failure message of the form:
-
- Expected
- <pretty printed actual>
- <message>
- <pretty printed expected>
-
-If expected is omitted, then the message looks like:
-
- Expected
- <pretty printed actual>
- <message>
-*/
-func Message(actual interface{}, message string, expected ...interface{}) string {
- if len(expected) == 0 {
- return fmt.Sprintf("Expected\n%s\n%s", Object(actual, 1), message)
- }
- return fmt.Sprintf("Expected\n%s\n%s\n%s", Object(actual, 1), message, Object(expected[0], 1))
-}
-
-/*
-
-Generates a nicely formatted matcher success / failure message
-
-Much like Message(...), but it attempts to pretty print diffs in strings
-
-Expected
- <string>: "...aaaaabaaaaa..."
-to equal |
- <string>: "...aaaaazaaaaa..."
-
-*/
-
-func MessageWithDiff(actual, message, expected string) string {
- if TruncatedDiff && len(actual) >= int(TruncateThreshold) && len(expected) >= int(TruncateThreshold) {
- diffPoint := findFirstMismatch(actual, expected)
- formattedActual := truncateAndFormat(actual, diffPoint)
- formattedExpected := truncateAndFormat(expected, diffPoint)
-
- spacesBeforeFormattedMismatch := findFirstMismatch(formattedActual, formattedExpected)
-
- tabLength := 4
- spaceFromMessageToActual := tabLength + len("<string>: ") - len(message)
- padding := strings.Repeat(" ", spaceFromMessageToActual+spacesBeforeFormattedMismatch) + "|"
- return Message(formattedActual, message+padding, formattedExpected)
- }
-
- actual = escapedWithGoSyntax(actual)
- expected = escapedWithGoSyntax(expected)
-
- return Message(actual, message, expected)
-}
-
-func escapedWithGoSyntax(str string) string {
- withQuotes := fmt.Sprintf("%q", str)
- return withQuotes[1 : len(withQuotes)-1]
-}
-
-func truncateAndFormat(str string, index int) string {
- leftPadding := `...`
- rightPadding := `...`
-
- start := index - int(CharactersAroundMismatchToInclude)
- if start < 0 {
- start = 0
- leftPadding = ""
- }
-
- // slice index must include the mis-matched character
- lengthOfMismatchedCharacter := 1
- end := index + int(CharactersAroundMismatchToInclude) + lengthOfMismatchedCharacter
- if end > len(str) {
- end = len(str)
- rightPadding = ""
-
- }
- return fmt.Sprintf("\"%s\"", leftPadding+str[start:end]+rightPadding)
-}
-
-func findFirstMismatch(a, b string) int {
- aSlice := strings.Split(a, "")
- bSlice := strings.Split(b, "")
-
- for index, str := range aSlice {
- if index > len(bSlice)-1 {
- return index
- }
- if str != bSlice[index] {
- return index
- }
- }
-
- if len(b) > len(a) {
- return len(a) + 1
- }
-
- return 0
-}
-
-/*
-Pretty prints the passed in object at the passed in indentation level.
-
-Object recurses into deeply nested objects emitting pretty-printed representations of their components.
-
-Modify format.MaxDepth to control how deep the recursion is allowed to go
-Set format.UseStringerRepresentation to true to return object.GoString() or object.String() when available instead of
-recursing into the object.
-
-Set PrintContextObjects to true to print the content of objects implementing context.Context
-*/
-func Object(object interface{}, indentation uint) string {
- indent := strings.Repeat(Indent, int(indentation))
- value := reflect.ValueOf(object)
- return fmt.Sprintf("%s<%s>: %s", indent, formatType(object), formatValue(value, indentation))
-}
-
-/*
-IndentString takes a string and indents each line by the specified amount.
-*/
-func IndentString(s string, indentation uint) string {
- components := strings.Split(s, "\n")
- result := ""
- indent := strings.Repeat(Indent, int(indentation))
- for i, component := range components {
- result += indent + component
- if i < len(components)-1 {
- result += "\n"
- }
- }
-
- return result
-}
-
-func formatType(object interface{}) string {
- t := reflect.TypeOf(object)
- if t == nil {
- return "nil"
- }
- switch t.Kind() {
- case reflect.Chan:
- v := reflect.ValueOf(object)
- return fmt.Sprintf("%T | len:%d, cap:%d", object, v.Len(), v.Cap())
- case reflect.Ptr:
- return fmt.Sprintf("%T | %p", object, object)
- case reflect.Slice:
- v := reflect.ValueOf(object)
- return fmt.Sprintf("%T | len:%d, cap:%d", object, v.Len(), v.Cap())
- case reflect.Map:
- v := reflect.ValueOf(object)
- return fmt.Sprintf("%T | len:%d", object, v.Len())
- default:
- return fmt.Sprintf("%T", object)
- }
-}
-
-func formatValue(value reflect.Value, indentation uint) string {
- if indentation > MaxDepth {
- return "..."
- }
-
- if isNilValue(value) {
- return "nil"
- }
-
- if UseStringerRepresentation {
- if value.CanInterface() {
- obj := value.Interface()
- switch x := obj.(type) {
- case fmt.GoStringer:
- return x.GoString()
- case fmt.Stringer:
- return x.String()
- }
- }
- }
-
- if !PrintContextObjects {
- if value.Type().Implements(contextType) && indentation > 1 {
- return "<suppressed context>"
- }
- }
-
- switch value.Kind() {
- case reflect.Bool:
- return fmt.Sprintf("%v", value.Bool())
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- return fmt.Sprintf("%v", value.Int())
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
- return fmt.Sprintf("%v", value.Uint())
- case reflect.Uintptr:
- return fmt.Sprintf("0x%x", value.Uint())
- case reflect.Float32, reflect.Float64:
- return fmt.Sprintf("%v", value.Float())
- case reflect.Complex64, reflect.Complex128:
- return fmt.Sprintf("%v", value.Complex())
- case reflect.Chan:
- return fmt.Sprintf("0x%x", value.Pointer())
- case reflect.Func:
- return fmt.Sprintf("0x%x", value.Pointer())
- case reflect.Ptr:
- return formatValue(value.Elem(), indentation)
- case reflect.Slice:
- return formatSlice(value, indentation)
- case reflect.String:
- return formatString(value.String(), indentation)
- case reflect.Array:
- return formatSlice(value, indentation)
- case reflect.Map:
- return formatMap(value, indentation)
- case reflect.Struct:
- if value.Type() == timeType && value.CanInterface() {
- t, _ := value.Interface().(time.Time)
- return t.Format(time.RFC3339Nano)
- }
- return formatStruct(value, indentation)
- case reflect.Interface:
- return formatValue(value.Elem(), indentation)
- default:
- if value.CanInterface() {
- return fmt.Sprintf("%#v", value.Interface())
- }
- return fmt.Sprintf("%#v", value)
- }
-}
-
-func formatString(object interface{}, indentation uint) string {
- if indentation == 1 {
- s := fmt.Sprintf("%s", object)
- components := strings.Split(s, "\n")
- result := ""
- for i, component := range components {
- if i == 0 {
- result += component
- } else {
- result += Indent + component
- }
- if i < len(components)-1 {
- result += "\n"
- }
- }
-
- return result
- } else {
- return fmt.Sprintf("%q", object)
- }
-}
-
-func formatSlice(v reflect.Value, indentation uint) string {
- if v.Kind() == reflect.Slice && v.Type().Elem().Kind() == reflect.Uint8 && isPrintableString(string(v.Bytes())) {
- return formatString(v.Bytes(), indentation)
- }
-
- l := v.Len()
- result := make([]string, l)
- longest := 0
- for i := 0; i < l; i++ {
- result[i] = formatValue(v.Index(i), indentation+1)
- if len(result[i]) > longest {
- longest = len(result[i])
- }
- }
-
- if longest > longFormThreshold {
- indenter := strings.Repeat(Indent, int(indentation))
- return fmt.Sprintf("[\n%s%s,\n%s]", indenter+Indent, strings.Join(result, ",\n"+indenter+Indent), indenter)
- }
- return fmt.Sprintf("[%s]", strings.Join(result, ", "))
-}
-
-func formatMap(v reflect.Value, indentation uint) string {
- l := v.Len()
- result := make([]string, l)
-
- longest := 0
- for i, key := range v.MapKeys() {
- value := v.MapIndex(key)
- result[i] = fmt.Sprintf("%s: %s", formatValue(key, indentation+1), formatValue(value, indentation+1))
- if len(result[i]) > longest {
- longest = len(result[i])
- }
- }
-
- if longest > longFormThreshold {
- indenter := strings.Repeat(Indent, int(indentation))
- return fmt.Sprintf("{\n%s%s,\n%s}", indenter+Indent, strings.Join(result, ",\n"+indenter+Indent), indenter)
- }
- return fmt.Sprintf("{%s}", strings.Join(result, ", "))
-}
-
-func formatStruct(v reflect.Value, indentation uint) string {
- t := v.Type()
-
- l := v.NumField()
- result := []string{}
- longest := 0
- for i := 0; i < l; i++ {
- structField := t.Field(i)
- fieldEntry := v.Field(i)
- representation := fmt.Sprintf("%s: %s", structField.Name, formatValue(fieldEntry, indentation+1))
- result = append(result, representation)
- if len(representation) > longest {
- longest = len(representation)
- }
- }
- if longest > longFormThreshold {
- indenter := strings.Repeat(Indent, int(indentation))
- return fmt.Sprintf("{\n%s%s,\n%s}", indenter+Indent, strings.Join(result, ",\n"+indenter+Indent), indenter)
- }
- return fmt.Sprintf("{%s}", strings.Join(result, ", "))
-}
-
-func isNilValue(a reflect.Value) bool {
- switch a.Kind() {
- case reflect.Invalid:
- return true
- case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
- return a.IsNil()
- }
-
- return false
-}
-
-/*
-Returns true when the string is entirely made of printable runes, false otherwise.
-*/
-func isPrintableString(str string) bool {
- for _, runeValue := range str {
- if !strconv.IsPrint(runeValue) {
- return false
- }
- }
- return true
-}
diff --git a/vendor/github.com/onsi/gomega/go.mod b/vendor/github.com/onsi/gomega/go.mod
deleted file mode 100644
index 65eedf6..0000000
--- a/vendor/github.com/onsi/gomega/go.mod
+++ /dev/null
@@ -1,15 +0,0 @@
-module github.com/onsi/gomega
-
-require (
- github.com/fsnotify/fsnotify v1.4.7 // indirect
- github.com/golang/protobuf v1.2.0
- github.com/hpcloud/tail v1.0.0 // indirect
- github.com/onsi/ginkgo v1.6.0
- golang.org/x/net v0.0.0-20180906233101-161cd47e91fd
- golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f // indirect
- golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e // indirect
- golang.org/x/text v0.3.0 // indirect
- gopkg.in/fsnotify.v1 v1.4.7 // indirect
- gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
- gopkg.in/yaml.v2 v2.2.1
-)
diff --git a/vendor/github.com/onsi/gomega/go.sum b/vendor/github.com/onsi/gomega/go.sum
deleted file mode 100644
index b23f6ef..0000000
--- a/vendor/github.com/onsi/gomega/go.sum
+++ /dev/null
@@ -1,24 +0,0 @@
-github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
-github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
-github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw=
-github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-golang.org/x/net v0.0.0-20180906233101-161cd47e91fd h1:nTDtHvHSdCn1m6ITfMRqtOd/9+7a3s8RBNOZ3eYZzJA=
-golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e h1:o3PsSEY8E4eXWkXrIP9YJALUkVZqzHJT5DOasTyn8Vs=
-golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
-gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/vendor/github.com/onsi/gomega/gomega_dsl.go b/vendor/github.com/onsi/gomega/gomega_dsl.go
deleted file mode 100644
index b145768..0000000
--- a/vendor/github.com/onsi/gomega/gomega_dsl.go
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
-Gomega is the Ginkgo BDD-style testing framework's preferred matcher library.
-
-The godoc documentation describes Gomega's API. More comprehensive documentation (with examples!) is available at http://onsi.github.io/gomega/
-
-Gomega on Github: http://github.com/onsi/gomega
-
-Learn more about Ginkgo online: http://onsi.github.io/ginkgo
-
-Ginkgo on Github: http://github.com/onsi/ginkgo
-
-Gomega is MIT-Licensed
-*/
-package gomega
-
-import (
- "fmt"
- "reflect"
- "time"
-
- "github.com/onsi/gomega/internal/assertion"
- "github.com/onsi/gomega/internal/asyncassertion"
- "github.com/onsi/gomega/internal/testingtsupport"
- "github.com/onsi/gomega/types"
-)
-
-const GOMEGA_VERSION = "1.7.0"
-
-const nilFailHandlerPanic = `You are trying to make an assertion, but Gomega's fail handler is nil.
-If you're using Ginkgo then you probably forgot to put your assertion in an It().
-Alternatively, you may have forgotten to register a fail handler with RegisterFailHandler() or RegisterTestingT().
-Depending on your vendoring solution you may be inadvertently importing gomega and subpackages (e.g. ghhtp, gexec,...) from different locations.
-`
-
-var globalFailWrapper *types.GomegaFailWrapper
-
-var defaultEventuallyTimeout = time.Second
-var defaultEventuallyPollingInterval = 10 * time.Millisecond
-var defaultConsistentlyDuration = 100 * time.Millisecond
-var defaultConsistentlyPollingInterval = 10 * time.Millisecond
-
-// RegisterFailHandler connects Ginkgo to Gomega. When a matcher fails
-// the fail handler passed into RegisterFailHandler is called.
-func RegisterFailHandler(handler types.GomegaFailHandler) {
- RegisterFailHandlerWithT(testingtsupport.EmptyTWithHelper{}, handler)
-}
-
-// RegisterFailHandlerWithT ensures that the given types.TWithHelper and fail handler
-// are used globally.
-func RegisterFailHandlerWithT(t types.TWithHelper, handler types.GomegaFailHandler) {
- if handler == nil {
- globalFailWrapper = nil
- return
- }
-
- globalFailWrapper = &types.GomegaFailWrapper{
- Fail: handler,
- TWithHelper: t,
- }
-}
-
-// RegisterTestingT connects Gomega to Golang's XUnit style
-// Testing.T tests. It is now deprecated and you should use NewWithT() instead.
-//
-// Legacy Documentation:
-//
-// You'll need to call this at the top of each XUnit style test:
-//
-// func TestFarmHasCow(t *testing.T) {
-// RegisterTestingT(t)
-//
-// f := farm.New([]string{"Cow", "Horse"})
-// Expect(f.HasCow()).To(BeTrue(), "Farm should have cow")
-// }
-//
-// Note that this *testing.T is registered *globally* by Gomega (this is why you don't have to
-// pass `t` down to the matcher itself). This means that you cannot run the XUnit style tests
-// in parallel as the global fail handler cannot point to more than one testing.T at a time.
-//
-// NewWithT() does not have this limitation
-//
-// (As an aside: Ginkgo gets around this limitation by running parallel tests in different *processes*).
-func RegisterTestingT(t types.GomegaTestingT) {
- tWithHelper, hasHelper := t.(types.TWithHelper)
- if !hasHelper {
- RegisterFailHandler(testingtsupport.BuildTestingTGomegaFailWrapper(t).Fail)
- return
- }
- RegisterFailHandlerWithT(tWithHelper, testingtsupport.BuildTestingTGomegaFailWrapper(t).Fail)
-}
-
-// InterceptGomegaFailures runs a given callback and returns an array of
-// failure messages generated by any Gomega assertions within the callback.
-//
-// This is accomplished by temporarily replacing the *global* fail handler
-// with a fail handler that simply annotates failures. The original fail handler
-// is reset when InterceptGomegaFailures returns.
-//
-// This is most useful when testing custom matchers, but can also be used to check
-// on a value using a Gomega assertion without causing a test failure.
-func InterceptGomegaFailures(f func()) []string {
- originalHandler := globalFailWrapper.Fail
- failures := []string{}
- RegisterFailHandler(func(message string, callerSkip ...int) {
- failures = append(failures, message)
- })
- f()
- RegisterFailHandler(originalHandler)
- return failures
-}
-
-// Ω wraps an actual value allowing assertions to be made on it:
-// Ω("foo").Should(Equal("foo"))
-//
-// If Ω is passed more than one argument it will pass the *first* argument to the matcher.
-// All subsequent arguments will be required to be nil/zero.
-//
-// This is convenient if you want to make an assertion on a method/function that returns
-// a value and an error - a common patter in Go.
-//
-// For example, given a function with signature:
-// func MyAmazingThing() (int, error)
-//
-// Then:
-// Ω(MyAmazingThing()).Should(Equal(3))
-// Will succeed only if `MyAmazingThing()` returns `(3, nil)`
-//
-// Ω and Expect are identical
-func Ω(actual interface{}, extra ...interface{}) Assertion {
- return ExpectWithOffset(0, actual, extra...)
-}
-
-// Expect wraps an actual value allowing assertions to be made on it:
-// Expect("foo").To(Equal("foo"))
-//
-// If Expect is passed more than one argument it will pass the *first* argument to the matcher.
-// All subsequent arguments will be required to be nil/zero.
-//
-// This is convenient if you want to make an assertion on a method/function that returns
-// a value and an error - a common patter in Go.
-//
-// For example, given a function with signature:
-// func MyAmazingThing() (int, error)
-//
-// Then:
-// Expect(MyAmazingThing()).Should(Equal(3))
-// Will succeed only if `MyAmazingThing()` returns `(3, nil)`
-//
-// Expect and Ω are identical
-func Expect(actual interface{}, extra ...interface{}) Assertion {
- return ExpectWithOffset(0, actual, extra...)
-}
-
-// ExpectWithOffset wraps an actual value allowing assertions to be made on it:
-// ExpectWithOffset(1, "foo").To(Equal("foo"))
-//
-// Unlike `Expect` and `Ω`, `ExpectWithOffset` takes an additional integer argument
-// that is used to modify the call-stack offset when computing line numbers.
-//
-// This is most useful in helper functions that make assertions. If you want Gomega's
-// error message to refer to the calling line in the test (as opposed to the line in the helper function)
-// set the first argument of `ExpectWithOffset` appropriately.
-func ExpectWithOffset(offset int, actual interface{}, extra ...interface{}) Assertion {
- if globalFailWrapper == nil {
- panic(nilFailHandlerPanic)
- }
- return assertion.New(actual, globalFailWrapper, offset, extra...)
-}
-
-// Eventually wraps an actual value allowing assertions to be made on it.
-// The assertion is tried periodically until it passes or a timeout occurs.
-//
-// Both the timeout and polling interval are configurable as optional arguments:
-// The first optional argument is the timeout
-// The second optional argument is the polling interval
-//
-// Both intervals can either be specified as time.Duration, parsable duration strings or as floats/integers. In the
-// last case they are interpreted as seconds.
-//
-// If Eventually is passed an actual that is a function taking no arguments and returning at least one value,
-// then Eventually will call the function periodically and try the matcher against the function's first return value.
-//
-// Example:
-//
-// Eventually(func() int {
-// return thingImPolling.Count()
-// }).Should(BeNumerically(">=", 17))
-//
-// Note that this example could be rewritten:
-//
-// Eventually(thingImPolling.Count).Should(BeNumerically(">=", 17))
-//
-// If the function returns more than one value, then Eventually will pass the first value to the matcher and
-// assert that all other values are nil/zero.
-// This allows you to pass Eventually a function that returns a value and an error - a common pattern in Go.
-//
-// For example, consider a method that returns a value and an error:
-// func FetchFromDB() (string, error)
-//
-// Then
-// Eventually(FetchFromDB).Should(Equal("hasselhoff"))
-//
-// Will pass only if the the returned error is nil and the returned string passes the matcher.
-//
-// Eventually's default timeout is 1 second, and its default polling interval is 10ms
-func Eventually(actual interface{}, intervals ...interface{}) AsyncAssertion {
- return EventuallyWithOffset(0, actual, intervals...)
-}
-
-// EventuallyWithOffset operates like Eventually but takes an additional
-// initial argument to indicate an offset in the call stack. This is useful when building helper
-// functions that contain matchers. To learn more, read about `ExpectWithOffset`.
-func EventuallyWithOffset(offset int, actual interface{}, intervals ...interface{}) AsyncAssertion {
- if globalFailWrapper == nil {
- panic(nilFailHandlerPanic)
- }
- timeoutInterval := defaultEventuallyTimeout
- pollingInterval := defaultEventuallyPollingInterval
- if len(intervals) > 0 {
- timeoutInterval = toDuration(intervals[0])
- }
- if len(intervals) > 1 {
- pollingInterval = toDuration(intervals[1])
- }
- return asyncassertion.New(asyncassertion.AsyncAssertionTypeEventually, actual, globalFailWrapper, timeoutInterval, pollingInterval, offset)
-}
-
-// Consistently wraps an actual value allowing assertions to be made on it.
-// The assertion is tried periodically and is required to pass for a period of time.
-//
-// Both the total time and polling interval are configurable as optional arguments:
-// The first optional argument is the duration that Consistently will run for
-// The second optional argument is the polling interval
-//
-// Both intervals can either be specified as time.Duration, parsable duration strings or as floats/integers. In the
-// last case they are interpreted as seconds.
-//
-// If Consistently is passed an actual that is a function taking no arguments and returning at least one value,
-// then Consistently will call the function periodically and try the matcher against the function's first return value.
-//
-// If the function returns more than one value, then Consistently will pass the first value to the matcher and
-// assert that all other values are nil/zero.
-// This allows you to pass Consistently a function that returns a value and an error - a common pattern in Go.
-//
-// Consistently is useful in cases where you want to assert that something *does not happen* over a period of time.
-// For example, you want to assert that a goroutine does *not* send data down a channel. In this case, you could:
-//
-// Consistently(channel).ShouldNot(Receive())
-//
-// Consistently's default duration is 100ms, and its default polling interval is 10ms
-func Consistently(actual interface{}, intervals ...interface{}) AsyncAssertion {
- return ConsistentlyWithOffset(0, actual, intervals...)
-}
-
-// ConsistentlyWithOffset operates like Consistnetly but takes an additional
-// initial argument to indicate an offset in the call stack. This is useful when building helper
-// functions that contain matchers. To learn more, read about `ExpectWithOffset`.
-func ConsistentlyWithOffset(offset int, actual interface{}, intervals ...interface{}) AsyncAssertion {
- if globalFailWrapper == nil {
- panic(nilFailHandlerPanic)
- }
- timeoutInterval := defaultConsistentlyDuration
- pollingInterval := defaultConsistentlyPollingInterval
- if len(intervals) > 0 {
- timeoutInterval = toDuration(intervals[0])
- }
- if len(intervals) > 1 {
- pollingInterval = toDuration(intervals[1])
- }
- return asyncassertion.New(asyncassertion.AsyncAssertionTypeConsistently, actual, globalFailWrapper, timeoutInterval, pollingInterval, offset)
-}
-
-// SetDefaultEventuallyTimeout sets the default timeout duration for Eventually. Eventually will repeatedly poll your condition until it succeeds, or until this timeout elapses.
-func SetDefaultEventuallyTimeout(t time.Duration) {
- defaultEventuallyTimeout = t
-}
-
-// SetDefaultEventuallyPollingInterval sets the default polling interval for Eventually.
-func SetDefaultEventuallyPollingInterval(t time.Duration) {
- defaultEventuallyPollingInterval = t
-}
-
-// SetDefaultConsistentlyDuration sets the default duration for Consistently. Consistently will verify that your condition is satisfied for this long.
-func SetDefaultConsistentlyDuration(t time.Duration) {
- defaultConsistentlyDuration = t
-}
-
-// SetDefaultConsistentlyPollingInterval sets the default polling interval for Consistently.
-func SetDefaultConsistentlyPollingInterval(t time.Duration) {
- defaultConsistentlyPollingInterval = t
-}
-
-// AsyncAssertion is returned by Eventually and Consistently and polls the actual value passed into Eventually against
-// the matcher passed to the Should and ShouldNot methods.
-//
-// Both Should and ShouldNot take a variadic optionalDescription argument. This is passed on to
-// fmt.Sprintf() and is used to annotate failure messages. This allows you to make your failure messages more
-// descriptive.
-//
-// Both Should and ShouldNot return a boolean that is true if the assertion passed and false if it failed.
-//
-// Example:
-//
-// Eventually(myChannel).Should(Receive(), "Something should have come down the pipe.")
-// Consistently(myChannel).ShouldNot(Receive(), "Nothing should have come down the pipe.")
-type AsyncAssertion interface {
- Should(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool
- ShouldNot(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool
-}
-
-// GomegaAsyncAssertion is deprecated in favor of AsyncAssertion, which does not stutter.
-type GomegaAsyncAssertion = AsyncAssertion
-
-// Assertion is returned by Ω and Expect and compares the actual value to the matcher
-// passed to the Should/ShouldNot and To/ToNot/NotTo methods.
-//
-// Typically Should/ShouldNot are used with Ω and To/ToNot/NotTo are used with Expect
-// though this is not enforced.
-//
-// All methods take a variadic optionalDescription argument. This is passed on to fmt.Sprintf()
-// and is used to annotate failure messages.
-//
-// All methods return a bool that is true if the assertion passed and false if it failed.
-//
-// Example:
-//
-// Ω(farm.HasCow()).Should(BeTrue(), "Farm %v should have a cow", farm)
-type Assertion interface {
- Should(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool
- ShouldNot(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool
-
- To(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool
- ToNot(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool
- NotTo(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool
-}
-
-// GomegaAssertion is deprecated in favor of Assertion, which does not stutter.
-type GomegaAssertion = Assertion
-
-// OmegaMatcher is deprecated in favor of the better-named and better-organized types.GomegaMatcher but sticks around to support existing code that uses it
-type OmegaMatcher types.GomegaMatcher
-
-// WithT wraps a *testing.T and provides `Expect`, `Eventually`, and `Consistently` methods. This allows you to leverage
-// Gomega's rich ecosystem of matchers in standard `testing` test suites.
-//
-// Use `NewWithT` to instantiate a `WithT`
-type WithT struct {
- t types.GomegaTestingT
-}
-
-// GomegaWithT is deprecated in favor of gomega.WithT, which does not stutter.
-type GomegaWithT = WithT
-
-// NewWithT takes a *testing.T and returngs a `gomega.WithT` allowing you to use `Expect`, `Eventually`, and `Consistently` along with
-// Gomega's rich ecosystem of matchers in standard `testing` test suits.
-//
-// func TestFarmHasCow(t *testing.T) {
-// g := gomega.NewWithT(t)
-//
-// f := farm.New([]string{"Cow", "Horse"})
-// g.Expect(f.HasCow()).To(BeTrue(), "Farm should have cow")
-// }
-func NewWithT(t types.GomegaTestingT) *WithT {
- return &WithT{
- t: t,
- }
-}
-
-// NewGomegaWithT is deprecated in favor of gomega.NewWithT, which does not stutter.
-func NewGomegaWithT(t types.GomegaTestingT) *GomegaWithT {
- return NewWithT(t)
-}
-
-// Expect is used to make assertions. See documentation for Expect.
-func (g *WithT) Expect(actual interface{}, extra ...interface{}) Assertion {
- return assertion.New(actual, testingtsupport.BuildTestingTGomegaFailWrapper(g.t), 0, extra...)
-}
-
-// Eventually is used to make asynchronous assertions. See documentation for Eventually.
-func (g *WithT) Eventually(actual interface{}, intervals ...interface{}) AsyncAssertion {
- timeoutInterval := defaultEventuallyTimeout
- pollingInterval := defaultEventuallyPollingInterval
- if len(intervals) > 0 {
- timeoutInterval = toDuration(intervals[0])
- }
- if len(intervals) > 1 {
- pollingInterval = toDuration(intervals[1])
- }
- return asyncassertion.New(asyncassertion.AsyncAssertionTypeEventually, actual, testingtsupport.BuildTestingTGomegaFailWrapper(g.t), timeoutInterval, pollingInterval, 0)
-}
-
-// Consistently is used to make asynchronous assertions. See documentation for Consistently.
-func (g *WithT) Consistently(actual interface{}, intervals ...interface{}) AsyncAssertion {
- timeoutInterval := defaultConsistentlyDuration
- pollingInterval := defaultConsistentlyPollingInterval
- if len(intervals) > 0 {
- timeoutInterval = toDuration(intervals[0])
- }
- if len(intervals) > 1 {
- pollingInterval = toDuration(intervals[1])
- }
- return asyncassertion.New(asyncassertion.AsyncAssertionTypeConsistently, actual, testingtsupport.BuildTestingTGomegaFailWrapper(g.t), timeoutInterval, pollingInterval, 0)
-}
-
-func toDuration(input interface{}) time.Duration {
- duration, ok := input.(time.Duration)
- if ok {
- return duration
- }
-
- value := reflect.ValueOf(input)
- kind := reflect.TypeOf(input).Kind()
-
- if reflect.Int <= kind && kind <= reflect.Int64 {
- return time.Duration(value.Int()) * time.Second
- } else if reflect.Uint <= kind && kind <= reflect.Uint64 {
- return time.Duration(value.Uint()) * time.Second
- } else if reflect.Float32 <= kind && kind <= reflect.Float64 {
- return time.Duration(value.Float() * float64(time.Second))
- } else if reflect.String == kind {
- duration, err := time.ParseDuration(value.String())
- if err != nil {
- panic(fmt.Sprintf("%#v is not a valid parsable duration string.", input))
- }
- return duration
- }
-
- panic(fmt.Sprintf("%v is not a valid interval. Must be time.Duration, parsable duration string or a number.", input))
-}
diff --git a/vendor/github.com/onsi/gomega/internal/assertion/assertion.go b/vendor/github.com/onsi/gomega/internal/assertion/assertion.go
deleted file mode 100644
index 00197b6..0000000
--- a/vendor/github.com/onsi/gomega/internal/assertion/assertion.go
+++ /dev/null
@@ -1,105 +0,0 @@
-package assertion
-
-import (
- "fmt"
- "reflect"
-
- "github.com/onsi/gomega/types"
-)
-
-type Assertion struct {
- actualInput interface{}
- failWrapper *types.GomegaFailWrapper
- offset int
- extra []interface{}
-}
-
-func New(actualInput interface{}, failWrapper *types.GomegaFailWrapper, offset int, extra ...interface{}) *Assertion {
- return &Assertion{
- actualInput: actualInput,
- failWrapper: failWrapper,
- offset: offset,
- extra: extra,
- }
-}
-
-func (assertion *Assertion) Should(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
- assertion.failWrapper.TWithHelper.Helper()
- return assertion.vetExtras(optionalDescription...) && assertion.match(matcher, true, optionalDescription...)
-}
-
-func (assertion *Assertion) ShouldNot(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
- assertion.failWrapper.TWithHelper.Helper()
- return assertion.vetExtras(optionalDescription...) && assertion.match(matcher, false, optionalDescription...)
-}
-
-func (assertion *Assertion) To(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
- assertion.failWrapper.TWithHelper.Helper()
- return assertion.vetExtras(optionalDescription...) && assertion.match(matcher, true, optionalDescription...)
-}
-
-func (assertion *Assertion) ToNot(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
- assertion.failWrapper.TWithHelper.Helper()
- return assertion.vetExtras(optionalDescription...) && assertion.match(matcher, false, optionalDescription...)
-}
-
-func (assertion *Assertion) NotTo(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
- assertion.failWrapper.TWithHelper.Helper()
- return assertion.vetExtras(optionalDescription...) && assertion.match(matcher, false, optionalDescription...)
-}
-
-func (assertion *Assertion) buildDescription(optionalDescription ...interface{}) string {
- switch len(optionalDescription) {
- case 0:
- return ""
- default:
- return fmt.Sprintf(optionalDescription[0].(string), optionalDescription[1:]...) + "\n"
- }
-}
-
-func (assertion *Assertion) match(matcher types.GomegaMatcher, desiredMatch bool, optionalDescription ...interface{}) bool {
- matches, err := matcher.Match(assertion.actualInput)
- description := assertion.buildDescription(optionalDescription...)
- assertion.failWrapper.TWithHelper.Helper()
- if err != nil {
- assertion.failWrapper.Fail(description+err.Error(), 2+assertion.offset)
- return false
- }
- if matches != desiredMatch {
- var message string
- if desiredMatch {
- message = matcher.FailureMessage(assertion.actualInput)
- } else {
- message = matcher.NegatedFailureMessage(assertion.actualInput)
- }
- assertion.failWrapper.Fail(description+message, 2+assertion.offset)
- return false
- }
-
- return true
-}
-
-func (assertion *Assertion) vetExtras(optionalDescription ...interface{}) bool {
- success, message := vetExtras(assertion.extra)
- if success {
- return true
- }
-
- description := assertion.buildDescription(optionalDescription...)
- assertion.failWrapper.TWithHelper.Helper()
- assertion.failWrapper.Fail(description+message, 2+assertion.offset)
- return false
-}
-
-func vetExtras(extras []interface{}) (bool, string) {
- for i, extra := range extras {
- if extra != nil {
- zeroValue := reflect.Zero(reflect.TypeOf(extra)).Interface()
- if !reflect.DeepEqual(zeroValue, extra) {
- message := fmt.Sprintf("Unexpected non-nil/non-zero extra argument at index %d:\n\t<%T>: %#v", i+1, extra, extra)
- return false, message
- }
- }
- }
- return true, ""
-}
diff --git a/vendor/github.com/onsi/gomega/internal/asyncassertion/async_assertion.go b/vendor/github.com/onsi/gomega/internal/asyncassertion/async_assertion.go
deleted file mode 100644
index a233e48..0000000
--- a/vendor/github.com/onsi/gomega/internal/asyncassertion/async_assertion.go
+++ /dev/null
@@ -1,196 +0,0 @@
-// untested sections: 2
-
-package asyncassertion
-
-import (
- "errors"
- "fmt"
- "reflect"
- "time"
-
- "github.com/onsi/gomega/internal/oraclematcher"
- "github.com/onsi/gomega/types"
-)
-
-type AsyncAssertionType uint
-
-const (
- AsyncAssertionTypeEventually AsyncAssertionType = iota
- AsyncAssertionTypeConsistently
-)
-
-type AsyncAssertion struct {
- asyncType AsyncAssertionType
- actualInput interface{}
- timeoutInterval time.Duration
- pollingInterval time.Duration
- failWrapper *types.GomegaFailWrapper
- offset int
-}
-
-func New(asyncType AsyncAssertionType, actualInput interface{}, failWrapper *types.GomegaFailWrapper, timeoutInterval time.Duration, pollingInterval time.Duration, offset int) *AsyncAssertion {
- actualType := reflect.TypeOf(actualInput)
- if actualType.Kind() == reflect.Func {
- if actualType.NumIn() != 0 || actualType.NumOut() == 0 {
- panic("Expected a function with no arguments and one or more return values.")
- }
- }
-
- return &AsyncAssertion{
- asyncType: asyncType,
- actualInput: actualInput,
- failWrapper: failWrapper,
- timeoutInterval: timeoutInterval,
- pollingInterval: pollingInterval,
- offset: offset,
- }
-}
-
-func (assertion *AsyncAssertion) Should(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
- assertion.failWrapper.TWithHelper.Helper()
- return assertion.match(matcher, true, optionalDescription...)
-}
-
-func (assertion *AsyncAssertion) ShouldNot(matcher types.GomegaMatcher, optionalDescription ...interface{}) bool {
- assertion.failWrapper.TWithHelper.Helper()
- return assertion.match(matcher, false, optionalDescription...)
-}
-
-func (assertion *AsyncAssertion) buildDescription(optionalDescription ...interface{}) string {
- switch len(optionalDescription) {
- case 0:
- return ""
- default:
- return fmt.Sprintf(optionalDescription[0].(string), optionalDescription[1:]...) + "\n"
- }
-}
-
-func (assertion *AsyncAssertion) actualInputIsAFunction() bool {
- actualType := reflect.TypeOf(assertion.actualInput)
- return actualType.Kind() == reflect.Func && actualType.NumIn() == 0 && actualType.NumOut() > 0
-}
-
-func (assertion *AsyncAssertion) pollActual() (interface{}, error) {
- if assertion.actualInputIsAFunction() {
- values := reflect.ValueOf(assertion.actualInput).Call([]reflect.Value{})
-
- extras := []interface{}{}
- for _, value := range values[1:] {
- extras = append(extras, value.Interface())
- }
-
- success, message := vetExtras(extras)
-
- if !success {
- return nil, errors.New(message)
- }
-
- return values[0].Interface(), nil
- }
-
- return assertion.actualInput, nil
-}
-
-func (assertion *AsyncAssertion) matcherMayChange(matcher types.GomegaMatcher, value interface{}) bool {
- if assertion.actualInputIsAFunction() {
- return true
- }
-
- return oraclematcher.MatchMayChangeInTheFuture(matcher, value)
-}
-
-func (assertion *AsyncAssertion) match(matcher types.GomegaMatcher, desiredMatch bool, optionalDescription ...interface{}) bool {
- timer := time.Now()
- timeout := time.After(assertion.timeoutInterval)
-
- description := assertion.buildDescription(optionalDescription...)
-
- var matches bool
- var err error
- mayChange := true
- value, err := assertion.pollActual()
- if err == nil {
- mayChange = assertion.matcherMayChange(matcher, value)
- matches, err = matcher.Match(value)
- }
-
- assertion.failWrapper.TWithHelper.Helper()
-
- fail := func(preamble string) {
- errMsg := ""
- message := ""
- if err != nil {
- errMsg = "Error: " + err.Error()
- } else {
- if desiredMatch {
- message = matcher.FailureMessage(value)
- } else {
- message = matcher.NegatedFailureMessage(value)
- }
- }
- assertion.failWrapper.TWithHelper.Helper()
- assertion.failWrapper.Fail(fmt.Sprintf("%s after %.3fs.\n%s%s%s", preamble, time.Since(timer).Seconds(), description, message, errMsg), 3+assertion.offset)
- }
-
- if assertion.asyncType == AsyncAssertionTypeEventually {
- for {
- if err == nil && matches == desiredMatch {
- return true
- }
-
- if !mayChange {
- fail("No future change is possible. Bailing out early")
- return false
- }
-
- select {
- case <-time.After(assertion.pollingInterval):
- value, err = assertion.pollActual()
- if err == nil {
- mayChange = assertion.matcherMayChange(matcher, value)
- matches, err = matcher.Match(value)
- }
- case <-timeout:
- fail("Timed out")
- return false
- }
- }
- } else if assertion.asyncType == AsyncAssertionTypeConsistently {
- for {
- if !(err == nil && matches == desiredMatch) {
- fail("Failed")
- return false
- }
-
- if !mayChange {
- return true
- }
-
- select {
- case <-time.After(assertion.pollingInterval):
- value, err = assertion.pollActual()
- if err == nil {
- mayChange = assertion.matcherMayChange(matcher, value)
- matches, err = matcher.Match(value)
- }
- case <-timeout:
- return true
- }
- }
- }
-
- return false
-}
-
-func vetExtras(extras []interface{}) (bool, string) {
- for i, extra := range extras {
- if extra != nil {
- zeroValue := reflect.Zero(reflect.TypeOf(extra)).Interface()
- if !reflect.DeepEqual(zeroValue, extra) {
- message := fmt.Sprintf("Unexpected non-nil/non-zero extra argument at index %d:\n\t<%T>: %#v", i+1, extra, extra)
- return false, message
- }
- }
- }
- return true, ""
-}
diff --git a/vendor/github.com/onsi/gomega/internal/oraclematcher/oracle_matcher.go b/vendor/github.com/onsi/gomega/internal/oraclematcher/oracle_matcher.go
deleted file mode 100644
index 66cad88..0000000
--- a/vendor/github.com/onsi/gomega/internal/oraclematcher/oracle_matcher.go
+++ /dev/null
@@ -1,25 +0,0 @@
-package oraclematcher
-
-import "github.com/onsi/gomega/types"
-
-/*
-GomegaMatchers that also match the OracleMatcher interface can convey information about
-whether or not their result will change upon future attempts.
-
-This allows `Eventually` and `Consistently` to short circuit if success becomes impossible.
-
-For example, a process' exit code can never change. So, gexec's Exit matcher returns `true`
-for `MatchMayChangeInTheFuture` until the process exits, at which point it returns `false` forevermore.
-*/
-type OracleMatcher interface {
- MatchMayChangeInTheFuture(actual interface{}) bool
-}
-
-func MatchMayChangeInTheFuture(matcher types.GomegaMatcher, value interface{}) bool {
- oracleMatcher, ok := matcher.(OracleMatcher)
- if !ok {
- return true
- }
-
- return oracleMatcher.MatchMayChangeInTheFuture(value)
-}
diff --git a/vendor/github.com/onsi/gomega/internal/testingtsupport/testing_t_support.go b/vendor/github.com/onsi/gomega/internal/testingtsupport/testing_t_support.go
deleted file mode 100644
index bb27032..0000000
--- a/vendor/github.com/onsi/gomega/internal/testingtsupport/testing_t_support.go
+++ /dev/null
@@ -1,60 +0,0 @@
-package testingtsupport
-
-import (
- "regexp"
- "runtime/debug"
- "strings"
-
- "github.com/onsi/gomega/types"
-)
-
-var StackTracePruneRE = regexp.MustCompile(`\/gomega\/|\/ginkgo\/|\/pkg\/testing\/|\/pkg\/runtime\/`)
-
-type EmptyTWithHelper struct{}
-
-func (e EmptyTWithHelper) Helper() {}
-
-type gomegaTestingT interface {
- Fatalf(format string, args ...interface{})
-}
-
-func BuildTestingTGomegaFailWrapper(t gomegaTestingT) *types.GomegaFailWrapper {
- tWithHelper, hasHelper := t.(types.TWithHelper)
- if !hasHelper {
- tWithHelper = EmptyTWithHelper{}
- }
-
- fail := func(message string, callerSkip ...int) {
- if hasHelper {
- tWithHelper.Helper()
- t.Fatalf("\n%s", message)
- } else {
- skip := 2
- if len(callerSkip) > 0 {
- skip += callerSkip[0]
- }
- stackTrace := pruneStack(string(debug.Stack()), skip)
- t.Fatalf("\n%s\n%s\n", stackTrace, message)
- }
- }
-
- return &types.GomegaFailWrapper{
- Fail: fail,
- TWithHelper: tWithHelper,
- }
-}
-
-func pruneStack(fullStackTrace string, skip int) string {
- stack := strings.Split(fullStackTrace, "\n")[1:]
- if len(stack) > 2*skip {
- stack = stack[2*skip:]
- }
- prunedStack := []string{}
- for i := 0; i < len(stack)/2; i++ {
- if !StackTracePruneRE.Match([]byte(stack[i*2])) {
- prunedStack = append(prunedStack, stack[i*2])
- prunedStack = append(prunedStack, stack[i*2+1])
- }
- }
- return strings.Join(prunedStack, "\n")
-}
diff --git a/vendor/github.com/onsi/gomega/matchers.go b/vendor/github.com/onsi/gomega/matchers.go
deleted file mode 100644
index 9ec8893..0000000
--- a/vendor/github.com/onsi/gomega/matchers.go
+++ /dev/null
@@ -1,443 +0,0 @@
-package gomega
-
-import (
- "time"
-
- "github.com/onsi/gomega/matchers"
- "github.com/onsi/gomega/types"
-)
-
-//Equal uses reflect.DeepEqual to compare actual with expected. Equal is strict about
-//types when performing comparisons.
-//It is an error for both actual and expected to be nil. Use BeNil() instead.
-func Equal(expected interface{}) types.GomegaMatcher {
- return &matchers.EqualMatcher{
- Expected: expected,
- }
-}
-
-//BeEquivalentTo is more lax than Equal, allowing equality between different types.
-//This is done by converting actual to have the type of expected before
-//attempting equality with reflect.DeepEqual.
-//It is an error for actual and expected to be nil. Use BeNil() instead.
-func BeEquivalentTo(expected interface{}) types.GomegaMatcher {
- return &matchers.BeEquivalentToMatcher{
- Expected: expected,
- }
-}
-
-//BeIdenticalTo uses the == operator to compare actual with expected.
-//BeIdenticalTo is strict about types when performing comparisons.
-//It is an error for both actual and expected to be nil. Use BeNil() instead.
-func BeIdenticalTo(expected interface{}) types.GomegaMatcher {
- return &matchers.BeIdenticalToMatcher{
- Expected: expected,
- }
-}
-
-//BeNil succeeds if actual is nil
-func BeNil() types.GomegaMatcher {
- return &matchers.BeNilMatcher{}
-}
-
-//BeTrue succeeds if actual is true
-func BeTrue() types.GomegaMatcher {
- return &matchers.BeTrueMatcher{}
-}
-
-//BeFalse succeeds if actual is false
-func BeFalse() types.GomegaMatcher {
- return &matchers.BeFalseMatcher{}
-}
-
-//HaveOccurred succeeds if actual is a non-nil error
-//The typical Go error checking pattern looks like:
-// err := SomethingThatMightFail()
-// Expect(err).ShouldNot(HaveOccurred())
-func HaveOccurred() types.GomegaMatcher {
- return &matchers.HaveOccurredMatcher{}
-}
-
-//Succeed passes if actual is a nil error
-//Succeed is intended to be used with functions that return a single error value. Instead of
-// err := SomethingThatMightFail()
-// Expect(err).ShouldNot(HaveOccurred())
-//
-//You can write:
-// Expect(SomethingThatMightFail()).Should(Succeed())
-//
-//It is a mistake to use Succeed with a function that has multiple return values. Gomega's Ω and Expect
-//functions automatically trigger failure if any return values after the first return value are non-zero/non-nil.
-//This means that Ω(MultiReturnFunc()).ShouldNot(Succeed()) can never pass.
-func Succeed() types.GomegaMatcher {
- return &matchers.SucceedMatcher{}
-}
-
-//MatchError succeeds if actual is a non-nil error that matches the passed in string/error.
-//
-//These are valid use-cases:
-// Expect(err).Should(MatchError("an error")) //asserts that err.Error() == "an error"
-// Expect(err).Should(MatchError(SomeError)) //asserts that err == SomeError (via reflect.DeepEqual)
-//
-//It is an error for err to be nil or an object that does not implement the Error interface
-func MatchError(expected interface{}) types.GomegaMatcher {
- return &matchers.MatchErrorMatcher{
- Expected: expected,
- }
-}
-
-//BeClosed succeeds if actual is a closed channel.
-//It is an error to pass a non-channel to BeClosed, it is also an error to pass nil
-//
-//In order to check whether or not the channel is closed, Gomega must try to read from the channel
-//(even in the `ShouldNot(BeClosed())` case). You should keep this in mind if you wish to make subsequent assertions about
-//values coming down the channel.
-//
-//Also, if you are testing that a *buffered* channel is closed you must first read all values out of the channel before
-//asserting that it is closed (it is not possible to detect that a buffered-channel has been closed until all its buffered values are read).
-//
-//Finally, as a corollary: it is an error to check whether or not a send-only channel is closed.
-func BeClosed() types.GomegaMatcher {
- return &matchers.BeClosedMatcher{}
-}
-
-//Receive succeeds if there is a value to be received on actual.
-//Actual must be a channel (and cannot be a send-only channel) -- anything else is an error.
-//
-//Receive returns immediately and never blocks:
-//
-//- If there is nothing on the channel `c` then Expect(c).Should(Receive()) will fail and Ω(c).ShouldNot(Receive()) will pass.
-//
-//- If the channel `c` is closed then Expect(c).Should(Receive()) will fail and Ω(c).ShouldNot(Receive()) will pass.
-//
-//- If there is something on the channel `c` ready to be read, then Expect(c).Should(Receive()) will pass and Ω(c).ShouldNot(Receive()) will fail.
-//
-//If you have a go-routine running in the background that will write to channel `c` you can:
-// Eventually(c).Should(Receive())
-//
-//This will timeout if nothing gets sent to `c` (you can modify the timeout interval as you normally do with `Eventually`)
-//
-//A similar use-case is to assert that no go-routine writes to a channel (for a period of time). You can do this with `Consistently`:
-// Consistently(c).ShouldNot(Receive())
-//
-//You can pass `Receive` a matcher. If you do so, it will match the received object against the matcher. For example:
-// Expect(c).Should(Receive(Equal("foo")))
-//
-//When given a matcher, `Receive` will always fail if there is nothing to be received on the channel.
-//
-//Passing Receive a matcher is especially useful when paired with Eventually:
-//
-// Eventually(c).Should(Receive(ContainSubstring("bar")))
-//
-//will repeatedly attempt to pull values out of `c` until a value matching "bar" is received.
-//
-//Finally, if you want to have a reference to the value *sent* to the channel you can pass the `Receive` matcher a pointer to a variable of the appropriate type:
-// var myThing thing
-// Eventually(thingChan).Should(Receive(&myThing))
-// Expect(myThing.Sprocket).Should(Equal("foo"))
-// Expect(myThing.IsValid()).Should(BeTrue())
-func Receive(args ...interface{}) types.GomegaMatcher {
- var arg interface{}
- if len(args) > 0 {
- arg = args[0]
- }
-
- return &matchers.ReceiveMatcher{
- Arg: arg,
- }
-}
-
-//BeSent succeeds if a value can be sent to actual.
-//Actual must be a channel (and cannot be a receive-only channel) that can sent the type of the value passed into BeSent -- anything else is an error.
-//In addition, actual must not be closed.
-//
-//BeSent never blocks:
-//
-//- If the channel `c` is not ready to receive then Expect(c).Should(BeSent("foo")) will fail immediately
-//- If the channel `c` is eventually ready to receive then Eventually(c).Should(BeSent("foo")) will succeed.. presuming the channel becomes ready to receive before Eventually's timeout
-//- If the channel `c` is closed then Expect(c).Should(BeSent("foo")) and Ω(c).ShouldNot(BeSent("foo")) will both fail immediately
-//
-//Of course, the value is actually sent to the channel. The point of `BeSent` is less to make an assertion about the availability of the channel (which is typically an implementation detail that your test should not be concerned with).
-//Rather, the point of `BeSent` is to make it possible to easily and expressively write tests that can timeout on blocked channel sends.
-func BeSent(arg interface{}) types.GomegaMatcher {
- return &matchers.BeSentMatcher{
- Arg: arg,
- }
-}
-
-//MatchRegexp succeeds if actual is a string or stringer that matches the
-//passed-in regexp. Optional arguments can be provided to construct a regexp
-//via fmt.Sprintf().
-func MatchRegexp(regexp string, args ...interface{}) types.GomegaMatcher {
- return &matchers.MatchRegexpMatcher{
- Regexp: regexp,
- Args: args,
- }
-}
-
-//ContainSubstring succeeds if actual is a string or stringer that contains the
-//passed-in substring. Optional arguments can be provided to construct the substring
-//via fmt.Sprintf().
-func ContainSubstring(substr string, args ...interface{}) types.GomegaMatcher {
- return &matchers.ContainSubstringMatcher{
- Substr: substr,
- Args: args,
- }
-}
-
-//HavePrefix succeeds if actual is a string or stringer that contains the
-//passed-in string as a prefix. Optional arguments can be provided to construct
-//via fmt.Sprintf().
-func HavePrefix(prefix string, args ...interface{}) types.GomegaMatcher {
- return &matchers.HavePrefixMatcher{
- Prefix: prefix,
- Args: args,
- }
-}
-
-//HaveSuffix succeeds if actual is a string or stringer that contains the
-//passed-in string as a suffix. Optional arguments can be provided to construct
-//via fmt.Sprintf().
-func HaveSuffix(suffix string, args ...interface{}) types.GomegaMatcher {
- return &matchers.HaveSuffixMatcher{
- Suffix: suffix,
- Args: args,
- }
-}
-
-//MatchJSON succeeds if actual is a string or stringer of JSON that matches
-//the expected JSON. The JSONs are decoded and the resulting objects are compared via
-//reflect.DeepEqual so things like key-ordering and whitespace shouldn't matter.
-func MatchJSON(json interface{}) types.GomegaMatcher {
- return &matchers.MatchJSONMatcher{
- JSONToMatch: json,
- }
-}
-
-//MatchXML succeeds if actual is a string or stringer of XML that matches
-//the expected XML. The XMLs are decoded and the resulting objects are compared via
-//reflect.DeepEqual so things like whitespaces shouldn't matter.
-func MatchXML(xml interface{}) types.GomegaMatcher {
- return &matchers.MatchXMLMatcher{
- XMLToMatch: xml,
- }
-}
-
-//MatchYAML succeeds if actual is a string or stringer of YAML that matches
-//the expected YAML. The YAML's are decoded and the resulting objects are compared via
-//reflect.DeepEqual so things like key-ordering and whitespace shouldn't matter.
-func MatchYAML(yaml interface{}) types.GomegaMatcher {
- return &matchers.MatchYAMLMatcher{
- YAMLToMatch: yaml,
- }
-}
-
-//BeEmpty succeeds if actual is empty. Actual must be of type string, array, map, chan, or slice.
-func BeEmpty() types.GomegaMatcher {
- return &matchers.BeEmptyMatcher{}
-}
-
-//HaveLen succeeds if actual has the passed-in length. Actual must be of type string, array, map, chan, or slice.
-func HaveLen(count int) types.GomegaMatcher {
- return &matchers.HaveLenMatcher{
- Count: count,
- }
-}
-
-//HaveCap succeeds if actual has the passed-in capacity. Actual must be of type array, chan, or slice.
-func HaveCap(count int) types.GomegaMatcher {
- return &matchers.HaveCapMatcher{
- Count: count,
- }
-}
-
-//BeZero succeeds if actual is the zero value for its type or if actual is nil.
-func BeZero() types.GomegaMatcher {
- return &matchers.BeZeroMatcher{}
-}
-
-//ContainElement succeeds if actual contains the passed in element.
-//By default ContainElement() uses Equal() to perform the match, however a
-//matcher can be passed in instead:
-// Expect([]string{"Foo", "FooBar"}).Should(ContainElement(ContainSubstring("Bar")))
-//
-//Actual must be an array, slice or map.
-//For maps, ContainElement searches through the map's values.
-func ContainElement(element interface{}) types.GomegaMatcher {
- return &matchers.ContainElementMatcher{
- Element: element,
- }
-}
-
-//BeElementOf succeeds if actual is contained in the passed in elements.
-//BeElementOf() always uses Equal() to perform the match.
-//When the passed in elements are comprised of a single element that is either an Array or Slice, BeElementOf() behaves
-//as the reverse of ContainElement() that operates with Equal() to perform the match.
-// Expect(2).Should(BeElementOf([]int{1, 2}))
-// Expect(2).Should(BeElementOf([2]int{1, 2}))
-//Otherwise, BeElementOf() provides a syntactic sugar for Or(Equal(_), Equal(_), ...):
-// Expect(2).Should(BeElementOf(1, 2))
-//
-//Actual must be typed.
-func BeElementOf(elements ...interface{}) types.GomegaMatcher {
- return &matchers.BeElementOfMatcher{
- Elements: elements,
- }
-}
-
-//ConsistOf succeeds if actual contains precisely the elements passed into the matcher. The ordering of the elements does not matter.
-//By default ConsistOf() uses Equal() to match the elements, however custom matchers can be passed in instead. Here are some examples:
-//
-// Expect([]string{"Foo", "FooBar"}).Should(ConsistOf("FooBar", "Foo"))
-// Expect([]string{"Foo", "FooBar"}).Should(ConsistOf(ContainSubstring("Bar"), "Foo"))
-// Expect([]string{"Foo", "FooBar"}).Should(ConsistOf(ContainSubstring("Foo"), ContainSubstring("Foo")))
-//
-//Actual must be an array, slice or map. For maps, ConsistOf matches against the map's values.
-//
-//You typically pass variadic arguments to ConsistOf (as in the examples above). However, if you need to pass in a slice you can provided that it
-//is the only element passed in to ConsistOf:
-//
-// Expect([]string{"Foo", "FooBar"}).Should(ConsistOf([]string{"FooBar", "Foo"}))
-//
-//Note that Go's type system does not allow you to write this as ConsistOf([]string{"FooBar", "Foo"}...) as []string and []interface{} are different types - hence the need for this special rule.
-func ConsistOf(elements ...interface{}) types.GomegaMatcher {
- return &matchers.ConsistOfMatcher{
- Elements: elements,
- }
-}
-
-//HaveKey succeeds if actual is a map with the passed in key.
-//By default HaveKey uses Equal() to perform the match, however a
-//matcher can be passed in instead:
-// Expect(map[string]string{"Foo": "Bar", "BazFoo": "Duck"}).Should(HaveKey(MatchRegexp(`.+Foo$`)))
-func HaveKey(key interface{}) types.GomegaMatcher {
- return &matchers.HaveKeyMatcher{
- Key: key,
- }
-}
-
-//HaveKeyWithValue succeeds if actual is a map with the passed in key and value.
-//By default HaveKeyWithValue uses Equal() to perform the match, however a
-//matcher can be passed in instead:
-// Expect(map[string]string{"Foo": "Bar", "BazFoo": "Duck"}).Should(HaveKeyWithValue("Foo", "Bar"))
-// Expect(map[string]string{"Foo": "Bar", "BazFoo": "Duck"}).Should(HaveKeyWithValue(MatchRegexp(`.+Foo$`), "Bar"))
-func HaveKeyWithValue(key interface{}, value interface{}) types.GomegaMatcher {
- return &matchers.HaveKeyWithValueMatcher{
- Key: key,
- Value: value,
- }
-}
-
-//BeNumerically performs numerical assertions in a type-agnostic way.
-//Actual and expected should be numbers, though the specific type of
-//number is irrelevant (float32, float64, uint8, etc...).
-//
-//There are six, self-explanatory, supported comparators:
-// Expect(1.0).Should(BeNumerically("==", 1))
-// Expect(1.0).Should(BeNumerically("~", 0.999, 0.01))
-// Expect(1.0).Should(BeNumerically(">", 0.9))
-// Expect(1.0).Should(BeNumerically(">=", 1.0))
-// Expect(1.0).Should(BeNumerically("<", 3))
-// Expect(1.0).Should(BeNumerically("<=", 1.0))
-func BeNumerically(comparator string, compareTo ...interface{}) types.GomegaMatcher {
- return &matchers.BeNumericallyMatcher{
- Comparator: comparator,
- CompareTo: compareTo,
- }
-}
-
-//BeTemporally compares time.Time's like BeNumerically
-//Actual and expected must be time.Time. The comparators are the same as for BeNumerically
-// Expect(time.Now()).Should(BeTemporally(">", time.Time{}))
-// Expect(time.Now()).Should(BeTemporally("~", time.Now(), time.Second))
-func BeTemporally(comparator string, compareTo time.Time, threshold ...time.Duration) types.GomegaMatcher {
- return &matchers.BeTemporallyMatcher{
- Comparator: comparator,
- CompareTo: compareTo,
- Threshold: threshold,
- }
-}
-
-//BeAssignableToTypeOf succeeds if actual is assignable to the type of expected.
-//It will return an error when one of the values is nil.
-// Expect(0).Should(BeAssignableToTypeOf(0)) // Same values
-// Expect(5).Should(BeAssignableToTypeOf(-1)) // different values same type
-// Expect("foo").Should(BeAssignableToTypeOf("bar")) // different values same type
-// Expect(struct{ Foo string }{}).Should(BeAssignableToTypeOf(struct{ Foo string }{}))
-func BeAssignableToTypeOf(expected interface{}) types.GomegaMatcher {
- return &matchers.AssignableToTypeOfMatcher{
- Expected: expected,
- }
-}
-
-//Panic succeeds if actual is a function that, when invoked, panics.
-//Actual must be a function that takes no arguments and returns no results.
-func Panic() types.GomegaMatcher {
- return &matchers.PanicMatcher{}
-}
-
-//BeAnExistingFile succeeds if a file exists.
-//Actual must be a string representing the abs path to the file being checked.
-func BeAnExistingFile() types.GomegaMatcher {
- return &matchers.BeAnExistingFileMatcher{}
-}
-
-//BeARegularFile succeeds if a file exists and is a regular file.
-//Actual must be a string representing the abs path to the file being checked.
-func BeARegularFile() types.GomegaMatcher {
- return &matchers.BeARegularFileMatcher{}
-}
-
-//BeADirectory succeeds if a file exists and is a directory.
-//Actual must be a string representing the abs path to the file being checked.
-func BeADirectory() types.GomegaMatcher {
- return &matchers.BeADirectoryMatcher{}
-}
-
-//And succeeds only if all of the given matchers succeed.
-//The matchers are tried in order, and will fail-fast if one doesn't succeed.
-// Expect("hi").To(And(HaveLen(2), Equal("hi"))
-//
-//And(), Or(), Not() and WithTransform() allow matchers to be composed into complex expressions.
-func And(ms ...types.GomegaMatcher) types.GomegaMatcher {
- return &matchers.AndMatcher{Matchers: ms}
-}
-
-//SatisfyAll is an alias for And().
-// Expect("hi").Should(SatisfyAll(HaveLen(2), Equal("hi")))
-func SatisfyAll(matchers ...types.GomegaMatcher) types.GomegaMatcher {
- return And(matchers...)
-}
-
-//Or succeeds if any of the given matchers succeed.
-//The matchers are tried in order and will return immediately upon the first successful match.
-// Expect("hi").To(Or(HaveLen(3), HaveLen(2))
-//
-//And(), Or(), Not() and WithTransform() allow matchers to be composed into complex expressions.
-func Or(ms ...types.GomegaMatcher) types.GomegaMatcher {
- return &matchers.OrMatcher{Matchers: ms}
-}
-
-//SatisfyAny is an alias for Or().
-// Expect("hi").SatisfyAny(Or(HaveLen(3), HaveLen(2))
-func SatisfyAny(matchers ...types.GomegaMatcher) types.GomegaMatcher {
- return Or(matchers...)
-}
-
-//Not negates the given matcher; it succeeds if the given matcher fails.
-// Expect(1).To(Not(Equal(2))
-//
-//And(), Or(), Not() and WithTransform() allow matchers to be composed into complex expressions.
-func Not(matcher types.GomegaMatcher) types.GomegaMatcher {
- return &matchers.NotMatcher{Matcher: matcher}
-}
-
-//WithTransform applies the `transform` to the actual value and matches it against `matcher`.
-//The given transform must be a function of one parameter that returns one value.
-// var plus1 = func(i int) int { return i + 1 }
-// Expect(1).To(WithTransform(plus1, Equal(2))
-//
-//And(), Or(), Not() and WithTransform() allow matchers to be composed into complex expressions.
-func WithTransform(transform interface{}, matcher types.GomegaMatcher) types.GomegaMatcher {
- return matchers.NewWithTransformMatcher(transform, matcher)
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/and.go b/vendor/github.com/onsi/gomega/matchers/and.go
deleted file mode 100644
index d83a291..0000000
--- a/vendor/github.com/onsi/gomega/matchers/and.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package matchers
-
-import (
- "fmt"
-
- "github.com/onsi/gomega/format"
- "github.com/onsi/gomega/internal/oraclematcher"
- "github.com/onsi/gomega/types"
-)
-
-type AndMatcher struct {
- Matchers []types.GomegaMatcher
-
- // state
- firstFailedMatcher types.GomegaMatcher
-}
-
-func (m *AndMatcher) Match(actual interface{}) (success bool, err error) {
- m.firstFailedMatcher = nil
- for _, matcher := range m.Matchers {
- success, err := matcher.Match(actual)
- if !success || err != nil {
- m.firstFailedMatcher = matcher
- return false, err
- }
- }
- return true, nil
-}
-
-func (m *AndMatcher) FailureMessage(actual interface{}) (message string) {
- return m.firstFailedMatcher.FailureMessage(actual)
-}
-
-func (m *AndMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- // not the most beautiful list of matchers, but not bad either...
- return format.Message(actual, fmt.Sprintf("To not satisfy all of these matchers: %s", m.Matchers))
-}
-
-func (m *AndMatcher) MatchMayChangeInTheFuture(actual interface{}) bool {
- /*
- Example with 3 matchers: A, B, C
-
- Match evaluates them: T, F, <?> => F
- So match is currently F, what should MatchMayChangeInTheFuture() return?
- Seems like it only depends on B, since currently B MUST change to allow the result to become T
-
- Match eval: T, T, T => T
- So match is currently T, what should MatchMayChangeInTheFuture() return?
- Seems to depend on ANY of them being able to change to F.
- */
-
- if m.firstFailedMatcher == nil {
- // so all matchers succeeded.. Any one of them changing would change the result.
- for _, matcher := range m.Matchers {
- if oraclematcher.MatchMayChangeInTheFuture(matcher, actual) {
- return true
- }
- }
- return false // none of were going to change
- }
- // one of the matchers failed.. it must be able to change in order to affect the result
- return oraclematcher.MatchMayChangeInTheFuture(m.firstFailedMatcher, actual)
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.go b/vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.go
deleted file mode 100644
index be48395..0000000
--- a/vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.go
+++ /dev/null
@@ -1,37 +0,0 @@
-// untested sections: 2
-
-package matchers
-
-import (
- "fmt"
- "reflect"
-
- "github.com/onsi/gomega/format"
-)
-
-type AssignableToTypeOfMatcher struct {
- Expected interface{}
-}
-
-func (matcher *AssignableToTypeOfMatcher) Match(actual interface{}) (success bool, err error) {
- if actual == nil && matcher.Expected == nil {
- return false, fmt.Errorf("Refusing to compare <nil> to <nil>.\nBe explicit and use BeNil() instead. This is to avoid mistakes where both sides of an assertion are erroneously uninitialized.")
- } else if matcher.Expected == nil {
- return false, fmt.Errorf("Refusing to compare type to <nil>.\nBe explicit and use BeNil() instead. This is to avoid mistakes where both sides of an assertion are erroneously uninitialized.")
- } else if actual == nil {
- return false, nil
- }
-
- actualType := reflect.TypeOf(actual)
- expectedType := reflect.TypeOf(matcher.Expected)
-
- return actualType.AssignableTo(expectedType), nil
-}
-
-func (matcher *AssignableToTypeOfMatcher) FailureMessage(actual interface{}) string {
- return format.Message(actual, fmt.Sprintf("to be assignable to the type: %T", matcher.Expected))
-}
-
-func (matcher *AssignableToTypeOfMatcher) NegatedFailureMessage(actual interface{}) string {
- return format.Message(actual, fmt.Sprintf("not to be assignable to the type: %T", matcher.Expected))
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/attributes_slice.go b/vendor/github.com/onsi/gomega/matchers/attributes_slice.go
deleted file mode 100644
index 355b362..0000000
--- a/vendor/github.com/onsi/gomega/matchers/attributes_slice.go
+++ /dev/null
@@ -1,14 +0,0 @@
-package matchers
-
-import (
- "encoding/xml"
- "strings"
-)
-
-type attributesSlice []xml.Attr
-
-func (attrs attributesSlice) Len() int { return len(attrs) }
-func (attrs attributesSlice) Less(i, j int) bool {
- return strings.Compare(attrs[i].Name.Local, attrs[j].Name.Local) == -1
-}
-func (attrs attributesSlice) Swap(i, j int) { attrs[i], attrs[j] = attrs[j], attrs[i] }
diff --git a/vendor/github.com/onsi/gomega/matchers/be_a_directory.go b/vendor/github.com/onsi/gomega/matchers/be_a_directory.go
deleted file mode 100644
index acffc85..0000000
--- a/vendor/github.com/onsi/gomega/matchers/be_a_directory.go
+++ /dev/null
@@ -1,56 +0,0 @@
-// untested sections: 5
-
-package matchers
-
-import (
- "fmt"
- "os"
-
- "github.com/onsi/gomega/format"
-)
-
-type notADirectoryError struct {
- os.FileInfo
-}
-
-func (t notADirectoryError) Error() string {
- fileInfo := os.FileInfo(t)
- switch {
- case fileInfo.Mode().IsRegular():
- return "file is a regular file"
- default:
- return fmt.Sprintf("file mode is: %s", fileInfo.Mode().String())
- }
-}
-
-type BeADirectoryMatcher struct {
- expected interface{}
- err error
-}
-
-func (matcher *BeADirectoryMatcher) Match(actual interface{}) (success bool, err error) {
- actualFilename, ok := actual.(string)
- if !ok {
- return false, fmt.Errorf("BeADirectoryMatcher matcher expects a file path")
- }
-
- fileInfo, err := os.Stat(actualFilename)
- if err != nil {
- matcher.err = err
- return false, nil
- }
-
- if !fileInfo.Mode().IsDir() {
- matcher.err = notADirectoryError{fileInfo}
- return false, nil
- }
- return true, nil
-}
-
-func (matcher *BeADirectoryMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, fmt.Sprintf("to be a directory: %s", matcher.err))
-}
-
-func (matcher *BeADirectoryMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, fmt.Sprintf("not be a directory"))
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go b/vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go
deleted file mode 100644
index 89441c8..0000000
--- a/vendor/github.com/onsi/gomega/matchers/be_a_regular_file.go
+++ /dev/null
@@ -1,56 +0,0 @@
-// untested sections: 5
-
-package matchers
-
-import (
- "fmt"
- "os"
-
- "github.com/onsi/gomega/format"
-)
-
-type notARegularFileError struct {
- os.FileInfo
-}
-
-func (t notARegularFileError) Error() string {
- fileInfo := os.FileInfo(t)
- switch {
- case fileInfo.IsDir():
- return "file is a directory"
- default:
- return fmt.Sprintf("file mode is: %s", fileInfo.Mode().String())
- }
-}
-
-type BeARegularFileMatcher struct {
- expected interface{}
- err error
-}
-
-func (matcher *BeARegularFileMatcher) Match(actual interface{}) (success bool, err error) {
- actualFilename, ok := actual.(string)
- if !ok {
- return false, fmt.Errorf("BeARegularFileMatcher matcher expects a file path")
- }
-
- fileInfo, err := os.Stat(actualFilename)
- if err != nil {
- matcher.err = err
- return false, nil
- }
-
- if !fileInfo.Mode().IsRegular() {
- matcher.err = notARegularFileError{fileInfo}
- return false, nil
- }
- return true, nil
-}
-
-func (matcher *BeARegularFileMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, fmt.Sprintf("to be a regular file: %s", matcher.err))
-}
-
-func (matcher *BeARegularFileMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, fmt.Sprintf("not be a regular file"))
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go b/vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go
deleted file mode 100644
index ec6506b..0000000
--- a/vendor/github.com/onsi/gomega/matchers/be_an_existing_file.go
+++ /dev/null
@@ -1,40 +0,0 @@
-// untested sections: 3
-
-package matchers
-
-import (
- "fmt"
- "os"
-
- "github.com/onsi/gomega/format"
-)
-
-type BeAnExistingFileMatcher struct {
- expected interface{}
-}
-
-func (matcher *BeAnExistingFileMatcher) Match(actual interface{}) (success bool, err error) {
- actualFilename, ok := actual.(string)
- if !ok {
- return false, fmt.Errorf("BeAnExistingFileMatcher matcher expects a file path")
- }
-
- if _, err = os.Stat(actualFilename); err != nil {
- switch {
- case os.IsNotExist(err):
- return false, nil
- default:
- return false, err
- }
- }
-
- return true, nil
-}
-
-func (matcher *BeAnExistingFileMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, fmt.Sprintf("to exist"))
-}
-
-func (matcher *BeAnExistingFileMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, fmt.Sprintf("not to exist"))
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/be_closed_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_closed_matcher.go
deleted file mode 100644
index f13c244..0000000
--- a/vendor/github.com/onsi/gomega/matchers/be_closed_matcher.go
+++ /dev/null
@@ -1,48 +0,0 @@
-// untested sections: 2
-
-package matchers
-
-import (
- "fmt"
- "reflect"
-
- "github.com/onsi/gomega/format"
-)
-
-type BeClosedMatcher struct {
-}
-
-func (matcher *BeClosedMatcher) Match(actual interface{}) (success bool, err error) {
- if !isChan(actual) {
- return false, fmt.Errorf("BeClosed matcher expects a channel. Got:\n%s", format.Object(actual, 1))
- }
-
- channelType := reflect.TypeOf(actual)
- channelValue := reflect.ValueOf(actual)
-
- if channelType.ChanDir() == reflect.SendDir {
- return false, fmt.Errorf("BeClosed matcher cannot determine if a send-only channel is closed or open. Got:\n%s", format.Object(actual, 1))
- }
-
- winnerIndex, _, open := reflect.Select([]reflect.SelectCase{
- {Dir: reflect.SelectRecv, Chan: channelValue},
- {Dir: reflect.SelectDefault},
- })
-
- var closed bool
- if winnerIndex == 0 {
- closed = !open
- } else if winnerIndex == 1 {
- closed = false
- }
-
- return closed, nil
-}
-
-func (matcher *BeClosedMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to be closed")
-}
-
-func (matcher *BeClosedMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to be open")
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/be_element_of_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_element_of_matcher.go
deleted file mode 100644
index 1f9d7a8..0000000
--- a/vendor/github.com/onsi/gomega/matchers/be_element_of_matcher.go
+++ /dev/null
@@ -1,57 +0,0 @@
-// untested sections: 1
-
-package matchers
-
-import (
- "fmt"
- "reflect"
-
- "github.com/onsi/gomega/format"
-)
-
-type BeElementOfMatcher struct {
- Elements []interface{}
-}
-
-func (matcher *BeElementOfMatcher) Match(actual interface{}) (success bool, err error) {
- if reflect.TypeOf(actual) == nil {
- return false, fmt.Errorf("BeElement matcher expects actual to be typed")
- }
-
- length := len(matcher.Elements)
- valueAt := func(i int) interface{} {
- return matcher.Elements[i]
- }
- // Special handling of a single element of type Array or Slice
- if length == 1 && isArrayOrSlice(valueAt(0)) {
- element := valueAt(0)
- value := reflect.ValueOf(element)
- length = value.Len()
- valueAt = func(i int) interface{} {
- return value.Index(i).Interface()
- }
- }
-
- var lastError error
- for i := 0; i < length; i++ {
- matcher := &EqualMatcher{Expected: valueAt(i)}
- success, err := matcher.Match(actual)
- if err != nil {
- lastError = err
- continue
- }
- if success {
- return true, nil
- }
- }
-
- return false, lastError
-}
-
-func (matcher *BeElementOfMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to be an element of", matcher.Elements)
-}
-
-func (matcher *BeElementOfMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "not to be an element of", matcher.Elements)
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/be_empty_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_empty_matcher.go
deleted file mode 100644
index 527c1a1..0000000
--- a/vendor/github.com/onsi/gomega/matchers/be_empty_matcher.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// untested sections: 2
-
-package matchers
-
-import (
- "fmt"
-
- "github.com/onsi/gomega/format"
-)
-
-type BeEmptyMatcher struct {
-}
-
-func (matcher *BeEmptyMatcher) Match(actual interface{}) (success bool, err error) {
- length, ok := lengthOf(actual)
- if !ok {
- return false, fmt.Errorf("BeEmpty matcher expects a string/array/map/channel/slice. Got:\n%s", format.Object(actual, 1))
- }
-
- return length == 0, nil
-}
-
-func (matcher *BeEmptyMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to be empty")
-}
-
-func (matcher *BeEmptyMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "not to be empty")
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.go
deleted file mode 100644
index 263627f..0000000
--- a/vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// untested sections: 2
-
-package matchers
-
-import (
- "fmt"
- "reflect"
-
- "github.com/onsi/gomega/format"
-)
-
-type BeEquivalentToMatcher struct {
- Expected interface{}
-}
-
-func (matcher *BeEquivalentToMatcher) Match(actual interface{}) (success bool, err error) {
- if actual == nil && matcher.Expected == nil {
- return false, fmt.Errorf("Both actual and expected must not be nil.")
- }
-
- convertedActual := actual
-
- if actual != nil && matcher.Expected != nil && reflect.TypeOf(actual).ConvertibleTo(reflect.TypeOf(matcher.Expected)) {
- convertedActual = reflect.ValueOf(actual).Convert(reflect.TypeOf(matcher.Expected)).Interface()
- }
-
- return reflect.DeepEqual(convertedActual, matcher.Expected), nil
-}
-
-func (matcher *BeEquivalentToMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to be equivalent to", matcher.Expected)
-}
-
-func (matcher *BeEquivalentToMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "not to be equivalent to", matcher.Expected)
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/be_false_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_false_matcher.go
deleted file mode 100644
index e326c01..0000000
--- a/vendor/github.com/onsi/gomega/matchers/be_false_matcher.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// untested sections: 2
-
-package matchers
-
-import (
- "fmt"
-
- "github.com/onsi/gomega/format"
-)
-
-type BeFalseMatcher struct {
-}
-
-func (matcher *BeFalseMatcher) Match(actual interface{}) (success bool, err error) {
- if !isBool(actual) {
- return false, fmt.Errorf("Expected a boolean. Got:\n%s", format.Object(actual, 1))
- }
-
- return actual == false, nil
-}
-
-func (matcher *BeFalseMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to be false")
-}
-
-func (matcher *BeFalseMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "not to be false")
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/be_identical_to.go b/vendor/github.com/onsi/gomega/matchers/be_identical_to.go
deleted file mode 100644
index 631ce11..0000000
--- a/vendor/github.com/onsi/gomega/matchers/be_identical_to.go
+++ /dev/null
@@ -1,39 +0,0 @@
-// untested sections: 2
-
-package matchers
-
-import (
- "fmt"
- "runtime"
-
- "github.com/onsi/gomega/format"
-)
-
-type BeIdenticalToMatcher struct {
- Expected interface{}
-}
-
-func (matcher *BeIdenticalToMatcher) Match(actual interface{}) (success bool, matchErr error) {
- if actual == nil && matcher.Expected == nil {
- return false, fmt.Errorf("Refusing to compare <nil> to <nil>.\nBe explicit and use BeNil() instead. This is to avoid mistakes where both sides of an assertion are erroneously uninitialized.")
- }
-
- defer func() {
- if r := recover(); r != nil {
- if _, ok := r.(runtime.Error); ok {
- success = false
- matchErr = nil
- }
- }
- }()
-
- return actual == matcher.Expected, nil
-}
-
-func (matcher *BeIdenticalToMatcher) FailureMessage(actual interface{}) string {
- return format.Message(actual, "to be identical to", matcher.Expected)
-}
-
-func (matcher *BeIdenticalToMatcher) NegatedFailureMessage(actual interface{}) string {
- return format.Message(actual, "not to be identical to", matcher.Expected)
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/be_nil_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_nil_matcher.go
deleted file mode 100644
index 551d99d..0000000
--- a/vendor/github.com/onsi/gomega/matchers/be_nil_matcher.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// untested sections: 2
-
-package matchers
-
-import "github.com/onsi/gomega/format"
-
-type BeNilMatcher struct {
-}
-
-func (matcher *BeNilMatcher) Match(actual interface{}) (success bool, err error) {
- return isNil(actual), nil
-}
-
-func (matcher *BeNilMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to be nil")
-}
-
-func (matcher *BeNilMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "not to be nil")
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go
deleted file mode 100644
index f72591a..0000000
--- a/vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.go
+++ /dev/null
@@ -1,134 +0,0 @@
-// untested sections: 4
-
-package matchers
-
-import (
- "fmt"
- "math"
-
- "github.com/onsi/gomega/format"
-)
-
-type BeNumericallyMatcher struct {
- Comparator string
- CompareTo []interface{}
-}
-
-func (matcher *BeNumericallyMatcher) FailureMessage(actual interface{}) (message string) {
- return matcher.FormatFailureMessage(actual, false)
-}
-
-func (matcher *BeNumericallyMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return matcher.FormatFailureMessage(actual, true)
-}
-
-func (matcher *BeNumericallyMatcher) FormatFailureMessage(actual interface{}, negated bool) (message string) {
- if len(matcher.CompareTo) == 1 {
- message = fmt.Sprintf("to be %s", matcher.Comparator)
- } else {
- message = fmt.Sprintf("to be within %v of %s", matcher.CompareTo[1], matcher.Comparator)
- }
- if negated {
- message = "not " + message
- }
- return format.Message(actual, message, matcher.CompareTo[0])
-}
-
-func (matcher *BeNumericallyMatcher) Match(actual interface{}) (success bool, err error) {
- if len(matcher.CompareTo) == 0 || len(matcher.CompareTo) > 2 {
- return false, fmt.Errorf("BeNumerically requires 1 or 2 CompareTo arguments. Got:\n%s", format.Object(matcher.CompareTo, 1))
- }
- if !isNumber(actual) {
- return false, fmt.Errorf("Expected a number. Got:\n%s", format.Object(actual, 1))
- }
- if !isNumber(matcher.CompareTo[0]) {
- return false, fmt.Errorf("Expected a number. Got:\n%s", format.Object(matcher.CompareTo[0], 1))
- }
- if len(matcher.CompareTo) == 2 && !isNumber(matcher.CompareTo[1]) {
- return false, fmt.Errorf("Expected a number. Got:\n%s", format.Object(matcher.CompareTo[0], 1))
- }
-
- switch matcher.Comparator {
- case "==", "~", ">", ">=", "<", "<=":
- default:
- return false, fmt.Errorf("Unknown comparator: %s", matcher.Comparator)
- }
-
- if isFloat(actual) || isFloat(matcher.CompareTo[0]) {
- var secondOperand float64 = 1e-8
- if len(matcher.CompareTo) == 2 {
- secondOperand = toFloat(matcher.CompareTo[1])
- }
- success = matcher.matchFloats(toFloat(actual), toFloat(matcher.CompareTo[0]), secondOperand)
- } else if isInteger(actual) {
- var secondOperand int64 = 0
- if len(matcher.CompareTo) == 2 {
- secondOperand = toInteger(matcher.CompareTo[1])
- }
- success = matcher.matchIntegers(toInteger(actual), toInteger(matcher.CompareTo[0]), secondOperand)
- } else if isUnsignedInteger(actual) {
- var secondOperand uint64 = 0
- if len(matcher.CompareTo) == 2 {
- secondOperand = toUnsignedInteger(matcher.CompareTo[1])
- }
- success = matcher.matchUnsignedIntegers(toUnsignedInteger(actual), toUnsignedInteger(matcher.CompareTo[0]), secondOperand)
- } else {
- return false, fmt.Errorf("Failed to compare:\n%s\n%s:\n%s", format.Object(actual, 1), matcher.Comparator, format.Object(matcher.CompareTo[0], 1))
- }
-
- return success, nil
-}
-
-func (matcher *BeNumericallyMatcher) matchIntegers(actual, compareTo, threshold int64) (success bool) {
- switch matcher.Comparator {
- case "==", "~":
- diff := actual - compareTo
- return -threshold <= diff && diff <= threshold
- case ">":
- return (actual > compareTo)
- case ">=":
- return (actual >= compareTo)
- case "<":
- return (actual < compareTo)
- case "<=":
- return (actual <= compareTo)
- }
- return false
-}
-
-func (matcher *BeNumericallyMatcher) matchUnsignedIntegers(actual, compareTo, threshold uint64) (success bool) {
- switch matcher.Comparator {
- case "==", "~":
- if actual < compareTo {
- actual, compareTo = compareTo, actual
- }
- return actual-compareTo <= threshold
- case ">":
- return (actual > compareTo)
- case ">=":
- return (actual >= compareTo)
- case "<":
- return (actual < compareTo)
- case "<=":
- return (actual <= compareTo)
- }
- return false
-}
-
-func (matcher *BeNumericallyMatcher) matchFloats(actual, compareTo, threshold float64) (success bool) {
- switch matcher.Comparator {
- case "~":
- return math.Abs(actual-compareTo) <= threshold
- case "==":
- return (actual == compareTo)
- case ">":
- return (actual > compareTo)
- case ">=":
- return (actual >= compareTo)
- case "<":
- return (actual < compareTo)
- case "<=":
- return (actual <= compareTo)
- }
- return false
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/be_sent_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_sent_matcher.go
deleted file mode 100644
index cf582a3..0000000
--- a/vendor/github.com/onsi/gomega/matchers/be_sent_matcher.go
+++ /dev/null
@@ -1,73 +0,0 @@
-// untested sections: 3
-
-package matchers
-
-import (
- "fmt"
- "reflect"
-
- "github.com/onsi/gomega/format"
-)
-
-type BeSentMatcher struct {
- Arg interface{}
- channelClosed bool
-}
-
-func (matcher *BeSentMatcher) Match(actual interface{}) (success bool, err error) {
- if !isChan(actual) {
- return false, fmt.Errorf("BeSent expects a channel. Got:\n%s", format.Object(actual, 1))
- }
-
- channelType := reflect.TypeOf(actual)
- channelValue := reflect.ValueOf(actual)
-
- if channelType.ChanDir() == reflect.RecvDir {
- return false, fmt.Errorf("BeSent matcher cannot be passed a receive-only channel. Got:\n%s", format.Object(actual, 1))
- }
-
- argType := reflect.TypeOf(matcher.Arg)
- assignable := argType.AssignableTo(channelType.Elem())
-
- if !assignable {
- return false, fmt.Errorf("Cannot pass:\n%s to the channel:\n%s\nThe types don't match.", format.Object(matcher.Arg, 1), format.Object(actual, 1))
- }
-
- argValue := reflect.ValueOf(matcher.Arg)
-
- defer func() {
- if e := recover(); e != nil {
- success = false
- err = fmt.Errorf("Cannot send to a closed channel")
- matcher.channelClosed = true
- }
- }()
-
- winnerIndex, _, _ := reflect.Select([]reflect.SelectCase{
- {Dir: reflect.SelectSend, Chan: channelValue, Send: argValue},
- {Dir: reflect.SelectDefault},
- })
-
- var didSend bool
- if winnerIndex == 0 {
- didSend = true
- }
-
- return didSend, nil
-}
-
-func (matcher *BeSentMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to send:", matcher.Arg)
-}
-
-func (matcher *BeSentMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "not to send:", matcher.Arg)
-}
-
-func (matcher *BeSentMatcher) MatchMayChangeInTheFuture(actual interface{}) bool {
- if !isChan(actual) {
- return false
- }
-
- return !matcher.channelClosed
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/be_temporally_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_temporally_matcher.go
deleted file mode 100644
index dec4db0..0000000
--- a/vendor/github.com/onsi/gomega/matchers/be_temporally_matcher.go
+++ /dev/null
@@ -1,68 +0,0 @@
-// untested sections: 3
-
-package matchers
-
-import (
- "fmt"
- "time"
-
- "github.com/onsi/gomega/format"
-)
-
-type BeTemporallyMatcher struct {
- Comparator string
- CompareTo time.Time
- Threshold []time.Duration
-}
-
-func (matcher *BeTemporallyMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, fmt.Sprintf("to be %s", matcher.Comparator), matcher.CompareTo)
-}
-
-func (matcher *BeTemporallyMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, fmt.Sprintf("not to be %s", matcher.Comparator), matcher.CompareTo)
-}
-
-func (matcher *BeTemporallyMatcher) Match(actual interface{}) (bool, error) {
- // predicate to test for time.Time type
- isTime := func(t interface{}) bool {
- _, ok := t.(time.Time)
- return ok
- }
-
- if !isTime(actual) {
- return false, fmt.Errorf("Expected a time.Time. Got:\n%s", format.Object(actual, 1))
- }
-
- switch matcher.Comparator {
- case "==", "~", ">", ">=", "<", "<=":
- default:
- return false, fmt.Errorf("Unknown comparator: %s", matcher.Comparator)
- }
-
- var threshold = time.Millisecond
- if len(matcher.Threshold) == 1 {
- threshold = matcher.Threshold[0]
- }
-
- return matcher.matchTimes(actual.(time.Time), matcher.CompareTo, threshold), nil
-}
-
-func (matcher *BeTemporallyMatcher) matchTimes(actual, compareTo time.Time, threshold time.Duration) (success bool) {
- switch matcher.Comparator {
- case "==":
- return actual.Equal(compareTo)
- case "~":
- diff := actual.Sub(compareTo)
- return -threshold <= diff && diff <= threshold
- case ">":
- return actual.After(compareTo)
- case ">=":
- return !actual.Before(compareTo)
- case "<":
- return actual.Before(compareTo)
- case "<=":
- return !actual.After(compareTo)
- }
- return false
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/be_true_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_true_matcher.go
deleted file mode 100644
index 60bc1e3..0000000
--- a/vendor/github.com/onsi/gomega/matchers/be_true_matcher.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// untested sections: 2
-
-package matchers
-
-import (
- "fmt"
-
- "github.com/onsi/gomega/format"
-)
-
-type BeTrueMatcher struct {
-}
-
-func (matcher *BeTrueMatcher) Match(actual interface{}) (success bool, err error) {
- if !isBool(actual) {
- return false, fmt.Errorf("Expected a boolean. Got:\n%s", format.Object(actual, 1))
- }
-
- return actual.(bool), nil
-}
-
-func (matcher *BeTrueMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to be true")
-}
-
-func (matcher *BeTrueMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "not to be true")
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/be_zero_matcher.go b/vendor/github.com/onsi/gomega/matchers/be_zero_matcher.go
deleted file mode 100644
index 26196f1..0000000
--- a/vendor/github.com/onsi/gomega/matchers/be_zero_matcher.go
+++ /dev/null
@@ -1,28 +0,0 @@
-package matchers
-
-import (
- "reflect"
-
- "github.com/onsi/gomega/format"
-)
-
-type BeZeroMatcher struct {
-}
-
-func (matcher *BeZeroMatcher) Match(actual interface{}) (success bool, err error) {
- if actual == nil {
- return true, nil
- }
- zeroValue := reflect.Zero(reflect.TypeOf(actual)).Interface()
-
- return reflect.DeepEqual(zeroValue, actual), nil
-
-}
-
-func (matcher *BeZeroMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to be zero-valued")
-}
-
-func (matcher *BeZeroMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "not to be zero-valued")
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/consist_of.go b/vendor/github.com/onsi/gomega/matchers/consist_of.go
deleted file mode 100644
index cbbf618..0000000
--- a/vendor/github.com/onsi/gomega/matchers/consist_of.go
+++ /dev/null
@@ -1,82 +0,0 @@
-// untested sections: 3
-
-package matchers
-
-import (
- "fmt"
- "reflect"
-
- "github.com/onsi/gomega/format"
- "github.com/onsi/gomega/matchers/support/goraph/bipartitegraph"
-)
-
-type ConsistOfMatcher struct {
- Elements []interface{}
-}
-
-func (matcher *ConsistOfMatcher) Match(actual interface{}) (success bool, err error) {
- if !isArrayOrSlice(actual) && !isMap(actual) {
- return false, fmt.Errorf("ConsistOf matcher expects an array/slice/map. Got:\n%s", format.Object(actual, 1))
- }
-
- elements := matcher.Elements
- if len(matcher.Elements) == 1 && isArrayOrSlice(matcher.Elements[0]) {
- elements = []interface{}{}
- value := reflect.ValueOf(matcher.Elements[0])
- for i := 0; i < value.Len(); i++ {
- elements = append(elements, value.Index(i).Interface())
- }
- }
-
- matchers := []interface{}{}
- for _, element := range elements {
- matcher, isMatcher := element.(omegaMatcher)
- if !isMatcher {
- matcher = &EqualMatcher{Expected: element}
- }
- matchers = append(matchers, matcher)
- }
-
- values := matcher.valuesOf(actual)
-
- if len(values) != len(matchers) {
- return false, nil
- }
-
- neighbours := func(v, m interface{}) (bool, error) {
- match, err := m.(omegaMatcher).Match(v)
- return match && err == nil, nil
- }
-
- bipartiteGraph, err := bipartitegraph.NewBipartiteGraph(values, matchers, neighbours)
- if err != nil {
- return false, err
- }
-
- return len(bipartiteGraph.LargestMatching()) == len(values), nil
-}
-
-func (matcher *ConsistOfMatcher) valuesOf(actual interface{}) []interface{} {
- value := reflect.ValueOf(actual)
- values := []interface{}{}
- if isMap(actual) {
- keys := value.MapKeys()
- for i := 0; i < value.Len(); i++ {
- values = append(values, value.MapIndex(keys[i]).Interface())
- }
- } else {
- for i := 0; i < value.Len(); i++ {
- values = append(values, value.Index(i).Interface())
- }
- }
-
- return values
-}
-
-func (matcher *ConsistOfMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to consist of", matcher.Elements)
-}
-
-func (matcher *ConsistOfMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "not to consist of", matcher.Elements)
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go b/vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go
deleted file mode 100644
index 8d6c44c..0000000
--- a/vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go
+++ /dev/null
@@ -1,60 +0,0 @@
-// untested sections: 2
-
-package matchers
-
-import (
- "fmt"
- "reflect"
-
- "github.com/onsi/gomega/format"
-)
-
-type ContainElementMatcher struct {
- Element interface{}
-}
-
-func (matcher *ContainElementMatcher) Match(actual interface{}) (success bool, err error) {
- if !isArrayOrSlice(actual) && !isMap(actual) {
- return false, fmt.Errorf("ContainElement matcher expects an array/slice/map. Got:\n%s", format.Object(actual, 1))
- }
-
- elemMatcher, elementIsMatcher := matcher.Element.(omegaMatcher)
- if !elementIsMatcher {
- elemMatcher = &EqualMatcher{Expected: matcher.Element}
- }
-
- value := reflect.ValueOf(actual)
- var valueAt func(int) interface{}
- if isMap(actual) {
- keys := value.MapKeys()
- valueAt = func(i int) interface{} {
- return value.MapIndex(keys[i]).Interface()
- }
- } else {
- valueAt = func(i int) interface{} {
- return value.Index(i).Interface()
- }
- }
-
- var lastError error
- for i := 0; i < value.Len(); i++ {
- success, err := elemMatcher.Match(valueAt(i))
- if err != nil {
- lastError = err
- continue
- }
- if success {
- return true, nil
- }
- }
-
- return false, lastError
-}
-
-func (matcher *ContainElementMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to contain element matching", matcher.Element)
-}
-
-func (matcher *ContainElementMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "not to contain element matching", matcher.Element)
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/contain_substring_matcher.go b/vendor/github.com/onsi/gomega/matchers/contain_substring_matcher.go
deleted file mode 100644
index e725f8c..0000000
--- a/vendor/github.com/onsi/gomega/matchers/contain_substring_matcher.go
+++ /dev/null
@@ -1,40 +0,0 @@
-// untested sections: 2
-
-package matchers
-
-import (
- "fmt"
- "strings"
-
- "github.com/onsi/gomega/format"
-)
-
-type ContainSubstringMatcher struct {
- Substr string
- Args []interface{}
-}
-
-func (matcher *ContainSubstringMatcher) Match(actual interface{}) (success bool, err error) {
- actualString, ok := toString(actual)
- if !ok {
- return false, fmt.Errorf("ContainSubstring matcher requires a string or stringer. Got:\n%s", format.Object(actual, 1))
- }
-
- return strings.Contains(actualString, matcher.stringToMatch()), nil
-}
-
-func (matcher *ContainSubstringMatcher) stringToMatch() string {
- stringToMatch := matcher.Substr
- if len(matcher.Args) > 0 {
- stringToMatch = fmt.Sprintf(matcher.Substr, matcher.Args...)
- }
- return stringToMatch
-}
-
-func (matcher *ContainSubstringMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to contain substring", matcher.stringToMatch())
-}
-
-func (matcher *ContainSubstringMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "not to contain substring", matcher.stringToMatch())
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/equal_matcher.go b/vendor/github.com/onsi/gomega/matchers/equal_matcher.go
deleted file mode 100644
index befb7bd..0000000
--- a/vendor/github.com/onsi/gomega/matchers/equal_matcher.go
+++ /dev/null
@@ -1,42 +0,0 @@
-package matchers
-
-import (
- "bytes"
- "fmt"
- "reflect"
-
- "github.com/onsi/gomega/format"
-)
-
-type EqualMatcher struct {
- Expected interface{}
-}
-
-func (matcher *EqualMatcher) Match(actual interface{}) (success bool, err error) {
- if actual == nil && matcher.Expected == nil {
- return false, fmt.Errorf("Refusing to compare <nil> to <nil>.\nBe explicit and use BeNil() instead. This is to avoid mistakes where both sides of an assertion are erroneously uninitialized.")
- }
- // Shortcut for byte slices.
- // Comparing long byte slices with reflect.DeepEqual is very slow,
- // so use bytes.Equal if actual and expected are both byte slices.
- if actualByteSlice, ok := actual.([]byte); ok {
- if expectedByteSlice, ok := matcher.Expected.([]byte); ok {
- return bytes.Equal(actualByteSlice, expectedByteSlice), nil
- }
- }
- return reflect.DeepEqual(actual, matcher.Expected), nil
-}
-
-func (matcher *EqualMatcher) FailureMessage(actual interface{}) (message string) {
- actualString, actualOK := actual.(string)
- expectedString, expectedOK := matcher.Expected.(string)
- if actualOK && expectedOK {
- return format.MessageWithDiff(actualString, "to equal", expectedString)
- }
-
- return format.Message(actual, "to equal", matcher.Expected)
-}
-
-func (matcher *EqualMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "not to equal", matcher.Expected)
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/have_cap_matcher.go b/vendor/github.com/onsi/gomega/matchers/have_cap_matcher.go
deleted file mode 100644
index 9856752..0000000
--- a/vendor/github.com/onsi/gomega/matchers/have_cap_matcher.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// untested sections: 2
-
-package matchers
-
-import (
- "fmt"
-
- "github.com/onsi/gomega/format"
-)
-
-type HaveCapMatcher struct {
- Count int
-}
-
-func (matcher *HaveCapMatcher) Match(actual interface{}) (success bool, err error) {
- length, ok := capOf(actual)
- if !ok {
- return false, fmt.Errorf("HaveCap matcher expects a array/channel/slice. Got:\n%s", format.Object(actual, 1))
- }
-
- return length == matcher.Count, nil
-}
-
-func (matcher *HaveCapMatcher) FailureMessage(actual interface{}) (message string) {
- return fmt.Sprintf("Expected\n%s\nto have capacity %d", format.Object(actual, 1), matcher.Count)
-}
-
-func (matcher *HaveCapMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return fmt.Sprintf("Expected\n%s\nnot to have capacity %d", format.Object(actual, 1), matcher.Count)
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/have_key_matcher.go b/vendor/github.com/onsi/gomega/matchers/have_key_matcher.go
deleted file mode 100644
index 00cffec..0000000
--- a/vendor/github.com/onsi/gomega/matchers/have_key_matcher.go
+++ /dev/null
@@ -1,56 +0,0 @@
-// untested sections: 6
-
-package matchers
-
-import (
- "fmt"
- "reflect"
-
- "github.com/onsi/gomega/format"
-)
-
-type HaveKeyMatcher struct {
- Key interface{}
-}
-
-func (matcher *HaveKeyMatcher) Match(actual interface{}) (success bool, err error) {
- if !isMap(actual) {
- return false, fmt.Errorf("HaveKey matcher expects a map. Got:%s", format.Object(actual, 1))
- }
-
- keyMatcher, keyIsMatcher := matcher.Key.(omegaMatcher)
- if !keyIsMatcher {
- keyMatcher = &EqualMatcher{Expected: matcher.Key}
- }
-
- keys := reflect.ValueOf(actual).MapKeys()
- for i := 0; i < len(keys); i++ {
- success, err := keyMatcher.Match(keys[i].Interface())
- if err != nil {
- return false, fmt.Errorf("HaveKey's key matcher failed with:\n%s%s", format.Indent, err.Error())
- }
- if success {
- return true, nil
- }
- }
-
- return false, nil
-}
-
-func (matcher *HaveKeyMatcher) FailureMessage(actual interface{}) (message string) {
- switch matcher.Key.(type) {
- case omegaMatcher:
- return format.Message(actual, "to have key matching", matcher.Key)
- default:
- return format.Message(actual, "to have key", matcher.Key)
- }
-}
-
-func (matcher *HaveKeyMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- switch matcher.Key.(type) {
- case omegaMatcher:
- return format.Message(actual, "not to have key matching", matcher.Key)
- default:
- return format.Message(actual, "not to have key", matcher.Key)
- }
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher.go b/vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher.go
deleted file mode 100644
index 4c59168..0000000
--- a/vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher.go
+++ /dev/null
@@ -1,76 +0,0 @@
-// untested sections:10
-
-package matchers
-
-import (
- "fmt"
- "reflect"
-
- "github.com/onsi/gomega/format"
-)
-
-type HaveKeyWithValueMatcher struct {
- Key interface{}
- Value interface{}
-}
-
-func (matcher *HaveKeyWithValueMatcher) Match(actual interface{}) (success bool, err error) {
- if !isMap(actual) {
- return false, fmt.Errorf("HaveKeyWithValue matcher expects a map. Got:%s", format.Object(actual, 1))
- }
-
- keyMatcher, keyIsMatcher := matcher.Key.(omegaMatcher)
- if !keyIsMatcher {
- keyMatcher = &EqualMatcher{Expected: matcher.Key}
- }
-
- valueMatcher, valueIsMatcher := matcher.Value.(omegaMatcher)
- if !valueIsMatcher {
- valueMatcher = &EqualMatcher{Expected: matcher.Value}
- }
-
- keys := reflect.ValueOf(actual).MapKeys()
- for i := 0; i < len(keys); i++ {
- success, err := keyMatcher.Match(keys[i].Interface())
- if err != nil {
- return false, fmt.Errorf("HaveKeyWithValue's key matcher failed with:\n%s%s", format.Indent, err.Error())
- }
- if success {
- actualValue := reflect.ValueOf(actual).MapIndex(keys[i])
- success, err := valueMatcher.Match(actualValue.Interface())
- if err != nil {
- return false, fmt.Errorf("HaveKeyWithValue's value matcher failed with:\n%s%s", format.Indent, err.Error())
- }
- return success, nil
- }
- }
-
- return false, nil
-}
-
-func (matcher *HaveKeyWithValueMatcher) FailureMessage(actual interface{}) (message string) {
- str := "to have {key: value}"
- if _, ok := matcher.Key.(omegaMatcher); ok {
- str += " matching"
- } else if _, ok := matcher.Value.(omegaMatcher); ok {
- str += " matching"
- }
-
- expect := make(map[interface{}]interface{}, 1)
- expect[matcher.Key] = matcher.Value
- return format.Message(actual, str, expect)
-}
-
-func (matcher *HaveKeyWithValueMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- kStr := "not to have key"
- if _, ok := matcher.Key.(omegaMatcher); ok {
- kStr = "not to have key matching"
- }
-
- vStr := "or that key's value not be"
- if _, ok := matcher.Value.(omegaMatcher); ok {
- vStr = "or to have that key's value not matching"
- }
-
- return format.Message(actual, kStr, matcher.Key, vStr, matcher.Value)
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/have_len_matcher.go b/vendor/github.com/onsi/gomega/matchers/have_len_matcher.go
deleted file mode 100644
index ee42761..0000000
--- a/vendor/github.com/onsi/gomega/matchers/have_len_matcher.go
+++ /dev/null
@@ -1,28 +0,0 @@
-package matchers
-
-import (
- "fmt"
-
- "github.com/onsi/gomega/format"
-)
-
-type HaveLenMatcher struct {
- Count int
-}
-
-func (matcher *HaveLenMatcher) Match(actual interface{}) (success bool, err error) {
- length, ok := lengthOf(actual)
- if !ok {
- return false, fmt.Errorf("HaveLen matcher expects a string/array/map/channel/slice. Got:\n%s", format.Object(actual, 1))
- }
-
- return length == matcher.Count, nil
-}
-
-func (matcher *HaveLenMatcher) FailureMessage(actual interface{}) (message string) {
- return fmt.Sprintf("Expected\n%s\nto have length %d", format.Object(actual, 1), matcher.Count)
-}
-
-func (matcher *HaveLenMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return fmt.Sprintf("Expected\n%s\nnot to have length %d", format.Object(actual, 1), matcher.Count)
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/have_occurred_matcher.go b/vendor/github.com/onsi/gomega/matchers/have_occurred_matcher.go
deleted file mode 100644
index 5bcfdd2..0000000
--- a/vendor/github.com/onsi/gomega/matchers/have_occurred_matcher.go
+++ /dev/null
@@ -1,35 +0,0 @@
-// untested sections: 2
-
-package matchers
-
-import (
- "fmt"
-
- "github.com/onsi/gomega/format"
-)
-
-type HaveOccurredMatcher struct {
-}
-
-func (matcher *HaveOccurredMatcher) Match(actual interface{}) (success bool, err error) {
- // is purely nil?
- if actual == nil {
- return false, nil
- }
-
- // must be an 'error' type
- if !isError(actual) {
- return false, fmt.Errorf("Expected an error-type. Got:\n%s", format.Object(actual, 1))
- }
-
- // must be non-nil (or a pointer to a non-nil)
- return !isNil(actual), nil
-}
-
-func (matcher *HaveOccurredMatcher) FailureMessage(actual interface{}) (message string) {
- return fmt.Sprintf("Expected an error to have occurred. Got:\n%s", format.Object(actual, 1))
-}
-
-func (matcher *HaveOccurredMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return fmt.Sprintf("Unexpected error:\n%s\n%s\n%s", format.Object(actual, 1), format.IndentString(actual.(error).Error(), 1), "occurred")
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/have_prefix_matcher.go b/vendor/github.com/onsi/gomega/matchers/have_prefix_matcher.go
deleted file mode 100644
index 1d8e802..0000000
--- a/vendor/github.com/onsi/gomega/matchers/have_prefix_matcher.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package matchers
-
-import (
- "fmt"
-
- "github.com/onsi/gomega/format"
-)
-
-type HavePrefixMatcher struct {
- Prefix string
- Args []interface{}
-}
-
-func (matcher *HavePrefixMatcher) Match(actual interface{}) (success bool, err error) {
- actualString, ok := toString(actual)
- if !ok {
- return false, fmt.Errorf("HavePrefix matcher requires a string or stringer. Got:\n%s", format.Object(actual, 1))
- }
- prefix := matcher.prefix()
- return len(actualString) >= len(prefix) && actualString[0:len(prefix)] == prefix, nil
-}
-
-func (matcher *HavePrefixMatcher) prefix() string {
- if len(matcher.Args) > 0 {
- return fmt.Sprintf(matcher.Prefix, matcher.Args...)
- }
- return matcher.Prefix
-}
-
-func (matcher *HavePrefixMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to have prefix", matcher.prefix())
-}
-
-func (matcher *HavePrefixMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "not to have prefix", matcher.prefix())
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/have_suffix_matcher.go b/vendor/github.com/onsi/gomega/matchers/have_suffix_matcher.go
deleted file mode 100644
index 40a3526..0000000
--- a/vendor/github.com/onsi/gomega/matchers/have_suffix_matcher.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package matchers
-
-import (
- "fmt"
-
- "github.com/onsi/gomega/format"
-)
-
-type HaveSuffixMatcher struct {
- Suffix string
- Args []interface{}
-}
-
-func (matcher *HaveSuffixMatcher) Match(actual interface{}) (success bool, err error) {
- actualString, ok := toString(actual)
- if !ok {
- return false, fmt.Errorf("HaveSuffix matcher requires a string or stringer. Got:\n%s", format.Object(actual, 1))
- }
- suffix := matcher.suffix()
- return len(actualString) >= len(suffix) && actualString[len(actualString)-len(suffix):] == suffix, nil
-}
-
-func (matcher *HaveSuffixMatcher) suffix() string {
- if len(matcher.Args) > 0 {
- return fmt.Sprintf(matcher.Suffix, matcher.Args...)
- }
- return matcher.Suffix
-}
-
-func (matcher *HaveSuffixMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to have suffix", matcher.suffix())
-}
-
-func (matcher *HaveSuffixMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "not to have suffix", matcher.suffix())
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/match_error_matcher.go b/vendor/github.com/onsi/gomega/matchers/match_error_matcher.go
deleted file mode 100644
index 07499ac..0000000
--- a/vendor/github.com/onsi/gomega/matchers/match_error_matcher.go
+++ /dev/null
@@ -1,51 +0,0 @@
-package matchers
-
-import (
- "fmt"
- "reflect"
-
- "github.com/onsi/gomega/format"
-)
-
-type MatchErrorMatcher struct {
- Expected interface{}
-}
-
-func (matcher *MatchErrorMatcher) Match(actual interface{}) (success bool, err error) {
- if isNil(actual) {
- return false, fmt.Errorf("Expected an error, got nil")
- }
-
- if !isError(actual) {
- return false, fmt.Errorf("Expected an error. Got:\n%s", format.Object(actual, 1))
- }
-
- actualErr := actual.(error)
-
- if isError(matcher.Expected) {
- return reflect.DeepEqual(actualErr, matcher.Expected), nil
- }
-
- if isString(matcher.Expected) {
- return actualErr.Error() == matcher.Expected, nil
- }
-
- var subMatcher omegaMatcher
- var hasSubMatcher bool
- if matcher.Expected != nil {
- subMatcher, hasSubMatcher = (matcher.Expected).(omegaMatcher)
- if hasSubMatcher {
- return subMatcher.Match(actualErr.Error())
- }
- }
-
- return false, fmt.Errorf("MatchError must be passed an error, string, or Matcher that can match on strings. Got:\n%s", format.Object(matcher.Expected, 1))
-}
-
-func (matcher *MatchErrorMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to match error", matcher.Expected)
-}
-
-func (matcher *MatchErrorMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "not to match error", matcher.Expected)
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/match_json_matcher.go b/vendor/github.com/onsi/gomega/matchers/match_json_matcher.go
deleted file mode 100644
index f962f13..0000000
--- a/vendor/github.com/onsi/gomega/matchers/match_json_matcher.go
+++ /dev/null
@@ -1,65 +0,0 @@
-package matchers
-
-import (
- "bytes"
- "encoding/json"
- "fmt"
-
- "github.com/onsi/gomega/format"
-)
-
-type MatchJSONMatcher struct {
- JSONToMatch interface{}
- firstFailurePath []interface{}
-}
-
-func (matcher *MatchJSONMatcher) Match(actual interface{}) (success bool, err error) {
- actualString, expectedString, err := matcher.prettyPrint(actual)
- if err != nil {
- return false, err
- }
-
- var aval interface{}
- var eval interface{}
-
- // this is guarded by prettyPrint
- json.Unmarshal([]byte(actualString), &aval)
- json.Unmarshal([]byte(expectedString), &eval)
- var equal bool
- equal, matcher.firstFailurePath = deepEqual(aval, eval)
- return equal, nil
-}
-
-func (matcher *MatchJSONMatcher) FailureMessage(actual interface{}) (message string) {
- actualString, expectedString, _ := matcher.prettyPrint(actual)
- return formattedMessage(format.Message(actualString, "to match JSON of", expectedString), matcher.firstFailurePath)
-}
-
-func (matcher *MatchJSONMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- actualString, expectedString, _ := matcher.prettyPrint(actual)
- return formattedMessage(format.Message(actualString, "not to match JSON of", expectedString), matcher.firstFailurePath)
-}
-
-func (matcher *MatchJSONMatcher) prettyPrint(actual interface{}) (actualFormatted, expectedFormatted string, err error) {
- actualString, ok := toString(actual)
- if !ok {
- return "", "", fmt.Errorf("MatchJSONMatcher matcher requires a string, stringer, or []byte. Got actual:\n%s", format.Object(actual, 1))
- }
- expectedString, ok := toString(matcher.JSONToMatch)
- if !ok {
- return "", "", fmt.Errorf("MatchJSONMatcher matcher requires a string, stringer, or []byte. Got expected:\n%s", format.Object(matcher.JSONToMatch, 1))
- }
-
- abuf := new(bytes.Buffer)
- ebuf := new(bytes.Buffer)
-
- if err := json.Indent(abuf, []byte(actualString), "", " "); err != nil {
- return "", "", fmt.Errorf("Actual '%s' should be valid JSON, but it is not.\nUnderlying error:%s", actualString, err)
- }
-
- if err := json.Indent(ebuf, []byte(expectedString), "", " "); err != nil {
- return "", "", fmt.Errorf("Expected '%s' should be valid JSON, but it is not.\nUnderlying error:%s", expectedString, err)
- }
-
- return abuf.String(), ebuf.String(), nil
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/match_regexp_matcher.go b/vendor/github.com/onsi/gomega/matchers/match_regexp_matcher.go
deleted file mode 100644
index adac5db..0000000
--- a/vendor/github.com/onsi/gomega/matchers/match_regexp_matcher.go
+++ /dev/null
@@ -1,43 +0,0 @@
-package matchers
-
-import (
- "fmt"
- "regexp"
-
- "github.com/onsi/gomega/format"
-)
-
-type MatchRegexpMatcher struct {
- Regexp string
- Args []interface{}
-}
-
-func (matcher *MatchRegexpMatcher) Match(actual interface{}) (success bool, err error) {
- actualString, ok := toString(actual)
- if !ok {
- return false, fmt.Errorf("RegExp matcher requires a string or stringer.\nGot:%s", format.Object(actual, 1))
- }
-
- match, err := regexp.Match(matcher.regexp(), []byte(actualString))
- if err != nil {
- return false, fmt.Errorf("RegExp match failed to compile with error:\n\t%s", err.Error())
- }
-
- return match, nil
-}
-
-func (matcher *MatchRegexpMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to match regular expression", matcher.regexp())
-}
-
-func (matcher *MatchRegexpMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "not to match regular expression", matcher.regexp())
-}
-
-func (matcher *MatchRegexpMatcher) regexp() string {
- re := matcher.Regexp
- if len(matcher.Args) > 0 {
- re = fmt.Sprintf(matcher.Regexp, matcher.Args...)
- }
- return re
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/match_xml_matcher.go b/vendor/github.com/onsi/gomega/matchers/match_xml_matcher.go
deleted file mode 100644
index 5c815f5..0000000
--- a/vendor/github.com/onsi/gomega/matchers/match_xml_matcher.go
+++ /dev/null
@@ -1,134 +0,0 @@
-package matchers
-
-import (
- "bytes"
- "encoding/xml"
- "errors"
- "fmt"
- "io"
- "reflect"
- "sort"
- "strings"
-
- "github.com/onsi/gomega/format"
- "golang.org/x/net/html/charset"
-)
-
-type MatchXMLMatcher struct {
- XMLToMatch interface{}
-}
-
-func (matcher *MatchXMLMatcher) Match(actual interface{}) (success bool, err error) {
- actualString, expectedString, err := matcher.formattedPrint(actual)
- if err != nil {
- return false, err
- }
-
- aval, err := parseXmlContent(actualString)
- if err != nil {
- return false, fmt.Errorf("Actual '%s' should be valid XML, but it is not.\nUnderlying error:%s", actualString, err)
- }
-
- eval, err := parseXmlContent(expectedString)
- if err != nil {
- return false, fmt.Errorf("Expected '%s' should be valid XML, but it is not.\nUnderlying error:%s", expectedString, err)
- }
-
- return reflect.DeepEqual(aval, eval), nil
-}
-
-func (matcher *MatchXMLMatcher) FailureMessage(actual interface{}) (message string) {
- actualString, expectedString, _ := matcher.formattedPrint(actual)
- return fmt.Sprintf("Expected\n%s\nto match XML of\n%s", actualString, expectedString)
-}
-
-func (matcher *MatchXMLMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- actualString, expectedString, _ := matcher.formattedPrint(actual)
- return fmt.Sprintf("Expected\n%s\nnot to match XML of\n%s", actualString, expectedString)
-}
-
-func (matcher *MatchXMLMatcher) formattedPrint(actual interface{}) (actualString, expectedString string, err error) {
- var ok bool
- actualString, ok = toString(actual)
- if !ok {
- return "", "", fmt.Errorf("MatchXMLMatcher matcher requires a string, stringer, or []byte. Got actual:\n%s", format.Object(actual, 1))
- }
- expectedString, ok = toString(matcher.XMLToMatch)
- if !ok {
- return "", "", fmt.Errorf("MatchXMLMatcher matcher requires a string, stringer, or []byte. Got expected:\n%s", format.Object(matcher.XMLToMatch, 1))
- }
- return actualString, expectedString, nil
-}
-
-func parseXmlContent(content string) (*xmlNode, error) {
- allNodes := []*xmlNode{}
-
- dec := newXmlDecoder(strings.NewReader(content))
- for {
- tok, err := dec.Token()
- if err != nil {
- if err == io.EOF {
- break
- }
- return nil, fmt.Errorf("failed to decode next token: %v", err) // untested section
- }
-
- lastNodeIndex := len(allNodes) - 1
- var lastNode *xmlNode
- if len(allNodes) > 0 {
- lastNode = allNodes[lastNodeIndex]
- } else {
- lastNode = &xmlNode{}
- }
-
- switch tok := tok.(type) {
- case xml.StartElement:
- attrs := attributesSlice(tok.Attr)
- sort.Sort(attrs)
- allNodes = append(allNodes, &xmlNode{XMLName: tok.Name, XMLAttr: tok.Attr})
- case xml.EndElement:
- if len(allNodes) > 1 {
- allNodes[lastNodeIndex-1].Nodes = append(allNodes[lastNodeIndex-1].Nodes, lastNode)
- allNodes = allNodes[:lastNodeIndex]
- }
- case xml.CharData:
- lastNode.Content = append(lastNode.Content, tok.Copy()...)
- case xml.Comment:
- lastNode.Comments = append(lastNode.Comments, tok.Copy()) // untested section
- case xml.ProcInst:
- lastNode.ProcInsts = append(lastNode.ProcInsts, tok.Copy())
- }
- }
-
- if len(allNodes) == 0 {
- return nil, errors.New("found no nodes")
- }
- firstNode := allNodes[0]
- trimParentNodesContentSpaces(firstNode)
-
- return firstNode, nil
-}
-
-func newXmlDecoder(reader io.Reader) *xml.Decoder {
- dec := xml.NewDecoder(reader)
- dec.CharsetReader = charset.NewReaderLabel
- return dec
-}
-
-func trimParentNodesContentSpaces(node *xmlNode) {
- if len(node.Nodes) > 0 {
- node.Content = bytes.TrimSpace(node.Content)
- for _, childNode := range node.Nodes {
- trimParentNodesContentSpaces(childNode)
- }
- }
-}
-
-type xmlNode struct {
- XMLName xml.Name
- Comments []xml.Comment
- ProcInsts []xml.ProcInst
- XMLAttr []xml.Attr
- Content []byte
- Nodes []*xmlNode
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.go b/vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.go
deleted file mode 100644
index 0c83c2b..0000000
--- a/vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.go
+++ /dev/null
@@ -1,76 +0,0 @@
-package matchers
-
-import (
- "fmt"
- "strings"
-
- "github.com/onsi/gomega/format"
- "gopkg.in/yaml.v2"
-)
-
-type MatchYAMLMatcher struct {
- YAMLToMatch interface{}
- firstFailurePath []interface{}
-}
-
-func (matcher *MatchYAMLMatcher) Match(actual interface{}) (success bool, err error) {
- actualString, expectedString, err := matcher.toStrings(actual)
- if err != nil {
- return false, err
- }
-
- var aval interface{}
- var eval interface{}
-
- if err := yaml.Unmarshal([]byte(actualString), &aval); err != nil {
- return false, fmt.Errorf("Actual '%s' should be valid YAML, but it is not.\nUnderlying error:%s", actualString, err)
- }
- if err := yaml.Unmarshal([]byte(expectedString), &eval); err != nil {
- return false, fmt.Errorf("Expected '%s' should be valid YAML, but it is not.\nUnderlying error:%s", expectedString, err)
- }
-
- var equal bool
- equal, matcher.firstFailurePath = deepEqual(aval, eval)
- return equal, nil
-}
-
-func (matcher *MatchYAMLMatcher) FailureMessage(actual interface{}) (message string) {
- actualString, expectedString, _ := matcher.toNormalisedStrings(actual)
- return formattedMessage(format.Message(actualString, "to match YAML of", expectedString), matcher.firstFailurePath)
-}
-
-func (matcher *MatchYAMLMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- actualString, expectedString, _ := matcher.toNormalisedStrings(actual)
- return formattedMessage(format.Message(actualString, "not to match YAML of", expectedString), matcher.firstFailurePath)
-}
-
-func (matcher *MatchYAMLMatcher) toNormalisedStrings(actual interface{}) (actualFormatted, expectedFormatted string, err error) {
- actualString, expectedString, err := matcher.toStrings(actual)
- return normalise(actualString), normalise(expectedString), err
-}
-
-func normalise(input string) string {
- var val interface{}
- err := yaml.Unmarshal([]byte(input), &val)
- if err != nil {
- panic(err) // unreachable since Match already calls Unmarshal
- }
- output, err := yaml.Marshal(val)
- if err != nil {
- panic(err) // untested section, unreachable since we Unmarshal above
- }
- return strings.TrimSpace(string(output))
-}
-
-func (matcher *MatchYAMLMatcher) toStrings(actual interface{}) (actualFormatted, expectedFormatted string, err error) {
- actualString, ok := toString(actual)
- if !ok {
- return "", "", fmt.Errorf("MatchYAMLMatcher matcher requires a string, stringer, or []byte. Got actual:\n%s", format.Object(actual, 1))
- }
- expectedString, ok := toString(matcher.YAMLToMatch)
- if !ok {
- return "", "", fmt.Errorf("MatchYAMLMatcher matcher requires a string, stringer, or []byte. Got expected:\n%s", format.Object(matcher.YAMLToMatch, 1))
- }
-
- return actualString, expectedString, nil
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/not.go b/vendor/github.com/onsi/gomega/matchers/not.go
deleted file mode 100644
index 2c91670..0000000
--- a/vendor/github.com/onsi/gomega/matchers/not.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package matchers
-
-import (
- "github.com/onsi/gomega/internal/oraclematcher"
- "github.com/onsi/gomega/types"
-)
-
-type NotMatcher struct {
- Matcher types.GomegaMatcher
-}
-
-func (m *NotMatcher) Match(actual interface{}) (bool, error) {
- success, err := m.Matcher.Match(actual)
- if err != nil {
- return false, err
- }
- return !success, nil
-}
-
-func (m *NotMatcher) FailureMessage(actual interface{}) (message string) {
- return m.Matcher.NegatedFailureMessage(actual) // works beautifully
-}
-
-func (m *NotMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return m.Matcher.FailureMessage(actual) // works beautifully
-}
-
-func (m *NotMatcher) MatchMayChangeInTheFuture(actual interface{}) bool {
- return oraclematcher.MatchMayChangeInTheFuture(m.Matcher, actual) // just return m.Matcher's value
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/or.go b/vendor/github.com/onsi/gomega/matchers/or.go
deleted file mode 100644
index 3bf7998..0000000
--- a/vendor/github.com/onsi/gomega/matchers/or.go
+++ /dev/null
@@ -1,67 +0,0 @@
-package matchers
-
-import (
- "fmt"
-
- "github.com/onsi/gomega/format"
- "github.com/onsi/gomega/internal/oraclematcher"
- "github.com/onsi/gomega/types"
-)
-
-type OrMatcher struct {
- Matchers []types.GomegaMatcher
-
- // state
- firstSuccessfulMatcher types.GomegaMatcher
-}
-
-func (m *OrMatcher) Match(actual interface{}) (success bool, err error) {
- m.firstSuccessfulMatcher = nil
- for _, matcher := range m.Matchers {
- success, err := matcher.Match(actual)
- if err != nil {
- return false, err
- }
- if success {
- m.firstSuccessfulMatcher = matcher
- return true, nil
- }
- }
- return false, nil
-}
-
-func (m *OrMatcher) FailureMessage(actual interface{}) (message string) {
- // not the most beautiful list of matchers, but not bad either...
- return format.Message(actual, fmt.Sprintf("To satisfy at least one of these matchers: %s", m.Matchers))
-}
-
-func (m *OrMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return m.firstSuccessfulMatcher.NegatedFailureMessage(actual)
-}
-
-func (m *OrMatcher) MatchMayChangeInTheFuture(actual interface{}) bool {
- /*
- Example with 3 matchers: A, B, C
-
- Match evaluates them: F, T, <?> => T
- So match is currently T, what should MatchMayChangeInTheFuture() return?
- Seems like it only depends on B, since currently B MUST change to allow the result to become F
-
- Match eval: F, F, F => F
- So match is currently F, what should MatchMayChangeInTheFuture() return?
- Seems to depend on ANY of them being able to change to T.
- */
-
- if m.firstSuccessfulMatcher != nil {
- // one of the matchers succeeded.. it must be able to change in order to affect the result
- return oraclematcher.MatchMayChangeInTheFuture(m.firstSuccessfulMatcher, actual)
- } else {
- // so all matchers failed.. Any one of them changing would change the result.
- for _, matcher := range m.Matchers {
- if oraclematcher.MatchMayChangeInTheFuture(matcher, actual) {
- return true
- }
- }
- return false // none of were going to change
- }
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/panic_matcher.go b/vendor/github.com/onsi/gomega/matchers/panic_matcher.go
deleted file mode 100644
index 640f4db..0000000
--- a/vendor/github.com/onsi/gomega/matchers/panic_matcher.go
+++ /dev/null
@@ -1,46 +0,0 @@
-package matchers
-
-import (
- "fmt"
- "reflect"
-
- "github.com/onsi/gomega/format"
-)
-
-type PanicMatcher struct {
- object interface{}
-}
-
-func (matcher *PanicMatcher) Match(actual interface{}) (success bool, err error) {
- if actual == nil {
- return false, fmt.Errorf("PanicMatcher expects a non-nil actual.")
- }
-
- actualType := reflect.TypeOf(actual)
- if actualType.Kind() != reflect.Func {
- return false, fmt.Errorf("PanicMatcher expects a function. Got:\n%s", format.Object(actual, 1))
- }
- if !(actualType.NumIn() == 0 && actualType.NumOut() == 0) {
- return false, fmt.Errorf("PanicMatcher expects a function with no arguments and no return value. Got:\n%s", format.Object(actual, 1))
- }
-
- success = false
- defer func() {
- if e := recover(); e != nil {
- matcher.object = e
- success = true
- }
- }()
-
- reflect.ValueOf(actual).Call([]reflect.Value{})
-
- return
-}
-
-func (matcher *PanicMatcher) FailureMessage(actual interface{}) (message string) {
- return format.Message(actual, "to panic")
-}
-
-func (matcher *PanicMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return format.Message(actual, fmt.Sprintf("not to panic, but panicked with\n%s", format.Object(matcher.object, 1)))
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/receive_matcher.go b/vendor/github.com/onsi/gomega/matchers/receive_matcher.go
deleted file mode 100644
index 1936a2b..0000000
--- a/vendor/github.com/onsi/gomega/matchers/receive_matcher.go
+++ /dev/null
@@ -1,130 +0,0 @@
-// untested sections: 3
-
-package matchers
-
-import (
- "fmt"
- "reflect"
-
- "github.com/onsi/gomega/format"
-)
-
-type ReceiveMatcher struct {
- Arg interface{}
- receivedValue reflect.Value
- channelClosed bool
-}
-
-func (matcher *ReceiveMatcher) Match(actual interface{}) (success bool, err error) {
- if !isChan(actual) {
- return false, fmt.Errorf("ReceiveMatcher expects a channel. Got:\n%s", format.Object(actual, 1))
- }
-
- channelType := reflect.TypeOf(actual)
- channelValue := reflect.ValueOf(actual)
-
- if channelType.ChanDir() == reflect.SendDir {
- return false, fmt.Errorf("ReceiveMatcher matcher cannot be passed a send-only channel. Got:\n%s", format.Object(actual, 1))
- }
-
- var subMatcher omegaMatcher
- var hasSubMatcher bool
-
- if matcher.Arg != nil {
- subMatcher, hasSubMatcher = (matcher.Arg).(omegaMatcher)
- if !hasSubMatcher {
- argType := reflect.TypeOf(matcher.Arg)
- if argType.Kind() != reflect.Ptr {
- return false, fmt.Errorf("Cannot assign a value from the channel:\n%s\nTo:\n%s\nYou need to pass a pointer!", format.Object(actual, 1), format.Object(matcher.Arg, 1))
- }
- }
- }
-
- winnerIndex, value, open := reflect.Select([]reflect.SelectCase{
- {Dir: reflect.SelectRecv, Chan: channelValue},
- {Dir: reflect.SelectDefault},
- })
-
- var closed bool
- var didReceive bool
- if winnerIndex == 0 {
- closed = !open
- didReceive = open
- }
- matcher.channelClosed = closed
-
- if closed {
- return false, nil
- }
-
- if hasSubMatcher {
- if didReceive {
- matcher.receivedValue = value
- return subMatcher.Match(matcher.receivedValue.Interface())
- }
- return false, nil
- }
-
- if didReceive {
- if matcher.Arg != nil {
- outValue := reflect.ValueOf(matcher.Arg)
-
- if value.Type().AssignableTo(outValue.Elem().Type()) {
- outValue.Elem().Set(value)
- return true, nil
- }
- if value.Type().Kind() == reflect.Interface && value.Elem().Type().AssignableTo(outValue.Elem().Type()) {
- outValue.Elem().Set(value.Elem())
- return true, nil
- } else {
- return false, fmt.Errorf("Cannot assign a value from the channel:\n%s\nType:\n%s\nTo:\n%s", format.Object(actual, 1), format.Object(value.Interface(), 1), format.Object(matcher.Arg, 1))
- }
-
- }
-
- return true, nil
- }
- return false, nil
-}
-
-func (matcher *ReceiveMatcher) FailureMessage(actual interface{}) (message string) {
- subMatcher, hasSubMatcher := (matcher.Arg).(omegaMatcher)
-
- closedAddendum := ""
- if matcher.channelClosed {
- closedAddendum = " The channel is closed."
- }
-
- if hasSubMatcher {
- if matcher.receivedValue.IsValid() {
- return subMatcher.FailureMessage(matcher.receivedValue.Interface())
- }
- return "When passed a matcher, ReceiveMatcher's channel *must* receive something."
- }
- return format.Message(actual, "to receive something."+closedAddendum)
-}
-
-func (matcher *ReceiveMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- subMatcher, hasSubMatcher := (matcher.Arg).(omegaMatcher)
-
- closedAddendum := ""
- if matcher.channelClosed {
- closedAddendum = " The channel is closed."
- }
-
- if hasSubMatcher {
- if matcher.receivedValue.IsValid() {
- return subMatcher.NegatedFailureMessage(matcher.receivedValue.Interface())
- }
- return "When passed a matcher, ReceiveMatcher's channel *must* receive something."
- }
- return format.Message(actual, "not to receive anything."+closedAddendum)
-}
-
-func (matcher *ReceiveMatcher) MatchMayChangeInTheFuture(actual interface{}) bool {
- if !isChan(actual) {
- return false
- }
-
- return !matcher.channelClosed
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/semi_structured_data_support.go b/vendor/github.com/onsi/gomega/matchers/semi_structured_data_support.go
deleted file mode 100644
index 1369c1e..0000000
--- a/vendor/github.com/onsi/gomega/matchers/semi_structured_data_support.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// untested sections: 5
-
-package matchers
-
-import (
- "fmt"
- "reflect"
- "strings"
-)
-
-func formattedMessage(comparisonMessage string, failurePath []interface{}) string {
- var diffMessage string
- if len(failurePath) == 0 {
- diffMessage = ""
- } else {
- diffMessage = fmt.Sprintf("\n\nfirst mismatched key: %s", formattedFailurePath(failurePath))
- }
- return fmt.Sprintf("%s%s", comparisonMessage, diffMessage)
-}
-
-func formattedFailurePath(failurePath []interface{}) string {
- formattedPaths := []string{}
- for i := len(failurePath) - 1; i >= 0; i-- {
- switch p := failurePath[i].(type) {
- case int:
- formattedPaths = append(formattedPaths, fmt.Sprintf(`[%d]`, p))
- default:
- if i != len(failurePath)-1 {
- formattedPaths = append(formattedPaths, ".")
- }
- formattedPaths = append(formattedPaths, fmt.Sprintf(`"%s"`, p))
- }
- }
- return strings.Join(formattedPaths, "")
-}
-
-func deepEqual(a interface{}, b interface{}) (bool, []interface{}) {
- var errorPath []interface{}
- if reflect.TypeOf(a) != reflect.TypeOf(b) {
- return false, errorPath
- }
-
- switch a.(type) {
- case []interface{}:
- if len(a.([]interface{})) != len(b.([]interface{})) {
- return false, errorPath
- }
-
- for i, v := range a.([]interface{}) {
- elementEqual, keyPath := deepEqual(v, b.([]interface{})[i])
- if !elementEqual {
- return false, append(keyPath, i)
- }
- }
- return true, errorPath
-
- case map[interface{}]interface{}:
- if len(a.(map[interface{}]interface{})) != len(b.(map[interface{}]interface{})) {
- return false, errorPath
- }
-
- for k, v1 := range a.(map[interface{}]interface{}) {
- v2, ok := b.(map[interface{}]interface{})[k]
- if !ok {
- return false, errorPath
- }
- elementEqual, keyPath := deepEqual(v1, v2)
- if !elementEqual {
- return false, append(keyPath, k)
- }
- }
- return true, errorPath
-
- case map[string]interface{}:
- if len(a.(map[string]interface{})) != len(b.(map[string]interface{})) {
- return false, errorPath
- }
-
- for k, v1 := range a.(map[string]interface{}) {
- v2, ok := b.(map[string]interface{})[k]
- if !ok {
- return false, errorPath
- }
- elementEqual, keyPath := deepEqual(v1, v2)
- if !elementEqual {
- return false, append(keyPath, k)
- }
- }
- return true, errorPath
-
- default:
- return a == b, errorPath
- }
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/succeed_matcher.go b/vendor/github.com/onsi/gomega/matchers/succeed_matcher.go
deleted file mode 100644
index 721ed55..0000000
--- a/vendor/github.com/onsi/gomega/matchers/succeed_matcher.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package matchers
-
-import (
- "fmt"
-
- "github.com/onsi/gomega/format"
-)
-
-type SucceedMatcher struct {
-}
-
-func (matcher *SucceedMatcher) Match(actual interface{}) (success bool, err error) {
- // is purely nil?
- if actual == nil {
- return true, nil
- }
-
- // must be an 'error' type
- if !isError(actual) {
- return false, fmt.Errorf("Expected an error-type. Got:\n%s", format.Object(actual, 1))
- }
-
- // must be nil (or a pointer to a nil)
- return isNil(actual), nil
-}
-
-func (matcher *SucceedMatcher) FailureMessage(actual interface{}) (message string) {
- return fmt.Sprintf("Expected success, but got an error:\n%s\n%s", format.Object(actual, 1), format.IndentString(actual.(error).Error(), 1))
-}
-
-func (matcher *SucceedMatcher) NegatedFailureMessage(actual interface{}) (message string) {
- return "Expected failure, but got no error."
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.go b/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.go
deleted file mode 100644
index 108f285..0000000
--- a/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package bipartitegraph
-
-import "fmt"
-
-import . "github.com/onsi/gomega/matchers/support/goraph/node"
-import . "github.com/onsi/gomega/matchers/support/goraph/edge"
-
-type BipartiteGraph struct {
- Left NodeOrderedSet
- Right NodeOrderedSet
- Edges EdgeSet
-}
-
-func NewBipartiteGraph(leftValues, rightValues []interface{}, neighbours func(interface{}, interface{}) (bool, error)) (*BipartiteGraph, error) {
- left := NodeOrderedSet{}
- for i := range leftValues {
- left = append(left, Node{Id: i})
- }
-
- right := NodeOrderedSet{}
- for j := range rightValues {
- right = append(right, Node{Id: j + len(left)})
- }
-
- edges := EdgeSet{}
- for i, leftValue := range leftValues {
- for j, rightValue := range rightValues {
- neighbours, err := neighbours(leftValue, rightValue)
- if err != nil {
- return nil, fmt.Errorf("error determining adjacency for %v and %v: %s", leftValue, rightValue, err.Error())
- }
-
- if neighbours {
- edges = append(edges, Edge{Node1: left[i], Node2: right[j]})
- }
- }
- }
-
- return &BipartiteGraph{left, right, edges}, nil
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go b/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go
deleted file mode 100644
index 8181f43..0000000
--- a/vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.go
+++ /dev/null
@@ -1,159 +0,0 @@
-package bipartitegraph
-
-import . "github.com/onsi/gomega/matchers/support/goraph/node"
-import . "github.com/onsi/gomega/matchers/support/goraph/edge"
-import "github.com/onsi/gomega/matchers/support/goraph/util"
-
-func (bg *BipartiteGraph) LargestMatching() (matching EdgeSet) {
- paths := bg.maximalDisjointSLAPCollection(matching)
-
- for len(paths) > 0 {
- for _, path := range paths {
- matching = matching.SymmetricDifference(path)
- }
- paths = bg.maximalDisjointSLAPCollection(matching)
- }
-
- return
-}
-
-func (bg *BipartiteGraph) maximalDisjointSLAPCollection(matching EdgeSet) (result []EdgeSet) {
- guideLayers := bg.createSLAPGuideLayers(matching)
- if len(guideLayers) == 0 {
- return
- }
-
- used := make(map[Node]bool)
-
- for _, u := range guideLayers[len(guideLayers)-1] {
- slap, found := bg.findDisjointSLAP(u, matching, guideLayers, used)
- if found {
- for _, edge := range slap {
- used[edge.Node1] = true
- used[edge.Node2] = true
- }
- result = append(result, slap)
- }
- }
-
- return
-}
-
-func (bg *BipartiteGraph) findDisjointSLAP(
- start Node,
- matching EdgeSet,
- guideLayers []NodeOrderedSet,
- used map[Node]bool,
-) ([]Edge, bool) {
- return bg.findDisjointSLAPHelper(start, EdgeSet{}, len(guideLayers)-1, matching, guideLayers, used)
-}
-
-func (bg *BipartiteGraph) findDisjointSLAPHelper(
- currentNode Node,
- currentSLAP EdgeSet,
- currentLevel int,
- matching EdgeSet,
- guideLayers []NodeOrderedSet,
- used map[Node]bool,
-) (EdgeSet, bool) {
- used[currentNode] = true
-
- if currentLevel == 0 {
- return currentSLAP, true
- }
-
- for _, nextNode := range guideLayers[currentLevel-1] {
- if used[nextNode] {
- continue
- }
-
- edge, found := bg.Edges.FindByNodes(currentNode, nextNode)
- if !found {
- continue
- }
-
- if matching.Contains(edge) == util.Odd(currentLevel) {
- continue
- }
-
- currentSLAP = append(currentSLAP, edge)
- slap, found := bg.findDisjointSLAPHelper(nextNode, currentSLAP, currentLevel-1, matching, guideLayers, used)
- if found {
- return slap, true
- }
- currentSLAP = currentSLAP[:len(currentSLAP)-1]
- }
-
- used[currentNode] = false
- return nil, false
-}
-
-func (bg *BipartiteGraph) createSLAPGuideLayers(matching EdgeSet) (guideLayers []NodeOrderedSet) {
- used := make(map[Node]bool)
- currentLayer := NodeOrderedSet{}
-
- for _, node := range bg.Left {
- if matching.Free(node) {
- used[node] = true
- currentLayer = append(currentLayer, node)
- }
- }
-
- if len(currentLayer) == 0 {
- return []NodeOrderedSet{}
- }
- guideLayers = append(guideLayers, currentLayer)
-
- done := false
-
- for !done {
- lastLayer := currentLayer
- currentLayer = NodeOrderedSet{}
-
- if util.Odd(len(guideLayers)) {
- for _, leftNode := range lastLayer {
- for _, rightNode := range bg.Right {
- if used[rightNode] {
- continue
- }
-
- edge, found := bg.Edges.FindByNodes(leftNode, rightNode)
- if !found || matching.Contains(edge) {
- continue
- }
-
- currentLayer = append(currentLayer, rightNode)
- used[rightNode] = true
-
- if matching.Free(rightNode) {
- done = true
- }
- }
- }
- } else {
- for _, rightNode := range lastLayer {
- for _, leftNode := range bg.Left {
- if used[leftNode] {
- continue
- }
-
- edge, found := bg.Edges.FindByNodes(leftNode, rightNode)
- if !found || !matching.Contains(edge) {
- continue
- }
-
- currentLayer = append(currentLayer, leftNode)
- used[leftNode] = true
- }
- }
-
- }
-
- if len(currentLayer) == 0 {
- return []NodeOrderedSet{}
- }
- guideLayers = append(guideLayers, currentLayer)
- }
-
- return
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/support/goraph/edge/edge.go b/vendor/github.com/onsi/gomega/matchers/support/goraph/edge/edge.go
deleted file mode 100644
index 4fd15cc..0000000
--- a/vendor/github.com/onsi/gomega/matchers/support/goraph/edge/edge.go
+++ /dev/null
@@ -1,61 +0,0 @@
-package edge
-
-import . "github.com/onsi/gomega/matchers/support/goraph/node"
-
-type Edge struct {
- Node1 Node
- Node2 Node
-}
-
-type EdgeSet []Edge
-
-func (ec EdgeSet) Free(node Node) bool {
- for _, e := range ec {
- if e.Node1 == node || e.Node2 == node {
- return false
- }
- }
-
- return true
-}
-
-func (ec EdgeSet) Contains(edge Edge) bool {
- for _, e := range ec {
- if e == edge {
- return true
- }
- }
-
- return false
-}
-
-func (ec EdgeSet) FindByNodes(node1, node2 Node) (Edge, bool) {
- for _, e := range ec {
- if (e.Node1 == node1 && e.Node2 == node2) || (e.Node1 == node2 && e.Node2 == node1) {
- return e, true
- }
- }
-
- return Edge{}, false
-}
-
-func (ec EdgeSet) SymmetricDifference(ec2 EdgeSet) EdgeSet {
- edgesToInclude := make(map[Edge]bool)
-
- for _, e := range ec {
- edgesToInclude[e] = true
- }
-
- for _, e := range ec2 {
- edgesToInclude[e] = !edgesToInclude[e]
- }
-
- result := EdgeSet{}
- for e, include := range edgesToInclude {
- if include {
- result = append(result, e)
- }
- }
-
- return result
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/support/goraph/node/node.go b/vendor/github.com/onsi/gomega/matchers/support/goraph/node/node.go
deleted file mode 100644
index 800c2ea..0000000
--- a/vendor/github.com/onsi/gomega/matchers/support/goraph/node/node.go
+++ /dev/null
@@ -1,7 +0,0 @@
-package node
-
-type Node struct {
- Id int
-}
-
-type NodeOrderedSet []Node
diff --git a/vendor/github.com/onsi/gomega/matchers/support/goraph/util/util.go b/vendor/github.com/onsi/gomega/matchers/support/goraph/util/util.go
deleted file mode 100644
index d76a1ee..0000000
--- a/vendor/github.com/onsi/gomega/matchers/support/goraph/util/util.go
+++ /dev/null
@@ -1,7 +0,0 @@
-package util
-
-import "math"
-
-func Odd(n int) bool {
- return math.Mod(float64(n), 2.0) == 1.0
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/type_support.go b/vendor/github.com/onsi/gomega/matchers/type_support.go
deleted file mode 100644
index dced241..0000000
--- a/vendor/github.com/onsi/gomega/matchers/type_support.go
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-Gomega matchers
-
-This package implements the Gomega matchers and does not typically need to be imported.
-See the docs for Gomega for documentation on the matchers
-
-http://onsi.github.io/gomega/
-*/
-
-// untested sections: 11
-
-package matchers
-
-import (
- "encoding/json"
- "fmt"
- "reflect"
-)
-
-type omegaMatcher interface {
- Match(actual interface{}) (success bool, err error)
- FailureMessage(actual interface{}) (message string)
- NegatedFailureMessage(actual interface{}) (message string)
-}
-
-func isBool(a interface{}) bool {
- return reflect.TypeOf(a).Kind() == reflect.Bool
-}
-
-func isNumber(a interface{}) bool {
- if a == nil {
- return false
- }
- kind := reflect.TypeOf(a).Kind()
- return reflect.Int <= kind && kind <= reflect.Float64
-}
-
-func isInteger(a interface{}) bool {
- kind := reflect.TypeOf(a).Kind()
- return reflect.Int <= kind && kind <= reflect.Int64
-}
-
-func isUnsignedInteger(a interface{}) bool {
- kind := reflect.TypeOf(a).Kind()
- return reflect.Uint <= kind && kind <= reflect.Uint64
-}
-
-func isFloat(a interface{}) bool {
- kind := reflect.TypeOf(a).Kind()
- return reflect.Float32 <= kind && kind <= reflect.Float64
-}
-
-func toInteger(a interface{}) int64 {
- if isInteger(a) {
- return reflect.ValueOf(a).Int()
- } else if isUnsignedInteger(a) {
- return int64(reflect.ValueOf(a).Uint())
- } else if isFloat(a) {
- return int64(reflect.ValueOf(a).Float())
- }
- panic(fmt.Sprintf("Expected a number! Got <%T> %#v", a, a))
-}
-
-func toUnsignedInteger(a interface{}) uint64 {
- if isInteger(a) {
- return uint64(reflect.ValueOf(a).Int())
- } else if isUnsignedInteger(a) {
- return reflect.ValueOf(a).Uint()
- } else if isFloat(a) {
- return uint64(reflect.ValueOf(a).Float())
- }
- panic(fmt.Sprintf("Expected a number! Got <%T> %#v", a, a))
-}
-
-func toFloat(a interface{}) float64 {
- if isInteger(a) {
- return float64(reflect.ValueOf(a).Int())
- } else if isUnsignedInteger(a) {
- return float64(reflect.ValueOf(a).Uint())
- } else if isFloat(a) {
- return reflect.ValueOf(a).Float()
- }
- panic(fmt.Sprintf("Expected a number! Got <%T> %#v", a, a))
-}
-
-func isError(a interface{}) bool {
- _, ok := a.(error)
- return ok
-}
-
-func isChan(a interface{}) bool {
- if isNil(a) {
- return false
- }
- return reflect.TypeOf(a).Kind() == reflect.Chan
-}
-
-func isMap(a interface{}) bool {
- if a == nil {
- return false
- }
- return reflect.TypeOf(a).Kind() == reflect.Map
-}
-
-func isArrayOrSlice(a interface{}) bool {
- if a == nil {
- return false
- }
- switch reflect.TypeOf(a).Kind() {
- case reflect.Array, reflect.Slice:
- return true
- default:
- return false
- }
-}
-
-func isString(a interface{}) bool {
- if a == nil {
- return false
- }
- return reflect.TypeOf(a).Kind() == reflect.String
-}
-
-func toString(a interface{}) (string, bool) {
- aString, isString := a.(string)
- if isString {
- return aString, true
- }
-
- aBytes, isBytes := a.([]byte)
- if isBytes {
- return string(aBytes), true
- }
-
- aStringer, isStringer := a.(fmt.Stringer)
- if isStringer {
- return aStringer.String(), true
- }
-
- aJSONRawMessage, isJSONRawMessage := a.(json.RawMessage)
- if isJSONRawMessage {
- return string(aJSONRawMessage), true
- }
-
- return "", false
-}
-
-func lengthOf(a interface{}) (int, bool) {
- if a == nil {
- return 0, false
- }
- switch reflect.TypeOf(a).Kind() {
- case reflect.Map, reflect.Array, reflect.String, reflect.Chan, reflect.Slice:
- return reflect.ValueOf(a).Len(), true
- default:
- return 0, false
- }
-}
-func capOf(a interface{}) (int, bool) {
- if a == nil {
- return 0, false
- }
- switch reflect.TypeOf(a).Kind() {
- case reflect.Array, reflect.Chan, reflect.Slice:
- return reflect.ValueOf(a).Cap(), true
- default:
- return 0, false
- }
-}
-
-func isNil(a interface{}) bool {
- if a == nil {
- return true
- }
-
- switch reflect.TypeOf(a).Kind() {
- case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
- return reflect.ValueOf(a).IsNil()
- }
-
- return false
-}
diff --git a/vendor/github.com/onsi/gomega/matchers/with_transform.go b/vendor/github.com/onsi/gomega/matchers/with_transform.go
deleted file mode 100644
index 8e58d8a..0000000
--- a/vendor/github.com/onsi/gomega/matchers/with_transform.go
+++ /dev/null
@@ -1,72 +0,0 @@
-package matchers
-
-import (
- "fmt"
- "reflect"
-
- "github.com/onsi/gomega/internal/oraclematcher"
- "github.com/onsi/gomega/types"
-)
-
-type WithTransformMatcher struct {
- // input
- Transform interface{} // must be a function of one parameter that returns one value
- Matcher types.GomegaMatcher
-
- // cached value
- transformArgType reflect.Type
-
- // state
- transformedValue interface{}
-}
-
-func NewWithTransformMatcher(transform interface{}, matcher types.GomegaMatcher) *WithTransformMatcher {
- if transform == nil {
- panic("transform function cannot be nil")
- }
- txType := reflect.TypeOf(transform)
- if txType.NumIn() != 1 {
- panic("transform function must have 1 argument")
- }
- if txType.NumOut() != 1 {
- panic("transform function must have 1 return value")
- }
-
- return &WithTransformMatcher{
- Transform: transform,
- Matcher: matcher,
- transformArgType: reflect.TypeOf(transform).In(0),
- }
-}
-
-func (m *WithTransformMatcher) Match(actual interface{}) (bool, error) {
- // return error if actual's type is incompatible with Transform function's argument type
- actualType := reflect.TypeOf(actual)
- if !actualType.AssignableTo(m.transformArgType) {
- return false, fmt.Errorf("Transform function expects '%s' but we have '%s'", m.transformArgType, actualType)
- }
-
- // call the Transform function with `actual`
- fn := reflect.ValueOf(m.Transform)
- result := fn.Call([]reflect.Value{reflect.ValueOf(actual)})
- m.transformedValue = result[0].Interface() // expect exactly one value
-
- return m.Matcher.Match(m.transformedValue)
-}
-
-func (m *WithTransformMatcher) FailureMessage(_ interface{}) (message string) {
- return m.Matcher.FailureMessage(m.transformedValue)
-}
-
-func (m *WithTransformMatcher) NegatedFailureMessage(_ interface{}) (message string) {
- return m.Matcher.NegatedFailureMessage(m.transformedValue)
-}
-
-func (m *WithTransformMatcher) MatchMayChangeInTheFuture(_ interface{}) bool {
- // TODO: Maybe this should always just return true? (Only an issue for non-deterministic transformers.)
- //
- // Querying the next matcher is fine if the transformer always will return the same value.
- // But if the transformer is non-deterministic and returns a different value each time, then there
- // is no point in querying the next matcher, since it can only comment on the last transformed value.
- return oraclematcher.MatchMayChangeInTheFuture(m.Matcher, m.transformedValue)
-}
diff --git a/vendor/github.com/onsi/gomega/types/types.go b/vendor/github.com/onsi/gomega/types/types.go
deleted file mode 100644
index ac59a3a..0000000
--- a/vendor/github.com/onsi/gomega/types/types.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package types
-
-type TWithHelper interface {
- Helper()
-}
-
-type GomegaFailHandler func(message string, callerSkip ...int)
-
-type GomegaFailWrapper struct {
- Fail GomegaFailHandler
- TWithHelper TWithHelper
-}
-
-//A simple *testing.T interface wrapper
-type GomegaTestingT interface {
- Fatalf(format string, args ...interface{})
-}
-
-//All Gomega matchers must implement the GomegaMatcher interface
-//
-//For details on writing custom matchers, check out: http://onsi.github.io/gomega/#adding-your-own-matchers
-type GomegaMatcher interface {
- Match(actual interface{}) (success bool, err error)
- FailureMessage(actual interface{}) (message string)
- NegatedFailureMessage(actual interface{}) (message string)
-}
diff --git a/vendor/github.com/pkg/errors/.gitignore b/vendor/github.com/pkg/errors/.gitignore
deleted file mode 100644
index daf913b..0000000
--- a/vendor/github.com/pkg/errors/.gitignore
+++ /dev/null
@@ -1,24 +0,0 @@
-# Compiled Object files, Static and Dynamic libs (Shared Objects)
-*.o
-*.a
-*.so
-
-# Folders
-_obj
-_test
-
-# Architecture specific extensions/prefixes
-*.[568vq]
-[568vq].out
-
-*.cgo1.go
-*.cgo2.c
-_cgo_defun.c
-_cgo_gotypes.go
-_cgo_export.*
-
-_testmain.go
-
-*.exe
-*.test
-*.prof
diff --git a/vendor/github.com/pkg/errors/.travis.yml b/vendor/github.com/pkg/errors/.travis.yml
deleted file mode 100644
index d4b9266..0000000
--- a/vendor/github.com/pkg/errors/.travis.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-language: go
-go_import_path: github.com/pkg/errors
-go:
- - 1.4.x
- - 1.5.x
- - 1.6.x
- - 1.7.x
- - 1.8.x
- - 1.9.x
- - 1.10.x
- - 1.11.x
- - tip
-
-script:
- - go test -v ./...
diff --git a/vendor/github.com/pkg/errors/LICENSE b/vendor/github.com/pkg/errors/LICENSE
deleted file mode 100644
index 835ba3e..0000000
--- a/vendor/github.com/pkg/errors/LICENSE
+++ /dev/null
@@ -1,23 +0,0 @@
-Copyright (c) 2015, Dave Cheney <dave@cheney.net>
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/github.com/pkg/errors/README.md b/vendor/github.com/pkg/errors/README.md
deleted file mode 100644
index 6483ba2..0000000
--- a/vendor/github.com/pkg/errors/README.md
+++ /dev/null
@@ -1,52 +0,0 @@
-# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors) [![Sourcegraph](https://sourcegraph.com/github.com/pkg/errors/-/badge.svg)](https://sourcegraph.com/github.com/pkg/errors?badge)
-
-Package errors provides simple error handling primitives.
-
-`go get github.com/pkg/errors`
-
-The traditional error handling idiom in Go is roughly akin to
-```go
-if err != nil {
- return err
-}
-```
-which applied recursively up the call stack results in error reports without context or debugging information. The errors package allows programmers to add context to the failure path in their code in a way that does not destroy the original value of the error.
-
-## Adding context to an error
-
-The errors.Wrap function returns a new error that adds context to the original error. For example
-```go
-_, err := ioutil.ReadAll(r)
-if err != nil {
- return errors.Wrap(err, "read failed")
-}
-```
-## Retrieving the cause of an error
-
-Using `errors.Wrap` constructs a stack of errors, adding context to the preceding error. Depending on the nature of the error it may be necessary to reverse the operation of errors.Wrap to retrieve the original error for inspection. Any error value which implements this interface can be inspected by `errors.Cause`.
-```go
-type causer interface {
- Cause() error
-}
-```
-`errors.Cause` will recursively retrieve the topmost error which does not implement `causer`, which is assumed to be the original cause. For example:
-```go
-switch err := errors.Cause(err).(type) {
-case *MyError:
- // handle specifically
-default:
- // unknown error
-}
-```
-
-[Read the package documentation for more information](https://godoc.org/github.com/pkg/errors).
-
-## Contributing
-
-We welcome pull requests, bug fixes and issue reports. With that said, the bar for adding new symbols to this package is intentionally set high.
-
-Before proposing a change, please discuss your change by raising an issue.
-
-## License
-
-BSD-2-Clause
diff --git a/vendor/github.com/pkg/errors/appveyor.yml b/vendor/github.com/pkg/errors/appveyor.yml
deleted file mode 100644
index a932ead..0000000
--- a/vendor/github.com/pkg/errors/appveyor.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-version: build-{build}.{branch}
-
-clone_folder: C:\gopath\src\github.com\pkg\errors
-shallow_clone: true # for startup speed
-
-environment:
- GOPATH: C:\gopath
-
-platform:
- - x64
-
-# http://www.appveyor.com/docs/installed-software
-install:
- # some helpful output for debugging builds
- - go version
- - go env
- # pre-installed MinGW at C:\MinGW is 32bit only
- # but MSYS2 at C:\msys64 has mingw64
- - set PATH=C:\msys64\mingw64\bin;%PATH%
- - gcc --version
- - g++ --version
-
-build_script:
- - go install -v ./...
-
-test_script:
- - set PATH=C:\gopath\bin;%PATH%
- - go test -v ./...
-
-#artifacts:
-# - path: '%GOPATH%\bin\*.exe'
-deploy: off
diff --git a/vendor/github.com/pkg/errors/errors.go b/vendor/github.com/pkg/errors/errors.go
deleted file mode 100644
index 7421f32..0000000
--- a/vendor/github.com/pkg/errors/errors.go
+++ /dev/null
@@ -1,282 +0,0 @@
-// Package errors provides simple error handling primitives.
-//
-// The traditional error handling idiom in Go is roughly akin to
-//
-// if err != nil {
-// return err
-// }
-//
-// which when applied recursively up the call stack results in error reports
-// without context or debugging information. The errors package allows
-// programmers to add context to the failure path in their code in a way
-// that does not destroy the original value of the error.
-//
-// Adding context to an error
-//
-// The errors.Wrap function returns a new error that adds context to the
-// original error by recording a stack trace at the point Wrap is called,
-// together with the supplied message. For example
-//
-// _, err := ioutil.ReadAll(r)
-// if err != nil {
-// return errors.Wrap(err, "read failed")
-// }
-//
-// If additional control is required, the errors.WithStack and
-// errors.WithMessage functions destructure errors.Wrap into its component
-// operations: annotating an error with a stack trace and with a message,
-// respectively.
-//
-// Retrieving the cause of an error
-//
-// Using errors.Wrap constructs a stack of errors, adding context to the
-// preceding error. Depending on the nature of the error it may be necessary
-// to reverse the operation of errors.Wrap to retrieve the original error
-// for inspection. Any error value which implements this interface
-//
-// type causer interface {
-// Cause() error
-// }
-//
-// can be inspected by errors.Cause. errors.Cause will recursively retrieve
-// the topmost error that does not implement causer, which is assumed to be
-// the original cause. For example:
-//
-// switch err := errors.Cause(err).(type) {
-// case *MyError:
-// // handle specifically
-// default:
-// // unknown error
-// }
-//
-// Although the causer interface is not exported by this package, it is
-// considered a part of its stable public interface.
-//
-// Formatted printing of errors
-//
-// All error values returned from this package implement fmt.Formatter and can
-// be formatted by the fmt package. The following verbs are supported:
-//
-// %s print the error. If the error has a Cause it will be
-// printed recursively.
-// %v see %s
-// %+v extended format. Each Frame of the error's StackTrace will
-// be printed in detail.
-//
-// Retrieving the stack trace of an error or wrapper
-//
-// New, Errorf, Wrap, and Wrapf record a stack trace at the point they are
-// invoked. This information can be retrieved with the following interface:
-//
-// type stackTracer interface {
-// StackTrace() errors.StackTrace
-// }
-//
-// The returned errors.StackTrace type is defined as
-//
-// type StackTrace []Frame
-//
-// The Frame type represents a call site in the stack trace. Frame supports
-// the fmt.Formatter interface that can be used for printing information about
-// the stack trace of this error. For example:
-//
-// if err, ok := err.(stackTracer); ok {
-// for _, f := range err.StackTrace() {
-// fmt.Printf("%+s:%d", f)
-// }
-// }
-//
-// Although the stackTracer interface is not exported by this package, it is
-// considered a part of its stable public interface.
-//
-// See the documentation for Frame.Format for more details.
-package errors
-
-import (
- "fmt"
- "io"
-)
-
-// New returns an error with the supplied message.
-// New also records the stack trace at the point it was called.
-func New(message string) error {
- return &fundamental{
- msg: message,
- stack: callers(),
- }
-}
-
-// Errorf formats according to a format specifier and returns the string
-// as a value that satisfies error.
-// Errorf also records the stack trace at the point it was called.
-func Errorf(format string, args ...interface{}) error {
- return &fundamental{
- msg: fmt.Sprintf(format, args...),
- stack: callers(),
- }
-}
-
-// fundamental is an error that has a message and a stack, but no caller.
-type fundamental struct {
- msg string
- *stack
-}
-
-func (f *fundamental) Error() string { return f.msg }
-
-func (f *fundamental) Format(s fmt.State, verb rune) {
- switch verb {
- case 'v':
- if s.Flag('+') {
- io.WriteString(s, f.msg)
- f.stack.Format(s, verb)
- return
- }
- fallthrough
- case 's':
- io.WriteString(s, f.msg)
- case 'q':
- fmt.Fprintf(s, "%q", f.msg)
- }
-}
-
-// WithStack annotates err with a stack trace at the point WithStack was called.
-// If err is nil, WithStack returns nil.
-func WithStack(err error) error {
- if err == nil {
- return nil
- }
- return &withStack{
- err,
- callers(),
- }
-}
-
-type withStack struct {
- error
- *stack
-}
-
-func (w *withStack) Cause() error { return w.error }
-
-func (w *withStack) Format(s fmt.State, verb rune) {
- switch verb {
- case 'v':
- if s.Flag('+') {
- fmt.Fprintf(s, "%+v", w.Cause())
- w.stack.Format(s, verb)
- return
- }
- fallthrough
- case 's':
- io.WriteString(s, w.Error())
- case 'q':
- fmt.Fprintf(s, "%q", w.Error())
- }
-}
-
-// Wrap returns an error annotating err with a stack trace
-// at the point Wrap is called, and the supplied message.
-// If err is nil, Wrap returns nil.
-func Wrap(err error, message string) error {
- if err == nil {
- return nil
- }
- err = &withMessage{
- cause: err,
- msg: message,
- }
- return &withStack{
- err,
- callers(),
- }
-}
-
-// Wrapf returns an error annotating err with a stack trace
-// at the point Wrapf is called, and the format specifier.
-// If err is nil, Wrapf returns nil.
-func Wrapf(err error, format string, args ...interface{}) error {
- if err == nil {
- return nil
- }
- err = &withMessage{
- cause: err,
- msg: fmt.Sprintf(format, args...),
- }
- return &withStack{
- err,
- callers(),
- }
-}
-
-// WithMessage annotates err with a new message.
-// If err is nil, WithMessage returns nil.
-func WithMessage(err error, message string) error {
- if err == nil {
- return nil
- }
- return &withMessage{
- cause: err,
- msg: message,
- }
-}
-
-// WithMessagef annotates err with the format specifier.
-// If err is nil, WithMessagef returns nil.
-func WithMessagef(err error, format string, args ...interface{}) error {
- if err == nil {
- return nil
- }
- return &withMessage{
- cause: err,
- msg: fmt.Sprintf(format, args...),
- }
-}
-
-type withMessage struct {
- cause error
- msg string
-}
-
-func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() }
-func (w *withMessage) Cause() error { return w.cause }
-
-func (w *withMessage) Format(s fmt.State, verb rune) {
- switch verb {
- case 'v':
- if s.Flag('+') {
- fmt.Fprintf(s, "%+v\n", w.Cause())
- io.WriteString(s, w.msg)
- return
- }
- fallthrough
- case 's', 'q':
- io.WriteString(s, w.Error())
- }
-}
-
-// Cause returns the underlying cause of the error, if possible.
-// An error value has a cause if it implements the following
-// interface:
-//
-// type causer interface {
-// Cause() error
-// }
-//
-// If the error does not implement Cause, the original error will
-// be returned. If the error is nil, nil will be returned without further
-// investigation.
-func Cause(err error) error {
- type causer interface {
- Cause() error
- }
-
- for err != nil {
- cause, ok := err.(causer)
- if !ok {
- break
- }
- err = cause.Cause()
- }
- return err
-}
diff --git a/vendor/github.com/pkg/errors/stack.go b/vendor/github.com/pkg/errors/stack.go
deleted file mode 100644
index 2874a04..0000000
--- a/vendor/github.com/pkg/errors/stack.go
+++ /dev/null
@@ -1,147 +0,0 @@
-package errors
-
-import (
- "fmt"
- "io"
- "path"
- "runtime"
- "strings"
-)
-
-// Frame represents a program counter inside a stack frame.
-type Frame uintptr
-
-// pc returns the program counter for this frame;
-// multiple frames may have the same PC value.
-func (f Frame) pc() uintptr { return uintptr(f) - 1 }
-
-// file returns the full path to the file that contains the
-// function for this Frame's pc.
-func (f Frame) file() string {
- fn := runtime.FuncForPC(f.pc())
- if fn == nil {
- return "unknown"
- }
- file, _ := fn.FileLine(f.pc())
- return file
-}
-
-// line returns the line number of source code of the
-// function for this Frame's pc.
-func (f Frame) line() int {
- fn := runtime.FuncForPC(f.pc())
- if fn == nil {
- return 0
- }
- _, line := fn.FileLine(f.pc())
- return line
-}
-
-// Format formats the frame according to the fmt.Formatter interface.
-//
-// %s source file
-// %d source line
-// %n function name
-// %v equivalent to %s:%d
-//
-// Format accepts flags that alter the printing of some verbs, as follows:
-//
-// %+s function name and path of source file relative to the compile time
-// GOPATH separated by \n\t (<funcname>\n\t<path>)
-// %+v equivalent to %+s:%d
-func (f Frame) Format(s fmt.State, verb rune) {
- switch verb {
- case 's':
- switch {
- case s.Flag('+'):
- pc := f.pc()
- fn := runtime.FuncForPC(pc)
- if fn == nil {
- io.WriteString(s, "unknown")
- } else {
- file, _ := fn.FileLine(pc)
- fmt.Fprintf(s, "%s\n\t%s", fn.Name(), file)
- }
- default:
- io.WriteString(s, path.Base(f.file()))
- }
- case 'd':
- fmt.Fprintf(s, "%d", f.line())
- case 'n':
- name := runtime.FuncForPC(f.pc()).Name()
- io.WriteString(s, funcname(name))
- case 'v':
- f.Format(s, 's')
- io.WriteString(s, ":")
- f.Format(s, 'd')
- }
-}
-
-// StackTrace is stack of Frames from innermost (newest) to outermost (oldest).
-type StackTrace []Frame
-
-// Format formats the stack of Frames according to the fmt.Formatter interface.
-//
-// %s lists source files for each Frame in the stack
-// %v lists the source file and line number for each Frame in the stack
-//
-// Format accepts flags that alter the printing of some verbs, as follows:
-//
-// %+v Prints filename, function, and line number for each Frame in the stack.
-func (st StackTrace) Format(s fmt.State, verb rune) {
- switch verb {
- case 'v':
- switch {
- case s.Flag('+'):
- for _, f := range st {
- fmt.Fprintf(s, "\n%+v", f)
- }
- case s.Flag('#'):
- fmt.Fprintf(s, "%#v", []Frame(st))
- default:
- fmt.Fprintf(s, "%v", []Frame(st))
- }
- case 's':
- fmt.Fprintf(s, "%s", []Frame(st))
- }
-}
-
-// stack represents a stack of program counters.
-type stack []uintptr
-
-func (s *stack) Format(st fmt.State, verb rune) {
- switch verb {
- case 'v':
- switch {
- case st.Flag('+'):
- for _, pc := range *s {
- f := Frame(pc)
- fmt.Fprintf(st, "\n%+v", f)
- }
- }
- }
-}
-
-func (s *stack) StackTrace() StackTrace {
- f := make([]Frame, len(*s))
- for i := 0; i < len(f); i++ {
- f[i] = Frame((*s)[i])
- }
- return f
-}
-
-func callers() *stack {
- const depth = 32
- var pcs [depth]uintptr
- n := runtime.Callers(3, pcs[:])
- var st stack = pcs[0:n]
- return &st
-}
-
-// funcname removes the path prefix component of a function's name reported by func.Name().
-func funcname(name string) string {
- i := strings.LastIndex(name, "/")
- name = name[i+1:]
- i = strings.Index(name, ".")
- return name[i+1:]
-}
diff --git a/vendor/github.com/sirupsen/logrus/.gitignore b/vendor/github.com/sirupsen/logrus/.gitignore
deleted file mode 100644
index 6b7d7d1..0000000
--- a/vendor/github.com/sirupsen/logrus/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-logrus
-vendor
diff --git a/vendor/github.com/sirupsen/logrus/.travis.yml b/vendor/github.com/sirupsen/logrus/.travis.yml
deleted file mode 100644
index 848938a..0000000
--- a/vendor/github.com/sirupsen/logrus/.travis.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-language: go
-go_import_path: github.com/sirupsen/logrus
-git:
- depth: 1
-env:
- - GO111MODULE=on
- - GO111MODULE=off
-go: [ 1.11.x, 1.12.x ]
-os: [ linux, osx ]
-matrix:
- exclude:
- - go: 1.12.x
- env: GO111MODULE=off
- - go: 1.11.x
- os: osx
-install:
- - ./travis/install.sh
- - if [[ "$GO111MODULE" == "on" ]]; then go mod download; fi
- - if [[ "$GO111MODULE" == "off" ]]; then go get github.com/stretchr/testify/assert golang.org/x/sys/unix github.com/konsorten/go-windows-terminal-sequences; fi
-script:
- - ./travis/cross_build.sh
- - export GOMAXPROCS=4
- - export GORACE=halt_on_error=1
- - go test -race -v ./...
- - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then go test -race -v -tags appengine ./... ; fi
diff --git a/vendor/github.com/sirupsen/logrus/CHANGELOG.md b/vendor/github.com/sirupsen/logrus/CHANGELOG.md
deleted file mode 100644
index 51a7ab0..0000000
--- a/vendor/github.com/sirupsen/logrus/CHANGELOG.md
+++ /dev/null
@@ -1,200 +0,0 @@
-# 1.4.2
- * Fixes build break for plan9, nacl, solaris
-# 1.4.1
-This new release introduces:
- * Enhance TextFormatter to not print caller information when they are empty (#944)
- * Remove dependency on golang.org/x/crypto (#932, #943)
-
-Fixes:
- * Fix Entry.WithContext method to return a copy of the initial entry (#941)
-
-# 1.4.0
-This new release introduces:
- * Add `DeferExitHandler`, similar to `RegisterExitHandler` but prepending the handler to the list of handlers (semantically like `defer`) (#848).
- * Add `CallerPrettyfier` to `JSONFormatter` and `TextFormatter (#909, #911)
- * Add `Entry.WithContext()` and `Entry.Context`, to set a context on entries to be used e.g. in hooks (#919).
-
-Fixes:
- * Fix wrong method calls `Logger.Print` and `Logger.Warningln` (#893).
- * Update `Entry.Logf` to not do string formatting unless the log level is enabled (#903)
- * Fix infinite recursion on unknown `Level.String()` (#907)
- * Fix race condition in `getCaller` (#916).
-
-
-# 1.3.0
-This new release introduces:
- * Log, Logf, Logln functions for Logger and Entry that take a Level
-
-Fixes:
- * Building prometheus node_exporter on AIX (#840)
- * Race condition in TextFormatter (#468)
- * Travis CI import path (#868)
- * Remove coloured output on Windows (#862)
- * Pointer to func as field in JSONFormatter (#870)
- * Properly marshal Levels (#873)
-
-# 1.2.0
-This new release introduces:
- * A new method `SetReportCaller` in the `Logger` to enable the file, line and calling function from which the trace has been issued
- * A new trace level named `Trace` whose level is below `Debug`
- * A configurable exit function to be called upon a Fatal trace
- * The `Level` object now implements `encoding.TextUnmarshaler` interface
-
-# 1.1.1
-This is a bug fix release.
- * fix the build break on Solaris
- * don't drop a whole trace in JSONFormatter when a field param is a function pointer which can not be serialized
-
-# 1.1.0
-This new release introduces:
- * several fixes:
- * a fix for a race condition on entry formatting
- * proper cleanup of previously used entries before putting them back in the pool
- * the extra new line at the end of message in text formatter has been removed
- * a new global public API to check if a level is activated: IsLevelEnabled
- * the following methods have been added to the Logger object
- * IsLevelEnabled
- * SetFormatter
- * SetOutput
- * ReplaceHooks
- * introduction of go module
- * an indent configuration for the json formatter
- * output colour support for windows
- * the field sort function is now configurable for text formatter
- * the CLICOLOR and CLICOLOR\_FORCE environment variable support in text formater
-
-# 1.0.6
-
-This new release introduces:
- * a new api WithTime which allows to easily force the time of the log entry
- which is mostly useful for logger wrapper
- * a fix reverting the immutability of the entry given as parameter to the hooks
- a new configuration field of the json formatter in order to put all the fields
- in a nested dictionnary
- * a new SetOutput method in the Logger
- * a new configuration of the textformatter to configure the name of the default keys
- * a new configuration of the text formatter to disable the level truncation
-
-# 1.0.5
-
-* Fix hooks race (#707)
-* Fix panic deadlock (#695)
-
-# 1.0.4
-
-* Fix race when adding hooks (#612)
-* Fix terminal check in AppEngine (#635)
-
-# 1.0.3
-
-* Replace example files with testable examples
-
-# 1.0.2
-
-* bug: quote non-string values in text formatter (#583)
-* Make (*Logger) SetLevel a public method
-
-# 1.0.1
-
-* bug: fix escaping in text formatter (#575)
-
-# 1.0.0
-
-* Officially changed name to lower-case
-* bug: colors on Windows 10 (#541)
-* bug: fix race in accessing level (#512)
-
-# 0.11.5
-
-* feature: add writer and writerlevel to entry (#372)
-
-# 0.11.4
-
-* bug: fix undefined variable on solaris (#493)
-
-# 0.11.3
-
-* formatter: configure quoting of empty values (#484)
-* formatter: configure quoting character (default is `"`) (#484)
-* bug: fix not importing io correctly in non-linux environments (#481)
-
-# 0.11.2
-
-* bug: fix windows terminal detection (#476)
-
-# 0.11.1
-
-* bug: fix tty detection with custom out (#471)
-
-# 0.11.0
-
-* performance: Use bufferpool to allocate (#370)
-* terminal: terminal detection for app-engine (#343)
-* feature: exit handler (#375)
-
-# 0.10.0
-
-* feature: Add a test hook (#180)
-* feature: `ParseLevel` is now case-insensitive (#326)
-* feature: `FieldLogger` interface that generalizes `Logger` and `Entry` (#308)
-* performance: avoid re-allocations on `WithFields` (#335)
-
-# 0.9.0
-
-* logrus/text_formatter: don't emit empty msg
-* logrus/hooks/airbrake: move out of main repository
-* logrus/hooks/sentry: move out of main repository
-* logrus/hooks/papertrail: move out of main repository
-* logrus/hooks/bugsnag: move out of main repository
-* logrus/core: run tests with `-race`
-* logrus/core: detect TTY based on `stderr`
-* logrus/core: support `WithError` on logger
-* logrus/core: Solaris support
-
-# 0.8.7
-
-* logrus/core: fix possible race (#216)
-* logrus/doc: small typo fixes and doc improvements
-
-
-# 0.8.6
-
-* hooks/raven: allow passing an initialized client
-
-# 0.8.5
-
-* logrus/core: revert #208
-
-# 0.8.4
-
-* formatter/text: fix data race (#218)
-
-# 0.8.3
-
-* logrus/core: fix entry log level (#208)
-* logrus/core: improve performance of text formatter by 40%
-* logrus/core: expose `LevelHooks` type
-* logrus/core: add support for DragonflyBSD and NetBSD
-* formatter/text: print structs more verbosely
-
-# 0.8.2
-
-* logrus: fix more Fatal family functions
-
-# 0.8.1
-
-* logrus: fix not exiting on `Fatalf` and `Fatalln`
-
-# 0.8.0
-
-* logrus: defaults to stderr instead of stdout
-* hooks/sentry: add special field for `*http.Request`
-* formatter/text: ignore Windows for colors
-
-# 0.7.3
-
-* formatter/\*: allow configuration of timestamp layout
-
-# 0.7.2
-
-* formatter/text: Add configuration option for time format (#158)
diff --git a/vendor/github.com/sirupsen/logrus/LICENSE b/vendor/github.com/sirupsen/logrus/LICENSE
deleted file mode 100644
index f090cb4..0000000
--- a/vendor/github.com/sirupsen/logrus/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2014 Simon Eskildsen
-
-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/sirupsen/logrus/README.md b/vendor/github.com/sirupsen/logrus/README.md
deleted file mode 100644
index a4796eb..0000000
--- a/vendor/github.com/sirupsen/logrus/README.md
+++ /dev/null
@@ -1,495 +0,0 @@
-# Logrus <img src="http://i.imgur.com/hTeVwmJ.png" width="40" height="40" alt=":walrus:" class="emoji" title=":walrus:"/>&nbsp;[![Build Status](https://travis-ci.org/sirupsen/logrus.svg?branch=master)](https://travis-ci.org/sirupsen/logrus)&nbsp;[![GoDoc](https://godoc.org/github.com/sirupsen/logrus?status.svg)](https://godoc.org/github.com/sirupsen/logrus)
-
-Logrus is a structured logger for Go (golang), completely API compatible with
-the standard library logger.
-
-**Seeing weird case-sensitive problems?** It's in the past been possible to
-import Logrus as both upper- and lower-case. Due to the Go package environment,
-this caused issues in the community and we needed a standard. Some environments
-experienced problems with the upper-case variant, so the lower-case was decided.
-Everything using `logrus` will need to use the lower-case:
-`github.com/sirupsen/logrus`. Any package that isn't, should be changed.
-
-To fix Glide, see [these
-comments](https://github.com/sirupsen/logrus/issues/553#issuecomment-306591437).
-For an in-depth explanation of the casing issue, see [this
-comment](https://github.com/sirupsen/logrus/issues/570#issuecomment-313933276).
-
-**Are you interested in assisting in maintaining Logrus?** Currently I have a
-lot of obligations, and I am unable to provide Logrus with the maintainership it
-needs. If you'd like to help, please reach out to me at `simon at author's
-username dot com`.
-
-Nicely color-coded in development (when a TTY is attached, otherwise just
-plain text):
-
-![Colored](http://i.imgur.com/PY7qMwd.png)
-
-With `log.SetFormatter(&log.JSONFormatter{})`, for easy parsing by logstash
-or Splunk:
-
-```json
-{"animal":"walrus","level":"info","msg":"A group of walrus emerges from the
-ocean","size":10,"time":"2014-03-10 19:57:38.562264131 -0400 EDT"}
-
-{"level":"warning","msg":"The group's number increased tremendously!",
-"number":122,"omg":true,"time":"2014-03-10 19:57:38.562471297 -0400 EDT"}
-
-{"animal":"walrus","level":"info","msg":"A giant walrus appears!",
-"size":10,"time":"2014-03-10 19:57:38.562500591 -0400 EDT"}
-
-{"animal":"walrus","level":"info","msg":"Tremendously sized cow enters the ocean.",
-"size":9,"time":"2014-03-10 19:57:38.562527896 -0400 EDT"}
-
-{"level":"fatal","msg":"The ice breaks!","number":100,"omg":true,
-"time":"2014-03-10 19:57:38.562543128 -0400 EDT"}
-```
-
-With the default `log.SetFormatter(&log.TextFormatter{})` when a TTY is not
-attached, the output is compatible with the
-[logfmt](http://godoc.org/github.com/kr/logfmt) format:
-
-```text
-time="2015-03-26T01:27:38-04:00" level=debug msg="Started observing beach" animal=walrus number=8
-time="2015-03-26T01:27:38-04:00" level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10
-time="2015-03-26T01:27:38-04:00" level=warning msg="The group's number increased tremendously!" number=122 omg=true
-time="2015-03-26T01:27:38-04:00" level=debug msg="Temperature changes" temperature=-4
-time="2015-03-26T01:27:38-04:00" level=panic msg="It's over 9000!" animal=orca size=9009
-time="2015-03-26T01:27:38-04:00" level=fatal msg="The ice breaks!" err=&{0x2082280c0 map[animal:orca size:9009] 2015-03-26 01:27:38.441574009 -0400 EDT panic It's over 9000!} number=100 omg=true
-```
-To ensure this behaviour even if a TTY is attached, set your formatter as follows:
-
-```go
- log.SetFormatter(&log.TextFormatter{
- DisableColors: true,
- FullTimestamp: true,
- })
-```
-
-#### Logging Method Name
-
-If you wish to add the calling method as a field, instruct the logger via:
-```go
-log.SetReportCaller(true)
-```
-This adds the caller as 'method' like so:
-
-```json
-{"animal":"penguin","level":"fatal","method":"github.com/sirupsen/arcticcreatures.migrate","msg":"a penguin swims by",
-"time":"2014-03-10 19:57:38.562543129 -0400 EDT"}
-```
-
-```text
-time="2015-03-26T01:27:38-04:00" level=fatal method=github.com/sirupsen/arcticcreatures.migrate msg="a penguin swims by" animal=penguin
-```
-Note that this does add measurable overhead - the cost will depend on the version of Go, but is
-between 20 and 40% in recent tests with 1.6 and 1.7. You can validate this in your
-environment via benchmarks:
-```
-go test -bench=.*CallerTracing
-```
-
-
-#### Case-sensitivity
-
-The organization's name was changed to lower-case--and this will not be changed
-back. If you are getting import conflicts due to case sensitivity, please use
-the lower-case import: `github.com/sirupsen/logrus`.
-
-#### Example
-
-The simplest way to use Logrus is simply the package-level exported logger:
-
-```go
-package main
-
-import (
- log "github.com/sirupsen/logrus"
-)
-
-func main() {
- log.WithFields(log.Fields{
- "animal": "walrus",
- }).Info("A walrus appears")
-}
-```
-
-Note that it's completely api-compatible with the stdlib logger, so you can
-replace your `log` imports everywhere with `log "github.com/sirupsen/logrus"`
-and you'll now have the flexibility of Logrus. You can customize it all you
-want:
-
-```go
-package main
-
-import (
- "os"
- log "github.com/sirupsen/logrus"
-)
-
-func init() {
- // Log as JSON instead of the default ASCII formatter.
- log.SetFormatter(&log.JSONFormatter{})
-
- // Output to stdout instead of the default stderr
- // Can be any io.Writer, see below for File example
- log.SetOutput(os.Stdout)
-
- // Only log the warning severity or above.
- log.SetLevel(log.WarnLevel)
-}
-
-func main() {
- log.WithFields(log.Fields{
- "animal": "walrus",
- "size": 10,
- }).Info("A group of walrus emerges from the ocean")
-
- log.WithFields(log.Fields{
- "omg": true,
- "number": 122,
- }).Warn("The group's number increased tremendously!")
-
- log.WithFields(log.Fields{
- "omg": true,
- "number": 100,
- }).Fatal("The ice breaks!")
-
- // A common pattern is to re-use fields between logging statements by re-using
- // the logrus.Entry returned from WithFields()
- contextLogger := log.WithFields(log.Fields{
- "common": "this is a common field",
- "other": "I also should be logged always",
- })
-
- contextLogger.Info("I'll be logged with common and other field")
- contextLogger.Info("Me too")
-}
-```
-
-For more advanced usage such as logging to multiple locations from the same
-application, you can also create an instance of the `logrus` Logger:
-
-```go
-package main
-
-import (
- "os"
- "github.com/sirupsen/logrus"
-)
-
-// Create a new instance of the logger. You can have any number of instances.
-var log = logrus.New()
-
-func main() {
- // The API for setting attributes is a little different than the package level
- // exported logger. See Godoc.
- log.Out = os.Stdout
-
- // You could set this to any `io.Writer` such as a file
- // 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.WithFields(logrus.Fields{
- "animal": "walrus",
- "size": 10,
- }).Info("A group of walrus emerges from the ocean")
-}
-```
-
-#### Fields
-
-Logrus encourages careful, structured logging through logging fields instead of
-long, unparseable error messages. For example, instead of: `log.Fatalf("Failed
-to send event %s to topic %s with key %d")`, you should log the much more
-discoverable:
-
-```go
-log.WithFields(log.Fields{
- "event": event,
- "topic": topic,
- "key": key,
-}).Fatal("Failed to send event")
-```
-
-We've found this API forces you to think about logging in a way that produces
-much more useful logging messages. We've been in countless situations where just
-a single added field to a log statement that was already there would've saved us
-hours. The `WithFields` call is optional.
-
-In general, with Logrus using any of the `printf`-family functions should be
-seen as a hint you should add a field, however, you can still use the
-`printf`-family functions with Logrus.
-
-#### Default Fields
-
-Often it's helpful to have fields _always_ attached to log statements in an
-application or parts of one. For example, you may want to always log the
-`request_id` and `user_ip` in the context of a request. Instead of writing
-`log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})` on
-every line, you can create a `logrus.Entry` to pass around instead:
-
-```go
-requestLogger := log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})
-requestLogger.Info("something happened on that request") # will log request_id and user_ip
-requestLogger.Warn("something not great happened")
-```
-
-#### Hooks
-
-You can add hooks for logging levels. For example to send errors to an exception
-tracking service on `Error`, `Fatal` and `Panic`, info to StatsD or log to
-multiple places simultaneously, e.g. syslog.
-
-Logrus comes with [built-in hooks](hooks/). Add those, or your custom hook, in
-`init`:
-
-```go
-import (
- log "github.com/sirupsen/logrus"
- "gopkg.in/gemnasium/logrus-airbrake-hook.v2" // the package is named "airbrake"
- logrus_syslog "github.com/sirupsen/logrus/hooks/syslog"
- "log/syslog"
-)
-
-func init() {
-
- // Use the Airbrake hook to report errors that have Error severity or above to
- // an exception tracker. You can create custom hooks, see the Hooks section.
- log.AddHook(airbrake.NewHook(123, "xyz", "production"))
-
- hook, err := logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "")
- if err != nil {
- log.Error("Unable to connect to local syslog daemon")
- } else {
- log.AddHook(hook)
- }
-}
-```
-Note: Syslog hook also support connecting to local syslog (Ex. "/dev/log" or "/var/run/syslog" or "/var/run/log"). For the detail, please check the [syslog hook README](hooks/syslog/README.md).
-
-A list of currently known of service hook can be found in this wiki [page](https://github.com/sirupsen/logrus/wiki/Hooks)
-
-
-#### Level logging
-
-Logrus has seven logging levels: Trace, Debug, Info, Warning, Error, Fatal and Panic.
-
-```go
-log.Trace("Something very low level.")
-log.Debug("Useful debugging information.")
-log.Info("Something noteworthy happened!")
-log.Warn("You should probably take a look at this.")
-log.Error("Something failed but I'm not quitting.")
-// Calls os.Exit(1) after logging
-log.Fatal("Bye.")
-// Calls panic() after logging
-log.Panic("I'm bailing.")
-```
-
-You can set the logging level on a `Logger`, then it will only log entries with
-that severity or anything above it:
-
-```go
-// Will log anything that is info or above (warn, error, fatal, panic). Default.
-log.SetLevel(log.InfoLevel)
-```
-
-It may be useful to set `log.Level = logrus.DebugLevel` in a debug or verbose
-environment if your application has that.
-
-#### Entries
-
-Besides the fields added with `WithField` or `WithFields` some fields are
-automatically added to all logging events:
-
-1. `time`. The timestamp when the entry was created.
-2. `msg`. The logging message passed to `{Info,Warn,Error,Fatal,Panic}` after
- the `AddFields` call. E.g. `Failed to send event.`
-3. `level`. The logging level. E.g. `info`.
-
-#### Environments
-
-Logrus has no notion of environment.
-
-If you wish for hooks and formatters to only be used in specific environments,
-you should handle that yourself. For example, if your application has a global
-variable `Environment`, which is a string representation of the environment you
-could do:
-
-```go
-import (
- log "github.com/sirupsen/logrus"
-)
-
-init() {
- // do something here to set environment depending on an environment variable
- // or command-line flag
- if Environment == "production" {
- log.SetFormatter(&log.JSONFormatter{})
- } else {
- // The TextFormatter is default, you don't actually have to do this.
- log.SetFormatter(&log.TextFormatter{})
- }
-}
-```
-
-This configuration is how `logrus` was intended to be used, but JSON in
-production is mostly only useful if you do log aggregation with tools like
-Splunk or Logstash.
-
-#### Formatters
-
-The built-in logging formatters are:
-
-* `logrus.TextFormatter`. Logs the event in colors if stdout is a tty, otherwise
- without colors.
- * *Note:* to force colored output when there is no TTY, set the `ForceColors`
- field to `true`. To force no colored output even if there is a TTY set the
- `DisableColors` field to `true`. For Windows, see
- [github.com/mattn/go-colorable](https://github.com/mattn/go-colorable).
- * When colors are enabled, levels are truncated to 4 characters by default. To disable
- truncation set the `DisableLevelTruncation` field to `true`.
- * All options are listed in the [generated docs](https://godoc.org/github.com/sirupsen/logrus#TextFormatter).
-* `logrus.JSONFormatter`. Logs fields as JSON.
- * All options are listed in the [generated docs](https://godoc.org/github.com/sirupsen/logrus#JSONFormatter).
-
-Third party logging formatters:
-
-* [`FluentdFormatter`](https://github.com/joonix/log). Formats entries that can be parsed by Kubernetes and Google Container Engine.
-* [`GELF`](https://github.com/fabienm/go-logrus-formatters). Formats entries so they comply to Graylog's [GELF 1.1 specification](http://docs.graylog.org/en/2.4/pages/gelf.html).
-* [`logstash`](https://github.com/bshuster-repo/logrus-logstash-hook). Logs fields as [Logstash](http://logstash.net) Events.
-* [`prefixed`](https://github.com/x-cray/logrus-prefixed-formatter). Displays log entry source along with alternative layout.
-* [`zalgo`](https://github.com/aybabtme/logzalgo). Invoking the P͉̫o̳̼̊w̖͈̰͎e̬͔̭͂r͚̼̹̲ ̫͓͉̳͈ō̠͕͖̚f̝͍̠ ͕̲̞͖͑Z̖̫̤̫ͪa͉̬͈̗l͖͎g̳̥o̰̥̅!̣͔̲̻͊̄ ̙̘̦̹̦.
-* [`nested-logrus-formatter`](https://github.com/antonfisher/nested-logrus-formatter). Converts logrus fields to a nested structure.
-
-You can define your formatter by implementing the `Formatter` interface,
-requiring a `Format` method. `Format` takes an `*Entry`. `entry.Data` is a
-`Fields` type (`map[string]interface{}`) with all your fields as well as the
-default ones (see Entries section above):
-
-```go
-type MyJSONFormatter struct {
-}
-
-log.SetFormatter(new(MyJSONFormatter))
-
-func (f *MyJSONFormatter) Format(entry *Entry) ([]byte, error) {
- // Note this doesn't include Time, Level and Message which are available on
- // the Entry. Consult `godoc` on information about those fields or read the
- // source of the official loggers.
- serialized, err := json.Marshal(entry.Data)
- if err != nil {
- return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err)
- }
- return append(serialized, '\n'), nil
-}
-```
-
-#### Logger as an `io.Writer`
-
-Logrus can be transformed into an `io.Writer`. That writer is the end of an `io.Pipe` and it is your responsibility to close it.
-
-```go
-w := logger.Writer()
-defer w.Close()
-
-srv := http.Server{
- // create a stdlib log.Logger that writes to
- // logrus.Logger.
- ErrorLog: log.New(w, "", 0),
-}
-```
-
-Each line written to that writer will be printed the usual way, using formatters
-and hooks. The level for those entries is `info`.
-
-This means that we can override the standard library logger easily:
-
-```go
-logger := logrus.New()
-logger.Formatter = &logrus.JSONFormatter{}
-
-// Use logrus for standard log output
-// Note that `log` here references stdlib's log
-// Not logrus imported under the name `log`.
-log.SetOutput(logger.Writer())
-```
-
-#### Rotation
-
-Log rotation is not provided with Logrus. Log rotation should be done by an
-external program (like `logrotate(8)`) that can compress and delete old log
-entries. It should not be a feature of the application-level logger.
-
-#### Tools
-
-| Tool | Description |
-| ---- | ----------- |
-|[Logrus Mate](https://github.com/gogap/logrus_mate)|Logrus mate is a tool for Logrus to manage loggers, you can initial logger's level, hook and formatter by config file, the logger will generated with different config at different environment.|
-|[Logrus Viper Helper](https://github.com/heirko/go-contrib/tree/master/logrusHelper)|An Helper around Logrus to wrap with spf13/Viper to load configuration with fangs! And to simplify Logrus configuration use some behavior of [Logrus Mate](https://github.com/gogap/logrus_mate). [sample](https://github.com/heirko/iris-contrib/blob/master/middleware/logrus-logger/example) |
-
-#### Testing
-
-Logrus has a built in facility for asserting the presence of log messages. This is implemented through the `test` hook and provides:
-
-* decorators for existing logger (`test.NewLocal` and `test.NewGlobal`) which basically just add the `test` hook
-* a test logger (`test.NewNullLogger`) that just records log messages (and does not output any):
-
-```go
-import(
- "github.com/sirupsen/logrus"
- "github.com/sirupsen/logrus/hooks/test"
- "github.com/stretchr/testify/assert"
- "testing"
-)
-
-func TestSomething(t*testing.T){
- logger, hook := test.NewNullLogger()
- logger.Error("Helloerror")
-
- assert.Equal(t, 1, len(hook.Entries))
- assert.Equal(t, logrus.ErrorLevel, hook.LastEntry().Level)
- assert.Equal(t, "Helloerror", hook.LastEntry().Message)
-
- hook.Reset()
- assert.Nil(t, hook.LastEntry())
-}
-```
-
-#### Fatal handlers
-
-Logrus can register one or more functions that will be called when any `fatal`
-level message is logged. The registered handlers will be executed before
-logrus performs a `os.Exit(1)`. This behavior may be helpful if callers need
-to gracefully shutdown. Unlike a `panic("Something went wrong...")` call which can be intercepted with a deferred `recover` a call to `os.Exit(1)` can not be intercepted.
-
-```
-...
-handler := func() {
- // gracefully shutdown something...
-}
-logrus.RegisterExitHandler(handler)
-...
-```
-
-#### Thread safety
-
-By default, Logger is protected by a mutex for concurrent writes. The mutex is held when calling hooks and writing logs.
-If you are sure such locking is not needed, you can call logger.SetNoLock() to disable the locking.
-
-Situation when locking is not needed includes:
-
-* You have no hooks registered, or hooks calling is already thread-safe.
-
-* Writing to logger.Out is already thread-safe, for example:
-
- 1) logger.Out is protected by locks.
-
- 2) logger.Out is a os.File handler opened with `O_APPEND` flag, and every write is smaller than 4k. (This allow multi-thread/multi-process writing)
-
- (Refer to http://www.notthewizard.com/2014/06/17/are-files-appends-really-atomic/)
diff --git a/vendor/github.com/sirupsen/logrus/alt_exit.go b/vendor/github.com/sirupsen/logrus/alt_exit.go
deleted file mode 100644
index 8fd189e..0000000
--- a/vendor/github.com/sirupsen/logrus/alt_exit.go
+++ /dev/null
@@ -1,76 +0,0 @@
-package logrus
-
-// The following code was sourced and modified from the
-// https://github.com/tebeka/atexit package governed by the following license:
-//
-// Copyright (c) 2012 Miki Tebeka <miki.tebeka@gmail.com>.
-//
-// 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.
-
-import (
- "fmt"
- "os"
-)
-
-var handlers = []func(){}
-
-func runHandler(handler func()) {
- defer func() {
- if err := recover(); err != nil {
- fmt.Fprintln(os.Stderr, "Error: Logrus exit handler error:", err)
- }
- }()
-
- handler()
-}
-
-func runHandlers() {
- for _, handler := range handlers {
- runHandler(handler)
- }
-}
-
-// Exit runs all the Logrus atexit handlers and then terminates the program using os.Exit(code)
-func Exit(code int) {
- runHandlers()
- os.Exit(code)
-}
-
-// RegisterExitHandler appends a Logrus Exit handler to the list of handlers,
-// call logrus.Exit to invoke all handlers. The handlers will also be invoked when
-// any Fatal log entry is made.
-//
-// This method is useful when a caller wishes to use logrus to log a fatal
-// message but also needs to gracefully shutdown. An example usecase could be
-// closing database connections, or sending a alert that the application is
-// closing.
-func RegisterExitHandler(handler func()) {
- handlers = append(handlers, handler)
-}
-
-// DeferExitHandler prepends a Logrus Exit handler to the list of handlers,
-// call logrus.Exit to invoke all handlers. The handlers will also be invoked when
-// any Fatal log entry is made.
-//
-// This method is useful when a caller wishes to use logrus to log a fatal
-// message but also needs to gracefully shutdown. An example usecase could be
-// closing database connections, or sending a alert that the application is
-// closing.
-func DeferExitHandler(handler func()) {
- handlers = append([]func(){handler}, handlers...)
-}
diff --git a/vendor/github.com/sirupsen/logrus/appveyor.yml b/vendor/github.com/sirupsen/logrus/appveyor.yml
deleted file mode 100644
index 96c2ce1..0000000
--- a/vendor/github.com/sirupsen/logrus/appveyor.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-version: "{build}"
-platform: x64
-clone_folder: c:\gopath\src\github.com\sirupsen\logrus
-environment:
- GOPATH: c:\gopath
-branches:
- only:
- - master
-install:
- - set PATH=%GOPATH%\bin;c:\go\bin;%PATH%
- - go version
-build_script:
- - go get -t
- - go test
diff --git a/vendor/github.com/sirupsen/logrus/doc.go b/vendor/github.com/sirupsen/logrus/doc.go
deleted file mode 100644
index da67aba..0000000
--- a/vendor/github.com/sirupsen/logrus/doc.go
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-Package logrus is a structured logger for Go, completely API compatible with the standard library logger.
-
-
-The simplest way to use Logrus is simply the package-level exported logger:
-
- package main
-
- import (
- log "github.com/sirupsen/logrus"
- )
-
- func main() {
- log.WithFields(log.Fields{
- "animal": "walrus",
- "number": 1,
- "size": 10,
- }).Info("A walrus appears")
- }
-
-Output:
- time="2015-09-07T08:48:33Z" level=info msg="A walrus appears" animal=walrus number=1 size=10
-
-For a full guide visit https://github.com/sirupsen/logrus
-*/
-package logrus
diff --git a/vendor/github.com/sirupsen/logrus/entry.go b/vendor/github.com/sirupsen/logrus/entry.go
deleted file mode 100644
index 63e2558..0000000
--- a/vendor/github.com/sirupsen/logrus/entry.go
+++ /dev/null
@@ -1,407 +0,0 @@
-package logrus
-
-import (
- "bytes"
- "context"
- "fmt"
- "os"
- "reflect"
- "runtime"
- "strings"
- "sync"
- "time"
-)
-
-var (
- bufferPool *sync.Pool
-
- // qualified package name, cached at first use
- logrusPackage string
-
- // Positions in the call stack when tracing to report the calling method
- minimumCallerDepth int
-
- // Used for caller information initialisation
- callerInitOnce sync.Once
-)
-
-const (
- maximumCallerDepth int = 25
- knownLogrusFrames int = 4
-)
-
-func init() {
- bufferPool = &sync.Pool{
- New: func() interface{} {
- return new(bytes.Buffer)
- },
- }
-
- // start at the bottom of the stack before the package-name cache is primed
- minimumCallerDepth = 1
-}
-
-// Defines the key when adding errors using WithError.
-var ErrorKey = "error"
-
-// An entry is the final or intermediate Logrus logging entry. It contains all
-// the fields passed with WithField{,s}. It's finally logged when Trace, Debug,
-// Info, Warn, Error, Fatal or Panic is called on it. These objects can be
-// reused and passed around as much as you wish to avoid field duplication.
-type Entry struct {
- Logger *Logger
-
- // Contains all the fields set by the user.
- Data Fields
-
- // Time at which the log entry was created
- Time time.Time
-
- // Level the log entry was logged at: Trace, Debug, Info, Warn, Error, Fatal or Panic
- // This field will be set on entry firing and the value will be equal to the one in Logger struct field.
- Level Level
-
- // Calling method, with package name
- Caller *runtime.Frame
-
- // Message passed to Trace, Debug, Info, Warn, Error, Fatal or Panic
- Message string
-
- // When formatter is called in entry.log(), a Buffer may be set to entry
- Buffer *bytes.Buffer
-
- // Contains the context set by the user. Useful for hook processing etc.
- Context context.Context
-
- // err may contain a field formatting error
- err string
-}
-
-func NewEntry(logger *Logger) *Entry {
- return &Entry{
- Logger: logger,
- // Default is three fields, plus one optional. Give a little extra room.
- Data: make(Fields, 6),
- }
-}
-
-// Returns the string representation from the reader and ultimately the
-// formatter.
-func (entry *Entry) String() (string, error) {
- serialized, err := entry.Logger.Formatter.Format(entry)
- if err != nil {
- return "", err
- }
- str := string(serialized)
- return str, nil
-}
-
-// Add an error as single field (using the key defined in ErrorKey) to the Entry.
-func (entry *Entry) WithError(err error) *Entry {
- return entry.WithField(ErrorKey, err)
-}
-
-// Add a context to the Entry.
-func (entry *Entry) WithContext(ctx context.Context) *Entry {
- return &Entry{Logger: entry.Logger, Data: entry.Data, Time: entry.Time, err: entry.err, Context: ctx}
-}
-
-// Add a single field to the Entry.
-func (entry *Entry) WithField(key string, value interface{}) *Entry {
- return entry.WithFields(Fields{key: value})
-}
-
-// Add a map of fields to the Entry.
-func (entry *Entry) WithFields(fields Fields) *Entry {
- data := make(Fields, len(entry.Data)+len(fields))
- for k, v := range entry.Data {
- data[k] = v
- }
- fieldErr := entry.err
- for k, v := range fields {
- isErrField := false
- if t := reflect.TypeOf(v); t != nil {
- switch t.Kind() {
- case reflect.Func:
- isErrField = true
- case reflect.Ptr:
- isErrField = t.Elem().Kind() == reflect.Func
- }
- }
- if isErrField {
- tmp := fmt.Sprintf("can not add field %q", k)
- if fieldErr != "" {
- fieldErr = entry.err + ", " + tmp
- } else {
- fieldErr = tmp
- }
- } else {
- data[k] = v
- }
- }
- return &Entry{Logger: entry.Logger, Data: data, Time: entry.Time, err: fieldErr, Context: entry.Context}
-}
-
-// Overrides the time of the Entry.
-func (entry *Entry) WithTime(t time.Time) *Entry {
- return &Entry{Logger: entry.Logger, Data: entry.Data, Time: t, err: entry.err, Context: entry.Context}
-}
-
-// getPackageName reduces a fully qualified function name to the package name
-// There really ought to be to be a better way...
-func getPackageName(f string) string {
- for {
- lastPeriod := strings.LastIndex(f, ".")
- lastSlash := strings.LastIndex(f, "/")
- if lastPeriod > lastSlash {
- f = f[:lastPeriod]
- } else {
- break
- }
- }
-
- return f
-}
-
-// getCaller retrieves the name of the first non-logrus calling function
-func getCaller() *runtime.Frame {
-
- // cache this package's fully-qualified name
- callerInitOnce.Do(func() {
- pcs := make([]uintptr, 2)
- _ = runtime.Callers(0, pcs)
- logrusPackage = getPackageName(runtime.FuncForPC(pcs[1]).Name())
-
- // now that we have the cache, we can skip a minimum count of known-logrus functions
- // XXX this is dubious, the number of frames may vary
- minimumCallerDepth = knownLogrusFrames
- })
-
- // Restrict the lookback frames to avoid runaway lookups
- pcs := make([]uintptr, maximumCallerDepth)
- depth := runtime.Callers(minimumCallerDepth, pcs)
- frames := runtime.CallersFrames(pcs[:depth])
-
- for f, again := frames.Next(); again; f, again = frames.Next() {
- pkg := getPackageName(f.Function)
-
- // If the caller isn't part of this package, we're done
- if pkg != logrusPackage {
- return &f
- }
- }
-
- // if we got here, we failed to find the caller's context
- return nil
-}
-
-func (entry Entry) HasCaller() (has bool) {
- return entry.Logger != nil &&
- entry.Logger.ReportCaller &&
- entry.Caller != nil
-}
-
-// This function is not declared with a pointer value because otherwise
-// race conditions will occur when using multiple goroutines
-func (entry Entry) log(level Level, msg string) {
- var buffer *bytes.Buffer
-
- // Default to now, but allow users to override if they want.
- //
- // We don't have to worry about polluting future calls to Entry#log()
- // with this assignment because this function is declared with a
- // non-pointer receiver.
- if entry.Time.IsZero() {
- entry.Time = time.Now()
- }
-
- entry.Level = level
- entry.Message = msg
- if entry.Logger.ReportCaller {
- entry.Caller = getCaller()
- }
-
- entry.fireHooks()
-
- buffer = bufferPool.Get().(*bytes.Buffer)
- buffer.Reset()
- defer bufferPool.Put(buffer)
- entry.Buffer = buffer
-
- entry.write()
-
- entry.Buffer = nil
-
- // To avoid Entry#log() returning a value that only would make sense for
- // panic() to use in Entry#Panic(), we avoid the allocation by checking
- // directly here.
- if level <= PanicLevel {
- panic(&entry)
- }
-}
-
-func (entry *Entry) fireHooks() {
- entry.Logger.mu.Lock()
- defer entry.Logger.mu.Unlock()
- err := entry.Logger.Hooks.Fire(entry.Level, entry)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Failed to fire hook: %v\n", err)
- }
-}
-
-func (entry *Entry) write() {
- entry.Logger.mu.Lock()
- defer entry.Logger.mu.Unlock()
- serialized, err := entry.Logger.Formatter.Format(entry)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Failed to obtain reader, %v\n", err)
- } else {
- _, err = entry.Logger.Out.Write(serialized)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Failed to write to log, %v\n", err)
- }
- }
-}
-
-func (entry *Entry) Log(level Level, args ...interface{}) {
- if entry.Logger.IsLevelEnabled(level) {
- entry.log(level, fmt.Sprint(args...))
- }
-}
-
-func (entry *Entry) Trace(args ...interface{}) {
- entry.Log(TraceLevel, args...)
-}
-
-func (entry *Entry) Debug(args ...interface{}) {
- entry.Log(DebugLevel, args...)
-}
-
-func (entry *Entry) Print(args ...interface{}) {
- entry.Info(args...)
-}
-
-func (entry *Entry) Info(args ...interface{}) {
- entry.Log(InfoLevel, args...)
-}
-
-func (entry *Entry) Warn(args ...interface{}) {
- entry.Log(WarnLevel, args...)
-}
-
-func (entry *Entry) Warning(args ...interface{}) {
- entry.Warn(args...)
-}
-
-func (entry *Entry) Error(args ...interface{}) {
- entry.Log(ErrorLevel, args...)
-}
-
-func (entry *Entry) Fatal(args ...interface{}) {
- entry.Log(FatalLevel, args...)
- entry.Logger.Exit(1)
-}
-
-func (entry *Entry) Panic(args ...interface{}) {
- entry.Log(PanicLevel, args...)
- panic(fmt.Sprint(args...))
-}
-
-// Entry Printf family functions
-
-func (entry *Entry) Logf(level Level, format string, args ...interface{}) {
- if entry.Logger.IsLevelEnabled(level) {
- entry.Log(level, fmt.Sprintf(format, args...))
- }
-}
-
-func (entry *Entry) Tracef(format string, args ...interface{}) {
- entry.Logf(TraceLevel, format, args...)
-}
-
-func (entry *Entry) Debugf(format string, args ...interface{}) {
- entry.Logf(DebugLevel, format, args...)
-}
-
-func (entry *Entry) Infof(format string, args ...interface{}) {
- entry.Logf(InfoLevel, format, args...)
-}
-
-func (entry *Entry) Printf(format string, args ...interface{}) {
- entry.Infof(format, args...)
-}
-
-func (entry *Entry) Warnf(format string, args ...interface{}) {
- entry.Logf(WarnLevel, format, args...)
-}
-
-func (entry *Entry) Warningf(format string, args ...interface{}) {
- entry.Warnf(format, args...)
-}
-
-func (entry *Entry) Errorf(format string, args ...interface{}) {
- entry.Logf(ErrorLevel, format, args...)
-}
-
-func (entry *Entry) Fatalf(format string, args ...interface{}) {
- entry.Logf(FatalLevel, format, args...)
- entry.Logger.Exit(1)
-}
-
-func (entry *Entry) Panicf(format string, args ...interface{}) {
- entry.Logf(PanicLevel, format, args...)
-}
-
-// Entry Println family functions
-
-func (entry *Entry) Logln(level Level, args ...interface{}) {
- if entry.Logger.IsLevelEnabled(level) {
- entry.Log(level, entry.sprintlnn(args...))
- }
-}
-
-func (entry *Entry) Traceln(args ...interface{}) {
- entry.Logln(TraceLevel, args...)
-}
-
-func (entry *Entry) Debugln(args ...interface{}) {
- entry.Logln(DebugLevel, args...)
-}
-
-func (entry *Entry) Infoln(args ...interface{}) {
- entry.Logln(InfoLevel, args...)
-}
-
-func (entry *Entry) Println(args ...interface{}) {
- entry.Infoln(args...)
-}
-
-func (entry *Entry) Warnln(args ...interface{}) {
- entry.Logln(WarnLevel, args...)
-}
-
-func (entry *Entry) Warningln(args ...interface{}) {
- entry.Warnln(args...)
-}
-
-func (entry *Entry) Errorln(args ...interface{}) {
- entry.Logln(ErrorLevel, args...)
-}
-
-func (entry *Entry) Fatalln(args ...interface{}) {
- entry.Logln(FatalLevel, args...)
- entry.Logger.Exit(1)
-}
-
-func (entry *Entry) Panicln(args ...interface{}) {
- entry.Logln(PanicLevel, args...)
-}
-
-// Sprintlnn => Sprint no newline. This is to get the behavior of how
-// fmt.Sprintln where spaces are always added between operands, regardless of
-// their type. Instead of vendoring the Sprintln implementation to spare a
-// string allocation, we do the simplest thing.
-func (entry *Entry) sprintlnn(args ...interface{}) string {
- msg := fmt.Sprintln(args...)
- return msg[:len(msg)-1]
-}
diff --git a/vendor/github.com/sirupsen/logrus/exported.go b/vendor/github.com/sirupsen/logrus/exported.go
deleted file mode 100644
index 62fc2f2..0000000
--- a/vendor/github.com/sirupsen/logrus/exported.go
+++ /dev/null
@@ -1,225 +0,0 @@
-package logrus
-
-import (
- "context"
- "io"
- "time"
-)
-
-var (
- // std is the name of the standard logger in stdlib `log`
- std = New()
-)
-
-func StandardLogger() *Logger {
- return std
-}
-
-// SetOutput sets the standard logger output.
-func SetOutput(out io.Writer) {
- std.SetOutput(out)
-}
-
-// SetFormatter sets the standard logger formatter.
-func SetFormatter(formatter Formatter) {
- std.SetFormatter(formatter)
-}
-
-// SetReportCaller sets whether the standard logger will include the calling
-// method as a field.
-func SetReportCaller(include bool) {
- std.SetReportCaller(include)
-}
-
-// SetLevel sets the standard logger level.
-func SetLevel(level Level) {
- std.SetLevel(level)
-}
-
-// GetLevel returns the standard logger level.
-func GetLevel() Level {
- return std.GetLevel()
-}
-
-// IsLevelEnabled checks if the log level of the standard logger is greater than the level param
-func IsLevelEnabled(level Level) bool {
- return std.IsLevelEnabled(level)
-}
-
-// AddHook adds a hook to the standard logger hooks.
-func AddHook(hook Hook) {
- std.AddHook(hook)
-}
-
-// WithError creates an entry from the standard logger and adds an error to it, using the value defined in ErrorKey as key.
-func WithError(err error) *Entry {
- return std.WithField(ErrorKey, err)
-}
-
-// WithContext creates an entry from the standard logger and adds a context to it.
-func WithContext(ctx context.Context) *Entry {
- return std.WithContext(ctx)
-}
-
-// WithField creates an entry from the standard logger and adds a field to
-// it. If you want multiple fields, use `WithFields`.
-//
-// Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal
-// or Panic on the Entry it returns.
-func WithField(key string, value interface{}) *Entry {
- return std.WithField(key, value)
-}
-
-// WithFields creates an entry from the standard logger and adds multiple
-// fields to it. This is simply a helper for `WithField`, invoking it
-// once for each field.
-//
-// Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal
-// or Panic on the Entry it returns.
-func WithFields(fields Fields) *Entry {
- return std.WithFields(fields)
-}
-
-// WithTime creats an entry from the standard logger and overrides the time of
-// logs generated with it.
-//
-// Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal
-// or Panic on the Entry it returns.
-func WithTime(t time.Time) *Entry {
- return std.WithTime(t)
-}
-
-// Trace logs a message at level Trace on the standard logger.
-func Trace(args ...interface{}) {
- std.Trace(args...)
-}
-
-// Debug logs a message at level Debug on the standard logger.
-func Debug(args ...interface{}) {
- std.Debug(args...)
-}
-
-// Print logs a message at level Info on the standard logger.
-func Print(args ...interface{}) {
- std.Print(args...)
-}
-
-// Info logs a message at level Info on the standard logger.
-func Info(args ...interface{}) {
- std.Info(args...)
-}
-
-// Warn logs a message at level Warn on the standard logger.
-func Warn(args ...interface{}) {
- std.Warn(args...)
-}
-
-// Warning logs a message at level Warn on the standard logger.
-func Warning(args ...interface{}) {
- std.Warning(args...)
-}
-
-// Error logs a message at level Error on the standard logger.
-func Error(args ...interface{}) {
- std.Error(args...)
-}
-
-// Panic logs a message at level Panic on the standard logger.
-func Panic(args ...interface{}) {
- std.Panic(args...)
-}
-
-// Fatal logs a message at level Fatal on the standard logger then the process will exit with status set to 1.
-func Fatal(args ...interface{}) {
- std.Fatal(args...)
-}
-
-// Tracef logs a message at level Trace on the standard logger.
-func Tracef(format string, args ...interface{}) {
- std.Tracef(format, args...)
-}
-
-// Debugf logs a message at level Debug on the standard logger.
-func Debugf(format string, args ...interface{}) {
- std.Debugf(format, args...)
-}
-
-// Printf logs a message at level Info on the standard logger.
-func Printf(format string, args ...interface{}) {
- std.Printf(format, args...)
-}
-
-// Infof logs a message at level Info on the standard logger.
-func Infof(format string, args ...interface{}) {
- std.Infof(format, args...)
-}
-
-// Warnf logs a message at level Warn on the standard logger.
-func Warnf(format string, args ...interface{}) {
- std.Warnf(format, args...)
-}
-
-// Warningf logs a message at level Warn on the standard logger.
-func Warningf(format string, args ...interface{}) {
- std.Warningf(format, args...)
-}
-
-// Errorf logs a message at level Error on the standard logger.
-func Errorf(format string, args ...interface{}) {
- std.Errorf(format, args...)
-}
-
-// Panicf logs a message at level Panic on the standard logger.
-func Panicf(format string, args ...interface{}) {
- std.Panicf(format, args...)
-}
-
-// Fatalf logs a message at level Fatal on the standard logger then the process will exit with status set to 1.
-func Fatalf(format string, args ...interface{}) {
- std.Fatalf(format, args...)
-}
-
-// Traceln logs a message at level Trace on the standard logger.
-func Traceln(args ...interface{}) {
- std.Traceln(args...)
-}
-
-// Debugln logs a message at level Debug on the standard logger.
-func Debugln(args ...interface{}) {
- std.Debugln(args...)
-}
-
-// Println logs a message at level Info on the standard logger.
-func Println(args ...interface{}) {
- std.Println(args...)
-}
-
-// Infoln logs a message at level Info on the standard logger.
-func Infoln(args ...interface{}) {
- std.Infoln(args...)
-}
-
-// Warnln logs a message at level Warn on the standard logger.
-func Warnln(args ...interface{}) {
- std.Warnln(args...)
-}
-
-// Warningln logs a message at level Warn on the standard logger.
-func Warningln(args ...interface{}) {
- std.Warningln(args...)
-}
-
-// Errorln logs a message at level Error on the standard logger.
-func Errorln(args ...interface{}) {
- std.Errorln(args...)
-}
-
-// Panicln logs a message at level Panic on the standard logger.
-func Panicln(args ...interface{}) {
- std.Panicln(args...)
-}
-
-// Fatalln logs a message at level Fatal on the standard logger then the process will exit with status set to 1.
-func Fatalln(args ...interface{}) {
- std.Fatalln(args...)
-}
diff --git a/vendor/github.com/sirupsen/logrus/formatter.go b/vendor/github.com/sirupsen/logrus/formatter.go
deleted file mode 100644
index 4088837..0000000
--- a/vendor/github.com/sirupsen/logrus/formatter.go
+++ /dev/null
@@ -1,78 +0,0 @@
-package logrus
-
-import "time"
-
-// Default key names for the default fields
-const (
- defaultTimestampFormat = time.RFC3339
- FieldKeyMsg = "msg"
- FieldKeyLevel = "level"
- FieldKeyTime = "time"
- FieldKeyLogrusError = "logrus_error"
- FieldKeyFunc = "func"
- FieldKeyFile = "file"
-)
-
-// The Formatter interface is used to implement a custom Formatter. It takes an
-// `Entry`. It exposes all the fields, including the default ones:
-//
-// * `entry.Data["msg"]`. The message passed from Info, Warn, Error ..
-// * `entry.Data["time"]`. The timestamp.
-// * `entry.Data["level"]. The level the entry was logged at.
-//
-// Any additional fields added with `WithField` or `WithFields` are also in
-// `entry.Data`. Format is expected to return an array of bytes which are then
-// logged to `logger.Out`.
-type Formatter interface {
- Format(*Entry) ([]byte, error)
-}
-
-// This is to not silently overwrite `time`, `msg`, `func` and `level` fields when
-// dumping it. If this code wasn't there doing:
-//
-// logrus.WithField("level", 1).Info("hello")
-//
-// Would just silently drop the user provided level. Instead with this code
-// it'll logged as:
-//
-// {"level": "info", "fields.level": 1, "msg": "hello", "time": "..."}
-//
-// It's not exported because it's still using Data in an opinionated way. It's to
-// avoid code duplication between the two default formatters.
-func prefixFieldClashes(data Fields, fieldMap FieldMap, reportCaller bool) {
- timeKey := fieldMap.resolve(FieldKeyTime)
- if t, ok := data[timeKey]; ok {
- data["fields."+timeKey] = t
- delete(data, timeKey)
- }
-
- msgKey := fieldMap.resolve(FieldKeyMsg)
- if m, ok := data[msgKey]; ok {
- data["fields."+msgKey] = m
- delete(data, msgKey)
- }
-
- levelKey := fieldMap.resolve(FieldKeyLevel)
- if l, ok := data[levelKey]; ok {
- data["fields."+levelKey] = l
- delete(data, levelKey)
- }
-
- logrusErrKey := fieldMap.resolve(FieldKeyLogrusError)
- if l, ok := data[logrusErrKey]; ok {
- data["fields."+logrusErrKey] = l
- delete(data, logrusErrKey)
- }
-
- // If reportCaller is not set, 'func' will not conflict.
- if reportCaller {
- funcKey := fieldMap.resolve(FieldKeyFunc)
- if l, ok := data[funcKey]; ok {
- data["fields."+funcKey] = l
- }
- fileKey := fieldMap.resolve(FieldKeyFile)
- if l, ok := data[fileKey]; ok {
- data["fields."+fileKey] = l
- }
- }
-}
diff --git a/vendor/github.com/sirupsen/logrus/go.mod b/vendor/github.com/sirupsen/logrus/go.mod
deleted file mode 100644
index 12fdf98..0000000
--- a/vendor/github.com/sirupsen/logrus/go.mod
+++ /dev/null
@@ -1,10 +0,0 @@
-module github.com/sirupsen/logrus
-
-require (
- github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/konsorten/go-windows-terminal-sequences v1.0.1
- github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/stretchr/objx v0.1.1 // indirect
- github.com/stretchr/testify v1.2.2
- golang.org/x/sys v0.0.0-20190422165155-953cdadca894
-)
diff --git a/vendor/github.com/sirupsen/logrus/go.sum b/vendor/github.com/sirupsen/logrus/go.sum
deleted file mode 100644
index 596c318..0000000
--- a/vendor/github.com/sirupsen/logrus/go.sum
+++ /dev/null
@@ -1,16 +0,0 @@
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f2633dfe h1:CHRGQ8V7OlCYtwaKPJi3iA7J+YdNKdo8j7nG5IgDhjs=
-github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f2633dfe/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
-github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33 h1:I6FyU15t786LL7oL/hn43zqTuEGr4PN7F4XJ1p4E3Y8=
-golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
diff --git a/vendor/github.com/sirupsen/logrus/hooks.go b/vendor/github.com/sirupsen/logrus/hooks.go
deleted file mode 100644
index 3f151cd..0000000
--- a/vendor/github.com/sirupsen/logrus/hooks.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package logrus
-
-// A hook to be fired when logging on the logging levels returned from
-// `Levels()` on your implementation of the interface. Note that this is not
-// fired in a goroutine or a channel with workers, you should handle such
-// functionality yourself if your call is non-blocking and you don't wish for
-// the logging calls for levels returned from `Levels()` to block.
-type Hook interface {
- Levels() []Level
- Fire(*Entry) error
-}
-
-// Internal type for storing the hooks on a logger instance.
-type LevelHooks map[Level][]Hook
-
-// Add a hook to an instance of logger. This is called with
-// `log.Hooks.Add(new(MyHook))` where `MyHook` implements the `Hook` interface.
-func (hooks LevelHooks) Add(hook Hook) {
- for _, level := range hook.Levels() {
- hooks[level] = append(hooks[level], hook)
- }
-}
-
-// Fire all the hooks for the passed level. Used by `entry.log` to fire
-// appropriate hooks for a log entry.
-func (hooks LevelHooks) Fire(level Level, entry *Entry) error {
- for _, hook := range hooks[level] {
- if err := hook.Fire(entry); err != nil {
- return err
- }
- }
-
- return nil
-}
diff --git a/vendor/github.com/sirupsen/logrus/json_formatter.go b/vendor/github.com/sirupsen/logrus/json_formatter.go
deleted file mode 100644
index 098a21a..0000000
--- a/vendor/github.com/sirupsen/logrus/json_formatter.go
+++ /dev/null
@@ -1,121 +0,0 @@
-package logrus
-
-import (
- "bytes"
- "encoding/json"
- "fmt"
- "runtime"
-)
-
-type fieldKey string
-
-// FieldMap allows customization of the key names for default fields.
-type FieldMap map[fieldKey]string
-
-func (f FieldMap) resolve(key fieldKey) string {
- if k, ok := f[key]; ok {
- return k
- }
-
- return string(key)
-}
-
-// JSONFormatter formats logs into parsable json
-type JSONFormatter struct {
- // TimestampFormat sets the format used for marshaling timestamps.
- TimestampFormat string
-
- // DisableTimestamp allows disabling automatic timestamps in output
- DisableTimestamp bool
-
- // DataKey allows users to put all the log entry parameters into a nested dictionary at a given key.
- DataKey string
-
- // FieldMap allows users to customize the names of keys for default fields.
- // As an example:
- // formatter := &JSONFormatter{
- // FieldMap: FieldMap{
- // FieldKeyTime: "@timestamp",
- // FieldKeyLevel: "@level",
- // FieldKeyMsg: "@message",
- // FieldKeyFunc: "@caller",
- // },
- // }
- FieldMap FieldMap
-
- // CallerPrettyfier can be set by the user to modify the content
- // of the function and file keys in the json data when ReportCaller is
- // activated. If any of the returned value is the empty string the
- // corresponding key will be removed from json fields.
- CallerPrettyfier func(*runtime.Frame) (function string, file string)
-
- // PrettyPrint will indent all json logs
- PrettyPrint bool
-}
-
-// Format renders a single log entry
-func (f *JSONFormatter) Format(entry *Entry) ([]byte, error) {
- data := make(Fields, len(entry.Data)+4)
- for k, v := range entry.Data {
- switch v := v.(type) {
- case error:
- // Otherwise errors are ignored by `encoding/json`
- // https://github.com/sirupsen/logrus/issues/137
- data[k] = v.Error()
- default:
- data[k] = v
- }
- }
-
- if f.DataKey != "" {
- newData := make(Fields, 4)
- newData[f.DataKey] = data
- data = newData
- }
-
- prefixFieldClashes(data, f.FieldMap, entry.HasCaller())
-
- timestampFormat := f.TimestampFormat
- if timestampFormat == "" {
- timestampFormat = defaultTimestampFormat
- }
-
- if entry.err != "" {
- data[f.FieldMap.resolve(FieldKeyLogrusError)] = entry.err
- }
- if !f.DisableTimestamp {
- data[f.FieldMap.resolve(FieldKeyTime)] = entry.Time.Format(timestampFormat)
- }
- data[f.FieldMap.resolve(FieldKeyMsg)] = entry.Message
- data[f.FieldMap.resolve(FieldKeyLevel)] = entry.Level.String()
- if entry.HasCaller() {
- funcVal := entry.Caller.Function
- fileVal := fmt.Sprintf("%s:%d", entry.Caller.File, entry.Caller.Line)
- if f.CallerPrettyfier != nil {
- funcVal, fileVal = f.CallerPrettyfier(entry.Caller)
- }
- if funcVal != "" {
- data[f.FieldMap.resolve(FieldKeyFunc)] = funcVal
- }
- if fileVal != "" {
- data[f.FieldMap.resolve(FieldKeyFile)] = fileVal
- }
- }
-
- var b *bytes.Buffer
- if entry.Buffer != nil {
- b = entry.Buffer
- } else {
- b = &bytes.Buffer{}
- }
-
- encoder := json.NewEncoder(b)
- if f.PrettyPrint {
- encoder.SetIndent("", " ")
- }
- if err := encoder.Encode(data); err != nil {
- return nil, fmt.Errorf("failed to marshal fields to JSON, %v", err)
- }
-
- return b.Bytes(), nil
-}
diff --git a/vendor/github.com/sirupsen/logrus/logger.go b/vendor/github.com/sirupsen/logrus/logger.go
deleted file mode 100644
index c0c0b1e..0000000
--- a/vendor/github.com/sirupsen/logrus/logger.go
+++ /dev/null
@@ -1,351 +0,0 @@
-package logrus
-
-import (
- "context"
- "io"
- "os"
- "sync"
- "sync/atomic"
- "time"
-)
-
-type Logger struct {
- // The logs are `io.Copy`'d to this in a mutex. It's common to set this to a
- // file, or leave it default which is `os.Stderr`. You can also set this to
- // something more adventurous, such as logging to Kafka.
- Out io.Writer
- // Hooks for the logger instance. These allow firing events based on logging
- // levels and log entries. For example, to send errors to an error tracking
- // service, log to StatsD or dump the core on fatal errors.
- Hooks LevelHooks
- // All log entries pass through the formatter before logged to Out. The
- // included formatters are `TextFormatter` and `JSONFormatter` for which
- // TextFormatter is the default. In development (when a TTY is attached) it
- // logs with colors, but to a file it wouldn't. You can easily implement your
- // own that implements the `Formatter` interface, see the `README` or included
- // formatters for examples.
- Formatter Formatter
-
- // Flag for whether to log caller info (off by default)
- ReportCaller bool
-
- // The logging level the logger should log at. This is typically (and defaults
- // to) `logrus.Info`, which allows Info(), Warn(), Error() and Fatal() to be
- // logged.
- Level Level
- // Used to sync writing to the log. Locking is enabled by Default
- mu MutexWrap
- // Reusable empty entry
- entryPool sync.Pool
- // Function to exit the application, defaults to `os.Exit()`
- ExitFunc exitFunc
-}
-
-type exitFunc func(int)
-
-type MutexWrap struct {
- lock sync.Mutex
- disabled bool
-}
-
-func (mw *MutexWrap) Lock() {
- if !mw.disabled {
- mw.lock.Lock()
- }
-}
-
-func (mw *MutexWrap) Unlock() {
- if !mw.disabled {
- mw.lock.Unlock()
- }
-}
-
-func (mw *MutexWrap) Disable() {
- mw.disabled = true
-}
-
-// Creates a new logger. Configuration should be set by changing `Formatter`,
-// `Out` and `Hooks` directly on the default logger instance. You can also just
-// instantiate your own:
-//
-// var log = &Logger{
-// Out: os.Stderr,
-// Formatter: new(JSONFormatter),
-// Hooks: make(LevelHooks),
-// Level: logrus.DebugLevel,
-// }
-//
-// It's recommended to make this a global instance called `log`.
-func New() *Logger {
- return &Logger{
- Out: os.Stderr,
- Formatter: new(TextFormatter),
- Hooks: make(LevelHooks),
- Level: InfoLevel,
- ExitFunc: os.Exit,
- ReportCaller: false,
- }
-}
-
-func (logger *Logger) newEntry() *Entry {
- entry, ok := logger.entryPool.Get().(*Entry)
- if ok {
- return entry
- }
- return NewEntry(logger)
-}
-
-func (logger *Logger) releaseEntry(entry *Entry) {
- entry.Data = map[string]interface{}{}
- logger.entryPool.Put(entry)
-}
-
-// Adds a field to the log entry, note that it doesn't log until you call
-// Debug, Print, Info, Warn, Error, Fatal or Panic. It only creates a log entry.
-// If you want multiple fields, use `WithFields`.
-func (logger *Logger) WithField(key string, value interface{}) *Entry {
- entry := logger.newEntry()
- defer logger.releaseEntry(entry)
- return entry.WithField(key, value)
-}
-
-// Adds a struct of fields to the log entry. All it does is call `WithField` for
-// each `Field`.
-func (logger *Logger) WithFields(fields Fields) *Entry {
- entry := logger.newEntry()
- defer logger.releaseEntry(entry)
- return entry.WithFields(fields)
-}
-
-// Add an error as single field to the log entry. All it does is call
-// `WithError` for the given `error`.
-func (logger *Logger) WithError(err error) *Entry {
- entry := logger.newEntry()
- defer logger.releaseEntry(entry)
- return entry.WithError(err)
-}
-
-// Add a context to the log entry.
-func (logger *Logger) WithContext(ctx context.Context) *Entry {
- entry := logger.newEntry()
- defer logger.releaseEntry(entry)
- return entry.WithContext(ctx)
-}
-
-// Overrides the time of the log entry.
-func (logger *Logger) WithTime(t time.Time) *Entry {
- entry := logger.newEntry()
- defer logger.releaseEntry(entry)
- return entry.WithTime(t)
-}
-
-func (logger *Logger) Logf(level Level, format string, args ...interface{}) {
- if logger.IsLevelEnabled(level) {
- entry := logger.newEntry()
- entry.Logf(level, format, args...)
- logger.releaseEntry(entry)
- }
-}
-
-func (logger *Logger) Tracef(format string, args ...interface{}) {
- logger.Logf(TraceLevel, format, args...)
-}
-
-func (logger *Logger) Debugf(format string, args ...interface{}) {
- logger.Logf(DebugLevel, format, args...)
-}
-
-func (logger *Logger) Infof(format string, args ...interface{}) {
- logger.Logf(InfoLevel, format, args...)
-}
-
-func (logger *Logger) Printf(format string, args ...interface{}) {
- entry := logger.newEntry()
- entry.Printf(format, args...)
- logger.releaseEntry(entry)
-}
-
-func (logger *Logger) Warnf(format string, args ...interface{}) {
- logger.Logf(WarnLevel, format, args...)
-}
-
-func (logger *Logger) Warningf(format string, args ...interface{}) {
- logger.Warnf(format, args...)
-}
-
-func (logger *Logger) Errorf(format string, args ...interface{}) {
- logger.Logf(ErrorLevel, format, args...)
-}
-
-func (logger *Logger) Fatalf(format string, args ...interface{}) {
- logger.Logf(FatalLevel, format, args...)
- logger.Exit(1)
-}
-
-func (logger *Logger) Panicf(format string, args ...interface{}) {
- logger.Logf(PanicLevel, format, args...)
-}
-
-func (logger *Logger) Log(level Level, args ...interface{}) {
- if logger.IsLevelEnabled(level) {
- entry := logger.newEntry()
- entry.Log(level, args...)
- logger.releaseEntry(entry)
- }
-}
-
-func (logger *Logger) Trace(args ...interface{}) {
- logger.Log(TraceLevel, args...)
-}
-
-func (logger *Logger) Debug(args ...interface{}) {
- logger.Log(DebugLevel, args...)
-}
-
-func (logger *Logger) Info(args ...interface{}) {
- logger.Log(InfoLevel, args...)
-}
-
-func (logger *Logger) Print(args ...interface{}) {
- entry := logger.newEntry()
- entry.Print(args...)
- logger.releaseEntry(entry)
-}
-
-func (logger *Logger) Warn(args ...interface{}) {
- logger.Log(WarnLevel, args...)
-}
-
-func (logger *Logger) Warning(args ...interface{}) {
- logger.Warn(args...)
-}
-
-func (logger *Logger) Error(args ...interface{}) {
- logger.Log(ErrorLevel, args...)
-}
-
-func (logger *Logger) Fatal(args ...interface{}) {
- logger.Log(FatalLevel, args...)
- logger.Exit(1)
-}
-
-func (logger *Logger) Panic(args ...interface{}) {
- logger.Log(PanicLevel, args...)
-}
-
-func (logger *Logger) Logln(level Level, args ...interface{}) {
- if logger.IsLevelEnabled(level) {
- entry := logger.newEntry()
- entry.Logln(level, args...)
- logger.releaseEntry(entry)
- }
-}
-
-func (logger *Logger) Traceln(args ...interface{}) {
- logger.Logln(TraceLevel, args...)
-}
-
-func (logger *Logger) Debugln(args ...interface{}) {
- logger.Logln(DebugLevel, args...)
-}
-
-func (logger *Logger) Infoln(args ...interface{}) {
- logger.Logln(InfoLevel, args...)
-}
-
-func (logger *Logger) Println(args ...interface{}) {
- entry := logger.newEntry()
- entry.Println(args...)
- logger.releaseEntry(entry)
-}
-
-func (logger *Logger) Warnln(args ...interface{}) {
- logger.Logln(WarnLevel, args...)
-}
-
-func (logger *Logger) Warningln(args ...interface{}) {
- logger.Warnln(args...)
-}
-
-func (logger *Logger) Errorln(args ...interface{}) {
- logger.Logln(ErrorLevel, args...)
-}
-
-func (logger *Logger) Fatalln(args ...interface{}) {
- logger.Logln(FatalLevel, args...)
- logger.Exit(1)
-}
-
-func (logger *Logger) Panicln(args ...interface{}) {
- logger.Logln(PanicLevel, args...)
-}
-
-func (logger *Logger) Exit(code int) {
- runHandlers()
- if logger.ExitFunc == nil {
- logger.ExitFunc = os.Exit
- }
- logger.ExitFunc(code)
-}
-
-//When file is opened with appending mode, it's safe to
-//write concurrently to a file (within 4k message on Linux).
-//In these cases user can choose to disable the lock.
-func (logger *Logger) SetNoLock() {
- logger.mu.Disable()
-}
-
-func (logger *Logger) level() Level {
- return Level(atomic.LoadUint32((*uint32)(&logger.Level)))
-}
-
-// SetLevel sets the logger level.
-func (logger *Logger) SetLevel(level Level) {
- atomic.StoreUint32((*uint32)(&logger.Level), uint32(level))
-}
-
-// GetLevel returns the logger level.
-func (logger *Logger) GetLevel() Level {
- return logger.level()
-}
-
-// AddHook adds a hook to the logger hooks.
-func (logger *Logger) AddHook(hook Hook) {
- logger.mu.Lock()
- defer logger.mu.Unlock()
- logger.Hooks.Add(hook)
-}
-
-// IsLevelEnabled checks if the log level of the logger is greater than the level param
-func (logger *Logger) IsLevelEnabled(level Level) bool {
- return logger.level() >= level
-}
-
-// SetFormatter sets the logger formatter.
-func (logger *Logger) SetFormatter(formatter Formatter) {
- logger.mu.Lock()
- defer logger.mu.Unlock()
- logger.Formatter = formatter
-}
-
-// SetOutput sets the logger output.
-func (logger *Logger) SetOutput(output io.Writer) {
- logger.mu.Lock()
- defer logger.mu.Unlock()
- logger.Out = output
-}
-
-func (logger *Logger) SetReportCaller(reportCaller bool) {
- logger.mu.Lock()
- defer logger.mu.Unlock()
- logger.ReportCaller = reportCaller
-}
-
-// ReplaceHooks replaces the logger hooks and returns the old ones
-func (logger *Logger) ReplaceHooks(hooks LevelHooks) LevelHooks {
- logger.mu.Lock()
- oldHooks := logger.Hooks
- logger.Hooks = hooks
- logger.mu.Unlock()
- return oldHooks
-}
diff --git a/vendor/github.com/sirupsen/logrus/logrus.go b/vendor/github.com/sirupsen/logrus/logrus.go
deleted file mode 100644
index 8644761..0000000
--- a/vendor/github.com/sirupsen/logrus/logrus.go
+++ /dev/null
@@ -1,186 +0,0 @@
-package logrus
-
-import (
- "fmt"
- "log"
- "strings"
-)
-
-// Fields type, used to pass to `WithFields`.
-type Fields map[string]interface{}
-
-// Level type
-type Level uint32
-
-// Convert the Level to a string. E.g. PanicLevel becomes "panic".
-func (level Level) String() string {
- if b, err := level.MarshalText(); err == nil {
- return string(b)
- } else {
- return "unknown"
- }
-}
-
-// ParseLevel takes a string level and returns the Logrus log level constant.
-func ParseLevel(lvl string) (Level, error) {
- switch strings.ToLower(lvl) {
- case "panic":
- return PanicLevel, nil
- case "fatal":
- return FatalLevel, nil
- case "error":
- return ErrorLevel, nil
- case "warn", "warning":
- return WarnLevel, nil
- case "info":
- return InfoLevel, nil
- case "debug":
- return DebugLevel, nil
- case "trace":
- return TraceLevel, nil
- }
-
- var l Level
- return l, fmt.Errorf("not a valid logrus Level: %q", lvl)
-}
-
-// UnmarshalText implements encoding.TextUnmarshaler.
-func (level *Level) UnmarshalText(text []byte) error {
- l, err := ParseLevel(string(text))
- if err != nil {
- return err
- }
-
- *level = Level(l)
-
- return nil
-}
-
-func (level Level) MarshalText() ([]byte, error) {
- switch level {
- case TraceLevel:
- return []byte("trace"), nil
- case DebugLevel:
- return []byte("debug"), nil
- case InfoLevel:
- return []byte("info"), nil
- case WarnLevel:
- return []byte("warning"), nil
- case ErrorLevel:
- return []byte("error"), nil
- case FatalLevel:
- return []byte("fatal"), nil
- case PanicLevel:
- return []byte("panic"), nil
- }
-
- return nil, fmt.Errorf("not a valid logrus level %d", level)
-}
-
-// A constant exposing all logging levels
-var AllLevels = []Level{
- PanicLevel,
- FatalLevel,
- ErrorLevel,
- WarnLevel,
- InfoLevel,
- DebugLevel,
- TraceLevel,
-}
-
-// These are the different logging levels. You can set the logging level to log
-// on your instance of logger, obtained with `logrus.New()`.
-const (
- // PanicLevel level, highest level of severity. Logs and then calls panic with the
- // message passed to Debug, Info, ...
- PanicLevel Level = iota
- // FatalLevel level. Logs and then calls `logger.Exit(1)`. It will exit even if the
- // logging level is set to Panic.
- FatalLevel
- // ErrorLevel level. Logs. Used for errors that should definitely be noted.
- // Commonly used for hooks to send errors to an error tracking service.
- ErrorLevel
- // WarnLevel level. Non-critical entries that deserve eyes.
- WarnLevel
- // InfoLevel level. General operational entries about what's going on inside the
- // application.
- InfoLevel
- // DebugLevel level. Usually only enabled when debugging. Very verbose logging.
- DebugLevel
- // TraceLevel level. Designates finer-grained informational events than the Debug.
- TraceLevel
-)
-
-// Won't compile if StdLogger can't be realized by a log.Logger
-var (
- _ StdLogger = &log.Logger{}
- _ StdLogger = &Entry{}
- _ StdLogger = &Logger{}
-)
-
-// StdLogger is what your logrus-enabled library should take, that way
-// it'll accept a stdlib logger and a logrus logger. There's no standard
-// interface, this is the closest we get, unfortunately.
-type StdLogger interface {
- Print(...interface{})
- Printf(string, ...interface{})
- Println(...interface{})
-
- Fatal(...interface{})
- Fatalf(string, ...interface{})
- Fatalln(...interface{})
-
- Panic(...interface{})
- Panicf(string, ...interface{})
- Panicln(...interface{})
-}
-
-// The FieldLogger interface generalizes the Entry and Logger types
-type FieldLogger interface {
- WithField(key string, value interface{}) *Entry
- WithFields(fields Fields) *Entry
- WithError(err error) *Entry
-
- Debugf(format string, args ...interface{})
- Infof(format string, args ...interface{})
- Printf(format string, args ...interface{})
- Warnf(format string, args ...interface{})
- Warningf(format string, args ...interface{})
- Errorf(format string, args ...interface{})
- Fatalf(format string, args ...interface{})
- Panicf(format string, args ...interface{})
-
- Debug(args ...interface{})
- Info(args ...interface{})
- Print(args ...interface{})
- Warn(args ...interface{})
- Warning(args ...interface{})
- Error(args ...interface{})
- Fatal(args ...interface{})
- Panic(args ...interface{})
-
- Debugln(args ...interface{})
- Infoln(args ...interface{})
- Println(args ...interface{})
- Warnln(args ...interface{})
- Warningln(args ...interface{})
- Errorln(args ...interface{})
- Fatalln(args ...interface{})
- Panicln(args ...interface{})
-
- // IsDebugEnabled() bool
- // IsInfoEnabled() bool
- // IsWarnEnabled() bool
- // IsErrorEnabled() bool
- // IsFatalEnabled() bool
- // IsPanicEnabled() bool
-}
-
-// Ext1FieldLogger (the first extension to FieldLogger) is superfluous, it is
-// here for consistancy. Do not use. Use Logger or Entry instead.
-type Ext1FieldLogger interface {
- FieldLogger
- Tracef(format string, args ...interface{})
- Trace(args ...interface{})
- Traceln(args ...interface{})
-}
diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_appengine.go b/vendor/github.com/sirupsen/logrus/terminal_check_appengine.go
deleted file mode 100644
index 2403de9..0000000
--- a/vendor/github.com/sirupsen/logrus/terminal_check_appengine.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build appengine
-
-package logrus
-
-import (
- "io"
-)
-
-func checkIfTerminal(w io.Writer) bool {
- return true
-}
diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_bsd.go b/vendor/github.com/sirupsen/logrus/terminal_check_bsd.go
deleted file mode 100644
index 3c4f43f..0000000
--- a/vendor/github.com/sirupsen/logrus/terminal_check_bsd.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// +build darwin dragonfly freebsd netbsd openbsd
-
-package logrus
-
-import "golang.org/x/sys/unix"
-
-const ioctlReadTermios = unix.TIOCGETA
-
-func isTerminal(fd int) bool {
- _, err := unix.IoctlGetTermios(fd, ioctlReadTermios)
- return err == nil
-}
-
diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_no_terminal.go b/vendor/github.com/sirupsen/logrus/terminal_check_no_terminal.go
deleted file mode 100644
index 97af92c..0000000
--- a/vendor/github.com/sirupsen/logrus/terminal_check_no_terminal.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build js nacl plan9
-
-package logrus
-
-import (
- "io"
-)
-
-func checkIfTerminal(w io.Writer) bool {
- return false
-}
diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go b/vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go
deleted file mode 100644
index 3293fb3..0000000
--- a/vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// +build !appengine,!js,!windows,!nacl,!plan9
-
-package logrus
-
-import (
- "io"
- "os"
-)
-
-func checkIfTerminal(w io.Writer) bool {
- switch v := w.(type) {
- case *os.File:
- return isTerminal(int(v.Fd()))
- default:
- return false
- }
-}
diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_solaris.go b/vendor/github.com/sirupsen/logrus/terminal_check_solaris.go
deleted file mode 100644
index f6710b3..0000000
--- a/vendor/github.com/sirupsen/logrus/terminal_check_solaris.go
+++ /dev/null
@@ -1,11 +0,0 @@
-package logrus
-
-import (
- "golang.org/x/sys/unix"
-)
-
-// IsTerminal returns true if the given file descriptor is a terminal.
-func isTerminal(fd int) bool {
- _, err := unix.IoctlGetTermio(fd, unix.TCGETA)
- return err == nil
-}
diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_unix.go b/vendor/github.com/sirupsen/logrus/terminal_check_unix.go
deleted file mode 100644
index 355dc96..0000000
--- a/vendor/github.com/sirupsen/logrus/terminal_check_unix.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// +build linux aix
-
-package logrus
-
-import "golang.org/x/sys/unix"
-
-const ioctlReadTermios = unix.TCGETS
-
-func isTerminal(fd int) bool {
- _, err := unix.IoctlGetTermios(fd, ioctlReadTermios)
- return err == nil
-}
-
diff --git a/vendor/github.com/sirupsen/logrus/terminal_check_windows.go b/vendor/github.com/sirupsen/logrus/terminal_check_windows.go
deleted file mode 100644
index 572889d..0000000
--- a/vendor/github.com/sirupsen/logrus/terminal_check_windows.go
+++ /dev/null
@@ -1,34 +0,0 @@
-// +build !appengine,!js,windows
-
-package logrus
-
-import (
- "io"
- "os"
- "syscall"
-
- sequences "github.com/konsorten/go-windows-terminal-sequences"
-)
-
-func initTerminal(w io.Writer) {
- switch v := w.(type) {
- case *os.File:
- sequences.EnableVirtualTerminalProcessing(syscall.Handle(v.Fd()), true)
- }
-}
-
-func checkIfTerminal(w io.Writer) bool {
- var ret bool
- switch v := w.(type) {
- case *os.File:
- var mode uint32
- err := syscall.GetConsoleMode(syscall.Handle(v.Fd()), &mode)
- ret = (err == nil)
- default:
- ret = false
- }
- if ret {
- initTerminal(w)
- }
- return ret
-}
diff --git a/vendor/github.com/sirupsen/logrus/text_formatter.go b/vendor/github.com/sirupsen/logrus/text_formatter.go
deleted file mode 100644
index e01587c..0000000
--- a/vendor/github.com/sirupsen/logrus/text_formatter.go
+++ /dev/null
@@ -1,295 +0,0 @@
-package logrus
-
-import (
- "bytes"
- "fmt"
- "os"
- "runtime"
- "sort"
- "strings"
- "sync"
- "time"
-)
-
-const (
- red = 31
- yellow = 33
- blue = 36
- gray = 37
-)
-
-var baseTimestamp time.Time
-
-func init() {
- baseTimestamp = time.Now()
-}
-
-// TextFormatter formats logs into text
-type TextFormatter struct {
- // Set to true to bypass checking for a TTY before outputting colors.
- ForceColors bool
-
- // Force disabling colors.
- DisableColors bool
-
- // Override coloring based on CLICOLOR and CLICOLOR_FORCE. - https://bixense.com/clicolors/
- EnvironmentOverrideColors bool
-
- // Disable timestamp logging. useful when output is redirected to logging
- // system that already adds timestamps.
- DisableTimestamp bool
-
- // Enable logging the full timestamp when a TTY is attached instead of just
- // the time passed since beginning of execution.
- FullTimestamp bool
-
- // TimestampFormat to use for display when a full timestamp is printed
- TimestampFormat string
-
- // The fields are sorted by default for a consistent output. For applications
- // that log extremely frequently and don't use the JSON formatter this may not
- // be desired.
- DisableSorting bool
-
- // The keys sorting function, when uninitialized it uses sort.Strings.
- SortingFunc func([]string)
-
- // Disables the truncation of the level text to 4 characters.
- DisableLevelTruncation bool
-
- // QuoteEmptyFields will wrap empty fields in quotes if true
- QuoteEmptyFields bool
-
- // Whether the logger's out is to a terminal
- isTerminal bool
-
- // FieldMap allows users to customize the names of keys for default fields.
- // As an example:
- // formatter := &TextFormatter{
- // FieldMap: FieldMap{
- // FieldKeyTime: "@timestamp",
- // FieldKeyLevel: "@level",
- // FieldKeyMsg: "@message"}}
- FieldMap FieldMap
-
- // CallerPrettyfier can be set by the user to modify the content
- // of the function and file keys in the data when ReportCaller is
- // activated. If any of the returned value is the empty string the
- // corresponding key will be removed from fields.
- CallerPrettyfier func(*runtime.Frame) (function string, file string)
-
- terminalInitOnce sync.Once
-}
-
-func (f *TextFormatter) init(entry *Entry) {
- if entry.Logger != nil {
- f.isTerminal = checkIfTerminal(entry.Logger.Out)
- }
-}
-
-func (f *TextFormatter) isColored() bool {
- isColored := f.ForceColors || (f.isTerminal && (runtime.GOOS != "windows"))
-
- if f.EnvironmentOverrideColors {
- if force, ok := os.LookupEnv("CLICOLOR_FORCE"); ok && force != "0" {
- isColored = true
- } else if ok && force == "0" {
- isColored = false
- } else if os.Getenv("CLICOLOR") == "0" {
- isColored = false
- }
- }
-
- return isColored && !f.DisableColors
-}
-
-// Format renders a single log entry
-func (f *TextFormatter) Format(entry *Entry) ([]byte, error) {
- data := make(Fields)
- for k, v := range entry.Data {
- data[k] = v
- }
- prefixFieldClashes(data, f.FieldMap, entry.HasCaller())
- keys := make([]string, 0, len(data))
- for k := range data {
- keys = append(keys, k)
- }
-
- var funcVal, fileVal string
-
- fixedKeys := make([]string, 0, 4+len(data))
- if !f.DisableTimestamp {
- fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyTime))
- }
- fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyLevel))
- if entry.Message != "" {
- fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyMsg))
- }
- if entry.err != "" {
- fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyLogrusError))
- }
- if entry.HasCaller() {
- if f.CallerPrettyfier != nil {
- funcVal, fileVal = f.CallerPrettyfier(entry.Caller)
- } else {
- funcVal = entry.Caller.Function
- fileVal = fmt.Sprintf("%s:%d", entry.Caller.File, entry.Caller.Line)
- }
-
- if funcVal != "" {
- fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyFunc))
- }
- if fileVal != "" {
- fixedKeys = append(fixedKeys, f.FieldMap.resolve(FieldKeyFile))
- }
- }
-
- if !f.DisableSorting {
- if f.SortingFunc == nil {
- sort.Strings(keys)
- fixedKeys = append(fixedKeys, keys...)
- } else {
- if !f.isColored() {
- fixedKeys = append(fixedKeys, keys...)
- f.SortingFunc(fixedKeys)
- } else {
- f.SortingFunc(keys)
- }
- }
- } else {
- fixedKeys = append(fixedKeys, keys...)
- }
-
- var b *bytes.Buffer
- if entry.Buffer != nil {
- b = entry.Buffer
- } else {
- b = &bytes.Buffer{}
- }
-
- f.terminalInitOnce.Do(func() { f.init(entry) })
-
- timestampFormat := f.TimestampFormat
- if timestampFormat == "" {
- timestampFormat = defaultTimestampFormat
- }
- if f.isColored() {
- f.printColored(b, entry, keys, data, timestampFormat)
- } else {
-
- for _, key := range fixedKeys {
- var value interface{}
- switch {
- case key == f.FieldMap.resolve(FieldKeyTime):
- value = entry.Time.Format(timestampFormat)
- case key == f.FieldMap.resolve(FieldKeyLevel):
- value = entry.Level.String()
- case key == f.FieldMap.resolve(FieldKeyMsg):
- value = entry.Message
- case key == f.FieldMap.resolve(FieldKeyLogrusError):
- value = entry.err
- case key == f.FieldMap.resolve(FieldKeyFunc) && entry.HasCaller():
- value = funcVal
- case key == f.FieldMap.resolve(FieldKeyFile) && entry.HasCaller():
- value = fileVal
- default:
- value = data[key]
- }
- f.appendKeyValue(b, key, value)
- }
- }
-
- b.WriteByte('\n')
- return b.Bytes(), nil
-}
-
-func (f *TextFormatter) printColored(b *bytes.Buffer, entry *Entry, keys []string, data Fields, timestampFormat string) {
- var levelColor int
- switch entry.Level {
- case DebugLevel, TraceLevel:
- levelColor = gray
- case WarnLevel:
- levelColor = yellow
- case ErrorLevel, FatalLevel, PanicLevel:
- levelColor = red
- default:
- levelColor = blue
- }
-
- levelText := strings.ToUpper(entry.Level.String())
- if !f.DisableLevelTruncation {
- levelText = levelText[0:4]
- }
-
- // Remove a single newline if it already exists in the message to keep
- // the behavior of logrus text_formatter the same as the stdlib log package
- entry.Message = strings.TrimSuffix(entry.Message, "\n")
-
- caller := ""
- if entry.HasCaller() {
- funcVal := fmt.Sprintf("%s()", entry.Caller.Function)
- fileVal := fmt.Sprintf("%s:%d", entry.Caller.File, entry.Caller.Line)
-
- if f.CallerPrettyfier != nil {
- funcVal, fileVal = f.CallerPrettyfier(entry.Caller)
- }
-
- if fileVal == "" {
- caller = funcVal
- } else if funcVal == "" {
- caller = fileVal
- } else {
- caller = fileVal + " " + funcVal
- }
- }
-
- if f.DisableTimestamp {
- fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m%s %-44s ", levelColor, levelText, caller, entry.Message)
- } else if !f.FullTimestamp {
- fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%04d]%s %-44s ", levelColor, levelText, int(entry.Time.Sub(baseTimestamp)/time.Second), caller, entry.Message)
- } else {
- fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%s]%s %-44s ", levelColor, levelText, entry.Time.Format(timestampFormat), caller, entry.Message)
- }
- for _, k := range keys {
- v := data[k]
- fmt.Fprintf(b, " \x1b[%dm%s\x1b[0m=", levelColor, k)
- f.appendValue(b, v)
- }
-}
-
-func (f *TextFormatter) needsQuoting(text string) bool {
- if f.QuoteEmptyFields && len(text) == 0 {
- return true
- }
- for _, ch := range text {
- if !((ch >= 'a' && ch <= 'z') ||
- (ch >= 'A' && ch <= 'Z') ||
- (ch >= '0' && ch <= '9') ||
- ch == '-' || ch == '.' || ch == '_' || ch == '/' || ch == '@' || ch == '^' || ch == '+') {
- return true
- }
- }
- return false
-}
-
-func (f *TextFormatter) appendKeyValue(b *bytes.Buffer, key string, value interface{}) {
- if b.Len() > 0 {
- b.WriteByte(' ')
- }
- b.WriteString(key)
- b.WriteByte('=')
- f.appendValue(b, value)
-}
-
-func (f *TextFormatter) appendValue(b *bytes.Buffer, value interface{}) {
- stringVal, ok := value.(string)
- if !ok {
- stringVal = fmt.Sprint(value)
- }
-
- if !f.needsQuoting(stringVal) {
- b.WriteString(stringVal)
- } else {
- b.WriteString(fmt.Sprintf("%q", stringVal))
- }
-}
diff --git a/vendor/github.com/sirupsen/logrus/writer.go b/vendor/github.com/sirupsen/logrus/writer.go
deleted file mode 100644
index 9e1f751..0000000
--- a/vendor/github.com/sirupsen/logrus/writer.go
+++ /dev/null
@@ -1,64 +0,0 @@
-package logrus
-
-import (
- "bufio"
- "io"
- "runtime"
-)
-
-func (logger *Logger) Writer() *io.PipeWriter {
- return logger.WriterLevel(InfoLevel)
-}
-
-func (logger *Logger) WriterLevel(level Level) *io.PipeWriter {
- return NewEntry(logger).WriterLevel(level)
-}
-
-func (entry *Entry) Writer() *io.PipeWriter {
- return entry.WriterLevel(InfoLevel)
-}
-
-func (entry *Entry) WriterLevel(level Level) *io.PipeWriter {
- reader, writer := io.Pipe()
-
- var printFunc func(args ...interface{})
-
- switch level {
- case TraceLevel:
- printFunc = entry.Trace
- case DebugLevel:
- printFunc = entry.Debug
- case InfoLevel:
- printFunc = entry.Info
- case WarnLevel:
- printFunc = entry.Warn
- case ErrorLevel:
- printFunc = entry.Error
- case FatalLevel:
- printFunc = entry.Fatal
- case PanicLevel:
- printFunc = entry.Panic
- default:
- printFunc = entry.Print
- }
-
- go entry.writerScanner(reader, printFunc)
- runtime.SetFinalizer(writer, writerFinalizer)
-
- return writer
-}
-
-func (entry *Entry) writerScanner(reader *io.PipeReader, printFunc func(args ...interface{})) {
- scanner := bufio.NewScanner(reader)
- for scanner.Scan() {
- printFunc(scanner.Text())
- }
- if err := scanner.Err(); err != nil {
- entry.Errorf("Error while reading from Writer: %s", err)
- }
- reader.Close()
-}
-
-func writerFinalizer(writer *io.PipeWriter) {
- writer.Close()
-}
diff --git a/vendor/github.com/vishvananda/netlink/.travis.yml b/vendor/github.com/vishvananda/netlink/.travis.yml
deleted file mode 100644
index f5c0b3e..0000000
--- a/vendor/github.com/vishvananda/netlink/.travis.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-language: go
-before_script:
- # make sure we keep path in tact when we sudo
- - sudo sed -i -e 's/^Defaults\tsecure_path.*$//' /etc/sudoers
- # modprobe ip_gre or else the first gre device can't be deleted
- - sudo modprobe ip_gre
- # modprobe nf_conntrack for the conntrack testing
- - sudo modprobe nf_conntrack
- - sudo modprobe nf_conntrack_netlink
- - sudo modprobe nf_conntrack_ipv4
- - sudo modprobe nf_conntrack_ipv6
-install:
- - go get github.com/vishvananda/netns
diff --git a/vendor/github.com/vishvananda/netlink/CHANGELOG.md b/vendor/github.com/vishvananda/netlink/CHANGELOG.md
deleted file mode 100644
index b11e59f..0000000
--- a/vendor/github.com/vishvananda/netlink/CHANGELOG.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Changelog
-
-## 1.0.0 (2018-03-15)
-
-Initial release tagging \ No newline at end of file
diff --git a/vendor/github.com/vishvananda/netlink/LICENSE b/vendor/github.com/vishvananda/netlink/LICENSE
deleted file mode 100644
index 9f64db8..0000000
--- a/vendor/github.com/vishvananda/netlink/LICENSE
+++ /dev/null
@@ -1,192 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- Copyright 2014 Vishvananda Ishaya.
- Copyright 2014 Docker, Inc.
-
- 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.
diff --git a/vendor/github.com/vishvananda/netlink/Makefile b/vendor/github.com/vishvananda/netlink/Makefile
deleted file mode 100644
index a0e68e7..0000000
--- a/vendor/github.com/vishvananda/netlink/Makefile
+++ /dev/null
@@ -1,30 +0,0 @@
-DIRS := \
- . \
- nl
-
-DEPS = \
- github.com/vishvananda/netns \
- golang.org/x/sys/unix
-
-uniq = $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1)))
-testdirs = $(call uniq,$(foreach d,$(1),$(dir $(wildcard $(d)/*_test.go))))
-goroot = $(addprefix ../../../,$(1))
-unroot = $(subst ../../../,,$(1))
-fmt = $(addprefix fmt-,$(1))
-
-all: test
-
-$(call goroot,$(DEPS)):
- go get $(call unroot,$@)
-
-.PHONY: $(call testdirs,$(DIRS))
-$(call testdirs,$(DIRS)):
- go test -test.exec sudo -test.parallel 4 -timeout 60s -test.v github.com/vishvananda/netlink/$@
-
-$(call fmt,$(call testdirs,$(DIRS))):
- ! gofmt -l $(subst fmt-,,$@)/*.go | grep -q .
-
-.PHONY: fmt
-fmt: $(call fmt,$(call testdirs,$(DIRS)))
-
-test: fmt $(call goroot,$(DEPS)) $(call testdirs,$(DIRS))
diff --git a/vendor/github.com/vishvananda/netlink/README.md b/vendor/github.com/vishvananda/netlink/README.md
deleted file mode 100644
index a88e2f4..0000000
--- a/vendor/github.com/vishvananda/netlink/README.md
+++ /dev/null
@@ -1,92 +0,0 @@
-# netlink - netlink library for go #
-
-[![Build Status](https://travis-ci.org/vishvananda/netlink.png?branch=master)](https://travis-ci.org/vishvananda/netlink) [![GoDoc](https://godoc.org/github.com/vishvananda/netlink?status.svg)](https://godoc.org/github.com/vishvananda/netlink)
-
-The netlink package provides a simple netlink library for go. Netlink
-is the interface a user-space program in linux uses to communicate with
-the kernel. It can be used to add and remove interfaces, set ip addresses
-and routes, and configure ipsec. Netlink communication requires elevated
-privileges, so in most cases this code needs to be run as root. Since
-low-level netlink messages are inscrutable at best, the library attempts
-to provide an api that is loosely modeled on the CLI provided by iproute2.
-Actions like `ip link add` will be accomplished via a similarly named
-function like AddLink(). This library began its life as a fork of the
-netlink functionality in
-[docker/libcontainer](https://github.com/docker/libcontainer) but was
-heavily rewritten to improve testability, performance, and to add new
-functionality like ipsec xfrm handling.
-
-## Local Build and Test ##
-
-You can use go get command:
-
- go get github.com/vishvananda/netlink
-
-Testing dependencies:
-
- go get github.com/vishvananda/netns
-
-Testing (requires root):
-
- sudo -E go test github.com/vishvananda/netlink
-
-## Examples ##
-
-Add a new bridge and add eth1 into it:
-
-```go
-package main
-
-import (
- "fmt"
- "github.com/vishvananda/netlink"
-)
-
-func main() {
- la := netlink.NewLinkAttrs()
- la.Name = "foo"
- mybridge := &netlink.Bridge{LinkAttrs: la}
- err := netlink.LinkAdd(mybridge)
- if err != nil {
- fmt.Printf("could not add %s: %v\n", la.Name, err)
- }
- eth1, _ := netlink.LinkByName("eth1")
- netlink.LinkSetMaster(eth1, mybridge)
-}
-
-```
-Note `NewLinkAttrs` constructor, it sets default values in structure. For now
-it sets only `TxQLen` to `-1`, so kernel will set default by itself. If you're
-using simple initialization(`LinkAttrs{Name: "foo"}`) `TxQLen` will be set to
-`0` unless you specify it like `LinkAttrs{Name: "foo", TxQLen: 1000}`.
-
-Add a new ip address to loopback:
-
-```go
-package main
-
-import (
- "github.com/vishvananda/netlink"
-)
-
-func main() {
- lo, _ := netlink.LinkByName("lo")
- addr, _ := netlink.ParseAddr("169.254.169.254/32")
- netlink.AddrAdd(lo, addr)
-}
-
-```
-
-## Future Work ##
-
-Many pieces of netlink are not yet fully supported in the high-level
-interface. Aspects of virtually all of the high-level objects don't exist.
-Many of the underlying primitives are there, so its a matter of putting
-the right fields into the high-level objects and making sure that they
-are serialized and deserialized correctly in the Add and List methods.
-
-There are also a few pieces of low level netlink functionality that still
-need to be implemented. Routing rules are not in place and some of the
-more advanced link types. Hopefully there is decent structure and testing
-in place to make these fairly straightforward to add.
-
diff --git a/vendor/github.com/vishvananda/netlink/addr.go b/vendor/github.com/vishvananda/netlink/addr.go
deleted file mode 100644
index f08c956..0000000
--- a/vendor/github.com/vishvananda/netlink/addr.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "net"
- "strings"
-)
-
-// Addr represents an IP address from netlink. Netlink ip addresses
-// include a mask, so it stores the address as a net.IPNet.
-type Addr struct {
- *net.IPNet
- Label string
- Flags int
- Scope int
- Peer *net.IPNet
- Broadcast net.IP
- PreferedLft int
- ValidLft int
-}
-
-// String returns $ip/$netmask $label
-func (a Addr) String() string {
- return strings.TrimSpace(fmt.Sprintf("%s %s", a.IPNet, a.Label))
-}
-
-// ParseAddr parses the string representation of an address in the
-// form $ip/$netmask $label. The label portion is optional
-func ParseAddr(s string) (*Addr, error) {
- label := ""
- parts := strings.Split(s, " ")
- if len(parts) > 1 {
- s = parts[0]
- label = parts[1]
- }
- m, err := ParseIPNet(s)
- if err != nil {
- return nil, err
- }
- return &Addr{IPNet: m, Label: label}, nil
-}
-
-// Equal returns true if both Addrs have the same net.IPNet value.
-func (a Addr) Equal(x Addr) bool {
- sizea, _ := a.Mask.Size()
- sizeb, _ := x.Mask.Size()
- // ignore label for comparison
- return a.IP.Equal(x.IP) && sizea == sizeb
-}
-
-func (a Addr) PeerEqual(x Addr) bool {
- sizea, _ := a.Peer.Mask.Size()
- sizeb, _ := x.Peer.Mask.Size()
- // ignore label for comparison
- return a.Peer.IP.Equal(x.Peer.IP) && sizea == sizeb
-}
diff --git a/vendor/github.com/vishvananda/netlink/addr_linux.go b/vendor/github.com/vishvananda/netlink/addr_linux.go
deleted file mode 100644
index d59c328..0000000
--- a/vendor/github.com/vishvananda/netlink/addr_linux.go
+++ /dev/null
@@ -1,354 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "net"
- "strings"
- "syscall"
-
- "github.com/vishvananda/netlink/nl"
- "github.com/vishvananda/netns"
- "golang.org/x/sys/unix"
-)
-
-// IFA_FLAGS is a u32 attribute.
-const IFA_FLAGS = 0x8
-
-// AddrAdd will add an IP address to a link device.
-// Equivalent to: `ip addr add $addr dev $link`
-func AddrAdd(link Link, addr *Addr) error {
- return pkgHandle.AddrAdd(link, addr)
-}
-
-// AddrAdd will add an IP address to a link device.
-// Equivalent to: `ip addr add $addr dev $link`
-func (h *Handle) AddrAdd(link Link, addr *Addr) error {
- req := h.newNetlinkRequest(unix.RTM_NEWADDR, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
- return h.addrHandle(link, addr, req)
-}
-
-// AddrReplace will replace (or, if not present, add) an IP address on a link device.
-// Equivalent to: `ip addr replace $addr dev $link`
-func AddrReplace(link Link, addr *Addr) error {
- return pkgHandle.AddrReplace(link, addr)
-}
-
-// AddrReplace will replace (or, if not present, add) an IP address on a link device.
-// Equivalent to: `ip addr replace $addr dev $link`
-func (h *Handle) AddrReplace(link Link, addr *Addr) error {
- req := h.newNetlinkRequest(unix.RTM_NEWADDR, unix.NLM_F_CREATE|unix.NLM_F_REPLACE|unix.NLM_F_ACK)
- return h.addrHandle(link, addr, req)
-}
-
-// AddrDel will delete an IP address from a link device.
-// Equivalent to: `ip addr del $addr dev $link`
-func AddrDel(link Link, addr *Addr) error {
- return pkgHandle.AddrDel(link, addr)
-}
-
-// AddrDel will delete an IP address from a link device.
-// Equivalent to: `ip addr del $addr dev $link`
-func (h *Handle) AddrDel(link Link, addr *Addr) error {
- req := h.newNetlinkRequest(unix.RTM_DELADDR, unix.NLM_F_ACK)
- return h.addrHandle(link, addr, req)
-}
-
-func (h *Handle) addrHandle(link Link, addr *Addr, req *nl.NetlinkRequest) error {
- base := link.Attrs()
- if addr.Label != "" && !strings.HasPrefix(addr.Label, base.Name) {
- return fmt.Errorf("label must begin with interface name")
- }
- h.ensureIndex(base)
-
- family := nl.GetIPFamily(addr.IP)
-
- msg := nl.NewIfAddrmsg(family)
- msg.Index = uint32(base.Index)
- msg.Scope = uint8(addr.Scope)
- prefixlen, masklen := addr.Mask.Size()
- msg.Prefixlen = uint8(prefixlen)
- req.AddData(msg)
-
- var localAddrData []byte
- if family == FAMILY_V4 {
- localAddrData = addr.IP.To4()
- } else {
- localAddrData = addr.IP.To16()
- }
-
- localData := nl.NewRtAttr(unix.IFA_LOCAL, localAddrData)
- req.AddData(localData)
- var peerAddrData []byte
- if addr.Peer != nil {
- if family == FAMILY_V4 {
- peerAddrData = addr.Peer.IP.To4()
- } else {
- peerAddrData = addr.Peer.IP.To16()
- }
- } else {
- peerAddrData = localAddrData
- }
-
- addressData := nl.NewRtAttr(unix.IFA_ADDRESS, peerAddrData)
- req.AddData(addressData)
-
- if addr.Flags != 0 {
- if addr.Flags <= 0xff {
- msg.IfAddrmsg.Flags = uint8(addr.Flags)
- } else {
- b := make([]byte, 4)
- native.PutUint32(b, uint32(addr.Flags))
- flagsData := nl.NewRtAttr(IFA_FLAGS, b)
- req.AddData(flagsData)
- }
- }
-
- if family == FAMILY_V4 {
- if addr.Broadcast == nil {
- calcBroadcast := make(net.IP, masklen/8)
- for i := range localAddrData {
- calcBroadcast[i] = localAddrData[i] | ^addr.Mask[i]
- }
- addr.Broadcast = calcBroadcast
- }
- req.AddData(nl.NewRtAttr(unix.IFA_BROADCAST, addr.Broadcast))
-
- if addr.Label != "" {
- labelData := nl.NewRtAttr(unix.IFA_LABEL, nl.ZeroTerminated(addr.Label))
- req.AddData(labelData)
- }
- }
-
- // 0 is the default value for these attributes. However, 0 means "expired", while the least-surprising default
- // value should be "forever". To compensate for that, only add the attributes if at least one of the values is
- // non-zero, which means the caller has explicitly set them
- if addr.ValidLft > 0 || addr.PreferedLft > 0 {
- cachedata := nl.IfaCacheInfo{
- IfaValid: uint32(addr.ValidLft),
- IfaPrefered: uint32(addr.PreferedLft),
- }
- req.AddData(nl.NewRtAttr(unix.IFA_CACHEINFO, cachedata.Serialize()))
- }
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// AddrList gets a list of IP addresses in the system.
-// Equivalent to: `ip addr show`.
-// The list can be filtered by link and ip family.
-func AddrList(link Link, family int) ([]Addr, error) {
- return pkgHandle.AddrList(link, family)
-}
-
-// AddrList gets a list of IP addresses in the system.
-// Equivalent to: `ip addr show`.
-// The list can be filtered by link and ip family.
-func (h *Handle) AddrList(link Link, family int) ([]Addr, error) {
- req := h.newNetlinkRequest(unix.RTM_GETADDR, unix.NLM_F_DUMP)
- msg := nl.NewIfInfomsg(family)
- req.AddData(msg)
-
- msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWADDR)
- if err != nil {
- return nil, err
- }
-
- indexFilter := 0
- if link != nil {
- base := link.Attrs()
- h.ensureIndex(base)
- indexFilter = base.Index
- }
-
- var res []Addr
- for _, m := range msgs {
- addr, msgFamily, ifindex, err := parseAddr(m)
- if err != nil {
- return res, err
- }
-
- if link != nil && ifindex != indexFilter {
- // Ignore messages from other interfaces
- continue
- }
-
- if family != FAMILY_ALL && msgFamily != family {
- continue
- }
-
- res = append(res, addr)
- }
-
- return res, nil
-}
-
-func parseAddr(m []byte) (addr Addr, family, index int, err error) {
- msg := nl.DeserializeIfAddrmsg(m)
-
- family = -1
- index = -1
-
- attrs, err1 := nl.ParseRouteAttr(m[msg.Len():])
- if err1 != nil {
- err = err1
- return
- }
-
- family = int(msg.Family)
- index = int(msg.Index)
-
- var local, dst *net.IPNet
- for _, attr := range attrs {
- switch attr.Attr.Type {
- case unix.IFA_ADDRESS:
- dst = &net.IPNet{
- IP: attr.Value,
- Mask: net.CIDRMask(int(msg.Prefixlen), 8*len(attr.Value)),
- }
- addr.Peer = dst
- case unix.IFA_LOCAL:
- local = &net.IPNet{
- IP: attr.Value,
- Mask: net.CIDRMask(int(msg.Prefixlen), 8*len(attr.Value)),
- }
- addr.IPNet = local
- case unix.IFA_BROADCAST:
- addr.Broadcast = attr.Value
- case unix.IFA_LABEL:
- addr.Label = string(attr.Value[:len(attr.Value)-1])
- case IFA_FLAGS:
- addr.Flags = int(native.Uint32(attr.Value[0:4]))
- case nl.IFA_CACHEINFO:
- ci := nl.DeserializeIfaCacheInfo(attr.Value)
- addr.PreferedLft = int(ci.IfaPrefered)
- addr.ValidLft = int(ci.IfaValid)
- }
- }
-
- // IFA_LOCAL should be there but if not, fall back to IFA_ADDRESS
- if local != nil {
- addr.IPNet = local
- } else {
- addr.IPNet = dst
- }
- addr.Scope = int(msg.Scope)
-
- return
-}
-
-type AddrUpdate struct {
- LinkAddress net.IPNet
- LinkIndex int
- Flags int
- Scope int
- PreferedLft int
- ValidLft int
- NewAddr bool // true=added false=deleted
-}
-
-// AddrSubscribe takes a chan down which notifications will be sent
-// when addresses change. Close the 'done' chan to stop subscription.
-func AddrSubscribe(ch chan<- AddrUpdate, done <-chan struct{}) error {
- return addrSubscribeAt(netns.None(), netns.None(), ch, done, nil, false)
-}
-
-// AddrSubscribeAt works like AddrSubscribe plus it allows the caller
-// to choose the network namespace in which to subscribe (ns).
-func AddrSubscribeAt(ns netns.NsHandle, ch chan<- AddrUpdate, done <-chan struct{}) error {
- return addrSubscribeAt(ns, netns.None(), ch, done, nil, false)
-}
-
-// AddrSubscribeOptions contains a set of options to use with
-// AddrSubscribeWithOptions.
-type AddrSubscribeOptions struct {
- Namespace *netns.NsHandle
- ErrorCallback func(error)
- ListExisting bool
-}
-
-// AddrSubscribeWithOptions work like AddrSubscribe but enable to
-// provide additional options to modify the behavior. Currently, the
-// namespace can be provided as well as an error callback.
-func AddrSubscribeWithOptions(ch chan<- AddrUpdate, done <-chan struct{}, options AddrSubscribeOptions) error {
- if options.Namespace == nil {
- none := netns.None()
- options.Namespace = &none
- }
- return addrSubscribeAt(*options.Namespace, netns.None(), ch, done, options.ErrorCallback, options.ListExisting)
-}
-
-func addrSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- AddrUpdate, done <-chan struct{}, cberr func(error), listExisting bool) error {
- s, err := nl.SubscribeAt(newNs, curNs, unix.NETLINK_ROUTE, unix.RTNLGRP_IPV4_IFADDR, unix.RTNLGRP_IPV6_IFADDR)
- if err != nil {
- return err
- }
- if done != nil {
- go func() {
- <-done
- s.Close()
- }()
- }
- if listExisting {
- req := pkgHandle.newNetlinkRequest(unix.RTM_GETADDR,
- unix.NLM_F_DUMP)
- infmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- req.AddData(infmsg)
- if err := s.Send(req); err != nil {
- return err
- }
- }
- go func() {
- defer close(ch)
- for {
- msgs, err := s.Receive()
- if err != nil {
- if cberr != nil {
- cberr(err)
- }
- return
- }
- for _, m := range msgs {
- if m.Header.Type == unix.NLMSG_DONE {
- continue
- }
- if m.Header.Type == unix.NLMSG_ERROR {
- native := nl.NativeEndian()
- error := int32(native.Uint32(m.Data[0:4]))
- if error == 0 {
- continue
- }
- if cberr != nil {
- cberr(syscall.Errno(-error))
- }
- return
- }
- msgType := m.Header.Type
- if msgType != unix.RTM_NEWADDR && msgType != unix.RTM_DELADDR {
- if cberr != nil {
- cberr(fmt.Errorf("bad message type: %d", msgType))
- }
- return
- }
-
- addr, _, ifindex, err := parseAddr(m.Data)
- if err != nil {
- if cberr != nil {
- cberr(fmt.Errorf("could not parse address: %v", err))
- }
- return
- }
-
- ch <- AddrUpdate{LinkAddress: *addr.IPNet,
- LinkIndex: ifindex,
- NewAddr: msgType == unix.RTM_NEWADDR,
- Flags: addr.Flags,
- Scope: addr.Scope,
- PreferedLft: addr.PreferedLft,
- ValidLft: addr.ValidLft}
- }
- }
- }()
-
- return nil
-}
diff --git a/vendor/github.com/vishvananda/netlink/bpf_linux.go b/vendor/github.com/vishvananda/netlink/bpf_linux.go
deleted file mode 100644
index 6631626..0000000
--- a/vendor/github.com/vishvananda/netlink/bpf_linux.go
+++ /dev/null
@@ -1,53 +0,0 @@
-package netlink
-
-import (
- "unsafe"
-
- "golang.org/x/sys/unix"
-)
-
-type BpfProgType uint32
-
-const (
- BPF_PROG_TYPE_UNSPEC BpfProgType = iota
- BPF_PROG_TYPE_SOCKET_FILTER
- BPF_PROG_TYPE_KPROBE
- BPF_PROG_TYPE_SCHED_CLS
- BPF_PROG_TYPE_SCHED_ACT
- BPF_PROG_TYPE_TRACEPOINT
- BPF_PROG_TYPE_XDP
-)
-
-type BPFAttr struct {
- ProgType uint32
- InsnCnt uint32
- Insns uintptr
- License uintptr
- LogLevel uint32
- LogSize uint32
- LogBuf uintptr
- KernVersion uint32
-}
-
-// loadSimpleBpf loads a trivial bpf program for testing purposes.
-func loadSimpleBpf(progType BpfProgType, ret uint32) (int, error) {
- insns := []uint64{
- 0x00000000000000b7 | (uint64(ret) << 32),
- 0x0000000000000095,
- }
- license := []byte{'A', 'S', 'L', '2', '\x00'}
- attr := BPFAttr{
- ProgType: uint32(progType),
- InsnCnt: uint32(len(insns)),
- Insns: uintptr(unsafe.Pointer(&insns[0])),
- License: uintptr(unsafe.Pointer(&license[0])),
- }
- fd, _, errno := unix.Syscall(unix.SYS_BPF,
- 5, /* bpf cmd */
- uintptr(unsafe.Pointer(&attr)),
- unsafe.Sizeof(attr))
- if errno != 0 {
- return 0, errno
- }
- return int(fd), nil
-}
diff --git a/vendor/github.com/vishvananda/netlink/bridge_linux.go b/vendor/github.com/vishvananda/netlink/bridge_linux.go
deleted file mode 100644
index 350ab0d..0000000
--- a/vendor/github.com/vishvananda/netlink/bridge_linux.go
+++ /dev/null
@@ -1,115 +0,0 @@
-package netlink
-
-import (
- "fmt"
-
- "github.com/vishvananda/netlink/nl"
- "golang.org/x/sys/unix"
-)
-
-// BridgeVlanList gets a map of device id to bridge vlan infos.
-// Equivalent to: `bridge vlan show`
-func BridgeVlanList() (map[int32][]*nl.BridgeVlanInfo, error) {
- return pkgHandle.BridgeVlanList()
-}
-
-// BridgeVlanList gets a map of device id to bridge vlan infos.
-// Equivalent to: `bridge vlan show`
-func (h *Handle) BridgeVlanList() (map[int32][]*nl.BridgeVlanInfo, error) {
- req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_DUMP)
- msg := nl.NewIfInfomsg(unix.AF_BRIDGE)
- req.AddData(msg)
- req.AddData(nl.NewRtAttr(unix.IFLA_EXT_MASK, nl.Uint32Attr(uint32(nl.RTEXT_FILTER_BRVLAN))))
-
- msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWLINK)
- if err != nil {
- return nil, err
- }
- ret := make(map[int32][]*nl.BridgeVlanInfo)
- for _, m := range msgs {
- msg := nl.DeserializeIfInfomsg(m)
-
- attrs, err := nl.ParseRouteAttr(m[msg.Len():])
- if err != nil {
- return nil, err
- }
- for _, attr := range attrs {
- switch attr.Attr.Type {
- case unix.IFLA_AF_SPEC:
- //nested attr
- nestAttrs, err := nl.ParseRouteAttr(attr.Value)
- if err != nil {
- return nil, fmt.Errorf("failed to parse nested attr %v", err)
- }
- for _, nestAttr := range nestAttrs {
- switch nestAttr.Attr.Type {
- case nl.IFLA_BRIDGE_VLAN_INFO:
- vlanInfo := nl.DeserializeBridgeVlanInfo(nestAttr.Value)
- ret[msg.Index] = append(ret[msg.Index], vlanInfo)
- }
- }
- }
- }
- }
- return ret, nil
-}
-
-// BridgeVlanAdd adds a new vlan filter entry
-// Equivalent to: `bridge vlan add dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]`
-func BridgeVlanAdd(link Link, vid uint16, pvid, untagged, self, master bool) error {
- return pkgHandle.BridgeVlanAdd(link, vid, pvid, untagged, self, master)
-}
-
-// BridgeVlanAdd adds a new vlan filter entry
-// Equivalent to: `bridge vlan add dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]`
-func (h *Handle) BridgeVlanAdd(link Link, vid uint16, pvid, untagged, self, master bool) error {
- return h.bridgeVlanModify(unix.RTM_SETLINK, link, vid, pvid, untagged, self, master)
-}
-
-// BridgeVlanDel adds a new vlan filter entry
-// Equivalent to: `bridge vlan del dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]`
-func BridgeVlanDel(link Link, vid uint16, pvid, untagged, self, master bool) error {
- return pkgHandle.BridgeVlanDel(link, vid, pvid, untagged, self, master)
-}
-
-// BridgeVlanDel adds a new vlan filter entry
-// Equivalent to: `bridge vlan del dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]`
-func (h *Handle) BridgeVlanDel(link Link, vid uint16, pvid, untagged, self, master bool) error {
- return h.bridgeVlanModify(unix.RTM_DELLINK, link, vid, pvid, untagged, self, master)
-}
-
-func (h *Handle) bridgeVlanModify(cmd int, link Link, vid uint16, pvid, untagged, self, master bool) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(cmd, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_BRIDGE)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- br := nl.NewRtAttr(unix.IFLA_AF_SPEC, nil)
- var flags uint16
- if self {
- flags |= nl.BRIDGE_FLAGS_SELF
- }
- if master {
- flags |= nl.BRIDGE_FLAGS_MASTER
- }
- if flags > 0 {
- nl.NewRtAttrChild(br, nl.IFLA_BRIDGE_FLAGS, nl.Uint16Attr(flags))
- }
- vlanInfo := &nl.BridgeVlanInfo{Vid: vid}
- if pvid {
- vlanInfo.Flags |= nl.BRIDGE_VLAN_INFO_PVID
- }
- if untagged {
- vlanInfo.Flags |= nl.BRIDGE_VLAN_INFO_UNTAGGED
- }
- nl.NewRtAttrChild(br, nl.IFLA_BRIDGE_VLAN_INFO, vlanInfo.Serialize())
- req.AddData(br)
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- if err != nil {
- return err
- }
- return nil
-}
diff --git a/vendor/github.com/vishvananda/netlink/class.go b/vendor/github.com/vishvananda/netlink/class.go
deleted file mode 100644
index 8ee13af..0000000
--- a/vendor/github.com/vishvananda/netlink/class.go
+++ /dev/null
@@ -1,78 +0,0 @@
-package netlink
-
-import (
- "fmt"
-)
-
-type Class interface {
- Attrs() *ClassAttrs
- Type() string
-}
-
-// ClassAttrs represents a netlink class. A filter is associated with a link,
-// has a handle and a parent. The root filter of a device should have a
-// parent == HANDLE_ROOT.
-type ClassAttrs struct {
- LinkIndex int
- Handle uint32
- Parent uint32
- Leaf uint32
-}
-
-func (q ClassAttrs) String() string {
- return fmt.Sprintf("{LinkIndex: %d, Handle: %s, Parent: %s, Leaf: %d}", q.LinkIndex, HandleStr(q.Handle), HandleStr(q.Parent), q.Leaf)
-}
-
-type HtbClassAttrs struct {
- // TODO handle all attributes
- Rate uint64
- Ceil uint64
- Buffer uint32
- Cbuffer uint32
- Quantum uint32
- Level uint32
- Prio uint32
-}
-
-func (q HtbClassAttrs) String() string {
- return fmt.Sprintf("{Rate: %d, Ceil: %d, Buffer: %d, Cbuffer: %d}", q.Rate, q.Ceil, q.Buffer, q.Cbuffer)
-}
-
-// HtbClass represents an Htb class
-type HtbClass struct {
- ClassAttrs
- Rate uint64
- Ceil uint64
- Buffer uint32
- Cbuffer uint32
- Quantum uint32
- Level uint32
- Prio uint32
-}
-
-func (q HtbClass) String() string {
- return fmt.Sprintf("{Rate: %d, Ceil: %d, Buffer: %d, Cbuffer: %d}", q.Rate, q.Ceil, q.Buffer, q.Cbuffer)
-}
-
-func (q *HtbClass) Attrs() *ClassAttrs {
- return &q.ClassAttrs
-}
-
-func (q *HtbClass) Type() string {
- return "htb"
-}
-
-// GenericClass classes represent types that are not currently understood
-// by this netlink library.
-type GenericClass struct {
- ClassAttrs
- ClassType string
-}
-
-func (class *GenericClass) Attrs() *ClassAttrs {
- return &class.ClassAttrs
-}
-
-func (class *GenericClass) Type() string {
- return class.ClassType
-}
diff --git a/vendor/github.com/vishvananda/netlink/class_linux.go b/vendor/github.com/vishvananda/netlink/class_linux.go
deleted file mode 100644
index a499774..0000000
--- a/vendor/github.com/vishvananda/netlink/class_linux.go
+++ /dev/null
@@ -1,255 +0,0 @@
-package netlink
-
-import (
- "errors"
- "syscall"
-
- "github.com/vishvananda/netlink/nl"
- "golang.org/x/sys/unix"
-)
-
-// NOTE: function is in here because it uses other linux functions
-func NewHtbClass(attrs ClassAttrs, cattrs HtbClassAttrs) *HtbClass {
- mtu := 1600
- rate := cattrs.Rate / 8
- ceil := cattrs.Ceil / 8
- buffer := cattrs.Buffer
- cbuffer := cattrs.Cbuffer
-
- if ceil == 0 {
- ceil = rate
- }
-
- if buffer == 0 {
- buffer = uint32(float64(rate)/Hz() + float64(mtu))
- }
- buffer = uint32(Xmittime(rate, buffer))
-
- if cbuffer == 0 {
- cbuffer = uint32(float64(ceil)/Hz() + float64(mtu))
- }
- cbuffer = uint32(Xmittime(ceil, cbuffer))
-
- return &HtbClass{
- ClassAttrs: attrs,
- Rate: rate,
- Ceil: ceil,
- Buffer: buffer,
- Cbuffer: cbuffer,
- Quantum: 10,
- Level: 0,
- Prio: 0,
- }
-}
-
-// ClassDel will delete a class from the system.
-// Equivalent to: `tc class del $class`
-func ClassDel(class Class) error {
- return pkgHandle.ClassDel(class)
-}
-
-// ClassDel will delete a class from the system.
-// Equivalent to: `tc class del $class`
-func (h *Handle) ClassDel(class Class) error {
- return h.classModify(unix.RTM_DELTCLASS, 0, class)
-}
-
-// ClassChange will change a class in place
-// Equivalent to: `tc class change $class`
-// The parent and handle MUST NOT be changed.
-func ClassChange(class Class) error {
- return pkgHandle.ClassChange(class)
-}
-
-// ClassChange will change a class in place
-// Equivalent to: `tc class change $class`
-// The parent and handle MUST NOT be changed.
-func (h *Handle) ClassChange(class Class) error {
- return h.classModify(unix.RTM_NEWTCLASS, 0, class)
-}
-
-// ClassReplace will replace a class to the system.
-// quivalent to: `tc class replace $class`
-// The handle MAY be changed.
-// If a class already exist with this parent/handle pair, the class is changed.
-// If a class does not already exist with this parent/handle, a new class is created.
-func ClassReplace(class Class) error {
- return pkgHandle.ClassReplace(class)
-}
-
-// ClassReplace will replace a class to the system.
-// quivalent to: `tc class replace $class`
-// The handle MAY be changed.
-// If a class already exist with this parent/handle pair, the class is changed.
-// If a class does not already exist with this parent/handle, a new class is created.
-func (h *Handle) ClassReplace(class Class) error {
- return h.classModify(unix.RTM_NEWTCLASS, unix.NLM_F_CREATE, class)
-}
-
-// ClassAdd will add a class to the system.
-// Equivalent to: `tc class add $class`
-func ClassAdd(class Class) error {
- return pkgHandle.ClassAdd(class)
-}
-
-// ClassAdd will add a class to the system.
-// Equivalent to: `tc class add $class`
-func (h *Handle) ClassAdd(class Class) error {
- return h.classModify(
- unix.RTM_NEWTCLASS,
- unix.NLM_F_CREATE|unix.NLM_F_EXCL,
- class,
- )
-}
-
-func (h *Handle) classModify(cmd, flags int, class Class) error {
- req := h.newNetlinkRequest(cmd, flags|unix.NLM_F_ACK)
- base := class.Attrs()
- msg := &nl.TcMsg{
- Family: nl.FAMILY_ALL,
- Ifindex: int32(base.LinkIndex),
- Handle: base.Handle,
- Parent: base.Parent,
- }
- req.AddData(msg)
-
- if cmd != unix.RTM_DELTCLASS {
- if err := classPayload(req, class); err != nil {
- return err
- }
- }
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-func classPayload(req *nl.NetlinkRequest, class Class) error {
- req.AddData(nl.NewRtAttr(nl.TCA_KIND, nl.ZeroTerminated(class.Type())))
-
- options := nl.NewRtAttr(nl.TCA_OPTIONS, nil)
- if htb, ok := class.(*HtbClass); ok {
- opt := nl.TcHtbCopt{}
- opt.Buffer = htb.Buffer
- opt.Cbuffer = htb.Cbuffer
- opt.Quantum = htb.Quantum
- opt.Level = htb.Level
- opt.Prio = htb.Prio
- // TODO: Handle Debug properly. For now default to 0
- /* Calculate {R,C}Tab and set Rate and Ceil */
- cellLog := -1
- ccellLog := -1
- linklayer := nl.LINKLAYER_ETHERNET
- mtu := 1600
- var rtab [256]uint32
- var ctab [256]uint32
- tcrate := nl.TcRateSpec{Rate: uint32(htb.Rate)}
- if CalcRtable(&tcrate, rtab[:], cellLog, uint32(mtu), linklayer) < 0 {
- return errors.New("HTB: failed to calculate rate table")
- }
- opt.Rate = tcrate
- tcceil := nl.TcRateSpec{Rate: uint32(htb.Ceil)}
- if CalcRtable(&tcceil, ctab[:], ccellLog, uint32(mtu), linklayer) < 0 {
- return errors.New("HTB: failed to calculate ceil rate table")
- }
- opt.Ceil = tcceil
- nl.NewRtAttrChild(options, nl.TCA_HTB_PARMS, opt.Serialize())
- nl.NewRtAttrChild(options, nl.TCA_HTB_RTAB, SerializeRtab(rtab))
- nl.NewRtAttrChild(options, nl.TCA_HTB_CTAB, SerializeRtab(ctab))
- }
- req.AddData(options)
- return nil
-}
-
-// ClassList gets a list of classes in the system.
-// Equivalent to: `tc class show`.
-// Generally returns nothing if link and parent are not specified.
-func ClassList(link Link, parent uint32) ([]Class, error) {
- return pkgHandle.ClassList(link, parent)
-}
-
-// ClassList gets a list of classes in the system.
-// Equivalent to: `tc class show`.
-// Generally returns nothing if link and parent are not specified.
-func (h *Handle) ClassList(link Link, parent uint32) ([]Class, error) {
- req := h.newNetlinkRequest(unix.RTM_GETTCLASS, unix.NLM_F_DUMP)
- msg := &nl.TcMsg{
- Family: nl.FAMILY_ALL,
- Parent: parent,
- }
- if link != nil {
- base := link.Attrs()
- h.ensureIndex(base)
- msg.Ifindex = int32(base.Index)
- }
- req.AddData(msg)
-
- msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWTCLASS)
- if err != nil {
- return nil, err
- }
-
- var res []Class
- for _, m := range msgs {
- msg := nl.DeserializeTcMsg(m)
-
- attrs, err := nl.ParseRouteAttr(m[msg.Len():])
- if err != nil {
- return nil, err
- }
-
- base := ClassAttrs{
- LinkIndex: int(msg.Ifindex),
- Handle: msg.Handle,
- Parent: msg.Parent,
- }
-
- var class Class
- classType := ""
- for _, attr := range attrs {
- switch attr.Attr.Type {
- case nl.TCA_KIND:
- classType = string(attr.Value[:len(attr.Value)-1])
- switch classType {
- case "htb":
- class = &HtbClass{}
- default:
- class = &GenericClass{ClassType: classType}
- }
- case nl.TCA_OPTIONS:
- switch classType {
- case "htb":
- data, err := nl.ParseRouteAttr(attr.Value)
- if err != nil {
- return nil, err
- }
- _, err = parseHtbClassData(class, data)
- if err != nil {
- return nil, err
- }
- }
- }
- }
- *class.Attrs() = base
- res = append(res, class)
- }
-
- return res, nil
-}
-
-func parseHtbClassData(class Class, data []syscall.NetlinkRouteAttr) (bool, error) {
- htb := class.(*HtbClass)
- detailed := false
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.TCA_HTB_PARMS:
- opt := nl.DeserializeTcHtbCopt(datum.Value)
- htb.Rate = uint64(opt.Rate.Rate)
- htb.Ceil = uint64(opt.Ceil.Rate)
- htb.Buffer = opt.Buffer
- htb.Cbuffer = opt.Cbuffer
- htb.Quantum = opt.Quantum
- htb.Level = opt.Level
- htb.Prio = opt.Prio
- }
- }
- return detailed, nil
-}
diff --git a/vendor/github.com/vishvananda/netlink/conntrack_linux.go b/vendor/github.com/vishvananda/netlink/conntrack_linux.go
deleted file mode 100644
index a0fc74a..0000000
--- a/vendor/github.com/vishvananda/netlink/conntrack_linux.go
+++ /dev/null
@@ -1,371 +0,0 @@
-package netlink
-
-import (
- "bytes"
- "encoding/binary"
- "errors"
- "fmt"
- "net"
-
- "github.com/vishvananda/netlink/nl"
- "golang.org/x/sys/unix"
-)
-
-// ConntrackTableType Conntrack table for the netlink operation
-type ConntrackTableType uint8
-
-const (
- // ConntrackTable Conntrack table
- // https://github.com/torvalds/linux/blob/master/include/uapi/linux/netfilter/nfnetlink.h -> #define NFNL_SUBSYS_CTNETLINK 1
- ConntrackTable = 1
- // ConntrackExpectTable Conntrack expect table
- // https://github.com/torvalds/linux/blob/master/include/uapi/linux/netfilter/nfnetlink.h -> #define NFNL_SUBSYS_CTNETLINK_EXP 2
- ConntrackExpectTable = 2
-)
-const (
- // For Parsing Mark
- TCP_PROTO = 6
- UDP_PROTO = 17
-)
-const (
- // backward compatibility with golang 1.6 which does not have io.SeekCurrent
- seekCurrent = 1
-)
-
-// InetFamily Family type
-type InetFamily uint8
-
-// -L [table] [options] List conntrack or expectation table
-// -G [table] parameters Get conntrack or expectation
-
-// -I [table] parameters Create a conntrack or expectation
-// -U [table] parameters Update a conntrack
-// -E [table] [options] Show events
-
-// -C [table] Show counter
-// -S Show statistics
-
-// ConntrackTableList returns the flow list of a table of a specific family
-// conntrack -L [table] [options] List conntrack or expectation table
-func ConntrackTableList(table ConntrackTableType, family InetFamily) ([]*ConntrackFlow, error) {
- return pkgHandle.ConntrackTableList(table, family)
-}
-
-// ConntrackTableFlush flushes all the flows of a specified table
-// conntrack -F [table] Flush table
-// The flush operation applies to all the family types
-func ConntrackTableFlush(table ConntrackTableType) error {
- return pkgHandle.ConntrackTableFlush(table)
-}
-
-// ConntrackDeleteFilter deletes entries on the specified table on the base of the filter
-// conntrack -D [table] parameters Delete conntrack or expectation
-func ConntrackDeleteFilter(table ConntrackTableType, family InetFamily, filter CustomConntrackFilter) (uint, error) {
- return pkgHandle.ConntrackDeleteFilter(table, family, filter)
-}
-
-// ConntrackTableList returns the flow list of a table of a specific family using the netlink handle passed
-// conntrack -L [table] [options] List conntrack or expectation table
-func (h *Handle) ConntrackTableList(table ConntrackTableType, family InetFamily) ([]*ConntrackFlow, error) {
- res, err := h.dumpConntrackTable(table, family)
- if err != nil {
- return nil, err
- }
-
- // Deserialize all the flows
- var result []*ConntrackFlow
- for _, dataRaw := range res {
- result = append(result, parseRawData(dataRaw))
- }
-
- return result, nil
-}
-
-// ConntrackTableFlush flushes all the flows of a specified table using the netlink handle passed
-// conntrack -F [table] Flush table
-// The flush operation applies to all the family types
-func (h *Handle) ConntrackTableFlush(table ConntrackTableType) error {
- req := h.newConntrackRequest(table, unix.AF_INET, nl.IPCTNL_MSG_CT_DELETE, unix.NLM_F_ACK)
- _, err := req.Execute(unix.NETLINK_NETFILTER, 0)
- return err
-}
-
-// ConntrackDeleteFilter deletes entries on the specified table on the base of the filter using the netlink handle passed
-// conntrack -D [table] parameters Delete conntrack or expectation
-func (h *Handle) ConntrackDeleteFilter(table ConntrackTableType, family InetFamily, filter CustomConntrackFilter) (uint, error) {
- res, err := h.dumpConntrackTable(table, family)
- if err != nil {
- return 0, err
- }
-
- var matched uint
- for _, dataRaw := range res {
- flow := parseRawData(dataRaw)
- if match := filter.MatchConntrackFlow(flow); match {
- req2 := h.newConntrackRequest(table, family, nl.IPCTNL_MSG_CT_DELETE, unix.NLM_F_ACK)
- // skip the first 4 byte that are the netfilter header, the newConntrackRequest is adding it already
- req2.AddRawData(dataRaw[4:])
- req2.Execute(unix.NETLINK_NETFILTER, 0)
- matched++
- }
- }
-
- return matched, nil
-}
-
-func (h *Handle) newConntrackRequest(table ConntrackTableType, family InetFamily, operation, flags int) *nl.NetlinkRequest {
- // Create the Netlink request object
- req := h.newNetlinkRequest((int(table)<<8)|operation, flags)
- // Add the netfilter header
- msg := &nl.Nfgenmsg{
- NfgenFamily: uint8(family),
- Version: nl.NFNETLINK_V0,
- ResId: 0,
- }
- req.AddData(msg)
- return req
-}
-
-func (h *Handle) dumpConntrackTable(table ConntrackTableType, family InetFamily) ([][]byte, error) {
- req := h.newConntrackRequest(table, family, nl.IPCTNL_MSG_CT_GET, unix.NLM_F_DUMP)
- return req.Execute(unix.NETLINK_NETFILTER, 0)
-}
-
-// The full conntrack flow structure is very complicated and can be found in the file:
-// http://git.netfilter.org/libnetfilter_conntrack/tree/include/internal/object.h
-// For the time being, the structure below allows to parse and extract the base information of a flow
-type ipTuple struct {
- SrcIP net.IP
- DstIP net.IP
- Protocol uint8
- SrcPort uint16
- DstPort uint16
-}
-
-type ConntrackFlow struct {
- FamilyType uint8
- Forward ipTuple
- Reverse ipTuple
- Mark uint32
-}
-
-func (s *ConntrackFlow) String() string {
- // conntrack cmd output:
- // udp 17 src=127.0.0.1 dst=127.0.0.1 sport=4001 dport=1234 [UNREPLIED] src=127.0.0.1 dst=127.0.0.1 sport=1234 dport=4001 mark=0
- return fmt.Sprintf("%s\t%d src=%s dst=%s sport=%d dport=%d\tsrc=%s dst=%s sport=%d dport=%d mark=%d",
- nl.L4ProtoMap[s.Forward.Protocol], s.Forward.Protocol,
- s.Forward.SrcIP.String(), s.Forward.DstIP.String(), s.Forward.SrcPort, s.Forward.DstPort,
- s.Reverse.SrcIP.String(), s.Reverse.DstIP.String(), s.Reverse.SrcPort, s.Reverse.DstPort, s.Mark)
-}
-
-// This method parse the ip tuple structure
-// The message structure is the following:
-// <len, [CTA_IP_V4_SRC|CTA_IP_V6_SRC], 16 bytes for the IP>
-// <len, [CTA_IP_V4_DST|CTA_IP_V6_DST], 16 bytes for the IP>
-// <len, NLA_F_NESTED|nl.CTA_TUPLE_PROTO, 1 byte for the protocol, 3 bytes of padding>
-// <len, CTA_PROTO_SRC_PORT, 2 bytes for the source port, 2 bytes of padding>
-// <len, CTA_PROTO_DST_PORT, 2 bytes for the source port, 2 bytes of padding>
-func parseIpTuple(reader *bytes.Reader, tpl *ipTuple) uint8 {
- for i := 0; i < 2; i++ {
- _, t, _, v := parseNfAttrTLV(reader)
- switch t {
- case nl.CTA_IP_V4_SRC, nl.CTA_IP_V6_SRC:
- tpl.SrcIP = v
- case nl.CTA_IP_V4_DST, nl.CTA_IP_V6_DST:
- tpl.DstIP = v
- }
- }
- // Skip the next 4 bytes nl.NLA_F_NESTED|nl.CTA_TUPLE_PROTO
- reader.Seek(4, seekCurrent)
- _, t, _, v := parseNfAttrTLV(reader)
- if t == nl.CTA_PROTO_NUM {
- tpl.Protocol = uint8(v[0])
- }
- // Skip some padding 3 bytes
- reader.Seek(3, seekCurrent)
- for i := 0; i < 2; i++ {
- _, t, _ := parseNfAttrTL(reader)
- switch t {
- case nl.CTA_PROTO_SRC_PORT:
- parseBERaw16(reader, &tpl.SrcPort)
- case nl.CTA_PROTO_DST_PORT:
- parseBERaw16(reader, &tpl.DstPort)
- }
- // Skip some padding 2 byte
- reader.Seek(2, seekCurrent)
- }
- return tpl.Protocol
-}
-
-func parseNfAttrTLV(r *bytes.Reader) (isNested bool, attrType, len uint16, value []byte) {
- isNested, attrType, len = parseNfAttrTL(r)
-
- value = make([]byte, len)
- binary.Read(r, binary.BigEndian, &value)
- return isNested, attrType, len, value
-}
-
-func parseNfAttrTL(r *bytes.Reader) (isNested bool, attrType, len uint16) {
- binary.Read(r, nl.NativeEndian(), &len)
- len -= nl.SizeofNfattr
-
- binary.Read(r, nl.NativeEndian(), &attrType)
- isNested = (attrType & nl.NLA_F_NESTED) == nl.NLA_F_NESTED
- attrType = attrType & (nl.NLA_F_NESTED - 1)
-
- return isNested, attrType, len
-}
-
-func parseBERaw16(r *bytes.Reader, v *uint16) {
- binary.Read(r, binary.BigEndian, v)
-}
-
-func parseRawData(data []byte) *ConntrackFlow {
- s := &ConntrackFlow{}
- var proto uint8
- // First there is the Nfgenmsg header
- // consume only the family field
- reader := bytes.NewReader(data)
- binary.Read(reader, nl.NativeEndian(), &s.FamilyType)
-
- // skip rest of the Netfilter header
- reader.Seek(3, seekCurrent)
- // The message structure is the following:
- // <len, NLA_F_NESTED|CTA_TUPLE_ORIG> 4 bytes
- // <len, NLA_F_NESTED|CTA_TUPLE_IP> 4 bytes
- // flow information of the forward flow
- // <len, NLA_F_NESTED|CTA_TUPLE_REPLY> 4 bytes
- // <len, NLA_F_NESTED|CTA_TUPLE_IP> 4 bytes
- // flow information of the reverse flow
- for reader.Len() > 0 {
- nested, t, l := parseNfAttrTL(reader)
- if nested && t == nl.CTA_TUPLE_ORIG {
- if nested, t, _ = parseNfAttrTL(reader); nested && t == nl.CTA_TUPLE_IP {
- proto = parseIpTuple(reader, &s.Forward)
- }
- } else if nested && t == nl.CTA_TUPLE_REPLY {
- if nested, t, _ = parseNfAttrTL(reader); nested && t == nl.CTA_TUPLE_IP {
- parseIpTuple(reader, &s.Reverse)
-
- // Got all the useful information stop parsing
- break
- } else {
- // Header not recognized skip it
- reader.Seek(int64(l), seekCurrent)
- }
- }
- }
- if proto == TCP_PROTO {
- reader.Seek(64, seekCurrent)
- _, t, _, v := parseNfAttrTLV(reader)
- if t == nl.CTA_MARK {
- s.Mark = uint32(v[3])
- }
- } else if proto == UDP_PROTO {
- reader.Seek(16, seekCurrent)
- _, t, _, v := parseNfAttrTLV(reader)
- if t == nl.CTA_MARK {
- s.Mark = uint32(v[3])
- }
- }
- return s
-}
-
-// Conntrack parameters and options:
-// -n, --src-nat ip source NAT ip
-// -g, --dst-nat ip destination NAT ip
-// -j, --any-nat ip source or destination NAT ip
-// -m, --mark mark Set mark
-// -c, --secmark secmark Set selinux secmark
-// -e, --event-mask eventmask Event mask, eg. NEW,DESTROY
-// -z, --zero Zero counters while listing
-// -o, --output type[,...] Output format, eg. xml
-// -l, --label label[,...] conntrack labels
-
-// Common parameters and options:
-// -s, --src, --orig-src ip Source address from original direction
-// -d, --dst, --orig-dst ip Destination address from original direction
-// -r, --reply-src ip Source addres from reply direction
-// -q, --reply-dst ip Destination address from reply direction
-// -p, --protonum proto Layer 4 Protocol, eg. 'tcp'
-// -f, --family proto Layer 3 Protocol, eg. 'ipv6'
-// -t, --timeout timeout Set timeout
-// -u, --status status Set status, eg. ASSURED
-// -w, --zone value Set conntrack zone
-// --orig-zone value Set zone for original direction
-// --reply-zone value Set zone for reply direction
-// -b, --buffer-size Netlink socket buffer size
-// --mask-src ip Source mask address
-// --mask-dst ip Destination mask address
-
-// Filter types
-type ConntrackFilterType uint8
-
-const (
- ConntrackOrigSrcIP = iota // -orig-src ip Source address from original direction
- ConntrackOrigDstIP // -orig-dst ip Destination address from original direction
- ConntrackNatSrcIP // -src-nat ip Source NAT ip
- ConntrackNatDstIP // -dst-nat ip Destination NAT ip
- ConntrackNatAnyIP // -any-nat ip Source or destination NAT ip
-)
-
-type CustomConntrackFilter interface {
- // MatchConntrackFlow applies the filter to the flow and returns true if the flow matches
- // the filter or false otherwise
- MatchConntrackFlow(flow *ConntrackFlow) bool
-}
-
-type ConntrackFilter struct {
- ipFilter map[ConntrackFilterType]net.IP
-}
-
-// AddIP adds an IP to the conntrack filter
-func (f *ConntrackFilter) AddIP(tp ConntrackFilterType, ip net.IP) error {
- if f.ipFilter == nil {
- f.ipFilter = make(map[ConntrackFilterType]net.IP)
- }
- if _, ok := f.ipFilter[tp]; ok {
- return errors.New("Filter attribute already present")
- }
- f.ipFilter[tp] = ip
- return nil
-}
-
-// MatchConntrackFlow applies the filter to the flow and returns true if the flow matches the filter
-// false otherwise
-func (f *ConntrackFilter) MatchConntrackFlow(flow *ConntrackFlow) bool {
- if len(f.ipFilter) == 0 {
- // empty filter always not match
- return false
- }
-
- match := true
- // -orig-src ip Source address from original direction
- if elem, found := f.ipFilter[ConntrackOrigSrcIP]; found {
- match = match && elem.Equal(flow.Forward.SrcIP)
- }
-
- // -orig-dst ip Destination address from original direction
- if elem, found := f.ipFilter[ConntrackOrigDstIP]; match && found {
- match = match && elem.Equal(flow.Forward.DstIP)
- }
-
- // -src-nat ip Source NAT ip
- if elem, found := f.ipFilter[ConntrackNatSrcIP]; match && found {
- match = match && elem.Equal(flow.Reverse.SrcIP)
- }
-
- // -dst-nat ip Destination NAT ip
- if elem, found := f.ipFilter[ConntrackNatDstIP]; match && found {
- match = match && elem.Equal(flow.Reverse.DstIP)
- }
-
- // -any-nat ip Source or destination NAT ip
- if elem, found := f.ipFilter[ConntrackNatAnyIP]; match && found {
- match = match && (elem.Equal(flow.Reverse.SrcIP) || elem.Equal(flow.Reverse.DstIP))
- }
-
- return match
-}
-
-var _ CustomConntrackFilter = (*ConntrackFilter)(nil)
diff --git a/vendor/github.com/vishvananda/netlink/conntrack_unspecified.go b/vendor/github.com/vishvananda/netlink/conntrack_unspecified.go
deleted file mode 100644
index af7af79..0000000
--- a/vendor/github.com/vishvananda/netlink/conntrack_unspecified.go
+++ /dev/null
@@ -1,53 +0,0 @@
-// +build !linux
-
-package netlink
-
-// ConntrackTableType Conntrack table for the netlink operation
-type ConntrackTableType uint8
-
-// InetFamily Family type
-type InetFamily uint8
-
-// ConntrackFlow placeholder
-type ConntrackFlow struct{}
-
-// ConntrackFilter placeholder
-type ConntrackFilter struct{}
-
-// ConntrackTableList returns the flow list of a table of a specific family
-// conntrack -L [table] [options] List conntrack or expectation table
-func ConntrackTableList(table ConntrackTableType, family InetFamily) ([]*ConntrackFlow, error) {
- return nil, ErrNotImplemented
-}
-
-// ConntrackTableFlush flushes all the flows of a specified table
-// conntrack -F [table] Flush table
-// The flush operation applies to all the family types
-func ConntrackTableFlush(table ConntrackTableType) error {
- return ErrNotImplemented
-}
-
-// ConntrackDeleteFilter deletes entries on the specified table on the base of the filter
-// conntrack -D [table] parameters Delete conntrack or expectation
-func ConntrackDeleteFilter(table ConntrackTableType, family InetFamily, filter *ConntrackFilter) (uint, error) {
- return 0, ErrNotImplemented
-}
-
-// ConntrackTableList returns the flow list of a table of a specific family using the netlink handle passed
-// conntrack -L [table] [options] List conntrack or expectation table
-func (h *Handle) ConntrackTableList(table ConntrackTableType, family InetFamily) ([]*ConntrackFlow, error) {
- return nil, ErrNotImplemented
-}
-
-// ConntrackTableFlush flushes all the flows of a specified table using the netlink handle passed
-// conntrack -F [table] Flush table
-// The flush operation applies to all the family types
-func (h *Handle) ConntrackTableFlush(table ConntrackTableType) error {
- return ErrNotImplemented
-}
-
-// ConntrackDeleteFilter deletes entries on the specified table on the base of the filter using the netlink handle passed
-// conntrack -D [table] parameters Delete conntrack or expectation
-func (h *Handle) ConntrackDeleteFilter(table ConntrackTableType, family InetFamily, filter *ConntrackFilter) (uint, error) {
- return 0, ErrNotImplemented
-}
diff --git a/vendor/github.com/vishvananda/netlink/filter.go b/vendor/github.com/vishvananda/netlink/filter.go
deleted file mode 100644
index c2cf8e4..0000000
--- a/vendor/github.com/vishvananda/netlink/filter.go
+++ /dev/null
@@ -1,288 +0,0 @@
-package netlink
-
-import (
- "fmt"
-)
-
-type Filter interface {
- Attrs() *FilterAttrs
- Type() string
-}
-
-// FilterAttrs represents a netlink filter. A filter is associated with a link,
-// has a handle and a parent. The root filter of a device should have a
-// parent == HANDLE_ROOT.
-type FilterAttrs struct {
- LinkIndex int
- Handle uint32
- Parent uint32
- Priority uint16 // lower is higher priority
- Protocol uint16 // unix.ETH_P_*
-}
-
-func (q FilterAttrs) String() string {
- return fmt.Sprintf("{LinkIndex: %d, Handle: %s, Parent: %s, Priority: %d, Protocol: %d}", q.LinkIndex, HandleStr(q.Handle), HandleStr(q.Parent), q.Priority, q.Protocol)
-}
-
-type TcAct int32
-
-const (
- TC_ACT_UNSPEC TcAct = -1
- TC_ACT_OK TcAct = 0
- TC_ACT_RECLASSIFY TcAct = 1
- TC_ACT_SHOT TcAct = 2
- TC_ACT_PIPE TcAct = 3
- TC_ACT_STOLEN TcAct = 4
- TC_ACT_QUEUED TcAct = 5
- TC_ACT_REPEAT TcAct = 6
- TC_ACT_REDIRECT TcAct = 7
- TC_ACT_JUMP TcAct = 0x10000000
-)
-
-func (a TcAct) String() string {
- switch a {
- case TC_ACT_UNSPEC:
- return "unspec"
- case TC_ACT_OK:
- return "ok"
- case TC_ACT_RECLASSIFY:
- return "reclassify"
- case TC_ACT_SHOT:
- return "shot"
- case TC_ACT_PIPE:
- return "pipe"
- case TC_ACT_STOLEN:
- return "stolen"
- case TC_ACT_QUEUED:
- return "queued"
- case TC_ACT_REPEAT:
- return "repeat"
- case TC_ACT_REDIRECT:
- return "redirect"
- case TC_ACT_JUMP:
- return "jump"
- }
- return fmt.Sprintf("0x%x", int32(a))
-}
-
-type TcPolAct int32
-
-const (
- TC_POLICE_UNSPEC TcPolAct = TcPolAct(TC_ACT_UNSPEC)
- TC_POLICE_OK TcPolAct = TcPolAct(TC_ACT_OK)
- TC_POLICE_RECLASSIFY TcPolAct = TcPolAct(TC_ACT_RECLASSIFY)
- TC_POLICE_SHOT TcPolAct = TcPolAct(TC_ACT_SHOT)
- TC_POLICE_PIPE TcPolAct = TcPolAct(TC_ACT_PIPE)
-)
-
-func (a TcPolAct) String() string {
- switch a {
- case TC_POLICE_UNSPEC:
- return "unspec"
- case TC_POLICE_OK:
- return "ok"
- case TC_POLICE_RECLASSIFY:
- return "reclassify"
- case TC_POLICE_SHOT:
- return "shot"
- case TC_POLICE_PIPE:
- return "pipe"
- }
- return fmt.Sprintf("0x%x", int32(a))
-}
-
-type ActionAttrs struct {
- Index int
- Capab int
- Action TcAct
- Refcnt int
- Bindcnt int
-}
-
-func (q ActionAttrs) String() string {
- return fmt.Sprintf("{Index: %d, Capab: %x, Action: %s, Refcnt: %d, Bindcnt: %d}", q.Index, q.Capab, q.Action.String(), q.Refcnt, q.Bindcnt)
-}
-
-// Action represents an action in any supported filter.
-type Action interface {
- Attrs() *ActionAttrs
- Type() string
-}
-
-type GenericAction struct {
- ActionAttrs
-}
-
-func (action *GenericAction) Type() string {
- return "generic"
-}
-
-func (action *GenericAction) Attrs() *ActionAttrs {
- return &action.ActionAttrs
-}
-
-type BpfAction struct {
- ActionAttrs
- Fd int
- Name string
-}
-
-func (action *BpfAction) Type() string {
- return "bpf"
-}
-
-func (action *BpfAction) Attrs() *ActionAttrs {
- return &action.ActionAttrs
-}
-
-type MirredAct uint8
-
-func (a MirredAct) String() string {
- switch a {
- case TCA_EGRESS_REDIR:
- return "egress redir"
- case TCA_EGRESS_MIRROR:
- return "egress mirror"
- case TCA_INGRESS_REDIR:
- return "ingress redir"
- case TCA_INGRESS_MIRROR:
- return "ingress mirror"
- }
- return "unknown"
-}
-
-const (
- TCA_EGRESS_REDIR MirredAct = 1 /* packet redirect to EGRESS*/
- TCA_EGRESS_MIRROR MirredAct = 2 /* mirror packet to EGRESS */
- TCA_INGRESS_REDIR MirredAct = 3 /* packet redirect to INGRESS*/
- TCA_INGRESS_MIRROR MirredAct = 4 /* mirror packet to INGRESS */
-)
-
-type MirredAction struct {
- ActionAttrs
- MirredAction MirredAct
- Ifindex int
-}
-
-func (action *MirredAction) Type() string {
- return "mirred"
-}
-
-func (action *MirredAction) Attrs() *ActionAttrs {
- return &action.ActionAttrs
-}
-
-func NewMirredAction(redirIndex int) *MirredAction {
- return &MirredAction{
- ActionAttrs: ActionAttrs{
- Action: TC_ACT_STOLEN,
- },
- MirredAction: TCA_EGRESS_REDIR,
- Ifindex: redirIndex,
- }
-}
-
-// Sel of the U32 filters that contains multiple TcU32Key. This is the copy
-// and the frontend representation of nl.TcU32Sel. It is serialized into canonical
-// nl.TcU32Sel with the appropriate endianness.
-type TcU32Sel struct {
- Flags uint8
- Offshift uint8
- Nkeys uint8
- Pad uint8
- Offmask uint16
- Off uint16
- Offoff int16
- Hoff int16
- Hmask uint32
- Keys []TcU32Key
-}
-
-// TcU32Key contained of Sel in the U32 filters. This is the copy and the frontend
-// representation of nl.TcU32Key. It is serialized into chanonical nl.TcU32Sel
-// with the appropriate endianness.
-type TcU32Key struct {
- Mask uint32
- Val uint32
- Off int32
- OffMask int32
-}
-
-// U32 filters on many packet related properties
-type U32 struct {
- FilterAttrs
- ClassId uint32
- RedirIndex int
- Sel *TcU32Sel
- Actions []Action
-}
-
-func (filter *U32) Attrs() *FilterAttrs {
- return &filter.FilterAttrs
-}
-
-func (filter *U32) Type() string {
- return "u32"
-}
-
-// MatchAll filters match all packets
-type MatchAll struct {
- FilterAttrs
- ClassId uint32
- Actions []Action
-}
-
-func (filter *MatchAll) Attrs() *FilterAttrs {
- return &filter.FilterAttrs
-}
-
-func (filter *MatchAll) Type() string {
- return "matchall"
-}
-
-type FilterFwAttrs struct {
- ClassId uint32
- InDev string
- Mask uint32
- Index uint32
- Buffer uint32
- Mtu uint32
- Mpu uint16
- Rate uint32
- AvRate uint32
- PeakRate uint32
- Action TcPolAct
- Overhead uint16
- LinkLayer int
-}
-
-type BpfFilter struct {
- FilterAttrs
- ClassId uint32
- Fd int
- Name string
- DirectAction bool
-}
-
-func (filter *BpfFilter) Type() string {
- return "bpf"
-}
-
-func (filter *BpfFilter) Attrs() *FilterAttrs {
- return &filter.FilterAttrs
-}
-
-// GenericFilter filters represent types that are not currently understood
-// by this netlink library.
-type GenericFilter struct {
- FilterAttrs
- FilterType string
-}
-
-func (filter *GenericFilter) Attrs() *FilterAttrs {
- return &filter.FilterAttrs
-}
-
-func (filter *GenericFilter) Type() string {
- return filter.FilterType
-}
diff --git a/vendor/github.com/vishvananda/netlink/filter_linux.go b/vendor/github.com/vishvananda/netlink/filter_linux.go
deleted file mode 100644
index f0eac6b..0000000
--- a/vendor/github.com/vishvananda/netlink/filter_linux.go
+++ /dev/null
@@ -1,639 +0,0 @@
-package netlink
-
-import (
- "bytes"
- "encoding/binary"
- "errors"
- "fmt"
- "syscall"
- "unsafe"
-
- "github.com/vishvananda/netlink/nl"
- "golang.org/x/sys/unix"
-)
-
-// Constants used in TcU32Sel.Flags.
-const (
- TC_U32_TERMINAL = nl.TC_U32_TERMINAL
- TC_U32_OFFSET = nl.TC_U32_OFFSET
- TC_U32_VAROFFSET = nl.TC_U32_VAROFFSET
- TC_U32_EAT = nl.TC_U32_EAT
-)
-
-// Fw filter filters on firewall marks
-// NOTE: this is in filter_linux because it refers to nl.TcPolice which
-// is defined in nl/tc_linux.go
-type Fw struct {
- FilterAttrs
- ClassId uint32
- // TODO remove nl type from interface
- Police nl.TcPolice
- InDev string
- // TODO Action
- Mask uint32
- AvRate uint32
- Rtab [256]uint32
- Ptab [256]uint32
-}
-
-func NewFw(attrs FilterAttrs, fattrs FilterFwAttrs) (*Fw, error) {
- var rtab [256]uint32
- var ptab [256]uint32
- rcellLog := -1
- pcellLog := -1
- avrate := fattrs.AvRate / 8
- police := nl.TcPolice{}
- police.Rate.Rate = fattrs.Rate / 8
- police.PeakRate.Rate = fattrs.PeakRate / 8
- buffer := fattrs.Buffer
- linklayer := nl.LINKLAYER_ETHERNET
-
- if fattrs.LinkLayer != nl.LINKLAYER_UNSPEC {
- linklayer = fattrs.LinkLayer
- }
-
- police.Action = int32(fattrs.Action)
- if police.Rate.Rate != 0 {
- police.Rate.Mpu = fattrs.Mpu
- police.Rate.Overhead = fattrs.Overhead
- if CalcRtable(&police.Rate, rtab[:], rcellLog, fattrs.Mtu, linklayer) < 0 {
- return nil, errors.New("TBF: failed to calculate rate table")
- }
- police.Burst = uint32(Xmittime(uint64(police.Rate.Rate), uint32(buffer)))
- }
- police.Mtu = fattrs.Mtu
- if police.PeakRate.Rate != 0 {
- police.PeakRate.Mpu = fattrs.Mpu
- police.PeakRate.Overhead = fattrs.Overhead
- if CalcRtable(&police.PeakRate, ptab[:], pcellLog, fattrs.Mtu, linklayer) < 0 {
- return nil, errors.New("POLICE: failed to calculate peak rate table")
- }
- }
-
- return &Fw{
- FilterAttrs: attrs,
- ClassId: fattrs.ClassId,
- InDev: fattrs.InDev,
- Mask: fattrs.Mask,
- Police: police,
- AvRate: avrate,
- Rtab: rtab,
- Ptab: ptab,
- }, nil
-}
-
-func (filter *Fw) Attrs() *FilterAttrs {
- return &filter.FilterAttrs
-}
-
-func (filter *Fw) Type() string {
- return "fw"
-}
-
-// FilterDel will delete a filter from the system.
-// Equivalent to: `tc filter del $filter`
-func FilterDel(filter Filter) error {
- return pkgHandle.FilterDel(filter)
-}
-
-// FilterDel will delete a filter from the system.
-// Equivalent to: `tc filter del $filter`
-func (h *Handle) FilterDel(filter Filter) error {
- req := h.newNetlinkRequest(unix.RTM_DELTFILTER, unix.NLM_F_ACK)
- base := filter.Attrs()
- msg := &nl.TcMsg{
- Family: nl.FAMILY_ALL,
- Ifindex: int32(base.LinkIndex),
- Handle: base.Handle,
- Parent: base.Parent,
- Info: MakeHandle(base.Priority, nl.Swap16(base.Protocol)),
- }
- req.AddData(msg)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// FilterAdd will add a filter to the system.
-// Equivalent to: `tc filter add $filter`
-func FilterAdd(filter Filter) error {
- return pkgHandle.FilterAdd(filter)
-}
-
-// FilterAdd will add a filter to the system.
-// Equivalent to: `tc filter add $filter`
-func (h *Handle) FilterAdd(filter Filter) error {
- native = nl.NativeEndian()
- req := h.newNetlinkRequest(unix.RTM_NEWTFILTER, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
- base := filter.Attrs()
- msg := &nl.TcMsg{
- Family: nl.FAMILY_ALL,
- Ifindex: int32(base.LinkIndex),
- Handle: base.Handle,
- Parent: base.Parent,
- Info: MakeHandle(base.Priority, nl.Swap16(base.Protocol)),
- }
- req.AddData(msg)
- req.AddData(nl.NewRtAttr(nl.TCA_KIND, nl.ZeroTerminated(filter.Type())))
-
- options := nl.NewRtAttr(nl.TCA_OPTIONS, nil)
-
- switch filter := filter.(type) {
- case *U32:
- // Convert TcU32Sel into nl.TcU32Sel as it is without copy.
- sel := (*nl.TcU32Sel)(unsafe.Pointer(filter.Sel))
- if sel == nil {
- // match all
- sel = &nl.TcU32Sel{
- Nkeys: 1,
- Flags: nl.TC_U32_TERMINAL,
- }
- sel.Keys = append(sel.Keys, nl.TcU32Key{})
- }
-
- if native != networkOrder {
- // Copy TcU32Sel.
- cSel := *sel
- keys := make([]nl.TcU32Key, cap(sel.Keys))
- copy(keys, sel.Keys)
- cSel.Keys = keys
- sel = &cSel
-
- // Handle the endianness of attributes
- sel.Offmask = native.Uint16(htons(sel.Offmask))
- sel.Hmask = native.Uint32(htonl(sel.Hmask))
- for i, key := range sel.Keys {
- sel.Keys[i].Mask = native.Uint32(htonl(key.Mask))
- sel.Keys[i].Val = native.Uint32(htonl(key.Val))
- }
- }
- sel.Nkeys = uint8(len(sel.Keys))
- nl.NewRtAttrChild(options, nl.TCA_U32_SEL, sel.Serialize())
- if filter.ClassId != 0 {
- nl.NewRtAttrChild(options, nl.TCA_U32_CLASSID, nl.Uint32Attr(filter.ClassId))
- }
- actionsAttr := nl.NewRtAttrChild(options, nl.TCA_U32_ACT, nil)
- // backwards compatibility
- if filter.RedirIndex != 0 {
- filter.Actions = append([]Action{NewMirredAction(filter.RedirIndex)}, filter.Actions...)
- }
- if err := EncodeActions(actionsAttr, filter.Actions); err != nil {
- return err
- }
- case *Fw:
- if filter.Mask != 0 {
- b := make([]byte, 4)
- native.PutUint32(b, filter.Mask)
- nl.NewRtAttrChild(options, nl.TCA_FW_MASK, b)
- }
- if filter.InDev != "" {
- nl.NewRtAttrChild(options, nl.TCA_FW_INDEV, nl.ZeroTerminated(filter.InDev))
- }
- if (filter.Police != nl.TcPolice{}) {
-
- police := nl.NewRtAttrChild(options, nl.TCA_FW_POLICE, nil)
- nl.NewRtAttrChild(police, nl.TCA_POLICE_TBF, filter.Police.Serialize())
- if (filter.Police.Rate != nl.TcRateSpec{}) {
- payload := SerializeRtab(filter.Rtab)
- nl.NewRtAttrChild(police, nl.TCA_POLICE_RATE, payload)
- }
- if (filter.Police.PeakRate != nl.TcRateSpec{}) {
- payload := SerializeRtab(filter.Ptab)
- nl.NewRtAttrChild(police, nl.TCA_POLICE_PEAKRATE, payload)
- }
- }
- if filter.ClassId != 0 {
- b := make([]byte, 4)
- native.PutUint32(b, filter.ClassId)
- nl.NewRtAttrChild(options, nl.TCA_FW_CLASSID, b)
- }
- case *BpfFilter:
- var bpfFlags uint32
- if filter.ClassId != 0 {
- nl.NewRtAttrChild(options, nl.TCA_BPF_CLASSID, nl.Uint32Attr(filter.ClassId))
- }
- if filter.Fd >= 0 {
- nl.NewRtAttrChild(options, nl.TCA_BPF_FD, nl.Uint32Attr((uint32(filter.Fd))))
- }
- if filter.Name != "" {
- nl.NewRtAttrChild(options, nl.TCA_BPF_NAME, nl.ZeroTerminated(filter.Name))
- }
- if filter.DirectAction {
- bpfFlags |= nl.TCA_BPF_FLAG_ACT_DIRECT
- }
- nl.NewRtAttrChild(options, nl.TCA_BPF_FLAGS, nl.Uint32Attr(bpfFlags))
- case *MatchAll:
- actionsAttr := nl.NewRtAttrChild(options, nl.TCA_MATCHALL_ACT, nil)
- if err := EncodeActions(actionsAttr, filter.Actions); err != nil {
- return err
- }
- if filter.ClassId != 0 {
- nl.NewRtAttrChild(options, nl.TCA_MATCHALL_CLASSID, nl.Uint32Attr(filter.ClassId))
- }
- }
-
- req.AddData(options)
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// FilterList gets a list of filters in the system.
-// Equivalent to: `tc filter show`.
-// Generally returns nothing if link and parent are not specified.
-func FilterList(link Link, parent uint32) ([]Filter, error) {
- return pkgHandle.FilterList(link, parent)
-}
-
-// FilterList gets a list of filters in the system.
-// Equivalent to: `tc filter show`.
-// Generally returns nothing if link and parent are not specified.
-func (h *Handle) FilterList(link Link, parent uint32) ([]Filter, error) {
- req := h.newNetlinkRequest(unix.RTM_GETTFILTER, unix.NLM_F_DUMP)
- msg := &nl.TcMsg{
- Family: nl.FAMILY_ALL,
- Parent: parent,
- }
- if link != nil {
- base := link.Attrs()
- h.ensureIndex(base)
- msg.Ifindex = int32(base.Index)
- }
- req.AddData(msg)
-
- msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWTFILTER)
- if err != nil {
- return nil, err
- }
-
- var res []Filter
- for _, m := range msgs {
- msg := nl.DeserializeTcMsg(m)
-
- attrs, err := nl.ParseRouteAttr(m[msg.Len():])
- if err != nil {
- return nil, err
- }
-
- base := FilterAttrs{
- LinkIndex: int(msg.Ifindex),
- Handle: msg.Handle,
- Parent: msg.Parent,
- }
- base.Priority, base.Protocol = MajorMinor(msg.Info)
- base.Protocol = nl.Swap16(base.Protocol)
-
- var filter Filter
- filterType := ""
- detailed := false
- for _, attr := range attrs {
- switch attr.Attr.Type {
- case nl.TCA_KIND:
- filterType = string(attr.Value[:len(attr.Value)-1])
- switch filterType {
- case "u32":
- filter = &U32{}
- case "fw":
- filter = &Fw{}
- case "bpf":
- filter = &BpfFilter{}
- case "matchall":
- filter = &MatchAll{}
- default:
- filter = &GenericFilter{FilterType: filterType}
- }
- case nl.TCA_OPTIONS:
- data, err := nl.ParseRouteAttr(attr.Value)
- if err != nil {
- return nil, err
- }
- switch filterType {
- case "u32":
- detailed, err = parseU32Data(filter, data)
- if err != nil {
- return nil, err
- }
- case "fw":
- detailed, err = parseFwData(filter, data)
- if err != nil {
- return nil, err
- }
- case "bpf":
- detailed, err = parseBpfData(filter, data)
- if err != nil {
- return nil, err
- }
- case "matchall":
- detailed, err = parseMatchAllData(filter, data)
- if err != nil {
- return nil, err
- }
- default:
- detailed = true
- }
- }
- }
- // only return the detailed version of the filter
- if detailed {
- *filter.Attrs() = base
- res = append(res, filter)
- }
- }
-
- return res, nil
-}
-
-func toTcGen(attrs *ActionAttrs, tcgen *nl.TcGen) {
- tcgen.Index = uint32(attrs.Index)
- tcgen.Capab = uint32(attrs.Capab)
- tcgen.Action = int32(attrs.Action)
- tcgen.Refcnt = int32(attrs.Refcnt)
- tcgen.Bindcnt = int32(attrs.Bindcnt)
-}
-
-func toAttrs(tcgen *nl.TcGen, attrs *ActionAttrs) {
- attrs.Index = int(tcgen.Index)
- attrs.Capab = int(tcgen.Capab)
- attrs.Action = TcAct(tcgen.Action)
- attrs.Refcnt = int(tcgen.Refcnt)
- attrs.Bindcnt = int(tcgen.Bindcnt)
-}
-
-func EncodeActions(attr *nl.RtAttr, actions []Action) error {
- tabIndex := int(nl.TCA_ACT_TAB)
-
- for _, action := range actions {
- switch action := action.(type) {
- default:
- return fmt.Errorf("unknown action type %s", action.Type())
- case *MirredAction:
- table := nl.NewRtAttrChild(attr, tabIndex, nil)
- tabIndex++
- nl.NewRtAttrChild(table, nl.TCA_ACT_KIND, nl.ZeroTerminated("mirred"))
- aopts := nl.NewRtAttrChild(table, nl.TCA_ACT_OPTIONS, nil)
- mirred := nl.TcMirred{
- Eaction: int32(action.MirredAction),
- Ifindex: uint32(action.Ifindex),
- }
- toTcGen(action.Attrs(), &mirred.TcGen)
- nl.NewRtAttrChild(aopts, nl.TCA_MIRRED_PARMS, mirred.Serialize())
- case *BpfAction:
- table := nl.NewRtAttrChild(attr, tabIndex, nil)
- tabIndex++
- nl.NewRtAttrChild(table, nl.TCA_ACT_KIND, nl.ZeroTerminated("bpf"))
- aopts := nl.NewRtAttrChild(table, nl.TCA_ACT_OPTIONS, nil)
- gen := nl.TcGen{}
- toTcGen(action.Attrs(), &gen)
- nl.NewRtAttrChild(aopts, nl.TCA_ACT_BPF_PARMS, gen.Serialize())
- nl.NewRtAttrChild(aopts, nl.TCA_ACT_BPF_FD, nl.Uint32Attr(uint32(action.Fd)))
- nl.NewRtAttrChild(aopts, nl.TCA_ACT_BPF_NAME, nl.ZeroTerminated(action.Name))
- case *GenericAction:
- table := nl.NewRtAttrChild(attr, tabIndex, nil)
- tabIndex++
- nl.NewRtAttrChild(table, nl.TCA_ACT_KIND, nl.ZeroTerminated("gact"))
- aopts := nl.NewRtAttrChild(table, nl.TCA_ACT_OPTIONS, nil)
- gen := nl.TcGen{}
- toTcGen(action.Attrs(), &gen)
- nl.NewRtAttrChild(aopts, nl.TCA_GACT_PARMS, gen.Serialize())
- }
- }
- return nil
-}
-
-func parseActions(tables []syscall.NetlinkRouteAttr) ([]Action, error) {
- var actions []Action
- for _, table := range tables {
- var action Action
- var actionType string
- aattrs, err := nl.ParseRouteAttr(table.Value)
- if err != nil {
- return nil, err
- }
- nextattr:
- for _, aattr := range aattrs {
- switch aattr.Attr.Type {
- case nl.TCA_KIND:
- actionType = string(aattr.Value[:len(aattr.Value)-1])
- // only parse if the action is mirred or bpf
- switch actionType {
- case "mirred":
- action = &MirredAction{}
- case "bpf":
- action = &BpfAction{}
- case "gact":
- action = &GenericAction{}
- default:
- break nextattr
- }
- case nl.TCA_OPTIONS:
- adata, err := nl.ParseRouteAttr(aattr.Value)
- if err != nil {
- return nil, err
- }
- for _, adatum := range adata {
- switch actionType {
- case "mirred":
- switch adatum.Attr.Type {
- case nl.TCA_MIRRED_PARMS:
- mirred := *nl.DeserializeTcMirred(adatum.Value)
- toAttrs(&mirred.TcGen, action.Attrs())
- action.(*MirredAction).ActionAttrs = ActionAttrs{}
- action.(*MirredAction).Ifindex = int(mirred.Ifindex)
- action.(*MirredAction).MirredAction = MirredAct(mirred.Eaction)
- }
- case "bpf":
- switch adatum.Attr.Type {
- case nl.TCA_ACT_BPF_PARMS:
- gen := *nl.DeserializeTcGen(adatum.Value)
- toAttrs(&gen, action.Attrs())
- case nl.TCA_ACT_BPF_FD:
- action.(*BpfAction).Fd = int(native.Uint32(adatum.Value[0:4]))
- case nl.TCA_ACT_BPF_NAME:
- action.(*BpfAction).Name = string(adatum.Value[:len(adatum.Value)-1])
- }
- case "gact":
- switch adatum.Attr.Type {
- case nl.TCA_GACT_PARMS:
- gen := *nl.DeserializeTcGen(adatum.Value)
- toAttrs(&gen, action.Attrs())
- }
- }
- }
- }
- }
- actions = append(actions, action)
- }
- return actions, nil
-}
-
-func parseU32Data(filter Filter, data []syscall.NetlinkRouteAttr) (bool, error) {
- native = nl.NativeEndian()
- u32 := filter.(*U32)
- detailed := false
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.TCA_U32_SEL:
- detailed = true
- sel := nl.DeserializeTcU32Sel(datum.Value)
- u32.Sel = (*TcU32Sel)(unsafe.Pointer(sel))
- if native != networkOrder {
- // Handle the endianness of attributes
- u32.Sel.Offmask = native.Uint16(htons(sel.Offmask))
- u32.Sel.Hmask = native.Uint32(htonl(sel.Hmask))
- for i, key := range u32.Sel.Keys {
- u32.Sel.Keys[i].Mask = native.Uint32(htonl(key.Mask))
- u32.Sel.Keys[i].Val = native.Uint32(htonl(key.Val))
- }
- }
- case nl.TCA_U32_ACT:
- tables, err := nl.ParseRouteAttr(datum.Value)
- if err != nil {
- return detailed, err
- }
- u32.Actions, err = parseActions(tables)
- if err != nil {
- return detailed, err
- }
- for _, action := range u32.Actions {
- if action, ok := action.(*MirredAction); ok {
- u32.RedirIndex = int(action.Ifindex)
- }
- }
- case nl.TCA_U32_CLASSID:
- u32.ClassId = native.Uint32(datum.Value)
- }
- }
- return detailed, nil
-}
-
-func parseFwData(filter Filter, data []syscall.NetlinkRouteAttr) (bool, error) {
- native = nl.NativeEndian()
- fw := filter.(*Fw)
- detailed := true
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.TCA_FW_MASK:
- fw.Mask = native.Uint32(datum.Value[0:4])
- case nl.TCA_FW_CLASSID:
- fw.ClassId = native.Uint32(datum.Value[0:4])
- case nl.TCA_FW_INDEV:
- fw.InDev = string(datum.Value[:len(datum.Value)-1])
- case nl.TCA_FW_POLICE:
- adata, _ := nl.ParseRouteAttr(datum.Value)
- for _, aattr := range adata {
- switch aattr.Attr.Type {
- case nl.TCA_POLICE_TBF:
- fw.Police = *nl.DeserializeTcPolice(aattr.Value)
- case nl.TCA_POLICE_RATE:
- fw.Rtab = DeserializeRtab(aattr.Value)
- case nl.TCA_POLICE_PEAKRATE:
- fw.Ptab = DeserializeRtab(aattr.Value)
- }
- }
- }
- }
- return detailed, nil
-}
-
-func parseBpfData(filter Filter, data []syscall.NetlinkRouteAttr) (bool, error) {
- native = nl.NativeEndian()
- bpf := filter.(*BpfFilter)
- detailed := true
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.TCA_BPF_FD:
- bpf.Fd = int(native.Uint32(datum.Value[0:4]))
- case nl.TCA_BPF_NAME:
- bpf.Name = string(datum.Value[:len(datum.Value)-1])
- case nl.TCA_BPF_CLASSID:
- bpf.ClassId = native.Uint32(datum.Value[0:4])
- case nl.TCA_BPF_FLAGS:
- flags := native.Uint32(datum.Value[0:4])
- if (flags & nl.TCA_BPF_FLAG_ACT_DIRECT) != 0 {
- bpf.DirectAction = true
- }
- }
- }
- return detailed, nil
-}
-
-func parseMatchAllData(filter Filter, data []syscall.NetlinkRouteAttr) (bool, error) {
- native = nl.NativeEndian()
- matchall := filter.(*MatchAll)
- detailed := true
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.TCA_MATCHALL_CLASSID:
- matchall.ClassId = native.Uint32(datum.Value[0:4])
- case nl.TCA_MATCHALL_ACT:
- tables, err := nl.ParseRouteAttr(datum.Value)
- if err != nil {
- return detailed, err
- }
- matchall.Actions, err = parseActions(tables)
- if err != nil {
- return detailed, err
- }
- }
- }
- return detailed, nil
-}
-
-func AlignToAtm(size uint) uint {
- var linksize, cells int
- cells = int(size / nl.ATM_CELL_PAYLOAD)
- if (size % nl.ATM_CELL_PAYLOAD) > 0 {
- cells++
- }
- linksize = cells * nl.ATM_CELL_SIZE
- return uint(linksize)
-}
-
-func AdjustSize(sz uint, mpu uint, linklayer int) uint {
- if sz < mpu {
- sz = mpu
- }
- switch linklayer {
- case nl.LINKLAYER_ATM:
- return AlignToAtm(sz)
- default:
- return sz
- }
-}
-
-func CalcRtable(rate *nl.TcRateSpec, rtab []uint32, cellLog int, mtu uint32, linklayer int) int {
- bps := rate.Rate
- mpu := rate.Mpu
- var sz uint
- if mtu == 0 {
- mtu = 2047
- }
- if cellLog < 0 {
- cellLog = 0
- for (mtu >> uint(cellLog)) > 255 {
- cellLog++
- }
- }
- for i := 0; i < 256; i++ {
- sz = AdjustSize(uint((i+1)<<uint32(cellLog)), uint(mpu), linklayer)
- rtab[i] = uint32(Xmittime(uint64(bps), uint32(sz)))
- }
- rate.CellAlign = -1
- rate.CellLog = uint8(cellLog)
- rate.Linklayer = uint8(linklayer & nl.TC_LINKLAYER_MASK)
- return cellLog
-}
-
-func DeserializeRtab(b []byte) [256]uint32 {
- var rtab [256]uint32
- native := nl.NativeEndian()
- r := bytes.NewReader(b)
- _ = binary.Read(r, native, &rtab)
- return rtab
-}
-
-func SerializeRtab(rtab [256]uint32) []byte {
- native := nl.NativeEndian()
- var w bytes.Buffer
- _ = binary.Write(&w, native, rtab)
- return w.Bytes()
-}
diff --git a/vendor/github.com/vishvananda/netlink/fou.go b/vendor/github.com/vishvananda/netlink/fou.go
deleted file mode 100644
index 71e73c3..0000000
--- a/vendor/github.com/vishvananda/netlink/fou.go
+++ /dev/null
@@ -1,21 +0,0 @@
-package netlink
-
-import (
- "errors"
-)
-
-var (
- // ErrAttrHeaderTruncated is returned when a netlink attribute's header is
- // truncated.
- ErrAttrHeaderTruncated = errors.New("attribute header truncated")
- // ErrAttrBodyTruncated is returned when a netlink attribute's body is
- // truncated.
- ErrAttrBodyTruncated = errors.New("attribute body truncated")
-)
-
-type Fou struct {
- Family int
- Port int
- Protocol int
- EncapType int
-}
diff --git a/vendor/github.com/vishvananda/netlink/fou_linux.go b/vendor/github.com/vishvananda/netlink/fou_linux.go
deleted file mode 100644
index 62d59bd..0000000
--- a/vendor/github.com/vishvananda/netlink/fou_linux.go
+++ /dev/null
@@ -1,215 +0,0 @@
-// +build linux
-
-package netlink
-
-import (
- "encoding/binary"
- "errors"
-
- "github.com/vishvananda/netlink/nl"
- "golang.org/x/sys/unix"
-)
-
-const (
- FOU_GENL_NAME = "fou"
-)
-
-const (
- FOU_CMD_UNSPEC uint8 = iota
- FOU_CMD_ADD
- FOU_CMD_DEL
- FOU_CMD_GET
- FOU_CMD_MAX = FOU_CMD_GET
-)
-
-const (
- FOU_ATTR_UNSPEC = iota
- FOU_ATTR_PORT
- FOU_ATTR_AF
- FOU_ATTR_IPPROTO
- FOU_ATTR_TYPE
- FOU_ATTR_REMCSUM_NOPARTIAL
- FOU_ATTR_MAX = FOU_ATTR_REMCSUM_NOPARTIAL
-)
-
-const (
- FOU_ENCAP_UNSPEC = iota
- FOU_ENCAP_DIRECT
- FOU_ENCAP_GUE
- FOU_ENCAP_MAX = FOU_ENCAP_GUE
-)
-
-var fouFamilyId int
-
-func FouFamilyId() (int, error) {
- if fouFamilyId != 0 {
- return fouFamilyId, nil
- }
-
- fam, err := GenlFamilyGet(FOU_GENL_NAME)
- if err != nil {
- return -1, err
- }
-
- fouFamilyId = int(fam.ID)
- return fouFamilyId, nil
-}
-
-func FouAdd(f Fou) error {
- return pkgHandle.FouAdd(f)
-}
-
-func (h *Handle) FouAdd(f Fou) error {
- fam_id, err := FouFamilyId()
- if err != nil {
- return err
- }
-
- // setting ip protocol conflicts with encapsulation type GUE
- if f.EncapType == FOU_ENCAP_GUE && f.Protocol != 0 {
- return errors.New("GUE encapsulation doesn't specify an IP protocol")
- }
-
- req := h.newNetlinkRequest(fam_id, unix.NLM_F_ACK)
-
- // int to byte for port
- bp := make([]byte, 2)
- binary.BigEndian.PutUint16(bp[0:2], uint16(f.Port))
-
- attrs := []*nl.RtAttr{
- nl.NewRtAttr(FOU_ATTR_PORT, bp),
- nl.NewRtAttr(FOU_ATTR_TYPE, []byte{uint8(f.EncapType)}),
- nl.NewRtAttr(FOU_ATTR_AF, []byte{uint8(f.Family)}),
- nl.NewRtAttr(FOU_ATTR_IPPROTO, []byte{uint8(f.Protocol)}),
- }
- raw := []byte{FOU_CMD_ADD, 1, 0, 0}
- for _, a := range attrs {
- raw = append(raw, a.Serialize()...)
- }
-
- req.AddRawData(raw)
-
- _, err = req.Execute(unix.NETLINK_GENERIC, 0)
- if err != nil {
- return err
- }
-
- return nil
-}
-
-func FouDel(f Fou) error {
- return pkgHandle.FouDel(f)
-}
-
-func (h *Handle) FouDel(f Fou) error {
- fam_id, err := FouFamilyId()
- if err != nil {
- return err
- }
-
- req := h.newNetlinkRequest(fam_id, unix.NLM_F_ACK)
-
- // int to byte for port
- bp := make([]byte, 2)
- binary.BigEndian.PutUint16(bp[0:2], uint16(f.Port))
-
- attrs := []*nl.RtAttr{
- nl.NewRtAttr(FOU_ATTR_PORT, bp),
- nl.NewRtAttr(FOU_ATTR_AF, []byte{uint8(f.Family)}),
- }
- raw := []byte{FOU_CMD_DEL, 1, 0, 0}
- for _, a := range attrs {
- raw = append(raw, a.Serialize()...)
- }
-
- req.AddRawData(raw)
-
- _, err = req.Execute(unix.NETLINK_GENERIC, 0)
- if err != nil {
- return err
- }
-
- return nil
-}
-
-func FouList(fam int) ([]Fou, error) {
- return pkgHandle.FouList(fam)
-}
-
-func (h *Handle) FouList(fam int) ([]Fou, error) {
- fam_id, err := FouFamilyId()
- if err != nil {
- return nil, err
- }
-
- req := h.newNetlinkRequest(fam_id, unix.NLM_F_DUMP)
-
- attrs := []*nl.RtAttr{
- nl.NewRtAttr(FOU_ATTR_AF, []byte{uint8(fam)}),
- }
- raw := []byte{FOU_CMD_GET, 1, 0, 0}
- for _, a := range attrs {
- raw = append(raw, a.Serialize()...)
- }
-
- req.AddRawData(raw)
-
- msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
- if err != nil {
- return nil, err
- }
-
- fous := make([]Fou, 0, len(msgs))
- for _, m := range msgs {
- f, err := deserializeFouMsg(m)
- if err != nil {
- return fous, err
- }
-
- fous = append(fous, f)
- }
-
- return fous, nil
-}
-
-func deserializeFouMsg(msg []byte) (Fou, error) {
- // we'll skip to byte 4 to first attribute
- msg = msg[3:]
- var shift int
- fou := Fou{}
-
- for {
- // attribute header is at least 16 bits
- if len(msg) < 4 {
- return fou, ErrAttrHeaderTruncated
- }
-
- lgt := int(binary.BigEndian.Uint16(msg[0:2]))
- if len(msg) < lgt+4 {
- return fou, ErrAttrBodyTruncated
- }
- attr := binary.BigEndian.Uint16(msg[2:4])
-
- shift = lgt + 3
- switch attr {
- case FOU_ATTR_AF:
- fou.Family = int(msg[5])
- case FOU_ATTR_PORT:
- fou.Port = int(binary.BigEndian.Uint16(msg[5:7]))
- // port is 2 bytes
- shift = lgt + 2
- case FOU_ATTR_IPPROTO:
- fou.Protocol = int(msg[5])
- case FOU_ATTR_TYPE:
- fou.EncapType = int(msg[5])
- }
-
- msg = msg[shift:]
-
- if len(msg) < 4 {
- break
- }
- }
-
- return fou, nil
-}
diff --git a/vendor/github.com/vishvananda/netlink/fou_unspecified.go b/vendor/github.com/vishvananda/netlink/fou_unspecified.go
deleted file mode 100644
index 3a8365b..0000000
--- a/vendor/github.com/vishvananda/netlink/fou_unspecified.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// +build !linux
-
-package netlink
-
-func FouAdd(f Fou) error {
- return ErrNotImplemented
-}
-
-func FouDel(f Fou) error {
- return ErrNotImplemented
-}
-
-func FouList(fam int) ([]Fou, error) {
- return nil, ErrNotImplemented
-}
diff --git a/vendor/github.com/vishvananda/netlink/genetlink_linux.go b/vendor/github.com/vishvananda/netlink/genetlink_linux.go
deleted file mode 100644
index ce79699..0000000
--- a/vendor/github.com/vishvananda/netlink/genetlink_linux.go
+++ /dev/null
@@ -1,168 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "syscall"
-
- "github.com/vishvananda/netlink/nl"
- "golang.org/x/sys/unix"
-)
-
-type GenlOp struct {
- ID uint32
- Flags uint32
-}
-
-type GenlMulticastGroup struct {
- ID uint32
- Name string
-}
-
-type GenlFamily struct {
- ID uint16
- HdrSize uint32
- Name string
- Version uint32
- MaxAttr uint32
- Ops []GenlOp
- Groups []GenlMulticastGroup
-}
-
-func parseOps(b []byte) ([]GenlOp, error) {
- attrs, err := nl.ParseRouteAttr(b)
- if err != nil {
- return nil, err
- }
- ops := make([]GenlOp, 0, len(attrs))
- for _, a := range attrs {
- nattrs, err := nl.ParseRouteAttr(a.Value)
- if err != nil {
- return nil, err
- }
- var op GenlOp
- for _, na := range nattrs {
- switch na.Attr.Type {
- case nl.GENL_CTRL_ATTR_OP_ID:
- op.ID = native.Uint32(na.Value)
- case nl.GENL_CTRL_ATTR_OP_FLAGS:
- op.Flags = native.Uint32(na.Value)
- }
- }
- ops = append(ops, op)
- }
- return ops, nil
-}
-
-func parseMulticastGroups(b []byte) ([]GenlMulticastGroup, error) {
- attrs, err := nl.ParseRouteAttr(b)
- if err != nil {
- return nil, err
- }
- groups := make([]GenlMulticastGroup, 0, len(attrs))
- for _, a := range attrs {
- nattrs, err := nl.ParseRouteAttr(a.Value)
- if err != nil {
- return nil, err
- }
- var g GenlMulticastGroup
- for _, na := range nattrs {
- switch na.Attr.Type {
- case nl.GENL_CTRL_ATTR_MCAST_GRP_NAME:
- g.Name = nl.BytesToString(na.Value)
- case nl.GENL_CTRL_ATTR_MCAST_GRP_ID:
- g.ID = native.Uint32(na.Value)
- }
- }
- groups = append(groups, g)
- }
- return groups, nil
-}
-
-func (f *GenlFamily) parseAttributes(attrs []syscall.NetlinkRouteAttr) error {
- for _, a := range attrs {
- switch a.Attr.Type {
- case nl.GENL_CTRL_ATTR_FAMILY_NAME:
- f.Name = nl.BytesToString(a.Value)
- case nl.GENL_CTRL_ATTR_FAMILY_ID:
- f.ID = native.Uint16(a.Value)
- case nl.GENL_CTRL_ATTR_VERSION:
- f.Version = native.Uint32(a.Value)
- case nl.GENL_CTRL_ATTR_HDRSIZE:
- f.HdrSize = native.Uint32(a.Value)
- case nl.GENL_CTRL_ATTR_MAXATTR:
- f.MaxAttr = native.Uint32(a.Value)
- case nl.GENL_CTRL_ATTR_OPS:
- ops, err := parseOps(a.Value)
- if err != nil {
- return err
- }
- f.Ops = ops
- case nl.GENL_CTRL_ATTR_MCAST_GROUPS:
- groups, err := parseMulticastGroups(a.Value)
- if err != nil {
- return err
- }
- f.Groups = groups
- }
- }
-
- return nil
-}
-
-func parseFamilies(msgs [][]byte) ([]*GenlFamily, error) {
- families := make([]*GenlFamily, 0, len(msgs))
- for _, m := range msgs {
- attrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])
- if err != nil {
- return nil, err
- }
- family := &GenlFamily{}
- if err := family.parseAttributes(attrs); err != nil {
- return nil, err
- }
-
- families = append(families, family)
- }
- return families, nil
-}
-
-func (h *Handle) GenlFamilyList() ([]*GenlFamily, error) {
- msg := &nl.Genlmsg{
- Command: nl.GENL_CTRL_CMD_GETFAMILY,
- Version: nl.GENL_CTRL_VERSION,
- }
- req := h.newNetlinkRequest(nl.GENL_ID_CTRL, unix.NLM_F_DUMP)
- req.AddData(msg)
- msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
- if err != nil {
- return nil, err
- }
- return parseFamilies(msgs)
-}
-
-func GenlFamilyList() ([]*GenlFamily, error) {
- return pkgHandle.GenlFamilyList()
-}
-
-func (h *Handle) GenlFamilyGet(name string) (*GenlFamily, error) {
- msg := &nl.Genlmsg{
- Command: nl.GENL_CTRL_CMD_GETFAMILY,
- Version: nl.GENL_CTRL_VERSION,
- }
- req := h.newNetlinkRequest(nl.GENL_ID_CTRL, 0)
- req.AddData(msg)
- req.AddData(nl.NewRtAttr(nl.GENL_CTRL_ATTR_FAMILY_NAME, nl.ZeroTerminated(name)))
- msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
- if err != nil {
- return nil, err
- }
- families, err := parseFamilies(msgs)
- if len(families) != 1 {
- return nil, fmt.Errorf("invalid response for GENL_CTRL_CMD_GETFAMILY")
- }
- return families[0], nil
-}
-
-func GenlFamilyGet(name string) (*GenlFamily, error) {
- return pkgHandle.GenlFamilyGet(name)
-}
diff --git a/vendor/github.com/vishvananda/netlink/genetlink_unspecified.go b/vendor/github.com/vishvananda/netlink/genetlink_unspecified.go
deleted file mode 100644
index 0192b99..0000000
--- a/vendor/github.com/vishvananda/netlink/genetlink_unspecified.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// +build !linux
-
-package netlink
-
-type GenlOp struct{}
-
-type GenlMulticastGroup struct{}
-
-type GenlFamily struct{}
-
-func (h *Handle) GenlFamilyList() ([]*GenlFamily, error) {
- return nil, ErrNotImplemented
-}
-
-func GenlFamilyList() ([]*GenlFamily, error) {
- return nil, ErrNotImplemented
-}
-
-func (h *Handle) GenlFamilyGet(name string) (*GenlFamily, error) {
- return nil, ErrNotImplemented
-}
-
-func GenlFamilyGet(name string) (*GenlFamily, error) {
- return nil, ErrNotImplemented
-}
diff --git a/vendor/github.com/vishvananda/netlink/gtp_linux.go b/vendor/github.com/vishvananda/netlink/gtp_linux.go
deleted file mode 100644
index f5e160b..0000000
--- a/vendor/github.com/vishvananda/netlink/gtp_linux.go
+++ /dev/null
@@ -1,239 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "net"
- "strings"
- "syscall"
-
- "github.com/vishvananda/netlink/nl"
- "golang.org/x/sys/unix"
-)
-
-type PDP struct {
- Version uint32
- TID uint64
- PeerAddress net.IP
- MSAddress net.IP
- Flow uint16
- NetNSFD uint32
- ITEI uint32
- OTEI uint32
-}
-
-func (pdp *PDP) String() string {
- elems := []string{}
- elems = append(elems, fmt.Sprintf("Version: %d", pdp.Version))
- if pdp.Version == 0 {
- elems = append(elems, fmt.Sprintf("TID: %d", pdp.TID))
- } else if pdp.Version == 1 {
- elems = append(elems, fmt.Sprintf("TEI: %d/%d", pdp.ITEI, pdp.OTEI))
- }
- elems = append(elems, fmt.Sprintf("MS-Address: %s", pdp.MSAddress))
- elems = append(elems, fmt.Sprintf("Peer-Address: %s", pdp.PeerAddress))
- return fmt.Sprintf("{%s}", strings.Join(elems, " "))
-}
-
-func (p *PDP) parseAttributes(attrs []syscall.NetlinkRouteAttr) error {
- for _, a := range attrs {
- switch a.Attr.Type {
- case nl.GENL_GTP_ATTR_VERSION:
- p.Version = native.Uint32(a.Value)
- case nl.GENL_GTP_ATTR_TID:
- p.TID = native.Uint64(a.Value)
- case nl.GENL_GTP_ATTR_PEER_ADDRESS:
- p.PeerAddress = net.IP(a.Value)
- case nl.GENL_GTP_ATTR_MS_ADDRESS:
- p.MSAddress = net.IP(a.Value)
- case nl.GENL_GTP_ATTR_FLOW:
- p.Flow = native.Uint16(a.Value)
- case nl.GENL_GTP_ATTR_NET_NS_FD:
- p.NetNSFD = native.Uint32(a.Value)
- case nl.GENL_GTP_ATTR_I_TEI:
- p.ITEI = native.Uint32(a.Value)
- case nl.GENL_GTP_ATTR_O_TEI:
- p.OTEI = native.Uint32(a.Value)
- }
- }
- return nil
-}
-
-func parsePDP(msgs [][]byte) ([]*PDP, error) {
- pdps := make([]*PDP, 0, len(msgs))
- for _, m := range msgs {
- attrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])
- if err != nil {
- return nil, err
- }
- pdp := &PDP{}
- if err := pdp.parseAttributes(attrs); err != nil {
- return nil, err
- }
- pdps = append(pdps, pdp)
- }
- return pdps, nil
-}
-
-func (h *Handle) GTPPDPList() ([]*PDP, error) {
- f, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)
- if err != nil {
- return nil, err
- }
- msg := &nl.Genlmsg{
- Command: nl.GENL_GTP_CMD_GETPDP,
- Version: nl.GENL_GTP_VERSION,
- }
- req := h.newNetlinkRequest(int(f.ID), unix.NLM_F_DUMP)
- req.AddData(msg)
- msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
- if err != nil {
- return nil, err
- }
- return parsePDP(msgs)
-}
-
-func GTPPDPList() ([]*PDP, error) {
- return pkgHandle.GTPPDPList()
-}
-
-func gtpPDPGet(req *nl.NetlinkRequest) (*PDP, error) {
- msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
- if err != nil {
- return nil, err
- }
- pdps, err := parsePDP(msgs)
- if err != nil {
- return nil, err
- }
- if len(pdps) != 1 {
- return nil, fmt.Errorf("invalid reqponse for GENL_GTP_CMD_GETPDP")
- }
- return pdps[0], nil
-}
-
-func (h *Handle) GTPPDPByTID(link Link, tid int) (*PDP, error) {
- f, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)
- if err != nil {
- return nil, err
- }
- msg := &nl.Genlmsg{
- Command: nl.GENL_GTP_CMD_GETPDP,
- Version: nl.GENL_GTP_VERSION,
- }
- req := h.newNetlinkRequest(int(f.ID), 0)
- req.AddData(msg)
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(0)))
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_TID, nl.Uint64Attr(uint64(tid))))
- return gtpPDPGet(req)
-}
-
-func GTPPDPByTID(link Link, tid int) (*PDP, error) {
- return pkgHandle.GTPPDPByTID(link, tid)
-}
-
-func (h *Handle) GTPPDPByITEI(link Link, itei int) (*PDP, error) {
- f, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)
- if err != nil {
- return nil, err
- }
- msg := &nl.Genlmsg{
- Command: nl.GENL_GTP_CMD_GETPDP,
- Version: nl.GENL_GTP_VERSION,
- }
- req := h.newNetlinkRequest(int(f.ID), 0)
- req.AddData(msg)
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(1)))
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_I_TEI, nl.Uint32Attr(uint32(itei))))
- return gtpPDPGet(req)
-}
-
-func GTPPDPByITEI(link Link, itei int) (*PDP, error) {
- return pkgHandle.GTPPDPByITEI(link, itei)
-}
-
-func (h *Handle) GTPPDPByMSAddress(link Link, addr net.IP) (*PDP, error) {
- f, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)
- if err != nil {
- return nil, err
- }
- msg := &nl.Genlmsg{
- Command: nl.GENL_GTP_CMD_GETPDP,
- Version: nl.GENL_GTP_VERSION,
- }
- req := h.newNetlinkRequest(int(f.ID), 0)
- req.AddData(msg)
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(0)))
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_MS_ADDRESS, []byte(addr.To4())))
- return gtpPDPGet(req)
-}
-
-func GTPPDPByMSAddress(link Link, addr net.IP) (*PDP, error) {
- return pkgHandle.GTPPDPByMSAddress(link, addr)
-}
-
-func (h *Handle) GTPPDPAdd(link Link, pdp *PDP) error {
- f, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)
- if err != nil {
- return err
- }
- msg := &nl.Genlmsg{
- Command: nl.GENL_GTP_CMD_NEWPDP,
- Version: nl.GENL_GTP_VERSION,
- }
- req := h.newNetlinkRequest(int(f.ID), unix.NLM_F_EXCL|unix.NLM_F_ACK)
- req.AddData(msg)
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(pdp.Version)))
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_PEER_ADDRESS, []byte(pdp.PeerAddress.To4())))
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_MS_ADDRESS, []byte(pdp.MSAddress.To4())))
-
- switch pdp.Version {
- case 0:
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_TID, nl.Uint64Attr(pdp.TID)))
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_FLOW, nl.Uint16Attr(pdp.Flow)))
- case 1:
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_I_TEI, nl.Uint32Attr(pdp.ITEI)))
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_O_TEI, nl.Uint32Attr(pdp.OTEI)))
- default:
- return fmt.Errorf("unsupported GTP version: %d", pdp.Version)
- }
- _, err = req.Execute(unix.NETLINK_GENERIC, 0)
- return err
-}
-
-func GTPPDPAdd(link Link, pdp *PDP) error {
- return pkgHandle.GTPPDPAdd(link, pdp)
-}
-
-func (h *Handle) GTPPDPDel(link Link, pdp *PDP) error {
- f, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)
- if err != nil {
- return err
- }
- msg := &nl.Genlmsg{
- Command: nl.GENL_GTP_CMD_DELPDP,
- Version: nl.GENL_GTP_VERSION,
- }
- req := h.newNetlinkRequest(int(f.ID), unix.NLM_F_EXCL|unix.NLM_F_ACK)
- req.AddData(msg)
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(pdp.Version)))
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))
-
- switch pdp.Version {
- case 0:
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_TID, nl.Uint64Attr(pdp.TID)))
- case 1:
- req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_I_TEI, nl.Uint32Attr(pdp.ITEI)))
- default:
- return fmt.Errorf("unsupported GTP version: %d", pdp.Version)
- }
- _, err = req.Execute(unix.NETLINK_GENERIC, 0)
- return err
-}
-
-func GTPPDPDel(link Link, pdp *PDP) error {
- return pkgHandle.GTPPDPDel(link, pdp)
-}
diff --git a/vendor/github.com/vishvananda/netlink/handle_linux.go b/vendor/github.com/vishvananda/netlink/handle_linux.go
deleted file mode 100644
index 9f6d7fe..0000000
--- a/vendor/github.com/vishvananda/netlink/handle_linux.go
+++ /dev/null
@@ -1,144 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "time"
-
- "github.com/vishvananda/netlink/nl"
- "github.com/vishvananda/netns"
- "golang.org/x/sys/unix"
-)
-
-// Empty handle used by the netlink package methods
-var pkgHandle = &Handle{}
-
-// Handle is an handle for the netlink requests on a
-// specific network namespace. All the requests on the
-// same netlink family share the same netlink socket,
-// which gets released when the handle is deleted.
-type Handle struct {
- sockets map[int]*nl.SocketHandle
- lookupByDump bool
-}
-
-// SupportsNetlinkFamily reports whether the passed netlink family is supported by this Handle
-func (h *Handle) SupportsNetlinkFamily(nlFamily int) bool {
- _, ok := h.sockets[nlFamily]
- return ok
-}
-
-// NewHandle returns a netlink handle on the current network namespace.
-// Caller may specify the netlink families the handle should support.
-// If no families are specified, all the families the netlink package
-// supports will be automatically added.
-func NewHandle(nlFamilies ...int) (*Handle, error) {
- return newHandle(netns.None(), netns.None(), nlFamilies...)
-}
-
-// SetSocketTimeout sets the send and receive timeout for each socket in the
-// netlink handle. Although the socket timeout has granularity of one
-// microsecond, the effective granularity is floored by the kernel timer tick,
-// which default value is four milliseconds.
-func (h *Handle) SetSocketTimeout(to time.Duration) error {
- if to < time.Microsecond {
- return fmt.Errorf("invalid timeout, minimul value is %s", time.Microsecond)
- }
- tv := unix.NsecToTimeval(to.Nanoseconds())
- for _, sh := range h.sockets {
- if err := sh.Socket.SetSendTimeout(&tv); err != nil {
- return err
- }
- if err := sh.Socket.SetReceiveTimeout(&tv); err != nil {
- return err
- }
- }
- return nil
-}
-
-// SetSocketReceiveBufferSize sets the receive buffer size for each
-// socket in the netlink handle. The maximum value is capped by
-// /proc/sys/net/core/rmem_max.
-func (h *Handle) SetSocketReceiveBufferSize(size int, force bool) error {
- opt := unix.SO_RCVBUF
- if force {
- opt = unix.SO_RCVBUFFORCE
- }
- for _, sh := range h.sockets {
- fd := sh.Socket.GetFd()
- err := unix.SetsockoptInt(fd, unix.SOL_SOCKET, opt, size)
- if err != nil {
- return err
- }
- }
- return nil
-}
-
-// GetSocketReceiveBufferSize gets the receiver buffer size for each
-// socket in the netlink handle. The retrieved value should be the
-// double to the one set for SetSocketReceiveBufferSize.
-func (h *Handle) GetSocketReceiveBufferSize() ([]int, error) {
- results := make([]int, len(h.sockets))
- i := 0
- for _, sh := range h.sockets {
- fd := sh.Socket.GetFd()
- size, err := unix.GetsockoptInt(fd, unix.SOL_SOCKET, unix.SO_RCVBUF)
- if err != nil {
- return nil, err
- }
- results[i] = size
- i++
- }
- return results, nil
-}
-
-// NewHandle returns a netlink handle on the network namespace
-// specified by ns. If ns=netns.None(), current network namespace
-// will be assumed
-func NewHandleAt(ns netns.NsHandle, nlFamilies ...int) (*Handle, error) {
- return newHandle(ns, netns.None(), nlFamilies...)
-}
-
-// NewHandleAtFrom works as NewHandle but allows client to specify the
-// new and the origin netns Handle.
-func NewHandleAtFrom(newNs, curNs netns.NsHandle) (*Handle, error) {
- return newHandle(newNs, curNs)
-}
-
-func newHandle(newNs, curNs netns.NsHandle, nlFamilies ...int) (*Handle, error) {
- h := &Handle{sockets: map[int]*nl.SocketHandle{}}
- fams := nl.SupportedNlFamilies
- if len(nlFamilies) != 0 {
- fams = nlFamilies
- }
- for _, f := range fams {
- s, err := nl.GetNetlinkSocketAt(newNs, curNs, f)
- if err != nil {
- return nil, err
- }
- h.sockets[f] = &nl.SocketHandle{Socket: s}
- }
- return h, nil
-}
-
-// Delete releases the resources allocated to this handle
-func (h *Handle) Delete() {
- for _, sh := range h.sockets {
- sh.Close()
- }
- h.sockets = nil
-}
-
-func (h *Handle) newNetlinkRequest(proto, flags int) *nl.NetlinkRequest {
- // Do this so that package API still use nl package variable nextSeqNr
- if h.sockets == nil {
- return nl.NewNetlinkRequest(proto, flags)
- }
- return &nl.NetlinkRequest{
- NlMsghdr: unix.NlMsghdr{
- Len: uint32(unix.SizeofNlMsghdr),
- Type: uint16(proto),
- Flags: unix.NLM_F_REQUEST | uint16(flags),
- },
- Sockets: h.sockets,
- }
-}
diff --git a/vendor/github.com/vishvananda/netlink/handle_unspecified.go b/vendor/github.com/vishvananda/netlink/handle_unspecified.go
deleted file mode 100644
index 915b765..0000000
--- a/vendor/github.com/vishvananda/netlink/handle_unspecified.go
+++ /dev/null
@@ -1,258 +0,0 @@
-// +build !linux
-
-package netlink
-
-import (
- "net"
- "time"
-
- "github.com/vishvananda/netns"
-)
-
-type Handle struct{}
-
-func NewHandle(nlFamilies ...int) (*Handle, error) {
- return nil, ErrNotImplemented
-}
-
-func NewHandleAt(ns netns.NsHandle, nlFamilies ...int) (*Handle, error) {
- return nil, ErrNotImplemented
-}
-
-func NewHandleAtFrom(newNs, curNs netns.NsHandle) (*Handle, error) {
- return nil, ErrNotImplemented
-}
-
-func (h *Handle) Delete() {}
-
-func (h *Handle) SupportsNetlinkFamily(nlFamily int) bool {
- return false
-}
-
-func (h *Handle) SetSocketTimeout(to time.Duration) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) SetPromiscOn(link Link) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) SetPromiscOff(link Link) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetUp(link Link) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetDown(link Link) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetMTU(link Link, mtu int) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetName(link Link, name string) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetAlias(link Link, name string) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetHardwareAddr(link Link, hwaddr net.HardwareAddr) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetVfVlan(link Link, vf, vlan int) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetVfTxRate(link Link, vf, rate int) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetMaster(link Link, master *Bridge) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetNoMaster(link Link) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetMasterByIndex(link Link, masterIndex int) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetNsPid(link Link, nspid int) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetNsFd(link Link, fd int) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkAdd(link Link) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkDel(link Link) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkByName(name string) (Link, error) {
- return nil, ErrNotImplemented
-}
-
-func (h *Handle) LinkByAlias(alias string) (Link, error) {
- return nil, ErrNotImplemented
-}
-
-func (h *Handle) LinkByIndex(index int) (Link, error) {
- return nil, ErrNotImplemented
-}
-
-func (h *Handle) LinkList() ([]Link, error) {
- return nil, ErrNotImplemented
-}
-
-func (h *Handle) LinkSetHairpin(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetGuard(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetFastLeave(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetLearning(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetRootBlock(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetFlood(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) LinkSetTxQLen(link Link, qlen int) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) setProtinfoAttr(link Link, mode bool, attr int) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) AddrAdd(link Link, addr *Addr) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) AddrDel(link Link, addr *Addr) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) AddrList(link Link, family int) ([]Addr, error) {
- return nil, ErrNotImplemented
-}
-
-func (h *Handle) ClassDel(class Class) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) ClassChange(class Class) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) ClassReplace(class Class) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) ClassAdd(class Class) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) ClassList(link Link, parent uint32) ([]Class, error) {
- return nil, ErrNotImplemented
-}
-
-func (h *Handle) FilterDel(filter Filter) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) FilterAdd(filter Filter) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) FilterList(link Link, parent uint32) ([]Filter, error) {
- return nil, ErrNotImplemented
-}
-
-func (h *Handle) NeighAdd(neigh *Neigh) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) NeighSet(neigh *Neigh) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) NeighAppend(neigh *Neigh) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) NeighDel(neigh *Neigh) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) NeighList(linkIndex, family int) ([]Neigh, error) {
- return nil, ErrNotImplemented
-}
-
-func (h *Handle) NeighProxyList(linkIndex, family int) ([]Neigh, error) {
- return nil, ErrNotImplemented
-}
-
-func (h *Handle) RouteAdd(route *Route) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) RouteDel(route *Route) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) RouteGet(destination net.IP) ([]Route, error) {
- return nil, ErrNotImplemented
-}
-
-func (h *Handle) RouteList(link Link, family int) ([]Route, error) {
- return nil, ErrNotImplemented
-}
-
-func (h *Handle) RouteListFiltered(family int, filter *Route, filterMask uint64) ([]Route, error) {
- return nil, ErrNotImplemented
-}
-
-func (h *Handle) RouteReplace(route *Route) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) RuleAdd(rule *Rule) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) RuleDel(rule *Rule) error {
- return ErrNotImplemented
-}
-
-func (h *Handle) RuleList(family int) ([]Rule, error) {
- return nil, ErrNotImplemented
-}
diff --git a/vendor/github.com/vishvananda/netlink/ioctl_linux.go b/vendor/github.com/vishvananda/netlink/ioctl_linux.go
deleted file mode 100644
index a850312..0000000
--- a/vendor/github.com/vishvananda/netlink/ioctl_linux.go
+++ /dev/null
@@ -1,98 +0,0 @@
-package netlink
-
-import (
- "syscall"
- "unsafe"
-
- "golang.org/x/sys/unix"
-)
-
-// ioctl for statistics.
-const (
- // ETHTOOL_GSSET_INFO gets string set info
- ETHTOOL_GSSET_INFO = 0x00000037
- // SIOCETHTOOL is Ethtool interface
- SIOCETHTOOL = 0x8946
- // ETHTOOL_GSTRINGS gets specified string set
- ETHTOOL_GSTRINGS = 0x0000001b
- // ETHTOOL_GSTATS gets NIC-specific statistics
- ETHTOOL_GSTATS = 0x0000001d
-)
-
-// string set id.
-const (
- // ETH_SS_TEST is self-test result names, for use with %ETHTOOL_TEST
- ETH_SS_TEST = iota
- // ETH_SS_STATS statistic names, for use with %ETHTOOL_GSTATS
- ETH_SS_STATS
- // ETH_SS_PRIV_FLAGS are driver private flag names
- ETH_SS_PRIV_FLAGS
- // _ETH_SS_NTUPLE_FILTERS is deprecated
- _ETH_SS_NTUPLE_FILTERS
- // ETH_SS_FEATURES are device feature names
- ETH_SS_FEATURES
- // ETH_SS_RSS_HASH_FUNCS is RSS hush function names
- ETH_SS_RSS_HASH_FUNCS
-)
-
-// IfreqSlave is a struct for ioctl bond manipulation syscalls.
-// It is used to assign slave to bond interface with Name.
-type IfreqSlave struct {
- Name [unix.IFNAMSIZ]byte
- Slave [unix.IFNAMSIZ]byte
-}
-
-// Ifreq is a struct for ioctl ethernet manipulation syscalls.
-type Ifreq struct {
- Name [unix.IFNAMSIZ]byte
- Data uintptr
-}
-
-// ethtoolSset is a string set information
-type ethtoolSset struct {
- cmd uint32
- reserved uint32
- mask uint64
- data [1]uint32
-}
-
-// ethtoolGstrings is string set for data tagging
-type ethtoolGstrings struct {
- cmd uint32
- stringSet uint32
- length uint32
- data [32]byte
-}
-
-type ethtoolStats struct {
- cmd uint32
- nStats uint32
- data [1]uint64
-}
-
-// newIocltSlaveReq returns filled IfreqSlave with proper interface names
-// It is used by ioctl to assign slave to bond master
-func newIocltSlaveReq(slave, master string) *IfreqSlave {
- ifreq := &IfreqSlave{}
- copy(ifreq.Name[:unix.IFNAMSIZ-1], master)
- copy(ifreq.Slave[:unix.IFNAMSIZ-1], slave)
- return ifreq
-}
-
-// newIocltStringSetReq creates request to get interface string set
-func newIocltStringSetReq(linkName string) (*Ifreq, *ethtoolSset) {
- e := &ethtoolSset{
- cmd: ETHTOOL_GSSET_INFO,
- mask: 1 << ETH_SS_STATS,
- }
-
- ifreq := &Ifreq{Data: uintptr(unsafe.Pointer(e))}
- copy(ifreq.Name[:unix.IFNAMSIZ-1], linkName)
- return ifreq, e
-}
-
-// getSocketUDP returns file descriptor to new UDP socket
-// It is used for communication with ioctl interface.
-func getSocketUDP() (int, error) {
- return syscall.Socket(unix.AF_INET, unix.SOCK_DGRAM, 0)
-}
diff --git a/vendor/github.com/vishvananda/netlink/link.go b/vendor/github.com/vishvananda/netlink/link.go
deleted file mode 100644
index fe74ffa..0000000
--- a/vendor/github.com/vishvananda/netlink/link.go
+++ /dev/null
@@ -1,846 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "net"
- "os"
-)
-
-// Link represents a link device from netlink. Shared link attributes
-// like name may be retrieved using the Attrs() method. Unique data
-// can be retrieved by casting the object to the proper type.
-type Link interface {
- Attrs() *LinkAttrs
- Type() string
-}
-
-type (
- NsPid int
- NsFd int
-)
-
-// LinkAttrs represents data shared by most link types
-type LinkAttrs struct {
- Index int
- MTU int
- TxQLen int // Transmit Queue Length
- Name string
- HardwareAddr net.HardwareAddr
- Flags net.Flags
- RawFlags uint32
- ParentIndex int // index of the parent link device
- MasterIndex int // must be the index of a bridge
- Namespace interface{} // nil | NsPid | NsFd
- Alias string
- Statistics *LinkStatistics
- Promisc int
- Xdp *LinkXdp
- EncapType string
- Protinfo *Protinfo
- OperState LinkOperState
- NetNsID int
- NumTxQueues int
- NumRxQueues int
-}
-
-// LinkOperState represents the values of the IFLA_OPERSTATE link
-// attribute, which contains the RFC2863 state of the interface.
-type LinkOperState uint8
-
-const (
- OperUnknown = iota // Status can't be determined.
- OperNotPresent // Some component is missing.
- OperDown // Down.
- OperLowerLayerDown // Down due to state of lower layer.
- OperTesting // In some test mode.
- OperDormant // Not up but pending an external event.
- OperUp // Up, ready to send packets.
-)
-
-func (s LinkOperState) String() string {
- switch s {
- case OperNotPresent:
- return "not-present"
- case OperDown:
- return "down"
- case OperLowerLayerDown:
- return "lower-layer-down"
- case OperTesting:
- return "testing"
- case OperDormant:
- return "dormant"
- case OperUp:
- return "up"
- default:
- return "unknown"
- }
-}
-
-// NewLinkAttrs returns LinkAttrs structure filled with default values
-func NewLinkAttrs() LinkAttrs {
- return LinkAttrs{
- TxQLen: -1,
- }
-}
-
-type LinkStatistics LinkStatistics64
-
-/*
-Ref: struct rtnl_link_stats {...}
-*/
-type LinkStatistics32 struct {
- RxPackets uint32
- TxPackets uint32
- RxBytes uint32
- TxBytes uint32
- RxErrors uint32
- TxErrors uint32
- RxDropped uint32
- TxDropped uint32
- Multicast uint32
- Collisions uint32
- RxLengthErrors uint32
- RxOverErrors uint32
- RxCrcErrors uint32
- RxFrameErrors uint32
- RxFifoErrors uint32
- RxMissedErrors uint32
- TxAbortedErrors uint32
- TxCarrierErrors uint32
- TxFifoErrors uint32
- TxHeartbeatErrors uint32
- TxWindowErrors uint32
- RxCompressed uint32
- TxCompressed uint32
-}
-
-func (s32 LinkStatistics32) to64() *LinkStatistics64 {
- return &LinkStatistics64{
- RxPackets: uint64(s32.RxPackets),
- TxPackets: uint64(s32.TxPackets),
- RxBytes: uint64(s32.RxBytes),
- TxBytes: uint64(s32.TxBytes),
- RxErrors: uint64(s32.RxErrors),
- TxErrors: uint64(s32.TxErrors),
- RxDropped: uint64(s32.RxDropped),
- TxDropped: uint64(s32.TxDropped),
- Multicast: uint64(s32.Multicast),
- Collisions: uint64(s32.Collisions),
- RxLengthErrors: uint64(s32.RxLengthErrors),
- RxOverErrors: uint64(s32.RxOverErrors),
- RxCrcErrors: uint64(s32.RxCrcErrors),
- RxFrameErrors: uint64(s32.RxFrameErrors),
- RxFifoErrors: uint64(s32.RxFifoErrors),
- RxMissedErrors: uint64(s32.RxMissedErrors),
- TxAbortedErrors: uint64(s32.TxAbortedErrors),
- TxCarrierErrors: uint64(s32.TxCarrierErrors),
- TxFifoErrors: uint64(s32.TxFifoErrors),
- TxHeartbeatErrors: uint64(s32.TxHeartbeatErrors),
- TxWindowErrors: uint64(s32.TxWindowErrors),
- RxCompressed: uint64(s32.RxCompressed),
- TxCompressed: uint64(s32.TxCompressed),
- }
-}
-
-/*
-Ref: struct rtnl_link_stats64 {...}
-*/
-type LinkStatistics64 struct {
- RxPackets uint64
- TxPackets uint64
- RxBytes uint64
- TxBytes uint64
- RxErrors uint64
- TxErrors uint64
- RxDropped uint64
- TxDropped uint64
- Multicast uint64
- Collisions uint64
- RxLengthErrors uint64
- RxOverErrors uint64
- RxCrcErrors uint64
- RxFrameErrors uint64
- RxFifoErrors uint64
- RxMissedErrors uint64
- TxAbortedErrors uint64
- TxCarrierErrors uint64
- TxFifoErrors uint64
- TxHeartbeatErrors uint64
- TxWindowErrors uint64
- RxCompressed uint64
- TxCompressed uint64
-}
-
-type LinkXdp struct {
- Fd int
- Attached bool
- Flags uint32
- ProgId uint32
-}
-
-// Device links cannot be created via netlink. These links
-// are links created by udev like 'lo' and 'etho0'
-type Device struct {
- LinkAttrs
-}
-
-func (device *Device) Attrs() *LinkAttrs {
- return &device.LinkAttrs
-}
-
-func (device *Device) Type() string {
- return "device"
-}
-
-// Dummy links are dummy ethernet devices
-type Dummy struct {
- LinkAttrs
-}
-
-func (dummy *Dummy) Attrs() *LinkAttrs {
- return &dummy.LinkAttrs
-}
-
-func (dummy *Dummy) Type() string {
- return "dummy"
-}
-
-// Ifb links are advanced dummy devices for packet filtering
-type Ifb struct {
- LinkAttrs
-}
-
-func (ifb *Ifb) Attrs() *LinkAttrs {
- return &ifb.LinkAttrs
-}
-
-func (ifb *Ifb) Type() string {
- return "ifb"
-}
-
-// Bridge links are simple linux bridges
-type Bridge struct {
- LinkAttrs
- MulticastSnooping *bool
- HelloTime *uint32
-}
-
-func (bridge *Bridge) Attrs() *LinkAttrs {
- return &bridge.LinkAttrs
-}
-
-func (bridge *Bridge) Type() string {
- return "bridge"
-}
-
-// Vlan links have ParentIndex set in their Attrs()
-type Vlan struct {
- LinkAttrs
- VlanId int
-}
-
-func (vlan *Vlan) Attrs() *LinkAttrs {
- return &vlan.LinkAttrs
-}
-
-func (vlan *Vlan) Type() string {
- return "vlan"
-}
-
-type MacvlanMode uint16
-
-const (
- MACVLAN_MODE_DEFAULT MacvlanMode = iota
- MACVLAN_MODE_PRIVATE
- MACVLAN_MODE_VEPA
- MACVLAN_MODE_BRIDGE
- MACVLAN_MODE_PASSTHRU
- MACVLAN_MODE_SOURCE
-)
-
-// Macvlan links have ParentIndex set in their Attrs()
-type Macvlan struct {
- LinkAttrs
- Mode MacvlanMode
-
- // MACAddrs is only populated for Macvlan SOURCE links
- MACAddrs []net.HardwareAddr
-}
-
-func (macvlan *Macvlan) Attrs() *LinkAttrs {
- return &macvlan.LinkAttrs
-}
-
-func (macvlan *Macvlan) Type() string {
- return "macvlan"
-}
-
-// Macvtap - macvtap is a virtual interfaces based on macvlan
-type Macvtap struct {
- Macvlan
-}
-
-func (macvtap Macvtap) Type() string {
- return "macvtap"
-}
-
-type TuntapMode uint16
-type TuntapFlag uint16
-
-// Tuntap links created via /dev/tun/tap, but can be destroyed via netlink
-type Tuntap struct {
- LinkAttrs
- Mode TuntapMode
- Flags TuntapFlag
- Queues int
- Fds []*os.File
-}
-
-func (tuntap *Tuntap) Attrs() *LinkAttrs {
- return &tuntap.LinkAttrs
-}
-
-func (tuntap *Tuntap) Type() string {
- return "tuntap"
-}
-
-// Veth devices must specify PeerName on create
-type Veth struct {
- LinkAttrs
- PeerName string // veth on create only
-}
-
-func (veth *Veth) Attrs() *LinkAttrs {
- return &veth.LinkAttrs
-}
-
-func (veth *Veth) Type() string {
- return "veth"
-}
-
-// GenericLink links represent types that are not currently understood
-// by this netlink library.
-type GenericLink struct {
- LinkAttrs
- LinkType string
-}
-
-func (generic *GenericLink) Attrs() *LinkAttrs {
- return &generic.LinkAttrs
-}
-
-func (generic *GenericLink) Type() string {
- return generic.LinkType
-}
-
-type Vxlan struct {
- LinkAttrs
- VxlanId int
- VtepDevIndex int
- SrcAddr net.IP
- Group net.IP
- TTL int
- TOS int
- Learning bool
- Proxy bool
- RSC bool
- L2miss bool
- L3miss bool
- UDPCSum bool
- UDP6ZeroCSumTx bool
- UDP6ZeroCSumRx bool
- NoAge bool
- GBP bool
- FlowBased bool
- Age int
- Limit int
- Port int
- PortLow int
- PortHigh int
-}
-
-func (vxlan *Vxlan) Attrs() *LinkAttrs {
- return &vxlan.LinkAttrs
-}
-
-func (vxlan *Vxlan) Type() string {
- return "vxlan"
-}
-
-type IPVlanMode uint16
-
-const (
- IPVLAN_MODE_L2 IPVlanMode = iota
- IPVLAN_MODE_L3
- IPVLAN_MODE_L3S
- IPVLAN_MODE_MAX
-)
-
-type IPVlan struct {
- LinkAttrs
- Mode IPVlanMode
-}
-
-func (ipvlan *IPVlan) Attrs() *LinkAttrs {
- return &ipvlan.LinkAttrs
-}
-
-func (ipvlan *IPVlan) Type() string {
- return "ipvlan"
-}
-
-// BondMode type
-type BondMode int
-
-func (b BondMode) String() string {
- s, ok := bondModeToString[b]
- if !ok {
- return fmt.Sprintf("BondMode(%d)", b)
- }
- return s
-}
-
-// StringToBondMode returns bond mode, or uknonw is the s is invalid.
-func StringToBondMode(s string) BondMode {
- mode, ok := StringToBondModeMap[s]
- if !ok {
- return BOND_MODE_UNKNOWN
- }
- return mode
-}
-
-// Possible BondMode
-const (
- BOND_MODE_BALANCE_RR BondMode = iota
- BOND_MODE_ACTIVE_BACKUP
- BOND_MODE_BALANCE_XOR
- BOND_MODE_BROADCAST
- BOND_MODE_802_3AD
- BOND_MODE_BALANCE_TLB
- BOND_MODE_BALANCE_ALB
- BOND_MODE_UNKNOWN
-)
-
-var bondModeToString = map[BondMode]string{
- BOND_MODE_BALANCE_RR: "balance-rr",
- BOND_MODE_ACTIVE_BACKUP: "active-backup",
- BOND_MODE_BALANCE_XOR: "balance-xor",
- BOND_MODE_BROADCAST: "broadcast",
- BOND_MODE_802_3AD: "802.3ad",
- BOND_MODE_BALANCE_TLB: "balance-tlb",
- BOND_MODE_BALANCE_ALB: "balance-alb",
-}
-var StringToBondModeMap = map[string]BondMode{
- "balance-rr": BOND_MODE_BALANCE_RR,
- "active-backup": BOND_MODE_ACTIVE_BACKUP,
- "balance-xor": BOND_MODE_BALANCE_XOR,
- "broadcast": BOND_MODE_BROADCAST,
- "802.3ad": BOND_MODE_802_3AD,
- "balance-tlb": BOND_MODE_BALANCE_TLB,
- "balance-alb": BOND_MODE_BALANCE_ALB,
-}
-
-// BondArpValidate type
-type BondArpValidate int
-
-// Possible BondArpValidate value
-const (
- BOND_ARP_VALIDATE_NONE BondArpValidate = iota
- BOND_ARP_VALIDATE_ACTIVE
- BOND_ARP_VALIDATE_BACKUP
- BOND_ARP_VALIDATE_ALL
-)
-
-// BondPrimaryReselect type
-type BondPrimaryReselect int
-
-// Possible BondPrimaryReselect value
-const (
- BOND_PRIMARY_RESELECT_ALWAYS BondPrimaryReselect = iota
- BOND_PRIMARY_RESELECT_BETTER
- BOND_PRIMARY_RESELECT_FAILURE
-)
-
-// BondArpAllTargets type
-type BondArpAllTargets int
-
-// Possible BondArpAllTargets value
-const (
- BOND_ARP_ALL_TARGETS_ANY BondArpAllTargets = iota
- BOND_ARP_ALL_TARGETS_ALL
-)
-
-// BondFailOverMac type
-type BondFailOverMac int
-
-// Possible BondFailOverMac value
-const (
- BOND_FAIL_OVER_MAC_NONE BondFailOverMac = iota
- BOND_FAIL_OVER_MAC_ACTIVE
- BOND_FAIL_OVER_MAC_FOLLOW
-)
-
-// BondXmitHashPolicy type
-type BondXmitHashPolicy int
-
-func (b BondXmitHashPolicy) String() string {
- s, ok := bondXmitHashPolicyToString[b]
- if !ok {
- return fmt.Sprintf("XmitHashPolicy(%d)", b)
- }
- return s
-}
-
-// StringToBondXmitHashPolicy returns bond lacp arte, or uknonw is the s is invalid.
-func StringToBondXmitHashPolicy(s string) BondXmitHashPolicy {
- lacp, ok := StringToBondXmitHashPolicyMap[s]
- if !ok {
- return BOND_XMIT_HASH_POLICY_UNKNOWN
- }
- return lacp
-}
-
-// Possible BondXmitHashPolicy value
-const (
- BOND_XMIT_HASH_POLICY_LAYER2 BondXmitHashPolicy = iota
- BOND_XMIT_HASH_POLICY_LAYER3_4
- BOND_XMIT_HASH_POLICY_LAYER2_3
- BOND_XMIT_HASH_POLICY_ENCAP2_3
- BOND_XMIT_HASH_POLICY_ENCAP3_4
- BOND_XMIT_HASH_POLICY_UNKNOWN
-)
-
-var bondXmitHashPolicyToString = map[BondXmitHashPolicy]string{
- BOND_XMIT_HASH_POLICY_LAYER2: "layer2",
- BOND_XMIT_HASH_POLICY_LAYER3_4: "layer3+4",
- BOND_XMIT_HASH_POLICY_LAYER2_3: "layer2+3",
- BOND_XMIT_HASH_POLICY_ENCAP2_3: "encap2+3",
- BOND_XMIT_HASH_POLICY_ENCAP3_4: "encap3+4",
-}
-var StringToBondXmitHashPolicyMap = map[string]BondXmitHashPolicy{
- "layer2": BOND_XMIT_HASH_POLICY_LAYER2,
- "layer3+4": BOND_XMIT_HASH_POLICY_LAYER3_4,
- "layer2+3": BOND_XMIT_HASH_POLICY_LAYER2_3,
- "encap2+3": BOND_XMIT_HASH_POLICY_ENCAP2_3,
- "encap3+4": BOND_XMIT_HASH_POLICY_ENCAP3_4,
-}
-
-// BondLacpRate type
-type BondLacpRate int
-
-func (b BondLacpRate) String() string {
- s, ok := bondLacpRateToString[b]
- if !ok {
- return fmt.Sprintf("LacpRate(%d)", b)
- }
- return s
-}
-
-// StringToBondLacpRate returns bond lacp arte, or uknonw is the s is invalid.
-func StringToBondLacpRate(s string) BondLacpRate {
- lacp, ok := StringToBondLacpRateMap[s]
- if !ok {
- return BOND_LACP_RATE_UNKNOWN
- }
- return lacp
-}
-
-// Possible BondLacpRate value
-const (
- BOND_LACP_RATE_SLOW BondLacpRate = iota
- BOND_LACP_RATE_FAST
- BOND_LACP_RATE_UNKNOWN
-)
-
-var bondLacpRateToString = map[BondLacpRate]string{
- BOND_LACP_RATE_SLOW: "slow",
- BOND_LACP_RATE_FAST: "fast",
-}
-var StringToBondLacpRateMap = map[string]BondLacpRate{
- "slow": BOND_LACP_RATE_SLOW,
- "fast": BOND_LACP_RATE_FAST,
-}
-
-// BondAdSelect type
-type BondAdSelect int
-
-// Possible BondAdSelect value
-const (
- BOND_AD_SELECT_STABLE BondAdSelect = iota
- BOND_AD_SELECT_BANDWIDTH
- BOND_AD_SELECT_COUNT
-)
-
-// BondAdInfo represents ad info for bond
-type BondAdInfo struct {
- AggregatorId int
- NumPorts int
- ActorKey int
- PartnerKey int
- PartnerMac net.HardwareAddr
-}
-
-// Bond representation
-type Bond struct {
- LinkAttrs
- Mode BondMode
- ActiveSlave int
- Miimon int
- UpDelay int
- DownDelay int
- UseCarrier int
- ArpInterval int
- ArpIpTargets []net.IP
- ArpValidate BondArpValidate
- ArpAllTargets BondArpAllTargets
- Primary int
- PrimaryReselect BondPrimaryReselect
- FailOverMac BondFailOverMac
- XmitHashPolicy BondXmitHashPolicy
- ResendIgmp int
- NumPeerNotif int
- AllSlavesActive int
- MinLinks int
- LpInterval int
- PackersPerSlave int
- LacpRate BondLacpRate
- AdSelect BondAdSelect
- // looking at iproute tool AdInfo can only be retrived. It can't be set.
- AdInfo *BondAdInfo
- AdActorSysPrio int
- AdUserPortKey int
- AdActorSystem net.HardwareAddr
- TlbDynamicLb int
-}
-
-func NewLinkBond(atr LinkAttrs) *Bond {
- return &Bond{
- LinkAttrs: atr,
- Mode: -1,
- ActiveSlave: -1,
- Miimon: -1,
- UpDelay: -1,
- DownDelay: -1,
- UseCarrier: -1,
- ArpInterval: -1,
- ArpIpTargets: nil,
- ArpValidate: -1,
- ArpAllTargets: -1,
- Primary: -1,
- PrimaryReselect: -1,
- FailOverMac: -1,
- XmitHashPolicy: -1,
- ResendIgmp: -1,
- NumPeerNotif: -1,
- AllSlavesActive: -1,
- MinLinks: -1,
- LpInterval: -1,
- PackersPerSlave: -1,
- LacpRate: -1,
- AdSelect: -1,
- AdActorSysPrio: -1,
- AdUserPortKey: -1,
- AdActorSystem: nil,
- TlbDynamicLb: -1,
- }
-}
-
-// Flag mask for bond options. Bond.Flagmask must be set to on for option to work.
-const (
- BOND_MODE_MASK uint64 = 1 << (1 + iota)
- BOND_ACTIVE_SLAVE_MASK
- BOND_MIIMON_MASK
- BOND_UPDELAY_MASK
- BOND_DOWNDELAY_MASK
- BOND_USE_CARRIER_MASK
- BOND_ARP_INTERVAL_MASK
- BOND_ARP_VALIDATE_MASK
- BOND_ARP_ALL_TARGETS_MASK
- BOND_PRIMARY_MASK
- BOND_PRIMARY_RESELECT_MASK
- BOND_FAIL_OVER_MAC_MASK
- BOND_XMIT_HASH_POLICY_MASK
- BOND_RESEND_IGMP_MASK
- BOND_NUM_PEER_NOTIF_MASK
- BOND_ALL_SLAVES_ACTIVE_MASK
- BOND_MIN_LINKS_MASK
- BOND_LP_INTERVAL_MASK
- BOND_PACKETS_PER_SLAVE_MASK
- BOND_LACP_RATE_MASK
- BOND_AD_SELECT_MASK
-)
-
-// Attrs implementation.
-func (bond *Bond) Attrs() *LinkAttrs {
- return &bond.LinkAttrs
-}
-
-// Type implementation fro Vxlan.
-func (bond *Bond) Type() string {
- return "bond"
-}
-
-// Gretap devices must specify LocalIP and RemoteIP on create
-type Gretap struct {
- LinkAttrs
- IKey uint32
- OKey uint32
- EncapSport uint16
- EncapDport uint16
- Local net.IP
- Remote net.IP
- IFlags uint16
- OFlags uint16
- PMtuDisc uint8
- Ttl uint8
- Tos uint8
- EncapType uint16
- EncapFlags uint16
- Link uint32
- FlowBased bool
-}
-
-func (gretap *Gretap) Attrs() *LinkAttrs {
- return &gretap.LinkAttrs
-}
-
-func (gretap *Gretap) Type() string {
- if gretap.Local.To4() == nil {
- return "ip6gretap"
- }
- return "gretap"
-}
-
-type Iptun struct {
- LinkAttrs
- Ttl uint8
- Tos uint8
- PMtuDisc uint8
- Link uint32
- Local net.IP
- Remote net.IP
- EncapSport uint16
- EncapDport uint16
- EncapType uint16
- EncapFlags uint16
- FlowBased bool
-}
-
-func (iptun *Iptun) Attrs() *LinkAttrs {
- return &iptun.LinkAttrs
-}
-
-func (iptun *Iptun) Type() string {
- return "ipip"
-}
-
-type Sittun struct {
- LinkAttrs
- Link uint32
- Local net.IP
- Remote net.IP
- Ttl uint8
- Tos uint8
- PMtuDisc uint8
- EncapType uint16
- EncapFlags uint16
- EncapSport uint16
- EncapDport uint16
-}
-
-func (sittun *Sittun) Attrs() *LinkAttrs {
- return &sittun.LinkAttrs
-}
-
-func (sittun *Sittun) Type() string {
- return "sit"
-}
-
-type Vti struct {
- LinkAttrs
- IKey uint32
- OKey uint32
- Link uint32
- Local net.IP
- Remote net.IP
-}
-
-func (vti *Vti) Attrs() *LinkAttrs {
- return &vti.LinkAttrs
-}
-
-func (iptun *Vti) Type() string {
- return "vti"
-}
-
-type Gretun struct {
- LinkAttrs
- Link uint32
- IFlags uint16
- OFlags uint16
- IKey uint32
- OKey uint32
- Local net.IP
- Remote net.IP
- Ttl uint8
- Tos uint8
- PMtuDisc uint8
- EncapType uint16
- EncapFlags uint16
- EncapSport uint16
- EncapDport uint16
-}
-
-func (gretun *Gretun) Attrs() *LinkAttrs {
- return &gretun.LinkAttrs
-}
-
-func (gretun *Gretun) Type() string {
- if gretun.Local.To4() == nil {
- return "ip6gre"
- }
- return "gre"
-}
-
-type Vrf struct {
- LinkAttrs
- Table uint32
-}
-
-func (vrf *Vrf) Attrs() *LinkAttrs {
- return &vrf.LinkAttrs
-}
-
-func (vrf *Vrf) Type() string {
- return "vrf"
-}
-
-type GTP struct {
- LinkAttrs
- FD0 int
- FD1 int
- Role int
- PDPHashsize int
-}
-
-func (gtp *GTP) Attrs() *LinkAttrs {
- return &gtp.LinkAttrs
-}
-
-func (gtp *GTP) Type() string {
- return "gtp"
-}
-
-// iproute2 supported devices;
-// vlan | veth | vcan | dummy | ifb | macvlan | macvtap |
-// bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan |
-// gre | gretap | ip6gre | ip6gretap | vti | nlmon |
-// bond_slave | ipvlan
-
-// LinkNotFoundError wraps the various not found errors when
-// getting/reading links. This is intended for better error
-// handling by dependent code so that "not found error" can
-// be distinguished from other errors
-type LinkNotFoundError struct {
- error
-}
diff --git a/vendor/github.com/vishvananda/netlink/link_linux.go b/vendor/github.com/vishvananda/netlink/link_linux.go
deleted file mode 100644
index 540191e..0000000
--- a/vendor/github.com/vishvananda/netlink/link_linux.go
+++ /dev/null
@@ -1,2354 +0,0 @@
-package netlink
-
-import (
- "bytes"
- "encoding/binary"
- "fmt"
- "net"
- "os"
- "syscall"
- "unsafe"
-
- "github.com/vishvananda/netlink/nl"
- "github.com/vishvananda/netns"
- "golang.org/x/sys/unix"
-)
-
-const (
- SizeofLinkStats32 = 0x5c
- SizeofLinkStats64 = 0xd8
-)
-
-const (
- TUNTAP_MODE_TUN TuntapMode = unix.IFF_TUN
- TUNTAP_MODE_TAP TuntapMode = unix.IFF_TAP
- TUNTAP_DEFAULTS TuntapFlag = unix.IFF_TUN_EXCL | unix.IFF_ONE_QUEUE
- TUNTAP_VNET_HDR TuntapFlag = unix.IFF_VNET_HDR
- TUNTAP_TUN_EXCL TuntapFlag = unix.IFF_TUN_EXCL
- TUNTAP_NO_PI TuntapFlag = unix.IFF_NO_PI
- TUNTAP_ONE_QUEUE TuntapFlag = unix.IFF_ONE_QUEUE
- TUNTAP_MULTI_QUEUE TuntapFlag = unix.IFF_MULTI_QUEUE
- TUNTAP_MULTI_QUEUE_DEFAULTS TuntapFlag = TUNTAP_MULTI_QUEUE | TUNTAP_NO_PI
-)
-
-var lookupByDump = false
-
-var macvlanModes = [...]uint32{
- 0,
- nl.MACVLAN_MODE_PRIVATE,
- nl.MACVLAN_MODE_VEPA,
- nl.MACVLAN_MODE_BRIDGE,
- nl.MACVLAN_MODE_PASSTHRU,
- nl.MACVLAN_MODE_SOURCE,
-}
-
-func ensureIndex(link *LinkAttrs) {
- if link != nil && link.Index == 0 {
- newlink, _ := LinkByName(link.Name)
- if newlink != nil {
- link.Index = newlink.Attrs().Index
- }
- }
-}
-
-func (h *Handle) ensureIndex(link *LinkAttrs) {
- if link != nil && link.Index == 0 {
- newlink, _ := h.LinkByName(link.Name)
- if newlink != nil {
- link.Index = newlink.Attrs().Index
- }
- }
-}
-
-func (h *Handle) LinkSetARPOff(link Link) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Change |= unix.IFF_NOARP
- msg.Flags |= unix.IFF_NOARP
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-func LinkSetARPOff(link Link) error {
- return pkgHandle.LinkSetARPOff(link)
-}
-
-func (h *Handle) LinkSetARPOn(link Link) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Change |= unix.IFF_NOARP
- msg.Flags &= ^uint32(unix.IFF_NOARP)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-func LinkSetARPOn(link Link) error {
- return pkgHandle.LinkSetARPOn(link)
-}
-
-func (h *Handle) SetPromiscOn(link Link) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Change = unix.IFF_PROMISC
- msg.Flags = unix.IFF_PROMISC
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-func MacvlanMACAddrAdd(link Link, addr net.HardwareAddr) error {
- return pkgHandle.MacvlanMACAddrAdd(link, addr)
-}
-
-func (h *Handle) MacvlanMACAddrAdd(link Link, addr net.HardwareAddr) error {
- return h.macvlanMACAddrChange(link, []net.HardwareAddr{addr}, nl.MACVLAN_MACADDR_ADD)
-}
-
-func MacvlanMACAddrDel(link Link, addr net.HardwareAddr) error {
- return pkgHandle.MacvlanMACAddrDel(link, addr)
-}
-
-func (h *Handle) MacvlanMACAddrDel(link Link, addr net.HardwareAddr) error {
- return h.macvlanMACAddrChange(link, []net.HardwareAddr{addr}, nl.MACVLAN_MACADDR_DEL)
-}
-
-func MacvlanMACAddrFlush(link Link) error {
- return pkgHandle.MacvlanMACAddrFlush(link)
-}
-
-func (h *Handle) MacvlanMACAddrFlush(link Link) error {
- return h.macvlanMACAddrChange(link, nil, nl.MACVLAN_MACADDR_FLUSH)
-}
-
-func MacvlanMACAddrSet(link Link, addrs []net.HardwareAddr) error {
- return pkgHandle.MacvlanMACAddrSet(link, addrs)
-}
-
-func (h *Handle) MacvlanMACAddrSet(link Link, addrs []net.HardwareAddr) error {
- return h.macvlanMACAddrChange(link, addrs, nl.MACVLAN_MACADDR_SET)
-}
-
-func (h *Handle) macvlanMACAddrChange(link Link, addrs []net.HardwareAddr, mode uint32) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- linkInfo := nl.NewRtAttr(unix.IFLA_LINKINFO, nil)
- nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_KIND, nl.NonZeroTerminated(link.Type()))
- inner := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
-
- // IFLA_MACVLAN_MACADDR_MODE = mode
- b := make([]byte, 4)
- native.PutUint32(b, mode)
- nl.NewRtAttrChild(inner, nl.IFLA_MACVLAN_MACADDR_MODE, b)
-
- // populate message with MAC addrs, if necessary
- switch mode {
- case nl.MACVLAN_MACADDR_ADD, nl.MACVLAN_MACADDR_DEL:
- if len(addrs) == 1 {
- nl.NewRtAttrChild(inner, nl.IFLA_MACVLAN_MACADDR, []byte(addrs[0]))
- }
- case nl.MACVLAN_MACADDR_SET:
- mad := nl.NewRtAttrChild(inner, nl.IFLA_MACVLAN_MACADDR_DATA, nil)
- for _, addr := range addrs {
- nl.NewRtAttrChild(mad, nl.IFLA_MACVLAN_MACADDR, []byte(addr))
- }
- }
-
- req.AddData(linkInfo)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-func BridgeSetMcastSnoop(link Link, on bool) error {
- return pkgHandle.BridgeSetMcastSnoop(link, on)
-}
-
-func (h *Handle) BridgeSetMcastSnoop(link Link, on bool) error {
- bridge := link.(*Bridge)
- bridge.MulticastSnooping = &on
- return h.linkModify(bridge, unix.NLM_F_ACK)
-}
-
-func SetPromiscOn(link Link) error {
- return pkgHandle.SetPromiscOn(link)
-}
-
-func (h *Handle) SetPromiscOff(link Link) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Change = unix.IFF_PROMISC
- msg.Flags = 0 & ^unix.IFF_PROMISC
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-func SetPromiscOff(link Link) error {
- return pkgHandle.SetPromiscOff(link)
-}
-
-// LinkSetUp enables the link device.
-// Equivalent to: `ip link set $link up`
-func LinkSetUp(link Link) error {
- return pkgHandle.LinkSetUp(link)
-}
-
-// LinkSetUp enables the link device.
-// Equivalent to: `ip link set $link up`
-func (h *Handle) LinkSetUp(link Link) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Change = unix.IFF_UP
- msg.Flags = unix.IFF_UP
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// LinkSetDown disables link device.
-// Equivalent to: `ip link set $link down`
-func LinkSetDown(link Link) error {
- return pkgHandle.LinkSetDown(link)
-}
-
-// LinkSetDown disables link device.
-// Equivalent to: `ip link set $link down`
-func (h *Handle) LinkSetDown(link Link) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Change = unix.IFF_UP
- msg.Flags = 0 & ^unix.IFF_UP
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// LinkSetMTU sets the mtu of the link device.
-// Equivalent to: `ip link set $link mtu $mtu`
-func LinkSetMTU(link Link, mtu int) error {
- return pkgHandle.LinkSetMTU(link, mtu)
-}
-
-// LinkSetMTU sets the mtu of the link device.
-// Equivalent to: `ip link set $link mtu $mtu`
-func (h *Handle) LinkSetMTU(link Link, mtu int) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- b := make([]byte, 4)
- native.PutUint32(b, uint32(mtu))
-
- data := nl.NewRtAttr(unix.IFLA_MTU, b)
- req.AddData(data)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// LinkSetName sets the name of the link device.
-// Equivalent to: `ip link set $link name $name`
-func LinkSetName(link Link, name string) error {
- return pkgHandle.LinkSetName(link, name)
-}
-
-// LinkSetName sets the name of the link device.
-// Equivalent to: `ip link set $link name $name`
-func (h *Handle) LinkSetName(link Link, name string) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- data := nl.NewRtAttr(unix.IFLA_IFNAME, []byte(name))
- req.AddData(data)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// LinkSetAlias sets the alias of the link device.
-// Equivalent to: `ip link set dev $link alias $name`
-func LinkSetAlias(link Link, name string) error {
- return pkgHandle.LinkSetAlias(link, name)
-}
-
-// LinkSetAlias sets the alias of the link device.
-// Equivalent to: `ip link set dev $link alias $name`
-func (h *Handle) LinkSetAlias(link Link, name string) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- data := nl.NewRtAttr(unix.IFLA_IFALIAS, []byte(name))
- req.AddData(data)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// LinkSetHardwareAddr sets the hardware address of the link device.
-// Equivalent to: `ip link set $link address $hwaddr`
-func LinkSetHardwareAddr(link Link, hwaddr net.HardwareAddr) error {
- return pkgHandle.LinkSetHardwareAddr(link, hwaddr)
-}
-
-// LinkSetHardwareAddr sets the hardware address of the link device.
-// Equivalent to: `ip link set $link address $hwaddr`
-func (h *Handle) LinkSetHardwareAddr(link Link, hwaddr net.HardwareAddr) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- data := nl.NewRtAttr(unix.IFLA_ADDRESS, []byte(hwaddr))
- req.AddData(data)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// LinkSetVfHardwareAddr sets the hardware address of a vf for the link.
-// Equivalent to: `ip link set $link vf $vf mac $hwaddr`
-func LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error {
- return pkgHandle.LinkSetVfHardwareAddr(link, vf, hwaddr)
-}
-
-// LinkSetVfHardwareAddr sets the hardware address of a vf for the link.
-// Equivalent to: `ip link set $link vf $vf mac $hwaddr`
-func (h *Handle) LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
- info := nl.NewRtAttrChild(data, nl.IFLA_VF_INFO, nil)
- vfmsg := nl.VfMac{
- Vf: uint32(vf),
- }
- copy(vfmsg.Mac[:], []byte(hwaddr))
- nl.NewRtAttrChild(info, nl.IFLA_VF_MAC, vfmsg.Serialize())
- req.AddData(data)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// LinkSetVfVlan sets the vlan of a vf for the link.
-// Equivalent to: `ip link set $link vf $vf vlan $vlan`
-func LinkSetVfVlan(link Link, vf, vlan int) error {
- return pkgHandle.LinkSetVfVlan(link, vf, vlan)
-}
-
-// LinkSetVfVlan sets the vlan of a vf for the link.
-// Equivalent to: `ip link set $link vf $vf vlan $vlan`
-func (h *Handle) LinkSetVfVlan(link Link, vf, vlan int) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
- info := nl.NewRtAttrChild(data, nl.IFLA_VF_INFO, nil)
- vfmsg := nl.VfVlan{
- Vf: uint32(vf),
- Vlan: uint32(vlan),
- }
- nl.NewRtAttrChild(info, nl.IFLA_VF_VLAN, vfmsg.Serialize())
- req.AddData(data)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// LinkSetVfTxRate sets the tx rate of a vf for the link.
-// Equivalent to: `ip link set $link vf $vf rate $rate`
-func LinkSetVfTxRate(link Link, vf, rate int) error {
- return pkgHandle.LinkSetVfTxRate(link, vf, rate)
-}
-
-// LinkSetVfTxRate sets the tx rate of a vf for the link.
-// Equivalent to: `ip link set $link vf $vf rate $rate`
-func (h *Handle) LinkSetVfTxRate(link Link, vf, rate int) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
- info := nl.NewRtAttrChild(data, nl.IFLA_VF_INFO, nil)
- vfmsg := nl.VfTxRate{
- Vf: uint32(vf),
- Rate: uint32(rate),
- }
- nl.NewRtAttrChild(info, nl.IFLA_VF_TX_RATE, vfmsg.Serialize())
- req.AddData(data)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// LinkSetVfSpoofchk enables/disables spoof check on a vf for the link.
-// Equivalent to: `ip link set $link vf $vf spoofchk $check`
-func LinkSetVfSpoofchk(link Link, vf int, check bool) error {
- return pkgHandle.LinkSetVfSpoofchk(link, vf, check)
-}
-
-// LinkSetVfSpookfchk enables/disables spoof check on a vf for the link.
-// Equivalent to: `ip link set $link vf $vf spoofchk $check`
-func (h *Handle) LinkSetVfSpoofchk(link Link, vf int, check bool) error {
- var setting uint32
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
- info := nl.NewRtAttrChild(data, nl.IFLA_VF_INFO, nil)
- if check {
- setting = 1
- }
- vfmsg := nl.VfSpoofchk{
- Vf: uint32(vf),
- Setting: setting,
- }
- nl.NewRtAttrChild(info, nl.IFLA_VF_SPOOFCHK, vfmsg.Serialize())
- req.AddData(data)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// LinkSetVfTrust enables/disables trust state on a vf for the link.
-// Equivalent to: `ip link set $link vf $vf trust $state`
-func LinkSetVfTrust(link Link, vf int, state bool) error {
- return pkgHandle.LinkSetVfTrust(link, vf, state)
-}
-
-// LinkSetVfTrust enables/disables trust state on a vf for the link.
-// Equivalent to: `ip link set $link vf $vf trust $state`
-func (h *Handle) LinkSetVfTrust(link Link, vf int, state bool) error {
- var setting uint32
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
- info := nl.NewRtAttrChild(data, nl.IFLA_VF_INFO, nil)
- if state {
- setting = 1
- }
- vfmsg := nl.VfTrust{
- Vf: uint32(vf),
- Setting: setting,
- }
- nl.NewRtAttrChild(info, nl.IFLA_VF_TRUST, vfmsg.Serialize())
- req.AddData(data)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// LinkSetMaster sets the master of the link device.
-// Equivalent to: `ip link set $link master $master`
-func LinkSetMaster(link Link, master *Bridge) error {
- return pkgHandle.LinkSetMaster(link, master)
-}
-
-// LinkSetMaster sets the master of the link device.
-// Equivalent to: `ip link set $link master $master`
-func (h *Handle) LinkSetMaster(link Link, master *Bridge) error {
- index := 0
- if master != nil {
- masterBase := master.Attrs()
- h.ensureIndex(masterBase)
- index = masterBase.Index
- }
- if index <= 0 {
- return fmt.Errorf("Device does not exist")
- }
- return h.LinkSetMasterByIndex(link, index)
-}
-
-// LinkSetNoMaster removes the master of the link device.
-// Equivalent to: `ip link set $link nomaster`
-func LinkSetNoMaster(link Link) error {
- return pkgHandle.LinkSetNoMaster(link)
-}
-
-// LinkSetNoMaster removes the master of the link device.
-// Equivalent to: `ip link set $link nomaster`
-func (h *Handle) LinkSetNoMaster(link Link) error {
- return h.LinkSetMasterByIndex(link, 0)
-}
-
-// LinkSetMasterByIndex sets the master of the link device.
-// Equivalent to: `ip link set $link master $master`
-func LinkSetMasterByIndex(link Link, masterIndex int) error {
- return pkgHandle.LinkSetMasterByIndex(link, masterIndex)
-}
-
-// LinkSetMasterByIndex sets the master of the link device.
-// Equivalent to: `ip link set $link master $master`
-func (h *Handle) LinkSetMasterByIndex(link Link, masterIndex int) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- b := make([]byte, 4)
- native.PutUint32(b, uint32(masterIndex))
-
- data := nl.NewRtAttr(unix.IFLA_MASTER, b)
- req.AddData(data)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// LinkSetNsPid puts the device into a new network namespace. The
-// pid must be a pid of a running process.
-// Equivalent to: `ip link set $link netns $pid`
-func LinkSetNsPid(link Link, nspid int) error {
- return pkgHandle.LinkSetNsPid(link, nspid)
-}
-
-// LinkSetNsPid puts the device into a new network namespace. The
-// pid must be a pid of a running process.
-// Equivalent to: `ip link set $link netns $pid`
-func (h *Handle) LinkSetNsPid(link Link, nspid int) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- b := make([]byte, 4)
- native.PutUint32(b, uint32(nspid))
-
- data := nl.NewRtAttr(unix.IFLA_NET_NS_PID, b)
- req.AddData(data)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// LinkSetNsFd puts the device into a new network namespace. The
-// fd must be an open file descriptor to a network namespace.
-// Similar to: `ip link set $link netns $ns`
-func LinkSetNsFd(link Link, fd int) error {
- return pkgHandle.LinkSetNsFd(link, fd)
-}
-
-// LinkSetNsFd puts the device into a new network namespace. The
-// fd must be an open file descriptor to a network namespace.
-// Similar to: `ip link set $link netns $ns`
-func (h *Handle) LinkSetNsFd(link Link, fd int) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- b := make([]byte, 4)
- native.PutUint32(b, uint32(fd))
-
- data := nl.NewRtAttr(unix.IFLA_NET_NS_FD, b)
- req.AddData(data)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// LinkSetXdpFd adds a bpf function to the driver. The fd must be a bpf
-// program loaded with bpf(type=BPF_PROG_TYPE_XDP)
-func LinkSetXdpFd(link Link, fd int) error {
- return LinkSetXdpFdWithFlags(link, fd, 0)
-}
-
-// LinkSetXdpFdWithFlags adds a bpf function to the driver with the given
-// options. The fd must be a bpf program loaded with bpf(type=BPF_PROG_TYPE_XDP)
-func LinkSetXdpFdWithFlags(link Link, fd, flags int) error {
- base := link.Attrs()
- ensureIndex(base)
- req := nl.NewNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- addXdpAttrs(&LinkXdp{Fd: fd, Flags: uint32(flags)}, req)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-func boolAttr(val bool) []byte {
- var v uint8
- if val {
- v = 1
- }
- return nl.Uint8Attr(v)
-}
-
-type vxlanPortRange struct {
- Lo, Hi uint16
-}
-
-func addVxlanAttrs(vxlan *Vxlan, linkInfo *nl.RtAttr) {
- data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
-
- if vxlan.FlowBased {
- vxlan.VxlanId = 0
- }
-
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_ID, nl.Uint32Attr(uint32(vxlan.VxlanId)))
-
- if vxlan.VtepDevIndex != 0 {
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_LINK, nl.Uint32Attr(uint32(vxlan.VtepDevIndex)))
- }
- if vxlan.SrcAddr != nil {
- ip := vxlan.SrcAddr.To4()
- if ip != nil {
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_LOCAL, []byte(ip))
- } else {
- ip = vxlan.SrcAddr.To16()
- if ip != nil {
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_LOCAL6, []byte(ip))
- }
- }
- }
- if vxlan.Group != nil {
- group := vxlan.Group.To4()
- if group != nil {
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_GROUP, []byte(group))
- } else {
- group = vxlan.Group.To16()
- if group != nil {
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_GROUP6, []byte(group))
- }
- }
- }
-
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_TTL, nl.Uint8Attr(uint8(vxlan.TTL)))
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_TOS, nl.Uint8Attr(uint8(vxlan.TOS)))
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_LEARNING, boolAttr(vxlan.Learning))
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_PROXY, boolAttr(vxlan.Proxy))
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_RSC, boolAttr(vxlan.RSC))
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_L2MISS, boolAttr(vxlan.L2miss))
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_L3MISS, boolAttr(vxlan.L3miss))
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_UDP_ZERO_CSUM6_TX, boolAttr(vxlan.UDP6ZeroCSumTx))
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_UDP_ZERO_CSUM6_RX, boolAttr(vxlan.UDP6ZeroCSumRx))
-
- if vxlan.UDPCSum {
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_UDP_CSUM, boolAttr(vxlan.UDPCSum))
- }
- if vxlan.GBP {
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_GBP, []byte{})
- }
- if vxlan.FlowBased {
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_FLOWBASED, boolAttr(vxlan.FlowBased))
- }
- if vxlan.NoAge {
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_AGEING, nl.Uint32Attr(0))
- } else if vxlan.Age > 0 {
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_AGEING, nl.Uint32Attr(uint32(vxlan.Age)))
- }
- if vxlan.Limit > 0 {
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_LIMIT, nl.Uint32Attr(uint32(vxlan.Limit)))
- }
- if vxlan.Port > 0 {
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_PORT, htons(uint16(vxlan.Port)))
- }
- if vxlan.PortLow > 0 || vxlan.PortHigh > 0 {
- pr := vxlanPortRange{uint16(vxlan.PortLow), uint16(vxlan.PortHigh)}
-
- buf := new(bytes.Buffer)
- binary.Write(buf, binary.BigEndian, &pr)
-
- nl.NewRtAttrChild(data, nl.IFLA_VXLAN_PORT_RANGE, buf.Bytes())
- }
-}
-
-func addBondAttrs(bond *Bond, linkInfo *nl.RtAttr) {
- data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
- if bond.Mode >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_MODE, nl.Uint8Attr(uint8(bond.Mode)))
- }
- if bond.ActiveSlave >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_ACTIVE_SLAVE, nl.Uint32Attr(uint32(bond.ActiveSlave)))
- }
- if bond.Miimon >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_MIIMON, nl.Uint32Attr(uint32(bond.Miimon)))
- }
- if bond.UpDelay >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_UPDELAY, nl.Uint32Attr(uint32(bond.UpDelay)))
- }
- if bond.DownDelay >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_DOWNDELAY, nl.Uint32Attr(uint32(bond.DownDelay)))
- }
- if bond.UseCarrier >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_USE_CARRIER, nl.Uint8Attr(uint8(bond.UseCarrier)))
- }
- if bond.ArpInterval >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_ARP_INTERVAL, nl.Uint32Attr(uint32(bond.ArpInterval)))
- }
- if bond.ArpIpTargets != nil {
- msg := nl.NewRtAttrChild(data, nl.IFLA_BOND_ARP_IP_TARGET, nil)
- for i := range bond.ArpIpTargets {
- ip := bond.ArpIpTargets[i].To4()
- if ip != nil {
- nl.NewRtAttrChild(msg, i, []byte(ip))
- continue
- }
- ip = bond.ArpIpTargets[i].To16()
- if ip != nil {
- nl.NewRtAttrChild(msg, i, []byte(ip))
- }
- }
- }
- if bond.ArpValidate >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_ARP_VALIDATE, nl.Uint32Attr(uint32(bond.ArpValidate)))
- }
- if bond.ArpAllTargets >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_ARP_ALL_TARGETS, nl.Uint32Attr(uint32(bond.ArpAllTargets)))
- }
- if bond.Primary >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_PRIMARY, nl.Uint32Attr(uint32(bond.Primary)))
- }
- if bond.PrimaryReselect >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_PRIMARY_RESELECT, nl.Uint8Attr(uint8(bond.PrimaryReselect)))
- }
- if bond.FailOverMac >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_FAIL_OVER_MAC, nl.Uint8Attr(uint8(bond.FailOverMac)))
- }
- if bond.XmitHashPolicy >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_XMIT_HASH_POLICY, nl.Uint8Attr(uint8(bond.XmitHashPolicy)))
- }
- if bond.ResendIgmp >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_RESEND_IGMP, nl.Uint32Attr(uint32(bond.ResendIgmp)))
- }
- if bond.NumPeerNotif >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_NUM_PEER_NOTIF, nl.Uint8Attr(uint8(bond.NumPeerNotif)))
- }
- if bond.AllSlavesActive >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_ALL_SLAVES_ACTIVE, nl.Uint8Attr(uint8(bond.AllSlavesActive)))
- }
- if bond.MinLinks >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_MIN_LINKS, nl.Uint32Attr(uint32(bond.MinLinks)))
- }
- if bond.LpInterval >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_LP_INTERVAL, nl.Uint32Attr(uint32(bond.LpInterval)))
- }
- if bond.PackersPerSlave >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_PACKETS_PER_SLAVE, nl.Uint32Attr(uint32(bond.PackersPerSlave)))
- }
- if bond.LacpRate >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_AD_LACP_RATE, nl.Uint8Attr(uint8(bond.LacpRate)))
- }
- if bond.AdSelect >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_AD_SELECT, nl.Uint8Attr(uint8(bond.AdSelect)))
- }
- if bond.AdActorSysPrio >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_AD_ACTOR_SYS_PRIO, nl.Uint16Attr(uint16(bond.AdActorSysPrio)))
- }
- if bond.AdUserPortKey >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_AD_USER_PORT_KEY, nl.Uint16Attr(uint16(bond.AdUserPortKey)))
- }
- if bond.AdActorSystem != nil {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_AD_ACTOR_SYSTEM, []byte(bond.AdActorSystem))
- }
- if bond.TlbDynamicLb >= 0 {
- nl.NewRtAttrChild(data, nl.IFLA_BOND_TLB_DYNAMIC_LB, nl.Uint8Attr(uint8(bond.TlbDynamicLb)))
- }
-}
-
-func cleanupFds(fds []*os.File) {
- for _, f := range fds {
- f.Close()
- }
-}
-
-// LinkAdd adds a new link device. The type and features of the device
-// are taken from the parameters in the link object.
-// Equivalent to: `ip link add $link`
-func LinkAdd(link Link) error {
- return pkgHandle.LinkAdd(link)
-}
-
-// LinkAdd adds a new link device. The type and features of the device
-// are taken fromt the parameters in the link object.
-// Equivalent to: `ip link add $link`
-func (h *Handle) LinkAdd(link Link) error {
- return h.linkModify(link, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
-}
-
-func (h *Handle) linkModify(link Link, flags int) error {
- // TODO: support extra data for macvlan
- base := link.Attrs()
-
- if base.Name == "" {
- return fmt.Errorf("LinkAttrs.Name cannot be empty!")
- }
-
- if tuntap, ok := link.(*Tuntap); ok {
- // TODO: support user
- // TODO: support group
- // TODO: support non- persistent
- if tuntap.Mode < unix.IFF_TUN || tuntap.Mode > unix.IFF_TAP {
- return fmt.Errorf("Tuntap.Mode %v unknown!", tuntap.Mode)
- }
-
- queues := tuntap.Queues
-
- var fds []*os.File
- var req ifReq
- copy(req.Name[:15], base.Name)
-
- req.Flags = uint16(tuntap.Flags)
-
- if queues == 0 { //Legacy compatibility
- queues = 1
- if tuntap.Flags == 0 {
- req.Flags = uint16(TUNTAP_DEFAULTS)
- }
- } else {
- // For best peformance set Flags to TUNTAP_MULTI_QUEUE_DEFAULTS | TUNTAP_VNET_HDR
- // when a) KVM has support for this ABI and
- // b) the value of the flag is queryable using the TUNGETIFF ioctl
- if tuntap.Flags == 0 {
- req.Flags = uint16(TUNTAP_MULTI_QUEUE_DEFAULTS)
- }
- }
-
- req.Flags |= uint16(tuntap.Mode)
-
- for i := 0; i < queues; i++ {
- localReq := req
- file, err := os.OpenFile("/dev/net/tun", os.O_RDWR, 0)
- if err != nil {
- cleanupFds(fds)
- return err
- }
-
- fds = append(fds, file)
- _, _, errno := unix.Syscall(unix.SYS_IOCTL, file.Fd(), uintptr(unix.TUNSETIFF), uintptr(unsafe.Pointer(&localReq)))
- if errno != 0 {
- cleanupFds(fds)
- return fmt.Errorf("Tuntap IOCTL TUNSETIFF failed [%d], errno %v", i, errno)
- }
- }
-
- _, _, errno := unix.Syscall(unix.SYS_IOCTL, fds[0].Fd(), uintptr(unix.TUNSETPERSIST), 1)
- if errno != 0 {
- cleanupFds(fds)
- return fmt.Errorf("Tuntap IOCTL TUNSETPERSIST failed, errno %v", errno)
- }
-
- h.ensureIndex(base)
-
- // can't set master during create, so set it afterwards
- if base.MasterIndex != 0 {
- // TODO: verify MasterIndex is actually a bridge?
- err := h.LinkSetMasterByIndex(link, base.MasterIndex)
- if err != nil {
- _, _, _ = unix.Syscall(unix.SYS_IOCTL, fds[0].Fd(), uintptr(unix.TUNSETPERSIST), 0)
- cleanupFds(fds)
- return err
- }
- }
-
- if tuntap.Queues == 0 {
- cleanupFds(fds)
- } else {
- tuntap.Fds = fds
- }
-
- return nil
- }
-
- req := h.newNetlinkRequest(unix.RTM_NEWLINK, flags)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- // TODO: make it shorter
- if base.Flags&net.FlagUp != 0 {
- msg.Change = unix.IFF_UP
- msg.Flags = unix.IFF_UP
- }
- if base.Flags&net.FlagBroadcast != 0 {
- msg.Change |= unix.IFF_BROADCAST
- msg.Flags |= unix.IFF_BROADCAST
- }
- if base.Flags&net.FlagLoopback != 0 {
- msg.Change |= unix.IFF_LOOPBACK
- msg.Flags |= unix.IFF_LOOPBACK
- }
- if base.Flags&net.FlagPointToPoint != 0 {
- msg.Change |= unix.IFF_POINTOPOINT
- msg.Flags |= unix.IFF_POINTOPOINT
- }
- if base.Flags&net.FlagMulticast != 0 {
- msg.Change |= unix.IFF_MULTICAST
- msg.Flags |= unix.IFF_MULTICAST
- }
- if base.Index != 0 {
- msg.Index = int32(base.Index)
- }
-
- req.AddData(msg)
-
- if base.ParentIndex != 0 {
- b := make([]byte, 4)
- native.PutUint32(b, uint32(base.ParentIndex))
- data := nl.NewRtAttr(unix.IFLA_LINK, b)
- req.AddData(data)
- } else if link.Type() == "ipvlan" {
- return fmt.Errorf("Can't create ipvlan link without ParentIndex")
- }
-
- nameData := nl.NewRtAttr(unix.IFLA_IFNAME, nl.ZeroTerminated(base.Name))
- req.AddData(nameData)
-
- if base.MTU > 0 {
- mtu := nl.NewRtAttr(unix.IFLA_MTU, nl.Uint32Attr(uint32(base.MTU)))
- req.AddData(mtu)
- }
-
- if base.TxQLen >= 0 {
- qlen := nl.NewRtAttr(unix.IFLA_TXQLEN, nl.Uint32Attr(uint32(base.TxQLen)))
- req.AddData(qlen)
- }
-
- if base.HardwareAddr != nil {
- hwaddr := nl.NewRtAttr(unix.IFLA_ADDRESS, []byte(base.HardwareAddr))
- req.AddData(hwaddr)
- }
-
- if base.NumTxQueues > 0 {
- txqueues := nl.NewRtAttr(unix.IFLA_NUM_TX_QUEUES, nl.Uint32Attr(uint32(base.NumTxQueues)))
- req.AddData(txqueues)
- }
-
- if base.NumRxQueues > 0 {
- rxqueues := nl.NewRtAttr(unix.IFLA_NUM_RX_QUEUES, nl.Uint32Attr(uint32(base.NumRxQueues)))
- req.AddData(rxqueues)
- }
-
- if base.Namespace != nil {
- var attr *nl.RtAttr
- switch base.Namespace.(type) {
- case NsPid:
- val := nl.Uint32Attr(uint32(base.Namespace.(NsPid)))
- attr = nl.NewRtAttr(unix.IFLA_NET_NS_PID, val)
- case NsFd:
- val := nl.Uint32Attr(uint32(base.Namespace.(NsFd)))
- attr = nl.NewRtAttr(unix.IFLA_NET_NS_FD, val)
- }
-
- req.AddData(attr)
- }
-
- if base.Xdp != nil {
- addXdpAttrs(base.Xdp, req)
- }
-
- linkInfo := nl.NewRtAttr(unix.IFLA_LINKINFO, nil)
- nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_KIND, nl.NonZeroTerminated(link.Type()))
-
- switch link := link.(type) {
- case *Vlan:
- b := make([]byte, 2)
- native.PutUint16(b, uint16(link.VlanId))
- data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
- nl.NewRtAttrChild(data, nl.IFLA_VLAN_ID, b)
- case *Veth:
- data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
- peer := nl.NewRtAttrChild(data, nl.VETH_INFO_PEER, nil)
- nl.NewIfInfomsgChild(peer, unix.AF_UNSPEC)
- nl.NewRtAttrChild(peer, unix.IFLA_IFNAME, nl.ZeroTerminated(link.PeerName))
- if base.TxQLen >= 0 {
- nl.NewRtAttrChild(peer, unix.IFLA_TXQLEN, nl.Uint32Attr(uint32(base.TxQLen)))
- }
- if base.MTU > 0 {
- nl.NewRtAttrChild(peer, unix.IFLA_MTU, nl.Uint32Attr(uint32(base.MTU)))
- }
-
- case *Vxlan:
- addVxlanAttrs(link, linkInfo)
- case *Bond:
- addBondAttrs(link, linkInfo)
- case *IPVlan:
- data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
- nl.NewRtAttrChild(data, nl.IFLA_IPVLAN_MODE, nl.Uint16Attr(uint16(link.Mode)))
- case *Macvlan:
- if link.Mode != MACVLAN_MODE_DEFAULT {
- data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
- nl.NewRtAttrChild(data, nl.IFLA_MACVLAN_MODE, nl.Uint32Attr(macvlanModes[link.Mode]))
- }
- case *Macvtap:
- if link.Mode != MACVLAN_MODE_DEFAULT {
- data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
- nl.NewRtAttrChild(data, nl.IFLA_MACVLAN_MODE, nl.Uint32Attr(macvlanModes[link.Mode]))
- }
- case *Gretap:
- addGretapAttrs(link, linkInfo)
- case *Iptun:
- addIptunAttrs(link, linkInfo)
- case *Sittun:
- addSittunAttrs(link, linkInfo)
- case *Gretun:
- addGretunAttrs(link, linkInfo)
- case *Vti:
- addVtiAttrs(link, linkInfo)
- case *Vrf:
- addVrfAttrs(link, linkInfo)
- case *Bridge:
- addBridgeAttrs(link, linkInfo)
- case *GTP:
- addGTPAttrs(link, linkInfo)
- }
-
- req.AddData(linkInfo)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- if err != nil {
- return err
- }
-
- h.ensureIndex(base)
-
- // can't set master during create, so set it afterwards
- if base.MasterIndex != 0 {
- // TODO: verify MasterIndex is actually a bridge?
- return h.LinkSetMasterByIndex(link, base.MasterIndex)
- }
- return nil
-}
-
-// LinkDel deletes link device. Either Index or Name must be set in
-// the link object for it to be deleted. The other values are ignored.
-// Equivalent to: `ip link del $link`
-func LinkDel(link Link) error {
- return pkgHandle.LinkDel(link)
-}
-
-// LinkDel deletes link device. Either Index or Name must be set in
-// the link object for it to be deleted. The other values are ignored.
-// Equivalent to: `ip link del $link`
-func (h *Handle) LinkDel(link Link) error {
- base := link.Attrs()
-
- h.ensureIndex(base)
-
- req := h.newNetlinkRequest(unix.RTM_DELLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-func (h *Handle) linkByNameDump(name string) (Link, error) {
- links, err := h.LinkList()
- if err != nil {
- return nil, err
- }
-
- for _, link := range links {
- if link.Attrs().Name == name {
- return link, nil
- }
- }
- return nil, LinkNotFoundError{fmt.Errorf("Link %s not found", name)}
-}
-
-func (h *Handle) linkByAliasDump(alias string) (Link, error) {
- links, err := h.LinkList()
- if err != nil {
- return nil, err
- }
-
- for _, link := range links {
- if link.Attrs().Alias == alias {
- return link, nil
- }
- }
- return nil, LinkNotFoundError{fmt.Errorf("Link alias %s not found", alias)}
-}
-
-// LinkByName finds a link by name and returns a pointer to the object.
-func LinkByName(name string) (Link, error) {
- return pkgHandle.LinkByName(name)
-}
-
-// LinkByName finds a link by name and returns a pointer to the object.
-func (h *Handle) LinkByName(name string) (Link, error) {
- if h.lookupByDump {
- return h.linkByNameDump(name)
- }
-
- req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- req.AddData(msg)
-
- nameData := nl.NewRtAttr(unix.IFLA_IFNAME, nl.ZeroTerminated(name))
- req.AddData(nameData)
-
- link, err := execGetLink(req)
- if err == unix.EINVAL {
- // older kernels don't support looking up via IFLA_IFNAME
- // so fall back to dumping all links
- h.lookupByDump = true
- return h.linkByNameDump(name)
- }
-
- return link, err
-}
-
-// LinkByAlias finds a link by its alias and returns a pointer to the object.
-// If there are multiple links with the alias it returns the first one
-func LinkByAlias(alias string) (Link, error) {
- return pkgHandle.LinkByAlias(alias)
-}
-
-// LinkByAlias finds a link by its alias and returns a pointer to the object.
-// If there are multiple links with the alias it returns the first one
-func (h *Handle) LinkByAlias(alias string) (Link, error) {
- if h.lookupByDump {
- return h.linkByAliasDump(alias)
- }
-
- req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- req.AddData(msg)
-
- nameData := nl.NewRtAttr(unix.IFLA_IFALIAS, nl.ZeroTerminated(alias))
- req.AddData(nameData)
-
- link, err := execGetLink(req)
- if err == unix.EINVAL {
- // older kernels don't support looking up via IFLA_IFALIAS
- // so fall back to dumping all links
- h.lookupByDump = true
- return h.linkByAliasDump(alias)
- }
-
- return link, err
-}
-
-// LinkByIndex finds a link by index and returns a pointer to the object.
-func LinkByIndex(index int) (Link, error) {
- return pkgHandle.LinkByIndex(index)
-}
-
-// LinkByIndex finds a link by index and returns a pointer to the object.
-func (h *Handle) LinkByIndex(index int) (Link, error) {
- req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(index)
- req.AddData(msg)
-
- return execGetLink(req)
-}
-
-func execGetLink(req *nl.NetlinkRequest) (Link, error) {
- msgs, err := req.Execute(unix.NETLINK_ROUTE, 0)
- if err != nil {
- if errno, ok := err.(syscall.Errno); ok {
- if errno == unix.ENODEV {
- return nil, LinkNotFoundError{fmt.Errorf("Link not found")}
- }
- }
- return nil, err
- }
-
- switch {
- case len(msgs) == 0:
- return nil, LinkNotFoundError{fmt.Errorf("Link not found")}
-
- case len(msgs) == 1:
- return LinkDeserialize(nil, msgs[0])
-
- default:
- return nil, fmt.Errorf("More than one link found")
- }
-}
-
-// linkDeserialize deserializes a raw message received from netlink into
-// a link object.
-func LinkDeserialize(hdr *unix.NlMsghdr, m []byte) (Link, error) {
- msg := nl.DeserializeIfInfomsg(m)
-
- attrs, err := nl.ParseRouteAttr(m[msg.Len():])
- if err != nil {
- return nil, err
- }
-
- base := LinkAttrs{Index: int(msg.Index), RawFlags: msg.Flags, Flags: linkFlags(msg.Flags), EncapType: msg.EncapType()}
- if msg.Flags&unix.IFF_PROMISC != 0 {
- base.Promisc = 1
- }
- var (
- link Link
- stats32 []byte
- stats64 []byte
- linkType string
- )
- for _, attr := range attrs {
- switch attr.Attr.Type {
- case unix.IFLA_LINKINFO:
- infos, err := nl.ParseRouteAttr(attr.Value)
- if err != nil {
- return nil, err
- }
- for _, info := range infos {
- switch info.Attr.Type {
- case nl.IFLA_INFO_KIND:
- linkType = string(info.Value[:len(info.Value)-1])
- switch linkType {
- case "dummy":
- link = &Dummy{}
- case "ifb":
- link = &Ifb{}
- case "bridge":
- link = &Bridge{}
- case "vlan":
- link = &Vlan{}
- case "veth":
- link = &Veth{}
- case "vxlan":
- link = &Vxlan{}
- case "bond":
- link = &Bond{}
- case "ipvlan":
- link = &IPVlan{}
- case "macvlan":
- link = &Macvlan{}
- case "macvtap":
- link = &Macvtap{}
- case "gretap":
- link = &Gretap{}
- case "ip6gretap":
- link = &Gretap{}
- case "ipip":
- link = &Iptun{}
- case "sit":
- link = &Sittun{}
- case "gre":
- link = &Gretun{}
- case "ip6gre":
- link = &Gretun{}
- case "vti":
- link = &Vti{}
- case "vrf":
- link = &Vrf{}
- case "gtp":
- link = &GTP{}
- default:
- link = &GenericLink{LinkType: linkType}
- }
- case nl.IFLA_INFO_DATA:
- data, err := nl.ParseRouteAttr(info.Value)
- if err != nil {
- return nil, err
- }
- switch linkType {
- case "vlan":
- parseVlanData(link, data)
- case "vxlan":
- parseVxlanData(link, data)
- case "bond":
- parseBondData(link, data)
- case "ipvlan":
- parseIPVlanData(link, data)
- case "macvlan":
- parseMacvlanData(link, data)
- case "macvtap":
- parseMacvtapData(link, data)
- case "gretap":
- parseGretapData(link, data)
- case "ip6gretap":
- parseGretapData(link, data)
- case "ipip":
- parseIptunData(link, data)
- case "sit":
- parseSittunData(link, data)
- case "gre":
- parseGretunData(link, data)
- case "ip6gre":
- parseGretunData(link, data)
- case "vti":
- parseVtiData(link, data)
- case "vrf":
- parseVrfData(link, data)
- case "bridge":
- parseBridgeData(link, data)
- case "gtp":
- parseGTPData(link, data)
- }
- }
- }
- case unix.IFLA_ADDRESS:
- var nonzero bool
- for _, b := range attr.Value {
- if b != 0 {
- nonzero = true
- }
- }
- if nonzero {
- base.HardwareAddr = attr.Value[:]
- }
- case unix.IFLA_IFNAME:
- base.Name = string(attr.Value[:len(attr.Value)-1])
- case unix.IFLA_MTU:
- base.MTU = int(native.Uint32(attr.Value[0:4]))
- case unix.IFLA_LINK:
- base.ParentIndex = int(native.Uint32(attr.Value[0:4]))
- case unix.IFLA_MASTER:
- base.MasterIndex = int(native.Uint32(attr.Value[0:4]))
- case unix.IFLA_TXQLEN:
- base.TxQLen = int(native.Uint32(attr.Value[0:4]))
- case unix.IFLA_IFALIAS:
- base.Alias = string(attr.Value[:len(attr.Value)-1])
- case unix.IFLA_STATS:
- stats32 = attr.Value[:]
- case unix.IFLA_STATS64:
- stats64 = attr.Value[:]
- case unix.IFLA_XDP:
- xdp, err := parseLinkXdp(attr.Value[:])
- if err != nil {
- return nil, err
- }
- base.Xdp = xdp
- case unix.IFLA_PROTINFO | unix.NLA_F_NESTED:
- if hdr != nil && hdr.Type == unix.RTM_NEWLINK &&
- msg.Family == unix.AF_BRIDGE {
- attrs, err := nl.ParseRouteAttr(attr.Value[:])
- if err != nil {
- return nil, err
- }
- base.Protinfo = parseProtinfo(attrs)
- }
- case unix.IFLA_OPERSTATE:
- base.OperState = LinkOperState(uint8(attr.Value[0]))
- case unix.IFLA_LINK_NETNSID:
- base.NetNsID = int(native.Uint32(attr.Value[0:4]))
- }
- }
-
- if stats64 != nil {
- base.Statistics = parseLinkStats64(stats64)
- } else if stats32 != nil {
- base.Statistics = parseLinkStats32(stats32)
- }
-
- // Links that don't have IFLA_INFO_KIND are hardware devices
- if link == nil {
- link = &Device{}
- }
- *link.Attrs() = base
-
- return link, nil
-}
-
-// LinkList gets a list of link devices.
-// Equivalent to: `ip link show`
-func LinkList() ([]Link, error) {
- return pkgHandle.LinkList()
-}
-
-// LinkList gets a list of link devices.
-// Equivalent to: `ip link show`
-func (h *Handle) LinkList() ([]Link, error) {
- // NOTE(vish): This duplicates functionality in net/iface_linux.go, but we need
- // to get the message ourselves to parse link type.
- req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_DUMP)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- req.AddData(msg)
-
- msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWLINK)
- if err != nil {
- return nil, err
- }
-
- var res []Link
- for _, m := range msgs {
- link, err := LinkDeserialize(nil, m)
- if err != nil {
- return nil, err
- }
- res = append(res, link)
- }
-
- return res, nil
-}
-
-// LinkUpdate is used to pass information back from LinkSubscribe()
-type LinkUpdate struct {
- nl.IfInfomsg
- Header unix.NlMsghdr
- Link
-}
-
-// LinkSubscribe takes a chan down which notifications will be sent
-// when links change. Close the 'done' chan to stop subscription.
-func LinkSubscribe(ch chan<- LinkUpdate, done <-chan struct{}) error {
- return linkSubscribeAt(netns.None(), netns.None(), ch, done, nil, false)
-}
-
-// LinkSubscribeAt works like LinkSubscribe plus it allows the caller
-// to choose the network namespace in which to subscribe (ns).
-func LinkSubscribeAt(ns netns.NsHandle, ch chan<- LinkUpdate, done <-chan struct{}) error {
- return linkSubscribeAt(ns, netns.None(), ch, done, nil, false)
-}
-
-// LinkSubscribeOptions contains a set of options to use with
-// LinkSubscribeWithOptions.
-type LinkSubscribeOptions struct {
- Namespace *netns.NsHandle
- ErrorCallback func(error)
- ListExisting bool
-}
-
-// LinkSubscribeWithOptions work like LinkSubscribe but enable to
-// provide additional options to modify the behavior. Currently, the
-// namespace can be provided as well as an error callback.
-func LinkSubscribeWithOptions(ch chan<- LinkUpdate, done <-chan struct{}, options LinkSubscribeOptions) error {
- if options.Namespace == nil {
- none := netns.None()
- options.Namespace = &none
- }
- return linkSubscribeAt(*options.Namespace, netns.None(), ch, done, options.ErrorCallback, options.ListExisting)
-}
-
-func linkSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- LinkUpdate, done <-chan struct{}, cberr func(error), listExisting bool) error {
- s, err := nl.SubscribeAt(newNs, curNs, unix.NETLINK_ROUTE, unix.RTNLGRP_LINK)
- if err != nil {
- return err
- }
- if done != nil {
- go func() {
- <-done
- s.Close()
- }()
- }
- if listExisting {
- req := pkgHandle.newNetlinkRequest(unix.RTM_GETLINK,
- unix.NLM_F_DUMP)
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- req.AddData(msg)
- if err := s.Send(req); err != nil {
- return err
- }
- }
- go func() {
- defer close(ch)
- for {
- msgs, err := s.Receive()
- if err != nil {
- if cberr != nil {
- cberr(err)
- }
- return
- }
- for _, m := range msgs {
- if m.Header.Type == unix.NLMSG_DONE {
- continue
- }
- if m.Header.Type == unix.NLMSG_ERROR {
- native := nl.NativeEndian()
- error := int32(native.Uint32(m.Data[0:4]))
- if error == 0 {
- continue
- }
- if cberr != nil {
- cberr(syscall.Errno(-error))
- }
- return
- }
- ifmsg := nl.DeserializeIfInfomsg(m.Data)
- header := unix.NlMsghdr(m.Header)
- link, err := LinkDeserialize(&header, m.Data)
- if err != nil {
- if cberr != nil {
- cberr(err)
- }
- return
- }
- ch <- LinkUpdate{IfInfomsg: *ifmsg, Header: header, Link: link}
- }
- }
- }()
-
- return nil
-}
-
-func LinkSetHairpin(link Link, mode bool) error {
- return pkgHandle.LinkSetHairpin(link, mode)
-}
-
-func (h *Handle) LinkSetHairpin(link Link, mode bool) error {
- return h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_MODE)
-}
-
-func LinkSetGuard(link Link, mode bool) error {
- return pkgHandle.LinkSetGuard(link, mode)
-}
-
-func (h *Handle) LinkSetGuard(link Link, mode bool) error {
- return h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_GUARD)
-}
-
-func LinkSetFastLeave(link Link, mode bool) error {
- return pkgHandle.LinkSetFastLeave(link, mode)
-}
-
-func (h *Handle) LinkSetFastLeave(link Link, mode bool) error {
- return h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_FAST_LEAVE)
-}
-
-func LinkSetLearning(link Link, mode bool) error {
- return pkgHandle.LinkSetLearning(link, mode)
-}
-
-func (h *Handle) LinkSetLearning(link Link, mode bool) error {
- return h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_LEARNING)
-}
-
-func LinkSetRootBlock(link Link, mode bool) error {
- return pkgHandle.LinkSetRootBlock(link, mode)
-}
-
-func (h *Handle) LinkSetRootBlock(link Link, mode bool) error {
- return h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_PROTECT)
-}
-
-func LinkSetFlood(link Link, mode bool) error {
- return pkgHandle.LinkSetFlood(link, mode)
-}
-
-func (h *Handle) LinkSetFlood(link Link, mode bool) error {
- return h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_UNICAST_FLOOD)
-}
-
-func LinkSetBrProxyArp(link Link, mode bool) error {
- return pkgHandle.LinkSetBrProxyArp(link, mode)
-}
-
-func (h *Handle) LinkSetBrProxyArp(link Link, mode bool) error {
- return h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_PROXYARP)
-}
-
-func LinkSetBrProxyArpWiFi(link Link, mode bool) error {
- return pkgHandle.LinkSetBrProxyArpWiFi(link, mode)
-}
-
-func (h *Handle) LinkSetBrProxyArpWiFi(link Link, mode bool) error {
- return h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_PROXYARP_WIFI)
-}
-
-func (h *Handle) setProtinfoAttr(link Link, mode bool, attr int) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_BRIDGE)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- br := nl.NewRtAttr(unix.IFLA_PROTINFO|unix.NLA_F_NESTED, nil)
- nl.NewRtAttrChild(br, attr, boolToByte(mode))
- req.AddData(br)
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- if err != nil {
- return err
- }
- return nil
-}
-
-// LinkSetTxQLen sets the transaction queue length for the link.
-// Equivalent to: `ip link set $link txqlen $qlen`
-func LinkSetTxQLen(link Link, qlen int) error {
- return pkgHandle.LinkSetTxQLen(link, qlen)
-}
-
-// LinkSetTxQLen sets the transaction queue length for the link.
-// Equivalent to: `ip link set $link txqlen $qlen`
-func (h *Handle) LinkSetTxQLen(link Link, qlen int) error {
- base := link.Attrs()
- h.ensureIndex(base)
- req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
-
- msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- msg.Index = int32(base.Index)
- req.AddData(msg)
-
- b := make([]byte, 4)
- native.PutUint32(b, uint32(qlen))
-
- data := nl.NewRtAttr(unix.IFLA_TXQLEN, b)
- req.AddData(data)
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-func parseVlanData(link Link, data []syscall.NetlinkRouteAttr) {
- vlan := link.(*Vlan)
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.IFLA_VLAN_ID:
- vlan.VlanId = int(native.Uint16(datum.Value[0:2]))
- }
- }
-}
-
-func parseVxlanData(link Link, data []syscall.NetlinkRouteAttr) {
- vxlan := link.(*Vxlan)
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.IFLA_VXLAN_ID:
- vxlan.VxlanId = int(native.Uint32(datum.Value[0:4]))
- case nl.IFLA_VXLAN_LINK:
- vxlan.VtepDevIndex = int(native.Uint32(datum.Value[0:4]))
- case nl.IFLA_VXLAN_LOCAL:
- vxlan.SrcAddr = net.IP(datum.Value[0:4])
- case nl.IFLA_VXLAN_LOCAL6:
- vxlan.SrcAddr = net.IP(datum.Value[0:16])
- case nl.IFLA_VXLAN_GROUP:
- vxlan.Group = net.IP(datum.Value[0:4])
- case nl.IFLA_VXLAN_GROUP6:
- vxlan.Group = net.IP(datum.Value[0:16])
- case nl.IFLA_VXLAN_TTL:
- vxlan.TTL = int(datum.Value[0])
- case nl.IFLA_VXLAN_TOS:
- vxlan.TOS = int(datum.Value[0])
- case nl.IFLA_VXLAN_LEARNING:
- vxlan.Learning = int8(datum.Value[0]) != 0
- case nl.IFLA_VXLAN_PROXY:
- vxlan.Proxy = int8(datum.Value[0]) != 0
- case nl.IFLA_VXLAN_RSC:
- vxlan.RSC = int8(datum.Value[0]) != 0
- case nl.IFLA_VXLAN_L2MISS:
- vxlan.L2miss = int8(datum.Value[0]) != 0
- case nl.IFLA_VXLAN_L3MISS:
- vxlan.L3miss = int8(datum.Value[0]) != 0
- case nl.IFLA_VXLAN_UDP_CSUM:
- vxlan.UDPCSum = int8(datum.Value[0]) != 0
- case nl.IFLA_VXLAN_UDP_ZERO_CSUM6_TX:
- vxlan.UDP6ZeroCSumTx = int8(datum.Value[0]) != 0
- case nl.IFLA_VXLAN_UDP_ZERO_CSUM6_RX:
- vxlan.UDP6ZeroCSumRx = int8(datum.Value[0]) != 0
- case nl.IFLA_VXLAN_GBP:
- vxlan.GBP = true
- case nl.IFLA_VXLAN_FLOWBASED:
- vxlan.FlowBased = int8(datum.Value[0]) != 0
- case nl.IFLA_VXLAN_AGEING:
- vxlan.Age = int(native.Uint32(datum.Value[0:4]))
- vxlan.NoAge = vxlan.Age == 0
- case nl.IFLA_VXLAN_LIMIT:
- vxlan.Limit = int(native.Uint32(datum.Value[0:4]))
- case nl.IFLA_VXLAN_PORT:
- vxlan.Port = int(ntohs(datum.Value[0:2]))
- case nl.IFLA_VXLAN_PORT_RANGE:
- buf := bytes.NewBuffer(datum.Value[0:4])
- var pr vxlanPortRange
- if binary.Read(buf, binary.BigEndian, &pr) != nil {
- vxlan.PortLow = int(pr.Lo)
- vxlan.PortHigh = int(pr.Hi)
- }
- }
- }
-}
-
-func parseBondData(link Link, data []syscall.NetlinkRouteAttr) {
- bond := link.(*Bond)
- for i := range data {
- switch data[i].Attr.Type {
- case nl.IFLA_BOND_MODE:
- bond.Mode = BondMode(data[i].Value[0])
- case nl.IFLA_BOND_ACTIVE_SLAVE:
- bond.ActiveSlave = int(native.Uint32(data[i].Value[0:4]))
- case nl.IFLA_BOND_MIIMON:
- bond.Miimon = int(native.Uint32(data[i].Value[0:4]))
- case nl.IFLA_BOND_UPDELAY:
- bond.UpDelay = int(native.Uint32(data[i].Value[0:4]))
- case nl.IFLA_BOND_DOWNDELAY:
- bond.DownDelay = int(native.Uint32(data[i].Value[0:4]))
- case nl.IFLA_BOND_USE_CARRIER:
- bond.UseCarrier = int(data[i].Value[0])
- case nl.IFLA_BOND_ARP_INTERVAL:
- bond.ArpInterval = int(native.Uint32(data[i].Value[0:4]))
- case nl.IFLA_BOND_ARP_IP_TARGET:
- // TODO: implement
- case nl.IFLA_BOND_ARP_VALIDATE:
- bond.ArpValidate = BondArpValidate(native.Uint32(data[i].Value[0:4]))
- case nl.IFLA_BOND_ARP_ALL_TARGETS:
- bond.ArpAllTargets = BondArpAllTargets(native.Uint32(data[i].Value[0:4]))
- case nl.IFLA_BOND_PRIMARY:
- bond.Primary = int(native.Uint32(data[i].Value[0:4]))
- case nl.IFLA_BOND_PRIMARY_RESELECT:
- bond.PrimaryReselect = BondPrimaryReselect(data[i].Value[0])
- case nl.IFLA_BOND_FAIL_OVER_MAC:
- bond.FailOverMac = BondFailOverMac(data[i].Value[0])
- case nl.IFLA_BOND_XMIT_HASH_POLICY:
- bond.XmitHashPolicy = BondXmitHashPolicy(data[i].Value[0])
- case nl.IFLA_BOND_RESEND_IGMP:
- bond.ResendIgmp = int(native.Uint32(data[i].Value[0:4]))
- case nl.IFLA_BOND_NUM_PEER_NOTIF:
- bond.NumPeerNotif = int(data[i].Value[0])
- case nl.IFLA_BOND_ALL_SLAVES_ACTIVE:
- bond.AllSlavesActive = int(data[i].Value[0])
- case nl.IFLA_BOND_MIN_LINKS:
- bond.MinLinks = int(native.Uint32(data[i].Value[0:4]))
- case nl.IFLA_BOND_LP_INTERVAL:
- bond.LpInterval = int(native.Uint32(data[i].Value[0:4]))
- case nl.IFLA_BOND_PACKETS_PER_SLAVE:
- bond.PackersPerSlave = int(native.Uint32(data[i].Value[0:4]))
- case nl.IFLA_BOND_AD_LACP_RATE:
- bond.LacpRate = BondLacpRate(data[i].Value[0])
- case nl.IFLA_BOND_AD_SELECT:
- bond.AdSelect = BondAdSelect(data[i].Value[0])
- case nl.IFLA_BOND_AD_INFO:
- // TODO: implement
- case nl.IFLA_BOND_AD_ACTOR_SYS_PRIO:
- bond.AdActorSysPrio = int(native.Uint16(data[i].Value[0:2]))
- case nl.IFLA_BOND_AD_USER_PORT_KEY:
- bond.AdUserPortKey = int(native.Uint16(data[i].Value[0:2]))
- case nl.IFLA_BOND_AD_ACTOR_SYSTEM:
- bond.AdActorSystem = net.HardwareAddr(data[i].Value[0:6])
- case nl.IFLA_BOND_TLB_DYNAMIC_LB:
- bond.TlbDynamicLb = int(data[i].Value[0])
- }
- }
-}
-
-func parseIPVlanData(link Link, data []syscall.NetlinkRouteAttr) {
- ipv := link.(*IPVlan)
- for _, datum := range data {
- if datum.Attr.Type == nl.IFLA_IPVLAN_MODE {
- ipv.Mode = IPVlanMode(native.Uint32(datum.Value[0:4]))
- return
- }
- }
-}
-
-func parseMacvtapData(link Link, data []syscall.NetlinkRouteAttr) {
- macv := link.(*Macvtap)
- parseMacvlanData(&macv.Macvlan, data)
-}
-
-func parseMacvlanData(link Link, data []syscall.NetlinkRouteAttr) {
- macv := link.(*Macvlan)
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.IFLA_MACVLAN_MODE:
- switch native.Uint32(datum.Value[0:4]) {
- case nl.MACVLAN_MODE_PRIVATE:
- macv.Mode = MACVLAN_MODE_PRIVATE
- case nl.MACVLAN_MODE_VEPA:
- macv.Mode = MACVLAN_MODE_VEPA
- case nl.MACVLAN_MODE_BRIDGE:
- macv.Mode = MACVLAN_MODE_BRIDGE
- case nl.MACVLAN_MODE_PASSTHRU:
- macv.Mode = MACVLAN_MODE_PASSTHRU
- case nl.MACVLAN_MODE_SOURCE:
- macv.Mode = MACVLAN_MODE_SOURCE
- }
- case nl.IFLA_MACVLAN_MACADDR_COUNT:
- macv.MACAddrs = make([]net.HardwareAddr, 0, int(native.Uint32(datum.Value[0:4])))
- case nl.IFLA_MACVLAN_MACADDR_DATA:
- macs, err := nl.ParseRouteAttr(datum.Value[:])
- if err != nil {
- panic(fmt.Sprintf("failed to ParseRouteAttr for IFLA_MACVLAN_MACADDR_DATA: %v", err))
- }
- for _, macDatum := range macs {
- macv.MACAddrs = append(macv.MACAddrs, net.HardwareAddr(macDatum.Value[0:6]))
- }
- }
- }
-}
-
-// copied from pkg/net_linux.go
-func linkFlags(rawFlags uint32) net.Flags {
- var f net.Flags
- if rawFlags&unix.IFF_UP != 0 {
- f |= net.FlagUp
- }
- if rawFlags&unix.IFF_BROADCAST != 0 {
- f |= net.FlagBroadcast
- }
- if rawFlags&unix.IFF_LOOPBACK != 0 {
- f |= net.FlagLoopback
- }
- if rawFlags&unix.IFF_POINTOPOINT != 0 {
- f |= net.FlagPointToPoint
- }
- if rawFlags&unix.IFF_MULTICAST != 0 {
- f |= net.FlagMulticast
- }
- return f
-}
-
-func addGretapAttrs(gretap *Gretap, linkInfo *nl.RtAttr) {
- data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
-
- if gretap.FlowBased {
- // In flow based mode, no other attributes need to be configured
- nl.NewRtAttrChild(data, nl.IFLA_GRE_COLLECT_METADATA, boolAttr(gretap.FlowBased))
- return
- }
-
- if ip := gretap.Local; ip != nil {
- if ip.To4() != nil {
- ip = ip.To4()
- }
- nl.NewRtAttrChild(data, nl.IFLA_GRE_LOCAL, []byte(ip))
- }
-
- if ip := gretap.Remote; ip != nil {
- if ip.To4() != nil {
- ip = ip.To4()
- }
- nl.NewRtAttrChild(data, nl.IFLA_GRE_REMOTE, []byte(ip))
- }
-
- if gretap.IKey != 0 {
- nl.NewRtAttrChild(data, nl.IFLA_GRE_IKEY, htonl(gretap.IKey))
- gretap.IFlags |= uint16(nl.GRE_KEY)
- }
-
- if gretap.OKey != 0 {
- nl.NewRtAttrChild(data, nl.IFLA_GRE_OKEY, htonl(gretap.OKey))
- gretap.OFlags |= uint16(nl.GRE_KEY)
- }
-
- nl.NewRtAttrChild(data, nl.IFLA_GRE_IFLAGS, htons(gretap.IFlags))
- nl.NewRtAttrChild(data, nl.IFLA_GRE_OFLAGS, htons(gretap.OFlags))
-
- if gretap.Link != 0 {
- nl.NewRtAttrChild(data, nl.IFLA_GRE_LINK, nl.Uint32Attr(gretap.Link))
- }
-
- nl.NewRtAttrChild(data, nl.IFLA_GRE_PMTUDISC, nl.Uint8Attr(gretap.PMtuDisc))
- nl.NewRtAttrChild(data, nl.IFLA_GRE_TTL, nl.Uint8Attr(gretap.Ttl))
- nl.NewRtAttrChild(data, nl.IFLA_GRE_TOS, nl.Uint8Attr(gretap.Tos))
- nl.NewRtAttrChild(data, nl.IFLA_GRE_ENCAP_TYPE, nl.Uint16Attr(gretap.EncapType))
- nl.NewRtAttrChild(data, nl.IFLA_GRE_ENCAP_FLAGS, nl.Uint16Attr(gretap.EncapFlags))
- nl.NewRtAttrChild(data, nl.IFLA_GRE_ENCAP_SPORT, htons(gretap.EncapSport))
- nl.NewRtAttrChild(data, nl.IFLA_GRE_ENCAP_DPORT, htons(gretap.EncapDport))
-}
-
-func parseGretapData(link Link, data []syscall.NetlinkRouteAttr) {
- gre := link.(*Gretap)
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.IFLA_GRE_OKEY:
- gre.IKey = ntohl(datum.Value[0:4])
- case nl.IFLA_GRE_IKEY:
- gre.OKey = ntohl(datum.Value[0:4])
- case nl.IFLA_GRE_LOCAL:
- gre.Local = net.IP(datum.Value[0:16])
- case nl.IFLA_GRE_REMOTE:
- gre.Remote = net.IP(datum.Value[0:16])
- case nl.IFLA_GRE_ENCAP_SPORT:
- gre.EncapSport = ntohs(datum.Value[0:2])
- case nl.IFLA_GRE_ENCAP_DPORT:
- gre.EncapDport = ntohs(datum.Value[0:2])
- case nl.IFLA_GRE_IFLAGS:
- gre.IFlags = ntohs(datum.Value[0:2])
- case nl.IFLA_GRE_OFLAGS:
- gre.OFlags = ntohs(datum.Value[0:2])
-
- case nl.IFLA_GRE_TTL:
- gre.Ttl = uint8(datum.Value[0])
- case nl.IFLA_GRE_TOS:
- gre.Tos = uint8(datum.Value[0])
- case nl.IFLA_GRE_PMTUDISC:
- gre.PMtuDisc = uint8(datum.Value[0])
- case nl.IFLA_GRE_ENCAP_TYPE:
- gre.EncapType = native.Uint16(datum.Value[0:2])
- case nl.IFLA_GRE_ENCAP_FLAGS:
- gre.EncapFlags = native.Uint16(datum.Value[0:2])
- case nl.IFLA_GRE_COLLECT_METADATA:
- if len(datum.Value) > 0 {
- gre.FlowBased = int8(datum.Value[0]) != 0
- }
- }
- }
-}
-
-func addGretunAttrs(gre *Gretun, linkInfo *nl.RtAttr) {
- data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
-
- if ip := gre.Local; ip != nil {
- if ip.To4() != nil {
- ip = ip.To4()
- }
- nl.NewRtAttrChild(data, nl.IFLA_GRE_LOCAL, []byte(ip))
- }
-
- if ip := gre.Remote; ip != nil {
- if ip.To4() != nil {
- ip = ip.To4()
- }
- nl.NewRtAttrChild(data, nl.IFLA_GRE_REMOTE, []byte(ip))
- }
-
- if gre.IKey != 0 {
- nl.NewRtAttrChild(data, nl.IFLA_GRE_IKEY, htonl(gre.IKey))
- gre.IFlags |= uint16(nl.GRE_KEY)
- }
-
- if gre.OKey != 0 {
- nl.NewRtAttrChild(data, nl.IFLA_GRE_OKEY, htonl(gre.OKey))
- gre.OFlags |= uint16(nl.GRE_KEY)
- }
-
- nl.NewRtAttrChild(data, nl.IFLA_GRE_IFLAGS, htons(gre.IFlags))
- nl.NewRtAttrChild(data, nl.IFLA_GRE_OFLAGS, htons(gre.OFlags))
-
- if gre.Link != 0 {
- nl.NewRtAttrChild(data, nl.IFLA_GRE_LINK, nl.Uint32Attr(gre.Link))
- }
-
- nl.NewRtAttrChild(data, nl.IFLA_GRE_PMTUDISC, nl.Uint8Attr(gre.PMtuDisc))
- nl.NewRtAttrChild(data, nl.IFLA_GRE_TTL, nl.Uint8Attr(gre.Ttl))
- nl.NewRtAttrChild(data, nl.IFLA_GRE_TOS, nl.Uint8Attr(gre.Tos))
- nl.NewRtAttrChild(data, nl.IFLA_GRE_ENCAP_TYPE, nl.Uint16Attr(gre.EncapType))
- nl.NewRtAttrChild(data, nl.IFLA_GRE_ENCAP_FLAGS, nl.Uint16Attr(gre.EncapFlags))
- nl.NewRtAttrChild(data, nl.IFLA_GRE_ENCAP_SPORT, htons(gre.EncapSport))
- nl.NewRtAttrChild(data, nl.IFLA_GRE_ENCAP_DPORT, htons(gre.EncapDport))
-}
-
-func parseGretunData(link Link, data []syscall.NetlinkRouteAttr) {
- gre := link.(*Gretun)
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.IFLA_GRE_OKEY:
- gre.IKey = ntohl(datum.Value[0:4])
- case nl.IFLA_GRE_IKEY:
- gre.OKey = ntohl(datum.Value[0:4])
- case nl.IFLA_GRE_LOCAL:
- gre.Local = net.IP(datum.Value[0:16])
- case nl.IFLA_GRE_REMOTE:
- gre.Remote = net.IP(datum.Value[0:16])
- case nl.IFLA_GRE_IFLAGS:
- gre.IFlags = ntohs(datum.Value[0:2])
- case nl.IFLA_GRE_OFLAGS:
- gre.OFlags = ntohs(datum.Value[0:2])
-
- case nl.IFLA_GRE_TTL:
- gre.Ttl = uint8(datum.Value[0])
- case nl.IFLA_GRE_TOS:
- gre.Tos = uint8(datum.Value[0])
- case nl.IFLA_GRE_PMTUDISC:
- gre.PMtuDisc = uint8(datum.Value[0])
- case nl.IFLA_GRE_ENCAP_TYPE:
- gre.EncapType = native.Uint16(datum.Value[0:2])
- case nl.IFLA_GRE_ENCAP_FLAGS:
- gre.EncapFlags = native.Uint16(datum.Value[0:2])
- case nl.IFLA_GRE_ENCAP_SPORT:
- gre.EncapSport = ntohs(datum.Value[0:2])
- case nl.IFLA_GRE_ENCAP_DPORT:
- gre.EncapDport = ntohs(datum.Value[0:2])
- }
- }
-}
-
-func parseLinkStats32(data []byte) *LinkStatistics {
- return (*LinkStatistics)((*LinkStatistics32)(unsafe.Pointer(&data[0:SizeofLinkStats32][0])).to64())
-}
-
-func parseLinkStats64(data []byte) *LinkStatistics {
- return (*LinkStatistics)((*LinkStatistics64)(unsafe.Pointer(&data[0:SizeofLinkStats64][0])))
-}
-
-func addXdpAttrs(xdp *LinkXdp, req *nl.NetlinkRequest) {
- attrs := nl.NewRtAttr(unix.IFLA_XDP|unix.NLA_F_NESTED, nil)
- b := make([]byte, 4)
- native.PutUint32(b, uint32(xdp.Fd))
- nl.NewRtAttrChild(attrs, nl.IFLA_XDP_FD, b)
- if xdp.Flags != 0 {
- b := make([]byte, 4)
- native.PutUint32(b, xdp.Flags)
- nl.NewRtAttrChild(attrs, nl.IFLA_XDP_FLAGS, b)
- }
- req.AddData(attrs)
-}
-
-func parseLinkXdp(data []byte) (*LinkXdp, error) {
- attrs, err := nl.ParseRouteAttr(data)
- if err != nil {
- return nil, err
- }
- xdp := &LinkXdp{}
- for _, attr := range attrs {
- switch attr.Attr.Type {
- case nl.IFLA_XDP_FD:
- xdp.Fd = int(native.Uint32(attr.Value[0:4]))
- case nl.IFLA_XDP_ATTACHED:
- xdp.Attached = attr.Value[0] != 0
- case nl.IFLA_XDP_FLAGS:
- xdp.Flags = native.Uint32(attr.Value[0:4])
- case nl.IFLA_XDP_PROG_ID:
- xdp.ProgId = native.Uint32(attr.Value[0:4])
- }
- }
- return xdp, nil
-}
-
-func addIptunAttrs(iptun *Iptun, linkInfo *nl.RtAttr) {
- if iptun.FlowBased {
- // In flow based mode, no other attributes need to be configured
- nl.NewRtAttrChild(linkInfo, nl.IFLA_IPTUN_COLLECT_METADATA, boolAttr(iptun.FlowBased))
- return
- }
-
- data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
-
- ip := iptun.Local.To4()
- if ip != nil {
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_LOCAL, []byte(ip))
- }
-
- ip = iptun.Remote.To4()
- if ip != nil {
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_REMOTE, []byte(ip))
- }
-
- if iptun.Link != 0 {
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_LINK, nl.Uint32Attr(iptun.Link))
- }
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_PMTUDISC, nl.Uint8Attr(iptun.PMtuDisc))
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_TTL, nl.Uint8Attr(iptun.Ttl))
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_TOS, nl.Uint8Attr(iptun.Tos))
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_ENCAP_TYPE, nl.Uint16Attr(iptun.EncapType))
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_ENCAP_FLAGS, nl.Uint16Attr(iptun.EncapFlags))
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_ENCAP_SPORT, htons(iptun.EncapSport))
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_ENCAP_DPORT, htons(iptun.EncapDport))
-}
-
-func parseIptunData(link Link, data []syscall.NetlinkRouteAttr) {
- iptun := link.(*Iptun)
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.IFLA_IPTUN_LOCAL:
- iptun.Local = net.IP(datum.Value[0:4])
- case nl.IFLA_IPTUN_REMOTE:
- iptun.Remote = net.IP(datum.Value[0:4])
- case nl.IFLA_IPTUN_TTL:
- iptun.Ttl = uint8(datum.Value[0])
- case nl.IFLA_IPTUN_TOS:
- iptun.Tos = uint8(datum.Value[0])
- case nl.IFLA_IPTUN_PMTUDISC:
- iptun.PMtuDisc = uint8(datum.Value[0])
- case nl.IFLA_IPTUN_ENCAP_SPORT:
- iptun.EncapSport = ntohs(datum.Value[0:2])
- case nl.IFLA_IPTUN_ENCAP_DPORT:
- iptun.EncapDport = ntohs(datum.Value[0:2])
- case nl.IFLA_IPTUN_ENCAP_TYPE:
- iptun.EncapType = native.Uint16(datum.Value[0:2])
- case nl.IFLA_IPTUN_ENCAP_FLAGS:
- iptun.EncapFlags = native.Uint16(datum.Value[0:2])
- case nl.IFLA_IPTUN_COLLECT_METADATA:
- iptun.FlowBased = int8(datum.Value[0]) != 0
- }
- }
-}
-
-func addSittunAttrs(sittun *Sittun, linkInfo *nl.RtAttr) {
- data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
-
- if sittun.Link != 0 {
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_LINK, nl.Uint32Attr(sittun.Link))
- }
-
- ip := sittun.Local.To4()
- if ip != nil {
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_LOCAL, []byte(ip))
- }
-
- ip = sittun.Remote.To4()
- if ip != nil {
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_REMOTE, []byte(ip))
- }
-
- if sittun.Ttl > 0 {
- // Would otherwise fail on 3.10 kernel
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_TTL, nl.Uint8Attr(sittun.Ttl))
- }
-
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_TOS, nl.Uint8Attr(sittun.Tos))
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_PMTUDISC, nl.Uint8Attr(sittun.PMtuDisc))
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_ENCAP_TYPE, nl.Uint16Attr(sittun.EncapType))
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_ENCAP_FLAGS, nl.Uint16Attr(sittun.EncapFlags))
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_ENCAP_SPORT, htons(sittun.EncapSport))
- nl.NewRtAttrChild(data, nl.IFLA_IPTUN_ENCAP_DPORT, htons(sittun.EncapDport))
-}
-
-func parseSittunData(link Link, data []syscall.NetlinkRouteAttr) {
- sittun := link.(*Sittun)
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.IFLA_IPTUN_LOCAL:
- sittun.Local = net.IP(datum.Value[0:4])
- case nl.IFLA_IPTUN_REMOTE:
- sittun.Remote = net.IP(datum.Value[0:4])
- case nl.IFLA_IPTUN_TTL:
- sittun.Ttl = uint8(datum.Value[0])
- case nl.IFLA_IPTUN_TOS:
- sittun.Tos = uint8(datum.Value[0])
- case nl.IFLA_IPTUN_PMTUDISC:
- sittun.PMtuDisc = uint8(datum.Value[0])
- case nl.IFLA_IPTUN_ENCAP_TYPE:
- sittun.EncapType = native.Uint16(datum.Value[0:2])
- case nl.IFLA_IPTUN_ENCAP_FLAGS:
- sittun.EncapFlags = native.Uint16(datum.Value[0:2])
- case nl.IFLA_IPTUN_ENCAP_SPORT:
- sittun.EncapSport = ntohs(datum.Value[0:2])
- case nl.IFLA_IPTUN_ENCAP_DPORT:
- sittun.EncapDport = ntohs(datum.Value[0:2])
- }
- }
-}
-
-func addVtiAttrs(vti *Vti, linkInfo *nl.RtAttr) {
- data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
-
- ip := vti.Local.To4()
- if ip != nil {
- nl.NewRtAttrChild(data, nl.IFLA_VTI_LOCAL, []byte(ip))
- }
-
- ip = vti.Remote.To4()
- if ip != nil {
- nl.NewRtAttrChild(data, nl.IFLA_VTI_REMOTE, []byte(ip))
- }
-
- if vti.Link != 0 {
- nl.NewRtAttrChild(data, nl.IFLA_VTI_LINK, nl.Uint32Attr(vti.Link))
- }
-
- nl.NewRtAttrChild(data, nl.IFLA_VTI_IKEY, htonl(vti.IKey))
- nl.NewRtAttrChild(data, nl.IFLA_VTI_OKEY, htonl(vti.OKey))
-}
-
-func parseVtiData(link Link, data []syscall.NetlinkRouteAttr) {
- vti := link.(*Vti)
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.IFLA_VTI_LOCAL:
- vti.Local = net.IP(datum.Value[0:4])
- case nl.IFLA_VTI_REMOTE:
- vti.Remote = net.IP(datum.Value[0:4])
- case nl.IFLA_VTI_IKEY:
- vti.IKey = ntohl(datum.Value[0:4])
- case nl.IFLA_VTI_OKEY:
- vti.OKey = ntohl(datum.Value[0:4])
- }
- }
-}
-
-func addVrfAttrs(vrf *Vrf, linkInfo *nl.RtAttr) {
- data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
- b := make([]byte, 4)
- native.PutUint32(b, uint32(vrf.Table))
- nl.NewRtAttrChild(data, nl.IFLA_VRF_TABLE, b)
-}
-
-func parseVrfData(link Link, data []syscall.NetlinkRouteAttr) {
- vrf := link.(*Vrf)
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.IFLA_VRF_TABLE:
- vrf.Table = native.Uint32(datum.Value[0:4])
- }
- }
-}
-
-func addBridgeAttrs(bridge *Bridge, linkInfo *nl.RtAttr) {
- data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
- if bridge.MulticastSnooping != nil {
- nl.NewRtAttrChild(data, nl.IFLA_BR_MCAST_SNOOPING, boolToByte(*bridge.MulticastSnooping))
- }
- if bridge.HelloTime != nil {
- nl.NewRtAttrChild(data, nl.IFLA_BR_HELLO_TIME, nl.Uint32Attr(*bridge.HelloTime))
- }
-}
-
-func parseBridgeData(bridge Link, data []syscall.NetlinkRouteAttr) {
- br := bridge.(*Bridge)
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.IFLA_BR_HELLO_TIME:
- helloTime := native.Uint32(datum.Value[0:4])
- br.HelloTime = &helloTime
- case nl.IFLA_BR_MCAST_SNOOPING:
- mcastSnooping := datum.Value[0] == 1
- br.MulticastSnooping = &mcastSnooping
- }
- }
-}
-
-func addGTPAttrs(gtp *GTP, linkInfo *nl.RtAttr) {
- data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
- nl.NewRtAttrChild(data, nl.IFLA_GTP_FD0, nl.Uint32Attr(uint32(gtp.FD0)))
- nl.NewRtAttrChild(data, nl.IFLA_GTP_FD1, nl.Uint32Attr(uint32(gtp.FD1)))
- nl.NewRtAttrChild(data, nl.IFLA_GTP_PDP_HASHSIZE, nl.Uint32Attr(131072))
- if gtp.Role != nl.GTP_ROLE_GGSN {
- nl.NewRtAttrChild(data, nl.IFLA_GTP_ROLE, nl.Uint32Attr(uint32(gtp.Role)))
- }
-}
-
-func parseGTPData(link Link, data []syscall.NetlinkRouteAttr) {
- gtp := link.(*GTP)
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.IFLA_GTP_FD0:
- gtp.FD0 = int(native.Uint32(datum.Value))
- case nl.IFLA_GTP_FD1:
- gtp.FD1 = int(native.Uint32(datum.Value))
- case nl.IFLA_GTP_PDP_HASHSIZE:
- gtp.PDPHashsize = int(native.Uint32(datum.Value))
- case nl.IFLA_GTP_ROLE:
- gtp.Role = int(native.Uint32(datum.Value))
- }
- }
-}
-
-// LinkSetBondSlave add slave to bond link via ioctl interface.
-func LinkSetBondSlave(link Link, master *Bond) error {
- fd, err := getSocketUDP()
- if err != nil {
- return err
- }
- defer syscall.Close(fd)
-
- ifreq := newIocltSlaveReq(link.Attrs().Name, master.Attrs().Name)
-
- _, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), unix.SIOCBONDENSLAVE, uintptr(unsafe.Pointer(ifreq)))
- if errno != 0 {
- return fmt.Errorf("Failed to enslave %q to %q, errno=%v", link.Attrs().Name, master.Attrs().Name, errno)
- }
- return nil
-}
-
-// VethPeerIndex get veth peer index.
-func VethPeerIndex(link *Veth) (int, error) {
- fd, err := getSocketUDP()
- if err != nil {
- return -1, err
- }
- defer syscall.Close(fd)
-
- ifreq, sSet := newIocltStringSetReq(link.Name)
- _, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), SIOCETHTOOL, uintptr(unsafe.Pointer(ifreq)))
- if errno != 0 {
- return -1, fmt.Errorf("SIOCETHTOOL request for %q failed, errno=%v", link.Attrs().Name, errno)
- }
-
- gstrings := &ethtoolGstrings{
- cmd: ETHTOOL_GSTRINGS,
- stringSet: ETH_SS_STATS,
- length: sSet.data[0],
- }
- ifreq.Data = uintptr(unsafe.Pointer(gstrings))
- _, _, errno = syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), SIOCETHTOOL, uintptr(unsafe.Pointer(ifreq)))
- if errno != 0 {
- return -1, fmt.Errorf("SIOCETHTOOL request for %q failed, errno=%v", link.Attrs().Name, errno)
- }
-
- stats := &ethtoolStats{
- cmd: ETHTOOL_GSTATS,
- nStats: gstrings.length,
- }
- ifreq.Data = uintptr(unsafe.Pointer(stats))
- _, _, errno = syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), SIOCETHTOOL, uintptr(unsafe.Pointer(ifreq)))
- if errno != 0 {
- return -1, fmt.Errorf("SIOCETHTOOL request for %q failed, errno=%v", link.Attrs().Name, errno)
- }
- return int(stats.data[0]), nil
-}
diff --git a/vendor/github.com/vishvananda/netlink/link_tuntap_linux.go b/vendor/github.com/vishvananda/netlink/link_tuntap_linux.go
deleted file mode 100644
index 310bd33..0000000
--- a/vendor/github.com/vishvananda/netlink/link_tuntap_linux.go
+++ /dev/null
@@ -1,14 +0,0 @@
-package netlink
-
-// ideally golang.org/x/sys/unix would define IfReq but it only has
-// IFNAMSIZ, hence this minimalistic implementation
-const (
- SizeOfIfReq = 40
- IFNAMSIZ = 16
-)
-
-type ifReq struct {
- Name [IFNAMSIZ]byte
- Flags uint16
- pad [SizeOfIfReq - IFNAMSIZ - 2]byte
-}
diff --git a/vendor/github.com/vishvananda/netlink/neigh.go b/vendor/github.com/vishvananda/netlink/neigh.go
deleted file mode 100644
index 3f5cd49..0000000
--- a/vendor/github.com/vishvananda/netlink/neigh.go
+++ /dev/null
@@ -1,25 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "net"
-)
-
-// Neigh represents a link layer neighbor from netlink.
-type Neigh struct {
- LinkIndex int
- Family int
- State int
- Type int
- Flags int
- IP net.IP
- HardwareAddr net.HardwareAddr
- LLIPAddr net.IP //Used in the case of NHRP
- Vlan int
- VNI int
-}
-
-// String returns $ip/$hwaddr $label
-func (neigh *Neigh) String() string {
- return fmt.Sprintf("%s %s", neigh.IP, neigh.HardwareAddr)
-}
diff --git a/vendor/github.com/vishvananda/netlink/neigh_linux.go b/vendor/github.com/vishvananda/netlink/neigh_linux.go
deleted file mode 100644
index f75c226..0000000
--- a/vendor/github.com/vishvananda/netlink/neigh_linux.go
+++ /dev/null
@@ -1,289 +0,0 @@
-package netlink
-
-import (
- "net"
- "unsafe"
-
- "github.com/vishvananda/netlink/nl"
- "golang.org/x/sys/unix"
-)
-
-const (
- NDA_UNSPEC = iota
- NDA_DST
- NDA_LLADDR
- NDA_CACHEINFO
- NDA_PROBES
- NDA_VLAN
- NDA_PORT
- NDA_VNI
- NDA_IFINDEX
- NDA_MAX = NDA_IFINDEX
-)
-
-// Neighbor Cache Entry States.
-const (
- NUD_NONE = 0x00
- NUD_INCOMPLETE = 0x01
- NUD_REACHABLE = 0x02
- NUD_STALE = 0x04
- NUD_DELAY = 0x08
- NUD_PROBE = 0x10
- NUD_FAILED = 0x20
- NUD_NOARP = 0x40
- NUD_PERMANENT = 0x80
-)
-
-// Neighbor Flags
-const (
- NTF_USE = 0x01
- NTF_SELF = 0x02
- NTF_MASTER = 0x04
- NTF_PROXY = 0x08
- NTF_ROUTER = 0x80
-)
-
-type Ndmsg struct {
- Family uint8
- Index uint32
- State uint16
- Flags uint8
- Type uint8
-}
-
-func deserializeNdmsg(b []byte) *Ndmsg {
- var dummy Ndmsg
- return (*Ndmsg)(unsafe.Pointer(&b[0:unsafe.Sizeof(dummy)][0]))
-}
-
-func (msg *Ndmsg) Serialize() []byte {
- return (*(*[unsafe.Sizeof(*msg)]byte)(unsafe.Pointer(msg)))[:]
-}
-
-func (msg *Ndmsg) Len() int {
- return int(unsafe.Sizeof(*msg))
-}
-
-// NeighAdd will add an IP to MAC mapping to the ARP table
-// Equivalent to: `ip neigh add ....`
-func NeighAdd(neigh *Neigh) error {
- return pkgHandle.NeighAdd(neigh)
-}
-
-// NeighAdd will add an IP to MAC mapping to the ARP table
-// Equivalent to: `ip neigh add ....`
-func (h *Handle) NeighAdd(neigh *Neigh) error {
- return h.neighAdd(neigh, unix.NLM_F_CREATE|unix.NLM_F_EXCL)
-}
-
-// NeighSet will add or replace an IP to MAC mapping to the ARP table
-// Equivalent to: `ip neigh replace....`
-func NeighSet(neigh *Neigh) error {
- return pkgHandle.NeighSet(neigh)
-}
-
-// NeighSet will add or replace an IP to MAC mapping to the ARP table
-// Equivalent to: `ip neigh replace....`
-func (h *Handle) NeighSet(neigh *Neigh) error {
- return h.neighAdd(neigh, unix.NLM_F_CREATE|unix.NLM_F_REPLACE)
-}
-
-// NeighAppend will append an entry to FDB
-// Equivalent to: `bridge fdb append...`
-func NeighAppend(neigh *Neigh) error {
- return pkgHandle.NeighAppend(neigh)
-}
-
-// NeighAppend will append an entry to FDB
-// Equivalent to: `bridge fdb append...`
-func (h *Handle) NeighAppend(neigh *Neigh) error {
- return h.neighAdd(neigh, unix.NLM_F_CREATE|unix.NLM_F_APPEND)
-}
-
-// NeighAppend will append an entry to FDB
-// Equivalent to: `bridge fdb append...`
-func neighAdd(neigh *Neigh, mode int) error {
- return pkgHandle.neighAdd(neigh, mode)
-}
-
-// NeighAppend will append an entry to FDB
-// Equivalent to: `bridge fdb append...`
-func (h *Handle) neighAdd(neigh *Neigh, mode int) error {
- req := h.newNetlinkRequest(unix.RTM_NEWNEIGH, mode|unix.NLM_F_ACK)
- return neighHandle(neigh, req)
-}
-
-// NeighDel will delete an IP address from a link device.
-// Equivalent to: `ip addr del $addr dev $link`
-func NeighDel(neigh *Neigh) error {
- return pkgHandle.NeighDel(neigh)
-}
-
-// NeighDel will delete an IP address from a link device.
-// Equivalent to: `ip addr del $addr dev $link`
-func (h *Handle) NeighDel(neigh *Neigh) error {
- req := h.newNetlinkRequest(unix.RTM_DELNEIGH, unix.NLM_F_ACK)
- return neighHandle(neigh, req)
-}
-
-func neighHandle(neigh *Neigh, req *nl.NetlinkRequest) error {
- var family int
-
- if neigh.Family > 0 {
- family = neigh.Family
- } else {
- family = nl.GetIPFamily(neigh.IP)
- }
-
- msg := Ndmsg{
- Family: uint8(family),
- Index: uint32(neigh.LinkIndex),
- State: uint16(neigh.State),
- Type: uint8(neigh.Type),
- Flags: uint8(neigh.Flags),
- }
- req.AddData(&msg)
-
- ipData := neigh.IP.To4()
- if ipData == nil {
- ipData = neigh.IP.To16()
- }
-
- dstData := nl.NewRtAttr(NDA_DST, ipData)
- req.AddData(dstData)
-
- if neigh.LLIPAddr != nil {
- llIPData := nl.NewRtAttr(NDA_LLADDR, neigh.LLIPAddr.To4())
- req.AddData(llIPData)
- } else if neigh.Flags != NTF_PROXY || neigh.HardwareAddr != nil {
- hwData := nl.NewRtAttr(NDA_LLADDR, []byte(neigh.HardwareAddr))
- req.AddData(hwData)
- }
-
- if neigh.Vlan != 0 {
- vlanData := nl.NewRtAttr(NDA_VLAN, nl.Uint16Attr(uint16(neigh.Vlan)))
- req.AddData(vlanData)
- }
-
- if neigh.VNI != 0 {
- vniData := nl.NewRtAttr(NDA_VNI, nl.Uint32Attr(uint32(neigh.VNI)))
- req.AddData(vniData)
- }
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// NeighList gets a list of IP-MAC mappings in the system (ARP table).
-// Equivalent to: `ip neighbor show`.
-// The list can be filtered by link and ip family.
-func NeighList(linkIndex, family int) ([]Neigh, error) {
- return pkgHandle.NeighList(linkIndex, family)
-}
-
-// NeighProxyList gets a list of neighbor proxies in the system.
-// Equivalent to: `ip neighbor show proxy`.
-// The list can be filtered by link and ip family.
-func NeighProxyList(linkIndex, family int) ([]Neigh, error) {
- return pkgHandle.NeighProxyList(linkIndex, family)
-}
-
-// NeighList gets a list of IP-MAC mappings in the system (ARP table).
-// Equivalent to: `ip neighbor show`.
-// The list can be filtered by link and ip family.
-func (h *Handle) NeighList(linkIndex, family int) ([]Neigh, error) {
- return h.neighList(linkIndex, family, 0)
-}
-
-// NeighProxyList gets a list of neighbor proxies in the system.
-// Equivalent to: `ip neighbor show proxy`.
-// The list can be filtered by link, ip family.
-func (h *Handle) NeighProxyList(linkIndex, family int) ([]Neigh, error) {
- return h.neighList(linkIndex, family, NTF_PROXY)
-}
-
-func (h *Handle) neighList(linkIndex, family, flags int) ([]Neigh, error) {
- req := h.newNetlinkRequest(unix.RTM_GETNEIGH, unix.NLM_F_DUMP)
- msg := Ndmsg{
- Family: uint8(family),
- Index: uint32(linkIndex),
- Flags: uint8(flags),
- }
- req.AddData(&msg)
-
- msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWNEIGH)
- if err != nil {
- return nil, err
- }
-
- var res []Neigh
- for _, m := range msgs {
- ndm := deserializeNdmsg(m)
- if linkIndex != 0 && int(ndm.Index) != linkIndex {
- // Ignore messages from other interfaces
- continue
- }
-
- neigh, err := NeighDeserialize(m)
- if err != nil {
- continue
- }
-
- res = append(res, *neigh)
- }
-
- return res, nil
-}
-
-func NeighDeserialize(m []byte) (*Neigh, error) {
- msg := deserializeNdmsg(m)
-
- neigh := Neigh{
- LinkIndex: int(msg.Index),
- Family: int(msg.Family),
- State: int(msg.State),
- Type: int(msg.Type),
- Flags: int(msg.Flags),
- }
-
- attrs, err := nl.ParseRouteAttr(m[msg.Len():])
- if err != nil {
- return nil, err
- }
-
- // This should be cached for perfomance
- // once per table dump
- link, err := LinkByIndex(neigh.LinkIndex)
- if err != nil {
- return nil, err
- }
- encapType := link.Attrs().EncapType
-
- for _, attr := range attrs {
- switch attr.Attr.Type {
- case NDA_DST:
- neigh.IP = net.IP(attr.Value)
- case NDA_LLADDR:
- // BUG: Is this a bug in the netlink library?
- // #define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len))
- // #define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
- attrLen := attr.Attr.Len - unix.SizeofRtAttr
- if attrLen == 4 && (encapType == "ipip" ||
- encapType == "sit" ||
- encapType == "gre") {
- neigh.LLIPAddr = net.IP(attr.Value)
- } else if attrLen == 16 &&
- encapType == "tunnel6" {
- neigh.IP = net.IP(attr.Value)
- } else {
- neigh.HardwareAddr = net.HardwareAddr(attr.Value)
- }
- case NDA_VLAN:
- neigh.Vlan = int(native.Uint16(attr.Value[0:2]))
- case NDA_VNI:
- neigh.VNI = int(native.Uint32(attr.Value[0:4]))
- }
- }
-
- return &neigh, nil
-}
diff --git a/vendor/github.com/vishvananda/netlink/netlink.go b/vendor/github.com/vishvananda/netlink/netlink.go
deleted file mode 100644
index fb15952..0000000
--- a/vendor/github.com/vishvananda/netlink/netlink.go
+++ /dev/null
@@ -1,39 +0,0 @@
-// Package netlink provides a simple library for netlink. Netlink is
-// the interface a user-space program in linux uses to communicate with
-// the kernel. It can be used to add and remove interfaces, set up ip
-// addresses and routes, and confiugre ipsec. Netlink communication
-// requires elevated privileges, so in most cases this code needs to
-// be run as root. The low level primitives for netlink are contained
-// in the nl subpackage. This package attempts to provide a high-level
-// interface that is loosly modeled on the iproute2 cli.
-package netlink
-
-import (
- "errors"
- "net"
-)
-
-var (
- // ErrNotImplemented is returned when a requested feature is not implemented.
- ErrNotImplemented = errors.New("not implemented")
-)
-
-// ParseIPNet parses a string in ip/net format and returns a net.IPNet.
-// This is valuable because addresses in netlink are often IPNets and
-// ParseCIDR returns an IPNet with the IP part set to the base IP of the
-// range.
-func ParseIPNet(s string) (*net.IPNet, error) {
- ip, ipNet, err := net.ParseCIDR(s)
- if err != nil {
- return nil, err
- }
- return &net.IPNet{IP: ip, Mask: ipNet.Mask}, nil
-}
-
-// NewIPNet generates an IPNet from an ip address using a netmask of 32 or 128.
-func NewIPNet(ip net.IP) *net.IPNet {
- if ip.To4() != nil {
- return &net.IPNet{IP: ip, Mask: net.CIDRMask(32, 32)}
- }
- return &net.IPNet{IP: ip, Mask: net.CIDRMask(128, 128)}
-}
diff --git a/vendor/github.com/vishvananda/netlink/netlink_linux.go b/vendor/github.com/vishvananda/netlink/netlink_linux.go
deleted file mode 100644
index a20d293..0000000
--- a/vendor/github.com/vishvananda/netlink/netlink_linux.go
+++ /dev/null
@@ -1,11 +0,0 @@
-package netlink
-
-import "github.com/vishvananda/netlink/nl"
-
-// Family type definitions
-const (
- FAMILY_ALL = nl.FAMILY_ALL
- FAMILY_V4 = nl.FAMILY_V4
- FAMILY_V6 = nl.FAMILY_V6
- FAMILY_MPLS = nl.FAMILY_MPLS
-)
diff --git a/vendor/github.com/vishvananda/netlink/netlink_unspecified.go b/vendor/github.com/vishvananda/netlink/netlink_unspecified.go
deleted file mode 100644
index 86111b9..0000000
--- a/vendor/github.com/vishvananda/netlink/netlink_unspecified.go
+++ /dev/null
@@ -1,225 +0,0 @@
-// +build !linux
-
-package netlink
-
-import "net"
-
-func LinkSetUp(link Link) error {
- return ErrNotImplemented
-}
-
-func LinkSetDown(link Link) error {
- return ErrNotImplemented
-}
-
-func LinkSetMTU(link Link, mtu int) error {
- return ErrNotImplemented
-}
-
-func LinkSetMaster(link Link, master *Bridge) error {
- return ErrNotImplemented
-}
-
-func LinkSetNsPid(link Link, nspid int) error {
- return ErrNotImplemented
-}
-
-func LinkSetNsFd(link Link, fd int) error {
- return ErrNotImplemented
-}
-
-func LinkSetName(link Link, name string) error {
- return ErrNotImplemented
-}
-
-func LinkSetAlias(link Link, name string) error {
- return ErrNotImplemented
-}
-
-func LinkSetHardwareAddr(link Link, hwaddr net.HardwareAddr) error {
- return ErrNotImplemented
-}
-
-func LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error {
- return ErrNotImplemented
-}
-
-func LinkSetVfVlan(link Link, vf, vlan int) error {
- return ErrNotImplemented
-}
-
-func LinkSetVfTxRate(link Link, vf, rate int) error {
- return ErrNotImplemented
-}
-
-func LinkSetNoMaster(link Link) error {
- return ErrNotImplemented
-}
-
-func LinkSetMasterByIndex(link Link, masterIndex int) error {
- return ErrNotImplemented
-}
-
-func LinkSetXdpFd(link Link, fd int) error {
- return ErrNotImplemented
-}
-
-func LinkSetARPOff(link Link) error {
- return ErrNotImplemented
-}
-
-func LinkSetARPOn(link Link) error {
- return ErrNotImplemented
-}
-
-func LinkByName(name string) (Link, error) {
- return nil, ErrNotImplemented
-}
-
-func LinkByAlias(alias string) (Link, error) {
- return nil, ErrNotImplemented
-}
-
-func LinkByIndex(index int) (Link, error) {
- return nil, ErrNotImplemented
-}
-
-func LinkSetHairpin(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func LinkSetGuard(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func LinkSetFastLeave(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func LinkSetLearning(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func LinkSetRootBlock(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func LinkSetFlood(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func LinkSetTxQLen(link Link, qlen int) error {
- return ErrNotImplemented
-}
-
-func LinkAdd(link Link) error {
- return ErrNotImplemented
-}
-
-func LinkDel(link Link) error {
- return ErrNotImplemented
-}
-
-func SetHairpin(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func SetGuard(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func SetFastLeave(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func SetLearning(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func SetRootBlock(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func SetFlood(link Link, mode bool) error {
- return ErrNotImplemented
-}
-
-func LinkList() ([]Link, error) {
- return nil, ErrNotImplemented
-}
-
-func AddrAdd(link Link, addr *Addr) error {
- return ErrNotImplemented
-}
-
-func AddrDel(link Link, addr *Addr) error {
- return ErrNotImplemented
-}
-
-func AddrList(link Link, family int) ([]Addr, error) {
- return nil, ErrNotImplemented
-}
-
-func RouteAdd(route *Route) error {
- return ErrNotImplemented
-}
-
-func RouteDel(route *Route) error {
- return ErrNotImplemented
-}
-
-func RouteList(link Link, family int) ([]Route, error) {
- return nil, ErrNotImplemented
-}
-
-func XfrmPolicyAdd(policy *XfrmPolicy) error {
- return ErrNotImplemented
-}
-
-func XfrmPolicyDel(policy *XfrmPolicy) error {
- return ErrNotImplemented
-}
-
-func XfrmPolicyList(family int) ([]XfrmPolicy, error) {
- return nil, ErrNotImplemented
-}
-
-func XfrmStateAdd(policy *XfrmState) error {
- return ErrNotImplemented
-}
-
-func XfrmStateDel(policy *XfrmState) error {
- return ErrNotImplemented
-}
-
-func XfrmStateList(family int) ([]XfrmState, error) {
- return nil, ErrNotImplemented
-}
-
-func NeighAdd(neigh *Neigh) error {
- return ErrNotImplemented
-}
-
-func NeighSet(neigh *Neigh) error {
- return ErrNotImplemented
-}
-
-func NeighAppend(neigh *Neigh) error {
- return ErrNotImplemented
-}
-
-func NeighDel(neigh *Neigh) error {
- return ErrNotImplemented
-}
-
-func NeighList(linkIndex, family int) ([]Neigh, error) {
- return nil, ErrNotImplemented
-}
-
-func NeighDeserialize(m []byte) (*Neigh, error) {
- return nil, ErrNotImplemented
-}
-
-func SocketGet(local, remote net.Addr) (*Socket, error) {
- return nil, ErrNotImplemented
-}
diff --git a/vendor/github.com/vishvananda/netlink/nl/addr_linux.go b/vendor/github.com/vishvananda/netlink/nl/addr_linux.go
deleted file mode 100644
index 50db3b4..0000000
--- a/vendor/github.com/vishvananda/netlink/nl/addr_linux.go
+++ /dev/null
@@ -1,77 +0,0 @@
-package nl
-
-import (
- "unsafe"
-
- "golang.org/x/sys/unix"
-)
-
-type IfAddrmsg struct {
- unix.IfAddrmsg
-}
-
-func NewIfAddrmsg(family int) *IfAddrmsg {
- return &IfAddrmsg{
- IfAddrmsg: unix.IfAddrmsg{
- Family: uint8(family),
- },
- }
-}
-
-// struct ifaddrmsg {
-// __u8 ifa_family;
-// __u8 ifa_prefixlen; /* The prefix length */
-// __u8 ifa_flags; /* Flags */
-// __u8 ifa_scope; /* Address scope */
-// __u32 ifa_index; /* Link index */
-// };
-
-// type IfAddrmsg struct {
-// Family uint8
-// Prefixlen uint8
-// Flags uint8
-// Scope uint8
-// Index uint32
-// }
-// SizeofIfAddrmsg = 0x8
-
-func DeserializeIfAddrmsg(b []byte) *IfAddrmsg {
- return (*IfAddrmsg)(unsafe.Pointer(&b[0:unix.SizeofIfAddrmsg][0]))
-}
-
-func (msg *IfAddrmsg) Serialize() []byte {
- return (*(*[unix.SizeofIfAddrmsg]byte)(unsafe.Pointer(msg)))[:]
-}
-
-func (msg *IfAddrmsg) Len() int {
- return unix.SizeofIfAddrmsg
-}
-
-// struct ifa_cacheinfo {
-// __u32 ifa_prefered;
-// __u32 ifa_valid;
-// __u32 cstamp; /* created timestamp, hundredths of seconds */
-// __u32 tstamp; /* updated timestamp, hundredths of seconds */
-// };
-
-const IFA_CACHEINFO = 6
-const SizeofIfaCacheInfo = 0x10
-
-type IfaCacheInfo struct {
- IfaPrefered uint32
- IfaValid uint32
- Cstamp uint32
- Tstamp uint32
-}
-
-func (msg *IfaCacheInfo) Len() int {
- return SizeofIfaCacheInfo
-}
-
-func DeserializeIfaCacheInfo(b []byte) *IfaCacheInfo {
- return (*IfaCacheInfo)(unsafe.Pointer(&b[0:SizeofIfaCacheInfo][0]))
-}
-
-func (msg *IfaCacheInfo) Serialize() []byte {
- return (*(*[SizeofIfaCacheInfo]byte)(unsafe.Pointer(msg)))[:]
-}
diff --git a/vendor/github.com/vishvananda/netlink/nl/bridge_linux.go b/vendor/github.com/vishvananda/netlink/nl/bridge_linux.go
deleted file mode 100644
index 6c0d333..0000000
--- a/vendor/github.com/vishvananda/netlink/nl/bridge_linux.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package nl
-
-import (
- "fmt"
- "unsafe"
-)
-
-const (
- SizeofBridgeVlanInfo = 0x04
-)
-
-/* Bridge Flags */
-const (
- BRIDGE_FLAGS_MASTER = iota /* Bridge command to/from master */
- BRIDGE_FLAGS_SELF /* Bridge command to/from lowerdev */
-)
-
-/* Bridge management nested attributes
- * [IFLA_AF_SPEC] = {
- * [IFLA_BRIDGE_FLAGS]
- * [IFLA_BRIDGE_MODE]
- * [IFLA_BRIDGE_VLAN_INFO]
- * }
- */
-const (
- IFLA_BRIDGE_FLAGS = iota
- IFLA_BRIDGE_MODE
- IFLA_BRIDGE_VLAN_INFO
-)
-
-const (
- BRIDGE_VLAN_INFO_MASTER = 1 << iota
- BRIDGE_VLAN_INFO_PVID
- BRIDGE_VLAN_INFO_UNTAGGED
- BRIDGE_VLAN_INFO_RANGE_BEGIN
- BRIDGE_VLAN_INFO_RANGE_END
-)
-
-// struct bridge_vlan_info {
-// __u16 flags;
-// __u16 vid;
-// };
-
-type BridgeVlanInfo struct {
- Flags uint16
- Vid uint16
-}
-
-func (b *BridgeVlanInfo) Serialize() []byte {
- return (*(*[SizeofBridgeVlanInfo]byte)(unsafe.Pointer(b)))[:]
-}
-
-func DeserializeBridgeVlanInfo(b []byte) *BridgeVlanInfo {
- return (*BridgeVlanInfo)(unsafe.Pointer(&b[0:SizeofBridgeVlanInfo][0]))
-}
-
-func (b *BridgeVlanInfo) PortVID() bool {
- return b.Flags&BRIDGE_VLAN_INFO_PVID > 0
-}
-
-func (b *BridgeVlanInfo) EngressUntag() bool {
- return b.Flags&BRIDGE_VLAN_INFO_UNTAGGED > 0
-}
-
-func (b *BridgeVlanInfo) String() string {
- return fmt.Sprintf("%+v", *b)
-}
-
-/* New extended info filters for IFLA_EXT_MASK */
-const (
- RTEXT_FILTER_VF = 1 << iota
- RTEXT_FILTER_BRVLAN
- RTEXT_FILTER_BRVLAN_COMPRESSED
-)
diff --git a/vendor/github.com/vishvananda/netlink/nl/conntrack_linux.go b/vendor/github.com/vishvananda/netlink/nl/conntrack_linux.go
deleted file mode 100644
index 380cc59..0000000
--- a/vendor/github.com/vishvananda/netlink/nl/conntrack_linux.go
+++ /dev/null
@@ -1,189 +0,0 @@
-package nl
-
-import "unsafe"
-
-// Track the message sizes for the correct serialization/deserialization
-const (
- SizeofNfgenmsg = 4
- SizeofNfattr = 4
- SizeofNfConntrack = 376
- SizeofNfctTupleHead = 52
-)
-
-var L4ProtoMap = map[uint8]string{
- 6: "tcp",
- 17: "udp",
-}
-
-// All the following constants are coming from:
-// https://github.com/torvalds/linux/blob/master/include/uapi/linux/netfilter/nfnetlink_conntrack.h
-
-// enum cntl_msg_types {
-// IPCTNL_MSG_CT_NEW,
-// IPCTNL_MSG_CT_GET,
-// IPCTNL_MSG_CT_DELETE,
-// IPCTNL_MSG_CT_GET_CTRZERO,
-// IPCTNL_MSG_CT_GET_STATS_CPU,
-// IPCTNL_MSG_CT_GET_STATS,
-// IPCTNL_MSG_CT_GET_DYING,
-// IPCTNL_MSG_CT_GET_UNCONFIRMED,
-//
-// IPCTNL_MSG_MAX
-// };
-const (
- IPCTNL_MSG_CT_GET = 1
- IPCTNL_MSG_CT_DELETE = 2
-)
-
-// #define NFNETLINK_V0 0
-const (
- NFNETLINK_V0 = 0
-)
-
-// #define NLA_F_NESTED (1 << 15)
-const (
- NLA_F_NESTED = (1 << 15)
-)
-
-// enum ctattr_type {
-// CTA_UNSPEC,
-// CTA_TUPLE_ORIG,
-// CTA_TUPLE_REPLY,
-// CTA_STATUS,
-// CTA_PROTOINFO,
-// CTA_HELP,
-// CTA_NAT_SRC,
-// #define CTA_NAT CTA_NAT_SRC /* backwards compatibility */
-// CTA_TIMEOUT,
-// CTA_MARK,
-// CTA_COUNTERS_ORIG,
-// CTA_COUNTERS_REPLY,
-// CTA_USE,
-// CTA_ID,
-// CTA_NAT_DST,
-// CTA_TUPLE_MASTER,
-// CTA_SEQ_ADJ_ORIG,
-// CTA_NAT_SEQ_ADJ_ORIG = CTA_SEQ_ADJ_ORIG,
-// CTA_SEQ_ADJ_REPLY,
-// CTA_NAT_SEQ_ADJ_REPLY = CTA_SEQ_ADJ_REPLY,
-// CTA_SECMARK, /* obsolete */
-// CTA_ZONE,
-// CTA_SECCTX,
-// CTA_TIMESTAMP,
-// CTA_MARK_MASK,
-// CTA_LABELS,
-// CTA_LABELS_MASK,
-// __CTA_MAX
-// };
-const (
- CTA_TUPLE_ORIG = 1
- CTA_TUPLE_REPLY = 2
- CTA_STATUS = 3
- CTA_TIMEOUT = 7
- CTA_MARK = 8
- CTA_PROTOINFO = 4
-)
-
-// enum ctattr_tuple {
-// CTA_TUPLE_UNSPEC,
-// CTA_TUPLE_IP,
-// CTA_TUPLE_PROTO,
-// CTA_TUPLE_ZONE,
-// __CTA_TUPLE_MAX
-// };
-// #define CTA_TUPLE_MAX (__CTA_TUPLE_MAX - 1)
-const (
- CTA_TUPLE_IP = 1
- CTA_TUPLE_PROTO = 2
-)
-
-// enum ctattr_ip {
-// CTA_IP_UNSPEC,
-// CTA_IP_V4_SRC,
-// CTA_IP_V4_DST,
-// CTA_IP_V6_SRC,
-// CTA_IP_V6_DST,
-// __CTA_IP_MAX
-// };
-// #define CTA_IP_MAX (__CTA_IP_MAX - 1)
-const (
- CTA_IP_V4_SRC = 1
- CTA_IP_V4_DST = 2
- CTA_IP_V6_SRC = 3
- CTA_IP_V6_DST = 4
-)
-
-// enum ctattr_l4proto {
-// CTA_PROTO_UNSPEC,
-// CTA_PROTO_NUM,
-// CTA_PROTO_SRC_PORT,
-// CTA_PROTO_DST_PORT,
-// CTA_PROTO_ICMP_ID,
-// CTA_PROTO_ICMP_TYPE,
-// CTA_PROTO_ICMP_CODE,
-// CTA_PROTO_ICMPV6_ID,
-// CTA_PROTO_ICMPV6_TYPE,
-// CTA_PROTO_ICMPV6_CODE,
-// __CTA_PROTO_MAX
-// };
-// #define CTA_PROTO_MAX (__CTA_PROTO_MAX - 1)
-const (
- CTA_PROTO_NUM = 1
- CTA_PROTO_SRC_PORT = 2
- CTA_PROTO_DST_PORT = 3
-)
-
-// enum ctattr_protoinfo {
-// CTA_PROTOINFO_UNSPEC,
-// CTA_PROTOINFO_TCP,
-// CTA_PROTOINFO_DCCP,
-// CTA_PROTOINFO_SCTP,
-// __CTA_PROTOINFO_MAX
-// };
-// #define CTA_PROTOINFO_MAX (__CTA_PROTOINFO_MAX - 1)
-const (
- CTA_PROTOINFO_TCP = 1
-)
-
-// enum ctattr_protoinfo_tcp {
-// CTA_PROTOINFO_TCP_UNSPEC,
-// CTA_PROTOINFO_TCP_STATE,
-// CTA_PROTOINFO_TCP_WSCALE_ORIGINAL,
-// CTA_PROTOINFO_TCP_WSCALE_REPLY,
-// CTA_PROTOINFO_TCP_FLAGS_ORIGINAL,
-// CTA_PROTOINFO_TCP_FLAGS_REPLY,
-// __CTA_PROTOINFO_TCP_MAX
-// };
-// #define CTA_PROTOINFO_TCP_MAX (__CTA_PROTOINFO_TCP_MAX - 1)
-const (
- CTA_PROTOINFO_TCP_STATE = 1
- CTA_PROTOINFO_TCP_WSCALE_ORIGINAL = 2
- CTA_PROTOINFO_TCP_WSCALE_REPLY = 3
- CTA_PROTOINFO_TCP_FLAGS_ORIGINAL = 4
- CTA_PROTOINFO_TCP_FLAGS_REPLY = 5
-)
-
-// /* General form of address family dependent message.
-// */
-// struct nfgenmsg {
-// __u8 nfgen_family; /* AF_xxx */
-// __u8 version; /* nfnetlink version */
-// __be16 res_id; /* resource id */
-// };
-type Nfgenmsg struct {
- NfgenFamily uint8
- Version uint8
- ResId uint16 // big endian
-}
-
-func (msg *Nfgenmsg) Len() int {
- return SizeofNfgenmsg
-}
-
-func DeserializeNfgenmsg(b []byte) *Nfgenmsg {
- return (*Nfgenmsg)(unsafe.Pointer(&b[0:SizeofNfgenmsg][0]))
-}
-
-func (msg *Nfgenmsg) Serialize() []byte {
- return (*(*[SizeofNfgenmsg]byte)(unsafe.Pointer(msg)))[:]
-}
diff --git a/vendor/github.com/vishvananda/netlink/nl/genetlink_linux.go b/vendor/github.com/vishvananda/netlink/nl/genetlink_linux.go
deleted file mode 100644
index 81b46f2..0000000
--- a/vendor/github.com/vishvananda/netlink/nl/genetlink_linux.go
+++ /dev/null
@@ -1,89 +0,0 @@
-package nl
-
-import (
- "unsafe"
-)
-
-const SizeofGenlmsg = 4
-
-const (
- GENL_ID_CTRL = 0x10
- GENL_CTRL_VERSION = 2
- GENL_CTRL_NAME = "nlctrl"
-)
-
-const (
- GENL_CTRL_CMD_GETFAMILY = 3
-)
-
-const (
- GENL_CTRL_ATTR_UNSPEC = iota
- GENL_CTRL_ATTR_FAMILY_ID
- GENL_CTRL_ATTR_FAMILY_NAME
- GENL_CTRL_ATTR_VERSION
- GENL_CTRL_ATTR_HDRSIZE
- GENL_CTRL_ATTR_MAXATTR
- GENL_CTRL_ATTR_OPS
- GENL_CTRL_ATTR_MCAST_GROUPS
-)
-
-const (
- GENL_CTRL_ATTR_OP_UNSPEC = iota
- GENL_CTRL_ATTR_OP_ID
- GENL_CTRL_ATTR_OP_FLAGS
-)
-
-const (
- GENL_ADMIN_PERM = 1 << iota
- GENL_CMD_CAP_DO
- GENL_CMD_CAP_DUMP
- GENL_CMD_CAP_HASPOL
-)
-
-const (
- GENL_CTRL_ATTR_MCAST_GRP_UNSPEC = iota
- GENL_CTRL_ATTR_MCAST_GRP_NAME
- GENL_CTRL_ATTR_MCAST_GRP_ID
-)
-
-const (
- GENL_GTP_VERSION = 0
- GENL_GTP_NAME = "gtp"
-)
-
-const (
- GENL_GTP_CMD_NEWPDP = iota
- GENL_GTP_CMD_DELPDP
- GENL_GTP_CMD_GETPDP
-)
-
-const (
- GENL_GTP_ATTR_UNSPEC = iota
- GENL_GTP_ATTR_LINK
- GENL_GTP_ATTR_VERSION
- GENL_GTP_ATTR_TID
- GENL_GTP_ATTR_PEER_ADDRESS
- GENL_GTP_ATTR_MS_ADDRESS
- GENL_GTP_ATTR_FLOW
- GENL_GTP_ATTR_NET_NS_FD
- GENL_GTP_ATTR_I_TEI
- GENL_GTP_ATTR_O_TEI
- GENL_GTP_ATTR_PAD
-)
-
-type Genlmsg struct {
- Command uint8
- Version uint8
-}
-
-func (msg *Genlmsg) Len() int {
- return SizeofGenlmsg
-}
-
-func DeserializeGenlmsg(b []byte) *Genlmsg {
- return (*Genlmsg)(unsafe.Pointer(&b[0:SizeofGenlmsg][0]))
-}
-
-func (msg *Genlmsg) Serialize() []byte {
- return (*(*[SizeofGenlmsg]byte)(unsafe.Pointer(msg)))[:]
-}
diff --git a/vendor/github.com/vishvananda/netlink/nl/link_linux.go b/vendor/github.com/vishvananda/netlink/nl/link_linux.go
deleted file mode 100644
index 84a3498..0000000
--- a/vendor/github.com/vishvananda/netlink/nl/link_linux.go
+++ /dev/null
@@ -1,548 +0,0 @@
-package nl
-
-import (
- "unsafe"
-)
-
-const (
- DEFAULT_CHANGE = 0xFFFFFFFF
-)
-
-const (
- IFLA_INFO_UNSPEC = iota
- IFLA_INFO_KIND
- IFLA_INFO_DATA
- IFLA_INFO_XSTATS
- IFLA_INFO_MAX = IFLA_INFO_XSTATS
-)
-
-const (
- IFLA_VLAN_UNSPEC = iota
- IFLA_VLAN_ID
- IFLA_VLAN_FLAGS
- IFLA_VLAN_EGRESS_QOS
- IFLA_VLAN_INGRESS_QOS
- IFLA_VLAN_PROTOCOL
- IFLA_VLAN_MAX = IFLA_VLAN_PROTOCOL
-)
-
-const (
- VETH_INFO_UNSPEC = iota
- VETH_INFO_PEER
- VETH_INFO_MAX = VETH_INFO_PEER
-)
-
-const (
- IFLA_VXLAN_UNSPEC = iota
- IFLA_VXLAN_ID
- IFLA_VXLAN_GROUP
- IFLA_VXLAN_LINK
- IFLA_VXLAN_LOCAL
- IFLA_VXLAN_TTL
- IFLA_VXLAN_TOS
- IFLA_VXLAN_LEARNING
- IFLA_VXLAN_AGEING
- IFLA_VXLAN_LIMIT
- IFLA_VXLAN_PORT_RANGE
- IFLA_VXLAN_PROXY
- IFLA_VXLAN_RSC
- IFLA_VXLAN_L2MISS
- IFLA_VXLAN_L3MISS
- IFLA_VXLAN_PORT
- IFLA_VXLAN_GROUP6
- IFLA_VXLAN_LOCAL6
- IFLA_VXLAN_UDP_CSUM
- IFLA_VXLAN_UDP_ZERO_CSUM6_TX
- IFLA_VXLAN_UDP_ZERO_CSUM6_RX
- IFLA_VXLAN_REMCSUM_TX
- IFLA_VXLAN_REMCSUM_RX
- IFLA_VXLAN_GBP
- IFLA_VXLAN_REMCSUM_NOPARTIAL
- IFLA_VXLAN_FLOWBASED
- IFLA_VXLAN_MAX = IFLA_VXLAN_FLOWBASED
-)
-
-const (
- BRIDGE_MODE_UNSPEC = iota
- BRIDGE_MODE_HAIRPIN
-)
-
-const (
- IFLA_BRPORT_UNSPEC = iota
- IFLA_BRPORT_STATE
- IFLA_BRPORT_PRIORITY
- IFLA_BRPORT_COST
- IFLA_BRPORT_MODE
- IFLA_BRPORT_GUARD
- IFLA_BRPORT_PROTECT
- IFLA_BRPORT_FAST_LEAVE
- IFLA_BRPORT_LEARNING
- IFLA_BRPORT_UNICAST_FLOOD
- IFLA_BRPORT_PROXYARP
- IFLA_BRPORT_LEARNING_SYNC
- IFLA_BRPORT_PROXYARP_WIFI
- IFLA_BRPORT_MAX = IFLA_BRPORT_PROXYARP_WIFI
-)
-
-const (
- IFLA_IPVLAN_UNSPEC = iota
- IFLA_IPVLAN_MODE
- IFLA_IPVLAN_MAX = IFLA_IPVLAN_MODE
-)
-
-const (
- IFLA_MACVLAN_UNSPEC = iota
- IFLA_MACVLAN_MODE
- IFLA_MACVLAN_FLAGS
- IFLA_MACVLAN_MACADDR_MODE
- IFLA_MACVLAN_MACADDR
- IFLA_MACVLAN_MACADDR_DATA
- IFLA_MACVLAN_MACADDR_COUNT
- IFLA_MACVLAN_MAX = IFLA_MACVLAN_FLAGS
-)
-
-const (
- MACVLAN_MODE_PRIVATE = 1
- MACVLAN_MODE_VEPA = 2
- MACVLAN_MODE_BRIDGE = 4
- MACVLAN_MODE_PASSTHRU = 8
- MACVLAN_MODE_SOURCE = 16
-)
-
-const (
- MACVLAN_MACADDR_ADD = iota
- MACVLAN_MACADDR_DEL
- MACVLAN_MACADDR_FLUSH
- MACVLAN_MACADDR_SET
-)
-
-const (
- IFLA_BOND_UNSPEC = iota
- IFLA_BOND_MODE
- IFLA_BOND_ACTIVE_SLAVE
- IFLA_BOND_MIIMON
- IFLA_BOND_UPDELAY
- IFLA_BOND_DOWNDELAY
- IFLA_BOND_USE_CARRIER
- IFLA_BOND_ARP_INTERVAL
- IFLA_BOND_ARP_IP_TARGET
- IFLA_BOND_ARP_VALIDATE
- IFLA_BOND_ARP_ALL_TARGETS
- IFLA_BOND_PRIMARY
- IFLA_BOND_PRIMARY_RESELECT
- IFLA_BOND_FAIL_OVER_MAC
- IFLA_BOND_XMIT_HASH_POLICY
- IFLA_BOND_RESEND_IGMP
- IFLA_BOND_NUM_PEER_NOTIF
- IFLA_BOND_ALL_SLAVES_ACTIVE
- IFLA_BOND_MIN_LINKS
- IFLA_BOND_LP_INTERVAL
- IFLA_BOND_PACKETS_PER_SLAVE
- IFLA_BOND_AD_LACP_RATE
- IFLA_BOND_AD_SELECT
- IFLA_BOND_AD_INFO
- IFLA_BOND_AD_ACTOR_SYS_PRIO
- IFLA_BOND_AD_USER_PORT_KEY
- IFLA_BOND_AD_ACTOR_SYSTEM
- IFLA_BOND_TLB_DYNAMIC_LB
-)
-
-const (
- IFLA_BOND_AD_INFO_UNSPEC = iota
- IFLA_BOND_AD_INFO_AGGREGATOR
- IFLA_BOND_AD_INFO_NUM_PORTS
- IFLA_BOND_AD_INFO_ACTOR_KEY
- IFLA_BOND_AD_INFO_PARTNER_KEY
- IFLA_BOND_AD_INFO_PARTNER_MAC
-)
-
-const (
- IFLA_BOND_SLAVE_UNSPEC = iota
- IFLA_BOND_SLAVE_STATE
- IFLA_BOND_SLAVE_MII_STATUS
- IFLA_BOND_SLAVE_LINK_FAILURE_COUNT
- IFLA_BOND_SLAVE_PERM_HWADDR
- IFLA_BOND_SLAVE_QUEUE_ID
- IFLA_BOND_SLAVE_AD_AGGREGATOR_ID
-)
-
-const (
- IFLA_GRE_UNSPEC = iota
- IFLA_GRE_LINK
- IFLA_GRE_IFLAGS
- IFLA_GRE_OFLAGS
- IFLA_GRE_IKEY
- IFLA_GRE_OKEY
- IFLA_GRE_LOCAL
- IFLA_GRE_REMOTE
- IFLA_GRE_TTL
- IFLA_GRE_TOS
- IFLA_GRE_PMTUDISC
- IFLA_GRE_ENCAP_LIMIT
- IFLA_GRE_FLOWINFO
- IFLA_GRE_FLAGS
- IFLA_GRE_ENCAP_TYPE
- IFLA_GRE_ENCAP_FLAGS
- IFLA_GRE_ENCAP_SPORT
- IFLA_GRE_ENCAP_DPORT
- IFLA_GRE_COLLECT_METADATA
- IFLA_GRE_MAX = IFLA_GRE_COLLECT_METADATA
-)
-
-const (
- GRE_CSUM = 0x8000
- GRE_ROUTING = 0x4000
- GRE_KEY = 0x2000
- GRE_SEQ = 0x1000
- GRE_STRICT = 0x0800
- GRE_REC = 0x0700
- GRE_FLAGS = 0x00F8
- GRE_VERSION = 0x0007
-)
-
-const (
- IFLA_VF_INFO_UNSPEC = iota
- IFLA_VF_INFO
- IFLA_VF_INFO_MAX = IFLA_VF_INFO
-)
-
-const (
- IFLA_VF_UNSPEC = iota
- IFLA_VF_MAC /* Hardware queue specific attributes */
- IFLA_VF_VLAN
- IFLA_VF_TX_RATE /* Max TX Bandwidth Allocation */
- IFLA_VF_SPOOFCHK /* Spoof Checking on/off switch */
- IFLA_VF_LINK_STATE /* link state enable/disable/auto switch */
- IFLA_VF_RATE /* Min and Max TX Bandwidth Allocation */
- IFLA_VF_RSS_QUERY_EN /* RSS Redirection Table and Hash Key query
- * on/off switch
- */
- IFLA_VF_STATS /* network device statistics */
- IFLA_VF_TRUST /* Trust state of VF */
- IFLA_VF_MAX = IFLA_VF_TRUST
-)
-
-const (
- IFLA_VF_LINK_STATE_AUTO = iota /* link state of the uplink */
- IFLA_VF_LINK_STATE_ENABLE /* link always up */
- IFLA_VF_LINK_STATE_DISABLE /* link always down */
- IFLA_VF_LINK_STATE_MAX = IFLA_VF_LINK_STATE_DISABLE
-)
-
-const (
- IFLA_VF_STATS_RX_PACKETS = iota
- IFLA_VF_STATS_TX_PACKETS
- IFLA_VF_STATS_RX_BYTES
- IFLA_VF_STATS_TX_BYTES
- IFLA_VF_STATS_BROADCAST
- IFLA_VF_STATS_MULTICAST
- IFLA_VF_STATS_MAX = IFLA_VF_STATS_MULTICAST
-)
-
-const (
- SizeofVfMac = 0x24
- SizeofVfVlan = 0x0c
- SizeofVfTxRate = 0x08
- SizeofVfRate = 0x0c
- SizeofVfSpoofchk = 0x08
- SizeofVfLinkState = 0x08
- SizeofVfRssQueryEn = 0x08
- SizeofVfTrust = 0x08
-)
-
-// struct ifla_vf_mac {
-// __u32 vf;
-// __u8 mac[32]; /* MAX_ADDR_LEN */
-// };
-
-type VfMac struct {
- Vf uint32
- Mac [32]byte
-}
-
-func (msg *VfMac) Len() int {
- return SizeofVfMac
-}
-
-func DeserializeVfMac(b []byte) *VfMac {
- return (*VfMac)(unsafe.Pointer(&b[0:SizeofVfMac][0]))
-}
-
-func (msg *VfMac) Serialize() []byte {
- return (*(*[SizeofVfMac]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct ifla_vf_vlan {
-// __u32 vf;
-// __u32 vlan; /* 0 - 4095, 0 disables VLAN filter */
-// __u32 qos;
-// };
-
-type VfVlan struct {
- Vf uint32
- Vlan uint32
- Qos uint32
-}
-
-func (msg *VfVlan) Len() int {
- return SizeofVfVlan
-}
-
-func DeserializeVfVlan(b []byte) *VfVlan {
- return (*VfVlan)(unsafe.Pointer(&b[0:SizeofVfVlan][0]))
-}
-
-func (msg *VfVlan) Serialize() []byte {
- return (*(*[SizeofVfVlan]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct ifla_vf_tx_rate {
-// __u32 vf;
-// __u32 rate; /* Max TX bandwidth in Mbps, 0 disables throttling */
-// };
-
-type VfTxRate struct {
- Vf uint32
- Rate uint32
-}
-
-func (msg *VfTxRate) Len() int {
- return SizeofVfTxRate
-}
-
-func DeserializeVfTxRate(b []byte) *VfTxRate {
- return (*VfTxRate)(unsafe.Pointer(&b[0:SizeofVfTxRate][0]))
-}
-
-func (msg *VfTxRate) Serialize() []byte {
- return (*(*[SizeofVfTxRate]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct ifla_vf_rate {
-// __u32 vf;
-// __u32 min_tx_rate; /* Min Bandwidth in Mbps */
-// __u32 max_tx_rate; /* Max Bandwidth in Mbps */
-// };
-
-type VfRate struct {
- Vf uint32
- MinTxRate uint32
- MaxTxRate uint32
-}
-
-func (msg *VfRate) Len() int {
- return SizeofVfRate
-}
-
-func DeserializeVfRate(b []byte) *VfRate {
- return (*VfRate)(unsafe.Pointer(&b[0:SizeofVfRate][0]))
-}
-
-func (msg *VfRate) Serialize() []byte {
- return (*(*[SizeofVfRate]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct ifla_vf_spoofchk {
-// __u32 vf;
-// __u32 setting;
-// };
-
-type VfSpoofchk struct {
- Vf uint32
- Setting uint32
-}
-
-func (msg *VfSpoofchk) Len() int {
- return SizeofVfSpoofchk
-}
-
-func DeserializeVfSpoofchk(b []byte) *VfSpoofchk {
- return (*VfSpoofchk)(unsafe.Pointer(&b[0:SizeofVfSpoofchk][0]))
-}
-
-func (msg *VfSpoofchk) Serialize() []byte {
- return (*(*[SizeofVfSpoofchk]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct ifla_vf_link_state {
-// __u32 vf;
-// __u32 link_state;
-// };
-
-type VfLinkState struct {
- Vf uint32
- LinkState uint32
-}
-
-func (msg *VfLinkState) Len() int {
- return SizeofVfLinkState
-}
-
-func DeserializeVfLinkState(b []byte) *VfLinkState {
- return (*VfLinkState)(unsafe.Pointer(&b[0:SizeofVfLinkState][0]))
-}
-
-func (msg *VfLinkState) Serialize() []byte {
- return (*(*[SizeofVfLinkState]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct ifla_vf_rss_query_en {
-// __u32 vf;
-// __u32 setting;
-// };
-
-type VfRssQueryEn struct {
- Vf uint32
- Setting uint32
-}
-
-func (msg *VfRssQueryEn) Len() int {
- return SizeofVfRssQueryEn
-}
-
-func DeserializeVfRssQueryEn(b []byte) *VfRssQueryEn {
- return (*VfRssQueryEn)(unsafe.Pointer(&b[0:SizeofVfRssQueryEn][0]))
-}
-
-func (msg *VfRssQueryEn) Serialize() []byte {
- return (*(*[SizeofVfRssQueryEn]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct ifla_vf_trust {
-// __u32 vf;
-// __u32 setting;
-// };
-
-type VfTrust struct {
- Vf uint32
- Setting uint32
-}
-
-func (msg *VfTrust) Len() int {
- return SizeofVfTrust
-}
-
-func DeserializeVfTrust(b []byte) *VfTrust {
- return (*VfTrust)(unsafe.Pointer(&b[0:SizeofVfTrust][0]))
-}
-
-func (msg *VfTrust) Serialize() []byte {
- return (*(*[SizeofVfTrust]byte)(unsafe.Pointer(msg)))[:]
-}
-
-const (
- XDP_FLAGS_UPDATE_IF_NOEXIST = 1 << iota
- XDP_FLAGS_SKB_MODE
- XDP_FLAGS_DRV_MODE
- XDP_FLAGS_MASK = XDP_FLAGS_UPDATE_IF_NOEXIST | XDP_FLAGS_SKB_MODE | XDP_FLAGS_DRV_MODE
-)
-
-const (
- IFLA_XDP_UNSPEC = iota
- IFLA_XDP_FD /* fd of xdp program to attach, or -1 to remove */
- IFLA_XDP_ATTACHED /* read-only bool indicating if prog is attached */
- IFLA_XDP_FLAGS /* xdp prog related flags */
- IFLA_XDP_PROG_ID /* xdp prog id */
- IFLA_XDP_MAX = IFLA_XDP_PROG_ID
-)
-
-const (
- IFLA_IPTUN_UNSPEC = iota
- IFLA_IPTUN_LINK
- IFLA_IPTUN_LOCAL
- IFLA_IPTUN_REMOTE
- IFLA_IPTUN_TTL
- IFLA_IPTUN_TOS
- IFLA_IPTUN_ENCAP_LIMIT
- IFLA_IPTUN_FLOWINFO
- IFLA_IPTUN_FLAGS
- IFLA_IPTUN_PROTO
- IFLA_IPTUN_PMTUDISC
- IFLA_IPTUN_6RD_PREFIX
- IFLA_IPTUN_6RD_RELAY_PREFIX
- IFLA_IPTUN_6RD_PREFIXLEN
- IFLA_IPTUN_6RD_RELAY_PREFIXLEN
- IFLA_IPTUN_ENCAP_TYPE
- IFLA_IPTUN_ENCAP_FLAGS
- IFLA_IPTUN_ENCAP_SPORT
- IFLA_IPTUN_ENCAP_DPORT
- IFLA_IPTUN_COLLECT_METADATA
- IFLA_IPTUN_MAX = IFLA_IPTUN_COLLECT_METADATA
-)
-
-const (
- IFLA_VTI_UNSPEC = iota
- IFLA_VTI_LINK
- IFLA_VTI_IKEY
- IFLA_VTI_OKEY
- IFLA_VTI_LOCAL
- IFLA_VTI_REMOTE
- IFLA_VTI_MAX = IFLA_VTI_REMOTE
-)
-
-const (
- IFLA_VRF_UNSPEC = iota
- IFLA_VRF_TABLE
-)
-
-const (
- IFLA_BR_UNSPEC = iota
- IFLA_BR_FORWARD_DELAY
- IFLA_BR_HELLO_TIME
- IFLA_BR_MAX_AGE
- IFLA_BR_AGEING_TIME
- IFLA_BR_STP_STATE
- IFLA_BR_PRIORITY
- IFLA_BR_VLAN_FILTERING
- IFLA_BR_VLAN_PROTOCOL
- IFLA_BR_GROUP_FWD_MASK
- IFLA_BR_ROOT_ID
- IFLA_BR_BRIDGE_ID
- IFLA_BR_ROOT_PORT
- IFLA_BR_ROOT_PATH_COST
- IFLA_BR_TOPOLOGY_CHANGE
- IFLA_BR_TOPOLOGY_CHANGE_DETECTED
- IFLA_BR_HELLO_TIMER
- IFLA_BR_TCN_TIMER
- IFLA_BR_TOPOLOGY_CHANGE_TIMER
- IFLA_BR_GC_TIMER
- IFLA_BR_GROUP_ADDR
- IFLA_BR_FDB_FLUSH
- IFLA_BR_MCAST_ROUTER
- IFLA_BR_MCAST_SNOOPING
- IFLA_BR_MCAST_QUERY_USE_IFADDR
- IFLA_BR_MCAST_QUERIER
- IFLA_BR_MCAST_HASH_ELASTICITY
- IFLA_BR_MCAST_HASH_MAX
- IFLA_BR_MCAST_LAST_MEMBER_CNT
- IFLA_BR_MCAST_STARTUP_QUERY_CNT
- IFLA_BR_MCAST_LAST_MEMBER_INTVL
- IFLA_BR_MCAST_MEMBERSHIP_INTVL
- IFLA_BR_MCAST_QUERIER_INTVL
- IFLA_BR_MCAST_QUERY_INTVL
- IFLA_BR_MCAST_QUERY_RESPONSE_INTVL
- IFLA_BR_MCAST_STARTUP_QUERY_INTVL
- IFLA_BR_NF_CALL_IPTABLES
- IFLA_BR_NF_CALL_IP6TABLES
- IFLA_BR_NF_CALL_ARPTABLES
- IFLA_BR_VLAN_DEFAULT_PVID
- IFLA_BR_PAD
- IFLA_BR_VLAN_STATS_ENABLED
- IFLA_BR_MCAST_STATS_ENABLED
- IFLA_BR_MCAST_IGMP_VERSION
- IFLA_BR_MCAST_MLD_VERSION
- IFLA_BR_MAX = IFLA_BR_MCAST_MLD_VERSION
-)
-
-const (
- IFLA_GTP_UNSPEC = iota
- IFLA_GTP_FD0
- IFLA_GTP_FD1
- IFLA_GTP_PDP_HASHSIZE
- IFLA_GTP_ROLE
-)
-
-const (
- GTP_ROLE_GGSN = iota
- GTP_ROLE_SGSN
-)
diff --git a/vendor/github.com/vishvananda/netlink/nl/mpls_linux.go b/vendor/github.com/vishvananda/netlink/nl/mpls_linux.go
deleted file mode 100644
index 3915b7e..0000000
--- a/vendor/github.com/vishvananda/netlink/nl/mpls_linux.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package nl
-
-import "encoding/binary"
-
-const (
- MPLS_LS_LABEL_SHIFT = 12
- MPLS_LS_S_SHIFT = 8
-)
-
-func EncodeMPLSStack(labels ...int) []byte {
- b := make([]byte, 4*len(labels))
- for idx, label := range labels {
- l := label << MPLS_LS_LABEL_SHIFT
- if idx == len(labels)-1 {
- l |= 1 << MPLS_LS_S_SHIFT
- }
- binary.BigEndian.PutUint32(b[idx*4:], uint32(l))
- }
- return b
-}
-
-func DecodeMPLSStack(buf []byte) []int {
- if len(buf)%4 != 0 {
- return nil
- }
- stack := make([]int, 0, len(buf)/4)
- for len(buf) > 0 {
- l := binary.BigEndian.Uint32(buf[:4])
- buf = buf[4:]
- stack = append(stack, int(l)>>MPLS_LS_LABEL_SHIFT)
- if (l>>MPLS_LS_S_SHIFT)&1 > 0 {
- break
- }
- }
- return stack
-}
diff --git a/vendor/github.com/vishvananda/netlink/nl/nl_linux.go b/vendor/github.com/vishvananda/netlink/nl/nl_linux.go
deleted file mode 100644
index bc8e82c..0000000
--- a/vendor/github.com/vishvananda/netlink/nl/nl_linux.go
+++ /dev/null
@@ -1,738 +0,0 @@
-// Package nl has low level primitives for making Netlink calls.
-package nl
-
-import (
- "bytes"
- "encoding/binary"
- "fmt"
- "net"
- "runtime"
- "sync"
- "sync/atomic"
- "syscall"
- "unsafe"
-
- "github.com/vishvananda/netns"
- "golang.org/x/sys/unix"
-)
-
-const (
- // Family type definitions
- FAMILY_ALL = unix.AF_UNSPEC
- FAMILY_V4 = unix.AF_INET
- FAMILY_V6 = unix.AF_INET6
- FAMILY_MPLS = AF_MPLS
-)
-
-// SupportedNlFamilies contains the list of netlink families this netlink package supports
-var SupportedNlFamilies = []int{unix.NETLINK_ROUTE, unix.NETLINK_XFRM, unix.NETLINK_NETFILTER}
-
-var nextSeqNr uint32
-
-// GetIPFamily returns the family type of a net.IP.
-func GetIPFamily(ip net.IP) int {
- if len(ip) <= net.IPv4len {
- return FAMILY_V4
- }
- if ip.To4() != nil {
- return FAMILY_V4
- }
- return FAMILY_V6
-}
-
-var nativeEndian binary.ByteOrder
-
-// Get native endianness for the system
-func NativeEndian() binary.ByteOrder {
- if nativeEndian == nil {
- var x uint32 = 0x01020304
- if *(*byte)(unsafe.Pointer(&x)) == 0x01 {
- nativeEndian = binary.BigEndian
- } else {
- nativeEndian = binary.LittleEndian
- }
- }
- return nativeEndian
-}
-
-// Byte swap a 16 bit value if we aren't big endian
-func Swap16(i uint16) uint16 {
- if NativeEndian() == binary.BigEndian {
- return i
- }
- return (i&0xff00)>>8 | (i&0xff)<<8
-}
-
-// Byte swap a 32 bit value if aren't big endian
-func Swap32(i uint32) uint32 {
- if NativeEndian() == binary.BigEndian {
- return i
- }
- return (i&0xff000000)>>24 | (i&0xff0000)>>8 | (i&0xff00)<<8 | (i&0xff)<<24
-}
-
-type NetlinkRequestData interface {
- Len() int
- Serialize() []byte
-}
-
-// IfInfomsg is related to links, but it is used for list requests as well
-type IfInfomsg struct {
- unix.IfInfomsg
-}
-
-// Create an IfInfomsg with family specified
-func NewIfInfomsg(family int) *IfInfomsg {
- return &IfInfomsg{
- IfInfomsg: unix.IfInfomsg{
- Family: uint8(family),
- },
- }
-}
-
-func DeserializeIfInfomsg(b []byte) *IfInfomsg {
- return (*IfInfomsg)(unsafe.Pointer(&b[0:unix.SizeofIfInfomsg][0]))
-}
-
-func (msg *IfInfomsg) Serialize() []byte {
- return (*(*[unix.SizeofIfInfomsg]byte)(unsafe.Pointer(msg)))[:]
-}
-
-func (msg *IfInfomsg) Len() int {
- return unix.SizeofIfInfomsg
-}
-
-func (msg *IfInfomsg) EncapType() string {
- switch msg.Type {
- case 0:
- return "generic"
- case unix.ARPHRD_ETHER:
- return "ether"
- case unix.ARPHRD_EETHER:
- return "eether"
- case unix.ARPHRD_AX25:
- return "ax25"
- case unix.ARPHRD_PRONET:
- return "pronet"
- case unix.ARPHRD_CHAOS:
- return "chaos"
- case unix.ARPHRD_IEEE802:
- return "ieee802"
- case unix.ARPHRD_ARCNET:
- return "arcnet"
- case unix.ARPHRD_APPLETLK:
- return "atalk"
- case unix.ARPHRD_DLCI:
- return "dlci"
- case unix.ARPHRD_ATM:
- return "atm"
- case unix.ARPHRD_METRICOM:
- return "metricom"
- case unix.ARPHRD_IEEE1394:
- return "ieee1394"
- case unix.ARPHRD_INFINIBAND:
- return "infiniband"
- case unix.ARPHRD_SLIP:
- return "slip"
- case unix.ARPHRD_CSLIP:
- return "cslip"
- case unix.ARPHRD_SLIP6:
- return "slip6"
- case unix.ARPHRD_CSLIP6:
- return "cslip6"
- case unix.ARPHRD_RSRVD:
- return "rsrvd"
- case unix.ARPHRD_ADAPT:
- return "adapt"
- case unix.ARPHRD_ROSE:
- return "rose"
- case unix.ARPHRD_X25:
- return "x25"
- case unix.ARPHRD_HWX25:
- return "hwx25"
- case unix.ARPHRD_PPP:
- return "ppp"
- case unix.ARPHRD_HDLC:
- return "hdlc"
- case unix.ARPHRD_LAPB:
- return "lapb"
- case unix.ARPHRD_DDCMP:
- return "ddcmp"
- case unix.ARPHRD_RAWHDLC:
- return "rawhdlc"
- case unix.ARPHRD_TUNNEL:
- return "ipip"
- case unix.ARPHRD_TUNNEL6:
- return "tunnel6"
- case unix.ARPHRD_FRAD:
- return "frad"
- case unix.ARPHRD_SKIP:
- return "skip"
- case unix.ARPHRD_LOOPBACK:
- return "loopback"
- case unix.ARPHRD_LOCALTLK:
- return "ltalk"
- case unix.ARPHRD_FDDI:
- return "fddi"
- case unix.ARPHRD_BIF:
- return "bif"
- case unix.ARPHRD_SIT:
- return "sit"
- case unix.ARPHRD_IPDDP:
- return "ip/ddp"
- case unix.ARPHRD_IPGRE:
- return "gre"
- case unix.ARPHRD_PIMREG:
- return "pimreg"
- case unix.ARPHRD_HIPPI:
- return "hippi"
- case unix.ARPHRD_ASH:
- return "ash"
- case unix.ARPHRD_ECONET:
- return "econet"
- case unix.ARPHRD_IRDA:
- return "irda"
- case unix.ARPHRD_FCPP:
- return "fcpp"
- case unix.ARPHRD_FCAL:
- return "fcal"
- case unix.ARPHRD_FCPL:
- return "fcpl"
- case unix.ARPHRD_FCFABRIC:
- return "fcfb0"
- case unix.ARPHRD_FCFABRIC + 1:
- return "fcfb1"
- case unix.ARPHRD_FCFABRIC + 2:
- return "fcfb2"
- case unix.ARPHRD_FCFABRIC + 3:
- return "fcfb3"
- case unix.ARPHRD_FCFABRIC + 4:
- return "fcfb4"
- case unix.ARPHRD_FCFABRIC + 5:
- return "fcfb5"
- case unix.ARPHRD_FCFABRIC + 6:
- return "fcfb6"
- case unix.ARPHRD_FCFABRIC + 7:
- return "fcfb7"
- case unix.ARPHRD_FCFABRIC + 8:
- return "fcfb8"
- case unix.ARPHRD_FCFABRIC + 9:
- return "fcfb9"
- case unix.ARPHRD_FCFABRIC + 10:
- return "fcfb10"
- case unix.ARPHRD_FCFABRIC + 11:
- return "fcfb11"
- case unix.ARPHRD_FCFABRIC + 12:
- return "fcfb12"
- case unix.ARPHRD_IEEE802_TR:
- return "tr"
- case unix.ARPHRD_IEEE80211:
- return "ieee802.11"
- case unix.ARPHRD_IEEE80211_PRISM:
- return "ieee802.11/prism"
- case unix.ARPHRD_IEEE80211_RADIOTAP:
- return "ieee802.11/radiotap"
- case unix.ARPHRD_IEEE802154:
- return "ieee802.15.4"
-
- case 65534:
- return "none"
- case 65535:
- return "void"
- }
- return fmt.Sprintf("unknown%d", msg.Type)
-}
-
-func rtaAlignOf(attrlen int) int {
- return (attrlen + unix.RTA_ALIGNTO - 1) & ^(unix.RTA_ALIGNTO - 1)
-}
-
-func NewIfInfomsgChild(parent *RtAttr, family int) *IfInfomsg {
- msg := NewIfInfomsg(family)
- parent.children = append(parent.children, msg)
- return msg
-}
-
-// Extend RtAttr to handle data and children
-type RtAttr struct {
- unix.RtAttr
- Data []byte
- children []NetlinkRequestData
-}
-
-// Create a new Extended RtAttr object
-func NewRtAttr(attrType int, data []byte) *RtAttr {
- return &RtAttr{
- RtAttr: unix.RtAttr{
- Type: uint16(attrType),
- },
- children: []NetlinkRequestData{},
- Data: data,
- }
-}
-
-// Create a new RtAttr obj anc add it as a child of an existing object
-func NewRtAttrChild(parent *RtAttr, attrType int, data []byte) *RtAttr {
- attr := NewRtAttr(attrType, data)
- parent.children = append(parent.children, attr)
- return attr
-}
-
-// AddChild adds an existing RtAttr as a child.
-func (a *RtAttr) AddChild(attr *RtAttr) {
- a.children = append(a.children, attr)
-}
-
-func (a *RtAttr) Len() int {
- if len(a.children) == 0 {
- return (unix.SizeofRtAttr + len(a.Data))
- }
-
- l := 0
- for _, child := range a.children {
- l += rtaAlignOf(child.Len())
- }
- l += unix.SizeofRtAttr
- return rtaAlignOf(l + len(a.Data))
-}
-
-// Serialize the RtAttr into a byte array
-// This can't just unsafe.cast because it must iterate through children.
-func (a *RtAttr) Serialize() []byte {
- native := NativeEndian()
-
- length := a.Len()
- buf := make([]byte, rtaAlignOf(length))
-
- next := 4
- if a.Data != nil {
- copy(buf[next:], a.Data)
- next += rtaAlignOf(len(a.Data))
- }
- if len(a.children) > 0 {
- for _, child := range a.children {
- childBuf := child.Serialize()
- copy(buf[next:], childBuf)
- next += rtaAlignOf(len(childBuf))
- }
- }
-
- if l := uint16(length); l != 0 {
- native.PutUint16(buf[0:2], l)
- }
- native.PutUint16(buf[2:4], a.Type)
- return buf
-}
-
-type NetlinkRequest struct {
- unix.NlMsghdr
- Data []NetlinkRequestData
- RawData []byte
- Sockets map[int]*SocketHandle
-}
-
-// Serialize the Netlink Request into a byte array
-func (req *NetlinkRequest) Serialize() []byte {
- length := unix.SizeofNlMsghdr
- dataBytes := make([][]byte, len(req.Data))
- for i, data := range req.Data {
- dataBytes[i] = data.Serialize()
- length = length + len(dataBytes[i])
- }
- length += len(req.RawData)
-
- req.Len = uint32(length)
- b := make([]byte, length)
- hdr := (*(*[unix.SizeofNlMsghdr]byte)(unsafe.Pointer(req)))[:]
- next := unix.SizeofNlMsghdr
- copy(b[0:next], hdr)
- for _, data := range dataBytes {
- for _, dataByte := range data {
- b[next] = dataByte
- next = next + 1
- }
- }
- // Add the raw data if any
- if len(req.RawData) > 0 {
- copy(b[next:length], req.RawData)
- }
- return b
-}
-
-func (req *NetlinkRequest) AddData(data NetlinkRequestData) {
- if data != nil {
- req.Data = append(req.Data, data)
- }
-}
-
-// AddRawData adds raw bytes to the end of the NetlinkRequest object during serialization
-func (req *NetlinkRequest) AddRawData(data []byte) {
- if data != nil {
- req.RawData = append(req.RawData, data...)
- }
-}
-
-// Execute the request against a the given sockType.
-// Returns a list of netlink messages in serialized format, optionally filtered
-// by resType.
-func (req *NetlinkRequest) Execute(sockType int, resType uint16) ([][]byte, error) {
- var (
- s *NetlinkSocket
- err error
- )
-
- if req.Sockets != nil {
- if sh, ok := req.Sockets[sockType]; ok {
- s = sh.Socket
- req.Seq = atomic.AddUint32(&sh.Seq, 1)
- }
- }
- sharedSocket := s != nil
-
- if s == nil {
- s, err = getNetlinkSocket(sockType)
- if err != nil {
- return nil, err
- }
- defer s.Close()
- } else {
- s.Lock()
- defer s.Unlock()
- }
-
- if err := s.Send(req); err != nil {
- return nil, err
- }
-
- pid, err := s.GetPid()
- if err != nil {
- return nil, err
- }
-
- var res [][]byte
-
-done:
- for {
- msgs, err := s.Receive()
- if err != nil {
- return nil, err
- }
- for _, m := range msgs {
- if m.Header.Seq != req.Seq {
- if sharedSocket {
- continue
- }
- return nil, fmt.Errorf("Wrong Seq nr %d, expected %d", m.Header.Seq, req.Seq)
- }
- if m.Header.Pid != pid {
- return nil, fmt.Errorf("Wrong pid %d, expected %d", m.Header.Pid, pid)
- }
- if m.Header.Type == unix.NLMSG_DONE {
- break done
- }
- if m.Header.Type == unix.NLMSG_ERROR {
- native := NativeEndian()
- error := int32(native.Uint32(m.Data[0:4]))
- if error == 0 {
- break done
- }
- return nil, syscall.Errno(-error)
- }
- if resType != 0 && m.Header.Type != resType {
- continue
- }
- res = append(res, m.Data)
- if m.Header.Flags&unix.NLM_F_MULTI == 0 {
- break done
- }
- }
- }
- return res, nil
-}
-
-// Create a new netlink request from proto and flags
-// Note the Len value will be inaccurate once data is added until
-// the message is serialized
-func NewNetlinkRequest(proto, flags int) *NetlinkRequest {
- return &NetlinkRequest{
- NlMsghdr: unix.NlMsghdr{
- Len: uint32(unix.SizeofNlMsghdr),
- Type: uint16(proto),
- Flags: unix.NLM_F_REQUEST | uint16(flags),
- Seq: atomic.AddUint32(&nextSeqNr, 1),
- },
- }
-}
-
-type NetlinkSocket struct {
- fd int32
- lsa unix.SockaddrNetlink
- sync.Mutex
-}
-
-func getNetlinkSocket(protocol int) (*NetlinkSocket, error) {
- fd, err := unix.Socket(unix.AF_NETLINK, unix.SOCK_RAW|unix.SOCK_CLOEXEC, protocol)
- if err != nil {
- return nil, err
- }
- s := &NetlinkSocket{
- fd: int32(fd),
- }
- s.lsa.Family = unix.AF_NETLINK
- if err := unix.Bind(fd, &s.lsa); err != nil {
- unix.Close(fd)
- return nil, err
- }
-
- return s, nil
-}
-
-// GetNetlinkSocketAt opens a netlink socket in the network namespace newNs
-// and positions the thread back into the network namespace specified by curNs,
-// when done. If curNs is close, the function derives the current namespace and
-// moves back into it when done. If newNs is close, the socket will be opened
-// in the current network namespace.
-func GetNetlinkSocketAt(newNs, curNs netns.NsHandle, protocol int) (*NetlinkSocket, error) {
- c, err := executeInNetns(newNs, curNs)
- if err != nil {
- return nil, err
- }
- defer c()
- return getNetlinkSocket(protocol)
-}
-
-// executeInNetns sets execution of the code following this call to the
-// network namespace newNs, then moves the thread back to curNs if open,
-// otherwise to the current netns at the time the function was invoked
-// In case of success, the caller is expected to execute the returned function
-// at the end of the code that needs to be executed in the network namespace.
-// Example:
-// func jobAt(...) error {
-// d, err := executeInNetns(...)
-// if err != nil { return err}
-// defer d()
-// < code which needs to be executed in specific netns>
-// }
-// TODO: his function probably belongs to netns pkg.
-func executeInNetns(newNs, curNs netns.NsHandle) (func(), error) {
- var (
- err error
- moveBack func(netns.NsHandle) error
- closeNs func() error
- unlockThd func()
- )
- restore := func() {
- // order matters
- if moveBack != nil {
- moveBack(curNs)
- }
- if closeNs != nil {
- closeNs()
- }
- if unlockThd != nil {
- unlockThd()
- }
- }
- if newNs.IsOpen() {
- runtime.LockOSThread()
- unlockThd = runtime.UnlockOSThread
- if !curNs.IsOpen() {
- if curNs, err = netns.Get(); err != nil {
- restore()
- return nil, fmt.Errorf("could not get current namespace while creating netlink socket: %v", err)
- }
- closeNs = curNs.Close
- }
- if err := netns.Set(newNs); err != nil {
- restore()
- return nil, fmt.Errorf("failed to set into network namespace %d while creating netlink socket: %v", newNs, err)
- }
- moveBack = netns.Set
- }
- return restore, nil
-}
-
-// Create a netlink socket with a given protocol (e.g. NETLINK_ROUTE)
-// and subscribe it to multicast groups passed in variable argument list.
-// Returns the netlink socket on which Receive() method can be called
-// to retrieve the messages from the kernel.
-func Subscribe(protocol int, groups ...uint) (*NetlinkSocket, error) {
- fd, err := unix.Socket(unix.AF_NETLINK, unix.SOCK_RAW, protocol)
- if err != nil {
- return nil, err
- }
- s := &NetlinkSocket{
- fd: int32(fd),
- }
- s.lsa.Family = unix.AF_NETLINK
-
- for _, g := range groups {
- s.lsa.Groups |= (1 << (g - 1))
- }
-
- if err := unix.Bind(fd, &s.lsa); err != nil {
- unix.Close(fd)
- return nil, err
- }
-
- return s, nil
-}
-
-// SubscribeAt works like Subscribe plus let's the caller choose the network
-// namespace in which the socket would be opened (newNs). Then control goes back
-// to curNs if open, otherwise to the netns at the time this function was called.
-func SubscribeAt(newNs, curNs netns.NsHandle, protocol int, groups ...uint) (*NetlinkSocket, error) {
- c, err := executeInNetns(newNs, curNs)
- if err != nil {
- return nil, err
- }
- defer c()
- return Subscribe(protocol, groups...)
-}
-
-func (s *NetlinkSocket) Close() {
- fd := int(atomic.SwapInt32(&s.fd, -1))
- unix.Close(fd)
-}
-
-func (s *NetlinkSocket) GetFd() int {
- return int(atomic.LoadInt32(&s.fd))
-}
-
-func (s *NetlinkSocket) Send(request *NetlinkRequest) error {
- fd := int(atomic.LoadInt32(&s.fd))
- if fd < 0 {
- return fmt.Errorf("Send called on a closed socket")
- }
- if err := unix.Sendto(fd, request.Serialize(), 0, &s.lsa); err != nil {
- return err
- }
- return nil
-}
-
-func (s *NetlinkSocket) Receive() ([]syscall.NetlinkMessage, error) {
- fd := int(atomic.LoadInt32(&s.fd))
- if fd < 0 {
- return nil, fmt.Errorf("Receive called on a closed socket")
- }
- rb := make([]byte, unix.Getpagesize())
- nr, _, err := unix.Recvfrom(fd, rb, 0)
- if err != nil {
- return nil, err
- }
- if nr < unix.NLMSG_HDRLEN {
- return nil, fmt.Errorf("Got short response from netlink")
- }
- rb = rb[:nr]
- return syscall.ParseNetlinkMessage(rb)
-}
-
-// SetSendTimeout allows to set a send timeout on the socket
-func (s *NetlinkSocket) SetSendTimeout(timeout *unix.Timeval) error {
- // Set a send timeout of SOCKET_SEND_TIMEOUT, this will allow the Send to periodically unblock and avoid that a routine
- // remains stuck on a send on a closed fd
- return unix.SetsockoptTimeval(int(s.fd), unix.SOL_SOCKET, unix.SO_SNDTIMEO, timeout)
-}
-
-// SetReceiveTimeout allows to set a receive timeout on the socket
-func (s *NetlinkSocket) SetReceiveTimeout(timeout *unix.Timeval) error {
- // Set a read timeout of SOCKET_READ_TIMEOUT, this will allow the Read to periodically unblock and avoid that a routine
- // remains stuck on a recvmsg on a closed fd
- return unix.SetsockoptTimeval(int(s.fd), unix.SOL_SOCKET, unix.SO_RCVTIMEO, timeout)
-}
-
-func (s *NetlinkSocket) GetPid() (uint32, error) {
- fd := int(atomic.LoadInt32(&s.fd))
- lsa, err := unix.Getsockname(fd)
- if err != nil {
- return 0, err
- }
- switch v := lsa.(type) {
- case *unix.SockaddrNetlink:
- return v.Pid, nil
- }
- return 0, fmt.Errorf("Wrong socket type")
-}
-
-func ZeroTerminated(s string) []byte {
- bytes := make([]byte, len(s)+1)
- for i := 0; i < len(s); i++ {
- bytes[i] = s[i]
- }
- bytes[len(s)] = 0
- return bytes
-}
-
-func NonZeroTerminated(s string) []byte {
- bytes := make([]byte, len(s))
- for i := 0; i < len(s); i++ {
- bytes[i] = s[i]
- }
- return bytes
-}
-
-func BytesToString(b []byte) string {
- n := bytes.Index(b, []byte{0})
- return string(b[:n])
-}
-
-func Uint8Attr(v uint8) []byte {
- return []byte{byte(v)}
-}
-
-func Uint16Attr(v uint16) []byte {
- native := NativeEndian()
- bytes := make([]byte, 2)
- native.PutUint16(bytes, v)
- return bytes
-}
-
-func Uint32Attr(v uint32) []byte {
- native := NativeEndian()
- bytes := make([]byte, 4)
- native.PutUint32(bytes, v)
- return bytes
-}
-
-func Uint64Attr(v uint64) []byte {
- native := NativeEndian()
- bytes := make([]byte, 8)
- native.PutUint64(bytes, v)
- return bytes
-}
-
-func ParseRouteAttr(b []byte) ([]syscall.NetlinkRouteAttr, error) {
- var attrs []syscall.NetlinkRouteAttr
- for len(b) >= unix.SizeofRtAttr {
- a, vbuf, alen, err := netlinkRouteAttrAndValue(b)
- if err != nil {
- return nil, err
- }
- ra := syscall.NetlinkRouteAttr{Attr: syscall.RtAttr(*a), Value: vbuf[:int(a.Len)-unix.SizeofRtAttr]}
- attrs = append(attrs, ra)
- b = b[alen:]
- }
- return attrs, nil
-}
-
-func netlinkRouteAttrAndValue(b []byte) (*unix.RtAttr, []byte, int, error) {
- a := (*unix.RtAttr)(unsafe.Pointer(&b[0]))
- if int(a.Len) < unix.SizeofRtAttr || int(a.Len) > len(b) {
- return nil, nil, 0, unix.EINVAL
- }
- return a, b[unix.SizeofRtAttr:], rtaAlignOf(int(a.Len)), nil
-}
-
-// SocketHandle contains the netlink socket and the associated
-// sequence counter for a specific netlink family
-type SocketHandle struct {
- Seq uint32
- Socket *NetlinkSocket
-}
-
-// Close closes the netlink socket
-func (sh *SocketHandle) Close() {
- if sh.Socket != nil {
- sh.Socket.Close()
- }
-}
diff --git a/vendor/github.com/vishvananda/netlink/nl/nl_unspecified.go b/vendor/github.com/vishvananda/netlink/nl/nl_unspecified.go
deleted file mode 100644
index dfc0be6..0000000
--- a/vendor/github.com/vishvananda/netlink/nl/nl_unspecified.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build !linux
-
-package nl
-
-import "encoding/binary"
-
-var SupportedNlFamilies = []int{}
-
-func NativeEndian() binary.ByteOrder {
- return nil
-}
diff --git a/vendor/github.com/vishvananda/netlink/nl/route_linux.go b/vendor/github.com/vishvananda/netlink/nl/route_linux.go
deleted file mode 100644
index f6906fc..0000000
--- a/vendor/github.com/vishvananda/netlink/nl/route_linux.go
+++ /dev/null
@@ -1,81 +0,0 @@
-package nl
-
-import (
- "unsafe"
-
- "golang.org/x/sys/unix"
-)
-
-type RtMsg struct {
- unix.RtMsg
-}
-
-func NewRtMsg() *RtMsg {
- return &RtMsg{
- RtMsg: unix.RtMsg{
- Table: unix.RT_TABLE_MAIN,
- Scope: unix.RT_SCOPE_UNIVERSE,
- Protocol: unix.RTPROT_BOOT,
- Type: unix.RTN_UNICAST,
- },
- }
-}
-
-func NewRtDelMsg() *RtMsg {
- return &RtMsg{
- RtMsg: unix.RtMsg{
- Table: unix.RT_TABLE_MAIN,
- Scope: unix.RT_SCOPE_NOWHERE,
- },
- }
-}
-
-func (msg *RtMsg) Len() int {
- return unix.SizeofRtMsg
-}
-
-func DeserializeRtMsg(b []byte) *RtMsg {
- return (*RtMsg)(unsafe.Pointer(&b[0:unix.SizeofRtMsg][0]))
-}
-
-func (msg *RtMsg) Serialize() []byte {
- return (*(*[unix.SizeofRtMsg]byte)(unsafe.Pointer(msg)))[:]
-}
-
-type RtNexthop struct {
- unix.RtNexthop
- Children []NetlinkRequestData
-}
-
-func DeserializeRtNexthop(b []byte) *RtNexthop {
- return (*RtNexthop)(unsafe.Pointer(&b[0:unix.SizeofRtNexthop][0]))
-}
-
-func (msg *RtNexthop) Len() int {
- if len(msg.Children) == 0 {
- return unix.SizeofRtNexthop
- }
-
- l := 0
- for _, child := range msg.Children {
- l += rtaAlignOf(child.Len())
- }
- l += unix.SizeofRtNexthop
- return rtaAlignOf(l)
-}
-
-func (msg *RtNexthop) Serialize() []byte {
- length := msg.Len()
- msg.RtNexthop.Len = uint16(length)
- buf := make([]byte, length)
- copy(buf, (*(*[unix.SizeofRtNexthop]byte)(unsafe.Pointer(msg)))[:])
- next := rtaAlignOf(unix.SizeofRtNexthop)
- if len(msg.Children) > 0 {
- for _, child := range msg.Children {
- childBuf := child.Serialize()
- copy(buf[next:], childBuf)
- next += rtaAlignOf(len(childBuf))
- }
- }
- return buf
-}
diff --git a/vendor/github.com/vishvananda/netlink/nl/seg6_linux.go b/vendor/github.com/vishvananda/netlink/nl/seg6_linux.go
deleted file mode 100644
index b3425f6..0000000
--- a/vendor/github.com/vishvananda/netlink/nl/seg6_linux.go
+++ /dev/null
@@ -1,111 +0,0 @@
-package nl
-
-import (
- "errors"
- "fmt"
- "net"
-)
-
-type IPv6SrHdr struct {
- nextHdr uint8
- hdrLen uint8
- routingType uint8
- segmentsLeft uint8
- firstSegment uint8
- flags uint8
- reserved uint16
-
- Segments []net.IP
-}
-
-func (s1 *IPv6SrHdr) Equal(s2 IPv6SrHdr) bool {
- if len(s1.Segments) != len(s2.Segments) {
- return false
- }
- for i := range s1.Segments {
- if s1.Segments[i].Equal(s2.Segments[i]) != true {
- return false
- }
- }
- return s1.nextHdr == s2.nextHdr &&
- s1.hdrLen == s2.hdrLen &&
- s1.routingType == s2.routingType &&
- s1.segmentsLeft == s2.segmentsLeft &&
- s1.firstSegment == s2.firstSegment &&
- s1.flags == s2.flags
- // reserved doesn't need to be identical.
-}
-
-// seg6 encap mode
-const (
- SEG6_IPTUN_MODE_INLINE = iota
- SEG6_IPTUN_MODE_ENCAP
-)
-
-// number of nested RTATTR
-// from include/uapi/linux/seg6_iptunnel.h
-const (
- SEG6_IPTUNNEL_UNSPEC = iota
- SEG6_IPTUNNEL_SRH
- __SEG6_IPTUNNEL_MAX
-)
-const (
- SEG6_IPTUNNEL_MAX = __SEG6_IPTUNNEL_MAX - 1
-)
-
-func EncodeSEG6Encap(mode int, segments []net.IP) ([]byte, error) {
- nsegs := len(segments) // nsegs: number of segments
- if nsegs == 0 {
- return nil, errors.New("EncodeSEG6Encap: No Segment in srh")
- }
- b := make([]byte, 12, 12+len(segments)*16)
- native := NativeEndian()
- native.PutUint32(b, uint32(mode))
- b[4] = 0 // srh.nextHdr (0 when calling netlink)
- b[5] = uint8(16 * nsegs >> 3) // srh.hdrLen (in 8-octets unit)
- b[6] = IPV6_SRCRT_TYPE_4 // srh.routingType (assigned by IANA)
- b[7] = uint8(nsegs - 1) // srh.segmentsLeft
- b[8] = uint8(nsegs - 1) // srh.firstSegment
- b[9] = 0 // srh.flags (SR6_FLAG1_HMAC for srh_hmac)
- // srh.reserved: Defined as "Tag" in draft-ietf-6man-segment-routing-header-07
- native.PutUint16(b[10:], 0) // srh.reserved
- for _, netIP := range segments {
- b = append(b, netIP...) // srh.Segments
- }
- return b, nil
-}
-
-func DecodeSEG6Encap(buf []byte) (int, []net.IP, error) {
- native := NativeEndian()
- mode := int(native.Uint32(buf))
- srh := IPv6SrHdr{
- nextHdr: buf[4],
- hdrLen: buf[5],
- routingType: buf[6],
- segmentsLeft: buf[7],
- firstSegment: buf[8],
- flags: buf[9],
- reserved: native.Uint16(buf[10:12]),
- }
- buf = buf[12:]
- if len(buf)%16 != 0 {
- err := fmt.Errorf("DecodeSEG6Encap: error parsing Segment List (buf len: %d)\n", len(buf))
- return mode, nil, err
- }
- for len(buf) > 0 {
- srh.Segments = append(srh.Segments, net.IP(buf[:16]))
- buf = buf[16:]
- }
- return mode, srh.Segments, nil
-}
-
-// Helper functions
-func SEG6EncapModeString(mode int) string {
- switch mode {
- case SEG6_IPTUN_MODE_INLINE:
- return "inline"
- case SEG6_IPTUN_MODE_ENCAP:
- return "encap"
- }
- return "unknown"
-}
diff --git a/vendor/github.com/vishvananda/netlink/nl/syscall.go b/vendor/github.com/vishvananda/netlink/nl/syscall.go
deleted file mode 100644
index fc631e0..0000000
--- a/vendor/github.com/vishvananda/netlink/nl/syscall.go
+++ /dev/null
@@ -1,78 +0,0 @@
-package nl
-
-// syscall package lack of rule atributes type.
-// Thus there are defined below
-const (
- FRA_UNSPEC = iota
- FRA_DST /* destination address */
- FRA_SRC /* source address */
- FRA_IIFNAME /* interface name */
- FRA_GOTO /* target to jump to (FR_ACT_GOTO) */
- FRA_UNUSED2
- FRA_PRIORITY /* priority/preference */
- FRA_UNUSED3
- FRA_UNUSED4
- FRA_UNUSED5
- FRA_FWMARK /* mark */
- FRA_FLOW /* flow/class id */
- FRA_TUN_ID
- FRA_SUPPRESS_IFGROUP
- FRA_SUPPRESS_PREFIXLEN
- FRA_TABLE /* Extended table id */
- FRA_FWMASK /* mask for netfilter mark */
- FRA_OIFNAME
-)
-
-// ip rule netlink request types
-const (
- FR_ACT_UNSPEC = iota
- FR_ACT_TO_TBL /* Pass to fixed table */
- FR_ACT_GOTO /* Jump to another rule */
- FR_ACT_NOP /* No operation */
- FR_ACT_RES3
- FR_ACT_RES4
- FR_ACT_BLACKHOLE /* Drop without notification */
- FR_ACT_UNREACHABLE /* Drop with ENETUNREACH */
- FR_ACT_PROHIBIT /* Drop with EACCES */
-)
-
-// socket diags related
-const (
- SOCK_DIAG_BY_FAMILY = 20 /* linux.sock_diag.h */
- TCPDIAG_NOCOOKIE = 0xFFFFFFFF /* TCPDIAG_NOCOOKIE in net/ipv4/tcp_diag.h*/
-)
-
-const (
- AF_MPLS = 28
-)
-
-const (
- RTA_NEWDST = 0x13
- RTA_ENCAP_TYPE = 0x15
- RTA_ENCAP = 0x16
-)
-
-// RTA_ENCAP subtype
-const (
- MPLS_IPTUNNEL_UNSPEC = iota
- MPLS_IPTUNNEL_DST
-)
-
-// light weight tunnel encap types
-const (
- LWTUNNEL_ENCAP_NONE = iota
- LWTUNNEL_ENCAP_MPLS
- LWTUNNEL_ENCAP_IP
- LWTUNNEL_ENCAP_ILA
- LWTUNNEL_ENCAP_IP6
- LWTUNNEL_ENCAP_SEG6
- LWTUNNEL_ENCAP_BPF
-)
-
-// routing header types
-const (
- IPV6_SRCRT_STRICT = 0x01 // Deprecated; will be removed
- IPV6_SRCRT_TYPE_0 = 0 // Deprecated; will be removed
- IPV6_SRCRT_TYPE_2 = 2 // IPv6 type 2 Routing Header
- IPV6_SRCRT_TYPE_4 = 4 // Segment Routing with IPv6
-)
diff --git a/vendor/github.com/vishvananda/netlink/nl/tc_linux.go b/vendor/github.com/vishvananda/netlink/nl/tc_linux.go
deleted file mode 100644
index 94ebc29..0000000
--- a/vendor/github.com/vishvananda/netlink/nl/tc_linux.go
+++ /dev/null
@@ -1,710 +0,0 @@
-package nl
-
-import (
- "unsafe"
-)
-
-// LinkLayer
-const (
- LINKLAYER_UNSPEC = iota
- LINKLAYER_ETHERNET
- LINKLAYER_ATM
-)
-
-// ATM
-const (
- ATM_CELL_PAYLOAD = 48
- ATM_CELL_SIZE = 53
-)
-
-const TC_LINKLAYER_MASK = 0x0F
-
-// Police
-const (
- TCA_POLICE_UNSPEC = iota
- TCA_POLICE_TBF
- TCA_POLICE_RATE
- TCA_POLICE_PEAKRATE
- TCA_POLICE_AVRATE
- TCA_POLICE_RESULT
- TCA_POLICE_MAX = TCA_POLICE_RESULT
-)
-
-// Message types
-const (
- TCA_UNSPEC = iota
- TCA_KIND
- TCA_OPTIONS
- TCA_STATS
- TCA_XSTATS
- TCA_RATE
- TCA_FCNT
- TCA_STATS2
- TCA_STAB
- TCA_MAX = TCA_STAB
-)
-
-const (
- TCA_ACT_TAB = 1
- TCAA_MAX = 1
-)
-
-const (
- TCA_ACT_UNSPEC = iota
- TCA_ACT_KIND
- TCA_ACT_OPTIONS
- TCA_ACT_INDEX
- TCA_ACT_STATS
- TCA_ACT_MAX
-)
-
-const (
- TCA_PRIO_UNSPEC = iota
- TCA_PRIO_MQ
- TCA_PRIO_MAX = TCA_PRIO_MQ
-)
-
-const (
- SizeofTcMsg = 0x14
- SizeofTcActionMsg = 0x04
- SizeofTcPrioMap = 0x14
- SizeofTcRateSpec = 0x0c
- SizeofTcNetemQopt = 0x18
- SizeofTcNetemCorr = 0x0c
- SizeofTcNetemReorder = 0x08
- SizeofTcNetemCorrupt = 0x08
- SizeofTcTbfQopt = 2*SizeofTcRateSpec + 0x0c
- SizeofTcHtbCopt = 2*SizeofTcRateSpec + 0x14
- SizeofTcHtbGlob = 0x14
- SizeofTcU32Key = 0x10
- SizeofTcU32Sel = 0x10 // without keys
- SizeofTcGen = 0x14
- SizeofTcMirred = SizeofTcGen + 0x08
- SizeofTcPolice = 2*SizeofTcRateSpec + 0x20
-)
-
-// struct tcmsg {
-// unsigned char tcm_family;
-// unsigned char tcm__pad1;
-// unsigned short tcm__pad2;
-// int tcm_ifindex;
-// __u32 tcm_handle;
-// __u32 tcm_parent;
-// __u32 tcm_info;
-// };
-
-type TcMsg struct {
- Family uint8
- Pad [3]byte
- Ifindex int32
- Handle uint32
- Parent uint32
- Info uint32
-}
-
-func (msg *TcMsg) Len() int {
- return SizeofTcMsg
-}
-
-func DeserializeTcMsg(b []byte) *TcMsg {
- return (*TcMsg)(unsafe.Pointer(&b[0:SizeofTcMsg][0]))
-}
-
-func (x *TcMsg) Serialize() []byte {
- return (*(*[SizeofTcMsg]byte)(unsafe.Pointer(x)))[:]
-}
-
-// struct tcamsg {
-// unsigned char tca_family;
-// unsigned char tca__pad1;
-// unsigned short tca__pad2;
-// };
-
-type TcActionMsg struct {
- Family uint8
- Pad [3]byte
-}
-
-func (msg *TcActionMsg) Len() int {
- return SizeofTcActionMsg
-}
-
-func DeserializeTcActionMsg(b []byte) *TcActionMsg {
- return (*TcActionMsg)(unsafe.Pointer(&b[0:SizeofTcActionMsg][0]))
-}
-
-func (x *TcActionMsg) Serialize() []byte {
- return (*(*[SizeofTcActionMsg]byte)(unsafe.Pointer(x)))[:]
-}
-
-const (
- TC_PRIO_MAX = 15
-)
-
-// struct tc_prio_qopt {
-// int bands; /* Number of bands */
-// __u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */
-// };
-
-type TcPrioMap struct {
- Bands int32
- Priomap [TC_PRIO_MAX + 1]uint8
-}
-
-func (msg *TcPrioMap) Len() int {
- return SizeofTcPrioMap
-}
-
-func DeserializeTcPrioMap(b []byte) *TcPrioMap {
- return (*TcPrioMap)(unsafe.Pointer(&b[0:SizeofTcPrioMap][0]))
-}
-
-func (x *TcPrioMap) Serialize() []byte {
- return (*(*[SizeofTcPrioMap]byte)(unsafe.Pointer(x)))[:]
-}
-
-const (
- TCA_TBF_UNSPEC = iota
- TCA_TBF_PARMS
- TCA_TBF_RTAB
- TCA_TBF_PTAB
- TCA_TBF_RATE64
- TCA_TBF_PRATE64
- TCA_TBF_BURST
- TCA_TBF_PBURST
- TCA_TBF_MAX = TCA_TBF_PBURST
-)
-
-// struct tc_ratespec {
-// unsigned char cell_log;
-// __u8 linklayer; /* lower 4 bits */
-// unsigned short overhead;
-// short cell_align;
-// unsigned short mpu;
-// __u32 rate;
-// };
-
-type TcRateSpec struct {
- CellLog uint8
- Linklayer uint8
- Overhead uint16
- CellAlign int16
- Mpu uint16
- Rate uint32
-}
-
-func (msg *TcRateSpec) Len() int {
- return SizeofTcRateSpec
-}
-
-func DeserializeTcRateSpec(b []byte) *TcRateSpec {
- return (*TcRateSpec)(unsafe.Pointer(&b[0:SizeofTcRateSpec][0]))
-}
-
-func (x *TcRateSpec) Serialize() []byte {
- return (*(*[SizeofTcRateSpec]byte)(unsafe.Pointer(x)))[:]
-}
-
-/**
-* NETEM
- */
-
-const (
- TCA_NETEM_UNSPEC = iota
- TCA_NETEM_CORR
- TCA_NETEM_DELAY_DIST
- TCA_NETEM_REORDER
- TCA_NETEM_CORRUPT
- TCA_NETEM_LOSS
- TCA_NETEM_RATE
- TCA_NETEM_ECN
- TCA_NETEM_RATE64
- TCA_NETEM_MAX = TCA_NETEM_RATE64
-)
-
-// struct tc_netem_qopt {
-// __u32 latency; /* added delay (us) */
-// __u32 limit; /* fifo limit (packets) */
-// __u32 loss; /* random packet loss (0=none ~0=100%) */
-// __u32 gap; /* re-ordering gap (0 for none) */
-// __u32 duplicate; /* random packet dup (0=none ~0=100%) */
-// __u32 jitter; /* random jitter in latency (us) */
-// };
-
-type TcNetemQopt struct {
- Latency uint32
- Limit uint32
- Loss uint32
- Gap uint32
- Duplicate uint32
- Jitter uint32
-}
-
-func (msg *TcNetemQopt) Len() int {
- return SizeofTcNetemQopt
-}
-
-func DeserializeTcNetemQopt(b []byte) *TcNetemQopt {
- return (*TcNetemQopt)(unsafe.Pointer(&b[0:SizeofTcNetemQopt][0]))
-}
-
-func (x *TcNetemQopt) Serialize() []byte {
- return (*(*[SizeofTcNetemQopt]byte)(unsafe.Pointer(x)))[:]
-}
-
-// struct tc_netem_corr {
-// __u32 delay_corr; /* delay correlation */
-// __u32 loss_corr; /* packet loss correlation */
-// __u32 dup_corr; /* duplicate correlation */
-// };
-
-type TcNetemCorr struct {
- DelayCorr uint32
- LossCorr uint32
- DupCorr uint32
-}
-
-func (msg *TcNetemCorr) Len() int {
- return SizeofTcNetemCorr
-}
-
-func DeserializeTcNetemCorr(b []byte) *TcNetemCorr {
- return (*TcNetemCorr)(unsafe.Pointer(&b[0:SizeofTcNetemCorr][0]))
-}
-
-func (x *TcNetemCorr) Serialize() []byte {
- return (*(*[SizeofTcNetemCorr]byte)(unsafe.Pointer(x)))[:]
-}
-
-// struct tc_netem_reorder {
-// __u32 probability;
-// __u32 correlation;
-// };
-
-type TcNetemReorder struct {
- Probability uint32
- Correlation uint32
-}
-
-func (msg *TcNetemReorder) Len() int {
- return SizeofTcNetemReorder
-}
-
-func DeserializeTcNetemReorder(b []byte) *TcNetemReorder {
- return (*TcNetemReorder)(unsafe.Pointer(&b[0:SizeofTcNetemReorder][0]))
-}
-
-func (x *TcNetemReorder) Serialize() []byte {
- return (*(*[SizeofTcNetemReorder]byte)(unsafe.Pointer(x)))[:]
-}
-
-// struct tc_netem_corrupt {
-// __u32 probability;
-// __u32 correlation;
-// };
-
-type TcNetemCorrupt struct {
- Probability uint32
- Correlation uint32
-}
-
-func (msg *TcNetemCorrupt) Len() int {
- return SizeofTcNetemCorrupt
-}
-
-func DeserializeTcNetemCorrupt(b []byte) *TcNetemCorrupt {
- return (*TcNetemCorrupt)(unsafe.Pointer(&b[0:SizeofTcNetemCorrupt][0]))
-}
-
-func (x *TcNetemCorrupt) Serialize() []byte {
- return (*(*[SizeofTcNetemCorrupt]byte)(unsafe.Pointer(x)))[:]
-}
-
-// struct tc_tbf_qopt {
-// struct tc_ratespec rate;
-// struct tc_ratespec peakrate;
-// __u32 limit;
-// __u32 buffer;
-// __u32 mtu;
-// };
-
-type TcTbfQopt struct {
- Rate TcRateSpec
- Peakrate TcRateSpec
- Limit uint32
- Buffer uint32
- Mtu uint32
-}
-
-func (msg *TcTbfQopt) Len() int {
- return SizeofTcTbfQopt
-}
-
-func DeserializeTcTbfQopt(b []byte) *TcTbfQopt {
- return (*TcTbfQopt)(unsafe.Pointer(&b[0:SizeofTcTbfQopt][0]))
-}
-
-func (x *TcTbfQopt) Serialize() []byte {
- return (*(*[SizeofTcTbfQopt]byte)(unsafe.Pointer(x)))[:]
-}
-
-const (
- TCA_HTB_UNSPEC = iota
- TCA_HTB_PARMS
- TCA_HTB_INIT
- TCA_HTB_CTAB
- TCA_HTB_RTAB
- TCA_HTB_DIRECT_QLEN
- TCA_HTB_RATE64
- TCA_HTB_CEIL64
- TCA_HTB_MAX = TCA_HTB_CEIL64
-)
-
-//struct tc_htb_opt {
-// struct tc_ratespec rate;
-// struct tc_ratespec ceil;
-// __u32 buffer;
-// __u32 cbuffer;
-// __u32 quantum;
-// __u32 level; /* out only */
-// __u32 prio;
-//};
-
-type TcHtbCopt struct {
- Rate TcRateSpec
- Ceil TcRateSpec
- Buffer uint32
- Cbuffer uint32
- Quantum uint32
- Level uint32
- Prio uint32
-}
-
-func (msg *TcHtbCopt) Len() int {
- return SizeofTcHtbCopt
-}
-
-func DeserializeTcHtbCopt(b []byte) *TcHtbCopt {
- return (*TcHtbCopt)(unsafe.Pointer(&b[0:SizeofTcHtbCopt][0]))
-}
-
-func (x *TcHtbCopt) Serialize() []byte {
- return (*(*[SizeofTcHtbCopt]byte)(unsafe.Pointer(x)))[:]
-}
-
-type TcHtbGlob struct {
- Version uint32
- Rate2Quantum uint32
- Defcls uint32
- Debug uint32
- DirectPkts uint32
-}
-
-func (msg *TcHtbGlob) Len() int {
- return SizeofTcHtbGlob
-}
-
-func DeserializeTcHtbGlob(b []byte) *TcHtbGlob {
- return (*TcHtbGlob)(unsafe.Pointer(&b[0:SizeofTcHtbGlob][0]))
-}
-
-func (x *TcHtbGlob) Serialize() []byte {
- return (*(*[SizeofTcHtbGlob]byte)(unsafe.Pointer(x)))[:]
-}
-
-const (
- TCA_U32_UNSPEC = iota
- TCA_U32_CLASSID
- TCA_U32_HASH
- TCA_U32_LINK
- TCA_U32_DIVISOR
- TCA_U32_SEL
- TCA_U32_POLICE
- TCA_U32_ACT
- TCA_U32_INDEV
- TCA_U32_PCNT
- TCA_U32_MARK
- TCA_U32_MAX = TCA_U32_MARK
-)
-
-// struct tc_u32_key {
-// __be32 mask;
-// __be32 val;
-// int off;
-// int offmask;
-// };
-
-type TcU32Key struct {
- Mask uint32 // big endian
- Val uint32 // big endian
- Off int32
- OffMask int32
-}
-
-func (msg *TcU32Key) Len() int {
- return SizeofTcU32Key
-}
-
-func DeserializeTcU32Key(b []byte) *TcU32Key {
- return (*TcU32Key)(unsafe.Pointer(&b[0:SizeofTcU32Key][0]))
-}
-
-func (x *TcU32Key) Serialize() []byte {
- return (*(*[SizeofTcU32Key]byte)(unsafe.Pointer(x)))[:]
-}
-
-// struct tc_u32_sel {
-// unsigned char flags;
-// unsigned char offshift;
-// unsigned char nkeys;
-//
-// __be16 offmask;
-// __u16 off;
-// short offoff;
-//
-// short hoff;
-// __be32 hmask;
-// struct tc_u32_key keys[0];
-// };
-
-const (
- TC_U32_TERMINAL = 1 << iota
- TC_U32_OFFSET = 1 << iota
- TC_U32_VAROFFSET = 1 << iota
- TC_U32_EAT = 1 << iota
-)
-
-type TcU32Sel struct {
- Flags uint8
- Offshift uint8
- Nkeys uint8
- Pad uint8
- Offmask uint16 // big endian
- Off uint16
- Offoff int16
- Hoff int16
- Hmask uint32 // big endian
- Keys []TcU32Key
-}
-
-func (msg *TcU32Sel) Len() int {
- return SizeofTcU32Sel + int(msg.Nkeys)*SizeofTcU32Key
-}
-
-func DeserializeTcU32Sel(b []byte) *TcU32Sel {
- x := &TcU32Sel{}
- copy((*(*[SizeofTcU32Sel]byte)(unsafe.Pointer(x)))[:], b)
- next := SizeofTcU32Sel
- var i uint8
- for i = 0; i < x.Nkeys; i++ {
- x.Keys = append(x.Keys, *DeserializeTcU32Key(b[next:]))
- next += SizeofTcU32Key
- }
- return x
-}
-
-func (x *TcU32Sel) Serialize() []byte {
- // This can't just unsafe.cast because it must iterate through keys.
- buf := make([]byte, x.Len())
- copy(buf, (*(*[SizeofTcU32Sel]byte)(unsafe.Pointer(x)))[:])
- next := SizeofTcU32Sel
- for _, key := range x.Keys {
- keyBuf := key.Serialize()
- copy(buf[next:], keyBuf)
- next += SizeofTcU32Key
- }
- return buf
-}
-
-type TcGen struct {
- Index uint32
- Capab uint32
- Action int32
- Refcnt int32
- Bindcnt int32
-}
-
-func (msg *TcGen) Len() int {
- return SizeofTcGen
-}
-
-func DeserializeTcGen(b []byte) *TcGen {
- return (*TcGen)(unsafe.Pointer(&b[0:SizeofTcGen][0]))
-}
-
-func (x *TcGen) Serialize() []byte {
- return (*(*[SizeofTcGen]byte)(unsafe.Pointer(x)))[:]
-}
-
-// #define tc_gen \
-// __u32 index; \
-// __u32 capab; \
-// int action; \
-// int refcnt; \
-// int bindcnt
-
-const (
- TCA_ACT_GACT = 5
-)
-
-const (
- TCA_GACT_UNSPEC = iota
- TCA_GACT_TM
- TCA_GACT_PARMS
- TCA_GACT_PROB
- TCA_GACT_MAX = TCA_GACT_PROB
-)
-
-type TcGact TcGen
-
-const (
- TCA_ACT_BPF = 13
-)
-
-const (
- TCA_ACT_BPF_UNSPEC = iota
- TCA_ACT_BPF_TM
- TCA_ACT_BPF_PARMS
- TCA_ACT_BPF_OPS_LEN
- TCA_ACT_BPF_OPS
- TCA_ACT_BPF_FD
- TCA_ACT_BPF_NAME
- TCA_ACT_BPF_MAX = TCA_ACT_BPF_NAME
-)
-
-const (
- TCA_BPF_FLAG_ACT_DIRECT uint32 = 1 << iota
-)
-
-const (
- TCA_BPF_UNSPEC = iota
- TCA_BPF_ACT
- TCA_BPF_POLICE
- TCA_BPF_CLASSID
- TCA_BPF_OPS_LEN
- TCA_BPF_OPS
- TCA_BPF_FD
- TCA_BPF_NAME
- TCA_BPF_FLAGS
- TCA_BPF_MAX = TCA_BPF_FLAGS
-)
-
-type TcBpf TcGen
-
-const (
- TCA_ACT_MIRRED = 8
-)
-
-const (
- TCA_MIRRED_UNSPEC = iota
- TCA_MIRRED_TM
- TCA_MIRRED_PARMS
- TCA_MIRRED_MAX = TCA_MIRRED_PARMS
-)
-
-// struct tc_mirred {
-// tc_gen;
-// int eaction; /* one of IN/EGRESS_MIRROR/REDIR */
-// __u32 ifindex; /* ifindex of egress port */
-// };
-
-type TcMirred struct {
- TcGen
- Eaction int32
- Ifindex uint32
-}
-
-func (msg *TcMirred) Len() int {
- return SizeofTcMirred
-}
-
-func DeserializeTcMirred(b []byte) *TcMirred {
- return (*TcMirred)(unsafe.Pointer(&b[0:SizeofTcMirred][0]))
-}
-
-func (x *TcMirred) Serialize() []byte {
- return (*(*[SizeofTcMirred]byte)(unsafe.Pointer(x)))[:]
-}
-
-// struct tc_police {
-// __u32 index;
-// int action;
-// __u32 limit;
-// __u32 burst;
-// __u32 mtu;
-// struct tc_ratespec rate;
-// struct tc_ratespec peakrate;
-// int refcnt;
-// int bindcnt;
-// __u32 capab;
-// };
-
-type TcPolice struct {
- Index uint32
- Action int32
- Limit uint32
- Burst uint32
- Mtu uint32
- Rate TcRateSpec
- PeakRate TcRateSpec
- Refcnt int32
- Bindcnt int32
- Capab uint32
-}
-
-func (msg *TcPolice) Len() int {
- return SizeofTcPolice
-}
-
-func DeserializeTcPolice(b []byte) *TcPolice {
- return (*TcPolice)(unsafe.Pointer(&b[0:SizeofTcPolice][0]))
-}
-
-func (x *TcPolice) Serialize() []byte {
- return (*(*[SizeofTcPolice]byte)(unsafe.Pointer(x)))[:]
-}
-
-const (
- TCA_FW_UNSPEC = iota
- TCA_FW_CLASSID
- TCA_FW_POLICE
- TCA_FW_INDEV
- TCA_FW_ACT
- TCA_FW_MASK
- TCA_FW_MAX = TCA_FW_MASK
-)
-
-const (
- TCA_MATCHALL_UNSPEC = iota
- TCA_MATCHALL_CLASSID
- TCA_MATCHALL_ACT
- TCA_MATCHALL_FLAGS
-)
-
-const (
- TCA_FQ_UNSPEC = iota
- TCA_FQ_PLIMIT // limit of total number of packets in queue
- TCA_FQ_FLOW_PLIMIT // limit of packets per flow
- TCA_FQ_QUANTUM // RR quantum
- TCA_FQ_INITIAL_QUANTUM // RR quantum for new flow
- TCA_FQ_RATE_ENABLE // enable/disable rate limiting
- TCA_FQ_FLOW_DEFAULT_RATE // obsolete do not use
- TCA_FQ_FLOW_MAX_RATE // per flow max rate
- TCA_FQ_BUCKETS_LOG // log2(number of buckets)
- TCA_FQ_FLOW_REFILL_DELAY // flow credit refill delay in usec
- TCA_FQ_ORPHAN_MASK // mask applied to orphaned skb hashes
- TCA_FQ_LOW_RATE_THRESHOLD // per packet delay under this rate
-)
-
-const (
- TCA_FQ_CODEL_UNSPEC = iota
- TCA_FQ_CODEL_TARGET
- TCA_FQ_CODEL_LIMIT
- TCA_FQ_CODEL_INTERVAL
- TCA_FQ_CODEL_ECN
- TCA_FQ_CODEL_FLOWS
- TCA_FQ_CODEL_QUANTUM
- TCA_FQ_CODEL_CE_THRESHOLD
- TCA_FQ_CODEL_DROP_BATCH_SIZE
- TCA_FQ_CODEL_MEMORY_LIMIT
-)
diff --git a/vendor/github.com/vishvananda/netlink/nl/xfrm_linux.go b/vendor/github.com/vishvananda/netlink/nl/xfrm_linux.go
deleted file mode 100644
index 09a2ffa..0000000
--- a/vendor/github.com/vishvananda/netlink/nl/xfrm_linux.go
+++ /dev/null
@@ -1,296 +0,0 @@
-package nl
-
-import (
- "bytes"
- "net"
- "unsafe"
-)
-
-// Infinity for packet and byte counts
-const (
- XFRM_INF = ^uint64(0)
-)
-
-type XfrmMsgType uint8
-
-type XfrmMsg interface {
- Type() XfrmMsgType
-}
-
-// Message Types
-const (
- XFRM_MSG_BASE XfrmMsgType = 0x10
- XFRM_MSG_NEWSA = 0x10
- XFRM_MSG_DELSA = 0x11
- XFRM_MSG_GETSA = 0x12
- XFRM_MSG_NEWPOLICY = 0x13
- XFRM_MSG_DELPOLICY = 0x14
- XFRM_MSG_GETPOLICY = 0x15
- XFRM_MSG_ALLOCSPI = 0x16
- XFRM_MSG_ACQUIRE = 0x17
- XFRM_MSG_EXPIRE = 0x18
- XFRM_MSG_UPDPOLICY = 0x19
- XFRM_MSG_UPDSA = 0x1a
- XFRM_MSG_POLEXPIRE = 0x1b
- XFRM_MSG_FLUSHSA = 0x1c
- XFRM_MSG_FLUSHPOLICY = 0x1d
- XFRM_MSG_NEWAE = 0x1e
- XFRM_MSG_GETAE = 0x1f
- XFRM_MSG_REPORT = 0x20
- XFRM_MSG_MIGRATE = 0x21
- XFRM_MSG_NEWSADINFO = 0x22
- XFRM_MSG_GETSADINFO = 0x23
- XFRM_MSG_NEWSPDINFO = 0x24
- XFRM_MSG_GETSPDINFO = 0x25
- XFRM_MSG_MAPPING = 0x26
- XFRM_MSG_MAX = 0x26
- XFRM_NR_MSGTYPES = 0x17
-)
-
-// Attribute types
-const (
- /* Netlink message attributes. */
- XFRMA_UNSPEC = 0x00
- XFRMA_ALG_AUTH = 0x01 /* struct xfrm_algo */
- XFRMA_ALG_CRYPT = 0x02 /* struct xfrm_algo */
- XFRMA_ALG_COMP = 0x03 /* struct xfrm_algo */
- XFRMA_ENCAP = 0x04 /* struct xfrm_algo + struct xfrm_encap_tmpl */
- XFRMA_TMPL = 0x05 /* 1 or more struct xfrm_user_tmpl */
- XFRMA_SA = 0x06 /* struct xfrm_usersa_info */
- XFRMA_POLICY = 0x07 /* struct xfrm_userpolicy_info */
- XFRMA_SEC_CTX = 0x08 /* struct xfrm_sec_ctx */
- XFRMA_LTIME_VAL = 0x09
- XFRMA_REPLAY_VAL = 0x0a
- XFRMA_REPLAY_THRESH = 0x0b
- XFRMA_ETIMER_THRESH = 0x0c
- XFRMA_SRCADDR = 0x0d /* xfrm_address_t */
- XFRMA_COADDR = 0x0e /* xfrm_address_t */
- XFRMA_LASTUSED = 0x0f /* unsigned long */
- XFRMA_POLICY_TYPE = 0x10 /* struct xfrm_userpolicy_type */
- XFRMA_MIGRATE = 0x11
- XFRMA_ALG_AEAD = 0x12 /* struct xfrm_algo_aead */
- XFRMA_KMADDRESS = 0x13 /* struct xfrm_user_kmaddress */
- XFRMA_ALG_AUTH_TRUNC = 0x14 /* struct xfrm_algo_auth */
- XFRMA_MARK = 0x15 /* struct xfrm_mark */
- XFRMA_TFCPAD = 0x16 /* __u32 */
- XFRMA_REPLAY_ESN_VAL = 0x17 /* struct xfrm_replay_esn */
- XFRMA_SA_EXTRA_FLAGS = 0x18 /* __u32 */
- XFRMA_MAX = 0x18
-)
-
-const (
- SizeofXfrmAddress = 0x10
- SizeofXfrmSelector = 0x38
- SizeofXfrmLifetimeCfg = 0x40
- SizeofXfrmLifetimeCur = 0x20
- SizeofXfrmId = 0x18
- SizeofXfrmMark = 0x08
-)
-
-// Netlink groups
-const (
- XFRMNLGRP_NONE = 0x0
- XFRMNLGRP_ACQUIRE = 0x1
- XFRMNLGRP_EXPIRE = 0x2
- XFRMNLGRP_SA = 0x3
- XFRMNLGRP_POLICY = 0x4
- XFRMNLGRP_AEVENTS = 0x5
- XFRMNLGRP_REPORT = 0x6
- XFRMNLGRP_MIGRATE = 0x7
- XFRMNLGRP_MAPPING = 0x8
- __XFRMNLGRP_MAX = 0x9
-)
-
-// typedef union {
-// __be32 a4;
-// __be32 a6[4];
-// } xfrm_address_t;
-
-type XfrmAddress [SizeofXfrmAddress]byte
-
-func (x *XfrmAddress) ToIP() net.IP {
- var empty = [12]byte{}
- ip := make(net.IP, net.IPv6len)
- if bytes.Equal(x[4:16], empty[:]) {
- ip[10] = 0xff
- ip[11] = 0xff
- copy(ip[12:16], x[0:4])
- } else {
- copy(ip[:], x[:])
- }
- return ip
-}
-
-func (x *XfrmAddress) ToIPNet(prefixlen uint8) *net.IPNet {
- ip := x.ToIP()
- if GetIPFamily(ip) == FAMILY_V4 {
- return &net.IPNet{IP: ip, Mask: net.CIDRMask(int(prefixlen), 32)}
- }
- return &net.IPNet{IP: ip, Mask: net.CIDRMask(int(prefixlen), 128)}
-}
-
-func (x *XfrmAddress) FromIP(ip net.IP) {
- var empty = [16]byte{}
- if len(ip) < net.IPv4len {
- copy(x[4:16], empty[:])
- } else if GetIPFamily(ip) == FAMILY_V4 {
- copy(x[0:4], ip.To4()[0:4])
- copy(x[4:16], empty[:12])
- } else {
- copy(x[0:16], ip.To16()[0:16])
- }
-}
-
-func DeserializeXfrmAddress(b []byte) *XfrmAddress {
- return (*XfrmAddress)(unsafe.Pointer(&b[0:SizeofXfrmAddress][0]))
-}
-
-func (x *XfrmAddress) Serialize() []byte {
- return (*(*[SizeofXfrmAddress]byte)(unsafe.Pointer(x)))[:]
-}
-
-// struct xfrm_selector {
-// xfrm_address_t daddr;
-// xfrm_address_t saddr;
-// __be16 dport;
-// __be16 dport_mask;
-// __be16 sport;
-// __be16 sport_mask;
-// __u16 family;
-// __u8 prefixlen_d;
-// __u8 prefixlen_s;
-// __u8 proto;
-// int ifindex;
-// __kernel_uid32_t user;
-// };
-
-type XfrmSelector struct {
- Daddr XfrmAddress
- Saddr XfrmAddress
- Dport uint16 // big endian
- DportMask uint16 // big endian
- Sport uint16 // big endian
- SportMask uint16 // big endian
- Family uint16
- PrefixlenD uint8
- PrefixlenS uint8
- Proto uint8
- Pad [3]byte
- Ifindex int32
- User uint32
-}
-
-func (msg *XfrmSelector) Len() int {
- return SizeofXfrmSelector
-}
-
-func DeserializeXfrmSelector(b []byte) *XfrmSelector {
- return (*XfrmSelector)(unsafe.Pointer(&b[0:SizeofXfrmSelector][0]))
-}
-
-func (msg *XfrmSelector) Serialize() []byte {
- return (*(*[SizeofXfrmSelector]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct xfrm_lifetime_cfg {
-// __u64 soft_byte_limit;
-// __u64 hard_byte_limit;
-// __u64 soft_packet_limit;
-// __u64 hard_packet_limit;
-// __u64 soft_add_expires_seconds;
-// __u64 hard_add_expires_seconds;
-// __u64 soft_use_expires_seconds;
-// __u64 hard_use_expires_seconds;
-// };
-//
-
-type XfrmLifetimeCfg struct {
- SoftByteLimit uint64
- HardByteLimit uint64
- SoftPacketLimit uint64
- HardPacketLimit uint64
- SoftAddExpiresSeconds uint64
- HardAddExpiresSeconds uint64
- SoftUseExpiresSeconds uint64
- HardUseExpiresSeconds uint64
-}
-
-func (msg *XfrmLifetimeCfg) Len() int {
- return SizeofXfrmLifetimeCfg
-}
-
-func DeserializeXfrmLifetimeCfg(b []byte) *XfrmLifetimeCfg {
- return (*XfrmLifetimeCfg)(unsafe.Pointer(&b[0:SizeofXfrmLifetimeCfg][0]))
-}
-
-func (msg *XfrmLifetimeCfg) Serialize() []byte {
- return (*(*[SizeofXfrmLifetimeCfg]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct xfrm_lifetime_cur {
-// __u64 bytes;
-// __u64 packets;
-// __u64 add_time;
-// __u64 use_time;
-// };
-
-type XfrmLifetimeCur struct {
- Bytes uint64
- Packets uint64
- AddTime uint64
- UseTime uint64
-}
-
-func (msg *XfrmLifetimeCur) Len() int {
- return SizeofXfrmLifetimeCur
-}
-
-func DeserializeXfrmLifetimeCur(b []byte) *XfrmLifetimeCur {
- return (*XfrmLifetimeCur)(unsafe.Pointer(&b[0:SizeofXfrmLifetimeCur][0]))
-}
-
-func (msg *XfrmLifetimeCur) Serialize() []byte {
- return (*(*[SizeofXfrmLifetimeCur]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct xfrm_id {
-// xfrm_address_t daddr;
-// __be32 spi;
-// __u8 proto;
-// };
-
-type XfrmId struct {
- Daddr XfrmAddress
- Spi uint32 // big endian
- Proto uint8
- Pad [3]byte
-}
-
-func (msg *XfrmId) Len() int {
- return SizeofXfrmId
-}
-
-func DeserializeXfrmId(b []byte) *XfrmId {
- return (*XfrmId)(unsafe.Pointer(&b[0:SizeofXfrmId][0]))
-}
-
-func (msg *XfrmId) Serialize() []byte {
- return (*(*[SizeofXfrmId]byte)(unsafe.Pointer(msg)))[:]
-}
-
-type XfrmMark struct {
- Value uint32
- Mask uint32
-}
-
-func (msg *XfrmMark) Len() int {
- return SizeofXfrmMark
-}
-
-func DeserializeXfrmMark(b []byte) *XfrmMark {
- return (*XfrmMark)(unsafe.Pointer(&b[0:SizeofXfrmMark][0]))
-}
-
-func (msg *XfrmMark) Serialize() []byte {
- return (*(*[SizeofXfrmMark]byte)(unsafe.Pointer(msg)))[:]
-}
diff --git a/vendor/github.com/vishvananda/netlink/nl/xfrm_monitor_linux.go b/vendor/github.com/vishvananda/netlink/nl/xfrm_monitor_linux.go
deleted file mode 100644
index 715df4c..0000000
--- a/vendor/github.com/vishvananda/netlink/nl/xfrm_monitor_linux.go
+++ /dev/null
@@ -1,32 +0,0 @@
-package nl
-
-import (
- "unsafe"
-)
-
-const (
- SizeofXfrmUserExpire = 0xe8
-)
-
-// struct xfrm_user_expire {
-// struct xfrm_usersa_info state;
-// __u8 hard;
-// };
-
-type XfrmUserExpire struct {
- XfrmUsersaInfo XfrmUsersaInfo
- Hard uint8
- Pad [7]byte
-}
-
-func (msg *XfrmUserExpire) Len() int {
- return SizeofXfrmUserExpire
-}
-
-func DeserializeXfrmUserExpire(b []byte) *XfrmUserExpire {
- return (*XfrmUserExpire)(unsafe.Pointer(&b[0:SizeofXfrmUserExpire][0]))
-}
-
-func (msg *XfrmUserExpire) Serialize() []byte {
- return (*(*[SizeofXfrmUserExpire]byte)(unsafe.Pointer(msg)))[:]
-}
diff --git a/vendor/github.com/vishvananda/netlink/nl/xfrm_policy_linux.go b/vendor/github.com/vishvananda/netlink/nl/xfrm_policy_linux.go
deleted file mode 100644
index 66f7e03..0000000
--- a/vendor/github.com/vishvananda/netlink/nl/xfrm_policy_linux.go
+++ /dev/null
@@ -1,119 +0,0 @@
-package nl
-
-import (
- "unsafe"
-)
-
-const (
- SizeofXfrmUserpolicyId = 0x40
- SizeofXfrmUserpolicyInfo = 0xa8
- SizeofXfrmUserTmpl = 0x40
-)
-
-// struct xfrm_userpolicy_id {
-// struct xfrm_selector sel;
-// __u32 index;
-// __u8 dir;
-// };
-//
-
-type XfrmUserpolicyId struct {
- Sel XfrmSelector
- Index uint32
- Dir uint8
- Pad [3]byte
-}
-
-func (msg *XfrmUserpolicyId) Len() int {
- return SizeofXfrmUserpolicyId
-}
-
-func DeserializeXfrmUserpolicyId(b []byte) *XfrmUserpolicyId {
- return (*XfrmUserpolicyId)(unsafe.Pointer(&b[0:SizeofXfrmUserpolicyId][0]))
-}
-
-func (msg *XfrmUserpolicyId) Serialize() []byte {
- return (*(*[SizeofXfrmUserpolicyId]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct xfrm_userpolicy_info {
-// struct xfrm_selector sel;
-// struct xfrm_lifetime_cfg lft;
-// struct xfrm_lifetime_cur curlft;
-// __u32 priority;
-// __u32 index;
-// __u8 dir;
-// __u8 action;
-// #define XFRM_POLICY_ALLOW 0
-// #define XFRM_POLICY_BLOCK 1
-// __u8 flags;
-// #define XFRM_POLICY_LOCALOK 1 /* Allow user to override global policy */
-// /* Automatically expand selector to include matching ICMP payloads. */
-// #define XFRM_POLICY_ICMP 2
-// __u8 share;
-// };
-
-type XfrmUserpolicyInfo struct {
- Sel XfrmSelector
- Lft XfrmLifetimeCfg
- Curlft XfrmLifetimeCur
- Priority uint32
- Index uint32
- Dir uint8
- Action uint8
- Flags uint8
- Share uint8
- Pad [4]byte
-}
-
-func (msg *XfrmUserpolicyInfo) Len() int {
- return SizeofXfrmUserpolicyInfo
-}
-
-func DeserializeXfrmUserpolicyInfo(b []byte) *XfrmUserpolicyInfo {
- return (*XfrmUserpolicyInfo)(unsafe.Pointer(&b[0:SizeofXfrmUserpolicyInfo][0]))
-}
-
-func (msg *XfrmUserpolicyInfo) Serialize() []byte {
- return (*(*[SizeofXfrmUserpolicyInfo]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct xfrm_user_tmpl {
-// struct xfrm_id id;
-// __u16 family;
-// xfrm_address_t saddr;
-// __u32 reqid;
-// __u8 mode;
-// __u8 share;
-// __u8 optional;
-// __u32 aalgos;
-// __u32 ealgos;
-// __u32 calgos;
-// }
-
-type XfrmUserTmpl struct {
- XfrmId XfrmId
- Family uint16
- Pad1 [2]byte
- Saddr XfrmAddress
- Reqid uint32
- Mode uint8
- Share uint8
- Optional uint8
- Pad2 byte
- Aalgos uint32
- Ealgos uint32
- Calgos uint32
-}
-
-func (msg *XfrmUserTmpl) Len() int {
- return SizeofXfrmUserTmpl
-}
-
-func DeserializeXfrmUserTmpl(b []byte) *XfrmUserTmpl {
- return (*XfrmUserTmpl)(unsafe.Pointer(&b[0:SizeofXfrmUserTmpl][0]))
-}
-
-func (msg *XfrmUserTmpl) Serialize() []byte {
- return (*(*[SizeofXfrmUserTmpl]byte)(unsafe.Pointer(msg)))[:]
-}
diff --git a/vendor/github.com/vishvananda/netlink/nl/xfrm_state_linux.go b/vendor/github.com/vishvananda/netlink/nl/xfrm_state_linux.go
deleted file mode 100644
index b6290fd..0000000
--- a/vendor/github.com/vishvananda/netlink/nl/xfrm_state_linux.go
+++ /dev/null
@@ -1,334 +0,0 @@
-package nl
-
-import (
- "unsafe"
-)
-
-const (
- SizeofXfrmUsersaId = 0x18
- SizeofXfrmStats = 0x0c
- SizeofXfrmUsersaInfo = 0xe0
- SizeofXfrmUserSpiInfo = 0xe8
- SizeofXfrmAlgo = 0x44
- SizeofXfrmAlgoAuth = 0x48
- SizeofXfrmAlgoAEAD = 0x48
- SizeofXfrmEncapTmpl = 0x18
- SizeofXfrmUsersaFlush = 0x8
- SizeofXfrmReplayStateEsn = 0x18
-)
-
-const (
- XFRM_STATE_NOECN = 1
- XFRM_STATE_DECAP_DSCP = 2
- XFRM_STATE_NOPMTUDISC = 4
- XFRM_STATE_WILDRECV = 8
- XFRM_STATE_ICMP = 16
- XFRM_STATE_AF_UNSPEC = 32
- XFRM_STATE_ALIGN4 = 64
- XFRM_STATE_ESN = 128
-)
-
-// struct xfrm_usersa_id {
-// xfrm_address_t daddr;
-// __be32 spi;
-// __u16 family;
-// __u8 proto;
-// };
-
-type XfrmUsersaId struct {
- Daddr XfrmAddress
- Spi uint32 // big endian
- Family uint16
- Proto uint8
- Pad byte
-}
-
-func (msg *XfrmUsersaId) Len() int {
- return SizeofXfrmUsersaId
-}
-
-func DeserializeXfrmUsersaId(b []byte) *XfrmUsersaId {
- return (*XfrmUsersaId)(unsafe.Pointer(&b[0:SizeofXfrmUsersaId][0]))
-}
-
-func (msg *XfrmUsersaId) Serialize() []byte {
- return (*(*[SizeofXfrmUsersaId]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct xfrm_stats {
-// __u32 replay_window;
-// __u32 replay;
-// __u32 integrity_failed;
-// };
-
-type XfrmStats struct {
- ReplayWindow uint32
- Replay uint32
- IntegrityFailed uint32
-}
-
-func (msg *XfrmStats) Len() int {
- return SizeofXfrmStats
-}
-
-func DeserializeXfrmStats(b []byte) *XfrmStats {
- return (*XfrmStats)(unsafe.Pointer(&b[0:SizeofXfrmStats][0]))
-}
-
-func (msg *XfrmStats) Serialize() []byte {
- return (*(*[SizeofXfrmStats]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct xfrm_usersa_info {
-// struct xfrm_selector sel;
-// struct xfrm_id id;
-// xfrm_address_t saddr;
-// struct xfrm_lifetime_cfg lft;
-// struct xfrm_lifetime_cur curlft;
-// struct xfrm_stats stats;
-// __u32 seq;
-// __u32 reqid;
-// __u16 family;
-// __u8 mode; /* XFRM_MODE_xxx */
-// __u8 replay_window;
-// __u8 flags;
-// #define XFRM_STATE_NOECN 1
-// #define XFRM_STATE_DECAP_DSCP 2
-// #define XFRM_STATE_NOPMTUDISC 4
-// #define XFRM_STATE_WILDRECV 8
-// #define XFRM_STATE_ICMP 16
-// #define XFRM_STATE_AF_UNSPEC 32
-// #define XFRM_STATE_ALIGN4 64
-// #define XFRM_STATE_ESN 128
-// };
-//
-// #define XFRM_SA_XFLAG_DONT_ENCAP_DSCP 1
-//
-
-type XfrmUsersaInfo struct {
- Sel XfrmSelector
- Id XfrmId
- Saddr XfrmAddress
- Lft XfrmLifetimeCfg
- Curlft XfrmLifetimeCur
- Stats XfrmStats
- Seq uint32
- Reqid uint32
- Family uint16
- Mode uint8
- ReplayWindow uint8
- Flags uint8
- Pad [7]byte
-}
-
-func (msg *XfrmUsersaInfo) Len() int {
- return SizeofXfrmUsersaInfo
-}
-
-func DeserializeXfrmUsersaInfo(b []byte) *XfrmUsersaInfo {
- return (*XfrmUsersaInfo)(unsafe.Pointer(&b[0:SizeofXfrmUsersaInfo][0]))
-}
-
-func (msg *XfrmUsersaInfo) Serialize() []byte {
- return (*(*[SizeofXfrmUsersaInfo]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct xfrm_userspi_info {
-// struct xfrm_usersa_info info;
-// __u32 min;
-// __u32 max;
-// };
-
-type XfrmUserSpiInfo struct {
- XfrmUsersaInfo XfrmUsersaInfo
- Min uint32
- Max uint32
-}
-
-func (msg *XfrmUserSpiInfo) Len() int {
- return SizeofXfrmUserSpiInfo
-}
-
-func DeserializeXfrmUserSpiInfo(b []byte) *XfrmUserSpiInfo {
- return (*XfrmUserSpiInfo)(unsafe.Pointer(&b[0:SizeofXfrmUserSpiInfo][0]))
-}
-
-func (msg *XfrmUserSpiInfo) Serialize() []byte {
- return (*(*[SizeofXfrmUserSpiInfo]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct xfrm_algo {
-// char alg_name[64];
-// unsigned int alg_key_len; /* in bits */
-// char alg_key[0];
-// };
-
-type XfrmAlgo struct {
- AlgName [64]byte
- AlgKeyLen uint32
- AlgKey []byte
-}
-
-func (msg *XfrmAlgo) Len() int {
- return SizeofXfrmAlgo + int(msg.AlgKeyLen/8)
-}
-
-func DeserializeXfrmAlgo(b []byte) *XfrmAlgo {
- ret := XfrmAlgo{}
- copy(ret.AlgName[:], b[0:64])
- ret.AlgKeyLen = *(*uint32)(unsafe.Pointer(&b[64]))
- ret.AlgKey = b[68:ret.Len()]
- return &ret
-}
-
-func (msg *XfrmAlgo) Serialize() []byte {
- b := make([]byte, msg.Len())
- copy(b[0:64], msg.AlgName[:])
- copy(b[64:68], (*(*[4]byte)(unsafe.Pointer(&msg.AlgKeyLen)))[:])
- copy(b[68:msg.Len()], msg.AlgKey[:])
- return b
-}
-
-// struct xfrm_algo_auth {
-// char alg_name[64];
-// unsigned int alg_key_len; /* in bits */
-// unsigned int alg_trunc_len; /* in bits */
-// char alg_key[0];
-// };
-
-type XfrmAlgoAuth struct {
- AlgName [64]byte
- AlgKeyLen uint32
- AlgTruncLen uint32
- AlgKey []byte
-}
-
-func (msg *XfrmAlgoAuth) Len() int {
- return SizeofXfrmAlgoAuth + int(msg.AlgKeyLen/8)
-}
-
-func DeserializeXfrmAlgoAuth(b []byte) *XfrmAlgoAuth {
- ret := XfrmAlgoAuth{}
- copy(ret.AlgName[:], b[0:64])
- ret.AlgKeyLen = *(*uint32)(unsafe.Pointer(&b[64]))
- ret.AlgTruncLen = *(*uint32)(unsafe.Pointer(&b[68]))
- ret.AlgKey = b[72:ret.Len()]
- return &ret
-}
-
-func (msg *XfrmAlgoAuth) Serialize() []byte {
- b := make([]byte, msg.Len())
- copy(b[0:64], msg.AlgName[:])
- copy(b[64:68], (*(*[4]byte)(unsafe.Pointer(&msg.AlgKeyLen)))[:])
- copy(b[68:72], (*(*[4]byte)(unsafe.Pointer(&msg.AlgTruncLen)))[:])
- copy(b[72:msg.Len()], msg.AlgKey[:])
- return b
-}
-
-// struct xfrm_algo_aead {
-// char alg_name[64];
-// unsigned int alg_key_len; /* in bits */
-// unsigned int alg_icv_len; /* in bits */
-// char alg_key[0];
-// }
-
-type XfrmAlgoAEAD struct {
- AlgName [64]byte
- AlgKeyLen uint32
- AlgICVLen uint32
- AlgKey []byte
-}
-
-func (msg *XfrmAlgoAEAD) Len() int {
- return SizeofXfrmAlgoAEAD + int(msg.AlgKeyLen/8)
-}
-
-func DeserializeXfrmAlgoAEAD(b []byte) *XfrmAlgoAEAD {
- ret := XfrmAlgoAEAD{}
- copy(ret.AlgName[:], b[0:64])
- ret.AlgKeyLen = *(*uint32)(unsafe.Pointer(&b[64]))
- ret.AlgICVLen = *(*uint32)(unsafe.Pointer(&b[68]))
- ret.AlgKey = b[72:ret.Len()]
- return &ret
-}
-
-func (msg *XfrmAlgoAEAD) Serialize() []byte {
- b := make([]byte, msg.Len())
- copy(b[0:64], msg.AlgName[:])
- copy(b[64:68], (*(*[4]byte)(unsafe.Pointer(&msg.AlgKeyLen)))[:])
- copy(b[68:72], (*(*[4]byte)(unsafe.Pointer(&msg.AlgICVLen)))[:])
- copy(b[72:msg.Len()], msg.AlgKey[:])
- return b
-}
-
-// struct xfrm_encap_tmpl {
-// __u16 encap_type;
-// __be16 encap_sport;
-// __be16 encap_dport;
-// xfrm_address_t encap_oa;
-// };
-
-type XfrmEncapTmpl struct {
- EncapType uint16
- EncapSport uint16 // big endian
- EncapDport uint16 // big endian
- Pad [2]byte
- EncapOa XfrmAddress
-}
-
-func (msg *XfrmEncapTmpl) Len() int {
- return SizeofXfrmEncapTmpl
-}
-
-func DeserializeXfrmEncapTmpl(b []byte) *XfrmEncapTmpl {
- return (*XfrmEncapTmpl)(unsafe.Pointer(&b[0:SizeofXfrmEncapTmpl][0]))
-}
-
-func (msg *XfrmEncapTmpl) Serialize() []byte {
- return (*(*[SizeofXfrmEncapTmpl]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct xfrm_usersa_flush {
-// __u8 proto;
-// };
-
-type XfrmUsersaFlush struct {
- Proto uint8
-}
-
-func (msg *XfrmUsersaFlush) Len() int {
- return SizeofXfrmUsersaFlush
-}
-
-func DeserializeXfrmUsersaFlush(b []byte) *XfrmUsersaFlush {
- return (*XfrmUsersaFlush)(unsafe.Pointer(&b[0:SizeofXfrmUsersaFlush][0]))
-}
-
-func (msg *XfrmUsersaFlush) Serialize() []byte {
- return (*(*[SizeofXfrmUsersaFlush]byte)(unsafe.Pointer(msg)))[:]
-}
-
-// struct xfrm_replay_state_esn {
-// unsigned int bmp_len;
-// __u32 oseq;
-// __u32 seq;
-// __u32 oseq_hi;
-// __u32 seq_hi;
-// __u32 replay_window;
-// __u32 bmp[0];
-// };
-
-type XfrmReplayStateEsn struct {
- BmpLen uint32
- OSeq uint32
- Seq uint32
- OSeqHi uint32
- SeqHi uint32
- ReplayWindow uint32
- Bmp []uint32
-}
-
-func (msg *XfrmReplayStateEsn) Serialize() []byte {
- // We deliberately do not pass Bmp, as it gets set by the kernel.
- return (*(*[SizeofXfrmReplayStateEsn]byte)(unsafe.Pointer(msg)))[:]
-}
diff --git a/vendor/github.com/vishvananda/netlink/order.go b/vendor/github.com/vishvananda/netlink/order.go
deleted file mode 100644
index e28e153..0000000
--- a/vendor/github.com/vishvananda/netlink/order.go
+++ /dev/null
@@ -1,32 +0,0 @@
-package netlink
-
-import (
- "encoding/binary"
-
- "github.com/vishvananda/netlink/nl"
-)
-
-var (
- native = nl.NativeEndian()
- networkOrder = binary.BigEndian
-)
-
-func htonl(val uint32) []byte {
- bytes := make([]byte, 4)
- binary.BigEndian.PutUint32(bytes, val)
- return bytes
-}
-
-func htons(val uint16) []byte {
- bytes := make([]byte, 2)
- binary.BigEndian.PutUint16(bytes, val)
- return bytes
-}
-
-func ntohl(buf []byte) uint32 {
- return binary.BigEndian.Uint32(buf)
-}
-
-func ntohs(buf []byte) uint16 {
- return binary.BigEndian.Uint16(buf)
-}
diff --git a/vendor/github.com/vishvananda/netlink/protinfo.go b/vendor/github.com/vishvananda/netlink/protinfo.go
deleted file mode 100644
index 0087c44..0000000
--- a/vendor/github.com/vishvananda/netlink/protinfo.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package netlink
-
-import (
- "strings"
-)
-
-// Protinfo represents bridge flags from netlink.
-type Protinfo struct {
- Hairpin bool
- Guard bool
- FastLeave bool
- RootBlock bool
- Learning bool
- Flood bool
- ProxyArp bool
- ProxyArpWiFi bool
-}
-
-// String returns a list of enabled flags
-func (prot *Protinfo) String() string {
- var boolStrings []string
- if prot.Hairpin {
- boolStrings = append(boolStrings, "Hairpin")
- }
- if prot.Guard {
- boolStrings = append(boolStrings, "Guard")
- }
- if prot.FastLeave {
- boolStrings = append(boolStrings, "FastLeave")
- }
- if prot.RootBlock {
- boolStrings = append(boolStrings, "RootBlock")
- }
- if prot.Learning {
- boolStrings = append(boolStrings, "Learning")
- }
- if prot.Flood {
- boolStrings = append(boolStrings, "Flood")
- }
- if prot.ProxyArp {
- boolStrings = append(boolStrings, "ProxyArp")
- }
- if prot.ProxyArpWiFi {
- boolStrings = append(boolStrings, "ProxyArpWiFi")
- }
- return strings.Join(boolStrings, " ")
-}
-
-func boolToByte(x bool) []byte {
- if x {
- return []byte{1}
- }
- return []byte{0}
-}
-
-func byteToBool(x byte) bool {
- return uint8(x) != 0
-}
diff --git a/vendor/github.com/vishvananda/netlink/protinfo_linux.go b/vendor/github.com/vishvananda/netlink/protinfo_linux.go
deleted file mode 100644
index 43c465f..0000000
--- a/vendor/github.com/vishvananda/netlink/protinfo_linux.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "syscall"
-
- "github.com/vishvananda/netlink/nl"
- "golang.org/x/sys/unix"
-)
-
-func LinkGetProtinfo(link Link) (Protinfo, error) {
- return pkgHandle.LinkGetProtinfo(link)
-}
-
-func (h *Handle) LinkGetProtinfo(link Link) (Protinfo, error) {
- base := link.Attrs()
- h.ensureIndex(base)
- var pi Protinfo
- req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_DUMP)
- msg := nl.NewIfInfomsg(unix.AF_BRIDGE)
- req.AddData(msg)
- msgs, err := req.Execute(unix.NETLINK_ROUTE, 0)
- if err != nil {
- return pi, err
- }
-
- for _, m := range msgs {
- ans := nl.DeserializeIfInfomsg(m)
- if int(ans.Index) != base.Index {
- continue
- }
- attrs, err := nl.ParseRouteAttr(m[ans.Len():])
- if err != nil {
- return pi, err
- }
- for _, attr := range attrs {
- if attr.Attr.Type != unix.IFLA_PROTINFO|unix.NLA_F_NESTED {
- continue
- }
- infos, err := nl.ParseRouteAttr(attr.Value)
- if err != nil {
- return pi, err
- }
- pi = *parseProtinfo(infos)
-
- return pi, nil
- }
- }
- return pi, fmt.Errorf("Device with index %d not found", base.Index)
-}
-
-func parseProtinfo(infos []syscall.NetlinkRouteAttr) *Protinfo {
- var pi Protinfo
- for _, info := range infos {
- switch info.Attr.Type {
- case nl.IFLA_BRPORT_MODE:
- pi.Hairpin = byteToBool(info.Value[0])
- case nl.IFLA_BRPORT_GUARD:
- pi.Guard = byteToBool(info.Value[0])
- case nl.IFLA_BRPORT_FAST_LEAVE:
- pi.FastLeave = byteToBool(info.Value[0])
- case nl.IFLA_BRPORT_PROTECT:
- pi.RootBlock = byteToBool(info.Value[0])
- case nl.IFLA_BRPORT_LEARNING:
- pi.Learning = byteToBool(info.Value[0])
- case nl.IFLA_BRPORT_UNICAST_FLOOD:
- pi.Flood = byteToBool(info.Value[0])
- case nl.IFLA_BRPORT_PROXYARP:
- pi.ProxyArp = byteToBool(info.Value[0])
- case nl.IFLA_BRPORT_PROXYARP_WIFI:
- pi.ProxyArpWiFi = byteToBool(info.Value[0])
- }
- }
- return &pi
-}
diff --git a/vendor/github.com/vishvananda/netlink/qdisc.go b/vendor/github.com/vishvananda/netlink/qdisc.go
deleted file mode 100644
index 3df4b5c..0000000
--- a/vendor/github.com/vishvananda/netlink/qdisc.go
+++ /dev/null
@@ -1,292 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "math"
-)
-
-const (
- HANDLE_NONE = 0
- HANDLE_INGRESS = 0xFFFFFFF1
- HANDLE_CLSACT = HANDLE_INGRESS
- HANDLE_ROOT = 0xFFFFFFFF
- PRIORITY_MAP_LEN = 16
-)
-const (
- HANDLE_MIN_INGRESS = 0xFFFFFFF2
- HANDLE_MIN_EGRESS = 0xFFFFFFF3
-)
-
-type Qdisc interface {
- Attrs() *QdiscAttrs
- Type() string
-}
-
-// QdiscAttrs represents a netlink qdisc. A qdisc is associated with a link,
-// has a handle, a parent and a refcnt. The root qdisc of a device should
-// have parent == HANDLE_ROOT.
-type QdiscAttrs struct {
- LinkIndex int
- Handle uint32
- Parent uint32
- Refcnt uint32 // read only
-}
-
-func (q QdiscAttrs) String() string {
- return fmt.Sprintf("{LinkIndex: %d, Handle: %s, Parent: %s, Refcnt: %d}", q.LinkIndex, HandleStr(q.Handle), HandleStr(q.Parent), q.Refcnt)
-}
-
-func MakeHandle(major, minor uint16) uint32 {
- return (uint32(major) << 16) | uint32(minor)
-}
-
-func MajorMinor(handle uint32) (uint16, uint16) {
- return uint16((handle & 0xFFFF0000) >> 16), uint16(handle & 0x0000FFFFF)
-}
-
-func HandleStr(handle uint32) string {
- switch handle {
- case HANDLE_NONE:
- return "none"
- case HANDLE_INGRESS:
- return "ingress"
- case HANDLE_ROOT:
- return "root"
- default:
- major, minor := MajorMinor(handle)
- return fmt.Sprintf("%x:%x", major, minor)
- }
-}
-
-func Percentage2u32(percentage float32) uint32 {
- // FIXME this is most likely not the best way to convert from % to uint32
- if percentage == 100 {
- return math.MaxUint32
- }
- return uint32(math.MaxUint32 * (percentage / 100))
-}
-
-// PfifoFast is the default qdisc created by the kernel if one has not
-// been defined for the interface
-type PfifoFast struct {
- QdiscAttrs
- Bands uint8
- PriorityMap [PRIORITY_MAP_LEN]uint8
-}
-
-func (qdisc *PfifoFast) Attrs() *QdiscAttrs {
- return &qdisc.QdiscAttrs
-}
-
-func (qdisc *PfifoFast) Type() string {
- return "pfifo_fast"
-}
-
-// Prio is a basic qdisc that works just like PfifoFast
-type Prio struct {
- QdiscAttrs
- Bands uint8
- PriorityMap [PRIORITY_MAP_LEN]uint8
-}
-
-func NewPrio(attrs QdiscAttrs) *Prio {
- return &Prio{
- QdiscAttrs: attrs,
- Bands: 3,
- PriorityMap: [PRIORITY_MAP_LEN]uint8{1, 2, 2, 2, 1, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1},
- }
-}
-
-func (qdisc *Prio) Attrs() *QdiscAttrs {
- return &qdisc.QdiscAttrs
-}
-
-func (qdisc *Prio) Type() string {
- return "prio"
-}
-
-// Htb is a classful qdisc that rate limits based on tokens
-type Htb struct {
- QdiscAttrs
- Version uint32
- Rate2Quantum uint32
- Defcls uint32
- Debug uint32
- DirectPkts uint32
-}
-
-func NewHtb(attrs QdiscAttrs) *Htb {
- return &Htb{
- QdiscAttrs: attrs,
- Version: 3,
- Defcls: 0,
- Rate2Quantum: 10,
- Debug: 0,
- DirectPkts: 0,
- }
-}
-
-func (qdisc *Htb) Attrs() *QdiscAttrs {
- return &qdisc.QdiscAttrs
-}
-
-func (qdisc *Htb) Type() string {
- return "htb"
-}
-
-// Netem is a classless qdisc that rate limits based on tokens
-
-type NetemQdiscAttrs struct {
- Latency uint32 // in us
- DelayCorr float32 // in %
- Limit uint32
- Loss float32 // in %
- LossCorr float32 // in %
- Gap uint32
- Duplicate float32 // in %
- DuplicateCorr float32 // in %
- Jitter uint32 // in us
- ReorderProb float32 // in %
- ReorderCorr float32 // in %
- CorruptProb float32 // in %
- CorruptCorr float32 // in %
-}
-
-func (q NetemQdiscAttrs) String() string {
- return fmt.Sprintf(
- "{Latency: %d, Limit: %d, Loss: %f, Gap: %d, Duplicate: %f, Jitter: %d}",
- q.Latency, q.Limit, q.Loss, q.Gap, q.Duplicate, q.Jitter,
- )
-}
-
-type Netem struct {
- QdiscAttrs
- Latency uint32
- DelayCorr uint32
- Limit uint32
- Loss uint32
- LossCorr uint32
- Gap uint32
- Duplicate uint32
- DuplicateCorr uint32
- Jitter uint32
- ReorderProb uint32
- ReorderCorr uint32
- CorruptProb uint32
- CorruptCorr uint32
-}
-
-func (qdisc *Netem) Attrs() *QdiscAttrs {
- return &qdisc.QdiscAttrs
-}
-
-func (qdisc *Netem) Type() string {
- return "netem"
-}
-
-// Tbf is a classless qdisc that rate limits based on tokens
-type Tbf struct {
- QdiscAttrs
- Rate uint64
- Limit uint32
- Buffer uint32
- Peakrate uint64
- Minburst uint32
- // TODO: handle other settings
-}
-
-func (qdisc *Tbf) Attrs() *QdiscAttrs {
- return &qdisc.QdiscAttrs
-}
-
-func (qdisc *Tbf) Type() string {
- return "tbf"
-}
-
-// Ingress is a qdisc for adding ingress filters
-type Ingress struct {
- QdiscAttrs
-}
-
-func (qdisc *Ingress) Attrs() *QdiscAttrs {
- return &qdisc.QdiscAttrs
-}
-
-func (qdisc *Ingress) Type() string {
- return "ingress"
-}
-
-// GenericQdisc qdiscs represent types that are not currently understood
-// by this netlink library.
-type GenericQdisc struct {
- QdiscAttrs
- QdiscType string
-}
-
-func (qdisc *GenericQdisc) Attrs() *QdiscAttrs {
- return &qdisc.QdiscAttrs
-}
-
-func (qdisc *GenericQdisc) Type() string {
- return qdisc.QdiscType
-}
-
-// Fq is a classless packet scheduler meant to be mostly used for locally generated traffic.
-type Fq struct {
- QdiscAttrs
- PacketLimit uint32
- FlowPacketLimit uint32
- // In bytes
- Quantum uint32
- InitialQuantum uint32
- // called RateEnable under the hood
- Pacing uint32
- FlowDefaultRate uint32
- FlowMaxRate uint32
- // called BucketsLog under the hood
- Buckets uint32
- FlowRefillDelay uint32
- LowRateThreshold uint32
-}
-
-func NewFq(attrs QdiscAttrs) *Fq {
- return &Fq{
- QdiscAttrs: attrs,
- Pacing: 1,
- }
-}
-
-func (qdisc *Fq) Attrs() *QdiscAttrs {
- return &qdisc.QdiscAttrs
-}
-
-func (qdisc *Fq) Type() string {
- return "fq"
-}
-
-// FQ_Codel (Fair Queuing Controlled Delay) is queuing discipline that combines Fair Queuing with the CoDel AQM scheme.
-type FqCodel struct {
- QdiscAttrs
- Target uint32
- Limit uint32
- Interval uint32
- ECN uint32
- Flows uint32
- Quantum uint32
- // There are some more attributes here, but support for them seems not ubiquitous
-}
-
-func NewFqCodel(attrs QdiscAttrs) *FqCodel {
- return &FqCodel{
- QdiscAttrs: attrs,
- ECN: 1,
- }
-}
-
-func (qdisc *FqCodel) Attrs() *QdiscAttrs {
- return &qdisc.QdiscAttrs
-}
-
-func (qdisc *FqCodel) Type() string {
- return "fq_codel"
-}
diff --git a/vendor/github.com/vishvananda/netlink/qdisc_linux.go b/vendor/github.com/vishvananda/netlink/qdisc_linux.go
deleted file mode 100644
index 3794ac1..0000000
--- a/vendor/github.com/vishvananda/netlink/qdisc_linux.go
+++ /dev/null
@@ -1,647 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "io/ioutil"
- "strconv"
- "strings"
- "syscall"
-
- "github.com/vishvananda/netlink/nl"
- "golang.org/x/sys/unix"
-)
-
-// NOTE function is here because it uses other linux functions
-func NewNetem(attrs QdiscAttrs, nattrs NetemQdiscAttrs) *Netem {
- var limit uint32 = 1000
- var lossCorr, delayCorr, duplicateCorr uint32
- var reorderProb, reorderCorr uint32
- var corruptProb, corruptCorr uint32
-
- latency := nattrs.Latency
- loss := Percentage2u32(nattrs.Loss)
- gap := nattrs.Gap
- duplicate := Percentage2u32(nattrs.Duplicate)
- jitter := nattrs.Jitter
-
- // Correlation
- if latency > 0 && jitter > 0 {
- delayCorr = Percentage2u32(nattrs.DelayCorr)
- }
- if loss > 0 {
- lossCorr = Percentage2u32(nattrs.LossCorr)
- }
- if duplicate > 0 {
- duplicateCorr = Percentage2u32(nattrs.DuplicateCorr)
- }
- // FIXME should validate values(like loss/duplicate are percentages...)
- latency = time2Tick(latency)
-
- if nattrs.Limit != 0 {
- limit = nattrs.Limit
- }
- // Jitter is only value if latency is > 0
- if latency > 0 {
- jitter = time2Tick(jitter)
- }
-
- reorderProb = Percentage2u32(nattrs.ReorderProb)
- reorderCorr = Percentage2u32(nattrs.ReorderCorr)
-
- if reorderProb > 0 {
- // ERROR if lantency == 0
- if gap == 0 {
- gap = 1
- }
- }
-
- corruptProb = Percentage2u32(nattrs.CorruptProb)
- corruptCorr = Percentage2u32(nattrs.CorruptCorr)
-
- return &Netem{
- QdiscAttrs: attrs,
- Latency: latency,
- DelayCorr: delayCorr,
- Limit: limit,
- Loss: loss,
- LossCorr: lossCorr,
- Gap: gap,
- Duplicate: duplicate,
- DuplicateCorr: duplicateCorr,
- Jitter: jitter,
- ReorderProb: reorderProb,
- ReorderCorr: reorderCorr,
- CorruptProb: corruptProb,
- CorruptCorr: corruptCorr,
- }
-}
-
-// QdiscDel will delete a qdisc from the system.
-// Equivalent to: `tc qdisc del $qdisc`
-func QdiscDel(qdisc Qdisc) error {
- return pkgHandle.QdiscDel(qdisc)
-}
-
-// QdiscDel will delete a qdisc from the system.
-// Equivalent to: `tc qdisc del $qdisc`
-func (h *Handle) QdiscDel(qdisc Qdisc) error {
- return h.qdiscModify(unix.RTM_DELQDISC, 0, qdisc)
-}
-
-// QdiscChange will change a qdisc in place
-// Equivalent to: `tc qdisc change $qdisc`
-// The parent and handle MUST NOT be changed.
-func QdiscChange(qdisc Qdisc) error {
- return pkgHandle.QdiscChange(qdisc)
-}
-
-// QdiscChange will change a qdisc in place
-// Equivalent to: `tc qdisc change $qdisc`
-// The parent and handle MUST NOT be changed.
-func (h *Handle) QdiscChange(qdisc Qdisc) error {
- return h.qdiscModify(unix.RTM_NEWQDISC, 0, qdisc)
-}
-
-// QdiscReplace will replace a qdisc to the system.
-// Equivalent to: `tc qdisc replace $qdisc`
-// The handle MUST change.
-func QdiscReplace(qdisc Qdisc) error {
- return pkgHandle.QdiscReplace(qdisc)
-}
-
-// QdiscReplace will replace a qdisc to the system.
-// Equivalent to: `tc qdisc replace $qdisc`
-// The handle MUST change.
-func (h *Handle) QdiscReplace(qdisc Qdisc) error {
- return h.qdiscModify(
- unix.RTM_NEWQDISC,
- unix.NLM_F_CREATE|unix.NLM_F_REPLACE,
- qdisc)
-}
-
-// QdiscAdd will add a qdisc to the system.
-// Equivalent to: `tc qdisc add $qdisc`
-func QdiscAdd(qdisc Qdisc) error {
- return pkgHandle.QdiscAdd(qdisc)
-}
-
-// QdiscAdd will add a qdisc to the system.
-// Equivalent to: `tc qdisc add $qdisc`
-func (h *Handle) QdiscAdd(qdisc Qdisc) error {
- return h.qdiscModify(
- unix.RTM_NEWQDISC,
- unix.NLM_F_CREATE|unix.NLM_F_EXCL,
- qdisc)
-}
-
-func (h *Handle) qdiscModify(cmd, flags int, qdisc Qdisc) error {
- req := h.newNetlinkRequest(cmd, flags|unix.NLM_F_ACK)
- base := qdisc.Attrs()
- msg := &nl.TcMsg{
- Family: nl.FAMILY_ALL,
- Ifindex: int32(base.LinkIndex),
- Handle: base.Handle,
- Parent: base.Parent,
- }
- req.AddData(msg)
-
- // When deleting don't bother building the rest of the netlink payload
- if cmd != unix.RTM_DELQDISC {
- if err := qdiscPayload(req, qdisc); err != nil {
- return err
- }
- }
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-func qdiscPayload(req *nl.NetlinkRequest, qdisc Qdisc) error {
-
- req.AddData(nl.NewRtAttr(nl.TCA_KIND, nl.ZeroTerminated(qdisc.Type())))
-
- options := nl.NewRtAttr(nl.TCA_OPTIONS, nil)
-
- switch qdisc := qdisc.(type) {
- case *Prio:
- tcmap := nl.TcPrioMap{
- Bands: int32(qdisc.Bands),
- Priomap: qdisc.PriorityMap,
- }
- options = nl.NewRtAttr(nl.TCA_OPTIONS, tcmap.Serialize())
- case *Tbf:
- opt := nl.TcTbfQopt{}
- opt.Rate.Rate = uint32(qdisc.Rate)
- opt.Peakrate.Rate = uint32(qdisc.Peakrate)
- opt.Limit = qdisc.Limit
- opt.Buffer = qdisc.Buffer
- nl.NewRtAttrChild(options, nl.TCA_TBF_PARMS, opt.Serialize())
- if qdisc.Rate >= uint64(1<<32) {
- nl.NewRtAttrChild(options, nl.TCA_TBF_RATE64, nl.Uint64Attr(qdisc.Rate))
- }
- if qdisc.Peakrate >= uint64(1<<32) {
- nl.NewRtAttrChild(options, nl.TCA_TBF_PRATE64, nl.Uint64Attr(qdisc.Peakrate))
- }
- if qdisc.Peakrate > 0 {
- nl.NewRtAttrChild(options, nl.TCA_TBF_PBURST, nl.Uint32Attr(qdisc.Minburst))
- }
- case *Htb:
- opt := nl.TcHtbGlob{}
- opt.Version = qdisc.Version
- opt.Rate2Quantum = qdisc.Rate2Quantum
- opt.Defcls = qdisc.Defcls
- // TODO: Handle Debug properly. For now default to 0
- opt.Debug = qdisc.Debug
- opt.DirectPkts = qdisc.DirectPkts
- nl.NewRtAttrChild(options, nl.TCA_HTB_INIT, opt.Serialize())
- // nl.NewRtAttrChild(options, nl.TCA_HTB_DIRECT_QLEN, opt.Serialize())
- case *Netem:
- opt := nl.TcNetemQopt{}
- opt.Latency = qdisc.Latency
- opt.Limit = qdisc.Limit
- opt.Loss = qdisc.Loss
- opt.Gap = qdisc.Gap
- opt.Duplicate = qdisc.Duplicate
- opt.Jitter = qdisc.Jitter
- options = nl.NewRtAttr(nl.TCA_OPTIONS, opt.Serialize())
- // Correlation
- corr := nl.TcNetemCorr{}
- corr.DelayCorr = qdisc.DelayCorr
- corr.LossCorr = qdisc.LossCorr
- corr.DupCorr = qdisc.DuplicateCorr
-
- if corr.DelayCorr > 0 || corr.LossCorr > 0 || corr.DupCorr > 0 {
- nl.NewRtAttrChild(options, nl.TCA_NETEM_CORR, corr.Serialize())
- }
- // Corruption
- corruption := nl.TcNetemCorrupt{}
- corruption.Probability = qdisc.CorruptProb
- corruption.Correlation = qdisc.CorruptCorr
- if corruption.Probability > 0 {
- nl.NewRtAttrChild(options, nl.TCA_NETEM_CORRUPT, corruption.Serialize())
- }
- // Reorder
- reorder := nl.TcNetemReorder{}
- reorder.Probability = qdisc.ReorderProb
- reorder.Correlation = qdisc.ReorderCorr
- if reorder.Probability > 0 {
- nl.NewRtAttrChild(options, nl.TCA_NETEM_REORDER, reorder.Serialize())
- }
- case *Ingress:
- // ingress filters must use the proper handle
- if qdisc.Attrs().Parent != HANDLE_INGRESS {
- return fmt.Errorf("Ingress filters must set Parent to HANDLE_INGRESS")
- }
- case *FqCodel:
- nl.NewRtAttrChild(options, nl.TCA_FQ_CODEL_ECN, nl.Uint32Attr((uint32(qdisc.ECN))))
- if qdisc.Limit > 0 {
- nl.NewRtAttrChild(options, nl.TCA_FQ_CODEL_LIMIT, nl.Uint32Attr((uint32(qdisc.Limit))))
- }
- if qdisc.Interval > 0 {
- nl.NewRtAttrChild(options, nl.TCA_FQ_CODEL_INTERVAL, nl.Uint32Attr((uint32(qdisc.Interval))))
- }
- if qdisc.Flows > 0 {
- nl.NewRtAttrChild(options, nl.TCA_FQ_CODEL_FLOWS, nl.Uint32Attr((uint32(qdisc.Flows))))
- }
- if qdisc.Quantum > 0 {
- nl.NewRtAttrChild(options, nl.TCA_FQ_CODEL_QUANTUM, nl.Uint32Attr((uint32(qdisc.Quantum))))
- }
-
- case *Fq:
- nl.NewRtAttrChild(options, nl.TCA_FQ_RATE_ENABLE, nl.Uint32Attr((uint32(qdisc.Pacing))))
-
- if qdisc.Buckets > 0 {
- nl.NewRtAttrChild(options, nl.TCA_FQ_BUCKETS_LOG, nl.Uint32Attr((uint32(qdisc.Buckets))))
- }
- if qdisc.LowRateThreshold > 0 {
- nl.NewRtAttrChild(options, nl.TCA_FQ_LOW_RATE_THRESHOLD, nl.Uint32Attr((uint32(qdisc.LowRateThreshold))))
- }
- if qdisc.Quantum > 0 {
- nl.NewRtAttrChild(options, nl.TCA_FQ_QUANTUM, nl.Uint32Attr((uint32(qdisc.Quantum))))
- }
- if qdisc.InitialQuantum > 0 {
- nl.NewRtAttrChild(options, nl.TCA_FQ_INITIAL_QUANTUM, nl.Uint32Attr((uint32(qdisc.InitialQuantum))))
- }
- if qdisc.FlowRefillDelay > 0 {
- nl.NewRtAttrChild(options, nl.TCA_FQ_FLOW_REFILL_DELAY, nl.Uint32Attr((uint32(qdisc.FlowRefillDelay))))
- }
- if qdisc.FlowPacketLimit > 0 {
- nl.NewRtAttrChild(options, nl.TCA_FQ_FLOW_PLIMIT, nl.Uint32Attr((uint32(qdisc.FlowPacketLimit))))
- }
- if qdisc.FlowMaxRate > 0 {
- nl.NewRtAttrChild(options, nl.TCA_FQ_FLOW_MAX_RATE, nl.Uint32Attr((uint32(qdisc.FlowMaxRate))))
- }
- if qdisc.FlowDefaultRate > 0 {
- nl.NewRtAttrChild(options, nl.TCA_FQ_FLOW_DEFAULT_RATE, nl.Uint32Attr((uint32(qdisc.FlowDefaultRate))))
- }
- }
-
- req.AddData(options)
- return nil
-}
-
-// QdiscList gets a list of qdiscs in the system.
-// Equivalent to: `tc qdisc show`.
-// The list can be filtered by link.
-func QdiscList(link Link) ([]Qdisc, error) {
- return pkgHandle.QdiscList(link)
-}
-
-// QdiscList gets a list of qdiscs in the system.
-// Equivalent to: `tc qdisc show`.
-// The list can be filtered by link.
-func (h *Handle) QdiscList(link Link) ([]Qdisc, error) {
- req := h.newNetlinkRequest(unix.RTM_GETQDISC, unix.NLM_F_DUMP)
- index := int32(0)
- if link != nil {
- base := link.Attrs()
- h.ensureIndex(base)
- index = int32(base.Index)
- }
- msg := &nl.TcMsg{
- Family: nl.FAMILY_ALL,
- Ifindex: index,
- }
- req.AddData(msg)
-
- msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWQDISC)
- if err != nil {
- return nil, err
- }
-
- var res []Qdisc
- for _, m := range msgs {
- msg := nl.DeserializeTcMsg(m)
-
- attrs, err := nl.ParseRouteAttr(m[msg.Len():])
- if err != nil {
- return nil, err
- }
-
- // skip qdiscs from other interfaces
- if link != nil && msg.Ifindex != index {
- continue
- }
-
- base := QdiscAttrs{
- LinkIndex: int(msg.Ifindex),
- Handle: msg.Handle,
- Parent: msg.Parent,
- Refcnt: msg.Info,
- }
- var qdisc Qdisc
- qdiscType := ""
- for _, attr := range attrs {
- switch attr.Attr.Type {
- case nl.TCA_KIND:
- qdiscType = string(attr.Value[:len(attr.Value)-1])
- switch qdiscType {
- case "pfifo_fast":
- qdisc = &PfifoFast{}
- case "prio":
- qdisc = &Prio{}
- case "tbf":
- qdisc = &Tbf{}
- case "ingress":
- qdisc = &Ingress{}
- case "htb":
- qdisc = &Htb{}
- case "fq":
- qdisc = &Fq{}
- case "fq_codel":
- qdisc = &FqCodel{}
- case "netem":
- qdisc = &Netem{}
- default:
- qdisc = &GenericQdisc{QdiscType: qdiscType}
- }
- case nl.TCA_OPTIONS:
- switch qdiscType {
- case "pfifo_fast":
- // pfifo returns TcPrioMap directly without wrapping it in rtattr
- if err := parsePfifoFastData(qdisc, attr.Value); err != nil {
- return nil, err
- }
- case "prio":
- // prio returns TcPrioMap directly without wrapping it in rtattr
- if err := parsePrioData(qdisc, attr.Value); err != nil {
- return nil, err
- }
- case "tbf":
- data, err := nl.ParseRouteAttr(attr.Value)
- if err != nil {
- return nil, err
- }
- if err := parseTbfData(qdisc, data); err != nil {
- return nil, err
- }
- case "htb":
- data, err := nl.ParseRouteAttr(attr.Value)
- if err != nil {
- return nil, err
- }
- if err := parseHtbData(qdisc, data); err != nil {
- return nil, err
- }
- case "fq":
- data, err := nl.ParseRouteAttr(attr.Value)
- if err != nil {
- return nil, err
- }
- if err := parseFqData(qdisc, data); err != nil {
- return nil, err
- }
- case "fq_codel":
- data, err := nl.ParseRouteAttr(attr.Value)
- if err != nil {
- return nil, err
- }
- if err := parseFqCodelData(qdisc, data); err != nil {
- return nil, err
- }
- case "netem":
- if err := parseNetemData(qdisc, attr.Value); err != nil {
- return nil, err
- }
-
- // no options for ingress
- }
- }
- }
- *qdisc.Attrs() = base
- res = append(res, qdisc)
- }
-
- return res, nil
-}
-
-func parsePfifoFastData(qdisc Qdisc, value []byte) error {
- pfifo := qdisc.(*PfifoFast)
- tcmap := nl.DeserializeTcPrioMap(value)
- pfifo.PriorityMap = tcmap.Priomap
- pfifo.Bands = uint8(tcmap.Bands)
- return nil
-}
-
-func parsePrioData(qdisc Qdisc, value []byte) error {
- prio := qdisc.(*Prio)
- tcmap := nl.DeserializeTcPrioMap(value)
- prio.PriorityMap = tcmap.Priomap
- prio.Bands = uint8(tcmap.Bands)
- return nil
-}
-
-func parseHtbData(qdisc Qdisc, data []syscall.NetlinkRouteAttr) error {
- native = nl.NativeEndian()
- htb := qdisc.(*Htb)
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.TCA_HTB_INIT:
- opt := nl.DeserializeTcHtbGlob(datum.Value)
- htb.Version = opt.Version
- htb.Rate2Quantum = opt.Rate2Quantum
- htb.Defcls = opt.Defcls
- htb.Debug = opt.Debug
- htb.DirectPkts = opt.DirectPkts
- case nl.TCA_HTB_DIRECT_QLEN:
- // TODO
- //htb.DirectQlen = native.uint32(datum.Value)
- }
- }
- return nil
-}
-
-func parseFqCodelData(qdisc Qdisc, data []syscall.NetlinkRouteAttr) error {
- native = nl.NativeEndian()
- fqCodel := qdisc.(*FqCodel)
- for _, datum := range data {
-
- switch datum.Attr.Type {
- case nl.TCA_FQ_CODEL_TARGET:
- fqCodel.Target = native.Uint32(datum.Value)
- case nl.TCA_FQ_CODEL_LIMIT:
- fqCodel.Limit = native.Uint32(datum.Value)
- case nl.TCA_FQ_CODEL_INTERVAL:
- fqCodel.Interval = native.Uint32(datum.Value)
- case nl.TCA_FQ_CODEL_ECN:
- fqCodel.ECN = native.Uint32(datum.Value)
- case nl.TCA_FQ_CODEL_FLOWS:
- fqCodel.Flows = native.Uint32(datum.Value)
- case nl.TCA_FQ_CODEL_QUANTUM:
- fqCodel.Quantum = native.Uint32(datum.Value)
- }
- }
- return nil
-}
-
-func parseFqData(qdisc Qdisc, data []syscall.NetlinkRouteAttr) error {
- native = nl.NativeEndian()
- fq := qdisc.(*Fq)
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.TCA_FQ_BUCKETS_LOG:
- fq.Buckets = native.Uint32(datum.Value)
- case nl.TCA_FQ_LOW_RATE_THRESHOLD:
- fq.LowRateThreshold = native.Uint32(datum.Value)
- case nl.TCA_FQ_QUANTUM:
- fq.Quantum = native.Uint32(datum.Value)
- case nl.TCA_FQ_RATE_ENABLE:
- fq.Pacing = native.Uint32(datum.Value)
- case nl.TCA_FQ_INITIAL_QUANTUM:
- fq.InitialQuantum = native.Uint32(datum.Value)
- case nl.TCA_FQ_ORPHAN_MASK:
- // TODO
- case nl.TCA_FQ_FLOW_REFILL_DELAY:
- fq.FlowRefillDelay = native.Uint32(datum.Value)
- case nl.TCA_FQ_FLOW_PLIMIT:
- fq.FlowPacketLimit = native.Uint32(datum.Value)
- case nl.TCA_FQ_PLIMIT:
- fq.PacketLimit = native.Uint32(datum.Value)
- case nl.TCA_FQ_FLOW_MAX_RATE:
- fq.FlowMaxRate = native.Uint32(datum.Value)
- case nl.TCA_FQ_FLOW_DEFAULT_RATE:
- fq.FlowDefaultRate = native.Uint32(datum.Value)
- }
- }
- return nil
-}
-
-func parseNetemData(qdisc Qdisc, value []byte) error {
- netem := qdisc.(*Netem)
- opt := nl.DeserializeTcNetemQopt(value)
- netem.Latency = opt.Latency
- netem.Limit = opt.Limit
- netem.Loss = opt.Loss
- netem.Gap = opt.Gap
- netem.Duplicate = opt.Duplicate
- netem.Jitter = opt.Jitter
- data, err := nl.ParseRouteAttr(value[nl.SizeofTcNetemQopt:])
- if err != nil {
- return err
- }
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.TCA_NETEM_CORR:
- opt := nl.DeserializeTcNetemCorr(datum.Value)
- netem.DelayCorr = opt.DelayCorr
- netem.LossCorr = opt.LossCorr
- netem.DuplicateCorr = opt.DupCorr
- case nl.TCA_NETEM_CORRUPT:
- opt := nl.DeserializeTcNetemCorrupt(datum.Value)
- netem.CorruptProb = opt.Probability
- netem.CorruptCorr = opt.Correlation
- case nl.TCA_NETEM_REORDER:
- opt := nl.DeserializeTcNetemReorder(datum.Value)
- netem.ReorderProb = opt.Probability
- netem.ReorderCorr = opt.Correlation
- }
- }
- return nil
-}
-
-func parseTbfData(qdisc Qdisc, data []syscall.NetlinkRouteAttr) error {
- native = nl.NativeEndian()
- tbf := qdisc.(*Tbf)
- for _, datum := range data {
- switch datum.Attr.Type {
- case nl.TCA_TBF_PARMS:
- opt := nl.DeserializeTcTbfQopt(datum.Value)
- tbf.Rate = uint64(opt.Rate.Rate)
- tbf.Peakrate = uint64(opt.Peakrate.Rate)
- tbf.Limit = opt.Limit
- tbf.Buffer = opt.Buffer
- case nl.TCA_TBF_RATE64:
- tbf.Rate = native.Uint64(datum.Value[0:8])
- case nl.TCA_TBF_PRATE64:
- tbf.Peakrate = native.Uint64(datum.Value[0:8])
- case nl.TCA_TBF_PBURST:
- tbf.Minburst = native.Uint32(datum.Value[0:4])
- }
- }
- return nil
-}
-
-const (
- TIME_UNITS_PER_SEC = 1000000
-)
-
-var (
- tickInUsec float64
- clockFactor float64
- hz float64
-)
-
-func initClock() {
- data, err := ioutil.ReadFile("/proc/net/psched")
- if err != nil {
- return
- }
- parts := strings.Split(strings.TrimSpace(string(data)), " ")
- if len(parts) < 3 {
- return
- }
- var vals [3]uint64
- for i := range vals {
- val, err := strconv.ParseUint(parts[i], 16, 32)
- if err != nil {
- return
- }
- vals[i] = val
- }
- // compatibility
- if vals[2] == 1000000000 {
- vals[0] = vals[1]
- }
- clockFactor = float64(vals[2]) / TIME_UNITS_PER_SEC
- tickInUsec = float64(vals[0]) / float64(vals[1]) * clockFactor
- hz = float64(vals[0])
-}
-
-func TickInUsec() float64 {
- if tickInUsec == 0.0 {
- initClock()
- }
- return tickInUsec
-}
-
-func ClockFactor() float64 {
- if clockFactor == 0.0 {
- initClock()
- }
- return clockFactor
-}
-
-func Hz() float64 {
- if hz == 0.0 {
- initClock()
- }
- return hz
-}
-
-func time2Tick(time uint32) uint32 {
- return uint32(float64(time) * TickInUsec())
-}
-
-func tick2Time(tick uint32) uint32 {
- return uint32(float64(tick) / TickInUsec())
-}
-
-func time2Ktime(time uint32) uint32 {
- return uint32(float64(time) * ClockFactor())
-}
-
-func ktime2Time(ktime uint32) uint32 {
- return uint32(float64(ktime) / ClockFactor())
-}
-
-func burst(rate uint64, buffer uint32) uint32 {
- return uint32(float64(rate) * float64(tick2Time(buffer)) / TIME_UNITS_PER_SEC)
-}
-
-func latency(rate uint64, limit, buffer uint32) float64 {
- return TIME_UNITS_PER_SEC*(float64(limit)/float64(rate)) - float64(tick2Time(buffer))
-}
-
-func Xmittime(rate uint64, size uint32) float64 {
- return TickInUsec() * TIME_UNITS_PER_SEC * (float64(size) / float64(rate))
-}
diff --git a/vendor/github.com/vishvananda/netlink/route.go b/vendor/github.com/vishvananda/netlink/route.go
deleted file mode 100644
index 2cd58ee..0000000
--- a/vendor/github.com/vishvananda/netlink/route.go
+++ /dev/null
@@ -1,178 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "net"
- "strings"
-)
-
-// Scope is an enum representing a route scope.
-type Scope uint8
-
-type NextHopFlag int
-
-type Destination interface {
- Family() int
- Decode([]byte) error
- Encode() ([]byte, error)
- String() string
- Equal(Destination) bool
-}
-
-type Encap interface {
- Type() int
- Decode([]byte) error
- Encode() ([]byte, error)
- String() string
- Equal(Encap) bool
-}
-
-// Route represents a netlink route.
-type Route struct {
- LinkIndex int
- ILinkIndex int
- Scope Scope
- Dst *net.IPNet
- Src net.IP
- Gw net.IP
- MultiPath []*NexthopInfo
- Protocol int
- Priority int
- Table int
- Type int
- Tos int
- Flags int
- MPLSDst *int
- NewDst Destination
- Encap Encap
- MTU int
- AdvMSS int
-}
-
-func (r Route) String() string {
- elems := []string{}
- if len(r.MultiPath) == 0 {
- elems = append(elems, fmt.Sprintf("Ifindex: %d", r.LinkIndex))
- }
- if r.MPLSDst != nil {
- elems = append(elems, fmt.Sprintf("Dst: %d", r.MPLSDst))
- } else {
- elems = append(elems, fmt.Sprintf("Dst: %s", r.Dst))
- }
- if r.NewDst != nil {
- elems = append(elems, fmt.Sprintf("NewDst: %s", r.NewDst))
- }
- if r.Encap != nil {
- elems = append(elems, fmt.Sprintf("Encap: %s", r.Encap))
- }
- elems = append(elems, fmt.Sprintf("Src: %s", r.Src))
- if len(r.MultiPath) > 0 {
- elems = append(elems, fmt.Sprintf("Gw: %s", r.MultiPath))
- } else {
- elems = append(elems, fmt.Sprintf("Gw: %s", r.Gw))
- }
- elems = append(elems, fmt.Sprintf("Flags: %s", r.ListFlags()))
- elems = append(elems, fmt.Sprintf("Table: %d", r.Table))
- return fmt.Sprintf("{%s}", strings.Join(elems, " "))
-}
-
-func (r Route) Equal(x Route) bool {
- return r.LinkIndex == x.LinkIndex &&
- r.ILinkIndex == x.ILinkIndex &&
- r.Scope == x.Scope &&
- ipNetEqual(r.Dst, x.Dst) &&
- r.Src.Equal(x.Src) &&
- r.Gw.Equal(x.Gw) &&
- nexthopInfoSlice(r.MultiPath).Equal(x.MultiPath) &&
- r.Protocol == x.Protocol &&
- r.Priority == x.Priority &&
- r.Table == x.Table &&
- r.Type == x.Type &&
- r.Tos == x.Tos &&
- r.Flags == x.Flags &&
- (r.MPLSDst == x.MPLSDst || (r.MPLSDst != nil && x.MPLSDst != nil && *r.MPLSDst == *x.MPLSDst)) &&
- (r.NewDst == x.NewDst || (r.NewDst != nil && r.NewDst.Equal(x.NewDst))) &&
- (r.Encap == x.Encap || (r.Encap != nil && r.Encap.Equal(x.Encap)))
-}
-
-func (r *Route) SetFlag(flag NextHopFlag) {
- r.Flags |= int(flag)
-}
-
-func (r *Route) ClearFlag(flag NextHopFlag) {
- r.Flags &^= int(flag)
-}
-
-type flagString struct {
- f NextHopFlag
- s string
-}
-
-// RouteUpdate is sent when a route changes - type is RTM_NEWROUTE or RTM_DELROUTE
-type RouteUpdate struct {
- Type uint16
- Route
-}
-
-type NexthopInfo struct {
- LinkIndex int
- Hops int
- Gw net.IP
- Flags int
- NewDst Destination
- Encap Encap
-}
-
-func (n *NexthopInfo) String() string {
- elems := []string{}
- elems = append(elems, fmt.Sprintf("Ifindex: %d", n.LinkIndex))
- if n.NewDst != nil {
- elems = append(elems, fmt.Sprintf("NewDst: %s", n.NewDst))
- }
- if n.Encap != nil {
- elems = append(elems, fmt.Sprintf("Encap: %s", n.Encap))
- }
- elems = append(elems, fmt.Sprintf("Weight: %d", n.Hops+1))
- elems = append(elems, fmt.Sprintf("Gw: %s", n.Gw))
- elems = append(elems, fmt.Sprintf("Flags: %s", n.ListFlags()))
- return fmt.Sprintf("{%s}", strings.Join(elems, " "))
-}
-
-func (n NexthopInfo) Equal(x NexthopInfo) bool {
- return n.LinkIndex == x.LinkIndex &&
- n.Hops == x.Hops &&
- n.Gw.Equal(x.Gw) &&
- n.Flags == x.Flags &&
- (n.NewDst == x.NewDst || (n.NewDst != nil && n.NewDst.Equal(x.NewDst))) &&
- (n.Encap == x.Encap || (n.Encap != nil && n.Encap.Equal(x.Encap)))
-}
-
-type nexthopInfoSlice []*NexthopInfo
-
-func (n nexthopInfoSlice) Equal(x []*NexthopInfo) bool {
- if len(n) != len(x) {
- return false
- }
- for i := range n {
- if n[i] == nil || x[i] == nil {
- return false
- }
- if !n[i].Equal(*x[i]) {
- return false
- }
- }
- return true
-}
-
-// ipNetEqual returns true iff both IPNet are equal
-func ipNetEqual(ipn1 *net.IPNet, ipn2 *net.IPNet) bool {
- if ipn1 == ipn2 {
- return true
- }
- if ipn1 == nil || ipn2 == nil {
- return false
- }
- m1, _ := ipn1.Mask.Size()
- m2, _ := ipn2.Mask.Size()
- return m1 == m2 && ipn1.IP.Equal(ipn2.IP)
-}
diff --git a/vendor/github.com/vishvananda/netlink/route_linux.go b/vendor/github.com/vishvananda/netlink/route_linux.go
deleted file mode 100644
index 3f85671..0000000
--- a/vendor/github.com/vishvananda/netlink/route_linux.go
+++ /dev/null
@@ -1,878 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "net"
- "strings"
- "syscall"
-
- "github.com/vishvananda/netlink/nl"
- "github.com/vishvananda/netns"
- "golang.org/x/sys/unix"
-)
-
-// RtAttr is shared so it is in netlink_linux.go
-
-const (
- SCOPE_UNIVERSE Scope = unix.RT_SCOPE_UNIVERSE
- SCOPE_SITE Scope = unix.RT_SCOPE_SITE
- SCOPE_LINK Scope = unix.RT_SCOPE_LINK
- SCOPE_HOST Scope = unix.RT_SCOPE_HOST
- SCOPE_NOWHERE Scope = unix.RT_SCOPE_NOWHERE
-)
-
-const (
- RT_FILTER_PROTOCOL uint64 = 1 << (1 + iota)
- RT_FILTER_SCOPE
- RT_FILTER_TYPE
- RT_FILTER_TOS
- RT_FILTER_IIF
- RT_FILTER_OIF
- RT_FILTER_DST
- RT_FILTER_SRC
- RT_FILTER_GW
- RT_FILTER_TABLE
-)
-
-const (
- FLAG_ONLINK NextHopFlag = unix.RTNH_F_ONLINK
- FLAG_PERVASIVE NextHopFlag = unix.RTNH_F_PERVASIVE
-)
-
-var testFlags = []flagString{
- {f: FLAG_ONLINK, s: "onlink"},
- {f: FLAG_PERVASIVE, s: "pervasive"},
-}
-
-func listFlags(flag int) []string {
- var flags []string
- for _, tf := range testFlags {
- if flag&int(tf.f) != 0 {
- flags = append(flags, tf.s)
- }
- }
- return flags
-}
-
-func (r *Route) ListFlags() []string {
- return listFlags(r.Flags)
-}
-
-func (n *NexthopInfo) ListFlags() []string {
- return listFlags(n.Flags)
-}
-
-type MPLSDestination struct {
- Labels []int
-}
-
-func (d *MPLSDestination) Family() int {
- return nl.FAMILY_MPLS
-}
-
-func (d *MPLSDestination) Decode(buf []byte) error {
- d.Labels = nl.DecodeMPLSStack(buf)
- return nil
-}
-
-func (d *MPLSDestination) Encode() ([]byte, error) {
- return nl.EncodeMPLSStack(d.Labels...), nil
-}
-
-func (d *MPLSDestination) String() string {
- s := make([]string, 0, len(d.Labels))
- for _, l := range d.Labels {
- s = append(s, fmt.Sprintf("%d", l))
- }
- return strings.Join(s, "/")
-}
-
-func (d *MPLSDestination) Equal(x Destination) bool {
- o, ok := x.(*MPLSDestination)
- if !ok {
- return false
- }
- if d == nil && o == nil {
- return true
- }
- if d == nil || o == nil {
- return false
- }
- if d.Labels == nil && o.Labels == nil {
- return true
- }
- if d.Labels == nil || o.Labels == nil {
- return false
- }
- if len(d.Labels) != len(o.Labels) {
- return false
- }
- for i := range d.Labels {
- if d.Labels[i] != o.Labels[i] {
- return false
- }
- }
- return true
-}
-
-type MPLSEncap struct {
- Labels []int
-}
-
-func (e *MPLSEncap) Type() int {
- return nl.LWTUNNEL_ENCAP_MPLS
-}
-
-func (e *MPLSEncap) Decode(buf []byte) error {
- if len(buf) < 4 {
- return fmt.Errorf("lack of bytes")
- }
- native := nl.NativeEndian()
- l := native.Uint16(buf)
- if len(buf) < int(l) {
- return fmt.Errorf("lack of bytes")
- }
- buf = buf[:l]
- typ := native.Uint16(buf[2:])
- if typ != nl.MPLS_IPTUNNEL_DST {
- return fmt.Errorf("unknown MPLS Encap Type: %d", typ)
- }
- e.Labels = nl.DecodeMPLSStack(buf[4:])
- return nil
-}
-
-func (e *MPLSEncap) Encode() ([]byte, error) {
- s := nl.EncodeMPLSStack(e.Labels...)
- native := nl.NativeEndian()
- hdr := make([]byte, 4)
- native.PutUint16(hdr, uint16(len(s)+4))
- native.PutUint16(hdr[2:], nl.MPLS_IPTUNNEL_DST)
- return append(hdr, s...), nil
-}
-
-func (e *MPLSEncap) String() string {
- s := make([]string, 0, len(e.Labels))
- for _, l := range e.Labels {
- s = append(s, fmt.Sprintf("%d", l))
- }
- return strings.Join(s, "/")
-}
-
-func (e *MPLSEncap) Equal(x Encap) bool {
- o, ok := x.(*MPLSEncap)
- if !ok {
- return false
- }
- if e == nil && o == nil {
- return true
- }
- if e == nil || o == nil {
- return false
- }
- if e.Labels == nil && o.Labels == nil {
- return true
- }
- if e.Labels == nil || o.Labels == nil {
- return false
- }
- if len(e.Labels) != len(o.Labels) {
- return false
- }
- for i := range e.Labels {
- if e.Labels[i] != o.Labels[i] {
- return false
- }
- }
- return true
-}
-
-// SEG6 definitions
-type SEG6Encap struct {
- Mode int
- Segments []net.IP
-}
-
-func (e *SEG6Encap) Type() int {
- return nl.LWTUNNEL_ENCAP_SEG6
-}
-func (e *SEG6Encap) Decode(buf []byte) error {
- if len(buf) < 4 {
- return fmt.Errorf("lack of bytes")
- }
- native := nl.NativeEndian()
- // Get Length(l) & Type(typ) : 2 + 2 bytes
- l := native.Uint16(buf)
- if len(buf) < int(l) {
- return fmt.Errorf("lack of bytes")
- }
- buf = buf[:l] // make sure buf size upper limit is Length
- typ := native.Uint16(buf[2:])
- if typ != nl.SEG6_IPTUNNEL_SRH {
- return fmt.Errorf("unknown SEG6 Type: %d", typ)
- }
-
- var err error
- e.Mode, e.Segments, err = nl.DecodeSEG6Encap(buf[4:])
-
- return err
-}
-func (e *SEG6Encap) Encode() ([]byte, error) {
- s, err := nl.EncodeSEG6Encap(e.Mode, e.Segments)
- native := nl.NativeEndian()
- hdr := make([]byte, 4)
- native.PutUint16(hdr, uint16(len(s)+4))
- native.PutUint16(hdr[2:], nl.SEG6_IPTUNNEL_SRH)
- return append(hdr, s...), err
-}
-func (e *SEG6Encap) String() string {
- segs := make([]string, 0, len(e.Segments))
- // append segment backwards (from n to 0) since seg#0 is the last segment.
- for i := len(e.Segments); i > 0; i-- {
- segs = append(segs, fmt.Sprintf("%s", e.Segments[i-1]))
- }
- str := fmt.Sprintf("mode %s segs %d [ %s ]", nl.SEG6EncapModeString(e.Mode),
- len(e.Segments), strings.Join(segs, " "))
- return str
-}
-func (e *SEG6Encap) Equal(x Encap) bool {
- o, ok := x.(*SEG6Encap)
- if !ok {
- return false
- }
- if e == o {
- return true
- }
- if e == nil || o == nil {
- return false
- }
- if e.Mode != o.Mode {
- return false
- }
- if len(e.Segments) != len(o.Segments) {
- return false
- }
- for i := range e.Segments {
- if !e.Segments[i].Equal(o.Segments[i]) {
- return false
- }
- }
- return true
-}
-
-// RouteAdd will add a route to the system.
-// Equivalent to: `ip route add $route`
-func RouteAdd(route *Route) error {
- return pkgHandle.RouteAdd(route)
-}
-
-// RouteAdd will add a route to the system.
-// Equivalent to: `ip route add $route`
-func (h *Handle) RouteAdd(route *Route) error {
- flags := unix.NLM_F_CREATE | unix.NLM_F_EXCL | unix.NLM_F_ACK
- req := h.newNetlinkRequest(unix.RTM_NEWROUTE, flags)
- return h.routeHandle(route, req, nl.NewRtMsg())
-}
-
-// RouteReplace will add a route to the system.
-// Equivalent to: `ip route replace $route`
-func RouteReplace(route *Route) error {
- return pkgHandle.RouteReplace(route)
-}
-
-// RouteReplace will add a route to the system.
-// Equivalent to: `ip route replace $route`
-func (h *Handle) RouteReplace(route *Route) error {
- flags := unix.NLM_F_CREATE | unix.NLM_F_REPLACE | unix.NLM_F_ACK
- req := h.newNetlinkRequest(unix.RTM_NEWROUTE, flags)
- return h.routeHandle(route, req, nl.NewRtMsg())
-}
-
-// RouteDel will delete a route from the system.
-// Equivalent to: `ip route del $route`
-func RouteDel(route *Route) error {
- return pkgHandle.RouteDel(route)
-}
-
-// RouteDel will delete a route from the system.
-// Equivalent to: `ip route del $route`
-func (h *Handle) RouteDel(route *Route) error {
- req := h.newNetlinkRequest(unix.RTM_DELROUTE, unix.NLM_F_ACK)
- return h.routeHandle(route, req, nl.NewRtDelMsg())
-}
-
-func (h *Handle) routeHandle(route *Route, req *nl.NetlinkRequest, msg *nl.RtMsg) error {
- if (route.Dst == nil || route.Dst.IP == nil) && route.Src == nil && route.Gw == nil && route.MPLSDst == nil {
- return fmt.Errorf("one of Dst.IP, Src, or Gw must not be nil")
- }
-
- family := -1
- var rtAttrs []*nl.RtAttr
-
- if route.Dst != nil && route.Dst.IP != nil {
- dstLen, _ := route.Dst.Mask.Size()
- msg.Dst_len = uint8(dstLen)
- dstFamily := nl.GetIPFamily(route.Dst.IP)
- family = dstFamily
- var dstData []byte
- if dstFamily == FAMILY_V4 {
- dstData = route.Dst.IP.To4()
- } else {
- dstData = route.Dst.IP.To16()
- }
- rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_DST, dstData))
- } else if route.MPLSDst != nil {
- family = nl.FAMILY_MPLS
- msg.Dst_len = uint8(20)
- msg.Type = unix.RTN_UNICAST
- rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_DST, nl.EncodeMPLSStack(*route.MPLSDst)))
- }
-
- if route.NewDst != nil {
- if family != -1 && family != route.NewDst.Family() {
- return fmt.Errorf("new destination and destination are not the same address family")
- }
- buf, err := route.NewDst.Encode()
- if err != nil {
- return err
- }
- rtAttrs = append(rtAttrs, nl.NewRtAttr(nl.RTA_NEWDST, buf))
- }
-
- if route.Encap != nil {
- buf := make([]byte, 2)
- native.PutUint16(buf, uint16(route.Encap.Type()))
- rtAttrs = append(rtAttrs, nl.NewRtAttr(nl.RTA_ENCAP_TYPE, buf))
- buf, err := route.Encap.Encode()
- if err != nil {
- return err
- }
- rtAttrs = append(rtAttrs, nl.NewRtAttr(nl.RTA_ENCAP, buf))
- }
-
- if route.Src != nil {
- srcFamily := nl.GetIPFamily(route.Src)
- if family != -1 && family != srcFamily {
- return fmt.Errorf("source and destination ip are not the same IP family")
- }
- family = srcFamily
- var srcData []byte
- if srcFamily == FAMILY_V4 {
- srcData = route.Src.To4()
- } else {
- srcData = route.Src.To16()
- }
- // The commonly used src ip for routes is actually PREFSRC
- rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_PREFSRC, srcData))
- }
-
- if route.Gw != nil {
- gwFamily := nl.GetIPFamily(route.Gw)
- if family != -1 && family != gwFamily {
- return fmt.Errorf("gateway, source, and destination ip are not the same IP family")
- }
- family = gwFamily
- var gwData []byte
- if gwFamily == FAMILY_V4 {
- gwData = route.Gw.To4()
- } else {
- gwData = route.Gw.To16()
- }
- rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_GATEWAY, gwData))
- }
-
- if len(route.MultiPath) > 0 {
- buf := []byte{}
- for _, nh := range route.MultiPath {
- rtnh := &nl.RtNexthop{
- RtNexthop: unix.RtNexthop{
- Hops: uint8(nh.Hops),
- Ifindex: int32(nh.LinkIndex),
- Flags: uint8(nh.Flags),
- },
- }
- children := []nl.NetlinkRequestData{}
- if nh.Gw != nil {
- gwFamily := nl.GetIPFamily(nh.Gw)
- if family != -1 && family != gwFamily {
- return fmt.Errorf("gateway, source, and destination ip are not the same IP family")
- }
- if gwFamily == FAMILY_V4 {
- children = append(children, nl.NewRtAttr(unix.RTA_GATEWAY, []byte(nh.Gw.To4())))
- } else {
- children = append(children, nl.NewRtAttr(unix.RTA_GATEWAY, []byte(nh.Gw.To16())))
- }
- }
- if nh.NewDst != nil {
- if family != -1 && family != nh.NewDst.Family() {
- return fmt.Errorf("new destination and destination are not the same address family")
- }
- buf, err := nh.NewDst.Encode()
- if err != nil {
- return err
- }
- children = append(children, nl.NewRtAttr(nl.RTA_NEWDST, buf))
- }
- if nh.Encap != nil {
- buf := make([]byte, 2)
- native.PutUint16(buf, uint16(nh.Encap.Type()))
- rtAttrs = append(rtAttrs, nl.NewRtAttr(nl.RTA_ENCAP_TYPE, buf))
- buf, err := nh.Encap.Encode()
- if err != nil {
- return err
- }
- children = append(children, nl.NewRtAttr(nl.RTA_ENCAP, buf))
- }
- rtnh.Children = children
- buf = append(buf, rtnh.Serialize()...)
- }
- rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_MULTIPATH, buf))
- }
-
- if route.Table > 0 {
- if route.Table >= 256 {
- msg.Table = unix.RT_TABLE_UNSPEC
- b := make([]byte, 4)
- native.PutUint32(b, uint32(route.Table))
- rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_TABLE, b))
- } else {
- msg.Table = uint8(route.Table)
- }
- }
-
- if route.Priority > 0 {
- b := make([]byte, 4)
- native.PutUint32(b, uint32(route.Priority))
- rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_PRIORITY, b))
- }
- if route.Tos > 0 {
- msg.Tos = uint8(route.Tos)
- }
- if route.Protocol > 0 {
- msg.Protocol = uint8(route.Protocol)
- }
- if route.Type > 0 {
- msg.Type = uint8(route.Type)
- }
-
- var metrics []*nl.RtAttr
- // TODO: support other rta_metric values
- if route.MTU > 0 {
- b := nl.Uint32Attr(uint32(route.MTU))
- metrics = append(metrics, nl.NewRtAttr(unix.RTAX_MTU, b))
- }
- if route.AdvMSS > 0 {
- b := nl.Uint32Attr(uint32(route.AdvMSS))
- metrics = append(metrics, nl.NewRtAttr(unix.RTAX_ADVMSS, b))
- }
-
- if metrics != nil {
- attr := nl.NewRtAttr(unix.RTA_METRICS, nil)
- for _, metric := range metrics {
- attr.AddChild(metric)
- }
- rtAttrs = append(rtAttrs, attr)
- }
-
- msg.Flags = uint32(route.Flags)
- msg.Scope = uint8(route.Scope)
- msg.Family = uint8(family)
- req.AddData(msg)
- for _, attr := range rtAttrs {
- req.AddData(attr)
- }
-
- var (
- b = make([]byte, 4)
- native = nl.NativeEndian()
- )
- native.PutUint32(b, uint32(route.LinkIndex))
-
- req.AddData(nl.NewRtAttr(unix.RTA_OIF, b))
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// RouteList gets a list of routes in the system.
-// Equivalent to: `ip route show`.
-// The list can be filtered by link and ip family.
-func RouteList(link Link, family int) ([]Route, error) {
- return pkgHandle.RouteList(link, family)
-}
-
-// RouteList gets a list of routes in the system.
-// Equivalent to: `ip route show`.
-// The list can be filtered by link and ip family.
-func (h *Handle) RouteList(link Link, family int) ([]Route, error) {
- var routeFilter *Route
- if link != nil {
- routeFilter = &Route{
- LinkIndex: link.Attrs().Index,
- }
- }
- return h.RouteListFiltered(family, routeFilter, RT_FILTER_OIF)
-}
-
-// RouteListFiltered gets a list of routes in the system filtered with specified rules.
-// All rules must be defined in RouteFilter struct
-func RouteListFiltered(family int, filter *Route, filterMask uint64) ([]Route, error) {
- return pkgHandle.RouteListFiltered(family, filter, filterMask)
-}
-
-// RouteListFiltered gets a list of routes in the system filtered with specified rules.
-// All rules must be defined in RouteFilter struct
-func (h *Handle) RouteListFiltered(family int, filter *Route, filterMask uint64) ([]Route, error) {
- req := h.newNetlinkRequest(unix.RTM_GETROUTE, unix.NLM_F_DUMP)
- infmsg := nl.NewIfInfomsg(family)
- req.AddData(infmsg)
-
- msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWROUTE)
- if err != nil {
- return nil, err
- }
-
- var res []Route
- for _, m := range msgs {
- msg := nl.DeserializeRtMsg(m)
- if msg.Flags&unix.RTM_F_CLONED != 0 {
- // Ignore cloned routes
- continue
- }
- if msg.Table != unix.RT_TABLE_MAIN {
- if filter == nil || filter != nil && filterMask&RT_FILTER_TABLE == 0 {
- // Ignore non-main tables
- continue
- }
- }
- route, err := deserializeRoute(m)
- if err != nil {
- return nil, err
- }
- if filter != nil {
- switch {
- case filterMask&RT_FILTER_TABLE != 0 && filter.Table != unix.RT_TABLE_UNSPEC && route.Table != filter.Table:
- continue
- case filterMask&RT_FILTER_PROTOCOL != 0 && route.Protocol != filter.Protocol:
- continue
- case filterMask&RT_FILTER_SCOPE != 0 && route.Scope != filter.Scope:
- continue
- case filterMask&RT_FILTER_TYPE != 0 && route.Type != filter.Type:
- continue
- case filterMask&RT_FILTER_TOS != 0 && route.Tos != filter.Tos:
- continue
- case filterMask&RT_FILTER_OIF != 0 && route.LinkIndex != filter.LinkIndex:
- continue
- case filterMask&RT_FILTER_IIF != 0 && route.ILinkIndex != filter.ILinkIndex:
- continue
- case filterMask&RT_FILTER_GW != 0 && !route.Gw.Equal(filter.Gw):
- continue
- case filterMask&RT_FILTER_SRC != 0 && !route.Src.Equal(filter.Src):
- continue
- case filterMask&RT_FILTER_DST != 0:
- if filter.MPLSDst == nil || route.MPLSDst == nil || (*filter.MPLSDst) != (*route.MPLSDst) {
- if !ipNetEqual(route.Dst, filter.Dst) {
- continue
- }
- }
- }
- }
- res = append(res, route)
- }
- return res, nil
-}
-
-// deserializeRoute decodes a binary netlink message into a Route struct
-func deserializeRoute(m []byte) (Route, error) {
- msg := nl.DeserializeRtMsg(m)
- attrs, err := nl.ParseRouteAttr(m[msg.Len():])
- if err != nil {
- return Route{}, err
- }
- route := Route{
- Scope: Scope(msg.Scope),
- Protocol: int(msg.Protocol),
- Table: int(msg.Table),
- Type: int(msg.Type),
- Tos: int(msg.Tos),
- Flags: int(msg.Flags),
- }
-
- native := nl.NativeEndian()
- var encap, encapType syscall.NetlinkRouteAttr
- for _, attr := range attrs {
- switch attr.Attr.Type {
- case unix.RTA_GATEWAY:
- route.Gw = net.IP(attr.Value)
- case unix.RTA_PREFSRC:
- route.Src = net.IP(attr.Value)
- case unix.RTA_DST:
- if msg.Family == nl.FAMILY_MPLS {
- stack := nl.DecodeMPLSStack(attr.Value)
- if len(stack) == 0 || len(stack) > 1 {
- return route, fmt.Errorf("invalid MPLS RTA_DST")
- }
- route.MPLSDst = &stack[0]
- } else {
- route.Dst = &net.IPNet{
- IP: attr.Value,
- Mask: net.CIDRMask(int(msg.Dst_len), 8*len(attr.Value)),
- }
- }
- case unix.RTA_OIF:
- route.LinkIndex = int(native.Uint32(attr.Value[0:4]))
- case unix.RTA_IIF:
- route.ILinkIndex = int(native.Uint32(attr.Value[0:4]))
- case unix.RTA_PRIORITY:
- route.Priority = int(native.Uint32(attr.Value[0:4]))
- case unix.RTA_TABLE:
- route.Table = int(native.Uint32(attr.Value[0:4]))
- case unix.RTA_MULTIPATH:
- parseRtNexthop := func(value []byte) (*NexthopInfo, []byte, error) {
- if len(value) < unix.SizeofRtNexthop {
- return nil, nil, fmt.Errorf("lack of bytes")
- }
- nh := nl.DeserializeRtNexthop(value)
- if len(value) < int(nh.RtNexthop.Len) {
- return nil, nil, fmt.Errorf("lack of bytes")
- }
- info := &NexthopInfo{
- LinkIndex: int(nh.RtNexthop.Ifindex),
- Hops: int(nh.RtNexthop.Hops),
- Flags: int(nh.RtNexthop.Flags),
- }
- attrs, err := nl.ParseRouteAttr(value[unix.SizeofRtNexthop:int(nh.RtNexthop.Len)])
- if err != nil {
- return nil, nil, err
- }
- var encap, encapType syscall.NetlinkRouteAttr
- for _, attr := range attrs {
- switch attr.Attr.Type {
- case unix.RTA_GATEWAY:
- info.Gw = net.IP(attr.Value)
- case nl.RTA_NEWDST:
- var d Destination
- switch msg.Family {
- case nl.FAMILY_MPLS:
- d = &MPLSDestination{}
- }
- if err := d.Decode(attr.Value); err != nil {
- return nil, nil, err
- }
- info.NewDst = d
- case nl.RTA_ENCAP_TYPE:
- encapType = attr
- case nl.RTA_ENCAP:
- encap = attr
- }
- }
-
- if len(encap.Value) != 0 && len(encapType.Value) != 0 {
- typ := int(native.Uint16(encapType.Value[0:2]))
- var e Encap
- switch typ {
- case nl.LWTUNNEL_ENCAP_MPLS:
- e = &MPLSEncap{}
- if err := e.Decode(encap.Value); err != nil {
- return nil, nil, err
- }
- }
- info.Encap = e
- }
-
- return info, value[int(nh.RtNexthop.Len):], nil
- }
- rest := attr.Value
- for len(rest) > 0 {
- info, buf, err := parseRtNexthop(rest)
- if err != nil {
- return route, err
- }
- route.MultiPath = append(route.MultiPath, info)
- rest = buf
- }
- case nl.RTA_NEWDST:
- var d Destination
- switch msg.Family {
- case nl.FAMILY_MPLS:
- d = &MPLSDestination{}
- }
- if err := d.Decode(attr.Value); err != nil {
- return route, err
- }
- route.NewDst = d
- case nl.RTA_ENCAP_TYPE:
- encapType = attr
- case nl.RTA_ENCAP:
- encap = attr
- case unix.RTA_METRICS:
- metrics, err := nl.ParseRouteAttr(attr.Value)
- if err != nil {
- return route, err
- }
- for _, metric := range metrics {
- switch metric.Attr.Type {
- case unix.RTAX_MTU:
- route.MTU = int(native.Uint32(metric.Value[0:4]))
- case unix.RTAX_ADVMSS:
- route.AdvMSS = int(native.Uint32(metric.Value[0:4]))
- }
- }
- }
- }
-
- if len(encap.Value) != 0 && len(encapType.Value) != 0 {
- typ := int(native.Uint16(encapType.Value[0:2]))
- var e Encap
- switch typ {
- case nl.LWTUNNEL_ENCAP_MPLS:
- e = &MPLSEncap{}
- if err := e.Decode(encap.Value); err != nil {
- return route, err
- }
- case nl.LWTUNNEL_ENCAP_SEG6:
- e = &SEG6Encap{}
- if err := e.Decode(encap.Value); err != nil {
- return route, err
- }
- }
- route.Encap = e
- }
-
- return route, nil
-}
-
-// RouteGet gets a route to a specific destination from the host system.
-// Equivalent to: 'ip route get'.
-func RouteGet(destination net.IP) ([]Route, error) {
- return pkgHandle.RouteGet(destination)
-}
-
-// RouteGet gets a route to a specific destination from the host system.
-// Equivalent to: 'ip route get'.
-func (h *Handle) RouteGet(destination net.IP) ([]Route, error) {
- req := h.newNetlinkRequest(unix.RTM_GETROUTE, unix.NLM_F_REQUEST)
- family := nl.GetIPFamily(destination)
- var destinationData []byte
- var bitlen uint8
- if family == FAMILY_V4 {
- destinationData = destination.To4()
- bitlen = 32
- } else {
- destinationData = destination.To16()
- bitlen = 128
- }
- msg := &nl.RtMsg{}
- msg.Family = uint8(family)
- msg.Dst_len = bitlen
- req.AddData(msg)
-
- rtaDst := nl.NewRtAttr(unix.RTA_DST, destinationData)
- req.AddData(rtaDst)
-
- msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWROUTE)
- if err != nil {
- return nil, err
- }
-
- var res []Route
- for _, m := range msgs {
- route, err := deserializeRoute(m)
- if err != nil {
- return nil, err
- }
- res = append(res, route)
- }
- return res, nil
-
-}
-
-// RouteSubscribe takes a chan down which notifications will be sent
-// when routes are added or deleted. Close the 'done' chan to stop subscription.
-func RouteSubscribe(ch chan<- RouteUpdate, done <-chan struct{}) error {
- return routeSubscribeAt(netns.None(), netns.None(), ch, done, nil, false)
-}
-
-// RouteSubscribeAt works like RouteSubscribe plus it allows the caller
-// to choose the network namespace in which to subscribe (ns).
-func RouteSubscribeAt(ns netns.NsHandle, ch chan<- RouteUpdate, done <-chan struct{}) error {
- return routeSubscribeAt(ns, netns.None(), ch, done, nil, false)
-}
-
-// RouteSubscribeOptions contains a set of options to use with
-// RouteSubscribeWithOptions.
-type RouteSubscribeOptions struct {
- Namespace *netns.NsHandle
- ErrorCallback func(error)
- ListExisting bool
-}
-
-// RouteSubscribeWithOptions work like RouteSubscribe but enable to
-// provide additional options to modify the behavior. Currently, the
-// namespace can be provided as well as an error callback.
-func RouteSubscribeWithOptions(ch chan<- RouteUpdate, done <-chan struct{}, options RouteSubscribeOptions) error {
- if options.Namespace == nil {
- none := netns.None()
- options.Namespace = &none
- }
- return routeSubscribeAt(*options.Namespace, netns.None(), ch, done, options.ErrorCallback, options.ListExisting)
-}
-
-func routeSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- RouteUpdate, done <-chan struct{}, cberr func(error), listExisting bool) error {
- s, err := nl.SubscribeAt(newNs, curNs, unix.NETLINK_ROUTE, unix.RTNLGRP_IPV4_ROUTE, unix.RTNLGRP_IPV6_ROUTE)
- if err != nil {
- return err
- }
- if done != nil {
- go func() {
- <-done
- s.Close()
- }()
- }
- if listExisting {
- req := pkgHandle.newNetlinkRequest(unix.RTM_GETROUTE,
- unix.NLM_F_DUMP)
- infmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)
- req.AddData(infmsg)
- if err := s.Send(req); err != nil {
- return err
- }
- }
- go func() {
- defer close(ch)
- for {
- msgs, err := s.Receive()
- if err != nil {
- if cberr != nil {
- cberr(err)
- }
- return
- }
- for _, m := range msgs {
- if m.Header.Type == unix.NLMSG_DONE {
- continue
- }
- if m.Header.Type == unix.NLMSG_ERROR {
- native := nl.NativeEndian()
- error := int32(native.Uint32(m.Data[0:4]))
- if error == 0 {
- continue
- }
- if cberr != nil {
- cberr(syscall.Errno(-error))
- }
- return
- }
- route, err := deserializeRoute(m.Data)
- if err != nil {
- if cberr != nil {
- cberr(err)
- }
- return
- }
- ch <- RouteUpdate{Type: m.Header.Type, Route: route}
- }
- }
- }()
-
- return nil
-}
diff --git a/vendor/github.com/vishvananda/netlink/route_unspecified.go b/vendor/github.com/vishvananda/netlink/route_unspecified.go
deleted file mode 100644
index 2701862..0000000
--- a/vendor/github.com/vishvananda/netlink/route_unspecified.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build !linux
-
-package netlink
-
-func (r *Route) ListFlags() []string {
- return []string{}
-}
-
-func (n *NexthopInfo) ListFlags() []string {
- return []string{}
-}
diff --git a/vendor/github.com/vishvananda/netlink/rule.go b/vendor/github.com/vishvananda/netlink/rule.go
deleted file mode 100644
index 7fc8ae5..0000000
--- a/vendor/github.com/vishvananda/netlink/rule.go
+++ /dev/null
@@ -1,42 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "net"
-)
-
-// Rule represents a netlink rule.
-type Rule struct {
- Priority int
- Family int
- Table int
- Mark int
- Mask int
- TunID uint
- Goto int
- Src *net.IPNet
- Dst *net.IPNet
- Flow int
- IifName string
- OifName string
- SuppressIfgroup int
- SuppressPrefixlen int
- Invert bool
-}
-
-func (r Rule) String() string {
- return fmt.Sprintf("ip rule %d: from %s table %d", r.Priority, r.Src, r.Table)
-}
-
-// NewRule return empty rules.
-func NewRule() *Rule {
- return &Rule{
- SuppressIfgroup: -1,
- SuppressPrefixlen: -1,
- Priority: -1,
- Mark: -1,
- Mask: -1,
- Goto: -1,
- Flow: -1,
- }
-}
diff --git a/vendor/github.com/vishvananda/netlink/rule_linux.go b/vendor/github.com/vishvananda/netlink/rule_linux.go
deleted file mode 100644
index 6238ae4..0000000
--- a/vendor/github.com/vishvananda/netlink/rule_linux.go
+++ /dev/null
@@ -1,234 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "net"
-
- "github.com/vishvananda/netlink/nl"
- "golang.org/x/sys/unix"
-)
-
-const FibRuleInvert = 0x2
-
-// RuleAdd adds a rule to the system.
-// Equivalent to: ip rule add
-func RuleAdd(rule *Rule) error {
- return pkgHandle.RuleAdd(rule)
-}
-
-// RuleAdd adds a rule to the system.
-// Equivalent to: ip rule add
-func (h *Handle) RuleAdd(rule *Rule) error {
- req := h.newNetlinkRequest(unix.RTM_NEWRULE, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
- return ruleHandle(rule, req)
-}
-
-// RuleDel deletes a rule from the system.
-// Equivalent to: ip rule del
-func RuleDel(rule *Rule) error {
- return pkgHandle.RuleDel(rule)
-}
-
-// RuleDel deletes a rule from the system.
-// Equivalent to: ip rule del
-func (h *Handle) RuleDel(rule *Rule) error {
- req := h.newNetlinkRequest(unix.RTM_DELRULE, unix.NLM_F_ACK)
- return ruleHandle(rule, req)
-}
-
-func ruleHandle(rule *Rule, req *nl.NetlinkRequest) error {
- msg := nl.NewRtMsg()
- msg.Family = unix.AF_INET
- msg.Protocol = unix.RTPROT_BOOT
- msg.Scope = unix.RT_SCOPE_UNIVERSE
- msg.Table = unix.RT_TABLE_UNSPEC
- msg.Type = unix.RTN_UNSPEC
- if req.NlMsghdr.Flags&unix.NLM_F_CREATE > 0 {
- msg.Type = unix.RTN_UNICAST
- }
- if rule.Invert {
- msg.Flags |= FibRuleInvert
- }
- if rule.Family != 0 {
- msg.Family = uint8(rule.Family)
- }
- if rule.Table >= 0 && rule.Table < 256 {
- msg.Table = uint8(rule.Table)
- }
-
- var dstFamily uint8
- var rtAttrs []*nl.RtAttr
- if rule.Dst != nil && rule.Dst.IP != nil {
- dstLen, _ := rule.Dst.Mask.Size()
- msg.Dst_len = uint8(dstLen)
- msg.Family = uint8(nl.GetIPFamily(rule.Dst.IP))
- dstFamily = msg.Family
- var dstData []byte
- if msg.Family == unix.AF_INET {
- dstData = rule.Dst.IP.To4()
- } else {
- dstData = rule.Dst.IP.To16()
- }
- rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_DST, dstData))
- }
-
- if rule.Src != nil && rule.Src.IP != nil {
- msg.Family = uint8(nl.GetIPFamily(rule.Src.IP))
- if dstFamily != 0 && dstFamily != msg.Family {
- return fmt.Errorf("source and destination ip are not the same IP family")
- }
- srcLen, _ := rule.Src.Mask.Size()
- msg.Src_len = uint8(srcLen)
- var srcData []byte
- if msg.Family == unix.AF_INET {
- srcData = rule.Src.IP.To4()
- } else {
- srcData = rule.Src.IP.To16()
- }
- rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_SRC, srcData))
- }
-
- req.AddData(msg)
- for i := range rtAttrs {
- req.AddData(rtAttrs[i])
- }
-
- native := nl.NativeEndian()
-
- if rule.Priority >= 0 {
- b := make([]byte, 4)
- native.PutUint32(b, uint32(rule.Priority))
- req.AddData(nl.NewRtAttr(nl.FRA_PRIORITY, b))
- }
- if rule.Mark >= 0 {
- b := make([]byte, 4)
- native.PutUint32(b, uint32(rule.Mark))
- req.AddData(nl.NewRtAttr(nl.FRA_FWMARK, b))
- }
- if rule.Mask >= 0 {
- b := make([]byte, 4)
- native.PutUint32(b, uint32(rule.Mask))
- req.AddData(nl.NewRtAttr(nl.FRA_FWMASK, b))
- }
- if rule.Flow >= 0 {
- b := make([]byte, 4)
- native.PutUint32(b, uint32(rule.Flow))
- req.AddData(nl.NewRtAttr(nl.FRA_FLOW, b))
- }
- if rule.TunID > 0 {
- b := make([]byte, 4)
- native.PutUint32(b, uint32(rule.TunID))
- req.AddData(nl.NewRtAttr(nl.FRA_TUN_ID, b))
- }
- if rule.Table >= 256 {
- b := make([]byte, 4)
- native.PutUint32(b, uint32(rule.Table))
- req.AddData(nl.NewRtAttr(nl.FRA_TABLE, b))
- }
- if msg.Table > 0 {
- if rule.SuppressPrefixlen >= 0 {
- b := make([]byte, 4)
- native.PutUint32(b, uint32(rule.SuppressPrefixlen))
- req.AddData(nl.NewRtAttr(nl.FRA_SUPPRESS_PREFIXLEN, b))
- }
- if rule.SuppressIfgroup >= 0 {
- b := make([]byte, 4)
- native.PutUint32(b, uint32(rule.SuppressIfgroup))
- req.AddData(nl.NewRtAttr(nl.FRA_SUPPRESS_IFGROUP, b))
- }
- }
- if rule.IifName != "" {
- req.AddData(nl.NewRtAttr(nl.FRA_IIFNAME, []byte(rule.IifName)))
- }
- if rule.OifName != "" {
- req.AddData(nl.NewRtAttr(nl.FRA_OIFNAME, []byte(rule.OifName)))
- }
- if rule.Goto >= 0 {
- msg.Type = nl.FR_ACT_NOP
- b := make([]byte, 4)
- native.PutUint32(b, uint32(rule.Goto))
- req.AddData(nl.NewRtAttr(nl.FRA_GOTO, b))
- }
-
- _, err := req.Execute(unix.NETLINK_ROUTE, 0)
- return err
-}
-
-// RuleList lists rules in the system.
-// Equivalent to: ip rule list
-func RuleList(family int) ([]Rule, error) {
- return pkgHandle.RuleList(family)
-}
-
-// RuleList lists rules in the system.
-// Equivalent to: ip rule list
-func (h *Handle) RuleList(family int) ([]Rule, error) {
- req := h.newNetlinkRequest(unix.RTM_GETRULE, unix.NLM_F_DUMP|unix.NLM_F_REQUEST)
- msg := nl.NewIfInfomsg(family)
- req.AddData(msg)
-
- msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWRULE)
- if err != nil {
- return nil, err
- }
-
- native := nl.NativeEndian()
- var res = make([]Rule, 0)
- for i := range msgs {
- msg := nl.DeserializeRtMsg(msgs[i])
- attrs, err := nl.ParseRouteAttr(msgs[i][msg.Len():])
- if err != nil {
- return nil, err
- }
-
- rule := NewRule()
-
- rule.Invert = msg.Flags&FibRuleInvert > 0
-
- for j := range attrs {
- switch attrs[j].Attr.Type {
- case unix.RTA_TABLE:
- rule.Table = int(native.Uint32(attrs[j].Value[0:4]))
- case nl.FRA_SRC:
- rule.Src = &net.IPNet{
- IP: attrs[j].Value,
- Mask: net.CIDRMask(int(msg.Src_len), 8*len(attrs[j].Value)),
- }
- case nl.FRA_DST:
- rule.Dst = &net.IPNet{
- IP: attrs[j].Value,
- Mask: net.CIDRMask(int(msg.Dst_len), 8*len(attrs[j].Value)),
- }
- case nl.FRA_FWMARK:
- rule.Mark = int(native.Uint32(attrs[j].Value[0:4]))
- case nl.FRA_FWMASK:
- rule.Mask = int(native.Uint32(attrs[j].Value[0:4]))
- case nl.FRA_TUN_ID:
- rule.TunID = uint(native.Uint64(attrs[j].Value[0:4]))
- case nl.FRA_IIFNAME:
- rule.IifName = string(attrs[j].Value[:len(attrs[j].Value)-1])
- case nl.FRA_OIFNAME:
- rule.OifName = string(attrs[j].Value[:len(attrs[j].Value)-1])
- case nl.FRA_SUPPRESS_PREFIXLEN:
- i := native.Uint32(attrs[j].Value[0:4])
- if i != 0xffffffff {
- rule.SuppressPrefixlen = int(i)
- }
- case nl.FRA_SUPPRESS_IFGROUP:
- i := native.Uint32(attrs[j].Value[0:4])
- if i != 0xffffffff {
- rule.SuppressIfgroup = int(i)
- }
- case nl.FRA_FLOW:
- rule.Flow = int(native.Uint32(attrs[j].Value[0:4]))
- case nl.FRA_GOTO:
- rule.Goto = int(native.Uint32(attrs[j].Value[0:4]))
- case nl.FRA_PRIORITY:
- rule.Priority = int(native.Uint32(attrs[j].Value[0:4]))
- }
- }
- res = append(res, *rule)
- }
-
- return res, nil
-}
diff --git a/vendor/github.com/vishvananda/netlink/socket.go b/vendor/github.com/vishvananda/netlink/socket.go
deleted file mode 100644
index 41aa726..0000000
--- a/vendor/github.com/vishvananda/netlink/socket.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package netlink
-
-import "net"
-
-// SocketID identifies a single socket.
-type SocketID struct {
- SourcePort uint16
- DestinationPort uint16
- Source net.IP
- Destination net.IP
- Interface uint32
- Cookie [2]uint32
-}
-
-// Socket represents a netlink socket.
-type Socket struct {
- Family uint8
- State uint8
- Timer uint8
- Retrans uint8
- ID SocketID
- Expires uint32
- RQueue uint32
- WQueue uint32
- UID uint32
- INode uint32
-}
diff --git a/vendor/github.com/vishvananda/netlink/socket_linux.go b/vendor/github.com/vishvananda/netlink/socket_linux.go
deleted file mode 100644
index 99e9fb4..0000000
--- a/vendor/github.com/vishvananda/netlink/socket_linux.go
+++ /dev/null
@@ -1,159 +0,0 @@
-package netlink
-
-import (
- "errors"
- "fmt"
- "net"
-
- "github.com/vishvananda/netlink/nl"
- "golang.org/x/sys/unix"
-)
-
-const (
- sizeofSocketID = 0x30
- sizeofSocketRequest = sizeofSocketID + 0x8
- sizeofSocket = sizeofSocketID + 0x18
-)
-
-type socketRequest struct {
- Family uint8
- Protocol uint8
- Ext uint8
- pad uint8
- States uint32
- ID SocketID
-}
-
-type writeBuffer struct {
- Bytes []byte
- pos int
-}
-
-func (b *writeBuffer) Write(c byte) {
- b.Bytes[b.pos] = c
- b.pos++
-}
-
-func (b *writeBuffer) Next(n int) []byte {
- s := b.Bytes[b.pos : b.pos+n]
- b.pos += n
- return s
-}
-
-func (r *socketRequest) Serialize() []byte {
- b := writeBuffer{Bytes: make([]byte, sizeofSocketRequest)}
- b.Write(r.Family)
- b.Write(r.Protocol)
- b.Write(r.Ext)
- b.Write(r.pad)
- native.PutUint32(b.Next(4), r.States)
- networkOrder.PutUint16(b.Next(2), r.ID.SourcePort)
- networkOrder.PutUint16(b.Next(2), r.ID.DestinationPort)
- copy(b.Next(4), r.ID.Source.To4())
- b.Next(12)
- copy(b.Next(4), r.ID.Destination.To4())
- b.Next(12)
- native.PutUint32(b.Next(4), r.ID.Interface)
- native.PutUint32(b.Next(4), r.ID.Cookie[0])
- native.PutUint32(b.Next(4), r.ID.Cookie[1])
- return b.Bytes
-}
-
-func (r *socketRequest) Len() int { return sizeofSocketRequest }
-
-type readBuffer struct {
- Bytes []byte
- pos int
-}
-
-func (b *readBuffer) Read() byte {
- c := b.Bytes[b.pos]
- b.pos++
- return c
-}
-
-func (b *readBuffer) Next(n int) []byte {
- s := b.Bytes[b.pos : b.pos+n]
- b.pos += n
- return s
-}
-
-func (s *Socket) deserialize(b []byte) error {
- if len(b) < sizeofSocket {
- return fmt.Errorf("socket data short read (%d); want %d", len(b), sizeofSocket)
- }
- rb := readBuffer{Bytes: b}
- s.Family = rb.Read()
- s.State = rb.Read()
- s.Timer = rb.Read()
- s.Retrans = rb.Read()
- s.ID.SourcePort = networkOrder.Uint16(rb.Next(2))
- s.ID.DestinationPort = networkOrder.Uint16(rb.Next(2))
- s.ID.Source = net.IPv4(rb.Read(), rb.Read(), rb.Read(), rb.Read())
- rb.Next(12)
- s.ID.Destination = net.IPv4(rb.Read(), rb.Read(), rb.Read(), rb.Read())
- rb.Next(12)
- s.ID.Interface = native.Uint32(rb.Next(4))
- s.ID.Cookie[0] = native.Uint32(rb.Next(4))
- s.ID.Cookie[1] = native.Uint32(rb.Next(4))
- s.Expires = native.Uint32(rb.Next(4))
- s.RQueue = native.Uint32(rb.Next(4))
- s.WQueue = native.Uint32(rb.Next(4))
- s.UID = native.Uint32(rb.Next(4))
- s.INode = native.Uint32(rb.Next(4))
- return nil
-}
-
-// SocketGet returns the Socket identified by its local and remote addresses.
-func SocketGet(local, remote net.Addr) (*Socket, error) {
- localTCP, ok := local.(*net.TCPAddr)
- if !ok {
- return nil, ErrNotImplemented
- }
- remoteTCP, ok := remote.(*net.TCPAddr)
- if !ok {
- return nil, ErrNotImplemented
- }
- localIP := localTCP.IP.To4()
- if localIP == nil {
- return nil, ErrNotImplemented
- }
- remoteIP := remoteTCP.IP.To4()
- if remoteIP == nil {
- return nil, ErrNotImplemented
- }
-
- s, err := nl.Subscribe(unix.NETLINK_INET_DIAG)
- if err != nil {
- return nil, err
- }
- defer s.Close()
- req := nl.NewNetlinkRequest(nl.SOCK_DIAG_BY_FAMILY, 0)
- req.AddData(&socketRequest{
- Family: unix.AF_INET,
- Protocol: unix.IPPROTO_TCP,
- ID: SocketID{
- SourcePort: uint16(localTCP.Port),
- DestinationPort: uint16(remoteTCP.Port),
- Source: localIP,
- Destination: remoteIP,
- Cookie: [2]uint32{nl.TCPDIAG_NOCOOKIE, nl.TCPDIAG_NOCOOKIE},
- },
- })
- s.Send(req)
- msgs, err := s.Receive()
- if err != nil {
- return nil, err
- }
- if len(msgs) == 0 {
- return nil, errors.New("no message nor error from netlink")
- }
- if len(msgs) > 2 {
- return nil, fmt.Errorf("multiple (%d) matching sockets", len(msgs))
- }
- sock := &Socket{}
- if err := sock.deserialize(msgs[0].Data); err != nil {
- return nil, err
- }
- return sock, nil
-}
diff --git a/vendor/github.com/vishvananda/netlink/xfrm.go b/vendor/github.com/vishvananda/netlink/xfrm.go
deleted file mode 100644
index 02b4184..0000000
--- a/vendor/github.com/vishvananda/netlink/xfrm.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package netlink
-
-import (
- "fmt"
-
- "golang.org/x/sys/unix"
-)
-
-// Proto is an enum representing an ipsec protocol.
-type Proto uint8
-
-const (
- XFRM_PROTO_ROUTE2 Proto = unix.IPPROTO_ROUTING
- XFRM_PROTO_ESP Proto = unix.IPPROTO_ESP
- XFRM_PROTO_AH Proto = unix.IPPROTO_AH
- XFRM_PROTO_HAO Proto = unix.IPPROTO_DSTOPTS
- XFRM_PROTO_COMP Proto = 0x6c // NOTE not defined on darwin
- XFRM_PROTO_IPSEC_ANY Proto = unix.IPPROTO_RAW
-)
-
-func (p Proto) String() string {
- switch p {
- case XFRM_PROTO_ROUTE2:
- return "route2"
- case XFRM_PROTO_ESP:
- return "esp"
- case XFRM_PROTO_AH:
- return "ah"
- case XFRM_PROTO_HAO:
- return "hao"
- case XFRM_PROTO_COMP:
- return "comp"
- case XFRM_PROTO_IPSEC_ANY:
- return "ipsec-any"
- }
- return fmt.Sprintf("%d", p)
-}
-
-// Mode is an enum representing an ipsec transport.
-type Mode uint8
-
-const (
- XFRM_MODE_TRANSPORT Mode = iota
- XFRM_MODE_TUNNEL
- XFRM_MODE_ROUTEOPTIMIZATION
- XFRM_MODE_IN_TRIGGER
- XFRM_MODE_BEET
- XFRM_MODE_MAX
-)
-
-func (m Mode) String() string {
- switch m {
- case XFRM_MODE_TRANSPORT:
- return "transport"
- case XFRM_MODE_TUNNEL:
- return "tunnel"
- case XFRM_MODE_ROUTEOPTIMIZATION:
- return "ro"
- case XFRM_MODE_IN_TRIGGER:
- return "in_trigger"
- case XFRM_MODE_BEET:
- return "beet"
- }
- return fmt.Sprintf("%d", m)
-}
-
-// XfrmMark represents the mark associated to the state or policy
-type XfrmMark struct {
- Value uint32
- Mask uint32
-}
-
-func (m *XfrmMark) String() string {
- return fmt.Sprintf("(0x%x,0x%x)", m.Value, m.Mask)
-}
diff --git a/vendor/github.com/vishvananda/netlink/xfrm_monitor_linux.go b/vendor/github.com/vishvananda/netlink/xfrm_monitor_linux.go
deleted file mode 100644
index efe72dd..0000000
--- a/vendor/github.com/vishvananda/netlink/xfrm_monitor_linux.go
+++ /dev/null
@@ -1,97 +0,0 @@
-package netlink
-
-import (
- "fmt"
-
- "github.com/vishvananda/netlink/nl"
- "github.com/vishvananda/netns"
- "golang.org/x/sys/unix"
-)
-
-type XfrmMsg interface {
- Type() nl.XfrmMsgType
-}
-
-type XfrmMsgExpire struct {
- XfrmState *XfrmState
- Hard bool
-}
-
-func (ue *XfrmMsgExpire) Type() nl.XfrmMsgType {
- return nl.XFRM_MSG_EXPIRE
-}
-
-func parseXfrmMsgExpire(b []byte) *XfrmMsgExpire {
- var e XfrmMsgExpire
-
- msg := nl.DeserializeXfrmUserExpire(b)
- e.XfrmState = xfrmStateFromXfrmUsersaInfo(&msg.XfrmUsersaInfo)
- e.Hard = msg.Hard == 1
-
- return &e
-}
-
-func XfrmMonitor(ch chan<- XfrmMsg, done <-chan struct{}, errorChan chan<- error,
- types ...nl.XfrmMsgType) error {
-
- groups, err := xfrmMcastGroups(types)
- if err != nil {
- return nil
- }
- s, err := nl.SubscribeAt(netns.None(), netns.None(), unix.NETLINK_XFRM, groups...)
- if err != nil {
- return err
- }
-
- if done != nil {
- go func() {
- <-done
- s.Close()
- }()
-
- }
-
- go func() {
- defer close(ch)
- for {
- msgs, err := s.Receive()
- if err != nil {
- errorChan <- err
- return
- }
- for _, m := range msgs {
- switch m.Header.Type {
- case nl.XFRM_MSG_EXPIRE:
- ch <- parseXfrmMsgExpire(m.Data)
- default:
- errorChan <- fmt.Errorf("unsupported msg type: %x", m.Header.Type)
- }
- }
- }
- }()
-
- return nil
-}
-
-func xfrmMcastGroups(types []nl.XfrmMsgType) ([]uint, error) {
- groups := make([]uint, 0)
-
- if len(types) == 0 {
- return nil, fmt.Errorf("no xfrm msg type specified")
- }
-
- for _, t := range types {
- var group uint
-
- switch t {
- case nl.XFRM_MSG_EXPIRE:
- group = nl.XFRMNLGRP_EXPIRE
- default:
- return nil, fmt.Errorf("unsupported group: %x", t)
- }
-
- groups = append(groups, group)
- }
-
- return groups, nil
-}
diff --git a/vendor/github.com/vishvananda/netlink/xfrm_policy.go b/vendor/github.com/vishvananda/netlink/xfrm_policy.go
deleted file mode 100644
index c97ec43..0000000
--- a/vendor/github.com/vishvananda/netlink/xfrm_policy.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "net"
-)
-
-// Dir is an enum representing an ipsec template direction.
-type Dir uint8
-
-const (
- XFRM_DIR_IN Dir = iota
- XFRM_DIR_OUT
- XFRM_DIR_FWD
- XFRM_SOCKET_IN
- XFRM_SOCKET_OUT
- XFRM_SOCKET_FWD
-)
-
-func (d Dir) String() string {
- switch d {
- case XFRM_DIR_IN:
- return "dir in"
- case XFRM_DIR_OUT:
- return "dir out"
- case XFRM_DIR_FWD:
- return "dir fwd"
- case XFRM_SOCKET_IN:
- return "socket in"
- case XFRM_SOCKET_OUT:
- return "socket out"
- case XFRM_SOCKET_FWD:
- return "socket fwd"
- }
- return fmt.Sprintf("socket %d", d-XFRM_SOCKET_IN)
-}
-
-// XfrmPolicyTmpl encapsulates a rule for the base addresses of an ipsec
-// policy. These rules are matched with XfrmState to determine encryption
-// and authentication algorithms.
-type XfrmPolicyTmpl struct {
- Dst net.IP
- Src net.IP
- Proto Proto
- Mode Mode
- Spi int
- Reqid int
-}
-
-func (t XfrmPolicyTmpl) String() string {
- return fmt.Sprintf("{Dst: %v, Src: %v, Proto: %s, Mode: %s, Spi: 0x%x, Reqid: 0x%x}",
- t.Dst, t.Src, t.Proto, t.Mode, t.Spi, t.Reqid)
-}
-
-// XfrmPolicy represents an ipsec policy. It represents the overlay network
-// and has a list of XfrmPolicyTmpls representing the base addresses of
-// the policy.
-type XfrmPolicy struct {
- Dst *net.IPNet
- Src *net.IPNet
- Proto Proto
- DstPort int
- SrcPort int
- Dir Dir
- Priority int
- Index int
- Mark *XfrmMark
- Tmpls []XfrmPolicyTmpl
-}
-
-func (p XfrmPolicy) String() string {
- return fmt.Sprintf("{Dst: %v, Src: %v, Proto: %s, DstPort: %d, SrcPort: %d, Dir: %s, Priority: %d, Index: %d, Mark: %s, Tmpls: %s}",
- p.Dst, p.Src, p.Proto, p.DstPort, p.SrcPort, p.Dir, p.Priority, p.Index, p.Mark, p.Tmpls)
-}
diff --git a/vendor/github.com/vishvananda/netlink/xfrm_policy_linux.go b/vendor/github.com/vishvananda/netlink/xfrm_policy_linux.go
deleted file mode 100644
index fde0c2c..0000000
--- a/vendor/github.com/vishvananda/netlink/xfrm_policy_linux.go
+++ /dev/null
@@ -1,256 +0,0 @@
-package netlink
-
-import (
- "github.com/vishvananda/netlink/nl"
- "golang.org/x/sys/unix"
-)
-
-func selFromPolicy(sel *nl.XfrmSelector, policy *XfrmPolicy) {
- sel.Family = uint16(nl.FAMILY_V4)
- if policy.Dst != nil {
- sel.Family = uint16(nl.GetIPFamily(policy.Dst.IP))
- sel.Daddr.FromIP(policy.Dst.IP)
- prefixlenD, _ := policy.Dst.Mask.Size()
- sel.PrefixlenD = uint8(prefixlenD)
- }
- if policy.Src != nil {
- sel.Saddr.FromIP(policy.Src.IP)
- prefixlenS, _ := policy.Src.Mask.Size()
- sel.PrefixlenS = uint8(prefixlenS)
- }
- sel.Proto = uint8(policy.Proto)
- sel.Dport = nl.Swap16(uint16(policy.DstPort))
- sel.Sport = nl.Swap16(uint16(policy.SrcPort))
- if sel.Dport != 0 {
- sel.DportMask = ^uint16(0)
- }
- if sel.Sport != 0 {
- sel.SportMask = ^uint16(0)
- }
-}
-
-// XfrmPolicyAdd will add an xfrm policy to the system.
-// Equivalent to: `ip xfrm policy add $policy`
-func XfrmPolicyAdd(policy *XfrmPolicy) error {
- return pkgHandle.XfrmPolicyAdd(policy)
-}
-
-// XfrmPolicyAdd will add an xfrm policy to the system.
-// Equivalent to: `ip xfrm policy add $policy`
-func (h *Handle) XfrmPolicyAdd(policy *XfrmPolicy) error {
- return h.xfrmPolicyAddOrUpdate(policy, nl.XFRM_MSG_NEWPOLICY)
-}
-
-// XfrmPolicyUpdate will update an xfrm policy to the system.
-// Equivalent to: `ip xfrm policy update $policy`
-func XfrmPolicyUpdate(policy *XfrmPolicy) error {
- return pkgHandle.XfrmPolicyUpdate(policy)
-}
-
-// XfrmPolicyUpdate will update an xfrm policy to the system.
-// Equivalent to: `ip xfrm policy update $policy`
-func (h *Handle) XfrmPolicyUpdate(policy *XfrmPolicy) error {
- return h.xfrmPolicyAddOrUpdate(policy, nl.XFRM_MSG_UPDPOLICY)
-}
-
-func (h *Handle) xfrmPolicyAddOrUpdate(policy *XfrmPolicy, nlProto int) error {
- req := h.newNetlinkRequest(nlProto, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
-
- msg := &nl.XfrmUserpolicyInfo{}
- selFromPolicy(&msg.Sel, policy)
- msg.Priority = uint32(policy.Priority)
- msg.Index = uint32(policy.Index)
- msg.Dir = uint8(policy.Dir)
- msg.Lft.SoftByteLimit = nl.XFRM_INF
- msg.Lft.HardByteLimit = nl.XFRM_INF
- msg.Lft.SoftPacketLimit = nl.XFRM_INF
- msg.Lft.HardPacketLimit = nl.XFRM_INF
- req.AddData(msg)
-
- tmplData := make([]byte, nl.SizeofXfrmUserTmpl*len(policy.Tmpls))
- for i, tmpl := range policy.Tmpls {
- start := i * nl.SizeofXfrmUserTmpl
- userTmpl := nl.DeserializeXfrmUserTmpl(tmplData[start : start+nl.SizeofXfrmUserTmpl])
- userTmpl.XfrmId.Daddr.FromIP(tmpl.Dst)
- userTmpl.Saddr.FromIP(tmpl.Src)
- userTmpl.XfrmId.Proto = uint8(tmpl.Proto)
- userTmpl.XfrmId.Spi = nl.Swap32(uint32(tmpl.Spi))
- userTmpl.Mode = uint8(tmpl.Mode)
- userTmpl.Reqid = uint32(tmpl.Reqid)
- userTmpl.Aalgos = ^uint32(0)
- userTmpl.Ealgos = ^uint32(0)
- userTmpl.Calgos = ^uint32(0)
- }
- if len(tmplData) > 0 {
- tmpls := nl.NewRtAttr(nl.XFRMA_TMPL, tmplData)
- req.AddData(tmpls)
- }
- if policy.Mark != nil {
- out := nl.NewRtAttr(nl.XFRMA_MARK, writeMark(policy.Mark))
- req.AddData(out)
- }
-
- _, err := req.Execute(unix.NETLINK_XFRM, 0)
- return err
-}
-
-// XfrmPolicyDel will delete an xfrm policy from the system. Note that
-// the Tmpls are ignored when matching the policy to delete.
-// Equivalent to: `ip xfrm policy del $policy`
-func XfrmPolicyDel(policy *XfrmPolicy) error {
- return pkgHandle.XfrmPolicyDel(policy)
-}
-
-// XfrmPolicyDel will delete an xfrm policy from the system. Note that
-// the Tmpls are ignored when matching the policy to delete.
-// Equivalent to: `ip xfrm policy del $policy`
-func (h *Handle) XfrmPolicyDel(policy *XfrmPolicy) error {
- _, err := h.xfrmPolicyGetOrDelete(policy, nl.XFRM_MSG_DELPOLICY)
- return err
-}
-
-// XfrmPolicyList gets a list of xfrm policies in the system.
-// Equivalent to: `ip xfrm policy show`.
-// The list can be filtered by ip family.
-func XfrmPolicyList(family int) ([]XfrmPolicy, error) {
- return pkgHandle.XfrmPolicyList(family)
-}
-
-// XfrmPolicyList gets a list of xfrm policies in the system.
-// Equivalent to: `ip xfrm policy show`.
-// The list can be filtered by ip family.
-func (h *Handle) XfrmPolicyList(family int) ([]XfrmPolicy, error) {
- req := h.newNetlinkRequest(nl.XFRM_MSG_GETPOLICY, unix.NLM_F_DUMP)
-
- msg := nl.NewIfInfomsg(family)
- req.AddData(msg)
-
- msgs, err := req.Execute(unix.NETLINK_XFRM, nl.XFRM_MSG_NEWPOLICY)
- if err != nil {
- return nil, err
- }
-
- var res []XfrmPolicy
- for _, m := range msgs {
- if policy, err := parseXfrmPolicy(m, family); err == nil {
- res = append(res, *policy)
- } else if err == familyError {
- continue
- } else {
- return nil, err
- }
- }
- return res, nil
-}
-
-// XfrmPolicyGet gets a the policy described by the index or selector, if found.
-// Equivalent to: `ip xfrm policy get { SELECTOR | index INDEX } dir DIR [ctx CTX ] [ mark MARK [ mask MASK ] ] [ ptype PTYPE ]`.
-func XfrmPolicyGet(policy *XfrmPolicy) (*XfrmPolicy, error) {
- return pkgHandle.XfrmPolicyGet(policy)
-}
-
-// XfrmPolicyGet gets a the policy described by the index or selector, if found.
-// Equivalent to: `ip xfrm policy get { SELECTOR | index INDEX } dir DIR [ctx CTX ] [ mark MARK [ mask MASK ] ] [ ptype PTYPE ]`.
-func (h *Handle) XfrmPolicyGet(policy *XfrmPolicy) (*XfrmPolicy, error) {
- return h.xfrmPolicyGetOrDelete(policy, nl.XFRM_MSG_GETPOLICY)
-}
-
-// XfrmPolicyFlush will flush the policies on the system.
-// Equivalent to: `ip xfrm policy flush`
-func XfrmPolicyFlush() error {
- return pkgHandle.XfrmPolicyFlush()
-}
-
-// XfrmPolicyFlush will flush the policies on the system.
-// Equivalent to: `ip xfrm policy flush`
-func (h *Handle) XfrmPolicyFlush() error {
- req := h.newNetlinkRequest(nl.XFRM_MSG_FLUSHPOLICY, unix.NLM_F_ACK)
- _, err := req.Execute(unix.NETLINK_XFRM, 0)
- return err
-}
-
-func (h *Handle) xfrmPolicyGetOrDelete(policy *XfrmPolicy, nlProto int) (*XfrmPolicy, error) {
- req := h.newNetlinkRequest(nlProto, unix.NLM_F_ACK)
-
- msg := &nl.XfrmUserpolicyId{}
- selFromPolicy(&msg.Sel, policy)
- msg.Index = uint32(policy.Index)
- msg.Dir = uint8(policy.Dir)
- req.AddData(msg)
-
- if policy.Mark != nil {
- out := nl.NewRtAttr(nl.XFRMA_MARK, writeMark(policy.Mark))
- req.AddData(out)
- }
-
- resType := nl.XFRM_MSG_NEWPOLICY
- if nlProto == nl.XFRM_MSG_DELPOLICY {
- resType = 0
- }
-
- msgs, err := req.Execute(unix.NETLINK_XFRM, uint16(resType))
- if err != nil {
- return nil, err
- }
-
- if nlProto == nl.XFRM_MSG_DELPOLICY {
- return nil, err
- }
-
- p, err := parseXfrmPolicy(msgs[0], FAMILY_ALL)
- if err != nil {
- return nil, err
- }
-
- return p, nil
-}
-
-func parseXfrmPolicy(m []byte, family int) (*XfrmPolicy, error) {
- msg := nl.DeserializeXfrmUserpolicyInfo(m)
-
- // This is mainly for the policy dump
- if family != FAMILY_ALL && family != int(msg.Sel.Family) {
- return nil, familyError
- }
-
- var policy XfrmPolicy
-
- policy.Dst = msg.Sel.Daddr.ToIPNet(msg.Sel.PrefixlenD)
- policy.Src = msg.Sel.Saddr.ToIPNet(msg.Sel.PrefixlenS)
- policy.Proto = Proto(msg.Sel.Proto)
- policy.DstPort = int(nl.Swap16(msg.Sel.Dport))
- policy.SrcPort = int(nl.Swap16(msg.Sel.Sport))
- policy.Priority = int(msg.Priority)
- policy.Index = int(msg.Index)
- policy.Dir = Dir(msg.Dir)
-
- attrs, err := nl.ParseRouteAttr(m[msg.Len():])
- if err != nil {
- return nil, err
- }
-
- for _, attr := range attrs {
- switch attr.Attr.Type {
- case nl.XFRMA_TMPL:
- max := len(attr.Value)
- for i := 0; i < max; i += nl.SizeofXfrmUserTmpl {
- var resTmpl XfrmPolicyTmpl
- tmpl := nl.DeserializeXfrmUserTmpl(attr.Value[i : i+nl.SizeofXfrmUserTmpl])
- resTmpl.Dst = tmpl.XfrmId.Daddr.ToIP()
- resTmpl.Src = tmpl.Saddr.ToIP()
- resTmpl.Proto = Proto(tmpl.XfrmId.Proto)
- resTmpl.Mode = Mode(tmpl.Mode)
- resTmpl.Spi = int(nl.Swap32(tmpl.XfrmId.Spi))
- resTmpl.Reqid = int(tmpl.Reqid)
- policy.Tmpls = append(policy.Tmpls, resTmpl)
- }
- case nl.XFRMA_MARK:
- mark := nl.DeserializeXfrmMark(attr.Value[:])
- policy.Mark = new(XfrmMark)
- policy.Mark.Value = mark.Value
- policy.Mark.Mask = mark.Mask
- }
- }
-
- return &policy, nil
-}
diff --git a/vendor/github.com/vishvananda/netlink/xfrm_state.go b/vendor/github.com/vishvananda/netlink/xfrm_state.go
deleted file mode 100644
index d14740d..0000000
--- a/vendor/github.com/vishvananda/netlink/xfrm_state.go
+++ /dev/null
@@ -1,129 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "net"
- "time"
-)
-
-// XfrmStateAlgo represents the algorithm to use for the ipsec encryption.
-type XfrmStateAlgo struct {
- Name string
- Key []byte
- TruncateLen int // Auth only
- ICVLen int // AEAD only
-}
-
-func (a XfrmStateAlgo) String() string {
- base := fmt.Sprintf("{Name: %s, Key: 0x%x", a.Name, a.Key)
- if a.TruncateLen != 0 {
- base = fmt.Sprintf("%s, Truncate length: %d", base, a.TruncateLen)
- }
- if a.ICVLen != 0 {
- base = fmt.Sprintf("%s, ICV length: %d", base, a.ICVLen)
- }
- return fmt.Sprintf("%s}", base)
-}
-
-// EncapType is an enum representing the optional packet encapsulation.
-type EncapType uint8
-
-const (
- XFRM_ENCAP_ESPINUDP_NONIKE EncapType = iota + 1
- XFRM_ENCAP_ESPINUDP
-)
-
-func (e EncapType) String() string {
- switch e {
- case XFRM_ENCAP_ESPINUDP_NONIKE:
- return "espinudp-non-ike"
- case XFRM_ENCAP_ESPINUDP:
- return "espinudp"
- }
- return "unknown"
-}
-
-// XfrmStateEncap represents the encapsulation to use for the ipsec encryption.
-type XfrmStateEncap struct {
- Type EncapType
- SrcPort int
- DstPort int
- OriginalAddress net.IP
-}
-
-func (e XfrmStateEncap) String() string {
- return fmt.Sprintf("{Type: %s, Srcport: %d, DstPort: %d, OriginalAddress: %v}",
- e.Type, e.SrcPort, e.DstPort, e.OriginalAddress)
-}
-
-// XfrmStateLimits represents the configured limits for the state.
-type XfrmStateLimits struct {
- ByteSoft uint64
- ByteHard uint64
- PacketSoft uint64
- PacketHard uint64
- TimeSoft uint64
- TimeHard uint64
- TimeUseSoft uint64
- TimeUseHard uint64
-}
-
-// XfrmStateStats represents the current number of bytes/packets
-// processed by this State, the State's installation and first use
-// time and the replay window counters.
-type XfrmStateStats struct {
- ReplayWindow uint32
- Replay uint32
- Failed uint32
- Bytes uint64
- Packets uint64
- AddTime uint64
- UseTime uint64
-}
-
-// XfrmState represents the state of an ipsec policy. It optionally
-// contains an XfrmStateAlgo for encryption and one for authentication.
-type XfrmState struct {
- Dst net.IP
- Src net.IP
- Proto Proto
- Mode Mode
- Spi int
- Reqid int
- ReplayWindow int
- Limits XfrmStateLimits
- Statistics XfrmStateStats
- Mark *XfrmMark
- Auth *XfrmStateAlgo
- Crypt *XfrmStateAlgo
- Aead *XfrmStateAlgo
- Encap *XfrmStateEncap
- ESN bool
-}
-
-func (sa XfrmState) String() string {
- return fmt.Sprintf("Dst: %v, Src: %v, Proto: %s, Mode: %s, SPI: 0x%x, ReqID: 0x%x, ReplayWindow: %d, Mark: %v, Auth: %v, Crypt: %v, Aead: %v, Encap: %v, ESN: %t",
- sa.Dst, sa.Src, sa.Proto, sa.Mode, sa.Spi, sa.Reqid, sa.ReplayWindow, sa.Mark, sa.Auth, sa.Crypt, sa.Aead, sa.Encap, sa.ESN)
-}
-func (sa XfrmState) Print(stats bool) string {
- if !stats {
- return sa.String()
- }
- at := time.Unix(int64(sa.Statistics.AddTime), 0).Format(time.UnixDate)
- ut := "-"
- if sa.Statistics.UseTime > 0 {
- ut = time.Unix(int64(sa.Statistics.UseTime), 0).Format(time.UnixDate)
- }
- return fmt.Sprintf("%s, ByteSoft: %s, ByteHard: %s, PacketSoft: %s, PacketHard: %s, TimeSoft: %d, TimeHard: %d, TimeUseSoft: %d, TimeUseHard: %d, Bytes: %d, Packets: %d, "+
- "AddTime: %s, UseTime: %s, ReplayWindow: %d, Replay: %d, Failed: %d",
- sa.String(), printLimit(sa.Limits.ByteSoft), printLimit(sa.Limits.ByteHard), printLimit(sa.Limits.PacketSoft), printLimit(sa.Limits.PacketHard),
- sa.Limits.TimeSoft, sa.Limits.TimeHard, sa.Limits.TimeUseSoft, sa.Limits.TimeUseHard, sa.Statistics.Bytes, sa.Statistics.Packets, at, ut,
- sa.Statistics.ReplayWindow, sa.Statistics.Replay, sa.Statistics.Failed)
-}
-
-func printLimit(lmt uint64) string {
- if lmt == ^uint64(0) {
- return "(INF)"
- }
- return fmt.Sprintf("%d", lmt)
-}
diff --git a/vendor/github.com/vishvananda/netlink/xfrm_state_linux.go b/vendor/github.com/vishvananda/netlink/xfrm_state_linux.go
deleted file mode 100644
index 5dfdb33..0000000
--- a/vendor/github.com/vishvananda/netlink/xfrm_state_linux.go
+++ /dev/null
@@ -1,457 +0,0 @@
-package netlink
-
-import (
- "fmt"
- "unsafe"
-
- "github.com/vishvananda/netlink/nl"
- "golang.org/x/sys/unix"
-)
-
-func writeStateAlgo(a *XfrmStateAlgo) []byte {
- algo := nl.XfrmAlgo{
- AlgKeyLen: uint32(len(a.Key) * 8),
- AlgKey: a.Key,
- }
- end := len(a.Name)
- if end > 64 {
- end = 64
- }
- copy(algo.AlgName[:end], a.Name)
- return algo.Serialize()
-}
-
-func writeStateAlgoAuth(a *XfrmStateAlgo) []byte {
- algo := nl.XfrmAlgoAuth{
- AlgKeyLen: uint32(len(a.Key) * 8),
- AlgTruncLen: uint32(a.TruncateLen),
- AlgKey: a.Key,
- }
- end := len(a.Name)
- if end > 64 {
- end = 64
- }
- copy(algo.AlgName[:end], a.Name)
- return algo.Serialize()
-}
-
-func writeStateAlgoAead(a *XfrmStateAlgo) []byte {
- algo := nl.XfrmAlgoAEAD{
- AlgKeyLen: uint32(len(a.Key) * 8),
- AlgICVLen: uint32(a.ICVLen),
- AlgKey: a.Key,
- }
- end := len(a.Name)
- if end > 64 {
- end = 64
- }
- copy(algo.AlgName[:end], a.Name)
- return algo.Serialize()
-}
-
-func writeMark(m *XfrmMark) []byte {
- mark := &nl.XfrmMark{
- Value: m.Value,
- Mask: m.Mask,
- }
- if mark.Mask == 0 {
- mark.Mask = ^uint32(0)
- }
- return mark.Serialize()
-}
-
-func writeReplayEsn(replayWindow int) []byte {
- replayEsn := &nl.XfrmReplayStateEsn{
- OSeq: 0,
- Seq: 0,
- OSeqHi: 0,
- SeqHi: 0,
- ReplayWindow: uint32(replayWindow),
- }
-
- // Linux stores the bitmap to identify the already received sequence packets in blocks of uint32 elements.
- // Therefore bitmap length is the minimum number of uint32 elements needed. The following is a ceiling operation.
- bytesPerElem := int(unsafe.Sizeof(replayEsn.BmpLen)) // Any uint32 variable is good for this
- replayEsn.BmpLen = uint32((replayWindow + (bytesPerElem * 8) - 1) / (bytesPerElem * 8))
-
- return replayEsn.Serialize()
-}
-
-// XfrmStateAdd will add an xfrm state to the system.
-// Equivalent to: `ip xfrm state add $state`
-func XfrmStateAdd(state *XfrmState) error {
- return pkgHandle.XfrmStateAdd(state)
-}
-
-// XfrmStateAdd will add an xfrm state to the system.
-// Equivalent to: `ip xfrm state add $state`
-func (h *Handle) XfrmStateAdd(state *XfrmState) error {
- return h.xfrmStateAddOrUpdate(state, nl.XFRM_MSG_NEWSA)
-}
-
-// XfrmStateAllocSpi will allocate an xfrm state in the system.
-// Equivalent to: `ip xfrm state allocspi`
-func XfrmStateAllocSpi(state *XfrmState) (*XfrmState, error) {
- return pkgHandle.xfrmStateAllocSpi(state)
-}
-
-// XfrmStateUpdate will update an xfrm state to the system.
-// Equivalent to: `ip xfrm state update $state`
-func XfrmStateUpdate(state *XfrmState) error {
- return pkgHandle.XfrmStateUpdate(state)
-}
-
-// XfrmStateUpdate will update an xfrm state to the system.
-// Equivalent to: `ip xfrm state update $state`
-func (h *Handle) XfrmStateUpdate(state *XfrmState) error {
- return h.xfrmStateAddOrUpdate(state, nl.XFRM_MSG_UPDSA)
-}
-
-func (h *Handle) xfrmStateAddOrUpdate(state *XfrmState, nlProto int) error {
-
- // A state with spi 0 can't be deleted so don't allow it to be set
- if state.Spi == 0 {
- return fmt.Errorf("Spi must be set when adding xfrm state.")
- }
- req := h.newNetlinkRequest(nlProto, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
-
- msg := xfrmUsersaInfoFromXfrmState(state)
-
- if state.ESN {
- if state.ReplayWindow == 0 {
- return fmt.Errorf("ESN flag set without ReplayWindow")
- }
- msg.Flags |= nl.XFRM_STATE_ESN
- msg.ReplayWindow = 0
- }
-
- limitsToLft(state.Limits, &msg.Lft)
- req.AddData(msg)
-
- if state.Auth != nil {
- out := nl.NewRtAttr(nl.XFRMA_ALG_AUTH_TRUNC, writeStateAlgoAuth(state.Auth))
- req.AddData(out)
- }
- if state.Crypt != nil {
- out := nl.NewRtAttr(nl.XFRMA_ALG_CRYPT, writeStateAlgo(state.Crypt))
- req.AddData(out)
- }
- if state.Aead != nil {
- out := nl.NewRtAttr(nl.XFRMA_ALG_AEAD, writeStateAlgoAead(state.Aead))
- req.AddData(out)
- }
- if state.Encap != nil {
- encapData := make([]byte, nl.SizeofXfrmEncapTmpl)
- encap := nl.DeserializeXfrmEncapTmpl(encapData)
- encap.EncapType = uint16(state.Encap.Type)
- encap.EncapSport = nl.Swap16(uint16(state.Encap.SrcPort))
- encap.EncapDport = nl.Swap16(uint16(state.Encap.DstPort))
- encap.EncapOa.FromIP(state.Encap.OriginalAddress)
- out := nl.NewRtAttr(nl.XFRMA_ENCAP, encapData)
- req.AddData(out)
- }
- if state.Mark != nil {
- out := nl.NewRtAttr(nl.XFRMA_MARK, writeMark(state.Mark))
- req.AddData(out)
- }
- if state.ESN {
- out := nl.NewRtAttr(nl.XFRMA_REPLAY_ESN_VAL, writeReplayEsn(state.ReplayWindow))
- req.AddData(out)
- }
-
- _, err := req.Execute(unix.NETLINK_XFRM, 0)
- return err
-}
-
-func (h *Handle) xfrmStateAllocSpi(state *XfrmState) (*XfrmState, error) {
- req := h.newNetlinkRequest(nl.XFRM_MSG_ALLOCSPI,
- unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
-
- msg := &nl.XfrmUserSpiInfo{}
- msg.XfrmUsersaInfo = *(xfrmUsersaInfoFromXfrmState(state))
- // 1-255 is reserved by IANA for future use
- msg.Min = 0x100
- msg.Max = 0xffffffff
- req.AddData(msg)
-
- if state.Mark != nil {
- out := nl.NewRtAttr(nl.XFRMA_MARK, writeMark(state.Mark))
- req.AddData(out)
- }
-
- msgs, err := req.Execute(unix.NETLINK_XFRM, 0)
- if err != nil {
- return nil, err
- }
-
- s, err := parseXfrmState(msgs[0], FAMILY_ALL)
- if err != nil {
- return nil, err
- }
-
- return s, err
-}
-
-// XfrmStateDel will delete an xfrm state from the system. Note that
-// the Algos are ignored when matching the state to delete.
-// Equivalent to: `ip xfrm state del $state`
-func XfrmStateDel(state *XfrmState) error {
- return pkgHandle.XfrmStateDel(state)
-}
-
-// XfrmStateDel will delete an xfrm state from the system. Note that
-// the Algos are ignored when matching the state to delete.
-// Equivalent to: `ip xfrm state del $state`
-func (h *Handle) XfrmStateDel(state *XfrmState) error {
- _, err := h.xfrmStateGetOrDelete(state, nl.XFRM_MSG_DELSA)
- return err
-}
-
-// XfrmStateList gets a list of xfrm states in the system.
-// Equivalent to: `ip [-4|-6] xfrm state show`.
-// The list can be filtered by ip family.
-func XfrmStateList(family int) ([]XfrmState, error) {
- return pkgHandle.XfrmStateList(family)
-}
-
-// XfrmStateList gets a list of xfrm states in the system.
-// Equivalent to: `ip xfrm state show`.
-// The list can be filtered by ip family.
-func (h *Handle) XfrmStateList(family int) ([]XfrmState, error) {
- req := h.newNetlinkRequest(nl.XFRM_MSG_GETSA, unix.NLM_F_DUMP)
-
- msgs, err := req.Execute(unix.NETLINK_XFRM, nl.XFRM_MSG_NEWSA)
- if err != nil {
- return nil, err
- }
-
- var res []XfrmState
- for _, m := range msgs {
- if state, err := parseXfrmState(m, family); err == nil {
- res = append(res, *state)
- } else if err == familyError {
- continue
- } else {
- return nil, err
- }
- }
- return res, nil
-}
-
-// XfrmStateGet gets the xfrm state described by the ID, if found.
-// Equivalent to: `ip xfrm state get ID [ mark MARK [ mask MASK ] ]`.
-// Only the fields which constitue the SA ID must be filled in:
-// ID := [ src ADDR ] [ dst ADDR ] [ proto XFRM-PROTO ] [ spi SPI ]
-// mark is optional
-func XfrmStateGet(state *XfrmState) (*XfrmState, error) {
- return pkgHandle.XfrmStateGet(state)
-}
-
-// XfrmStateGet gets the xfrm state described by the ID, if found.
-// Equivalent to: `ip xfrm state get ID [ mark MARK [ mask MASK ] ]`.
-// Only the fields which constitue the SA ID must be filled in:
-// ID := [ src ADDR ] [ dst ADDR ] [ proto XFRM-PROTO ] [ spi SPI ]
-// mark is optional
-func (h *Handle) XfrmStateGet(state *XfrmState) (*XfrmState, error) {
- return h.xfrmStateGetOrDelete(state, nl.XFRM_MSG_GETSA)
-}
-
-func (h *Handle) xfrmStateGetOrDelete(state *XfrmState, nlProto int) (*XfrmState, error) {
- req := h.newNetlinkRequest(nlProto, unix.NLM_F_ACK)
-
- msg := &nl.XfrmUsersaId{}
- msg.Family = uint16(nl.GetIPFamily(state.Dst))
- msg.Daddr.FromIP(state.Dst)
- msg.Proto = uint8(state.Proto)
- msg.Spi = nl.Swap32(uint32(state.Spi))
- req.AddData(msg)
-
- if state.Mark != nil {
- out := nl.NewRtAttr(nl.XFRMA_MARK, writeMark(state.Mark))
- req.AddData(out)
- }
- if state.Src != nil {
- out := nl.NewRtAttr(nl.XFRMA_SRCADDR, state.Src.To16())
- req.AddData(out)
- }
-
- resType := nl.XFRM_MSG_NEWSA
- if nlProto == nl.XFRM_MSG_DELSA {
- resType = 0
- }
-
- msgs, err := req.Execute(unix.NETLINK_XFRM, uint16(resType))
- if err != nil {
- return nil, err
- }
-
- if nlProto == nl.XFRM_MSG_DELSA {
- return nil, nil
- }
-
- s, err := parseXfrmState(msgs[0], FAMILY_ALL)
- if err != nil {
- return nil, err
- }
-
- return s, nil
-}
-
-var familyError = fmt.Errorf("family error")
-
-func xfrmStateFromXfrmUsersaInfo(msg *nl.XfrmUsersaInfo) *XfrmState {
- var state XfrmState
-
- state.Dst = msg.Id.Daddr.ToIP()
- state.Src = msg.Saddr.ToIP()
- state.Proto = Proto(msg.Id.Proto)
- state.Mode = Mode(msg.Mode)
- state.Spi = int(nl.Swap32(msg.Id.Spi))
- state.Reqid = int(msg.Reqid)
- state.ReplayWindow = int(msg.ReplayWindow)
- lftToLimits(&msg.Lft, &state.Limits)
- curToStats(&msg.Curlft, &msg.Stats, &state.Statistics)
-
- return &state
-}
-
-func parseXfrmState(m []byte, family int) (*XfrmState, error) {
- msg := nl.DeserializeXfrmUsersaInfo(m)
-
- // This is mainly for the state dump
- if family != FAMILY_ALL && family != int(msg.Family) {
- return nil, familyError
- }
-
- state := xfrmStateFromXfrmUsersaInfo(msg)
-
- attrs, err := nl.ParseRouteAttr(m[nl.SizeofXfrmUsersaInfo:])
- if err != nil {
- return nil, err
- }
-
- for _, attr := range attrs {
- switch attr.Attr.Type {
- case nl.XFRMA_ALG_AUTH, nl.XFRMA_ALG_CRYPT:
- var resAlgo *XfrmStateAlgo
- if attr.Attr.Type == nl.XFRMA_ALG_AUTH {
- if state.Auth == nil {
- state.Auth = new(XfrmStateAlgo)
- }
- resAlgo = state.Auth
- } else {
- state.Crypt = new(XfrmStateAlgo)
- resAlgo = state.Crypt
- }
- algo := nl.DeserializeXfrmAlgo(attr.Value[:])
- (*resAlgo).Name = nl.BytesToString(algo.AlgName[:])
- (*resAlgo).Key = algo.AlgKey
- case nl.XFRMA_ALG_AUTH_TRUNC:
- if state.Auth == nil {
- state.Auth = new(XfrmStateAlgo)
- }
- algo := nl.DeserializeXfrmAlgoAuth(attr.Value[:])
- state.Auth.Name = nl.BytesToString(algo.AlgName[:])
- state.Auth.Key = algo.AlgKey
- state.Auth.TruncateLen = int(algo.AlgTruncLen)
- case nl.XFRMA_ALG_AEAD:
- state.Aead = new(XfrmStateAlgo)
- algo := nl.DeserializeXfrmAlgoAEAD(attr.Value[:])
- state.Aead.Name = nl.BytesToString(algo.AlgName[:])
- state.Aead.Key = algo.AlgKey
- state.Aead.ICVLen = int(algo.AlgICVLen)
- case nl.XFRMA_ENCAP:
- encap := nl.DeserializeXfrmEncapTmpl(attr.Value[:])
- state.Encap = new(XfrmStateEncap)
- state.Encap.Type = EncapType(encap.EncapType)
- state.Encap.SrcPort = int(nl.Swap16(encap.EncapSport))
- state.Encap.DstPort = int(nl.Swap16(encap.EncapDport))
- state.Encap.OriginalAddress = encap.EncapOa.ToIP()
- case nl.XFRMA_MARK:
- mark := nl.DeserializeXfrmMark(attr.Value[:])
- state.Mark = new(XfrmMark)
- state.Mark.Value = mark.Value
- state.Mark.Mask = mark.Mask
- }
- }
-
- return state, nil
-}
-
-// XfrmStateFlush will flush the xfrm state on the system.
-// proto = 0 means any transformation protocols
-// Equivalent to: `ip xfrm state flush [ proto XFRM-PROTO ]`
-func XfrmStateFlush(proto Proto) error {
- return pkgHandle.XfrmStateFlush(proto)
-}
-
-// XfrmStateFlush will flush the xfrm state on the system.
-// proto = 0 means any transformation protocols
-// Equivalent to: `ip xfrm state flush [ proto XFRM-PROTO ]`
-func (h *Handle) XfrmStateFlush(proto Proto) error {
- req := h.newNetlinkRequest(nl.XFRM_MSG_FLUSHSA, unix.NLM_F_ACK)
-
- req.AddData(&nl.XfrmUsersaFlush{Proto: uint8(proto)})
-
- _, err := req.Execute(unix.NETLINK_XFRM, 0)
- if err != nil {
- return err
- }
-
- return nil
-}
-
-func limitsToLft(lmts XfrmStateLimits, lft *nl.XfrmLifetimeCfg) {
- if lmts.ByteSoft != 0 {
- lft.SoftByteLimit = lmts.ByteSoft
- } else {
- lft.SoftByteLimit = nl.XFRM_INF
- }
- if lmts.ByteHard != 0 {
- lft.HardByteLimit = lmts.ByteHard
- } else {
- lft.HardByteLimit = nl.XFRM_INF
- }
- if lmts.PacketSoft != 0 {
- lft.SoftPacketLimit = lmts.PacketSoft
- } else {
- lft.SoftPacketLimit = nl.XFRM_INF
- }
- if lmts.PacketHard != 0 {
- lft.HardPacketLimit = lmts.PacketHard
- } else {
- lft.HardPacketLimit = nl.XFRM_INF
- }
- lft.SoftAddExpiresSeconds = lmts.TimeSoft
- lft.HardAddExpiresSeconds = lmts.TimeHard
- lft.SoftUseExpiresSeconds = lmts.TimeUseSoft
- lft.HardUseExpiresSeconds = lmts.TimeUseHard
-}
-
-func lftToLimits(lft *nl.XfrmLifetimeCfg, lmts *XfrmStateLimits) {
- *lmts = *(*XfrmStateLimits)(unsafe.Pointer(lft))
-}
-
-func curToStats(cur *nl.XfrmLifetimeCur, wstats *nl.XfrmStats, stats *XfrmStateStats) {
- stats.Bytes = cur.Bytes
- stats.Packets = cur.Packets
- stats.AddTime = cur.AddTime
- stats.UseTime = cur.UseTime
- stats.ReplayWindow = wstats.ReplayWindow
- stats.Replay = wstats.Replay
- stats.Failed = wstats.IntegrityFailed
-}
-
-func xfrmUsersaInfoFromXfrmState(state *XfrmState) *nl.XfrmUsersaInfo {
- msg := &nl.XfrmUsersaInfo{}
- msg.Family = uint16(nl.GetIPFamily(state.Dst))
- msg.Id.Daddr.FromIP(state.Dst)
- msg.Saddr.FromIP(state.Src)
- msg.Id.Proto = uint8(state.Proto)
- msg.Mode = uint8(state.Mode)
- msg.Id.Spi = nl.Swap32(uint32(state.Spi))
- msg.Reqid = uint32(state.Reqid)
- msg.ReplayWindow = uint8(state.ReplayWindow)
-
- return msg
-}
diff --git a/vendor/github.com/vishvananda/netns/LICENSE b/vendor/github.com/vishvananda/netns/LICENSE
deleted file mode 100644
index 9f64db8..0000000
--- a/vendor/github.com/vishvananda/netns/LICENSE
+++ /dev/null
@@ -1,192 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- Copyright 2014 Vishvananda Ishaya.
- Copyright 2014 Docker, Inc.
-
- 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.
diff --git a/vendor/github.com/vishvananda/netns/README.md b/vendor/github.com/vishvananda/netns/README.md
deleted file mode 100644
index 66a5f72..0000000
--- a/vendor/github.com/vishvananda/netns/README.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# netns - network namespaces in go #
-
-The netns package provides an ultra-simple interface for handling
-network namespaces in go. Changing namespaces requires elevated
-privileges, so in most cases this code needs to be run as root.
-
-## Local Build and Test ##
-
-You can use go get command:
-
- go get github.com/vishvananda/netns
-
-Testing (requires root):
-
- sudo -E go test github.com/vishvananda/netns
-
-## Example ##
-
-```go
-package main
-
-import (
- "fmt"
- "net"
- "runtime"
- "github.com/vishvananda/netns"
-)
-
-func main() {
- // Lock the OS Thread so we don't accidentally switch namespaces
- runtime.LockOSThread()
- defer runtime.UnlockOSThread()
-
- // Save the current network namespace
- origns, _ := netns.Get()
- defer origns.Close()
-
- // Create a new network namespace
- newns, _ := netns.New()
- netns.Set(newns)
- defer newns.Close()
-
- // Do something with the network namespace
- ifaces, _ := net.Interfaces()
- fmt.Printf("Interfaces: %v\n", ifaces)
-
- // Switch back to the original namespace
- netns.Set(origns)
-}
-
-```
diff --git a/vendor/github.com/vishvananda/netns/netns.go b/vendor/github.com/vishvananda/netns/netns.go
deleted file mode 100644
index dd2f215..0000000
--- a/vendor/github.com/vishvananda/netns/netns.go
+++ /dev/null
@@ -1,80 +0,0 @@
-// Package netns allows ultra-simple network namespace handling. NsHandles
-// can be retrieved and set. Note that the current namespace is thread
-// local so actions that set and reset namespaces should use LockOSThread
-// to make sure the namespace doesn't change due to a goroutine switch.
-// It is best to close NsHandles when you are done with them. This can be
-// accomplished via a `defer ns.Close()` on the handle. Changing namespaces
-// requires elevated privileges, so in most cases this code needs to be run
-// as root.
-package netns
-
-import (
- "fmt"
- "syscall"
-)
-
-// NsHandle is a handle to a network namespace. It can be cast directly
-// to an int and used as a file descriptor.
-type NsHandle int
-
-// Equal determines if two network handles refer to the same network
-// namespace. This is done by comparing the device and inode that the
-// file descriptors point to.
-func (ns NsHandle) Equal(other NsHandle) bool {
- if ns == other {
- return true
- }
- var s1, s2 syscall.Stat_t
- if err := syscall.Fstat(int(ns), &s1); err != nil {
- return false
- }
- if err := syscall.Fstat(int(other), &s2); err != nil {
- return false
- }
- return (s1.Dev == s2.Dev) && (s1.Ino == s2.Ino)
-}
-
-// String shows the file descriptor number and its dev and inode.
-func (ns NsHandle) String() string {
- var s syscall.Stat_t
- if ns == -1 {
- return "NS(None)"
- }
- if err := syscall.Fstat(int(ns), &s); err != nil {
- return fmt.Sprintf("NS(%d: unknown)", ns)
- }
- return fmt.Sprintf("NS(%d: %d, %d)", ns, s.Dev, s.Ino)
-}
-
-// UniqueId returns a string which uniquely identifies the namespace
-// associated with the network handle.
-func (ns NsHandle) UniqueId() string {
- var s syscall.Stat_t
- if ns == -1 {
- return "NS(none)"
- }
- if err := syscall.Fstat(int(ns), &s); err != nil {
- return "NS(unknown)"
- }
- return fmt.Sprintf("NS(%d:%d)", s.Dev, s.Ino)
-}
-
-// IsOpen returns true if Close() has not been called.
-func (ns NsHandle) IsOpen() bool {
- return ns != -1
-}
-
-// Close closes the NsHandle and resets its file descriptor to -1.
-// It is not safe to use an NsHandle after Close() is called.
-func (ns *NsHandle) Close() error {
- if err := syscall.Close(int(*ns)); err != nil {
- return err
- }
- (*ns) = -1
- return nil
-}
-
-// None gets an empty (closed) NsHandle.
-func None() NsHandle {
- return NsHandle(-1)
-}
diff --git a/vendor/github.com/vishvananda/netns/netns_linux.go b/vendor/github.com/vishvananda/netns/netns_linux.go
deleted file mode 100644
index e665ef4..0000000
--- a/vendor/github.com/vishvananda/netns/netns_linux.go
+++ /dev/null
@@ -1,230 +0,0 @@
-// +build linux
-
-package netns
-
-import (
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "runtime"
- "strconv"
- "strings"
- "syscall"
-)
-
-// SYS_SETNS syscall allows changing the namespace of the current process.
-var SYS_SETNS = map[string]uintptr{
- "386": 346,
- "amd64": 308,
- "arm64": 268,
- "arm": 375,
- "mips": 4344,
- "mipsle": 4344,
- "ppc64": 350,
- "ppc64le": 350,
- "s390x": 339,
-}[runtime.GOARCH]
-
-// Deprecated: use syscall pkg instead (go >= 1.5 needed).
-const (
- CLONE_NEWUTS = 0x04000000 /* New utsname group? */
- CLONE_NEWIPC = 0x08000000 /* New ipcs */
- CLONE_NEWUSER = 0x10000000 /* New user namespace */
- CLONE_NEWPID = 0x20000000 /* New pid namespace */
- CLONE_NEWNET = 0x40000000 /* New network namespace */
- CLONE_IO = 0x80000000 /* Get io context */
-)
-
-// Setns sets namespace using syscall. Note that this should be a method
-// in syscall but it has not been added.
-func Setns(ns NsHandle, nstype int) (err error) {
- _, _, e1 := syscall.Syscall(SYS_SETNS, uintptr(ns), uintptr(nstype), 0)
- if e1 != 0 {
- err = e1
- }
- return
-}
-
-// Set sets the current network namespace to the namespace represented
-// by NsHandle.
-func Set(ns NsHandle) (err error) {
- return Setns(ns, CLONE_NEWNET)
-}
-
-// New creates a new network namespace and returns a handle to it.
-func New() (ns NsHandle, err error) {
- if err := syscall.Unshare(CLONE_NEWNET); err != nil {
- return -1, err
- }
- return Get()
-}
-
-// Get gets a handle to the current threads network namespace.
-func Get() (NsHandle, error) {
- return GetFromThread(os.Getpid(), syscall.Gettid())
-}
-
-// GetFromPath gets a handle to a network namespace
-// identified by the path
-func GetFromPath(path string) (NsHandle, error) {
- fd, err := syscall.Open(path, syscall.O_RDONLY, 0)
- if err != nil {
- return -1, err
- }
- return NsHandle(fd), nil
-}
-
-// GetFromName gets a handle to a named network namespace such as one
-// created by `ip netns add`.
-func GetFromName(name string) (NsHandle, error) {
- return GetFromPath(fmt.Sprintf("/var/run/netns/%s", name))
-}
-
-// GetFromPid gets a handle to the network namespace of a given pid.
-func GetFromPid(pid int) (NsHandle, error) {
- return GetFromPath(fmt.Sprintf("/proc/%d/ns/net", pid))
-}
-
-// GetFromThread gets a handle to the network namespace of a given pid and tid.
-func GetFromThread(pid, tid int) (NsHandle, error) {
- return GetFromPath(fmt.Sprintf("/proc/%d/task/%d/ns/net", pid, tid))
-}
-
-// GetFromDocker gets a handle to the network namespace of a docker container.
-// Id is prefixed matched against the running docker containers, so a short
-// identifier can be used as long as it isn't ambiguous.
-func GetFromDocker(id string) (NsHandle, error) {
- pid, err := getPidForContainer(id)
- if err != nil {
- return -1, err
- }
- return GetFromPid(pid)
-}
-
-// borrowed from docker/utils/utils.go
-func findCgroupMountpoint(cgroupType string) (string, error) {
- output, err := ioutil.ReadFile("/proc/mounts")
- if err != nil {
- return "", err
- }
-
- // /proc/mounts has 6 fields per line, one mount per line, e.g.
- // cgroup /sys/fs/cgroup/devices cgroup rw,relatime,devices 0 0
- for _, line := range strings.Split(string(output), "\n") {
- parts := strings.Split(line, " ")
- if len(parts) == 6 && parts[2] == "cgroup" {
- for _, opt := range strings.Split(parts[3], ",") {
- if opt == cgroupType {
- return parts[1], nil
- }
- }
- }
- }
-
- return "", fmt.Errorf("cgroup mountpoint not found for %s", cgroupType)
-}
-
-// Returns the relative path to the cgroup docker is running in.
-// borrowed from docker/utils/utils.go
-// modified to get the docker pid instead of using /proc/self
-func getThisCgroup(cgroupType string) (string, error) {
- dockerpid, err := ioutil.ReadFile("/var/run/docker.pid")
- if err != nil {
- return "", err
- }
- result := strings.Split(string(dockerpid), "\n")
- if len(result) == 0 || len(result[0]) == 0 {
- return "", fmt.Errorf("docker pid not found in /var/run/docker.pid")
- }
- pid, err := strconv.Atoi(result[0])
- if err != nil {
- return "", err
- }
- output, err := ioutil.ReadFile(fmt.Sprintf("/proc/%d/cgroup", pid))
- if err != nil {
- return "", err
- }
- for _, line := range strings.Split(string(output), "\n") {
- parts := strings.Split(line, ":")
- // any type used by docker should work
- if parts[1] == cgroupType {
- return parts[2], nil
- }
- }
- return "", fmt.Errorf("cgroup '%s' not found in /proc/%d/cgroup", cgroupType, pid)
-}
-
-// Returns the first pid in a container.
-// borrowed from docker/utils/utils.go
-// modified to only return the first pid
-// modified to glob with id
-// modified to search for newer docker containers
-func getPidForContainer(id string) (int, error) {
- pid := 0
-
- // memory is chosen randomly, any cgroup used by docker works
- cgroupType := "memory"
-
- cgroupRoot, err := findCgroupMountpoint(cgroupType)
- if err != nil {
- return pid, err
- }
-
- cgroupThis, err := getThisCgroup(cgroupType)
- if err != nil {
- return pid, err
- }
-
- id += "*"
-
- attempts := []string{
- filepath.Join(cgroupRoot, cgroupThis, id, "tasks"),
- // With more recent lxc versions use, cgroup will be in lxc/
- filepath.Join(cgroupRoot, cgroupThis, "lxc", id, "tasks"),
- // With more recent docker, cgroup will be in docker/
- filepath.Join(cgroupRoot, cgroupThis, "docker", id, "tasks"),
- // Even more recent docker versions under systemd use docker-<id>.scope/
- filepath.Join(cgroupRoot, "system.slice", "docker-"+id+".scope", "tasks"),
- // Even more recent docker versions under cgroup/systemd/docker/<id>/
- filepath.Join(cgroupRoot, "..", "systemd", "docker", id, "tasks"),
- // Kubernetes with docker and CNI is even more different
- filepath.Join(cgroupRoot, "..", "systemd", "kubepods", "*", "pod*", id, "tasks"),
- // Another flavor of containers location in recent kubernetes 1.11+
- filepath.Join(cgroupRoot, cgroupThis, "kubepods.slice", "kubepods-besteffort.slice", "*", "docker-"+id+".scope", "tasks"),
- // When runs inside of a container with recent kubernetes 1.11+
- filepath.Join(cgroupRoot, "kubepods.slice", "kubepods-besteffort.slice", "*", "docker-"+id+".scope", "tasks"),
- }
-
- var filename string
- for _, attempt := range attempts {
- filenames, _ := filepath.Glob(attempt)
- if len(filenames) > 1 {
- return pid, fmt.Errorf("Ambiguous id supplied: %v", filenames)
- } else if len(filenames) == 1 {
- filename = filenames[0]
- break
- }
- }
-
- if filename == "" {
- return pid, fmt.Errorf("Unable to find container: %v", id[:len(id)-1])
- }
-
- output, err := ioutil.ReadFile(filename)
- if err != nil {
- return pid, err
- }
-
- result := strings.Split(string(output), "\n")
- if len(result) == 0 || len(result[0]) == 0 {
- return pid, fmt.Errorf("No pid found for container")
- }
-
- pid, err = strconv.Atoi(result[0])
- if err != nil {
- return pid, fmt.Errorf("Invalid pid '%s': %s", result[0], err)
- }
-
- return pid, nil
-}
diff --git a/vendor/github.com/vishvananda/netns/netns_unspecified.go b/vendor/github.com/vishvananda/netns/netns_unspecified.go
deleted file mode 100644
index d06af62..0000000
--- a/vendor/github.com/vishvananda/netns/netns_unspecified.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// +build !linux
-
-package netns
-
-import (
- "errors"
-)
-
-var (
- ErrNotImplemented = errors.New("not implemented")
-)
-
-func Set(ns NsHandle) (err error) {
- return ErrNotImplemented
-}
-
-func New() (ns NsHandle, err error) {
- return -1, ErrNotImplemented
-}
-
-func Get() (NsHandle, error) {
- return -1, ErrNotImplemented
-}
-
-func GetFromPath(path string) (NsHandle, error) {
- return -1, ErrNotImplemented
-}
-
-func GetFromName(name string) (NsHandle, error) {
- return -1, ErrNotImplemented
-}
-
-func GetFromPid(pid int) (NsHandle, error) {
- return -1, ErrNotImplemented
-}
-
-func GetFromThread(pid, tid int) (NsHandle, error) {
- return -1, ErrNotImplemented
-}
-
-func GetFromDocker(id string) (NsHandle, error) {
- return -1, ErrNotImplemented
-}