github.com/jingleWang/moby@v1.13.1/daemon/cluster/listen_addr_solaris.go (about) 1 package cluster 2 3 import ( 4 "bufio" 5 "fmt" 6 "net" 7 "os/exec" 8 "strings" 9 ) 10 11 func (c *Cluster) resolveSystemAddr() (net.IP, error) { 12 defRouteCmd := "/usr/sbin/ipadm show-addr -p -o addr " + 13 "`/usr/sbin/route get default | /usr/bin/grep interface | " + 14 "/usr/bin/awk '{print $2}'`" 15 out, err := exec.Command("/usr/bin/bash", "-c", defRouteCmd).Output() 16 if err != nil { 17 return nil, fmt.Errorf("cannot get default route: %v", err) 18 } 19 20 defInterface := strings.SplitN(string(out), "/", 2) 21 defInterfaceIP := net.ParseIP(defInterface[0]) 22 23 return defInterfaceIP, nil 24 } 25 26 func listSystemIPs() []net.IP { 27 var systemAddrs []net.IP 28 cmd := exec.Command("/usr/sbin/ipadm", "show-addr", "-p", "-o", "addr") 29 cmdReader, err := cmd.StdoutPipe() 30 if err != nil { 31 return nil 32 } 33 34 if err := cmd.Start(); err != nil { 35 return nil 36 } 37 38 scanner := bufio.NewScanner(cmdReader) 39 go func() { 40 for scanner.Scan() { 41 text := scanner.Text() 42 nameAddrPair := strings.SplitN(text, "/", 2) 43 // Let go of loopback interfaces and docker interfaces 44 systemAddrs = append(systemAddrs, net.ParseIP(nameAddrPair[0])) 45 } 46 }() 47 48 if err := scanner.Err(); err != nil { 49 fmt.Printf("scan underwent err: %+v\n", err) 50 } 51 52 if err := cmd.Wait(); err != nil { 53 fmt.Printf("run command wait: %+v\n", err) 54 } 55 56 return systemAddrs 57 }