Browse Source

Merge pull request #1215 from adelina-t/fix_vni_windows

Use remote VNI for Windows
Rajat Chopra 4 years ago
parent
commit
385faf9623
3 changed files with 12 additions and 4 deletions
  1. 5 3
      backend/vxlan/vxlan.go
  2. 1 0
      backend/vxlan/vxlan_network.go
  3. 6 1
      backend/vxlan/vxlan_network_windows.go

+ 5 - 3
backend/vxlan/vxlan.go

@@ -88,8 +88,10 @@ func New(sm subnet.Manager, extIface *backend.ExternalInterface) (backend.Backen
 	return backend, nil
 }
 
-func newSubnetAttrs(publicIP net.IP, mac net.HardwareAddr) (*subnet.LeaseAttrs, error) {
-	data, err := json.Marshal(&vxlanLeaseAttrs{hardwareAddr(mac)})
+func newSubnetAttrs(publicIP net.IP, vnid uint16, mac net.HardwareAddr) (*subnet.LeaseAttrs, error) {
+	data, err := json.Marshal(&vxlanLeaseAttrs{
+		VNI:     vnid,
+		VtepMAC: hardwareAddr(mac)})
 	if err != nil {
 		return nil, err
 	}
@@ -136,7 +138,7 @@ func (be *VXLANBackend) RegisterNetwork(ctx context.Context, wg *sync.WaitGroup,
 	}
 	dev.directRouting = cfg.DirectRouting
 
-	subnetAttrs, err := newSubnetAttrs(be.extIface.ExtAddr, dev.MACAddr())
+	subnetAttrs, err := newSubnetAttrs(be.extIface.ExtAddr, uint16(cfg.VNI), dev.MACAddr())
 	if err != nil {
 		return nil, err
 	}

+ 1 - 0
backend/vxlan/vxlan_network.go

@@ -84,6 +84,7 @@ func (nw *network) MTU() int {
 }
 
 type vxlanLeaseAttrs struct {
+	VNI     uint16
 	VtepMAC hardwareAddr
 }
 

+ 6 - 1
backend/vxlan/vxlan_network_windows.go

@@ -101,6 +101,11 @@ func (nw *network) handleSubnetEvents(batch []subnet.Event) {
 			continue
 		}
 
+		if vxlanAttrs.VNI < 4096 {
+			log.Error("VNI is required to greater than or equal to 4096 on Windows.")
+			continue
+		}
+
 		hnsnetwork, err := hcn.GetNetworkByName(nw.dev.link.Name)
 		if err != nil {
 			log.Errorf("Unable to find network %v, error: %v", nw.dev.link.Name, err)
@@ -109,7 +114,7 @@ func (nw *network) handleSubnetEvents(batch []subnet.Event) {
 		managementIp := event.Lease.Attrs.PublicIP.String()
 
 		networkPolicySettings := hcn.RemoteSubnetRoutePolicySetting{
-			IsolationId:                 4096,
+			IsolationId:                 vxlanAttrs.VNI,
 			DistributedRouterMacAddress: net.HardwareAddr(vxlanAttrs.VtepMAC).String(),
 			ProviderAddress:             managementIp,
 			DestinationPrefix:           event.Lease.Subnet.String(),