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