From 55adbae7831a0e7610d4ac01237ab32eceaf7c37 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 26 Aug 2019 11:59:41 +0200 Subject: [PATCH] bump hashicorp/go-sockaddr v1.0.2 full diff: https://github.com/hashicorp/go-sockaddr/compare/6d291a969b86c4b633730bfc6b8b9d64c3aafed9...v1.0.2 Relevant changes: - hashicorp/go-sockaddr#25 Add android os - hashicorp/go-sockaddr#28 Add go.mod Signed-off-by: Sebastiaan van Stijn --- libnetwork/vendor.conf | 2 +- .../github.com/hashicorp/go-sockaddr/go.mod | 8 ++++ .../hashicorp/go-sockaddr/ifaddrs.go | 41 +++++++++++++++---- .../go-sockaddr/route_info_android.go | 34 +++++++++++++++ .../hashicorp/go-sockaddr/route_info_linux.go | 2 + 5 files changed, 77 insertions(+), 10 deletions(-) create mode 100644 libnetwork/vendor/github.com/hashicorp/go-sockaddr/go.mod create mode 100644 libnetwork/vendor/github.com/hashicorp/go-sockaddr/route_info_android.go diff --git a/libnetwork/vendor.conf b/libnetwork/vendor.conf index 0bc69399befb5..78b8379fd4ca7 100644 --- a/libnetwork/vendor.conf +++ b/libnetwork/vendor.conf @@ -31,7 +31,7 @@ github.com/hashicorp/go-msgpack 71c2886f5a673a35f909803f38ece5810165097b github.com/hashicorp/go-multierror 886a7fbe3eb1c874d46f623bfa70af45f425b3d1 # v1.0.0 github.com/hashicorp/memberlist 3d8438da9589e7b608a83ffac1ef8211486bcb7c github.com/sean-/seed e2103e2c35297fb7e17febb81e49b312087a2372 -github.com/hashicorp/go-sockaddr 6d291a969b86c4b633730bfc6b8b9d64c3aafed9 +github.com/hashicorp/go-sockaddr c7188e74f6acae5a989bdc959aa779f8b9f42faf # v1.0.2 github.com/hashicorp/serf 598c54895cc5a7b1a24a398d635e8c0ea0959870 github.com/mattn/go-shellwords 02e3cf038dcea8290e44424da473dd12be796a8a # v1.0.3 github.com/miekg/dns e57bf427e68187a27e22adceac868350d7a7079b # v1.0.7 diff --git a/libnetwork/vendor/github.com/hashicorp/go-sockaddr/go.mod b/libnetwork/vendor/github.com/hashicorp/go-sockaddr/go.mod new file mode 100644 index 0000000000000..21f8d8e8e758e --- /dev/null +++ b/libnetwork/vendor/github.com/hashicorp/go-sockaddr/go.mod @@ -0,0 +1,8 @@ +module github.com/hashicorp/go-sockaddr + +require ( + github.com/hashicorp/errwrap v1.0.0 + github.com/mitchellh/cli v1.0.0 + github.com/mitchellh/go-wordwrap v1.0.0 + github.com/ryanuber/columnize v2.1.0+incompatible +) diff --git a/libnetwork/vendor/github.com/hashicorp/go-sockaddr/ifaddrs.go b/libnetwork/vendor/github.com/hashicorp/go-sockaddr/ifaddrs.go index 2a706c34e92b8..80f61bef6808b 100644 --- a/libnetwork/vendor/github.com/hashicorp/go-sockaddr/ifaddrs.go +++ b/libnetwork/vendor/github.com/hashicorp/go-sockaddr/ifaddrs.go @@ -1197,23 +1197,46 @@ func parseDefaultIfNameFromRoute(routeOut string) (string, error) { // parseDefaultIfNameFromIPCmd parses the default interface from ip(8) for // Linux. func parseDefaultIfNameFromIPCmd(routeOut string) (string, error) { + parsedLines := parseIfNameFromIPCmd(routeOut) + for _, parsedLine := range parsedLines { + if parsedLine[0] == "default" && + parsedLine[1] == "via" && + parsedLine[3] == "dev" { + ifName := strings.TrimSpace(parsedLine[4]) + return ifName, nil + } + } + + return "", errors.New("No default interface found") +} + +// parseDefaultIfNameFromIPCmdAndroid parses the default interface from ip(8) for +// Android. +func parseDefaultIfNameFromIPCmdAndroid(routeOut string) (string, error) { + parsedLines := parseIfNameFromIPCmd(routeOut) + if (len(parsedLines) > 0) { + ifName := strings.TrimSpace(parsedLines[0][4]) + return ifName, nil + } + + return "", errors.New("No default interface found") +} + + +// parseIfNameFromIPCmd parses interfaces from ip(8) for +// Linux. +func parseIfNameFromIPCmd(routeOut string) [][]string { lines := strings.Split(routeOut, "\n") re := whitespaceRE.Copy() + parsedLines := make([][]string, 0, len(lines)) for _, line := range lines { kvs := re.Split(line, -1) if len(kvs) < 5 { continue } - - if kvs[0] == "default" && - kvs[1] == "via" && - kvs[3] == "dev" { - ifName := strings.TrimSpace(kvs[4]) - return ifName, nil - } + parsedLines = append(parsedLines, kvs) } - - return "", errors.New("No default interface found") + return parsedLines } // parseDefaultIfNameWindows parses the default interface from `netstat -rn` and diff --git a/libnetwork/vendor/github.com/hashicorp/go-sockaddr/route_info_android.go b/libnetwork/vendor/github.com/hashicorp/go-sockaddr/route_info_android.go new file mode 100644 index 0000000000000..9885915a6bada --- /dev/null +++ b/libnetwork/vendor/github.com/hashicorp/go-sockaddr/route_info_android.go @@ -0,0 +1,34 @@ +package sockaddr + +import ( + "errors" + "os/exec" +) + +type routeInfo struct { + cmds map[string][]string +} + +// NewRouteInfo returns a Android-specific implementation of the RouteInfo +// interface. +func NewRouteInfo() (routeInfo, error) { + return routeInfo{ + cmds: map[string][]string{"ip": {"/system/bin/ip", "route", "get", "8.8.8.8"}}, + }, nil +} + +// GetDefaultInterfaceName returns the interface name attached to the default +// route on the default interface. +func (ri routeInfo) GetDefaultInterfaceName() (string, error) { + out, err := exec.Command(ri.cmds["ip"][0], ri.cmds["ip"][1:]...).Output() + if err != nil { + return "", err + } + + + var ifName string + if ifName, err = parseDefaultIfNameFromIPCmdAndroid(string(out)); err != nil { + return "", errors.New("No default interface found") + } + return ifName, nil +} diff --git a/libnetwork/vendor/github.com/hashicorp/go-sockaddr/route_info_linux.go b/libnetwork/vendor/github.com/hashicorp/go-sockaddr/route_info_linux.go index c2ec91eaf456e..b62ce6ecb2178 100644 --- a/libnetwork/vendor/github.com/hashicorp/go-sockaddr/route_info_linux.go +++ b/libnetwork/vendor/github.com/hashicorp/go-sockaddr/route_info_linux.go @@ -1,3 +1,5 @@ +// +build !android + package sockaddr import (