Browse Source

flannel: Get flannel running on windows

Joel Roggeman 7 years ago
parent
commit
8a5dd04f72
2 changed files with 38 additions and 7 deletions
  1. 1 0
      .gitignore
  2. 37 7
      pkg/ip/iface_windows.go

+ 1 - 0
.gitignore

@@ -5,6 +5,7 @@ dist/here.txt
 cover.out
 .editorconfig
 .idea/
+default.etcd/
 flannel.exe
 bash_unit
 dist/qemu-*

+ 37 - 7
pkg/ip/iface_windows.go

@@ -15,22 +15,52 @@
 package ip
 
 import (
-	"errors"
+	netsh "github.com/rakelkar/gonetsh/netsh"
 	"net"
 )
 
 func GetIfaceIP4Addr(iface *net.Interface) (net.IP, error) {
-	return nil, errors.New("GetIfaceIP4Addr not implemented for this platform")
-}
+	// get ip address for the interface
+	// prefer global unicast to link local addresses
+	netHelper := netsh.New(nil)
+	ifaceDetails, err := netHelper.GetInterfaceByName(iface.Name)
+	if err != nil {
+		return nil, err
+	}
+
+	ifAddr := net.ParseIP(ifaceDetails.IpAddress)
 
-func GetIfaceIP4AddrMatch(iface *net.Interface, matchAddr net.IP) error {
-	return errors.New("GetIfaceIP4AddrMatch not implemented for this platform")
+	return ifAddr, nil
 }
 
 func GetDefaultGatewayIface() (*net.Interface, error) {
-	return nil, errors.New("GetDefaultGatewayIface not implemented for this platform")
+	netHelper := netsh.New(nil)
+
+	defaultIfaceName, err := netHelper.GetDefaultGatewayIfaceName()
+	if err != nil {
+		return nil, err
+	}
+
+	iface, err := net.InterfaceByName(defaultIfaceName)
+	if err != nil {
+		return nil, err
+	}
+
+	return iface, nil
 }
 
 func GetInterfaceByIP(ip net.IP) (*net.Interface, error) {
-	return nil, errors.New("GetInterfaceByIp not implemented for this platform")
+	netHelper := netsh.New(nil)
+
+	ifaceDetails, err := netHelper.GetInterfaceByIP(ip.String())
+	if err != nil {
+		return nil, err
+	}
+
+	iface, err := net.InterfaceByName(ifaceDetails.Name)
+	if err != nil {
+		return nil, err
+	}
+
+	return iface, nil
 }