pkg/netutil/routes_linux.go
func parsePREFSRC(m *syscall.NetlinkMessage) (host string, oif uint32, err error) {
	var attrs []syscall.NetlinkRouteAttr
	attrs, err = syscall.ParseNetlinkRouteAttr(m)
	if err != nil {
		return "", 0, err
	}

	for _, attr := range attrs {
		if attr.Attr.Type == syscall.RTA_PREFSRC {
			host = net.IP(attr.Value).String()
		}
		if attr.Attr.Type == syscall.RTA_OIF {
			oif = cpuutil.ByteOrder().Uint32(attr.Value)
		}
		if host != "" && oif != uint32(0) {
			break
		}
	}

	if oif == 0 {
		err = errNoDefaultRoute
	}
	return host, oif, err
}
func parsePREFSRC(m *syscall.NetlinkMessage) (host string, oif uint32, err error) {
	var attrs []syscall.NetlinkRouteAttr
	attrs, err = syscall.ParseNetlinkRouteAttr(m)
	if err != nil {
		return "", 0, err
	}

	for _, attr := range attrs {
		if attr.Attr.Type == syscall.RTA_PREFSRC {
			host = net.IP(attr.Value).String()
		}
		if attr.Attr.Type == syscall.RTA_OIF {
			oif = cpuutil.ByteOrder().Uint32(attr.Value)
		}
		if host != "" && oif != uint32(0) {
			break
		}
	}

	if oif == 0 {
		err = errNoDefaultRoute
	}
	return host, oif, err
}
func parsePREFSRC ( m * syscall . NetlinkMessage ) ( host string , oif uint32 , err error ) { var attrs [ ] syscall . NetlinkRouteAttr attrs , err = syscall . ParseNetlinkRouteAttr ( m ) if err != nil { return " " , 0 , err } for _ , attr := range attrs { if attr . Attr . Type == syscall . RTA_PREFSRC { host = net . IP ( attr . Value ) . String ( ) } if attr . Attr . Type == syscall . RTA_OIF { oif = cpuutil . ByteOrder ( ) . Uint32 ( attr . Value ) } if host != " " && oif != uint32 ( 0 ) { break } } if oif == 0 { err = errNoDefaultRoute } return host , oif , err }
// parsePREFSRC returns preferred source address and output interface index (RTA_OIF).
parsePREFSRC returns preferred source address and output interface index ( RTA_OIF ) .