Hello community, here is the log from the commit of package golang-github-docker-libnetwork for openSUSE:Factory checked in at 2019-05-06 21:14:40 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/golang-github-docker-libnetwork (Old) and /work/SRC/openSUSE:Factory/.golang-github-docker-libnetwork.new.5148 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "golang-github-docker-libnetwork" Mon May 6 21:14:40 2019 rev:15 rq:701148 version:0.7.0.1+gitr2726_872f0a83c98a Changes: -------- --- /work/SRC/openSUSE:Factory/golang-github-docker-libnetwork/golang-github-docker-libnetwork.changes 2019-02-13 09:57:32.257677080 +0100 +++ /work/SRC/openSUSE:Factory/.golang-github-docker-libnetwork.new.5148/golang-github-docker-libnetwork.changes 2019-05-06 21:14:42.236664308 +0200 @@ -1,0 +2,31 @@ +Mon May 06 18:21:12 UTC 2019 - asa...@suse.com + +- Update to version git.872f0a83c98add6cae255c8859e29532febc0039 which is + required for Docker v18.09.6-ce. + * Pick a random host port if the user does not specify a host port. + * Cleanup the cluster provider when the agent is closed + * Adding error log if peerAdd fails + * Adding synchronization to endpoint addition/deletion to prevent network connectivity issue + * Revert "Merge pull request #2286 from thaJeztah/18.09_backport_iptables_legacy" + * Bump Go to 1.10.7 + * Fix possible nil pointer exception + * Fix gosimple + * account for removal of configs.HookState + +------------------------------------------------------------------- +Fri May 03 13:16:44 UTC 2019 - Aleksa Sarai <asa...@suse.com> + +- Update to version git.4725f2163fb214a6312f3beae5991f838ec36326 which is + required for Docker v18.09.5-ce: bsc#1128376 boo#1134068 + * Revert "Merge pull request #2286 from thaJeztah/18.09_backport_iptables_legacy" + * Bump Go to 1.10.7 + * Fix possible nil pointer exception + * Fix gosimple + * account for removal of configs.HookState + * vndr runc 96ec217 + * Update golint tool + * debian has iptables-legacy and iptables-nft now + * Make DSR an overlay-specific driver "option" + * Set east-west load balancing to use direct routing + +------------------------------------------------------------------- Old: ---- libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382.tar.xz New: ---- libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ golang-github-docker-libnetwork.spec ++++++ --- /var/tmp/diff_new_pack.2aO24r/_old 2019-05-06 21:14:42.888666078 +0200 +++ /var/tmp/diff_new_pack.2aO24r/_new 2019-05-06 21:14:42.892666088 +0200 @@ -29,14 +29,14 @@ %endif # MANUAL: Update the git_version and git_revision -%define git_version 2cfbf9b1f98162a55829a21cc603c76072a75382 -%define git_short 2cfbf9b1f981 +%define git_version 872f0a83c98add6cae255c8859e29532febc0039 +%define git_short 872f0a83c98a # How to get the git_revision # git clone https://github.com/docker/libnetwork.git libnetwork # cd libnetwork # git checkout $git_version # git_revision=r$(git rev-list HEAD | wc -l) -%define git_revision r2711 +%define git_revision r2726 %global provider github %global provider_tld com @@ -63,7 +63,7 @@ BuildRequires: fdupes BuildRequires: golang-packaging BuildRequires: xz -BuildRequires: golang(API) = 1.10 +BuildRequires: golang(API) >= 1.10 ExcludeArch: s390 # KUBIC-SPECIFIC: This was required when upgrading from the original kubic # packaging, when everything was renamed to -kubic. It also is ++++++ _service ++++++ --- /var/tmp/diff_new_pack.2aO24r/_old 2019-05-06 21:14:42.928666186 +0200 +++ /var/tmp/diff_new_pack.2aO24r/_new 2019-05-06 21:14:42.928666186 +0200 @@ -4,7 +4,7 @@ <param name="scm">git</param> <param name="exclude">.git</param> <param name="versionformat">git.%H</param> - <param name="revision">2cfbf9b1f98162a55829a21cc603c76072a75382</param> + <param name="revision">872f0a83c98add6cae255c8859e29532febc0039</param> <param name="changesgenerate">enable</param> </service> <service name="recompress" mode="disabled"> ++++++ libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382.tar.xz -> libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/Dockerfile new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/Dockerfile --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/Dockerfile 2018-12-07 16:40:35.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/Dockerfile 2019-04-23 18:19:33.000000000 +0200 @@ -1,4 +1,4 @@ -FROM golang:1.10.2 as dev +FROM golang:1.10.7 as dev RUN apt-get update && apt-get -y install iptables \ protobuf-compiler diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/agent.go new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/agent.go --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/agent.go 2018-12-07 16:40:35.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/agent.go 2019-04-23 18:19:33.000000000 +0200 @@ -378,6 +378,9 @@ c.agent = nil c.Unlock() + // when the agent is closed the cluster provider should be cleaned up + c.SetClusterProvider(nil) + if agent == nil { return } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/default_gateway.go new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/default_gateway.go --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/default_gateway.go 2018-12-07 16:40:35.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/default_gateway.go 2019-04-23 18:19:33.000000000 +0200 @@ -181,10 +181,8 @@ defer func() { <-procGwNetwork }() n, err := c.NetworkByName(libnGWNetwork) - if err != nil { - if _, ok := err.(types.NotFoundError); ok { - n, err = c.createGWNetwork() - } + if _, ok := err.(types.NotFoundError); ok { + n, err = c.createGWNetwork() } return n, err } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/drivers/windows/overlay/joinleave_windows.go new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/drivers/windows/overlay/joinleave_windows.go --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/drivers/windows/overlay/joinleave_windows.go 2018-12-07 16:40:35.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/drivers/windows/overlay/joinleave_windows.go 2019-04-23 18:19:33.000000000 +0200 @@ -95,7 +95,10 @@ return } - d.peerAdd(nid, eid, addr.IP, addr.Mask, mac, vtep, true) + err = d.peerAdd(nid, eid, addr.IP, addr.Mask, mac, vtep, true) + if err != nil { + logrus.Errorf("peerAdd failed (%v) for ip %s with mac %s", err, addr.IP.String(), mac.String()) + } } func (d *driver) DecodeTableEntry(tablename string, key string, value []byte) (string, map[string]string) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/drivers/windows/overlay/ov_endpoint_windows.go new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/drivers/windows/overlay/ov_endpoint_windows.go --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/drivers/windows/overlay/ov_endpoint_windows.go 2018-12-07 16:40:35.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/drivers/windows/overlay/ov_endpoint_windows.go 2019-04-23 18:19:33.000000000 +0200 @@ -4,6 +4,7 @@ "encoding/json" "fmt" "net" + "sync" "github.com/Microsoft/hcsshim" "github.com/docker/docker/pkg/system" @@ -29,6 +30,13 @@ portMapping []types.PortBinding // Operation port bindings } +var ( + //Server 2016 (RS1) does not support concurrent add/delete of endpoints. Therefore, we need + //to use this mutex and serialize the add/delete of endpoints on RS1. + endpointMu sync.Mutex + windowsBuild = system.GetOSVersion().Build +) + func validateID(nid, eid string) error { if nid == "" { return fmt.Errorf("invalid network id") @@ -77,8 +85,7 @@ if networkEndpoint != nil { logrus.Debugf("Removing stale endpoint from HNS") - _, err := hcsshim.HNSEndpointRequest("DELETE", networkEndpoint.profileID, "") - + _, err := endpointRequest("DELETE", networkEndpoint.profileID, "") if err != nil { logrus.Debugf("Failed to delete stale overlay endpoint (%.7s) from hns", networkEndpoint.id) } @@ -101,8 +108,7 @@ if ep != nil { logrus.Debugf("Deleting stale endpoint %s", eid) n.deleteEndpoint(eid) - - _, err := hcsshim.HNSEndpointRequest("DELETE", ep.profileID, "") + _, err := endpointRequest("DELETE", ep.profileID, "") if err != nil { return err } @@ -165,7 +171,19 @@ return err } - pbPolicy, err := windows.ConvertPortBindings(epConnectivity.PortBindings) + ep.portMapping = epConnectivity.PortBindings + ep.portMapping, err = windows.AllocatePorts(n.portMapper, ep.portMapping, ep.addr.IP) + if err != nil { + return err + } + + defer func() { + if err != nil { + windows.ReleasePorts(n.portMapper, ep.portMapping) + } + }() + + pbPolicy, err := windows.ConvertPortBindings(ep.portMapping) if err != nil { return err } @@ -179,7 +197,7 @@ return err } - hnsresponse, err := hcsshim.HNSEndpointRequest("POST", "", string(configurationb)) + hnsresponse, err := endpointRequest("POST", "", string(configurationb)) if err != nil { return err } @@ -199,7 +217,7 @@ ep.portMapping, err = windows.ParsePortBindingPolicies(hnsresponse.Policies) if err != nil { - hcsshim.HNSEndpointRequest("DELETE", hnsresponse.Id, "") + endpointRequest("DELETE", hnsresponse.Id, "") return err } @@ -223,9 +241,11 @@ return fmt.Errorf("endpoint id %q not found", eid) } + windows.ReleasePorts(n.portMapper, ep.portMapping) + n.deleteEndpoint(eid) - _, err := hcsshim.HNSEndpointRequest("DELETE", ep.profileID, "") + _, err := endpointRequest("DELETE", ep.profileID, "") if err != nil { return err } @@ -263,3 +283,14 @@ return data, nil } + +func endpointRequest(method, path, request string) (*hcsshim.HNSEndpoint, error) { + if windowsBuild == 14393 { + endpointMu.Lock() + } + hnsresponse, err := hcsshim.HNSEndpointRequest(method, path, request) + if windowsBuild == 14393 { + endpointMu.Unlock() + } + return hnsresponse, err +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/drivers/windows/overlay/ov_network_windows.go new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/drivers/windows/overlay/ov_network_windows.go --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/drivers/windows/overlay/ov_network_windows.go 2018-12-07 16:40:35.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/drivers/windows/overlay/ov_network_windows.go 2019-04-23 18:19:33.000000000 +0200 @@ -11,6 +11,7 @@ "github.com/Microsoft/hcsshim" "github.com/docker/libnetwork/driverapi" "github.com/docker/libnetwork/netlabel" + "github.com/docker/libnetwork/portmapper" "github.com/docker/libnetwork/types" "github.com/sirupsen/logrus" ) @@ -46,6 +47,7 @@ initErr error subnets []*subnet secure bool + portMapper *portmapper.PortMapper sync.Mutex } @@ -89,10 +91,11 @@ } n := &network{ - id: id, - driver: d, - endpoints: endpointTable{}, - subnets: []*subnet{}, + id: id, + driver: d, + endpoints: endpointTable{}, + subnets: []*subnet{}, + portMapper: portmapper.New(""), } genData, ok := option[netlabel.GenericData].(map[string]string) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/drivers/windows/overlay/peerdb_windows.go new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/drivers/windows/overlay/peerdb_windows.go --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/drivers/windows/overlay/peerdb_windows.go 2018-12-07 16:40:35.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/drivers/windows/overlay/peerdb_windows.go 2019-04-23 18:19:33.000000000 +0200 @@ -67,8 +67,7 @@ } n.removeEndpointWithAddress(addr) - - hnsresponse, err := hcsshim.HNSEndpointRequest("POST", "", string(configurationb)) + hnsresponse, err := endpointRequest("POST", "", string(configurationb)) if err != nil { return err } @@ -108,7 +107,7 @@ } if updateDb { - _, err := hcsshim.HNSEndpointRequest("DELETE", ep.profileID, "") + _, err := endpointRequest("DELETE", ep.profileID, "") if err != nil { return err } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/drivers/windows/port_mapping.go new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/drivers/windows/port_mapping.go --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/drivers/windows/port_mapping.go 1970-01-01 01:00:00.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/drivers/windows/port_mapping.go 2019-04-23 18:19:33.000000000 +0200 @@ -0,0 +1,125 @@ +// +build windows + +package windows + +import ( + "bytes" + "errors" + "fmt" + "net" + + "github.com/docker/libnetwork/portmapper" + "github.com/docker/libnetwork/types" + "github.com/ishidawataru/sctp" + "github.com/sirupsen/logrus" +) + +const ( + maxAllocatePortAttempts = 10 +) + +// ErrUnsupportedAddressType is returned when the specified address type is not supported. +type ErrUnsupportedAddressType string + +func (uat ErrUnsupportedAddressType) Error() string { + return fmt.Sprintf("unsupported address type: %s", string(uat)) +} + +// AllocatePorts allocates ports specified in bindings from the portMapper +func AllocatePorts(portMapper *portmapper.PortMapper, bindings []types.PortBinding, containerIP net.IP) ([]types.PortBinding, error) { + bs := make([]types.PortBinding, 0, len(bindings)) + for _, c := range bindings { + b := c.GetCopy() + if err := allocatePort(portMapper, &b, containerIP); err != nil { + // On allocation failure, release previously allocated ports. On cleanup error, just log a warning message + if cuErr := ReleasePorts(portMapper, bs); cuErr != nil { + logrus.Warnf("Upon allocation failure for %v, failed to clear previously allocated port bindings: %v", b, cuErr) + } + return nil, err + } + bs = append(bs, b) + } + return bs, nil +} + +func allocatePort(portMapper *portmapper.PortMapper, bnd *types.PortBinding, containerIP net.IP) error { + var ( + host net.Addr + err error + ) + + // Store the container interface address in the operational binding + bnd.IP = containerIP + + // Adjust HostPortEnd if this is not a range. + if bnd.HostPortEnd == 0 { + bnd.HostPortEnd = bnd.HostPort + } + + // Construct the container side transport address + container, err := bnd.ContainerAddr() + if err != nil { + return err + } + + // Try up to maxAllocatePortAttempts times to get a port that's not already allocated. + for i := 0; i < maxAllocatePortAttempts; i++ { + if host, err = portMapper.MapRange(container, bnd.HostIP, int(bnd.HostPort), int(bnd.HostPortEnd), false); err == nil { + break + } + // There is no point in immediately retrying to map an explicitly chosen port. + if bnd.HostPort != 0 { + logrus.Warnf("Failed to allocate and map port %d-%d: %s", bnd.HostPort, bnd.HostPortEnd, err) + break + } + logrus.Warnf("Failed to allocate and map port: %s, retry: %d", err, i+1) + } + if err != nil { + return err + } + + // Save the host port (regardless it was or not specified in the binding) + switch netAddr := host.(type) { + case *net.TCPAddr: + bnd.HostPort = uint16(host.(*net.TCPAddr).Port) + break + case *net.UDPAddr: + bnd.HostPort = uint16(host.(*net.UDPAddr).Port) + break + case *sctp.SCTPAddr: + bnd.HostPort = uint16(host.(*sctp.SCTPAddr).Port) + break + default: + // For completeness + return ErrUnsupportedAddressType(fmt.Sprintf("%T", netAddr)) + } + //Windows does not support host port ranges. + bnd.HostPortEnd = bnd.HostPort + return nil +} + +// ReleasePorts releases ports specified in bindings from the portMapper +func ReleasePorts(portMapper *portmapper.PortMapper, bindings []types.PortBinding) error { + var errorBuf bytes.Buffer + + // Attempt to release all port bindings, do not stop on failure + for _, m := range bindings { + if err := releasePort(portMapper, m); err != nil { + errorBuf.WriteString(fmt.Sprintf("\ncould not release %v because of %v", m, err)) + } + } + + if errorBuf.Len() != 0 { + return errors.New(errorBuf.String()) + } + return nil +} + +func releasePort(portMapper *portmapper.PortMapper, bnd types.PortBinding) error { + // Construct the host side transport address + host, err := bnd.HostAddr() + if err != nil { + return err + } + return portMapper.Unmap(host) +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/drivers/windows/windows.go new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/drivers/windows/windows.go --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/drivers/windows/windows.go 2018-12-07 16:40:35.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/drivers/windows/windows.go 2019-04-23 18:19:33.000000000 +0200 @@ -25,6 +25,7 @@ "github.com/docker/libnetwork/discoverapi" "github.com/docker/libnetwork/driverapi" "github.com/docker/libnetwork/netlabel" + "github.com/docker/libnetwork/portmapper" "github.com/docker/libnetwork/types" "github.com/sirupsen/logrus" ) @@ -88,11 +89,12 @@ } type hnsNetwork struct { - id string - created bool - config *networkConfiguration - endpoints map[string]*hnsEndpoint // key: endpoint id - driver *driver // The network's driver + id string + created bool + config *networkConfiguration + endpoints map[string]*hnsEndpoint // key: endpoint id + driver *driver // The network's driver + portMapper *portmapper.PortMapper sync.Mutex } @@ -252,10 +254,11 @@ func (d *driver) createNetwork(config *networkConfiguration) error { network := &hnsNetwork{ - id: config.ID, - endpoints: make(map[string]*hnsEndpoint), - config: config, - driver: d, + id: config.ID, + endpoints: make(map[string]*hnsEndpoint), + config: config, + driver: d, + portMapper: portmapper.New(""), } d.Lock() @@ -610,7 +613,27 @@ endpointStruct.MacAddress = strings.Replace(macAddress.String(), ":", "-", -1) } - endpointStruct.Policies, err = ConvertPortBindings(epConnectivity.PortBindings) + portMapping := epConnectivity.PortBindings + + if n.config.Type == "l2bridge" || n.config.Type == "l2tunnel" { + ip := net.IPv4(0, 0, 0, 0) + if ifInfo.Address() != nil { + ip = ifInfo.Address().IP + } + + portMapping, err = AllocatePorts(n.portMapper, portMapping, ip) + if err != nil { + return err + } + + defer func() { + if err != nil { + ReleasePorts(n.portMapper, portMapping) + } + }() + } + + endpointStruct.Policies, err = ConvertPortBindings(portMapping) if err != nil { return err } @@ -721,6 +744,10 @@ return err } + if n.config.Type == "l2bridge" || n.config.Type == "l2tunnel" { + ReleasePorts(n.portMapper, ep.portMapping) + } + n.Lock() delete(n.endpoints, eid) n.Unlock() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/iptables/iptables.go new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/iptables/iptables.go --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/iptables/iptables.go 2018-12-07 16:40:35.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/iptables/iptables.go 2019-04-23 18:19:33.000000000 +0200 @@ -87,16 +87,11 @@ } func detectIptables() { - path, err := exec.LookPath("iptables-legacy") // debian has iptables-legacy and iptables-nft now + path, err := exec.LookPath("iptables") if err != nil { - path, err = exec.LookPath("iptables") - if err != nil { - return - } + return } - iptablesPath = path - supportsXlock = exec.Command(iptablesPath, "--wait", "-L", "-n").Run() == nil mj, mn, mc, err := GetVersion() if err != nil { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/network.go new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/network.go --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/network.go 2018-12-07 16:40:35.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/network.go 2019-04-23 18:19:33.000000000 +0200 @@ -396,11 +396,9 @@ driverOptions map[string]string opts interface{} ) - switch data.(type) { - case map[string]interface{}: - opts = data.(map[string]interface{}) - case map[string]string: - opts = data.(map[string]string) + switch t := data.(type) { + case map[string]interface{}, map[string]string: + opts = t } ba, err := json.Marshal(opts) if err != nil { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/networkdb/cluster.go new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/networkdb/cluster.go --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/networkdb/cluster.go 2018-12-07 16:40:35.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/networkdb/cluster.go 2019-04-23 18:19:33.000000000 +0200 @@ -288,7 +288,12 @@ return } - myself, _ := nDB.nodes[nDB.config.NodeID] + myself, ok := nDB.nodes[nDB.config.NodeID] + if !ok { + nDB.RUnlock() + logrus.Warnf("rejoinClusterBootstrap unable to find local node info using ID:%v", nDB.config.NodeID) + return + } bootStrapIPs := make([]string, 0, len(nDB.bootStrapIP)) for _, bootIP := range nDB.bootStrapIP { // botostrap IPs are usually IP:port from the Join diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/portallocator/portallocator_windows.go new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/portallocator/portallocator_windows.go --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/portallocator/portallocator_windows.go 1970-01-01 01:00:00.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/portallocator/portallocator_windows.go 2019-04-23 18:19:33.000000000 +0200 @@ -0,0 +1,10 @@ +package portallocator + +const ( + StartPortRange = 60000 + EndPortRange = 65000 +) + +func getDynamicPortRange() (start int, end int, err error) { + return StartPortRange, EndPortRange, nil +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/portmapper/mapper.go new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/portmapper/mapper.go --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/portmapper/mapper.go 2018-12-07 16:40:35.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/portmapper/mapper.go 2019-04-23 18:19:33.000000000 +0200 @@ -4,9 +4,7 @@ "errors" "fmt" "net" - "sync" - "github.com/docker/libnetwork/iptables" "github.com/docker/libnetwork/portallocator" "github.com/ishidawataru/sctp" "github.com/sirupsen/logrus" @@ -32,20 +30,6 @@ ErrSCTPAddrNoIP = errors.New("sctp address does not contain any IP address") ) -// PortMapper manages the network address translation -type PortMapper struct { - chain *iptables.ChainInfo - bridgeName string - - // udp:ip:port - currentMappings map[string]*mapping - lock sync.Mutex - - proxyPath string - - Allocator *portallocator.PortAllocator -} - // New returns a new instance of PortMapper func New(proxyPath string) *PortMapper { return NewWithPortAllocator(portallocator.Get(), proxyPath) @@ -60,12 +44,6 @@ } } -// SetIptablesChain sets the specified chain into portmapper -func (pm *PortMapper) SetIptablesChain(c *iptables.ChainInfo, bridgeName string) { - pm.chain = c - pm.bridgeName = bridgeName -} - // Map maps the specified container transport address to the host's network address and transport port func (pm *PortMapper) Map(container net.Addr, hostIP net.IP, hostPort int, useProxy bool) (host net.Addr, err error) { return pm.MapRange(container, hostIP, hostPort, hostPort, useProxy) @@ -174,7 +152,7 @@ containerIP, containerPort := getIPAndPort(m.container) if hostIP.To4() != nil { - if err := pm.forward(iptables.Append, m.proto, hostIP, allocatedHostPort, containerIP.String(), containerPort); err != nil { + if err := pm.AppendForwardingTableEntry(m.proto, hostIP, allocatedHostPort, containerIP.String(), containerPort); err != nil { return nil, err } } @@ -183,7 +161,7 @@ // need to undo the iptables rules before we return m.userlandProxy.Stop() if hostIP.To4() != nil { - pm.forward(iptables.Delete, m.proto, hostIP, allocatedHostPort, containerIP.String(), containerPort) + pm.DeleteForwardingTableEntry(m.proto, hostIP, allocatedHostPort, containerIP.String(), containerPort) if err := pm.Allocator.ReleasePort(hostIP, m.proto, allocatedHostPort); err != nil { return err } @@ -222,7 +200,7 @@ containerIP, containerPort := getIPAndPort(data.container) hostIP, hostPort := getIPAndPort(data.host) - if err := pm.forward(iptables.Delete, data.proto, hostIP, hostPort, containerIP.String(), containerPort); err != nil { + if err := pm.DeleteForwardingTableEntry(data.proto, hostIP, hostPort, containerIP.String(), containerPort); err != nil { logrus.Errorf("Error on iptables delete: %s", err) } @@ -248,7 +226,7 @@ for _, data := range pm.currentMappings { containerIP, containerPort := getIPAndPort(data.container) hostIP, hostPort := getIPAndPort(data.host) - if err := pm.forward(iptables.Append, data.proto, hostIP, hostPort, containerIP.String(), containerPort); err != nil { + if err := pm.AppendForwardingTableEntry(data.proto, hostIP, hostPort, containerIP.String(), containerPort); err != nil { logrus.Errorf("Error on iptables add: %s", err) } } @@ -285,10 +263,3 @@ } return nil, 0 } - -func (pm *PortMapper) forward(action iptables.Action, proto string, sourceIP net.IP, sourcePort int, containerIP string, containerPort int) error { - if pm.chain == nil { - return nil - } - return pm.chain.Forward(action, sourceIP, sourcePort, proto, containerIP, containerPort, pm.bridgeName) -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/portmapper/mapper_linux.go new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/portmapper/mapper_linux.go --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/portmapper/mapper_linux.go 1970-01-01 01:00:00.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/portmapper/mapper_linux.go 2019-04-23 18:19:33.000000000 +0200 @@ -0,0 +1,46 @@ +package portmapper + +import ( + "net" + "sync" + + "github.com/docker/libnetwork/iptables" + "github.com/docker/libnetwork/portallocator" +) + +// PortMapper manages the network address translation +type PortMapper struct { + bridgeName string + + // udp:ip:port + currentMappings map[string]*mapping + lock sync.Mutex + + proxyPath string + + Allocator *portallocator.PortAllocator + chain *iptables.ChainInfo +} + +// SetIptablesChain sets the specified chain into portmapper +func (pm *PortMapper) SetIptablesChain(c *iptables.ChainInfo, bridgeName string) { + pm.chain = c + pm.bridgeName = bridgeName +} + +// AppendForwardingTableEntry adds a port mapping to the forwarding table +func (pm *PortMapper) AppendForwardingTableEntry(proto string, sourceIP net.IP, sourcePort int, containerIP string, containerPort int) error { + return pm.forward(iptables.Append, proto, sourceIP, sourcePort, containerIP, containerPort) +} + +// DeleteForwardingTableEntry removes a port mapping from the forwarding table +func (pm *PortMapper) DeleteForwardingTableEntry(proto string, sourceIP net.IP, sourcePort int, containerIP string, containerPort int) error { + return pm.forward(iptables.Delete, proto, sourceIP, sourcePort, containerIP, containerPort) +} + +func (pm *PortMapper) forward(action iptables.Action, proto string, sourceIP net.IP, sourcePort int, containerIP string, containerPort int) error { + if pm.chain == nil { + return nil + } + return pm.chain.Forward(action, sourceIP, sourcePort, proto, containerIP, containerPort, pm.bridgeName) +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/portmapper/mapper_windows.go new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/portmapper/mapper_windows.go --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/portmapper/mapper_windows.go 1970-01-01 01:00:00.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/portmapper/mapper_windows.go 2019-04-23 18:19:33.000000000 +0200 @@ -0,0 +1,31 @@ +package portmapper + +import ( + "net" + "sync" + + "github.com/docker/libnetwork/portallocator" +) + +// PortMapper manages the network address translation +type PortMapper struct { + bridgeName string + + // udp:ip:port + currentMappings map[string]*mapping + lock sync.Mutex + + proxyPath string + + Allocator *portallocator.PortAllocator +} + +// AppendForwardingTableEntry adds a port mapping to the forwarding table +func (pm *PortMapper) AppendForwardingTableEntry(proto string, sourceIP net.IP, sourcePort int, containerIP string, containerPort int) error { + return nil +} + +// DeleteForwardingTableEntry removes a port mapping from the forwarding table +func (pm *PortMapper) DeleteForwardingTableEntry(proto string, sourceIP net.IP, sourcePort int, containerIP string, containerPort int) error { + return nil +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/portmapper/proxy_windows.go new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/portmapper/proxy_windows.go --- old/libnetwork-git.2cfbf9b1f98162a55829a21cc603c76072a75382/portmapper/proxy_windows.go 1970-01-01 01:00:00.000000000 +0100 +++ new/libnetwork-git.872f0a83c98add6cae255c8859e29532febc0039/portmapper/proxy_windows.go 2019-04-23 18:19:33.000000000 +0200 @@ -0,0 +1,10 @@ +package portmapper + +import ( + "errors" + "net" +) + +func newProxyCommand(proto string, hostIP net.IP, hostPort int, containerIP net.IP, containerPort int, proxyPath string) (userlandProxy, error) { + return nil, errors.New("proxy is unsupported on windows") +}