Hi Sridhar, NetworkGuru designs the L2/L3 network for CloudStack. NetworkElement provides a network service to CloudStack.
It works as follows: CloudStack talks to NG to get a network that can actually be implemented by the underlying physical networks and then it informs all of the NEs that this network is setup so the NEs can setup appropriately. At Network setup time, all NG needs to provide an isolation URI. This isolation URI is sent to the hypervisor with the VM's information. On a VM deployment, CS follows the same model. It first talks to NG to get the right ip address and then it announces to all the elements that this VM is coming online. So it really depends on what you want to do. If you want to control L2/L3 networking and be responsible for issuing ip addresses and isolation technology, NetworkGuru is your guy to replace. If you're providing L3-L7 services such as firewall, load balancing, etc, NetworkElement is the place to change. --Alex > -----Original Message----- > From: Sridhar Devarapalli [mailto:srid...@bigswitch.com] > Sent: Wednesday, October 03, 2012 12:01 PM > To: cloudstack-dev@incubator.apache.org > Subject: Question on NetGuru vs Network Element > > Hi, > I have a question on which component a network service provider for > Cloudstack should be developing - is it a Network Guru or Network element? > I know that it is definitely necessary to develop a network element. But I > though that by default, Cloudstack virtual router will provide the basic > NetGuru functions (IPAM, DHCP, DNS etc). So didn't see a need to develop > the NetGuru API. > > However, looking through a plugin implementation, I noticed that a vendor > implemented all the methods of the Network Element as well as the > "implement" method of the NetGuru. It seems like the only thing that the > vendor was doing was to create a logical network in the NetGuru implement > method. My question is whether this extra step is necessary. > > My understanding of the workflow for creating a network through a network > provider is as follows - > > NetworkElement.Implement( ) - Create the specified network on the that > specific Network element. This method is called when the first VM of the > network is brought up. > > NetworkElement.Prepare( ) - Add the VM to the specified network. This > method is called whenever a new VM boots up in that network > > NetworkElement.Release( ) - Remove the VM from the specified network. > This method is called whenever a VM is shutdown. > > So can someone please clarify if this workflow seems right (and sufficient) > and if there's anything that I'm missing? Really don't see why I need to > implement the NetGuru. > > thanks! > Sridhar