Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package docker for openSUSE:Factory checked in at 2023-02-02 18:07:41 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/docker (Old) and /work/SRC/openSUSE:Factory/.docker.new.32243 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "docker" Thu Feb 2 18:07:41 2023 rev:128 rq:1062476 version:20.10.23_ce Changes: -------- --- /work/SRC/openSUSE:Factory/docker/docker.changes 2022-12-08 16:50:04.923144264 +0100 +++ /work/SRC/openSUSE:Factory/.docker.new.32243/docker.changes 2023-02-02 18:23:24.805643464 +0100 @@ -1,0 +2,9 @@ +Wed Feb 1 14:33:19 UTC 2023 - Dirk Müller <dmuel...@suse.com> + +- update to 20.10.23-ce + * see upstream changelog at https://docs.docker.com/engine/release-notes/#201023 + +- drop kubic flavor as kubic is EOL. this removes: + kubelet.env docker-kubic-service.conf 0003-PRIVATE-REGISTRY-add-private-registry-mirror-support.patch + +------------------------------------------------------------------- Old: ---- 0003-PRIVATE-REGISTRY-add-private-registry-mirror-support.patch _multibuild docker-20.10.21_ce_3056208812eb.tar.xz docker-cli-20.10.21_ce.tar.xz docker-kubic-service.conf docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789.tar.xz kubelet.env New: ---- docker-20.10.23_ce_6051f1429.tar.xz docker-cli-20.10.23_ce.tar.xz docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ docker.spec ++++++ --- /var/tmp/diff_new_pack.3gJ169/_old 2023-02-02 18:23:25.437647322 +0100 +++ /var/tmp/diff_new_pack.3gJ169/_new 2023-02-02 18:23:25.441647346 +0100 @@ -42,15 +42,15 @@ # helpfully injects into our build environment from the changelog). If you want # to generate a new git_commit_epoch, use this: # $ date --date="$(git show --format=fuller --date=iso $COMMIT_ID | grep -oP '(?<=^CommitDate: ).*')" '+%s' -%define real_version 20.10.21 -%define git_version 3056208812eb -%define git_commit_epoch 1666698255 +%define real_version 20.10.23 +%define git_version 6051f1429 +%define git_commit_epoch 1674059068 # We require a specific pin of libnetwork because it doesn't really do # versioning and minor version mismatches in libnetwork can break Docker # networking. All other key runtime dependencies (containerd, runc) are stable # enough that this isn't necessary. -%define libnetwork_version 0dde5c895075df6e3630e76f750a447cf63f4789 +%define libnetwork_version 05b93e0d3a95952f70c113b0bc5bdb538d7afdd7 %define dist_builddir %{_builddir}/dist-suse %define cli_builddir %{dist_builddir}/src/github.com/docker/cli @@ -78,10 +78,6 @@ Source104: docker-audit.rules Source105: docker-daemon.json Source106: docker.sysusers -# Kubelet-specific sources. -# bsc#1086185 -- but we only apply this on Kubic. -Source900: docker-kubic-service.conf -Source901: kubelet.env # NOTE: All of these patches are maintained in <https://github.com/suse/docker> # in the suse-<version> branch. Make sure you update the patches in that # branch and then git-format-patch the patch here. @@ -91,8 +87,6 @@ Patch101: 0002-SECRETS-SUSE-implement-SUSE-container-secrets.patch # SUSE-FEATURE: Add support to mirror unofficial/private registries # <https://github.com/docker/docker/pull/34319>. -Patch200: 0003-PRIVATE-REGISTRY-add-private-registry-mirror-support.patch -# SUSE-BACKPORT: Backport of https://github.com/docker/docker/pull/37353. bsc#1073877 bsc#1099277 Patch300: 0004-bsc1073877-apparmor-clobber-docker-default-profile-o.patch # SUSE-BACKPORT: Backport of https://github.com/moby/moby/pull/42273. bsc#1183855 bsc#1175081 Patch301: 0005-bsc1183855-btrfs-Do-not-disable-quota-on-cleanup.patch @@ -117,9 +111,7 @@ BuildRequires: go-go-md2man BuildRequires: pkgconfig(libsystemd) BuildRequires: sysuser-tools -# Due to a limitation in openSUSE's Go packaging we cannot have a BuildRequires -# for 'golang(API) >= 1.18' here, so just require 1.18 exactly. bsc#1172608 -BuildRequires: go1.18 +BuildRequires: golang(API) = 1.18 Requires: (apparmor-parser or container-selinux) Requires: ca-certificates-mozilla # The docker-proxy binary used to be in a separate package. We obsolete it, @@ -157,26 +149,6 @@ Recommends: git-core >= 1.7 ExcludeArch: s390 ppc -# KUBIC-SPECIFIC: This was required when upgrading from the original kubic -# packaging, when everything was renamed to -kubic. It also is -# used to ensure that nothing complains too much when using -# -kubic packages. Hopfully it can be removed one day. -%if "%flavour" == "kubic" -# Obsolete old packege without the -kubic suffix -Obsoletes: %{realname} = 1.12.6 -Obsoletes: %{realname}_1_12_6 -# Conflict with non-kubic package, and provide equivalent -Conflicts: %{realname} -Provides: %{realname} = %{version} -# Kubernetes requires cri-runtime, which should be provided only by the -kubic flavour of this package -Provides: cri-runtime -# No i586 Kubernetes, so docker-kubic must not be built for i586 also -ExcludeArch: i586 -# Disable leap based builds for kubic flavor (bsc#1121412) -%if 0%{?suse_version} == 1500 && 0%{?is_opensuse} -ExclusiveArch: do_not_build -%endif -%endif %description Docker complements LXC with a high-level API which operates at the process @@ -194,17 +166,6 @@ Requires: bash-completion Supplements: packageand(%{name}:bash-completion) BuildArch: noarch -# KUBIC-SPECIFIC: This was required when upgrading from the original kubic -# packaging, when everything was renamed to -kubic. It also is -# used to ensure that nothing complains too much when using -# -kubic packages. Hopfully it can be removed one day. -%if "%flavour" == "kubic" -# Obsolete old packege without the -kubic suffix -Obsoletes: %{realname}-bash-completion = 1.12.6 -# Conflict with non-kubic package, and provide equivalent -Conflicts: %{realname}-bash-completion > 1.12.6 -Provides: %{realname}-bash-completion = %{version} -%endif %description bash-completion Bash command line completion support for %{name}. @@ -216,17 +177,6 @@ Requires: zsh Supplements: packageand(%{name}:zsh) BuildArch: noarch -# KUBIC-SPECIFIC: This was required when upgrading from the original kubic -# packaging, when everything was renamed to -kubic. It also is -# used to ensure that nothing complains too much when using -# -kubic packages. Hopfully it can be removed one day. -%if "%flavour" == "kubic" -# Obsolete old packege without the -kubic suffix -Obsoletes: %{realname}-zsh-completion = 1.12.6 -# Conflict with non-kubic package, and provide equivalent -Conflicts: %{realname}-zsh-completion > 1.12.6 -Provides: %{realname}-zsh-completion = %{version} -%endif %description zsh-completion Zsh command line completion support for %{name}. @@ -238,29 +188,10 @@ Requires: fish Supplements: packageand(%{name}:fish) BuildArch: noarch -%if "%flavour" == "kubic" -# Conflict with non-kubic package, and provide equivalent -Conflicts: %{realname}-fish-completion -Provides: %{realname}-fish-completion = %{version} -%endif %description fish-completion Fish command line completion support for %{name}. -%if "%flavour" == "kubic" -%package kubeadm-criconfig -Summary: docker container runtime configuration for kubeadm -Group: System/Management -Requires: kubernetes-kubeadm -Requires(post): %fillup_prereq -Supplements: docker-kubic -Provides: kubernetes-kubeadm-criconfig -Conflicts: cri-o-kubeadm-criconfig - -%description kubeadm-criconfig -docker container runtime configuration for kubeadm -%endif - %prep %setup -q -n %{realname}-%{version}_%{git_version} @@ -271,10 +202,6 @@ %patch100 -p1 %patch101 -p1 %endif -%if "%flavour" == "kubic" -# PATCH-SUSE: Mirror patch. -%patch200 -p1 -%endif # bsc#1099277 %patch300 -p1 # bsc#1183855 bsc#1175081 @@ -395,9 +322,6 @@ # systemd service install -D -m0644 %{SOURCE100} %{buildroot}%{_unitdir}/%{realname}.service -%if "%flavour" == "kubic" -install -D -m0644 %{SOURCE900} %{buildroot}%{_unitdir}/%{realname}.service.d/90-kubic.conf -%endif ln -sf service %{buildroot}%{_sbindir}/rcdocker # udev rules that prevents dolphin to show all docker devices and slows down @@ -421,12 +345,6 @@ # sysusers.d install -D -m0644 %{SOURCE106} %{buildroot}%{_sysusersdir}/%{name}.conf -%if "%flavour" == "kubic" -# place kubelet.env in fillupdir (for kubeadm-criconfig) -sed -e 's-@LIBEXECDIR@-%{_libexecdir}-g' -i %{SOURCE901} -install -D -m0644 %{SOURCE901} %{buildroot}%{_fillupdir}/sysconfig.kubelet -%endif - %fdupes %{buildroot} %pre -f %{name}.pre @@ -451,11 +369,6 @@ %service_add_post %{realname}.service %{fillup_only -n docker} -%if "%flavour" == "kubic" -%post kubeadm-criconfig -%fillup_only -n kubelet -%endif - %preun %service_del_preun %{realname}.service @@ -474,10 +387,6 @@ %{_unitdir}/%{realname}.service %{_sysusersdir}/%{name}.conf -%if "%flavour" == "kubic" -%dir %{_unitdir}/%{realname}.service.d/ -%{_unitdir}/%{realname}.service.d/90-kubic.conf -%endif %dir %{_sysconfdir}/docker %config(noreplace) %{_sysconfdir}/docker/daemon.json @@ -503,10 +412,4 @@ %defattr(-,root,root) %{_datadir}/fish/vendor_completions.d/%{realname}.fish -%if "%flavour" == "kubic" -%files kubeadm-criconfig -%defattr(-,root,root) -%{_fillupdir}/sysconfig.kubelet -%endif - %changelog ++++++ _service ++++++ --- /var/tmp/diff_new_pack.3gJ169/_old 2023-02-02 18:23:25.513647786 +0100 +++ /var/tmp/diff_new_pack.3gJ169/_new 2023-02-02 18:23:25.517647811 +0100 @@ -3,16 +3,16 @@ <param name="url">https://github.com/moby/moby.git</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="versionformat">20.10.21_ce_%h</param> - <param name="revision">v20.10.21</param> + <param name="versionformat">20.10.23_ce_%h</param> + <param name="revision">v20.10.23</param> <param name="filename">docker</param> </service> <service name="tar_scm" mode="disabled"> <param name="url">https://github.com/docker/cli.git</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="versionformat">20.10.21_ce</param> - <param name="revision">v20.10.21</param> + <param name="versionformat">20.10.23_ce</param> + <param name="revision">v20.10.23</param> <param name="filename">docker-cli</param> </service> <service name="tar_scm" mode="disabled"> @@ -20,7 +20,7 @@ <param name="scm">git</param> <param name="exclude">.git</param> <param name="versionformat">%H</param> - <param name="revision">0dde5c895075df6e3630e76f750a447cf63f4789</param> + <param name="revision">05b93e0d3a95952f70c113b0bc5bdb538d7afdd7</param> <param name="filename">docker-libnetwork</param> </service> <service name="recompress" mode="disabled"> ++++++ docker-20.10.21_ce_3056208812eb.tar.xz -> docker-20.10.23_ce_6051f1429.tar.xz ++++++ /work/SRC/openSUSE:Factory/docker/docker-20.10.21_ce_3056208812eb.tar.xz /work/SRC/openSUSE:Factory/.docker.new.32243/docker-20.10.23_ce_6051f1429.tar.xz differ: char 15, line 1 ++++++ docker-cli-20.10.21_ce.tar.xz -> docker-cli-20.10.23_ce.tar.xz ++++++ ++++ 17329 lines of diff (skipped) ++++++ docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789.tar.xz -> docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/.circleci/config.yml new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/.circleci/config.yml --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/.circleci/config.yml 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/.circleci/config.yml 2023-01-18 13:19:52.000000000 +0100 @@ -4,7 +4,7 @@ working_directory: ~/go/src/github.com/docker/libnetwork docker: # the following image is irrelevant for the build, everything is built inside a container, check the Makefile - - image: 'circleci/golang:latest' + - image: 'cimg/go:1.18.9' environment: dockerbuildargs: . dockerargs: --privileged -e CIRCLECI @@ -15,7 +15,7 @@ steps: - checkout - setup_remote_docker: - version: 19.03.12 + version: 20.10.18 reusable: true exclusive: false - run: make builder @@ -25,7 +25,7 @@ steps: - checkout - setup_remote_docker: - version: 19.03.12 + version: 20.10.18 reusable: true exclusive: false - run: make build @@ -35,7 +35,7 @@ steps: - checkout - setup_remote_docker: - version: 19.03.12 + version: 20.10.18 reusable: true exclusive: false - run: make check @@ -45,7 +45,7 @@ steps: - checkout - setup_remote_docker: - version: 19.03.12 + version: 20.10.18 reusable: true exclusive: false - run: make cross @@ -55,7 +55,7 @@ steps: - checkout - setup_remote_docker: - version: 19.03.12 + version: 20.10.18 reusable: true exclusive: false - run: make unit-tests diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/.github/ISSUE_TEMPLATE.md new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/.github/ISSUE_TEMPLATE.md --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/.github/ISSUE_TEMPLATE.md 1970-01-01 01:00:00.000000000 +0100 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/.github/ISSUE_TEMPLATE.md 2023-01-18 13:19:52.000000000 +0100 @@ -0,0 +1,7 @@ +> **Warning** +> libnetwork was moved to https://github.com/moby/moby/tree/master/libnetwork +> +> libnetwork has been merged to the main repo of Moby since Docker 22.06. +> +> The old libnetwork repo (https://github.com/moby/libnetwork) now only accepts PR for Docker 20.10, +> and will be archived after the EOL of Docker 20.10. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/.github/PULL_REQUEST_TEMPLATE.md new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/.github/PULL_REQUEST_TEMPLATE.md --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/.github/PULL_REQUEST_TEMPLATE.md 1970-01-01 01:00:00.000000000 +0100 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/.github/PULL_REQUEST_TEMPLATE.md 2023-01-18 13:19:52.000000000 +0100 @@ -0,0 +1,7 @@ +> **Warning** +> libnetwork was moved to https://github.com/moby/moby/tree/master/libnetwork +> +> libnetwork has been merged to the main repo of Moby since Docker 22.06. +> +> The old libnetwork repo (https://github.com/moby/libnetwork) now only accepts PR for Docker 20.10, +> and will be archived after the EOL of Docker 20.10. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/Dockerfile new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/Dockerfile --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/Dockerfile 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/Dockerfile 2023-01-18 13:19:52.000000000 +0100 @@ -1,21 +1,23 @@ -ARG GO_VERSION=1.13.8 +ARG GO_VERSION=1.18.9 FROM golang:${GO_VERSION}-buster as dev RUN apt-get update && apt-get -y install iptables \ protobuf-compiler -RUN go get -d github.com/gogo/protobuf/protoc-gen-gogo && \ - cd /go/src/github.com/gogo/protobuf/protoc-gen-gogo && \ - git reset --hard 30cf7ac33676b5786e78c746683f0d4cd64fa75b && \ - go install - -RUN go get golang.org/x/lint/golint \ - golang.org/x/tools/cmd/cover \ - github.com/mattn/goveralls \ - github.com/gordonklaus/ineffassign \ - github.com/client9/misspell/cmd/misspell +RUN git clone https://github.com/gogo/protobuf.git /go/src/github.com/gogo/protobuf \ + && cd /go/src/github.com/gogo/protobuf/protoc-gen-gogo \ + && git reset --hard 30cf7ac33676b5786e78c746683f0d4cd64fa75b \ + && GO111MODULE=off go install + +RUN go install golang.org/x/lint/golint@latest \ + && go install golang.org/x/tools/cmd/cover@latest \ + && go install github.com/mattn/goveralls@latest \ + && go install github.com/gordonklaus/ineffassign@latest \ + && go install github.com/client9/misspell/cmd/misspell@latest WORKDIR /go/src/github.com/docker/libnetwork +ENV GO111MODULE=off + FROM dev diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/Makefile new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/Makefile --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/Makefile 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/Makefile 2023-01-18 13:19:52.000000000 +0100 @@ -45,8 +45,8 @@ build-local: @echo "ð³ $@" @mkdir -p "bin" - go build -tags experimental -o "bin/dnet" ./cmd/dnet - go build -o "bin/docker-proxy" ./cmd/proxy + GO111MODULE=off go build -tags experimental -o "bin/dnet" ./cmd/dnet + GO111MODULE=off go build -o "bin/docker-proxy" ./cmd/proxy CGO_ENABLED=0 go build -o "bin/diagnosticClient" ./cmd/diagnostic CGO_ENABLED=0 go build -o "bin/testMain" ./cmd/networkdb-test/testMain.go @@ -82,8 +82,8 @@ cross-local: @echo "ð³ $@" - go build -o "bin/dnet-$$GOOS-$$GOARCH" ./cmd/dnet - go build -o "bin/docker-proxy-$$GOOS-$$GOARCH" ./cmd/proxy + GO111MODULE=off go build -o "bin/dnet-$$GOOS-$$GOARCH" ./cmd/dnet + GO111MODULE=off go build -o "bin/docker-proxy-$$GOOS-$$GOARCH" ./cmd/proxy # Rebuild protocol buffers. # These may need to be rebuilt after vendoring updates, so .proto files are declared .PHONY so they are always rebuilt. @@ -125,7 +125,7 @@ unit-tests-local: @echo "ð³ Running tests... " @echo "mode: count" > coverage.coverprofile - @go build -o "bin/docker-proxy" ./cmd/proxy + @GO111MODULE=off go build -o "bin/docker-proxy" ./cmd/proxy @for dir in $$( find . -maxdepth 10 -not -path './.git*' -not -path '*/_*' -not -path './vendor/*' -type d); do \ if ls $$dir/*.go &> /dev/null; then \ pushd . &> /dev/null ; \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/README.md new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/README.md --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/README.md 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/README.md 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,12 @@ +> **Warning** +> libnetwork was moved to https://github.com/moby/moby/tree/master/libnetwork +> +> libnetwork has been merged to the main repo of Moby since Docker 22.06. +> +> The old libnetwork repo (https://github.com/moby/libnetwork) now only accepts PR for Docker 20.10, +> and will be archived after the EOL of Docker 20.10. + +- - - # libnetwork - networking for containers [](https://circleci.com/gh/docker/libnetwork/tree/master) [](https://coveralls.io/r/docker/libnetwork) [](https://godoc.org/github.com/docker/libnetwork) [](https://goreportcard.com/report/github.com/docker/libnetwork) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/api/api.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/api/api.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/api/api.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/api/api.go 2023-01-18 13:19:52.000000000 +0100 @@ -278,6 +278,7 @@ /*************************** NetworkController interface ****************************/ + func procCreateNetwork(c libnetwork.NetworkController, vars map[string]string, body []byte) (interface{}, *responseStatus) { var create networkCreate @@ -385,6 +386,7 @@ /****************** Network interface *******************/ + func procCreateEndpoint(c libnetwork.NetworkController, vars map[string]string, body []byte) (interface{}, *responseStatus) { var ec endpointCreate @@ -483,6 +485,7 @@ /****************** Endpoint interface *******************/ + func procJoinEndpoint(c libnetwork.NetworkController, vars map[string]string, body []byte) (interface{}, *responseStatus) { var ej endpointJoin var setFctList []libnetwork.EndpointOption @@ -561,6 +564,7 @@ /****************** Service interface *******************/ + func procGetServices(c libnetwork.NetworkController, vars map[string]string, body []byte) (interface{}, *responseStatus) { // Look for query filters and validate nwName, filterByNwName := vars[urlNwName] @@ -734,6 +738,7 @@ /****************** Sandbox interface *******************/ + func procGetSandbox(c libnetwork.NetworkController, vars map[string]string, body []byte) (interface{}, *responseStatus) { if epT, ok := vars[urlEpID]; ok { sv, errRsp := findService(c, epT, byID) @@ -816,6 +821,7 @@ /*********** Utilities ************/ + const ( byID = iota byName diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/bitseq/sequence.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/bitseq/sequence.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/bitseq/sequence.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/bitseq/sequence.go 2023-01-18 13:19:52.000000000 +0100 @@ -621,13 +621,14 @@ // Remove current sequence if empty. // Check if new sequence can be merged with neighbour (previous/next) sequences. // -// // Identify "current" sequence containing block: -// [prev seq] [current seq] [next seq] +// +// [prev seq] [current seq] [next seq] // // Based on block position, resulting list of sequences can be any of three forms: // -// block position Resulting list of sequences +// block position Resulting list of sequences +// // A) block is first in current: [prev seq] [new] [modified current seq] [next seq] // B) block is last in current: [prev seq] [modified current seq] [new] [next seq] // C) block is in the middle of current: [prev seq] [curr pre] [new] [curr post] [next seq] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/client/types.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/client/types.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/client/types.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/client/types.go 2023-01-18 13:19:52.000000000 +0100 @@ -31,6 +31,7 @@ /*********** Body types ************/ + type ipamConf struct { PreferredPool string SubPool string diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/config/config.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/config/config.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/config/config.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/config/config.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,7 +1,6 @@ package config import ( - "fmt" "strings" "github.com/BurntSushi/toml" @@ -14,7 +13,6 @@ "github.com/docker/libnetwork/ipamutils" "github.com/docker/libnetwork/netlabel" "github.com/docker/libnetwork/osl" - "github.com/docker/libnetwork/portallocator" "github.com/sirupsen/logrus" ) @@ -240,23 +238,6 @@ } } -// OptionDynamicPortRange function returns an option setter for service port allocation range -func OptionDynamicPortRange(in string) Option { - return func(c *Config) { - start, end := 0, 0 - if len(in) > 0 { - n, err := fmt.Sscanf(in, "%d-%d", &start, &end) - if n != 2 || err != nil { - logrus.Errorf("Failed to parse range string with err %v", err) - return - } - } - if err := portallocator.Get().SetPortRange(start, end); err != nil { - logrus.Errorf("Failed to set port range with err %v", err) - } - } -} - // OptionNetworkControlPlaneMTU function returns an option setter for control plane MTU func OptionNetworkControlPlaneMTU(exp int) Option { return func(c *Config) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/datastore/datastore.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/datastore/datastore.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/datastore/datastore.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/datastore/datastore.go 2023-01-18 13:19:52.000000000 +0100 @@ -14,7 +14,7 @@ "github.com/docker/libnetwork/types" ) -//DataStore exported +// DataStore exported type DataStore interface { // GetObject gets data from datastore and unmarshals to the specified object GetObject(key string, o KVObject) error @@ -174,14 +174,14 @@ return true } -//Key provides convenient method to create a Key +// Key provides convenient method to create a Key func Key(key ...string) string { keychain := append(rootChain, key...) str := strings.Join(keychain, "/") return str + "/" } -//ParseKey provides convenient method to unpack the key to complement the Key function +// ParseKey provides convenient method to unpack the key to complement the Key function func ParseKey(key string) ([]string, error) { chain := strings.Split(strings.Trim(key, "/"), "/") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/bridge/bridge.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/bridge/bridge.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/bridge/bridge.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/bridge/bridge.go 2023-01-18 13:19:52.000000000 +0100 @@ -781,8 +781,8 @@ // Setup IP6Tables. {config.EnableIPv6 && d.config.EnableIP6Tables, network.setupIP6Tables}, - //We want to track firewalld configuration so that - //if it is started/reloaded, the rules can be applied correctly + // We want to track firewalld configuration so that + // if it is started/reloaded, the rules can be applied correctly {d.config.EnableIPTables, network.setupFirewalld}, // same for IPv6 {config.EnableIPv6 && d.config.EnableIP6Tables, network.setupFirewalld6}, @@ -796,7 +796,7 @@ // Add inter-network communication rules. {d.config.EnableIPTables, setupNetworkIsolationRules}, - //Configure bridge networking filtering if ICC is off and IP tables are enabled + // Configure bridge networking filtering if ICC is off and IP tables are enabled {!config.EnableICC && d.config.EnableIPTables, setupBridgeNetFiltering}, } { if step.Condition { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/bridge/netlink_deprecated_linux_rawsockaddr_data_int8.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/bridge/netlink_deprecated_linux_rawsockaddr_data_int8.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/bridge/netlink_deprecated_linux_rawsockaddr_data_int8.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/bridge/netlink_deprecated_linux_rawsockaddr_data_int8.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build !arm && !ppc64 && !ppc64le && !riscv64 // +build !arm,!ppc64,!ppc64le,!riscv64 package bridge diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/bridge/netlink_deprecated_linux_rawsockaddr_data_uint8.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/bridge/netlink_deprecated_linux_rawsockaddr_data_uint8.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/bridge/netlink_deprecated_linux_rawsockaddr_data_uint8.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/bridge/netlink_deprecated_linux_rawsockaddr_data_uint8.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build arm || ppc64 || ppc64le || riscv64 // +build arm ppc64 ppc64le riscv64 package bridge diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/bridge/netlink_deprecated_unsupported.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/bridge/netlink_deprecated_unsupported.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/bridge/netlink_deprecated_unsupported.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/bridge/netlink_deprecated_unsupported.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build !linux // +build !linux package bridge diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/bridge/port_mapping_test.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/bridge/port_mapping_test.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/bridge/port_mapping_test.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/bridge/port_mapping_test.go 2023-01-18 13:19:52.000000000 +0100 @@ -97,6 +97,8 @@ } func TestPortMappingV6Config(t *testing.T) { + t.Skip("FIXME: circleci does not have proper IPv6 support") + defer testutils.SetupTestOSContext(t)() d := newDriver() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/bridge/setup_bridgenetfiltering.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/bridge/setup_bridgenetfiltering.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/bridge/setup_bridgenetfiltering.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/bridge/setup_bridgenetfiltering.go 2023-01-18 13:19:52.000000000 +0100 @@ -20,7 +20,7 @@ ipvboth ) -//Gets the IP version in use ( [ipv4], [ipv6] or [ipv4 and ipv6] ) +// Gets the IP version in use ( [ipv4], [ipv6] or [ipv4 and ipv6] ) func getIPVersion(config *networkConfiguration) ipVersion { ipVersion := ipv4 if config.AddressIPv6 != nil || config.EnableIPv6 { @@ -49,7 +49,7 @@ return nil } -//Enable bridge net filtering if ip forwarding is enabled. See github issue #11404 +// Enable bridge net filtering if ip forwarding is enabled. See github issue #11404 func checkBridgeNetFiltering(config *networkConfiguration, i *bridgeInterface) error { ipVer := getIPVersion(config) iface := config.BridgeName @@ -119,7 +119,7 @@ } } -//Gets the value of the kernel parameters located at the given path +// Gets the value of the kernel parameters located at the given path func getKernelBoolParam(path string) (bool, error) { enabled := false line, err := ioutil.ReadFile(path) @@ -132,7 +132,7 @@ return enabled, err } -//Sets the value of the kernel parameter located at the given path +// Sets the value of the kernel parameter located at the given path func setKernelBoolParam(path string, on bool) error { value := byte('0') if on { @@ -141,7 +141,7 @@ return ioutil.WriteFile(path, []byte{value, '\n'}, 0644) } -//Checks to see if packet forwarding is enabled +// Checks to see if packet forwarding is enabled func isPacketForwardingEnabled(ipVer ipVersion, iface string) (bool, error) { switch ipVer { case ipv4, ipv6: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/bridge/setup_ip_tables.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/bridge/setup_ip_tables.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/bridge/setup_ip_tables.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/bridge/setup_ip_tables.go 2023-01-18 13:19:52.000000000 +0100 @@ -22,6 +22,7 @@ // bridge. A positive match identifies a packet originated from one bridge // network's bridge destined to another bridge network's bridge and will // result in the packet being dropped. No match returns to the parent chain. + IsolationChain1 = "DOCKER-ISOLATION-STAGE-1" IsolationChain2 = "DOCKER-ISOLATION-STAGE-2" ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/overlay/ostweaks_unsupported.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/overlay/ostweaks_unsupported.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/overlay/ostweaks_unsupported.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/overlay/ostweaks_unsupported.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build !linux // +build !linux package overlay diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/windows/port_mapping.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/windows/port_mapping.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/windows/port_mapping.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/windows/port_mapping.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build windows // +build windows package windows diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/windows/windows.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/windows/windows.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/windows/windows.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/windows/windows.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build windows // +build windows // Shim for the Host Network Service (HNS) to manage networking for diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/windows/windows_store.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/windows/windows_store.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/windows/windows_store.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/windows/windows_store.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build windows // +build windows package windows diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/windows/windows_test.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/windows/windows_test.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/drivers/windows/windows_test.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/drivers/windows/windows_test.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build windows // +build windows package windows diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/endpoint_info_unix.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/endpoint_info_unix.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/endpoint_info_unix.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/endpoint_info_unix.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build !windows // +build !windows package libnetwork diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/endpoint_info_windows.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/endpoint_info_windows.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/endpoint_info_windows.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/endpoint_info_windows.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build windows // +build windows package libnetwork diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/endpoint_test.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/endpoint_test.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/endpoint_test.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/endpoint_test.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build !windows // +build !windows package libnetwork diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/etchosts/etchosts_test.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/etchosts/etchosts_test.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/etchosts/etchosts_test.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/etchosts/etchosts_test.go 2023-01-18 13:19:52.000000000 +0100 @@ -446,11 +446,11 @@ for j := 0; j < 25; j++ { if err := Add(file.Name(), rec); err != nil { - t.Fatal(err) + t.Error(err) } if err := Delete(file.Name(), rec); err != nil { - t.Fatal(err) + t.Error(err) } } }(i) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/firewall_others.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/firewall_others.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/firewall_others.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/firewall_others.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build !linux // +build !linux package libnetwork diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/ipam/allocator_test.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/ipam/allocator_test.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/ipam/allocator_test.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/ipam/allocator_test.go 2023-01-18 13:19:52.000000000 +0100 @@ -1516,7 +1516,7 @@ wg.Add(1) go func(ip *net.IPNet) { if err = a.ReleaseAddress(poolID, ip.IP); err != nil { - t.Fatal(err) + t.Error(err) } l.Lock() ips = append(ips, IP{ip, -1}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/ipam/parallel_test.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/ipam/parallel_test.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/ipam/parallel_test.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/ipam/parallel_test.go 2023-01-18 13:19:52.000000000 +0100 @@ -93,7 +93,7 @@ go func(t *testing.T, a *Allocator, ch chan *op) { name, _, _, err := a.RequestPool("GlobalDefault", "", "", nil, false) if err != nil { - t.Fatalf("request error %v", err) + t.Errorf("request error %v", err) } idx := atomic.AddInt32(&operationIndex, 1) ch <- &op{idx, true, name} @@ -101,7 +101,7 @@ idx = atomic.AddInt32(&operationIndex, 1) err = a.ReleasePool(name) if err != nil { - t.Fatalf("release error %v", err) + t.Errorf("release error %v", err) } ch <- &op{idx, false, name} }(t, a, ch) @@ -267,7 +267,7 @@ // logrus.Errorf("list %v", tctx.ipList) err := tctx.a.ReleaseAddress(tctx.pid, tctx.ipList[index].IP) if err != nil { - t.Fatalf("routine %d got %v", id, err) + t.Errorf("routine %d got %v", id, err) } ch <- tctx.ipList[index] parallelExec.Release(1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/ipams/builtin/builtin_unix.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/ipams/builtin/builtin_unix.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/ipams/builtin/builtin_unix.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/ipams/builtin/builtin_unix.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build linux || freebsd || darwin // +build linux freebsd darwin package builtin diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/ipams/builtin/builtin_windows.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/ipams/builtin/builtin_windows.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/ipams/builtin/builtin_windows.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/ipams/builtin/builtin_windows.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build windows // +build windows package builtin diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/ipams/remote/api/api.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/ipams/remote/api/api.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/ipams/remote/api/api.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/ipams/remote/api/api.go 2023-01-18 13:19:52.000000000 +0100 @@ -34,14 +34,14 @@ } } -// GetAddressSpacesResponse is the response to the ``get default address spaces`` request message +// GetAddressSpacesResponse is the response to the âget default address spacesâ request message type GetAddressSpacesResponse struct { Response LocalDefaultAddressSpace string GlobalDefaultAddressSpace string } -// RequestPoolRequest represents the expected data in a ``request address pool`` request message +// RequestPoolRequest represents the expected data in a ârequest address poolâ request message type RequestPoolRequest struct { AddressSpace string Pool string @@ -50,7 +50,7 @@ V6 bool } -// RequestPoolResponse represents the response message to a ``request address pool`` request +// RequestPoolResponse represents the response message to a ârequest address poolâ request type RequestPoolResponse struct { Response PoolID string @@ -58,37 +58,37 @@ Data map[string]string } -// ReleasePoolRequest represents the expected data in a ``release address pool`` request message +// ReleasePoolRequest represents the expected data in a ârelease address poolâ request message type ReleasePoolRequest struct { PoolID string } -// ReleasePoolResponse represents the response message to a ``release address pool`` request +// ReleasePoolResponse represents the response message to a ârelease address poolâ request type ReleasePoolResponse struct { Response } -// RequestAddressRequest represents the expected data in a ``request address`` request message +// RequestAddressRequest represents the expected data in a ârequest addressâ request message type RequestAddressRequest struct { PoolID string Address string Options map[string]string } -// RequestAddressResponse represents the expected data in the response message to a ``request address`` request +// RequestAddressResponse represents the expected data in the response message to a ârequest addressâ request type RequestAddressResponse struct { Response Address string // in CIDR format Data map[string]string } -// ReleaseAddressRequest represents the expected data in a ``release address`` request message +// ReleaseAddressRequest represents the expected data in a ârelease addressâ request message type ReleaseAddressRequest struct { PoolID string Address string } -// ReleaseAddressResponse represents the response message to a ``release address`` request +// ReleaseAddressResponse represents the response message to a ârelease addressâ request type ReleaseAddressResponse struct { Response } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/iptables/iptables.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/iptables/iptables.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/iptables/iptables.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/iptables/iptables.go 2023-01-18 13:19:52.000000000 +0100 @@ -5,7 +5,6 @@ "fmt" "net" "os/exec" - "regexp" "strconv" "strings" "sync" @@ -54,7 +53,6 @@ iptablesPath string ip6tablesPath string supportsXlock = false - supportsCOpt = false xLockWaitMsg = "Another app is currently holding the xtables lock" // used to lock iptables commands if xtables lock is not supported bestEffortLock sync.Mutex @@ -86,19 +84,27 @@ return fmt.Sprintf("Error iptables %s: %s", e.Chain, string(e.Output)) } -func probe() { +func detectIptables() { path, err := exec.LookPath("iptables") if err != nil { - logrus.Warnf("Failed to find iptables: %v", err) + logrus.WithError(err).Warnf("failed to find iptables") return } - if out, err := exec.Command(path, "--wait", "-t", "nat", "-L", "-n").CombinedOutput(); err != nil { - logrus.Warnf("Running iptables --wait -t nat -L -n failed with message: `%s`, error: %v", strings.TrimSpace(string(out)), err) + iptablesPath = path + + // The --wait flag was added in iptables v1.6.0. + // TODO remove this check once we drop support for CentOS/RHEL 7, which uses an older version of iptables + if out, err := exec.Command(path, "--wait", "-L", "-n").CombinedOutput(); err != nil { + logrus.WithError(err).Infof("unable to detect if iptables supports xlock: 'iptables --wait -L -n': `%s`", strings.TrimSpace(string(out))) + } else { + supportsXlock = true } - _, err = exec.LookPath("ip6tables") + + path, err = exec.LookPath("ip6tables") if err != nil { - logrus.Warnf("Failed to find ip6tables: %v", err) - return + logrus.WithError(err).Warnf("unable to find ip6tables") + } else { + ip6tablesPath = path } } @@ -110,32 +116,11 @@ return } if err := FirewalldInit(); err != nil { - logrus.Debugf("Fail to initialize firewalld: %v, using raw iptables instead", err) - } -} - -func detectIptables() { - path, err := exec.LookPath("iptables") - if err != nil { - return - } - iptablesPath = path - path, err = exec.LookPath("ip6tables") - if err != nil { - return + logrus.WithError(err).Debugf("unable to initialize firewalld; using raw iptables instead") } - ip6tablesPath = path - supportsXlock = exec.Command(iptablesPath, "--wait", "-L", "-n").Run() == nil - mj, mn, mc, err := GetVersion() - if err != nil { - logrus.Warnf("Failed to read iptables version: %v", err) - return - } - supportsCOpt = supportsCOption(mj, mn, mc) } func initDependencies() { - probe() initFirewalld() detectIptables() } @@ -475,26 +460,9 @@ return false } - if supportsCOpt { - // if exit status is 0 then return true, the rule exists - _, err := f(append([]string{"-t", string(table), "-C", chain}, rule...)...) - return err == nil - } - - // parse "iptables -S" for the rule (it checks rules in a specific chain - // in a specific table and it is very unreliable) - return iptable.existsRaw(table, chain, rule...) -} - -func (iptable IPTable) existsRaw(table Table, chain string, rule ...string) bool { - path := iptablesPath - if iptable.Version == IPv6 { - path = ip6tablesPath - } - ruleString := fmt.Sprintf("%s %s\n", chain, strings.Join(rule, " ")) - existingRules, _ := exec.Command(path, "-t", string(table), "-S", chain).Output() - - return strings.Contains(string(existingRules), ruleString) + // if exit status is 0 then return true, the rule exists + _, err := f(append([]string{"-t", string(table), "-C", chain}, rule...)...) + return err == nil } // Maximum duration that an iptables operation can take @@ -548,6 +516,9 @@ path := iptablesPath commandName := "iptables" if iptable.Version == IPv6 { + if ip6tablesPath == "" { + return nil, fmt.Errorf("ip6tables is missing") + } path = ip6tablesPath commandName = "ip6tables" } @@ -589,15 +560,6 @@ return false } -// GetVersion reads the iptables version numbers during initialization -func GetVersion() (major, minor, micro int, err error) { - out, err := exec.Command(iptablesPath, "--version").CombinedOutput() - if err == nil { - major, minor, micro = parseVersionNumbers(string(out)) - } - return -} - // SetDefaultPolicy sets the passed default policy for the table/chain func (iptable IPTable) SetDefaultPolicy(table Table, chain string, policy Policy) error { if err := iptable.RawCombinedOutput("-t", string(table), "-P", chain, string(policy)); err != nil { @@ -606,19 +568,6 @@ return nil } -func parseVersionNumbers(input string) (major, minor, micro int) { - re := regexp.MustCompile(`v\d*.\d*.\d*`) - line := re.FindString(input) - fmt.Sscanf(line, "v%d.%d.%d", &major, &minor, µ) - return -} - -// iptables -C, --check option was added in v.1.4.11 -// http://ftp.netfilter.org/pub/iptables/changes-iptables-1.4.11.txt -func supportsCOption(mj, mn, mc int) bool { - return mj > 1 || (mj == 1 && (mn > 4 || (mn == 4 && mc >= 11))) -} - // AddReturnRule adds a return rule for the chain in the filter table func (iptable IPTable) AddReturnRule(chain string) error { var ( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/iptables/iptables_test.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/iptables/iptables_test.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/iptables/iptables_test.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/iptables/iptables_test.go 2023-01-18 13:19:52.000000000 +0100 @@ -213,7 +213,7 @@ defer wg.Done() err := natChain.Forward(Append, ip, port, proto, dstAddr, dstPort, "lo") if err != nil { - t.Fatal(err) + t.Error(err) } }() } @@ -286,44 +286,15 @@ if err != nil { t.Fatalf("i=%d, err: %v", i, err) } - if !iptable.existsRaw(Filter, testChain1, r.rule...) { + if !iptable.exists(true, Filter, testChain1, r.rule...) { t.Fatalf("Failed to detect rule. i=%d", i) } // Truncate the rule trg := r.rule[len(r.rule)-1] trg = trg[:len(trg)-2] r.rule[len(r.rule)-1] = trg - if iptable.existsRaw(Filter, testChain1, r.rule...) { + if iptable.exists(true, Filter, testChain1, r.rule...) { t.Fatalf("Invalid detection. i=%d", i) } } } - -func TestGetVersion(t *testing.T) { - mj, mn, mc := parseVersionNumbers("iptables v1.4.19.1-alpha") - if mj != 1 || mn != 4 || mc != 19 { - t.Fatal("Failed to parse version numbers") - } -} - -func TestSupportsCOption(t *testing.T) { - input := []struct { - mj int - mn int - mc int - ok bool - }{ - {1, 4, 11, true}, - {1, 4, 12, true}, - {1, 5, 0, true}, - {0, 4, 11, false}, - {0, 5, 12, false}, - {1, 3, 12, false}, - {1, 4, 10, false}, - } - for ind, inp := range input { - if inp.ok != supportsCOption(inp.mj, inp.mn, inp.mc) { - t.Fatalf("Incorrect check: %d", ind) - } - } -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/libnetwork_test.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/libnetwork_test.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/libnetwork_test.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/libnetwork_test.go 2023-01-18 13:19:52.000000000 +0100 @@ -1080,6 +1080,9 @@ libnetwork.OptionHostname("test"), libnetwork.OptionDomainname("docker.io"), libnetwork.OptionExtraHost("web", "192.168.0.1")) + if err != nil { + t.Fatal(err) + } defer func() { if err := sbx1.Delete(); err != nil { t.Fatal(err) @@ -1087,6 +1090,9 @@ }() sbx2, err := controller.NewSandbox("c2") + if err != nil { + t.Fatal(err) + } defer func() { if err := sbx2.Delete(); err != nil { t.Fatal(err) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/netutils/utils_linux.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/netutils/utils_linux.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/netutils/utils_linux.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/netutils/utils_linux.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,4 +1,6 @@ +//go:build linux // +build linux + // Network utility functions. package netutils diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/network.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/network.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/network.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/network.go 2023-01-18 13:19:52.000000000 +0100 @@ -4,6 +4,7 @@ "encoding/json" "fmt" "net" + "runtime" "strings" "sync" "time" @@ -980,13 +981,13 @@ } // This function gets called in 3 ways: -// * Delete() -- (false, false) -// remove if endpoint count == 0 or endpoint count == 1 and -// there is a load balancer IP -// * Delete(libnetwork.NetworkDeleteOptionRemoveLB) -- (false, true) -// remove load balancer and network if endpoint count == 1 -// * controller.networkCleanup() -- (true, true) -// remove the network no matter what +// - Delete() -- (false, false) +// remove if endpoint count == 0 or endpoint count == 1 and +// there is a load balancer IP +// - Delete(libnetwork.NetworkDeleteOptionRemoveLB) -- (false, true) +// remove load balancer and network if endpoint count == 1 +// - controller.networkCleanup() -- (true, true) +// remove the network no matter what func (n *network) delete(force bool, rmLBEndpoint bool) error { n.Lock() c := n.ctrlr @@ -1062,13 +1063,6 @@ goto removeFromStore } - if err = n.deleteNetwork(); err != nil { - if !force { - return err - } - logrus.Debugf("driver failed to delete stale network %s (%s): %v", n.Name(), n.ID(), err) - } - n.ipamRelease() if err = c.updateToStore(n); err != nil { logrus.Warnf("Failed to update store after ipam release for network %s (%s): %v", n.Name(), n.ID(), err) @@ -1089,8 +1083,19 @@ c.cleanupServiceDiscovery(n.ID()) // Cleanup the load balancer. On Windows this call is required - // to remove remote loadbalancers in VFP. - c.cleanupServiceBindings(n.ID()) + // to remove remote loadbalancers in VFP, and must be performed before + // dataplane network deletion. + if runtime.GOOS == "windows" { + c.cleanupServiceBindings(n.ID()) + } + + // Delete the network from the dataplane + if err = n.deleteNetwork(); err != nil { + if !force { + return err + } + logrus.Debugf("driver failed to delete stale network %s (%s): %v", n.Name(), n.ID(), err) + } removeFromStore: // deleteFromStore performs an atomic delete operation and the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/network_unix.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/network_unix.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/network_unix.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/network_unix.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build !windows // +build !windows package libnetwork diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/network_windows.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/network_windows.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/network_windows.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/network_windows.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build windows // +build windows package libnetwork diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/networkdb/networkdb.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/networkdb/networkdb.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/networkdb/networkdb.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/networkdb/networkdb.go 2023-01-18 13:19:52.000000000 +0100 @@ -283,7 +283,7 @@ logrus.Errorf("%v(%v) Could not close DB: %v", nDB.config.Hostname, nDB.config.NodeID, err) } - //Avoid (*Broadcaster).run goroutine leak + // Avoid (*Broadcaster).run goroutine leak nDB.broadcaster.Close() } @@ -473,17 +473,18 @@ // deleteNodeNetworkEntries is called in 2 conditions with 2 different outcomes: // 1) when a notification is coming of a node leaving the network -// - Walk all the network entries and mark the leaving node's entries for deletion -// These will be garbage collected when the reap timer will expire +// - Walk all the network entries and mark the leaving node's entries for deletion +// These will be garbage collected when the reap timer will expire +// // 2) when the local node is leaving the network -// - Walk all the network entries: -// A) if the entry is owned by the local node -// then we will mark it for deletion. This will ensure that if a node did not -// yet received the notification that the local node is leaving, will be aware -// of the entries to be deleted. -// B) if the entry is owned by a remote node, then we can safely delete it. This -// ensures that if we join back this network as we receive the CREATE event for -// entries owned by remote nodes, we will accept them and we notify the application +// - Walk all the network entries: +// A) if the entry is owned by the local node +// then we will mark it for deletion. This will ensure that if a node did not +// yet received the notification that the local node is leaving, will be aware +// of the entries to be deleted. +// B) if the entry is owned by a remote node, then we can safely delete it. This +// ensures that if we join back this network as we receive the CREATE event for +// entries owned by remote nodes, we will accept them and we notify the application func (nDB *NetworkDB) deleteNodeNetworkEntries(nid, node string) { // Indicates if the delete is triggered for the local node isNodeLocal := node == nDB.config.NodeID @@ -608,7 +609,7 @@ nodeNetworks[nid] = &network{id: nid, ltime: ltime, entriesNumber: entries} nodeNetworks[nid].tableBroadcasts = &memberlist.TransmitLimitedQueue{ NumNodes: func() int { - //TODO fcrisciani this can be optimized maybe avoiding the lock? + // TODO fcrisciani this can be optimized maybe avoiding the lock? // this call is done each GetBroadcasts call to evaluate the number of // replicas for the message nDB.RLock() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/networkdb/networkdb.pb.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/networkdb/networkdb.pb.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/networkdb/networkdb.pb.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/networkdb/networkdb.pb.go 2023-01-18 13:19:52.000000000 +0100 @@ -145,7 +145,9 @@ func (x NetworkEvent_Type) String() string { return proto.EnumName(NetworkEvent_Type_name, int32(x)) } -func (NetworkEvent_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptorNetworkdb, []int{2, 0} } +func (NetworkEvent_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptorNetworkdb, []int{2, 0} +} type TableEvent_Type int32 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/networkdb/networkdb_test.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/networkdb/networkdb_test.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/networkdb/networkdb_test.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/networkdb/networkdb_test.go 2023-01-18 13:19:52.000000000 +0100 @@ -6,6 +6,7 @@ "log" "net" "os" + "strconv" "strings" "sync/atomic" "testing" @@ -562,12 +563,12 @@ assert.NilError(t, err) for i := 0; i < keysWriteDelete; i++ { - err = dbs[i%2].CreateEntry("testTable", "network1", "key-"+string(i), []byte("value")) + err = dbs[i%2].CreateEntry("testTable", "network1", "key-"+strconv.Itoa(i), []byte("value")) assert.NilError(t, err) } time.Sleep(time.Second) for i := 0; i < keysWriteDelete; i++ { - err = dbs[i%2].DeleteEntry("testTable", "network1", "key-"+string(i)) + err = dbs[i%2].DeleteEntry("testTable", "network1", "key-"+strconv.Itoa(i)) assert.NilError(t, err) } for i := 0; i < 2; i++ { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/osl/kernel/knobs_unsupported.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/osl/kernel/knobs_unsupported.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/osl/kernel/knobs_unsupported.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/osl/kernel/knobs_unsupported.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build !linux // +build !linux package kernel diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/osl/namespace_unsupported.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/osl/namespace_unsupported.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/osl/namespace_unsupported.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/osl/namespace_unsupported.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build !linux && !windows && !freebsd // +build !linux,!windows,!freebsd package osl diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/osl/sandbox_unsupported.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/osl/sandbox_unsupported.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/osl/sandbox_unsupported.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/osl/sandbox_unsupported.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build !linux && !windows && !freebsd // +build !linux,!windows,!freebsd package osl diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/osl/sandbox_unsupported_test.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/osl/sandbox_unsupported_test.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/osl/sandbox_unsupported_test.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/osl/sandbox_unsupported_test.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build !linux // +build !linux package osl diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/portallocator/portallocator.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/portallocator/portallocator.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/portallocator/portallocator.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/portallocator/portallocator.go 2023-01-18 13:19:52.000000000 +0100 @@ -3,7 +3,6 @@ import ( "errors" "fmt" - "github.com/sirupsen/logrus" "net" "sync" ) @@ -14,25 +13,9 @@ // defaultPortRangeEnd indicates the last port in port range // consistent with default /proc/sys/net/ipv4/ip_local_port_range // upper bound on linux - defaultPortRangeEnd = 60999 + defaultPortRangeEnd = 65535 ) -func sanitizePortRange(start int, end int) (newStart, newEnd int, err error) { - if start > defaultPortRangeEnd || end < defaultPortRangeStart || start > end { - return 0, 0, fmt.Errorf("Request out allowed range [%v, %v]", - defaultPortRangeStart, defaultPortRangeEnd) - } - err = nil - newStart, newEnd = start, end - if start < defaultPortRangeStart { - newStart = defaultPortRangeStart - } - if end > defaultPortRangeEnd { - newEnd = defaultPortRangeEnd - } - return -} - type ipMapping map[string]protoMap var ( @@ -111,19 +94,11 @@ return instance } -func getDefaultPortRange() (int, int) { +func newInstance() *PortAllocator { start, end, err := getDynamicPortRange() - if err == nil { - start, end, err = sanitizePortRange(start, end) - } if err != nil { start, end = defaultPortRangeStart, defaultPortRangeEnd } - return start, end -} - -func newInstance() *PortAllocator { - start, end := getDefaultPortRange() return &PortAllocator{ ipMap: ipMapping{}, Begin: start, @@ -197,35 +172,6 @@ return nil } -// SetPortRange sets dynamic port allocation range. -// if both portBegin and portEnd are 0, the port range reverts to default -// value. Otherwise they are sanitized against the default values to -// ensure their validity. -func (p *PortAllocator) SetPortRange(portBegin, portEnd int) error { - // if begin and end is zero, revert to default values - var begin, end int - var err error - if portBegin == 0 && portEnd == 0 { - begin, end = getDefaultPortRange() - - } else { - begin, end, err = sanitizePortRange(portBegin, portEnd) - if err != nil { - return err - } - } - logrus.Debugf("Setting up port allocator to range %v-%v, current %v-%v", - begin, end, p.Begin, p.End) - p.mutex.Lock() - defer p.mutex.Unlock() - if p.Begin == begin && p.End == end { - return nil - } - p.ipMap = ipMapping{} - p.Begin, p.End = begin, end - return nil -} - func (p *PortAllocator) newPortMap() *portMap { defaultKey := getRangeKey(p.Begin, p.End) pm := &portMap{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/portallocator/portallocator_test.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/portallocator/portallocator_test.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/portallocator/portallocator_test.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/portallocator/portallocator_test.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,7 +1,6 @@ package portallocator import ( - "fmt" "net" "testing" @@ -322,47 +321,3 @@ t.Fatalf("Acquire(0) allocated the same port twice: %d", port) } } - -func TestChangePortRange(t *testing.T) { - var tests = []struct { - begin int - end int - setErr error - reqRlt int - }{ - {defaultPortRangeEnd + 1, defaultPortRangeEnd + 10, fmt.Errorf("begin out of range"), 0}, - {defaultPortRangeStart - 10, defaultPortRangeStart - 1, fmt.Errorf("end out of range"), 0}, - {defaultPortRangeEnd, defaultPortRangeStart, fmt.Errorf("out of order"), 0}, - {defaultPortRangeStart + 100, defaultPortRangeEnd + 10, nil, defaultPortRangeStart + 100}, - {0, 0, nil, defaultPortRangeStart}, // revert to default if no value given - {defaultPortRangeStart - 100, defaultPortRangeEnd, nil, defaultPortRangeStart + 1}, - } - p := Get() - port := 0 - for _, c := range tests { - t.Logf("test: port allocate range %v-%v, setErr=%v, reqPort=%v", - c.begin, c.end, c.setErr, c.reqRlt) - err := p.SetPortRange(c.begin, c.end) - if (c.setErr == nil && c.setErr != err) || - (c.setErr != nil && err == nil) { - t.Fatalf("Unexpected set range result, expected=%v, actual=%v", c.setErr, err) - } - if err != nil { - continue - } - if port > 0 { - err := p.ReleasePort(defaultIP, "tcp", port) - if err != nil { - t.Fatalf("Releasing port %v failed, err=%v", port, err) - } - } - - port, err = p.RequestPort(defaultIP, "tcp", 0) - if err != nil { - t.Fatalf("Request failed, err %v", err) - } - if port != c.reqRlt { - t.Fatalf("Incorrect port returned, expected=%v, actual=%v", c.reqRlt, port) - } - } -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/portmapper/mapper.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/portmapper/mapper.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/portmapper/mapper.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/portmapper/mapper.go 2023-01-18 13:19:52.000000000 +0100 @@ -214,7 +214,7 @@ return ErrUnknownBackendAddressType } -//ReMapAll will re-apply all port mappings +// ReMapAll will re-apply all port mappings func (pm *PortMapper) ReMapAll() { pm.lock.Lock() defer pm.lock.Unlock() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/resolvconf/resolvconf.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/resolvconf/resolvconf.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/resolvconf/resolvconf.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/resolvconf/resolvconf.go 2023-01-18 13:19:52.000000000 +0100 @@ -139,12 +139,11 @@ } // FilterResolvDNS cleans up the config in resolvConf. It has two main jobs: -// 1. It looks for localhost (127.*|::1) entries in the provided -// resolv.conf, removing local nameserver entries, and, if the resulting -// cleaned config has no defined nameservers left, adds default DNS entries -// 2. Given the caller provides the enable/disable state of IPv6, the filter -// code will remove all IPv6 nameservers if it is not enabled for containers -// +// 1. It looks for localhost (127.*|::1) entries in the provided +// resolv.conf, removing local nameserver entries, and, if the resulting +// cleaned config has no defined nameservers left, adds default DNS entries +// 2. Given the caller provides the enable/disable state of IPv6, the filter +// code will remove all IPv6 nameservers if it is not enabled for containers func FilterResolvDNS(resolvConf []byte, ipv6Enabled bool) (*File, error) { cleanedResolvConf := localhostNSRegexp.ReplaceAll(resolvConf, []byte{}) // if IPv6 is not enabled, also clean out any IPv6 address nameserver diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/resolver_unix.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/resolver_unix.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/resolver_unix.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/resolver_unix.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build !windows // +build !windows package libnetwork diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/resolver_windows.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/resolver_windows.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/resolver_windows.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/resolver_windows.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build windows // +build windows package libnetwork diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/sandbox_dns_unix.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/sandbox_dns_unix.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/sandbox_dns_unix.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/sandbox_dns_unix.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build !windows // +build !windows package libnetwork diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/sandbox_dns_windows.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/sandbox_dns_windows.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/sandbox_dns_windows.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/sandbox_dns_windows.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build windows // +build windows package libnetwork diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/sandbox_externalkey_unix.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/sandbox_externalkey_unix.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/sandbox_externalkey_unix.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/sandbox_externalkey_unix.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build linux || freebsd // +build linux freebsd package libnetwork diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/sandbox_externalkey_windows.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/sandbox_externalkey_windows.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/sandbox_externalkey_windows.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/sandbox_externalkey_windows.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build windows // +build windows package libnetwork diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/service_common.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/service_common.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/service_common.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/service_common.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build linux || windows // +build linux windows package libnetwork @@ -368,12 +369,15 @@ // Remove loadbalancer service(if needed) and backend in all // sandboxes in the network only if the vip is valid. if entries == 0 { - // The network may well have been deleted before the last - // of the service bindings. That's ok on Linux because - // removing the network sandbox implicitly removes the - // backend service bindings. Windows VFP cleanup requires - // calling cleanupServiceBindings on the network prior to - // deleting the network, performed by network.delete. + // The network may well have been deleted from the store (and + // dataplane) before the last of the service bindings. On Linux that's + // ok because removing the network sandbox from the dataplane + // implicitly cleans up all related dataplane state. + // On the Windows dataplane, VFP policylists must be removed + // independently of the network, and they must be removed before the HNS + // network. Otherwise, policylist removal fails with "network not + // found." On Windows cleanupServiceBindings must be called prior to + // removing the network from the store or dataplane. n, err := c.NetworkByID(nID) if err == nil { n.(*network).rmLBBackend(ip, lb, rmService, fullRemove) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/service_unsupported.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/service_unsupported.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/service_unsupported.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/service_unsupported.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build !linux && !windows // +build !linux,!windows package libnetwork diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/service_windows.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/service_windows.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/service_windows.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/service_windows.go 2023-01-18 13:19:52.000000000 +0100 @@ -139,12 +139,16 @@ if policyLists, ok := lbPolicylistMap[lb]; ok { if policyLists.ilb != nil { - policyLists.ilb.Delete() + if _, err := policyLists.ilb.Delete(); err != nil { + logrus.Errorf("Failed to remove HNS ILB policylist %s: %s", policyLists.ilb.ID, err) + } policyLists.ilb = nil } if policyLists.elb != nil { - policyLists.elb.Delete() + if _, err := policyLists.elb.Delete(); err != nil { + logrus.Errorf("Failed to remove HNS ELB policylist %s: %s", policyLists.elb.ID, err) + } policyLists.elb = nil } delete(lbPolicylistMap, lb) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/store.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/store.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/store.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/store.go 2023-01-18 13:19:52.000000000 +0100 @@ -340,8 +340,11 @@ return } + networkID := n.ID() + endpointID := ep.ID() + c.Lock() - nw, ok := nmap[n.ID()] + nw, ok := nmap[networkID] c.Unlock() if ok { @@ -349,12 +352,12 @@ n.updateSvcRecord(ep, c.getLocalEps(nw), true) c.Lock() - nw.localEps[ep.ID()] = ep + nw.localEps[endpointID] = ep // If we had learned that from the kv store remove it // from remote ep list now that we know that this is // indeed a local endpoint - delete(nw.remoteEps, ep.ID()) + delete(nw.remoteEps, endpointID) c.Unlock() return } @@ -370,8 +373,8 @@ n.updateSvcRecord(ep, c.getLocalEps(nw), true) c.Lock() - nw.localEps[ep.ID()] = ep - nmap[n.ID()] = nw + nw.localEps[endpointID] = ep + nmap[networkID] = nw nw.stopCh = make(chan struct{}) c.Unlock() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/testutils/context_unix.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/testutils/context_unix.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/testutils/context_unix.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/testutils/context_unix.go 2023-01-18 13:19:52.000000000 +0100 @@ -1,3 +1,4 @@ +//go:build linux || freebsd // +build linux freebsd package testutils @@ -16,8 +17,7 @@ // // Example usage: // -// defer SetupTestOSContext(t)() -// +// defer SetupTestOSContext(t)() func SetupTestOSContext(t *testing.T) func() { runtime.LockOSThread() if err := syscall.Unshare(syscall.CLONE_NEWNET); err != nil { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/testutils/context_windows.go new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/testutils/context_windows.go --- old/docker-libnetwork-0dde5c895075df6e3630e76f750a447cf63f4789/testutils/context_windows.go 2022-07-16 09:26:57.000000000 +0200 +++ new/docker-libnetwork-05b93e0d3a95952f70c113b0bc5bdb538d7afdd7/testutils/context_windows.go 2023-01-18 13:19:52.000000000 +0100 @@ -10,8 +10,7 @@ // // Example usage: // -// defer SetupTestOSContext(t)() -// +// defer SetupTestOSContext(t)() func SetupTestOSContext(t *testing.T) func() { return func() { } ++++++ docker-rpmlintrc ++++++ --- /var/tmp/diff_new_pack.3gJ169/_old 2023-02-02 18:23:27.669660948 +0100 +++ /var/tmp/diff_new_pack.3gJ169/_new 2023-02-02 18:23:27.673660974 +0100 @@ -1,10 +1,7 @@ -# This is intentional, since we use _multibuild for the flavours. -addFilter ("^docker-kubic.src: W: invalid-spec-name") - # The #! comes from upstream. -addFilter ("^docker(-kubic)?-bash-completion.noarch: W: sourced-script-with-shebang /etc/bash_completion.d/docker bash") -addFilter ("^docker(-kubic)?-zsh-completion.noarch: W: sourced-script-with-shebang /etc/zsh_completion.d/docker zsh") +addFilter ("^docker-bash-completion.noarch: W: sourced-script-with-shebang /etc/bash_completion.d/docker bash") +addFilter ("^docker-zsh-completion.noarch: W: sourced-script-with-shebang /etc/zsh_completion.d/docker zsh") # -test is something that is used internally and isn't actually shipped -- it's a pseduo-source package. -addFilter ("^docker(-kubic)?-test.*") +addFilter ("^docker-test.*")