diff --git a/server/if_utils.go b/server/if_utils.go new file mode 100644 index 00000000..fff51d97 --- /dev/null +++ b/server/if_utils.go @@ -0,0 +1,35 @@ +package weavedns + +import ( + "fmt" + "log" + "net" + "time" +) + +func ensureInterface(ifaceName string, wait int) (iface *net.Interface, err error) { + iface, err = findInterface(ifaceName) + if err == nil || wait == 0 { + return + } + log.Println("Waiting for interface", ifaceName, "to come up") + for ; err != nil && wait > 0; wait -= 1 { + time.Sleep(1 * time.Second) + iface, err = findInterface(ifaceName) + } + if err == nil { + log.Println("Interface", ifaceName, "is up") + } + return +} + +func findInterface(ifaceName string) (iface *net.Interface, err error) { + iface, err = net.InterfaceByName(ifaceName) + if err != nil { + return iface, fmt.Errorf("Unable to find interface %s", ifaceName) + } + if 0 == (net.FlagUp & iface.Flags) { + return iface, fmt.Errorf("Interface %s is not up", ifaceName) + } + return +} diff --git a/server/server.go b/server/server.go index 357ac196..2753ec14 100644 --- a/server/server.go +++ b/server/server.go @@ -5,40 +5,12 @@ import ( "github.com/miekg/dns" "log" "net" - "time" ) const ( LOCAL_DOMAIN = "weave" ) -func ensureInterface(ifaceName string, wait int) (iface *net.Interface, err error) { - iface, err = findInterface(ifaceName) - if err == nil || wait == 0 { - return - } - log.Println("Waiting for interface", ifaceName, "to come up") - for ; err != nil && wait > 0; wait -= 1 { - time.Sleep(1 * time.Second) - iface, err = findInterface(ifaceName) - } - if err == nil { - log.Println("Interface", ifaceName, "is up") - } - return -} - -func findInterface(ifaceName string) (iface *net.Interface, err error) { - iface, err = net.InterfaceByName(ifaceName) - if err != nil { - return iface, fmt.Errorf("Unable to find interface %s", ifaceName) - } - if 0 == (net.FlagUp & iface.Flags) { - return iface, fmt.Errorf("Interface %s is not up", ifaceName) - } - return -} - func makeDNSFailResponse(r *dns.Msg) *dns.Msg { m := new(dns.Msg) m.SetReply(r)