func (d *driver) findHnsNetwork(n *network) error { ln, err := d.getLocalNetworkFromStore(n.id) if err != nil { return err } if ln == nil { subnets := []hcsshim.Subnet{} for _, s := range n.subnets { subnet := hcsshim.Subnet{ AddressPrefix: s.subnetIP.String(), } if s.gwIP != nil { subnet.GatewayAddress = s.gwIP.IP.String() } vsidPolicy, err := json.Marshal(hcsshim.VsidPolicy{ Type: "VSID", VSID: uint(s.vni), }) if err != nil { return err } subnet.Policies = append(subnet.Policies, vsidPolicy) subnets = append(subnets, subnet) } network := &hcsshim.HNSNetwork{ Name: n.name, Type: d.Type(), Subnets: subnets, NetworkAdapterName: n.interfaceName, } configurationb, err := json.Marshal(network) if err != nil { return err } configuration := string(configurationb) logrus.Infof("HNSNetwork Request =%v", configuration) hnsresponse, err := hcsshim.HNSNetworkRequest("POST", "", configuration) if err != nil { return err } n.hnsId = hnsresponse.Id n.providerAddress = hnsresponse.ManagementIP // Save local host specific info if err := d.writeLocalNetworkToStore(n); err != nil { return fmt.Errorf("failed to update data store for network %v: %v", n.id, err) } } else { n.hnsId = ln.hnsID n.providerAddress = ln.providerAddress } return nil }