func getDefaultGatewayIface() *net.Interface { log.V(1).Infof("Attempting to retrieve IP route info from netlink") routes, err := netlink.NetworkGetRoutes() if err != nil { log.V(1).Infof("Unable to detect default interface: %v", err) return nil } if len(routes) == 0 { log.V(1).Infof("Netlink returned zero routes") return nil } for _, route := range routes { if route.Default { if route.Iface == nil { log.V(1).Infof("Found default route but could not determine interface") } log.V(1).Infof("Found default route with interface %v", route.Iface.Name) return route.Iface } } log.V(1).Infof("Unable to find default route") return nil }
func getRoutes(w rest.ResponseWriter, req *rest.Request) { routes, err := netlink.NetworkGetRoutes() if err != nil { log.Printf(err.Error()) rest.Error(w, err.Error(), http.StatusInternalServerError) return } w.WriteJson(routes) }
// getDefaultRouteMtu returns the MTU for the default route's interface. func getDefaultRouteMtu() (int, error) { routes, err := netlink.NetworkGetRoutes() if err != nil { return 0, err } for _, r := range routes { if r.Default { return r.Iface.MTU, nil } } return 0, errNoDefaultRoute }
func getDefaultGatewayIfaceName() (string, error) { routes, err := netlink.NetworkGetRoutes() if err != nil { return "", err } for _, route := range routes { if route.Default { if route.Iface == nil { return "", errors.New("found default route but could not determine interface") } return route.Iface.Name, nil } } return "", errors.New("unable to find default route") }
func DefaultExternalIP() (string, error) { routes, err := netlink.NetworkGetRoutes() if err != nil { return "", err } var iface *net.Interface for _, r := range routes { if r.Default { iface = r.Iface break } } if iface == nil { return "", errors.New("config: Unable to identify default network interface") } addrs, err := iface.Addrs() if err != nil { return "", err } if len(addrs) == 0 { return "", errors.New("config: No IPs configured on default interface") } var defaultIP net.IP for _, a := range addrs { ip, _, _ := net.ParseCIDR(a.String()) if ip.To4() != nil && ip.IsGlobalUnicast() { defaultIP = ip break } } if defaultIP == nil { return "", errors.New("config: Unable to determine default IPv4 address") } return defaultIP.String(), nil }