aboutsummaryrefslogtreecommitdiffstats
path: root/Godeps/_workspace/src/github.com/jackpal/gateway/gateway_darwin.go
diff options
context:
space:
mode:
Diffstat (limited to 'Godeps/_workspace/src/github.com/jackpal/gateway/gateway_darwin.go')
-rw-r--r--Godeps/_workspace/src/github.com/jackpal/gateway/gateway_darwin.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/Godeps/_workspace/src/github.com/jackpal/gateway/gateway_darwin.go b/Godeps/_workspace/src/github.com/jackpal/gateway/gateway_darwin.go
new file mode 100644
index 000000000..fc6ef68d9
--- /dev/null
+++ b/Godeps/_workspace/src/github.com/jackpal/gateway/gateway_darwin.go
@@ -0,0 +1,40 @@
+package gateway
+
+import (
+ "bytes"
+ "io/ioutil"
+ "net"
+ "os/exec"
+)
+
+func DiscoverGateway() (ip net.IP, err error) {
+ routeCmd := exec.Command("route", "-n", "get", "0.0.0.0")
+ stdOut, err := routeCmd.StdoutPipe()
+ if err != nil {
+ return
+ }
+ if err = routeCmd.Start(); err != nil {
+ return
+ }
+ output, err := ioutil.ReadAll(stdOut)
+ if err != nil {
+ return
+ }
+
+ // Darwin route out format is always like this:
+ // route to: default
+ // destination: default
+ // mask: default
+ // gateway: 192.168.1.1
+ outputLines := bytes.Split(output, []byte("\n"))
+ for _, line := range outputLines {
+ if bytes.Contains(line, []byte("gateway:")) {
+ gatewayFields := bytes.Fields(line)
+ ip = net.ParseIP(string(gatewayFields[1]))
+ break
+ }
+ }
+
+ err = routeCmd.Wait()
+ return
+}