Copy disabled (too large)
Download .txt
Showing preview only (91,077K chars total). Download the full file to get everything.
Repository: gravitational/wormhole
Branch: master
Commit: b08a6ad87cbc
Files: 5700
Total size: 84.3 MB
Directory structure:
gitextract_1bb1nv75/
├── .github/
│ └── ISSUE_TEMPLATE/
│ ├── bug_report.md
│ └── feature_request.md
├── .gitignore
├── Dockerfile
├── Dockerfile.build
├── Gopkg.toml
├── LICENSE
├── Makefile
├── README.md
├── assets/
│ └── docker/
│ └── wireguard/
│ ├── wireguard-ubuntu-wireguard-bionic.list
│ └── wireguard_ubuntu_wireguard.gpg
├── build.go
├── cmd/
│ ├── netlink-test/
│ │ └── main.go
│ └── wormhole/
│ ├── controller.go
│ ├── main.go
│ └── version.go
├── docs/
│ ├── generic-wormhole.yaml
│ ├── gravity-wormhole.yaml
│ ├── kube-wormhole.yaml
│ ├── rfcs/
│ │ └── 0001-spec.md
│ └── troubleshooting.md
├── hack/
│ ├── boilerplate.go.txt
│ ├── update-codegen.sh
│ └── verify-codegen.sh
├── mage.go
├── pkg/
│ ├── apis/
│ │ └── wormhole.gravitational.io/
│ │ ├── register.go
│ │ └── v1beta1/
│ │ ├── doc.go
│ │ ├── register.go
│ │ ├── wgnode_types.go
│ │ └── zz_generated.deepcopy.go
│ ├── client/
│ │ ├── clientset/
│ │ │ └── versioned/
│ │ │ ├── clientset.go
│ │ │ ├── doc.go
│ │ │ ├── fake/
│ │ │ │ ├── clientset_generated.go
│ │ │ │ ├── doc.go
│ │ │ │ └── register.go
│ │ │ ├── scheme/
│ │ │ │ ├── doc.go
│ │ │ │ └── register.go
│ │ │ └── typed/
│ │ │ └── wormhole.gravitational.io/
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── fake/
│ │ │ │ ├── doc.go
│ │ │ │ ├── fake_wgnode.go
│ │ │ │ └── fake_wormhole.gravitational.io_client.go
│ │ │ ├── generated_expansion.go
│ │ │ ├── wgnode.go
│ │ │ └── wormhole.gravitational.io_client.go
│ │ ├── informers/
│ │ │ └── externalversions/
│ │ │ ├── factory.go
│ │ │ ├── generic.go
│ │ │ ├── internalinterfaces/
│ │ │ │ └── factory_interfaces.go
│ │ │ └── wormhole.gravitational.io/
│ │ │ ├── interface.go
│ │ │ └── v1beta1/
│ │ │ ├── interface.go
│ │ │ └── wgnode.go
│ │ └── listers/
│ │ └── wormhole.gravitational.io/
│ │ └── v1beta1/
│ │ ├── expansion_generated.go
│ │ └── wgnode.go
│ ├── controller/
│ │ ├── cni.go
│ │ ├── controller.go
│ │ ├── ipam.go
│ │ ├── ipam_test.go
│ │ ├── kubernetes.go
│ │ ├── kubernetes_test.go
│ │ ├── overlay.go
│ │ ├── overlay_test.go
│ │ └── utils.go
│ ├── iptables/
│ │ └── iptables.go
│ └── wireguard/
│ ├── utils.go
│ ├── wireguard.go
│ └── wireguard_test.go
├── scripts/
│ ├── gravity-install.sh
│ ├── gravity-rollback.sh
│ └── gravity-upgrade.sh
└── vendor/
├── github.com/
│ ├── cenkalti/
│ │ └── backoff/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── backoff.go
│ │ ├── context.go
│ │ ├── exponential.go
│ │ ├── retry.go
│ │ ├── ticker.go
│ │ └── tries.go
│ ├── coreos/
│ │ └── go-iptables/
│ │ ├── .travis.yml
│ │ ├── DCO
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── code-of-conduct.md
│ │ ├── iptables/
│ │ │ ├── iptables.go
│ │ │ └── lock.go
│ │ └── test
│ ├── davecgh/
│ │ └── go-spew/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── cov_report.sh
│ │ ├── spew/
│ │ │ ├── bypass.go
│ │ │ ├── bypasssafe.go
│ │ │ ├── common.go
│ │ │ ├── config.go
│ │ │ ├── doc.go
│ │ │ ├── dump.go
│ │ │ ├── format.go
│ │ │ ├── spew.go
│ │ │ └── testdata/
│ │ │ └── dumpcgo.go
│ │ └── test_coverage.txt
│ ├── evanphx/
│ │ └── json-patch/
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── cmd/
│ │ │ └── json-patch/
│ │ │ ├── file_flag.go
│ │ │ └── main.go
│ │ ├── merge.go
│ │ └── patch.go
│ ├── gogo/
│ │ └── protobuf/
│ │ ├── .gitignore
│ │ ├── .mailmap
│ │ ├── .travis.yml
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── GOLANG_CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README
│ │ ├── Readme.md
│ │ ├── bench.md
│ │ ├── codec/
│ │ │ └── codec.go
│ │ ├── conformance/
│ │ │ ├── Makefile
│ │ │ ├── conformance.go
│ │ │ ├── conformance.sh
│ │ │ ├── internal/
│ │ │ │ └── conformance_proto/
│ │ │ │ ├── conformance.pb.go
│ │ │ │ └── conformance.proto
│ │ │ └── test.sh
│ │ ├── custom_types.md
│ │ ├── extensions.md
│ │ ├── gogoproto/
│ │ │ ├── Makefile
│ │ │ ├── doc.go
│ │ │ ├── gogo.pb.go
│ │ │ ├── gogo.pb.golden
│ │ │ ├── gogo.proto
│ │ │ └── helper.go
│ │ ├── gogoreplace/
│ │ │ └── main.go
│ │ ├── install-protobuf.sh
│ │ ├── io/
│ │ │ ├── full.go
│ │ │ ├── io.go
│ │ │ ├── uint32.go
│ │ │ └── varint.go
│ │ ├── jsonpb/
│ │ │ ├── jsonpb.go
│ │ │ └── jsonpb_test_proto/
│ │ │ ├── Makefile
│ │ │ ├── bytes.go
│ │ │ ├── more_test_objects.pb.go
│ │ │ ├── more_test_objects.proto
│ │ │ ├── test_objects.pb.go
│ │ │ └── test_objects.proto
│ │ ├── plugin/
│ │ │ ├── compare/
│ │ │ │ ├── compare.go
│ │ │ │ └── comparetest.go
│ │ │ ├── defaultcheck/
│ │ │ │ └── defaultcheck.go
│ │ │ ├── description/
│ │ │ │ ├── description.go
│ │ │ │ └── descriptiontest.go
│ │ │ ├── embedcheck/
│ │ │ │ └── embedcheck.go
│ │ │ ├── enumstringer/
│ │ │ │ └── enumstringer.go
│ │ │ ├── equal/
│ │ │ │ ├── equal.go
│ │ │ │ └── equaltest.go
│ │ │ ├── face/
│ │ │ │ ├── face.go
│ │ │ │ └── facetest.go
│ │ │ ├── gostring/
│ │ │ │ ├── gostring.go
│ │ │ │ └── gostringtest.go
│ │ │ ├── marshalto/
│ │ │ │ └── marshalto.go
│ │ │ ├── oneofcheck/
│ │ │ │ └── oneofcheck.go
│ │ │ ├── populate/
│ │ │ │ └── populate.go
│ │ │ ├── size/
│ │ │ │ ├── size.go
│ │ │ │ └── sizetest.go
│ │ │ ├── stringer/
│ │ │ │ ├── stringer.go
│ │ │ │ └── stringertest.go
│ │ │ ├── testgen/
│ │ │ │ └── testgen.go
│ │ │ ├── union/
│ │ │ │ ├── union.go
│ │ │ │ └── uniontest.go
│ │ │ └── unmarshal/
│ │ │ └── unmarshal.go
│ │ ├── proto/
│ │ │ ├── Makefile
│ │ │ ├── clone.go
│ │ │ ├── custom_gogo.go
│ │ │ ├── decode.go
│ │ │ ├── discard.go
│ │ │ ├── duration.go
│ │ │ ├── duration_gogo.go
│ │ │ ├── encode.go
│ │ │ ├── encode_gogo.go
│ │ │ ├── equal.go
│ │ │ ├── extensions.go
│ │ │ ├── extensions_gogo.go
│ │ │ ├── lib.go
│ │ │ ├── lib_gogo.go
│ │ │ ├── message_set.go
│ │ │ ├── pointer_reflect.go
│ │ │ ├── pointer_reflect_gogo.go
│ │ │ ├── pointer_unsafe.go
│ │ │ ├── pointer_unsafe_gogo.go
│ │ │ ├── properties.go
│ │ │ ├── properties_gogo.go
│ │ │ ├── proto3_proto/
│ │ │ │ ├── Makefile
│ │ │ │ ├── proto3.pb.go
│ │ │ │ └── proto3.proto
│ │ │ ├── skip_gogo.go
│ │ │ ├── table_marshal.go
│ │ │ ├── table_marshal_gogo.go
│ │ │ ├── table_merge.go
│ │ │ ├── table_unmarshal.go
│ │ │ ├── table_unmarshal_gogo.go
│ │ │ ├── test_proto/
│ │ │ │ ├── Makefile
│ │ │ │ ├── deterministic.go
│ │ │ │ ├── test.pb.go
│ │ │ │ └── test.proto
│ │ │ ├── text.go
│ │ │ ├── text_gogo.go
│ │ │ ├── text_parser.go
│ │ │ ├── timestamp.go
│ │ │ └── timestamp_gogo.go
│ │ ├── protobuf/
│ │ │ ├── Makefile
│ │ │ └── google/
│ │ │ └── protobuf/
│ │ │ ├── any.proto
│ │ │ ├── api.proto
│ │ │ ├── compiler/
│ │ │ │ └── plugin.proto
│ │ │ ├── descriptor.proto
│ │ │ ├── duration.proto
│ │ │ ├── empty.proto
│ │ │ ├── field_mask.proto
│ │ │ ├── source_context.proto
│ │ │ ├── struct.proto
│ │ │ ├── timestamp.proto
│ │ │ ├── type.proto
│ │ │ └── wrappers.proto
│ │ ├── protoc-gen-combo/
│ │ │ └── combo.go
│ │ ├── protoc-gen-gofast/
│ │ │ └── main.go
│ │ ├── protoc-gen-gogo/
│ │ │ ├── Makefile
│ │ │ ├── descriptor/
│ │ │ │ ├── Makefile
│ │ │ │ ├── descriptor.go
│ │ │ │ ├── descriptor.pb.go
│ │ │ │ ├── descriptor_gostring.gen.go
│ │ │ │ └── helper.go
│ │ │ ├── doc.go
│ │ │ ├── generator/
│ │ │ │ ├── generator.go
│ │ │ │ ├── helper.go
│ │ │ │ └── internal/
│ │ │ │ └── remap/
│ │ │ │ └── remap.go
│ │ │ ├── grpc/
│ │ │ │ └── grpc.go
│ │ │ ├── main.go
│ │ │ ├── plugin/
│ │ │ │ ├── Makefile
│ │ │ │ └── plugin.pb.go
│ │ │ └── testdata/
│ │ │ ├── Makefile
│ │ │ ├── deprecated/
│ │ │ │ ├── deprecated.pb.go
│ │ │ │ └── deprecated.proto
│ │ │ ├── extension_base/
│ │ │ │ ├── extension_base.pb.go
│ │ │ │ └── extension_base.proto
│ │ │ ├── extension_extra/
│ │ │ │ ├── extension_extra.pb.go
│ │ │ │ └── extension_extra.proto
│ │ │ ├── extension_user/
│ │ │ │ ├── extension_user.pb.go
│ │ │ │ └── extension_user.proto
│ │ │ ├── grpc/
│ │ │ │ ├── grpc.pb.go
│ │ │ │ └── grpc.proto
│ │ │ ├── import_public/
│ │ │ │ ├── a.pb.go
│ │ │ │ ├── a.proto
│ │ │ │ ├── b.pb.go
│ │ │ │ ├── b.proto
│ │ │ │ └── sub/
│ │ │ │ ├── a.pb.go
│ │ │ │ ├── a.proto
│ │ │ │ ├── b.pb.go
│ │ │ │ └── b.proto
│ │ │ ├── imports/
│ │ │ │ ├── fmt/
│ │ │ │ │ ├── m.pb.go
│ │ │ │ │ └── m.proto
│ │ │ │ ├── test_a_1/
│ │ │ │ │ ├── m1.pb.go
│ │ │ │ │ ├── m1.proto
│ │ │ │ │ ├── m2.pb.go
│ │ │ │ │ └── m2.proto
│ │ │ │ ├── test_a_2/
│ │ │ │ │ ├── m3.pb.go
│ │ │ │ │ ├── m3.proto
│ │ │ │ │ ├── m4.pb.go
│ │ │ │ │ └── m4.proto
│ │ │ │ ├── test_b_1/
│ │ │ │ │ ├── m1.pb.go
│ │ │ │ │ ├── m1.proto
│ │ │ │ │ ├── m2.pb.go
│ │ │ │ │ └── m2.proto
│ │ │ │ ├── test_import_a1m1.pb.go
│ │ │ │ ├── test_import_a1m1.proto
│ │ │ │ ├── test_import_a1m2.pb.go
│ │ │ │ ├── test_import_a1m2.proto
│ │ │ │ ├── test_import_all.pb.go
│ │ │ │ └── test_import_all.proto
│ │ │ ├── multi/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── multi1.proto
│ │ │ │ ├── multi2.proto
│ │ │ │ └── multi3.proto
│ │ │ ├── my_test/
│ │ │ │ ├── test.pb.go
│ │ │ │ └── test.proto
│ │ │ └── proto3/
│ │ │ ├── proto3.pb.go
│ │ │ └── proto3.proto
│ │ ├── protoc-gen-gogofast/
│ │ │ └── main.go
│ │ ├── protoc-gen-gogofaster/
│ │ │ └── main.go
│ │ ├── protoc-gen-gogoslick/
│ │ │ └── main.go
│ │ ├── protoc-gen-gogotypes/
│ │ │ └── main.go
│ │ ├── protoc-gen-gostring/
│ │ │ └── main.go
│ │ ├── protoc-min-version/
│ │ │ └── minversion.go
│ │ ├── sortkeys/
│ │ │ └── sortkeys.go
│ │ ├── test/
│ │ │ ├── .gitignore
│ │ │ ├── Makefile
│ │ │ ├── asymetric-issue125/
│ │ │ │ ├── Makefile
│ │ │ │ ├── asym.pb.go
│ │ │ │ ├── asym.proto
│ │ │ │ └── pop.go
│ │ │ ├── cachedsize/
│ │ │ │ ├── Makefile
│ │ │ │ ├── cachedsize.pb.go
│ │ │ │ └── cachedsize.proto
│ │ │ ├── casttype/
│ │ │ │ ├── Makefile
│ │ │ │ ├── casttype.proto
│ │ │ │ ├── combos/
│ │ │ │ │ ├── both/
│ │ │ │ │ │ ├── casttype.pb.go
│ │ │ │ │ │ └── casttype.proto
│ │ │ │ │ ├── marshaler/
│ │ │ │ │ │ ├── casttype.pb.go
│ │ │ │ │ │ └── casttype.proto
│ │ │ │ │ ├── neither/
│ │ │ │ │ │ ├── casttype.pb.go
│ │ │ │ │ │ └── casttype.proto
│ │ │ │ │ └── unmarshaler/
│ │ │ │ │ ├── casttype.pb.go
│ │ │ │ │ └── casttype.proto
│ │ │ │ └── mytypes.go
│ │ │ ├── castvalue/
│ │ │ │ ├── Makefile
│ │ │ │ ├── castvalue.pb.go
│ │ │ │ ├── castvalue.proto
│ │ │ │ ├── combos/
│ │ │ │ │ ├── both/
│ │ │ │ │ │ ├── castvalue.pb.go
│ │ │ │ │ │ ├── castvalue.proto
│ │ │ │ │ │ └── mytypes.go
│ │ │ │ │ ├── marshaler/
│ │ │ │ │ │ ├── castvalue.pb.go
│ │ │ │ │ │ ├── castvalue.proto
│ │ │ │ │ │ └── mytypes.go
│ │ │ │ │ └── unmarshaler/
│ │ │ │ │ ├── castvalue.pb.go
│ │ │ │ │ ├── castvalue.proto
│ │ │ │ │ └── mytypes.go
│ │ │ │ └── mytypes.go
│ │ │ ├── combos/
│ │ │ │ ├── both/
│ │ │ │ │ ├── t.go
│ │ │ │ │ ├── thetest.pb.go
│ │ │ │ │ ├── thetest.proto
│ │ │ │ │ └── uuid.go
│ │ │ │ ├── marshaler/
│ │ │ │ │ ├── t.go
│ │ │ │ │ ├── thetest.pb.go
│ │ │ │ │ ├── thetest.proto
│ │ │ │ │ └── uuid.go
│ │ │ │ └── unmarshaler/
│ │ │ │ ├── t.go
│ │ │ │ ├── thetest.pb.go
│ │ │ │ ├── thetest.proto
│ │ │ │ └── uuid.go
│ │ │ ├── custom/
│ │ │ │ └── custom.go
│ │ │ ├── custom-dash-type/
│ │ │ │ └── customdash.go
│ │ │ ├── custombytesnonstruct/
│ │ │ │ ├── Makefile
│ │ │ │ ├── customtype.go
│ │ │ │ ├── proto.pb.go
│ │ │ │ └── proto.proto
│ │ │ ├── dashfilename/
│ │ │ │ ├── dash-filename.proto
│ │ │ │ └── doc.go
│ │ │ ├── data/
│ │ │ │ ├── Makefile
│ │ │ │ ├── data.pb.go
│ │ │ │ └── data.proto
│ │ │ ├── defaultconflict/
│ │ │ │ ├── df.proto
│ │ │ │ ├── dg.proto
│ │ │ │ ├── doc.go
│ │ │ │ ├── nc.proto
│ │ │ │ ├── ne.proto
│ │ │ │ └── nx.proto
│ │ │ ├── deterministic/
│ │ │ │ ├── Makefile
│ │ │ │ ├── deterministic.pb.go
│ │ │ │ └── deterministic.proto
│ │ │ ├── embedconflict/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── doc.go
│ │ │ │ ├── eb.proto
│ │ │ │ ├── ec.proto
│ │ │ │ ├── ee.proto
│ │ │ │ ├── em.proto
│ │ │ │ ├── en.proto
│ │ │ │ └── er.proto
│ │ │ ├── empty-issue70/
│ │ │ │ ├── Makefile
│ │ │ │ ├── empty.pb.go
│ │ │ │ └── empty.proto
│ │ │ ├── enumcustomname/
│ │ │ │ ├── Makefile
│ │ │ │ ├── enumcustomname.pb.go
│ │ │ │ └── enumcustomname.proto
│ │ │ ├── enumdecl/
│ │ │ │ ├── Makefile
│ │ │ │ ├── enumdecl.pb.go
│ │ │ │ ├── enumdecl.proto
│ │ │ │ └── models.go
│ │ │ ├── enumdecl_all/
│ │ │ │ ├── Makefile
│ │ │ │ ├── enumdeclall.pb.go
│ │ │ │ ├── enumdeclall.proto
│ │ │ │ └── models.go
│ │ │ ├── enumprefix/
│ │ │ │ ├── Makefile
│ │ │ │ ├── enumprefix.pb.go
│ │ │ │ └── enumprefix.proto
│ │ │ ├── enumstringer/
│ │ │ │ ├── Makefile
│ │ │ │ ├── enumstringer.pb.go
│ │ │ │ ├── enumstringer.proto
│ │ │ │ └── string.go
│ │ │ ├── example/
│ │ │ │ ├── Makefile
│ │ │ │ ├── example.pb.go
│ │ │ │ └── example.proto
│ │ │ ├── filedotname/
│ │ │ │ ├── Makefile
│ │ │ │ ├── file.dot.pb.go
│ │ │ │ └── file.dot.proto
│ │ │ ├── fuzztests/
│ │ │ │ ├── Makefile
│ │ │ │ ├── fuzz.pb.go
│ │ │ │ └── fuzz.proto
│ │ │ ├── group/
│ │ │ │ ├── Makefile
│ │ │ │ ├── group.pb.go
│ │ │ │ └── group.proto
│ │ │ ├── importcustom-issue389/
│ │ │ │ ├── Makefile
│ │ │ │ ├── imported/
│ │ │ │ │ ├── Makefile
│ │ │ │ │ ├── a.pb.go
│ │ │ │ │ ├── a.proto
│ │ │ │ │ └── b.go
│ │ │ │ └── importing/
│ │ │ │ ├── Makefile
│ │ │ │ ├── c.pb.go
│ │ │ │ └── c.proto
│ │ │ ├── importdedup/
│ │ │ │ ├── Makefile
│ │ │ │ ├── proto.pb.go
│ │ │ │ ├── proto.proto
│ │ │ │ └── subpkg/
│ │ │ │ ├── customtype.go
│ │ │ │ ├── subproto.pb.go
│ │ │ │ └── subproto.proto
│ │ │ ├── importduplicate/
│ │ │ │ ├── Makefile
│ │ │ │ ├── importduplicate.pb.go
│ │ │ │ ├── importduplicate.proto
│ │ │ │ ├── proto/
│ │ │ │ │ ├── proto.pb.go
│ │ │ │ │ └── proto.proto
│ │ │ │ └── sortkeys/
│ │ │ │ ├── sortable.pb.go
│ │ │ │ └── sortable.proto
│ │ │ ├── indeximport-issue72/
│ │ │ │ ├── Makefile
│ │ │ │ ├── index/
│ │ │ │ │ ├── index.pb.go
│ │ │ │ │ └── index.proto
│ │ │ │ ├── indeximport.pb.go
│ │ │ │ └── indeximport.proto
│ │ │ ├── int64support/
│ │ │ │ ├── Makefile
│ │ │ │ ├── object.pb.go
│ │ │ │ ├── object.proto
│ │ │ │ └── object_js.go
│ │ │ ├── issue260/
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── issue260.pb.go
│ │ │ │ ├── issue260.proto
│ │ │ │ └── models.go
│ │ │ ├── issue261/
│ │ │ │ ├── Makefile
│ │ │ │ ├── issue261.pb.go
│ │ │ │ └── issue261.proto
│ │ │ ├── issue262/
│ │ │ │ ├── Makefile
│ │ │ │ ├── timefail.pb.go
│ │ │ │ └── timefail.proto
│ │ │ ├── issue270/
│ │ │ │ ├── a/
│ │ │ │ │ ├── a1.proto
│ │ │ │ │ └── a2.proto
│ │ │ │ ├── b/
│ │ │ │ │ └── b.proto
│ │ │ │ └── doc.go
│ │ │ ├── issue312/
│ │ │ │ ├── Makefile
│ │ │ │ ├── events/
│ │ │ │ │ ├── Makefile
│ │ │ │ │ ├── events.pb.go
│ │ │ │ │ └── events.proto
│ │ │ │ ├── issue312.pb.go
│ │ │ │ └── issue312.proto
│ │ │ ├── issue322/
│ │ │ │ ├── Makefile
│ │ │ │ ├── issue322.pb.go
│ │ │ │ └── issue322.proto
│ │ │ ├── issue330/
│ │ │ │ ├── Makefile
│ │ │ │ ├── issue330.pb.go
│ │ │ │ ├── issue330.proto
│ │ │ │ └── type.go
│ │ │ ├── issue34/
│ │ │ │ ├── Makefile
│ │ │ │ ├── proto.pb.go
│ │ │ │ └── proto.proto
│ │ │ ├── issue427/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ └── issue427.proto
│ │ │ ├── issue42order/
│ │ │ │ ├── Makefile
│ │ │ │ ├── issue42.pb.go
│ │ │ │ └── issue42.proto
│ │ │ ├── issue8/
│ │ │ │ ├── Makefile
│ │ │ │ ├── proto.pb.go
│ │ │ │ └── proto.proto
│ │ │ ├── jsonpb-gogo/
│ │ │ │ └── jsonpb_gogo.go
│ │ │ ├── mapdefaults/
│ │ │ │ ├── Makefile
│ │ │ │ ├── combos/
│ │ │ │ │ ├── both/
│ │ │ │ │ │ ├── map.pb.go
│ │ │ │ │ │ └── map.proto
│ │ │ │ │ ├── marshaler/
│ │ │ │ │ │ ├── map.pb.go
│ │ │ │ │ │ └── map.proto
│ │ │ │ │ ├── neither/
│ │ │ │ │ │ ├── map.pb.go
│ │ │ │ │ │ └── map.proto
│ │ │ │ │ └── unmarshaler/
│ │ │ │ │ ├── map.pb.go
│ │ │ │ │ └── map.proto
│ │ │ │ ├── map.pb.go
│ │ │ │ ├── map.proto
│ │ │ │ ├── map_test.go.in
│ │ │ │ └── unknown_test.go.in
│ │ │ ├── mapsproto2/
│ │ │ │ ├── Makefile
│ │ │ │ ├── combos/
│ │ │ │ │ ├── both/
│ │ │ │ │ │ ├── mapsproto2.pb.go
│ │ │ │ │ │ └── mapsproto2.proto
│ │ │ │ │ ├── marshaler/
│ │ │ │ │ │ ├── mapsproto2.pb.go
│ │ │ │ │ │ └── mapsproto2.proto
│ │ │ │ │ ├── neither/
│ │ │ │ │ │ ├── mapsproto2.pb.go
│ │ │ │ │ │ └── mapsproto2.proto
│ │ │ │ │ └── unmarshaler/
│ │ │ │ │ ├── mapsproto2.pb.go
│ │ │ │ │ └── mapsproto2.proto
│ │ │ │ ├── doc.go
│ │ │ │ ├── header.proto
│ │ │ │ ├── mapsproto2.proto
│ │ │ │ └── mapsproto2_test.go.in
│ │ │ ├── merge/
│ │ │ │ ├── Makefile
│ │ │ │ ├── merge.pb.go
│ │ │ │ └── merge.proto
│ │ │ ├── moredefaults/
│ │ │ │ ├── Makefile
│ │ │ │ ├── md.pb.go
│ │ │ │ └── md.proto
│ │ │ ├── nopackage/
│ │ │ │ ├── Makefile
│ │ │ │ ├── nopackage.pb.go
│ │ │ │ └── nopackage.proto
│ │ │ ├── oneof/
│ │ │ │ ├── Makefile
│ │ │ │ ├── combos/
│ │ │ │ │ ├── both/
│ │ │ │ │ │ ├── one.pb.go
│ │ │ │ │ │ └── one.proto
│ │ │ │ │ ├── marshaler/
│ │ │ │ │ │ ├── one.pb.go
│ │ │ │ │ │ └── one.proto
│ │ │ │ │ ├── neither/
│ │ │ │ │ │ ├── one.pb.go
│ │ │ │ │ │ └── one.proto
│ │ │ │ │ └── unmarshaler/
│ │ │ │ │ ├── one.pb.go
│ │ │ │ │ └── one.proto
│ │ │ │ ├── doc.go
│ │ │ │ └── one.proto
│ │ │ ├── oneof3/
│ │ │ │ ├── Makefile
│ │ │ │ ├── combos/
│ │ │ │ │ ├── both/
│ │ │ │ │ │ ├── one.pb.go
│ │ │ │ │ │ └── one.proto
│ │ │ │ │ ├── marshaler/
│ │ │ │ │ │ ├── one.pb.go
│ │ │ │ │ │ └── one.proto
│ │ │ │ │ ├── neither/
│ │ │ │ │ │ ├── one.pb.go
│ │ │ │ │ │ └── one.proto
│ │ │ │ │ └── unmarshaler/
│ │ │ │ │ ├── one.pb.go
│ │ │ │ │ └── one.proto
│ │ │ │ ├── doc.go
│ │ │ │ └── one.proto
│ │ │ ├── oneofembed/
│ │ │ │ ├── Makefile
│ │ │ │ ├── oneofembed.pb.go
│ │ │ │ └── oneofembed.proto
│ │ │ ├── packed/
│ │ │ │ ├── Makefile
│ │ │ │ ├── doc.go
│ │ │ │ ├── packed.pb.go
│ │ │ │ └── packed.proto
│ │ │ ├── proto3extension/
│ │ │ │ ├── Makefile
│ │ │ │ ├── proto3ext.pb.go
│ │ │ │ └── proto3ext.proto
│ │ │ ├── protosize/
│ │ │ │ ├── Makefile
│ │ │ │ ├── protosize.pb.go
│ │ │ │ └── protosize.proto
│ │ │ ├── registration/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── Makefile
│ │ │ │ ├── registration.proto
│ │ │ │ └── registration_test.go.in
│ │ │ ├── required/
│ │ │ │ ├── Makefile
│ │ │ │ ├── requiredexample.pb.go
│ │ │ │ └── requiredexample.proto
│ │ │ ├── sizerconflict/
│ │ │ │ ├── doc.go
│ │ │ │ └── sizerconflict.proto
│ │ │ ├── sizeunderscore/
│ │ │ │ ├── Makefile
│ │ │ │ ├── sizeunderscore.pb.go
│ │ │ │ └── sizeunderscore.proto
│ │ │ ├── stdtypes/
│ │ │ │ ├── Makefile
│ │ │ │ ├── stdtypes.pb.go
│ │ │ │ └── stdtypes.proto
│ │ │ ├── t.go
│ │ │ ├── tags/
│ │ │ │ ├── Makefile
│ │ │ │ ├── doc.go
│ │ │ │ ├── tags.pb.go
│ │ │ │ └── tags.proto
│ │ │ ├── theproto3/
│ │ │ │ ├── Makefile
│ │ │ │ ├── combos/
│ │ │ │ │ ├── both/
│ │ │ │ │ │ ├── theproto3.pb.go
│ │ │ │ │ │ └── theproto3.proto
│ │ │ │ │ ├── marshaler/
│ │ │ │ │ │ ├── theproto3.pb.go
│ │ │ │ │ │ └── theproto3.proto
│ │ │ │ │ ├── neither/
│ │ │ │ │ │ ├── theproto3.pb.go
│ │ │ │ │ │ └── theproto3.proto
│ │ │ │ │ └── unmarshaler/
│ │ │ │ │ ├── theproto3.pb.go
│ │ │ │ │ └── theproto3.proto
│ │ │ │ ├── doc.go
│ │ │ │ ├── footer.proto
│ │ │ │ ├── header.proto
│ │ │ │ ├── maps.proto
│ │ │ │ ├── proto3_test.go.in
│ │ │ │ └── theproto3.proto
│ │ │ ├── thetest.pb.go
│ │ │ ├── thetest.proto
│ │ │ ├── typedecl/
│ │ │ │ ├── Makefile
│ │ │ │ ├── models.go
│ │ │ │ ├── typedecl.pb.go
│ │ │ │ └── typedecl.proto
│ │ │ ├── typedecl_all/
│ │ │ │ ├── Makefile
│ │ │ │ ├── models.go
│ │ │ │ ├── typedeclall.pb.go
│ │ │ │ └── typedeclall.proto
│ │ │ ├── typedeclimport/
│ │ │ │ ├── Makefile
│ │ │ │ ├── models.go
│ │ │ │ ├── subpkg/
│ │ │ │ │ ├── subpkg.pb.go
│ │ │ │ │ └── subpkg.proto
│ │ │ │ ├── typedeclimport.pb.go
│ │ │ │ └── typedeclimport.proto
│ │ │ ├── types/
│ │ │ │ ├── Makefile
│ │ │ │ ├── combos/
│ │ │ │ │ ├── both/
│ │ │ │ │ │ ├── types.pb.go
│ │ │ │ │ │ └── types.proto
│ │ │ │ │ ├── marshaler/
│ │ │ │ │ │ ├── types.pb.go
│ │ │ │ │ │ └── types.proto
│ │ │ │ │ ├── neither/
│ │ │ │ │ │ ├── types.pb.go
│ │ │ │ │ │ └── types.proto
│ │ │ │ │ └── unmarshaler/
│ │ │ │ │ ├── types.pb.go
│ │ │ │ │ └── types.proto
│ │ │ │ ├── types.proto
│ │ │ │ └── types_test.go.in
│ │ │ ├── unmarshalmerge/
│ │ │ │ ├── Makefile
│ │ │ │ ├── unmarshalmerge.pb.go
│ │ │ │ └── unmarshalmerge.proto
│ │ │ ├── unrecognized/
│ │ │ │ ├── Makefile
│ │ │ │ ├── unrecognized.pb.go
│ │ │ │ └── unrecognized.proto
│ │ │ ├── unrecognizedgroup/
│ │ │ │ ├── Makefile
│ │ │ │ ├── unrecognizedgroup.pb.go
│ │ │ │ └── unrecognizedgroup.proto
│ │ │ └── uuid.go
│ │ ├── types/
│ │ │ ├── any.go
│ │ │ ├── any.pb.go
│ │ │ ├── api.pb.go
│ │ │ ├── doc.go
│ │ │ ├── duration.go
│ │ │ ├── duration.pb.go
│ │ │ ├── duration_gogo.go
│ │ │ ├── empty.pb.go
│ │ │ ├── field_mask.pb.go
│ │ │ ├── source_context.pb.go
│ │ │ ├── struct.pb.go
│ │ │ ├── timestamp.go
│ │ │ ├── timestamp.pb.go
│ │ │ ├── timestamp_gogo.go
│ │ │ ├── type.pb.go
│ │ │ └── wrappers.pb.go
│ │ ├── vanity/
│ │ │ ├── command/
│ │ │ │ └── command.go
│ │ │ ├── enum.go
│ │ │ ├── field.go
│ │ │ ├── file.go
│ │ │ ├── foreach.go
│ │ │ ├── msg.go
│ │ │ └── test/
│ │ │ ├── Makefile
│ │ │ ├── doc.go
│ │ │ ├── fast/
│ │ │ │ ├── gogovanity.pb.go
│ │ │ │ ├── proto3.pb.go
│ │ │ │ └── vanity.pb.go
│ │ │ ├── faster/
│ │ │ │ ├── gogovanity.pb.go
│ │ │ │ ├── proto3.pb.go
│ │ │ │ └── vanity.pb.go
│ │ │ ├── gofast/
│ │ │ │ └── .gitignore
│ │ │ ├── gogovanity.proto
│ │ │ ├── proto3.proto
│ │ │ ├── slick/
│ │ │ │ ├── gogovanity.pb.go
│ │ │ │ ├── proto3.pb.go
│ │ │ │ └── vanity.pb.go
│ │ │ └── vanity.proto
│ │ └── version/
│ │ └── version.go
│ ├── golang/
│ │ └── protobuf/
│ │ ├── .github/
│ │ │ └── ISSUE_TEMPLATE/
│ │ │ ├── bug_report.md
│ │ │ ├── feature_request.md
│ │ │ └── question.md
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── conformance/
│ │ │ ├── Makefile
│ │ │ ├── conformance.go
│ │ │ ├── conformance.sh
│ │ │ ├── failure_list_go.txt
│ │ │ ├── internal/
│ │ │ │ └── conformance_proto/
│ │ │ │ ├── conformance.pb.go
│ │ │ │ └── conformance.proto
│ │ │ └── test.sh
│ │ ├── descriptor/
│ │ │ └── descriptor.go
│ │ ├── jsonpb/
│ │ │ ├── jsonpb.go
│ │ │ └── jsonpb_test_proto/
│ │ │ ├── more_test_objects.pb.go
│ │ │ ├── more_test_objects.proto
│ │ │ ├── test_objects.pb.go
│ │ │ └── test_objects.proto
│ │ ├── proto/
│ │ │ ├── clone.go
│ │ │ ├── decode.go
│ │ │ ├── discard.go
│ │ │ ├── encode.go
│ │ │ ├── equal.go
│ │ │ ├── extensions.go
│ │ │ ├── lib.go
│ │ │ ├── message_set.go
│ │ │ ├── pointer_reflect.go
│ │ │ ├── pointer_unsafe.go
│ │ │ ├── properties.go
│ │ │ ├── proto3_proto/
│ │ │ │ ├── proto3.pb.go
│ │ │ │ └── proto3.proto
│ │ │ ├── table_marshal.go
│ │ │ ├── table_merge.go
│ │ │ ├── table_unmarshal.go
│ │ │ ├── test_proto/
│ │ │ │ ├── test.pb.go
│ │ │ │ └── test.proto
│ │ │ ├── text.go
│ │ │ └── text_parser.go
│ │ ├── protoc-gen-go/
│ │ │ ├── descriptor/
│ │ │ │ ├── descriptor.pb.go
│ │ │ │ └── descriptor.proto
│ │ │ ├── doc.go
│ │ │ ├── generator/
│ │ │ │ ├── generator.go
│ │ │ │ └── internal/
│ │ │ │ └── remap/
│ │ │ │ └── remap.go
│ │ │ ├── grpc/
│ │ │ │ └── grpc.go
│ │ │ ├── link_grpc.go
│ │ │ ├── main.go
│ │ │ ├── plugin/
│ │ │ │ ├── plugin.pb.go
│ │ │ │ ├── plugin.pb.golden
│ │ │ │ └── plugin.proto
│ │ │ └── testdata/
│ │ │ ├── deprecated/
│ │ │ │ ├── deprecated.pb.go
│ │ │ │ └── deprecated.proto
│ │ │ ├── extension_base/
│ │ │ │ ├── extension_base.pb.go
│ │ │ │ └── extension_base.proto
│ │ │ ├── extension_extra/
│ │ │ │ ├── extension_extra.pb.go
│ │ │ │ └── extension_extra.proto
│ │ │ ├── extension_user/
│ │ │ │ ├── extension_user.pb.go
│ │ │ │ └── extension_user.proto
│ │ │ ├── grpc/
│ │ │ │ ├── grpc.pb.go
│ │ │ │ └── grpc.proto
│ │ │ ├── import_public/
│ │ │ │ ├── a.pb.go
│ │ │ │ ├── a.proto
│ │ │ │ ├── b.pb.go
│ │ │ │ ├── b.proto
│ │ │ │ └── sub/
│ │ │ │ ├── a.pb.go
│ │ │ │ ├── a.proto
│ │ │ │ ├── b.pb.go
│ │ │ │ └── b.proto
│ │ │ ├── imports/
│ │ │ │ ├── fmt/
│ │ │ │ │ ├── m.pb.go
│ │ │ │ │ └── m.proto
│ │ │ │ ├── test_a_1/
│ │ │ │ │ ├── m1.pb.go
│ │ │ │ │ ├── m1.proto
│ │ │ │ │ ├── m2.pb.go
│ │ │ │ │ └── m2.proto
│ │ │ │ ├── test_a_2/
│ │ │ │ │ ├── m3.pb.go
│ │ │ │ │ ├── m3.proto
│ │ │ │ │ ├── m4.pb.go
│ │ │ │ │ └── m4.proto
│ │ │ │ ├── test_b_1/
│ │ │ │ │ ├── m1.pb.go
│ │ │ │ │ ├── m1.proto
│ │ │ │ │ ├── m2.pb.go
│ │ │ │ │ └── m2.proto
│ │ │ │ ├── test_import_a1m1.pb.go
│ │ │ │ ├── test_import_a1m1.proto
│ │ │ │ ├── test_import_a1m2.pb.go
│ │ │ │ ├── test_import_a1m2.proto
│ │ │ │ ├── test_import_all.pb.go
│ │ │ │ └── test_import_all.proto
│ │ │ ├── multi/
│ │ │ │ ├── multi1.pb.go
│ │ │ │ ├── multi1.proto
│ │ │ │ ├── multi2.pb.go
│ │ │ │ ├── multi2.proto
│ │ │ │ ├── multi3.pb.go
│ │ │ │ └── multi3.proto
│ │ │ ├── my_test/
│ │ │ │ ├── test.pb.go
│ │ │ │ └── test.proto
│ │ │ └── proto3/
│ │ │ ├── proto3.pb.go
│ │ │ └── proto3.proto
│ │ ├── ptypes/
│ │ │ ├── any/
│ │ │ │ ├── any.pb.go
│ │ │ │ └── any.proto
│ │ │ ├── any.go
│ │ │ ├── doc.go
│ │ │ ├── duration/
│ │ │ │ ├── duration.pb.go
│ │ │ │ └── duration.proto
│ │ │ ├── duration.go
│ │ │ ├── empty/
│ │ │ │ ├── empty.pb.go
│ │ │ │ └── empty.proto
│ │ │ ├── struct/
│ │ │ │ ├── struct.pb.go
│ │ │ │ └── struct.proto
│ │ │ ├── timestamp/
│ │ │ │ ├── timestamp.pb.go
│ │ │ │ └── timestamp.proto
│ │ │ ├── timestamp.go
│ │ │ └── wrappers/
│ │ │ ├── wrappers.pb.go
│ │ │ └── wrappers.proto
│ │ └── regenerate.sh
│ ├── google/
│ │ ├── btree/
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── btree.go
│ │ │ └── btree_mem.go
│ │ └── gofuzz/
│ │ ├── .travis.yml
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── doc.go
│ │ └── fuzz.go
│ ├── googleapis/
│ │ └── gnostic/
│ │ ├── .gitignore
│ │ ├── .travis-install.sh
│ │ ├── .travis.yml
│ │ ├── COMPILE-PROTOS.sh
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── OpenAPIv2/
│ │ │ ├── OpenAPIv2.go
│ │ │ ├── OpenAPIv2.pb.go
│ │ │ ├── OpenAPIv2.proto
│ │ │ ├── README.md
│ │ │ └── openapi-2.0.json
│ │ ├── OpenAPIv3/
│ │ │ ├── OpenAPIv3.go
│ │ │ ├── OpenAPIv3.pb.go
│ │ │ ├── OpenAPIv3.proto
│ │ │ ├── README.md
│ │ │ ├── openapi-3.0.json
│ │ │ └── schema-generator/
│ │ │ ├── 3.0.0.md
│ │ │ ├── 3.0.1.md
│ │ │ ├── README.md
│ │ │ └── main.go
│ │ ├── README.md
│ │ ├── apps/
│ │ │ ├── disco/
│ │ │ │ ├── README.md
│ │ │ │ ├── list.go
│ │ │ │ ├── main.go
│ │ │ │ ├── openapiv2.go
│ │ │ │ └── openapiv3.go
│ │ │ ├── petstore-builder/
│ │ │ │ ├── README.md
│ │ │ │ ├── main.go
│ │ │ │ ├── petstore-v2.go
│ │ │ │ └── petstore-v3.go
│ │ │ ├── report/
│ │ │ │ ├── README.md
│ │ │ │ └── main.go
│ │ │ └── report-messages/
│ │ │ ├── README.md
│ │ │ └── main.go
│ │ ├── compiler/
│ │ │ ├── README.md
│ │ │ ├── context.go
│ │ │ ├── error.go
│ │ │ ├── extension-handler.go
│ │ │ ├── helpers.go
│ │ │ ├── main.go
│ │ │ └── reader.go
│ │ ├── discovery/
│ │ │ ├── README.md
│ │ │ ├── discovery.go
│ │ │ ├── discovery.json
│ │ │ ├── discovery.pb.go
│ │ │ ├── discovery.proto
│ │ │ └── discovery.yaml
│ │ ├── examples/
│ │ │ ├── README.md
│ │ │ ├── errors/
│ │ │ │ ├── petstore-badproperties.yaml
│ │ │ │ ├── petstore-missingversion.yaml
│ │ │ │ └── petstore-unresolvedrefs.yaml
│ │ │ ├── v2.0/
│ │ │ │ ├── json/
│ │ │ │ │ ├── api-with-examples.json
│ │ │ │ │ ├── petstore-expanded.json
│ │ │ │ │ ├── petstore-minimal.json
│ │ │ │ │ ├── petstore-separate/
│ │ │ │ │ │ ├── common/
│ │ │ │ │ │ │ └── Error.json
│ │ │ │ │ │ └── spec/
│ │ │ │ │ │ ├── NewPet.json
│ │ │ │ │ │ ├── Pet.json
│ │ │ │ │ │ ├── parameters.json
│ │ │ │ │ │ └── swagger.json
│ │ │ │ │ ├── petstore-simple.json
│ │ │ │ │ ├── petstore-with-external-docs.json
│ │ │ │ │ ├── petstore.json
│ │ │ │ │ └── uber.json
│ │ │ │ └── yaml/
│ │ │ │ ├── api-with-examples.yaml
│ │ │ │ ├── petstore-expanded.yaml
│ │ │ │ ├── petstore-minimal.yaml
│ │ │ │ ├── petstore-separate/
│ │ │ │ │ ├── common/
│ │ │ │ │ │ └── Error.yaml
│ │ │ │ │ └── spec/
│ │ │ │ │ ├── NewPet.yaml
│ │ │ │ │ ├── Pet.yaml
│ │ │ │ │ ├── parameters.yaml
│ │ │ │ │ ├── swagger.text
│ │ │ │ │ └── swagger.yaml
│ │ │ │ ├── petstore-simple.yaml
│ │ │ │ ├── petstore-with-external-docs.yaml
│ │ │ │ ├── petstore.yaml
│ │ │ │ └── uber.yaml
│ │ │ └── v3.0/
│ │ │ ├── json/
│ │ │ │ └── petstore.json
│ │ │ └── yaml/
│ │ │ └── petstore.yaml
│ │ ├── extensions/
│ │ │ ├── COMPILE-EXTENSION.sh
│ │ │ ├── README.md
│ │ │ ├── extension.pb.go
│ │ │ ├── extension.proto
│ │ │ ├── extensions.go
│ │ │ └── sample/
│ │ │ ├── Makefile
│ │ │ ├── x-sampleone.json
│ │ │ └── x-sampletwo.json
│ │ ├── generate-gnostic/
│ │ │ ├── README.md
│ │ │ ├── domain.go
│ │ │ ├── generate-compiler.go
│ │ │ ├── generate-extension.go
│ │ │ ├── generate-proto.go
│ │ │ ├── helpers.go
│ │ │ ├── main.go
│ │ │ ├── test/
│ │ │ │ ├── errors/
│ │ │ │ │ ├── x-extension-name-collision.errors
│ │ │ │ │ └── x-unsupportedprimitives.errors
│ │ │ │ ├── x-extension-name-collision.json
│ │ │ │ └── x-unsupportedprimitives.json
│ │ │ └── types.go
│ │ ├── gnostic.go
│ │ ├── jsonschema/
│ │ │ ├── README.md
│ │ │ ├── display.go
│ │ │ ├── models.go
│ │ │ ├── operations.go
│ │ │ ├── reader.go
│ │ │ ├── schema.json
│ │ │ └── writer.go
│ │ ├── jsonwriter/
│ │ │ ├── README.md
│ │ │ └── writer.go
│ │ ├── linters/
│ │ │ ├── README.md
│ │ │ ├── go/
│ │ │ │ ├── gnostic-lint-descriptions/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── linter_v2.go
│ │ │ │ │ ├── linter_v3.go
│ │ │ │ │ └── main.go
│ │ │ │ └── gnostic-lint-paths/
│ │ │ │ ├── README.md
│ │ │ │ └── main.go
│ │ │ ├── node/
│ │ │ │ ├── gnostic-lint-operations/
│ │ │ │ │ ├── Makefile
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── gnostic-lint-operations.js
│ │ │ │ └── gnostic-lint-responses/
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── gnostic-lint-responses.js
│ │ │ │ └── package.json
│ │ │ └── swift/
│ │ │ └── gnostic-lint-responses-swift/
│ │ │ ├── Makefile
│ │ │ ├── Package.swift
│ │ │ ├── README.md
│ │ │ ├── Sources/
│ │ │ │ └── gnostic-lint-responses-swift/
│ │ │ │ ├── io.swift
│ │ │ │ └── main.swift
│ │ │ └── compile-protos
│ │ ├── plugins/
│ │ │ ├── README.md
│ │ │ ├── environment.go
│ │ │ ├── gnostic-analyze/
│ │ │ │ ├── README.md
│ │ │ │ ├── main.go
│ │ │ │ ├── statistics/
│ │ │ │ │ ├── statsv2.go
│ │ │ │ │ └── statsv3.go
│ │ │ │ └── summarize/
│ │ │ │ └── main.go
│ │ │ ├── gnostic-go-generator/
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── examples/
│ │ │ │ │ ├── googleauth/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── googleauth.go
│ │ │ │ │ ├── v2.0/
│ │ │ │ │ │ ├── apis_guru/
│ │ │ │ │ │ │ ├── Makefile
│ │ │ │ │ │ │ ├── main.go
│ │ │ │ │ │ │ └── swagger.yaml
│ │ │ │ │ │ ├── bookstore/
│ │ │ │ │ │ │ ├── Makefile
│ │ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ │ ├── bookstore/
│ │ │ │ │ │ │ │ └── bookstore.go
│ │ │ │ │ │ │ ├── bookstore.json
│ │ │ │ │ │ │ └── service/
│ │ │ │ │ │ │ ├── app.yaml
│ │ │ │ │ │ │ ├── init.go
│ │ │ │ │ │ │ ├── main.go
│ │ │ │ │ │ │ └── service.go
│ │ │ │ │ │ ├── sample/
│ │ │ │ │ │ │ ├── Makefile
│ │ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ │ ├── sample/
│ │ │ │ │ │ │ │ └── sample.go
│ │ │ │ │ │ │ ├── sample.yaml
│ │ │ │ │ │ │ └── service/
│ │ │ │ │ │ │ ├── app.yaml
│ │ │ │ │ │ │ ├── init.go
│ │ │ │ │ │ │ ├── main.go
│ │ │ │ │ │ │ └── service.go
│ │ │ │ │ │ └── xkcd/
│ │ │ │ │ │ ├── Makefile
│ │ │ │ │ │ ├── main.go
│ │ │ │ │ │ ├── swagger.json
│ │ │ │ │ │ └── xkcd/
│ │ │ │ │ │ └── xkcd.go
│ │ │ │ │ └── v3.0/
│ │ │ │ │ ├── bookstore/
│ │ │ │ │ │ ├── Makefile
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── bookstore/
│ │ │ │ │ │ │ └── bookstore.go
│ │ │ │ │ │ ├── bookstore.json
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── app.yaml
│ │ │ │ │ │ ├── init.go
│ │ │ │ │ │ ├── main.go
│ │ │ │ │ │ └── service.go
│ │ │ │ │ └── urlshortener/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── urlshortener/
│ │ │ │ │ └── urlshortener.go
│ │ │ │ ├── goimports.go
│ │ │ │ ├── language.go
│ │ │ │ ├── linewriter.go
│ │ │ │ ├── main.go
│ │ │ │ ├── render_client.go
│ │ │ │ ├── render_constants.go
│ │ │ │ ├── render_provider.go
│ │ │ │ ├── render_server.go
│ │ │ │ ├── render_types.go
│ │ │ │ └── renderer.go
│ │ │ ├── gnostic-summary/
│ │ │ │ ├── README.md
│ │ │ │ └── main.go
│ │ │ ├── gnostic-swift-generator/
│ │ │ │ ├── Makefile
│ │ │ │ ├── Package.swift
│ │ │ │ ├── README.md
│ │ │ │ ├── Sources/
│ │ │ │ │ ├── Gnostic/
│ │ │ │ │ │ ├── OpenAPIv2.pb.swift
│ │ │ │ │ │ ├── OpenAPIv3.pb.swift
│ │ │ │ │ │ ├── discovery.pb.swift
│ │ │ │ │ │ ├── plugin.pb.swift
│ │ │ │ │ │ └── surface.pb.swift
│ │ │ │ │ └── gnostic-swift-generator/
│ │ │ │ │ ├── RenderClient.swift
│ │ │ │ │ ├── RenderFetch.swift
│ │ │ │ │ ├── RenderServer.swift
│ │ │ │ │ ├── RenderTypes.swift
│ │ │ │ │ ├── Renderer.swift
│ │ │ │ │ ├── helpers.swift
│ │ │ │ │ ├── io.swift
│ │ │ │ │ └── main.swift
│ │ │ │ ├── compile-protos
│ │ │ │ └── examples/
│ │ │ │ └── bookstore/
│ │ │ │ ├── Makefile
│ │ │ │ ├── Package.swift
│ │ │ │ ├── README.md
│ │ │ │ ├── Sources/
│ │ │ │ │ └── Server/
│ │ │ │ │ └── main.swift
│ │ │ │ ├── Tests/
│ │ │ │ │ ├── BookstoreTests/
│ │ │ │ │ │ └── BookstoreTests.swift
│ │ │ │ │ └── LinuxMain.swift
│ │ │ │ └── bookstore.json
│ │ │ ├── gnostic-swift-sample/
│ │ │ │ ├── Makefile
│ │ │ │ ├── Package.swift
│ │ │ │ ├── Sources/
│ │ │ │ │ ├── Gnostic/
│ │ │ │ │ │ ├── OpenAPIv2.pb.swift
│ │ │ │ │ │ ├── OpenAPIv3.pb.swift
│ │ │ │ │ │ ├── discovery.pb.swift
│ │ │ │ │ │ ├── plugin.pb.swift
│ │ │ │ │ │ └── surface.pb.swift
│ │ │ │ │ └── gnostic-swift-sample/
│ │ │ │ │ ├── io.swift
│ │ │ │ │ └── main.swift
│ │ │ │ └── compile-protos
│ │ │ ├── plugin.pb.go
│ │ │ └── plugin.proto
│ │ ├── printer/
│ │ │ ├── README.md
│ │ │ └── code.go
│ │ ├── surface/
│ │ │ ├── README.md
│ │ │ ├── field.go
│ │ │ ├── model.go
│ │ │ ├── model_openapiv2.go
│ │ │ ├── model_openapiv3.go
│ │ │ ├── surface.pb.go
│ │ │ ├── surface.proto
│ │ │ └── type.go
│ │ ├── test/
│ │ │ ├── README.md
│ │ │ ├── errors/
│ │ │ │ ├── invalid-plugin-invocation.errors
│ │ │ │ ├── petstore-badproperties.errors
│ │ │ │ ├── petstore-missingversion.errors
│ │ │ │ └── petstore-unresolvedrefs.errors
│ │ │ ├── library-example-with-ext.json
│ │ │ ├── library-example-with-ext.text.out
│ │ │ ├── v2.0/
│ │ │ │ ├── petstore.text
│ │ │ │ └── yaml/
│ │ │ │ ├── petstore-separate/
│ │ │ │ │ └── spec/
│ │ │ │ │ └── swagger.text
│ │ │ │ └── sample-petstore.out
│ │ │ └── v3.0/
│ │ │ └── petstore.text
│ │ └── tools/
│ │ ├── README.md
│ │ ├── format-schema/
│ │ │ └── main.go
│ │ └── j2y2j/
│ │ └── main.go
│ ├── gravitational/
│ │ └── trace/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── errors.go
│ │ ├── httplib.go
│ │ ├── log.go
│ │ ├── trace.go
│ │ ├── trail/
│ │ │ └── trail.go
│ │ └── udphook.go
│ ├── gregjones/
│ │ └── httpcache/
│ │ ├── .travis.yml
│ │ ├── LICENSE.txt
│ │ ├── README.md
│ │ ├── diskcache/
│ │ │ └── diskcache.go
│ │ ├── httpcache.go
│ │ ├── leveldbcache/
│ │ │ └── leveldbcache.go
│ │ ├── memcache/
│ │ │ ├── appengine.go
│ │ │ └── memcache.go
│ │ └── redis/
│ │ └── redis.go
│ ├── hashicorp/
│ │ └── golang-lru/
│ │ ├── .gitignore
│ │ ├── 2q.go
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── arc.go
│ │ ├── doc.go
│ │ ├── go.mod
│ │ ├── lru.go
│ │ └── simplelru/
│ │ ├── lru.go
│ │ └── lru_interface.go
│ ├── imdario/
│ │ └── mergo/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── CODE_OF_CONDUCT.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── map.go
│ │ ├── merge.go
│ │ ├── mergo.go
│ │ └── testdata/
│ │ ├── license.yml
│ │ └── thing.yml
│ ├── inconshreveable/
│ │ └── mousetrap/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── trap_others.go
│ │ ├── trap_windows.go
│ │ └── trap_windows_1.4.go
│ ├── jonboulle/
│ │ └── clockwork/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── clockwork.go
│ ├── konsorten/
│ │ └── go-windows-terminal-sequences/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── go.mod
│ │ └── sequences.go
│ ├── magefile/
│ │ └── mage/
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── .goreleaser.yml
│ │ ├── .travis.yml
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bootstrap.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── mage/
│ │ │ ├── command_string.go
│ │ │ ├── magefile_tmpl.go
│ │ │ ├── main.go
│ │ │ ├── template.go
│ │ │ └── testdata/
│ │ │ ├── alias/
│ │ │ │ └── magefile.go
│ │ │ ├── command.go
│ │ │ ├── context/
│ │ │ │ └── context.go
│ │ │ ├── error.go
│ │ │ ├── func.go
│ │ │ ├── invalid_alias/
│ │ │ │ └── magefile.go
│ │ │ ├── keep_flag/
│ │ │ │ └── magefile.go
│ │ │ ├── list/
│ │ │ │ └── command.go
│ │ │ ├── main.go
│ │ │ ├── mixed_lib_files/
│ │ │ │ ├── lib.go
│ │ │ │ ├── mage_helpers.go
│ │ │ │ └── magefile.go
│ │ │ ├── mixed_main_files/
│ │ │ │ ├── mage_helpers.go
│ │ │ │ ├── magefile.go
│ │ │ │ └── main.go
│ │ │ ├── namespaces/
│ │ │ │ └── magefile.go
│ │ │ ├── no_default/
│ │ │ │ └── magefile.go
│ │ │ ├── onlyStdLib/
│ │ │ │ └── command.go
│ │ │ ├── panic.go
│ │ │ ├── setdir/
│ │ │ │ └── setdir.go
│ │ │ └── transitiveDeps/
│ │ │ ├── dep/
│ │ │ │ ├── cat.notgo
│ │ │ │ └── dog.go
│ │ │ └── magefile.go
│ │ ├── magefile.go
│ │ ├── main.go
│ │ ├── mg/
│ │ │ ├── deps.go
│ │ │ ├── errors.go
│ │ │ └── runtime.go
│ │ ├── parse/
│ │ │ ├── parse.go
│ │ │ └── testdata/
│ │ │ ├── alias.go
│ │ │ ├── command.go
│ │ │ ├── func.go
│ │ │ ├── repeating_synopsis.go
│ │ │ ├── subcommand_1.9.go
│ │ │ └── subcommands.go
│ │ ├── sh/
│ │ │ ├── cmd.go
│ │ │ └── helpers.go
│ │ ├── site/
│ │ │ ├── archetypes/
│ │ │ │ ├── blog.md
│ │ │ │ └── default.md
│ │ │ ├── config.toml
│ │ │ ├── content/
│ │ │ │ ├── blog/
│ │ │ │ │ ├── _index.en.md
│ │ │ │ │ ├── mage-in-ci.md
│ │ │ │ │ ├── on-release-versions.md
│ │ │ │ │ ├── release-v1.3.0.md
│ │ │ │ │ └── release-v1.4.0.md
│ │ │ │ ├── dependencies/
│ │ │ │ │ └── _index.en.md
│ │ │ │ ├── environment/
│ │ │ │ │ └── _index.en.md
│ │ │ │ ├── filesources/
│ │ │ │ │ └── _index.en.md
│ │ │ │ ├── howitworks/
│ │ │ │ │ └── _index.en.md
│ │ │ │ ├── index.md
│ │ │ │ ├── libraries/
│ │ │ │ │ └── _index.en.md
│ │ │ │ ├── magefiles/
│ │ │ │ │ └── _index.en.md
│ │ │ │ ├── targets/
│ │ │ │ │ └── _index.en.md
│ │ │ │ └── zeroInstall/
│ │ │ │ └── _index.en.md
│ │ │ ├── layouts/
│ │ │ │ ├── blog/
│ │ │ │ │ └── list.html
│ │ │ │ └── partials/
│ │ │ │ ├── favicon.html
│ │ │ │ ├── header.html
│ │ │ │ └── logo.html
│ │ │ ├── static/
│ │ │ │ └── css/
│ │ │ │ └── overrides.css
│ │ │ └── themes/
│ │ │ └── learn/
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE.md
│ │ │ ├── README.md
│ │ │ ├── archetypes/
│ │ │ │ ├── chapter.md
│ │ │ │ └── default.md
│ │ │ ├── exampleSite/
│ │ │ │ ├── LICENSE.md
│ │ │ │ ├── README.md
│ │ │ │ ├── config.toml
│ │ │ │ ├── content/
│ │ │ │ │ ├── _index.en.md
│ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ ├── basics/
│ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ ├── configuration/
│ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ └── _index.fr.md
│ │ │ │ │ │ ├── installation/
│ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ └── _index.fr.md
│ │ │ │ │ │ └── requirements/
│ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ └── _index.fr.md
│ │ │ │ │ ├── cont/
│ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ ├── archetypes.en.md
│ │ │ │ │ │ ├── archetypes.fr.md
│ │ │ │ │ │ ├── i18n/
│ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ └── _index.fr.md
│ │ │ │ │ │ ├── markdown.en.md
│ │ │ │ │ │ ├── markdown.fr.md
│ │ │ │ │ │ ├── menushortcuts.en.md
│ │ │ │ │ │ ├── menushortcuts.fr.md
│ │ │ │ │ │ └── pages/
│ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ └── _index.fr.md
│ │ │ │ │ ├── credits.en.md
│ │ │ │ │ ├── credits.fr.md
│ │ │ │ │ ├── shortcodes/
│ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ ├── attachments.en.md
│ │ │ │ │ │ ├── attachments.fr.md
│ │ │ │ │ │ ├── button.en.md
│ │ │ │ │ │ ├── button.fr.md
│ │ │ │ │ │ ├── children/
│ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ │ ├── children-1/
│ │ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ │ │ └── children-1-1/
│ │ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ │ │ └── children-1-1-1/
│ │ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ │ │ └── children-1-1-1-1/
│ │ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ │ │ └── children-1-1-1-1-1/
│ │ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ │ └── _index.fr.md
│ │ │ │ │ │ │ ├── children-2/
│ │ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ │ │ ├── test3.en.md
│ │ │ │ │ │ │ │ └── test3.fr.md
│ │ │ │ │ │ │ ├── children-3/
│ │ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ │ └── _index.fr.md
│ │ │ │ │ │ │ ├── children-4/
│ │ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ │ └── _index.fr.md
│ │ │ │ │ │ │ ├── test.en.md
│ │ │ │ │ │ │ └── test.fr.md
│ │ │ │ │ │ ├── expand.en.md
│ │ │ │ │ │ ├── expand.fr.md
│ │ │ │ │ │ ├── mermaid.en.md
│ │ │ │ │ │ ├── mermaid.fr.md
│ │ │ │ │ │ ├── notice.en.md
│ │ │ │ │ │ └── notice.fr.md
│ │ │ │ │ ├── showcase.en.md
│ │ │ │ │ └── showcase.fr.md
│ │ │ │ ├── layouts/
│ │ │ │ │ ├── partials/
│ │ │ │ │ │ ├── logo.html
│ │ │ │ │ │ └── menu-footer.html
│ │ │ │ │ └── shortcodes/
│ │ │ │ │ └── ghcontributors.html
│ │ │ │ └── static/
│ │ │ │ └── css/
│ │ │ │ └── theme-mine.css
│ │ │ ├── i18n/
│ │ │ │ ├── en.toml
│ │ │ │ └── fr.toml
│ │ │ ├── layouts/
│ │ │ │ ├── 404.html
│ │ │ │ ├── _default/
│ │ │ │ │ ├── list.html
│ │ │ │ │ └── single.html
│ │ │ │ ├── index.html
│ │ │ │ ├── index.json
│ │ │ │ ├── partials/
│ │ │ │ │ ├── custom-footer.html
│ │ │ │ │ ├── custom-header.html
│ │ │ │ │ ├── favicon.html
│ │ │ │ │ ├── footer.html
│ │ │ │ │ ├── header.html
│ │ │ │ │ ├── logo.html
│ │ │ │ │ ├── menu-footer.html
│ │ │ │ │ ├── menu.html
│ │ │ │ │ ├── meta.html
│ │ │ │ │ ├── search.html
│ │ │ │ │ └── toc.html
│ │ │ │ ├── post/
│ │ │ │ │ └── single.html
│ │ │ │ └── shortcodes/
│ │ │ │ ├── attachments.html
│ │ │ │ ├── button.html
│ │ │ │ ├── children.html
│ │ │ │ ├── expand.html
│ │ │ │ ├── mermaid.html
│ │ │ │ ├── notice.html
│ │ │ │ └── relref.html
│ │ │ ├── static/
│ │ │ │ ├── css/
│ │ │ │ │ ├── horsey.css
│ │ │ │ │ ├── hugo-theme.css
│ │ │ │ │ ├── hybrid.css
│ │ │ │ │ ├── nucleus.css
│ │ │ │ │ ├── theme-blue.css
│ │ │ │ │ ├── theme-green.css
│ │ │ │ │ ├── theme-red.css
│ │ │ │ │ └── theme.css
│ │ │ │ ├── fonts/
│ │ │ │ │ └── FontAwesome.otf
│ │ │ │ ├── js/
│ │ │ │ │ ├── highlight.pack.js
│ │ │ │ │ ├── horsey.js
│ │ │ │ │ ├── hugo-learn.js
│ │ │ │ │ ├── learn.js
│ │ │ │ │ ├── modernizr.custom.71422.js
│ │ │ │ │ └── search.js
│ │ │ │ └── mermaid/
│ │ │ │ ├── mermaid.css
│ │ │ │ ├── mermaid.dark.css
│ │ │ │ ├── mermaid.forest.css
│ │ │ │ └── mermaid.js
│ │ │ ├── theme.toml
│ │ │ └── wercker.yml
│ │ └── target/
│ │ └── target.go
│ ├── modern-go/
│ │ └── concurrent/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── executor.go
│ │ ├── go_above_19.go
│ │ ├── go_below_19.go
│ │ ├── log.go
│ │ ├── test.sh
│ │ └── unbounded_executor.go
│ ├── peterbourgon/
│ │ └── diskv/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── compression.go
│ │ ├── diskv.go
│ │ ├── examples/
│ │ │ ├── content-addressable-store/
│ │ │ │ └── cas.go
│ │ │ └── super-simple-store/
│ │ │ └── super-simple-store.go
│ │ └── index.go
│ ├── pmezard/
│ │ └── go-difflib/
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── difflib/
│ │ └── difflib.go
│ ├── spf13/
│ │ ├── cobra/
│ │ │ ├── .circleci/
│ │ │ │ └── config.yml
│ │ │ ├── .gitignore
│ │ │ ├── .mailmap
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE.txt
│ │ │ ├── README.md
│ │ │ ├── args.go
│ │ │ ├── bash_completions.go
│ │ │ ├── bash_completions.md
│ │ │ ├── cobra/
│ │ │ │ ├── README.md
│ │ │ │ ├── cmd/
│ │ │ │ │ ├── add.go
│ │ │ │ │ ├── helpers.go
│ │ │ │ │ ├── init.go
│ │ │ │ │ ├── license_agpl.go
│ │ │ │ │ ├── license_apache_2.go
│ │ │ │ │ ├── license_bsd_clause_2.go
│ │ │ │ │ ├── license_bsd_clause_3.go
│ │ │ │ │ ├── license_gpl_2.go
│ │ │ │ │ ├── license_gpl_3.go
│ │ │ │ │ ├── license_lgpl.go
│ │ │ │ │ ├── license_mit.go
│ │ │ │ │ ├── licenses.go
│ │ │ │ │ ├── project.go
│ │ │ │ │ ├── root.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ ├── LICENSE.golden
│ │ │ │ │ ├── main.go.golden
│ │ │ │ │ ├── root.go.golden
│ │ │ │ │ └── test.go.golden
│ │ │ │ └── main.go
│ │ │ ├── cobra.go
│ │ │ ├── command.go
│ │ │ ├── command_notwin.go
│ │ │ ├── command_win.go
│ │ │ ├── doc/
│ │ │ │ ├── man_docs.go
│ │ │ │ ├── man_docs.md
│ │ │ │ ├── md_docs.go
│ │ │ │ ├── md_docs.md
│ │ │ │ ├── rest_docs.go
│ │ │ │ ├── rest_docs.md
│ │ │ │ ├── util.go
│ │ │ │ ├── yaml_docs.go
│ │ │ │ └── yaml_docs.md
│ │ │ └── zsh_completions.go
│ │ └── pflag/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bool.go
│ │ ├── bool_slice.go
│ │ ├── bytes.go
│ │ ├── count.go
│ │ ├── duration.go
│ │ ├── duration_slice.go
│ │ ├── flag.go
│ │ ├── float32.go
│ │ ├── float64.go
│ │ ├── golangflag.go
│ │ ├── int.go
│ │ ├── int16.go
│ │ ├── int32.go
│ │ ├── int64.go
│ │ ├── int8.go
│ │ ├── int_slice.go
│ │ ├── ip.go
│ │ ├── ip_slice.go
│ │ ├── ipmask.go
│ │ ├── ipnet.go
│ │ ├── string.go
│ │ ├── string_array.go
│ │ ├── string_slice.go
│ │ ├── string_to_int.go
│ │ ├── string_to_string.go
│ │ ├── uint.go
│ │ ├── uint16.go
│ │ ├── uint32.go
│ │ ├── uint64.go
│ │ ├── uint8.go
│ │ ├── uint_slice.go
│ │ └── verify/
│ │ ├── all.sh
│ │ ├── gofmt.sh
│ │ └── golint.sh
│ ├── stretchr/
│ │ └── testify/
│ │ ├── .gitignore
│ │ ├── .travis.gofmt.sh
│ │ ├── .travis.gogenerate.sh
│ │ ├── .travis.govet.sh
│ │ ├── .travis.yml
│ │ ├── Gopkg.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── _codegen/
│ │ │ └── main.go
│ │ ├── assert/
│ │ │ ├── assertion_format.go
│ │ │ ├── assertion_format.go.tmpl
│ │ │ ├── assertion_forward.go
│ │ │ ├── assertion_forward.go.tmpl
│ │ │ ├── assertion_order.go
│ │ │ ├── assertions.go
│ │ │ ├── doc.go
│ │ │ ├── errors.go
│ │ │ ├── forward_assertions.go
│ │ │ └── http_assertions.go
│ │ ├── doc.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── http/
│ │ │ ├── doc.go
│ │ │ ├── test_response_writer.go
│ │ │ └── test_round_tripper.go
│ │ ├── mock/
│ │ │ ├── doc.go
│ │ │ └── mock.go
│ │ ├── require/
│ │ │ ├── doc.go
│ │ │ ├── forward_requirements.go
│ │ │ ├── require.go
│ │ │ ├── require.go.tmpl
│ │ │ ├── require_forward.go
│ │ │ ├── require_forward.go.tmpl
│ │ │ └── requirements.go
│ │ └── suite/
│ │ ├── doc.go
│ │ ├── interfaces.go
│ │ └── suite.go
│ └── vishvananda/
│ ├── netlink/
│ │ ├── .travis.yml
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── addr.go
│ │ ├── addr_linux.go
│ │ ├── bpf_linux.go
│ │ ├── bridge_linux.go
│ │ ├── class.go
│ │ ├── class_linux.go
│ │ ├── conntrack_linux.go
│ │ ├── conntrack_unspecified.go
│ │ ├── filter.go
│ │ ├── filter_linux.go
│ │ ├── fou.go
│ │ ├── fou_linux.go
│ │ ├── fou_unspecified.go
│ │ ├── genetlink_linux.go
│ │ ├── genetlink_unspecified.go
│ │ ├── gtp_linux.go
│ │ ├── handle_linux.go
│ │ ├── handle_unspecified.go
│ │ ├── ioctl_linux.go
│ │ ├── link.go
│ │ ├── link_linux.go
│ │ ├── link_tuntap_linux.go
│ │ ├── neigh.go
│ │ ├── neigh_linux.go
│ │ ├── netlink.go
│ │ ├── netlink_linux.go
│ │ ├── netlink_unspecified.go
│ │ ├── nl/
│ │ │ ├── addr_linux.go
│ │ │ ├── bridge_linux.go
│ │ │ ├── conntrack_linux.go
│ │ │ ├── genetlink_linux.go
│ │ │ ├── link_linux.go
│ │ │ ├── mpls_linux.go
│ │ │ ├── nl_linux.go
│ │ │ ├── nl_unspecified.go
│ │ │ ├── route_linux.go
│ │ │ ├── seg6_linux.go
│ │ │ ├── syscall.go
│ │ │ ├── tc_linux.go
│ │ │ ├── xfrm_linux.go
│ │ │ ├── xfrm_monitor_linux.go
│ │ │ ├── xfrm_policy_linux.go
│ │ │ └── xfrm_state_linux.go
│ │ ├── order.go
│ │ ├── protinfo.go
│ │ ├── protinfo_linux.go
│ │ ├── qdisc.go
│ │ ├── qdisc_linux.go
│ │ ├── route.go
│ │ ├── route_linux.go
│ │ ├── route_unspecified.go
│ │ ├── rule.go
│ │ ├── rule_linux.go
│ │ ├── socket.go
│ │ ├── socket_linux.go
│ │ ├── xfrm.go
│ │ ├── xfrm_monitor_linux.go
│ │ ├── xfrm_policy.go
│ │ ├── xfrm_policy_linux.go
│ │ ├── xfrm_state.go
│ │ └── xfrm_state_linux.go
│ └── netns/
│ ├── LICENSE
│ ├── README.md
│ ├── netns.go
│ ├── netns_linux.go
│ └── netns_unspecified.go
├── golang.org/
│ └── x/
│ ├── crypto/
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── README.md
│ │ ├── acme/
│ │ │ ├── acme.go
│ │ │ ├── autocert/
│ │ │ │ ├── autocert.go
│ │ │ │ ├── cache.go
│ │ │ │ ├── internal/
│ │ │ │ │ └── acmetest/
│ │ │ │ │ └── ca.go
│ │ │ │ ├── listener.go
│ │ │ │ └── renewal.go
│ │ │ ├── http.go
│ │ │ ├── jws.go
│ │ │ └── types.go
│ │ ├── argon2/
│ │ │ ├── argon2.go
│ │ │ ├── blake2b.go
│ │ │ ├── blamka_amd64.go
│ │ │ ├── blamka_amd64.s
│ │ │ ├── blamka_generic.go
│ │ │ └── blamka_ref.go
│ │ ├── bcrypt/
│ │ │ ├── base64.go
│ │ │ └── bcrypt.go
│ │ ├── blake2b/
│ │ │ ├── blake2b.go
│ │ │ ├── blake2bAVX2_amd64.go
│ │ │ ├── blake2bAVX2_amd64.s
│ │ │ ├── blake2b_amd64.go
│ │ │ ├── blake2b_amd64.s
│ │ │ ├── blake2b_generic.go
│ │ │ ├── blake2b_ref.go
│ │ │ ├── blake2x.go
│ │ │ └── register.go
│ │ ├── blake2s/
│ │ │ ├── blake2s.go
│ │ │ ├── blake2s_386.go
│ │ │ ├── blake2s_386.s
│ │ │ ├── blake2s_amd64.go
│ │ │ ├── blake2s_amd64.s
│ │ │ ├── blake2s_generic.go
│ │ │ ├── blake2s_ref.go
│ │ │ ├── blake2x.go
│ │ │ └── register.go
│ │ ├── blowfish/
│ │ │ ├── block.go
│ │ │ ├── cipher.go
│ │ │ └── const.go
│ │ ├── bn256/
│ │ │ ├── bn256.go
│ │ │ ├── constants.go
│ │ │ ├── curve.go
│ │ │ ├── gfp12.go
│ │ │ ├── gfp2.go
│ │ │ ├── gfp6.go
│ │ │ ├── optate.go
│ │ │ └── twist.go
│ │ ├── cast5/
│ │ │ └── cast5.go
│ │ ├── chacha20poly1305/
│ │ │ ├── chacha20poly1305.go
│ │ │ ├── chacha20poly1305_amd64.go
│ │ │ ├── chacha20poly1305_amd64.s
│ │ │ ├── chacha20poly1305_generic.go
│ │ │ ├── chacha20poly1305_noasm.go
│ │ │ └── xchacha20poly1305.go
│ │ ├── codereview.cfg
│ │ ├── cryptobyte/
│ │ │ ├── asn1/
│ │ │ │ └── asn1.go
│ │ │ ├── asn1.go
│ │ │ ├── builder.go
│ │ │ └── string.go
│ │ ├── curve25519/
│ │ │ ├── const_amd64.h
│ │ │ ├── const_amd64.s
│ │ │ ├── cswap_amd64.s
│ │ │ ├── curve25519.go
│ │ │ ├── doc.go
│ │ │ ├── freeze_amd64.s
│ │ │ ├── ladderstep_amd64.s
│ │ │ ├── mont25519_amd64.go
│ │ │ ├── mul_amd64.s
│ │ │ └── square_amd64.s
│ │ ├── ed25519/
│ │ │ ├── ed25519.go
│ │ │ └── internal/
│ │ │ └── edwards25519/
│ │ │ ├── const.go
│ │ │ └── edwards25519.go
│ │ ├── hkdf/
│ │ │ └── hkdf.go
│ │ ├── internal/
│ │ │ ├── chacha20/
│ │ │ │ ├── chacha_generic.go
│ │ │ │ ├── chacha_noasm.go
│ │ │ │ ├── chacha_s390x.go
│ │ │ │ ├── chacha_s390x.s
│ │ │ │ └── xor.go
│ │ │ └── subtle/
│ │ │ ├── aliasing.go
│ │ │ └── aliasing_appengine.go
│ │ ├── md4/
│ │ │ ├── md4.go
│ │ │ └── md4block.go
│ │ ├── nacl/
│ │ │ ├── auth/
│ │ │ │ └── auth.go
│ │ │ ├── box/
│ │ │ │ └── box.go
│ │ │ ├── secretbox/
│ │ │ │ └── secretbox.go
│ │ │ └── sign/
│ │ │ └── sign.go
│ │ ├── ocsp/
│ │ │ └── ocsp.go
│ │ ├── openpgp/
│ │ │ ├── armor/
│ │ │ │ ├── armor.go
│ │ │ │ └── encode.go
│ │ │ ├── canonical_text.go
│ │ │ ├── clearsign/
│ │ │ │ └── clearsign.go
│ │ │ ├── elgamal/
│ │ │ │ └── elgamal.go
│ │ │ ├── errors/
│ │ │ │ └── errors.go
│ │ │ ├── keys.go
│ │ │ ├── packet/
│ │ │ │ ├── compressed.go
│ │ │ │ ├── config.go
│ │ │ │ ├── encrypted_key.go
│ │ │ │ ├── literal.go
│ │ │ │ ├── ocfb.go
│ │ │ │ ├── one_pass_signature.go
│ │ │ │ ├── opaque.go
│ │ │ │ ├── packet.go
│ │ │ │ ├── private_key.go
│ │ │ │ ├── public_key.go
│ │ │ │ ├── public_key_v3.go
│ │ │ │ ├── reader.go
│ │ │ │ ├── signature.go
│ │ │ │ ├── signature_v3.go
│ │ │ │ ├── symmetric_key_encrypted.go
│ │ │ │ ├── symmetrically_encrypted.go
│ │ │ │ ├── userattribute.go
│ │ │ │ └── userid.go
│ │ │ ├── read.go
│ │ │ ├── s2k/
│ │ │ │ └── s2k.go
│ │ │ └── write.go
│ │ ├── otr/
│ │ │ ├── libotr_test_helper.c
│ │ │ ├── otr.go
│ │ │ └── smp.go
│ │ ├── pbkdf2/
│ │ │ └── pbkdf2.go
│ │ ├── pkcs12/
│ │ │ ├── bmp-string.go
│ │ │ ├── crypto.go
│ │ │ ├── errors.go
│ │ │ ├── internal/
│ │ │ │ └── rc2/
│ │ │ │ └── rc2.go
│ │ │ ├── mac.go
│ │ │ ├── pbkdf.go
│ │ │ ├── pkcs12.go
│ │ │ └── safebags.go
│ │ ├── poly1305/
│ │ │ ├── poly1305.go
│ │ │ ├── sum_amd64.go
│ │ │ ├── sum_amd64.s
│ │ │ ├── sum_arm.go
│ │ │ ├── sum_arm.s
│ │ │ ├── sum_noasm.go
│ │ │ ├── sum_ref.go
│ │ │ ├── sum_s390x.go
│ │ │ ├── sum_s390x.s
│ │ │ └── sum_vmsl_s390x.s
│ │ ├── ripemd160/
│ │ │ ├── ripemd160.go
│ │ │ └── ripemd160block.go
│ │ ├── salsa20/
│ │ │ ├── salsa/
│ │ │ │ ├── hsalsa20.go
│ │ │ │ ├── salsa2020_amd64.s
│ │ │ │ ├── salsa208.go
│ │ │ │ ├── salsa20_amd64.go
│ │ │ │ └── salsa20_ref.go
│ │ │ └── salsa20.go
│ │ ├── scrypt/
│ │ │ └── scrypt.go
│ │ ├── sha3/
│ │ │ ├── doc.go
│ │ │ ├── hashes.go
│ │ │ ├── hashes_generic.go
│ │ │ ├── keccakf.go
│ │ │ ├── keccakf_amd64.go
│ │ │ ├── keccakf_amd64.s
│ │ │ ├── register.go
│ │ │ ├── sha3.go
│ │ │ ├── sha3_s390x.go
│ │ │ ├── sha3_s390x.s
│ │ │ ├── shake.go
│ │ │ ├── shake_generic.go
│ │ │ ├── testdata/
│ │ │ │ └── keccakKats.json.deflate
│ │ │ ├── xor.go
│ │ │ ├── xor_generic.go
│ │ │ └── xor_unaligned.go
│ │ ├── ssh/
│ │ │ ├── agent/
│ │ │ │ ├── client.go
│ │ │ │ ├── forward.go
│ │ │ │ ├── keyring.go
│ │ │ │ └── server.go
│ │ │ ├── buffer.go
│ │ │ ├── certs.go
│ │ │ ├── channel.go
│ │ │ ├── cipher.go
│ │ │ ├── client.go
│ │ │ ├── client_auth.go
│ │ │ ├── common.go
│ │ │ ├── connection.go
│ │ │ ├── doc.go
│ │ │ ├── handshake.go
│ │ │ ├── kex.go
│ │ │ ├── keys.go
│ │ │ ├── knownhosts/
│ │ │ │ └── knownhosts.go
│ │ │ ├── mac.go
│ │ │ ├── messages.go
│ │ │ ├── mux.go
│ │ │ ├── server.go
│ │ │ ├── session.go
│ │ │ ├── streamlocal.go
│ │ │ ├── tcpip.go
│ │ │ ├── terminal/
│ │ │ │ ├── terminal.go
│ │ │ │ ├── util.go
│ │ │ │ ├── util_bsd.go
│ │ │ │ ├── util_linux.go
│ │ │ │ ├── util_plan9.go
│ │ │ │ ├── util_solaris.go
│ │ │ │ └── util_windows.go
│ │ │ ├── test/
│ │ │ │ ├── doc.go
│ │ │ │ └── sshd_test_pw.c
│ │ │ ├── testdata/
│ │ │ │ ├── doc.go
│ │ │ │ └── keys.go
│ │ │ └── transport.go
│ │ ├── tea/
│ │ │ └── cipher.go
│ │ ├── twofish/
│ │ │ └── twofish.go
│ │ ├── xtea/
│ │ │ ├── block.go
│ │ │ └── cipher.go
│ │ └── xts/
│ │ └── xts.go
│ ├── net/
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── README.md
│ │ ├── bpf/
│ │ │ ├── asm.go
│ │ │ ├── constants.go
│ │ │ ├── doc.go
│ │ │ ├── instructions.go
│ │ │ ├── setter.go
│ │ │ ├── testdata/
│ │ │ │ ├── all_instructions.bpf
│ │ │ │ └── all_instructions.txt
│ │ │ ├── vm.go
│ │ │ └── vm_instructions.go
│ │ ├── codereview.cfg
│ │ ├── context/
│ │ │ ├── context.go
│ │ │ ├── ctxhttp/
│ │ │ │ ├── ctxhttp.go
│ │ │ │ └── ctxhttp_pre17.go
│ │ │ ├── go17.go
│ │ │ ├── go19.go
│ │ │ ├── pre_go17.go
│ │ │ └── pre_go19.go
│ │ ├── dict/
│ │ │ └── dict.go
│ │ ├── dns/
│ │ │ └── dnsmessage/
│ │ │ └── message.go
│ │ ├── html/
│ │ │ ├── atom/
│ │ │ │ ├── atom.go
│ │ │ │ ├── gen.go
│ │ │ │ └── table.go
│ │ │ ├── charset/
│ │ │ │ ├── charset.go
│ │ │ │ └── testdata/
│ │ │ │ ├── HTTP-charset.html
│ │ │ │ ├── HTTP-vs-UTF-8-BOM.html
│ │ │ │ ├── HTTP-vs-meta-charset.html
│ │ │ │ ├── HTTP-vs-meta-content.html
│ │ │ │ ├── No-encoding-declaration.html
│ │ │ │ ├── README
│ │ │ │ ├── UTF-16BE-BOM.html
│ │ │ │ ├── UTF-16LE-BOM.html
│ │ │ │ ├── UTF-8-BOM-vs-meta-charset.html
│ │ │ │ ├── UTF-8-BOM-vs-meta-content.html
│ │ │ │ ├── meta-charset-attribute.html
│ │ │ │ └── meta-content-attribute.html
│ │ │ ├── const.go
│ │ │ ├── doc.go
│ │ │ ├── doctype.go
│ │ │ ├── entity.go
│ │ │ ├── escape.go
│ │ │ ├── foreign.go
│ │ │ ├── node.go
│ │ │ ├── parse.go
│ │ │ ├── render.go
│ │ │ ├── testdata/
│ │ │ │ ├── go1.html
│ │ │ │ └── webkit/
│ │ │ │ └── README
│ │ │ └── token.go
│ │ ├── http/
│ │ │ ├── httpguts/
│ │ │ │ ├── guts.go
│ │ │ │ └── httplex.go
│ │ │ └── httpproxy/
│ │ │ └── proxy.go
│ │ ├── http2/
│ │ │ ├── .gitignore
│ │ │ ├── Dockerfile
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── ciphers.go
│ │ │ ├── client_conn_pool.go
│ │ │ ├── configure_transport.go
│ │ │ ├── databuffer.go
│ │ │ ├── errors.go
│ │ │ ├── flow.go
│ │ │ ├── frame.go
│ │ │ ├── go111.go
│ │ │ ├── go16.go
│ │ │ ├── go17.go
│ │ │ ├── go17_not18.go
│ │ │ ├── go18.go
│ │ │ ├── go19.go
│ │ │ ├── gotrack.go
│ │ │ ├── h2c/
│ │ │ │ └── h2c.go
│ │ │ ├── h2i/
│ │ │ │ ├── README.md
│ │ │ │ └── h2i.go
│ │ │ ├── headermap.go
│ │ │ ├── hpack/
│ │ │ │ ├── encode.go
│ │ │ │ ├── hpack.go
│ │ │ │ ├── huffman.go
│ │ │ │ └── tables.go
│ │ │ ├── http2.go
│ │ │ ├── not_go111.go
│ │ │ ├── not_go16.go
│ │ │ ├── not_go17.go
│ │ │ ├── not_go18.go
│ │ │ ├── not_go19.go
│ │ │ ├── pipe.go
│ │ │ ├── server.go
│ │ │ ├── testdata/
│ │ │ │ └── draft-ietf-httpbis-http2.xml
│ │ │ ├── transport.go
│ │ │ ├── write.go
│ │ │ ├── writesched.go
│ │ │ ├── writesched_priority.go
│ │ │ └── writesched_random.go
│ │ ├── icmp/
│ │ │ ├── dstunreach.go
│ │ │ ├── echo.go
│ │ │ ├── endpoint.go
│ │ │ ├── extension.go
│ │ │ ├── helper_posix.go
│ │ │ ├── interface.go
│ │ │ ├── ipv4.go
│ │ │ ├── ipv6.go
│ │ │ ├── listen_posix.go
│ │ │ ├── listen_stub.go
│ │ │ ├── message.go
│ │ │ ├── messagebody.go
│ │ │ ├── mpls.go
│ │ │ ├── multipart.go
│ │ │ ├── packettoobig.go
│ │ │ ├── paramprob.go
│ │ │ ├── sys_freebsd.go
│ │ │ └── timeexceeded.go
│ │ ├── idna/
│ │ │ ├── idna.go
│ │ │ ├── punycode.go
│ │ │ ├── tables.go
│ │ │ ├── trie.go
│ │ │ └── trieval.go
│ │ ├── internal/
│ │ │ ├── iana/
│ │ │ │ ├── const.go
│ │ │ │ └── gen.go
│ │ │ ├── nettest/
│ │ │ │ ├── helper_bsd.go
│ │ │ │ ├── helper_nobsd.go
│ │ │ │ ├── helper_posix.go
│ │ │ │ ├── helper_stub.go
│ │ │ │ ├── helper_unix.go
│ │ │ │ ├── helper_windows.go
│ │ │ │ ├── interface.go
│ │ │ │ ├── rlimit.go
│ │ │ │ └── stack.go
│ │ │ ├── socket/
│ │ │ │ ├── cmsghdr.go
│ │ │ │ ├── cmsghdr_bsd.go
│ │ │ │ ├── cmsghdr_linux_32bit.go
│ │ │ │ ├── cmsghdr_linux_64bit.go
│ │ │ │ ├── cmsghdr_solaris_64bit.go
│ │ │ │ ├── cmsghdr_stub.go
│ │ │ │ ├── defs_darwin.go
│ │ │ │ ├── defs_dragonfly.go
│ │ │ │ ├── defs_freebsd.go
│ │ │ │ ├── defs_linux.go
│ │ │ │ ├── defs_netbsd.go
│ │ │ │ ├── defs_openbsd.go
│ │ │ │ ├── defs_solaris.go
│ │ │ │ ├── error_unix.go
│ │ │ │ ├── error_windows.go
│ │ │ │ ├── iovec_32bit.go
│ │ │ │ ├── iovec_64bit.go
│ │ │ │ ├── iovec_solaris_64bit.go
│ │ │ │ ├── iovec_stub.go
│ │ │ │ ├── mmsghdr_stub.go
│ │ │ │ ├── mmsghdr_unix.go
│ │ │ │ ├── msghdr_bsd.go
│ │ │ │ ├── msghdr_bsdvar.go
│ │ │ │ ├── msghdr_linux.go
│ │ │ │ ├── msghdr_linux_32bit.go
│ │ │ │ ├── msghdr_linux_64bit.go
│ │ │ │ ├── msghdr_openbsd.go
│ │ │ │ ├── msghdr_solaris_64bit.go
│ │ │ │ ├── msghdr_stub.go
│ │ │ │ ├── rawconn.go
│ │ │ │ ├── rawconn_mmsg.go
│ │ │ │ ├── rawconn_msg.go
│ │ │ │ ├── rawconn_nommsg.go
│ │ │ │ ├── rawconn_nomsg.go
│ │ │ │ ├── rawconn_stub.go
│ │ │ │ ├── reflect.go
│ │ │ │ ├── socket.go
│ │ │ │ ├── sys.go
│ │ │ │ ├── sys_bsd.go
│ │ │ │ ├── sys_bsdvar.go
│ │ │ │ ├── sys_darwin.go
│ │ │ │ ├── sys_dragonfly.go
│ │ │ │ ├── sys_linux.go
│ │ │ │ ├── sys_linux_386.go
│ │ │ │ ├── sys_linux_386.s
│ │ │ │ ├── sys_linux_amd64.go
│ │ │ │ ├── sys_linux_arm.go
│ │ │ │ ├── sys_linux_arm64.go
│ │ │ │ ├── sys_linux_mips.go
│ │ │ │ ├── sys_linux_mips64.go
│ │ │ │ ├── sys_linux_mips64le.go
│ │ │ │ ├── sys_linux_mipsle.go
│ │ │ │ ├── sys_linux_ppc64.go
│ │ │ │ ├── sys_linux_ppc64le.go
│ │ │ │ ├── sys_linux_s390x.go
│ │ │ │ ├── sys_linux_s390x.s
│ │ │ │ ├── sys_netbsd.go
│ │ │ │ ├── sys_posix.go
│ │ │ │ ├── sys_solaris.go
│ │ │ │ ├── sys_solaris_amd64.s
│ │ │ │ ├── sys_stub.go
│ │ │ │ ├── sys_unix.go
│ │ │ │ ├── sys_windows.go
│ │ │ │ ├── zsys_darwin_386.go
│ │ │ │ ├── zsys_darwin_amd64.go
│ │ │ │ ├── zsys_darwin_arm.go
│ │ │ │ ├── zsys_darwin_arm64.go
│ │ │ │ ├── zsys_dragonfly_amd64.go
│ │ │ │ ├── zsys_freebsd_386.go
│ │ │ │ ├── zsys_freebsd_amd64.go
│ │ │ │ ├── zsys_freebsd_arm.go
│ │ │ │ ├── zsys_linux_386.go
│ │ │ │ ├── zsys_linux_amd64.go
│ │ │ │ ├── zsys_linux_arm.go
│ │ │ │ ├── zsys_linux_arm64.go
│ │ │ │ ├── zsys_linux_mips.go
│ │ │ │ ├── zsys_linux_mips64.go
│ │ │ │ ├── zsys_linux_mips64le.go
│ │ │ │ ├── zsys_linux_mipsle.go
│ │ │ │ ├── zsys_linux_ppc64.go
│ │ │ │ ├── zsys_linux_ppc64le.go
│ │ │ │ ├── zsys_linux_s390x.go
│ │ │ │ ├── zsys_netbsd_386.go
│ │ │ │ ├── zsys_netbsd_amd64.go
│ │ │ │ ├── zsys_netbsd_arm.go
│ │ │ │ ├── zsys_openbsd_386.go
│ │ │ │ ├── zsys_openbsd_amd64.go
│ │ │ │ ├── zsys_openbsd_arm.go
│ │ │ │ └── zsys_solaris_amd64.go
│ │ │ ├── socks/
│ │ │ │ ├── client.go
│ │ │ │ └── socks.go
│ │ │ ├── sockstest/
│ │ │ │ └── server.go
│ │ │ └── timeseries/
│ │ │ └── timeseries.go
│ │ ├── ipv4/
│ │ │ ├── batch.go
│ │ │ ├── control.go
│ │ │ ├── control_bsd.go
│ │ │ ├── control_pktinfo.go
│ │ │ ├── control_stub.go
│ │ │ ├── control_unix.go
│ │ │ ├── control_windows.go
│ │ │ ├── defs_darwin.go
│ │ │ ├── defs_dragonfly.go
│ │ │ ├── defs_freebsd.go
│ │ │ ├── defs_linux.go
│ │ │ ├── defs_netbsd.go
│ │ │ ├── defs_openbsd.go
│ │ │ ├── defs_solaris.go
│ │ │ ├── dgramopt.go
│ │ │ ├── doc.go
│ │ │ ├── endpoint.go
│ │ │ ├── gen.go
│ │ │ ├── genericopt.go
│ │ │ ├── header.go
│ │ │ ├── helper.go
│ │ │ ├── iana.go
│ │ │ ├── icmp.go
│ │ │ ├── icmp_linux.go
│ │ │ ├── icmp_stub.go
│ │ │ ├── packet.go
│ │ │ ├── packet_go1_8.go
│ │ │ ├── packet_go1_9.go
│ │ │ ├── payload.go
│ │ │ ├── payload_cmsg.go
│ │ │ ├── payload_cmsg_go1_8.go
│ │ │ ├── payload_cmsg_go1_9.go
│ │ │ ├── payload_nocmsg.go
│ │ │ ├── sockopt.go
│ │ │ ├── sockopt_posix.go
│ │ │ ├── sockopt_stub.go
│ │ │ ├── sys_asmreq.go
│ │ │ ├── sys_asmreq_stub.go
│ │ │ ├── sys_asmreqn.go
│ │ │ ├── sys_asmreqn_stub.go
│ │ │ ├── sys_bpf.go
│ │ │ ├── sys_bpf_stub.go
│ │ │ ├── sys_bsd.go
│ │ │ ├── sys_darwin.go
│ │ │ ├── sys_dragonfly.go
│ │ │ ├── sys_freebsd.go
│ │ │ ├── sys_linux.go
│ │ │ ├── sys_solaris.go
│ │ │ ├── sys_ssmreq.go
│ │ │ ├── sys_ssmreq_stub.go
│ │ │ ├── sys_stub.go
│ │ │ ├── sys_windows.go
│ │ │ ├── zsys_darwin.go
│ │ │ ├── zsys_dragonfly.go
│ │ │ ├── zsys_freebsd_386.go
│ │ │ ├── zsys_freebsd_amd64.go
│ │ │ ├── zsys_freebsd_arm.go
│ │ │ ├── zsys_linux_386.go
│ │ │ ├── zsys_linux_amd64.go
│ │ │ ├── zsys_linux_arm.go
│ │ │ ├── zsys_linux_arm64.go
│ │ │ ├── zsys_linux_mips.go
│ │ │ ├── zsys_linux_mips64.go
│ │ │ ├── zsys_linux_mips64le.go
│ │ │ ├── zsys_linux_mipsle.go
│ │ │ ├── zsys_linux_ppc.go
│ │ │ ├── zsys_linux_ppc64.go
│ │ │ ├── zsys_linux_ppc64le.go
│ │ │ ├── zsys_linux_s390x.go
│ │ │ ├── zsys_netbsd.go
│ │ │ ├── zsys_openbsd.go
│ │ │ └── zsys_solaris.go
│ │ ├── ipv6/
│ │ │ ├── batch.go
│ │ │ ├── control.go
│ │ │ ├── control_rfc2292_unix.go
│ │ │ ├── control_rfc3542_unix.go
│ │ │ ├── control_stub.go
│ │ │ ├── control_unix.go
│ │ │ ├── control_windows.go
│ │ │ ├── defs_darwin.go
│ │ │ ├── defs_dragonfly.go
│ │ │ ├── defs_freebsd.go
│ │ │ ├── defs_linux.go
│ │ │ ├── defs_netbsd.go
│ │ │ ├── defs_openbsd.go
│ │ │ ├── defs_solaris.go
│ │ │ ├── dgramopt.go
│ │ │ ├── doc.go
│ │ │ ├── endpoint.go
│ │ │ ├── gen.go
│ │ │ ├── genericopt.go
│ │ │ ├── header.go
│ │ │ ├── helper.go
│ │ │ ├── iana.go
│ │ │ ├── icmp.go
│ │ │ ├── icmp_bsd.go
│ │ │ ├── icmp_linux.go
│ │ │ ├── icmp_solaris.go
│ │ │ ├── icmp_stub.go
│ │ │ ├── icmp_windows.go
│ │ │ ├── payload.go
│ │ │ ├── payload_cmsg.go
│ │ │ ├── payload_cmsg_go1_8.go
│ │ │ ├── payload_cmsg_go1_9.go
│ │ │ ├── payload_nocmsg.go
│ │ │ ├── sockopt.go
│ │ │ ├── sockopt_posix.go
│ │ │ ├── sockopt_stub.go
│ │ │ ├── sys_asmreq.go
│ │ │ ├── sys_asmreq_stub.go
│ │ │ ├── sys_bpf.go
│ │ │ ├── sys_bpf_stub.go
│ │ │ ├── sys_bsd.go
│ │ │ ├── sys_darwin.go
│ │ │ ├── sys_freebsd.go
│ │ │ ├── sys_linux.go
│ │ │ ├── sys_solaris.go
│ │ │ ├── sys_ssmreq.go
│ │ │ ├── sys_ssmreq_stub.go
│ │ │ ├── sys_stub.go
│ │ │ ├── sys_windows.go
│ │ │ ├── zsys_darwin.go
│ │ │ ├── zsys_dragonfly.go
│ │ │ ├── zsys_freebsd_386.go
│ │ │ ├── zsys_freebsd_amd64.go
│ │ │ ├── zsys_freebsd_arm.go
│ │ │ ├── zsys_linux_386.go
│ │ │ ├── zsys_linux_amd64.go
│ │ │ ├── zsys_linux_arm.go
│ │ │ ├── zsys_linux_arm64.go
│ │ │ ├── zsys_linux_mips.go
│ │ │ ├── zsys_linux_mips64.go
│ │ │ ├── zsys_linux_mips64le.go
│ │ │ ├── zsys_linux_mipsle.go
│ │ │ ├── zsys_linux_ppc.go
│ │ │ ├── zsys_linux_ppc64.go
│ │ │ ├── zsys_linux_ppc64le.go
│ │ │ ├── zsys_linux_s390x.go
│ │ │ ├── zsys_netbsd.go
│ │ │ ├── zsys_openbsd.go
│ │ │ └── zsys_solaris.go
│ │ ├── lif/
│ │ │ ├── address.go
│ │ │ ├── binary.go
│ │ │ ├── defs_solaris.go
│ │ │ ├── lif.go
│ │ │ ├── link.go
│ │ │ ├── sys.go
│ │ │ ├── sys_solaris_amd64.s
│ │ │ ├── syscall.go
│ │ │ └── zsys_solaris_amd64.go
│ │ ├── nettest/
│ │ │ ├── conntest.go
│ │ │ ├── conntest_go16.go
│ │ │ └── conntest_go17.go
│ │ ├── netutil/
│ │ │ └── listen.go
│ │ ├── proxy/
│ │ │ ├── direct.go
│ │ │ ├── per_host.go
│ │ │ ├── proxy.go
│ │ │ └── socks5.go
│ │ ├── publicsuffix/
│ │ │ ├── gen.go
│ │ │ ├── list.go
│ │ │ └── table.go
│ │ ├── route/
│ │ │ ├── address.go
│ │ │ ├── binary.go
│ │ │ ├── defs_darwin.go
│ │ │ ├── defs_dragonfly.go
│ │ │ ├── defs_freebsd.go
│ │ │ ├── defs_netbsd.go
│ │ │ ├── defs_openbsd.go
│ │ │ ├── interface.go
│ │ │ ├── interface_announce.go
│ │ │ ├── interface_classic.go
│ │ │ ├── interface_freebsd.go
│ │ │ ├── interface_multicast.go
│ │ │ ├── interface_openbsd.go
│ │ │ ├── message.go
│ │ │ ├── route.go
│ │ │ ├── route_classic.go
│ │ │ ├── route_openbsd.go
│ │ │ ├── sys.go
│ │ │ ├── sys_darwin.go
│ │ │ ├── sys_dragonfly.go
│ │ │ ├── sys_freebsd.go
│ │ │ ├── sys_netbsd.go
│ │ │ ├── sys_openbsd.go
│ │ │ ├── syscall.go
│ │ │ ├── zsys_darwin.go
│ │ │ ├── zsys_dragonfly.go
│ │ │ ├── zsys_freebsd_386.go
│ │ │ ├── zsys_freebsd_amd64.go
│ │ │ ├── zsys_freebsd_arm.go
│ │ │ ├── zsys_netbsd.go
│ │ │ └── zsys_openbsd.go
│ │ ├── trace/
│ │ │ ├── events.go
│ │ │ ├── histogram.go
│ │ │ ├── trace.go
│ │ │ ├── trace_go16.go
│ │ │ └── trace_go17.go
│ │ ├── webdav/
│ │ │ ├── file.go
│ │ │ ├── file_go1.6.go
│ │ │ ├── file_go1.7.go
│ │ │ ├── if.go
│ │ │ ├── internal/
│ │ │ │ └── xml/
│ │ │ │ ├── README
│ │ │ │ ├── marshal.go
│ │ │ │ ├── read.go
│ │ │ │ ├── typeinfo.go
│ │ │ │ └── xml.go
│ │ │ ├── litmus_test_server.go
│ │ │ ├── lock.go
│ │ │ ├── prop.go
│ │ │ ├── webdav.go
│ │ │ └── xml.go
│ │ ├── websocket/
│ │ │ ├── client.go
│ │ │ ├── dial.go
│ │ │ ├── hybi.go
│ │ │ ├── server.go
│ │ │ └── websocket.go
│ │ └── xsrftoken/
│ │ └── xsrf.go
│ ├── oauth2/
│ │ ├── .travis.yml
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── amazon/
│ │ │ └── amazon.go
│ │ ├── bitbucket/
│ │ │ └── bitbucket.go
│ │ ├── cern/
│ │ │ └── cern.go
│ │ ├── clientcredentials/
│ │ │ └── clientcredentials.go
│ │ ├── facebook/
│ │ │ └── facebook.go
│ │ ├── fitbit/
│ │ │ └── fitbit.go
│ │ ├── foursquare/
│ │ │ └── foursquare.go
│ │ ├── github/
│ │ │ └── github.go
│ │ ├── gitlab/
│ │ │ └── gitlab.go
│ │ ├── google/
│ │ │ ├── appengine.go
│ │ │ ├── appengine_hook.go
│ │ │ ├── appengineflex_hook.go
│ │ │ ├── default.go
│ │ │ ├── doc_go19.go
│ │ │ ├── doc_not_go19.go
│ │ │ ├── go19.go
│ │ │ ├── google.go
│ │ │ ├── jwt.go
│ │ │ ├── not_go19.go
│ │ │ ├── sdk.go
│ │ │ └── testdata/
│ │ │ └── gcloud/
│ │ │ ├── credentials
│ │ │ └── properties
│ │ ├── heroku/
│ │ │ └── heroku.go
│ │ ├── hipchat/
│ │ │ └── hipchat.go
│ │ ├── instagram/
│ │ │ └── instagram.go
│ │ ├── internal/
│ │ │ ├── client_appengine.go
│ │ │ ├── doc.go
│ │ │ ├── oauth2.go
│ │ │ ├── token.go
│ │ │ └── transport.go
│ │ ├── jira/
│ │ │ └── jira.go
│ │ ├── jws/
│ │ │ └── jws.go
│ │ ├── jwt/
│ │ │ └── jwt.go
│ │ ├── kakao/
│ │ │ └── kakao.go
│ │ ├── linkedin/
│ │ │ └── linkedin.go
│ │ ├── mailchimp/
│ │ │ └── mailchimp.go
│ │ ├── mailru/
│ │ │ └── mailru.go
│ │ ├── mediamath/
│ │ │ └── mediamath.go
│ │ ├── microsoft/
│ │ │ └── microsoft.go
│ │ ├── nokiahealth/
│ │ │ └── nokiahealth.go
│ │ ├── oauth2.go
│ │ ├── odnoklassniki/
│ │ │ └── odnoklassniki.go
│ │ ├── paypal/
│ │ │ └── paypal.go
│ │ ├── slack/
│ │ │ └── slack.go
│ │ ├── spotify/
│ │ │ └── spotify.go
│ │ ├── stackoverflow/
│ │ │ └── stackoverflow.go
│ │ ├── token.go
│ │ ├── transport.go
│ │ ├── twitch/
│ │ │ └── twitch.go
│ │ ├── uber/
│ │ │ └── uber.go
│ │ ├── vk/
│ │ │ └── vk.go
│ │ ├── yahoo/
│ │ │ └── yahoo.go
│ │ └── yandex/
│ │ └── yandex.go
│ ├── sys/
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── README.md
│ │ ├── codereview.cfg
│ │ ├── cpu/
│ │ │ ├── cpu.go
│ │ │ ├── cpu_arm.go
│ │ │ ├── cpu_arm64.go
│ │ │ ├── cpu_gc_x86.go
│ │ │ ├── cpu_gccgo.c
│ │ │ ├── cpu_gccgo.go
│ │ │ ├── cpu_mips64x.go
│ │ │ ├── cpu_mipsx.go
│ │ │ ├── cpu_ppc64x.go
│ │ │ ├── cpu_s390x.go
│ │ │ ├── cpu_x86.go
│ │ │ └── cpu_x86.s
│ │ ├── plan9/
│ │ │ ├── asm.s
│ │ │ ├── asm_plan9_386.s
│ │ │ ├── asm_plan9_amd64.s
│ │ │ ├── asm_plan9_arm.s
│ │ │ ├── const_plan9.go
│ │ │ ├── dir_plan9.go
│ │ │ ├── env_plan9.go
│ │ │ ├── errors_plan9.go
│ │ │ ├── mkall.sh
│ │ │ ├── mkerrors.sh
│ │ │ ├── mksyscall.pl
│ │ │ ├── mksysnum_plan9.sh
│ │ │ ├── pwd_go15_plan9.go
│ │ │ ├── pwd_plan9.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── str.go
│ │ │ ├── syscall.go
│ │ │ ├── syscall_plan9.go
│ │ │ ├── zsyscall_plan9_386.go
│ │ │ ├── zsyscall_plan9_amd64.go
│ │ │ ├── zsyscall_plan9_arm.go
│ │ │ └── zsysnum_plan9.go
│ │ ├── unix/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── affinity_linux.go
│ │ │ ├── aliases.go
│ │ │ ├── asm_darwin_386.s
│ │ │ ├── asm_darwin_amd64.s
│ │ │ ├── asm_darwin_arm.s
│ │ │ ├── asm_darwin_arm64.s
│ │ │ ├── asm_dragonfly_amd64.s
│ │ │ ├── asm_freebsd_386.s
│ │ │ ├── asm_freebsd_amd64.s
│ │ │ ├── asm_freebsd_arm.s
│ │ │ ├── asm_linux_386.s
│ │ │ ├── asm_linux_amd64.s
│ │ │ ├── asm_linux_arm.s
│ │ │ ├── asm_linux_arm64.s
│ │ │ ├── asm_linux_mips64x.s
│ │ │ ├── asm_linux_mipsx.s
│ │ │ ├── asm_linux_ppc64x.s
│ │ │ ├── asm_linux_s390x.s
│ │ │ ├── asm_netbsd_386.s
│ │ │ ├── asm_netbsd_amd64.s
│ │ │ ├── asm_netbsd_arm.s
│ │ │ ├── asm_openbsd_386.s
│ │ │ ├── asm_openbsd_amd64.s
│ │ │ ├── asm_openbsd_arm.s
│ │ │ ├── asm_solaris_amd64.s
│ │ │ ├── bluetooth_linux.go
│ │ │ ├── cap_freebsd.go
│ │ │ ├── constants.go
│ │ │ ├── dev_aix_ppc.go
│ │ │ ├── dev_aix_ppc64.go
│ │ │ ├── dev_darwin.go
│ │ │ ├── dev_dragonfly.go
│ │ │ ├── dev_freebsd.go
│ │ │ ├── dev_linux.go
│ │ │ ├── dev_netbsd.go
│ │ │ ├── dev_openbsd.go
│ │ │ ├── dirent.go
│ │ │ ├── endian_big.go
│ │ │ ├── endian_little.go
│ │ │ ├── env_unix.go
│ │ │ ├── errors_freebsd_386.go
│ │ │ ├── errors_freebsd_amd64.go
│ │ │ ├── errors_freebsd_arm.go
│ │ │ ├── fcntl.go
│ │ │ ├── fcntl_linux_32bit.go
│ │ │ ├── gccgo.go
│ │ │ ├── gccgo_c.c
│ │ │ ├── gccgo_linux_amd64.go
│ │ │ ├── ioctl.go
│ │ │ ├── linux/
│ │ │ │ ├── Dockerfile
│ │ │ │ ├── mkall.go
│ │ │ │ ├── mksysnum.pl
│ │ │ │ └── types.go
│ │ │ ├── mkall.sh
│ │ │ ├── mkerrors.sh
│ │ │ ├── mkpost.go
│ │ │ ├── mksyscall.pl
│ │ │ ├── mksyscall_aix.pl
│ │ │ ├── mksyscall_solaris.pl
│ │ │ ├── mksysctl_openbsd.pl
│ │ │ ├── mksysnum_darwin.pl
│ │ │ ├── mksysnum_dragonfly.pl
│ │ │ ├── mksysnum_freebsd.pl
│ │ │ ├── mksysnum_netbsd.pl
│ │ │ ├── mksysnum_openbsd.pl
│ │ │ ├── openbsd_pledge.go
│ │ │ ├── pagesize_unix.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── sockcmsg_linux.go
│ │ │ ├── sockcmsg_unix.go
│ │ │ ├── str.go
│ │ │ ├── syscall.go
│ │ │ ├── syscall_aix.go
│ │ │ ├── syscall_aix_ppc.go
│ │ │ ├── syscall_aix_ppc64.go
│ │ │ ├── syscall_bsd.go
│ │ │ ├── syscall_darwin.go
│ │ │ ├── syscall_darwin_386.go
│ │ │ ├── syscall_darwin_amd64.go
│ │ │ ├── syscall_darwin_arm.go
│ │ │ ├── syscall_darwin_arm64.go
│ │ │ ├── syscall_dragonfly.go
│ │ │ ├── syscall_dragonfly_amd64.go
│ │ │ ├── syscall_freebsd.go
│ │ │ ├── syscall_freebsd_386.go
│ │ │ ├── syscall_freebsd_amd64.go
│ │ │ ├── syscall_freebsd_arm.go
│ │ │ ├── syscall_linux.go
│ │ │ ├── syscall_linux_386.go
│ │ │ ├── syscall_linux_amd64.go
│ │ │ ├── syscall_linux_amd64_gc.go
│ │ │ ├── syscall_linux_arm.go
│ │ │ ├── syscall_linux_arm64.go
│ │ │ ├── syscall_linux_gc.go
│ │ │ ├── syscall_linux_gc_386.go
│ │ │ ├── syscall_linux_gccgo_386.go
│ │ │ ├── syscall_linux_gccgo_arm.go
│ │ │ ├── syscall_linux_mips64x.go
│ │ │ ├── syscall_linux_mipsx.go
│ │ │ ├── syscall_linux_ppc64x.go
│ │ │ ├── syscall_linux_riscv64.go
│ │ │ ├── syscall_linux_s390x.go
│ │ │ ├── syscall_linux_sparc64.go
│ │ │ ├── syscall_netbsd.go
│ │ │ ├── syscall_netbsd_386.go
│ │ │ ├── syscall_netbsd_amd64.go
│ │ │ ├── syscall_netbsd_arm.go
│ │ │ ├── syscall_openbsd.go
│ │ │ ├── syscall_openbsd_386.go
│ │ │ ├── syscall_openbsd_amd64.go
│ │ │ ├── syscall_openbsd_arm.go
│ │ │ ├── syscall_solaris.go
│ │ │ ├── syscall_solaris_amd64.go
│ │ │ ├── syscall_unix.go
│ │ │ ├── syscall_unix_gc.go
│ │ │ ├── timestruct.go
│ │ │ ├── types_aix.go
│ │ │ ├── types_darwin.go
│ │ │ ├── types_dragonfly.go
│ │ │ ├── types_freebsd.go
│ │ │ ├── types_netbsd.go
│ │ │ ├── types_openbsd.go
│ │ │ ├── types_solaris.go
│ │ │ ├── xattr_bsd.go
│ │ │ ├── zerrors_aix_ppc.go
│ │ │ ├── zerrors_aix_ppc64.go
│ │ │ ├── zerrors_darwin_386.go
│ │ │ ├── zerrors_darwin_amd64.go
│ │ │ ├── zerrors_darwin_arm.go
│ │ │ ├── zerrors_darwin_arm64.go
│ │ │ ├── zerrors_dragonfly_amd64.go
│ │ │ ├── zerrors_freebsd_386.go
│ │ │ ├── zerrors_freebsd_amd64.go
│ │ │ ├── zerrors_freebsd_arm.go
│ │ │ ├── zerrors_linux_386.go
│ │ │ ├── zerrors_linux_amd64.go
│ │ │ ├── zerrors_linux_arm.go
│ │ │ ├── zerrors_linux_arm64.go
│ │ │ ├── zerrors_linux_mips.go
│ │ │ ├── zerrors_linux_mips64.go
│ │ │ ├── zerrors_linux_mips64le.go
│ │ │ ├── zerrors_linux_mipsle.go
│ │ │ ├── zerrors_linux_ppc64.go
│ │ │ ├── zerrors_linux_ppc64le.go
│ │ │ ├── zerrors_linux_riscv64.go
│ │ │ ├── zerrors_linux_s390x.go
│ │ │ ├── zerrors_linux_sparc64.go
│ │ │ ├── zerrors_netbsd_386.go
│ │ │ ├── zerrors_netbsd_amd64.go
│ │ │ ├── zerrors_netbsd_arm.go
│ │ │ ├── zerrors_openbsd_386.go
│ │ │ ├── zerrors_openbsd_amd64.go
│ │ │ ├── zerrors_openbsd_arm.go
│ │ │ ├── zerrors_solaris_amd64.go
│ │ │ ├── zptrace386_linux.go
│ │ │ ├── zptracearm_linux.go
│ │ │ ├── zptracemips_linux.go
│ │ │ ├── zptracemipsle_linux.go
│ │ │ ├── zsyscall_aix_ppc.go
│ │ │ ├── zsyscall_aix_ppc64.go
│ │ │ ├── zsyscall_darwin_386.go
│ │ │ ├── zsyscall_darwin_amd64.go
│ │ │ ├── zsyscall_darwin_arm.go
│ │ │ ├── zsyscall_darwin_arm64.go
│ │ │ ├── zsyscall_dragonfly_amd64.go
│ │ │ ├── zsyscall_freebsd_386.go
│ │ │ ├── zsyscall_freebsd_amd64.go
│ │ │ ├── zsyscall_freebsd_arm.go
│ │ │ ├── zsyscall_linux_386.go
│ │ │ ├── zsyscall_linux_amd64.go
│ │ │ ├── zsyscall_linux_arm.go
│ │ │ ├── zsyscall_linux_arm64.go
│ │ │ ├── zsyscall_linux_mips.go
│ │ │ ├── zsyscall_linux_mips64.go
│ │ │ ├── zsyscall_linux_mips64le.go
│ │ │ ├── zsyscall_linux_mipsle.go
│ │ │ ├── zsyscall_linux_ppc64.go
│ │ │ ├── zsyscall_linux_ppc64le.go
│ │ │ ├── zsyscall_linux_riscv64.go
│ │ │ ├── zsyscall_linux_s390x.go
│ │ │ ├── zsyscall_linux_sparc64.go
│ │ │ ├── zsyscall_netbsd_386.go
│ │ │ ├── zsyscall_netbsd_amd64.go
│ │ │ ├── zsyscall_netbsd_arm.go
│ │ │ ├── zsyscall_openbsd_386.go
│ │ │ ├── zsyscall_openbsd_amd64.go
│ │ │ ├── zsyscall_openbsd_arm.go
│ │ │ ├── zsyscall_solaris_amd64.go
│ │ │ ├── zsysctl_openbsd_386.go
│ │ │ ├── zsysctl_openbsd_amd64.go
│ │ │ ├── zsysctl_openbsd_arm.go
│ │ │ ├── zsysnum_darwin_386.go
│ │ │ ├── zsysnum_darwin_amd64.go
│ │ │ ├── zsysnum_darwin_arm.go
│ │ │ ├── zsysnum_darwin_arm64.go
│ │ │ ├── zsysnum_dragonfly_amd64.go
│ │ │ ├── zsysnum_freebsd_386.go
│ │ │ ├── zsysnum_freebsd_amd64.go
│ │ │ ├── zsysnum_freebsd_arm.go
│ │ │ ├── zsysnum_linux_386.go
│ │ │ ├── zsysnum_linux_amd64.go
│ │ │ ├── zsysnum_linux_arm.go
│ │ │ ├── zsysnum_linux_arm64.go
│ │ │ ├── zsysnum_linux_mips.go
│ │ │ ├── zsysnum_linux_mips64.go
│ │ │ ├── zsysnum_linux_mips64le.go
│ │ │ ├── zsysnum_linux_mipsle.go
│ │ │ ├── zsysnum_linux_ppc64.go
│ │ │ ├── zsysnum_linux_ppc64le.go
│ │ │ ├── zsysnum_linux_riscv64.go
│ │ │ ├── zsysnum_linux_s390x.go
│ │ │ ├── zsysnum_linux_sparc64.go
│ │ │ ├── zsysnum_netbsd_386.go
│ │ │ ├── zsysnum_netbsd_amd64.go
│ │ │ ├── zsysnum_netbsd_arm.go
│ │ │ ├── zsysnum_openbsd_386.go
│ │ │ ├── zsysnum_openbsd_amd64.go
│ │ │ ├── zsysnum_openbsd_arm.go
│ │ │ ├── ztypes_aix_ppc.go
│ │ │ ├── ztypes_aix_ppc64.go
│ │ │ ├── ztypes_darwin_386.go
│ │ │ ├── ztypes_darwin_amd64.go
│ │ │ ├── ztypes_darwin_arm.go
│ │ │ ├── ztypes_darwin_arm64.go
│ │ │ ├── ztypes_dragonfly_amd64.go
│ │ │ ├── ztypes_freebsd_386.go
│ │ │ ├── ztypes_freebsd_amd64.go
│ │ │ ├── ztypes_freebsd_arm.go
│ │ │ ├── ztypes_linux_386.go
│ │ │ ├── ztypes_linux_amd64.go
│ │ │ ├── ztypes_linux_arm.go
│ │ │ ├── ztypes_linux_arm64.go
│ │ │ ├── ztypes_linux_mips.go
│ │ │ ├── ztypes_linux_mips64.go
│ │ │ ├── ztypes_linux_mips64le.go
│ │ │ ├── ztypes_linux_mipsle.go
│ │ │ ├── ztypes_linux_ppc64.go
│ │ │ ├── ztypes_linux_ppc64le.go
│ │ │ ├── ztypes_linux_riscv64.go
│ │ │ ├── ztypes_linux_s390x.go
│ │ │ ├── ztypes_linux_sparc64.go
│ │ │ ├── ztypes_netbsd_386.go
│ │ │ ├── ztypes_netbsd_amd64.go
│ │ │ ├── ztypes_netbsd_arm.go
│ │ │ ├── ztypes_openbsd_386.go
│ │ │ ├── ztypes_openbsd_amd64.go
│ │ │ ├── ztypes_openbsd_arm.go
│ │ │ └── ztypes_solaris_amd64.go
│ │ └── windows/
│ │ ├── aliases.go
│ │ ├── asm_windows_386.s
│ │ ├── asm_windows_amd64.s
│ │ ├── asm_windows_arm.s
│ │ ├── dll_windows.go
│ │ ├── env_windows.go
│ │ ├── eventlog.go
│ │ ├── exec_windows.go
│ │ ├── memory_windows.go
│ │ ├── mksyscall.go
│ │ ├── race.go
│ │ ├── race0.go
│ │ ├── registry/
│ │ │ ├── key.go
│ │ │ ├── mksyscall.go
│ │ │ ├── syscall.go
│ │ │ ├── value.go
│ │ │ └── zsyscall_windows.go
│ │ ├── security_windows.go
│ │ ├── service.go
│ │ ├── str.go
│ │ ├── svc/
│ │ │ ├── debug/
│ │ │ │ ├── log.go
│ │ │ │ └── service.go
│ │ │ ├── event.go
│ │ │ ├── eventlog/
│ │ │ │ ├── install.go
│ │ │ │ └── log.go
│ │ │ ├── example/
│ │ │ │ ├── beep.go
│ │ │ │ ├── install.go
│ │ │ │ ├── main.go
│ │ │ │ ├── manage.go
│ │ │ │ └── service.go
│ │ │ ├── go12.c
│ │ │ ├── go12.go
│ │ │ ├── go13.go
│ │ │ ├── mgr/
│ │ │ │ ├── config.go
│ │ │ │ ├── mgr.go
│ │ │ │ ├── recovery.go
│ │ │ │ └── service.go
│ │ │ ├── security.go
│ │ │ ├── service.go
│ │ │ ├── sys_386.s
│ │ │ ├── sys_amd64.s
│ │ │ └── sys_arm.s
│ │ ├── syscall.go
│ │ ├── syscall_windows.go
│ │ ├── types_windows.go
│ │ ├── types_windows_386.go
│ │ ├── types_windows_amd64.go
│ │ ├── types_windows_arm.go
│ │ └── zsyscall_windows.go
│ ├── text/
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── README.md
│ │ ├── cases/
│ │ │ ├── cases.go
│ │ │ ├── context.go
│ │ │ ├── fold.go
│ │ │ ├── gen.go
│ │ │ ├── gen_trieval.go
│ │ │ ├── icu.go
│ │ │ ├── info.go
│ │ │ ├── map.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ └── trieval.go
│ │ ├── cmd/
│ │ │ └── gotext/
│ │ │ ├── common.go
│ │ │ ├── doc.go
│ │ │ ├── examples/
│ │ │ │ ├── extract/
│ │ │ │ │ ├── catalog.go
│ │ │ │ │ ├── locales/
│ │ │ │ │ │ ├── de/
│ │ │ │ │ │ │ ├── messages.gotext.json
│ │ │ │ │ │ │ └── out.gotext.json
│ │ │ │ │ │ ├── en-US/
│ │ │ │ │ │ │ ├── messages.gotext.json
│ │ │ │ │ │ │ └── out.gotext.json
│ │ │ │ │ │ ├── extracted.gotext.json
│ │ │ │ │ │ └── zh/
│ │ │ │ │ │ ├── messages.gotext.json
│ │ │ │ │ │ └── out.gotext.json
│ │ │ │ │ └── main.go
│ │ │ │ ├── extract_http/
│ │ │ │ │ ├── locales/
│ │ │ │ │ │ ├── de/
│ │ │ │ │ │ │ └── out.gotext.json
│ │ │ │ │ │ ├── en-US/
│ │ │ │ │ │ │ └── out.gotext.json
│ │ │ │ │ │ ├── extracted.gotext.json
│ │ │ │ │ │ └── zh/
│ │ │ │ │ │ └── out.gotext.json
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── pkg/
│ │ │ │ │ └── pkg.go
│ │ │ │ └── rewrite/
│ │ │ │ ├── main.go
│ │ │ │ └── printer.go
│ │ │ ├── extract.go
│ │ │ ├── generate.go
│ │ │ ├── main.go
│ │ │ └── rewrite.go
│ │ ├── codereview.cfg
│ │ ├── collate/
│ │ │ ├── collate.go
│ │ │ ├── index.go
│ │ │ ├── maketables.go
│ │ │ ├── option.go
│ │ │ ├── sort.go
│ │ │ ├── tables.go
│ │ │ └── tools/
│ │ │ └── colcmp/
│ │ │ ├── Makefile
│ │ │ ├── chars.go
│ │ │ ├── col.go
│ │ │ ├── colcmp.go
│ │ │ ├── darwin.go
│ │ │ ├── gen.go
│ │ │ └── icu.go
│ │ ├── currency/
│ │ │ ├── common.go
│ │ │ ├── currency.go
│ │ │ ├── format.go
│ │ │ ├── gen.go
│ │ │ ├── gen_common.go
│ │ │ ├── query.go
│ │ │ └── tables.go
│ │ ├── date/
│ │ │ ├── gen.go
│ │ │ └── tables.go
│ │ ├── doc.go
│ │ ├── encoding/
│ │ │ ├── charmap/
│ │ │ │ ├── charmap.go
│ │ │ │ ├── maketables.go
│ │ │ │ └── tables.go
│ │ │ ├── encoding.go
│ │ │ ├── htmlindex/
│ │ │ │ ├── gen.go
│ │ │ │ ├── htmlindex.go
│ │ │ │ ├── map.go
│ │ │ │ └── tables.go
│ │ │ ├── ianaindex/
│ │ │ │ ├── gen.go
│ │ │ │ ├── ianaindex.go
│ │ │ │ └── tables.go
│ │ │ ├── internal/
│ │ │ │ ├── enctest/
│ │ │ │ │ └── enctest.go
│ │ │ │ ├── identifier/
│ │ │ │ │ ├── gen.go
│ │ │ │ │ ├── identifier.go
│ │ │ │ │ └── mib.go
│ │ │ │ └── internal.go
│ │ │ ├── japanese/
│ │ │ │ ├── all.go
│ │ │ │ ├── eucjp.go
│ │ │ │ ├── iso2022jp.go
│ │ │ │ ├── maketables.go
│ │ │ │ ├── shiftjis.go
│ │ │ │ └── tables.go
│ │ │ ├── korean/
│ │ │ │ ├── euckr.go
│ │ │ │ ├── maketables.go
│ │ │ │ └── tables.go
│ │ │ ├── simplifiedchinese/
│ │ │ │ ├── all.go
│ │ │ │ ├── gbk.go
│ │ │ │ ├── hzgb2312.go
│ │ │ │ ├── maketables.go
│ │ │ │ └── tables.go
│ │ │ ├── testdata/
│ │ │ │ ├── candide-gb18030.txt
│ │ │ │ ├── candide-utf-16le.txt
│ │ │ │ ├── candide-utf-32be.txt
│ │ │ │ ├── candide-utf-8.txt
│ │ │ │ ├── candide-windows-1252.txt
│ │ │ │ ├── rashomon-euc-jp.txt
│ │ │ │ ├── rashomon-iso-2022-jp.txt
│ │ │ │ ├── rashomon-shift-jis.txt
│ │ │ │ ├── rashomon-utf-8.txt
│ │ │ │ ├── sunzi-bingfa-gb-levels-1-and-2-hz-gb2312.txt
│ │ │ │ ├── sunzi-bingfa-gb-levels-1-and-2-utf-8.txt
│ │ │ │ ├── sunzi-bingfa-simplified-gbk.txt
│ │ │ │ ├── sunzi-bingfa-simplified-utf-8.txt
│ │ │ │ ├── sunzi-bingfa-traditional-big5.txt
│ │ │ │ ├── sunzi-bingfa-traditional-utf-8.txt
│ │ │ │ ├── unsu-joh-eun-nal-euc-kr.txt
│ │ │ │ └── unsu-joh-eun-nal-utf-8.txt
│ │ │ ├── traditionalchinese/
│ │ │ │ ├── big5.go
│ │ │ │ ├── maketables.go
│ │ │ │ └── tables.go
│ │ │ └── unicode/
│ │ │ ├── override.go
│ │ │ ├── unicode.go
│ │ │ └── utf32/
│ │ │ └── utf32.go
│ │ ├── feature/
│ │ │ └── plural/
│ │ │ ├── common.go
│ │ │ ├── gen.go
│ │ │ ├── gen_common.go
│ │ │ ├── message.go
│ │ │ ├── plural.go
│ │ │ └── tables.go
│ │ ├── gen.go
│ │ ├── internal/
│ │ │ ├── catmsg/
│ │ │ │ ├── catmsg.go
│ │ │ │ ├── codec.go
│ │ │ │ └── varint.go
│ │ │ ├── cldrtree/
│ │ │ │ ├── cldrtree.go
│ │ │ │ ├── generate.go
│ │ │ │ ├── option.go
│ │ │ │ ├── testdata/
│ │ │ │ │ ├── test1/
│ │ │ │ │ │ ├── common/
│ │ │ │ │ │ │ └── main/
│ │ │ │ │ │ │ └── root.xml
│ │ │ │ │ │ └── output.go
│ │ │ │ │ └── test2/
│ │ │ │ │ ├── common/
│ │ │ │ │ │ └── main/
│ │ │ │ │ │ ├── en.xml
│ │ │ │ │ │ ├── en_001.xml
│ │ │ │ │ │ ├── en_GB.xml
│ │ │ │ │ │ └── root.xml
│ │ │ │ │ └── output.go
│ │ │ │ ├── tree.go
│ │ │ │ └── type.go
│ │ │ ├── colltab/
│ │ │ │ ├── collelem.go
│ │ │ │ ├── colltab.go
│ │ │ │ ├── contract.go
│ │ │ │ ├── iter.go
│ │ │ │ ├── numeric.go
│ │ │ │ ├── table.go
│ │ │ │ ├── trie.go
│ │ │ │ └── weighter.go
│ │ │ ├── export/
│ │ │ │ ├── README
│ │ │ │ └── idna/
│ │ │ │ ├── gen.go
│ │ │ │ ├── gen_common.go
│ │ │ │ ├── gen_trieval.go
│ │ │ │ ├── idna10.0.0.go
│ │ │ │ ├── idna9.0.0.go
│ │ │ │ ├── punycode.go
│ │ │ │ ├── tables10.0.0.go
│ │ │ │ ├── tables9.0.0.go
│ │ │ │ ├── trie.go
│ │ │ │ └── trieval.go
│ │ │ ├── format/
│ │ │ │ ├── format.go
│ │ │ │ └── parser.go
│ │ │ ├── gen/
│ │ │ │ ├── code.go
│ │ │ │ └── gen.go
│ │ │ ├── gen.go
│ │ │ ├── internal.go
│ │ │ ├── match.go
│ │ │ ├── number/
│ │ │ │ ├── common.go
│ │ │ │ ├── decimal.go
│ │ │ │ ├── format.go
│ │ │ │ ├── gen.go
│ │ │ │ ├── gen_common.go
│ │ │ │ ├── number.go
│ │ │ │ ├── pattern.go
│ │ │ │ ├── roundingmode_string.go
│ │ │ │ └── tables.go
│ │ │ ├── stringset/
│ │ │ │ └── set.go
│ │ │ ├── tables.go
│ │ │ ├── tag/
│ │ │ │ └── tag.go
│ │ │ ├── testtext/
│ │ │ │ ├── codesize.go
│ │ │ │ ├── flag.go
│ │ │ │ ├── gc.go
│ │ │ │ ├── gccgo.go
│ │ │ │ ├── go1_6.go
│ │ │ │ ├── go1_7.go
│ │ │ │ └── text.go
│ │ │ ├── triegen/
│ │ │ │ ├── compact.go
│ │ │ │ ├── print.go
│ │ │ │ └── triegen.go
│ │ │ ├── ucd/
│ │ │ │ └── ucd.go
│ │ │ └── utf8internal/
│ │ │ └── utf8internal.go
│ │ ├── language/
│ │ │ ├── Makefile
│ │ │ ├── common.go
│ │ │ ├── coverage.go
│ │ │ ├── display/
│ │ │ │ ├── dict.go
│ │ │ │ ├── display.go
│ │ │ │ ├── lookup.go
│ │ │ │ ├── maketables.go
│ │ │ │ └── tables.go
│ │ │ ├── doc.go
│ │ │ ├── gen.go
│ │ │ ├── gen_common.go
│ │ │ ├── gen_index.go
│ │ │ ├── go1_1.go
│ │ │ ├── go1_2.go
│ │ │ ├── index.go
│ │ │ ├── language.go
│ │ │ ├── lookup.go
│ │ │ ├── match.go
│ │ │ ├── parse.go
│ │ │ ├── tables.go
│ │ │ ├── tags.go
│ │ │ └── testdata/
│ │ │ ├── CLDRLocaleMatcherTest.txt
│ │ │ └── GoLocaleMatcherTest.txt
│ │ ├── message/
│ │ │ ├── catalog/
│ │ │ │ ├── catalog.go
│ │ │ │ ├── dict.go
│ │ │ │ ├── go19.go
│ │ │ │ └── gopre19.go
│ │ │ ├── catalog.go
│ │ │ ├── doc.go
│ │ │ ├── format.go
│ │ │ ├── message.go
│ │ │ ├── pipeline/
│ │ │ │ ├── extract.go
│ │ │ │ ├── generate.go
│ │ │ │ ├── message.go
│ │ │ │ ├── pipeline.go
│ │ │ │ └── rewrite.go
│ │ │ └── print.go
│ │ ├── number/
│ │ │ ├── doc.go
│ │ │ ├── format.go
│ │ │ ├── number.go
│ │ │ └── option.go
│ │ ├── runes/
│ │ │ ├── cond.go
│ │ │ └── runes.go
│ │ ├── search/
│ │ │ ├── index.go
│ │ │ ├── pattern.go
│ │ │ ├── search.go
│ │ │ └── tables.go
│ │ ├── secure/
│ │ │ ├── bidirule/
│ │ │ │ ├── bidirule.go
│ │ │ │ ├── bidirule10.0.0.go
│ │ │ │ └── bidirule9.0.0.go
│ │ │ ├── doc.go
│ │ │ └── precis/
│ │ │ ├── class.go
│ │ │ ├── context.go
│ │ │ ├── doc.go
│ │ │ ├── gen.go
│ │ │ ├── gen_trieval.go
│ │ │ ├── nickname.go
│ │ │ ├── options.go
│ │ │ ├── profile.go
│ │ │ ├── profiles.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ ├── transformer.go
│ │ │ └── trieval.go
│ │ ├── transform/
│ │ │ └── transform.go
│ │ ├── unicode/
│ │ │ ├── bidi/
│ │ │ │ ├── bidi.go
│ │ │ │ ├── bracket.go
│ │ │ │ ├── core.go
│ │ │ │ ├── gen.go
│ │ │ │ ├── gen_ranges.go
│ │ │ │ ├── gen_trieval.go
│ │ │ │ ├── prop.go
│ │ │ │ ├── tables10.0.0.go
│ │ │ │ ├── tables9.0.0.go
│ │ │ │ └── trieval.go
│ │ │ ├── cldr/
│ │ │ │ ├── base.go
│ │ │ │ ├── cldr.go
│ │ │ │ ├── collate.go
│ │ │ │ ├── decode.go
│ │ │ │ ├── makexml.go
│ │ │ │ ├── resolve.go
│ │ │ │ ├── slice.go
│ │ │ │ └── xml.go
│ │ │ ├── doc.go
│ │ │ ├── norm/
│ │ │ │ ├── composition.go
│ │ │ │ ├── forminfo.go
│ │ │ │ ├── input.go
│ │ │ │ ├── iter.go
│ │ │ │ ├── maketables.go
│ │ │ │ ├── normalize.go
│ │ │ │ ├── readwriter.go
│ │ │ │ ├── tables10.0.0.go
│ │ │ │ ├── tables9.0.0.go
│ │ │ │ ├── transform.go
│ │ │ │ ├── trie.go
│ │ │ │ └── triegen.go
│ │ │ ├── rangetable/
│ │ │ │ ├── gen.go
│ │ │ │ ├── merge.go
│ │ │ │ ├── rangetable.go
│ │ │ │ ├── tables10.0.0.go
│ │ │ │ └── tables9.0.0.go
│ │ │ └── runenames/
│ │ │ ├── bits.go
│ │ │ ├── gen.go
│ │ │ ├── gen_bits.go
│ │ │ ├── runenames.go
│ │ │ └── tables.go
│ │ └── width/
│ │ ├── gen.go
│ │ ├── gen_common.go
│ │ ├── gen_trieval.go
│ │ ├── kind_string.go
│ │ ├── tables10.0.0.go
│ │ ├── tables9.0.0.go
│ │ ├── transform.go
│ │ ├── trieval.go
│ │ └── width.go
│ ├── time/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── README.md
│ │ └── rate/
│ │ ├── rate.go
│ │ ├── rate_go16.go
│ │ └── rate_go17.go
│ └── tools/
│ ├── .gitattributes
│ ├── .gitignore
│ ├── AUTHORS
│ ├── CONTRIBUTING.md
│ ├── CONTRIBUTORS
│ ├── LICENSE
│ ├── PATENTS
│ ├── README.md
│ ├── benchmark/
│ │ └── parse/
│ │ └── parse.go
│ ├── blog/
│ │ ├── atom/
│ │ │ └── atom.go
│ │ └── blog.go
│ ├── cmd/
│ │ ├── benchcmp/
│ │ │ ├── benchcmp.go
│ │ │ ├── compare.go
│ │ │ └── doc.go
│ │ ├── bundle/
│ │ │ ├── .gitignore
│ │ │ ├── main.go
│ │ │ └── testdata/
│ │ │ ├── out.golden
│ │ │ └── src/
│ │ │ ├── domain.name/
│ │ │ │ └── importdecl/
│ │ │ │ └── p.go
│ │ │ └── initial/
│ │ │ ├── a.go
│ │ │ ├── b.go
│ │ │ └── c.go
│ │ ├── callgraph/
│ │ │ ├── main.go
│ │ │ └── testdata/
│ │ │ └── src/
│ │ │ └── pkg/
│ │ │ └── pkg.go
│ │ ├── compilebench/
│ │ │ └── main.go
│ │ ├── cover/
│ │ │ ├── README
│ │ │ ├── cover.go
│ │ │ ├── doc.go
│ │ │ ├── func.go
│ │ │ ├── html.go
│ │ │ └── testdata/
│ │ │ ├── main.go
│ │ │ └── test.go
│ │ ├── digraph/
│ │ │ └── digraph.go
│ │ ├── eg/
│ │ │ └── eg.go
│ │ ├── fiximports/
│ │ │ ├── main.go
│ │ │ └── testdata/
│ │ │ └── src/
│ │ │ ├── fruit.io/
│ │ │ │ ├── banana/
│ │ │ │ │ └── banana.go
│ │ │ │ ├── orange/
│ │ │ │ │ └── orange.go
│ │ │ │ └── pear/
│ │ │ │ └── pear.go
│ │ │ ├── new.com/
│ │ │ │ └── one/
│ │ │ │ └── one.go
│ │ │ ├── old.com/
│ │ │ │ ├── bad/
│ │ │ │ │ └── bad.go
│ │ │ │ └── one/
│ │ │ │ └── one.go
│ │ │ └── titanic.biz/
│ │ │ ├── bar/
│ │ │ │ └── bar.go
│ │ │ └── foo/
│ │ │ └── foo.go
│ │ ├── go-contrib-init/
│ │ │ └── contrib.go
│ │ ├── godex/
│ │ │ ├── doc.go
│ │ │ ├── gc.go
│ │ │ ├── gccgo.go
│ │ │ ├── godex.go
│ │ │ ├── isAlias18.go
│ │ │ ├── isAlias19.go
│ │ │ ├── print.go
│ │ │ ├── source.go
│ │ │ └── writetype.go
│ │ ├── godoc/
│ │ │ ├── blog.go
│ │ │ ├── codewalk.go
│ │ │ ├── dl.go
│ │ │ ├── doc.go
│ │ │ ├── goroot.go
│ │ │ ├── handlers.go
│ │ │ ├── index.go
│ │ │ ├── main.go
│ │ │ └── play.go
│ │ ├── goimports/
│ │ │ ├── doc.go
│ │ │ ├── goimports.go
│ │ │ ├── goimports_gc.go
│ │ │ └── goimports_not_gc.go
│ │ ├── gomvpkg/
│ │ │ └── main.go
│ │ ├── gopls/
│ │ │ ├── integration/
│ │ │ │ └── vscode/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── README.md
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ └── extension.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── tslint.json
│ │ │ └── main.go
│ │ ├── gorename/
│ │ │ └── main.go
│ │ ├── gotype/
│ │ │ ├── gotype.go
│ │ │ ├── sizesFor18.go
│ │ │ └── sizesFor19.go
│ │ ├── goyacc/
│ │ │ ├── doc.go
│ │ │ ├── testdata/
│ │ │ │ └── expr/
│ │ │ │ ├── README
│ │ │ │ ├── expr.y
│ │ │ │ └── main.go
│ │ │ └── yacc.go
│ │ ├── guru/
│ │ │ ├── callees.go
│ │ │ ├── callers.go
│ │ │ ├── callstack.go
│ │ │ ├── definition.go
│ │ │ ├── describe.go
│ │ │ ├── freevars.go
│ │ │ ├── guru.go
│ │ │ ├── implements.go
│ │ │ ├── isAlias18.go
│ │ │ ├── isAlias19.go
│ │ │ ├── main.go
│ │ │ ├── peers.go
│ │ │ ├── pointsto.go
│ │ │ ├── pos.go
│ │ │ ├── referrers.go
│ │ │ ├── serial/
│ │ │ │ └── serial.go
│ │ │ ├── testdata/
│ │ │ │ └── src/
│ │ │ │ ├── README.txt
│ │ │ │ ├── alias/
│ │ │ │ │ ├── alias.go
│ │ │ │ │ └── alias.golden
│ │ │ │ ├── calls/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── calls-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── definition-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ ├── main.golden
│ │ │ │ │ └── type.go
│ │ │ │ ├── describe/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── describe-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── freevars/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── implements/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── implements-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── implements-methods/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── implements-methods-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── imports/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── lib/
│ │ │ │ │ ├── lib.go
│ │ │ │ │ └── sublib/
│ │ │ │ │ └── sublib.go
│ │ │ │ ├── main/
│ │ │ │ │ └── multi.go
│ │ │ │ ├── peers/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── peers-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── pointsto/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── pointsto-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── referrers/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── referrers-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── reflection/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── softerrs/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── what/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── what-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ └── whicherrs/
│ │ │ │ ├── main.go
│ │ │ │ └── main.golden
│ │ │ ├── what.go
│ │ │ └── whicherrs.go
│ │ ├── html2article/
│ │ │ └── conv.go
│ │ ├── present/
│ │ │ ├── dir.go
│ │ │ ├── doc.go
│ │ │ ├── main.go
│ │ │ ├── play.go
│ │ │ ├── static/
│ │ │ │ ├── article.css
│ │ │ │ ├── dir.css
│ │ │ │ ├── dir.js
│ │ │ │ ├── jquery-ui.js
│ │ │ │ ├── notes.css
│ │ │ │ ├── notes.js
│ │ │ │ ├── slides.js
│ │ │ │ └── styles.css
│ │ │ └── templates/
│ │ │ ├── action.tmpl
│ │ │ ├── article.tmpl
│ │ │ ├── dir.tmpl
│ │ │ └── slides.tmpl
│ │ ├── splitdwarf/
│ │ │ ├── doc.go
│ │ │ ├── internal/
│ │ │ │ └── macho/
│ │ │ │ ├── fat.go
│ │ │ │ ├── file.go
│ │ │ │ ├── macho.go
│ │ │ │ ├── reloctype.go
│ │ │ │ ├── reloctype_string.go
│ │ │ │ └── testdata/
│ │ │ │ ├── clang-386-darwin-exec-with-rpath
│ │ │ │ ├── clang-386-darwin.obj
│ │ │ │ ├── clang-amd64-darwin-exec-with-rpath
│ │ │ │ ├── clang-amd64-darwin.obj
│ │ │ │ ├── fat-gcc-386-amd64-darwin-exec
│ │ │ │ ├── gcc-386-darwin-exec
│ │ │ │ ├── gcc-amd64-darwin-exec
│ │ │ │ ├── gcc-amd64-darwin-exec-debug
│ │ │ │ └── hello.c
│ │ │ └── splitdwarf.go
│ │ ├── ssadump/
│ │ │ └── main.go
│ │ ├── stress/
│ │ │ └── stress.go
│ │ ├── stringer/
│ │ │ ├── stringer.go
│ │ │ └── testdata/
│ │ │ ├── cgo.go
│ │ │ ├── conv.go
│ │ │ ├── day.go
│ │ │ ├── gap.go
│ │ │ ├── num.go
│ │ │ ├── number.go
│ │ │ ├── prime.go
│ │ │ ├── tag_main.go
│ │ │ ├── tag_tag.go
│ │ │ ├── unum.go
│ │ │ └── unum2.go
│ │ └── toolstash/
│ │ ├── buildall
│ │ ├── cmp.go
│ │ └── main.go
│ ├── codereview.cfg
│ ├── container/
│ │ └── intsets/
│ │ ├── popcnt_amd64.go
│ │ ├── popcnt_amd64.s
│ │ ├── popcnt_gccgo.go
│ │ ├── popcnt_gccgo_c.c
│ │ ├── popcnt_generic.go
│ │ ├── sparse.go
│ │ └── util.go
│ ├── cover/
│ │ └── profile.go
│ ├── go/
│ │ ├── analysis/
│ │ │ ├── analysis.go
│ │ │ ├── analysistest/
│ │ │ │ └── analysistest.go
│ │ │ ├── cmd/
│ │ │ │ └── vet/
│ │ │ │ ├── README
│ │ │ │ └── vet.go
│ │ │ ├── doc.go
│ │ │ ├── internal/
│ │ │ │ ├── analysisflags/
│ │ │ │ │ ├── flags.go
│ │ │ │ │ └── help.go
│ │ │ │ ├── checker/
│ │ │ │ │ └── checker.go
│ │ │ │ └── facts/
│ │ │ │ ├── facts.go
│ │ │ │ └── imports.go
│ │ │ ├── multichecker/
│ │ │ │ └── multichecker.go
│ │ │ ├── passes/
│ │ │ │ ├── README
│ │ │ │ ├── asmdecl/
│ │ │ │ │ ├── asmdecl.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ ├── asm.go
│ │ │ │ │ ├── asm1.s
│ │ │ │ │ ├── asm2.s
│ │ │ │ │ ├── asm3.s
│ │ │ │ │ ├── asm4.s
│ │ │ │ │ ├── asm5.s
│ │ │ │ │ ├── asm6.s
│ │ │ │ │ ├── asm7.s
│ │ │ │ │ └── asm8.s
│ │ │ │ ├── assign/
│ │ │ │ │ ├── assign.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── atomic/
│ │ │ │ │ ├── atomic.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── atomicalign/
│ │ │ │ │ ├── atomicalign.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ ├── a.go
│ │ │ │ │ │ └── stub.go
│ │ │ │ │ └── b/
│ │ │ │ │ ├── b.go
│ │ │ │ │ └── stub.go
│ │ │ │ ├── bools/
│ │ │ │ │ ├── bools.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── buildssa/
│ │ │ │ │ ├── buildssa.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── buildtag/
│ │ │ │ │ ├── buildtag.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── buildtag.go
│ │ │ │ ├── cgocall/
│ │ │ │ │ ├── cgocall.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ ├── cgo.go
│ │ │ │ │ │ └── cgo3.go
│ │ │ │ │ ├── b/
│ │ │ │ │ │ └── b.go
│ │ │ │ │ └── c/
│ │ │ │ │ └── c.go
│ │ │ │ ├── composite/
│ │ │ │ │ ├── composite.go
│ │ │ │ │ ├── testdata/
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── a/
│ │ │ │ │ │ └── a.go
│ │ │ │ │ └── whitelist.go
│ │ │ │ ├── copylock/
│ │ │ │ │ ├── copylock.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ ├── copylock.go
│ │ │ │ │ ├── copylock_func.go
│ │ │ │ │ └── copylock_range.go
│ │ │ │ ├── ctrlflow/
│ │ │ │ │ ├── ctrlflow.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ └── a.go
│ │ │ │ │ └── lib/
│ │ │ │ │ └── lib.go
│ │ │ │ ├── deepequalerrors/
│ │ │ │ │ ├── deepequalerrors.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── findcall/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── findcall/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── findcall.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── httpresponse/
│ │ │ │ │ ├── httpresponse.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── inspect/
│ │ │ │ │ └── inspect.go
│ │ │ │ ├── internal/
│ │ │ │ │ └── analysisutil/
│ │ │ │ │ └── util.go
│ │ │ │ ├── loopclosure/
│ │ │ │ │ ├── loopclosure.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── lostcancel/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── lostcancel/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── lostcancel.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ └── a.go
│ │ │ │ │ └── b/
│ │ │ │ │ └── b.go
│ │ │ │ ├── nilfunc/
│ │ │ │ │ ├── nilfunc.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── nilness/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── nilness/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── nilness.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── pkgfact/
│ │ │ │ │ ├── pkgfact.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ └── a.go
│ │ │ │ │ ├── b/
│ │ │ │ │ │ └── b.go
│ │ │ │ │ └── c/
│ │ │ │ │ └── c.go
│ │ │ │ ├── printf/
│ │ │ │ │ ├── printf.go
│ │ │ │ │ ├── testdata/
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ └── a.go
│ │ │ │ │ │ ├── b/
│ │ │ │ │ │ │ └── b.go
│ │ │ │ │ │ └── nofmt/
│ │ │ │ │ │ └── nofmt.go
│ │ │ │ │ └── types.go
│ │ │ │ ├── shadow/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── shadow/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── shadow.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── shift/
│ │ │ │ │ ├── dead.go
│ │ │ │ │ ├── shift.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── stdmethods/
│ │ │ │ │ ├── stdmethods.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── structtag/
│ │ │ │ │ ├── structtag.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ ├── a.go
│ │ │ │ │ └── b/
│ │ │ │ │ └── b.go
│ │ │ │ ├── tests/
│ │ │ │ │ ├── testdata/
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ └── a.go
│ │ │ │ │ │ └── divergent/
│ │ │ │ │ │ └── buf.go
│ │ │ │ │ └── tests.go
│ │ │ │ ├── unmarshal/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── unmarshal/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── testdata/
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── a/
│ │ │ │ │ │ └── a.go
│ │ │ │ │ └── unmarshal.go
│ │ │ │ ├── unreachable/
│ │ │ │ │ ├── testdata/
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── a/
│ │ │ │ │ │ └── a.go
│ │ │ │ │ └── unreachable.go
│ │ │ │ ├── unsafeptr/
│ │ │ │ │ ├── testdata/
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── a/
│ │ │ │ │ │ └── a.go
│ │ │ │ │ └── unsafeptr.go
│ │ │ │ └── unusedresult/
│ │ │ │ ├── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ └── unusedresult.go
│ │ │ ├── singlechecker/
│ │ │ │ └── singlechecker.go
│ │ │ ├── unitchecker/
│ │ │ │ ├── main.go
│ │ │ │ ├── unitchecker.go
│ │ │ │ └── unitchecker112.go
│ │ │ └── validate.go
│ │ ├── ast/
│ │ │ ├── astutil/
│ │ │ │ ├── enclosing.go
│ │ │ │ ├── imports.go
│ │ │ │ ├── rewrite.go
│ │ │ │ └── util.go
│ │ │ └── inspector/
│ │ │ ├── inspector.go
│ │ │ └── typeof.go
│ │ ├── buildutil/
│ │ │ ├── allpackages.go
│ │ │ ├── fakecontext.go
│ │ │ ├── overlay.go
│ │ │ ├── tags.go
│ │ │ └── util.go
│ │ ├── callgraph/
│ │ │ ├── callgraph.go
│ │ │ ├── cha/
│ │ │ │ ├── cha.go
│ │ │ │ └── testdata/
│ │ │ │ ├── func.go
│ │ │ │ ├── iface.go
│ │ │ │ ├── issue23925.go
│ │ │ │ └── recv.go
│ │ │ ├── rta/
│ │ │ │ ├── rta.go
│ │ │ │ └── testdata/
│ │ │ │ ├── func.go
│ │ │ │ ├── iface.go
│ │ │ │ └── rtype.go
│ │ │ ├── static/
│ │ │ │ └── static.go
│ │ │ └── util.go
│ │ ├── cfg/
│ │ │ ├── builder.go
│ │ │ └── cfg.go
│ │ ├── expect/
│ │ │ ├── expect.go
│ │ │ ├── extract.go
│ │ │ └── testdata/
│ │ │ └── test.go
│ │ ├── gccgoexportdata/
│ │ │ ├── gccgoexportdata.go
│ │ │ └── testdata/
│ │ │ ├── errors.gox
│ │ │ ├── long.a
│ │ │ └── short.a
│ │ ├── gcexportdata/
│ │ │ ├── gcexportdata.go
│ │ │ ├── importer.go
│ │ │ ├── main.go
│ │ │ └── testdata/
│ │ │ └── errors-ae16.a
│ │ ├── internal/
│ │ │ ├── cgo/
│ │ │ │ ├── cgo.go
│ │ │ │ └── cgo_pkgconfig.go
│ │ │ ├── gccgoimporter/
│ │ │ │ ├── ar.go
│ │ │ │ ├── backdoor.go
│ │ │ │ ├── gccgoinstallation.go
│ │ │ │ ├── importer.go
│ │ │ │ ├── newInterface10.go
│ │ │ │ ├── newInterface11.go
│ │ │ │ ├── parser.go
│ │ │ │ └── testdata/
│ │ │ │ ├── aliases.go
│ │ │ │ ├── aliases.gox
│ │ │ │ ├── complexnums.go
│ │ │ │ ├── complexnums.gox
│ │ │ │ ├── conversions.go
│ │ │ │ ├── conversions.gox
│ │ │ │ ├── escapeinfo.go
│ │ │ │ ├── escapeinfo.gox
│ │ │ │ ├── imports.go
│ │ │ │ ├── imports.gox
│ │ │ │ ├── issue27856.go
│ │ │ │ ├── issue27856.gox
│ │ │ │ ├── issue29198.go
│ │ │ │ ├── issue29198.gox
│ │ │ │ ├── libimportsar.a
│ │ │ │ ├── nointerface.go
│ │ │ │ ├── nointerface.gox
│ │ │ │ ├── pointer.go
│ │ │ │ ├── pointer.gox
│ │ │ │ ├── time.gox
│ │ │ │ ├── unicode.gox
│ │ │ │ └── v1reflect.gox
│ │ │ ├── gcimporter/
│ │ │ │ ├── bexport.go
│ │ │ │ ├── bimport.go
│ │ │ │ ├── exportdata.go
│ │ │ │ ├── gcimporter.go
│ │ │ │ ├── iexport.go
│ │ │ │ ├── iimport.go
│ │ │ │ ├── newInterface10.go
│ │ │ │ ├── newInterface11.go
│ │ │ │ └── testdata/
│ │ │ │ ├── a.go
│ │ │ │ ├── b.go
│ │ │ │ ├── exports.go
│ │ │ │ ├── issue15920.go
│ │ │ │ ├── issue20046.go
│ │ │ │ ├── issue25301.go
│ │ │ │ ├── p.go
│ │ │ │ └── versions/
│ │ │ │ ├── test.go
│ │ │ │ ├── test_go1.11_0i.a
│ │ │ │ ├── test_go1.11_6b.a
│ │ │ │ ├── test_go1.11_999b.a
│ │ │ │ ├── test_go1.11_999i.a
│ │ │ │ ├── test_go1.7_0.a
│ │ │ │ ├── test_go1.7_1.a
│ │ │ │ ├── test_go1.8_4.a
│ │ │ │ └── test_go1.8_5.a
│ │ │ └── packagesdriver/
│ │ │ └── sizes.go
│ │ ├── loader/
│ │ │ ├── doc.go
│ │ │ ├── loader.go
│ │ │ ├── testdata/
│ │ │ │ ├── a.go
│ │ │ │ ├── b.go
│ │ │ │ └── badpkgdecl.go
│ │ │ └── util.go
│ │ ├── packages/
│ │ │ ├── doc.go
│ │ │ ├── external.go
│ │ │ ├── golist.go
│ │ │ ├── golist_fallback.go
│ │ │ ├── golist_fallback_testmain.go
│ │ │ ├── golist_overlay.go
│ │ │ ├── gopackages/
│ │ │ │ └── main.go
│ │ │ ├── packages.go
│ │ │ ├── packagestest/
│ │ │ │ ├── expect.go
│ │ │ │ ├── export.go
│ │ │ │ ├── gopath.go
│ │ │ │ ├── modules.go
│ │ │ │ ├── modules_111.go
│ │ │ │ └── testdata/
│ │ │ │ └── test.go
│ │ │ ├── testdata/
│ │ │ │ ├── README
│ │ │ │ ├── TestName_Modules/
│ │ │ │ │ ├── pkg/
│ │ │ │ │ │ └── mod/
│ │ │ │ │ │ ├── cache/
│ │ │ │ │ │ │ └── download/
│ │ │ │ │ │ │ └── github.com/
│ │ │ │ │ │ │ └── heschik/
│ │ │ │ │ │ │ └── tools-testrepo/
│ │ │ │ │ │ │ ├── @v/
│ │ │ │ │ │ │ │ ├── list
│ │ │ │ │ │ │ │ ├── v1.0.0.info
│ │ │ │ │ │ │ │ ├── v1.0.0.mod
│ │ │ │ │ │ │ │ └── v1.0.0.ziphash
│ │ │ │ │ │ │ └── v2/
│ │ │ │ │ │ │ └── @v/
│ │ │ │ │ │ │ ├── list
│ │ │ │ │ │ │ ├── v2.0.0.info
│ │ │ │ │ │ │ ├── v2.0.0.mod
│ │ │ │ │ │ │ └── v2.0.0.ziphash
│ │ │ │ │ │ └── github.com/
│ │ │ │ │ │ └── heschik/
│ │ │ │ │ │ ├── tools-testrepo/
│ │ │ │ │ │ │ └── v2@v2.0.0/
│ │ │ │ │ │ │ ├── go.mod
│ │ │ │ │ │ │ └── pkg/
│ │ │ │ │ │ │ └── pkg.go
│ │ │ │ │ │ └── tools-testrepo@v1.0.0/
│ │ │ │ │ │ ├── go.mod
│ │ │ │ │ │ └── pkg/
│ │ │ │ │ │ └── pkg.go
│ │ │ │ │ └── src/
│ │ │ │ │ └── b/
│ │ │ │ │ └── pkg/
│ │ │ │ │ └── pkg.go
│ │ │ │ └── TestName_ModulesDedup/
│ │ │ │ └── pkg/
│ │ │ │ └── mod/
│ │ │ │ ├── cache/
│ │ │ │ │ └── download/
│ │ │ │ │ └── github.com/
│ │ │ │ │ └── heschik/
│ │ │ │ │ └── tools-testrepo/
│ │ │ │ │ ├── @v/
│ │ │ │ │ │ ├── list
│ │ │ │ │ │ ├── v1.0.0.info
│ │ │ │ │ │ ├── v1.0.0.mod
│ │ │ │ │ │ └── v1.0.0.ziphash
│ │ │ │ │ └── v2/
│ │ │ │ │ └── @v/
│ │ │ │ │ ├── list
│ │ │ │ │ ├── v2.0.1.info
│ │ │ │ │ ├── v2.0.1.mod
│ │ │ │ │ ├── v2.0.1.ziphash
│ │ │ │ │ ├── v2.0.2.info
│ │ │ │ │ ├── v2.0.2.mod
│ │ │ │ │ └── v2.0.2.ziphash
│ │ │ │ └── github.com/
│ │ │ │ └── heschik/
│ │ │ │ ├── tools-testrepo/
│ │ │ │ │ ├── v2@v2.0.1/
│ │ │ │ │ │ ├── go.mod
│ │ │ │ │ │ └── pkg/
│ │ │ │ │ │ └── pkg.go
│ │ │ │ │ └── v2@v2.0.2/
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── pkg/
│ │ │ │ │ └── pkg.go
│ │ │ │ └── tools-testrepo@v1.0.0/
│ │ │ │ ├── go.mod
│ │ │ │ └── pkg/
│ │ │ │ └── pkg.go
│ │ │ └── visit.go
│ │ ├── pointer/
│ │ │ ├── TODO
│ │ │ ├── analysis.go
│ │ │ ├── api.go
│ │ │ ├── callgraph.go
│ │ │ ├── constraint.go
│ │ │ ├── doc.go
│ │ │ ├── gen.go
│ │ │ ├── hvn.go
│ │ │ ├── intrinsics.go
│ │ │ ├── labels.go
│ │ │ ├── opt.go
│ │ │ ├── print.go
│ │ │ ├── query.go
│ │ │ ├── reflect.go
│ │ │ ├── solve.go
│ │ │ ├── testdata/
│ │ │ │ ├── another.go
│ │ │ │ ├── arrayreflect.go
│ │ │ │ ├── arrays.go
│ │ │ │ ├── channels.go
│ │ │ │ ├── chanreflect.go
│ │ │ │ ├── chanreflect1.go
│ │ │ │ ├── context.go
│ │ │ │ ├── conv.go
│ │ │ │ ├── extended.go
│ │ │ │ ├── finalizer.go
│ │ │ │ ├── flow.go
│ │ │ │ ├── fmtexcerpt.go
│ │ │ │ ├── func.go
│ │ │ │ ├── funcreflect.go
│ │ │ │ ├── hello.go
│ │ │ │ ├── interfaces.go
│ │ │ │ ├── issue9002.go
│ │ │ │ ├── mapreflect.go
│ │ │ │ ├── maps.go
│ │ │ │ ├── panic.go
│ │ │ │ ├── recur.go
│ │ │ │ ├── reflect.go
│ │ │ │ ├── rtti.go
│ │ │ │ ├── structreflect.go
│ │ │ │ ├── structs.go
│ │ │ │ └── timer.go
│ │ │ └── util.go
│ │ ├── ssa/
│ │ │ ├── blockopt.go
│ │ │ ├── builder.go
│ │ │ ├── const.go
│ │ │ ├── create.go
│ │ │ ├── doc.go
│ │ │ ├── dom.go
│ │ │ ├── emit.go
│ │ │ ├── func.go
│ │ │ ├── identical.go
│ │ │ ├── identical_17.go
│ │ │ ├── interp/
│ │ │ │ ├── external.go
│ │ │ │ ├── external_darwin.go
│ │ │ │ ├── external_unix.go
│ │ │ │ ├── interp.go
│ │ │ │ ├── map.go
│ │ │ │ ├── ops.go
│ │ │ │ ├── reflect.go
│ │ │ │ ├── testdata/
│ │ │ │ │ ├── boundmeth.go
│ │ │ │ │ ├── callstack.go
│ │ │ │ │ ├── complit.go
│ │ │ │ │ ├── coverage.go
│ │ │ │ │ ├── defer.go
│ │ │ │ │ ├── fieldprom.go
│ │ │ │ │ ├── ifaceconv.go
│ │ │ │ │ ├── ifaceprom.go
│ │ │ │ │ ├── initorder.go
│ │ │ │ │ ├── methprom.go
│ │ │ │ │ ├── mrvchain.go
│ │ │ │ │ ├── range.go
│ │ │ │ │ ├── recover.go
│ │ │ │ │ ├── reflect.go
│ │ │ │ │ └── static.go
│ │ │ │ └── value.go
│ │ │ ├── lift.go
│ │ │ ├── lvalue.go
│ │ │ ├── methods.go
│ │ │ ├── mode.go
│ │ │ ├── print.go
│ │ │ ├── sanity.go
│ │ │ ├── source.go
│ │ │ ├── ssa.go
│ │ │ ├── ssautil/
│ │ │ │ ├── load.go
│ │ │ │ ├── switch.go
│ │ │ │ ├── testdata/
│ │ │ │ │ └── switches.go
│ │ │ │ └── visit.go
│ │ │ ├── testdata/
│ │ │ │ ├── objlookup.go
│ │ │ │ ├── structconv.go
│ │ │ │ └── valueforexpr.go
│ │ │ ├── testmain.go
│ │ │ ├── util.go
│ │ │ └── wrappers.go
│ │ ├── types/
│ │ │ ├── objectpath/
│ │ │ │ └── objectpath.go
│ │ │ └── typeutil/
│ │ │ ├── callee.go
│ │ │ ├── imports.go
│ │ │ ├── map.go
│ │ │ ├── methodsetcache.go
│ │ │ └── ui.go
│ │ └── vcs/
│ │ ├── discovery.go
│ │ ├── env.go
│ │ ├── http.go
│ │ └── vcs.go
│ ├── go.mod
│ ├── go.sum
│ ├── godoc/
│ │ ├── README.md
│ │ ├── analysis/
│ │ │ ├── README
│ │ │ ├── analysis.go
│ │ │ ├── callgraph.go
│ │ │ ├── implements.go
│ │ │ ├── json.go
│ │ │ ├── peers.go
│ │ │ └── typeinfo.go
│ │ ├── corpus.go
│ │ ├── dirtrees.go
│ │ ├── format.go
│ │ ├── godoc.go
│ │ ├── golangorgenv/
│ │ │ └── golangorgenv.go
│ │ ├── index.go
│ │ ├── linkify.go
│ │ ├── meta.go
│ │ ├── page.go
│ │ ├── parser.go
│ │ ├── pres.go
│ │ ├── redirect/
│ │ │ ├── hash.go
│ │ │ ├── redirect.go
│ │ │ └── rietveld.go
│ │ ├── search.go
│ │ ├── server.go
│ │ ├── snippet.go
│ │ ├── spec.go
│ │ ├── spot.go
│ │ ├── static/
│ │ │ ├── analysis/
│ │ │ │ └── help.html
│ │ │ ├── callgraph.html
│ │ │ ├── codewalk.html
│ │ │ ├── codewalkdir.html
│ │ │ ├── dirlist.html
│ │ │ ├── doc.go
│ │ │ ├── error.html
│ │ │ ├── example.html
│ │ │ ├── gen.go
│ │ │ ├── godoc.html
│ │ │ ├── godocs.js
│ │ │ ├── implements.html
│ │ │ ├── jquery.js
│ │ │ ├── jquery.treeview.css
│ │ │ ├── jquery.treeview.edit.js
│ │ │ ├── jquery.treeview.js
│ │ │ ├── makestatic.go
│ │ │ ├── methodset.html
│ │ │ ├── opensearch.xml
│ │ │ ├── package.html
│ │ │ ├── packageroot.html
│ │ │ ├── play.js
│ │ │ ├── playground.js
│ │ │ ├── search.html
│ │ │ ├── searchcode.html
│ │ │ ├── searchdoc.html
│ │ │ ├── searchtxt.html
│ │ │ ├── static.go
│ │ │ └── style.css
│ │ ├── tab.go
│ │ ├── template.go
│ │ ├── util/
│ │ │ ├── throttle.go
│ │ │ └── util.go
│ │ ├── versions.go
│ │ └── vfs/
│ │ ├── emptyvfs.go
│ │ ├── gatefs/
│ │ │ └── gatefs.go
│ │ ├── httpfs/
│ │ │ └── httpfs.go
│ │ ├── mapfs/
│ │ │ └── mapfs.go
│ │ ├── namespace.go
│ │ ├── os.go
│ │ ├── vfs.go
│ │ └── zipfs/
│ │ └── zipfs.go
│ ├── imports/
│ │ ├── fix.go
│ │ ├── imports.go
│ │ ├── mkindex.go
│ │ ├── mkstdlib.go
│ │ ├── mod.go
│ │ ├── sortimports.go
│ │ ├── testdata/
│ │ │ └── mod/
│ │ │ ├── example.com_v1.0.0.txt
│ │ │ ├── golang.org_x_text_v0.0.0-20170915032832-14c0d48ead0c.txt
│ │ │ ├── rsc.io_!q!u!o!t!e_v1.5.2.txt
│ │ │ ├── rsc.io_!q!u!o!t!e_v1.5.3-!p!r!e.txt
│ │ │ ├── rsc.io_quote_v1.5.1.txt
│ │ │ ├── rsc.io_quote_v1.5.2.txt
│ │ │ ├── rsc.io_quote_v2_v2.0.1.txt
│ │ │ ├── rsc.io_quote_v3_v3.0.0.txt
│ │ │ ├── rsc.io_sampler_v1.3.0.txt
│ │ │ └── rsc.io_sampler_v1.3.1.txt
│ │ └── zstdlib.go
│ ├── internal/
│ │ ├── fastwalk/
│ │ │ ├── fastwalk.go
│ │ │ ├── fastwalk_dirent_fileno.go
│ │ │ ├── fastwalk_dirent_ino.go
│ │ │ ├── fastwalk_dirent_namlen_bsd.go
│ │ │ ├── fastwalk_dirent_namlen_linux.go
│ │ │ ├── fastwalk_portable.go
│ │ │ └── fastwalk_unix.go
│ │ ├── gopathwalk/
│ │ │ └── walk.go
│ │ ├── jsonrpc2/
│ │ │ ├── jsonrpc2.go
│ │ │ ├── log.go
│ │ │ ├── stream.go
│ │ │ └── wire.go
│ │ ├── lsp/
│ │ │ ├── cache/
│ │ │ │ ├── check.go
│ │ │ │ ├── file.go
│ │ │ │ ├── pkg.go
│ │ │ │ └── view.go
│ │ │ ├── cmd/
│ │ │ │ ├── cmd.go
│ │ │ │ ├── definition.go
│ │ │ │ ├── location.go
│ │ │ │ ├── query.go
│ │ │ │ ├── serve.go
│ │ │ │ └── testdata/
│ │ │ │ ├── a/
│ │ │ │ │ └── a.go
│ │ │ │ └── b/
│ │ │ │ └── b.go
│ │ │ ├── completion.go
│ │ │ ├── diagnostics.go
│ │ │ ├── diff/
│ │ │ │ └── diff.go
│ │ │ ├── format.go
│ │ │ ├── imports.go
│ │ │ ├── position.go
│ │ │ ├── protocol/
│ │ │ │ ├── client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── preserve/
│ │ │ │ │ ├── README
│ │ │ │ │ ├── basic.go
│ │ │ │ │ ├── diagnostics.go
│ │ │ │ │ ├── general.go
│ │ │ │ │ ├── language.go
│ │ │ │ │ ├── registration.go
│ │ │ │ │ ├── text.go
│ │ │ │ │ ├── window.go
│ │ │ │ │ └── workspace.go
│ │ │ │ ├── printers.go
│ │ │ │ ├── protocol.go
│ │ │ │ ├── server.go
│ │ │ │ ├── tsprotocol.go
│ │ │ │ └── typescript/
│ │ │ │ ├── README.md
│ │ │ │ └── go.ts
│ │ │ ├── server.go
│ │ │ ├── signature_help.go
│ │ │ ├── source/
│ │ │ │ ├── analysis.go
│ │ │ │ ├── completion.go
│ │ │ │ ├── definition.go
│ │ │ │ ├── diagnostics.go
│ │ │ │ ├── format.go
│ │ │ │ ├── signature_help.go
│ │ │ │ ├── uri.go
│ │ │ │ └── view.go
│ │ │ └── testdata/
│ │ │ ├── anon/
│ │ │ │ └── anon.go.in
│ │ │ ├── bad/
│ │ │ │ ├── bad0.go
│ │ │ │ └── bad1.go
│ │ │ ├── bar/
│ │ │ │ └── bar.go.in
│ │ │ ├── baz/
│ │ │ │ └── baz.go.in
│ │ │ ├── builtins/
│ │ │ │ └── builtins.go
│ │ │ ├── cast/
│ │ │ │ └── cast.go.in
│ │ │ ├── complit/
│ │ │ │ └── complit.go.in
│ │ │ ├── errors/
│ │ │ │ └── errors.go
│ │ │ ├── foo/
│ │ │ │ └── foo.go
│ │ │ ├── format/
│ │ │ │ ├── bad_format.go.in
│ │ │ │ ├── good_format.go
│ │ │ │ └── newline_format.go.in
│ │ │ ├── func_rank/
│ │ │ │ └── func_rank.go.in
│ │ │ ├── godef/
│ │ │ │ ├── a/
│ │ │ │ │ ├── a.go
│ │ │ │ │ └── random.go
│ │ │ │ ├── b/
│ │ │ │ │ ├── b.go
│ │ │ │ │ ├── c.go
│ │ │ │ │ └── c.go.saved
│ │ │ │ └── broken/
│ │ │ │ └── unclosedIf.go.in
│ │ │ ├── good/
│ │ │ │ ├── good0.go
│ │ │ │ └── good1.go
│ │ │ ├── noparse/
│ │ │ │ └── noparse.go.in
│ │ │ ├── noparse_format/
│ │ │ │ └── noparse_format.go.in
│ │ │ ├── rank/
│ │ │ │ ├── assign_rank.go.in
│ │ │ │ └── binexpr_rank.go.in
│ │ │ ├── selector/
│ │ │ │ └── selector.go.in
│ │ │ ├── testy/
│ │ │ │ └── testy.go
│ │ │ └── types/
│ │ │ └── types.go
│ │ ├── module/
│ │ │ └── module.go
│ │ ├── semver/
│ │ │ └── semver.go
│ │ ├── span/
│ │ │ ├── parse.go
│ │ │ ├── span.go
│ │ │ ├── token.go
│ │ │ ├── token111.go
│ │ │ ├── token112.go
│ │ │ ├── uri.go
│ │ │ └── utf16.go
│ │ └── tool/
│ │ └── tool.go
│ ├── playground/
│ │ ├── playground.go
│ │ └── socket/
│ │ └── socket.go
│ ├── present/
│ │ ├── args.go
│ │ ├── caption.go
│ │ ├── code.go
│ │ ├── doc.go
│ │ ├── html.go
│ │ ├── iframe.go
│ │ ├── image.go
│ │ ├── link.go
│ │ ├── parse.go
│ │ ├── style.go
│ │ └── video.go
│ ├── refactor/
│ │ ├── README
│ │ ├── eg/
│ │ │ ├── eg.go
│ │ │ ├── match.go
│ │ │ ├── rewrite.go
│ │ │ └── testdata/
│ │ │ ├── A.template
│ │ │ ├── A1.go
│ │ │ ├── A1.golden
│ │ │ ├── A2.go
│ │ │ ├── A2.golden
│ │ │ ├── B.template
│ │ │ ├── B1.go
│ │ │ ├── B1.golden
│ │ │ ├── C.template
│ │ │ ├── C1.go
│ │ │ ├── C1.golden
│ │ │ ├── D.template
│ │ │ ├── D1.go
│ │ │ ├── D1.golden
│ │ │ ├── E.template
│ │ │ ├── E1.go
│ │ │ ├── E1.golden
│ │ │ ├── F.template
│ │ │ ├── F1.go
│ │ │ ├── F1.golden
│ │ │ ├── G.template
│ │ │ ├── G1.go
│ │ │ ├── G1.golden
│ │ │ ├── H.template
│ │ │ ├── H1.go
│ │ │ ├── H1.golden
│ │ │ ├── I.template
│ │ │ ├── I1.go
│ │ │ ├── I1.golden
│ │ │ ├── J.template
│ │ │ ├── J1.go
│ │ │ ├── J1.golden
│ │ │ ├── bad_type.template
│ │ │ ├── expr_type_mismatch.template
│ │ │ ├── no_after_return.template
│ │ │ ├── no_before.template
│ │ │ └── type_mismatch.template
│ │ ├── importgraph/
│ │ │ └── graph.go
│ │ ├── rename/
│ │ │ ├── check.go
│ │ │ ├── mvpkg.go
│ │ │ ├── rename.go
│ │ │ ├── spec.go
│ │ │ └── util.go
│ │ └── satisfy/
│ │ └── find.go
│ └── third_party/
│ ├── moduleloader/
│ │ ├── LICENSE
│ │ └── moduleloader.js
│ ├── typescript/
│ │ ├── LICENSE
│ │ └── typescript.js
│ └── webcomponents/
│ ├── LICENSE
│ └── customelements.js
├── google.golang.org/
│ └── appengine/
│ ├── .travis.yml
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── README.md
│ ├── aetest/
│ │ ├── doc.go
│ │ ├── instance.go
│ │ ├── instance_classic.go
│ │ ├── instance_vm.go
│ │ └── user.go
│ ├── appengine.go
│ ├── appengine_vm.go
│ ├── blobstore/
│ │ ├── blobstore.go
│ │ └── read.go
│ ├── capability/
│ │ └── capability.go
│ ├── channel/
│ │ └── channel.go
│ ├── cloudsql/
│ │ ├── cloudsql.go
│ │ ├── cloudsql_classic.go
│ │ └── cloudsql_vm.go
│ ├── cmd/
│ │ ├── aebundler/
│ │ │ └── aebundler.go
│ │ ├── aedeploy/
│ │ │ └── aedeploy.go
│ │ └── aefix/
│ │ ├── ae.go
│ │ ├── fix.go
│ │ ├── main.go
│ │ └── typecheck.go
│ ├── datastore/
│ │ ├── datastore.go
│ │ ├── doc.go
│ │ ├── key.go
│ │ ├── load.go
│ │ ├── metadata.go
│ │ ├── prop.go
│ │ ├── query.go
│ │ ├── save.go
│ │ └── transaction.go
│ ├── delay/
│ │ ├── delay.go
│ │ ├── delay_go17.go
│ │ └── delay_pre17.go
│ ├── demos/
│ │ ├── guestbook/
│ │ │ ├── app.yaml
│ │ │ ├── guestbook.go
│ │ │ ├── index.yaml
│ │ │ └── templates/
│ │ │ └── guestbook.html
│ │ └── helloworld/
│ │ ├── app.yaml
│ │ └── helloworld.go
│ ├── errors.go
│ ├── file/
│ │ └── file.go
│ ├── go.mod
│ ├── go.sum
│ ├── identity.go
│ ├── image/
│ │ └── image.go
│ ├── internal/
│ │ ├── aetesting/
│ │ │ └── fake.go
│ │ ├── api.go
│ │ ├── api_classic.go
│ │ ├── api_common.go
│ │ ├── api_pre17.go
│ │ ├── app_id.go
│ │ ├── app_identity/
│ │ │ ├── app_identity_service.pb.go
│ │ │ └── app_identity_service.proto
│ │ ├── base/
│ │ │ ├── api_base.pb.go
│ │ │ └── api_base.proto
│ │ ├── blobstore/
│ │ │ ├── blobstore_service.pb.go
│ │ │ └── blobstore_service.proto
│ │ ├── capability/
│ │ │ ├── capability_service.pb.go
│ │ │ └── capability_service.proto
│ │ ├── channel/
│ │ │ ├── channel_service.pb.go
│ │ │ └── channel_service.proto
│ │ ├── datastore/
│ │ │ ├── datastore_v3.pb.go
│ │ │ └── datastore_v3.proto
│ │ ├── identity.go
│ │ ├── identity_classic.go
│ │ ├── identity_vm.go
│ │ ├── image/
│ │ │ ├── images_service.pb.go
│ │ │ └── images_service.proto
│ │ ├── internal.go
│ │ ├── log/
│ │ │ ├── log_service.pb.go
│ │ │ └── log_service.proto
│ │ ├── mail/
│ │ │ ├── mail_service.pb.go
│ │ │ └── mail_service.proto
│ │ ├── main.go
│ │ ├── main_vm.go
│ │ ├── memcache/
│ │ │ ├── memcache_service.pb.go
│ │ │ └── mem
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: "[BUG]"
labels: ''
assignees: gravitational-jenkins
---
<!--
**Have a question or install problem?** Please use [Our Community Site](https://community.gravitational.com).
-->
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
**Expected behavior**
A clear and concise description of what you expected to happen.
**Logs**
If applicable, add logs to help explain your problem.
**Versions (please complete the following information):**
- OS: [e.g. Redhat 7.4]
- Kubernetes [e.g. 1.13.1]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: "[FEATURE]"
labels: ''
assignees: gravitational-jenkins
---
<!--
**Have a question or install problem?** Please use [Our Community Site](https://community.gravitational.com).
-->
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .gitignore
================================================
.vscode
.vagrant
build
*.test
flymake*
*tar
*gz
*tar.gz
*tgz
*.swp
# Terraform state
.terraform
terraform.tfstate*
# Ansible retry files
*.retry
================================================
FILE: Dockerfile
================================================
ARG WIREGUARD_IMAGE
ARG BASE_IMAGE
ARG RIGGING_IMAGE
#
# Use a temporary ubuntu container to get/build the wg cli
#
FROM ${WIREGUARD_IMAGE} as wireguard
ADD assets/docker/wireguard/wireguard_ubuntu_wireguard.gpg /etc/apt/trusted.gpg.d/wireguard_ubuntu_wireguard.gpg
ADD assets/docker/wireguard/wireguard-ubuntu-wireguard-bionic.list /etc/apt/sources.list.d/wireguard-ubuntu-wireguard-bionic.list
RUN apt-get update && \
apt-get install --no-install-recommends -y \
wireguard
#
# Pull in rig container to copy rig binary to support gravity upgrade/rollback
#
FROM ${RIGGING_IMAGE} as rig
#
# Build wormhole container
#
FROM ${BASE_IMAGE}
ARG CNI_VERSION
ARG ARCH
RUN apt-get update && \
apt-get install --no-install-recommends -y \
iproute2 \
net-tools \
iptables \
curl \
ca-certificates \
&& update-ca-certificates \
&& rm -rf /var/lib/apt/lists/*
#
# Install/Upgrade/Rollback interactions for a gravity cluster
#
ARG VERSION
ENV RIG_CHANGESET $VERSION
COPY --from=rig /usr/local/bin/rig /usr/bin/rig
ADD docs/gravity-wormhole.yaml /gravity/wormhole.yaml
ADD scripts/gravity* /gravity/
RUN sed -i "s/__REPLACE_VERSION__/$VERSION/g" /gravity/wormhole.yaml
#
# Copy WG cli
#
COPY --from=wireguard /usr/bin/wg /usr/bin/wg
# Get a copy of CNI plugins, so we can install them on the host if needed
RUN mkdir -p /opt/cni/bin && curl -L --retry 5 https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-${ARCH}-${CNI_VERSION}.tgz \
| tar -xz -C /opt/cni/bin ./bridge ./loopback ./host-local ./portmap ./tuning
ADD build/wormhole /wormhole
RUN setcap cap_net_admin=+ep /wormhole && setcap cap_net_raw=+ep /wormhole
CMD ["/wormhole"]
================================================
FILE: Dockerfile.build
================================================
ARG BUILD_IMAGE
FROM ${BUILD_IMAGE}
ARG GOLANGCI_VER
RUN env
RUN curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s -- -b $GOPATH/bin ${GOLANGCI_VER}
#ADD docker/wireguard/wireguard_ubuntu_wireguard.gpg /etc/apt/trusted.gpg.d/wireguard_ubuntu_wireguard.gpg
#ADD docker/wireguard/wireguard-ubuntu-wireguard-bionic.list /etc/apt/sources.list.d/wireguard-ubuntu-wireguard-bionic.list
RUN echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list
RUN apt-get update && \
apt-get install --no-install-recommends -y \
wireguard
WORKDIR "/go/src/github.com/gravitational/wormhole/"
================================================
FILE: Gopkg.toml
================================================
# Gopkg.toml example
#
# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html
# for detailed Gopkg.toml documentation.
#
# required = ["github.com/user/thing/cmd/thing"]
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
#
# [[constraint]]
# name = "github.com/user/project"
# version = "1.0.0"
#
# [[constraint]]
# name = "github.com/user/project2"
# branch = "dev"
# source = "github.com/myfork/project2"
#
# [[override]]
# name = "github.com/x/y"
# version = "2.4.0"
#
# [prune]
# non-go = false
# go-tests = true
# unused-packages = true
required = [
"github.com/magefile/mage/mage",
"k8s.io/code-generator/cmd/client-gen"
]
[prune]
go-tests = true
[[constraint]]
name = "github.com/vishvananda/netlink"
version = "1.0.0"
[[constraint]]
name = "github.com/gravitational/trace"
version = "1.1.7"
[[constraint]]
name = "k8s.io/code-generator"
version = "kubernetes-1.13.4"
[[constraint]]
name = "k8s.io/api"
version = "kubernetes-1.13.4"
[[constraint]]
name = "k8s.io/apimachinery"
version = "kubernetes-1.13.4"
[[constraint]]
name = "k8s.io/client-go"
version = "kubernetes-1.13.4"
[[constraint]]
name = "sigs.k8s.io/controller-runtime"
branch = "master"
[[constraint]]
name = "github.com/stretchr/testify"
revision = "34c6fa2dc70986bccbbffcc6130f6920a924b075"
================================================
FILE: LICENSE
================================================
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.
================================================
FILE: Makefile
================================================
# TODO: Docs / License
.DEFAULT_GOAL := help
.PHONY: help
help:
@echo "For this project I'm experimenting with using mage (https://magefile.org) as a make replacement. "
@echo "For help: go run mage.go -h"
@echo "To build the project: go run mage.go build:all"
@echo "To get a list of targets: go run mage.go -l"
@echo
@echo "The code for running the builds is located in ./build.go"
================================================
FILE: README.md
================================================
# Gravitational Wormhole
> **Warning**
>
> Wormhole was archived 2023-07-01, as Teleport no longer supports Gravity.
>
> Please see our [Gravitational is Teleport](https://goteleport.com/blog/gravitational-is-teleport/)
> blog post for more information.
Wormhole is a [CNI plugin](https://github.com/containernetworking/cni) that creates an encrypted overlay network for [kubernetes](https://kubernetes.io) clusters.
[WireGuard](https://www.wireguard.com) is a Fast, Modern, Secure VPN tunnel.
Wormhole uses WireGuard to create a simple and secure high performance encrypted overlay network for kubernetes clusters, that is easy to manage and troubleshoot.
Wormhole does not implement network policy, instead we recommend to use [calico](https://github.com/projectcalico/calico) or [kube-router](https://github.com/cloudnativelabs/kube-router) as network policy controllers.
## Getting Started
### System Requirements
1. [WireGuard](https://www.wireguard.com/install/) is installed on each node in you're cluster.
2. A Kubernetes cluster with IPAM enabled (--pod-network-cidr= when using kubeadm based install)
### Install (Kubeadm Cluster)
```console
kubectl apply -f https://raw.githubusercontent.com/gravitational/wormhole/master/docs/kube-wormhole.yaml
```
Note: The kubeadm cluster must be initialized with (--pod-network-cidr / --service-cidr) to enable IPAM
### Install (Generic)
```console
kubectl apply -f https://raw.githubusercontent.com/gravitational/wormhole/master/docs/generic-wormhole.yaml
```
Note: Replace the --overlay-cidr flag in the daemonset with the overlay-cidr that matches you're network
Note: Kubernetes IPAM must be enabled (--cluster-cidr / --allocate-node-cidrs on kube-controller-manager)
## Troubleshooting
See [troubleshooting.md](docs/troubleshooting.md)
## Test
```
go run mage.go test:all
```
## More Information
- [Wormhole RFC](docs/rfcs/0001-spec.md)
================================================
FILE: assets/docker/wireguard/wireguard-ubuntu-wireguard-bionic.list
================================================
deb http://ppa.launchpad.net/wireguard/wireguard/ubuntu bionic main
# deb-src http://ppa.launchpad.net/wireguard/wireguard/ubuntu bionic main
================================================
FILE: build.go
================================================
//+build mage
/*
Copyright 2018 Gravitational, 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 main
import (
"fmt"
"os"
"path"
"strings"
"time"
"github.com/gravitational/trace"
"github.com/magefile/mage/mg"
"github.com/magefile/mage/sh"
"github.com/magefile/mage/target"
)
var (
// buildContainer is a docker container used to build go binaries
buildContainer = "golang:1.12.0"
// golangciVersion is the version of golangci-lint to use for linting
// https://github.com/golangci/golangci-lint/releases
golangciVersion = "v1.15.0"
// cniVersion is the version of cni plugin binaries to ship
cniVersion = "v0.7.5"
// registryImage is the docker tag to use to push the container to the requested registry
registryImage = env("WORM_REGISTRY_IMAGE", "quay.io/gravitational/wormhole-dev")
// baseImage is the base OS image to use for wormhole containers
baseImage = "ubuntu:19.10"
// wireguardBuildImage is the docker image to use to build the wg cli tool
wireguardBuildImage = "ubuntu:19.10"
// rigImage is the imageref to get the rigging tool from
rigImage = "quay.io/gravitational/rig:6.0.1"
// buildVersion allows override of the version string from env variable
buildVersion = env("WORM_BUILD_VERSION", "")
)
// env, loads a variable from the environment, or uses the provided default
func env(env, d string) string {
if os.Getenv(env) != "" {
return os.Getenv(env)
}
return d
}
type Build mg.Namespace
// Build is main entrypoint to build the project
func (Build) All() error {
mg.Deps(Build.Go)
return nil
}
// GoBuild builds go binaries
func (Build) Go() error {
mg.Deps(Build.BuildContainer)
fmt.Println("\n=====> Building Gravitational Wormhole Go Binary...\n")
start := time.Now()
updated, err := target.Dir("build/wormhole", "pkg", "cmd")
if err != nil {
return trace.Wrap(err)
}
if !updated {
fmt.Println("Build up to date")
return nil
}
err = trace.Wrap(sh.RunV(
"docker",
"run",
"-it",
"--rm=true",
fmt.Sprintf("--volume=%v:/go/src/github.com/gravitational/wormhole:delegated", srcDir()),
`--env="GOCACHE=/go/src/github.com/gravitational/wormhole/build/cache/go"`,
fmt.Sprint("wormhole-build:", version()),
"go",
"--",
"build",
"-ldflags",
flags(),
"-o",
"/go/src/github.com/gravitational/wormhole/build/wormhole",
"github.com/gravitational/wormhole/cmd/wormhole",
))
elapsed := time.Since(start)
fmt.Println("Build completed in ", elapsed)
return trace.Wrap(err)
}
// Docker packages wormhole into a docker container
func (Build) Docker() error {
mg.Deps(Build.Go)
fmt.Println("\n=====> Building Gravitational Wormhole Docker Image...\n")
return trace.Wrap(sh.RunV(
"docker",
"build",
"--pull",
"--tag",
fmt.Sprint("wormhole:", version()),
"--build-arg",
fmt.Sprint("CNI_VERSION=", cniVersion),
"--build-arg",
"ARCH=amd64",
"--build-arg",
fmt.Sprint("VERSION=", version()),
"--build-arg",
fmt.Sprint("WIREGUARD_IMAGE=", wireguardBuildImage),
"--build-arg",
fmt.Sprint("BASE_IMAGE=", baseImage),
"--build-arg",
fmt.Sprint("RIGGING_IMAGE=", rigImage),
"-f",
"Dockerfile",
".",
))
}
// Publish tags and publishes the built container to the configured registry
func (Build) Publish() error {
mg.Deps(Build.Docker)
fmt.Println("\n=====> Publishing Gravitational Wormhole Docker Image...\n")
err := sh.RunV(
"docker",
"tag",
fmt.Sprint("wormhole:", version()),
fmt.Sprint(registryImage, ":", version()),
)
if err != nil {
return trace.Wrap(err)
}
return trace.Wrap(sh.RunV(
"docker",
"push",
fmt.Sprint(registryImage, ":", version()),
))
}
// BuildContainer creates a docker container as a consistent golang environment to use for software builds
func (Build) BuildContainer() error {
fmt.Println("\n=====> Creating build container...\n")
return trace.Wrap(sh.RunV(
"docker",
"build",
"--pull",
"--tag",
fmt.Sprint("wormhole-build:", version()),
"--build-arg",
fmt.Sprint("BUILD_IMAGE=", buildContainer),
"--build-arg",
fmt.Sprint("GOLANGCI_VER=", golangciVersion),
"-f",
"Dockerfile.build",
"./assets",
))
}
type Test mg.Namespace
// All runs all defined tests
func (Test) All() error {
mg.Deps(Test.Unit, Test.Lint)
return nil
}
// Unit runs unit tests with the race detector enabled
func (Test) Unit() error {
mg.Deps(Build.BuildContainer)
fmt.Println("\n=====> Running Gravitational Wormhole Unit Tests...\n")
return trace.Wrap(sh.RunV(
"docker",
"run",
"-it",
"--rm=true",
fmt.Sprintf("--volume=%v:/go/src/github.com/gravitational/wormhole", srcDir()),
`--env="GOCACHE=/go/src/github.com/gravitational/wormhole/build/cache/go"`,
`-w=/go/src/github.com/gravitational/wormhole/`,
fmt.Sprint("wormhole-build:", version()),
"go",
"--",
"test",
"./...",
"-race",
))
}
// Lint runs golangci linter against the repo
func (Test) Lint() error {
mg.Deps(Build.BuildContainer)
fmt.Println("\n=====> Linting Gravitational Wormhole...\n")
return trace.Wrap(sh.RunV(
"docker",
"run",
"-it",
"--rm=true",
fmt.Sprintf("--volume=%v:/go/src/github.com/gravitational/wormhole", srcDir()),
`--env="GOCACHE=/go/src/github.com/gravitational/wormhole/build/cache/go"`,
fmt.Sprint("wormhole-build:", version()),
"bash",
"-c",
"cd /go/src/github.com/gravitational/wormhole; golangci-lint run --deadline=30m --enable-all"+
" -D gochecknoglobals -D gochecknoinits",
))
}
type CodeGen mg.Namespace
// Update runs the code generator and updates the generated CRD client
func (CodeGen) Update() error {
fmt.Println("\n=====> Running hack/update-codegen.sh...\n")
return trace.Wrap(sh.RunV(
"hack/update-codegen.sh",
))
}
// Verify checks whether the code gen is up to date
func (CodeGen) Verify() error {
fmt.Println("\n=====> Running hack/verify-codegen.sh...\n")
return trace.Wrap(sh.RunV(
"hack/verify-codegen.sh",
))
}
func srcDir() string {
return path.Join(os.Getenv("GOPATH"), "src/github.com/gravitational/wormhole/")
}
func flags() string {
timestamp := time.Now().Format(time.RFC3339)
hash := hash()
version := version()
flags := []string{
fmt.Sprint(`-X "main.timestamp=`, timestamp, `"`),
fmt.Sprint(`-X "main.commitHash=`, hash, `"`),
fmt.Sprint(`-X "main.gitTag=`, version, `"`),
"-s -w", // shrink the binary
}
return strings.Join(flags, " ")
}
// hash returns the git hash for the current repository or "" if none.
func hash() string {
hash, _ := sh.Output("git", "rev-parse", "--short", "HEAD")
return hash
}
// version returns the git tag for the current branch or "" if none.
func version() string {
if buildVersion != "" {
return buildVersion
}
//shortTag, _ := sh.Output("git", "describe", "--tags", "--abbrev=0")
longTag, _ := sh.Output("git", "describe", "--tags", "--dirty")
return longTag
}
================================================
FILE: cmd/netlink-test/main.go
================================================
/*
Copyright 2019 Gravitational, 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 main
import (
"fmt"
"github.com/davecgh/go-spew/spew"
"github.com/vishvananda/netlink"
)
func main() {
routes, err := netlink.RouteList(nil, 0)
if err != nil {
fmt.Println("Error: ", spew.Sdump(err))
}
fmt.Println("Routes: ", spew.Sdump(routes))
fmt.Println("wormhole-wg0")
link, err := netlink.LinkByName("wormhole-wg0")
fmt.Println(" err: ", spew.Sdump(err))
fmt.Println(" link: ", spew.Sdump(link))
fmt.Println("wormhole-br0")
link, err = netlink.LinkByName("wormhole-br0")
fmt.Println(" err: ", spew.Sdump(err))
fmt.Println(" link: ", spew.Sdump(link))
links, err := netlink.LinkList()
fmt.Println("LinkList error: ", err)
for _, link := range links {
fmt.Printf("%v: %v\n", link.Attrs().Name, link.Attrs().MTU)
fmt.Println(spew.Sdump(link.Attrs()))
}
}
================================================
FILE: cmd/wormhole/controller.go
================================================
/*
Copyright 2018 Gravitational, 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 main
import (
"context"
"os"
"os/signal"
"syscall"
"github.com/sirupsen/logrus"
"github.com/magefile/mage/sh"
"github.com/gravitational/trace"
"github.com/gravitational/wormhole/pkg/controller"
"github.com/spf13/cobra"
)
var controllerCmd = &cobra.Command{
Use: "controller",
Short: "Controller for setting up wireguard overlay network between hosts",
Long: `
Run the main control loop and setup the wireguard overlay network.
The controller can run either on a system when passed kubeconfig settings, or as a pod within the cluster.
`,
RunE: runController,
}
func init() {
rootCmd.AddCommand(controllerCmd)
controllerCmd.Flags().StringVarP(
&kubeconfigPath,
"kubeconfig",
"",
kubeconfigPath,
"Path to kubeconfig file for controller to interact with kubernetes",
)
controllerCmd.Flags().StringVarP(
&nodeName,
"node-name",
"n",
nodeName,
"the name of the k8s node this instance is running on",
)
controllerCmd.Flags().StringVarP(
&overlayCIDR,
"overlay-cidr",
"",
overlayCIDR,
"The cidr assigned for the overlay network (each pod subnet must exist within the overlay)",
)
controllerCmd.Flags().StringVarP(
&nodeCIDR,
"node-cidr",
"",
nodeCIDR,
"The cidr assigned to this node",
)
controllerCmd.Flags().StringVarP(
&endpoint,
"endpoint",
"",
endpoint,
"The endpoint to use for wireguard connections (detected by default from kubernetes node object)",
)
controllerCmd.Flags().IntVarP(
&port,
"port",
"",
port,
"The external port to use for wireguard connections (default 9806)",
)
controllerCmd.Flags().StringVarP(
&wireguardIface,
"wireguard-iface",
"",
wireguardIface,
"The name of the wireguard interface to create (default wormhole-wg0)",
)
controllerCmd.Flags().StringVarP(
&bridgeIface,
"bridge-iface",
"",
bridgeIface,
"The name of the internal bridge to create (default wormhole-br0)",
)
controllerCmd.Flags().BoolVarP(
&debug,
"debug",
"",
debug,
"Enable debug logging",
)
controllerCmd.Flags().IntVarP(
&bridgeMTU,
"bridge-mtu",
"",
bridgeMTU,
"The MTU value to assign to the internal linux bridge",
)
}
var (
kubeconfigPath string
nodeName string
overlayCIDR string
nodeCIDR string
endpoint string
port = 9806
wireguardIface = "wormhole-wg0"
bridgeIface = "wormhole-br0"
namespace = "wormhole"
// TODO(knisbet)
// Investigate what MTU setting to use. There are a few things to consider:
// - 65535 is the maximum mtu that can be set on a bridge
// - This depends significantly, on how the linux kernel represents packets as they pass between
// network namespaces and through the linux bridge. If they're represented as ethernet packets,
// a large mtu should allow pod-to-pod within a host to be more efficient
// - Wireguard implements its own segmentation, and indicates to the linux kernel that it supports
// generic segmentation offload (https://www.wireguard.com/papers/wireguard.pdf section 7.1). If
// the bridge MTU plays into this, again, having a large mtu should be more efficient for pod-to-pod
// traffic between hosts.
// - If the network driver supports/has segmentation offload enabled, having large internal frames
// should also be more efficient. So pod -> internet traffic is segmented by the nic if enabled.
// - Also need to check into, whether we're getting a correct MSS, all of this is wasted if we're
// using a standard MSS in the TCP handshake
// - Also need to check whether we're advertising too large of a MSS on our TCP connections to internet
// peers, which may cause traffic towards a pod to have PMTU/black hole problems
bridgeMTU = 65535
)
func runController(cmd *cobra.Command, args []string) error {
err := syncCniBin()
if err != nil {
return trace.Wrap(err)
}
logger := logrus.New()
if debug {
logger.SetLevel(logrus.DebugLevel)
}
c, err := controller.New(controller.Config{
NodeName: nodeName,
Namespace: namespace,
OverlayCIDR: overlayCIDR,
NodeCIDR: nodeCIDR,
ListenPort: port,
WireguardIface: wireguardIface,
BridgeIface: bridgeIface,
BridgeMTU: bridgeMTU,
KubeconfigPath: kubeconfigPath,
Endpoint: endpoint,
}, logger)
if err != nil {
return trace.Wrap(err)
}
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
go func() {
signalC := make(chan os.Signal, 1)
signal.Notify(signalC, os.Interrupt, syscall.SIGTERM)
<-signalC
cancel()
}()
err = c.Run(ctx)
if err != nil && trace.Unwrap(err) != context.Canceled {
return trace.Wrap(err)
}
return nil
}
// syncCniBin attempts to copy CNI plugins to the host
// When running as a container, the host /opt/cni/bin directory should be mounted under /host
// If the /host/opt/cni/bin directory exists, copy the plugins to the host
func syncCniBin() error {
if _, err := os.Stat("/host/opt/cni/bin"); !os.IsNotExist(err) {
err = sh.Run("bash", "-c", "chown root:root -R /host/opt/cni/bin && cp /opt/cni/bin/* /host/opt/cni/bin/")
if err != nil {
return trace.Wrap(err)
}
}
return nil
}
================================================
FILE: cmd/wormhole/main.go
================================================
/*
Copyright 2018 Gravitational, 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 main
import (
"os"
"github.com/sirupsen/logrus"
"github.com/gravitational/trace"
"github.com/spf13/cobra"
)
var (
// Build time variables
commitHash string
timestamp string
gitTag string
)
var (
outputFormat = "text"
debug = false
logger = logrus.New()
)
func init() {
rootCmd.Flags().BoolVarP(
&debug,
"debug",
"",
debug,
"Enable debug logging",
)
}
func main() {
if debug {
logger.SetLevel(logrus.DebugLevel)
}
if err := rootCmd.Execute(); err != nil {
os.Stderr.Write([]byte(trace.DebugReport(err)))
os.Exit(1)
}
}
var rootCmd = &cobra.Command{
Use: "wormhole",
}
================================================
FILE: cmd/wormhole/version.go
================================================
/*
Copyright 2018 Gravitational, 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 main
import (
"encoding/json"
"fmt"
"os"
"strings"
"github.com/gravitational/trace"
"github.com/spf13/cobra"
yaml "gopkg.in/yaml.v2"
)
var versionCmd = &cobra.Command{
Use: "version",
Short: "Print version information.",
Long: ``,
RunE: version,
}
func init() {
rootCmd.AddCommand(versionCmd)
versionCmd.Flags().StringVarP(&outputFormat, "output", "o", outputFormat, "Output format. One Of: text|json|yaml")
}
func version(cmd *cobra.Command, args []string) error {
kv := map[string]string{
"version": gitTag,
"hash": commitHash,
"timestamp": timestamp,
}
switch strings.ToLower(outputFormat) {
case "text":
fmt.Println("Version: ", gitTag)
fmt.Println("Hash: ", commitHash)
fmt.Println("Build Timestamp: ", timestamp)
case "json":
b, err := json.MarshalIndent(kv, "", " ")
if err != nil {
return trace.ConvertSystemError(err)
}
os.Stdout.Write(b)
case "yaml":
b, err := yaml.Marshal(kv)
if err != nil {
return trace.ConvertSystemError(err)
}
os.Stdout.Write(b)
}
return nil
}
================================================
FILE: docs/generic-wormhole.yaml
================================================
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: wgnodes.wormhole.gravitational.io
spec:
group: wormhole.gravitational.io
names:
kind: Wgnode
plural: wgnodes
scope: Namespaced
version: v1beta1
status:
acceptedNames:
kind: ""
plural: ""
conditions: []
storedVersions: []
---
apiVersion: v1
kind: Namespace
metadata:
name: wormhole
---
apiVersion: scheduling.k8s.io/v1beta1
kind: PriorityClass
metadata:
name: wormhole-high-priority
value: 1000000
globalDefault: false
description: "This priority class should be used for wormhole controller pods only."
---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
annotations:
seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
name: wormhole
namespace: wormhole
spec:
allowedCapabilities:
- NET_ADMIN
- NET_RAW
- CHOWN
fsGroup:
rule: RunAsAny
hostPorts:
- max: 65535
min: 1024
runAsUser:
rule: RunAsAny
seLinux:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
volumes:
- '*'
hostNetwork: true
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: wormhole
rules:
- apiGroups:
- ""
resources:
- nodes
verbs:
- list
- watch
- get
- apiGroups:
- wormhole.gravitational.io
resources:
- "*"
verbs:
- "*"
- apiGroups:
- policy
resources:
- podsecuritypolicies
verbs:
- use
resourceNames:
- wormhole
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: wormhole
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: wormhole
subjects:
- kind: ServiceAccount
name: wormhole
namespace: wormhole
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: wormhole
name: wormhole
rules:
- apiGroups:
- ""
resources:
- secrets
verbs:
- get
- watch
- list
- create
- update
- apiGroups:
- ""
resources:
- pods
verbs:
- get
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: kube-system
name: wormhole
rules:
- apiGroups:
- ""
resources:
- configmaps
verbs:
- get
resourceNames:
- kubeadm-config
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: wormhole
name: wormhole
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: wormhole
subjects:
- kind: ServiceAccount
name: wormhole
namespace: wormhole
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: kube-system
name: wormhole
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: wormhole
subjects:
- kind: ServiceAccount
name: wormhole
namespace: wormhole
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: wormhole
namespace: wormhole
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: wormhole
namespace: wormhole
labels:
app: wormhole
spec:
selector:
matchLabels:
k8s-app: wormhole
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
template:
metadata:
labels:
k8s-app: wormhole
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ''
seccomp.security.alpha.kubernetes.io/pod: docker/default
spec:
hostNetwork: true
serviceAccountName: wormhole
# Short duration for rolling restarts
terminationGracePeriodSeconds: 5
selector:
nodeSelector:
beta.kubernetes.io/arch: amd64
tolerations:
# Tolerate all taints
- effect: NoSchedule
operator: Exists
- effect: NoExecute
operator: Exists
priorityClassName: wormhole-high-priority
containers:
# Run a wormhole container on each node
# Configures wireguard / CNI on each node
- name: wormhole
image: quay.io/gravitational/wormhole:0.1
command:
- /wormhole
args:
- controller
- --overlay-cidr=10.244.0.0/16
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
runAsNonRoot: false
runAsUser: 0
capabilities:
drop:
- all
add:
- NET_ADMIN
- NET_RAW
- CHOWN
imagePullPolicy: Always
resources:
requests:
cpu: 100m
memory: 100M
limits:
cpu: 100m
memory: 100M
volumeMounts:
- mountPath: /host/opt/cni/bin
name: cni-bin-dir
- mountPath: /host/etc/cni/net.d
name: cni-net-dir
- mountPath: /tmp
name: tmpfs
# Used for iptables lock
- mountPath: /run
name: run
volumes:
# Used to install CNI.
- name: cni-bin-dir
hostPath:
path: /opt/cni/bin
- name: cni-net-dir
hostPath:
path: /etc/cni/net.d
- name: tmpfs
emptyDir:
medium: Memory
- name: run
emptyDir:
medium: Memory
================================================
FILE: docs/gravity-wormhole.yaml
================================================
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: wgnodes.wormhole.gravitational.io
spec:
group: wormhole.gravitational.io
names:
kind: Wgnode
plural: wgnodes
scope: Namespaced
version: v1beta1
status:
acceptedNames:
kind: ""
plural: ""
conditions: []
storedVersions: []
---
apiVersion: v1
kind: Namespace
metadata:
name: wormhole
---
apiVersion: scheduling.k8s.io/v1beta1
kind: PriorityClass
metadata:
name: wormhole-high-priority
value: 1000000
globalDefault: false
description: "This priority class should be used for wormhole controller pods only."
---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
annotations:
seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
name: wormhole
namespace: wormhole
spec:
allowedCapabilities:
- NET_ADMIN
- NET_RAW
- CHOWN
fsGroup:
rule: RunAsAny
hostPorts:
- max: 65535
min: 1024
runAsUser:
rule: RunAsAny
seLinux:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
volumes:
- '*'
hostNetwork: true
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: wormhole
rules:
- apiGroups:
- ""
resources:
- nodes
verbs:
- list
- watch
- get
- apiGroups:
- wormhole.gravitational.io
resources:
- "*"
verbs:
- "*"
- apiGroups:
- policy
resources:
- podsecuritypolicies
verbs:
- use
resourceNames:
- wormhole
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: wormhole
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: wormhole
subjects:
- kind: ServiceAccount
name: wormhole
namespace: wormhole
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: wormhole
name: wormhole
rules:
- apiGroups:
- ""
resources:
- secrets
verbs:
- get
- watch
- list
- create
- update
- apiGroups:
- ""
resources:
- pods
verbs:
- get
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: wormhole
name: wormhole
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: wormhole
subjects:
- kind: ServiceAccount
name: wormhole
namespace: wormhole
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: wormhole
namespace: wormhole
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: wormhole
namespace: wormhole
labels:
app: wormhole
spec:
selector:
matchLabels:
k8s-app: wormhole
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
template:
metadata:
labels:
k8s-app: wormhole
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ''
seccomp.security.alpha.kubernetes.io/pod: docker/default
spec:
hostNetwork: true
serviceAccountName: wormhole
# Short duration for rolling restarts
terminationGracePeriodSeconds: 5
selector:
nodeSelector:
beta.kubernetes.io/arch: amd64
tolerations:
# Tolerate all taints
- effect: NoSchedule
operator: Exists
- effect: NoExecute
operator: Exists
priorityClassName: wormhole-high-priority
containers:
# Run a wormhole container on each node
# Configures wireguard / CNI on each node
- name: wormhole
image: leader.telekube.local:5000/gravitational/wormhole:__REPLACE_VERSION__
command:
- /wormhole
args:
- controller
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
runAsNonRoot: false
runAsUser: 0
capabilities:
drop:
- all
add:
- NET_ADMIN
- NET_RAW
- CHOWN
imagePullPolicy: Always
resources:
requests:
cpu: 100m
memory: 100M
limits:
cpu: 100m
memory: 100M
volumeMounts:
- mountPath: /host/opt/cni/bin
name: cni-bin-dir
- mountPath: /host/etc/cni/net.d
name: cni-net-dir
- mountPath: /host/etc/container-environment
name: container-environment
- mountPath: /tmp
name: tmpfs
# Used for iptables lock
- mountPath: /run
name: run
volumes:
# Used to install CNI.
- name: cni-bin-dir
hostPath:
path: /opt/cni/bin
- name: cni-net-dir
hostPath:
path: /etc/cni/net.d
- name: container-environment
hostPath:
path: /etc/container-environment
- name: tmpfs
emptyDir:
medium: Memory
- name: run
emptyDir:
medium: Memory
================================================
FILE: docs/kube-wormhole.yaml
================================================
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: wgnodes.wormhole.gravitational.io
spec:
group: wormhole.gravitational.io
names:
kind: Wgnode
plural: wgnodes
scope: Namespaced
version: v1beta1
status:
acceptedNames:
kind: ""
plural: ""
conditions: []
storedVersions: []
---
apiVersion: v1
kind: Namespace
metadata:
name: wormhole
---
apiVersion: scheduling.k8s.io/v1beta1
kind: PriorityClass
metadata:
name: wormhole-high-priority
value: 1000000
globalDefault: false
description: "This priority class should be used for wormhole controller pods only."
---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
annotations:
seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
name: wormhole
namespace: wormhole
spec:
allowedCapabilities:
- NET_ADMIN
- NET_RAW
- CHOWN
fsGroup:
rule: RunAsAny
hostPorts:
- max: 65535
min: 1024
runAsUser:
rule: RunAsAny
seLinux:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
volumes:
- '*'
hostNetwork: true
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: wormhole
rules:
- apiGroups:
- ""
resources:
- nodes
verbs:
- list
- watch
- get
- apiGroups:
- wormhole.gravitational.io
resources:
- "*"
verbs:
- "*"
- apiGroups:
- policy
resources:
- podsecuritypolicies
verbs:
- use
resourceNames:
- wormhole
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: wormhole
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: wormhole
subjects:
- kind: ServiceAccount
name: wormhole
namespace: wormhole
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: wormhole
name: wormhole
rules:
- apiGroups:
- ""
resources:
- secrets
verbs:
- get
- watch
- list
- create
- update
- apiGroups:
- ""
resources:
- pods
verbs:
- get
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: kube-system
name: wormhole
rules:
- apiGroups:
- ""
resources:
- configmaps
verbs:
- get
resourceNames:
- kubeadm-config
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: wormhole
name: wormhole
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: wormhole
subjects:
- kind: ServiceAccount
name: wormhole
namespace: wormhole
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: kube-system
name: wormhole
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: wormhole
subjects:
- kind: ServiceAccount
name: wormhole
namespace: wormhole
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: wormhole
namespace: wormhole
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: wormhole
namespace: wormhole
labels:
app: wormhole
spec:
selector:
matchLabels:
k8s-app: wormhole
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
template:
metadata:
labels:
k8s-app: wormhole
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ''
seccomp.security.alpha.kubernetes.io/pod: docker/default
spec:
hostNetwork: true
serviceAccountName: wormhole
# Short duration for rolling restarts
terminationGracePeriodSeconds: 5
selector:
nodeSelector:
beta.kubernetes.io/arch: amd64
tolerations:
# Tolerate all taints
- effect: NoSchedule
operator: Exists
- effect: NoExecute
operator: Exists
priorityClassName: wormhole-high-priority
containers:
# Run a wormhole container on each node
# Configures wireguard / CNI on each node
- name: wormhole
image: quay.io/gravitational/wormhole:0.1
command:
- /wormhole
args:
- controller
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
runAsNonRoot: false
runAsUser: 0
capabilities:
drop:
- all
add:
- NET_ADMIN
- NET_RAW
- CHOWN
imagePullPolicy: Always
resources:
requests:
cpu: 100m
memory: 100M
limits:
cpu: 100m
memory: 100M
volumeMounts:
- mountPath: /host/opt/cni/bin
name: cni-bin-dir
- mountPath: /host/etc/cni/net.d
name: cni-net-dir
- mountPath: /tmp
name: tmpfs
# Used for iptables lock
- mountPath: /run
name: run
volumes:
# Used to install CNI.
- name: cni-bin-dir
hostPath:
path: /opt/cni/bin
- name: cni-net-dir
hostPath:
path: /etc/cni/net.d
- name: tmpfs
emptyDir:
medium: Memory
- name: run
emptyDir:
medium: Memory
================================================
FILE: docs/rfcs/0001-spec.md
================================================
## Feature Name: Wormhole
## Start Date: 2018-10-03
## RFC PR:
## Issue:
# Summary
Wormhole is a new CNI network plugin, to encrypt traffic within a kubernetes cluster, based on WireGuard (https://www.wireguard.com)
This spec is not complete.
# Motivation
Several customers have approached us, asking to support encrypted networking between hosts when running gravity clusters in zero trust networks.
We are looking for a solution that has the following properties:
- Can be totally automated, and is easy to troubleshoot via remote support
- Is simple to turn-on, and will just work for a majority of use cases
- Encrypts all pod-to-pod traffic with minimal configuration
By introducing a CNI plugin based on wireguard, we can create a simple to understand and troubleshoot encrypted overlay network between hosts, that operates transparently to any deployed application.
# Guide-level explanation
This feature allows customers to optionally enable an encrypted overlay network within a [gravity cluster.](https://github.com/gravitational/gravity)
## Non-Goals:
- Multicast / broadcast network traffic will not be supported
- Network policy (use a network policy controller such as kube-router or canal along with this plugin)
- Non-amd64 platforms
- IPv6
- Identity (as in server/client certs)
## Installation
### Gravity
Wormhole will be enabled on a gravity cluster at packaging time, by setting the network type to wireguard in the application manifest:
```
providers:
generic:
network:
type: wireguard
```
### Non-gravity cluster
```
kubectl apply -f https://raw.githubusercontent.com/gravitational/wormhole/v0.0.0/docs/kube-wormhole.yaml
```
- Note: this will require installation of the wireguard kernel module on the host
- Note: On a kubeadm install, this will require passing --pod-network-cidr=<range> on init to enable the kubernetes IPAM
## Upgrade
### Gravity
- Wormhole is integrated with the gravity upgrade process as hooks that the gravity upgrade will run, using the rigging project to support rollback.
### Non-Gravity cluster
Apply the updated yaml to the cluster.
```
kubectl apply -f https://raw.githubusercontent.com/gravitational/wormhole/v1.0.0/docs/kube-wormhole.yaml
```
## Metrics
Note: not implemented in version 0.1.0
A limited set of metrics will be available via a prometheus endpoint.
Metrics:
- Software version
- Traffic counts between each node pair
- Error / Operational Status
- TODO (Packet loss between hosts)
Security:
- The prometheus endpoint should support mTLS client authentication
## Debug
### Logs
Most status / health information will be logged as part of the daemon / pod logs
### Status
Wireguard CLI (wg) will be embedded in the wormhole container, as well as planet, and can be used to inspect the wireguard tunnels easily.
TODO: Wormhole may include it's own status overview
### Docs
Troubleshooting docs similar to other plugins will need to be included
## Gravity: Health Checks [(Satellite)](https://github.com/gravitational/satellite)
Note: not implemented in version 0.1.0
Satellite will monitor the prometheus endpoint and report the following conditions:
- Host-to-host connectivity failures (ping / last handshake time)
- Missing peers (as compared to the k8s API)
- Daemon Errors
- Packet loss / latency
# Reference-level explanation
## Why WireGuard?
Wireguard is a lightweight VPN technology that has been getting many accolades and is currently expected to be mainlined into the Linux kernel. It’s designed to replace IPsec and OpenVPN for most use cases while being more secure, more performant, and easier to use.
The WireGuard paper provides a detailed explanation of the choices and properties offered by wireguard: https://www.wireguard.com/papers/wireguard.pdf
At Gravitational, our experience has consistently shown that simpler is better when operating overlay networks in many different clouds and on-prem environments, and WireGuard is especially appealing as a simple, highly opinionated, and highly performant network encryption solution that will allow us to continue to use the simpler is the better model.
## What about x?
There are a number of fascinating encrypted network plugins already available, that cover various features and capabilities that are not covered by wormhole.
The reason for us to introduce another network plugin, comes down to our experience shows when running clusters in hostile networks, that the simpler we can keep the networking model, the easier it is to troubleshoot in air-gapped, restricted access, networks.
So this plugin is for the use case, where a simple plugin is needed, but also to offer encrypted traffic between hosts.
## Architecture

- Architecture similar to flannel / other plugins
- Uses kubernetes IPAM module for subnet assignments
- Host includes an interface/ip on the overlay network
- Routing
- Traffic is processed through the routing table on the host network namespace
- All overlay network is always routed to wireguard interface, prevent leakage
- Host route table used for external traffic
- Encryption
- Traffic between pods is naturally encrypted, and will completely fail if not working / not encrypted
## Startup
1. Install CNI plugins (bridge, host-local, etc)
2. Attempt to detect configuration from the cluster (NodeCIDR, OverlayCIDR, IP Addresses, etc)
3. Generate a new wireguard keypair for the local host
4. Publish a WGNode CRD object with node configuration for peers (PublicKey, IP Address, Port)
5. Iterate over each peer, and generate new shared secret for each peer, and publish to kubernetes API
6. Setup routing table
7. Configure iptables rules
### Key Distribution
Wormhole uses the kubernetes API to distribute key's to each node, which means ultimately it inherits the security model of kubernetes itself.
WireGuard itself is based on using a key-pair for authentication, similar to ssh key-based authentication. It also optionally employs a pre-shared key for post-quantum resistance.
Notes:
- Generate a new key-pair on every start
- Key persistance isn't required, simply generate/exchange new key's on each start
- No long term persistence of keys required
- Public keys are published to kubernetes API
- Use CRD object for publishing node configuration
- Effective security of what the kubernetes API guarantees
- Private keys never leave the host, don't need to be persisted
- pre-shared key published as a kubernetes secret (per node pair)
- kubernetes RBAC restricts which users/processes have access to the keys
- Last writer wins for conflict resolution
- Also regenerated on each process start
- Uses a single shared secret object for each shared secret
- Has a limitation that any node can access cluster wide shared secrets
- To be addressed in a future version, where an admission controller can be used to enable nodes to only access their own shared secrets.
### Subnet Leases
Subnets will be allocated and maintained by the kubernetes IPAM module.
## Steady State
Wormhole itself will act as a control loop, where it will monitor and sync all configuration:
- Periodically, check iptables for missing rules, and re-create them
- Periodically, list WireGuard peers, and check for discrepancies from kubernetes node list
- Monitor kubernetes objects, and trigger wireguard configuration based on those events
## Network Stack Tuning
This will require some experimentation. Based on the WireGuard docs, it has an interesting property where it does encryption in place, and works with features like segmentation offload. This means we shouldn't need to apply anything like MSS clamping, or interface MTU optimizations, and can potentially support jumbo frames where supported.
Notes:
- Initial tests show the linux internal bridge can be configured with jumbo frames (MTU 65535) without a noticeable impact or benefit to wireguard throughput when leaving the linux host. This will require more thorough testing however.
- Notes, we do MSS clamping on traffic leaving the overlay network, to prevent advertising too large of an MSS to networks that may not support large frames.
## Security Considerations
### Anti-Spoofing
Wireguard naturally prevents spoofing of source addresses, by only allowing a peer to send traffic using a whitelisted source IP address. This helps prevent one node in the cluster from impersonating another. By inspecting the peer node object in kubernetes, the whitelist will only be configured to allow traffic for the IPAM range of that node.
However, with most overlay networks, if an adversary is able to spoof the source IP packet and send it to a linux interface, linux will route this as if it came from the overlay network. We’ll need to create a set of iptables rules, that blocks traffic received on unexpected interfaces sourced from the overlay network range.
Optionally, we may need to consider also creating rules to block one pod from spoofing another pod on the same host (on the local bridge).
Note: Initial tests show this shouldn't be an issue in cloud environments, which create internal load balancers. pod-to-pod traffic still uses the internal kubernetes load balancing, even when provisioning an AWS load balancer.
### Network Policy
Network Policy is out of the scope of this guide. The goal here is to be compatible with other plugins that can simply add in a network policy controller on top of wormhole.
### Key compromise (Private Key / Pre-shared)
The loss / re-use of a private key is detectable:
- Re-used private key will be treated as roaming by wireguard. It will break existing connections, and show as a source other than the advertise-ip known for the peer.
- There is a limited window, where if a node is down/unreachable, and the source-ip can be spoofed for full-duplex communications, that an adversary could communicate within the overlay network.
Rotation of the private and shared keys can easily be triggered, simply by restarting wormhole on the node. Initial testing shows the common case on small clusters is this startup takes less than a second, and the impact can be further reduced by draining the node.
Note: the shared key for a node pair will be available to all participants within a cluster.
### Audit
Kubernetes API audit logs will capture the publishing and changes to the key's used by the cluster.
### Firewall
It is possible to firewall the wireguard port to only accept traffic from other peers, however, this doesn't seem beneficial at this time. WireGuard itself is designed to work passively on a port, and we may in the future want additional capabilities for connecting additional
nodes or clients to the overlay network.
### Kubernetes API/RBAC
wormhole uses a service account when running as a pod to access the cluster API, or a kubectl configuration when running outside of the cluster.
The reference kubernetes RBAC permissions should restrict only to needed permissions.
## Drawbacks
This would be yet another kubernetes network plugin, in a realm of lots of plugins, that we would need to maintain.
## Rationale and Alternatives
- Flannel appears to have a partially implemented wireguard solution
- it doesn’t look like there has been any progress since December.
- Alternative: try and complete the flannel implementation and publish it.
- Flannel has an ipsec based backend
- Read the wireguard paper on why wireguard is expected to be the future (https://www.wireguard.com/papers/wireguard.pdf)
- Cilium is a very interesting tool that offers lots of capabilities
- My understanding, is cilium requires a decent amount of integration from the applications / kubernetes objects
- It’s also a complex tool, using lots of complex interactions, offloads to the kernel.
- I suspect, will be very difficult to troubleshoot in environments we don’t control (remote support / shared screen / etc).
- Weave
- Weave uses a userspace router for sending traffic between nodes, which will have a performance penalty. It also has a fast path based on ipsec kernel structures, which can be difficult to troubleshoot.
- Weave does add interesting capabilities though, such as multicast, but again has a complexity concern when running in environments we don’t control (remote support, shared screen, etc)
## Unresolved Questions
### WireGuard kernel plugin
Specifically for gravity, we need to see if we will be able to package and install the wireguard kernel module automatically along with gravity based installs on supported distributions. This will be difficult, since we support a variety of kernels, and have a design goal of being easy to install on air-gapped environments.
The linux kernel should eventually contain native support, which will make this requirement largely disappear in the future.
## Future Work
Using a wireguard VPN as an overlay network, leaves some very interesting potential future extensions.
Telepresence (https://www.telepresence.io) has gained a lot of recent popularity, by combining local development and troubleshooting, using a novel two-way network proxy and overriding a process to use the proxy for DNS resolution / and TCP connections. Wormhole on the other hand, could allow non-cluster machines, such as development machines, security scanners, non-kubernetes clients, etc to VPN to the overlay network, have an address on the network/ be fully connected to service discovery, etc.
In reverse, connecting a cluster to non cluster resources also has some potential, such as a bare-metal DB server, where the mesh/overlay network is extended to these machines by installation of an agent, and granted access to the kubernetes API (limited by k8s RBAC).
And last, this could be a very interesting solution for federation of multiple kubernetes clusters, and phone home connections for logs, metrics, etc. when bridging companies networks.
================================================
FILE: docs/troubleshooting.md
================================================
# Troubleshooting Guide
## Connectivity
Gravitational Wormhole uses port 9806 by default for WireGuard connectivity between hosts. Ensure this port is allowed through any infrastructure firewalls or change the port by passing the --port command option to the process.
```console
kubectl -n wormhole edit ds/wormhole
...
spec:
containers:
- args:
- controller
- --port=9000
command:
- /wormhole
...
```
## Logging
Gravitational Wormhole uses logrus for logging, which are available from the deployed kubernetes pods. Additional logging can be enabled by turning on debug logging.
**Warning:** Debug logging may leak shared secrets to the logs. See [Rotating Secrets](#rotating-secrets) on how to rotate secrets.
```console
kubectl -n wormhole edit ds/wormhole
...
spec:
containers:
- args:
- controller
- --debug
command:
- /wormhole
...
```
## CRDs (Wormhole node object)
Wormhole uses a Wgnode object to advertise node configuration to other cluster members. Inspect the node object for problems.
```console
kubectl -n wormhole get wgnode -o yaml
apiVersion: v1
items:
- apiVersion: wormhole.gravitational.io/v1beta1
kind: Wgnode
metadata:
name: kevin-test3
namespace: wormhole
status:
endpoint: 10.162.0.5
node_cidr: 10.20.2.0/24
port: 9806
public_key: zE4iLxHuYgRz+RmFHG2ePr1ma4hrSINg0INH5OItb0o=
- apiVersion: wormhole.gravitational.io/v1beta1
kind: Wgnode
metadata:
name: kevin-test4
namespace: wormhole
status:
endpoint: 10.162.0.4
node_cidr: 10.20.1.0/24
port: 9806
public_key: auk1K9HFMsVBkyGoPjmViK//YMX+cdF/VK4I6alfyxM=
- apiVersion: wormhole.gravitational.io/v1beta1
kind: Wgnode
metadata:
name: kevin-test5
namespace: wormhole
status:
endpoint: 10.162.0.3
node_cidr: 10.20.0.0/24
port: 9806
public_key: 8Vk+L/NJDvtRoLnfjxnTbFhEmWnbi2j3Rk+6xupXZSc=
kind: List
metadata:
resourceVersion: ""
selfLink: ""
```
## Rotating Secrets
All secrets are rotated automatically on each process start. Restart the wormhole controller on each node to rotate all secrets.
**Warning:** this may produce a short network interruption as the process is started and re-configures the network with new secrets. The node can optionally be drained before restarting the process.
```console
kubectl -n wormhole delete po -l k8s-app=wormhole
```
================================================
FILE: hack/boilerplate.go.txt
================================================
/*
Copyright 2019 Gravitational, 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.
*/
================================================
FILE: hack/update-codegen.sh
================================================
#!/usr/bin/env bash
# Copyright 2017 The Kubernetes 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.
set -o errexit
set -o nounset
set -o pipefail
SCRIPT_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
CODEGEN_PKG=${CODEGEN_PKG:-$(cd "${SCRIPT_ROOT}"; ls -d -1 ./vendor/k8s.io/code-generator 2>/dev/null || echo ../code-generator)}
# generate the code with:
# --output-base because this script should also be able to run inside the vendor dir of
# k8s.io/kubernetes. The output-base is needed for the generators to output into the vendor dir
# instead of the $GOPATH directly. For normal projects this can be dropped.
"${CODEGEN_PKG}"/generate-groups.sh "all" \
github.com/gravitational/wormhole/pkg/client github.com/gravitational/wormhole/pkg/apis \
wormhole.gravitational.io:v1beta1 \
--go-header-file "${SCRIPT_ROOT}"/hack/boilerplate.go.txt
# To use your own boilerplate text append:
# --go-header-file "${SCRIPT_ROOT}"/hack/custom-boilerplate.go.txt
================================================
FILE: hack/verify-codegen.sh
================================================
#!/usr/bin/env bash
# Copyright 2017 The Kubernetes 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.
set -o errexit
set -o nounset
set -o pipefail
SCRIPT_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
DIFFROOT="${SCRIPT_ROOT}/pkg"
TMP_DIFFROOT="${SCRIPT_ROOT}/_tmp/pkg"
_tmp="${SCRIPT_ROOT}/_tmp"
cleanup() {
rm -rf "${_tmp}"
}
trap "cleanup" EXIT SIGINT
cleanup
mkdir -p "${TMP_DIFFROOT}"
cp -a "${DIFFROOT}"/* "${TMP_DIFFROOT}"
"${SCRIPT_ROOT}/hack/update-codegen.sh"
echo "diffing ${DIFFROOT} against freshly generated codegen"
ret=0
diff -Naupr "${DIFFROOT}" "${TMP_DIFFROOT}" || ret=$?
cp -a "${TMP_DIFFROOT}"/* "${DIFFROOT}"
if [[ $ret -eq 0 ]]
then
echo "${DIFFROOT} up to date."
else
echo "${DIFFROOT} is out of date. Please run hack/update-codegen.sh"
exit 1
fi
================================================
FILE: mage.go
================================================
// +build ignore
package main
import (
"os"
"github.com/magefile/mage/mage"
)
func main() { os.Exit(mage.Main()) }
================================================
FILE: pkg/apis/wormhole.gravitational.io/register.go
================================================
/*
Copyright 2019 Gravitational, 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 wormholegravitationalio
const (
// GroupName is the kubernetes CRD group name for this object
GroupName = "wormhole.gravitational.io"
)
================================================
FILE: pkg/apis/wormhole.gravitational.io/v1beta1/doc.go
================================================
/*
Copyright 2019 Gravitational, 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 v1beta1 contains API Schema definitions for the wormhole v1beta1 API group
// +groupName=wormhole.gravitational.io
// +k8s:openapi-gen=true
// +k8s:deepcopy-gen=package,register
package v1beta1
================================================
FILE: pkg/apis/wormhole.gravitational.io/v1beta1/register.go
================================================
/*
Copyright 2019 Gravitational, 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 v1beta1
import (
"k8s.io/apimachinery/pkg/runtime/schema"
"sigs.k8s.io/controller-runtime/pkg/scheme"
)
var (
// SchemeGroupVersion is group version used to register these objects
SchemeGroupVersion = schema.GroupVersion{Group: "wormhole.gravitational.io", Version: "v1beta1"}
// SchemeBuilder is used to add go types to the GroupVersionKind scheme
SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion}
// AddToScheme is required by pkg/client/...
AddToScheme = SchemeBuilder.AddToScheme
)
// Resource is required by pkg/client/listers/...
func Resource(resource string) schema.GroupResource {
return SchemeGroupVersion.WithResource(resource).GroupResource()
}
================================================
FILE: pkg/apis/wormhole.gravitational.io/v1beta1/wgnode_types.go
================================================
/*
Copyright 2019 Gravitational, 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 v1beta1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// WgnodeSpec defines the desired state of Wgnode
type WgnodeSpec struct {
// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
// Important: Run "make" to regenerate code after modifying this file
}
// WgnodeStatus defines the observed state of Wgnode
type WgnodeStatus struct {
// Port is the port to connect to wireguard on this host
Port int `json:"port"`
// PublicKey is the public key of the wireguard node
PublicKey string `json:"public_key"`
// NodeCIDR is the IP address range in CIDR format assigned to this node
NodeCIDR string `json:"node_cidr"`
// Endpoint is the IP address to connect to this node
Endpoint string `json:"endpoint"`
}
// +genclient
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// Wgnode is the Schema for the wgnodes API
// +k8s:openapi-gen=true
type Wgnode struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec WgnodeSpec `json:"spec,omitempty"`
Status WgnodeStatus `json:"status,omitempty"`
}
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// WgnodeList contains a list of Wgnode
type WgnodeList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []Wgnode `json:"items"`
}
func init() {
SchemeBuilder.Register(&Wgnode{}, &WgnodeList{})
}
================================================
FILE: pkg/apis/wormhole.gravitational.io/v1beta1/zz_generated.deepcopy.go
================================================
// +build !ignore_autogenerated
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by deepcopy-gen. DO NOT EDIT.
package v1beta1
import (
runtime "k8s.io/apimachinery/pkg/runtime"
)
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Wgnode) DeepCopyInto(out *Wgnode) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
out.Spec = in.Spec
out.Status = in.Status
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Wgnode.
func (in *Wgnode) DeepCopy() *Wgnode {
if in == nil {
return nil
}
out := new(Wgnode)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *Wgnode) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *WgnodeList) DeepCopyInto(out *WgnodeList) {
*out = *in
out.TypeMeta = in.TypeMeta
out.ListMeta = in.ListMeta
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]Wgnode, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WgnodeList.
func (in *WgnodeList) DeepCopy() *WgnodeList {
if in == nil {
return nil
}
out := new(WgnodeList)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *WgnodeList) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *WgnodeSpec) DeepCopyInto(out *WgnodeSpec) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WgnodeSpec.
func (in *WgnodeSpec) DeepCopy() *WgnodeSpec {
if in == nil {
return nil
}
out := new(WgnodeSpec)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *WgnodeStatus) DeepCopyInto(out *WgnodeStatus) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WgnodeStatus.
func (in *WgnodeStatus) DeepCopy() *WgnodeStatus {
if in == nil {
return nil
}
out := new(WgnodeStatus)
in.DeepCopyInto(out)
return out
}
================================================
FILE: pkg/client/clientset/versioned/clientset.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by client-gen. DO NOT EDIT.
package versioned
import (
wormholev1beta1 "github.com/gravitational/wormhole/pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1"
discovery "k8s.io/client-go/discovery"
rest "k8s.io/client-go/rest"
flowcontrol "k8s.io/client-go/util/flowcontrol"
)
type Interface interface {
Discovery() discovery.DiscoveryInterface
WormholeV1beta1() wormholev1beta1.WormholeV1beta1Interface
// Deprecated: please explicitly pick a version if possible.
Wormhole() wormholev1beta1.WormholeV1beta1Interface
}
// Clientset contains the clients for groups. Each group has exactly one
// version included in a Clientset.
type Clientset struct {
*discovery.DiscoveryClient
wormholeV1beta1 *wormholev1beta1.WormholeV1beta1Client
}
// WormholeV1beta1 retrieves the WormholeV1beta1Client
func (c *Clientset) WormholeV1beta1() wormholev1beta1.WormholeV1beta1Interface {
return c.wormholeV1beta1
}
// Deprecated: Wormhole retrieves the default version of WormholeClient.
// Please explicitly pick a version.
func (c *Clientset) Wormhole() wormholev1beta1.WormholeV1beta1Interface {
return c.wormholeV1beta1
}
// Discovery retrieves the DiscoveryClient
func (c *Clientset) Discovery() discovery.DiscoveryInterface {
if c == nil {
return nil
}
return c.DiscoveryClient
}
// NewForConfig creates a new Clientset for the given config.
func NewForConfig(c *rest.Config) (*Clientset, error) {
configShallowCopy := *c
if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 {
configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst)
}
var cs Clientset
var err error
cs.wormholeV1beta1, err = wormholev1beta1.NewForConfig(&configShallowCopy)
if err != nil {
return nil, err
}
cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy)
if err != nil {
return nil, err
}
return &cs, nil
}
// NewForConfigOrDie creates a new Clientset for the given config and
// panics if there is an error in the config.
func NewForConfigOrDie(c *rest.Config) *Clientset {
var cs Clientset
cs.wormholeV1beta1 = wormholev1beta1.NewForConfigOrDie(c)
cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c)
return &cs
}
// New creates a new Clientset for the given RESTClient.
func New(c rest.Interface) *Clientset {
var cs Clientset
cs.wormholeV1beta1 = wormholev1beta1.New(c)
cs.DiscoveryClient = discovery.NewDiscoveryClient(c)
return &cs
}
================================================
FILE: pkg/client/clientset/versioned/doc.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by client-gen. DO NOT EDIT.
// This package has the automatically generated clientset.
package versioned
================================================
FILE: pkg/client/clientset/versioned/fake/clientset_generated.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by client-gen. DO NOT EDIT.
package fake
import (
clientset "github.com/gravitational/wormhole/pkg/client/clientset/versioned"
wormholev1beta1 "github.com/gravitational/wormhole/pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1"
fakewormholev1beta1 "github.com/gravitational/wormhole/pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/fake"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/discovery"
fakediscovery "k8s.io/client-go/discovery/fake"
"k8s.io/client-go/testing"
)
// NewSimpleClientset returns a clientset that will respond with the provided objects.
// It's backed by a very simple object tracker that processes creates, updates and deletions as-is,
// without applying any validations and/or defaults. It shouldn't be considered a replacement
// for a real clientset and is mostly useful in simple unit tests.
func NewSimpleClientset(objects ...runtime.Object) *Clientset {
o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder())
for _, obj := range objects {
if err := o.Add(obj); err != nil {
panic(err)
}
}
cs := &Clientset{}
cs.discovery = &fakediscovery.FakeDiscovery{Fake: &cs.Fake}
cs.AddReactor("*", "*", testing.ObjectReaction(o))
cs.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) {
gvr := action.GetResource()
ns := action.GetNamespace()
watch, err := o.Watch(gvr, ns)
if err != nil {
return false, nil, err
}
return true, watch, nil
})
return cs
}
// Clientset implements clientset.Interface. Meant to be embedded into a
// struct to get a default implementation. This makes faking out just the method
// you want to test easier.
type Clientset struct {
testing.Fake
discovery *fakediscovery.FakeDiscovery
}
func (c *Clientset) Discovery() discovery.DiscoveryInterface {
return c.discovery
}
var _ clientset.Interface = &Clientset{}
// WormholeV1beta1 retrieves the WormholeV1beta1Client
func (c *Clientset) WormholeV1beta1() wormholev1beta1.WormholeV1beta1Interface {
return &fakewormholev1beta1.FakeWormholeV1beta1{Fake: &c.Fake}
}
// Wormhole retrieves the WormholeV1beta1Client
func (c *Clientset) Wormhole() wormholev1beta1.WormholeV1beta1Interface {
return &fakewormholev1beta1.FakeWormholeV1beta1{Fake: &c.Fake}
}
================================================
FILE: pkg/client/clientset/versioned/fake/doc.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by client-gen. DO NOT EDIT.
// This package has the automatically generated fake clientset.
package fake
================================================
FILE: pkg/client/clientset/versioned/fake/register.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by client-gen. DO NOT EDIT.
package fake
import (
wormholev1beta1 "github.com/gravitational/wormhole/pkg/apis/wormhole.gravitational.io/v1beta1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
schema "k8s.io/apimachinery/pkg/runtime/schema"
serializer "k8s.io/apimachinery/pkg/runtime/serializer"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
)
var scheme = runtime.NewScheme()
var codecs = serializer.NewCodecFactory(scheme)
var parameterCodec = runtime.NewParameterCodec(scheme)
var localSchemeBuilder = runtime.SchemeBuilder{
wormholev1beta1.AddToScheme,
}
// AddToScheme adds all types of this clientset into the given scheme. This allows composition
// of clientsets, like in:
//
// import (
// "k8s.io/client-go/kubernetes"
// clientsetscheme "k8s.io/client-go/kubernetes/scheme"
// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme"
// )
//
// kclientset, _ := kubernetes.NewForConfig(c)
// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
//
// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types
// correctly.
var AddToScheme = localSchemeBuilder.AddToScheme
func init() {
v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"})
utilruntime.Must(AddToScheme(scheme))
}
================================================
FILE: pkg/client/clientset/versioned/scheme/doc.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by client-gen. DO NOT EDIT.
// This package contains the scheme of the automatically generated clientset.
package scheme
================================================
FILE: pkg/client/clientset/versioned/scheme/register.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by client-gen. DO NOT EDIT.
package scheme
import (
wormholev1beta1 "github.com/gravitational/wormhole/pkg/apis/wormhole.gravitational.io/v1beta1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
schema "k8s.io/apimachinery/pkg/runtime/schema"
serializer "k8s.io/apimachinery/pkg/runtime/serializer"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
)
var Scheme = runtime.NewScheme()
var Codecs = serializer.NewCodecFactory(Scheme)
var ParameterCodec = runtime.NewParameterCodec(Scheme)
var localSchemeBuilder = runtime.SchemeBuilder{
wormholev1beta1.AddToScheme,
}
// AddToScheme adds all types of this clientset into the given scheme. This allows composition
// of clientsets, like in:
//
// import (
// "k8s.io/client-go/kubernetes"
// clientsetscheme "k8s.io/client-go/kubernetes/scheme"
// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme"
// )
//
// kclientset, _ := kubernetes.NewForConfig(c)
// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme)
//
// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types
// correctly.
var AddToScheme = localSchemeBuilder.AddToScheme
func init() {
v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"})
utilruntime.Must(AddToScheme(Scheme))
}
================================================
FILE: pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/doc.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by client-gen. DO NOT EDIT.
// This package has the automatically generated typed clients.
package v1beta1
================================================
FILE: pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/fake/doc.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by client-gen. DO NOT EDIT.
// Package fake has the automatically generated clients.
package fake
================================================
FILE: pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/fake/fake_wgnode.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by client-gen. DO NOT EDIT.
package fake
import (
v1beta1 "github.com/gravitational/wormhole/pkg/apis/wormhole.gravitational.io/v1beta1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
labels "k8s.io/apimachinery/pkg/labels"
schema "k8s.io/apimachinery/pkg/runtime/schema"
types "k8s.io/apimachinery/pkg/types"
watch "k8s.io/apimachinery/pkg/watch"
testing "k8s.io/client-go/testing"
)
// FakeWgnodes implements WgnodeInterface
type FakeWgnodes struct {
Fake *FakeWormholeV1beta1
ns string
}
var wgnodesResource = schema.GroupVersionResource{Group: "wormhole.gravitational.io", Version: "v1beta1", Resource: "wgnodes"}
var wgnodesKind = schema.GroupVersionKind{Group: "wormhole.gravitational.io", Version: "v1beta1", Kind: "Wgnode"}
// Get takes name of the wgnode, and returns the corresponding wgnode object, and an error if there is any.
func (c *FakeWgnodes) Get(name string, options v1.GetOptions) (result *v1beta1.Wgnode, err error) {
obj, err := c.Fake.
Invokes(testing.NewGetAction(wgnodesResource, c.ns, name), &v1beta1.Wgnode{})
if obj == nil {
return nil, err
}
return obj.(*v1beta1.Wgnode), err
}
// List takes label and field selectors, and returns the list of Wgnodes that match those selectors.
func (c *FakeWgnodes) List(opts v1.ListOptions) (result *v1beta1.WgnodeList, err error) {
obj, err := c.Fake.
Invokes(testing.NewListAction(wgnodesResource, wgnodesKind, c.ns, opts), &v1beta1.WgnodeList{})
if obj == nil {
return nil, err
}
label, _, _ := testing.ExtractFromListOptions(opts)
if label == nil {
label = labels.Everything()
}
list := &v1beta1.WgnodeList{ListMeta: obj.(*v1beta1.WgnodeList).ListMeta}
for _, item := range obj.(*v1beta1.WgnodeList).Items {
if label.Matches(labels.Set(item.Labels)) {
list.Items = append(list.Items, item)
}
}
return list, err
}
// Watch returns a watch.Interface that watches the requested wgnodes.
func (c *FakeWgnodes) Watch(opts v1.ListOptions) (watch.Interface, error) {
return c.Fake.
InvokesWatch(testing.NewWatchAction(wgnodesResource, c.ns, opts))
}
// Create takes the representation of a wgnode and creates it. Returns the server's representation of the wgnode, and an error, if there is any.
func (c *FakeWgnodes) Create(wgnode *v1beta1.Wgnode) (result *v1beta1.Wgnode, err error) {
obj, err := c.Fake.
Invokes(testing.NewCreateAction(wgnodesResource, c.ns, wgnode), &v1beta1.Wgnode{})
if obj == nil {
return nil, err
}
return obj.(*v1beta1.Wgnode), err
}
// Update takes the representation of a wgnode and updates it. Returns the server's representation of the wgnode, and an error, if there is any.
func (c *FakeWgnodes) Update(wgnode *v1beta1.Wgnode) (result *v1beta1.Wgnode, err error) {
obj, err := c.Fake.
Invokes(testing.NewUpdateAction(wgnodesResource, c.ns, wgnode), &v1beta1.Wgnode{})
if obj == nil {
return nil, err
}
return obj.(*v1beta1.Wgnode), err
}
// UpdateStatus was generated because the type contains a Status member.
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
func (c *FakeWgnodes) UpdateStatus(wgnode *v1beta1.Wgnode) (*v1beta1.Wgnode, error) {
obj, err := c.Fake.
Invokes(testing.NewUpdateSubresourceAction(wgnodesResource, "status", c.ns, wgnode), &v1beta1.Wgnode{})
if obj == nil {
return nil, err
}
return obj.(*v1beta1.Wgnode), err
}
// Delete takes name of the wgnode and deletes it. Returns an error if one occurs.
func (c *FakeWgnodes) Delete(name string, options *v1.DeleteOptions) error {
_, err := c.Fake.
Invokes(testing.NewDeleteAction(wgnodesResource, c.ns, name), &v1beta1.Wgnode{})
return err
}
// DeleteCollection deletes a collection of objects.
func (c *FakeWgnodes) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error {
action := testing.NewDeleteCollectionAction(wgnodesResource, c.ns, listOptions)
_, err := c.Fake.Invokes(action, &v1beta1.WgnodeList{})
return err
}
// Patch applies the patch and returns the patched wgnode.
func (c *FakeWgnodes) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Wgnode, err error) {
obj, err := c.Fake.
Invokes(testing.NewPatchSubresourceAction(wgnodesResource, c.ns, name, pt, data, subresources...), &v1beta1.Wgnode{})
if obj == nil {
return nil, err
}
return obj.(*v1beta1.Wgnode), err
}
================================================
FILE: pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/fake/fake_wormhole.gravitational.io_client.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by client-gen. DO NOT EDIT.
package fake
import (
v1beta1 "github.com/gravitational/wormhole/pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1"
rest "k8s.io/client-go/rest"
testing "k8s.io/client-go/testing"
)
type FakeWormholeV1beta1 struct {
*testing.Fake
}
func (c *FakeWormholeV1beta1) Wgnodes(namespace string) v1beta1.WgnodeInterface {
return &FakeWgnodes{c, namespace}
}
// RESTClient returns a RESTClient that is used to communicate
// with API server by this client implementation.
func (c *FakeWormholeV1beta1) RESTClient() rest.Interface {
var ret *rest.RESTClient
return ret
}
================================================
FILE: pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/generated_expansion.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by client-gen. DO NOT EDIT.
package v1beta1
type WgnodeExpansion interface{}
================================================
FILE: pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/wgnode.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by client-gen. DO NOT EDIT.
package v1beta1
import (
"time"
v1beta1 "github.com/gravitational/wormhole/pkg/apis/wormhole.gravitational.io/v1beta1"
scheme "github.com/gravitational/wormhole/pkg/client/clientset/versioned/scheme"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
types "k8s.io/apimachinery/pkg/types"
watch "k8s.io/apimachinery/pkg/watch"
rest "k8s.io/client-go/rest"
)
// WgnodesGetter has a method to return a WgnodeInterface.
// A group's client should implement this interface.
type WgnodesGetter interface {
Wgnodes(namespace string) WgnodeInterface
}
// WgnodeInterface has methods to work with Wgnode resources.
type WgnodeInterface interface {
Create(*v1beta1.Wgnode) (*v1beta1.Wgnode, error)
Update(*v1beta1.Wgnode) (*v1beta1.Wgnode, error)
UpdateStatus(*v1beta1.Wgnode) (*v1beta1.Wgnode, error)
Delete(name string, options *v1.DeleteOptions) error
DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error
Get(name string, options v1.GetOptions) (*v1beta1.Wgnode, error)
List(opts v1.ListOptions) (*v1beta1.WgnodeList, error)
Watch(opts v1.ListOptions) (watch.Interface, error)
Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Wgnode, err error)
WgnodeExpansion
}
// wgnodes implements WgnodeInterface
type wgnodes struct {
client rest.Interface
ns string
}
// newWgnodes returns a Wgnodes
func newWgnodes(c *WormholeV1beta1Client, namespace string) *wgnodes {
return &wgnodes{
client: c.RESTClient(),
ns: namespace,
}
}
// Get takes name of the wgnode, and returns the corresponding wgnode object, and an error if there is any.
func (c *wgnodes) Get(name string, options v1.GetOptions) (result *v1beta1.Wgnode, err error) {
result = &v1beta1.Wgnode{}
err = c.client.Get().
Namespace(c.ns).
Resource("wgnodes").
Name(name).
VersionedParams(&options, scheme.ParameterCodec).
Do().
Into(result)
return
}
// List takes label and field selectors, and returns the list of Wgnodes that match those selectors.
func (c *wgnodes) List(opts v1.ListOptions) (result *v1beta1.WgnodeList, err error) {
var timeout time.Duration
if opts.TimeoutSeconds != nil {
timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
}
result = &v1beta1.WgnodeList{}
err = c.client.Get().
Namespace(c.ns).
Resource("wgnodes").
VersionedParams(&opts, scheme.ParameterCodec).
Timeout(timeout).
Do().
Into(result)
return
}
// Watch returns a watch.Interface that watches the requested wgnodes.
func (c *wgnodes) Watch(opts v1.ListOptions) (watch.Interface, error) {
var timeout time.Duration
if opts.TimeoutSeconds != nil {
timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
}
opts.Watch = true
return c.client.Get().
Namespace(c.ns).
Resource("wgnodes").
VersionedParams(&opts, scheme.ParameterCodec).
Timeout(timeout).
Watch()
}
// Create takes the representation of a wgnode and creates it. Returns the server's representation of the wgnode, and an error, if there is any.
func (c *wgnodes) Create(wgnode *v1beta1.Wgnode) (result *v1beta1.Wgnode, err error) {
result = &v1beta1.Wgnode{}
err = c.client.Post().
Namespace(c.ns).
Resource("wgnodes").
Body(wgnode).
Do().
Into(result)
return
}
// Update takes the representation of a wgnode and updates it. Returns the server's representation of the wgnode, and an error, if there is any.
func (c *wgnodes) Update(wgnode *v1beta1.Wgnode) (result *v1beta1.Wgnode, err error) {
result = &v1beta1.Wgnode{}
err = c.client.Put().
Namespace(c.ns).
Resource("wgnodes").
Name(wgnode.Name).
Body(wgnode).
Do().
Into(result)
return
}
// UpdateStatus was generated because the type contains a Status member.
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
func (c *wgnodes) UpdateStatus(wgnode *v1beta1.Wgnode) (result *v1beta1.Wgnode, err error) {
result = &v1beta1.Wgnode{}
err = c.client.Put().
Namespace(c.ns).
Resource("wgnodes").
Name(wgnode.Name).
SubResource("status").
Body(wgnode).
Do().
Into(result)
return
}
// Delete takes name of the wgnode and deletes it. Returns an error if one occurs.
func (c *wgnodes) Delete(name string, options *v1.DeleteOptions) error {
return c.client.Delete().
Namespace(c.ns).
Resource("wgnodes").
Name(name).
Body(options).
Do().
Error()
}
// DeleteCollection deletes a collection of objects.
func (c *wgnodes) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error {
var timeout time.Duration
if listOptions.TimeoutSeconds != nil {
timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second
}
return c.client.Delete().
Namespace(c.ns).
Resource("wgnodes").
VersionedParams(&listOptions, scheme.ParameterCodec).
Timeout(timeout).
Body(options).
Do().
Error()
}
// Patch applies the patch and returns the patched wgnode.
func (c *wgnodes) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Wgnode, err error) {
result = &v1beta1.Wgnode{}
err = c.client.Patch(pt).
Namespace(c.ns).
Resource("wgnodes").
SubResource(subresources...).
Name(name).
Body(data).
Do().
Into(result)
return
}
================================================
FILE: pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/wormhole.gravitational.io_client.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by client-gen. DO NOT EDIT.
package v1beta1
import (
v1beta1 "github.com/gravitational/wormhole/pkg/apis/wormhole.gravitational.io/v1beta1"
"github.com/gravitational/wormhole/pkg/client/clientset/versioned/scheme"
serializer "k8s.io/apimachinery/pkg/runtime/serializer"
rest "k8s.io/client-go/rest"
)
type WormholeV1beta1Interface interface {
RESTClient() rest.Interface
WgnodesGetter
}
// WormholeV1beta1Client is used to interact with features provided by the wormhole.gravitational.io group.
type WormholeV1beta1Client struct {
restClient rest.Interface
}
func (c *WormholeV1beta1Client) Wgnodes(namespace string) WgnodeInterface {
return newWgnodes(c, namespace)
}
// NewForConfig creates a new WormholeV1beta1Client for the given config.
func NewForConfig(c *rest.Config) (*WormholeV1beta1Client, error) {
config := *c
if err := setConfigDefaults(&config); err != nil {
return nil, err
}
client, err := rest.RESTClientFor(&config)
if err != nil {
return nil, err
}
return &WormholeV1beta1Client{client}, nil
}
// NewForConfigOrDie creates a new WormholeV1beta1Client for the given config and
// panics if there is an error in the config.
func NewForConfigOrDie(c *rest.Config) *WormholeV1beta1Client {
client, err := NewForConfig(c)
if err != nil {
panic(err)
}
return client
}
// New creates a new WormholeV1beta1Client for the given RESTClient.
func New(c rest.Interface) *WormholeV1beta1Client {
return &WormholeV1beta1Client{c}
}
func setConfigDefaults(config *rest.Config) error {
gv := v1beta1.SchemeGroupVersion
config.GroupVersion = &gv
config.APIPath = "/apis"
config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs}
if config.UserAgent == "" {
config.UserAgent = rest.DefaultKubernetesUserAgent()
}
return nil
}
// RESTClient returns a RESTClient that is used to communicate
// with API server by this client implementation.
func (c *WormholeV1beta1Client) RESTClient() rest.Interface {
if c == nil {
return nil
}
return c.restClient
}
================================================
FILE: pkg/client/informers/externalversions/factory.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by informer-gen. DO NOT EDIT.
package externalversions
import (
reflect "reflect"
sync "sync"
time "time"
versioned "github.com/gravitational/wormhole/pkg/client/clientset/versioned"
internalinterfaces "github.com/gravitational/wormhole/pkg/client/informers/externalversions/internalinterfaces"
wormholegravitationalio "github.com/gravitational/wormhole/pkg/client/informers/externalversions/wormhole.gravitational.io"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
schema "k8s.io/apimachinery/pkg/runtime/schema"
cache "k8s.io/client-go/tools/cache"
)
// SharedInformerOption defines the functional option type for SharedInformerFactory.
type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory
type sharedInformerFactory struct {
client versioned.Interface
namespace string
tweakListOptions internalinterfaces.TweakListOptionsFunc
lock sync.Mutex
defaultResync time.Duration
customResync map[reflect.Type]time.Duration
informers map[reflect.Type]cache.SharedIndexInformer
// startedInformers is used for tracking which informers have been started.
// This allows Start() to be called multiple times safely.
startedInformers map[reflect.Type]bool
}
// WithCustomResyncConfig sets a custom resync period for the specified informer types.
func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption {
return func(factory *sharedInformerFactory) *sharedInformerFactory {
for k, v := range resyncConfig {
factory.customResync[reflect.TypeOf(k)] = v
}
return factory
}
}
// WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory.
func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption {
return func(factory *sharedInformerFactory) *sharedInformerFactory {
factory.tweakListOptions = tweakListOptions
return factory
}
}
// WithNamespace limits the SharedInformerFactory to the specified namespace.
func WithNamespace(namespace string) SharedInformerOption {
return func(factory *sharedInformerFactory) *sharedInformerFactory {
factory.namespace = namespace
return factory
}
}
// NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces.
func NewSharedInformerFactory(client versioned.Interface, defaultResync time.Duration) SharedInformerFactory {
return NewSharedInformerFactoryWithOptions(client, defaultResync)
}
// NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory.
// Listers obtained via this SharedInformerFactory will be subject to the same filters
// as specified here.
// Deprecated: Please use NewSharedInformerFactoryWithOptions instead
func NewFilteredSharedInformerFactory(client versioned.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory {
return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions))
}
// NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options.
func NewSharedInformerFactoryWithOptions(client versioned.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory {
factory := &sharedInformerFactory{
client: client,
namespace: v1.NamespaceAll,
defaultResync: defaultResync,
informers: make(map[reflect.Type]cache.SharedIndexInformer),
startedInformers: make(map[reflect.Type]bool),
customResync: make(map[reflect.Type]time.Duration),
}
// Apply all options
for _, opt := range options {
factory = opt(factory)
}
return factory
}
// Start initializes all requested informers.
func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) {
f.lock.Lock()
defer f.lock.Unlock()
for informerType, informer := range f.informers {
if !f.startedInformers[informerType] {
go informer.Run(stopCh)
f.startedInformers[informerType] = true
}
}
}
// WaitForCacheSync waits for all started informers' cache were synced.
func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool {
informers := func() map[reflect.Type]cache.SharedIndexInformer {
f.lock.Lock()
defer f.lock.Unlock()
informers := map[reflect.Type]cache.SharedIndexInformer{}
for informerType, informer := range f.informers {
if f.startedInformers[informerType] {
informers[informerType] = informer
}
}
return informers
}()
res := map[reflect.Type]bool{}
for informType, informer := range informers {
res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced)
}
return res
}
// InternalInformerFor returns the SharedIndexInformer for obj using an internal
// client.
func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer {
f.lock.Lock()
defer f.lock.Unlock()
informerType := reflect.TypeOf(obj)
informer, exists := f.informers[informerType]
if exists {
return informer
}
resyncPeriod, exists := f.customResync[informerType]
if !exists {
resyncPeriod = f.defaultResync
}
informer = newFunc(f.client, resyncPeriod)
f.informers[informerType] = informer
return informer
}
// SharedInformerFactory provides shared informers for resources in all known
// API group versions.
type SharedInformerFactory interface {
internalinterfaces.SharedInformerFactory
ForResource(resource schema.GroupVersionResource) (GenericInformer, error)
WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool
Wormhole() wormholegravitationalio.Interface
}
func (f *sharedInformerFactory) Wormhole() wormholegravitationalio.Interface {
return wormholegravitationalio.New(f, f.namespace, f.tweakListOptions)
}
================================================
FILE: pkg/client/informers/externalversions/generic.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by informer-gen. DO NOT EDIT.
package externalversions
import (
"fmt"
v1beta1 "github.com/gravitational/wormhole/pkg/apis/wormhole.gravitational.io/v1beta1"
schema "k8s.io/apimachinery/pkg/runtime/schema"
cache "k8s.io/client-go/tools/cache"
)
// GenericInformer is type of SharedIndexInformer which will locate and delegate to other
// sharedInformers based on type
type GenericInformer interface {
Informer() cache.SharedIndexInformer
Lister() cache.GenericLister
}
type genericInformer struct {
informer cache.SharedIndexInformer
resource schema.GroupResource
}
// Informer returns the SharedIndexInformer.
func (f *genericInformer) Informer() cache.SharedIndexInformer {
return f.informer
}
// Lister returns the GenericLister.
func (f *genericInformer) Lister() cache.GenericLister {
return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource)
}
// ForResource gives generic access to a shared informer of the matching type
// TODO extend this to unknown resources with a client pool
func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) {
switch resource {
// Group=wormhole.gravitational.io, Version=v1beta1
case v1beta1.SchemeGroupVersion.WithResource("wgnodes"):
return &genericInformer{resource: resource.GroupResource(), informer: f.Wormhole().V1beta1().Wgnodes().Informer()}, nil
}
return nil, fmt.Errorf("no informer found for %v", resource)
}
================================================
FILE: pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by informer-gen. DO NOT EDIT.
package internalinterfaces
import (
time "time"
versioned "github.com/gravitational/wormhole/pkg/client/clientset/versioned"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
cache "k8s.io/client-go/tools/cache"
)
// NewInformerFunc takes versioned.Interface and time.Duration to return a SharedIndexInformer.
type NewInformerFunc func(versioned.Interface, time.Duration) cache.SharedIndexInformer
// SharedInformerFactory a small interface to allow for adding an informer without an import cycle
type SharedInformerFactory interface {
Start(stopCh <-chan struct{})
InformerFor(obj runtime.Object, newFunc NewInformerFunc) cache.SharedIndexInformer
}
// TweakListOptionsFunc is a function that transforms a v1.ListOptions.
type TweakListOptionsFunc func(*v1.ListOptions)
================================================
FILE: pkg/client/informers/externalversions/wormhole.gravitational.io/interface.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by informer-gen. DO NOT EDIT.
package wormhole
import (
internalinterfaces "github.com/gravitational/wormhole/pkg/client/informers/externalversions/internalinterfaces"
v1beta1 "github.com/gravitational/wormhole/pkg/client/informers/externalversions/wormhole.gravitational.io/v1beta1"
)
// Interface provides access to each of this group's versions.
type Interface interface {
// V1beta1 provides access to shared informers for resources in V1beta1.
V1beta1() v1beta1.Interface
}
type group struct {
factory internalinterfaces.SharedInformerFactory
namespace string
tweakListOptions internalinterfaces.TweakListOptionsFunc
}
// New returns a new Interface.
func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface {
return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
}
// V1beta1 returns a new v1beta1.Interface.
func (g *group) V1beta1() v1beta1.Interface {
return v1beta1.New(g.factory, g.namespace, g.tweakListOptions)
}
================================================
FILE: pkg/client/informers/externalversions/wormhole.gravitational.io/v1beta1/interface.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by informer-gen. DO NOT EDIT.
package v1beta1
import (
internalinterfaces "github.com/gravitational/wormhole/pkg/client/informers/externalversions/internalinterfaces"
)
// Interface provides access to all the informers in this group version.
type Interface interface {
// Wgnodes returns a WgnodeInformer.
Wgnodes() WgnodeInformer
}
type version struct {
factory internalinterfaces.SharedInformerFactory
namespace string
tweakListOptions internalinterfaces.TweakListOptionsFunc
}
// New returns a new Interface.
func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface {
return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
}
// Wgnodes returns a WgnodeInformer.
func (v *version) Wgnodes() WgnodeInformer {
return &wgnodeInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
}
================================================
FILE: pkg/client/informers/externalversions/wormhole.gravitational.io/v1beta1/wgnode.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by informer-gen. DO NOT EDIT.
package v1beta1
import (
time "time"
wormholegravitationaliov1beta1 "github.com/gravitational/wormhole/pkg/apis/wormhole.gravitational.io/v1beta1"
versioned "github.com/gravitational/wormhole/pkg/client/clientset/versioned"
internalinterfaces "github.com/gravitational/wormhole/pkg/client/informers/externalversions/internalinterfaces"
v1beta1 "github.com/gravitational/wormhole/pkg/client/listers/wormhole.gravitational.io/v1beta1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
watch "k8s.io/apimachinery/pkg/watch"
cache "k8s.io/client-go/tools/cache"
)
// WgnodeInformer provides access to a shared informer and lister for
// Wgnodes.
type WgnodeInformer interface {
Informer() cache.SharedIndexInformer
Lister() v1beta1.WgnodeLister
}
type wgnodeInformer struct {
factory internalinterfaces.SharedInformerFactory
tweakListOptions internalinterfaces.TweakListOptionsFunc
namespace string
}
// NewWgnodeInformer constructs a new informer for Wgnode type.
// Always prefer using an informer factory to get a shared informer instead of getting an independent
// one. This reduces memory footprint and number of connections to the server.
func NewWgnodeInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
return NewFilteredWgnodeInformer(client, namespace, resyncPeriod, indexers, nil)
}
// NewFilteredWgnodeInformer constructs a new informer for Wgnode type.
// Always prefer using an informer factory to get a shared informer instead of getting an independent
// one. This reduces memory footprint and number of connections to the server.
func NewFilteredWgnodeInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
return cache.NewSharedIndexInformer(
&cache.ListWatch{
ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
if tweakListOptions != nil {
tweakListOptions(&options)
}
return client.WormholeV1beta1().Wgnodes(namespace).List(options)
},
WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
if tweakListOptions != nil {
tweakListOptions(&options)
}
return client.WormholeV1beta1().Wgnodes(namespace).Watch(options)
},
},
&wormholegravitationaliov1beta1.Wgnode{},
resyncPeriod,
indexers,
)
}
func (f *wgnodeInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
return NewFilteredWgnodeInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
}
func (f *wgnodeInformer) Informer() cache.SharedIndexInformer {
return f.factory.InformerFor(&wormholegravitationaliov1beta1.Wgnode{}, f.defaultInformer)
}
func (f *wgnodeInformer) Lister() v1beta1.WgnodeLister {
return v1beta1.NewWgnodeLister(f.Informer().GetIndexer())
}
================================================
FILE: pkg/client/listers/wormhole.gravitational.io/v1beta1/expansion_generated.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by lister-gen. DO NOT EDIT.
package v1beta1
// WgnodeListerExpansion allows custom methods to be added to
// WgnodeLister.
type WgnodeListerExpansion interface{}
// WgnodeNamespaceListerExpansion allows custom methods to be added to
// WgnodeNamespaceLister.
type WgnodeNamespaceListerExpansion interface{}
================================================
FILE: pkg/client/listers/wormhole.gravitational.io/v1beta1/wgnode.go
================================================
/*
Copyright 2019 Gravitational, 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.
*/
// Code generated by lister-gen. DO NOT EDIT.
package v1beta1
import (
v1beta1 "github.com/gravitational/wormhole/pkg/apis/wormhole.gravitational.io/v1beta1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/client-go/tools/cache"
)
// WgnodeLister helps list Wgnodes.
type WgnodeLister interface {
// List lists all Wgnodes in the indexer.
List(selector labels.Selector) (ret []*v1beta1.Wgnode, err error)
// Wgnodes returns an object that can list and get Wgnodes.
Wgnodes(namespace string) WgnodeNamespaceLister
WgnodeListerExpansion
}
// wgnodeLister implements the WgnodeLister interface.
type wgnodeLister struct {
indexer cache.Indexer
}
// NewWgnodeLister returns a new WgnodeLister.
func NewWgnodeLister(indexer cache.Indexer) WgnodeLister {
return &wgnodeLister{indexer: indexer}
}
// List lists all Wgnodes in the indexer.
func (s *wgnodeLister) List(selector labels.Selector) (ret []*v1beta1.Wgnode, err error) {
err = cache.ListAll(s.indexer, selector, func(m interface{}) {
ret = append(ret, m.(*v1beta1.Wgnode))
})
return ret, err
}
// Wgnodes returns an object that can list and get Wgnodes.
func (s *wgnodeLister) Wgnodes(namespace string) WgnodeNamespaceLister {
return wgnodeNamespaceLister{indexer: s.indexer, namespace: namespace}
}
// WgnodeNamespaceLister helps list and get Wgnodes.
type WgnodeNamespaceLister interface {
// List lists all Wgnodes in the indexer for a given namespace.
List(selector labels.Selector) (ret []*v1beta1.Wgnode, err error)
// Get retrieves the Wgnode from the indexer for a given namespace and name.
Get(name string) (*v1beta1.Wgnode, error)
WgnodeNamespaceListerExpansion
}
// wgnodeNamespaceLister implements the WgnodeNamespaceLister
// interface.
type wgnodeNamespaceLister struct {
indexer cache.Indexer
namespace string
}
// List lists all Wgnodes in the indexer for a given namespace.
func (s wgnodeNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.Wgnode, err error) {
err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) {
ret = append(ret, m.(*v1beta1.Wgnode))
})
return ret, err
}
// Get retrieves the Wgnode from the indexer for a given namespace and name.
func (s wgnodeNamespaceLister) Get(name string) (*v1beta1.Wgnode, error) {
obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name)
if err != nil {
return nil, err
}
if !exists {
return nil, errors.NewNotFound(v1beta1.Resource("wgnode"), name)
}
return obj.(*v1beta1.Wgnode), nil
}
================================================
FILE: pkg/controller/cni.go
================================================
/*
Copyright 2018 Gravitational, 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 controller
import (
"encoding/json"
"io/ioutil"
"os"
"path/filepath"
"github.com/gravitational/trace"
)
func (d *controller) configureCNI() error {
conf := map[string]interface{}{
"cniVersion": "0.3.1",
"name": "wormhole",
"plugins": []map[string]interface{}{
{
"type": "bridge",
"bridge": d.config.BridgeIface,
"isGateway": true,
"isDefaultGateway": true,
"forceAddress": false,
"ipMasq": false,
"hairpinMode": true,
"mtu": d.config.BridgeMTU,
"ipam": map[string]interface{}{
"type": "host-local",
"ranges": [][]map[string]string{
{
{
"subnet": d.config.NodeCIDR,
"rangeStart": d.ipamInfo.podAddrStart,
"rangeEnd": d.ipamInfo.podAddrEnd,
},
},
},
},
},
{
"type": "portmap",
"capabilities": map[string]interface{}{
"portMappings": true,
},
},
},
}
jsonConf, err := json.MarshalIndent(conf, "", " ")
if err != nil {
return trace.Wrap(err)
}
path := "/etc/cni/net.d/wormhole.conflist"
if runningInPod() {
path = filepath.Join("/host", path)
}
err = os.MkdirAll(filepath.Dir(path), 0755)
if err != nil && !trace.IsAlreadyExists(err) {
return trace.Wrap(err).AddField("dir", filepath.Dir(path))
}
// Workaround for if the system has the directory as owned by the wrong user (it should be root)
err = os.Chown(filepath.Dir(path), 0, 0)
if err != nil {
return trace.Wrap(err).AddField("dir", filepath.Dir(path))
}
err = os.Chown(path, 0, 0)
if err != nil && !trace.IsNotFound(err) {
return trace.Wrap(err).AddField("path", path)
}
err = ioutil.WriteFile(path, jsonConf, 0644)
if err != nil {
return trace.Wrap(err)
}
d.Info("Generated CNI Configuration: ", string(jsonConf))
return nil
}
================================================
FILE: pkg/controller/controller.go
================================================
/*
Copyright 2018 Gravitational, 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 controller
import (
"context"
"net"
"time"
wormholeclientset "github.com/gravitational/wormhole/pkg/client/clientset/versioned"
wormholelister "github.com/gravitational/wormhole/pkg/client/listers/wormhole.gravitational.io/v1beta1"
"github.com/gravitational/wormhole/pkg/iptables"
"github.com/gravitational/wormhole/pkg/wireguard"
"github.com/gravitational/trace"
"github.com/sirupsen/logrus"
"k8s.io/client-go/kubernetes"
listers "k8s.io/client-go/listers/core/v1"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/tools/clientcmd"
)
type Config struct {
// NodeName is the name of the k8s node this instance is running on
NodeName string
// Namespace is the kubernetes namespace to use for syncing wormhole objects
Namespace string
// OverlayCIDR is the IP network in CIDR format for the entire overlay network
OverlayCIDR string
// NodeCIDR is the IP network in CIDR format assigned to this node
NodeCIDR string
// ListenPort is the external port wireguard should listen on between hosts
ListenPort int
// WireguardIface is the name of the wireguard interface for encrypted node to node traffic
WireguardIface string
// BridgeIface is the name of the linux bridge to create internal to the host
BridgeIface string
// Kubeconfig path is the path to a kubeconfig file to access the kubernetes API
KubeconfigPath string
// SyncInterval is how frequently to re-sync state between each component
SyncInterval time.Duration
// Endpoint is the networking address that is available for routing between all wireguard nodes
// In general this should be the same as the AdvertiseIP Address of the node
Endpoint string
// BridgeMTU is the MTU value to assign to the internal linux bridge
BridgeMTU int
}
type Controller interface {
Run(context.Context) error
}
type controller struct {
logrus.FieldLogger
config Config
// client is a kubernetes client for accessing wormhole data
client kubernetes.Interface
crdClient wormholeclientset.Interface
// ipamInfo is IPAM info about the node
ipamInfo *ipamInfo
//overlayCidr is the IP network for the entire overlay network
overlayCIDR net.IPNet
// wireguardInterface is a controller for managing / updating our wireguard interface
wireguardInterface wireguard.Interface
nodeController cache.Controller
nodeLister wormholelister.WgnodeLister
secretController cache.Controller
secretLister listers.SecretLister
resyncC chan interface{}
}
func New(config Config, logger logrus.FieldLogger) (Controller, error) {
controller := &controller{
FieldLogger: logger,
config: config,
resyncC: make(chan interface{}, 1),
}
return controller, trace.Wrap(controller.init())
}
func (d *controller) init() error {
d.Info("Initializing Wormhole...")
if d.config.BridgeMTU < 68 || d.config.BridgeMTU > 65535 {
return trace.BadParameter("Bridge MTU value out of range. %v must be within 68-65535", d.config.BridgeMTU)
}
if d.config.BridgeMTU < 1280 {
d.WithField("mtu", d.config.BridgeMTU).
Warn("Bridge MTU is small, you may experience performance issues. 1280 or more is recommended")
}
var err error
var config *rest.Config
if d.config.KubeconfigPath != "" {
config, err = clientcmd.BuildConfigFromFlags("", d.config.KubeconfigPath)
if err != nil {
return trace.Wrap(err)
}
} else {
config, err = rest.InClusterConfig()
if err != nil {
return trace.Wrap(err)
}
}
d.client, err = kubernetes.NewForConfig(config)
if err != nil {
return trace.Wrap(err)
}
d.crdClient, err = wormholeclientset.NewForConfig(config)
if err != nil {
return trace.Wrap(err)
}
if d.config.NodeName == "" {
d.Info("Attempting to detect Node Name.")
err = d.detectNodeName()
if err != nil {
return trace.Wrap(err)
}
}
if d.config.OverlayCIDR == "" {
d.Info("Attempting to detect overlay network address range.")
err = d.detectOverlayCIDR()
if err != nil {
return trace.Wrap(err)
}
}
_, overlayNetwork, err := net.ParseCIDR(d.config.OverlayCIDR)
if err != nil {
return trace.Wrap(err)
}
d.overlayCIDR = *overlayNetwork
if d.config.NodeCIDR == "" {
d.Info("Attempting to detect node network address range")
err = d.detectIPAM()
if err != nil {
return trace.Wrap(err)
}
}
d.Info("Calculating IPAM Offsets.")
err = d.calculateIPAMOffsets()
if err != nil {
return trace.Wrap(err)
}
if d.config.SyncInterval == 0 {
d.config.SyncInterval = 60 * time.Second
}
d.Info("Initialization complete.")
return nil
}
func (d *controller) Run(ctx context.Context) error {
d.Info("Running wormhole controller.")
d.Info(" Node Name: ", d.config.NodeName)
d.Info(" Port: ", d.config.ListenPort)
d.Info(" Overlay Network: ", d.config.OverlayCIDR)
d.Info(" Node Network: ", d.config.NodeCIDR)
d.Info(" Wireguard Interface Name: ", d.config.WireguardIface)
d.Info(" Wireguard Interface Address: ", d.ipamInfo.wireguardAddr)
d.Info(" Bridge Interface Name: ", d.config.BridgeIface)
d.Info(" Bridge Interface Address: ", d.ipamInfo.bridgeAddr)
d.Info(" Bridge MTU: ", d.config.BridgeMTU)
d.Info(" Pod Address Start: ", d.ipamInfo.podAddrStart)
d.Info(" Pod Address End: ", d.ipamInfo.podAddrEnd)
d.Info(" Kubeconfig Path: ", d.config.KubeconfigPath)
d.Info(" Resync Period: ", d.config.SyncInterval)
iptablesSync := iptables.Config{
FieldLogger: d.FieldLogger.WithField("module", "iptables"),
OverlayCIDR: d.config.OverlayCIDR,
PodCIDR: d.config.NodeCIDR,
WireguardIface: d.config.WireguardIface,
BridgeIface: d.config.BridgeIface,
SyncInterval: d.config.SyncInterval,
}
err := iptablesSync.Run(ctx)
if err != nil {
return trace.Wrap(err)
}
d.wireguardInterface, err = wireguard.New(wireguard.Config{
InterfaceName: d.config.WireguardIface,
IP: d.ipamInfo.wireguardAddr,
ListenPort: d.config.ListenPort,
OverlayNetworks: []net.IPNet{
d.overlayCIDR,
},
}, d.FieldLogger)
if err != nil {
return trace.Wrap(err)
}
err = d.configureCNI()
if err != nil {
return trace.Wrap(err)
}
err = d.publishNodeInfo()
if err != nil {
return trace.Wrap(err)
}
err = d.initKubeObjects()
if err != nil {
return trace.Wrap(err)
}
d.startNodeWatcher(ctx)
d.startSecretWatcher(ctx)
d.startNodeDeletionWatcher(ctx)
err = d.waitForControllerSync(ctx)
if err != nil {
return trace.Wrap(err)
}
err = d.updatePeerSecrets(true)
if err != nil {
return trace.Wrap(err)
}
d.Info("Wormhole is running")
return trace.Wrap(d.run(ctx))
}
func (d *controller) run(ctx context.Context) error {
syncTimer := time.NewTicker(d.config.SyncInterval)
defer syncTimer.Stop()
for {
select {
case <-ctx.Done():
return trace.Wrap(ctx.Err())
case <-d.resyncC:
err := d.resync()
if err != nil {
return trace.Wrap(err)
}
case <-syncTimer.C:
err := d.resync()
if err != nil {
return trace.Wrap(err)
}
}
}
}
================================================
FILE: pkg/controller/ipam.go
================================================
/*
Copyright 2018 Gravitational, 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 controller
import (
"net"
"github.com/gravitational/trace"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
type ipamInfo struct {
bridgeAddr string
wireguardAddr string
podAddrStart string
podAddrEnd string
}
func (d *controller) detectIPAM() error {
d.Debug("Attempting to retrieve IPAM info from k8s IPAM.")
node, err := d.client.CoreV1().Nodes().Get(d.config.NodeName, metav1.GetOptions{})
if err != nil {
return trace.Wrap(err)
}
if node.Spec.PodCIDR == "" {
return trace.BadParameter("node/%v node.spec.podCidr is missing", d.config.NodeName)
}
_, _, err = net.ParseCIDR(node.Spec.PodCIDR)
if err != nil {
return trace.Wrap(err)
}
d.config.NodeCIDR = node.Spec.PodCIDR
if d.config.Endpoint == "" {
var (
internalIP net.IP
externalIP net.IP
)
for _, addr := range node.Status.Addresses {
// try and parse addr as an IPv4 address
ip := net.ParseIP(addr.Address)
if ip == nil || ip.To4() == nil {
continue
}
switch addr.Type {
case "InternalIP":
internalIP = ip
case "ExternalIP":
externalIP = ip
}
}
if externalIP != nil {
d.config.Endpoint = externalIP.String()
}
// internalIP takes precedence since we're connecting internally
if internalIP != nil {
d.config.Endpoint = internalIP.String()
}
}
return nil
}
func (d *controller) calculateIPAMOffsets() error {
cidr := d.config.NodeCIDR
_, ipv4Net, err := net.ParseCIDR(cidr)
if err != nil {
return trace.Wrap(err)
}
// only ipv4 is currently supported
if ipv4Net.IP.To4() == nil {
return trace.BadParameter("%v is not an ipv4 subnet", cidr)
}
// expect assigned mask to be <= 24 bits
bits, _ := ipv4Net.Mask.Size()
if bits > 24 {
return trace.BadParameter("podCIDR needs to be at least 24 bits. %v is only %v bits.", cidr, bits)
}
// .1 for bridge address
bridgeAddr := net.IP(append([]byte(nil), ipv4Net.IP.To4()...))
bridgeAddr[3]++
// .2/32 for wireguard interface
wireguardAddr := net.IPNet{
IP: net.IP(append([]byte(nil), ipv4Net.IP.To4()...)),
Mask: []byte{255, 255, 255, 255}, // /32
}
wireguardAddr.IP[3] += 2
// .10 for pod IP range start
rangeStart := net.IP(append([]byte(nil), ipv4Net.IP.To4()...))
rangeStart[3] += 10
// .210 for pod IP range end
rangeEnd := net.IP(append([]byte(nil), ipv4Net.IP.To4()...))
rangeEnd[3] += 210
d.ipamInfo = &ipamInfo{
bridgeAddr: bridgeAddr.String(),
wireguardAddr: wireguardAddr.String(),
podAddrStart: rangeStart.String(),
podAddrEnd: rangeEnd.String(),
}
return nil
}
================================================
FILE: pkg/controller/ipam_test.go
================================================
/*
Copyright 2019 Gravitational, 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 controller
import (
"testing"
"github.com/sirupsen/logrus"
"github.com/stretchr/testify/assert"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
testclient "k8s.io/client-go/kubernetes/fake"
)
func TestDetectIPAM(t *testing.T) {
cases := []struct {
description string
node *v1.Node
expected string
expectErr bool
}{
{
description: "pod cidr set",
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "test-node",
},
Spec: v1.NodeSpec{
PodCIDR: "10.20.1.0/24",
},
Status: v1.NodeStatus{
Addresses: []v1.NodeAddress{
{
Type: "InternalIP",
Address: "10.0.0.1",
},
},
},
},
expected: "10.20.1.0/24",
},
{
description: "pod cidr malformed",
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "test-node",
},
Spec: v1.NodeSpec{
PodCIDR: "10.20.1.",
},
},
expectErr: true,
},
{
description: "pod cidr missing",
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "test-node",
},
},
expectErr: true,
},
}
for _, c := range cases {
cont := &controller{
FieldLogger: logrus.WithField("logger", "test"),
client: testclient.NewSimpleClientset(c.node),
config: Config{
NodeName: c.node.Name,
},
}
err := cont.detectIPAM()
if c.expectErr {
assert.Error(t, err, c.description)
} else {
assert.NoError(t, err, c.description)
assert.Equal(t, c.expected, cont.config.NodeCIDR, c.description)
}
}
}
func TestDetectIPAMNodeAddress(t *testing.T) {
cases := []struct {
node *v1.Node
expected string
}{
{
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "test-node",
},
Spec: v1.NodeSpec{
PodCIDR: "10.20.1.0/24",
},
Status: v1.NodeStatus{
Addresses: []v1.NodeAddress{
{
Type: "InternalIP",
Address: "10.0.0.1",
},
},
},
},
expected: "10.0.0.1",
},
{
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "test-node",
},
Spec: v1.NodeSpec{
PodCIDR: "10.20.1.0/24",
},
Status: v1.NodeStatus{
Addresses: []v1.NodeAddress{
{
Type: "ExternalIP",
Address: "10.0.0.2",
},
},
},
},
expected: "10.0.0.2",
},
{
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "test-node",
},
Spec: v1.NodeSpec{
PodCIDR: "10.20.1.0/24",
},
Status: v1.NodeStatus{
Addresses: []v1.NodeAddress{
{
Type: "InternalIP",
Address: "10.0.0.3",
},
{
Type: "ExternalIP",
Address: "10.0.0.4",
},
},
},
},
expected: "10.0.0.3",
},
{
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "test-node",
},
Spec: v1.NodeSpec{
PodCIDR: "10.20.1.0/24",
},
Status: v1.NodeStatus{
Addresses: []v1.NodeAddress{
{
Type: "InternalIP",
Address: "::1",
},
{
Type: "ExternalIP",
Address: "::2",
},
{
Type: "InternalIP",
Address: "10.0.0.5",
},
{
Type: "ExternalIP",
Address: "10.0.0.6",
},
},
},
},
expected: "10.0.0.5",
},
{
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "test-node",
},
Spec: v1.NodeSpec{
PodCIDR: "10.20.1.0/24",
},
Status: v1.NodeStatus{
Addresses: []v1.NodeAddress{},
},
},
expected: "",
},
}
for _, c := range cases {
cont := &controller{
FieldLogger: logrus.WithField("logger", "test"),
client: testclient.NewSimpleClientset(c.node),
config: Config{
NodeName: c.node.Name,
},
}
err := cont.detectIPAM()
assert.NoError(t, err, c.expected)
assert.Equal(t, c.expected, cont.config.Endpoint, c.expected)
}
}
func TestIPAMOffsets(t *testing.T) {
cases := []struct {
in string
expected *ipamInfo
expectErr bool
}{
{
in: "10.20.0.0/24",
expected: &ipamInfo{
bridgeAddr: "10.20.0.1",
wireguardAddr: "10.20.0.2/32",
podAddrStart: "10.20.0.10",
podAddrEnd: "10.20.0.210",
},
},
{
in: "10.20.0",
expectErr: true,
},
{
in: "10.20.0.0/25",
expectErr: true,
},
{
in: "::1/64",
expectErr: true,
},
}
for _, c := range cases {
cont := &controller{
FieldLogger: logrus.WithField("logger", "test"),
config: Config{
NodeCIDR: c.in,
},
}
err := cont.calculateIPAMOffsets()
if c.expectErr {
assert.Error(t, err, c.in)
} else {
assert.NoError(t, err, c.in)
assert.Equal(t, c.expected, cont.ipamInfo, c.in)
}
}
}
/*
func TestLoadIPAM(t *testing.T) {
cases := []struct {
node *v1.Node
description string
expected *ipamInfo
}{
{
description: "test",
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "test-node",
},
Spec: v1.NodeSpec{
PodCIDR: "10.20.1.0/24",
},
},
expected: &ipamInfo{
bridgeAddr: "10.20.1.1",
wireguardAddr: "10.20.1.2/32",
podAddrStart: "10.20.1.10",
podAddrEnd: "10.20.1.210",
},
},
}
for _, c := range cases {
cont := &controller{
FieldLogger: logrus.WithField("logger", "test"),
client: testclient.NewSimpleClientset(c.node),
config: Config{
NodeName: c.node.Name,
},
}
ipam, err := cont.loadIPAM()
assert.NoError(t, err, c.description)
assert.Equal(t, c.expected, ipam, c.description)
}
}
func TestLoadIPAMError(t *testing.T) {
cases := []struct {
node *v1.Node
nodeName string
description string
}{
{
description: "empty pod cidr",
nodeName: "test-node",
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "test-node",
},
},
},
{
description: "missing bad node name",
nodeName: "test-missing-...",
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "test-node",
},
},
},
{
description: "bad cidr",
nodeName: "test-node",
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "test-node",
},
Spec: v1.NodeSpec{
PodCIDR: "10.20.1.0/24343",
},
},
},
{
description: "ipv6",
nodeName: "test-node",
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "test-node",
},
Spec: v1.NodeSpec{
PodCIDR: "::1/64",
},
},
},
{
description: "small subnet",
nodeName: "test-node",
node: &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Name: "test-node",
},
Spec: v1.NodeSpec{
PodCIDR: "10.20.1.0/25",
},
},
},
}
for _, c := range cases {
cont := &controller{
FieldLogger: logrus.WithField("logger", "test"),
client: testclient.NewSimpleClientset(c.node),
config: Config{
NodeName: c.node.Name,
},
}
_, err := cont.loadIPAM()
assert.Error(t, err, c.description)
}
}
*/
================================================
FILE: pkg/controller/kubernetes.go
================================================
/*
Copyright 2018 Gravitational, 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 controller
import (
"context"
"fmt"
"math/rand"
"strings"
"time"
"github.com/davecgh/go-spew/spew"
"github.com/sirupsen/logrus"
"github.com/gravitational/trace"
"github.com/gravitational/wormhole/pkg/apis/wormhole.gravitational.io/v1beta1"
wormholelister "github.com/gravitational/wormhole/pkg/client/listers/wormhole.gravitational.io/v1beta1"
"github.com/gravitational/wormhole/pkg/wireguard"
"github.com/cenkalti/backoff"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/watch"
listers "k8s.io/client-go/listers/core/v1"
"k8s.io/client-go/tools/cache"
)
const (
secretObjectName = "wireguard-shared-secrets"
)
// initKubeObjects runs during startup and is meant to try and create empty kubernetes objects that wormhole uses to
// exchange state via the kubernetes API.
// This just tries to create the object, and ignores already exists errors.
func (c *controller) initKubeObjects() error {
c.Debugf("Initializing secret %v/%v", c.config.Namespace, secretObjectName)
_, err := c.client.CoreV1().Secrets(c.config.Namespace).Create(&v1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: secretObjectName,
},
})
if errors.IsAlreadyExists(err) {
return nil
}
return trace.Wrap(err)
}
// publishNodeInfo publishes the node configuration to the kubernetes API for the rest of the cluster to pick up
func (c *controller) publishNodeInfo() error {
node := &v1beta1.Wgnode{
ObjectMeta: metav1.ObjectMeta{
Name: c.config.NodeName,
},
Status: v1beta1.WgnodeStatus{
Port: c.config.ListenPort,
PublicKey: c.wireguardInterface.PublicKey(),
NodeCIDR: c.config.NodeCIDR,
Endpoint: c.config.Endpoint,
},
}
c.Debug("Publishing Node Information to kubernetes: ", spew.Sdump(node))
_, err := c.crdClient.WormholeV1beta1().Wgnodes(c.config.Namespace).Create(node)
if err == nil {
return nil
}
if errors.IsAlreadyExists(err) {
node, err = c.crdClient.WormholeV1beta1().Wgnodes(c.config.Namespace).Get(c.config.NodeName, metav1.GetOptions{})
if err != nil {
return trace.Wrap(err)
}
node.Status.Port = c.config.ListenPort
node.Status.PublicKey = c.wireguardInterface.PublicKey()
node.Status.NodeCIDR = c.config.NodeCIDR
node.Status.Endpoint = c.config.Endpoint
_, err = c.crdClient.WormholeV1beta1().Wgnodes(c.config.Namespace).Update(node)
}
return trace.Wrap(err)
}
func (c *controller) startNodeWatcher(ctx context.Context) {
indexer, controller := cache.NewIndexerInformer(
&cache.ListWatch{
ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
return c.crdClient.WormholeV1beta1().Wgnodes(c.config.Namespace).List(options)
},
WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
return c.crdClient.WormholeV1beta1().Wgnodes(c.config.Namespace).Watch(options)
},
}, &v1beta1.Wgnode{},
0,
c.handlerFuncs(),
cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc},
)
c.nodeController = controller
c.nodeLister = wormholelister.NewWgnodeLister(indexer)
go c.runNodeWatcher(ctx)
}
func (c *controller) runNodeWatcher(ctx context.Context) {
stopCh := make(chan struct{})
defer close(stopCh)
go c.nodeController.Run(stopCh)
<-ctx.Done()
}
func (c *controller) handlerFuncs() cache.ResourceEventHandlerFuncs {
return cache.ResourceEventHandlerFuncs{
AddFunc: c.handleAdded,
UpdateFunc: c.handleUpdated,
DeleteFunc: c.handleAdded,
}
}
func (c *controller) handleAdded(obj interface{}) {
select {
case c.resyncC <- nil:
// trigger resync
default:
// don't block
}
}
func (c *controller) handleUpdated(oldObj interface{}, newObj interface{}) {
select {
case c.resyncC <- nil:
// trigger resync
default:
// don't block
}
}
func (c *controller) startSecretWatcher(ctx context.Context) {
indexer, controller := cache.NewIndexerInformer(
&cache.ListWatch{
ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
return c.client.CoreV1().Secrets(c.config.Namespace).List(options)
},
WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
return c.client.CoreV1().Secrets(c.config.Namespace).Watch(options)
},
}, &v1.Secret{},
0,
c.handlerFuncs(),
cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc},
)
c.secretController = controller
c.secretLister = listers.NewSecretLister(indexer)
go c.runSecretWatcher(ctx)
}
func (c *controller) runSecretWatcher(ctx context.Context) {
stopCh := make(chan struct{})
defer close(stopCh)
go c.secretController.Run(stopCh)
<-ctx.Done()
}
func (c *controller) waitForControllerSync(ctx context.Context) error {
ticker := time.NewTicker(5 * time.Millisecond)
defer ticker.Stop()
for {
select {
case <-ticker.C:
if c.nodeController.HasSynced() && c.secretController.HasSynced() {
return nil
}
case <-ctx.Done():
return ctx.Err()
}
}
}
func (c *controller) resync() error {
c.Debug("Re-sync triggered")
err := backoff.Retry(func() error {
err := c.syncWithWireguard()
return trace.Wrap(err)
}, &backoff.ExponentialBackOff{
InitialInterval: 500 * time.Millisecond,
MaxInterval: 5 * time.Second,
RandomizationFactor: 0.5,
Multiplier: 2,
MaxElapsedTime: 10 * time.Second,
Clock: backoff.SystemClock,
})
if err != nil {
return trace.Wrap(err)
}
err = backoff.Retry(func() error {
err := c.updatePeerSecrets(false)
return trace.Wrap(err)
}, &backoff.ExponentialBackOff{
InitialInterval: 500 * time.Millisecond,
MaxInterval: 5 * time.Second,
RandomizationFactor: 0.5,
Multiplier: 2,
MaxElapsedTime: 10 * time.Second,
Clock: backoff.SystemClock,
})
return trace.Wrap(err)
}
func (c *controller) syncWithWireguard() error {
c.Debug("Re-syncing wireguard configuration")
defer c.Debug("Re-sync wireguard complete")
nodes, err := c.nodeLister.List(labels.NewSelector())
if err != nil {
return trace.Wrap(err)
}
c.Debugf("Get secret %v/%v", c.config.Namespace, secretObjectName)
sharedSecrets, err := c.secretLister.Secrets(c.config.Namespace).Get(secretObjectName)
if err != nil {
return trace.Wrap(err)
}
peers := make(map[string]wireguard.Peer, len(nodes))
for _, node := range nodes {
// we don't connect to ourselves
if node.Name == c.config.NodeName {
continue
}
ss, ok := sharedSecrets.Data[nodePairKey(c.config.NodeName, node.Name)]
if !ok {
// Skip if a shared secret doesn't currently exist for this peer
// it will get created later
continue
}
endpoint := fmt.Sprintf("%v:%v", node.Status.Endpoint, node.Status.Port)
peers[node.Status.PublicKey] = wireguard.Peer{
PublicKey: node.Status.PublicKey,
SharedKey: string(ss),
AllowedIP: []string{node.Status.NodeCIDR},
Endpoint: endpoint,
}
c.WithFields(logrus.Fields{
"public_key": node.Status.PublicKey,
"allowed_ip": node.Status.NodeCIDR,
"endpoint": endpoint,
}).Info("peer entry")
}
c.Debug("Sync with wireguard interface: ", spew.Sdump(peers))
return trace.Wrap(c.wireguardInterface.SyncPeers(peers))
}
func nodePairKey(node1, node2 string) string {
if strings.Compare(node1, node2) < 0 {
return fmt.Sprintf("shared-secret-%v-%v", node1, node2)
}
return fmt.Sprintf("shared-secret-%v-%v", node2, node1)
}
// updatePeerSecrets generates new shared secrets for each peer
// overwrite - indicates whether to replace each shared key with a new one (used during startup to rotate each secret)
func (c *controller) updatePeerSecrets(overwrite bool) error {
c.WithField("overwrite", overwrite).Debug("Updating peer shared secrets")
nodes, err := c.nodeLister.List(labels.NewSelector())
if err != nil {
return trace.Wrap(err)
}
secretObject, err := c.secretLister.Secrets(c.config.Namespace).Get(secretObjectName)
if err != nil {
return trace.Wrap(err)
}
for _, node := range nodes {
if node.Name == c.config.NodeName {
continue
}
if secretObject.Data == nil {
secretObject.Data = make(map[string][]byte)
}
// Only overwrite the secret if it doesn't already exist
if _, ok := secretObject.Data[nodePairKey(c.config.NodeName, node.Name)]; !overwrite && ok {
continue
}
psk, err := c.wireguardInterface.GenerateSharedKey()
if err != nil {
return trace.Wrap(err)
}
secretObject.Data[nodePairKey(c.config.NodeName, node.Name)] = []byte(psk)
}
// the peer secrets are based on last writer wins, so we ignore the object here
// and it will be processed when our watchers get the updated object
_, err = c.client.CoreV1().Secrets(c.config.Namespace).Update(secretObject)
return trace.Wrap(err)
}
// startNodeDeletionWatcher checks for the deletion of the underlying node object from kubernetes, and if a node is
// missing it removes the matching wgnode object.
func (c *controller) startNodeDeletionWatcher(ctx context.Context) {
go func() {
for {
nodes, err := c.client.CoreV1().Nodes().List(metav1.ListOptions{})
if err != nil {
c.WithError(err).Warn("Failed to list kubernetes node objects.")
continue
}
sleepDuration := calculateNextNodeSleepInterval(len(nodes.Items))
select {
case <-ctx.Done():
return
case <-time.After(sleepDuration):
err = c.checkNodeDeletion()
if err != nil {
c.Info("Error checking for node deletion: ", trace.DebugReport(err))
}
}
}
}()
}
func (c *controller) checkNodeDeletion() error {
nodes, err := c.client.CoreV1().Nodes().List(metav1.ListOptions{})
if err != nil {
return trace.Wrap(err, "failed to list kubernetes node objects.")
}
wgnodes, err := c.nodeLister.List(labels.NewSelector())
if err != nil {
return trace.Wrap(err, "failed to list wgnode objects")
}
m := make(map[string]bool)
for _, node := range nodes.Items {
m[node.Name] = true
}
for _, wgn := range wgnodes {
if _, ok := m[wgn.Name]; !ok {
c.WithField("name", wgn.Name).Info("Deleting wgnode object that doesn't have matching kubernetes node")
err = c.crdClient.WormholeV1beta1().Wgnodes(c.config.Namespace).Delete(wgn.Name, &metav1.DeleteOptions{})
if err != nil {
c.WithError(err).Warn("Failed to delete wgnode object that doesn't have matching kubernetes node")
}
}
}
return nil
}
const nodeSleepInterval = 1 * time.Minute
// calculateNextNodeSleepInterval calculates a sleep interval that's relative to the size of the cluster
// which should average around 1 check per nodeSleepInterval across each node participating
// with a nodeSleepInterval of 60s
// 1 node - 15s to 105s avg 60s
// 2 node - 30s to 210s avg 120s
// 3 node - 45s to 315s avg 180s
// 4 node - 60s to 420s avg 240s
func calculateNextNodeSleepInterval(nodeCount int) time.Duration {
// each node runs the controller, so depending on the size of the cluster, slow down each individual node
currentInterval := nodeSleepInterval * time.Duration(nodeCount)
var delta = 0.75 * float64(currentInterval)
var minInterval = float64(currentInterval) - delta
var maxInterval = float64(currentInterval) + delta
// Get a random value from the range [minInterval, maxInterval].
// The formula used below has a +1 because if the minInterval is 1 and the maxInterval is 3 then
// we want a 33% chance for selecting either 1, 2 or 3.
return time.Duration(minInterval + (rand.Float64() * (maxInterval - minInterval + 1)))
}
================================================
FILE: pkg/controller/kubernetes_test.go
================================================
/*
Copyright 2019 Gravitational, 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 controller
import (
"context"
"sync"
"testing"
"time"
"github.com/gravitational/wormhole/pkg/apis/wormhole.gravitational.io/v1beta1"
wormholeclientset "github.com/gravitational/wormhole/pkg/client/clientset/versioned/fake"
"github.com/gravitational/wormhole/pkg/wireguard"
"github.com/sirupsen/logrus"
"github.com/stretchr/testify/assert"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
testclient "k8s.io/client-go/kubernetes/fake"
)
func TestPublishNodeInfo(t *testing.T) {
cases := []struct {
publicKey string
nodeName string
port int
}{
{
publicKey: "public-1",
nodeName: "node-1",
port: 1000,
},
}
for _, c := range cases {
cont := &controller{
FieldLogger: logrus.WithField("logger", "test"),
crdClient: wormholeclientset.NewSimpleClientset(),
config: Config{
NodeName: c.nodeName,
Namespace: "test",
ListenPort: c.port,
},
wireguardInterface: &mockWireguardInterface{
publicKey: c.publicKey,
},
}
// publish the node multiple times
err := cont.publishNodeInfo()
assert.NoError(t, err, c.nodeName)
err = cont.publishNodeInfo()
assert.NoError(t, err, c.nodeName)
err = cont.publishNodeInfo()
assert.NoError(t, err, c.nodeName)
crd, err := cont.crdClient.WormholeV1beta1().Wgnodes("test").Get(c.nodeName, metav1.GetOptions{})
assert.NoError(t, err, c.nodeName)
assert.Equal(t, v1beta1.WgnodeStatus{
Port: c.port,
PublicKey: c.publicKey,
}, crd.Status, c.nodeName)
}
}
func TestIntegratePeers(t *testing.T) {
cases := []struct {
add []wireguard.Peer
del []wireguard.Peer
expected map[string]wireguard.Peer
}{
{
add: []wireguard.Peer{
{
PublicKey: "public1",
SharedKey: "shared1",
AllowedIP: []string{"10.240.1.0/24"},
Endpoint: "10.0.0.1",
},
},
expected: map[string]wireguard.Peer{
"public1": {
PublicKey: "public1",
SharedKey: "shared1",
AllowedIP: []string{"10.240.1.0/24"},
Endpoint: "10.0.0.1:1000",
},
},
},
{
add: []wireguard.Peer{
{
PublicKey: "public2",
SharedKey: "shared2",
AllowedIP: []string{"10.240.2.0/24"},
Endpoint: "10.0.0.2",
},
},
expected: map[string]wireguard.Peer{
"public1": {
PublicKey: "public1",
SharedKey: "shared1",
AllowedIP: []string{"10.240.1.0/24"},
Endpoint: "10.0.0.1:1000",
},
"public2": {
PublicKey: "public2",
SharedKey: "shared2",
AllowedIP: []string{"10.240.2.0/24"},
Endpoint: "10.0.0.2:1000",
},
},
},
{
del: []wireguard.Peer{
{
PublicKey: "public2",
},
},
expected: map[string]wireguard.Peer{
"public1": {
PublicKey: "public1",
SharedKey: "shared1",
AllowedIP: []string{"10.240.1.0/24"},
Endpoint: "10.0.0.1:1000",
},
},
},
}
wgi := mockWireguardInterface{}
cont := &controller{
FieldLogger: logrus.WithField("logger", "test"),
client: testclient.NewSimpleClientset(),
crdClient: wormholeclientset.NewSimpleClientset(),
config: Config{
NodeName: "test-node",
Namespace: "test",
SyncInterval: 100 * time.Millisecond,
},
wireguardInterface: &wgi,
}
logrus.SetLevel(logrus.DebugLevel)
err := cont.initKubeObjects()
assert.NoError(t, err, "init kube objects")
cont.startSecretWatcher(context.TODO())
cont.startNodeWatcher(context.TODO())
_ = cont.waitForControllerSync(context.TODO())
for _, tt := range cases {
for _, add := range tt.add {
_, err = cont.crdClient.WormholeV1beta1().Wgnodes("test").Create(&v1beta1.Wgnode{
ObjectMeta: metav1.ObjectMeta{
Name: add.PublicKey,
},
Status: v1beta1.WgnodeStatus{
Port: 1000,
PublicKey: add.PublicKey,
NodeCIDR: add.AllowedIP[0],
Endpoint: add.Endpoint,
},
})
assert.NoError(t, err, "%v", add)
wgi.sharedKey = add.SharedKey
}
for _, del := range tt.del {
err = cont.crdClient.WormholeV1beta1().Wgnodes("test").Delete(del.PublicKey, &metav1.DeleteOptions{})
assert.NoError(t, err, "%v", del)
}
// Hack: it's not clear when using the fake kubernetes client, when writing an object, how to deterministically
// wait for the watcher/lister to get updated. For now, just sleep.
time.Sleep(5 * time.Millisecond)
err = cont.updatePeerSecrets(false)
assert.NoError(t, err, "%v", tt)
err = cont.syncWithWireguard()
assert.NoError(t, err, "%v", tt)
assert.NotNil(t, wgi.peers, "%v", tt)
assert.Equal(t, tt.expected, wgi.peers, "%v", tt)
}
}
func TestInitKubeObjects(t *testing.T) {
c := controller{
FieldLogger: logrus.New(),
client: testclient.NewSimpleClientset(),
}
err := c.initKubeObjects()
assert.NoError(t, err, "first attempt")
err = c.initKubeObjects()
assert.NoError(t, err, "second attempt")
}
func TestUpdatePeerSecrets(t *testing.T) {
cases := []struct {
nodes []*v1beta1.Wgnode
secret *v1.Secret
sharedSecret string
overwrite bool
}{
{
nodes: []*v1beta1.Wgnode{
{
ObjectMeta: metav1.ObjectMeta{
Name: "test1",
},
},
},
secret: &v1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: secretObjectName,
Namespace: "test",
},
Data: map[string][]byte{
"shared-secret-test0-test1": []byte("secret1"),
},
},
sharedSecret: "secret1",
overwrite: true,
},
{
nodes: []*v1beta1.Wgnode{
{
ObjectMeta: metav1.ObjectMeta{
Name: "test2",
},
},
{
ObjectMeta: metav1.ObjectMeta{
Name: "test3",
},
},
{
ObjectMeta: metav1.ObjectMeta{
Name: "test4",
},
},
{
ObjectMeta: metav1.ObjectMeta{
Name: "test5",
},
},
},
secret: &v1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: secretObjectName,
Namespace: "test",
},
Data: map[string][]byte{
"shared-secret-test0-test1": []byte("secret2"),
"shared-secret-test0-test2": []byte("secret2"),
"shared-secret-test0-test3": []byte("secret2"),
"shared-secret-test0-test4": []byte("secret2"),
"shared-secret-test0-test5": []byte("secret2"),
},
},
sharedSecret: "secret2",
overwrite: true,
},
{
nodes: []*v1beta1.Wgnode{
{
ObjectMeta: metav1.ObjectMeta{
Name: "test6",
},
},
},
secret: &v1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: secretObjectName,
Namespace: "test",
},
Data: map[string][]byte{
"shared-secret-test0-test1": []byte("secret2"),
"shared-secret-test0-test2": []byte("secret2"),
"shared-secret-test0-test3": []byte("secret2"),
"shared-secret-test0-test4": []byte("secret2"),
"shared-secret-test0-test5": []byte("secret2"),
"shared-secret-test0-test6": []byte("secret3"),
},
},
sharedSecret: "secret3",
overwrite: false,
},
}
wgi := mockWireguardInterface{}
cont := &controller{
FieldLogger: logrus.WithField("logger", "test"),
client: testclient.NewSimpleClientset(),
crdClient: wormholeclientset.NewSimpleClientset(),
config: Config{
NodeName: "test0",
Namespace: "test",
},
wireguardInterface: &wgi,
}
err := cont.initKubeObjects()
assert.NoError(t, err, "kube init")
for _, tt := range cases {
wgi.sharedKey = tt.sharedSecret
for _, n := range tt.nodes {
_, err := cont.crdClient.WormholeV1beta1().Wgnodes("test").Create(n)
assert.NoError(t, err, tt.sharedSecret)
}
cont.startSecretWatcher(context.TODO())
cont.startNodeWatcher(context.TODO())
_ = cont.waitForControllerSync(context.TODO())
err = cont.updatePeerSecrets(tt.overwrite)
assert.NoError(t, err, tt.sharedSecret)
secrets, err := cont.client.CoreV1().Secrets("test").Get(secretObjectName, metav1.GetOptions{})
assert.NoError(t, err, tt.sharedSecret)
assert.Equal(t, tt.secret.Data, secrets.Data, tt.sharedSecret)
}
}
func TestCalculateNodeSleepInterval(t *testing.T) {
cases := []struct {
count int
minDuration time.Duration
maxDuration time.Duration
}{
{
count: 1,
minDuration: 15 * time.Second,
maxDuration: 105 * time.Second,
},
{
count: 2,
minDuration: 30 * time.Second,
maxDuration: 210 * time.Second,
},
{
count: 3,
minDuration: 45 * time.Second,
maxDuration: 315 * time.Second,
},
{
count: 4,
minDuration: 60 * time.Second,
maxDuration: 420 * time.Second,
},
{
count: 5,
minDuration: 75 * time.Second,
maxDuration: 525 * time.Second,
},
{
count: 6,
minDuration: 90 * time.Second,
maxDuration: 630 * time.Second,
},
{
count: 7,
minDuration: 105 * time.Second,
maxDuration: 735 * time.Second,
},
{
count: 8,
minDuration: 120 * time.Second,
maxDuration: 840 * time.Second,
},
{
count: 9,
minDuration: 135 * time.Second,
maxDuration: 945 * time.Second,
},
{
count: 10,
minDuration: 140 * time.Second,
maxDuration: 1050 * time.Second,
},
}
for _, tt := range cases {
var totalDuration time.Duration
iterations := 1000
// because calculateNextNodeSleepInterval uses random numbers, run the check several times
for i := 0; i < iterations; i++ {
d := calculateNextNodeSleepInterval(tt.count)
assert.GreaterOrEqual(t, int64(d), int64(tt.minDuration), "%v < %v < %v", tt.minDuration, d, tt.maxDuration)
assert.LessOrEqual(t, int64(d), int64(tt.maxDuration), "%v < %v < %v", tt.minDuration, d, tt.maxDuration)
totalDuration += d
}
// the average time across all iterations should be close to the average of count * nodeSleepInterval
// so if there are 2 nodes and the target interval is 1 minute, the average should be close to 2 minutes +/- 5%
avg := totalDuration.Seconds() / float64(iterations)
min := (nodeSleepInterval - 3*time.Second).Seconds() * float64(tt.count)
max := (nodeSleepInterval + 3*time.Second).Seconds() * float64(tt.count)
assert.GreaterOrEqual(t, avg, min, "%v < %v < %v", min, avg, max)
assert.LessOrEqual(t, avg, max, "%v < %v < %v", min, avg, max)
}
}
func TestCheckNodeDeletion(t *testing.T) {
cases := []struct {
message string
nodes []v1.Node
wgnodes []v1beta1.Wgnode
expected []v1beta1.Wgnode
}{
{
message: "wgnode1/3 removal",
nodes: []v1.Node{
{
ObjectMeta: metav1.ObjectMeta{
Name: "node2",
},
},
},
wgnodes: []v1beta1.Wgnode{
{
ObjectMeta: metav1.ObjectMeta{
Name: "node1",
},
},
{
ObjectMeta: metav1.ObjectMeta{
Name: "node2",
},
},
{
ObjectMeta: metav1.ObjectMeta{
Name: "node3",
},
},
},
expected: []v1beta1.Wgnode{
{
ObjectMeta: metav1.ObjectMeta{
Name: "node2",
Namespace: "test",
},
},
},
},
}
for _, tt := range cases {
cont := &controller{
FieldLogger: logrus.WithField("logger", "test"),
client: testclient.NewSimpleClientset(),
crdClient: wormholeclientset.NewSimpleClientset(),
config: Config{
Namespace: "test",
},
}
cont.startNodeWatcher(context.TODO())
for _, n := range tt.nodes {
_, err := cont.client.CoreV1().Nodes().Create(n.DeepCopy())
assert.NoError(t, err, tt.message)
}
for _, n := range tt.wgnodes {
_, err := cont.crdClient.WormholeV1beta1().Wgnodes(cont.config.Namespace).Create(n.DeepCopy())
assert.NoError(t, err, tt.message)
}
// wait for the node lister to populate
for {
if _, err := cont.nodeLister.Wgnodes(cont.config.Namespace).Get(tt.wgnodes[0].Name); err == nil {
break
}
time.Sleep(1 * time.Millisecond)
}
err := cont.checkNodeDeletion()
assert.NoError(t, err, tt.message)
wgnodes, err := cont.crdClient.WormholeV1beta1().Wgnodes(cont.config.Namespace).List(metav1.ListOptions{})
assert.NoError(t, err, tt.message)
assert.Equal(t, tt.expected, wgnodes.Items, tt.message)
}
}
type mockWireguardInterface struct {
sync.Mutex
publicKey string
sharedKey string
peers map[string]wireguard.Peer
}
func (m *mockWireguardInterface) PublicKey() string {
return m.publicKey
}
func (m *mockWireguardInterface) SyncPeers(peers map[string]wireguard.Peer) error {
m.Lock()
defer m.Unlock()
m.peers = peers
return nil
}
func (m *mockWireguardInterface) GenerateSharedKey() (string, error) {
return m.sharedKey, nil
}
================================================
FILE: pkg/controller/overlay.go
================================================
/*
Copyright 2018 Gravitational, 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 controller
import (
"bufio"
"bytes"
"io/ioutil"
"net"
"strconv"
"strings"
"github.com/gravitational/trace"
yaml "gopkg.in/yaml.v2"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
)
// detectOverlayCIDR tries and finds the Overlay CIDR network from the kubernetes API
func (d *controller) detectOverlayCIDR() error {
if d.config.OverlayCIDR != "" {
return nil
}
d.Info("Attempting to retrieve overlayCIDR from cluster")
// Assume we're running inside planet, and continue to other checks if we're not
cidr, err := d.loadOverlayCidrFromPlanet()
if err == nil {
d.config.OverlayCIDR = cidr
return nil
}
d.Info("Unable to load overlay network from planet: ", trace.DebugReport(err))
// try and load config from kubeadm
cidr, err = loadOverlayCidrFromKubeadm(d.client)
if err != nil {
return trace.Wrap(err)
}
d.config.OverlayCIDR = cidr
return nil
}
type kubeadmClusterConfiguration struct {
Networking map[string]string `yaml:"networking"`
}
// loadOverlayCidrFromKubeadm attempts to load kubeadm installation configuration to discover the overlay network
// subnet in use.
func loadOverlayCidrFromKubeadm(client kubernetes.Interface) (string, error) {
config, err := client.CoreV1().ConfigMaps("kube-system").Get("kubeadm-config", metav1.GetOptions{})
if err != nil {
return "", trace.Wrap(err)
}
clusterConfig, ok := config.Data["ClusterConfiguration"]
if !ok {
return "", trace.BadParameter("kubeadm configmap is missing ClusterConfiguration")
}
var parsedConfig kubeadmClusterConfiguration
err = yaml.Unmarshal([]byte(clusterConfig), &parsedConfig)
if err != nil {
return "", trace.Wrap(err)
}
if cidr, ok := parsedConfig.Networking["podSubnet"]; ok {
_, _, err := net.ParseCIDR(cidr)
if err != nil {
return "", trace.Wrap(err)
}
return cidr, nil
}
return "", trace.BadParameter("Unable to locate networking.podSubnet in kubeadm config: %v", clusterConfig)
}
// loadOverlayCidrFromPlanet attempts to load planet subnet information from the planet /etc/container-environment file
func (d *controller) loadOverlayCidrFromPlanet() (string, error) {
d.Info("Attempting to retrieve overlayCIDR from planet")
env, err := ioutil.ReadFile("/host/etc/container-environment")
if err != nil {
return "", trace.ConvertSystemError(err)
}
return parsePodSubnetFromPlanet(env)
}
func parsePodSubnetFromPlanet(buf []byte) (string, error) {
var err error
scanner := bufio.NewScanner(bytes.NewReader(buf))
for scanner.Scan() {
keyVal := strings.SplitN(scanner.Text(), "=", 2)
if len(keyVal) != 2 {
continue
}
if strings.TrimSpace(keyVal[0]) == "KUBE_POD_SUBNET" {
val := strings.TrimSpace(keyVal[1])
if val[0] == '"' {
val, err = strconv.Unquote(val)
if err != nil {
return "", trace.Wrap(err)
}
}
_, _, err = net.ParseCIDR(val)
if err != nil {
return "", trace.Wrap(err)
}
return val, nil
}
}
if err := scanner.Err(); err != nil {
return "", trace.Wrap(err)
}
return "", trace.NotFound("Unable to locate KUBE_POD_SUBET env variable in /host/etc/container-environment")
}
================================================
FILE: pkg/controller/overlay_test.go
================================================
/*
Copyright 2019 Gravitational, 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 controller
import (
"testing"
"github.com/stretchr/testify/assert"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
testclient "k8s.io/client-go/kubernetes/fake"
)
func TestKubeadmClusterConfiguration(t *testing.T) {
cases := []struct {
in *v1.ConfigMap
out string
}{
{
in: &v1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: "kubeadm-config",
Namespace: "kube-system",
},
Data: map[string]string{
"ClusterConfiguration": `
networking:
dnsDomain: cluster.local
podSubnet: 10.20.0.0/16
serviceSubnet: 10.99.0.0/24`,
},
},
out: "10.20.0.0/16",
},
}
for _, c := range cases {
client := testclient.NewSimpleClientset(c.in)
cidr, err := loadOverlayCidrFromKubeadm(client)
assert.NoError(t, err, c.out)
assert.Equal(t, c.out, cidr, c.out)
}
}
func TestKubeadmClusterConfigurationErrors(t *testing.T) {
cases := []struct {
in *v1.ConfigMap
description string
}{
{
in: &v1.ConfigMap{},
description: "empty configmap",
},
{
in: &v1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: "kubeadm-config",
Namespace: "kube-system",
},
},
description: "empty data",
},
{
in: &v1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: "kubeadm-config",
Namespace: "kube-system",
},
Data: map[string]string{
"ClusterConfiguration": `
derp: true`,
},
},
description: "missing networking",
},
{
in: &v1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: "kubeadm-config",
Namespace: "kube-system",
},
Data: map[string]string{
"ClusterConfiguration": `
networking:
dnsDomain: cluster.local
podSubnet: broken
serviceSubnet: 10.99.0.0/24`,
},
},
description: "invalid cidr",
},
{
in: &v1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: "kubeadm-config",
Namespace: "kube-system",
},
Data: map[string]string{
"ClusterConfiguration": `
networking:
`,
},
},
description: "invalid yaml",
},
}
for _, c := range cases {
client := testclient.NewSimpleClientset(c.in)
_, err := loadOverlayCidrFromKubeadm(client)
assert.Error(t, err, c.description)
}
}
func TestPlanetConfiguration(t *testing.T) {
cases := []struct {
env string
expected string
description string
}{
{
env: `KUBE_POD_SUBNET="10.20.0.0/16"`,
expected: "10.20.0.0/16",
description: "simple file",
},
{
env: `KUBE_POD_SUBNET=10.20.0.0/16`,
expected: "10.20.0.0/16",
description: "unquoted",
},
{
env: `
TEST=TEST
TEST=
KUBE_POD_SUBNET = "10.20.0.0/16"
TEST=TEST
TEST
`,
expected: "10.20.0.0/16",
description: "multi line",
},
}
for _, c := range cases {
cidr, err := parsePodSubnetFromPlanet([]byte(c.env))
assert.NoError(t, err, c.description)
assert.Equal(t, c.expected, cidr, c.description)
}
}
func TestPlanetConfigurationError(t *testing.T) {
cases := []struct {
env string
description string
}{
{
env: `KUBE_POD_SUBNET="10.20.0.0/16`,
description: "missing quote",
},
{
env: `KUBE_POD_SUBNET`,
description: "missing value",
},
{
env: `KUBE_POD_SUBNET="test"`,
description: "invalid cidr",
},
}
for _, c := range cases {
_, err := parsePodSubnetFromPlanet([]byte(c.env))
assert.Error(t, err, c.description)
}
}
================================================
FILE: pkg/controller/utils.go
================================================
/*
Copyright 2019 Gravitational, 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 controller
import (
"os"
"github.com/gravitational/trace"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func runningInPod() bool {
return os.Getenv("POD_NAME") != ""
}
func (c *controller) detectNodeName() error {
c.Debug("Attempting to detect nodename.")
defer func() { c.Info("Detected hostname: ", c.config.NodeName) }()
// if we're running inside a pod
// find the node the pod is assigned to
podName := os.Getenv("POD_NAME")
podNamespace := os.Getenv("POD_NAMESPACE")
if podName != "" && podNamespace != "" {
return trace.Wrap(c.updateNodeNameFromPod(podName, podNamespace))
}
nodeName, err := os.Hostname()
if err != nil {
return trace.Wrap(err)
}
// TODO(knisbet) we should probably validate here, a node object exists that matches our node name
c.config.NodeName = nodeName
return nil
}
func (c *controller) updateNodeNameFromPod(podName, podNamespace string) error {
pod, err := c.client.CoreV1().Pods(podNamespace).Get(podName, metav1.GetOptions{})
if err != nil {
return trace.Wrap(err)
}
c.config.NodeName = pod.Spec.NodeName
if c.config.NodeName == "" {
return trace.BadParameter("node name not present in pod spec %v/%v", podNamespace, podName)
}
return nil
}
================================================
FILE: pkg/iptables/iptables.go
================================================
/*
Copyright 2018 Gravitational, 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 (
"context"
"fmt"
"strings"
"time"
"github.com/sirupsen/logrus"
"github.com/vishvananda/netlink"
"github.com/coreos/go-iptables/iptables"
"github.com/gravitational/trace"
)
var (
WormholeAntispoofingChain = chain{filter, "WORMHOLE-ANTISPOOFING"}
WormholeMSSChain = chain{mangle, "WORMHOLE-MSS"}
)
type chain struct {
table string
name string
}
type Config struct {
logrus.FieldLogger
// OverlayCIDR is the overlay network range
OverlayCIDR string
// PodCIDR is the local pod network range
PodCIDR string
// WireguardIface is the interface name for wireguard
WireguardIface string
// BridgeIface is the bridge interface name for the linux bridge
BridgeIface string
// SyncInterval is the time duration for resyncing the iptables rules on the host
SyncInterval time.Duration
iptables *iptables.IPTables
}
// Run will run the iptables control loop in a separate goroutine, that exits when the context is cancelled
func (c *Config) Run(ctx context.Context) error {
ipt, err := iptables.New()
if err != nil {
return trace.Wrap(err)
}
if c.SyncInterval == 0 {
return trace.BadParameter("Sync interval must be set")
}
c.iptables = ipt
// cleanup rules that may have existed before and we crashed
c.cleanupRules()
// create the rules, so we can return any errors if there is a config problem
err = c.createRules()
if err != nil {
return trace.Wrap(err)
}
go c.sync(ctx)
return nil
}
func (c *Config) sync(ctx context.Context) {
ticker := time.NewTicker(c.SyncInterval)
defer ticker.Stop()
defer c.cleanupRules()
for {
select {
case <-ticker.C:
err := c.rulesOk()
if err != nil && !trace.IsNotFound(err) {
c.Warn("Error checking iptables rules: ", trace.DebugReport(err))
continue
}
if trace.IsNotFound(err) {
// rules appear to be missing
// so we delete then recreate our rules
c.cleanupRules()
err = c.createRules()
if err != nil {
c.Warn("Error creating iptables rules: ", trace.DebugReport(err))
}
}
c.Debug("Iptables re-sync complete.")
case <-ctx.Done():
return
}
}
}
const (
postrouting = "POSTROUTING"
nat = "nat"
filter = "filter"
mangle = "mangle"
forward = "FORWARD"
input = "INPUT"
)
func (c *Config) generateRules(links []netlink.Link) []rule {
rules := make([]rule, 0)
// Don't nat any traffic with source and destination within the overlay network
rules = append(rules,
rule{nat, postrouting, []string{"-s", c.OverlayCIDR, "-d", c.OverlayCIDR, "-j", "RETURN"},
"wormhole: overlay->overlay"},
)
// Nat all other traffic
if c.iptables.HasRandomFully() {
rules = append(rules,
rule{nat, postrouting, []string{"-s", c.PodCIDR, "-j", "MASQUERADE", "--random-fully"},
"wormhole: nat overlay->internet"},
)
} else {
rules = append(rules,
rule{nat, postrouting, []string{"-s", c.PodCIDR, "-j", "MASQUERADE"},
"wormhole: nat overlay->internet"},
)
}
// Don't nat traffic from external hosts to local pods (preserves source IP when using externalTrafficPolicy=local)
rules = append(rules,
rule{nat, postrouting, []string{"-d", c.PodCIDR, "-j", "RETURN"},
"wormhole: preserve source-ip"},
)
// Masquerade traffic if we're forwarding it to another host
if c.iptables.HasRandomFully() {
rules = append(rules,
rule{nat, postrouting, []string{"-d", c.OverlayCIDR, "-j", "MASQUERADE", "--random-fully"},
"wormhole: nat internet->overlay"},
)
} else {
rules = append(rules,
rule{nat, postrouting, []string{"-d", c.OverlayCIDR, "-j", "MASQUERADE"},
"wormhole: nat internet->overlay"},
)
}
//
// Anti-spoofing, prevent tricking a host into routing traffic, if received on an unexpected interface
// Traffic that is from the overlay network range, should only have source interfaces of the linux
// bridge / wireguard / lo interfaces. Traffic entering on any other interface should be dropped.
//
// TODO(knisbet) look into whether it's possible for one pod to spoof another pod on the same host, and
// whether we need iptable rules per pod (veth entry) to prevent this.
rules = append(rules,
rule{filter, WormholeAntispoofingChain.name, []string{"-i", c.BridgeIface, "-s", c.PodCIDR, "-j", "RETURN"},
"wormhole: antispoofing"},
// Wireguard will enforce the source address per peer, so just allow everything in the range
rule{filter, WormholeAntispoofingChain.name, []string{"-i", c.WireguardIface, "-s", c.OverlayCIDR, "-j", "RETURN"},
"wormhole: antispoofing"},
//
Showing preview only (406K chars total). Download the full file or copy to clipboard to get everything.
gitextract_1bb1nv75/
├── .github/
│ └── ISSUE_TEMPLATE/
│ ├── bug_report.md
│ └── feature_request.md
├── .gitignore
├── Dockerfile
├── Dockerfile.build
├── Gopkg.toml
├── LICENSE
├── Makefile
├── README.md
├── assets/
│ └── docker/
│ └── wireguard/
│ ├── wireguard-ubuntu-wireguard-bionic.list
│ └── wireguard_ubuntu_wireguard.gpg
├── build.go
├── cmd/
│ ├── netlink-test/
│ │ └── main.go
│ └── wormhole/
│ ├── controller.go
│ ├── main.go
│ └── version.go
├── docs/
│ ├── generic-wormhole.yaml
│ ├── gravity-wormhole.yaml
│ ├── kube-wormhole.yaml
│ ├── rfcs/
│ │ └── 0001-spec.md
│ └── troubleshooting.md
├── hack/
│ ├── boilerplate.go.txt
│ ├── update-codegen.sh
│ └── verify-codegen.sh
├── mage.go
├── pkg/
│ ├── apis/
│ │ └── wormhole.gravitational.io/
│ │ ├── register.go
│ │ └── v1beta1/
│ │ ├── doc.go
│ │ ├── register.go
│ │ ├── wgnode_types.go
│ │ └── zz_generated.deepcopy.go
│ ├── client/
│ │ ├── clientset/
│ │ │ └── versioned/
│ │ │ ├── clientset.go
│ │ │ ├── doc.go
│ │ │ ├── fake/
│ │ │ │ ├── clientset_generated.go
│ │ │ │ ├── doc.go
│ │ │ │ └── register.go
│ │ │ ├── scheme/
│ │ │ │ ├── doc.go
│ │ │ │ └── register.go
│ │ │ └── typed/
│ │ │ └── wormhole.gravitational.io/
│ │ │ └── v1beta1/
│ │ │ ├── doc.go
│ │ │ ├── fake/
│ │ │ │ ├── doc.go
│ │ │ │ ├── fake_wgnode.go
│ │ │ │ └── fake_wormhole.gravitational.io_client.go
│ │ │ ├── generated_expansion.go
│ │ │ ├── wgnode.go
│ │ │ └── wormhole.gravitational.io_client.go
│ │ ├── informers/
│ │ │ └── externalversions/
│ │ │ ├── factory.go
│ │ │ ├── generic.go
│ │ │ ├── internalinterfaces/
│ │ │ │ └── factory_interfaces.go
│ │ │ └── wormhole.gravitational.io/
│ │ │ ├── interface.go
│ │ │ └── v1beta1/
│ │ │ ├── interface.go
│ │ │ └── wgnode.go
│ │ └── listers/
│ │ └── wormhole.gravitational.io/
│ │ └── v1beta1/
│ │ ├── expansion_generated.go
│ │ └── wgnode.go
│ ├── controller/
│ │ ├── cni.go
│ │ ├── controller.go
│ │ ├── ipam.go
│ │ ├── ipam_test.go
│ │ ├── kubernetes.go
│ │ ├── kubernetes_test.go
│ │ ├── overlay.go
│ │ ├── overlay_test.go
│ │ └── utils.go
│ ├── iptables/
│ │ └── iptables.go
│ └── wireguard/
│ ├── utils.go
│ ├── wireguard.go
│ └── wireguard_test.go
├── scripts/
│ ├── gravity-install.sh
│ ├── gravity-rollback.sh
│ └── gravity-upgrade.sh
└── vendor/
├── github.com/
│ ├── cenkalti/
│ │ └── backoff/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── backoff.go
│ │ ├── context.go
│ │ ├── exponential.go
│ │ ├── retry.go
│ │ ├── ticker.go
│ │ └── tries.go
│ ├── coreos/
│ │ └── go-iptables/
│ │ ├── .travis.yml
│ │ ├── DCO
│ │ ├── LICENSE
│ │ ├── NOTICE
│ │ ├── README.md
│ │ ├── code-of-conduct.md
│ │ ├── iptables/
│ │ │ ├── iptables.go
│ │ │ └── lock.go
│ │ └── test
│ ├── davecgh/
│ │ └── go-spew/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── cov_report.sh
│ │ ├── spew/
│ │ │ ├── bypass.go
│ │ │ ├── bypasssafe.go
│ │ │ ├── common.go
│ │ │ ├── config.go
│ │ │ ├── doc.go
│ │ │ ├── dump.go
│ │ │ ├── format.go
│ │ │ ├── spew.go
│ │ │ └── testdata/
│ │ │ └── dumpcgo.go
│ │ └── test_coverage.txt
│ ├── evanphx/
│ │ └── json-patch/
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── cmd/
│ │ │ └── json-patch/
│ │ │ ├── file_flag.go
│ │ │ └── main.go
│ │ ├── merge.go
│ │ └── patch.go
│ ├── gogo/
│ │ └── protobuf/
│ │ ├── .gitignore
│ │ ├── .mailmap
│ │ ├── .travis.yml
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── GOLANG_CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README
│ │ ├── Readme.md
│ │ ├── bench.md
│ │ ├── codec/
│ │ │ └── codec.go
│ │ ├── conformance/
│ │ │ ├── Makefile
│ │ │ ├── conformance.go
│ │ │ ├── conformance.sh
│ │ │ ├── internal/
│ │ │ │ └── conformance_proto/
│ │ │ │ ├── conformance.pb.go
│ │ │ │ └── conformance.proto
│ │ │ └── test.sh
│ │ ├── custom_types.md
│ │ ├── extensions.md
│ │ ├── gogoproto/
│ │ │ ├── Makefile
│ │ │ ├── doc.go
│ │ │ ├── gogo.pb.go
│ │ │ ├── gogo.pb.golden
│ │ │ ├── gogo.proto
│ │ │ └── helper.go
│ │ ├── gogoreplace/
│ │ │ └── main.go
│ │ ├── install-protobuf.sh
│ │ ├── io/
│ │ │ ├── full.go
│ │ │ ├── io.go
│ │ │ ├── uint32.go
│ │ │ └── varint.go
│ │ ├── jsonpb/
│ │ │ ├── jsonpb.go
│ │ │ └── jsonpb_test_proto/
│ │ │ ├── Makefile
│ │ │ ├── bytes.go
│ │ │ ├── more_test_objects.pb.go
│ │ │ ├── more_test_objects.proto
│ │ │ ├── test_objects.pb.go
│ │ │ └── test_objects.proto
│ │ ├── plugin/
│ │ │ ├── compare/
│ │ │ │ ├── compare.go
│ │ │ │ └── comparetest.go
│ │ │ ├── defaultcheck/
│ │ │ │ └── defaultcheck.go
│ │ │ ├── description/
│ │ │ │ ├── description.go
│ │ │ │ └── descriptiontest.go
│ │ │ ├── embedcheck/
│ │ │ │ └── embedcheck.go
│ │ │ ├── enumstringer/
│ │ │ │ └── enumstringer.go
│ │ │ ├── equal/
│ │ │ │ ├── equal.go
│ │ │ │ └── equaltest.go
│ │ │ ├── face/
│ │ │ │ ├── face.go
│ │ │ │ └── facetest.go
│ │ │ ├── gostring/
│ │ │ │ ├── gostring.go
│ │ │ │ └── gostringtest.go
│ │ │ ├── marshalto/
│ │ │ │ └── marshalto.go
│ │ │ ├── oneofcheck/
│ │ │ │ └── oneofcheck.go
│ │ │ ├── populate/
│ │ │ │ └── populate.go
│ │ │ ├── size/
│ │ │ │ ├── size.go
│ │ │ │ └── sizetest.go
│ │ │ ├── stringer/
│ │ │ │ ├── stringer.go
│ │ │ │ └── stringertest.go
│ │ │ ├── testgen/
│ │ │ │ └── testgen.go
│ │ │ ├── union/
│ │ │ │ ├── union.go
│ │ │ │ └── uniontest.go
│ │ │ └── unmarshal/
│ │ │ └── unmarshal.go
│ │ ├── proto/
│ │ │ ├── Makefile
│ │ │ ├── clone.go
│ │ │ ├── custom_gogo.go
│ │ │ ├── decode.go
│ │ │ ├── discard.go
│ │ │ ├── duration.go
│ │ │ ├── duration_gogo.go
│ │ │ ├── encode.go
│ │ │ ├── encode_gogo.go
│ │ │ ├── equal.go
│ │ │ ├── extensions.go
│ │ │ ├── extensions_gogo.go
│ │ │ ├── lib.go
│ │ │ ├── lib_gogo.go
│ │ │ ├── message_set.go
│ │ │ ├── pointer_reflect.go
│ │ │ ├── pointer_reflect_gogo.go
│ │ │ ├── pointer_unsafe.go
│ │ │ ├── pointer_unsafe_gogo.go
│ │ │ ├── properties.go
│ │ │ ├── properties_gogo.go
│ │ │ ├── proto3_proto/
│ │ │ │ ├── Makefile
│ │ │ │ ├── proto3.pb.go
│ │ │ │ └── proto3.proto
│ │ │ ├── skip_gogo.go
│ │ │ ├── table_marshal.go
│ │ │ ├── table_marshal_gogo.go
│ │ │ ├── table_merge.go
│ │ │ ├── table_unmarshal.go
│ │ │ ├── table_unmarshal_gogo.go
│ │ │ ├── test_proto/
│ │ │ │ ├── Makefile
│ │ │ │ ├── deterministic.go
│ │ │ │ ├── test.pb.go
│ │ │ │ └── test.proto
│ │ │ ├── text.go
│ │ │ ├── text_gogo.go
│ │ │ ├── text_parser.go
│ │ │ ├── timestamp.go
│ │ │ └── timestamp_gogo.go
│ │ ├── protobuf/
│ │ │ ├── Makefile
│ │ │ └── google/
│ │ │ └── protobuf/
│ │ │ ├── any.proto
│ │ │ ├── api.proto
│ │ │ ├── compiler/
│ │ │ │ └── plugin.proto
│ │ │ ├── descriptor.proto
│ │ │ ├── duration.proto
│ │ │ ├── empty.proto
│ │ │ ├── field_mask.proto
│ │ │ ├── source_context.proto
│ │ │ ├── struct.proto
│ │ │ ├── timestamp.proto
│ │ │ ├── type.proto
│ │ │ └── wrappers.proto
│ │ ├── protoc-gen-combo/
│ │ │ └── combo.go
│ │ ├── protoc-gen-gofast/
│ │ │ └── main.go
│ │ ├── protoc-gen-gogo/
│ │ │ ├── Makefile
│ │ │ ├── descriptor/
│ │ │ │ ├── Makefile
│ │ │ │ ├── descriptor.go
│ │ │ │ ├── descriptor.pb.go
│ │ │ │ ├── descriptor_gostring.gen.go
│ │ │ │ └── helper.go
│ │ │ ├── doc.go
│ │ │ ├── generator/
│ │ │ │ ├── generator.go
│ │ │ │ ├── helper.go
│ │ │ │ └── internal/
│ │ │ │ └── remap/
│ │ │ │ └── remap.go
│ │ │ ├── grpc/
│ │ │ │ └── grpc.go
│ │ │ ├── main.go
│ │ │ ├── plugin/
│ │ │ │ ├── Makefile
│ │ │ │ └── plugin.pb.go
│ │ │ └── testdata/
│ │ │ ├── Makefile
│ │ │ ├── deprecated/
│ │ │ │ ├── deprecated.pb.go
│ │ │ │ └── deprecated.proto
│ │ │ ├── extension_base/
│ │ │ │ ├── extension_base.pb.go
│ │ │ │ └── extension_base.proto
│ │ │ ├── extension_extra/
│ │ │ │ ├── extension_extra.pb.go
│ │ │ │ └── extension_extra.proto
│ │ │ ├── extension_user/
│ │ │ │ ├── extension_user.pb.go
│ │ │ │ └── extension_user.proto
│ │ │ ├── grpc/
│ │ │ │ ├── grpc.pb.go
│ │ │ │ └── grpc.proto
│ │ │ ├── import_public/
│ │ │ │ ├── a.pb.go
│ │ │ │ ├── a.proto
│ │ │ │ ├── b.pb.go
│ │ │ │ ├── b.proto
│ │ │ │ └── sub/
│ │ │ │ ├── a.pb.go
│ │ │ │ ├── a.proto
│ │ │ │ ├── b.pb.go
│ │ │ │ └── b.proto
│ │ │ ├── imports/
│ │ │ │ ├── fmt/
│ │ │ │ │ ├── m.pb.go
│ │ │ │ │ └── m.proto
│ │ │ │ ├── test_a_1/
│ │ │ │ │ ├── m1.pb.go
│ │ │ │ │ ├── m1.proto
│ │ │ │ │ ├── m2.pb.go
│ │ │ │ │ └── m2.proto
│ │ │ │ ├── test_a_2/
│ │ │ │ │ ├── m3.pb.go
│ │ │ │ │ ├── m3.proto
│ │ │ │ │ ├── m4.pb.go
│ │ │ │ │ └── m4.proto
│ │ │ │ ├── test_b_1/
│ │ │ │ │ ├── m1.pb.go
│ │ │ │ │ ├── m1.proto
│ │ │ │ │ ├── m2.pb.go
│ │ │ │ │ └── m2.proto
│ │ │ │ ├── test_import_a1m1.pb.go
│ │ │ │ ├── test_import_a1m1.proto
│ │ │ │ ├── test_import_a1m2.pb.go
│ │ │ │ ├── test_import_a1m2.proto
│ │ │ │ ├── test_import_all.pb.go
│ │ │ │ └── test_import_all.proto
│ │ │ ├── multi/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── multi1.proto
│ │ │ │ ├── multi2.proto
│ │ │ │ └── multi3.proto
│ │ │ ├── my_test/
│ │ │ │ ├── test.pb.go
│ │ │ │ └── test.proto
│ │ │ └── proto3/
│ │ │ ├── proto3.pb.go
│ │ │ └── proto3.proto
│ │ ├── protoc-gen-gogofast/
│ │ │ └── main.go
│ │ ├── protoc-gen-gogofaster/
│ │ │ └── main.go
│ │ ├── protoc-gen-gogoslick/
│ │ │ └── main.go
│ │ ├── protoc-gen-gogotypes/
│ │ │ └── main.go
│ │ ├── protoc-gen-gostring/
│ │ │ └── main.go
│ │ ├── protoc-min-version/
│ │ │ └── minversion.go
│ │ ├── sortkeys/
│ │ │ └── sortkeys.go
│ │ ├── test/
│ │ │ ├── .gitignore
│ │ │ ├── Makefile
│ │ │ ├── asymetric-issue125/
│ │ │ │ ├── Makefile
│ │ │ │ ├── asym.pb.go
│ │ │ │ ├── asym.proto
│ │ │ │ └── pop.go
│ │ │ ├── cachedsize/
│ │ │ │ ├── Makefile
│ │ │ │ ├── cachedsize.pb.go
│ │ │ │ └── cachedsize.proto
│ │ │ ├── casttype/
│ │ │ │ ├── Makefile
│ │ │ │ ├── casttype.proto
│ │ │ │ ├── combos/
│ │ │ │ │ ├── both/
│ │ │ │ │ │ ├── casttype.pb.go
│ │ │ │ │ │ └── casttype.proto
│ │ │ │ │ ├── marshaler/
│ │ │ │ │ │ ├── casttype.pb.go
│ │ │ │ │ │ └── casttype.proto
│ │ │ │ │ ├── neither/
│ │ │ │ │ │ ├── casttype.pb.go
│ │ │ │ │ │ └── casttype.proto
│ │ │ │ │ └── unmarshaler/
│ │ │ │ │ ├── casttype.pb.go
│ │ │ │ │ └── casttype.proto
│ │ │ │ └── mytypes.go
│ │ │ ├── castvalue/
│ │ │ │ ├── Makefile
│ │ │ │ ├── castvalue.pb.go
│ │ │ │ ├── castvalue.proto
│ │ │ │ ├── combos/
│ │ │ │ │ ├── both/
│ │ │ │ │ │ ├── castvalue.pb.go
│ │ │ │ │ │ ├── castvalue.proto
│ │ │ │ │ │ └── mytypes.go
│ │ │ │ │ ├── marshaler/
│ │ │ │ │ │ ├── castvalue.pb.go
│ │ │ │ │ │ ├── castvalue.proto
│ │ │ │ │ │ └── mytypes.go
│ │ │ │ │ └── unmarshaler/
│ │ │ │ │ ├── castvalue.pb.go
│ │ │ │ │ ├── castvalue.proto
│ │ │ │ │ └── mytypes.go
│ │ │ │ └── mytypes.go
│ │ │ ├── combos/
│ │ │ │ ├── both/
│ │ │ │ │ ├── t.go
│ │ │ │ │ ├── thetest.pb.go
│ │ │ │ │ ├── thetest.proto
│ │ │ │ │ └── uuid.go
│ │ │ │ ├── marshaler/
│ │ │ │ │ ├── t.go
│ │ │ │ │ ├── thetest.pb.go
│ │ │ │ │ ├── thetest.proto
│ │ │ │ │ └── uuid.go
│ │ │ │ └── unmarshaler/
│ │ │ │ ├── t.go
│ │ │ │ ├── thetest.pb.go
│ │ │ │ ├── thetest.proto
│ │ │ │ └── uuid.go
│ │ │ ├── custom/
│ │ │ │ └── custom.go
│ │ │ ├── custom-dash-type/
│ │ │ │ └── customdash.go
│ │ │ ├── custombytesnonstruct/
│ │ │ │ ├── Makefile
│ │ │ │ ├── customtype.go
│ │ │ │ ├── proto.pb.go
│ │ │ │ └── proto.proto
│ │ │ ├── dashfilename/
│ │ │ │ ├── dash-filename.proto
│ │ │ │ └── doc.go
│ │ │ ├── data/
│ │ │ │ ├── Makefile
│ │ │ │ ├── data.pb.go
│ │ │ │ └── data.proto
│ │ │ ├── defaultconflict/
│ │ │ │ ├── df.proto
│ │ │ │ ├── dg.proto
│ │ │ │ ├── doc.go
│ │ │ │ ├── nc.proto
│ │ │ │ ├── ne.proto
│ │ │ │ └── nx.proto
│ │ │ ├── deterministic/
│ │ │ │ ├── Makefile
│ │ │ │ ├── deterministic.pb.go
│ │ │ │ └── deterministic.proto
│ │ │ ├── embedconflict/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── doc.go
│ │ │ │ ├── eb.proto
│ │ │ │ ├── ec.proto
│ │ │ │ ├── ee.proto
│ │ │ │ ├── em.proto
│ │ │ │ ├── en.proto
│ │ │ │ └── er.proto
│ │ │ ├── empty-issue70/
│ │ │ │ ├── Makefile
│ │ │ │ ├── empty.pb.go
│ │ │ │ └── empty.proto
│ │ │ ├── enumcustomname/
│ │ │ │ ├── Makefile
│ │ │ │ ├── enumcustomname.pb.go
│ │ │ │ └── enumcustomname.proto
│ │ │ ├── enumdecl/
│ │ │ │ ├── Makefile
│ │ │ │ ├── enumdecl.pb.go
│ │ │ │ ├── enumdecl.proto
│ │ │ │ └── models.go
│ │ │ ├── enumdecl_all/
│ │ │ │ ├── Makefile
│ │ │ │ ├── enumdeclall.pb.go
│ │ │ │ ├── enumdeclall.proto
│ │ │ │ └── models.go
│ │ │ ├── enumprefix/
│ │ │ │ ├── Makefile
│ │ │ │ ├── enumprefix.pb.go
│ │ │ │ └── enumprefix.proto
│ │ │ ├── enumstringer/
│ │ │ │ ├── Makefile
│ │ │ │ ├── enumstringer.pb.go
│ │ │ │ ├── enumstringer.proto
│ │ │ │ └── string.go
│ │ │ ├── example/
│ │ │ │ ├── Makefile
│ │ │ │ ├── example.pb.go
│ │ │ │ └── example.proto
│ │ │ ├── filedotname/
│ │ │ │ ├── Makefile
│ │ │ │ ├── file.dot.pb.go
│ │ │ │ └── file.dot.proto
│ │ │ ├── fuzztests/
│ │ │ │ ├── Makefile
│ │ │ │ ├── fuzz.pb.go
│ │ │ │ └── fuzz.proto
│ │ │ ├── group/
│ │ │ │ ├── Makefile
│ │ │ │ ├── group.pb.go
│ │ │ │ └── group.proto
│ │ │ ├── importcustom-issue389/
│ │ │ │ ├── Makefile
│ │ │ │ ├── imported/
│ │ │ │ │ ├── Makefile
│ │ │ │ │ ├── a.pb.go
│ │ │ │ │ ├── a.proto
│ │ │ │ │ └── b.go
│ │ │ │ └── importing/
│ │ │ │ ├── Makefile
│ │ │ │ ├── c.pb.go
│ │ │ │ └── c.proto
│ │ │ ├── importdedup/
│ │ │ │ ├── Makefile
│ │ │ │ ├── proto.pb.go
│ │ │ │ ├── proto.proto
│ │ │ │ └── subpkg/
│ │ │ │ ├── customtype.go
│ │ │ │ ├── subproto.pb.go
│ │ │ │ └── subproto.proto
│ │ │ ├── importduplicate/
│ │ │ │ ├── Makefile
│ │ │ │ ├── importduplicate.pb.go
│ │ │ │ ├── importduplicate.proto
│ │ │ │ ├── proto/
│ │ │ │ │ ├── proto.pb.go
│ │ │ │ │ └── proto.proto
│ │ │ │ └── sortkeys/
│ │ │ │ ├── sortable.pb.go
│ │ │ │ └── sortable.proto
│ │ │ ├── indeximport-issue72/
│ │ │ │ ├── Makefile
│ │ │ │ ├── index/
│ │ │ │ │ ├── index.pb.go
│ │ │ │ │ └── index.proto
│ │ │ │ ├── indeximport.pb.go
│ │ │ │ └── indeximport.proto
│ │ │ ├── int64support/
│ │ │ │ ├── Makefile
│ │ │ │ ├── object.pb.go
│ │ │ │ ├── object.proto
│ │ │ │ └── object_js.go
│ │ │ ├── issue260/
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── issue260.pb.go
│ │ │ │ ├── issue260.proto
│ │ │ │ └── models.go
│ │ │ ├── issue261/
│ │ │ │ ├── Makefile
│ │ │ │ ├── issue261.pb.go
│ │ │ │ └── issue261.proto
│ │ │ ├── issue262/
│ │ │ │ ├── Makefile
│ │ │ │ ├── timefail.pb.go
│ │ │ │ └── timefail.proto
│ │ │ ├── issue270/
│ │ │ │ ├── a/
│ │ │ │ │ ├── a1.proto
│ │ │ │ │ └── a2.proto
│ │ │ │ ├── b/
│ │ │ │ │ └── b.proto
│ │ │ │ └── doc.go
│ │ │ ├── issue312/
│ │ │ │ ├── Makefile
│ │ │ │ ├── events/
│ │ │ │ │ ├── Makefile
│ │ │ │ │ ├── events.pb.go
│ │ │ │ │ └── events.proto
│ │ │ │ ├── issue312.pb.go
│ │ │ │ └── issue312.proto
│ │ │ ├── issue322/
│ │ │ │ ├── Makefile
│ │ │ │ ├── issue322.pb.go
│ │ │ │ └── issue322.proto
│ │ │ ├── issue330/
│ │ │ │ ├── Makefile
│ │ │ │ ├── issue330.pb.go
│ │ │ │ ├── issue330.proto
│ │ │ │ └── type.go
│ │ │ ├── issue34/
│ │ │ │ ├── Makefile
│ │ │ │ ├── proto.pb.go
│ │ │ │ └── proto.proto
│ │ │ ├── issue427/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ └── issue427.proto
│ │ │ ├── issue42order/
│ │ │ │ ├── Makefile
│ │ │ │ ├── issue42.pb.go
│ │ │ │ └── issue42.proto
│ │ │ ├── issue8/
│ │ │ │ ├── Makefile
│ │ │ │ ├── proto.pb.go
│ │ │ │ └── proto.proto
│ │ │ ├── jsonpb-gogo/
│ │ │ │ └── jsonpb_gogo.go
│ │ │ ├── mapdefaults/
│ │ │ │ ├── Makefile
│ │ │ │ ├── combos/
│ │ │ │ │ ├── both/
│ │ │ │ │ │ ├── map.pb.go
│ │ │ │ │ │ └── map.proto
│ │ │ │ │ ├── marshaler/
│ │ │ │ │ │ ├── map.pb.go
│ │ │ │ │ │ └── map.proto
│ │ │ │ │ ├── neither/
│ │ │ │ │ │ ├── map.pb.go
│ │ │ │ │ │ └── map.proto
│ │ │ │ │ └── unmarshaler/
│ │ │ │ │ ├── map.pb.go
│ │ │ │ │ └── map.proto
│ │ │ │ ├── map.pb.go
│ │ │ │ ├── map.proto
│ │ │ │ ├── map_test.go.in
│ │ │ │ └── unknown_test.go.in
│ │ │ ├── mapsproto2/
│ │ │ │ ├── Makefile
│ │ │ │ ├── combos/
│ │ │ │ │ ├── both/
│ │ │ │ │ │ ├── mapsproto2.pb.go
│ │ │ │ │ │ └── mapsproto2.proto
│ │ │ │ │ ├── marshaler/
│ │ │ │ │ │ ├── mapsproto2.pb.go
│ │ │ │ │ │ └── mapsproto2.proto
│ │ │ │ │ ├── neither/
│ │ │ │ │ │ ├── mapsproto2.pb.go
│ │ │ │ │ │ └── mapsproto2.proto
│ │ │ │ │ └── unmarshaler/
│ │ │ │ │ ├── mapsproto2.pb.go
│ │ │ │ │ └── mapsproto2.proto
│ │ │ │ ├── doc.go
│ │ │ │ ├── header.proto
│ │ │ │ ├── mapsproto2.proto
│ │ │ │ └── mapsproto2_test.go.in
│ │ │ ├── merge/
│ │ │ │ ├── Makefile
│ │ │ │ ├── merge.pb.go
│ │ │ │ └── merge.proto
│ │ │ ├── moredefaults/
│ │ │ │ ├── Makefile
│ │ │ │ ├── md.pb.go
│ │ │ │ └── md.proto
│ │ │ ├── nopackage/
│ │ │ │ ├── Makefile
│ │ │ │ ├── nopackage.pb.go
│ │ │ │ └── nopackage.proto
│ │ │ ├── oneof/
│ │ │ │ ├── Makefile
│ │ │ │ ├── combos/
│ │ │ │ │ ├── both/
│ │ │ │ │ │ ├── one.pb.go
│ │ │ │ │ │ └── one.proto
│ │ │ │ │ ├── marshaler/
│ │ │ │ │ │ ├── one.pb.go
│ │ │ │ │ │ └── one.proto
│ │ │ │ │ ├── neither/
│ │ │ │ │ │ ├── one.pb.go
│ │ │ │ │ │ └── one.proto
│ │ │ │ │ └── unmarshaler/
│ │ │ │ │ ├── one.pb.go
│ │ │ │ │ └── one.proto
│ │ │ │ ├── doc.go
│ │ │ │ └── one.proto
│ │ │ ├── oneof3/
│ │ │ │ ├── Makefile
│ │ │ │ ├── combos/
│ │ │ │ │ ├── both/
│ │ │ │ │ │ ├── one.pb.go
│ │ │ │ │ │ └── one.proto
│ │ │ │ │ ├── marshaler/
│ │ │ │ │ │ ├── one.pb.go
│ │ │ │ │ │ └── one.proto
│ │ │ │ │ ├── neither/
│ │ │ │ │ │ ├── one.pb.go
│ │ │ │ │ │ └── one.proto
│ │ │ │ │ └── unmarshaler/
│ │ │ │ │ ├── one.pb.go
│ │ │ │ │ └── one.proto
│ │ │ │ ├── doc.go
│ │ │ │ └── one.proto
│ │ │ ├── oneofembed/
│ │ │ │ ├── Makefile
│ │ │ │ ├── oneofembed.pb.go
│ │ │ │ └── oneofembed.proto
│ │ │ ├── packed/
│ │ │ │ ├── Makefile
│ │ │ │ ├── doc.go
│ │ │ │ ├── packed.pb.go
│ │ │ │ └── packed.proto
│ │ │ ├── proto3extension/
│ │ │ │ ├── Makefile
│ │ │ │ ├── proto3ext.pb.go
│ │ │ │ └── proto3ext.proto
│ │ │ ├── protosize/
│ │ │ │ ├── Makefile
│ │ │ │ ├── protosize.pb.go
│ │ │ │ └── protosize.proto
│ │ │ ├── registration/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── Makefile
│ │ │ │ ├── registration.proto
│ │ │ │ └── registration_test.go.in
│ │ │ ├── required/
│ │ │ │ ├── Makefile
│ │ │ │ ├── requiredexample.pb.go
│ │ │ │ └── requiredexample.proto
│ │ │ ├── sizerconflict/
│ │ │ │ ├── doc.go
│ │ │ │ └── sizerconflict.proto
│ │ │ ├── sizeunderscore/
│ │ │ │ ├── Makefile
│ │ │ │ ├── sizeunderscore.pb.go
│ │ │ │ └── sizeunderscore.proto
│ │ │ ├── stdtypes/
│ │ │ │ ├── Makefile
│ │ │ │ ├── stdtypes.pb.go
│ │ │ │ └── stdtypes.proto
│ │ │ ├── t.go
│ │ │ ├── tags/
│ │ │ │ ├── Makefile
│ │ │ │ ├── doc.go
│ │ │ │ ├── tags.pb.go
│ │ │ │ └── tags.proto
│ │ │ ├── theproto3/
│ │ │ │ ├── Makefile
│ │ │ │ ├── combos/
│ │ │ │ │ ├── both/
│ │ │ │ │ │ ├── theproto3.pb.go
│ │ │ │ │ │ └── theproto3.proto
│ │ │ │ │ ├── marshaler/
│ │ │ │ │ │ ├── theproto3.pb.go
│ │ │ │ │ │ └── theproto3.proto
│ │ │ │ │ ├── neither/
│ │ │ │ │ │ ├── theproto3.pb.go
│ │ │ │ │ │ └── theproto3.proto
│ │ │ │ │ └── unmarshaler/
│ │ │ │ │ ├── theproto3.pb.go
│ │ │ │ │ └── theproto3.proto
│ │ │ │ ├── doc.go
│ │ │ │ ├── footer.proto
│ │ │ │ ├── header.proto
│ │ │ │ ├── maps.proto
│ │ │ │ ├── proto3_test.go.in
│ │ │ │ └── theproto3.proto
│ │ │ ├── thetest.pb.go
│ │ │ ├── thetest.proto
│ │ │ ├── typedecl/
│ │ │ │ ├── Makefile
│ │ │ │ ├── models.go
│ │ │ │ ├── typedecl.pb.go
│ │ │ │ └── typedecl.proto
│ │ │ ├── typedecl_all/
│ │ │ │ ├── Makefile
│ │ │ │ ├── models.go
│ │ │ │ ├── typedeclall.pb.go
│ │ │ │ └── typedeclall.proto
│ │ │ ├── typedeclimport/
│ │ │ │ ├── Makefile
│ │ │ │ ├── models.go
│ │ │ │ ├── subpkg/
│ │ │ │ │ ├── subpkg.pb.go
│ │ │ │ │ └── subpkg.proto
│ │ │ │ ├── typedeclimport.pb.go
│ │ │ │ └── typedeclimport.proto
│ │ │ ├── types/
│ │ │ │ ├── Makefile
│ │ │ │ ├── combos/
│ │ │ │ │ ├── both/
│ │ │ │ │ │ ├── types.pb.go
│ │ │ │ │ │ └── types.proto
│ │ │ │ │ ├── marshaler/
│ │ │ │ │ │ ├── types.pb.go
│ │ │ │ │ │ └── types.proto
│ │ │ │ │ ├── neither/
│ │ │ │ │ │ ├── types.pb.go
│ │ │ │ │ │ └── types.proto
│ │ │ │ │ └── unmarshaler/
│ │ │ │ │ ├── types.pb.go
│ │ │ │ │ └── types.proto
│ │ │ │ ├── types.proto
│ │ │ │ └── types_test.go.in
│ │ │ ├── unmarshalmerge/
│ │ │ │ ├── Makefile
│ │ │ │ ├── unmarshalmerge.pb.go
│ │ │ │ └── unmarshalmerge.proto
│ │ │ ├── unrecognized/
│ │ │ │ ├── Makefile
│ │ │ │ ├── unrecognized.pb.go
│ │ │ │ └── unrecognized.proto
│ │ │ ├── unrecognizedgroup/
│ │ │ │ ├── Makefile
│ │ │ │ ├── unrecognizedgroup.pb.go
│ │ │ │ └── unrecognizedgroup.proto
│ │ │ └── uuid.go
│ │ ├── types/
│ │ │ ├── any.go
│ │ │ ├── any.pb.go
│ │ │ ├── api.pb.go
│ │ │ ├── doc.go
│ │ │ ├── duration.go
│ │ │ ├── duration.pb.go
│ │ │ ├── duration_gogo.go
│ │ │ ├── empty.pb.go
│ │ │ ├── field_mask.pb.go
│ │ │ ├── source_context.pb.go
│ │ │ ├── struct.pb.go
│ │ │ ├── timestamp.go
│ │ │ ├── timestamp.pb.go
│ │ │ ├── timestamp_gogo.go
│ │ │ ├── type.pb.go
│ │ │ └── wrappers.pb.go
│ │ ├── vanity/
│ │ │ ├── command/
│ │ │ │ └── command.go
│ │ │ ├── enum.go
│ │ │ ├── field.go
│ │ │ ├── file.go
│ │ │ ├── foreach.go
│ │ │ ├── msg.go
│ │ │ └── test/
│ │ │ ├── Makefile
│ │ │ ├── doc.go
│ │ │ ├── fast/
│ │ │ │ ├── gogovanity.pb.go
│ │ │ │ ├── proto3.pb.go
│ │ │ │ └── vanity.pb.go
│ │ │ ├── faster/
│ │ │ │ ├── gogovanity.pb.go
│ │ │ │ ├── proto3.pb.go
│ │ │ │ └── vanity.pb.go
│ │ │ ├── gofast/
│ │ │ │ └── .gitignore
│ │ │ ├── gogovanity.proto
│ │ │ ├── proto3.proto
│ │ │ ├── slick/
│ │ │ │ ├── gogovanity.pb.go
│ │ │ │ ├── proto3.pb.go
│ │ │ │ └── vanity.pb.go
│ │ │ └── vanity.proto
│ │ └── version/
│ │ └── version.go
│ ├── golang/
│ │ └── protobuf/
│ │ ├── .github/
│ │ │ └── ISSUE_TEMPLATE/
│ │ │ ├── bug_report.md
│ │ │ ├── feature_request.md
│ │ │ └── question.md
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── conformance/
│ │ │ ├── Makefile
│ │ │ ├── conformance.go
│ │ │ ├── conformance.sh
│ │ │ ├── failure_list_go.txt
│ │ │ ├── internal/
│ │ │ │ └── conformance_proto/
│ │ │ │ ├── conformance.pb.go
│ │ │ │ └── conformance.proto
│ │ │ └── test.sh
│ │ ├── descriptor/
│ │ │ └── descriptor.go
│ │ ├── jsonpb/
│ │ │ ├── jsonpb.go
│ │ │ └── jsonpb_test_proto/
│ │ │ ├── more_test_objects.pb.go
│ │ │ ├── more_test_objects.proto
│ │ │ ├── test_objects.pb.go
│ │ │ └── test_objects.proto
│ │ ├── proto/
│ │ │ ├── clone.go
│ │ │ ├── decode.go
│ │ │ ├── discard.go
│ │ │ ├── encode.go
│ │ │ ├── equal.go
│ │ │ ├── extensions.go
│ │ │ ├── lib.go
│ │ │ ├── message_set.go
│ │ │ ├── pointer_reflect.go
│ │ │ ├── pointer_unsafe.go
│ │ │ ├── properties.go
│ │ │ ├── proto3_proto/
│ │ │ │ ├── proto3.pb.go
│ │ │ │ └── proto3.proto
│ │ │ ├── table_marshal.go
│ │ │ ├── table_merge.go
│ │ │ ├── table_unmarshal.go
│ │ │ ├── test_proto/
│ │ │ │ ├── test.pb.go
│ │ │ │ └── test.proto
│ │ │ ├── text.go
│ │ │ └── text_parser.go
│ │ ├── protoc-gen-go/
│ │ │ ├── descriptor/
│ │ │ │ ├── descriptor.pb.go
│ │ │ │ └── descriptor.proto
│ │ │ ├── doc.go
│ │ │ ├── generator/
│ │ │ │ ├── generator.go
│ │ │ │ └── internal/
│ │ │ │ └── remap/
│ │ │ │ └── remap.go
│ │ │ ├── grpc/
│ │ │ │ └── grpc.go
│ │ │ ├── link_grpc.go
│ │ │ ├── main.go
│ │ │ ├── plugin/
│ │ │ │ ├── plugin.pb.go
│ │ │ │ ├── plugin.pb.golden
│ │ │ │ └── plugin.proto
│ │ │ └── testdata/
│ │ │ ├── deprecated/
│ │ │ │ ├── deprecated.pb.go
│ │ │ │ └── deprecated.proto
│ │ │ ├── extension_base/
│ │ │ │ ├── extension_base.pb.go
│ │ │ │ └── extension_base.proto
│ │ │ ├── extension_extra/
│ │ │ │ ├── extension_extra.pb.go
│ │ │ │ └── extension_extra.proto
│ │ │ ├── extension_user/
│ │ │ │ ├── extension_user.pb.go
│ │ │ │ └── extension_user.proto
│ │ │ ├── grpc/
│ │ │ │ ├── grpc.pb.go
│ │ │ │ └── grpc.proto
│ │ │ ├── import_public/
│ │ │ │ ├── a.pb.go
│ │ │ │ ├── a.proto
│ │ │ │ ├── b.pb.go
│ │ │ │ ├── b.proto
│ │ │ │ └── sub/
│ │ │ │ ├── a.pb.go
│ │ │ │ ├── a.proto
│ │ │ │ ├── b.pb.go
│ │ │ │ └── b.proto
│ │ │ ├── imports/
│ │ │ │ ├── fmt/
│ │ │ │ │ ├── m.pb.go
│ │ │ │ │ └── m.proto
│ │ │ │ ├── test_a_1/
│ │ │ │ │ ├── m1.pb.go
│ │ │ │ │ ├── m1.proto
│ │ │ │ │ ├── m2.pb.go
│ │ │ │ │ └── m2.proto
│ │ │ │ ├── test_a_2/
│ │ │ │ │ ├── m3.pb.go
│ │ │ │ │ ├── m3.proto
│ │ │ │ │ ├── m4.pb.go
│ │ │ │ │ └── m4.proto
│ │ │ │ ├── test_b_1/
│ │ │ │ │ ├── m1.pb.go
│ │ │ │ │ ├── m1.proto
│ │ │ │ │ ├── m2.pb.go
│ │ │ │ │ └── m2.proto
│ │ │ │ ├── test_import_a1m1.pb.go
│ │ │ │ ├── test_import_a1m1.proto
│ │ │ │ ├── test_import_a1m2.pb.go
│ │ │ │ ├── test_import_a1m2.proto
│ │ │ │ ├── test_import_all.pb.go
│ │ │ │ └── test_import_all.proto
│ │ │ ├── multi/
│ │ │ │ ├── multi1.pb.go
│ │ │ │ ├── multi1.proto
│ │ │ │ ├── multi2.pb.go
│ │ │ │ ├── multi2.proto
│ │ │ │ ├── multi3.pb.go
│ │ │ │ └── multi3.proto
│ │ │ ├── my_test/
│ │ │ │ ├── test.pb.go
│ │ │ │ └── test.proto
│ │ │ └── proto3/
│ │ │ ├── proto3.pb.go
│ │ │ └── proto3.proto
│ │ ├── ptypes/
│ │ │ ├── any/
│ │ │ │ ├── any.pb.go
│ │ │ │ └── any.proto
│ │ │ ├── any.go
│ │ │ ├── doc.go
│ │ │ ├── duration/
│ │ │ │ ├── duration.pb.go
│ │ │ │ └── duration.proto
│ │ │ ├── duration.go
│ │ │ ├── empty/
│ │ │ │ ├── empty.pb.go
│ │ │ │ └── empty.proto
│ │ │ ├── struct/
│ │ │ │ ├── struct.pb.go
│ │ │ │ └── struct.proto
│ │ │ ├── timestamp/
│ │ │ │ ├── timestamp.pb.go
│ │ │ │ └── timestamp.proto
│ │ │ ├── timestamp.go
│ │ │ └── wrappers/
│ │ │ ├── wrappers.pb.go
│ │ │ └── wrappers.proto
│ │ └── regenerate.sh
│ ├── google/
│ │ ├── btree/
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── btree.go
│ │ │ └── btree_mem.go
│ │ └── gofuzz/
│ │ ├── .travis.yml
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── doc.go
│ │ └── fuzz.go
│ ├── googleapis/
│ │ └── gnostic/
│ │ ├── .gitignore
│ │ ├── .travis-install.sh
│ │ ├── .travis.yml
│ │ ├── COMPILE-PROTOS.sh
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── OpenAPIv2/
│ │ │ ├── OpenAPIv2.go
│ │ │ ├── OpenAPIv2.pb.go
│ │ │ ├── OpenAPIv2.proto
│ │ │ ├── README.md
│ │ │ └── openapi-2.0.json
│ │ ├── OpenAPIv3/
│ │ │ ├── OpenAPIv3.go
│ │ │ ├── OpenAPIv3.pb.go
│ │ │ ├── OpenAPIv3.proto
│ │ │ ├── README.md
│ │ │ ├── openapi-3.0.json
│ │ │ └── schema-generator/
│ │ │ ├── 3.0.0.md
│ │ │ ├── 3.0.1.md
│ │ │ ├── README.md
│ │ │ └── main.go
│ │ ├── README.md
│ │ ├── apps/
│ │ │ ├── disco/
│ │ │ │ ├── README.md
│ │ │ │ ├── list.go
│ │ │ │ ├── main.go
│ │ │ │ ├── openapiv2.go
│ │ │ │ └── openapiv3.go
│ │ │ ├── petstore-builder/
│ │ │ │ ├── README.md
│ │ │ │ ├── main.go
│ │ │ │ ├── petstore-v2.go
│ │ │ │ └── petstore-v3.go
│ │ │ ├── report/
│ │ │ │ ├── README.md
│ │ │ │ └── main.go
│ │ │ └── report-messages/
│ │ │ ├── README.md
│ │ │ └── main.go
│ │ ├── compiler/
│ │ │ ├── README.md
│ │ │ ├── context.go
│ │ │ ├── error.go
│ │ │ ├── extension-handler.go
│ │ │ ├── helpers.go
│ │ │ ├── main.go
│ │ │ └── reader.go
│ │ ├── discovery/
│ │ │ ├── README.md
│ │ │ ├── discovery.go
│ │ │ ├── discovery.json
│ │ │ ├── discovery.pb.go
│ │ │ ├── discovery.proto
│ │ │ └── discovery.yaml
│ │ ├── examples/
│ │ │ ├── README.md
│ │ │ ├── errors/
│ │ │ │ ├── petstore-badproperties.yaml
│ │ │ │ ├── petstore-missingversion.yaml
│ │ │ │ └── petstore-unresolvedrefs.yaml
│ │ │ ├── v2.0/
│ │ │ │ ├── json/
│ │ │ │ │ ├── api-with-examples.json
│ │ │ │ │ ├── petstore-expanded.json
│ │ │ │ │ ├── petstore-minimal.json
│ │ │ │ │ ├── petstore-separate/
│ │ │ │ │ │ ├── common/
│ │ │ │ │ │ │ └── Error.json
│ │ │ │ │ │ └── spec/
│ │ │ │ │ │ ├── NewPet.json
│ │ │ │ │ │ ├── Pet.json
│ │ │ │ │ │ ├── parameters.json
│ │ │ │ │ │ └── swagger.json
│ │ │ │ │ ├── petstore-simple.json
│ │ │ │ │ ├── petstore-with-external-docs.json
│ │ │ │ │ ├── petstore.json
│ │ │ │ │ └── uber.json
│ │ │ │ └── yaml/
│ │ │ │ ├── api-with-examples.yaml
│ │ │ │ ├── petstore-expanded.yaml
│ │ │ │ ├── petstore-minimal.yaml
│ │ │ │ ├── petstore-separate/
│ │ │ │ │ ├── common/
│ │ │ │ │ │ └── Error.yaml
│ │ │ │ │ └── spec/
│ │ │ │ │ ├── NewPet.yaml
│ │ │ │ │ ├── Pet.yaml
│ │ │ │ │ ├── parameters.yaml
│ │ │ │ │ ├── swagger.text
│ │ │ │ │ └── swagger.yaml
│ │ │ │ ├── petstore-simple.yaml
│ │ │ │ ├── petstore-with-external-docs.yaml
│ │ │ │ ├── petstore.yaml
│ │ │ │ └── uber.yaml
│ │ │ └── v3.0/
│ │ │ ├── json/
│ │ │ │ └── petstore.json
│ │ │ └── yaml/
│ │ │ └── petstore.yaml
│ │ ├── extensions/
│ │ │ ├── COMPILE-EXTENSION.sh
│ │ │ ├── README.md
│ │ │ ├── extension.pb.go
│ │ │ ├── extension.proto
│ │ │ ├── extensions.go
│ │ │ └── sample/
│ │ │ ├── Makefile
│ │ │ ├── x-sampleone.json
│ │ │ └── x-sampletwo.json
│ │ ├── generate-gnostic/
│ │ │ ├── README.md
│ │ │ ├── domain.go
│ │ │ ├── generate-compiler.go
│ │ │ ├── generate-extension.go
│ │ │ ├── generate-proto.go
│ │ │ ├── helpers.go
│ │ │ ├── main.go
│ │ │ ├── test/
│ │ │ │ ├── errors/
│ │ │ │ │ ├── x-extension-name-collision.errors
│ │ │ │ │ └── x-unsupportedprimitives.errors
│ │ │ │ ├── x-extension-name-collision.json
│ │ │ │ └── x-unsupportedprimitives.json
│ │ │ └── types.go
│ │ ├── gnostic.go
│ │ ├── jsonschema/
│ │ │ ├── README.md
│ │ │ ├── display.go
│ │ │ ├── models.go
│ │ │ ├── operations.go
│ │ │ ├── reader.go
│ │ │ ├── schema.json
│ │ │ └── writer.go
│ │ ├── jsonwriter/
│ │ │ ├── README.md
│ │ │ └── writer.go
│ │ ├── linters/
│ │ │ ├── README.md
│ │ │ ├── go/
│ │ │ │ ├── gnostic-lint-descriptions/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── linter_v2.go
│ │ │ │ │ ├── linter_v3.go
│ │ │ │ │ └── main.go
│ │ │ │ └── gnostic-lint-paths/
│ │ │ │ ├── README.md
│ │ │ │ └── main.go
│ │ │ ├── node/
│ │ │ │ ├── gnostic-lint-operations/
│ │ │ │ │ ├── Makefile
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── gnostic-lint-operations.js
│ │ │ │ └── gnostic-lint-responses/
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── gnostic-lint-responses.js
│ │ │ │ └── package.json
│ │ │ └── swift/
│ │ │ └── gnostic-lint-responses-swift/
│ │ │ ├── Makefile
│ │ │ ├── Package.swift
│ │ │ ├── README.md
│ │ │ ├── Sources/
│ │ │ │ └── gnostic-lint-responses-swift/
│ │ │ │ ├── io.swift
│ │ │ │ └── main.swift
│ │ │ └── compile-protos
│ │ ├── plugins/
│ │ │ ├── README.md
│ │ │ ├── environment.go
│ │ │ ├── gnostic-analyze/
│ │ │ │ ├── README.md
│ │ │ │ ├── main.go
│ │ │ │ ├── statistics/
│ │ │ │ │ ├── statsv2.go
│ │ │ │ │ └── statsv3.go
│ │ │ │ └── summarize/
│ │ │ │ └── main.go
│ │ │ ├── gnostic-go-generator/
│ │ │ │ ├── Makefile
│ │ │ │ ├── README.md
│ │ │ │ ├── examples/
│ │ │ │ │ ├── googleauth/
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ └── googleauth.go
│ │ │ │ │ ├── v2.0/
│ │ │ │ │ │ ├── apis_guru/
│ │ │ │ │ │ │ ├── Makefile
│ │ │ │ │ │ │ ├── main.go
│ │ │ │ │ │ │ └── swagger.yaml
│ │ │ │ │ │ ├── bookstore/
│ │ │ │ │ │ │ ├── Makefile
│ │ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ │ ├── bookstore/
│ │ │ │ │ │ │ │ └── bookstore.go
│ │ │ │ │ │ │ ├── bookstore.json
│ │ │ │ │ │ │ └── service/
│ │ │ │ │ │ │ ├── app.yaml
│ │ │ │ │ │ │ ├── init.go
│ │ │ │ │ │ │ ├── main.go
│ │ │ │ │ │ │ └── service.go
│ │ │ │ │ │ ├── sample/
│ │ │ │ │ │ │ ├── Makefile
│ │ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ │ ├── sample/
│ │ │ │ │ │ │ │ └── sample.go
│ │ │ │ │ │ │ ├── sample.yaml
│ │ │ │ │ │ │ └── service/
│ │ │ │ │ │ │ ├── app.yaml
│ │ │ │ │ │ │ ├── init.go
│ │ │ │ │ │ │ ├── main.go
│ │ │ │ │ │ │ └── service.go
│ │ │ │ │ │ └── xkcd/
│ │ │ │ │ │ ├── Makefile
│ │ │ │ │ │ ├── main.go
│ │ │ │ │ │ ├── swagger.json
│ │ │ │ │ │ └── xkcd/
│ │ │ │ │ │ └── xkcd.go
│ │ │ │ │ └── v3.0/
│ │ │ │ │ ├── bookstore/
│ │ │ │ │ │ ├── Makefile
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── bookstore/
│ │ │ │ │ │ │ └── bookstore.go
│ │ │ │ │ │ ├── bookstore.json
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── app.yaml
│ │ │ │ │ │ ├── init.go
│ │ │ │ │ │ ├── main.go
│ │ │ │ │ │ └── service.go
│ │ │ │ │ └── urlshortener/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── urlshortener/
│ │ │ │ │ └── urlshortener.go
│ │ │ │ ├── goimports.go
│ │ │ │ ├── language.go
│ │ │ │ ├── linewriter.go
│ │ │ │ ├── main.go
│ │ │ │ ├── render_client.go
│ │ │ │ ├── render_constants.go
│ │ │ │ ├── render_provider.go
│ │ │ │ ├── render_server.go
│ │ │ │ ├── render_types.go
│ │ │ │ └── renderer.go
│ │ │ ├── gnostic-summary/
│ │ │ │ ├── README.md
│ │ │ │ └── main.go
│ │ │ ├── gnostic-swift-generator/
│ │ │ │ ├── Makefile
│ │ │ │ ├── Package.swift
│ │ │ │ ├── README.md
│ │ │ │ ├── Sources/
│ │ │ │ │ ├── Gnostic/
│ │ │ │ │ │ ├── OpenAPIv2.pb.swift
│ │ │ │ │ │ ├── OpenAPIv3.pb.swift
│ │ │ │ │ │ ├── discovery.pb.swift
│ │ │ │ │ │ ├── plugin.pb.swift
│ │ │ │ │ │ └── surface.pb.swift
│ │ │ │ │ └── gnostic-swift-generator/
│ │ │ │ │ ├── RenderClient.swift
│ │ │ │ │ ├── RenderFetch.swift
│ │ │ │ │ ├── RenderServer.swift
│ │ │ │ │ ├── RenderTypes.swift
│ │ │ │ │ ├── Renderer.swift
│ │ │ │ │ ├── helpers.swift
│ │ │ │ │ ├── io.swift
│ │ │ │ │ └── main.swift
│ │ │ │ ├── compile-protos
│ │ │ │ └── examples/
│ │ │ │ └── bookstore/
│ │ │ │ ├── Makefile
│ │ │ │ ├── Package.swift
│ │ │ │ ├── README.md
│ │ │ │ ├── Sources/
│ │ │ │ │ └── Server/
│ │ │ │ │ └── main.swift
│ │ │ │ ├── Tests/
│ │ │ │ │ ├── BookstoreTests/
│ │ │ │ │ │ └── BookstoreTests.swift
│ │ │ │ │ └── LinuxMain.swift
│ │ │ │ └── bookstore.json
│ │ │ ├── gnostic-swift-sample/
│ │ │ │ ├── Makefile
│ │ │ │ ├── Package.swift
│ │ │ │ ├── Sources/
│ │ │ │ │ ├── Gnostic/
│ │ │ │ │ │ ├── OpenAPIv2.pb.swift
│ │ │ │ │ │ ├── OpenAPIv3.pb.swift
│ │ │ │ │ │ ├── discovery.pb.swift
│ │ │ │ │ │ ├── plugin.pb.swift
│ │ │ │ │ │ └── surface.pb.swift
│ │ │ │ │ └── gnostic-swift-sample/
│ │ │ │ │ ├── io.swift
│ │ │ │ │ └── main.swift
│ │ │ │ └── compile-protos
│ │ │ ├── plugin.pb.go
│ │ │ └── plugin.proto
│ │ ├── printer/
│ │ │ ├── README.md
│ │ │ └── code.go
│ │ ├── surface/
│ │ │ ├── README.md
│ │ │ ├── field.go
│ │ │ ├── model.go
│ │ │ ├── model_openapiv2.go
│ │ │ ├── model_openapiv3.go
│ │ │ ├── surface.pb.go
│ │ │ ├── surface.proto
│ │ │ └── type.go
│ │ ├── test/
│ │ │ ├── README.md
│ │ │ ├── errors/
│ │ │ │ ├── invalid-plugin-invocation.errors
│ │ │ │ ├── petstore-badproperties.errors
│ │ │ │ ├── petstore-missingversion.errors
│ │ │ │ └── petstore-unresolvedrefs.errors
│ │ │ ├── library-example-with-ext.json
│ │ │ ├── library-example-with-ext.text.out
│ │ │ ├── v2.0/
│ │ │ │ ├── petstore.text
│ │ │ │ └── yaml/
│ │ │ │ ├── petstore-separate/
│ │ │ │ │ └── spec/
│ │ │ │ │ └── swagger.text
│ │ │ │ └── sample-petstore.out
│ │ │ └── v3.0/
│ │ │ └── petstore.text
│ │ └── tools/
│ │ ├── README.md
│ │ ├── format-schema/
│ │ │ └── main.go
│ │ └── j2y2j/
│ │ └── main.go
│ ├── gravitational/
│ │ └── trace/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── errors.go
│ │ ├── httplib.go
│ │ ├── log.go
│ │ ├── trace.go
│ │ ├── trail/
│ │ │ └── trail.go
│ │ └── udphook.go
│ ├── gregjones/
│ │ └── httpcache/
│ │ ├── .travis.yml
│ │ ├── LICENSE.txt
│ │ ├── README.md
│ │ ├── diskcache/
│ │ │ └── diskcache.go
│ │ ├── httpcache.go
│ │ ├── leveldbcache/
│ │ │ └── leveldbcache.go
│ │ ├── memcache/
│ │ │ ├── appengine.go
│ │ │ └── memcache.go
│ │ └── redis/
│ │ └── redis.go
│ ├── hashicorp/
│ │ └── golang-lru/
│ │ ├── .gitignore
│ │ ├── 2q.go
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── arc.go
│ │ ├── doc.go
│ │ ├── go.mod
│ │ ├── lru.go
│ │ └── simplelru/
│ │ ├── lru.go
│ │ └── lru_interface.go
│ ├── imdario/
│ │ └── mergo/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── CODE_OF_CONDUCT.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── map.go
│ │ ├── merge.go
│ │ ├── mergo.go
│ │ └── testdata/
│ │ ├── license.yml
│ │ └── thing.yml
│ ├── inconshreveable/
│ │ └── mousetrap/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── trap_others.go
│ │ ├── trap_windows.go
│ │ └── trap_windows_1.4.go
│ ├── jonboulle/
│ │ └── clockwork/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── clockwork.go
│ ├── konsorten/
│ │ └── go-windows-terminal-sequences/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── go.mod
│ │ └── sequences.go
│ ├── magefile/
│ │ └── mage/
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── .goreleaser.yml
│ │ ├── .travis.yml
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bootstrap.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── mage/
│ │ │ ├── command_string.go
│ │ │ ├── magefile_tmpl.go
│ │ │ ├── main.go
│ │ │ ├── template.go
│ │ │ └── testdata/
│ │ │ ├── alias/
│ │ │ │ └── magefile.go
│ │ │ ├── command.go
│ │ │ ├── context/
│ │ │ │ └── context.go
│ │ │ ├── error.go
│ │ │ ├── func.go
│ │ │ ├── invalid_alias/
│ │ │ │ └── magefile.go
│ │ │ ├── keep_flag/
│ │ │ │ └── magefile.go
│ │ │ ├── list/
│ │ │ │ └── command.go
│ │ │ ├── main.go
│ │ │ ├── mixed_lib_files/
│ │ │ │ ├── lib.go
│ │ │ │ ├── mage_helpers.go
│ │ │ │ └── magefile.go
│ │ │ ├── mixed_main_files/
│ │ │ │ ├── mage_helpers.go
│ │ │ │ ├── magefile.go
│ │ │ │ └── main.go
│ │ │ ├── namespaces/
│ │ │ │ └── magefile.go
│ │ │ ├── no_default/
│ │ │ │ └── magefile.go
│ │ │ ├── onlyStdLib/
│ │ │ │ └── command.go
│ │ │ ├── panic.go
│ │ │ ├── setdir/
│ │ │ │ └── setdir.go
│ │ │ └── transitiveDeps/
│ │ │ ├── dep/
│ │ │ │ ├── cat.notgo
│ │ │ │ └── dog.go
│ │ │ └── magefile.go
│ │ ├── magefile.go
│ │ ├── main.go
│ │ ├── mg/
│ │ │ ├── deps.go
│ │ │ ├── errors.go
│ │ │ └── runtime.go
│ │ ├── parse/
│ │ │ ├── parse.go
│ │ │ └── testdata/
│ │ │ ├── alias.go
│ │ │ ├── command.go
│ │ │ ├── func.go
│ │ │ ├── repeating_synopsis.go
│ │ │ ├── subcommand_1.9.go
│ │ │ └── subcommands.go
│ │ ├── sh/
│ │ │ ├── cmd.go
│ │ │ └── helpers.go
│ │ ├── site/
│ │ │ ├── archetypes/
│ │ │ │ ├── blog.md
│ │ │ │ └── default.md
│ │ │ ├── config.toml
│ │ │ ├── content/
│ │ │ │ ├── blog/
│ │ │ │ │ ├── _index.en.md
│ │ │ │ │ ├── mage-in-ci.md
│ │ │ │ │ ├── on-release-versions.md
│ │ │ │ │ ├── release-v1.3.0.md
│ │ │ │ │ └── release-v1.4.0.md
│ │ │ │ ├── dependencies/
│ │ │ │ │ └── _index.en.md
│ │ │ │ ├── environment/
│ │ │ │ │ └── _index.en.md
│ │ │ │ ├── filesources/
│ │ │ │ │ └── _index.en.md
│ │ │ │ ├── howitworks/
│ │ │ │ │ └── _index.en.md
│ │ │ │ ├── index.md
│ │ │ │ ├── libraries/
│ │ │ │ │ └── _index.en.md
│ │ │ │ ├── magefiles/
│ │ │ │ │ └── _index.en.md
│ │ │ │ ├── targets/
│ │ │ │ │ └── _index.en.md
│ │ │ │ └── zeroInstall/
│ │ │ │ └── _index.en.md
│ │ │ ├── layouts/
│ │ │ │ ├── blog/
│ │ │ │ │ └── list.html
│ │ │ │ └── partials/
│ │ │ │ ├── favicon.html
│ │ │ │ ├── header.html
│ │ │ │ └── logo.html
│ │ │ ├── static/
│ │ │ │ └── css/
│ │ │ │ └── overrides.css
│ │ │ └── themes/
│ │ │ └── learn/
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE.md
│ │ │ ├── README.md
│ │ │ ├── archetypes/
│ │ │ │ ├── chapter.md
│ │ │ │ └── default.md
│ │ │ ├── exampleSite/
│ │ │ │ ├── LICENSE.md
│ │ │ │ ├── README.md
│ │ │ │ ├── config.toml
│ │ │ │ ├── content/
│ │ │ │ │ ├── _index.en.md
│ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ ├── basics/
│ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ ├── configuration/
│ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ └── _index.fr.md
│ │ │ │ │ │ ├── installation/
│ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ └── _index.fr.md
│ │ │ │ │ │ └── requirements/
│ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ └── _index.fr.md
│ │ │ │ │ ├── cont/
│ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ ├── archetypes.en.md
│ │ │ │ │ │ ├── archetypes.fr.md
│ │ │ │ │ │ ├── i18n/
│ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ └── _index.fr.md
│ │ │ │ │ │ ├── markdown.en.md
│ │ │ │ │ │ ├── markdown.fr.md
│ │ │ │ │ │ ├── menushortcuts.en.md
│ │ │ │ │ │ ├── menushortcuts.fr.md
│ │ │ │ │ │ └── pages/
│ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ └── _index.fr.md
│ │ │ │ │ ├── credits.en.md
│ │ │ │ │ ├── credits.fr.md
│ │ │ │ │ ├── shortcodes/
│ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ ├── attachments.en.md
│ │ │ │ │ │ ├── attachments.fr.md
│ │ │ │ │ │ ├── button.en.md
│ │ │ │ │ │ ├── button.fr.md
│ │ │ │ │ │ ├── children/
│ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ │ ├── children-1/
│ │ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ │ │ └── children-1-1/
│ │ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ │ │ └── children-1-1-1/
│ │ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ │ │ └── children-1-1-1-1/
│ │ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ │ │ └── children-1-1-1-1-1/
│ │ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ │ └── _index.fr.md
│ │ │ │ │ │ │ ├── children-2/
│ │ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ │ ├── _index.fr.md
│ │ │ │ │ │ │ │ ├── test3.en.md
│ │ │ │ │ │ │ │ └── test3.fr.md
│ │ │ │ │ │ │ ├── children-3/
│ │ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ │ └── _index.fr.md
│ │ │ │ │ │ │ ├── children-4/
│ │ │ │ │ │ │ │ ├── _index.en.md
│ │ │ │ │ │ │ │ └── _index.fr.md
│ │ │ │ │ │ │ ├── test.en.md
│ │ │ │ │ │ │ └── test.fr.md
│ │ │ │ │ │ ├── expand.en.md
│ │ │ │ │ │ ├── expand.fr.md
│ │ │ │ │ │ ├── mermaid.en.md
│ │ │ │ │ │ ├── mermaid.fr.md
│ │ │ │ │ │ ├── notice.en.md
│ │ │ │ │ │ └── notice.fr.md
│ │ │ │ │ ├── showcase.en.md
│ │ │ │ │ └── showcase.fr.md
│ │ │ │ ├── layouts/
│ │ │ │ │ ├── partials/
│ │ │ │ │ │ ├── logo.html
│ │ │ │ │ │ └── menu-footer.html
│ │ │ │ │ └── shortcodes/
│ │ │ │ │ └── ghcontributors.html
│ │ │ │ └── static/
│ │ │ │ └── css/
│ │ │ │ └── theme-mine.css
│ │ │ ├── i18n/
│ │ │ │ ├── en.toml
│ │ │ │ └── fr.toml
│ │ │ ├── layouts/
│ │ │ │ ├── 404.html
│ │ │ │ ├── _default/
│ │ │ │ │ ├── list.html
│ │ │ │ │ └── single.html
│ │ │ │ ├── index.html
│ │ │ │ ├── index.json
│ │ │ │ ├── partials/
│ │ │ │ │ ├── custom-footer.html
│ │ │ │ │ ├── custom-header.html
│ │ │ │ │ ├── favicon.html
│ │ │ │ │ ├── footer.html
│ │ │ │ │ ├── header.html
│ │ │ │ │ ├── logo.html
│ │ │ │ │ ├── menu-footer.html
│ │ │ │ │ ├── menu.html
│ │ │ │ │ ├── meta.html
│ │ │ │ │ ├── search.html
│ │ │ │ │ └── toc.html
│ │ │ │ ├── post/
│ │ │ │ │ └── single.html
│ │ │ │ └── shortcodes/
│ │ │ │ ├── attachments.html
│ │ │ │ ├── button.html
│ │ │ │ ├── children.html
│ │ │ │ ├── expand.html
│ │ │ │ ├── mermaid.html
│ │ │ │ ├── notice.html
│ │ │ │ └── relref.html
│ │ │ ├── static/
│ │ │ │ ├── css/
│ │ │ │ │ ├── horsey.css
│ │ │ │ │ ├── hugo-theme.css
│ │ │ │ │ ├── hybrid.css
│ │ │ │ │ ├── nucleus.css
│ │ │ │ │ ├── theme-blue.css
│ │ │ │ │ ├── theme-green.css
│ │ │ │ │ ├── theme-red.css
│ │ │ │ │ └── theme.css
│ │ │ │ ├── fonts/
│ │ │ │ │ └── FontAwesome.otf
│ │ │ │ ├── js/
│ │ │ │ │ ├── highlight.pack.js
│ │ │ │ │ ├── horsey.js
│ │ │ │ │ ├── hugo-learn.js
│ │ │ │ │ ├── learn.js
│ │ │ │ │ ├── modernizr.custom.71422.js
│ │ │ │ │ └── search.js
│ │ │ │ └── mermaid/
│ │ │ │ ├── mermaid.css
│ │ │ │ ├── mermaid.dark.css
│ │ │ │ ├── mermaid.forest.css
│ │ │ │ └── mermaid.js
│ │ │ ├── theme.toml
│ │ │ └── wercker.yml
│ │ └── target/
│ │ └── target.go
│ ├── modern-go/
│ │ └── concurrent/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── executor.go
│ │ ├── go_above_19.go
│ │ ├── go_below_19.go
│ │ ├── log.go
│ │ ├── test.sh
│ │ └── unbounded_executor.go
│ ├── peterbourgon/
│ │ └── diskv/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── compression.go
│ │ ├── diskv.go
│ │ ├── examples/
│ │ │ ├── content-addressable-store/
│ │ │ │ └── cas.go
│ │ │ └── super-simple-store/
│ │ │ └── super-simple-store.go
│ │ └── index.go
│ ├── pmezard/
│ │ └── go-difflib/
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── difflib/
│ │ └── difflib.go
│ ├── spf13/
│ │ ├── cobra/
│ │ │ ├── .circleci/
│ │ │ │ └── config.yml
│ │ │ ├── .gitignore
│ │ │ ├── .mailmap
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE.txt
│ │ │ ├── README.md
│ │ │ ├── args.go
│ │ │ ├── bash_completions.go
│ │ │ ├── bash_completions.md
│ │ │ ├── cobra/
│ │ │ │ ├── README.md
│ │ │ │ ├── cmd/
│ │ │ │ │ ├── add.go
│ │ │ │ │ ├── helpers.go
│ │ │ │ │ ├── init.go
│ │ │ │ │ ├── license_agpl.go
│ │ │ │ │ ├── license_apache_2.go
│ │ │ │ │ ├── license_bsd_clause_2.go
│ │ │ │ │ ├── license_bsd_clause_3.go
│ │ │ │ │ ├── license_gpl_2.go
│ │ │ │ │ ├── license_gpl_3.go
│ │ │ │ │ ├── license_lgpl.go
│ │ │ │ │ ├── license_mit.go
│ │ │ │ │ ├── licenses.go
│ │ │ │ │ ├── project.go
│ │ │ │ │ ├── root.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ ├── LICENSE.golden
│ │ │ │ │ ├── main.go.golden
│ │ │ │ │ ├── root.go.golden
│ │ │ │ │ └── test.go.golden
│ │ │ │ └── main.go
│ │ │ ├── cobra.go
│ │ │ ├── command.go
│ │ │ ├── command_notwin.go
│ │ │ ├── command_win.go
│ │ │ ├── doc/
│ │ │ │ ├── man_docs.go
│ │ │ │ ├── man_docs.md
│ │ │ │ ├── md_docs.go
│ │ │ │ ├── md_docs.md
│ │ │ │ ├── rest_docs.go
│ │ │ │ ├── rest_docs.md
│ │ │ │ ├── util.go
│ │ │ │ ├── yaml_docs.go
│ │ │ │ └── yaml_docs.md
│ │ │ └── zsh_completions.go
│ │ └── pflag/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bool.go
│ │ ├── bool_slice.go
│ │ ├── bytes.go
│ │ ├── count.go
│ │ ├── duration.go
│ │ ├── duration_slice.go
│ │ ├── flag.go
│ │ ├── float32.go
│ │ ├── float64.go
│ │ ├── golangflag.go
│ │ ├── int.go
│ │ ├── int16.go
│ │ ├── int32.go
│ │ ├── int64.go
│ │ ├── int8.go
│ │ ├── int_slice.go
│ │ ├── ip.go
│ │ ├── ip_slice.go
│ │ ├── ipmask.go
│ │ ├── ipnet.go
│ │ ├── string.go
│ │ ├── string_array.go
│ │ ├── string_slice.go
│ │ ├── string_to_int.go
│ │ ├── string_to_string.go
│ │ ├── uint.go
│ │ ├── uint16.go
│ │ ├── uint32.go
│ │ ├── uint64.go
│ │ ├── uint8.go
│ │ ├── uint_slice.go
│ │ └── verify/
│ │ ├── all.sh
│ │ ├── gofmt.sh
│ │ └── golint.sh
│ ├── stretchr/
│ │ └── testify/
│ │ ├── .gitignore
│ │ ├── .travis.gofmt.sh
│ │ ├── .travis.gogenerate.sh
│ │ ├── .travis.govet.sh
│ │ ├── .travis.yml
│ │ ├── Gopkg.toml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── _codegen/
│ │ │ └── main.go
│ │ ├── assert/
│ │ │ ├── assertion_format.go
│ │ │ ├── assertion_format.go.tmpl
│ │ │ ├── assertion_forward.go
│ │ │ ├── assertion_forward.go.tmpl
│ │ │ ├── assertion_order.go
│ │ │ ├── assertions.go
│ │ │ ├── doc.go
│ │ │ ├── errors.go
│ │ │ ├── forward_assertions.go
│ │ │ └── http_assertions.go
│ │ ├── doc.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── http/
│ │ │ ├── doc.go
│ │ │ ├── test_response_writer.go
│ │ │ └── test_round_tripper.go
│ │ ├── mock/
│ │ │ ├── doc.go
│ │ │ └── mock.go
│ │ ├── require/
│ │ │ ├── doc.go
│ │ │ ├── forward_requirements.go
│ │ │ ├── require.go
│ │ │ ├── require.go.tmpl
│ │ │ ├── require_forward.go
│ │ │ ├── require_forward.go.tmpl
│ │ │ └── requirements.go
│ │ └── suite/
│ │ ├── doc.go
│ │ ├── interfaces.go
│ │ └── suite.go
│ └── vishvananda/
│ ├── netlink/
│ │ ├── .travis.yml
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── addr.go
│ │ ├── addr_linux.go
│ │ ├── bpf_linux.go
│ │ ├── bridge_linux.go
│ │ ├── class.go
│ │ ├── class_linux.go
│ │ ├── conntrack_linux.go
│ │ ├── conntrack_unspecified.go
│ │ ├── filter.go
│ │ ├── filter_linux.go
│ │ ├── fou.go
│ │ ├── fou_linux.go
│ │ ├── fou_unspecified.go
│ │ ├── genetlink_linux.go
│ │ ├── genetlink_unspecified.go
│ │ ├── gtp_linux.go
│ │ ├── handle_linux.go
│ │ ├── handle_unspecified.go
│ │ ├── ioctl_linux.go
│ │ ├── link.go
│ │ ├── link_linux.go
│ │ ├── link_tuntap_linux.go
│ │ ├── neigh.go
│ │ ├── neigh_linux.go
│ │ ├── netlink.go
│ │ ├── netlink_linux.go
│ │ ├── netlink_unspecified.go
│ │ ├── nl/
│ │ │ ├── addr_linux.go
│ │ │ ├── bridge_linux.go
│ │ │ ├── conntrack_linux.go
│ │ │ ├── genetlink_linux.go
│ │ │ ├── link_linux.go
│ │ │ ├── mpls_linux.go
│ │ │ ├── nl_linux.go
│ │ │ ├── nl_unspecified.go
│ │ │ ├── route_linux.go
│ │ │ ├── seg6_linux.go
│ │ │ ├── syscall.go
│ │ │ ├── tc_linux.go
│ │ │ ├── xfrm_linux.go
│ │ │ ├── xfrm_monitor_linux.go
│ │ │ ├── xfrm_policy_linux.go
│ │ │ └── xfrm_state_linux.go
│ │ ├── order.go
│ │ ├── protinfo.go
│ │ ├── protinfo_linux.go
│ │ ├── qdisc.go
│ │ ├── qdisc_linux.go
│ │ ├── route.go
│ │ ├── route_linux.go
│ │ ├── route_unspecified.go
│ │ ├── rule.go
│ │ ├── rule_linux.go
│ │ ├── socket.go
│ │ ├── socket_linux.go
│ │ ├── xfrm.go
│ │ ├── xfrm_monitor_linux.go
│ │ ├── xfrm_policy.go
│ │ ├── xfrm_policy_linux.go
│ │ ├── xfrm_state.go
│ │ └── xfrm_state_linux.go
│ └── netns/
│ ├── LICENSE
│ ├── README.md
│ ├── netns.go
│ ├── netns_linux.go
│ └── netns_unspecified.go
├── golang.org/
│ └── x/
│ ├── crypto/
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── README.md
│ │ ├── acme/
│ │ │ ├── acme.go
│ │ │ ├── autocert/
│ │ │ │ ├── autocert.go
│ │ │ │ ├── cache.go
│ │ │ │ ├── internal/
│ │ │ │ │ └── acmetest/
│ │ │ │ │ └── ca.go
│ │ │ │ ├── listener.go
│ │ │ │ └── renewal.go
│ │ │ ├── http.go
│ │ │ ├── jws.go
│ │ │ └── types.go
│ │ ├── argon2/
│ │ │ ├── argon2.go
│ │ │ ├── blake2b.go
│ │ │ ├── blamka_amd64.go
│ │ │ ├── blamka_amd64.s
│ │ │ ├── blamka_generic.go
│ │ │ └── blamka_ref.go
│ │ ├── bcrypt/
│ │ │ ├── base64.go
│ │ │ └── bcrypt.go
│ │ ├── blake2b/
│ │ │ ├── blake2b.go
│ │ │ ├── blake2bAVX2_amd64.go
│ │ │ ├── blake2bAVX2_amd64.s
│ │ │ ├── blake2b_amd64.go
│ │ │ ├── blake2b_amd64.s
│ │ │ ├── blake2b_generic.go
│ │ │ ├── blake2b_ref.go
│ │ │ ├── blake2x.go
│ │ │ └── register.go
│ │ ├── blake2s/
│ │ │ ├── blake2s.go
│ │ │ ├── blake2s_386.go
│ │ │ ├── blake2s_386.s
│ │ │ ├── blake2s_amd64.go
│ │ │ ├── blake2s_amd64.s
│ │ │ ├── blake2s_generic.go
│ │ │ ├── blake2s_ref.go
│ │ │ ├── blake2x.go
│ │ │ └── register.go
│ │ ├── blowfish/
│ │ │ ├── block.go
│ │ │ ├── cipher.go
│ │ │ └── const.go
│ │ ├── bn256/
│ │ │ ├── bn256.go
│ │ │ ├── constants.go
│ │ │ ├── curve.go
│ │ │ ├── gfp12.go
│ │ │ ├── gfp2.go
│ │ │ ├── gfp6.go
│ │ │ ├── optate.go
│ │ │ └── twist.go
│ │ ├── cast5/
│ │ │ └── cast5.go
│ │ ├── chacha20poly1305/
│ │ │ ├── chacha20poly1305.go
│ │ │ ├── chacha20poly1305_amd64.go
│ │ │ ├── chacha20poly1305_amd64.s
│ │ │ ├── chacha20poly1305_generic.go
│ │ │ ├── chacha20poly1305_noasm.go
│ │ │ └── xchacha20poly1305.go
│ │ ├── codereview.cfg
│ │ ├── cryptobyte/
│ │ │ ├── asn1/
│ │ │ │ └── asn1.go
│ │ │ ├── asn1.go
│ │ │ ├── builder.go
│ │ │ └── string.go
│ │ ├── curve25519/
│ │ │ ├── const_amd64.h
│ │ │ ├── const_amd64.s
│ │ │ ├── cswap_amd64.s
│ │ │ ├── curve25519.go
│ │ │ ├── doc.go
│ │ │ ├── freeze_amd64.s
│ │ │ ├── ladderstep_amd64.s
│ │ │ ├── mont25519_amd64.go
│ │ │ ├── mul_amd64.s
│ │ │ └── square_amd64.s
│ │ ├── ed25519/
│ │ │ ├── ed25519.go
│ │ │ └── internal/
│ │ │ └── edwards25519/
│ │ │ ├── const.go
│ │ │ └── edwards25519.go
│ │ ├── hkdf/
│ │ │ └── hkdf.go
│ │ ├── internal/
│ │ │ ├── chacha20/
│ │ │ │ ├── chacha_generic.go
│ │ │ │ ├── chacha_noasm.go
│ │ │ │ ├── chacha_s390x.go
│ │ │ │ ├── chacha_s390x.s
│ │ │ │ └── xor.go
│ │ │ └── subtle/
│ │ │ ├── aliasing.go
│ │ │ └── aliasing_appengine.go
│ │ ├── md4/
│ │ │ ├── md4.go
│ │ │ └── md4block.go
│ │ ├── nacl/
│ │ │ ├── auth/
│ │ │ │ └── auth.go
│ │ │ ├── box/
│ │ │ │ └── box.go
│ │ │ ├── secretbox/
│ │ │ │ └── secretbox.go
│ │ │ └── sign/
│ │ │ └── sign.go
│ │ ├── ocsp/
│ │ │ └── ocsp.go
│ │ ├── openpgp/
│ │ │ ├── armor/
│ │ │ │ ├── armor.go
│ │ │ │ └── encode.go
│ │ │ ├── canonical_text.go
│ │ │ ├── clearsign/
│ │ │ │ └── clearsign.go
│ │ │ ├── elgamal/
│ │ │ │ └── elgamal.go
│ │ │ ├── errors/
│ │ │ │ └── errors.go
│ │ │ ├── keys.go
│ │ │ ├── packet/
│ │ │ │ ├── compressed.go
│ │ │ │ ├── config.go
│ │ │ │ ├── encrypted_key.go
│ │ │ │ ├── literal.go
│ │ │ │ ├── ocfb.go
│ │ │ │ ├── one_pass_signature.go
│ │ │ │ ├── opaque.go
│ │ │ │ ├── packet.go
│ │ │ │ ├── private_key.go
│ │ │ │ ├── public_key.go
│ │ │ │ ├── public_key_v3.go
│ │ │ │ ├── reader.go
│ │ │ │ ├── signature.go
│ │ │ │ ├── signature_v3.go
│ │ │ │ ├── symmetric_key_encrypted.go
│ │ │ │ ├── symmetrically_encrypted.go
│ │ │ │ ├── userattribute.go
│ │ │ │ └── userid.go
│ │ │ ├── read.go
│ │ │ ├── s2k/
│ │ │ │ └── s2k.go
│ │ │ └── write.go
│ │ ├── otr/
│ │ │ ├── libotr_test_helper.c
│ │ │ ├── otr.go
│ │ │ └── smp.go
│ │ ├── pbkdf2/
│ │ │ └── pbkdf2.go
│ │ ├── pkcs12/
│ │ │ ├── bmp-string.go
│ │ │ ├── crypto.go
│ │ │ ├── errors.go
│ │ │ ├── internal/
│ │ │ │ └── rc2/
│ │ │ │ └── rc2.go
│ │ │ ├── mac.go
│ │ │ ├── pbkdf.go
│ │ │ ├── pkcs12.go
│ │ │ └── safebags.go
│ │ ├── poly1305/
│ │ │ ├── poly1305.go
│ │ │ ├── sum_amd64.go
│ │ │ ├── sum_amd64.s
│ │ │ ├── sum_arm.go
│ │ │ ├── sum_arm.s
│ │ │ ├── sum_noasm.go
│ │ │ ├── sum_ref.go
│ │ │ ├── sum_s390x.go
│ │ │ ├── sum_s390x.s
│ │ │ └── sum_vmsl_s390x.s
│ │ ├── ripemd160/
│ │ │ ├── ripemd160.go
│ │ │ └── ripemd160block.go
│ │ ├── salsa20/
│ │ │ ├── salsa/
│ │ │ │ ├── hsalsa20.go
│ │ │ │ ├── salsa2020_amd64.s
│ │ │ │ ├── salsa208.go
│ │ │ │ ├── salsa20_amd64.go
│ │ │ │ └── salsa20_ref.go
│ │ │ └── salsa20.go
│ │ ├── scrypt/
│ │ │ └── scrypt.go
│ │ ├── sha3/
│ │ │ ├── doc.go
│ │ │ ├── hashes.go
│ │ │ ├── hashes_generic.go
│ │ │ ├── keccakf.go
│ │ │ ├── keccakf_amd64.go
│ │ │ ├── keccakf_amd64.s
│ │ │ ├── register.go
│ │ │ ├── sha3.go
│ │ │ ├── sha3_s390x.go
│ │ │ ├── sha3_s390x.s
│ │ │ ├── shake.go
│ │ │ ├── shake_generic.go
│ │ │ ├── testdata/
│ │ │ │ └── keccakKats.json.deflate
│ │ │ ├── xor.go
│ │ │ ├── xor_generic.go
│ │ │ └── xor_unaligned.go
│ │ ├── ssh/
│ │ │ ├── agent/
│ │ │ │ ├── client.go
│ │ │ │ ├── forward.go
│ │ │ │ ├── keyring.go
│ │ │ │ └── server.go
│ │ │ ├── buffer.go
│ │ │ ├── certs.go
│ │ │ ├── channel.go
│ │ │ ├── cipher.go
│ │ │ ├── client.go
│ │ │ ├── client_auth.go
│ │ │ ├── common.go
│ │ │ ├── connection.go
│ │ │ ├── doc.go
│ │ │ ├── handshake.go
│ │ │ ├── kex.go
│ │ │ ├── keys.go
│ │ │ ├── knownhosts/
│ │ │ │ └── knownhosts.go
│ │ │ ├── mac.go
│ │ │ ├── messages.go
│ │ │ ├── mux.go
│ │ │ ├── server.go
│ │ │ ├── session.go
│ │ │ ├── streamlocal.go
│ │ │ ├── tcpip.go
│ │ │ ├── terminal/
│ │ │ │ ├── terminal.go
│ │ │ │ ├── util.go
│ │ │ │ ├── util_bsd.go
│ │ │ │ ├── util_linux.go
│ │ │ │ ├── util_plan9.go
│ │ │ │ ├── util_solaris.go
│ │ │ │ └── util_windows.go
│ │ │ ├── test/
│ │ │ │ ├── doc.go
│ │ │ │ └── sshd_test_pw.c
│ │ │ ├── testdata/
│ │ │ │ ├── doc.go
│ │ │ │ └── keys.go
│ │ │ └── transport.go
│ │ ├── tea/
│ │ │ └── cipher.go
│ │ ├── twofish/
│ │ │ └── twofish.go
│ │ ├── xtea/
│ │ │ ├── block.go
│ │ │ └── cipher.go
│ │ └── xts/
│ │ └── xts.go
│ ├── net/
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── README.md
│ │ ├── bpf/
│ │ │ ├── asm.go
│ │ │ ├── constants.go
│ │ │ ├── doc.go
│ │ │ ├── instructions.go
│ │ │ ├── setter.go
│ │ │ ├── testdata/
│ │ │ │ ├── all_instructions.bpf
│ │ │ │ └── all_instructions.txt
│ │ │ ├── vm.go
│ │ │ └── vm_instructions.go
│ │ ├── codereview.cfg
│ │ ├── context/
│ │ │ ├── context.go
│ │ │ ├── ctxhttp/
│ │ │ │ ├── ctxhttp.go
│ │ │ │ └── ctxhttp_pre17.go
│ │ │ ├── go17.go
│ │ │ ├── go19.go
│ │ │ ├── pre_go17.go
│ │ │ └── pre_go19.go
│ │ ├── dict/
│ │ │ └── dict.go
│ │ ├── dns/
│ │ │ └── dnsmessage/
│ │ │ └── message.go
│ │ ├── html/
│ │ │ ├── atom/
│ │ │ │ ├── atom.go
│ │ │ │ ├── gen.go
│ │ │ │ └── table.go
│ │ │ ├── charset/
│ │ │ │ ├── charset.go
│ │ │ │ └── testdata/
│ │ │ │ ├── HTTP-charset.html
│ │ │ │ ├── HTTP-vs-UTF-8-BOM.html
│ │ │ │ ├── HTTP-vs-meta-charset.html
│ │ │ │ ├── HTTP-vs-meta-content.html
│ │ │ │ ├── No-encoding-declaration.html
│ │ │ │ ├── README
│ │ │ │ ├── UTF-16BE-BOM.html
│ │ │ │ ├── UTF-16LE-BOM.html
│ │ │ │ ├── UTF-8-BOM-vs-meta-charset.html
│ │ │ │ ├── UTF-8-BOM-vs-meta-content.html
│ │ │ │ ├── meta-charset-attribute.html
│ │ │ │ └── meta-content-attribute.html
│ │ │ ├── const.go
│ │ │ ├── doc.go
│ │ │ ├── doctype.go
│ │ │ ├── entity.go
│ │ │ ├── escape.go
│ │ │ ├── foreign.go
│ │ │ ├── node.go
│ │ │ ├── parse.go
│ │ │ ├── render.go
│ │ │ ├── testdata/
│ │ │ │ ├── go1.html
│ │ │ │ └── webkit/
│ │ │ │ └── README
│ │ │ └── token.go
│ │ ├── http/
│ │ │ ├── httpguts/
│ │ │ │ ├── guts.go
│ │ │ │ └── httplex.go
│ │ │ └── httpproxy/
│ │ │ └── proxy.go
│ │ ├── http2/
│ │ │ ├── .gitignore
│ │ │ ├── Dockerfile
│ │ │ ├── Makefile
│ │ │ ├── README
│ │ │ ├── ciphers.go
│ │ │ ├── client_conn_pool.go
│ │ │ ├── configure_transport.go
│ │ │ ├── databuffer.go
│ │ │ ├── errors.go
│ │ │ ├── flow.go
│ │ │ ├── frame.go
│ │ │ ├── go111.go
│ │ │ ├── go16.go
│ │ │ ├── go17.go
│ │ │ ├── go17_not18.go
│ │ │ ├── go18.go
│ │ │ ├── go19.go
│ │ │ ├── gotrack.go
│ │ │ ├── h2c/
│ │ │ │ └── h2c.go
│ │ │ ├── h2i/
│ │ │ │ ├── README.md
│ │ │ │ └── h2i.go
│ │ │ ├── headermap.go
│ │ │ ├── hpack/
│ │ │ │ ├── encode.go
│ │ │ │ ├── hpack.go
│ │ │ │ ├── huffman.go
│ │ │ │ └── tables.go
│ │ │ ├── http2.go
│ │ │ ├── not_go111.go
│ │ │ ├── not_go16.go
│ │ │ ├── not_go17.go
│ │ │ ├── not_go18.go
│ │ │ ├── not_go19.go
│ │ │ ├── pipe.go
│ │ │ ├── server.go
│ │ │ ├── testdata/
│ │ │ │ └── draft-ietf-httpbis-http2.xml
│ │ │ ├── transport.go
│ │ │ ├── write.go
│ │ │ ├── writesched.go
│ │ │ ├── writesched_priority.go
│ │ │ └── writesched_random.go
│ │ ├── icmp/
│ │ │ ├── dstunreach.go
│ │ │ ├── echo.go
│ │ │ ├── endpoint.go
│ │ │ ├── extension.go
│ │ │ ├── helper_posix.go
│ │ │ ├── interface.go
│ │ │ ├── ipv4.go
│ │ │ ├── ipv6.go
│ │ │ ├── listen_posix.go
│ │ │ ├── listen_stub.go
│ │ │ ├── message.go
│ │ │ ├── messagebody.go
│ │ │ ├── mpls.go
│ │ │ ├── multipart.go
│ │ │ ├── packettoobig.go
│ │ │ ├── paramprob.go
│ │ │ ├── sys_freebsd.go
│ │ │ └── timeexceeded.go
│ │ ├── idna/
│ │ │ ├── idna.go
│ │ │ ├── punycode.go
│ │ │ ├── tables.go
│ │ │ ├── trie.go
│ │ │ └── trieval.go
│ │ ├── internal/
│ │ │ ├── iana/
│ │ │ │ ├── const.go
│ │ │ │ └── gen.go
│ │ │ ├── nettest/
│ │ │ │ ├── helper_bsd.go
│ │ │ │ ├── helper_nobsd.go
│ │ │ │ ├── helper_posix.go
│ │ │ │ ├── helper_stub.go
│ │ │ │ ├── helper_unix.go
│ │ │ │ ├── helper_windows.go
│ │ │ │ ├── interface.go
│ │ │ │ ├── rlimit.go
│ │ │ │ └── stack.go
│ │ │ ├── socket/
│ │ │ │ ├── cmsghdr.go
│ │ │ │ ├── cmsghdr_bsd.go
│ │ │ │ ├── cmsghdr_linux_32bit.go
│ │ │ │ ├── cmsghdr_linux_64bit.go
│ │ │ │ ├── cmsghdr_solaris_64bit.go
│ │ │ │ ├── cmsghdr_stub.go
│ │ │ │ ├── defs_darwin.go
│ │ │ │ ├── defs_dragonfly.go
│ │ │ │ ├── defs_freebsd.go
│ │ │ │ ├── defs_linux.go
│ │ │ │ ├── defs_netbsd.go
│ │ │ │ ├── defs_openbsd.go
│ │ │ │ ├── defs_solaris.go
│ │ │ │ ├── error_unix.go
│ │ │ │ ├── error_windows.go
│ │ │ │ ├── iovec_32bit.go
│ │ │ │ ├── iovec_64bit.go
│ │ │ │ ├── iovec_solaris_64bit.go
│ │ │ │ ├── iovec_stub.go
│ │ │ │ ├── mmsghdr_stub.go
│ │ │ │ ├── mmsghdr_unix.go
│ │ │ │ ├── msghdr_bsd.go
│ │ │ │ ├── msghdr_bsdvar.go
│ │ │ │ ├── msghdr_linux.go
│ │ │ │ ├── msghdr_linux_32bit.go
│ │ │ │ ├── msghdr_linux_64bit.go
│ │ │ │ ├── msghdr_openbsd.go
│ │ │ │ ├── msghdr_solaris_64bit.go
│ │ │ │ ├── msghdr_stub.go
│ │ │ │ ├── rawconn.go
│ │ │ │ ├── rawconn_mmsg.go
│ │ │ │ ├── rawconn_msg.go
│ │ │ │ ├── rawconn_nommsg.go
│ │ │ │ ├── rawconn_nomsg.go
│ │ │ │ ├── rawconn_stub.go
│ │ │ │ ├── reflect.go
│ │ │ │ ├── socket.go
│ │ │ │ ├── sys.go
│ │ │ │ ├── sys_bsd.go
│ │ │ │ ├── sys_bsdvar.go
│ │ │ │ ├── sys_darwin.go
│ │ │ │ ├── sys_dragonfly.go
│ │ │ │ ├── sys_linux.go
│ │ │ │ ├── sys_linux_386.go
│ │ │ │ ├── sys_linux_386.s
│ │ │ │ ├── sys_linux_amd64.go
│ │ │ │ ├── sys_linux_arm.go
│ │ │ │ ├── sys_linux_arm64.go
│ │ │ │ ├── sys_linux_mips.go
│ │ │ │ ├── sys_linux_mips64.go
│ │ │ │ ├── sys_linux_mips64le.go
│ │ │ │ ├── sys_linux_mipsle.go
│ │ │ │ ├── sys_linux_ppc64.go
│ │ │ │ ├── sys_linux_ppc64le.go
│ │ │ │ ├── sys_linux_s390x.go
│ │ │ │ ├── sys_linux_s390x.s
│ │ │ │ ├── sys_netbsd.go
│ │ │ │ ├── sys_posix.go
│ │ │ │ ├── sys_solaris.go
│ │ │ │ ├── sys_solaris_amd64.s
│ │ │ │ ├── sys_stub.go
│ │ │ │ ├── sys_unix.go
│ │ │ │ ├── sys_windows.go
│ │ │ │ ├── zsys_darwin_386.go
│ │ │ │ ├── zsys_darwin_amd64.go
│ │ │ │ ├── zsys_darwin_arm.go
│ │ │ │ ├── zsys_darwin_arm64.go
│ │ │ │ ├── zsys_dragonfly_amd64.go
│ │ │ │ ├── zsys_freebsd_386.go
│ │ │ │ ├── zsys_freebsd_amd64.go
│ │ │ │ ├── zsys_freebsd_arm.go
│ │ │ │ ├── zsys_linux_386.go
│ │ │ │ ├── zsys_linux_amd64.go
│ │ │ │ ├── zsys_linux_arm.go
│ │ │ │ ├── zsys_linux_arm64.go
│ │ │ │ ├── zsys_linux_mips.go
│ │ │ │ ├── zsys_linux_mips64.go
│ │ │ │ ├── zsys_linux_mips64le.go
│ │ │ │ ├── zsys_linux_mipsle.go
│ │ │ │ ├── zsys_linux_ppc64.go
│ │ │ │ ├── zsys_linux_ppc64le.go
│ │ │ │ ├── zsys_linux_s390x.go
│ │ │ │ ├── zsys_netbsd_386.go
│ │ │ │ ├── zsys_netbsd_amd64.go
│ │ │ │ ├── zsys_netbsd_arm.go
│ │ │ │ ├── zsys_openbsd_386.go
│ │ │ │ ├── zsys_openbsd_amd64.go
│ │ │ │ ├── zsys_openbsd_arm.go
│ │ │ │ └── zsys_solaris_amd64.go
│ │ │ ├── socks/
│ │ │ │ ├── client.go
│ │ │ │ └── socks.go
│ │ │ ├── sockstest/
│ │ │ │ └── server.go
│ │ │ └── timeseries/
│ │ │ └── timeseries.go
│ │ ├── ipv4/
│ │ │ ├── batch.go
│ │ │ ├── control.go
│ │ │ ├── control_bsd.go
│ │ │ ├── control_pktinfo.go
│ │ │ ├── control_stub.go
│ │ │ ├── control_unix.go
│ │ │ ├── control_windows.go
│ │ │ ├── defs_darwin.go
│ │ │ ├── defs_dragonfly.go
│ │ │ ├── defs_freebsd.go
│ │ │ ├── defs_linux.go
│ │ │ ├── defs_netbsd.go
│ │ │ ├── defs_openbsd.go
│ │ │ ├── defs_solaris.go
│ │ │ ├── dgramopt.go
│ │ │ ├── doc.go
│ │ │ ├── endpoint.go
│ │ │ ├── gen.go
│ │ │ ├── genericopt.go
│ │ │ ├── header.go
│ │ │ ├── helper.go
│ │ │ ├── iana.go
│ │ │ ├── icmp.go
│ │ │ ├── icmp_linux.go
│ │ │ ├── icmp_stub.go
│ │ │ ├── packet.go
│ │ │ ├── packet_go1_8.go
│ │ │ ├── packet_go1_9.go
│ │ │ ├── payload.go
│ │ │ ├── payload_cmsg.go
│ │ │ ├── payload_cmsg_go1_8.go
│ │ │ ├── payload_cmsg_go1_9.go
│ │ │ ├── payload_nocmsg.go
│ │ │ ├── sockopt.go
│ │ │ ├── sockopt_posix.go
│ │ │ ├── sockopt_stub.go
│ │ │ ├── sys_asmreq.go
│ │ │ ├── sys_asmreq_stub.go
│ │ │ ├── sys_asmreqn.go
│ │ │ ├── sys_asmreqn_stub.go
│ │ │ ├── sys_bpf.go
│ │ │ ├── sys_bpf_stub.go
│ │ │ ├── sys_bsd.go
│ │ │ ├── sys_darwin.go
│ │ │ ├── sys_dragonfly.go
│ │ │ ├── sys_freebsd.go
│ │ │ ├── sys_linux.go
│ │ │ ├── sys_solaris.go
│ │ │ ├── sys_ssmreq.go
│ │ │ ├── sys_ssmreq_stub.go
│ │ │ ├── sys_stub.go
│ │ │ ├── sys_windows.go
│ │ │ ├── zsys_darwin.go
│ │ │ ├── zsys_dragonfly.go
│ │ │ ├── zsys_freebsd_386.go
│ │ │ ├── zsys_freebsd_amd64.go
│ │ │ ├── zsys_freebsd_arm.go
│ │ │ ├── zsys_linux_386.go
│ │ │ ├── zsys_linux_amd64.go
│ │ │ ├── zsys_linux_arm.go
│ │ │ ├── zsys_linux_arm64.go
│ │ │ ├── zsys_linux_mips.go
│ │ │ ├── zsys_linux_mips64.go
│ │ │ ├── zsys_linux_mips64le.go
│ │ │ ├── zsys_linux_mipsle.go
│ │ │ ├── zsys_linux_ppc.go
│ │ │ ├── zsys_linux_ppc64.go
│ │ │ ├── zsys_linux_ppc64le.go
│ │ │ ├── zsys_linux_s390x.go
│ │ │ ├── zsys_netbsd.go
│ │ │ ├── zsys_openbsd.go
│ │ │ └── zsys_solaris.go
│ │ ├── ipv6/
│ │ │ ├── batch.go
│ │ │ ├── control.go
│ │ │ ├── control_rfc2292_unix.go
│ │ │ ├── control_rfc3542_unix.go
│ │ │ ├── control_stub.go
│ │ │ ├── control_unix.go
│ │ │ ├── control_windows.go
│ │ │ ├── defs_darwin.go
│ │ │ ├── defs_dragonfly.go
│ │ │ ├── defs_freebsd.go
│ │ │ ├── defs_linux.go
│ │ │ ├── defs_netbsd.go
│ │ │ ├── defs_openbsd.go
│ │ │ ├── defs_solaris.go
│ │ │ ├── dgramopt.go
│ │ │ ├── doc.go
│ │ │ ├── endpoint.go
│ │ │ ├── gen.go
│ │ │ ├── genericopt.go
│ │ │ ├── header.go
│ │ │ ├── helper.go
│ │ │ ├── iana.go
│ │ │ ├── icmp.go
│ │ │ ├── icmp_bsd.go
│ │ │ ├── icmp_linux.go
│ │ │ ├── icmp_solaris.go
│ │ │ ├── icmp_stub.go
│ │ │ ├── icmp_windows.go
│ │ │ ├── payload.go
│ │ │ ├── payload_cmsg.go
│ │ │ ├── payload_cmsg_go1_8.go
│ │ │ ├── payload_cmsg_go1_9.go
│ │ │ ├── payload_nocmsg.go
│ │ │ ├── sockopt.go
│ │ │ ├── sockopt_posix.go
│ │ │ ├── sockopt_stub.go
│ │ │ ├── sys_asmreq.go
│ │ │ ├── sys_asmreq_stub.go
│ │ │ ├── sys_bpf.go
│ │ │ ├── sys_bpf_stub.go
│ │ │ ├── sys_bsd.go
│ │ │ ├── sys_darwin.go
│ │ │ ├── sys_freebsd.go
│ │ │ ├── sys_linux.go
│ │ │ ├── sys_solaris.go
│ │ │ ├── sys_ssmreq.go
│ │ │ ├── sys_ssmreq_stub.go
│ │ │ ├── sys_stub.go
│ │ │ ├── sys_windows.go
│ │ │ ├── zsys_darwin.go
│ │ │ ├── zsys_dragonfly.go
│ │ │ ├── zsys_freebsd_386.go
│ │ │ ├── zsys_freebsd_amd64.go
│ │ │ ├── zsys_freebsd_arm.go
│ │ │ ├── zsys_linux_386.go
│ │ │ ├── zsys_linux_amd64.go
│ │ │ ├── zsys_linux_arm.go
│ │ │ ├── zsys_linux_arm64.go
│ │ │ ├── zsys_linux_mips.go
│ │ │ ├── zsys_linux_mips64.go
│ │ │ ├── zsys_linux_mips64le.go
│ │ │ ├── zsys_linux_mipsle.go
│ │ │ ├── zsys_linux_ppc.go
│ │ │ ├── zsys_linux_ppc64.go
│ │ │ ├── zsys_linux_ppc64le.go
│ │ │ ├── zsys_linux_s390x.go
│ │ │ ├── zsys_netbsd.go
│ │ │ ├── zsys_openbsd.go
│ │ │ └── zsys_solaris.go
│ │ ├── lif/
│ │ │ ├── address.go
│ │ │ ├── binary.go
│ │ │ ├── defs_solaris.go
│ │ │ ├── lif.go
│ │ │ ├── link.go
│ │ │ ├── sys.go
│ │ │ ├── sys_solaris_amd64.s
│ │ │ ├── syscall.go
│ │ │ └── zsys_solaris_amd64.go
│ │ ├── nettest/
│ │ │ ├── conntest.go
│ │ │ ├── conntest_go16.go
│ │ │ └── conntest_go17.go
│ │ ├── netutil/
│ │ │ └── listen.go
│ │ ├── proxy/
│ │ │ ├── direct.go
│ │ │ ├── per_host.go
│ │ │ ├── proxy.go
│ │ │ └── socks5.go
│ │ ├── publicsuffix/
│ │ │ ├── gen.go
│ │ │ ├── list.go
│ │ │ └── table.go
│ │ ├── route/
│ │ │ ├── address.go
│ │ │ ├── binary.go
│ │ │ ├── defs_darwin.go
│ │ │ ├── defs_dragonfly.go
│ │ │ ├── defs_freebsd.go
│ │ │ ├── defs_netbsd.go
│ │ │ ├── defs_openbsd.go
│ │ │ ├── interface.go
│ │ │ ├── interface_announce.go
│ │ │ ├── interface_classic.go
│ │ │ ├── interface_freebsd.go
│ │ │ ├── interface_multicast.go
│ │ │ ├── interface_openbsd.go
│ │ │ ├── message.go
│ │ │ ├── route.go
│ │ │ ├── route_classic.go
│ │ │ ├── route_openbsd.go
│ │ │ ├── sys.go
│ │ │ ├── sys_darwin.go
│ │ │ ├── sys_dragonfly.go
│ │ │ ├── sys_freebsd.go
│ │ │ ├── sys_netbsd.go
│ │ │ ├── sys_openbsd.go
│ │ │ ├── syscall.go
│ │ │ ├── zsys_darwin.go
│ │ │ ├── zsys_dragonfly.go
│ │ │ ├── zsys_freebsd_386.go
│ │ │ ├── zsys_freebsd_amd64.go
│ │ │ ├── zsys_freebsd_arm.go
│ │ │ ├── zsys_netbsd.go
│ │ │ └── zsys_openbsd.go
│ │ ├── trace/
│ │ │ ├── events.go
│ │ │ ├── histogram.go
│ │ │ ├── trace.go
│ │ │ ├── trace_go16.go
│ │ │ └── trace_go17.go
│ │ ├── webdav/
│ │ │ ├── file.go
│ │ │ ├── file_go1.6.go
│ │ │ ├── file_go1.7.go
│ │ │ ├── if.go
│ │ │ ├── internal/
│ │ │ │ └── xml/
│ │ │ │ ├── README
│ │ │ │ ├── marshal.go
│ │ │ │ ├── read.go
│ │ │ │ ├── typeinfo.go
│ │ │ │ └── xml.go
│ │ │ ├── litmus_test_server.go
│ │ │ ├── lock.go
│ │ │ ├── prop.go
│ │ │ ├── webdav.go
│ │ │ └── xml.go
│ │ ├── websocket/
│ │ │ ├── client.go
│ │ │ ├── dial.go
│ │ │ ├── hybi.go
│ │ │ ├── server.go
│ │ │ └── websocket.go
│ │ └── xsrftoken/
│ │ └── xsrf.go
│ ├── oauth2/
│ │ ├── .travis.yml
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── amazon/
│ │ │ └── amazon.go
│ │ ├── bitbucket/
│ │ │ └── bitbucket.go
│ │ ├── cern/
│ │ │ └── cern.go
│ │ ├── clientcredentials/
│ │ │ └── clientcredentials.go
│ │ ├── facebook/
│ │ │ └── facebook.go
│ │ ├── fitbit/
│ │ │ └── fitbit.go
│ │ ├── foursquare/
│ │ │ └── foursquare.go
│ │ ├── github/
│ │ │ └── github.go
│ │ ├── gitlab/
│ │ │ └── gitlab.go
│ │ ├── google/
│ │ │ ├── appengine.go
│ │ │ ├── appengine_hook.go
│ │ │ ├── appengineflex_hook.go
│ │ │ ├── default.go
│ │ │ ├── doc_go19.go
│ │ │ ├── doc_not_go19.go
│ │ │ ├── go19.go
│ │ │ ├── google.go
│ │ │ ├── jwt.go
│ │ │ ├── not_go19.go
│ │ │ ├── sdk.go
│ │ │ └── testdata/
│ │ │ └── gcloud/
│ │ │ ├── credentials
│ │ │ └── properties
│ │ ├── heroku/
│ │ │ └── heroku.go
│ │ ├── hipchat/
│ │ │ └── hipchat.go
│ │ ├── instagram/
│ │ │ └── instagram.go
│ │ ├── internal/
│ │ │ ├── client_appengine.go
│ │ │ ├── doc.go
│ │ │ ├── oauth2.go
│ │ │ ├── token.go
│ │ │ └── transport.go
│ │ ├── jira/
│ │ │ └── jira.go
│ │ ├── jws/
│ │ │ └── jws.go
│ │ ├── jwt/
│ │ │ └── jwt.go
│ │ ├── kakao/
│ │ │ └── kakao.go
│ │ ├── linkedin/
│ │ │ └── linkedin.go
│ │ ├── mailchimp/
│ │ │ └── mailchimp.go
│ │ ├── mailru/
│ │ │ └── mailru.go
│ │ ├── mediamath/
│ │ │ └── mediamath.go
│ │ ├── microsoft/
│ │ │ └── microsoft.go
│ │ ├── nokiahealth/
│ │ │ └── nokiahealth.go
│ │ ├── oauth2.go
│ │ ├── odnoklassniki/
│ │ │ └── odnoklassniki.go
│ │ ├── paypal/
│ │ │ └── paypal.go
│ │ ├── slack/
│ │ │ └── slack.go
│ │ ├── spotify/
│ │ │ └── spotify.go
│ │ ├── stackoverflow/
│ │ │ └── stackoverflow.go
│ │ ├── token.go
│ │ ├── transport.go
│ │ ├── twitch/
│ │ │ └── twitch.go
│ │ ├── uber/
│ │ │ └── uber.go
│ │ ├── vk/
│ │ │ └── vk.go
│ │ ├── yahoo/
│ │ │ └── yahoo.go
│ │ └── yandex/
│ │ └── yandex.go
│ ├── sys/
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── README.md
│ │ ├── codereview.cfg
│ │ ├── cpu/
│ │ │ ├── cpu.go
│ │ │ ├── cpu_arm.go
│ │ │ ├── cpu_arm64.go
│ │ │ ├── cpu_gc_x86.go
│ │ │ ├── cpu_gccgo.c
│ │ │ ├── cpu_gccgo.go
│ │ │ ├── cpu_mips64x.go
│ │ │ ├── cpu_mipsx.go
│ │ │ ├── cpu_ppc64x.go
│ │ │ ├── cpu_s390x.go
│ │ │ ├── cpu_x86.go
│ │ │ └── cpu_x86.s
│ │ ├── plan9/
│ │ │ ├── asm.s
│ │ │ ├── asm_plan9_386.s
│ │ │ ├── asm_plan9_amd64.s
│ │ │ ├── asm_plan9_arm.s
│ │ │ ├── const_plan9.go
│ │ │ ├── dir_plan9.go
│ │ │ ├── env_plan9.go
│ │ │ ├── errors_plan9.go
│ │ │ ├── mkall.sh
│ │ │ ├── mkerrors.sh
│ │ │ ├── mksyscall.pl
│ │ │ ├── mksysnum_plan9.sh
│ │ │ ├── pwd_go15_plan9.go
│ │ │ ├── pwd_plan9.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── str.go
│ │ │ ├── syscall.go
│ │ │ ├── syscall_plan9.go
│ │ │ ├── zsyscall_plan9_386.go
│ │ │ ├── zsyscall_plan9_amd64.go
│ │ │ ├── zsyscall_plan9_arm.go
│ │ │ └── zsysnum_plan9.go
│ │ ├── unix/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── affinity_linux.go
│ │ │ ├── aliases.go
│ │ │ ├── asm_darwin_386.s
│ │ │ ├── asm_darwin_amd64.s
│ │ │ ├── asm_darwin_arm.s
│ │ │ ├── asm_darwin_arm64.s
│ │ │ ├── asm_dragonfly_amd64.s
│ │ │ ├── asm_freebsd_386.s
│ │ │ ├── asm_freebsd_amd64.s
│ │ │ ├── asm_freebsd_arm.s
│ │ │ ├── asm_linux_386.s
│ │ │ ├── asm_linux_amd64.s
│ │ │ ├── asm_linux_arm.s
│ │ │ ├── asm_linux_arm64.s
│ │ │ ├── asm_linux_mips64x.s
│ │ │ ├── asm_linux_mipsx.s
│ │ │ ├── asm_linux_ppc64x.s
│ │ │ ├── asm_linux_s390x.s
│ │ │ ├── asm_netbsd_386.s
│ │ │ ├── asm_netbsd_amd64.s
│ │ │ ├── asm_netbsd_arm.s
│ │ │ ├── asm_openbsd_386.s
│ │ │ ├── asm_openbsd_amd64.s
│ │ │ ├── asm_openbsd_arm.s
│ │ │ ├── asm_solaris_amd64.s
│ │ │ ├── bluetooth_linux.go
│ │ │ ├── cap_freebsd.go
│ │ │ ├── constants.go
│ │ │ ├── dev_aix_ppc.go
│ │ │ ├── dev_aix_ppc64.go
│ │ │ ├── dev_darwin.go
│ │ │ ├── dev_dragonfly.go
│ │ │ ├── dev_freebsd.go
│ │ │ ├── dev_linux.go
│ │ │ ├── dev_netbsd.go
│ │ │ ├── dev_openbsd.go
│ │ │ ├── dirent.go
│ │ │ ├── endian_big.go
│ │ │ ├── endian_little.go
│ │ │ ├── env_unix.go
│ │ │ ├── errors_freebsd_386.go
│ │ │ ├── errors_freebsd_amd64.go
│ │ │ ├── errors_freebsd_arm.go
│ │ │ ├── fcntl.go
│ │ │ ├── fcntl_linux_32bit.go
│ │ │ ├── gccgo.go
│ │ │ ├── gccgo_c.c
│ │ │ ├── gccgo_linux_amd64.go
│ │ │ ├── ioctl.go
│ │ │ ├── linux/
│ │ │ │ ├── Dockerfile
│ │ │ │ ├── mkall.go
│ │ │ │ ├── mksysnum.pl
│ │ │ │ └── types.go
│ │ │ ├── mkall.sh
│ │ │ ├── mkerrors.sh
│ │ │ ├── mkpost.go
│ │ │ ├── mksyscall.pl
│ │ │ ├── mksyscall_aix.pl
│ │ │ ├── mksyscall_solaris.pl
│ │ │ ├── mksysctl_openbsd.pl
│ │ │ ├── mksysnum_darwin.pl
│ │ │ ├── mksysnum_dragonfly.pl
│ │ │ ├── mksysnum_freebsd.pl
│ │ │ ├── mksysnum_netbsd.pl
│ │ │ ├── mksysnum_openbsd.pl
│ │ │ ├── openbsd_pledge.go
│ │ │ ├── pagesize_unix.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── sockcmsg_linux.go
│ │ │ ├── sockcmsg_unix.go
│ │ │ ├── str.go
│ │ │ ├── syscall.go
│ │ │ ├── syscall_aix.go
│ │ │ ├── syscall_aix_ppc.go
│ │ │ ├── syscall_aix_ppc64.go
│ │ │ ├── syscall_bsd.go
│ │ │ ├── syscall_darwin.go
│ │ │ ├── syscall_darwin_386.go
│ │ │ ├── syscall_darwin_amd64.go
│ │ │ ├── syscall_darwin_arm.go
│ │ │ ├── syscall_darwin_arm64.go
│ │ │ ├── syscall_dragonfly.go
│ │ │ ├── syscall_dragonfly_amd64.go
│ │ │ ├── syscall_freebsd.go
│ │ │ ├── syscall_freebsd_386.go
│ │ │ ├── syscall_freebsd_amd64.go
│ │ │ ├── syscall_freebsd_arm.go
│ │ │ ├── syscall_linux.go
│ │ │ ├── syscall_linux_386.go
│ │ │ ├── syscall_linux_amd64.go
│ │ │ ├── syscall_linux_amd64_gc.go
│ │ │ ├── syscall_linux_arm.go
│ │ │ ├── syscall_linux_arm64.go
│ │ │ ├── syscall_linux_gc.go
│ │ │ ├── syscall_linux_gc_386.go
│ │ │ ├── syscall_linux_gccgo_386.go
│ │ │ ├── syscall_linux_gccgo_arm.go
│ │ │ ├── syscall_linux_mips64x.go
│ │ │ ├── syscall_linux_mipsx.go
│ │ │ ├── syscall_linux_ppc64x.go
│ │ │ ├── syscall_linux_riscv64.go
│ │ │ ├── syscall_linux_s390x.go
│ │ │ ├── syscall_linux_sparc64.go
│ │ │ ├── syscall_netbsd.go
│ │ │ ├── syscall_netbsd_386.go
│ │ │ ├── syscall_netbsd_amd64.go
│ │ │ ├── syscall_netbsd_arm.go
│ │ │ ├── syscall_openbsd.go
│ │ │ ├── syscall_openbsd_386.go
│ │ │ ├── syscall_openbsd_amd64.go
│ │ │ ├── syscall_openbsd_arm.go
│ │ │ ├── syscall_solaris.go
│ │ │ ├── syscall_solaris_amd64.go
│ │ │ ├── syscall_unix.go
│ │ │ ├── syscall_unix_gc.go
│ │ │ ├── timestruct.go
│ │ │ ├── types_aix.go
│ │ │ ├── types_darwin.go
│ │ │ ├── types_dragonfly.go
│ │ │ ├── types_freebsd.go
│ │ │ ├── types_netbsd.go
│ │ │ ├── types_openbsd.go
│ │ │ ├── types_solaris.go
│ │ │ ├── xattr_bsd.go
│ │ │ ├── zerrors_aix_ppc.go
│ │ │ ├── zerrors_aix_ppc64.go
│ │ │ ├── zerrors_darwin_386.go
│ │ │ ├── zerrors_darwin_amd64.go
│ │ │ ├── zerrors_darwin_arm.go
│ │ │ ├── zerrors_darwin_arm64.go
│ │ │ ├── zerrors_dragonfly_amd64.go
│ │ │ ├── zerrors_freebsd_386.go
│ │ │ ├── zerrors_freebsd_amd64.go
│ │ │ ├── zerrors_freebsd_arm.go
│ │ │ ├── zerrors_linux_386.go
│ │ │ ├── zerrors_linux_amd64.go
│ │ │ ├── zerrors_linux_arm.go
│ │ │ ├── zerrors_linux_arm64.go
│ │ │ ├── zerrors_linux_mips.go
│ │ │ ├── zerrors_linux_mips64.go
│ │ │ ├── zerrors_linux_mips64le.go
│ │ │ ├── zerrors_linux_mipsle.go
│ │ │ ├── zerrors_linux_ppc64.go
│ │ │ ├── zerrors_linux_ppc64le.go
│ │ │ ├── zerrors_linux_riscv64.go
│ │ │ ├── zerrors_linux_s390x.go
│ │ │ ├── zerrors_linux_sparc64.go
│ │ │ ├── zerrors_netbsd_386.go
│ │ │ ├── zerrors_netbsd_amd64.go
│ │ │ ├── zerrors_netbsd_arm.go
│ │ │ ├── zerrors_openbsd_386.go
│ │ │ ├── zerrors_openbsd_amd64.go
│ │ │ ├── zerrors_openbsd_arm.go
│ │ │ ├── zerrors_solaris_amd64.go
│ │ │ ├── zptrace386_linux.go
│ │ │ ├── zptracearm_linux.go
│ │ │ ├── zptracemips_linux.go
│ │ │ ├── zptracemipsle_linux.go
│ │ │ ├── zsyscall_aix_ppc.go
│ │ │ ├── zsyscall_aix_ppc64.go
│ │ │ ├── zsyscall_darwin_386.go
│ │ │ ├── zsyscall_darwin_amd64.go
│ │ │ ├── zsyscall_darwin_arm.go
│ │ │ ├── zsyscall_darwin_arm64.go
│ │ │ ├── zsyscall_dragonfly_amd64.go
│ │ │ ├── zsyscall_freebsd_386.go
│ │ │ ├── zsyscall_freebsd_amd64.go
│ │ │ ├── zsyscall_freebsd_arm.go
│ │ │ ├── zsyscall_linux_386.go
│ │ │ ├── zsyscall_linux_amd64.go
│ │ │ ├── zsyscall_linux_arm.go
│ │ │ ├── zsyscall_linux_arm64.go
│ │ │ ├── zsyscall_linux_mips.go
│ │ │ ├── zsyscall_linux_mips64.go
│ │ │ ├── zsyscall_linux_mips64le.go
│ │ │ ├── zsyscall_linux_mipsle.go
│ │ │ ├── zsyscall_linux_ppc64.go
│ │ │ ├── zsyscall_linux_ppc64le.go
│ │ │ ├── zsyscall_linux_riscv64.go
│ │ │ ├── zsyscall_linux_s390x.go
│ │ │ ├── zsyscall_linux_sparc64.go
│ │ │ ├── zsyscall_netbsd_386.go
│ │ │ ├── zsyscall_netbsd_amd64.go
│ │ │ ├── zsyscall_netbsd_arm.go
│ │ │ ├── zsyscall_openbsd_386.go
│ │ │ ├── zsyscall_openbsd_amd64.go
│ │ │ ├── zsyscall_openbsd_arm.go
│ │ │ ├── zsyscall_solaris_amd64.go
│ │ │ ├── zsysctl_openbsd_386.go
│ │ │ ├── zsysctl_openbsd_amd64.go
│ │ │ ├── zsysctl_openbsd_arm.go
│ │ │ ├── zsysnum_darwin_386.go
│ │ │ ├── zsysnum_darwin_amd64.go
│ │ │ ├── zsysnum_darwin_arm.go
│ │ │ ├── zsysnum_darwin_arm64.go
│ │ │ ├── zsysnum_dragonfly_amd64.go
│ │ │ ├── zsysnum_freebsd_386.go
│ │ │ ├── zsysnum_freebsd_amd64.go
│ │ │ ├── zsysnum_freebsd_arm.go
│ │ │ ├── zsysnum_linux_386.go
│ │ │ ├── zsysnum_linux_amd64.go
│ │ │ ├── zsysnum_linux_arm.go
│ │ │ ├── zsysnum_linux_arm64.go
│ │ │ ├── zsysnum_linux_mips.go
│ │ │ ├── zsysnum_linux_mips64.go
│ │ │ ├── zsysnum_linux_mips64le.go
│ │ │ ├── zsysnum_linux_mipsle.go
│ │ │ ├── zsysnum_linux_ppc64.go
│ │ │ ├── zsysnum_linux_ppc64le.go
│ │ │ ├── zsysnum_linux_riscv64.go
│ │ │ ├── zsysnum_linux_s390x.go
│ │ │ ├── zsysnum_linux_sparc64.go
│ │ │ ├── zsysnum_netbsd_386.go
│ │ │ ├── zsysnum_netbsd_amd64.go
│ │ │ ├── zsysnum_netbsd_arm.go
│ │ │ ├── zsysnum_openbsd_386.go
│ │ │ ├── zsysnum_openbsd_amd64.go
│ │ │ ├── zsysnum_openbsd_arm.go
│ │ │ ├── ztypes_aix_ppc.go
│ │ │ ├── ztypes_aix_ppc64.go
│ │ │ ├── ztypes_darwin_386.go
│ │ │ ├── ztypes_darwin_amd64.go
│ │ │ ├── ztypes_darwin_arm.go
│ │ │ ├── ztypes_darwin_arm64.go
│ │ │ ├── ztypes_dragonfly_amd64.go
│ │ │ ├── ztypes_freebsd_386.go
│ │ │ ├── ztypes_freebsd_amd64.go
│ │ │ ├── ztypes_freebsd_arm.go
│ │ │ ├── ztypes_linux_386.go
│ │ │ ├── ztypes_linux_amd64.go
│ │ │ ├── ztypes_linux_arm.go
│ │ │ ├── ztypes_linux_arm64.go
│ │ │ ├── ztypes_linux_mips.go
│ │ │ ├── ztypes_linux_mips64.go
│ │ │ ├── ztypes_linux_mips64le.go
│ │ │ ├── ztypes_linux_mipsle.go
│ │ │ ├── ztypes_linux_ppc64.go
│ │ │ ├── ztypes_linux_ppc64le.go
│ │ │ ├── ztypes_linux_riscv64.go
│ │ │ ├── ztypes_linux_s390x.go
│ │ │ ├── ztypes_linux_sparc64.go
│ │ │ ├── ztypes_netbsd_386.go
│ │ │ ├── ztypes_netbsd_amd64.go
│ │ │ ├── ztypes_netbsd_arm.go
│ │ │ ├── ztypes_openbsd_386.go
│ │ │ ├── ztypes_openbsd_amd64.go
│ │ │ ├── ztypes_openbsd_arm.go
│ │ │ └── ztypes_solaris_amd64.go
│ │ └── windows/
│ │ ├── aliases.go
│ │ ├── asm_windows_386.s
│ │ ├── asm_windows_amd64.s
│ │ ├── asm_windows_arm.s
│ │ ├── dll_windows.go
│ │ ├── env_windows.go
│ │ ├── eventlog.go
│ │ ├── exec_windows.go
│ │ ├── memory_windows.go
│ │ ├── mksyscall.go
│ │ ├── race.go
│ │ ├── race0.go
│ │ ├── registry/
│ │ │ ├── key.go
│ │ │ ├── mksyscall.go
│ │ │ ├── syscall.go
│ │ │ ├── value.go
│ │ │ └── zsyscall_windows.go
│ │ ├── security_windows.go
│ │ ├── service.go
│ │ ├── str.go
│ │ ├── svc/
│ │ │ ├── debug/
│ │ │ │ ├── log.go
│ │ │ │ └── service.go
│ │ │ ├── event.go
│ │ │ ├── eventlog/
│ │ │ │ ├── install.go
│ │ │ │ └── log.go
│ │ │ ├── example/
│ │ │ │ ├── beep.go
│ │ │ │ ├── install.go
│ │ │ │ ├── main.go
│ │ │ │ ├── manage.go
│ │ │ │ └── service.go
│ │ │ ├── go12.c
│ │ │ ├── go12.go
│ │ │ ├── go13.go
│ │ │ ├── mgr/
│ │ │ │ ├── config.go
│ │ │ │ ├── mgr.go
│ │ │ │ ├── recovery.go
│ │ │ │ └── service.go
│ │ │ ├── security.go
│ │ │ ├── service.go
│ │ │ ├── sys_386.s
│ │ │ ├── sys_amd64.s
│ │ │ └── sys_arm.s
│ │ ├── syscall.go
│ │ ├── syscall_windows.go
│ │ ├── types_windows.go
│ │ ├── types_windows_386.go
│ │ ├── types_windows_amd64.go
│ │ ├── types_windows_arm.go
│ │ └── zsyscall_windows.go
│ ├── text/
│ │ ├── .gitattributes
│ │ ├── .gitignore
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── README.md
│ │ ├── cases/
│ │ │ ├── cases.go
│ │ │ ├── context.go
│ │ │ ├── fold.go
│ │ │ ├── gen.go
│ │ │ ├── gen_trieval.go
│ │ │ ├── icu.go
│ │ │ ├── info.go
│ │ │ ├── map.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ └── trieval.go
│ │ ├── cmd/
│ │ │ └── gotext/
│ │ │ ├── common.go
│ │ │ ├── doc.go
│ │ │ ├── examples/
│ │ │ │ ├── extract/
│ │ │ │ │ ├── catalog.go
│ │ │ │ │ ├── locales/
│ │ │ │ │ │ ├── de/
│ │ │ │ │ │ │ ├── messages.gotext.json
│ │ │ │ │ │ │ └── out.gotext.json
│ │ │ │ │ │ ├── en-US/
│ │ │ │ │ │ │ ├── messages.gotext.json
│ │ │ │ │ │ │ └── out.gotext.json
│ │ │ │ │ │ ├── extracted.gotext.json
│ │ │ │ │ │ └── zh/
│ │ │ │ │ │ ├── messages.gotext.json
│ │ │ │ │ │ └── out.gotext.json
│ │ │ │ │ └── main.go
│ │ │ │ ├── extract_http/
│ │ │ │ │ ├── locales/
│ │ │ │ │ │ ├── de/
│ │ │ │ │ │ │ └── out.gotext.json
│ │ │ │ │ │ ├── en-US/
│ │ │ │ │ │ │ └── out.gotext.json
│ │ │ │ │ │ ├── extracted.gotext.json
│ │ │ │ │ │ └── zh/
│ │ │ │ │ │ └── out.gotext.json
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── pkg/
│ │ │ │ │ └── pkg.go
│ │ │ │ └── rewrite/
│ │ │ │ ├── main.go
│ │ │ │ └── printer.go
│ │ │ ├── extract.go
│ │ │ ├── generate.go
│ │ │ ├── main.go
│ │ │ └── rewrite.go
│ │ ├── codereview.cfg
│ │ ├── collate/
│ │ │ ├── collate.go
│ │ │ ├── index.go
│ │ │ ├── maketables.go
│ │ │ ├── option.go
│ │ │ ├── sort.go
│ │ │ ├── tables.go
│ │ │ └── tools/
│ │ │ └── colcmp/
│ │ │ ├── Makefile
│ │ │ ├── chars.go
│ │ │ ├── col.go
│ │ │ ├── colcmp.go
│ │ │ ├── darwin.go
│ │ │ ├── gen.go
│ │ │ └── icu.go
│ │ ├── currency/
│ │ │ ├── common.go
│ │ │ ├── currency.go
│ │ │ ├── format.go
│ │ │ ├── gen.go
│ │ │ ├── gen_common.go
│ │ │ ├── query.go
│ │ │ └── tables.go
│ │ ├── date/
│ │ │ ├── gen.go
│ │ │ └── tables.go
│ │ ├── doc.go
│ │ ├── encoding/
│ │ │ ├── charmap/
│ │ │ │ ├── charmap.go
│ │ │ │ ├── maketables.go
│ │ │ │ └── tables.go
│ │ │ ├── encoding.go
│ │ │ ├── htmlindex/
│ │ │ │ ├── gen.go
│ │ │ │ ├── htmlindex.go
│ │ │ │ ├── map.go
│ │ │ │ └── tables.go
│ │ │ ├── ianaindex/
│ │ │ │ ├── gen.go
│ │ │ │ ├── ianaindex.go
│ │ │ │ └── tables.go
│ │ │ ├── internal/
│ │ │ │ ├── enctest/
│ │ │ │ │ └── enctest.go
│ │ │ │ ├── identifier/
│ │ │ │ │ ├── gen.go
│ │ │ │ │ ├── identifier.go
│ │ │ │ │ └── mib.go
│ │ │ │ └── internal.go
│ │ │ ├── japanese/
│ │ │ │ ├── all.go
│ │ │ │ ├── eucjp.go
│ │ │ │ ├── iso2022jp.go
│ │ │ │ ├── maketables.go
│ │ │ │ ├── shiftjis.go
│ │ │ │ └── tables.go
│ │ │ ├── korean/
│ │ │ │ ├── euckr.go
│ │ │ │ ├── maketables.go
│ │ │ │ └── tables.go
│ │ │ ├── simplifiedchinese/
│ │ │ │ ├── all.go
│ │ │ │ ├── gbk.go
│ │ │ │ ├── hzgb2312.go
│ │ │ │ ├── maketables.go
│ │ │ │ └── tables.go
│ │ │ ├── testdata/
│ │ │ │ ├── candide-gb18030.txt
│ │ │ │ ├── candide-utf-16le.txt
│ │ │ │ ├── candide-utf-32be.txt
│ │ │ │ ├── candide-utf-8.txt
│ │ │ │ ├── candide-windows-1252.txt
│ │ │ │ ├── rashomon-euc-jp.txt
│ │ │ │ ├── rashomon-iso-2022-jp.txt
│ │ │ │ ├── rashomon-shift-jis.txt
│ │ │ │ ├── rashomon-utf-8.txt
│ │ │ │ ├── sunzi-bingfa-gb-levels-1-and-2-hz-gb2312.txt
│ │ │ │ ├── sunzi-bingfa-gb-levels-1-and-2-utf-8.txt
│ │ │ │ ├── sunzi-bingfa-simplified-gbk.txt
│ │ │ │ ├── sunzi-bingfa-simplified-utf-8.txt
│ │ │ │ ├── sunzi-bingfa-traditional-big5.txt
│ │ │ │ ├── sunzi-bingfa-traditional-utf-8.txt
│ │ │ │ ├── unsu-joh-eun-nal-euc-kr.txt
│ │ │ │ └── unsu-joh-eun-nal-utf-8.txt
│ │ │ ├── traditionalchinese/
│ │ │ │ ├── big5.go
│ │ │ │ ├── maketables.go
│ │ │ │ └── tables.go
│ │ │ └── unicode/
│ │ │ ├── override.go
│ │ │ ├── unicode.go
│ │ │ └── utf32/
│ │ │ └── utf32.go
│ │ ├── feature/
│ │ │ └── plural/
│ │ │ ├── common.go
│ │ │ ├── gen.go
│ │ │ ├── gen_common.go
│ │ │ ├── message.go
│ │ │ ├── plural.go
│ │ │ └── tables.go
│ │ ├── gen.go
│ │ ├── internal/
│ │ │ ├── catmsg/
│ │ │ │ ├── catmsg.go
│ │ │ │ ├── codec.go
│ │ │ │ └── varint.go
│ │ │ ├── cldrtree/
│ │ │ │ ├── cldrtree.go
│ │ │ │ ├── generate.go
│ │ │ │ ├── option.go
│ │ │ │ ├── testdata/
│ │ │ │ │ ├── test1/
│ │ │ │ │ │ ├── common/
│ │ │ │ │ │ │ └── main/
│ │ │ │ │ │ │ └── root.xml
│ │ │ │ │ │ └── output.go
│ │ │ │ │ └── test2/
│ │ │ │ │ ├── common/
│ │ │ │ │ │ └── main/
│ │ │ │ │ │ ├── en.xml
│ │ │ │ │ │ ├── en_001.xml
│ │ │ │ │ │ ├── en_GB.xml
│ │ │ │ │ │ └── root.xml
│ │ │ │ │ └── output.go
│ │ │ │ ├── tree.go
│ │ │ │ └── type.go
│ │ │ ├── colltab/
│ │ │ │ ├── collelem.go
│ │ │ │ ├── colltab.go
│ │ │ │ ├── contract.go
│ │ │ │ ├── iter.go
│ │ │ │ ├── numeric.go
│ │ │ │ ├── table.go
│ │ │ │ ├── trie.go
│ │ │ │ └── weighter.go
│ │ │ ├── export/
│ │ │ │ ├── README
│ │ │ │ └── idna/
│ │ │ │ ├── gen.go
│ │ │ │ ├── gen_common.go
│ │ │ │ ├── gen_trieval.go
│ │ │ │ ├── idna10.0.0.go
│ │ │ │ ├── idna9.0.0.go
│ │ │ │ ├── punycode.go
│ │ │ │ ├── tables10.0.0.go
│ │ │ │ ├── tables9.0.0.go
│ │ │ │ ├── trie.go
│ │ │ │ └── trieval.go
│ │ │ ├── format/
│ │ │ │ ├── format.go
│ │ │ │ └── parser.go
│ │ │ ├── gen/
│ │ │ │ ├── code.go
│ │ │ │ └── gen.go
│ │ │ ├── gen.go
│ │ │ ├── internal.go
│ │ │ ├── match.go
│ │ │ ├── number/
│ │ │ │ ├── common.go
│ │ │ │ ├── decimal.go
│ │ │ │ ├── format.go
│ │ │ │ ├── gen.go
│ │ │ │ ├── gen_common.go
│ │ │ │ ├── number.go
│ │ │ │ ├── pattern.go
│ │ │ │ ├── roundingmode_string.go
│ │ │ │ └── tables.go
│ │ │ ├── stringset/
│ │ │ │ └── set.go
│ │ │ ├── tables.go
│ │ │ ├── tag/
│ │ │ │ └── tag.go
│ │ │ ├── testtext/
│ │ │ │ ├── codesize.go
│ │ │ │ ├── flag.go
│ │ │ │ ├── gc.go
│ │ │ │ ├── gccgo.go
│ │ │ │ ├── go1_6.go
│ │ │ │ ├── go1_7.go
│ │ │ │ └── text.go
│ │ │ ├── triegen/
│ │ │ │ ├── compact.go
│ │ │ │ ├── print.go
│ │ │ │ └── triegen.go
│ │ │ ├── ucd/
│ │ │ │ └── ucd.go
│ │ │ └── utf8internal/
│ │ │ └── utf8internal.go
│ │ ├── language/
│ │ │ ├── Makefile
│ │ │ ├── common.go
│ │ │ ├── coverage.go
│ │ │ ├── display/
│ │ │ │ ├── dict.go
│ │ │ │ ├── display.go
│ │ │ │ ├── lookup.go
│ │ │ │ ├── maketables.go
│ │ │ │ └── tables.go
│ │ │ ├── doc.go
│ │ │ ├── gen.go
│ │ │ ├── gen_common.go
│ │ │ ├── gen_index.go
│ │ │ ├── go1_1.go
│ │ │ ├── go1_2.go
│ │ │ ├── index.go
│ │ │ ├── language.go
│ │ │ ├── lookup.go
│ │ │ ├── match.go
│ │ │ ├── parse.go
│ │ │ ├── tables.go
│ │ │ ├── tags.go
│ │ │ └── testdata/
│ │ │ ├── CLDRLocaleMatcherTest.txt
│ │ │ └── GoLocaleMatcherTest.txt
│ │ ├── message/
│ │ │ ├── catalog/
│ │ │ │ ├── catalog.go
│ │ │ │ ├── dict.go
│ │ │ │ ├── go19.go
│ │ │ │ └── gopre19.go
│ │ │ ├── catalog.go
│ │ │ ├── doc.go
│ │ │ ├── format.go
│ │ │ ├── message.go
│ │ │ ├── pipeline/
│ │ │ │ ├── extract.go
│ │ │ │ ├── generate.go
│ │ │ │ ├── message.go
│ │ │ │ ├── pipeline.go
│ │ │ │ └── rewrite.go
│ │ │ └── print.go
│ │ ├── number/
│ │ │ ├── doc.go
│ │ │ ├── format.go
│ │ │ ├── number.go
│ │ │ └── option.go
│ │ ├── runes/
│ │ │ ├── cond.go
│ │ │ └── runes.go
│ │ ├── search/
│ │ │ ├── index.go
│ │ │ ├── pattern.go
│ │ │ ├── search.go
│ │ │ └── tables.go
│ │ ├── secure/
│ │ │ ├── bidirule/
│ │ │ │ ├── bidirule.go
│ │ │ │ ├── bidirule10.0.0.go
│ │ │ │ └── bidirule9.0.0.go
│ │ │ ├── doc.go
│ │ │ └── precis/
│ │ │ ├── class.go
│ │ │ ├── context.go
│ │ │ ├── doc.go
│ │ │ ├── gen.go
│ │ │ ├── gen_trieval.go
│ │ │ ├── nickname.go
│ │ │ ├── options.go
│ │ │ ├── profile.go
│ │ │ ├── profiles.go
│ │ │ ├── tables10.0.0.go
│ │ │ ├── tables9.0.0.go
│ │ │ ├── transformer.go
│ │ │ └── trieval.go
│ │ ├── transform/
│ │ │ └── transform.go
│ │ ├── unicode/
│ │ │ ├── bidi/
│ │ │ │ ├── bidi.go
│ │ │ │ ├── bracket.go
│ │ │ │ ├── core.go
│ │ │ │ ├── gen.go
│ │ │ │ ├── gen_ranges.go
│ │ │ │ ├── gen_trieval.go
│ │ │ │ ├── prop.go
│ │ │ │ ├── tables10.0.0.go
│ │ │ │ ├── tables9.0.0.go
│ │ │ │ └── trieval.go
│ │ │ ├── cldr/
│ │ │ │ ├── base.go
│ │ │ │ ├── cldr.go
│ │ │ │ ├── collate.go
│ │ │ │ ├── decode.go
│ │ │ │ ├── makexml.go
│ │ │ │ ├── resolve.go
│ │ │ │ ├── slice.go
│ │ │ │ └── xml.go
│ │ │ ├── doc.go
│ │ │ ├── norm/
│ │ │ │ ├── composition.go
│ │ │ │ ├── forminfo.go
│ │ │ │ ├── input.go
│ │ │ │ ├── iter.go
│ │ │ │ ├── maketables.go
│ │ │ │ ├── normalize.go
│ │ │ │ ├── readwriter.go
│ │ │ │ ├── tables10.0.0.go
│ │ │ │ ├── tables9.0.0.go
│ │ │ │ ├── transform.go
│ │ │ │ ├── trie.go
│ │ │ │ └── triegen.go
│ │ │ ├── rangetable/
│ │ │ │ ├── gen.go
│ │ │ │ ├── merge.go
│ │ │ │ ├── rangetable.go
│ │ │ │ ├── tables10.0.0.go
│ │ │ │ └── tables9.0.0.go
│ │ │ └── runenames/
│ │ │ ├── bits.go
│ │ │ ├── gen.go
│ │ │ ├── gen_bits.go
│ │ │ ├── runenames.go
│ │ │ └── tables.go
│ │ └── width/
│ │ ├── gen.go
│ │ ├── gen_common.go
│ │ ├── gen_trieval.go
│ │ ├── kind_string.go
│ │ ├── tables10.0.0.go
│ │ ├── tables9.0.0.go
│ │ ├── transform.go
│ │ ├── trieval.go
│ │ └── width.go
│ ├── time/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── README.md
│ │ └── rate/
│ │ ├── rate.go
│ │ ├── rate_go16.go
│ │ └── rate_go17.go
│ └── tools/
│ ├── .gitattributes
│ ├── .gitignore
│ ├── AUTHORS
│ ├── CONTRIBUTING.md
│ ├── CONTRIBUTORS
│ ├── LICENSE
│ ├── PATENTS
│ ├── README.md
│ ├── benchmark/
│ │ └── parse/
│ │ └── parse.go
│ ├── blog/
│ │ ├── atom/
│ │ │ └── atom.go
│ │ └── blog.go
│ ├── cmd/
│ │ ├── benchcmp/
│ │ │ ├── benchcmp.go
│ │ │ ├── compare.go
│ │ │ └── doc.go
│ │ ├── bundle/
│ │ │ ├── .gitignore
│ │ │ ├── main.go
│ │ │ └── testdata/
│ │ │ ├── out.golden
│ │ │ └── src/
│ │ │ ├── domain.name/
│ │ │ │ └── importdecl/
│ │ │ │ └── p.go
│ │ │ └── initial/
│ │ │ ├── a.go
│ │ │ ├── b.go
│ │ │ └── c.go
│ │ ├── callgraph/
│ │ │ ├── main.go
│ │ │ └── testdata/
│ │ │ └── src/
│ │ │ └── pkg/
│ │ │ └── pkg.go
│ │ ├── compilebench/
│ │ │ └── main.go
│ │ ├── cover/
│ │ │ ├── README
│ │ │ ├── cover.go
│ │ │ ├── doc.go
│ │ │ ├── func.go
│ │ │ ├── html.go
│ │ │ └── testdata/
│ │ │ ├── main.go
│ │ │ └── test.go
│ │ ├── digraph/
│ │ │ └── digraph.go
│ │ ├── eg/
│ │ │ └── eg.go
│ │ ├── fiximports/
│ │ │ ├── main.go
│ │ │ └── testdata/
│ │ │ └── src/
│ │ │ ├── fruit.io/
│ │ │ │ ├── banana/
│ │ │ │ │ └── banana.go
│ │ │ │ ├── orange/
│ │ │ │ │ └── orange.go
│ │ │ │ └── pear/
│ │ │ │ └── pear.go
│ │ │ ├── new.com/
│ │ │ │ └── one/
│ │ │ │ └── one.go
│ │ │ ├── old.com/
│ │ │ │ ├── bad/
│ │ │ │ │ └── bad.go
│ │ │ │ └── one/
│ │ │ │ └── one.go
│ │ │ └── titanic.biz/
│ │ │ ├── bar/
│ │ │ │ └── bar.go
│ │ │ └── foo/
│ │ │ └── foo.go
│ │ ├── go-contrib-init/
│ │ │ └── contrib.go
│ │ ├── godex/
│ │ │ ├── doc.go
│ │ │ ├── gc.go
│ │ │ ├── gccgo.go
│ │ │ ├── godex.go
│ │ │ ├── isAlias18.go
│ │ │ ├── isAlias19.go
│ │ │ ├── print.go
│ │ │ ├── source.go
│ │ │ └── writetype.go
│ │ ├── godoc/
│ │ │ ├── blog.go
│ │ │ ├── codewalk.go
│ │ │ ├── dl.go
│ │ │ ├── doc.go
│ │ │ ├── goroot.go
│ │ │ ├── handlers.go
│ │ │ ├── index.go
│ │ │ ├── main.go
│ │ │ └── play.go
│ │ ├── goimports/
│ │ │ ├── doc.go
│ │ │ ├── goimports.go
│ │ │ ├── goimports_gc.go
│ │ │ └── goimports_not_gc.go
│ │ ├── gomvpkg/
│ │ │ └── main.go
│ │ ├── gopls/
│ │ │ ├── integration/
│ │ │ │ └── vscode/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── README.md
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ └── extension.ts
│ │ │ │ ├── tsconfig.json
│ │ │ │ └── tslint.json
│ │ │ └── main.go
│ │ ├── gorename/
│ │ │ └── main.go
│ │ ├── gotype/
│ │ │ ├── gotype.go
│ │ │ ├── sizesFor18.go
│ │ │ └── sizesFor19.go
│ │ ├── goyacc/
│ │ │ ├── doc.go
│ │ │ ├── testdata/
│ │ │ │ └── expr/
│ │ │ │ ├── README
│ │ │ │ ├── expr.y
│ │ │ │ └── main.go
│ │ │ └── yacc.go
│ │ ├── guru/
│ │ │ ├── callees.go
│ │ │ ├── callers.go
│ │ │ ├── callstack.go
│ │ │ ├── definition.go
│ │ │ ├── describe.go
│ │ │ ├── freevars.go
│ │ │ ├── guru.go
│ │ │ ├── implements.go
│ │ │ ├── isAlias18.go
│ │ │ ├── isAlias19.go
│ │ │ ├── main.go
│ │ │ ├── peers.go
│ │ │ ├── pointsto.go
│ │ │ ├── pos.go
│ │ │ ├── referrers.go
│ │ │ ├── serial/
│ │ │ │ └── serial.go
│ │ │ ├── testdata/
│ │ │ │ └── src/
│ │ │ │ ├── README.txt
│ │ │ │ ├── alias/
│ │ │ │ │ ├── alias.go
│ │ │ │ │ └── alias.golden
│ │ │ │ ├── calls/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── calls-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── definition-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ ├── main.golden
│ │ │ │ │ └── type.go
│ │ │ │ ├── describe/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── describe-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── freevars/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── implements/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── implements-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── implements-methods/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── implements-methods-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── imports/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── lib/
│ │ │ │ │ ├── lib.go
│ │ │ │ │ └── sublib/
│ │ │ │ │ └── sublib.go
│ │ │ │ ├── main/
│ │ │ │ │ └── multi.go
│ │ │ │ ├── peers/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── peers-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── pointsto/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── pointsto-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── referrers/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── referrers-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── reflection/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── softerrs/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── what/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ ├── what-json/
│ │ │ │ │ ├── main.go
│ │ │ │ │ └── main.golden
│ │ │ │ └── whicherrs/
│ │ │ │ ├── main.go
│ │ │ │ └── main.golden
│ │ │ ├── what.go
│ │ │ └── whicherrs.go
│ │ ├── html2article/
│ │ │ └── conv.go
│ │ ├── present/
│ │ │ ├── dir.go
│ │ │ ├── doc.go
│ │ │ ├── main.go
│ │ │ ├── play.go
│ │ │ ├── static/
│ │ │ │ ├── article.css
│ │ │ │ ├── dir.css
│ │ │ │ ├── dir.js
│ │ │ │ ├── jquery-ui.js
│ │ │ │ ├── notes.css
│ │ │ │ ├── notes.js
│ │ │ │ ├── slides.js
│ │ │ │ └── styles.css
│ │ │ └── templates/
│ │ │ ├── action.tmpl
│ │ │ ├── article.tmpl
│ │ │ ├── dir.tmpl
│ │ │ └── slides.tmpl
│ │ ├── splitdwarf/
│ │ │ ├── doc.go
│ │ │ ├── internal/
│ │ │ │ └── macho/
│ │ │ │ ├── fat.go
│ │ │ │ ├── file.go
│ │ │ │ ├── macho.go
│ │ │ │ ├── reloctype.go
│ │ │ │ ├── reloctype_string.go
│ │ │ │ └── testdata/
│ │ │ │ ├── clang-386-darwin-exec-with-rpath
│ │ │ │ ├── clang-386-darwin.obj
│ │ │ │ ├── clang-amd64-darwin-exec-with-rpath
│ │ │ │ ├── clang-amd64-darwin.obj
│ │ │ │ ├── fat-gcc-386-amd64-darwin-exec
│ │ │ │ ├── gcc-386-darwin-exec
│ │ │ │ ├── gcc-amd64-darwin-exec
│ │ │ │ ├── gcc-amd64-darwin-exec-debug
│ │ │ │ └── hello.c
│ │ │ └── splitdwarf.go
│ │ ├── ssadump/
│ │ │ └── main.go
│ │ ├── stress/
│ │ │ └── stress.go
│ │ ├── stringer/
│ │ │ ├── stringer.go
│ │ │ └── testdata/
│ │ │ ├── cgo.go
│ │ │ ├── conv.go
│ │ │ ├── day.go
│ │ │ ├── gap.go
│ │ │ ├── num.go
│ │ │ ├── number.go
│ │ │ ├── prime.go
│ │ │ ├── tag_main.go
│ │ │ ├── tag_tag.go
│ │ │ ├── unum.go
│ │ │ └── unum2.go
│ │ └── toolstash/
│ │ ├── buildall
│ │ ├── cmp.go
│ │ └── main.go
│ ├── codereview.cfg
│ ├── container/
│ │ └── intsets/
│ │ ├── popcnt_amd64.go
│ │ ├── popcnt_amd64.s
│ │ ├── popcnt_gccgo.go
│ │ ├── popcnt_gccgo_c.c
│ │ ├── popcnt_generic.go
│ │ ├── sparse.go
│ │ └── util.go
│ ├── cover/
│ │ └── profile.go
│ ├── go/
│ │ ├── analysis/
│ │ │ ├── analysis.go
│ │ │ ├── analysistest/
│ │ │ │ └── analysistest.go
│ │ │ ├── cmd/
│ │ │ │ └── vet/
│ │ │ │ ├── README
│ │ │ │ └── vet.go
│ │ │ ├── doc.go
│ │ │ ├── internal/
│ │ │ │ ├── analysisflags/
│ │ │ │ │ ├── flags.go
│ │ │ │ │ └── help.go
│ │ │ │ ├── checker/
│ │ │ │ │ └── checker.go
│ │ │ │ └── facts/
│ │ │ │ ├── facts.go
│ │ │ │ └── imports.go
│ │ │ ├── multichecker/
│ │ │ │ └── multichecker.go
│ │ │ ├── passes/
│ │ │ │ ├── README
│ │ │ │ ├── asmdecl/
│ │ │ │ │ ├── asmdecl.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ ├── asm.go
│ │ │ │ │ ├── asm1.s
│ │ │ │ │ ├── asm2.s
│ │ │ │ │ ├── asm3.s
│ │ │ │ │ ├── asm4.s
│ │ │ │ │ ├── asm5.s
│ │ │ │ │ ├── asm6.s
│ │ │ │ │ ├── asm7.s
│ │ │ │ │ └── asm8.s
│ │ │ │ ├── assign/
│ │ │ │ │ ├── assign.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── atomic/
│ │ │ │ │ ├── atomic.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── atomicalign/
│ │ │ │ │ ├── atomicalign.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ ├── a.go
│ │ │ │ │ │ └── stub.go
│ │ │ │ │ └── b/
│ │ │ │ │ ├── b.go
│ │ │ │ │ └── stub.go
│ │ │ │ ├── bools/
│ │ │ │ │ ├── bools.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── buildssa/
│ │ │ │ │ ├── buildssa.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── buildtag/
│ │ │ │ │ ├── buildtag.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── buildtag.go
│ │ │ │ ├── cgocall/
│ │ │ │ │ ├── cgocall.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ ├── cgo.go
│ │ │ │ │ │ └── cgo3.go
│ │ │ │ │ ├── b/
│ │ │ │ │ │ └── b.go
│ │ │ │ │ └── c/
│ │ │ │ │ └── c.go
│ │ │ │ ├── composite/
│ │ │ │ │ ├── composite.go
│ │ │ │ │ ├── testdata/
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── a/
│ │ │ │ │ │ └── a.go
│ │ │ │ │ └── whitelist.go
│ │ │ │ ├── copylock/
│ │ │ │ │ ├── copylock.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ ├── copylock.go
│ │ │ │ │ ├── copylock_func.go
│ │ │ │ │ └── copylock_range.go
│ │ │ │ ├── ctrlflow/
│ │ │ │ │ ├── ctrlflow.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ └── a.go
│ │ │ │ │ └── lib/
│ │ │ │ │ └── lib.go
│ │ │ │ ├── deepequalerrors/
│ │ │ │ │ ├── deepequalerrors.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── findcall/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── findcall/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── findcall.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── httpresponse/
│ │ │ │ │ ├── httpresponse.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── inspect/
│ │ │ │ │ └── inspect.go
│ │ │ │ ├── internal/
│ │ │ │ │ └── analysisutil/
│ │ │ │ │ └── util.go
│ │ │ │ ├── loopclosure/
│ │ │ │ │ ├── loopclosure.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── lostcancel/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── lostcancel/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── lostcancel.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ └── a.go
│ │ │ │ │ └── b/
│ │ │ │ │ └── b.go
│ │ │ │ ├── nilfunc/
│ │ │ │ │ ├── nilfunc.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── nilness/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── nilness/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── nilness.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── pkgfact/
│ │ │ │ │ ├── pkgfact.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ ├── a/
│ │ │ │ │ │ └── a.go
│ │ │ │ │ ├── b/
│ │ │ │ │ │ └── b.go
│ │ │ │ │ └── c/
│ │ │ │ │ └── c.go
│ │ │ │ ├── printf/
│ │ │ │ │ ├── printf.go
│ │ │ │ │ ├── testdata/
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ └── a.go
│ │ │ │ │ │ ├── b/
│ │ │ │ │ │ │ └── b.go
│ │ │ │ │ │ └── nofmt/
│ │ │ │ │ │ └── nofmt.go
│ │ │ │ │ └── types.go
│ │ │ │ ├── shadow/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── shadow/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── shadow.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── shift/
│ │ │ │ │ ├── dead.go
│ │ │ │ │ ├── shift.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── stdmethods/
│ │ │ │ │ ├── stdmethods.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ ├── structtag/
│ │ │ │ │ ├── structtag.go
│ │ │ │ │ └── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ ├── a.go
│ │ │ │ │ └── b/
│ │ │ │ │ └── b.go
│ │ │ │ ├── tests/
│ │ │ │ │ ├── testdata/
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── a/
│ │ │ │ │ │ │ └── a.go
│ │ │ │ │ │ └── divergent/
│ │ │ │ │ │ └── buf.go
│ │ │ │ │ └── tests.go
│ │ │ │ ├── unmarshal/
│ │ │ │ │ ├── cmd/
│ │ │ │ │ │ └── unmarshal/
│ │ │ │ │ │ └── main.go
│ │ │ │ │ ├── testdata/
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── a/
│ │ │ │ │ │ └── a.go
│ │ │ │ │ └── unmarshal.go
│ │ │ │ ├── unreachable/
│ │ │ │ │ ├── testdata/
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── a/
│ │ │ │ │ │ └── a.go
│ │ │ │ │ └── unreachable.go
│ │ │ │ ├── unsafeptr/
│ │ │ │ │ ├── testdata/
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── a/
│ │ │ │ │ │ └── a.go
│ │ │ │ │ └── unsafeptr.go
│ │ │ │ └── unusedresult/
│ │ │ │ ├── testdata/
│ │ │ │ │ └── src/
│ │ │ │ │ └── a/
│ │ │ │ │ └── a.go
│ │ │ │ └── unusedresult.go
│ │ │ ├── singlechecker/
│ │ │ │ └── singlechecker.go
│ │ │ ├── unitchecker/
│ │ │ │ ├── main.go
│ │ │ │ ├── unitchecker.go
│ │ │ │ └── unitchecker112.go
│ │ │ └── validate.go
│ │ ├── ast/
│ │ │ ├── astutil/
│ │ │ │ ├── enclosing.go
│ │ │ │ ├── imports.go
│ │ │ │ ├── rewrite.go
│ │ │ │ └── util.go
│ │ │ └── inspector/
│ │ │ ├── inspector.go
│ │ │ └── typeof.go
│ │ ├── buildutil/
│ │ │ ├── allpackages.go
│ │ │ ├── fakecontext.go
│ │ │ ├── overlay.go
│ │ │ ├── tags.go
│ │ │ └── util.go
│ │ ├── callgraph/
│ │ │ ├── callgraph.go
│ │ │ ├── cha/
│ │ │ │ ├── cha.go
│ │ │ │ └── testdata/
│ │ │ │ ├── func.go
│ │ │ │ ├── iface.go
│ │ │ │ ├── issue23925.go
│ │ │ │ └── recv.go
│ │ │ ├── rta/
│ │ │ │ ├── rta.go
│ │ │ │ └── testdata/
│ │ │ │ ├── func.go
│ │ │ │ ├── iface.go
│ │ │ │ └── rtype.go
│ │ │ ├── static/
│ │ │ │ └── static.go
│ │ │ └── util.go
│ │ ├── cfg/
│ │ │ ├── builder.go
│ │ │ └── cfg.go
│ │ ├── expect/
│ │ │ ├── expect.go
│ │ │ ├── extract.go
│ │ │ └── testdata/
│ │ │ └── test.go
│ │ ├── gccgoexportdata/
│ │ │ ├── gccgoexportdata.go
│ │ │ └── testdata/
│ │ │ ├── errors.gox
│ │ │ ├── long.a
│ │ │ └── short.a
│ │ ├── gcexportdata/
│ │ │ ├── gcexportdata.go
│ │ │ ├── importer.go
│ │ │ ├── main.go
│ │ │ └── testdata/
│ │ │ └── errors-ae16.a
│ │ ├── internal/
│ │ │ ├── cgo/
│ │ │ │ ├── cgo.go
│ │ │ │ └── cgo_pkgconfig.go
│ │ │ ├── gccgoimporter/
│ │ │ │ ├── ar.go
│ │ │ │ ├── backdoor.go
│ │ │ │ ├── gccgoinstallation.go
│ │ │ │ ├── importer.go
│ │ │ │ ├── newInterface10.go
│ │ │ │ ├── newInterface11.go
│ │ │ │ ├── parser.go
│ │ │ │ └── testdata/
│ │ │ │ ├── aliases.go
│ │ │ │ ├── aliases.gox
│ │ │ │ ├── complexnums.go
│ │ │ │ ├── complexnums.gox
│ │ │ │ ├── conversions.go
│ │ │ │ ├── conversions.gox
│ │ │ │ ├── escapeinfo.go
│ │ │ │ ├── escapeinfo.gox
│ │ │ │ ├── imports.go
│ │ │ │ ├── imports.gox
│ │ │ │ ├── issue27856.go
│ │ │ │ ├── issue27856.gox
│ │ │ │ ├── issue29198.go
│ │ │ │ ├── issue29198.gox
│ │ │ │ ├── libimportsar.a
│ │ │ │ ├── nointerface.go
│ │ │ │ ├── nointerface.gox
│ │ │ │ ├── pointer.go
│ │ │ │ ├── pointer.gox
│ │ │ │ ├── time.gox
│ │ │ │ ├── unicode.gox
│ │ │ │ └── v1reflect.gox
│ │ │ ├── gcimporter/
│ │ │ │ ├── bexport.go
│ │ │ │ ├── bimport.go
│ │ │ │ ├── exportdata.go
│ │ │ │ ├── gcimporter.go
│ │ │ │ ├── iexport.go
│ │ │ │ ├── iimport.go
│ │ │ │ ├── newInterface10.go
│ │ │ │ ├── newInterface11.go
│ │ │ │ └── testdata/
│ │ │ │ ├── a.go
│ │ │ │ ├── b.go
│ │ │ │ ├── exports.go
│ │ │ │ ├── issue15920.go
│ │ │ │ ├── issue20046.go
│ │ │ │ ├── issue25301.go
│ │ │ │ ├── p.go
│ │ │ │ └── versions/
│ │ │ │ ├── test.go
│ │ │ │ ├── test_go1.11_0i.a
│ │ │ │ ├── test_go1.11_6b.a
│ │ │ │ ├── test_go1.11_999b.a
│ │ │ │ ├── test_go1.11_999i.a
│ │ │ │ ├── test_go1.7_0.a
│ │ │ │ ├── test_go1.7_1.a
│ │ │ │ ├── test_go1.8_4.a
│ │ │ │ └── test_go1.8_5.a
│ │ │ └── packagesdriver/
│ │ │ └── sizes.go
│ │ ├── loader/
│ │ │ ├── doc.go
│ │ │ ├── loader.go
│ │ │ ├── testdata/
│ │ │ │ ├── a.go
│ │ │ │ ├── b.go
│ │ │ │ └── badpkgdecl.go
│ │ │ └── util.go
│ │ ├── packages/
│ │ │ ├── doc.go
│ │ │ ├── external.go
│ │ │ ├── golist.go
│ │ │ ├── golist_fallback.go
│ │ │ ├── golist_fallback_testmain.go
│ │ │ ├── golist_overlay.go
│ │ │ ├── gopackages/
│ │ │ │ └── main.go
│ │ │ ├── packages.go
│ │ │ ├── packagestest/
│ │ │ │ ├── expect.go
│ │ │ │ ├── export.go
│ │ │ │ ├── gopath.go
│ │ │ │ ├── modules.go
│ │ │ │ ├── modules_111.go
│ │ │ │ └── testdata/
│ │ │ │ └── test.go
│ │ │ ├── testdata/
│ │ │ │ ├── README
│ │ │ │ ├── TestName_Modules/
│ │ │ │ │ ├── pkg/
│ │ │ │ │ │ └── mod/
│ │ │ │ │ │ ├── cache/
│ │ │ │ │ │ │ └── download/
│ │ │ │ │ │ │ └── github.com/
│ │ │ │ │ │ │ └── heschik/
│ │ │ │ │ │ │ └── tools-testrepo/
│ │ │ │ │ │ │ ├── @v/
│ │ │ │ │ │ │ │ ├── list
│ │ │ │ │ │ │ │ ├── v1.0.0.info
│ │ │ │ │ │ │ │ ├── v1.0.0.mod
│ │ │ │ │ │ │ │ └── v1.0.0.ziphash
│ │ │ │ │ │ │ └── v2/
│ │ │ │ │ │ │ └── @v/
│ │ │ │ │ │ │ ├── list
│ │ │ │ │ │ │ ├── v2.0.0.info
│ │ │ │ │ │ │ ├── v2.0.0.mod
│ │ │ │ │ │ │ └── v2.0.0.ziphash
│ │ │ │ │ │ └── github.com/
│ │ │ │ │ │ └── heschik/
│ │ │ │ │ │ ├── tools-testrepo/
│ │ │ │ │ │ │ └── v2@v2.0.0/
│ │ │ │ │ │ │ ├── go.mod
│ │ │ │ │ │ │ └── pkg/
│ │ │ │ │ │ │ └── pkg.go
│ │ │ │ │ │ └── tools-testrepo@v1.0.0/
│ │ │ │ │ │ ├── go.mod
│ │ │ │ │ │ └── pkg/
│ │ │ │ │ │ └── pkg.go
│ │ │ │ │ └── src/
│ │ │ │ │ └── b/
│ │ │ │ │ └── pkg/
│ │ │ │ │ └── pkg.go
│ │ │ │ └── TestName_ModulesDedup/
│ │ │ │ └── pkg/
│ │ │ │ └── mod/
│ │ │ │ ├── cache/
│ │ │ │ │ └── download/
│ │ │ │ │ └── github.com/
│ │ │ │ │ └── heschik/
│ │ │ │ │ └── tools-testrepo/
│ │ │ │ │ ├── @v/
│ │ │ │ │ │ ├── list
│ │ │ │ │ │ ├── v1.0.0.info
│ │ │ │ │ │ ├── v1.0.0.mod
│ │ │ │ │ │ └── v1.0.0.ziphash
│ │ │ │ │ └── v2/
│ │ │ │ │ └── @v/
│ │ │ │ │ ├── list
│ │ │ │ │ ├── v2.0.1.info
│ │ │ │ │ ├── v2.0.1.mod
│ │ │ │ │ ├── v2.0.1.ziphash
│ │ │ │ │ ├── v2.0.2.info
│ │ │ │ │ ├── v2.0.2.mod
│ │ │ │ │ └── v2.0.2.ziphash
│ │ │ │ └── github.com/
│ │ │ │ └── heschik/
│ │ │ │ ├── tools-testrepo/
│ │ │ │ │ ├── v2@v2.0.1/
│ │ │ │ │ │ ├── go.mod
│ │ │ │ │ │ └── pkg/
│ │ │ │ │ │ └── pkg.go
│ │ │ │ │ └── v2@v2.0.2/
│ │ │ │ │ ├── go.mod
│ │ │ │ │ └── pkg/
│ │ │ │ │ └── pkg.go
│ │ │ │ └── tools-testrepo@v1.0.0/
│ │ │ │ ├── go.mod
│ │ │ │ └── pkg/
│ │ │ │ └── pkg.go
│ │ │ └── visit.go
│ │ ├── pointer/
│ │ │ ├── TODO
│ │ │ ├── analysis.go
│ │ │ ├── api.go
│ │ │ ├── callgraph.go
│ │ │ ├── constraint.go
│ │ │ ├── doc.go
│ │ │ ├── gen.go
│ │ │ ├── hvn.go
│ │ │ ├── intrinsics.go
│ │ │ ├── labels.go
│ │ │ ├── opt.go
│ │ │ ├── print.go
│ │ │ ├── query.go
│ │ │ ├── reflect.go
│ │ │ ├── solve.go
│ │ │ ├── testdata/
│ │ │ │ ├── another.go
│ │ │ │ ├── arrayreflect.go
│ │ │ │ ├── arrays.go
│ │ │ │ ├── channels.go
│ │ │ │ ├── chanreflect.go
│ │ │ │ ├── chanreflect1.go
│ │ │ │ ├── context.go
│ │ │ │ ├── conv.go
│ │ │ │ ├── extended.go
│ │ │ │ ├── finalizer.go
│ │ │ │ ├── flow.go
│ │ │ │ ├── fmtexcerpt.go
│ │ │ │ ├── func.go
│ │ │ │ ├── funcreflect.go
│ │ │ │ ├── hello.go
│ │ │ │ ├── interfaces.go
│ │ │ │ ├── issue9002.go
│ │ │ │ ├── mapreflect.go
│ │ │ │ ├── maps.go
│ │ │ │ ├── panic.go
│ │ │ │ ├── recur.go
│ │ │ │ ├── reflect.go
│ │ │ │ ├── rtti.go
│ │ │ │ ├── structreflect.go
│ │ │ │ ├── structs.go
│ │ │ │ └── timer.go
│ │ │ └── util.go
│ │ ├── ssa/
│ │ │ ├── blockopt.go
│ │ │ ├── builder.go
│ │ │ ├── const.go
│ │ │ ├── create.go
│ │ │ ├── doc.go
│ │ │ ├── dom.go
│ │ │ ├── emit.go
│ │ │ ├── func.go
│ │ │ ├── identical.go
│ │ │ ├── identical_17.go
│ │ │ ├── interp/
│ │ │ │ ├── external.go
│ │ │ │ ├── external_darwin.go
│ │ │ │ ├── external_unix.go
│ │ │ │ ├── interp.go
│ │ │ │ ├── map.go
│ │ │ │ ├── ops.go
│ │ │ │ ├── reflect.go
│ │ │ │ ├── testdata/
│ │ │ │ │ ├── boundmeth.go
│ │ │ │ │ ├── callstack.go
│ │ │ │ │ ├── complit.go
│ │ │ │ │ ├── coverage.go
│ │ │ │ │ ├── defer.go
│ │ │ │ │ ├── fieldprom.go
│ │ │ │ │ ├── ifaceconv.go
│ │ │ │ │ ├── ifaceprom.go
│ │ │ │ │ ├── initorder.go
│ │ │ │ │ ├── methprom.go
│ │ │ │ │ ├── mrvchain.go
│ │ │ │ │ ├── range.go
│ │ │ │ │ ├── recover.go
│ │ │ │ │ ├── reflect.go
│ │ │ │ │ └── static.go
│ │ │ │ └── value.go
│ │ │ ├── lift.go
│ │ │ ├── lvalue.go
│ │ │ ├── methods.go
│ │ │ ├── mode.go
│ │ │ ├── print.go
│ │ │ ├── sanity.go
│ │ │ ├── source.go
│ │ │ ├── ssa.go
│ │ │ ├── ssautil/
│ │ │ │ ├── load.go
│ │ │ │ ├── switch.go
│ │ │ │ ├── testdata/
│ │ │ │ │ └── switches.go
│ │ │ │ └── visit.go
│ │ │ ├── testdata/
│ │ │ │ ├── objlookup.go
│ │ │ │ ├── structconv.go
│ │ │ │ └── valueforexpr.go
│ │ │ ├── testmain.go
│ │ │ ├── util.go
│ │ │ └── wrappers.go
│ │ ├── types/
│ │ │ ├── objectpath/
│ │ │ │ └── objectpath.go
│ │ │ └── typeutil/
│ │ │ ├── callee.go
│ │ │ ├── imports.go
│ │ │ ├── map.go
│ │ │ ├── methodsetcache.go
│ │ │ └── ui.go
│ │ └── vcs/
│ │ ├── discovery.go
│ │ ├── env.go
│ │ ├── http.go
│ │ └── vcs.go
│ ├── go.mod
│ ├── go.sum
│ ├── godoc/
│ │ ├── README.md
│ │ ├── analysis/
│ │ │ ├── README
│ │ │ ├── analysis.go
│ │ │ ├── callgraph.go
│ │ │ ├── implements.go
│ │ │ ├── json.go
│ │ │ ├── peers.go
│ │ │ └── typeinfo.go
│ │ ├── corpus.go
│ │ ├── dirtrees.go
│ │ ├── format.go
│ │ ├── godoc.go
│ │ ├── golangorgenv/
│ │ │ └── golangorgenv.go
│ │ ├── index.go
│ │ ├── linkify.go
│ │ ├── meta.go
│ │ ├── page.go
│ │ ├── parser.go
│ │ ├── pres.go
│ │ ├── redirect/
│ │ │ ├── hash.go
│ │ │ ├── redirect.go
│ │ │ └── rietveld.go
│ │ ├── search.go
│ │ ├── server.go
│ │ ├── snippet.go
│ │ ├── spec.go
│ │ ├── spot.go
│ │ ├── static/
│ │ │ ├── analysis/
│ │ │ │ └── help.html
│ │ │ ├── callgraph.html
│ │ │ ├── codewalk.html
│ │ │ ├── codewalkdir.html
│ │ │ ├── dirlist.html
│ │ │ ├── doc.go
│ │ │ ├── error.html
│ │ │ ├── example.html
│ │ │ ├── gen.go
│ │ │ ├── godoc.html
│ │ │ ├── godocs.js
│ │ │ ├── implements.html
│ │ │ ├── jquery.js
│ │ │ ├── jquery.treeview.css
│ │ │ ├── jquery.treeview.edit.js
│ │ │ ├── jquery.treeview.js
│ │ │ ├── makestatic.go
│ │ │ ├── methodset.html
│ │ │ ├── opensearch.xml
│ │ │ ├── package.html
│ │ │ ├── packageroot.html
│ │ │ ├── play.js
│ │ │ ├── playground.js
│ │ │ ├── search.html
│ │ │ ├── searchcode.html
│ │ │ ├── searchdoc.html
│ │ │ ├── searchtxt.html
│ │ │ ├── static.go
│ │ │ └── style.css
│ │ ├── tab.go
│ │ ├── template.go
│ │ ├── util/
│ │ │ ├── throttle.go
│ │ │ └── util.go
│ │ ├── versions.go
│ │ └── vfs/
│ │ ├── emptyvfs.go
│ │ ├── gatefs/
│ │ │ └── gatefs.go
│ │ ├── httpfs/
│ │ │ └── httpfs.go
│ │ ├── mapfs/
│ │ │ └── mapfs.go
│ │ ├── namespace.go
│ │ ├── os.go
│ │ ├── vfs.go
│ │ └── zipfs/
│ │ └── zipfs.go
│ ├── imports/
│ │ ├── fix.go
│ │ ├── imports.go
│ │ ├── mkindex.go
│ │ ├── mkstdlib.go
│ │ ├── mod.go
│ │ ├── sortimports.go
│ │ ├── testdata/
│ │ │ └── mod/
│ │ │ ├── example.com_v1.0.0.txt
│ │ │ ├── golang.org_x_text_v0.0.0-20170915032832-14c0d48ead0c.txt
│ │ │ ├── rsc.io_!q!u!o!t!e_v1.5.2.txt
│ │ │ ├── rsc.io_!q!u!o!t!e_v1.5.3-!p!r!e.txt
│ │ │ ├── rsc.io_quote_v1.5.1.txt
│ │ │ ├── rsc.io_quote_v1.5.2.txt
│ │ │ ├── rsc.io_quote_v2_v2.0.1.txt
│ │ │ ├── rsc.io_quote_v3_v3.0.0.txt
│ │ │ ├── rsc.io_sampler_v1.3.0.txt
│ │ │ └── rsc.io_sampler_v1.3.1.txt
│ │ └── zstdlib.go
│ ├── internal/
│ │ ├── fastwalk/
│ │ │ ├── fastwalk.go
│ │ │ ├── fastwalk_dirent_fileno.go
│ │ │ ├── fastwalk_dirent_ino.go
│ │ │ ├── fastwalk_dirent_namlen_bsd.go
│ │ │ ├── fastwalk_dirent_namlen_linux.go
│ │ │ ├── fastwalk_portable.go
│ │ │ └── fastwalk_unix.go
│ │ ├── gopathwalk/
│ │ │ └── walk.go
│ │ ├── jsonrpc2/
│ │ │ ├── jsonrpc2.go
│ │ │ ├── log.go
│ │ │ ├── stream.go
│ │ │ └── wire.go
│ │ ├── lsp/
│ │ │ ├── cache/
│ │ │ │ ├── check.go
│ │ │ │ ├── file.go
│ │ │ │ ├── pkg.go
│ │ │ │ └── view.go
│ │ │ ├── cmd/
│ │ │ │ ├── cmd.go
│ │ │ │ ├── definition.go
│ │ │ │ ├── location.go
│ │ │ │ ├── query.go
│ │ │ │ ├── serve.go
│ │ │ │ └── testdata/
│ │ │ │ ├── a/
│ │ │ │ │ └── a.go
│ │ │ │ └── b/
│ │ │ │ └── b.go
│ │ │ ├── completion.go
│ │ │ ├── diagnostics.go
│ │ │ ├── diff/
│ │ │ │ └── diff.go
│ │ │ ├── format.go
│ │ │ ├── imports.go
│ │ │ ├── position.go
│ │ │ ├── protocol/
│ │ │ │ ├── client.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── preserve/
│ │ │ │ │ ├── README
│ │ │ │ │ ├── basic.go
│ │ │ │ │ ├── diagnostics.go
│ │ │ │ │ ├── general.go
│ │ │ │ │ ├── language.go
│ │ │ │ │ ├── registration.go
│ │ │ │ │ ├── text.go
│ │ │ │ │ ├── window.go
│ │ │ │ │ └── workspace.go
│ │ │ │ ├── printers.go
│ │ │ │ ├── protocol.go
│ │ │ │ ├── server.go
│ │ │ │ ├── tsprotocol.go
│ │ │ │ └── typescript/
│ │ │ │ ├── README.md
│ │ │ │ └── go.ts
│ │ │ ├── server.go
│ │ │ ├── signature_help.go
│ │ │ ├── source/
│ │ │ │ ├── analysis.go
│ │ │ │ ├── completion.go
│ │ │ │ ├── definition.go
│ │ │ │ ├── diagnostics.go
│ │ │ │ ├── format.go
│ │ │ │ ├── signature_help.go
│ │ │ │ ├── uri.go
│ │ │ │ └── view.go
│ │ │ └── testdata/
│ │ │ ├── anon/
│ │ │ │ └── anon.go.in
│ │ │ ├── bad/
│ │ │ │ ├── bad0.go
│ │ │ │ └── bad1.go
│ │ │ ├── bar/
│ │ │ │ └── bar.go.in
│ │ │ ├── baz/
│ │ │ │ └── baz.go.in
│ │ │ ├── builtins/
│ │ │ │ └── builtins.go
│ │ │ ├── cast/
│ │ │ │ └── cast.go.in
│ │ │ ├── complit/
│ │ │ │ └── complit.go.in
│ │ │ ├── errors/
│ │ │ │ └── errors.go
│ │ │ ├── foo/
│ │ │ │ └── foo.go
│ │ │ ├── format/
│ │ │ │ ├── bad_format.go.in
│ │ │ │ ├── good_format.go
│ │ │ │ └── newline_format.go.in
│ │ │ ├── func_rank/
│ │ │ │ └── func_rank.go.in
│ │ │ ├── godef/
│ │ │ │ ├── a/
│ │ │ │ │ ├── a.go
│ │ │ │ │ └── random.go
│ │ │ │ ├── b/
│ │ │ │ │ ├── b.go
│ │ │ │ │ ├── c.go
│ │ │ │ │ └── c.go.saved
│ │ │ │ └── broken/
│ │ │ │ └── unclosedIf.go.in
│ │ │ ├── good/
│ │ │ │ ├── good0.go
│ │ │ │ └── good1.go
│ │ │ ├── noparse/
│ │ │ │ └── noparse.go.in
│ │ │ ├── noparse_format/
│ │ │ │ └── noparse_format.go.in
│ │ │ ├── rank/
│ │ │ │ ├── assign_rank.go.in
│ │ │ │ └── binexpr_rank.go.in
│ │ │ ├── selector/
│ │ │ │ └── selector.go.in
│ │ │ ├── testy/
│ │ │ │ └── testy.go
│ │ │ └── types/
│ │ │ └── types.go
│ │ ├── module/
│ │ │ └── module.go
│ │ ├── semver/
│ │ │ └── semver.go
│ │ ├── span/
│ │ │ ├── parse.go
│ │ │ ├── span.go
│ │ │ ├── token.go
│ │ │ ├── token111.go
│ │ │ ├── token112.go
│ │ │ ├── uri.go
│ │ │ └── utf16.go
│ │ └── tool/
│ │ └── tool.go
│ ├── playground/
│ │ ├── playground.go
│ │ └── socket/
│ │ └── socket.go
│ ├── present/
│ │ ├── args.go
│ │ ├── caption.go
│ │ ├── code.go
│ │ ├── doc.go
│ │ ├── html.go
│ │ ├── iframe.go
│ │ ├── image.go
│ │ ├── link.go
│ │ ├── parse.go
│ │ ├── style.go
│ │ └── video.go
│ ├── refactor/
│ │ ├── README
│ │ ├── eg/
│ │ │ ├── eg.go
│ │ │ ├── match.go
│ │ │ ├── rewrite.go
│ │ │ └── testdata/
│ │ │ ├── A.template
│ │ │ ├── A1.go
│ │ │ ├── A1.golden
│ │ │ ├── A2.go
│ │ │ ├── A2.golden
│ │ │ ├── B.template
│ │ │ ├── B1.go
│ │ │ ├── B1.golden
│ │ │ ├── C.template
│ │ │ ├── C1.go
│ │ │ ├── C1.golden
│ │ │ ├── D.template
│ │ │ ├── D1.go
│ │ │ ├── D1.golden
│ │ │ ├── E.template
│ │ │ ├── E1.go
│ │ │ ├── E1.golden
│ │ │ ├── F.template
│ │ │ ├── F1.go
│ │ │ ├── F1.golden
│ │ │ ├── G.template
│ │ │ ├── G1.go
│ │ │ ├── G1.golden
│ │ │ ├── H.template
│ │ │ ├── H1.go
│ │ │ ├── H1.golden
│ │ │ ├── I.template
│ │ │ ├── I1.go
│ │ │ ├── I1.golden
│ │ │ ├── J.template
│ │ │ ├── J1.go
│ │ │ ├── J1.golden
│ │ │ ├── bad_type.template
│ │ │ ├── expr_type_mismatch.template
│ │ │ ├── no_after_return.template
│ │ │ ├── no_before.template
│ │ │ └── type_mismatch.template
│ │ ├── importgraph/
│ │ │ └── graph.go
│ │ ├── rename/
│ │ │ ├── check.go
│ │ │ ├── mvpkg.go
│ │ │ ├── rename.go
│ │ │ ├── spec.go
│ │ │ └── util.go
│ │ └── satisfy/
│ │ └── find.go
│ └── third_party/
│ ├── moduleloader/
│ │ ├── LICENSE
│ │ └── moduleloader.js
│ ├── typescript/
│ │ ├── LICENSE
│ │ └── typescript.js
│ └── webcomponents/
│ ├── LICENSE
│ └── customelements.js
├── google.golang.org/
│ └── appengine/
│ ├── .travis.yml
│ ├── CONTRIBUTING.md
│ ├── LICENSE
│ ├── README.md
│ ├── aetest/
│ │ ├── doc.go
│ │ ├── instance.go
│ │ ├── instance_classic.go
│ │ ├── instance_vm.go
│ │ └── user.go
│ ├── appengine.go
│ ├── appengine_vm.go
│ ├── blobstore/
│ │ ├── blobstore.go
│ │ └── read.go
│ ├── capability/
│ │ └── capability.go
│ ├── channel/
│ │ └── channel.go
│ ├── cloudsql/
│ │ ├── cloudsql.go
│ │ ├── cloudsql_classic.go
│ │ └── cloudsql_vm.go
│ ├── cmd/
│ │ ├── aebundler/
│ │ │ └── aebundler.go
│ │ ├── aedeploy/
│ │ │ └── aedeploy.go
│ │ └── aefix/
│ │ ├── ae.go
│ │ ├── fix.go
│ │ ├── main.go
│ │ └── typecheck.go
│ ├── datastore/
│ │ ├── datastore.go
│ │ ├── doc.go
│ │ ├── key.go
│ │ ├── load.go
│ │ ├── metadata.go
│ │ ├── prop.go
│ │ ├── query.go
│ │ ├── save.go
│ │ └── transaction.go
│ ├── delay/
│ │ ├── delay.go
│ │ ├── delay_go17.go
│ │ └── delay_pre17.go
│ ├── demos/
│ │ ├── guestbook/
│ │ │ ├── app.yaml
│ │ │ ├── guestbook.go
│ │ │ ├── index.yaml
│ │ │ └── templates/
│ │ │ └── guestbook.html
│ │ └── helloworld/
│ │ ├── app.yaml
│ │ └── helloworld.go
│ ├── errors.go
│ ├── file/
│ │ └── file.go
│ ├── go.mod
│ ├── go.sum
│ ├── identity.go
│ ├── image/
│ │ └── image.go
│ ├── internal/
│ │ ├── aetesting/
│ │ │ └── fake.go
│ │ ├── api.go
│ │ ├── api_classic.go
│ │ ├── api_common.go
│ │ ├── api_pre17.go
│ │ ├── app_id.go
│ │ ├── app_identity/
│ │ │ ├── app_identity_service.pb.go
│ │ │ └── app_identity_service.proto
│ │ ├── base/
│ │ │ ├── api_base.pb.go
│ │ │ └── api_base.proto
│ │ ├── blobstore/
│ │ │ ├── blobstore_service.pb.go
│ │ │ └── blobstore_service.proto
│ │ ├── capability/
│ │ │ ├── capability_service.pb.go
│ │ │ └── capability_service.proto
│ │ ├── channel/
│ │ │ ├── channel_service.pb.go
│ │ │ └── channel_service.proto
│ │ ├── datastore/
│ │ │ ├── datastore_v3.pb.go
│ │ │ └── datastore_v3.proto
│ │ ├── identity.go
│ │ ├── identity_classic.go
│ │ ├── identity_vm.go
│ │ ├── image/
│ │ │ ├── images_service.pb.go
│ │ │ └── images_service.proto
│ │ ├── internal.go
│ │ ├── log/
│ │ │ ├── log_service.pb.go
│ │ │ └── log_service.proto
│ │ ├── mail/
│ │ │ ├── mail_service.pb.go
│ │ │ └── mail_service.proto
│ │ ├── main.go
│ │ ├── main_vm.go
│ │ ├── memcache/
│ │ │ ├── memcache_service.pb.go
│ │ │ └── memcache_service.proto
│ │ ├── metadata.go
│ │ ├── modules/
│ │ │ ├── modules_service.pb.g
Copy disabled (too large)
Download .txt
Showing preview only (14,555K chars total). Download the full file to get everything.
SYMBOL INDEX (174860 symbols across 3872 files)
FILE: build.go
function env (line 57) | func env(env, d string) string {
type Build (line 64) | type Build
method All (line 67) | func (Build) All() error {
method Go (line 74) | func (Build) Go() error {
method Docker (line 113) | func (Build) Docker() error {
method Publish (line 142) | func (Build) Publish() error {
method BuildContainer (line 164) | func (Build) BuildContainer() error {
type Test (line 182) | type Test
method All (line 185) | func (Test) All() error {
method Unit (line 191) | func (Test) Unit() error {
method Lint (line 213) | func (Test) Lint() error {
type CodeGen (line 232) | type CodeGen
method Update (line 235) | func (CodeGen) Update() error {
method Verify (line 244) | func (CodeGen) Verify() error {
function srcDir (line 252) | func srcDir() string {
function flags (line 256) | func flags() string {
function hash (line 272) | func hash() string {
function version (line 278) | func version() string {
FILE: cmd/netlink-test/main.go
function main (line 23) | func main() {
FILE: cmd/wormhole/controller.go
function init (line 42) | func init() {
function runController (line 146) | func runController(cmd *cobra.Command, args []string) error {
function syncCniBin (line 195) | func syncCniBin() error {
FILE: cmd/wormhole/main.go
function init (line 38) | func init() {
function main (line 48) | func main() {
FILE: cmd/wormhole/version.go
function init (line 34) | func init() {
function version (line 39) | func version(cmd *cobra.Command, args []string) error {
FILE: mage.go
function main (line 11) | func main() { os.Exit(mage.Main()) }
FILE: pkg/apis/wormhole.gravitational.io/register.go
constant GroupName (line 18) | GroupName = "wormhole.gravitational.io"
FILE: pkg/apis/wormhole.gravitational.io/v1beta1/register.go
function Resource (line 33) | func Resource(resource string) schema.GroupResource {
FILE: pkg/apis/wormhole.gravitational.io/v1beta1/wgnode_types.go
type WgnodeSpec (line 21) | type WgnodeSpec struct
type WgnodeStatus (line 27) | type WgnodeStatus struct
type Wgnode (line 43) | type Wgnode struct
type WgnodeList (line 54) | type WgnodeList struct
function init (line 60) | func init() {
FILE: pkg/apis/wormhole.gravitational.io/v1beta1/zz_generated.deepcopy.go
method DeepCopyInto (line 27) | func (in *Wgnode) DeepCopyInto(out *Wgnode) {
method DeepCopy (line 37) | func (in *Wgnode) DeepCopy() *Wgnode {
method DeepCopyObject (line 47) | func (in *Wgnode) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 55) | func (in *WgnodeList) DeepCopyInto(out *WgnodeList) {
method DeepCopy (line 70) | func (in *WgnodeList) DeepCopy() *WgnodeList {
method DeepCopyObject (line 80) | func (in *WgnodeList) DeepCopyObject() runtime.Object {
method DeepCopyInto (line 88) | func (in *WgnodeSpec) DeepCopyInto(out *WgnodeSpec) {
method DeepCopy (line 94) | func (in *WgnodeSpec) DeepCopy() *WgnodeSpec {
method DeepCopyInto (line 104) | func (in *WgnodeStatus) DeepCopyInto(out *WgnodeStatus) {
method DeepCopy (line 110) | func (in *WgnodeStatus) DeepCopy() *WgnodeStatus {
FILE: pkg/client/clientset/versioned/clientset.go
type Interface (line 27) | type Interface interface
type Clientset (line 36) | type Clientset struct
method WormholeV1beta1 (line 42) | func (c *Clientset) WormholeV1beta1() wormholev1beta1.WormholeV1beta1I...
method Wormhole (line 48) | func (c *Clientset) Wormhole() wormholev1beta1.WormholeV1beta1Interface {
method Discovery (line 53) | func (c *Clientset) Discovery() discovery.DiscoveryInterface {
function NewForConfig (line 61) | func NewForConfig(c *rest.Config) (*Clientset, error) {
function NewForConfigOrDie (line 82) | func NewForConfigOrDie(c *rest.Config) *Clientset {
function New (line 91) | func New(c rest.Interface) *Clientset {
FILE: pkg/client/clientset/versioned/fake/clientset_generated.go
function NewSimpleClientset (line 35) | func NewSimpleClientset(objects ...runtime.Object) *Clientset {
type Clientset (line 62) | type Clientset struct
method Discovery (line 67) | func (c *Clientset) Discovery() discovery.DiscoveryInterface {
method WormholeV1beta1 (line 74) | func (c *Clientset) WormholeV1beta1() wormholev1beta1.WormholeV1beta1I...
method Wormhole (line 79) | func (c *Clientset) Wormhole() wormholev1beta1.WormholeV1beta1Interface {
FILE: pkg/client/clientset/versioned/fake/register.go
function init (line 52) | func init() {
FILE: pkg/client/clientset/versioned/scheme/register.go
function init (line 52) | func init() {
FILE: pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/fake/fake_wgnode.go
type FakeWgnodes (line 31) | type FakeWgnodes struct
method Get (line 41) | func (c *FakeWgnodes) Get(name string, options v1.GetOptions) (result ...
method List (line 52) | func (c *FakeWgnodes) List(opts v1.ListOptions) (result *v1beta1.Wgnod...
method Watch (line 74) | func (c *FakeWgnodes) Watch(opts v1.ListOptions) (watch.Interface, err...
method Create (line 81) | func (c *FakeWgnodes) Create(wgnode *v1beta1.Wgnode) (result *v1beta1....
method Update (line 92) | func (c *FakeWgnodes) Update(wgnode *v1beta1.Wgnode) (result *v1beta1....
method UpdateStatus (line 104) | func (c *FakeWgnodes) UpdateStatus(wgnode *v1beta1.Wgnode) (*v1beta1.W...
method Delete (line 115) | func (c *FakeWgnodes) Delete(name string, options *v1.DeleteOptions) e...
method DeleteCollection (line 123) | func (c *FakeWgnodes) DeleteCollection(options *v1.DeleteOptions, list...
method Patch (line 131) | func (c *FakeWgnodes) Patch(name string, pt types.PatchType, data []by...
FILE: pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/fake/fake_wormhole.gravitational.io_client.go
type FakeWormholeV1beta1 (line 26) | type FakeWormholeV1beta1 struct
method Wgnodes (line 30) | func (c *FakeWormholeV1beta1) Wgnodes(namespace string) v1beta1.Wgnode...
method RESTClient (line 36) | func (c *FakeWormholeV1beta1) RESTClient() rest.Interface {
FILE: pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/generated_expansion.go
type WgnodeExpansion (line 20) | type WgnodeExpansion interface
FILE: pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/wgnode.go
type WgnodesGetter (line 33) | type WgnodesGetter interface
type WgnodeInterface (line 38) | type WgnodeInterface interface
type wgnodes (line 52) | type wgnodes struct
method Get (line 66) | func (c *wgnodes) Get(name string, options v1.GetOptions) (result *v1b...
method List (line 79) | func (c *wgnodes) List(opts v1.ListOptions) (result *v1beta1.WgnodeLis...
method Watch (line 96) | func (c *wgnodes) Watch(opts v1.ListOptions) (watch.Interface, error) {
method Create (line 111) | func (c *wgnodes) Create(wgnode *v1beta1.Wgnode) (result *v1beta1.Wgno...
method Update (line 123) | func (c *wgnodes) Update(wgnode *v1beta1.Wgnode) (result *v1beta1.Wgno...
method UpdateStatus (line 138) | func (c *wgnodes) UpdateStatus(wgnode *v1beta1.Wgnode) (result *v1beta...
method Delete (line 152) | func (c *wgnodes) Delete(name string, options *v1.DeleteOptions) error {
method DeleteCollection (line 163) | func (c *wgnodes) DeleteCollection(options *v1.DeleteOptions, listOpti...
method Patch (line 179) | func (c *wgnodes) Patch(name string, pt types.PatchType, data []byte, ...
function newWgnodes (line 58) | func newWgnodes(c *WormholeV1beta1Client, namespace string) *wgnodes {
FILE: pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/wormhole.gravitational.io_client.go
type WormholeV1beta1Interface (line 27) | type WormholeV1beta1Interface interface
type WormholeV1beta1Client (line 33) | type WormholeV1beta1Client struct
method Wgnodes (line 37) | func (c *WormholeV1beta1Client) Wgnodes(namespace string) WgnodeInterf...
method RESTClient (line 84) | func (c *WormholeV1beta1Client) RESTClient() rest.Interface {
function NewForConfig (line 42) | func NewForConfig(c *rest.Config) (*WormholeV1beta1Client, error) {
function NewForConfigOrDie (line 56) | func NewForConfigOrDie(c *rest.Config) *WormholeV1beta1Client {
function New (line 65) | func New(c rest.Interface) *WormholeV1beta1Client {
function setConfigDefaults (line 69) | func setConfigDefaults(config *rest.Config) error {
FILE: pkg/client/informers/externalversions/factory.go
type SharedInformerOption (line 35) | type SharedInformerOption
type sharedInformerFactory (line 37) | type sharedInformerFactory struct
method Start (line 110) | func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) {
method WaitForCacheSync (line 123) | func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{...
method InformerFor (line 146) | func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFun...
method Wormhole (line 177) | func (f *sharedInformerFactory) Wormhole() wormholegravitationalio.Int...
function WithCustomResyncConfig (line 52) | func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) Sh...
function WithTweakListOptions (line 62) | func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListO...
function WithNamespace (line 70) | func WithNamespace(namespace string) SharedInformerOption {
function NewSharedInformerFactory (line 78) | func NewSharedInformerFactory(client versioned.Interface, defaultResync ...
function NewFilteredSharedInformerFactory (line 86) | func NewFilteredSharedInformerFactory(client versioned.Interface, defaul...
function NewSharedInformerFactoryWithOptions (line 91) | func NewSharedInformerFactoryWithOptions(client versioned.Interface, def...
type SharedInformerFactory (line 169) | type SharedInformerFactory interface
FILE: pkg/client/informers/externalversions/generic.go
type GenericInformer (line 30) | type GenericInformer interface
type genericInformer (line 35) | type genericInformer struct
method Informer (line 41) | func (f *genericInformer) Informer() cache.SharedIndexInformer {
method Lister (line 46) | func (f *genericInformer) Lister() cache.GenericLister {
method ForResource (line 52) | func (f *sharedInformerFactory) ForResource(resource schema.GroupVersion...
FILE: pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go
type NewInformerFunc (line 30) | type NewInformerFunc
type SharedInformerFactory (line 33) | type SharedInformerFactory interface
type TweakListOptionsFunc (line 39) | type TweakListOptionsFunc
FILE: pkg/client/informers/externalversions/wormhole.gravitational.io/interface.go
type Interface (line 26) | type Interface interface
type group (line 31) | type group struct
method V1beta1 (line 43) | func (g *group) V1beta1() v1beta1.Interface {
function New (line 38) | func New(f internalinterfaces.SharedInformerFactory, namespace string, t...
FILE: pkg/client/informers/externalversions/wormhole.gravitational.io/v1beta1/interface.go
type Interface (line 25) | type Interface interface
type version (line 30) | type version struct
method Wgnodes (line 42) | func (v *version) Wgnodes() WgnodeInformer {
function New (line 37) | func New(f internalinterfaces.SharedInformerFactory, namespace string, t...
FILE: pkg/client/informers/externalversions/wormhole.gravitational.io/v1beta1/wgnode.go
type WgnodeInformer (line 35) | type WgnodeInformer interface
type wgnodeInformer (line 40) | type wgnodeInformer struct
method defaultInformer (line 78) | func (f *wgnodeInformer) defaultInformer(client versioned.Interface, r...
method Informer (line 82) | func (f *wgnodeInformer) Informer() cache.SharedIndexInformer {
method Lister (line 86) | func (f *wgnodeInformer) Lister() v1beta1.WgnodeLister {
function NewWgnodeInformer (line 49) | func NewWgnodeInformer(client versioned.Interface, namespace string, res...
function NewFilteredWgnodeInformer (line 56) | func NewFilteredWgnodeInformer(client versioned.Interface, namespace str...
FILE: pkg/client/listers/wormhole.gravitational.io/v1beta1/expansion_generated.go
type WgnodeListerExpansion (line 22) | type WgnodeListerExpansion interface
type WgnodeNamespaceListerExpansion (line 26) | type WgnodeNamespaceListerExpansion interface
FILE: pkg/client/listers/wormhole.gravitational.io/v1beta1/wgnode.go
type WgnodeLister (line 28) | type WgnodeLister interface
type wgnodeLister (line 37) | type wgnodeLister struct
method List (line 47) | func (s *wgnodeLister) List(selector labels.Selector) (ret []*v1beta1....
method Wgnodes (line 55) | func (s *wgnodeLister) Wgnodes(namespace string) WgnodeNamespaceLister {
function NewWgnodeLister (line 42) | func NewWgnodeLister(indexer cache.Indexer) WgnodeLister {
type WgnodeNamespaceLister (line 60) | type WgnodeNamespaceLister interface
type wgnodeNamespaceLister (line 70) | type wgnodeNamespaceLister struct
method List (line 76) | func (s wgnodeNamespaceLister) List(selector labels.Selector) (ret []*...
method Get (line 84) | func (s wgnodeNamespaceLister) Get(name string) (*v1beta1.Wgnode, erro...
FILE: pkg/controller/cni.go
method configureCNI (line 25) | func (d *controller) configureCNI() error {
FILE: pkg/controller/controller.go
type Config (line 35) | type Config struct
type Controller (line 71) | type Controller interface
type controller (line 75) | type controller struct
method init (line 112) | func (d *controller) init() error {
method Run (line 189) | func (d *controller) Run(ctx context.Context) error {
method run (line 263) | func (d *controller) run(ctx context.Context) error {
function New (line 102) | func New(config Config, logger logrus.FieldLogger) (Controller, error) {
FILE: pkg/controller/ipam.go
type ipamInfo (line 23) | type ipamInfo struct
method detectIPAM (line 30) | func (d *controller) detectIPAM() error {
method calculateIPAMOffsets (line 81) | func (d *controller) calculateIPAMOffsets() error {
FILE: pkg/controller/ipam_test.go
function TestDetectIPAM (line 26) | func TestDetectIPAM(t *testing.T) {
function TestDetectIPAMNodeAddress (line 94) | func TestDetectIPAMNodeAddress(t *testing.T) {
function TestIPAMOffsets (line 223) | func TestIPAMOffsets(t *testing.T) {
FILE: pkg/controller/kubernetes.go
constant secretObjectName (line 44) | secretObjectName = "wireguard-shared-secrets"
method initKubeObjects (line 50) | func (c *controller) initKubeObjects() error {
method publishNodeInfo (line 68) | func (c *controller) publishNodeInfo() error {
method startNodeWatcher (line 101) | func (c *controller) startNodeWatcher(ctx context.Context) {
method runNodeWatcher (line 122) | func (c *controller) runNodeWatcher(ctx context.Context) {
method handlerFuncs (line 131) | func (c *controller) handlerFuncs() cache.ResourceEventHandlerFuncs {
method handleAdded (line 139) | func (c *controller) handleAdded(obj interface{}) {
method handleUpdated (line 147) | func (c *controller) handleUpdated(oldObj interface{}, newObj interface{...
method startSecretWatcher (line 156) | func (c *controller) startSecretWatcher(ctx context.Context) {
method runSecretWatcher (line 177) | func (c *controller) runSecretWatcher(ctx context.Context) {
method waitForControllerSync (line 186) | func (c *controller) waitForControllerSync(ctx context.Context) error {
method resync (line 202) | func (c *controller) resync() error {
method syncWithWireguard (line 235) | func (c *controller) syncWithWireguard() error {
function nodePairKey (line 282) | func nodePairKey(node1, node2 string) string {
method updatePeerSecrets (line 291) | func (c *controller) updatePeerSecrets(overwrite bool) error {
method startNodeDeletionWatcher (line 332) | func (c *controller) startNodeDeletionWatcher(ctx context.Context) {
method checkNodeDeletion (line 356) | func (c *controller) checkNodeDeletion() error {
constant nodeSleepInterval (line 384) | nodeSleepInterval = 1 * time.Minute
function calculateNextNodeSleepInterval (line 393) | func calculateNextNodeSleepInterval(nodeCount int) time.Duration {
FILE: pkg/controller/kubernetes_test.go
function TestPublishNodeInfo (line 33) | func TestPublishNodeInfo(t *testing.T) {
function TestIntegratePeers (line 80) | func TestIntegratePeers(t *testing.T) {
function TestInitKubeObjects (line 204) | func TestInitKubeObjects(t *testing.T) {
function TestUpdatePeerSecrets (line 217) | func TestUpdatePeerSecrets(t *testing.T) {
function TestCalculateNodeSleepInterval (line 346) | func TestCalculateNodeSleepInterval(t *testing.T) {
function TestCheckNodeDeletion (line 425) | func TestCheckNodeDeletion(t *testing.T) {
type mockWireguardInterface (line 505) | type mockWireguardInterface struct
method PublicKey (line 512) | func (m *mockWireguardInterface) PublicKey() string {
method SyncPeers (line 516) | func (m *mockWireguardInterface) SyncPeers(peers map[string]wireguard....
method GenerateSharedKey (line 523) | func (m *mockWireguardInterface) GenerateSharedKey() (string, error) {
FILE: pkg/controller/overlay.go
method detectOverlayCIDR (line 31) | func (d *controller) detectOverlayCIDR() error {
type kubeadmClusterConfiguration (line 55) | type kubeadmClusterConfiguration struct
function loadOverlayCidrFromKubeadm (line 61) | func loadOverlayCidrFromKubeadm(client kubernetes.Interface) (string, er...
method loadOverlayCidrFromPlanet (line 90) | func (d *controller) loadOverlayCidrFromPlanet() (string, error) {
function parsePodSubnetFromPlanet (line 100) | func parsePodSubnetFromPlanet(buf []byte) (string, error) {
FILE: pkg/controller/overlay_test.go
function TestKubeadmClusterConfiguration (line 26) | func TestKubeadmClusterConfiguration(t *testing.T) {
function TestKubeadmClusterConfigurationErrors (line 58) | func TestKubeadmClusterConfigurationErrors(t *testing.T) {
function TestPlanetConfiguration (line 129) | func TestPlanetConfiguration(t *testing.T) {
function TestPlanetConfigurationError (line 165) | func TestPlanetConfigurationError(t *testing.T) {
FILE: pkg/controller/utils.go
function runningInPod (line 23) | func runningInPod() bool {
method detectNodeName (line 27) | func (c *controller) detectNodeName() error {
method updateNodeNameFromPod (line 47) | func (c *controller) updateNodeNameFromPod(podName, podNamespace string)...
FILE: pkg/iptables/iptables.go
type chain (line 34) | type chain struct
type Config (line 39) | type Config struct
method Run (line 58) | func (c *Config) Run(ctx context.Context) error {
method sync (line 83) | func (c *Config) sync(ctx context.Context) {
method generateRules (line 122) | func (c *Config) generateRules(links []netlink.Link) []rule {
method rulesOk (line 221) | func (c *Config) rulesOk() error {
method cleanupRules (line 239) | func (c *Config) cleanupRules() {
method createRules (line 264) | func (c *Config) createRules() error {
constant postrouting (line 114) | postrouting = "POSTROUTING"
constant nat (line 115) | nat = "nat"
constant filter (line 116) | filter = "filter"
constant mangle (line 117) | mangle = "mangle"
constant forward (line 118) | forward = "FORWARD"
constant input (line 119) | input = "INPUT"
type rule (line 300) | type rule struct
method getRule (line 307) | func (r rule) getRule() []string {
FILE: pkg/wireguard/utils.go
type Wg (line 36) | type Wg interface
type wg (line 53) | type wg struct
method genKey (line 63) | func (w *wg) genKey() (string, error) {
method genPSK (line 71) | func (w *wg) genPSK() (string, error) {
method pubKey (line 79) | func (w *wg) pubKey(key string) (string, error) {
method setPrivateKey (line 111) | func (w *wg) setPrivateKey(key string) error {
method createInterface (line 135) | func (w *wg) createInterface() error {
method deleteInterface (line 155) | func (w *wg) deleteInterface() error {
method setIP (line 173) | func (w *wg) setIP(ip string) error {
method setListenPort (line 191) | func (w *wg) setListenPort(port int) error {
method setUp (line 201) | func (w *wg) setUp() error {
method setDown (line 216) | func (w *wg) setDown() error {
method setRoute (line 226) | func (w *wg) setRoute(route string) error {
method removePeer (line 237) | func (w *wg) removePeer(peerPublicKey string) error {
method addPeer (line 248) | func (w *wg) addPeer(peer Peer) error {
method getPeers (line 287) | func (w *wg) getPeers() (map[string]PeerStatus, error) {
function replaceNone (line 351) | func replaceNone(s string) string {
method ToPeer (line 358) | func (p PeerStatus) ToPeer() Peer {
method Equals (line 367) | func (p Peer) Equals(r Peer) bool {
FILE: pkg/wireguard/wireguard.go
type Config (line 29) | type Config struct
method CheckAndSetDefaults (line 171) | func (c *Config) CheckAndSetDefaults() error {
type Peer (line 40) | type Peer struct
type PeerStatus (line 51) | type PeerStatus struct
type Interface (line 70) | type Interface interface
type iface (line 76) | type iface struct
method PublicKey (line 195) | func (i iface) PublicKey() string {
method SyncPeers (line 199) | func (i iface) SyncPeers(peers map[string]Peer) error {
method GenerateSharedKey (line 259) | func (i iface) GenerateSharedKey() (string, error) {
method AddPeer (line 263) | func (i iface) AddPeer(peer Peer) error {
method RemovePeer (line 270) | func (i iface) RemovePeer(publicKey string) error {
function New (line 84) | func New(config Config, logger logrus.FieldLogger) (Interface, error) {
function new (line 123) | func new(config Config, wg Wg, logger logrus.FieldLogger) (*iface, error) {
FILE: pkg/wireguard/wireguard_test.go
constant test (line 28) | test = "test"
function TestCheckDefaults (line 31) | func TestCheckDefaults(t *testing.T) {
function TestNew (line 99) | func TestNew(t *testing.T) {
function TestSyncPeers (line 131) | func TestSyncPeers(t *testing.T) {
type mockWg (line 229) | type mockWg struct
method genKey (line 239) | func (w *mockWg) genKey() (string, error) {
method genPSK (line 246) | func (w *mockWg) genPSK() (string, error) {
method pubKey (line 253) | func (w *mockWg) pubKey(key string) (string, error) {
method setPrivateKey (line 260) | func (w *mockWg) setPrivateKey(key string) error {
method createInterface (line 268) | func (w *mockWg) createInterface() error {
method deleteInterface (line 275) | func (w *mockWg) deleteInterface() error {
method setIP (line 282) | func (w *mockWg) setIP(ip string) error {
method setListenPort (line 290) | func (w *mockWg) setListenPort(port int) error {
method setUp (line 298) | func (w *mockWg) setUp() error {
method setDown (line 306) | func (w *mockWg) setDown() error {
method setRoute (line 314) | func (w *mockWg) setRoute(route string) error {
method removePeer (line 318) | func (w *mockWg) removePeer(peerPublicKey string) error {
method addPeer (line 323) | func (w *mockWg) addPeer(peer Peer) error {
method getPeers (line 328) | func (w *mockWg) getPeers() (map[string]PeerStatus, error) {
FILE: vendor/github.com/cenkalti/backoff/backoff.go
type BackOff (line 16) | type BackOff interface
constant Stop (line 36) | Stop time.Duration = -1
type ZeroBackOff (line 40) | type ZeroBackOff struct
method Reset (line 42) | func (b *ZeroBackOff) Reset() {}
method NextBackOff (line 44) | func (b *ZeroBackOff) NextBackOff() time.Duration { return 0 }
type StopBackOff (line 48) | type StopBackOff struct
method Reset (line 50) | func (b *StopBackOff) Reset() {}
method NextBackOff (line 52) | func (b *StopBackOff) NextBackOff() time.Duration { return Stop }
type ConstantBackOff (line 57) | type ConstantBackOff struct
method Reset (line 61) | func (b *ConstantBackOff) Reset() {}
method NextBackOff (line 62) | func (b *ConstantBackOff) NextBackOff() time.Duration { return b.Inter...
function NewConstantBackOff (line 64) | func NewConstantBackOff(d time.Duration) *ConstantBackOff {
FILE: vendor/github.com/cenkalti/backoff/context.go
type BackOffContext (line 10) | type BackOffContext interface
type backOffContext (line 15) | type backOffContext struct
method Context (line 48) | func (b *backOffContext) Context() context.Context {
method NextBackOff (line 52) | func (b *backOffContext) NextBackOff() time.Duration {
function WithContext (line 23) | func WithContext(b BackOff, ctx context.Context) BackOffContext {
function ensureContext (line 41) | func ensureContext(b BackOff) BackOffContext {
FILE: vendor/github.com/cenkalti/backoff/exponential.go
type ExponentialBackOff (line 54) | type ExponentialBackOff struct
method Reset (line 106) | func (b *ExponentialBackOff) Reset() {
method NextBackOff (line 113) | func (b *ExponentialBackOff) NextBackOff() time.Duration {
method GetElapsedTime (line 128) | func (b *ExponentialBackOff) GetElapsedTime() time.Duration {
method incrementCurrentInterval (line 133) | func (b *ExponentialBackOff) incrementCurrentInterval() {
type Clock (line 69) | type Clock interface
constant DefaultInitialInterval (line 75) | DefaultInitialInterval = 500 * time.Millisecond
constant DefaultRandomizationFactor (line 76) | DefaultRandomizationFactor = 0.5
constant DefaultMultiplier (line 77) | DefaultMultiplier = 1.5
constant DefaultMaxInterval (line 78) | DefaultMaxInterval = 60 * time.Second
constant DefaultMaxElapsedTime (line 79) | DefaultMaxElapsedTime = 15 * time.Minute
function NewExponentialBackOff (line 83) | func NewExponentialBackOff() *ExponentialBackOff {
type systemClock (line 96) | type systemClock struct
method Now (line 98) | func (t systemClock) Now() time.Time {
function getRandomValueFromInterval (line 144) | func getRandomValueFromInterval(randomizationFactor, random float64, cur...
FILE: vendor/github.com/cenkalti/backoff/retry.go
type Operation (line 7) | type Operation
type Notify (line 14) | type Notify
function Retry (line 24) | func Retry(o Operation, b BackOff) error { return RetryNotify(o, b, nil) }
function RetryNotify (line 28) | func RetryNotify(operation Operation, b BackOff, notify Notify) error {
type PermanentError (line 69) | type PermanentError struct
method Error (line 73) | func (e *PermanentError) Error() string {
function Permanent (line 78) | func Permanent(err error) *PermanentError {
FILE: vendor/github.com/cenkalti/backoff/ticker.go
type Ticker (line 12) | type Ticker struct
method Stop (line 40) | func (t *Ticker) Stop() {
method run (line 44) | func (t *Ticker) run() {
method send (line 68) | func (t *Ticker) send(tick time.Time) <-chan time.Time {
function NewTicker (line 26) | func NewTicker(b BackOff) *Ticker {
FILE: vendor/github.com/cenkalti/backoff/tries.go
function WithMaxRetries (line 12) | func WithMaxRetries(b BackOff, max uint64) BackOff {
type backOffTries (line 16) | type backOffTries struct
method NextBackOff (line 22) | func (b *backOffTries) NextBackOff() time.Duration {
method Reset (line 32) | func (b *backOffTries) Reset() {
FILE: vendor/github.com/coreos/go-iptables/iptables/iptables.go
type Error (line 30) | type Error struct
method ExitStatus (line 37) | func (e *Error) ExitStatus() int {
method Error (line 44) | func (e *Error) Error() string {
method IsNotExist (line 49) | func (e *Error) IsNotExist() bool {
type Protocol (line 56) | type Protocol
constant ProtocolIPv4 (line 59) | ProtocolIPv4 Protocol = iota
constant ProtocolIPv6 (line 60) | ProtocolIPv6
type IPTables (line 63) | type IPTables struct
method Proto (line 108) | func (ipt *IPTables) Proto() Protocol {
method Exists (line 113) | func (ipt *IPTables) Exists(table, chain string, rulespec ...string) (...
method Insert (line 132) | func (ipt *IPTables) Insert(table, chain string, pos int, rulespec ......
method Append (line 138) | func (ipt *IPTables) Append(table, chain string, rulespec ...string) e...
method AppendUnique (line 144) | func (ipt *IPTables) AppendUnique(table, chain string, rulespec ...str...
method Delete (line 158) | func (ipt *IPTables) Delete(table, chain string, rulespec ...string) e...
method List (line 164) | func (ipt *IPTables) List(table, chain string) ([]string, error) {
method ListWithCounters (line 170) | func (ipt *IPTables) ListWithCounters(table, chain string) ([]string, ...
method ListChains (line 176) | func (ipt *IPTables) ListChains(table string) ([]string, error) {
method Stats (line 201) | func (ipt *IPTables) Stats(table, chain string) ([][]string, error) {
method executeList (line 266) | func (ipt *IPTables) executeList(args []string) ([]string, error) {
method NewChain (line 299) | func (ipt *IPTables) NewChain(table, chain string) error {
method ClearChain (line 305) | func (ipt *IPTables) ClearChain(table, chain string) error {
method RenameChain (line 328) | func (ipt *IPTables) RenameChain(table, oldChain, newChain string) err...
method DeleteChain (line 334) | func (ipt *IPTables) DeleteChain(table, chain string) error {
method ChangePolicy (line 339) | func (ipt *IPTables) ChangePolicy(table, chain, target string) error {
method HasRandomFully (line 344) | func (ipt *IPTables) HasRandomFully() bool {
method GetIptablesVersion (line 349) | func (ipt *IPTables) GetIptablesVersion() (int, int, int) {
method run (line 355) | func (ipt *IPTables) run(args ...string) error {
method runWithOutput (line 361) | func (ipt *IPTables) runWithOutput(args []string, stdout io.Writer) er...
method existsForOldIptables (line 498) | func (ipt *IPTables) existsForOldIptables(table, chain string, rulespe...
function New (line 77) | func New() (*IPTables, error) {
function NewWithProtocol (line 83) | func NewWithProtocol(proto Protocol) (*IPTables, error) {
function getIptablesCommand (line 398) | func getIptablesCommand(proto Protocol) string {
function getIptablesCommandSupport (line 407) | func getIptablesCommandSupport(v1 int, v2 int, v3 int) (bool, bool, bool) {
function extractIptablesVersion (line 414) | func extractIptablesVersion(str string) (int, int, int, string, error) {
function getIptablesVersionString (line 444) | func getIptablesVersionString(path string) (string, error) {
function iptablesHasCheckCommand (line 456) | func iptablesHasCheckCommand(v1 int, v2 int, v3 int) bool {
function iptablesHasWaitCommand (line 470) | func iptablesHasWaitCommand(v1 int, v2 int, v3 int) bool {
function iptablesHasRandomFully (line 484) | func iptablesHasRandomFully(v1 int, v2 int, v3 int) bool {
function filterRuleOutput (line 515) | func filterRuleOutput(rule string) string {
FILE: vendor/github.com/coreos/go-iptables/iptables/lock.go
constant xtablesLockFilePath (line 29) | xtablesLockFilePath = "/var/run/xtables.lock"
constant defaultFilePerm (line 31) | defaultFilePerm = 0600
type Unlocker (line 34) | type Unlocker interface
type nopUnlocker (line 38) | type nopUnlocker struct
method Unlock (line 40) | func (_ nopUnlocker) Unlock() error { return nil }
type fileLock (line 42) | type fileLock struct
method tryLock (line 54) | func (l *fileLock) tryLock() (Unlocker, error) {
method Unlock (line 71) | func (l *fileLock) Unlock() error {
function newXtablesFileLock (line 78) | func newXtablesFileLock() (*fileLock, error) {
FILE: vendor/github.com/davecgh/go-spew/spew/bypass.go
constant UnsafeDisabled (line 33) | UnsafeDisabled = false
constant ptrSize (line 36) | ptrSize = unsafe.Sizeof((*byte)(nil))
type flag (line 39) | type flag
constant flagKindMask (line 54) | flagKindMask = flag(0x1f)
function flagField (line 80) | func flagField(v *reflect.Value) *flag {
function unsafeReflectValue (line 93) | func unsafeReflectValue(v reflect.Value) reflect.Value {
function init (line 105) | func init() {
FILE: vendor/github.com/davecgh/go-spew/spew/bypasssafe.go
constant UnsafeDisabled (line 28) | UnsafeDisabled = true
function unsafeReflectValue (line 36) | func unsafeReflectValue(v reflect.Value) reflect.Value {
FILE: vendor/github.com/davecgh/go-spew/spew/common.go
function catchPanic (line 72) | func catchPanic(w io.Writer, v reflect.Value) {
function handleMethods (line 85) | func handleMethods(cs *ConfigState, w io.Writer, v reflect.Value) (handl...
function printBool (line 144) | func printBool(w io.Writer, val bool) {
function printInt (line 153) | func printInt(w io.Writer, val int64, base int) {
function printUint (line 158) | func printUint(w io.Writer, val uint64, base int) {
function printFloat (line 164) | func printFloat(w io.Writer, val float64, precision int) {
function printComplex (line 170) | func printComplex(w io.Writer, c complex128, floatPrecision int) {
function printHexPtr (line 185) | func printHexPtr(w io.Writer, p uintptr) {
type valuesSorter (line 219) | type valuesSorter struct
method Len (line 279) | func (s *valuesSorter) Len() int {
method Swap (line 285) | func (s *valuesSorter) Swap(i, j int) {
method Less (line 326) | func (s *valuesSorter) Less(i, j int) bool {
function newValuesSorter (line 228) | func newValuesSorter(values []reflect.Value, cs *ConfigState) sort.Inter...
function canSortSimply (line 256) | func canSortSimply(kind reflect.Kind) bool {
function valueSortLess (line 295) | func valueSortLess(a, b reflect.Value) bool {
function sortValues (line 336) | func sortValues(values []reflect.Value, cs *ConfigState) {
FILE: vendor/github.com/davecgh/go-spew/spew/config.go
type ConfigState (line 37) | type ConfigState struct
method Errorf (line 115) | func (c *ConfigState) Errorf(format string, a ...interface{}) (err err...
method Fprint (line 127) | func (c *ConfigState) Fprint(w io.Writer, a ...interface{}) (n int, er...
method Fprintf (line 139) | func (c *ConfigState) Fprintf(w io.Writer, format string, a ...interfa...
method Fprintln (line 150) | func (c *ConfigState) Fprintln(w io.Writer, a ...interface{}) (n int, ...
method Print (line 162) | func (c *ConfigState) Print(a ...interface{}) (n int, err error) {
method Printf (line 174) | func (c *ConfigState) Printf(format string, a ...interface{}) (n int, ...
method Println (line 186) | func (c *ConfigState) Println(a ...interface{}) (n int, err error) {
method Sprint (line 197) | func (c *ConfigState) Sprint(a ...interface{}) string {
method Sprintf (line 208) | func (c *ConfigState) Sprintf(format string, a ...interface{}) string {
method Sprintln (line 219) | func (c *ConfigState) Sprintln(a ...interface{}) string {
method NewFormatter (line 240) | func (c *ConfigState) NewFormatter(v interface{}) fmt.Formatter {
method Fdump (line 246) | func (c *ConfigState) Fdump(w io.Writer, a ...interface{}) {
method Dump (line 273) | func (c *ConfigState) Dump(a ...interface{}) {
method Sdump (line 279) | func (c *ConfigState) Sdump(a ...interface{}) string {
method convertArgs (line 288) | func (c *ConfigState) convertArgs(args []interface{}) (formatters []in...
function NewDefaultConfig (line 304) | func NewDefaultConfig() *ConfigState {
FILE: vendor/github.com/davecgh/go-spew/spew/dump.go
type dumpState (line 51) | type dumpState struct
method indent (line 62) | func (d *dumpState) indent() {
method unpackValue (line 73) | func (d *dumpState) unpackValue(v reflect.Value) reflect.Value {
method dumpPtr (line 81) | func (d *dumpState) dumpPtr(v reflect.Value) {
method dumpSlice (line 161) | func (d *dumpState) dumpSlice(v reflect.Value) {
method dump (line 251) | func (d *dumpState) dump(v reflect.Value) {
function fdump (line 453) | func fdump(cs *ConfigState, w io.Writer, a ...interface{}) {
function Fdump (line 472) | func Fdump(w io.Writer, a ...interface{}) {
function Sdump (line 478) | func Sdump(a ...interface{}) string {
function Dump (line 507) | func Dump(a ...interface{}) {
FILE: vendor/github.com/davecgh/go-spew/spew/format.go
constant supportedFlags (line 28) | supportedFlags = "0-+# "
type formatState (line 34) | type formatState struct
method buildDefaultFormat (line 47) | func (f *formatState) buildDefaultFormat() (format string) {
method constructOrigFormat (line 65) | func (f *formatState) constructOrigFormat(verb rune) (format string) {
method unpackValue (line 94) | func (f *formatState) unpackValue(v reflect.Value) reflect.Value {
method formatPtr (line 105) | func (f *formatState) formatPtr(v reflect.Value) {
method format (line 201) | func (f *formatState) format(v reflect.Value) {
method Format (line 371) | func (f *formatState) Format(fs fmt.State, verb rune) {
function newFormatter (line 394) | func newFormatter(cs *ConfigState, v interface{}) fmt.Formatter {
function NewFormatter (line 417) | func NewFormatter(v interface{}) fmt.Formatter {
FILE: vendor/github.com/davecgh/go-spew/spew/spew.go
function Errorf (line 32) | func Errorf(format string, a ...interface{}) (err error) {
function Fprint (line 44) | func Fprint(w io.Writer, a ...interface{}) (n int, err error) {
function Fprintf (line 56) | func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err e...
function Fprintln (line 67) | func Fprintln(w io.Writer, a ...interface{}) (n int, err error) {
function Print (line 79) | func Print(a ...interface{}) (n int, err error) {
function Printf (line 91) | func Printf(format string, a ...interface{}) (n int, err error) {
function Println (line 103) | func Println(a ...interface{}) (n int, err error) {
function Sprint (line 114) | func Sprint(a ...interface{}) string {
function Sprintf (line 125) | func Sprintf(format string, a ...interface{}) string {
function Sprintln (line 136) | func Sprintln(a ...interface{}) string {
function convertArgs (line 142) | func convertArgs(args []interface{}) (formatters []interface{}) {
FILE: vendor/github.com/davecgh/go-spew/spew/testdata/dumpcgo.go
function GetCgoNullCharPointer (line 44) | func GetCgoNullCharPointer() interface{} {
function GetCgoCharPointer (line 50) | func GetCgoCharPointer() interface{} {
function GetCgoCharArray (line 56) | func GetCgoCharArray() (interface{}, int, int) {
function GetCgoUnsignedCharArray (line 62) | func GetCgoUnsignedCharArray() (interface{}, int, int) {
function GetCgoSignedCharArray (line 68) | func GetCgoSignedCharArray() (interface{}, int, int) {
function GetCgoUint8tArray (line 74) | func GetCgoUint8tArray() (interface{}, int, int) {
function GetCgoTypdefedUnsignedCharArray (line 80) | func GetCgoTypdefedUnsignedCharArray() (interface{}, int, int) {
FILE: vendor/github.com/evanphx/json-patch/cmd/json-patch/file_flag.go
type FileFlag (line 13) | type FileFlag
method UnmarshalFlag (line 16) | func (f *FileFlag) UnmarshalFlag(value string) error {
method Path (line 37) | func (f FileFlag) Path() string {
FILE: vendor/github.com/evanphx/json-patch/cmd/json-patch/main.go
type opts (line 13) | type opts struct
function main (line 17) | func main() {
FILE: vendor/github.com/evanphx/json-patch/merge.go
function merge (line 10) | func merge(cur, patch *lazyNode, mergeMerge bool) *lazyNode {
function mergeDocs (line 29) | func mergeDocs(doc, patch *partialDoc, mergeMerge bool) {
function pruneNulls (line 50) | func pruneNulls(n *lazyNode) {
function pruneDocNulls (line 64) | func pruneDocNulls(doc *partialDoc) *partialDoc {
function pruneAryNulls (line 76) | func pruneAryNulls(ary *partialArray) *partialArray {
function MergeMergePatches (line 98) | func MergeMergePatches(patch1Data, patch2Data []byte) ([]byte, error) {
function MergePatch (line 103) | func MergePatch(docData, patchData []byte) ([]byte, error) {
function doMergePatch (line 107) | func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, e...
function resemblesJSONArray (line 170) | func resemblesJSONArray(input []byte) bool {
function CreateMergePatch (line 184) | func CreateMergePatch(originalJSON, modifiedJSON []byte) ([]byte, error) {
function createObjectMergePatch (line 204) | func createObjectMergePatch(originalJSON, modifiedJSON []byte) ([]byte, ...
function createArrayMergePatch (line 230) | func createArrayMergePatch(originalJSON, modifiedJSON []byte) ([]byte, e...
function matchesArray (line 267) | func matchesArray(a, b []interface{}) bool {
function matchesValue (line 285) | func matchesValue(av, bv interface{}) bool {
function getDiff (line 329) | func getDiff(a, b map[string]interface{}) (map[string]interface{}, error) {
FILE: vendor/github.com/evanphx/json-patch/patch.go
constant eRaw (line 12) | eRaw = iota
constant eDoc (line 13) | eDoc
constant eAry (line 14) | eAry
type lazyNode (line 19) | type lazyNode struct
method MarshalJSON (line 45) | func (n *lazyNode) MarshalJSON() ([]byte, error) {
method UnmarshalJSON (line 58) | func (n *lazyNode) UnmarshalJSON(data []byte) error {
method intoDoc (line 66) | func (n *lazyNode) intoDoc() (*partialDoc, error) {
method intoAry (line 85) | func (n *lazyNode) intoAry() (*partialArray, error) {
method compact (line 104) | func (n *lazyNode) compact() []byte {
method tryDoc (line 120) | func (n *lazyNode) tryDoc() bool {
method tryAry (line 135) | func (n *lazyNode) tryAry() bool {
method equal (line 150) | func (n *lazyNode) equal(o *lazyNode) bool {
type operation (line 26) | type operation
method kind (line 208) | func (o operation) kind() string {
method path (line 224) | func (o operation) path() string {
method from (line 240) | func (o operation) from() string {
method value (line 256) | func (o operation) value() *lazyNode {
type Patch (line 29) | type Patch
method add (line 462) | func (p Patch) add(doc *container, op operation) error {
method remove (line 474) | func (p Patch) remove(doc *container, op operation) error {
method replace (line 486) | func (p Patch) replace(doc *container, op operation) error {
method move (line 503) | func (p Patch) move(doc *container, op operation) error {
method test (line 533) | func (p Patch) test(doc *container, op operation) error {
method copy (line 564) | func (p Patch) copy(doc *container, op operation) error {
method Apply (line 617) | func (p Patch) Apply(doc []byte) ([]byte, error) {
method ApplyIndent (line 623) | func (p Patch) ApplyIndent(doc []byte, indent string) ([]byte, error) {
type partialDoc (line 31) | type partialDoc
method set (line 323) | func (d *partialDoc) set(key string, val *lazyNode) error {
method add (line 328) | func (d *partialDoc) add(key string, val *lazyNode) error {
method get (line 333) | func (d *partialDoc) get(key string) (*lazyNode, error) {
method remove (line 337) | func (d *partialDoc) remove(key string) error {
type partialArray (line 32) | type partialArray
method set (line 347) | func (d *partialArray) set(key string, val *lazyNode) error {
method add (line 379) | func (d *partialArray) add(key string, val *lazyNode) error {
method get (line 416) | func (d *partialArray) get(key string) (*lazyNode, error) {
method remove (line 430) | func (d *partialArray) remove(key string) error {
type container (line 34) | type container interface
function newLazyNode (line 41) | func newLazyNode(raw *json.RawMessage) *lazyNode {
function isArray (line 264) | func isArray(buf []byte) bool {
function findObject (line 282) | func findObject(pd *container, path string) (container, string) {
function Equal (line 590) | func Equal(a, b []byte) bool {
function DecodePatch (line 603) | func DecodePatch(buf []byte) (Patch, error) {
function decodePatchKey (line 680) | func decodePatchKey(k string) string {
FILE: vendor/github.com/gogo/protobuf/codec/codec.go
type Codec (line 35) | type Codec interface
type marshaler (line 41) | type marshaler interface
function getSize (line 45) | func getSize(v interface{}) (int, bool) {
type codec (line 59) | type codec struct
method String (line 63) | func (this *codec) String() string {
method Marshal (line 71) | func (this *codec) Marshal(v interface{}) ([]byte, error) {
method Unmarshal (line 89) | func (this *codec) Unmarshal(data []byte, v interface{}) error {
function New (line 67) | func New(size int) Codec {
FILE: vendor/github.com/gogo/protobuf/conformance/conformance.go
function main (line 47) | func main() {
function handle (line 96) | func handle(req *pb.ConformanceRequest) *pb.ConformanceResponse {
FILE: vendor/github.com/gogo/protobuf/conformance/internal/conformance_proto/conformance.pb.go
constant _ (line 20) | _ = proto.GoGoProtoPackageIsVersion2
type WireFormat (line 22) | type WireFormat
method String (line 41) | func (x WireFormat) String() string {
method EnumDescriptor (line 44) | func (WireFormat) EnumDescriptor() ([]byte, []int) {
constant WireFormat_UNSPECIFIED (line 25) | WireFormat_UNSPECIFIED WireFormat = 0
constant WireFormat_PROTOBUF (line 26) | WireFormat_PROTOBUF WireFormat = 1
constant WireFormat_JSON (line 27) | WireFormat_JSON WireFormat = 2
type ForeignEnum (line 48) | type ForeignEnum
method String (line 67) | func (x ForeignEnum) String() string {
method EnumDescriptor (line 70) | func (ForeignEnum) EnumDescriptor() ([]byte, []int) {
constant ForeignEnum_FOREIGN_FOO (line 51) | ForeignEnum_FOREIGN_FOO ForeignEnum = 0
constant ForeignEnum_FOREIGN_BAR (line 52) | ForeignEnum_FOREIGN_BAR ForeignEnum = 1
constant ForeignEnum_FOREIGN_BAZ (line 53) | ForeignEnum_FOREIGN_BAZ ForeignEnum = 2
type TestAllTypes_NestedEnum (line 74) | type TestAllTypes_NestedEnum
method String (line 96) | func (x TestAllTypes_NestedEnum) String() string {
method EnumDescriptor (line 99) | func (TestAllTypes_NestedEnum) EnumDescriptor() ([]byte, []int) {
constant TestAllTypes_FOO (line 77) | TestAllTypes_FOO TestAllTypes_NestedEnum = 0
constant TestAllTypes_BAR (line 78) | TestAllTypes_BAR TestAllTypes_NestedEnum = 1
constant TestAllTypes_BAZ (line 79) | TestAllTypes_BAZ TestAllTypes_NestedEnum = 2
constant TestAllTypes_NEG (line 80) | TestAllTypes_NEG TestAllTypes_NestedEnum = -1
type ConformanceRequest (line 108) | type ConformanceRequest struct
method Reset (line 123) | func (m *ConformanceRequest) Reset() { *m = ConformanceRequest...
method String (line 124) | func (m *ConformanceRequest) String() string { return proto.CompactTex...
method ProtoMessage (line 125) | func (*ConformanceRequest) ProtoMessage() {}
method Descriptor (line 126) | func (*ConformanceRequest) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 129) | func (m *ConformanceRequest) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 132) | func (m *ConformanceRequest) XXX_Marshal(b []byte, deterministic bool)...
method XXX_Merge (line 135) | func (dst *ConformanceRequest) XXX_Merge(src proto.Message) {
method XXX_Size (line 138) | func (m *ConformanceRequest) XXX_Size() int {
method XXX_DiscardUnknown (line 141) | func (m *ConformanceRequest) XXX_DiscardUnknown() {
method GetPayload (line 161) | func (m *ConformanceRequest) GetPayload() isConformanceRequest_Payload {
method GetProtobufPayload (line 168) | func (m *ConformanceRequest) GetProtobufPayload() []byte {
method GetJsonPayload (line 175) | func (m *ConformanceRequest) GetJsonPayload() string {
method GetRequestedOutputFormat (line 182) | func (m *ConformanceRequest) GetRequestedOutputFormat() WireFormat {
method XXX_OneofFuncs (line 190) | func (*ConformanceRequest) XXX_OneofFuncs() (func(msg proto.Message, b...
type isConformanceRequest_Payload (line 147) | type isConformanceRequest_Payload interface
type ConformanceRequest_ProtobufPayload (line 151) | type ConformanceRequest_ProtobufPayload struct
method isConformanceRequest_Payload (line 158) | func (*ConformanceRequest_ProtobufPayload) isConformanceRequest_Payloa...
type ConformanceRequest_JsonPayload (line 154) | type ConformanceRequest_JsonPayload struct
method isConformanceRequest_Payload (line 159) | func (*ConformanceRequest_JsonPayload) isConformanceRequest_Payload() ...
function _ConformanceRequest_OneofMarshaler (line 197) | func _ConformanceRequest_OneofMarshaler(msg proto.Message, b *proto.Buff...
function _ConformanceRequest_OneofUnmarshaler (line 214) | func _ConformanceRequest_OneofUnmarshaler(msg proto.Message, tag, wire i...
function _ConformanceRequest_OneofSizer (line 236) | func _ConformanceRequest_OneofSizer(msg proto.Message) (n int) {
type ConformanceResponse (line 256) | type ConformanceResponse struct
method Reset (line 270) | func (m *ConformanceResponse) Reset() { *m = ConformanceRespon...
method String (line 271) | func (m *ConformanceResponse) String() string { return proto.CompactTe...
method ProtoMessage (line 272) | func (*ConformanceResponse) ProtoMessage() {}
method Descriptor (line 273) | func (*ConformanceResponse) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 276) | func (m *ConformanceResponse) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 279) | func (m *ConformanceResponse) XXX_Marshal(b []byte, deterministic bool...
method XXX_Merge (line 282) | func (dst *ConformanceResponse) XXX_Merge(src proto.Message) {
method XXX_Size (line 285) | func (m *ConformanceResponse) XXX_Size() int {
method XXX_DiscardUnknown (line 288) | func (m *ConformanceResponse) XXX_DiscardUnknown() {
method GetResult (line 324) | func (m *ConformanceResponse) GetResult() isConformanceResponse_Result {
method GetParseError (line 331) | func (m *ConformanceResponse) GetParseError() string {
method GetSerializeError (line 338) | func (m *ConformanceResponse) GetSerializeError() string {
method GetRuntimeError (line 345) | func (m *ConformanceResponse) GetRuntimeError() string {
method GetProtobufPayload (line 352) | func (m *ConformanceResponse) GetProtobufPayload() []byte {
method GetJsonPayload (line 359) | func (m *ConformanceResponse) GetJsonPayload() string {
method GetSkipped (line 366) | func (m *ConformanceResponse) GetSkipped() string {
method XXX_OneofFuncs (line 374) | func (*ConformanceResponse) XXX_OneofFuncs() (func(msg proto.Message, ...
type isConformanceResponse_Result (line 294) | type isConformanceResponse_Result interface
type ConformanceResponse_ParseError (line 298) | type ConformanceResponse_ParseError struct
method isConformanceResponse_Result (line 317) | func (*ConformanceResponse_ParseError) isConformanceResponse_Result() ...
type ConformanceResponse_SerializeError (line 301) | type ConformanceResponse_SerializeError struct
method isConformanceResponse_Result (line 318) | func (*ConformanceResponse_SerializeError) isConformanceResponse_Resul...
type ConformanceResponse_RuntimeError (line 304) | type ConformanceResponse_RuntimeError struct
method isConformanceResponse_Result (line 319) | func (*ConformanceResponse_RuntimeError) isConformanceResponse_Result(...
type ConformanceResponse_ProtobufPayload (line 307) | type ConformanceResponse_ProtobufPayload struct
method isConformanceResponse_Result (line 320) | func (*ConformanceResponse_ProtobufPayload) isConformanceResponse_Resu...
type ConformanceResponse_JsonPayload (line 310) | type ConformanceResponse_JsonPayload struct
method isConformanceResponse_Result (line 321) | func (*ConformanceResponse_JsonPayload) isConformanceResponse_Result()...
type ConformanceResponse_Skipped (line 313) | type ConformanceResponse_Skipped struct
method isConformanceResponse_Result (line 322) | func (*ConformanceResponse_Skipped) isConformanceResponse_Result() ...
function _ConformanceResponse_OneofMarshaler (line 385) | func _ConformanceResponse_OneofMarshaler(msg proto.Message, b *proto.Buf...
function _ConformanceResponse_OneofUnmarshaler (line 414) | func _ConformanceResponse_OneofUnmarshaler(msg proto.Message, tag, wire ...
function _ConformanceResponse_OneofSizer (line 464) | func _ConformanceResponse_OneofSizer(msg proto.Message) (n int) {
type TestAllTypes (line 501) | type TestAllTypes struct
method Reset (line 622) | func (m *TestAllTypes) Reset() { *m = TestAllTypes{} }
method String (line 623) | func (m *TestAllTypes) String() string { return proto.CompactTextStrin...
method ProtoMessage (line 624) | func (*TestAllTypes) ProtoMessage() {}
method Descriptor (line 625) | func (*TestAllTypes) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 628) | func (m *TestAllTypes) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 631) | func (m *TestAllTypes) XXX_Marshal(b []byte, deterministic bool) ([]by...
method XXX_Merge (line 634) | func (dst *TestAllTypes) XXX_Merge(src proto.Message) {
method XXX_Size (line 637) | func (m *TestAllTypes) XXX_Size() int {
method XXX_DiscardUnknown (line 640) | func (m *TestAllTypes) XXX_DiscardUnknown() {
method GetOneofField (line 668) | func (m *TestAllTypes) GetOneofField() isTestAllTypes_OneofField {
method GetOptionalInt32 (line 675) | func (m *TestAllTypes) GetOptionalInt32() int32 {
method GetOptionalInt64 (line 682) | func (m *TestAllTypes) GetOptionalInt64() int64 {
method GetOptionalUint32 (line 689) | func (m *TestAllTypes) GetOptionalUint32() uint32 {
method GetOptionalUint64 (line 696) | func (m *TestAllTypes) GetOptionalUint64() uint64 {
method GetOptionalSint32 (line 703) | func (m *TestAllTypes) GetOptionalSint32() int32 {
method GetOptionalSint64 (line 710) | func (m *TestAllTypes) GetOptionalSint64() int64 {
method GetOptionalFixed32 (line 717) | func (m *TestAllTypes) GetOptionalFixed32() uint32 {
method GetOptionalFixed64 (line 724) | func (m *TestAllTypes) GetOptionalFixed64() uint64 {
method GetOptionalSfixed32 (line 731) | func (m *TestAllTypes) GetOptionalSfixed32() int32 {
method GetOptionalSfixed64 (line 738) | func (m *TestAllTypes) GetOptionalSfixed64() int64 {
method GetOptionalFloat (line 745) | func (m *TestAllTypes) GetOptionalFloat() float32 {
method GetOptionalDouble (line 752) | func (m *TestAllTypes) GetOptionalDouble() float64 {
method GetOptionalBool (line 759) | func (m *TestAllTypes) GetOptionalBool() bool {
method GetOptionalString (line 766) | func (m *TestAllTypes) GetOptionalString() string {
method GetOptionalBytes (line 773) | func (m *TestAllTypes) GetOptionalBytes() []byte {
method GetOptionalNestedMessage (line 780) | func (m *TestAllTypes) GetOptionalNestedMessage() *TestAllTypes_Nested...
method GetOptionalForeignMessage (line 787) | func (m *TestAllTypes) GetOptionalForeignMessage() *ForeignMessage {
method GetOptionalNestedEnum (line 794) | func (m *TestAllTypes) GetOptionalNestedEnum() TestAllTypes_NestedEnum {
method GetOptionalForeignEnum (line 801) | func (m *TestAllTypes) GetOptionalForeignEnum() ForeignEnum {
method GetOptionalStringPiece (line 808) | func (m *TestAllTypes) GetOptionalStringPiece() string {
method GetOptionalCord (line 815) | func (m *TestAllTypes) GetOptionalCord() string {
method GetRecursiveMessage (line 822) | func (m *TestAllTypes) GetRecursiveMessage() *TestAllTypes {
method GetRepeatedInt32 (line 829) | func (m *TestAllTypes) GetRepeatedInt32() []int32 {
method GetRepeatedInt64 (line 836) | func (m *TestAllTypes) GetRepeatedInt64() []int64 {
method GetRepeatedUint32 (line 843) | func (m *TestAllTypes) GetRepeatedUint32() []uint32 {
method GetRepeatedUint64 (line 850) | func (m *TestAllTypes) GetRepeatedUint64() []uint64 {
method GetRepeatedSint32 (line 857) | func (m *TestAllTypes) GetRepeatedSint32() []int32 {
method GetRepeatedSint64 (line 864) | func (m *TestAllTypes) GetRepeatedSint64() []int64 {
method GetRepeatedFixed32 (line 871) | func (m *TestAllTypes) GetRepeatedFixed32() []uint32 {
method GetRepeatedFixed64 (line 878) | func (m *TestAllTypes) GetRepeatedFixed64() []uint64 {
method GetRepeatedSfixed32 (line 885) | func (m *TestAllTypes) GetRepeatedSfixed32() []int32 {
method GetRepeatedSfixed64 (line 892) | func (m *TestAllTypes) GetRepeatedSfixed64() []int64 {
method GetRepeatedFloat (line 899) | func (m *TestAllTypes) GetRepeatedFloat() []float32 {
method GetRepeatedDouble (line 906) | func (m *TestAllTypes) GetRepeatedDouble() []float64 {
method GetRepeatedBool (line 913) | func (m *TestAllTypes) GetRepeatedBool() []bool {
method GetRepeatedString (line 920) | func (m *TestAllTypes) GetRepeatedString() []string {
method GetRepeatedBytes (line 927) | func (m *TestAllTypes) GetRepeatedBytes() [][]byte {
method GetRepeatedNestedMessage (line 934) | func (m *TestAllTypes) GetRepeatedNestedMessage() []*TestAllTypes_Nest...
method GetRepeatedForeignMessage (line 941) | func (m *TestAllTypes) GetRepeatedForeignMessage() []*ForeignMessage {
method GetRepeatedNestedEnum (line 948) | func (m *TestAllTypes) GetRepeatedNestedEnum() []TestAllTypes_NestedEn...
method GetRepeatedForeignEnum (line 955) | func (m *TestAllTypes) GetRepeatedForeignEnum() []ForeignEnum {
method GetRepeatedStringPiece (line 962) | func (m *TestAllTypes) GetRepeatedStringPiece() []string {
method GetRepeatedCord (line 969) | func (m *TestAllTypes) GetRepeatedCord() []string {
method GetMapInt32Int32 (line 976) | func (m *TestAllTypes) GetMapInt32Int32() map[int32]int32 {
method GetMapInt64Int64 (line 983) | func (m *TestAllTypes) GetMapInt64Int64() map[int64]int64 {
method GetMapUint32Uint32 (line 990) | func (m *TestAllTypes) GetMapUint32Uint32() map[uint32]uint32 {
method GetMapUint64Uint64 (line 997) | func (m *TestAllTypes) GetMapUint64Uint64() map[uint64]uint64 {
method GetMapSint32Sint32 (line 1004) | func (m *TestAllTypes) GetMapSint32Sint32() map[int32]int32 {
method GetMapSint64Sint64 (line 1011) | func (m *TestAllTypes) GetMapSint64Sint64() map[int64]int64 {
method GetMapFixed32Fixed32 (line 1018) | func (m *TestAllTypes) GetMapFixed32Fixed32() map[uint32]uint32 {
method GetMapFixed64Fixed64 (line 1025) | func (m *TestAllTypes) GetMapFixed64Fixed64() map[uint64]uint64 {
method GetMapSfixed32Sfixed32 (line 1032) | func (m *TestAllTypes) GetMapSfixed32Sfixed32() map[int32]int32 {
method GetMapSfixed64Sfixed64 (line 1039) | func (m *TestAllTypes) GetMapSfixed64Sfixed64() map[int64]int64 {
method GetMapInt32Float (line 1046) | func (m *TestAllTypes) GetMapInt32Float() map[int32]float32 {
method GetMapInt32Double (line 1053) | func (m *TestAllTypes) GetMapInt32Double() map[int32]float64 {
method GetMapBoolBool (line 1060) | func (m *TestAllTypes) GetMapBoolBool() map[bool]bool {
method GetMapStringString (line 1067) | func (m *TestAllTypes) GetMapStringString() map[string]string {
method GetMapStringBytes (line 1074) | func (m *TestAllTypes) GetMapStringBytes() map[string][]byte {
method GetMapStringNestedMessage (line 1081) | func (m *TestAllTypes) GetMapStringNestedMessage() map[string]*TestAll...
method GetMapStringForeignMessage (line 1088) | func (m *TestAllTypes) GetMapStringForeignMessage() map[string]*Foreig...
method GetMapStringNestedEnum (line 1095) | func (m *TestAllTypes) GetMapStringNestedEnum() map[string]TestAllType...
method GetMapStringForeignEnum (line 1102) | func (m *TestAllTypes) GetMapStringForeignEnum() map[string]ForeignEnum {
method GetOneofUint32 (line 1109) | func (m *TestAllTypes) GetOneofUint32() uint32 {
method GetOneofNestedMessage (line 1116) | func (m *TestAllTypes) GetOneofNestedMessage() *TestAllTypes_NestedMes...
method GetOneofString (line 1123) | func (m *TestAllTypes) GetOneofString() string {
method GetOneofBytes (line 1130) | func (m *TestAllTypes) GetOneofBytes() []byte {
method GetOptionalBoolWrapper (line 1137) | func (m *TestAllTypes) GetOptionalBoolWrapper() *types.BoolValue {
method GetOptionalInt32Wrapper (line 1144) | func (m *TestAllTypes) GetOptionalInt32Wrapper() *types.Int32Value {
method GetOptionalInt64Wrapper (line 1151) | func (m *TestAllTypes) GetOptionalInt64Wrapper() *types.Int64Value {
method GetOptionalUint32Wrapper (line 1158) | func (m *TestAllTypes) GetOptionalUint32Wrapper() *types.UInt32Value {
method GetOptionalUint64Wrapper (line 1165) | func (m *TestAllTypes) GetOptionalUint64Wrapper() *types.UInt64Value {
method GetOptionalFloatWrapper (line 1172) | func (m *TestAllTypes) GetOptionalFloatWrapper() *types.FloatValue {
method GetOptionalDoubleWrapper (line 1179) | func (m *TestAllTypes) GetOptionalDoubleWrapper() *types.DoubleValue {
method GetOptionalStringWrapper (line 1186) | func (m *TestAllTypes) GetOptionalStringWrapper() *types.StringValue {
method GetOptionalBytesWrapper (line 1193) | func (m *TestAllTypes) GetOptionalBytesWrapper() *types.BytesValue {
method GetRepeatedBoolWrapper (line 1200) | func (m *TestAllTypes) GetRepeatedBoolWrapper() []*types.BoolValue {
method GetRepeatedInt32Wrapper (line 1207) | func (m *TestAllTypes) GetRepeatedInt32Wrapper() []*types.Int32Value {
method GetRepeatedInt64Wrapper (line 1214) | func (m *TestAllTypes) GetRepeatedInt64Wrapper() []*types.Int64Value {
method GetRepeatedUint32Wrapper (line 1221) | func (m *TestAllTypes) GetRepeatedUint32Wrapper() []*types.UInt32Value {
method GetRepeatedUint64Wrapper (line 1228) | func (m *TestAllTypes) GetRepeatedUint64Wrapper() []*types.UInt64Value {
method GetRepeatedFloatWrapper (line 1235) | func (m *TestAllTypes) GetRepeatedFloatWrapper() []*types.FloatValue {
method GetRepeatedDoubleWrapper (line 1242) | func (m *TestAllTypes) GetRepeatedDoubleWrapper() []*types.DoubleValue {
method GetRepeatedStringWrapper (line 1249) | func (m *TestAllTypes) GetRepeatedStringWrapper() []*types.StringValue {
method GetRepeatedBytesWrapper (line 1256) | func (m *TestAllTypes) GetRepeatedBytesWrapper() []*types.BytesValue {
method GetOptionalDuration (line 1263) | func (m *TestAllTypes) GetOptionalDuration() *types.Duration {
method GetOptionalTimestamp (line 1270) | func (m *TestAllTypes) GetOptionalTimestamp() *types.Timestamp {
method GetOptionalFieldMask (line 1277) | func (m *TestAllTypes) GetOptionalFieldMask() *types.FieldMask {
method GetOptionalStruct (line 1284) | func (m *TestAllTypes) GetOptionalStruct() *types.Struct {
method GetOptionalAny (line 1291) | func (m *TestAllTypes) GetOptionalAny() *types.Any {
method GetOptionalValue (line 1298) | func (m *TestAllTypes) GetOptionalValue() *types.Value {
method GetRepeatedDuration (line 1305) | func (m *TestAllTypes) GetRepeatedDuration() []*types.Duration {
method GetRepeatedTimestamp (line 1312) | func (m *TestAllTypes) GetRepeatedTimestamp() []*types.Timestamp {
method GetRepeatedFieldmask (line 1319) | func (m *TestAllTypes) GetRepeatedFieldmask() []*types.FieldMask {
method GetRepeatedStruct (line 1326) | func (m *TestAllTypes) GetRepeatedStruct() []*types.Struct {
method GetRepeatedAny (line 1333) | func (m *TestAllTypes) GetRepeatedAny() []*types.Any {
method GetRepeatedValue (line 1340) | func (m *TestAllTypes) GetRepeatedValue() []*types.Value {
method GetFieldname1 (line 1347) | func (m *TestAllTypes) GetFieldname1() int32 {
method GetFieldName2 (line 1354) | func (m *TestAllTypes) GetFieldName2() int32 {
method GetXFieldName3 (line 1361) | func (m *TestAllTypes) GetXFieldName3() int32 {
method GetField_Name4_ (line 1368) | func (m *TestAllTypes) GetField_Name4_() int32 {
method GetField0Name5 (line 1375) | func (m *TestAllTypes) GetField0Name5() int32 {
method GetField_0Name6 (line 1382) | func (m *TestAllTypes) GetField_0Name6() int32 {
method GetFieldName7 (line 1389) | func (m *TestAllTypes) GetFieldName7() int32 {
method GetFieldName8 (line 1396) | func (m *TestAllTypes) GetFieldName8() int32 {
method GetField_Name9 (line 1403) | func (m *TestAllTypes) GetField_Name9() int32 {
method GetField_Name10 (line 1410) | func (m *TestAllTypes) GetField_Name10() int32 {
method GetFIELD_NAME11 (line 1417) | func (m *TestAllTypes) GetFIELD_NAME11() int32 {
method GetFIELDName12 (line 1424) | func (m *TestAllTypes) GetFIELDName12() int32 {
method XXX_OneofFuncs (line 1432) | func (*TestAllTypes) XXX_OneofFuncs() (func(msg proto.Message, b *prot...
type isTestAllTypes_OneofField (line 646) | type isTestAllTypes_OneofField interface
type TestAllTypes_OneofUint32 (line 650) | type TestAllTypes_OneofUint32 struct
method isTestAllTypes_OneofField (line 663) | func (*TestAllTypes_OneofUint32) isTestAllTypes_OneofField() {}
type TestAllTypes_OneofNestedMessage (line 653) | type TestAllTypes_OneofNestedMessage struct
method isTestAllTypes_OneofField (line 664) | func (*TestAllTypes_OneofNestedMessage) isTestAllTypes_OneofField() {}
type TestAllTypes_OneofString (line 656) | type TestAllTypes_OneofString struct
method isTestAllTypes_OneofField (line 665) | func (*TestAllTypes_OneofString) isTestAllTypes_OneofField() {}
type TestAllTypes_OneofBytes (line 659) | type TestAllTypes_OneofBytes struct
method isTestAllTypes_OneofField (line 666) | func (*TestAllTypes_OneofBytes) isTestAllTypes_OneofField() {}
function _TestAllTypes_OneofMarshaler (line 1441) | func _TestAllTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) er...
function _TestAllTypes_OneofUnmarshaler (line 1466) | func _TestAllTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b ...
function _TestAllTypes_OneofSizer (line 1503) | func _TestAllTypes_OneofSizer(msg proto.Message) (n int) {
type TestAllTypes_NestedMessage (line 1530) | type TestAllTypes_NestedMessage struct
method Reset (line 1538) | func (m *TestAllTypes_NestedMessage) Reset() { *m = TestAllTyp...
method String (line 1539) | func (m *TestAllTypes_NestedMessage) String() string { return proto.Co...
method ProtoMessage (line 1540) | func (*TestAllTypes_NestedMessage) ProtoMessage() {}
method Descriptor (line 1541) | func (*TestAllTypes_NestedMessage) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1544) | func (m *TestAllTypes_NestedMessage) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1547) | func (m *TestAllTypes_NestedMessage) XXX_Marshal(b []byte, determinist...
method XXX_Merge (line 1550) | func (dst *TestAllTypes_NestedMessage) XXX_Merge(src proto.Message) {
method XXX_Size (line 1553) | func (m *TestAllTypes_NestedMessage) XXX_Size() int {
method XXX_DiscardUnknown (line 1556) | func (m *TestAllTypes_NestedMessage) XXX_DiscardUnknown() {
method GetA (line 1562) | func (m *TestAllTypes_NestedMessage) GetA() int32 {
method GetCorecursive (line 1569) | func (m *TestAllTypes_NestedMessage) GetCorecursive() *TestAllTypes {
type ForeignMessage (line 1576) | type ForeignMessage struct
method Reset (line 1583) | func (m *ForeignMessage) Reset() { *m = ForeignMessage{} }
method String (line 1584) | func (m *ForeignMessage) String() string { return proto.CompactTextStr...
method ProtoMessage (line 1585) | func (*ForeignMessage) ProtoMessage() {}
method Descriptor (line 1586) | func (*ForeignMessage) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1589) | func (m *ForeignMessage) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1592) | func (m *ForeignMessage) XXX_Marshal(b []byte, deterministic bool) ([]...
method XXX_Merge (line 1595) | func (dst *ForeignMessage) XXX_Merge(src proto.Message) {
method XXX_Size (line 1598) | func (m *ForeignMessage) XXX_Size() int {
method XXX_DiscardUnknown (line 1601) | func (m *ForeignMessage) XXX_DiscardUnknown() {
method GetC (line 1607) | func (m *ForeignMessage) GetC() int32 {
function init (line 1614) | func init() {
function init (line 1644) | func init() {
FILE: vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go
constant _ (line 20) | _ = proto.GoGoProtoPackageIsVersion2
function init (line 661) | func init() {
function init (line 735) | func init() { proto.RegisterFile("gogo.proto", fileDescriptor_gogo_68790...
FILE: vendor/github.com/gogo/protobuf/gogoproto/helper.go
function IsEmbed (line 34) | func IsEmbed(field *google_protobuf.FieldDescriptorProto) bool {
function IsNullable (line 38) | func IsNullable(field *google_protobuf.FieldDescriptorProto) bool {
function IsStdTime (line 42) | func IsStdTime(field *google_protobuf.FieldDescriptorProto) bool {
function IsStdDuration (line 46) | func IsStdDuration(field *google_protobuf.FieldDescriptorProto) bool {
function NeedsNilCheck (line 50) | func NeedsNilCheck(proto3 bool, field *google_protobuf.FieldDescriptorPr...
function IsCustomType (line 61) | func IsCustomType(field *google_protobuf.FieldDescriptorProto) bool {
function IsCastType (line 69) | func IsCastType(field *google_protobuf.FieldDescriptorProto) bool {
function IsCastKey (line 77) | func IsCastKey(field *google_protobuf.FieldDescriptorProto) bool {
function IsCastValue (line 85) | func IsCastValue(field *google_protobuf.FieldDescriptorProto) bool {
function HasEnumDecl (line 93) | func HasEnumDecl(file *google_protobuf.FileDescriptorProto, enum *google...
function HasTypeDecl (line 97) | func HasTypeDecl(file *google_protobuf.FileDescriptorProto, message *goo...
function GetCustomType (line 101) | func GetCustomType(field *google_protobuf.FieldDescriptorProto) string {
function GetCastType (line 114) | func GetCastType(field *google_protobuf.FieldDescriptorProto) string {
function GetCastKey (line 127) | func GetCastKey(field *google_protobuf.FieldDescriptorProto) string {
function GetCastValue (line 140) | func GetCastValue(field *google_protobuf.FieldDescriptorProto) string {
function IsCustomName (line 153) | func IsCustomName(field *google_protobuf.FieldDescriptorProto) bool {
function IsEnumCustomName (line 161) | func IsEnumCustomName(field *google_protobuf.EnumDescriptorProto) bool {
function IsEnumValueCustomName (line 169) | func IsEnumValueCustomName(field *google_protobuf.EnumValueDescriptorPro...
function GetCustomName (line 177) | func GetCustomName(field *google_protobuf.FieldDescriptorProto) string {
function GetEnumCustomName (line 190) | func GetEnumCustomName(field *google_protobuf.EnumDescriptorProto) string {
function GetEnumValueCustomName (line 203) | func GetEnumValueCustomName(field *google_protobuf.EnumValueDescriptorPr...
function GetJsonTag (line 216) | func GetJsonTag(field *google_protobuf.FieldDescriptorProto) *string {
function GetMoreTags (line 229) | func GetMoreTags(field *google_protobuf.FieldDescriptorProto) *string {
type EnableFunc (line 242) | type EnableFunc
function EnabledGoEnumPrefix (line 244) | func EnabledGoEnumPrefix(file *google_protobuf.FileDescriptorProto, enum...
function EnabledGoStringer (line 248) | func EnabledGoStringer(file *google_protobuf.FileDescriptorProto, messag...
function HasGoGetters (line 252) | func HasGoGetters(file *google_protobuf.FileDescriptorProto, message *go...
function IsUnion (line 256) | func IsUnion(file *google_protobuf.FileDescriptorProto, message *google_...
function HasGoString (line 260) | func HasGoString(file *google_protobuf.FileDescriptorProto, message *goo...
function HasEqual (line 264) | func HasEqual(file *google_protobuf.FileDescriptorProto, message *google...
function HasVerboseEqual (line 268) | func HasVerboseEqual(file *google_protobuf.FileDescriptorProto, message ...
function IsStringer (line 272) | func IsStringer(file *google_protobuf.FileDescriptorProto, message *goog...
function IsFace (line 276) | func IsFace(file *google_protobuf.FileDescriptorProto, message *google_p...
function HasDescription (line 280) | func HasDescription(file *google_protobuf.FileDescriptorProto, message *...
function HasPopulate (line 284) | func HasPopulate(file *google_protobuf.FileDescriptorProto, message *goo...
function HasTestGen (line 288) | func HasTestGen(file *google_protobuf.FileDescriptorProto, message *goog...
function HasBenchGen (line 292) | func HasBenchGen(file *google_protobuf.FileDescriptorProto, message *goo...
function IsMarshaler (line 296) | func IsMarshaler(file *google_protobuf.FileDescriptorProto, message *goo...
function IsUnmarshaler (line 300) | func IsUnmarshaler(file *google_protobuf.FileDescriptorProto, message *g...
function IsStableMarshaler (line 304) | func IsStableMarshaler(file *google_protobuf.FileDescriptorProto, messag...
function IsSizer (line 308) | func IsSizer(file *google_protobuf.FileDescriptorProto, message *google_...
function IsProtoSizer (line 312) | func IsProtoSizer(file *google_protobuf.FileDescriptorProto, message *go...
function IsGoEnumStringer (line 316) | func IsGoEnumStringer(file *google_protobuf.FileDescriptorProto, enum *g...
function IsEnumStringer (line 320) | func IsEnumStringer(file *google_protobuf.FileDescriptorProto, enum *goo...
function IsUnsafeMarshaler (line 324) | func IsUnsafeMarshaler(file *google_protobuf.FileDescriptorProto, messag...
function IsUnsafeUnmarshaler (line 328) | func IsUnsafeUnmarshaler(file *google_protobuf.FileDescriptorProto, mess...
function HasExtensionsMap (line 332) | func HasExtensionsMap(file *google_protobuf.FileDescriptorProto, message...
function HasUnrecognized (line 336) | func HasUnrecognized(file *google_protobuf.FileDescriptorProto, message ...
function IsProto3 (line 340) | func IsProto3(file *google_protobuf.FileDescriptorProto) bool {
function ImportsGoGoProto (line 344) | func ImportsGoGoProto(file *google_protobuf.FileDescriptorProto) bool {
function HasCompare (line 348) | func HasCompare(file *google_protobuf.FileDescriptorProto, message *goog...
function RegistersGolangProto (line 352) | func RegistersGolangProto(file *google_protobuf.FileDescriptorProto) bool {
function HasMessageName (line 356) | func HasMessageName(file *google_protobuf.FileDescriptorProto, message *...
FILE: vendor/github.com/gogo/protobuf/gogoreplace/main.go
function main (line 10) | func main() {
FILE: vendor/github.com/gogo/protobuf/io/full.go
function NewFullWriter (line 36) | func NewFullWriter(w io.Writer) WriteCloser {
type fullWriter (line 40) | type fullWriter struct
method WriteMsg (line 45) | func (this *fullWriter) WriteMsg(msg proto.Message) (err error) {
method Close (line 73) | func (this *fullWriter) Close() error {
type fullReader (line 80) | type fullReader struct
method ReadMsg (line 89) | func (this *fullReader) ReadMsg(msg proto.Message) error {
method Close (line 97) | func (this *fullReader) Close() error {
function NewFullReader (line 85) | func NewFullReader(r io.Reader, maxSize int) ReadCloser {
FILE: vendor/github.com/gogo/protobuf/io/io.go
type Writer (line 36) | type Writer interface
type WriteCloser (line 40) | type WriteCloser interface
type Reader (line 45) | type Reader interface
type ReadCloser (line 49) | type ReadCloser interface
type marshaler (line 54) | type marshaler interface
function getSize (line 58) | func getSize(v interface{}) (int, bool) {
FILE: vendor/github.com/gogo/protobuf/io/uint32.go
constant uint32BinaryLen (line 38) | uint32BinaryLen = 4
function NewUint32DelimitedWriter (line 40) | func NewUint32DelimitedWriter(w io.Writer, byteOrder binary.ByteOrder) W...
function NewSizeUint32DelimitedWriter (line 44) | func NewSizeUint32DelimitedWriter(w io.Writer, byteOrder binary.ByteOrde...
type uint32Writer (line 48) | type uint32Writer struct
method writeFallback (line 55) | func (this *uint32Writer) writeFallback(msg proto.Message) error {
method WriteMsg (line 70) | func (this *uint32Writer) WriteMsg(msg proto.Message) error {
method Close (line 95) | func (this *uint32Writer) Close() error {
type uint32Reader (line 102) | type uint32Reader struct
method ReadMsg (line 114) | func (this *uint32Reader) ReadMsg(msg proto.Message) error {
method Close (line 133) | func (this *uint32Reader) Close() error {
function NewUint32DelimitedReader (line 110) | func NewUint32DelimitedReader(r io.Reader, byteOrder binary.ByteOrder, m...
FILE: vendor/github.com/gogo/protobuf/io/varint.go
function NewDelimitedWriter (line 44) | func NewDelimitedWriter(w io.Writer) WriteCloser {
type varintWriter (line 48) | type varintWriter struct
method WriteMsg (line 54) | func (this *varintWriter) WriteMsg(msg proto.Message) (err error) {
method Close (line 88) | func (this *varintWriter) Close() error {
function NewDelimitedReader (line 95) | func NewDelimitedReader(r io.Reader, maxSize int) ReadCloser {
type varintReader (line 103) | type varintReader struct
method ReadMsg (line 110) | func (this *varintReader) ReadMsg(msg proto.Message) error {
method Close (line 129) | func (this *varintReader) Close() error {
FILE: vendor/github.com/gogo/protobuf/jsonpb/jsonpb.go
constant secondInNanos (line 58) | secondInNanos = int64(time.Second / time.Nanosecond)
type Marshaler (line 62) | type Marshaler struct
method Marshal (line 121) | func (m *Marshaler) Marshal(out io.Writer, pb proto.Message) error {
method MarshalToString (line 135) | func (m *Marshaler) MarshalToString(pb proto.Message) (string, error) {
method marshalObject (line 161) | func (m *Marshaler) marshalObject(out *errWriter, v proto.Message, ind...
method writeSep (line 398) | func (m *Marshaler) writeSep(out *errWriter) {
method marshalAny (line 406) | func (m *Marshaler) marshalAny(out *errWriter, any proto.Message, inde...
method marshalTypeURL (line 460) | func (m *Marshaler) marshalTypeURL(out *errWriter, indent, typeURL str...
method marshalField (line 478) | func (m *Marshaler) marshalField(out *errWriter, prop *proto.Propertie...
method marshalValue (line 496) | func (m *Marshaler) marshalValue(out *errWriter, prop *proto.Propertie...
type AnyResolver (line 87) | type AnyResolver interface
function defaultResolveAny (line 91) | func defaultResolveAny(typeUrl string) (proto.Message, error) {
type JSONPBMarshaler (line 108) | type JSONPBMarshaler interface
type JSONPBUnmarshaler (line 116) | type JSONPBUnmarshaler interface
type int32Slice (line 143) | type int32Slice
method Len (line 152) | func (s int32Slice) Len() int { return len(s) }
method Less (line 153) | func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] }
method Swap (line 154) | func (s int32Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
type isWkt (line 156) | type isWkt interface
type Unmarshaler (line 722) | type Unmarshaler struct
method UnmarshalNext (line 737) | func (u *Unmarshaler) UnmarshalNext(dec *json.Decoder, pb proto.Messag...
method Unmarshal (line 751) | func (u *Unmarshaler) Unmarshal(r io.Reader, pb proto.Message) error {
method unmarshalValue (line 779) | func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue ...
function UnmarshalNext (line 759) | func UnmarshalNext(dec *json.Decoder, pb proto.Message) error {
function Unmarshal (line 766) | func Unmarshal(r io.Reader, pb proto.Message) error {
function UnmarshalString (line 773) | func UnmarshalString(str string, pb proto.Message) error {
function jsonProperties (line 1194) | func jsonProperties(f reflect.StructField, origName bool) *proto.Propert...
type fieldNames (line 1203) | type fieldNames struct
function acceptedJSONFieldNames (line 1207) | func acceptedJSONFieldNames(prop *proto.Properties) fieldNames {
type errWriter (line 1216) | type errWriter struct
method write (line 1221) | func (w *errWriter) write(str string) {
type mapKeys (line 1235) | type mapKeys
method Len (line 1237) | func (s mapKeys) Len() int { return len(s) }
method Swap (line 1238) | func (s mapKeys) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
method Less (line 1239) | func (s mapKeys) Less(i, j int) bool {
function checkRequiredFields (line 1254) | func checkRequiredFields(pb proto.Message) error {
function checkRequiredFieldsInValue (line 1381) | func checkRequiredFieldsInValue(v reflect.Value) error {
FILE: vendor/github.com/gogo/protobuf/jsonpb/jsonpb_test_proto/bytes.go
type Byte (line 4) | type Byte
type Bytes (line 7) | type Bytes
FILE: vendor/github.com/gogo/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go
constant _ (line 19) | _ = proto.GoGoProtoPackageIsVersion2
type Numeral (line 21) | type Numeral
method String (line 40) | func (x Numeral) String() string {
method EnumDescriptor (line 43) | func (Numeral) EnumDescriptor() ([]byte, []int) {
constant Numeral_UNKNOWN (line 24) | Numeral_UNKNOWN Numeral = 0
constant Numeral_ARABIC (line 25) | Numeral_ARABIC Numeral = 1
constant Numeral_ROMAN (line 26) | Numeral_ROMAN Numeral = 2
type Simple3 (line 47) | type Simple3 struct
method Reset (line 54) | func (m *Simple3) Reset() { *m = Simple3{} }
method String (line 55) | func (m *Simple3) String() string { return proto.CompactTextString(m) }
method ProtoMessage (line 56) | func (*Simple3) ProtoMessage() {}
method Descriptor (line 57) | func (*Simple3) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 60) | func (m *Simple3) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 63) | func (m *Simple3) XXX_Marshal(b []byte, deterministic bool) ([]byte, e...
method XXX_Merge (line 66) | func (dst *Simple3) XXX_Merge(src proto.Message) {
method XXX_Size (line 69) | func (m *Simple3) XXX_Size() int {
method XXX_DiscardUnknown (line 72) | func (m *Simple3) XXX_DiscardUnknown() {
method GetDub (line 78) | func (m *Simple3) GetDub() float64 {
type SimpleSlice3 (line 85) | type SimpleSlice3 struct
method Reset (line 92) | func (m *SimpleSlice3) Reset() { *m = SimpleSlice3{} }
method String (line 93) | func (m *SimpleSlice3) String() string { return proto.CompactTextStrin...
method ProtoMessage (line 94) | func (*SimpleSlice3) ProtoMessage() {}
method Descriptor (line 95) | func (*SimpleSlice3) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 98) | func (m *SimpleSlice3) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 101) | func (m *SimpleSlice3) XXX_Marshal(b []byte, deterministic bool) ([]by...
method XXX_Merge (line 104) | func (dst *SimpleSlice3) XXX_Merge(src proto.Message) {
method XXX_Size (line 107) | func (m *SimpleSlice3) XXX_Size() int {
method XXX_DiscardUnknown (line 110) | func (m *SimpleSlice3) XXX_DiscardUnknown() {
method GetSlices (line 116) | func (m *SimpleSlice3) GetSlices() []string {
type SimpleMap3 (line 123) | type SimpleMap3 struct
method Reset (line 130) | func (m *SimpleMap3) Reset() { *m = SimpleMap3{} }
method String (line 131) | func (m *SimpleMap3) String() string { return proto.CompactTextString(...
method ProtoMessage (line 132) | func (*SimpleMap3) ProtoMessage() {}
method Descriptor (line 133) | func (*SimpleMap3) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 136) | func (m *SimpleMap3) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 139) | func (m *SimpleMap3) XXX_Marshal(b []byte, deterministic bool) ([]byte...
method XXX_Merge (line 142) | func (dst *SimpleMap3) XXX_Merge(src proto.Message) {
method XXX_Size (line 145) | func (m *SimpleMap3) XXX_Size() int {
method XXX_DiscardUnknown (line 148) | func (m *SimpleMap3) XXX_DiscardUnknown() {
method GetStringy (line 154) | func (m *SimpleMap3) GetStringy() map[string]string {
type SimpleNull3 (line 161) | type SimpleNull3 struct
method Reset (line 168) | func (m *SimpleNull3) Reset() { *m = SimpleNull3{} }
method String (line 169) | func (m *SimpleNull3) String() string { return proto.CompactTextString...
method ProtoMessage (line 170) | func (*SimpleNull3) ProtoMessage() {}
method Descriptor (line 171) | func (*SimpleNull3) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 174) | func (m *SimpleNull3) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 177) | func (m *SimpleNull3) XXX_Marshal(b []byte, deterministic bool) ([]byt...
method XXX_Merge (line 180) | func (dst *SimpleNull3) XXX_Merge(src proto.Message) {
method XXX_Size (line 183) | func (m *SimpleNull3) XXX_Size() int {
method XXX_DiscardUnknown (line 186) | func (m *SimpleNull3) XXX_DiscardUnknown() {
method GetSimple (line 192) | func (m *SimpleNull3) GetSimple() *Simple3 {
type Mappy (line 199) | type Mappy struct
method Reset (line 215) | func (m *Mappy) Reset() { *m = Mappy{} }
method String (line 216) | func (m *Mappy) String() string { return proto.CompactTextString(m) }
method ProtoMessage (line 217) | func (*Mappy) ProtoMessage() {}
method Descriptor (line 218) | func (*Mappy) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 221) | func (m *Mappy) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 224) | func (m *Mappy) XXX_Marshal(b []byte, deterministic bool) ([]byte, err...
method XXX_Merge (line 227) | func (dst *Mappy) XXX_Merge(src proto.Message) {
method XXX_Size (line 230) | func (m *Mappy) XXX_Size() int {
method XXX_DiscardUnknown (line 233) | func (m *Mappy) XXX_DiscardUnknown() {
method GetNummy (line 239) | func (m *Mappy) GetNummy() map[int64]int32 {
method GetStrry (line 246) | func (m *Mappy) GetStrry() map[string]string {
method GetObjjy (line 253) | func (m *Mappy) GetObjjy() map[int32]*Simple3 {
method GetBuggy (line 260) | func (m *Mappy) GetBuggy() map[int64]string {
method GetBooly (line 267) | func (m *Mappy) GetBooly() map[bool]bool {
method GetEnumy (line 274) | func (m *Mappy) GetEnumy() map[string]Numeral {
method GetS32Booly (line 281) | func (m *Mappy) GetS32Booly() map[int32]bool {
method GetS64Booly (line 288) | func (m *Mappy) GetS64Booly() map[int64]bool {
method GetU32Booly (line 295) | func (m *Mappy) GetU32Booly() map[uint32]bool {
method GetU64Booly (line 302) | func (m *Mappy) GetU64Booly() map[uint64]bool {
function init (line 309) | func init() {
function init (line 329) | func init() {
FILE: vendor/github.com/gogo/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go
constant _ (line 22) | _ = proto.GoGoProtoPackageIsVersion2
type Widget_Color (line 24) | type Widget_Color
method Enum (line 43) | func (x Widget_Color) Enum() *Widget_Color {
method String (line 48) | func (x Widget_Color) String() string {
method UnmarshalJSON (line 51) | func (x *Widget_Color) UnmarshalJSON(data []byte) error {
method EnumDescriptor (line 59) | func (Widget_Color) EnumDescriptor() ([]byte, []int) {
constant Widget_RED (line 27) | Widget_RED Widget_Color = 0
constant Widget_GREEN (line 28) | Widget_GREEN Widget_Color = 1
constant Widget_BLUE (line 29) | Widget_BLUE Widget_Color = 2
type Simple (line 64) | type Simple struct
method Reset (line 82) | func (m *Simple) Reset() { *m = Simple{} }
method String (line 83) | func (m *Simple) String() string { return proto.CompactTextString(m) }
method ProtoMessage (line 84) | func (*Simple) ProtoMessage() {}
method Descriptor (line 85) | func (*Simple) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 88) | func (m *Simple) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 91) | func (m *Simple) XXX_Marshal(b []byte, deterministic bool) ([]byte, er...
method XXX_Merge (line 94) | func (dst *Simple) XXX_Merge(src proto.Message) {
method XXX_Size (line 97) | func (m *Simple) XXX_Size() int {
method XXX_DiscardUnknown (line 100) | func (m *Simple) XXX_DiscardUnknown() {
method GetOBool (line 106) | func (m *Simple) GetOBool() bool {
method GetOInt32 (line 113) | func (m *Simple) GetOInt32() int32 {
method GetOInt64 (line 120) | func (m *Simple) GetOInt64() int64 {
method GetOUint32 (line 127) | func (m *Simple) GetOUint32() uint32 {
method GetOUint64 (line 134) | func (m *Simple) GetOUint64() uint64 {
method GetOSint32 (line 141) | func (m *Simple) GetOSint32() int32 {
method GetOSint64 (line 148) | func (m *Simple) GetOSint64() int64 {
method GetOFloat (line 155) | func (m *Simple) GetOFloat() float32 {
method GetODouble (line 162) | func (m *Simple) GetODouble() float64 {
method GetOString (line 169) | func (m *Simple) GetOString() string {
method GetOBytes (line 176) | func (m *Simple) GetOBytes() []byte {
method GetOCastBytes (line 183) | func (m *Simple) GetOCastBytes() Bytes {
type NonFinites (line 191) | type NonFinites struct
method Reset (line 203) | func (m *NonFinites) Reset() { *m = NonFinites{} }
method String (line 204) | func (m *NonFinites) String() string { return proto.CompactTextString(...
method ProtoMessage (line 205) | func (*NonFinites) ProtoMessage() {}
method Descriptor (line 206) | func (*NonFinites) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 209) | func (m *NonFinites) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 212) | func (m *NonFinites) XXX_Marshal(b []byte, deterministic bool) ([]byte...
method XXX_Merge (line 215) | func (dst *NonFinites) XXX_Merge(src proto.Message) {
method XXX_Size (line 218) | func (m *NonFinites) XXX_Size() int {
method XXX_DiscardUnknown (line 221) | func (m *NonFinites) XXX_DiscardUnknown() {
method GetFNan (line 227) | func (m *NonFinites) GetFNan() float32 {
method GetFPinf (line 234) | func (m *NonFinites) GetFPinf() float32 {
method GetFNinf (line 241) | func (m *NonFinites) GetFNinf() float32 {
method GetDNan (line 248) | func (m *NonFinites) GetDNan() float64 {
method GetDPinf (line 255) | func (m *NonFinites) GetDPinf() float64 {
method GetDNinf (line 262) | func (m *NonFinites) GetDNinf() float64 {
type Repeats (line 270) | type Repeats struct
method Reset (line 287) | func (m *Repeats) Reset() { *m = Repeats{} }
method String (line 288) | func (m *Repeats) String() string { return proto.CompactTextString(m) }
method ProtoMessage (line 289) | func (*Repeats) ProtoMessage() {}
method Descriptor (line 290) | func (*Repeats) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 293) | func (m *Repeats) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 296) | func (m *Repeats) XXX_Marshal(b []byte, deterministic bool) ([]byte, e...
method XXX_Merge (line 299) | func (dst *Repeats) XXX_Merge(src proto.Message) {
method XXX_Size (line 302) | func (m *Repeats) XXX_Size() int {
method XXX_DiscardUnknown (line 305) | func (m *Repeats) XXX_DiscardUnknown() {
method GetRBool (line 311) | func (m *Repeats) GetRBool() []bool {
method GetRInt32 (line 318) | func (m *Repeats) GetRInt32() []int32 {
method GetRInt64 (line 325) | func (m *Repeats) GetRInt64() []int64 {
method GetRUint32 (line 332) | func (m *Repeats) GetRUint32() []uint32 {
method GetRUint64 (line 339) | func (m *Repeats) GetRUint64() []uint64 {
method GetRSint32 (line 346) | func (m *Repeats) GetRSint32() []int32 {
method GetRSint64 (line 353) | func (m *Repeats) GetRSint64() []int64 {
method GetRFloat (line 360) | func (m *Repeats) GetRFloat() []float32 {
method GetRDouble (line 367) | func (m *Repeats) GetRDouble() []float64 {
method GetRString (line 374) | func (m *Repeats) GetRString() []string {
method GetRBytes (line 381) | func (m *Repeats) GetRBytes() [][]byte {
type Widget (line 389) | type Widget struct
method Reset (line 401) | func (m *Widget) Reset() { *m = Widget{} }
method String (line 402) | func (m *Widget) String() string { return proto.CompactTextString(m) }
method ProtoMessage (line 403) | func (*Widget) ProtoMessage() {}
method Descriptor (line 404) | func (*Widget) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 407) | func (m *Widget) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 410) | func (m *Widget) XXX_Marshal(b []byte, deterministic bool) ([]byte, er...
method XXX_Merge (line 413) | func (dst *Widget) XXX_Merge(src proto.Message) {
method XXX_Size (line 416) | func (m *Widget) XXX_Size() int {
method XXX_DiscardUnknown (line 419) | func (m *Widget) XXX_DiscardUnknown() {
method GetColor (line 425) | func (m *Widget) GetColor() Widget_Color {
method GetRColor (line 432) | func (m *Widget) GetRColor() []Widget_Color {
method GetSimple (line 439) | func (m *Widget) GetSimple() *Simple {
method GetRSimple (line 446) | func (m *Widget) GetRSimple() []*Simple {
method GetRepeats (line 453) | func (m *Widget) GetRepeats() *Repeats {
method GetRRepeats (line 460) | func (m *Widget) GetRRepeats() []*Repeats {
type Maps (line 467) | type Maps struct
method Reset (line 475) | func (m *Maps) Reset() { *m = Maps{} }
method String (line 476) | func (m *Maps) String() string { return proto.CompactTextString(m) }
method ProtoMessage (line 477) | func (*Maps) ProtoMessage() {}
method Descriptor (line 478) | func (*Maps) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 481) | func (m *Maps) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 484) | func (m *Maps) XXX_Marshal(b []byte, deterministic bool) ([]byte, erro...
method XXX_Merge (line 487) | func (dst *Maps) XXX_Merge(src proto.Message) {
method XXX_Size (line 490) | func (m *Maps) XXX_Size() int {
method XXX_DiscardUnknown (line 493) | func (m *Maps) XXX_DiscardUnknown() {
method GetMInt64Str (line 499) | func (m *Maps) GetMInt64Str() map[int64]string {
method GetMBoolSimple (line 506) | func (m *Maps) GetMBoolSimple() map[bool]*Simple {
type MsgWithOneof (line 513) | type MsgWithOneof struct
method Reset (line 526) | func (m *MsgWithOneof) Reset() { *m = MsgWithOneof{} }
method String (line 527) | func (m *MsgWithOneof) String() string { return proto.CompactTextStrin...
method ProtoMessage (line 528) | func (*MsgWithOneof) ProtoMessage() {}
method Descriptor (line 529) | func (*MsgWithOneof) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 532) | func (m *MsgWithOneof) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 535) | func (m *MsgWithOneof) XXX_Marshal(b []byte, deterministic bool) ([]by...
method XXX_Merge (line 538) | func (dst *MsgWithOneof) XXX_Merge(src proto.Message) {
method XXX_Size (line 541) | func (m *MsgWithOneof) XXX_Size() int {
method XXX_DiscardUnknown (line 544) | func (m *MsgWithOneof) XXX_DiscardUnknown() {
method GetUnion (line 576) | func (m *MsgWithOneof) GetUnion() isMsgWithOneof_Union {
method GetTitle (line 583) | func (m *MsgWithOneof) GetTitle() string {
method GetSalary (line 590) | func (m *MsgWithOneof) GetSalary() int64 {
method GetCountry (line 597) | func (m *MsgWithOneof) GetCountry() string {
method GetHomeAddress (line 604) | func (m *MsgWithOneof) GetHomeAddress() string {
method GetMsgWithRequired (line 611) | func (m *MsgWithOneof) GetMsgWithRequired() *MsgWithRequired {
method XXX_OneofFuncs (line 619) | func (*MsgWithOneof) XXX_OneofFuncs() (func(msg proto.Message, b *prot...
type isMsgWithOneof_Union (line 550) | type isMsgWithOneof_Union interface
type MsgWithOneof_Title (line 554) | type MsgWithOneof_Title struct
method isMsgWithOneof_Union (line 570) | func (*MsgWithOneof_Title) isMsgWithOneof_Union() {}
type MsgWithOneof_Salary (line 557) | type MsgWithOneof_Salary struct
method isMsgWithOneof_Union (line 571) | func (*MsgWithOneof_Salary) isMsgWithOneof_Union() {}
type MsgWithOneof_Country (line 560) | type MsgWithOneof_Country struct
method isMsgWithOneof_Union (line 572) | func (*MsgWithOneof_Country) isMsgWithOneof_Union() {}
type MsgWithOneof_HomeAddress (line 563) | type MsgWithOneof_HomeAddress struct
method isMsgWithOneof_Union (line 573) | func (*MsgWithOneof_HomeAddress) isMsgWithOneof_Union() {}
type MsgWithOneof_MsgWithRequired (line 566) | type MsgWithOneof_MsgWithRequired struct
method isMsgWithOneof_Union (line 574) | func (*MsgWithOneof_MsgWithRequired) isMsgWithOneof_Union() {}
function _MsgWithOneof_OneofMarshaler (line 629) | func _MsgWithOneof_OneofMarshaler(msg proto.Message, b *proto.Buffer) er...
function _MsgWithOneof_OneofUnmarshaler (line 657) | func _MsgWithOneof_OneofUnmarshaler(msg proto.Message, tag, wire int, b ...
function _MsgWithOneof_OneofSizer (line 701) | func _MsgWithOneof_OneofSizer(msg proto.Message) (n int) {
type Real (line 732) | type Real struct
method Reset (line 740) | func (m *Real) Reset() { *m = Real{} }
method String (line 741) | func (m *Real) String() string { return proto.CompactTextString(m) }
method ProtoMessage (line 742) | func (*Real) ProtoMessage() {}
method Descriptor (line 743) | func (*Real) Descriptor() ([]byte, []int) {
method ExtensionRangeArray (line 751) | func (*Real) ExtensionRangeArray() []proto.ExtensionRange {
method XXX_Unmarshal (line 754) | func (m *Real) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 757) | func (m *Real) XXX_Marshal(b []byte, deterministic bool) ([]byte, erro...
method XXX_Merge (line 760) | func (dst *Real) XXX_Merge(src proto.Message) {
method XXX_Size (line 763) | func (m *Real) XXX_Size() int {
method XXX_DiscardUnknown (line 766) | func (m *Real) XXX_DiscardUnknown() {
method GetValue (line 772) | func (m *Real) GetValue() float64 {
type Complex (line 779) | type Complex struct
method Reset (line 787) | func (m *Complex) Reset() { *m = Complex{} }
method String (line 788) | func (m *Complex) String() string { return proto.CompactTextString(m) }
method ProtoMessage (line 789) | func (*Complex) ProtoMessage() {}
method Descriptor (line 790) | func (*Complex) Descriptor() ([]byte, []int) {
method ExtensionRangeArray (line 798) | func (*Complex) ExtensionRangeArray() []proto.ExtensionRange {
method XXX_Unmarshal (line 801) | func (m *Complex) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 804) | func (m *Complex) XXX_Marshal(b []byte, deterministic bool) ([]byte, e...
method XXX_Merge (line 807) | func (dst *Complex) XXX_Merge(src proto.Message) {
method XXX_Size (line 810) | func (m *Complex) XXX_Size() int {
method XXX_DiscardUnknown (line 813) | func (m *Complex) XXX_DiscardUnknown() {
method GetImaginary (line 819) | func (m *Complex) GetImaginary() float64 {
type KnownTypes (line 835) | type KnownTypes struct
method Reset (line 856) | func (m *KnownTypes) Reset() { *m = KnownTypes{} }
method String (line 857) | func (m *KnownTypes) String() string { return proto.CompactTextString(...
method ProtoMessage (line 858) | func (*KnownTypes) ProtoMessage() {}
method Descriptor (line 859) | func (*KnownTypes) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 862) | func (m *KnownTypes) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 865) | func (m *KnownTypes) XXX_Marshal(b []byte, deterministic bool) ([]byte...
method XXX_Merge (line 868) | func (dst *KnownTypes) XXX_Merge(src proto.Message) {
method XXX_Size (line 871) | func (m *KnownTypes) XXX_Size() int {
method XXX_DiscardUnknown (line 874) | func (m *KnownTypes) XXX_DiscardUnknown() {
method GetAn (line 880) | func (m *KnownTypes) GetAn() *types.Any {
method GetDur (line 887) | func (m *KnownTypes) GetDur() *types.Duration {
method GetSt (line 894) | func (m *KnownTypes) GetSt() *types.Struct {
method GetTs (line 901) | func (m *KnownTypes) GetTs() *types.Timestamp {
method GetLv (line 908) | func (m *KnownTypes) GetLv() *types.ListValue {
method GetVal (line 915) | func (m *KnownTypes) GetVal() *types.Value {
method GetDbl (line 922) | func (m *KnownTypes) GetDbl() *types.DoubleValue {
method GetFlt (line 929) | func (m *KnownTypes) GetFlt() *types.FloatValue {
method GetI64 (line 936) | func (m *KnownTypes) GetI64() *types.Int64Value {
method GetU64 (line 943) | func (m *KnownTypes) GetU64() *types.UInt64Value {
method GetI32 (line 950) | func (m *KnownTypes) GetI32() *types.Int32Value {
method GetU32 (line 957) | func (m *KnownTypes) GetU32() *types.UInt32Value {
method GetBool (line 964) | func (m *KnownTypes) GetBool() *types.BoolValue {
method GetStr (line 971) | func (m *KnownTypes) GetStr() *types.StringValue {
method GetBytes (line 978) | func (m *KnownTypes) GetBytes() *types.BytesValue {
type MsgWithRequired (line 986) | type MsgWithRequired struct
method Reset (line 993) | func (m *MsgWithRequired) Reset() { *m = MsgWithRequired{} }
method String (line 994) | func (m *MsgWithRequired) String() string { return proto.CompactTextSt...
method ProtoMessage (line 995) | func (*MsgWithRequired) ProtoMessage() {}
method Descriptor (line 996) | func (*MsgWithRequired) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 999) | func (m *MsgWithRequired) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1002) | func (m *MsgWithRequired) XXX_Marshal(b []byte, deterministic bool) ([...
method XXX_Merge (line 1005) | func (dst *MsgWithRequired) XXX_Merge(src proto.Message) {
method XXX_Size (line 1008) | func (m *MsgWithRequired) XXX_Size() int {
method XXX_DiscardUnknown (line 1011) | func (m *MsgWithRequired) XXX_DiscardUnknown() {
method GetStr (line 1017) | func (m *MsgWithRequired) GetStr() string {
type MsgWithIndirectRequired (line 1024) | type MsgWithIndirectRequired struct
method Reset (line 1033) | func (m *MsgWithIndirectRequired) Reset() { *m = MsgWithIndire...
method String (line 1034) | func (m *MsgWithIndirectRequired) String() string { return proto.Compa...
method ProtoMessage (line 1035) | func (*MsgWithIndirectRequired) ProtoMessage() {}
method Descriptor (line 1036) | func (*MsgWithIndirectRequired) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1039) | func (m *MsgWithIndirectRequired) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1042) | func (m *MsgWithIndirectRequired) XXX_Marshal(b []byte, deterministic ...
method XXX_Merge (line 1045) | func (dst *MsgWithIndirectRequired) XXX_Merge(src proto.Message) {
method XXX_Size (line 1048) | func (m *MsgWithIndirectRequired) XXX_Size() int {
method XXX_DiscardUnknown (line 1051) | func (m *MsgWithIndirectRequired) XXX_DiscardUnknown() {
method GetSubm (line 1057) | func (m *MsgWithIndirectRequired) GetSubm() *MsgWithRequired {
method GetMapField (line 1064) | func (m *MsgWithIndirectRequired) GetMapField() map[string]*MsgWithReq...
method GetSliceField (line 1071) | func (m *MsgWithIndirectRequired) GetSliceField() []*MsgWithRequired {
type MsgWithRequiredBytes (line 1078) | type MsgWithRequiredBytes struct
method Reset (line 1085) | func (m *MsgWithRequiredBytes) Reset() { *m = MsgWithRequiredB...
method String (line 1086) | func (m *MsgWithRequiredBytes) String() string { return proto.CompactT...
method ProtoMessage (line 1087) | func (*MsgWithRequiredBytes) ProtoMessage() {}
method Descriptor (line 1088) | func (*MsgWithRequiredBytes) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1091) | func (m *MsgWithRequiredBytes) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1094) | func (m *MsgWithRequiredBytes) XXX_Marshal(b []byte, deterministic boo...
method XXX_Merge (line 1097) | func (dst *MsgWithRequiredBytes) XXX_Merge(src proto.Message) {
method XXX_Size (line 1100) | func (m *MsgWithRequiredBytes) XXX_Size() int {
method XXX_DiscardUnknown (line 1103) | func (m *MsgWithRequiredBytes) XXX_DiscardUnknown() {
method GetByts (line 1109) | func (m *MsgWithRequiredBytes) GetByts() []byte {
type MsgWithRequiredWKT (line 1116) | type MsgWithRequiredWKT struct
method Reset (line 1123) | func (m *MsgWithRequiredWKT) Reset() { *m = MsgWithRequiredWKT...
method String (line 1124) | func (m *MsgWithRequiredWKT) String() string { return proto.CompactTex...
method ProtoMessage (line 1125) | func (*MsgWithRequiredWKT) ProtoMessage() {}
method Descriptor (line 1126) | func (*MsgWithRequiredWKT) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 1129) | func (m *MsgWithRequiredWKT) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 1132) | func (m *MsgWithRequiredWKT) XXX_Marshal(b []byte, deterministic bool)...
method XXX_Merge (line 1135) | func (dst *MsgWithRequiredWKT) XXX_Merge(src proto.Message) {
method XXX_Size (line 1138) | func (m *MsgWithRequiredWKT) XXX_Size() int {
method XXX_DiscardUnknown (line 1141) | func (m *MsgWithRequiredWKT) XXX_DiscardUnknown() {
method GetStr (line 1147) | func (m *MsgWithRequiredWKT) GetStr() *types.StringValue {
function init (line 1172) | func init() {
function init (line 1195) | func init() { proto.RegisterFile("test_objects.proto", fileDescriptor_te...
FILE: vendor/github.com/gogo/protobuf/plugin/compare/compare.go
type plugin (line 39) | type plugin struct
method Name (line 52) | func (p *plugin) Name() string {
method Init (line 56) | func (p *plugin) Init(g *generator.Generator) {
method Generate (line 60) | func (p *plugin) Generate(file *generator.FileDescriptor) {
method generateNullableField (line 77) | func (p *plugin) generateNullableField(fieldname string) {
method generateMsgNullAndTypeCheck (line 102) | func (p *plugin) generateMsgNullAndTypeCheck(ccTypeName string) {
method generateField (line 145) | func (p *plugin) generateField(file *generator.FileDescriptor, message...
method generateMessage (line 400) | func (p *plugin) generateMessage(file *generator.FileDescriptor, messa...
function NewPlugin (line 48) | func NewPlugin() *plugin {
function init (line 524) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/compare/comparetest.go
type test (line 37) | type test struct
method Generate (line 45) | func (p *test) Generate(imports generator.PluginImports, file *generat...
function NewTest (line 41) | func NewTest(g *generator.Generator) testgen.TestPlugin {
function init (line 116) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/defaultcheck/defaultcheck.go
type plugin (line 61) | type plugin struct
method Name (line 69) | func (p *plugin) Name() string {
method Init (line 73) | func (p *plugin) Init(g *generator.Generator) {
method Generate (line 77) | func (p *plugin) Generate(file *generator.FileDescriptor) {
method GenerateImports (line 129) | func (p *plugin) GenerateImports(*generator.FileDescriptor) {}
function NewPlugin (line 65) | func NewPlugin() *plugin {
function init (line 131) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/description/description.go
type plugin (line 88) | type plugin struct
method Name (line 97) | func (p *plugin) Name() string {
method Init (line 101) | func (p *plugin) Init(g *generator.Generator) {
method Generate (line 105) | func (p *plugin) Generate(file *generator.FileDescriptor) {
function NewPlugin (line 93) | func NewPlugin() *plugin {
function init (line 199) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/description/descriptiontest.go
type test (line 37) | type test struct
method Generate (line 45) | func (p *test) Generate(imports generator.PluginImports, file *generat...
function NewTest (line 41) | func NewTest(g *generator.Generator) testgen.TestPlugin {
function init (line 71) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/embedcheck/embedcheck.go
type plugin (line 56) | type plugin struct
method Name (line 64) | func (p *plugin) Name() string {
method Init (line 68) | func (p *plugin) Init(g *generator.Generator) {
method Generate (line 99) | func (p *plugin) Generate(file *generator.FileDescriptor) {
method checkNameSpace (line 129) | func (p *plugin) checkNameSpace(message *generator.Descriptor) map[str...
method checkOverwrite (line 155) | func (p *plugin) checkOverwrite(message *generator.Descriptor, enabler...
method checkRepeated (line 176) | func (p *plugin) checkRepeated(message *generator.Descriptor) {
method GenerateImports (line 196) | func (p *plugin) GenerateImports(*generator.FileDescriptor) {}
function NewPlugin (line 60) | func NewPlugin() *plugin {
function init (line 198) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/enumstringer/enumstringer.go
type enumstringer (line 47) | type enumstringer struct
method Name (line 58) | func (p *enumstringer) Name() string {
method Init (line 62) | func (p *enumstringer) Init(g *generator.Generator) {
method Generate (line 66) | func (p *enumstringer) Generate(file *generator.FileDescriptor) {
function NewEnumStringer (line 54) | func NewEnumStringer() *enumstringer {
function init (line 102) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/equal/equal.go
type plugin (line 167) | type plugin struct
method Name (line 179) | func (p *plugin) Name() string {
method Init (line 183) | func (p *plugin) Init(g *generator.Generator) {
method Generate (line 187) | func (p *plugin) Generate(file *generator.FileDescriptor) {
method generateNullableField (line 206) | func (p *plugin) generateNullableField(fieldname string, verbose bool) {
method generateMsgNullAndTypeCheck (line 230) | func (p *plugin) generateMsgNullAndTypeCheck(ccTypeName string, verbos...
method generateField (line 289) | func (p *plugin) generateField(file *generator.FileDescriptor, message...
method generateMessage (line 466) | func (p *plugin) generateMessage(file *generator.FileDescriptor, messa...
function NewPlugin (line 175) | func NewPlugin() *plugin {
function init (line 629) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/equal/equaltest.go
type test (line 37) | type test struct
method Generate (line 45) | func (p *test) Generate(imports generator.PluginImports, file *generat...
function NewTest (line 41) | func NewTest(g *generator.Generator) testgen.TestPlugin {
function init (line 107) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/face/face.go
type plugin (line 138) | type plugin struct
method Name (line 147) | func (p *plugin) Name() string {
method Init (line 151) | func (p *plugin) Init(g *generator.Generator) {
method Generate (line 155) | func (p *plugin) Generate(file *generator.FileDescriptor) {
function NewPlugin (line 143) | func NewPlugin() *plugin {
function init (line 231) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/face/facetest.go
type test (line 37) | type test struct
method Generate (line 45) | func (p *test) Generate(imports generator.PluginImports, file *generat...
function NewTest (line 41) | func NewTest(g *generator.Generator) testgen.TestPlugin {
function init (line 80) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/gostring/gostring.go
type gostring (line 109) | type gostring struct
method Name (line 121) | func (p *gostring) Name() string {
method Overwrite (line 125) | func (p *gostring) Overwrite() {
method Init (line 129) | func (p *gostring) Init(g *generator.Generator) {
method Generate (line 133) | func (p *gostring) Generate(file *generator.FileDescriptor) {
function NewGoString (line 117) | func NewGoString() *gostring {
function init (line 384) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/gostring/gostringtest.go
type test (line 37) | type test struct
method Generate (line 45) | func (p *test) Generate(imports generator.PluginImports, file *generat...
function NewTest (line 41) | func NewTest(g *generator.Generator) testgen.TestPlugin {
function init (line 88) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/marshalto/marshalto.go
type NumGen (line 149) | type NumGen interface
type numGen (line 154) | type numGen struct
method Next (line 162) | func (this *numGen) Next() string {
method Current (line 167) | func (this *numGen) Current() string {
function NewNumGen (line 158) | func NewNumGen() NumGen {
type marshalto (line 171) | type marshalto struct
method Name (line 188) | func (p *marshalto) Name() string {
method Init (line 192) | func (p *marshalto) Init(g *generator.Generator) {
method callFixed64 (line 196) | func (p *marshalto) callFixed64(varName ...string) {
method callFixed32 (line 201) | func (p *marshalto) callFixed32(varName ...string) {
method callVarint (line 206) | func (p *marshalto) callVarint(varName ...string) {
method encodeVarint (line 210) | func (p *marshalto) encodeVarint(varName string) {
method encodeKey (line 222) | func (p *marshalto) encodeKey(fieldNumber int32, wireType int) {
method mapField (line 267) | func (p *marshalto) mapField(numGen NumGen, field *descriptor.FieldDes...
method generateField (line 352) | func (p *marshalto) generateField(proto3 bool, numGen NumGen, file *ge...
method Generate (line 1058) | func (p *marshalto) Generate(file *generator.FileDescriptor) {
function NewMarshal (line 184) | func NewMarshal() *marshalto {
function keySize (line 237) | func keySize(fieldNumber int32, wireType int) int {
function wireToType (line 247) | func wireToType(wire string) int {
type orderFields (line 338) | type orderFields
method Len (line 340) | func (this orderFields) Len() int {
method Less (line 344) | func (this orderFields) Less(i, j int) bool {
method Swap (line 348) | func (this orderFields) Swap(i, j int) {
function init (line 1203) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/oneofcheck/oneofcheck.go
type plugin (line 46) | type plugin struct
method Name (line 54) | func (p *plugin) Name() string {
method Init (line 58) | func (p *plugin) Init(g *generator.Generator) {
method Generate (line 62) | func (p *plugin) Generate(file *generator.FileDescriptor) {
method GenerateImports (line 89) | func (p *plugin) GenerateImports(*generator.FileDescriptor) {}
function NewPlugin (line 50) | func NewPlugin() *plugin {
function init (line 91) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/populate/populate.go
type VarGen (line 99) | type VarGen interface
type varGen (line 104) | type varGen struct
method Next (line 112) | func (this *varGen) Next() string {
method Current (line 117) | func (this *varGen) Current() string {
function NewVarGen (line 108) | func NewVarGen() VarGen {
type plugin (line 121) | type plugin struct
method Name (line 134) | func (p *plugin) Name() string {
method Init (line 138) | func (p *plugin) Init(g *generator.Generator) {
method getFuncName (line 185) | func (p *plugin) getFuncName(goTypName string) string {
method getFuncCall (line 202) | func (p *plugin) getFuncCall(goTypName string) string {
method getCustomFuncCall (line 208) | func (p *plugin) getCustomFuncCall(goTypName string) string {
method getEnumVal (line 214) | func (p *plugin) getEnumVal(field *descriptor.FieldDescriptorProto, go...
method GenerateField (line 226) | func (p *plugin) GenerateField(file *generator.FileDescriptor, message...
method hasLoop (line 446) | func (p *plugin) hasLoop(pkg string, field *descriptor.FieldDescriptor...
method loops (line 484) | func (p *plugin) loops(pkg string, field *descriptor.FieldDescriptorPr...
method Generate (line 501) | func (p *plugin) Generate(file *generator.FileDescriptor) {
function NewPlugin (line 130) | func NewPlugin() *plugin {
function value (line 142) | func value(typeName string, fieldType descriptor.FieldDescriptorProto_Ty...
function negative (line 173) | func negative(fieldType descriptor.FieldDescriptorProto_Type) bool {
function init (line 793) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/size/size.go
type size (line 135) | type size struct
method Name (line 147) | func (p *size) Name() string {
method Init (line 151) | func (p *size) Init(g *generator.Generator) {
method sizeVarint (line 185) | func (p *size) sizeVarint() {
method sizeZigZag (line 199) | func (p *size) sizeZigZag() {
method std (line 205) | func (p *size) std(field *descriptor.FieldDescriptorProto, name string...
method generateField (line 222) | func (p *size) generateField(proto3 bool, file *generator.FileDescript...
method Generate (line 569) | func (p *size) Generate(file *generator.FileDescriptor) {
function NewSize (line 143) | func NewSize() *size {
function wireToType (line 155) | func wireToType(wire string) int {
function keySize (line 175) | func keySize(fieldNumber int32, wireType int) int {
function init (line 672) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/size/sizetest.go
type test (line 37) | type test struct
method Generate (line 45) | func (p *test) Generate(imports generator.PluginImports, file *generat...
function NewTest (line 41) | func NewTest(g *generator.Generator) testgen.TestPlugin {
function init (line 132) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/stringer/stringer.go
type stringer (line 101) | type stringer struct
method Name (line 112) | func (p *stringer) Name() string {
method Init (line 116) | func (p *stringer) Init(g *generator.Generator) {
method Generate (line 120) | func (p *stringer) Generate(file *generator.FileDescriptor) {
function NewStringer (line 108) | func NewStringer() *stringer {
function init (line 294) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/stringer/stringertest.go
type test (line 37) | type test struct
method Generate (line 45) | func (p *test) Generate(imports generator.PluginImports, file *generat...
function NewTest (line 41) | func NewTest(g *generator.Generator) testgen.TestPlugin {
function init (line 81) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/testgen/testgen.go
type TestPlugin (line 212) | type TestPlugin interface
type NewTestPlugin (line 216) | type NewTestPlugin
function RegisterTestPlugin (line 220) | func RegisterTestPlugin(newFunc NewTestPlugin) {
type plugin (line 224) | type plugin struct
method Name (line 234) | func (p *plugin) Name() string {
method Init (line 238) | func (p *plugin) Init(g *generator.Generator) {
method Generate (line 246) | func (p *plugin) Generate(file *generator.FileDescriptor) {
function NewPlugin (line 230) | func NewPlugin() *plugin {
type testProto (line 260) | type testProto struct
method Generate (line 268) | func (p *testProto) Generate(imports generator.PluginImports, file *ge...
function newProto (line 264) | func newProto(g *generator.Generator) TestPlugin {
type testJson (line 458) | type testJson struct
method Generate (line 466) | func (p *testJson) Generate(imports generator.PluginImports, file *gen...
function newJson (line 462) | func newJson(g *generator.Generator) TestPlugin {
type testText (line 517) | type testText struct
method Generate (line 525) | func (p *testText) Generate(imports generator.PluginImports, file *gen...
function newText (line 521) | func newText(g *generator.Generator) TestPlugin {
function init (line 604) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/union/union.go
type union (line 118) | type union struct
method Name (line 127) | func (p *union) Name() string {
method Init (line 131) | func (p *union) Init(g *generator.Generator) {
method Generate (line 135) | func (p *union) Generate(file *generator.FileDescriptor) {
function NewUnion (line 123) | func NewUnion() *union {
function init (line 207) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/union/uniontest.go
type test (line 37) | type test struct
method Generate (line 45) | func (p *test) Generate(imports generator.PluginImports, file *generat...
function NewTest (line 41) | func NewTest(g *generator.Generator) testgen.TestPlugin {
function init (line 84) | func init() {
FILE: vendor/github.com/gogo/protobuf/plugin/unmarshal/unmarshal.go
type unmarshal (line 188) | type unmarshal struct
method Name (line 203) | func (p *unmarshal) Name() string {
method Init (line 207) | func (p *unmarshal) Init(g *generator.Generator) {
method decodeVarint (line 211) | func (p *unmarshal) decodeVarint(varName string, typName string) {
method decodeFixed32 (line 236) | func (p *unmarshal) decodeFixed32(varName string, typeName string) {
method decodeFixed64 (line 246) | func (p *unmarshal) decodeFixed64(varName string, typeName string) {
method declareMapField (line 256) | func (p *unmarshal) declareMapField(varName string, nullable bool, cus...
method mapField (line 319) | func (p *unmarshal) mapField(varName string, customType bool, field *d...
method noStarOrSliceType (line 445) | func (p *unmarshal) noStarOrSliceType(msg *generator.Descriptor, field...
method field (line 456) | func (p *unmarshal) field(file *generator.FileDescriptor, msg *generat...
method Generate (line 1004) | func (p *unmarshal) Generate(file *generator.FileDescriptor) {
function NewUnmarshal (line 199) | func NewUnmarshal() *unmarshal {
function init (line 1347) | func init() {
FILE: vendor/github.com/gogo/protobuf/proto/clone.go
function Clone (line 45) | func Clone(src Message) Message {
type Merger (line 57) | type Merger interface
type generatedMerger (line 69) | type generatedMerger interface
function Merge (line 77) | func Merge(dst, src Message) {
function mergeStruct (line 101) | func mergeStruct(out, in reflect.Value) {
function mergeAny (line 140) | func mergeAny(out, in reflect.Value, viaPtr bool, prop *Properties) {
function mergeExtension (line 243) | func mergeExtension(out, in map[int32]Extension) {
FILE: vendor/github.com/gogo/protobuf/proto/custom_gogo.go
type custom (line 33) | type custom interface
FILE: vendor/github.com/gogo/protobuf/proto/decode.go
function DecodeVarint (line 57) | func DecodeVarint(buf []byte) (x uint64, n int) {
method decodeVarintSlow (line 74) | func (p *Buffer) decodeVarintSlow() (x uint64, err error) {
method DecodeVarint (line 101) | func (p *Buffer) DecodeVarint() (x uint64, err error) {
method DecodeFixed64 (line 201) | func (p *Buffer) DecodeFixed64() (x uint64, err error) {
method DecodeFixed32 (line 224) | func (p *Buffer) DecodeFixed32() (x uint64, err error) {
method DecodeZigzag64 (line 243) | func (p *Buffer) DecodeZigzag64() (x uint64, err error) {
method DecodeZigzag32 (line 255) | func (p *Buffer) DecodeZigzag32() (x uint64, err error) {
method DecodeRawBytes (line 267) | func (p *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error) {
method DecodeStringBytes (line 297) | func (p *Buffer) DecodeStringBytes() (s string, err error) {
type Unmarshaler (line 313) | type Unmarshaler interface
type newUnmarshaler (line 324) | type newUnmarshaler interface
function Unmarshal (line 335) | func Unmarshal(buf []byte, pb Message) error {
function UnmarshalMerge (line 352) | func UnmarshalMerge(buf []byte, pb Message) error {
method DecodeMessage (line 369) | func (p *Buffer) DecodeMessage(pb Message) error {
method DecodeGroup (line 380) | func (p *Buffer) DecodeGroup(pb Message) error {
method Unmarshal (line 397) | func (p *Buffer) Unmarshal(pb Message) error {
FILE: vendor/github.com/gogo/protobuf/proto/discard.go
type generatedDiscarder (line 42) | type generatedDiscarder interface
function DiscardUnknown (line 57) | func DiscardUnknown(m Message) {
method DiscardUnknown (line 69) | func (a *InternalMessageInfo) DiscardUnknown(m Message) {
type discardInfo (line 78) | type discardInfo struct
method discard (line 109) | func (di *discardInfo) discard(src pointer) {
method computeDiscardInfo (line 140) | func (di *discardInfo) computeDiscardInfo() {
type discardFieldInfo (line 88) | type discardFieldInfo struct
function getDiscardInfo (line 98) | func getDiscardInfo(t reflect.Type) *discardInfo {
function discardLegacy (line 254) | func discardLegacy(m Message) {
FILE: vendor/github.com/gogo/protobuf/proto/duration.go
constant maxSeconds (line 46) | maxSeconds = int64(10000 * 365.25 * 24 * 60 * 60)
constant minSeconds (line 47) | minSeconds = -maxSeconds
function validateDuration (line 54) | func validateDuration(d *duration) error {
function durationFromProto (line 74) | func durationFromProto(p *duration) (time.Duration, error) {
function durationProto (line 92) | func durationProto(d time.Duration) *duration {
FILE: vendor/github.com/gogo/protobuf/proto/duration_gogo.go
type duration (line 38) | type duration struct
method Reset (line 43) | func (m *duration) Reset() { *m = duration{} }
method ProtoMessage (line 44) | func (*duration) ProtoMessage() {}
method String (line 45) | func (*duration) String() string { return "duration<string>" }
function init (line 47) | func init() {
FILE: vendor/github.com/gogo/protobuf/proto/encode.go
type RequiredNotSetError (line 53) | type RequiredNotSetError struct
method Error (line 57) | func (e *RequiredNotSetError) Error() string {
constant maxVarintBytes (line 82) | maxVarintBytes = 10
function EncodeVarint (line 90) | func EncodeVarint(x uint64) []byte {
method EncodeVarint (line 106) | func (p *Buffer) EncodeVarint(x uint64) error {
function SizeVarint (line 116) | func SizeVarint(x uint64) int {
method EncodeFixed64 (line 143) | func (p *Buffer) EncodeFixed64(x uint64) error {
method EncodeFixed32 (line 159) | func (p *Buffer) EncodeFixed32(x uint64) error {
method EncodeZigzag64 (line 171) | func (p *Buffer) EncodeZigzag64(x uint64) error {
method EncodeZigzag32 (line 179) | func (p *Buffer) EncodeZigzag32(x uint64) error {
method EncodeRawBytes (line 187) | func (p *Buffer) EncodeRawBytes(b []byte) error {
method EncodeStringBytes (line 195) | func (p *Buffer) EncodeStringBytes(s string) error {
type Marshaler (line 202) | type Marshaler interface
method EncodeMessage (line 208) | func (p *Buffer) EncodeMessage(pb Message) error {
function isNil (line 215) | func isNil(v reflect.Value) bool {
FILE: vendor/github.com/gogo/protobuf/proto/encode_gogo.go
function NewRequiredNotSetError (line 31) | func NewRequiredNotSetError(field string) *RequiredNotSetError {
FILE: vendor/github.com/gogo/protobuf/proto/equal.go
function Equal (line 72) | func Equal(a, b Message) bool {
function equalStruct (line 96) | func equalStruct(v1, v2 reflect.Value) bool {
function equalAny (line 145) | func equalAny(v1, v2 reflect.Value, prop *Properties) bool {
function equalExtensions (line 232) | func equalExtensions(base reflect.Type, x1, x2 XXX_InternalExtensions) b...
function equalExtMap (line 238) | func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool {
FILE: vendor/github.com/gogo/protobuf/proto/extensions.go
type ExtensionRange (line 52) | type ExtensionRange struct
type extendableProto (line 58) | type extendableProto interface
type extendableProtoV1 (line 67) | type extendableProtoV1 interface
type extensionAdapter (line 74) | type extensionAdapter struct
method extensionsWrite (line 78) | func (e extensionAdapter) extensionsWrite() map[int32]Extension {
method extensionsRead (line 82) | func (e extensionAdapter) extensionsRead() (map[int32]Extension, sync....
type notLocker (line 87) | type notLocker struct
method Lock (line 89) | func (n notLocker) Lock() {}
method Unlock (line 90) | func (n notLocker) Unlock() {}
function extendable (line 95) | func extendable(p interface{}) (extendableProto, error) {
function isNilPtr (line 117) | func isNilPtr(x interface{}) bool {
type XXX_InternalExtensions (line 129) | type XXX_InternalExtensions struct
method extensionsWrite (line 144) | func (e *XXX_InternalExtensions) extensionsWrite() map[int32]Extension {
method extensionsRead (line 157) | func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension...
type ExtensionDesc (line 166) | type ExtensionDesc struct
method repeated (line 175) | func (ed *ExtensionDesc) repeated() bool {
type Extension (line 181) | type Extension struct
function SetRawExtension (line 196) | func SetRawExtension(base Message, id int32, b []byte) {
function isExtensionField (line 212) | func isExtensionField(pb extendableProto, field int32) bool {
function checkExtensionTypes (line 222) | func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) e...
type extPropKey (line 242) | type extPropKey struct
function extensionProperties (line 254) | func extensionProperties(ed *ExtensionDesc) *Properties {
function HasExtension (line 278) | func HasExtension(pb Message, extension *ExtensionDesc) bool {
function ClearExtension (line 315) | func ClearExtension(pb Message, extension *ExtensionDesc) {
function clearExtension (line 319) | func clearExtension(pb Message, fieldNum int32) {
function GetExtension (line 345) | func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, er...
function defaultExtensionValue (line 408) | func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) {
function decodeExtension (line 447) | func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, e...
function GetExtensions (line 478) | func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interf...
function ExtensionDescs (line 499) | func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) {
function SetExtension (line 528) | func SetExtension(pb Message, extension *ExtensionDesc, value interface{...
function ClearAllExtensions (line 564) | func ClearAllExtensions(pb Message) {
function RegisterExtension (line 586) | func RegisterExtension(desc *ExtensionDesc) {
function RegisteredExtensions (line 602) | func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc {
FILE: vendor/github.com/gogo/protobuf/proto/extensions_gogo.go
type extensionsBytes (line 42) | type extensionsBytes interface
type slowExtensionAdapter (line 48) | type slowExtensionAdapter struct
method extensionsWrite (line 52) | func (s slowExtensionAdapter) extensionsWrite() map[int32]Extension {
method extensionsRead (line 56) | func (s slowExtensionAdapter) extensionsRead() (map[int32]Extension, s...
function GetBoolExtension (line 65) | func GetBoolExtension(pb Message, extension *ExtensionDesc, ifnotset boo...
method Equal (line 82) | func (this *Extension) Equal(that *Extension) bool {
method Compare (line 92) | func (this *Extension) Compare(that *Extension) int {
function SizeOfInternalExtension (line 102) | func SizeOfInternalExtension(m extendableProto) (n int) {
type sortableMapElem (line 107) | type sortableMapElem struct
function newSortableExtensionsFromMap (line 112) | func newSortableExtensionsFromMap(m map[int32]Extension) sortableExtensi...
type sortableExtensions (line 120) | type sortableExtensions
method Len (line 122) | func (this sortableExtensions) Len() int { return len(this) }
method Swap (line 124) | func (this sortableExtensions) Swap(i, j int) { this[i], this[j] = thi...
method Less (line 126) | func (this sortableExtensions) Less(i, j int) bool { return this[i].fi...
method String (line 128) | func (this sortableExtensions) String() string {
function StringFromInternalExtension (line 137) | func StringFromInternalExtension(m extendableProto) string {
function StringFromExtensionsMap (line 141) | func StringFromExtensionsMap(m map[int32]Extension) string {
function StringFromExtensionsBytes (line 145) | func StringFromExtensionsBytes(ext []byte) string {
function EncodeInternalExtension (line 153) | func EncodeInternalExtension(m extendableProto, data []byte) (n int, err...
function EncodeExtensionMap (line 157) | func EncodeExtensionMap(m map[int32]Extension, data []byte) (n int, err ...
function GetRawExtension (line 172) | func GetRawExtension(m map[int32]Extension, id int32) ([]byte, error) {
function size (line 180) | func size(buf []byte, wire int) (int, error) {
function BytesToExtensionsMap (line 211) | func BytesToExtensionsMap(buf []byte) (map[int32]Extension, error) {
function NewExtension (line 232) | func NewExtension(e []byte) Extension {
function AppendExtension (line 238) | func AppendExtension(e Message, tag int32, buf []byte) {
function encodeExtension (line 252) | func encodeExtension(extension *ExtensionDesc, value interface{}) ([]byt...
function decodeExtensionFromBytes (line 262) | func decodeExtensionFromBytes(extension *ExtensionDesc, buf []byte) (int...
method Encode (line 290) | func (this *Extension) Encode() error {
method GoString (line 301) | func (this Extension) GoString() string {
function SetUnsafeExtension (line 308) | func SetUnsafeExtension(pb Message, fieldNum int32, value interface{}) e...
function GetUnsafeExtension (line 321) | func GetUnsafeExtension(pb Message, fieldNum int32) (interface{}, error) {
function NewUnsafeXXX_InternalExtensions (line 334) | func NewUnsafeXXX_InternalExtensions(m map[int32]Extension) XXX_Internal...
function GetUnsafeExtensionsMap (line 345) | func GetUnsafeExtensionsMap(extendable Message) map[int32]Extension {
function deleteExtension (line 350) | func deleteExtension(pb extensionsBytes, theFieldNum int32, offset int) ...
FILE: vendor/github.com/gogo/protobuf/proto/lib.go
type Message (line 280) | type Message interface
type Stats (line 288) | type Stats struct
constant collectStats (line 299) | collectStats = false
function GetStats (line 304) | func GetStats() Stats { return stats }
type Buffer (line 311) | type Buffer struct
method Reset (line 325) | func (p *Buffer) Reset() {
method SetBuf (line 332) | func (p *Buffer) SetBuf(s []byte) {
method Bytes (line 338) | func (p *Buffer) Bytes() []byte { return p.buf }
method SetDeterministic (line 360) | func (p *Buffer) SetDeterministic(deterministic bool) {
method DebugPrint (line 464) | func (p *Buffer) DebugPrint(s string, b []byte) {
function NewBuffer (line 320) | func NewBuffer(e []byte) *Buffer {
function Bool (line 370) | func Bool(v bool) *bool {
function Int32 (line 376) | func Int32(v int32) *int32 {
function Int (line 383) | func Int(v int) *int32 {
function Int64 (line 391) | func Int64(v int64) *int64 {
function Float32 (line 397) | func Float32(v float32) *float32 {
function Float64 (line 403) | func Float64(v float64) *float64 {
function Uint32 (line 409) | func Uint32(v uint32) *uint32 {
function Uint64 (line 415) | func Uint64(v uint64) *uint64 {
function String (line 421) | func String(v string) *string {
function EnumName (line 427) | func EnumName(m map[int32]string, v int32) string {
function UnmarshalJSONEnum (line 441) | func UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string)...
function SetDefaults (line 569) | func SetDefaults(pb Message) {
function setDefaults (line 574) | func setDefaults(v reflect.Value, recur, zeros bool) {
type defaultMessage (line 716) | type defaultMessage struct
type scalarField (line 721) | type scalarField struct
function buildDefaultMessage (line 728) | func buildDefaultMessage(t reflect.Type) (dm defaultMessage) {
function fieldDefault (line 757) | func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, n...
function mapKeys (line 854) | func mapKeys(vs []reflect.Value) sort.Interface {
type mapKeySorter (line 877) | type mapKeySorter struct
method Len (line 882) | func (s mapKeySorter) Len() int { return len(s.vs) }
method Swap (line 883) | func (s mapKeySorter) Swap(i, j int) { s.vs[i], s.vs[j] = s.vs[j], s.v...
method Less (line 884) | func (s mapKeySorter) Less(i, j int) bool {
function isProto3Zero (line 889) | func isProto3Zero(v reflect.Value) bool {
constant GoGoProtoPackageIsVersion2 (line 907) | GoGoProtoPackageIsVersion2 = true
constant GoGoProtoPackageIsVersion1 (line 911) | GoGoProtoPackageIsVersion1 = true
type InternalMessageInfo (line 916) | type InternalMessageInfo struct
FILE: vendor/github.com/gogo/protobuf/proto/lib_gogo.go
type Sizer (line 36) | type Sizer interface
type ProtoSizer (line 40) | type ProtoSizer interface
function MarshalJSONEnum (line 44) | func MarshalJSONEnum(m map[int32]string, value int32) ([]byte, error) {
FILE: vendor/github.com/gogo/protobuf/proto/message_set.go
type _MessageSet_Item (line 63) | type _MessageSet_Item struct
type messageSet (line 68) | type messageSet struct
method find (line 83) | func (ms *messageSet) find(pb Message) *_MessageSet_Item {
method Has (line 97) | func (ms *messageSet) Has(pb Message) bool {
method Unmarshal (line 101) | func (ms *messageSet) Unmarshal(pb Message) error {
method Marshal (line 111) | func (ms *messageSet) Marshal(pb Message) error {
method Reset (line 135) | func (ms *messageSet) Reset() { *ms = messageSet{} }
method String (line 136) | func (ms *messageSet) String() string { return CompactTextString(ms) }
method ProtoMessage (line 137) | func (*messageSet) ProtoMessage() {}
type messageTypeIder (line 79) | type messageTypeIder interface
function skipVarint (line 141) | func skipVarint(buf []byte) []byte {
function MarshalMessageSet (line 150) | func MarshalMessageSet(exts interface{}) ([]byte, error) {
function marshalMessageSet (line 155) | func marshalMessageSet(exts interface{}, deterministic bool) ([]byte, er...
function UnmarshalMessageSet (line 187) | func UnmarshalMessageSet(buf []byte, exts interface{}) error {
function MarshalMessageSetJSON (line 228) | func MarshalMessageSetJSON(exts interface{}) ([]byte, error) {
function UnmarshalMessageSetJSON (line 289) | func UnmarshalMessageSetJSON(buf []byte, exts interface{}) error {
type messageSetDesc (line 303) | type messageSetDesc struct
function RegisterMessageSetType (line 309) | func RegisterMessageSetType(m Message, fieldNum int32, name string) {
FILE: vendor/github.com/gogo/protobuf/proto/pointer_reflect.go
constant unsafeAllowed (line 45) | unsafeAllowed = false
type field (line 50) | type field
method IsValid (line 64) | func (f field) IsValid() bool { return f != nil }
function toField (line 53) | func toField(f *reflect.StructField) field {
type pointer (line 70) | type pointer struct
method offset (line 96) | func (p pointer) offset(f field) pointer {
method isNil (line 100) | func (p pointer) isNil() bool {
method toInt64 (line 117) | func (p pointer) toInt64() *int64 {
method toInt64Ptr (line 120) | func (p pointer) toInt64Ptr() **int64 {
method toInt64Slice (line 123) | func (p pointer) toInt64Slice() *[]int64 {
method toInt32 (line 129) | func (p pointer) toInt32() *int32 {
method getInt32Ptr (line 143) | func (p pointer) getInt32Ptr() *int32 {
method setInt32Ptr (line 151) | func (p pointer) setInt32Ptr(v int32) {
method getInt32Slice (line 161) | func (p pointer) getInt32Slice() []int32 {
method setInt32Slice (line 179) | func (p pointer) setInt32Slice(v []int32) {
method appendInt32Slice (line 194) | func (p pointer) appendInt32Slice(v int32) {
method toUint64 (line 198) | func (p pointer) toUint64() *uint64 {
method toUint64Ptr (line 201) | func (p pointer) toUint64Ptr() **uint64 {
method toUint64Slice (line 204) | func (p pointer) toUint64Slice() *[]uint64 {
method toUint32 (line 207) | func (p pointer) toUint32() *uint32 {
method toUint32Ptr (line 210) | func (p pointer) toUint32Ptr() **uint32 {
method toUint32Slice (line 213) | func (p pointer) toUint32Slice() *[]uint32 {
method toBool (line 216) | func (p pointer) toBool() *bool {
method toBoolPtr (line 219) | func (p pointer) toBoolPtr() **bool {
method toBoolSlice (line 222) | func (p pointer) toBoolSlice() *[]bool {
method toFloat64 (line 225) | func (p pointer) toFloat64() *float64 {
method toFloat64Ptr (line 228) | func (p pointer) toFloat64Ptr() **float64 {
method toFloat64Slice (line 231) | func (p pointer) toFloat64Slice() *[]float64 {
method toFloat32 (line 234) | func (p pointer) toFloat32() *float32 {
method toFloat32Ptr (line 237) | func (p pointer) toFloat32Ptr() **float32 {
method toFloat32Slice (line 240) | func (p pointer) toFloat32Slice() *[]float32 {
method toString (line 243) | func (p pointer) toString() *string {
method toStringPtr (line 246) | func (p pointer) toStringPtr() **string {
method toStringSlice (line 249) | func (p pointer) toStringSlice() *[]string {
method toBytes (line 252) | func (p pointer) toBytes() *[]byte {
method toBytesSlice (line 255) | func (p pointer) toBytesSlice() *[][]byte {
method toExtensions (line 258) | func (p pointer) toExtensions() *XXX_InternalExtensions {
method toOldExtensions (line 261) | func (p pointer) toOldExtensions() *map[int32]Extension {
method getPointer (line 264) | func (p pointer) getPointer() pointer {
method setPointer (line 267) | func (p pointer) setPointer(q pointer) {
method appendPointer (line 270) | func (p pointer) appendPointer(q pointer) {
method getPointerSlice (line 276) | func (p pointer) getPointerSlice() []pointer {
method setPointerSlice (line 290) | func (p pointer) setPointerSlice(v []pointer) {
method getInterfacePointer (line 304) | func (p pointer) getInterfacePointer() pointer {
method asPointerTo (line 311) | func (p pointer) asPointerTo(t reflect.Type) reflect.Value {
function toPointer (line 76) | func toPointer(i *Message) pointer {
function toAddrPointer (line 82) | func toAddrPointer(i *interface{}, isptr bool) pointer {
function valToPointer (line 90) | func valToPointer(v reflect.Value) pointer {
function grow (line 107) | func grow(s reflect.Value) reflect.Value {
function atomicLoadUnmarshalInfo (line 316) | func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo {
function atomicStoreUnmarshalInfo (line 321) | func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) {
function atomicLoadMarshalInfo (line 326) | func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo {
function atomicStoreMarshalInfo (line 331) | func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) {
function atomicLoadMergeInfo (line 336) | func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo {
function atomicStoreMergeInfo (line 341) | func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) {
function atomicLoadDiscardInfo (line 346) | func atomicLoadDiscardInfo(p **discardInfo) *discardInfo {
function atomicStoreDiscardInfo (line 351) | func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) {
FILE: vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go
method getRef (line 43) | func (p pointer) getRef() pointer {
method appendRef (line 47) | func (p pointer) appendRef(v pointer, typ reflect.Type) {
method getSlice (line 54) | func (p pointer) getSlice(typ reflect.Type) reflect.Value {
FILE: vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go
constant unsafeAllowed (line 44) | unsafeAllowed = true
type field (line 48) | type field
method IsValid (line 62) | func (f field) IsValid() bool {
function toField (line 51) | func toField(f *reflect.StructField) field {
constant invalidField (line 56) | invalidField = ^field(0)
constant zeroField (line 59) | zeroField = field(0)
type pointer (line 70) | type pointer struct
method offset (line 107) | func (p pointer) offset(f field) pointer {
method isNil (line 118) | func (p pointer) isNil() bool {
method toInt64 (line 122) | func (p pointer) toInt64() *int64 {
method toInt64Ptr (line 125) | func (p pointer) toInt64Ptr() **int64 {
method toInt64Slice (line 128) | func (p pointer) toInt64Slice() *[]int64 {
method toInt32 (line 131) | func (p pointer) toInt32() *int32 {
method getInt32Ptr (line 144) | func (p pointer) getInt32Ptr() *int32 {
method setInt32Ptr (line 147) | func (p pointer) setInt32Ptr(v int32) {
method getInt32Slice (line 154) | func (p pointer) getInt32Slice() []int32 {
method setInt32Slice (line 161) | func (p pointer) setInt32Slice(v []int32) {
method appendInt32Slice (line 166) | func (p pointer) appendInt32Slice(v int32) {
method toUint64 (line 171) | func (p pointer) toUint64() *uint64 {
method toUint64Ptr (line 174) | func (p pointer) toUint64Ptr() **uint64 {
method toUint64Slice (line 177) | func (p pointer) toUint64Slice() *[]uint64 {
method toUint32 (line 180) | func (p pointer) toUint32() *uint32 {
method toUint32Ptr (line 183) | func (p pointer) toUint32Ptr() **uint32 {
method toUint32Slice (line 186) | func (p pointer) toUint32Slice() *[]uint32 {
method toBool (line 189) | func (p pointer) toBool() *bool {
method toBoolPtr (line 192) | func (p pointer) toBoolPtr() **bool {
method toBoolSlice (line 195) | func (p pointer) toBoolSlice() *[]bool {
method toFloat64 (line 198) | func (p pointer) toFloat64() *float64 {
method toFloat64Ptr (line 201) | func (p pointer) toFloat64Ptr() **float64 {
method toFloat64Slice (line 204) | func (p pointer) toFloat64Slice() *[]float64 {
method toFloat32 (line 207) | func (p pointer) toFloat32() *float32 {
method toFloat32Ptr (line 210) | func (p pointer) toFloat32Ptr() **float32 {
method toFloat32Slice (line 213) | func (p pointer) toFloat32Slice() *[]float32 {
method toString (line 216) | func (p pointer) toString() *string {
method toStringPtr (line 219) | func (p pointer) toStringPtr() **string {
method toStringSlice (line 222) | func (p pointer) toStringSlice() *[]string {
method toBytes (line 225) | func (p pointer) toBytes() *[]byte {
method toBytesSlice (line 228) | func (p pointer) toBytesSlice() *[][]byte {
method toExtensions (line 231) | func (p pointer) toExtensions() *XXX_InternalExtensions {
method toOldExtensions (line 234) | func (p pointer) toOldExtensions() *map[int32]Extension {
method getPointerSlice (line 241) | func (p pointer) getPointerSlice() []pointer {
method setPointerSlice (line 250) | func (p pointer) setPointerSlice(v []pointer) {
method getPointer (line 257) | func (p pointer) getPointer() pointer {
method setPointer (line 262) | func (p pointer) setPointer(q pointer) {
method appendPointer (line 267) | func (p pointer) appendPointer(q pointer) {
method getInterfacePointer (line 274) | func (p pointer) getInterfacePointer() pointer {
method asPointerTo (line 281) | func (p pointer) asPointerTo(t reflect.Type) reflect.Value {
function toPointer (line 79) | func toPointer(i *Message) pointer {
function toAddrPointer (line 88) | func toAddrPointer(i *interface{}, isptr bool) pointer {
function valToPointer (line 101) | func valToPointer(v reflect.Value) pointer {
function atomicLoadUnmarshalInfo (line 285) | func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo {
function atomicStoreUnmarshalInfo (line 288) | func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) {
function atomicLoadMarshalInfo (line 291) | func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo {
function atomicStoreMarshalInfo (line 294) | func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) {
function atomicLoadMergeInfo (line 297) | func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo {
function atomicStoreMergeInfo (line 300) | func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) {
function atomicLoadDiscardInfo (line 303) | func atomicLoadDiscardInfo(p **discardInfo) *discardInfo {
function atomicStoreDiscardInfo (line 306) | func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) {
FILE: vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go
method getRef (line 40) | func (p pointer) getRef() pointer {
method appendRef (line 44) | func (p pointer) appendRef(v pointer, typ reflect.Type) {
method getSlice (line 51) | func (p pointer) getSlice(typ reflect.Type) reflect.Value {
FILE: vendor/github.com/gogo/protobuf/proto/properties.go
constant debug (line 54) | debug bool = false
constant WireVarint (line 58) | WireVarint = 0
constant WireFixed64 (line 59) | WireFixed64 = 1
constant WireBytes (line 60) | WireBytes = 2
constant WireStartGroup (line 61) | WireStartGroup = 3
constant WireEndGroup (line 62) | WireEndGroup = 4
constant WireFixed32 (line 63) | WireFixed32 = 5
type tagMap (line 69) | type tagMap struct
method get (line 78) | func (p *tagMap) get(t int) (int, bool) {
method put (line 90) | func (p *tagMap) put(t int, fi int) {
constant tagMapFastLimit (line 76) | tagMapFastLimit = 1024
type StructProperties (line 106) | type StructProperties struct
method Len (line 128) | func (sp *StructProperties) Len() int { return len(sp.order) }
method Less (line 129) | func (sp *StructProperties) Less(i, j int) bool {
method Swap (line 132) | func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] ...
type OneofProperties (line 119) | type OneofProperties struct
type Properties (line 135) | type Properties struct
method String (line 167) | func (p *Properties) String() string {
method Parse (line 203) | func (p *Properties) Parse(s string) {
method setFieldProps (line 284) | func (p *Properties) setFieldProps(typ reflect.Type, f *reflect.Struct...
method setTag (line 338) | func (p *Properties) setTag(lockGetProp bool) {
method Init (line 353) | func (p *Properties) Init(typ reflect.Type, name, tag string, f *refle...
method init (line 357) | func (p *Properties) init(typ reflect.Type, name, tag string, f *refle...
function GetProperties (line 375) | func GetProperties(t reflect.Type) *StructProperties {
function getPropertiesLocked (line 399) | func getPropertiesLocked(t reflect.Type) *StructProperties {
function RegisterEnum (line 508) | func RegisterEnum(typeName string, unusedNameMap map[int32]string, value...
function EnumValueMap (line 521) | func EnumValueMap(enumType string) map[string]int32 {
function RegisterType (line 535) | func RegisterType(x Message, name string) {
function RegisterMapType (line 554) | func RegisterMapType(x interface{}, name string) {
function MessageName (line 568) | func MessageName(x Message) string {
function MessageType (line 581) | func MessageType(name string) reflect.Type {
function RegisterFile (line 595) | func RegisterFile(filename string, fileDescriptor []byte) {
function FileDescriptor (line 600) | func FileDescriptor(filename string) []byte { return protoFiles[filename] }
FILE: vendor/github.com/gogo/protobuf/proto/proto3_proto/proto3.pb.go
constant _ (line 21) | _ = proto.GoGoProtoPackageIsVersion2
type Message_Humour (line 23) | type Message_Humour
method String (line 45) | func (x Message_Humour) String() string {
method EnumDescriptor (line 48) | func (Message_Humour) EnumDescriptor() ([]byte, []int) {
constant Message_UNKNOWN (line 26) | Message_UNKNOWN Message_Humour = 0
constant Message_PUNS (line 27) | Message_PUNS Message_Humour = 1
constant Message_SLAPSTICK (line 28) | Message_SLAPSTICK Message_Humour = 2
constant Message_BILL_BAILEY (line 29) | Message_BILL_BAILEY Message_Humour = 3
type Message (line 52) | type Message struct
method Reset (line 77) | func (m *Message) Reset() { *m = Message{} }
method String (line 78) | func (m *Message) String() string { return proto.CompactTextString(m) }
method ProtoMessage (line 79) | func (*Message) ProtoMessage() {}
method Descriptor (line 80) | func (*Message) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 83) | func (m *Message) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 86) | func (m *Message) XXX_Marshal(b []byte, deterministic bool) ([]byte, e...
method XXX_Merge (line 89) | func (dst *Message) XXX_Merge(src proto.Message) {
method XXX_Size (line 92) | func (m *Message) XXX_Size() int {
method XXX_DiscardUnknown (line 95) | func (m *Message) XXX_DiscardUnknown() {
method GetName (line 101) | func (m *Message) GetName() string {
method GetHilarity (line 108) | func (m *Message) GetHilarity() Message_Humour {
method GetHeightInCm (line 115) | func (m *Message) GetHeightInCm() uint32 {
method GetData (line 122) | func (m *Message) GetData() []byte {
method GetResultCount (line 129) | func (m *Message) GetResultCount() int64 {
method GetTrueScotsman (line 136) | func (m *Message) GetTrueScotsman() bool {
method GetScore (line 143) | func (m *Message) GetScore() float32 {
method GetKey (line 150) | func (m *Message) GetKey() []uint64 {
method GetShortKey (line 157) | func (m *Message) GetShortKey() []int32 {
method GetNested (line 164) | func (m *Message) GetNested() *Nested {
method GetRFunny (line 171) | func (m *Message) GetRFunny() []Message_Humour {
method GetTerrain (line 178) | func (m *Message) GetTerrain() map[string]*Nested {
method GetProto2Field (line 185) | func (m *Message) GetProto2Field() *test_proto.SubDefaults {
method GetProto2Value (line 192) | func (m *Message) GetProto2Value() map[string]*test_proto.SubDefaults {
method GetAnything (line 199) | func (m *Message) GetAnything() *types.Any {
method GetManyThings (line 206) | func (m *Message) GetManyThings() []*types.Any {
method GetSubmessage (line 213) | func (m *Message) GetSubmessage() *Message {
method GetChildren (line 220) | func (m *Message) GetChildren() []*Message {
method GetStringMap (line 227) | func (m *Message) GetStringMap() map[string]string {
type Nested (line 234) | type Nested struct
method Reset (line 242) | func (m *Nested) Reset() { *m = Nested{} }
method String (line 243) | func (m *Nested) String() string { return proto.CompactTextString(m) }
method ProtoMessage (line 244) | func (*Nested) ProtoMessage() {}
method Descriptor (line 245) | func (*Nested) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 248) | func (m *Nested) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 251) | func (m *Nested) XXX_Marshal(b []byte, deterministic bool) ([]byte, er...
method XXX_Merge (line 254) | func (dst *Nested) XXX_Merge(src proto.Message) {
method XXX_Size (line 257) | func (m *Nested) XXX_Size() int {
method XXX_DiscardUnknown (line 260) | func (m *Nested) XXX_DiscardUnknown() {
method GetBunny (line 266) | func (m *Nested) GetBunny() string {
method GetCute (line 273) | func (m *Nested) GetCute() bool {
type MessageWithMap (line 280) | type MessageWithMap struct
method Reset (line 287) | func (m *MessageWithMap) Reset() { *m = MessageWithMap{} }
method String (line 288) | func (m *MessageWithMap) String() string { return proto.CompactTextStr...
method ProtoMessage (line 289) | func (*MessageWithMap) ProtoMessage() {}
method Descriptor (line 290) | func (*MessageWithMap) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 293) | func (m *MessageWithMap) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 296) | func (m *MessageWithMap) XXX_Marshal(b []byte, deterministic bool) ([]...
method XXX_Merge (line 299) | func (dst *MessageWithMap) XXX_Merge(src proto.Message) {
method XXX_Size (line 302) | func (m *MessageWithMap) XXX_Size() int {
method XXX_DiscardUnknown (line 305) | func (m *MessageWithMap) XXX_DiscardUnknown() {
method GetByteMapping (line 311) | func (m *MessageWithMap) GetByteMapping() map[bool][]byte {
type IntMap (line 318) | type IntMap struct
method Reset (line 325) | func (m *IntMap) Reset() { *m = IntMap{} }
method String (line 326) | func (m *IntMap) String() string { return proto.CompactTextString(m) }
method ProtoMessage (line 327) | func (*IntMap) ProtoMessage() {}
method Descriptor (line 328) | func (*IntMap) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 331) | func (m *IntMap) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 334) | func (m *IntMap) XXX_Marshal(b []byte, deterministic bool) ([]byte, er...
method XXX_Merge (line 337) | func (dst *IntMap) XXX_Merge(src proto.Message) {
method XXX_Size (line 340) | func (m *IntMap) XXX_Size() int {
method XXX_DiscardUnknown (line 343) | func (m *IntMap) XXX_DiscardUnknown() {
method GetRtt (line 349) | func (m *IntMap) GetRtt() map[int32]int32 {
type IntMaps (line 356) | type IntMaps struct
method Reset (line 363) | func (m *IntMaps) Reset() { *m = IntMaps{} }
method String (line 364) | func (m *IntMaps) String() string { return proto.CompactTextString(m) }
method ProtoMessage (line 365) | func (*IntMaps) ProtoMessage() {}
method Descriptor (line 366) | func (*IntMaps) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 369) | func (m *IntMaps) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 372) | func (m *IntMaps) XXX_Marshal(b []byte, deterministic bool) ([]byte, e...
method XXX_Merge (line 375) | func (dst *IntMaps) XXX_Merge(src proto.Message) {
method XXX_Size (line 378) | func (m *IntMaps) XXX_Size() int {
method XXX_DiscardUnknown (line 381) | func (m *IntMaps) XXX_DiscardUnknown() {
method GetMaps (line 387) | func (m *IntMaps) GetMaps() []*IntMap {
function init (line 394) | func init() {
function init (line 408) | func init() { proto.RegisterFile("proto3.proto", fileDescriptor_proto3_1...
FILE: vendor/github.com/gogo/protobuf/proto/skip_gogo.go
function Skip (line 36) | func Skip(data []byte) (n int, err error) {
FILE: vendor/github.com/gogo/protobuf/proto/table_marshal.go
type sizer (line 49) | type sizer
type marshaler (line 53) | type marshaler
type marshalInfo (line 56) | type marshalInfo struct
method size (line 168) | func (u *marshalInfo) size(ptr pointer) int {
method cachedsize (line 230) | func (u *marshalInfo) cachedsize(ptr pointer) int {
method marshal (line 241) | func (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic boo...
method computeMarshalInfo (line 319) | func (u *marshalInfo) computeMarshalInfo() {
method getExtElemInfo (line 429) | func (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElem...
method sizeExtensions (line 2416) | func (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int {
method appendExtensions (line 2444) | func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExte...
method sizeMessageSet (line 2520) | func (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int {
method appendMessageSet (line 2555) | func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExte...
method sizeV1Extensions (line 2637) | func (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int {
method appendV1Extensions (line 2663) | func (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extensi...
type marshalFieldInfo (line 76) | type marshalFieldInfo struct
method computeMarshalFieldInfo (line 465) | func (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructF...
method computeOneofFieldInfo (line 484) | func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructFie...
method setTag (line 536) | func (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt...
method setMarshaler (line 543) | func (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags ...
type marshalElemInfo (line 89) | type marshalElemInfo struct
function getMarshalInfo (line 105) | func getMarshalInfo(t reflect.Type) *marshalInfo {
method Size (line 120) | func (a *InternalMessageInfo) Size(msg Message) int {
method Marshal (line 136) | func (a *InternalMessageInfo) Marshal(b []byte, msg Message, determinist...
function getMessageMarshalInfo (line 148) | func getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *mar...
type byTag (line 421) | type byTag
method Len (line 423) | func (a byTag) Len() int { return len(a) }
method Swap (line 424) | func (a byTag) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
method Less (line 425) | func (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag }
type oneofMessage (line 514) | type oneofMessage interface
function wiretype (line 519) | func wiretype(encoding string) uint64 {
function typeMarshaler (line 561) | func typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (s...
function sizeFixed32Value (line 889) | func sizeFixed32Value(_ pointer, tagsize int) int {
function sizeFixed32ValueNoZero (line 892) | func sizeFixed32ValueNoZero(ptr pointer, tagsize int) int {
function sizeFixed32Ptr (line 899) | func sizeFixed32Ptr(ptr pointer, tagsize int) int {
function sizeFixed32Slice (line 906) | func sizeFixed32Slice(ptr pointer, tagsize int) int {
function sizeFixed32PackedSlice (line 910) | func sizeFixed32PackedSlice(ptr pointer, tagsize int) int {
function sizeFixedS32Value (line 917) | func sizeFixedS32Value(_ pointer, tagsize int) int {
function sizeFixedS32ValueNoZero (line 920) | func sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int {
function sizeFixedS32Ptr (line 927) | func sizeFixedS32Ptr(ptr pointer, tagsize int) int {
function sizeFixedS32Slice (line 934) | func sizeFixedS32Slice(ptr pointer, tagsize int) int {
function sizeFixedS32PackedSlice (line 938) | func sizeFixedS32PackedSlice(ptr pointer, tagsize int) int {
function sizeFloat32Value (line 945) | func sizeFloat32Value(_ pointer, tagsize int) int {
function sizeFloat32ValueNoZero (line 948) | func sizeFloat32ValueNoZero(ptr pointer, tagsize int) int {
function sizeFloat32Ptr (line 955) | func sizeFloat32Ptr(ptr pointer, tagsize int) int {
function sizeFloat32Slice (line 962) | func sizeFloat32Slice(ptr pointer, tagsize int) int {
function sizeFloat32PackedSlice (line 966) | func sizeFloat32PackedSlice(ptr pointer, tagsize int) int {
function sizeFixed64Value (line 973) | func sizeFixed64Value(_ pointer, tagsize int) int {
function sizeFixed64ValueNoZero (line 976) | func sizeFixed64ValueNoZero(ptr pointer, tagsize int) int {
function sizeFixed64Ptr (line 983) | func sizeFixed64Ptr(ptr pointer, tagsize int) int {
function sizeFixed64Slice (line 990) | func sizeFixed64Slice(ptr pointer, tagsize int) int {
function sizeFixed64PackedSlice (line 994) | func sizeFixed64PackedSlice(ptr pointer, tagsize int) int {
function sizeFixedS64Value (line 1001) | func sizeFixedS64Value(_ pointer, tagsize int) int {
function sizeFixedS64ValueNoZero (line 1004) | func sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int {
function sizeFixedS64Ptr (line 1011) | func sizeFixedS64Ptr(ptr pointer, tagsize int) int {
function sizeFixedS64Slice (line 1018) | func sizeFixedS64Slice(ptr pointer, tagsize int) int {
function sizeFixedS64PackedSlice (line 1022) | func sizeFixedS64PackedSlice(ptr pointer, tagsize int) int {
function sizeFloat64Value (line 1029) | func sizeFloat64Value(_ pointer, tagsize int) int {
function sizeFloat64ValueNoZero (line 1032) | func sizeFloat64ValueNoZero(ptr pointer, tagsize int) int {
function sizeFloat64Ptr (line 1039) | func sizeFloat64Ptr(ptr pointer, tagsize int) int {
function sizeFloat64Slice (line 1046) | func sizeFloat64Slice(ptr pointer, tagsize int) int {
function sizeFloat64PackedSlice (line 1050) | func sizeFloat64PackedSlice(ptr pointer, tagsize int) int {
function sizeVarint32Value (line 1057) | func sizeVarint32Value(ptr pointer, tagsize int) int {
function sizeVarint32ValueNoZero (line 1061) | func sizeVarint32ValueNoZero(ptr pointer, tagsize int) int {
function sizeVarint32Ptr (line 1068) | func sizeVarint32Ptr(ptr pointer, tagsize int) int {
function sizeVarint32Slice (line 1075) | func sizeVarint32Slice(ptr pointer, tagsize int) int {
function sizeVarint32PackedSlice (line 1083) | func sizeVarint32PackedSlice(ptr pointer, tagsize int) int {
function sizeVarintS32Value (line 1094) | func sizeVarintS32Value(ptr pointer, tagsize int) int {
function sizeVarintS32ValueNoZero (line 1098) | func sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int {
function sizeVarintS32Ptr (line 1105) | func sizeVarintS32Ptr(ptr pointer, tagsize int) int {
function sizeVarintS32Slice (line 1112) | func sizeVarintS32Slice(ptr pointer, tagsize int) int {
function sizeVarintS32PackedSlice (line 1120) | func sizeVarintS32PackedSlice(ptr pointer, tagsize int) int {
function sizeVarint64Value (line 1131) | func sizeVarint64Value(ptr pointer, tagsize int) int {
function sizeVarint64ValueNoZero (line 1135) | func sizeVarint64ValueNoZero(ptr pointer, tagsize int) int {
function sizeVarint64Ptr (line 1142) | func sizeVarint64Ptr(ptr pointer, tagsize int) int {
function sizeVarint64Slice (line 1149) | func sizeVarint64Slice(ptr pointer, tagsize int) int {
function sizeVarint64PackedSlice (line 1157) | func sizeVarint64PackedSlice(ptr pointer, tagsize int) int {
function sizeVarintS64Value (line 1168) | func sizeVarintS64Value(ptr pointer, tagsize int) int {
function sizeVarintS64ValueNoZero (line 1172) | func sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int {
function sizeVarintS64Ptr (line 1179) | func sizeVarintS64Ptr(ptr pointer, tagsize int) int {
function sizeVarintS64Slice (line 1186) | func sizeVarintS64Slice(ptr pointer, tagsize int) int {
function sizeVarintS64PackedSlice (line 1194) | func sizeVarintS64PackedSlice(ptr pointer, tagsize int) int {
function sizeZigzag32Value (line 1205) | func sizeZigzag32Value(ptr pointer, tagsize int) int {
function sizeZigzag32ValueNoZero (line 1209) | func sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int {
function sizeZigzag32Ptr (line 1216) | func sizeZigzag32Ptr(ptr pointer, tagsize int) int {
function sizeZigzag32Slice (line 1224) | func sizeZigzag32Slice(ptr pointer, tagsize int) int {
function sizeZigzag32PackedSlice (line 1232) | func sizeZigzag32PackedSlice(ptr pointer, tagsize int) int {
function sizeZigzag64Value (line 1243) | func sizeZigzag64Value(ptr pointer, tagsize int) int {
function sizeZigzag64ValueNoZero (line 1247) | func sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int {
function sizeZigzag64Ptr (line 1254) | func sizeZigzag64Ptr(ptr pointer, tagsize int) int {
function sizeZigzag64Slice (line 1262) | func sizeZigzag64Slice(ptr pointer, tagsize int) int {
function sizeZigzag64PackedSlice (line 1270) | func sizeZigzag64PackedSlice(ptr pointer, tagsize int) int {
function sizeBoolValue (line 1281) | func sizeBoolValue(_ pointer, tagsize int) int {
function sizeBoolValueNoZero (line 1284) | func sizeBoolValueNoZero(ptr pointer, tagsize int) int {
function sizeBoolPtr (line 1291) | func sizeBoolPtr(ptr pointer, tagsize int) int {
function sizeBoolSlice (line 1298) | func sizeBoolSlice(ptr pointer, tagsize int) int {
function sizeBoolPackedSlice (line 1302) | func sizeBoolPackedSlice(ptr pointer, tagsize int) int {
function sizeStringValue (line 1309) | func sizeStringValue(ptr pointer, tagsize int) int {
function sizeStringValueNoZero (line 1313) | func sizeStringValueNoZero(ptr pointer, tagsize int) int {
function sizeStringPtr (line 1320) | func sizeStringPtr(ptr pointer, tagsize int) int {
function sizeStringSlice (line 1328) | func sizeStringSlice(ptr pointer, tagsize int) int {
function sizeBytes (line 1336) | func sizeBytes(ptr pointer, tagsize int) int {
function sizeBytes3 (line 1343) | func sizeBytes3(ptr pointer, tagsize int) int {
function sizeBytesOneof (line 1350) | func sizeBytesOneof(ptr pointer, tagsize int) int {
function sizeBytesSlice (line 1354) | func sizeBytesSlice(ptr pointer, tagsize int) int {
function appendFixed32 (line 1364) | func appendFixed32(b []byte, v uint32) []byte {
function appendFixed64 (line 1374) | func appendFixed64(b []byte, v uint64) []byte {
function appendVarint (line 1388) | func appendVarint(b []byte, v uint64) []byte {
function appendFixed32Value (line 1470) | func appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) (...
function appendFixed32ValueNoZero (line 1476) | func appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ b...
function appendFixed32Ptr (line 1485) | func appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]...
function appendFixed32Slice (line 1494) | func appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) (...
function appendFixed32PackedSlice (line 1502) | func appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ b...
function appendFixedS32Value (line 1514) | func appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ...
function appendFixedS32ValueNoZero (line 1520) | func appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ ...
function appendFixedS32Ptr (line 1529) | func appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([...
function appendFixedS32Slice (line 1538) | func appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ...
function appendFixedS32PackedSlice (line 1546) | func appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ ...
function appendFloat32Value (line 1558) | func appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) (...
function appendFloat32ValueNoZero (line 1564) | func appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ b...
function appendFloat32Ptr (line 1573) | func appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]...
function appendFloat32Slice (line 1582) | func appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) (...
function appendFloat32PackedSlice (line 1590) | func appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ b...
function appendFixed64Value (line 1602) | func appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) (...
function appendFixed64ValueNoZero (line 1608) | func appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ b...
function appendFixed64Ptr (line 1617) | func appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]...
function appendFixed64Slice (line 1626) | func appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) (...
function appendFixed64PackedSlice (line 1634) | func appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ b...
function appendFixedS64Value (line 1646) | func appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ...
function appendFixedS64ValueNoZero (line 1652) | func appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ ...
function appendFixedS64Ptr (line 1661) | func appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([...
function appendFixedS64Slice (line 1670) | func appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ...
function appendFixedS64PackedSlice (line 1678) | func appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ ...
function appendFloat64Value (line 1690) | func appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) (...
function appendFloat64ValueNoZero (line 1696) | func appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ b...
function appendFloat64Ptr (line 1705) | func appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]...
function appendFloat64Slice (line 1714) | func appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) (...
function appendFloat64PackedSlice (line 1722) | func appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ b...
function appendVarint32Value (line 1734) | func appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ...
function appendVarint32ValueNoZero (line 1740) | func appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ ...
function appendVarint32Ptr (line 1749) | func appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([...
function appendVarint32Slice (line 1758) | func appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ...
function appendVarint32PackedSlice (line 1766) | func appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ ...
function appendVarintS32Value (line 1783) | func appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool)...
function appendVarintS32ValueNoZero (line 1789) | func appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _...
function appendVarintS32Ptr (line 1798) | func appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) (...
function appendVarintS32Slice (line 1807) | func appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool)...
function appendVarintS32PackedSlice (line 1815) | func appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _...
function appendVarint64Value (line 1832) | func appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ...
function appendVarint64ValueNoZero (line 1838) | func appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ ...
function appendVarint64Ptr (line 1847) | func appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([...
function appendVarint64Slice (line 1856) | func appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ...
function appendVarint64PackedSlice (line 1864) | func appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ ...
function appendVarintS64Value (line 1881) | func appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool)...
function appendVarintS64ValueNoZero (line 1887) | func appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _...
function appendVarintS64Ptr (line 1896) | func appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) (...
function appendVarintS64Slice (line 1905) | func appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool)...
function appendVarintS64PackedSlice (line 1913) | func appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _...
function appendZigzag32Value (line 1930) | func appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ...
function appendZigzag32ValueNoZero (line 1936) | func appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ ...
function appendZigzag32Ptr (line 1945) | func appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([...
function appendZigzag32Slice (line 1955) | func appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ...
function appendZigzag32PackedSlice (line 1963) | func appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ ...
function appendZigzag64Value (line 1980) | func appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ...
function appendZigzag64ValueNoZero (line 1986) | func appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ ...
function appendZigzag64Ptr (line 1995) | func appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([...
function appendZigzag64Slice (line 2005) | func appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ...
function appendZigzag64PackedSlice (line 2013) | func appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ ...
function appendBoolValue (line 2030) | func appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]b...
function appendBoolValueNoZero (line 2040) | func appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool...
function appendBoolPtr (line 2050) | func appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byt...
function appendBoolSlice (line 2063) | func appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]b...
function appendBoolPackedSlice (line 2075) | func appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool...
function appendStringValue (line 2091) | func appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([...
function appendStringValueNoZero (line 2101) | func appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bo...
function appendStringPtr (line 2114) | func appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]b...
function appendStringSlice (line 2128) | func appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([...
function appendBytes (line 2140) | func appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte,...
function appendBytes3 (line 2150) | func appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte...
function appendBytesOneof (line 2160) | func appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]...
function appendBytesSlice (line 2167) | func appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]...
function makeGroupMarshaler (line 2179) | func makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) {
function makeGroupSliceMarshaler (line 2202) | func makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
function makeMessageMarshaler (line 2245) | func makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) {
function makeMessageSliceMarshaler (line 2268) | func makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
function makeMapMarshaler (line 2313) | func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) {
function makeOneOfMarshaler (line 2387) | func makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (s...
type newMarshaler (line 2705) | type newMarshaler interface
function Size (line 2712) | func Size(pb Message) int {
function Marshal (line 2733) | func Marshal(pb Message) ([]byte, error) {
method Marshal (line 2759) | func (p *Buffer) Marshal(pb Message) error {
method grow (line 2789) | func (p *Buffer) grow(n int) {
FILE: vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go
function makeMessageRefMarshaler (line 38) | func makeMessageRefMarshaler(u *marshalInfo) (sizer, marshaler) {
function makeMessageRefSliceMarshaler (line 53) | func makeMessageRefSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
function makeCustomPtrMarshaler (line 98) | func makeCustomPtrMarshaler(u *marshalInfo) (sizer, marshaler) {
function makeCustomMarshaler (line 123) | func makeCustomMarshaler(u *marshalInfo) (sizer, marshaler) {
function makeTimeMarshaler (line 142) | func makeTimeMarshaler(u *marshalInfo) (sizer, marshaler) {
function makeTimePtrMarshaler (line 168) | func makeTimePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
function makeTimeSliceMarshaler (line 200) | func makeTimeSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
function makeTimePtrSliceMarshaler (line 239) | func makeTimePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
function makeDurationMarshaler (line 278) | func makeDurationMarshaler(u *marshalInfo) (sizer, marshaler) {
function makeDurationPtrMarshaler (line 298) | func makeDurationPtrMarshaler(u *marshalInfo) (sizer, marshaler) {
function makeDurationSliceMarshaler (line 324) | func makeDurationSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
function makeDurationPtrSliceMarshaler (line 357) | func makeDurationPtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
FILE: vendor/github.com/gogo/protobuf/proto/table_merge.go
method Merge (line 44) | func (a *InternalMessageInfo) Merge(dst, src Message) {
type mergeInfo (line 53) | type mergeInfo struct
method merge (line 104) | func (mi *mergeInfo) merge(dst, src pointer) {
method computeMergeInfo (line 163) | func (mi *mergeInfo) computeMergeInfo() {
type mergeFieldInfo (line 63) | type mergeFieldInfo struct
function getMergeInfo (line 92) | func getMergeInfo(t reflect.Type) *mergeInfo {
FILE: vendor/github.com/gogo/protobuf/proto/table_unmarshal.go
method Unmarshal (line 53) | func (a *InternalMessageInfo) Unmarshal(msg Message, b []byte) error {
type unmarshalInfo (line 67) | type unmarshalInfo struct
method unmarshal (line 134) | func (u *unmarshalInfo) unmarshal(m pointer, b []byte) error {
method computeUnmarshalInfo (line 265) | func (u *unmarshalInfo) computeUnmarshalInfo() {
method setTag (line 426) | func (u *unmarshalInfo) setTag(tag int, field field, unmarshal unmarsh...
type unmarshaler (line 91) | type unmarshaler
type unmarshalFieldInfo (line 93) | type unmarshalFieldInfo struct
function getUnmarshalInfo (line 112) | func getUnmarshalInfo(t reflect.Type) *unmarshalInfo {
function fieldUnmarshaler (line 443) | func fieldUnmarshaler(f *reflect.StructField) unmarshaler {
function typeUnmarshaler (line 451) | func typeUnmarshaler(t reflect.Type, tags string) unmarshaler {
function unmarshalInt64Value (line 695) | func unmarshalInt64Value(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalInt64Ptr (line 709) | func unmarshalInt64Ptr(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalInt64Slice (line 723) | func unmarshalInt64Slice(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalSint64Value (line 761) | func unmarshalSint64Value(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalSint64Ptr (line 775) | func unmarshalSint64Ptr(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalSint64Slice (line 789) | func unmarshalSint64Slice(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalUint64Value (line 827) | func unmarshalUint64Value(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalUint64Ptr (line 841) | func unmarshalUint64Ptr(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalUint64Slice (line 855) | func unmarshalUint64Slice(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalInt32Value (line 893) | func unmarshalInt32Value(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalInt32Ptr (line 907) | func unmarshalInt32Ptr(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalInt32Slice (line 921) | func unmarshalInt32Slice(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalSint32Value (line 957) | func unmarshalSint32Value(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalSint32Ptr (line 971) | func unmarshalSint32Ptr(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalSint32Slice (line 985) | func unmarshalSint32Slice(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalUint32Value (line 1021) | func unmarshalUint32Value(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalUint32Ptr (line 1035) | func unmarshalUint32Ptr(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalUint32Slice (line 1049) | func unmarshalUint32Slice(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFixed64Value (line 1087) | func unmarshalFixed64Value(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFixed64Ptr (line 1099) | func unmarshalFixed64Ptr(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFixed64Slice (line 1111) | func unmarshalFixed64Slice(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFixedS64Value (line 1146) | func unmarshalFixedS64Value(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFixedS64Ptr (line 1158) | func unmarshalFixedS64Ptr(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFixedS64Slice (line 1170) | func unmarshalFixedS64Slice(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFixed32Value (line 1205) | func unmarshalFixed32Value(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFixed32Ptr (line 1217) | func unmarshalFixed32Ptr(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFixed32Slice (line 1229) | func unmarshalFixed32Slice(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFixedS32Value (line 1264) | func unmarshalFixedS32Value(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFixedS32Ptr (line 1276) | func unmarshalFixedS32Ptr(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFixedS32Slice (line 1288) | func unmarshalFixedS32Slice(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalBoolValue (line 1321) | func unmarshalBoolValue(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalBoolPtr (line 1338) | func unmarshalBoolPtr(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalBoolSlice (line 1351) | func unmarshalBoolSlice(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFloat64Value (line 1388) | func unmarshalFloat64Value(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFloat64Ptr (line 1400) | func unmarshalFloat64Ptr(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFloat64Slice (line 1412) | func unmarshalFloat64Slice(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFloat32Value (line 1447) | func unmarshalFloat32Value(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFloat32Ptr (line 1459) | func unmarshalFloat32Ptr(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalFloat32Slice (line 1471) | func unmarshalFloat32Slice(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalStringValue (line 1506) | func unmarshalStringValue(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalStringPtr (line 1526) | func unmarshalStringPtr(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalStringSlice (line 1546) | func unmarshalStringSlice(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalBytesValue (line 1569) | func unmarshalBytesValue(b []byte, f pointer, w int) ([]byte, error) {
function unmarshalBytesSlice (line 1590) | func unmarshalBytesSlice(b []byte, f pointer, w int) ([]byte, error) {
function makeUnmarshalMessagePtr (line 1608) | func makeUnmarshalMessagePtr(sub *unmarshalInfo, name string) unmarshaler {
function makeUnmarshalMessageSlicePtr (line 1642) | func makeUnmarshalMessageSlicePtr(sub *unmarshalInfo, name string) unmar...
function makeUnmarshalGroupPtr (line 1669) | func makeUnmarshalGroupPtr(sub *unmarshalInfo, name string) unmarshaler {
function makeUnmarshalGroupSlicePtr (line 1695) | func makeUnmarshalGroupSlicePtr(sub *unmarshalInfo, name string) unmarsh...
function makeUnmarshalMap (line 1718) | func makeUnmarshalMap(f *reflect.StructField) unmarshaler {
function makeUnmarshalOneof (line 1817) | func makeUnmarshalOneof(typ, ityp reflect.Type, unmarshal unmarshaler) u...
function skipField (line 1843) | func skipField(b []byte, wire int) ([]byte, error) {
function findEndGroup (line 1884) | func findEndGroup(b []byte) (int, int) {
function encodeVarint (line 1935) | func encodeVarint(b []byte, x uint64) []byte {
function decodeVarint (line 1946) | func decodeVarint(b []byte) (uint64, int) {
FILE: vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.go
function makeUnmarshalMessage (line 36) | func makeUnmarshalMessage(sub *unmarshalInfo, name string) unmarshaler {
function makeUnmarshalMessageSlice (line 70) | func makeUnmarshalMessageSlice(sub *unmarshalInfo, name string) unmarsha...
function makeUnmarshalCustomPtr (line 97) | func makeUnmarshalCustomPtr(sub *unmarshalInfo, name string) unmarshaler {
function makeUnmarshalCustomSlice (line 121) | func makeUnmarshalCustomSlice(sub *unmarshalInfo, name string) unmarshal...
function makeUnmarshalCustom (line 145) | func makeUnmarshalCustom(sub *unmarshalInfo, name string) unmarshaler {
function makeUnmarshalTime (line 167) | func makeUnmarshalTime(sub *unmarshalInfo, name string) unmarshaler {
function makeUnmarshalTimePtr (line 194) | func makeUnmarshalTimePtr(sub *unmarshalInfo, name string) unmarshaler {
function makeUnmarshalTimePtrSlice (line 221) | func makeUnmarshalTimePtrSlice(sub *unmarshalInfo, name string) unmarsha...
function makeUnmarshalTimeSlice (line 249) | func makeUnmarshalTimeSlice(sub *unmarshalInfo, name string) unmarshaler {
function makeUnmarshalDurationPtr (line 277) | func makeUnmarshalDurationPtr(sub *unmarshalInfo, name string) unmarshal...
function makeUnmarshalDuration (line 304) | func makeUnmarshalDuration(sub *unmarshalInfo, name string) unmarshaler {
function makeUnmarshalDurationPtrSlice (line 331) | func makeUnmarshalDurationPtrSlice(sub *unmarshalInfo, name string) unma...
function makeUnmarshalDurationSlice (line 359) | func makeUnmarshalDurationSlice(sub *unmarshalInfo, name string) unmarsh...
FILE: vendor/github.com/gogo/protobuf/proto/test_proto/deterministic.go
method Marshal (line 3) | func (m *CustomDeterministicMarshaler) Marshal() ([]byte, error) {
FILE: vendor/github.com/gogo/protobuf/proto/test_proto/test.pb.go
constant _ (line 19) | _ = proto.GoGoProtoPackageIsVersion2
type FOO (line 21) | type FOO
method Enum (line 34) | func (x FOO) Enum() *FOO {
method String (line 39) | func (x FOO) String() string {
method UnmarshalJSON (line 42) | func (x *FOO) UnmarshalJSON(data []byte) error {
method EnumDescriptor (line 50) | func (FOO) EnumDescriptor() ([]byte, []int) {
constant FOO_FOO1 (line 24) | FOO_FOO1 FOO = 1
type GoTest_KIND (line 55) | type GoTest_KIND
method Enum (line 108) | func (x GoTest_KIND) Enum() *GoTest_KIND {
method String (line 113) | func (x GoTest_KIND) String() string {
method UnmarshalJSON (line 116) | func (x *GoTest_KIND) UnmarshalJSON(data []byte) error {
method EnumDescriptor (line 124) | func (GoTest_KIND) EnumDescriptor() ([]byte, []int) {
constant GoTest_VOID (line 58) | GoTest_VOID GoTest_KIND = 0
constant GoTest_BOOL (line 60) | GoTest_BOOL GoTest_KIND = 1
constant GoTest_BYTES (line 61) | GoTest_BYTES GoTest_KIND = 2
constant GoTest_FINGERPRINT (line 62) | GoTest_FINGERPRINT GoTest_KIND = 3
constant GoTest_FLOAT (line 63) | GoTest_FLOAT GoTest_KIND = 4
constant GoTest_INT (line 64) | GoTest_INT GoTest_KIND = 5
constant GoTest_STRING (line 65) | GoTest_STRING GoTest_KIND = 6
constant GoTest_TIME (line 66) | GoTest_TIME GoTest_KIND = 7
constant GoTest_TUPLE (line 68) | GoTest_TUPLE GoTest_KIND = 8
constant GoTest_ARRAY (line 69) | GoTest_ARRAY GoTest_KIND = 9
constant GoTest_MAP (line 70) | GoTest_MAP GoTest_KIND = 10
constant GoTest_TABLE (line 72) | GoTest_TABLE GoTest_KIND = 11
constant GoTest_FUNCTION (line 74) | GoTest_FUNCTION GoTest_KIND = 12
type MyMessage_Color (line 128) | type MyMessage_Color
method Enum (line 147) | func (x MyMessage_Color) Enum() *MyMessage_Color {
method String (line 152) | func (x MyMessage_Color) String() string {
method UnmarshalJSON (line 155) | func (x *MyMessage_Color) UnmarshalJSON(data []byte) error {
method EnumDescriptor (line 163) | func (MyMessage_Color) EnumDescriptor() ([]byte, []int) {
constant MyMessage_RED (line 131) | MyMessage_RED MyMessage_Color = 0
constant MyMessage_GREEN (line 132) | MyMessage_GREEN MyMessage_Color = 1
constant MyMessage_BLUE (line 133) | MyMessage_BLUE MyMessage_Color = 2
type DefaultsMessage_DefaultsEnum (line 167) | type DefaultsMessage_DefaultsEnum
method Enum (line 186) | func (x DefaultsMessage_DefaultsEnum) Enum() *DefaultsMessage_Defaults...
method String (line 191) | func (x DefaultsMessage_DefaultsEnum) String() string {
method UnmarshalJSON (line 194) | func (x *DefaultsMessage_DefaultsEnum) UnmarshalJSON(data []byte) error {
method EnumDescriptor (line 202) | func (DefaultsMessage_DefaultsEnum) EnumDescriptor() ([]byte, []int) {
constant DefaultsMessage_ZERO (line 170) | DefaultsMessage_ZERO DefaultsMessage_DefaultsEnum = 0
constant DefaultsMessage_ONE (line 171) | DefaultsMessage_ONE DefaultsMessage_DefaultsEnum = 1
constant DefaultsMessage_TWO (line 172) | DefaultsMessage_TWO DefaultsMessage_DefaultsEnum = 2
type Defaults_Color (line 206) | type Defaults_Color
method Enum (line 225) | func (x Defaults_Color) Enum() *Defaults_Color {
method String (line 230) | func (x Defaults_Color) String() string {
method UnmarshalJSON (line 233) | func (x *Defaults_Color) UnmarshalJSON(data []byte) error {
method EnumDescriptor (line 241) | func (Defaults_Color) EnumDescriptor() ([]byte, []int) {
constant Defaults_RED (line 209) | Defaults_RED Defaults_Color = 0
constant Defaults_GREEN (line 210) | Defaults_GREEN Defaults_Color = 1
constant Defaults_BLUE (line 211) | Defaults_BLUE Defaults_Color = 2
type RepeatedEnum_Color (line 245) | type RepeatedEnum_Color
method Enum (line 258) | func (x RepeatedEnum_Color) Enum() *RepeatedEnum_Color {
method String (line 263) | func (x RepeatedEnum_Color) String() string {
method UnmarshalJSON (line 266) | func (x *RepeatedEnum_Color) UnmarshalJSON(data []byte) error {
method EnumDescriptor (line 274) | func (RepeatedEnum_Color) EnumDescriptor() ([]byte, []int) {
constant RepeatedEnum_RED (line 248) | RepeatedEnum_RED RepeatedEnum_Color = 1
type GoEnum (line 278) | type GoEnum struct
method Reset (line 285) | func (m *GoEnum) Reset() { *m = GoEnum{} }
method String (line 286) | func (m *GoEnum) String() string { return proto.CompactTextString(m) }
method ProtoMessage (line 287) | func (*GoEnum) ProtoMessage() {}
method Descriptor (line 288) | func (*GoEnum) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 291) | func (m *GoEnum) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 294) | func (m *GoEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, er...
method XXX_Merge (line 297) | func (dst *GoEnum) XXX_Merge(src proto.Message) {
method XXX_Size (line 300) | func (m *GoEnum) XXX_Size() int {
method XXX_DiscardUnknown (line 303) | func (m *GoEnum) XXX_DiscardUnknown() {
method GetFoo (line 309) | func (m *GoEnum) GetFoo() FOO {
type GoTestField (line 316) | type GoTestField struct
method Reset (line 324) | func (m *GoTestField) Reset() { *m = GoTestField{} }
method String (line 325) | func (m *GoTestField) String() string { return proto.CompactTextString...
method ProtoMessage (line 326) | func (*GoTestField) ProtoMessage() {}
method Descriptor (line 327) | func (*GoTestField) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 330) | func (m *GoTestField) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 333) | func (m *GoTestField) XXX_Marshal(b []byte, deterministic bool) ([]byt...
method XXX_Merge (line 336) | func (dst *GoTestField) XXX_Merge(src proto.Message) {
method XXX_Size (line 339) | func (m *GoTestField) XXX_Size() int {
method XXX_DiscardUnknown (line 342) | func (m *GoTestField) XXX_DiscardUnknown() {
method GetLabel (line 348) | func (m *GoTestField) GetLabel() string {
method GetType (line 355) | func (m *GoTestField) GetType() string {
type GoTest (line 362) | type GoTest struct
method Reset (line 457) | func (m *GoTest) Reset() { *m = GoTest{} }
method String (line 458) | func (m *GoTest) String() string { return proto.CompactTextString(m) }
method ProtoMessage (line 459) | func (*GoTest) ProtoMessage() {}
method Descriptor (line 460) | func (*GoTest) Descriptor() ([]byte, []int) {
method XXX_Unmarshal (line 463) | func (m *GoTest) XXX_Unmarshal(b []byte) error {
method XXX_Marshal (line 466) | func (m *GoTest) XXX_Marshal(b []byte, deterministic bool) ([]byte, er...
method XXX_Merge (line 469) | func (dst *GoTest) XXX_Merge(src proto.Message) {
method XXX_Size (line 472) | func (m *GoTest) XXX_Size() int {
method XXX_DiscardUnknown (line 475) | func (m *GoTest) XXX_DiscardUnknown() {
method GetKind (line 499) | func (m *GoTest) GetKind() GoTest_KIND {
method GetTable (line 506) | func (m *GoTest) GetTable() string {
method GetParam (line 513) | func (m *GoTest) GetParam() int32 {
method GetRequiredField (line 520) | func (m *GoTest) GetRequiredField() *GoTestField {
method GetRepeatedField (line 527) | func (m *GoTest) GetRepeatedField() []*GoTestField {
method GetOptionalField (line 534) | func (m *GoTest) GetOptionalField() *GoTestField {
method GetF_BoolRequired (line 541) | func (m *GoTest) GetF_BoolRequired() bool {
method GetF_Int32Required (line 548) | func (m *GoTest) GetF_Int32Required() int32 {
method GetF_Int64Required (line 555) | func (m *GoTest) GetF_Int64Required() int64 {
method GetF_Fixed32Required (line 562) | func (m *GoTest) GetF_Fixed32Required() uint32 {
method GetF_Fixed64Required (line 569) | func (m *GoTest) GetF_Fixed64Required() uint64 {
method GetF_Uint32Required (line 576) | func (m *GoTest) GetF_Uint32Required() uint32 {
method GetF_Uint64Required (line 583) | func (m *GoTest) GetF_Uint64Required() uint64 {
method GetF_FloatRequired (line 590) | func (m *GoTest) GetF_FloatRequired() float32 {
method GetF_DoubleRequired (line 597) | func (m *GoTest) GetF_DoubleRequired() float64 {
method GetF_StringRequired (line 604) | func (m *GoTest) GetF_StringRequired() string {
method GetF_BytesRequired (line 611) | func (m *GoTest) GetF_BytesRequired() []byte {
method GetF_Sint32Required (line 618) | func (m *GoTest) GetF_Sint32Required() int32 {
method GetF_Sint64Required (line 625) | func (m *GoTest) GetF_Sint64Required() int64 {
method GetF_Sfixed32Required (line 632) | func (m *GoTest) GetF_Sfixed32Required() int32 {
method GetF_Sfixed64Required (line 639) | func (m *GoTest) GetF_Sfixed64Required() int64 {
method GetF_BoolRepeated (line 646) | func (m *GoTest) GetF_BoolRepeated() []bool {
method GetF_Int32Repeated (line 653) | func (m *GoTest) GetF_Int32Repeated() []int32 {
method GetF_Int64Repeated (line 660) | func (m *GoTest) GetF_Int64Repeated() []int64 {
method GetF_Fixed32Repeated (line 667) | func (m *GoTest) GetF_Fixed32Repeated() []uint32 {
method GetF_Fixed64Repeated (line 674) | func (m *GoTest) GetF_Fixed64Repeated() []uint64 {
method GetF_Uint32Repeated (line 681) | func (m *GoTest) GetF_Uint32Repeated() []uint32 {
method GetF_Uint64Repeated (line 688) | func (m *GoTest) GetF_Uint64Repeated() []uint64 {
method GetF_FloatRepeated (line 695) | func (m *GoTest) GetF_FloatRepeated() []float32 {
method GetF_DoubleRepeated (line 702) | func (m *GoTest) GetF_DoubleRepeated() []float64 {
method GetF_StringRepeated (line
Copy disabled (too large)
Download .json
Condensed preview — 5700 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (96,482K chars).
[
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 705,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: \"[BUG]\"\nlabels: ''\nassignees: gravitational-jenkin"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 742,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: \"[FEATURE]\"\nlabels: ''\nassignees: gravitational"
},
{
"path": ".gitignore",
"chars": 145,
"preview": ".vscode\n.vagrant\nbuild\n*.test\nflymake*\n*tar\n*gz\n*tar.gz\n*tgz\n*.swp\n# Terraform state\n.terraform\nterraform.tfstate*\n# Ans"
},
{
"path": "Dockerfile",
"chars": 1718,
"preview": "ARG WIREGUARD_IMAGE\nARG BASE_IMAGE\nARG RIGGING_IMAGE\n\n#\n# Use a temporary ubuntu container to get/build the wg cli\n#\nFRO"
},
{
"path": "Dockerfile.build",
"chars": 665,
"preview": "ARG BUILD_IMAGE\nFROM ${BUILD_IMAGE}\n\nARG GOLANGCI_VER\n\nRUN env\nRUN curl -sfL https://raw.githubusercontent.com/golangci/"
},
{
"path": "Gopkg.toml",
"chars": 1372,
"preview": "# Gopkg.toml example\n#\n# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html\n# for detailed Gopkg.toml documentat"
},
{
"path": "LICENSE",
"chars": 11357,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "Makefile",
"chars": 414,
"preview": "# TODO: Docs / License\n\n.DEFAULT_GOAL := help\n\n.PHONY: help\nhelp:\n\t@echo \"For this project I'm experimenting with using "
},
{
"path": "README.md",
"chars": 1907,
"preview": "# Gravitational Wormhole\n> **Warning**\n> \n> Wormhole was archived 2023-07-01, as Teleport no longer supports Gravity.\n>\n"
},
{
"path": "assets/docker/wireguard/wireguard-ubuntu-wireguard-bionic.list",
"chars": 142,
"preview": "deb http://ppa.launchpad.net/wireguard/wireguard/ubuntu bionic main\n# deb-src http://ppa.launchpad.net/wireguard/wiregua"
},
{
"path": "build.go",
"chars": 7298,
"preview": "//+build mage\n\n/*\nCopyright 2018 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou"
},
{
"path": "cmd/netlink-test/main.go",
"chars": 1365,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "cmd/wormhole/controller.go",
"chars": 5741,
"preview": "/*\nCopyright 2018 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "cmd/wormhole/main.go",
"chars": 1200,
"preview": "/*\nCopyright 2018 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "cmd/wormhole/version.go",
"chars": 1643,
"preview": "/*\nCopyright 2018 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "docs/generic-wormhole.yaml",
"chars": 5731,
"preview": "---\napiVersion: apiextensions.k8s.io/v1beta1\nkind: CustomResourceDefinition\nmetadata:\n name: wgnodes.wormhole.gravitati"
},
{
"path": "docs/gravity-wormhole.yaml",
"chars": 5421,
"preview": "---\napiVersion: apiextensions.k8s.io/v1beta1\nkind: CustomResourceDefinition\nmetadata:\n name: wgnodes.wormhole.gravitati"
},
{
"path": "docs/kube-wormhole.yaml",
"chars": 5688,
"preview": "---\napiVersion: apiextensions.k8s.io/v1beta1\nkind: CustomResourceDefinition\nmetadata:\n name: wgnodes.wormhole.gravitati"
},
{
"path": "docs/rfcs/0001-spec.md",
"chars": 13953,
"preview": "## Feature Name: Wormhole\n## Start Date: 2018-10-03\n## RFC PR:\n## Issue:\n\n# Summary\nWormhole is a new CNI network plugin"
},
{
"path": "docs/troubleshooting.md",
"chars": 2434,
"preview": "# Troubleshooting Guide\n## Connectivity\nGravitational Wormhole uses port 9806 by default for WireGuard connectivity betw"
},
{
"path": "hack/boilerplate.go.txt",
"chars": 565,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "hack/update-codegen.sh",
"chars": 1503,
"preview": "#!/usr/bin/env bash\n\n# Copyright 2017 The Kubernetes Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "hack/verify-codegen.sh",
"chars": 1285,
"preview": "#!/usr/bin/env bash\n\n# Copyright 2017 The Kubernetes Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
},
{
"path": "mage.go",
"chars": 121,
"preview": "// +build ignore\n\npackage main\n\nimport (\n\t\"os\"\n\n\t\"github.com/magefile/mage/mage\"\n)\n\nfunc main() { os.Exit(mage.Main()) }"
},
{
"path": "pkg/apis/wormhole.gravitational.io/register.go",
"chars": 711,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/apis/wormhole.gravitational.io/v1beta1/doc.go",
"chars": 769,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/apis/wormhole.gravitational.io/v1beta1/register.go",
"chars": 1259,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/apis/wormhole.gravitational.io/v1beta1/wgnode_types.go",
"chars": 1988,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/apis/wormhole.gravitational.io/v1beta1/zz_generated.deepcopy.go",
"chars": 3222,
"preview": "// +build !ignore_autogenerated\n\n/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 ("
},
{
"path": "pkg/client/clientset/versioned/clientset.go",
"chars": 3085,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/clientset/versioned/doc.go",
"chars": 690,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/clientset/versioned/fake/clientset_generated.go",
"chars": 2920,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/clientset/versioned/fake/doc.go",
"chars": 690,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/clientset/versioned/fake/register.go",
"chars": 1942,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/clientset/versioned/scheme/doc.go",
"chars": 706,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/clientset/versioned/scheme/register.go",
"chars": 1944,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/doc.go",
"chars": 692,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/fake/doc.go",
"chars": 683,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/fake/fake_wgnode.go",
"chars": 4939,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/fake/fake_wormhole.gravitational.io_client.go",
"chars": 1206,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/generated_expansion.go",
"chars": 663,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/wgnode.go",
"chars": 5820,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/clientset/versioned/typed/wormhole.gravitational.io/v1beta1/wormhole.gravitational.io_client.go",
"chars": 2620,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/informers/externalversions/factory.go",
"chars": 6503,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/informers/externalversions/generic.go",
"chars": 2030,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go",
"chars": 1432,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/informers/externalversions/wormhole.gravitational.io/interface.go",
"chars": 1653,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/informers/externalversions/wormhole.gravitational.io/v1beta1/interface.go",
"chars": 1544,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/informers/externalversions/wormhole.gravitational.io/v1beta1/wgnode.go",
"chars": 3663,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/listers/wormhole.gravitational.io/v1beta1/expansion_generated.go",
"chars": 894,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/client/listers/wormhole.gravitational.io/v1beta1/wgnode.go",
"chars": 3104,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use t"
},
{
"path": "pkg/controller/cni.go",
"chars": 2421,
"preview": "/*\nCopyright 2018 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/controller/controller.go",
"chars": 7664,
"preview": "/*\nCopyright 2018 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/controller/ipam.go",
"chars": 3118,
"preview": "/*\nCopyright 2018 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/controller/ipam_test.go",
"chars": 7519,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/controller/kubernetes.go",
"chars": 12070,
"preview": "/*\nCopyright 2018 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/controller/kubernetes_test.go",
"chars": 12986,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/controller/overlay.go",
"chars": 3707,
"preview": "/*\nCopyright 2018 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/controller/overlay_test.go",
"chars": 4041,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/controller/utils.go",
"chars": 1787,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/iptables/iptables.go",
"chars": 8929,
"preview": "/*\nCopyright 2018 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/wireguard/utils.go",
"chars": 8016,
"preview": "/*\nCopyright 2019 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/wireguard/wireguard.go",
"chars": 6749,
"preview": "/*\nCopyright 2018 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "pkg/wireguard/wireguard_test.go",
"chars": 5778,
"preview": "/*\nCopyright 2018 Gravitational, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use th"
},
{
"path": "scripts/gravity-install.sh",
"chars": 122,
"preview": "#!/bin/sh\nset -e\nset -x\n\necho \"Installing wormhole\"\necho \"Changeset: $RIG_CHANGESET\"\n\nrig upsert -f /gravity/wormhole.ya"
},
{
"path": "scripts/gravity-rollback.sh",
"chars": 120,
"preview": "#!/bin/sh\nset -e\nset -x\n\necho \"Reverting changeset $RIG_CHANGESET\"\nrig revert\nrig cs delete --force -c cs/$RIG_CHANGESET"
},
{
"path": "scripts/gravity-upgrade.sh",
"chars": 298,
"preview": "#!/bin/sh\nset -e\nset -x\n\necho \"Upgrading wormhole\"\necho \"Changeset: $RIG_CHANGESET\"\n\nif rig status $RIG_CHANGESET --retr"
},
{
"path": "vendor/github.com/cenkalti/backoff/.gitignore",
"chars": 252,
"preview": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n\n# Architecture spe"
},
{
"path": "vendor/github.com/cenkalti/backoff/.travis.yml",
"chars": 193,
"preview": "language: go\ngo:\n - 1.7\n - 1.x\n - tip\nbefore_install:\n - go get github.com/mattn/goveralls\n - go get golang.org/x/t"
},
{
"path": "vendor/github.com/cenkalti/backoff/LICENSE",
"chars": 1076,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2014 Cenk Altı\n\nPermission is hereby granted, free of charge, to any person obtaini"
},
{
"path": "vendor/github.com/cenkalti/backoff/README.md",
"chars": 1623,
"preview": "# Exponential Backoff [![GoDoc][godoc image]][godoc] [![Build Status][travis image]][travis] [![Coverage Status][coveral"
},
{
"path": "vendor/github.com/cenkalti/backoff/backoff.go",
"chars": 2142,
"preview": "// Package backoff implements backoff algorithms for retrying operations.\n//\n// Use Retry function for retrying operatio"
},
{
"path": "vendor/github.com/cenkalti/backoff/context.go",
"chars": 1116,
"preview": "package backoff\n\nimport (\n\t\"context\"\n\t\"time\"\n)\n\n// BackOffContext is a backoff policy that stops retrying after the cont"
},
{
"path": "vendor/github.com/cenkalti/backoff/exponential.go",
"chars": 5460,
"preview": "package backoff\n\nimport (\n\t\"math/rand\"\n\t\"time\"\n)\n\n/*\nExponentialBackOff is a backoff implementation that increases the b"
},
{
"path": "vendor/github.com/cenkalti/backoff/retry.go",
"chars": 1903,
"preview": "package backoff\n\nimport \"time\"\n\n// An Operation is executing by Retry() or RetryNotify().\n// The operation will be retri"
},
{
"path": "vendor/github.com/cenkalti/backoff/ticker.go",
"chars": 1748,
"preview": "package backoff\n\nimport (\n\t\"sync\"\n\t\"time\"\n)\n\n// Ticker holds a channel that delivers `ticks' of a clock at times reporte"
},
{
"path": "vendor/github.com/cenkalti/backoff/tries.go",
"chars": 685,
"preview": "package backoff\n\nimport \"time\"\n\n/*\nWithMaxRetries creates a wrapper around another BackOff, which will\nreturn Stop if Ne"
},
{
"path": "vendor/github.com/coreos/go-iptables/.travis.yml",
"chars": 290,
"preview": "language: go\nsudo: required\ndist: trusty\n\ngo:\n - 1.9.x\n - 1.10.x\n - tip\nenv:\n global:\n - TOOLS_CMD=golang.org/x/t"
},
{
"path": "vendor/github.com/coreos/go-iptables/DCO",
"chars": 1422,
"preview": "Developer Certificate of Origin\nVersion 1.1\n\nCopyright (C) 2004, 2006 The Linux Foundation and its contributors.\n660 Yor"
},
{
"path": "vendor/github.com/coreos/go-iptables/LICENSE",
"chars": 10273,
"preview": "Apache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AN"
},
{
"path": "vendor/github.com/coreos/go-iptables/NOTICE",
"chars": 126,
"preview": "CoreOS Project\nCopyright 2018 CoreOS, Inc\n\nThis product includes software developed at CoreOS, Inc.\n(http://www.coreos.c"
},
{
"path": "vendor/github.com/coreos/go-iptables/README.md",
"chars": 761,
"preview": "# go-iptables\n\n[](https://godoc.org/github."
},
{
"path": "vendor/github.com/coreos/go-iptables/code-of-conduct.md",
"chars": 3037,
"preview": "## CoreOS Community Code of Conduct\n\n### Contributor Code of Conduct\n\nAs contributors and maintainers of this project, a"
},
{
"path": "vendor/github.com/coreos/go-iptables/iptables/iptables.go",
"chars": 14216,
"preview": "// Copyright 2015 CoreOS, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use "
},
{
"path": "vendor/github.com/coreos/go-iptables/iptables/lock.go",
"chars": 2507,
"preview": "// Copyright 2015 CoreOS, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use "
},
{
"path": "vendor/github.com/coreos/go-iptables/test",
"chars": 1096,
"preview": "#!/usr/bin/env bash\n#\n# Run all go-iptables tests\n# ./test\n# ./test -v\n#\n# Run tests for one package\n# PKG=./unit "
},
{
"path": "vendor/github.com/davecgh/go-spew/.gitignore",
"chars": 252,
"preview": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n\n# Architecture spe"
},
{
"path": "vendor/github.com/davecgh/go-spew/.travis.yml",
"chars": 769,
"preview": "language: go\ngo_import_path: github.com/davecgh/go-spew\ngo:\n - 1.6.x\n - 1.7.x\n - 1.8.x\n - 1.9.x\n - 1.10.x"
},
{
"path": "vendor/github.com/davecgh/go-spew/LICENSE",
"chars": 766,
"preview": "ISC License\n\nCopyright (c) 2012-2016 Dave Collins <dave@davec.name>\n\nPermission to use, copy, modify, and/or distribute "
},
{
"path": "vendor/github.com/davecgh/go-spew/README.md",
"chars": 7119,
"preview": "go-spew\n=======\n\n[](https://travis-ci.org/davecgh/go-s"
},
{
"path": "vendor/github.com/davecgh/go-spew/cov_report.sh",
"chars": 658,
"preview": "#!/bin/sh\n\n# This script uses gocov to generate a test coverage report.\n# The gocov tool my be obtained with the followi"
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/bypass.go",
"chars": 4715,
"preview": "// Copyright (c) 2015-2016 Dave Collins <dave@davec.name>\n//\n// Permission to use, copy, modify, and distribute this sof"
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/bypasssafe.go",
"chars": 1741,
"preview": "// Copyright (c) 2015-2016 Dave Collins <dave@davec.name>\n//\n// Permission to use, copy, modify, and distribute this sof"
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/common.go",
"chars": 10364,
"preview": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this "
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/config.go",
"chars": 12842,
"preview": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this "
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/doc.go",
"chars": 8527,
"preview": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this "
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/dump.go",
"chars": 13794,
"preview": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this "
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/format.go",
"chars": 11314,
"preview": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this "
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/spew.go",
"chars": 5969,
"preview": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this "
},
{
"path": "vendor/github.com/davecgh/go-spew/spew/testdata/dumpcgo.go",
"chars": 3284,
"preview": "// Copyright (c) 2013 Dave Collins <dave@davec.name>\n//\n// Permission to use, copy, modify, and distribute this software"
},
{
"path": "vendor/github.com/davecgh/go-spew/test_coverage.txt",
"chars": 4414,
"preview": "\ngithub.com/davecgh/go-spew/spew/dump.go\t\t dumpState.dump\t\t\t 100.00% (88/88)\ngithub.com/davecgh/go-spew/spew/format.go\t "
},
{
"path": "vendor/github.com/evanphx/json-patch/.travis.yml",
"chars": 259,
"preview": "language: go\n\ngo:\n - 1.8\n - 1.7\n\ninstall:\n - if ! go get code.google.com/p/go.tools/cmd/cover; then go get golang.org"
},
{
"path": "vendor/github.com/evanphx/json-patch/LICENSE",
"chars": 1494,
"preview": "Copyright (c) 2014, Evan Phoenix\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or withou"
},
{
"path": "vendor/github.com/evanphx/json-patch/README.md",
"chars": 7741,
"preview": "# JSON-Patch\n`jsonpatch` is a library which provides functionallity for both applying\n[RFC6902 JSON patches](http://tool"
},
{
"path": "vendor/github.com/evanphx/json-patch/cmd/json-patch/file_flag.go",
"chars": 766,
"preview": "package main\n\n// Borrowed from Concourse: https://github.com/concourse/atc/blob/master/atccmd/file_flag.go\n\nimport (\n\t\"f"
},
{
"path": "vendor/github.com/evanphx/json-patch/cmd/json-patch/main.go",
"chars": 1105,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\n\tjsonpatch \"github.com/evanphx/json-patch\"\n\tflags \"github.com/j"
},
{
"path": "vendor/github.com/evanphx/json-patch/merge.go",
"chars": 8779,
"preview": "package jsonpatch\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"reflect\"\n)\n\nfunc merge(cur, patch *lazyNode, mergeMerge b"
},
{
"path": "vendor/github.com/evanphx/json-patch/patch.go",
"chars": 11433,
"preview": "package jsonpatch\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nconst (\n\teRaw = iota\n\teDoc\n\teAry\n)"
},
{
"path": "vendor/github.com/gogo/protobuf/.gitignore",
"chars": 95,
"preview": "._*\n*.js\n*.js.map\n\n# Conformance test output and transient files.\nconformance/failing_tests.txt"
},
{
"path": "vendor/github.com/gogo/protobuf/.mailmap",
"chars": 551,
"preview": "Walter Schulze\t<awalterschulze@gmail.com>\tWalter Schulze <walter@vastech.co.za>\nWalter Schulze\t<awalterschulze@gmail.com"
},
{
"path": "vendor/github.com/gogo/protobuf/.travis.yml",
"chars": 490,
"preview": "apt:\n update: true\n\nenv:\n - PROTOBUF_VERSION=2.6.1\n - PROTOBUF_VERSION=3.0.2\n - PROTOBUF_VERSION=3.5.1\n\nbefore_insta"
},
{
"path": "vendor/github.com/gogo/protobuf/AUTHORS",
"chars": 562,
"preview": "# This is the official list of GoGo authors for copyright purposes.\n# This file is distinct from the CONTRIBUTORS file, "
},
{
"path": "vendor/github.com/gogo/protobuf/CONTRIBUTORS",
"chars": 845,
"preview": "Anton Povarov <anton.povarov@gmail.com>\nBrian Goff <cpuguy83@gmail.com>\nClayton Coleman <ccoleman@redhat.com>\nDenis Smir"
},
{
"path": "vendor/github.com/gogo/protobuf/GOLANG_CONTRIBUTORS",
"chars": 218,
"preview": "The contributors to the Go protobuf repository:\n\n# This source code was written by the Go contributors.\n# The master lis"
},
{
"path": "vendor/github.com/gogo/protobuf/LICENSE",
"chars": 1713,
"preview": "Protocol Buffers for Go with Gadgets\n\nCopyright (c) 2013, The GoGo Authors. All rights reserved.\nhttp://github.com/gogo/"
},
{
"path": "vendor/github.com/gogo/protobuf/Makefile",
"chars": 5265,
"preview": "# Protocol Buffers for Go with Gadgets\n#\n# Copyright (c) 2013, The GoGo Authors. All rights reserved.\n# http://github.co"
},
{
"path": "vendor/github.com/gogo/protobuf/README",
"chars": 11948,
"preview": "GoGoProtobuf http://github.com/gogo/protobuf extends \nGoProtobuf http://github.com/golang/protobuf\n\n# Go support for Pro"
},
{
"path": "vendor/github.com/gogo/protobuf/Readme.md",
"chars": 9962,
"preview": "# Protocol Buffers for Go with Gadgets\n\n[](https:/"
},
{
"path": "vendor/github.com/gogo/protobuf/bench.md",
"chars": 15386,
"preview": "# Benchmarks\n\n## How to reproduce\n\nFor a comparison run:\n\n make bench\n\nfollowed by [benchcmp](http://code.google.com/"
},
{
"path": "vendor/github.com/gogo/protobuf/codec/codec.go",
"chars": 2618,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2015, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/conformance/Makefile",
"chars": 2678,
"preview": "# Go support for Protocol Buffers - Google's data interchange format\n#\n# Copyright 2016 The Go Authors. All rights rese"
},
{
"path": "vendor/github.com/gogo/protobuf/conformance/conformance.go",
"chars": 4807,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/conformance/conformance.sh",
"chars": 57,
"preview": "#!/bin/sh\n\ncd $(dirname $0)\nexec go run conformance.go $*"
},
{
"path": "vendor/github.com/gogo/protobuf/conformance/internal/conformance_proto/conformance.pb.go",
"chars": 75537,
"preview": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: internal/conformance_proto/conformance.proto\n\npackage conf"
},
{
"path": "vendor/github.com/gogo/protobuf/conformance/internal/conformance_proto/conformance.proto",
"chars": 10622,
"preview": "// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc. All rights reserved.\n// https://de"
},
{
"path": "vendor/github.com/gogo/protobuf/conformance/test.sh",
"chars": 649,
"preview": "#!/bin/bash\n\nPROTOBUF_ROOT=$1\nCONFORMANCE_ROOT=$1/conformance\nCONFORMANCE_TEST_RUNNER=$CONFORMANCE_ROOT/conformance-test"
},
{
"path": "vendor/github.com/gogo/protobuf/custom_types.md",
"chars": 2453,
"preview": "# Custom types\n\nCustom types is a gogo protobuf extensions that allows for using a custom\nstruct type to decorate the un"
},
{
"path": "vendor/github.com/gogo/protobuf/extensions.md",
"chars": 16682,
"preview": "# gogoprotobuf Extensions\n\nHere is an [example.proto](https://github.com/gogo/protobuf/blob/master/test/example/example."
},
{
"path": "vendor/github.com/gogo/protobuf/gogoproto/Makefile",
"chars": 1734,
"preview": "# Protocol Buffers for Go with Gadgets\n#\n# Copyright (c) 2013, The GoGo Authors. All rights reserved.\n# http://github.co"
},
{
"path": "vendor/github.com/gogo/protobuf/gogoproto/doc.go",
"chars": 8913,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go",
"chars": 31952,
"preview": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: gogo.proto\n\npackage gogoproto // import \"github.com/gogo/p"
},
{
"path": "vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.golden",
"chars": 1261,
"preview": "// Code generated by protoc-gen-go.\n// source: gogo.proto\n// DO NOT EDIT!\n\npackage gogoproto\n\nimport proto \"github.com/g"
},
{
"path": "vendor/github.com/gogo/protobuf/gogoproto/gogo.proto",
"chars": 4621,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/gogoproto/helper.go",
"chars": 13262,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/gogoreplace/main.go",
"chars": 464,
"preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n)\n\nfunc main() {\n\targs := os.Args\n\tif len(args) != 4 {\n\t\tfmt.P"
},
{
"path": "vendor/github.com/gogo/protobuf/install-protobuf.sh",
"chars": 643,
"preview": "#!/usr/bin/env bash\n\nset -ex\n\ndie() {\n echo \"$@\" >&2\n exit 1\n}\n\ncd /home/travis\n\ncase \"$PROTOBUF_VERSION\" in\n2*)\n "
},
{
"path": "vendor/github.com/gogo/protobuf/io/full.go",
"chars": 2759,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/io/io.go",
"chars": 2059,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/io/uint32.go",
"chars": 3878,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/io/varint.go",
"chars": 3491,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/jsonpb/jsonpb.go",
"chars": 39359,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2015 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/jsonpb/jsonpb_test_proto/Makefile",
"chars": 2053,
"preview": "# Go support for Protocol Buffers - Google's data interchange format\n#\n# Copyright 2015 The Go Authors. All rights rese"
},
{
"path": "vendor/github.com/gogo/protobuf/jsonpb/jsonpb_test_proto/bytes.go",
"chars": 201,
"preview": "package jsonpb\n\n// Byte is used to test that []byte type aliases are serialized to base64.\ntype Byte byte\n\n// Bytes is u"
},
{
"path": "vendor/github.com/gogo/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go",
"chars": 14679,
"preview": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: more_test_objects.proto\n\npackage jsonpb\n\nimport proto \"git"
},
{
"path": "vendor/github.com/gogo/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.proto",
"chars": 2311,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2015 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go",
"chars": 45094,
"preview": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: test_objects.proto\n\npackage jsonpb\n\nimport proto \"github.c"
},
{
"path": "vendor/github.com/gogo/protobuf/jsonpb/jsonpb_test_proto/test_objects.proto",
"chars": 5170,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2015 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/compare/compare.go",
"chars": 13815,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/compare/comparetest.go",
"chars": 4133,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/defaultcheck/defaultcheck.go",
"chars": 5040,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/description/description.go",
"chars": 5751,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/description/descriptiontest.go",
"chars": 2471,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/embedcheck/embedcheck.go",
"chars": 6006,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/enumstringer/enumstringer.go",
"chars": 3156,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/equal/equal.go",
"chars": 18374,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/equal/equaltest.go",
"chars": 3853,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/face/face.go",
"chars": 6922,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/face/facetest.go",
"chars": 2824,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/gostring/gostring.go",
"chars": 12566,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/gostring/gostringtest.go",
"chars": 3106,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/marshalto/marshalto.go",
"chars": 36624,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/oneofcheck/oneofcheck.go",
"chars": 3256,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/populate/populate.go",
"chars": 25047,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/size/size.go",
"chars": 20348,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/size/sizetest.go",
"chars": 4526,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/stringer/stringer.go",
"chars": 10045,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/stringer/stringertest.go",
"chars": 2917,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/testgen/testgen.go",
"chars": 17947,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/union/union.go",
"chars": 5449,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/union/uniontest.go",
"chars": 2958,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/plugin/unmarshal/unmarshal.go",
"chars": 40684,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/Makefile",
"chars": 1785,
"preview": "# Go support for Protocol Buffers - Google's data interchange format\n#\n# Copyright 2010 The Go Authors. All rights rese"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/clone.go",
"chars": 7916,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2011 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/custom_gogo.go",
"chars": 1632,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2018, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/decode.go",
"chars": 11484,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/discard.go",
"chars": 10059,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2017 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/duration.go",
"chars": 3787,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/duration_gogo.go",
"chars": 1986,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2016, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/encode.go",
"chars": 6871,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/encode_gogo.go",
"chars": 1566,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/equal.go",
"chars": 8868,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2011 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/extensions.go",
"chars": 18211,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/extensions_gogo.go",
"chars": 9474,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/lib.go",
"chars": 25497,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/lib_gogo.go",
"chars": 1750,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/message_set.go",
"chars": 9294,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/pointer_reflect.go",
"chars": 10572,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2012 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go",
"chars": 2182,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2018, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go",
"chars": 9931,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2012 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go",
"chars": 2054,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2018, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/properties.go",
"chars": 17209,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/properties_gogo.go",
"chars": 1602,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2018, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/proto3_proto/Makefile",
"chars": 300,
"preview": "regenerate:\n\tgo install github.com/gogo/protobuf/protoc-min-version\n\tprotoc-min-version --version=\"3.0.0\" --gogo_out=\\\n\t"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/proto3_proto/proto3.pb.go",
"chars": 18146,
"preview": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: proto3.proto\n\npackage proto3_proto\n\nimport proto \"github.c"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/proto3_proto/proto3.proto",
"chars": 2713,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2014 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/skip_gogo.go",
"chars": 3040,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/table_marshal.go",
"chars": 75112,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go",
"chars": 11101,
"preview": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2018, The GoGo Authors. All rights reserved.\n// http://githu"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/table_merge.go",
"chars": 17254,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors. All rights r"
},
{
"path": "vendor/github.com/gogo/protobuf/proto/table_unmarshal.go",
"chars": 50196,
"preview": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors. All rights r"
}
]
// ... and 5500 more files (download for full content)
About this extraction
This page contains the full source code of the gravitational/wormhole GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 5700 files (84.3 MB), approximately 22.4M tokens, and a symbol index with 174860 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.