diff --git a/backend/vxlan/device_windows.go b/backend/vxlan/device_windows.go index b77cb810b4..fc8d1a9744 100644 --- a/backend/vxlan/device_windows.go +++ b/backend/vxlan/device_windows.go @@ -18,6 +18,7 @@ import ( "encoding/json" "fmt" "github.com/Microsoft/hcsshim" + "github.com/Microsoft/hcsshim/hcn" "github.com/buger/jsonparser" "github.com/coreos/flannel/pkg/ip" log "github.com/golang/glog" @@ -129,7 +130,30 @@ func ensureNetwork(expectedNetwork *hcsshim.HNSNetwork, expectedVSID int64, expe } log.Infof("Created HNSNetwork %s", networkName) - return newNetwork, nil + existingNetwork = newNetwork + } + + existingNetworkV2, err := hcn.GetNetworkByID(existingNetwork.Id) + if err != nil { + return nil, errors.Annotatef(err, "Could not find vxlan0 in V2") + } + + addHostRoute := true + for _, policy := range existingNetworkV2.Policies { + if policy.Type == hcn.HostRoute { + addHostRoute = false + } + } + if addHostRoute { + hostRoutePolicy := hcn.NetworkPolicy{ + Type: hcn.HostRoute, + Settings: []byte("{}"), + } + + networkRequest := hcn.PolicyNetworkRequest{ + Policies: []hcn.NetworkPolicy{hostRoutePolicy}, + } + existingNetworkV2.AddPolicy(networkRequest) } return existingNetwork, nil diff --git a/backend/vxlan/vxlan_windows.go b/backend/vxlan/vxlan_windows.go index ca02d6e63d..9928b7c1aa 100644 --- a/backend/vxlan/vxlan_windows.go +++ b/backend/vxlan/vxlan_windows.go @@ -127,6 +127,11 @@ func (be *VXLANBackend) RegisterNetwork(ctx context.Context, wg sync.WaitGroup, return nil, fmt.Errorf("Cannot get HNS networks [%+v]", err) } + err = hcn.RemoteSubnetSupported() + if err != nil { + return nil, err + } + var remoteDrMac string var providerAddress string for _, hnsNetwork := range hnsNetworks {