1// +build darwin dragonfly freebsd netbsd openbsd 2 3package sockaddr 4 5import "os/exec" 6 7var cmds map[string][]string = map[string][]string{ 8 "route": {"/sbin/route", "-n", "get", "default"}, 9} 10 11type routeInfo struct { 12 cmds map[string][]string 13} 14 15// NewRouteInfo returns a BSD-specific implementation of the RouteInfo 16// interface. 17func NewRouteInfo() (routeInfo, error) { 18 return routeInfo{ 19 cmds: cmds, 20 }, nil 21} 22 23// GetDefaultInterfaceName returns the interface name attached to the default 24// route on the default interface. 25func (ri routeInfo) GetDefaultInterfaceName() (string, error) { 26 out, err := exec.Command(cmds["route"][0], cmds["route"][1:]...).Output() 27 if err != nil { 28 return "", err 29 } 30 31 var ifName string 32 if ifName, err = parseDefaultIfNameFromRoute(string(out)); err != nil { 33 return "", err 34 } 35 return ifName, nil 36} 37