On 8/7/12 6:14 AM, "Hugo Trippaers" <htrippa...@schubergphilis.com> wrote:
>Heya, > >I'm trying to get my head around something and would welcome some >feedback. > >The use case I'm currently working with is related to internal networks. >I have serveral use cases that call for internal networks that have no >connection to the outside world. Say I have a couple of webservers with >one nic in a sourcenat-ted network and one nic in a dedicated DB network. >And a couple of DB servers that are only located in the DB network. (A >similar scenario is where the VMs exist in an already existing VLAN or >bridged network using a Nicira Nvp Gateway) > >As admin I have created a networkoffering with just DHCP, DNS and >UserData enabled and no other services. As a domain-admin I can create a >network based on that offering via the API and give it an ip range that I >want. When creating a VM in that network I get a message saying that I >can allocate an address. > >If I create this network as a domain-admin the last step in >createNetwork(CreateNetworkCmd) in NetworkManagerImpl, the call to >createVlanAndPublicIpRange(), is skipped. This is OK as it is an internal >network for domain. When creating the VM the GuestNetworkGuru (line 402) >assumes that it should get an IP using the allocateDirectIp call. This >goes wrong as there are no IP's in the "public" pool for this lan. > >I would like to change this piece in GuestNetworkGuru to check if the >public range is in the public ip table and if it's not use the >acquireGuestIpAddress call to reserve an IP. Hugo, there is a difference in how we maintain ip addresses for Isolated networks and Shared networks. 1) For Isolated networks, any IP address from the CIDR defined on the network level, can be used for vm deployment. So whenever acquireGuestIpAddress is called, we: * get the network cidr * figure out all ip addresses used from this cidr by existing vms - this info it taken from Nics table. Put these ip addresses to avoid set. * randomly pick up any free ip address (considering the avoid set) from the cidr space. 2) For Shared networks, the IP ranges are kept in user_ip_address table. There can be non-contiguous ip ranges - you can add every range using createVlanIpRange admin API. And the ip allocation algorithm is quite different here, as we can't just rely on the cidr and assume that all ip addresses from the cidr can be used as we do in Isolated network case. Every time we have to allocate ip address from the Shared range for the vm, we look at the user_ip_address table and pick up any FREE ip address from the network. If there are no free ip addresses left, admin has to add more using createVlanIpRange API. So we can't use acquireGuestIpAddress call for Shared networks. Let me know if the explanation is clear enough, or more details are needed. -Alena. >But as I'm not completely sure about the reasoning behind this I would >like some feedback on my reasoning before I break stuff in other places >:-) > >Cheers, > >Hugo > > >