> -----Original Message----- > From: Marcus Sorensen [mailto:shadow...@gmail.com] > Sent: Friday, August 31, 2012 1:58 PM > To: Edison Su > Cc: cloudstack-dev@incubator.apache.org; Anthony Xu; Kelven Yang; > Vijayendra Bhamidipati > Subject: Re: VPC for KVM (was VM router spawning multiple public nics) > > Ok, I've gotten to most of the list and things seem to be working. > Nics plug, Gateway IPs add, networks create, SNATs working, ACLs > working. The ones I haven't gotten to are: > > *Site2SiteVpnCfgCommand > > and two which weren't on the original list that I just came across > (will check for others): > *SetPortForwardingRulesVpcCommand > *CheckS2SVpnConnectionsCommand > *SetStaticRouteCommand
The commands related to site2site VPN can be finished later, as it needs more complicated setup to test. But I'd like to get SetPortForwardingRulesVpcCommand and SetStaticRouteCommand working. > > In addition, the following observations have been made and not yet > fixed. If anyone has feedback on these (even a 'yeah, that doesn't > work', or 'hmm, that should be working') so I can gauge whether I > should dig into them or not I'd appreciate it. I don't want to break > something that should be working or is working for someone else. > > * listNetworkACLs always returns an empty listnetworkaclsresponse > * not getting default ACLs, not getting any with new tiers/vms, > however setting ACLs via API works > * password server is broken (saw the other thread where it's a dev > binding issue... is someone actively looking at this?) > * static route button in UI doesn't do anything when clicked (I would > expect at least a dialogue or a fail message because the > SetStaticRouteCommand is missing) That's ok, seems all of these "issues" are on the management server side. Alena, could you help to take a look at, are they real issue? > > > On Fri, Aug 31, 2012 at 1:40 PM, Edison Su <edison...@citrix.com> wrote: > > > > > >> -----Original Message----- > >> From: Marcus Sorensen [mailto:shadow...@gmail.com] > >> Sent: Thursday, August 30, 2012 10:21 PM > >> To: Edison Su > >> Cc: cloudstack-dev@incubator.apache.org; Anthony Xu; Kelven Yang; > >> Vijayendra Bhamidipati > >> Subject: Re: VPC for KVM (was VM router spawning multiple public > nics) > >> > >> I've made some good progress today, I'll probably have it all > working > >> tomorrow, but I have a question. Looking at the API command > >> associateIpAddress and the functional spec, if I pass a vpcId it > then > >> calls associateIPToVpc. Unlike its brother, associateIPToNetwork, I > >> don't clearly see where the ip is actually put on the router, I only > >> see it marking the ip allocated in the database. The functional spec > >> reads as though this IP should be on the VPC. Maybe I'm just not > >> getting that bolded statement 'All ip addresses get allocated to the > >> VPC', my first thought is that of course they would, any IP I > allocate > >> gets put on the router... I guess I just need to play with it a bit > >> more. > > > > After reading the functional spec, my guess is that: > > One VPC has multiple guest networks(one guest network is a tenant, > e.g VLAN). On the guest network, there are a lot of VMs running on it. > > All of these VMs will use ip address range allocated from guest > network(createnetwork api), usually they are using internal ip address. > > Regarding to these commands: > > 1. AssociateIPAddrCmd > > "in VPC setup as a result of associateIpAddress all ip addresses get > allocated to VPC " means public ip address(when creating a zone, you'd > specify public ip address range) are belong to a VPC, you can associate > a public address to a guest network which attached to a VPC. > > In the router, it will add a public ip address on an ethX(which is > created on public.network.device on kvm host), add a routing > table(routing guest network gateway to that public ip). So after that, > user VMs created on that guest network should be able to access public > network through that public ip. > > 2. There are other commands(netwrok), which do some magic inside > router vm, basically implement the features like, who can access this > guest network, how to set up a portforwording rule for guest network > etc. > > > >> > >> Not in front of the code at the moment, I just thought of a few more > >> quick questions that would help... What is the expected outcome of > the > >> default rules? no access between private networks, but public access > >> for every network? > > > > By default, all incoming traffic to guest networks is blocked, but > outgoing traffic should work. > > > >> > >> The functional spec mentions public and private gateways, does > public > >> refer to giving someone say a /24 of public address space and then > >> creating a route on our router to their VPC router, i.e. public > >> networks instead of NATed ones? > > > > All of these gateways are referring to gateways inside router VM, not > any physical router/gateway. > > The public refer to the network created on public.network.device on > your kvm host. > > The private gateways referring to network created on > guest.network.device on your kvm host. > > In a VPC setup, the router can have multiple guest network(a.k. > multiple private gateways) and multiple public networks. > > You can call AssociateIPAddrCmd to bind a public ip to a guest > network, then can implement portforwording etc. > > > > I am not VPC expert, my answer is not authoritative as it looks like:) > Correct me if I am wrong. > > > >> > >> On Thu, Aug 30, 2012 at 11:54 AM, Marcus Sorensen > <shadow...@gmail.com> > >> wrote: > >> > Yes, thanks for clarifying. > >> > > >> > On Thu, Aug 30, 2012 at 11:53 AM, Edison Su <edison...@citrix.com> > >> wrote: > >> >> Oh, I see, there are two kinds of commands: > >> >> One doesn't need to get information from libvirt, which just > login > >> into router vm and program rules. For these commands, we can put > them > >> into virtualRoutingResource. > >> >> Another does need to get infor from libvirt, such ipassoc, which > >> need to get nic infor from libvirt, and plug in vif if needed. For > >> these commands, need to be implemented in libvirtcomputingresource. > >> While if it needs to access/program router, then add put that code > in > >> virtualroutingresource. > >> >> > >> >> Does it make sense? > >> >> > >> >>> -----Original Message----- > >> >>> From: Marcus Sorensen [mailto:shadow...@gmail.com] > >> >>> Sent: Thursday, August 30, 2012 10:47 AM > >> >>> To: Edison Su > >> >>> Cc: cloudstack-dev@incubator.apache.org; Anthony Xu; Kelven Yang; > >> >>> Vijayendra Bhamidipati > >> >>> Subject: Re: VPC for KVM (was VM router spawning multiple public > >> nics) > >> >>> > >> >>> Ok, I think I get it. For example when I'm looking at > >> IpAssocCommand > >> >>> it calls _virtRouterResource.assignPublicIpAddress to actually > run > >> the > >> >>> sh. So with SetupGuestNetworkCommand, I'll create that in > >> >>> LibvirtComputingResource, and within that I'll make a call to > >> >>> VirtualRoutingResource to do the work... is that right? > >> >>> > >> >>> On Thu, Aug 30, 2012 at 11:31 AM, Marcus Sorensen > >> <shadow...@gmail.com> > >> >>> wrote: > >> >>> > Just want to clarify: > >> >>> > > >> >>> > "We can add implementation of > >> >>> > > >> >>> > >> > SetupGuestNetworkCommand/SetNetworkACLCommand/SetSourceNatCommand/Site2 > >> >>> SiteVpnCfgCommand > >> >>> > in VirtualRoutingResource." > >> >>> > > >> >>> > So the Xen implementation of SetupGuestNetworkCommand is in > >> >>> > CitrixResourceBase.java, and the VMware one is in > >> VmwareResource.java, > >> >>> > but you're saying I should put an implementation of these in > >> >>> > VirtualRoutingResource.java for KVM? Sorry, still trying to > piece > >> >>> > together how everything relates. > >> >>> > > >> >>> > On Thu, Aug 30, 2012 at 10:42 AM, Edison Su > >> <edison...@citrix.com> > >> >>> wrote: > >> >>> >> Yes, it is. > >> >>> >> > >> >>> >>> -----Original Message----- > >> >>> >>> From: Marcus Sorensen [mailto:shadow...@gmail.com] > >> >>> >>> Sent: Thursday, August 30, 2012 8:45 AM > >> >>> >>> To: Edison Su > >> >>> >>> Cc: cloudstack-dev@incubator.apache.org; Anthony Xu; Kelven > >> Yang; > >> >>> >>> Vijayendra Bhamidipati > >> >>> >>> Subject: VPC for KVM (was VM router spawning multiple public > >> nics) > >> >>> >>> > >> >>> >>> I notice there's also an 'IpAssocVpcCommand', I'm assuming > that > >> >>> should > >> >>> >>> be added to the list? > >> >>> >>> > >> >>> >>> On Wed, Aug 29, 2012 at 6:37 PM, Edison Su > >> <edison...@citrix.com> > >> >>> wrote: > >> >>> >>> > You can find the VPC reference implementation from > >> >>> >>> CitrixResourceBase.java, which is the implementation for > >> Xenserver. > >> >>> >>> Just take a look at how the VPC related commands are > >> implemented. > >> >>> >>> > Take SetNetworkACLCommand as an example: > >> >>> >>> > The function execute(SetNetworkACLCommand cmd) in > >> >>> citrixResourceBase: > >> >>> >>> > 1. parse SetNetworkACLCommand > >> >>> >>> > 2. call scripts/vm/hypervisor/xenserver/vmops, function > >> >>> routerProxy > >> >>> >>> > 3. routerproxy will call > scripts/network/domr/router_proxy.sh > >> >>> >>> > 4. router_proxy.sh will login into router vm, execute a > shell > >> >>> script > >> >>> >>> inside router VM to program rules. > >> >>> >>> > > >> >>> >>> > In KVM, we can directly call router_proxy.sh or directly > >> login > >> >>> into > >> >>> >>> router vm, we just need to prepare the parameters for this > >> script. > >> >>> >>> > The reference code is in VirtualRoutingResource.java, all > the > >> >>> network > >> >>> >>> related command(extended from NetworkElementCommand) will be > >> >>> redirected > >> >>> >>> to VirtualRoutingResource. > >> >>> >>> > We can add implementation of > >> >>> >>> > >> >>> > >> > SetupGuestNetworkCommand/SetNetworkACLCommand/SetSourceNatCommand/Site2 > >> >>> >>> SiteVpnCfgCommand in VirtualRoutingResource. > >> >>> >>> > > >> >>> >>> > > >> >>> >>> >> -----Original Message----- > >> >>> >>> >> From: Marcus Sorensen [mailto:shadow...@gmail.com] > >> >>> >>> >> Sent: Wednesday, August 29, 2012 4:34 PM > >> >>> >>> >> To: cloudstack-dev@incubator.apache.org > >> >>> >>> >> Cc: Edison Su; Anthony Xu; Kelven Yang; Vijayendra > >> Bhamidipati > >> >>> >>> >> Subject: Re: VM router spawning multiple public nics > >> >>> >>> >> > >> >>> >>> >> Great, thanks. I've already got a working implementation > of > >> >>> >>> >> adding/removing nics from regular instances that I've > been > >> >>> playing > >> >>> >>> >> with, so I'm getting vaguely familiar with the various > data > >> >>> types > >> >>> >>> and > >> >>> >>> >> things surrounding the networking. I don't know if this > is > >> quite > >> >>> >>> >> within my reach just yet but I'll see how far I get. > >> >>> >>> >> > >> >>> >>> >> On Wed, Aug 29, 2012 at 3:19 PM, Alena Prokharchyk > >> >>> >>> >> <alena.prokharc...@citrix.com> wrote: > >> >>> >>> >> > On 8/29/12 1:34 PM, "Edison Su" <edison...@citrix.com> > >> wrote: > >> >>> >>> >> > > >> >>> >>> >> >>Hi Anthony & Alena, > >> >>> >>> >> >> Could you help to provide information about VPC, how > it > >> >>> works, > >> >>> >>> >> > > >> >>> >>> >> > > >> >>> >>> >> > Here is the functional spec on the feature: > >> >>> >>> >> > > >> >>> >>> >> > wiki.cloudstack.org/display/RelOps/Inter- > >> >>> >>> VLAN+Routing+functional+spec > >> >>> >>> >> > > >> >>> >>> >> > > >> >>> >>> >> > VpcVirtualNetworkApplianceManagerImpl is the manager > >> >>> responsible > >> >>> >>> for > >> >>> >>> >> VPC > >> >>> >>> >> > Virtual router operations (plug/unplug nics, etc) > >> >>> >>> >> > > >> >>> >>> >> > > >> >>> >>> >> > > >> >>> >>> >> >> which commands needed to implemented on the hypervisor > >> side? > >> >>> >>> >> > > >> >>> >>> >> > > >> >>> >>> >> > > >> >>> >>> >> > 1) PlugNicCommand/UnplugNicCommand - does Nic > >> hotplug/unplug > >> >>> >>> >> (currently > >> >>> >>> >> > works for VR vm only). In VPC called when add nic for > >> >>> Public/Guest > >> >>> >>> >> > networks. > >> >>> >>> >> > 2) SetupGuestNetworkCommand - sets up dhcp range, dns > >> >>> information, > >> >>> >>> >> > networkDomain information on the Nic to make it > >> >>> >>> >> > 3) SetNetworkACLCommand - creates network ACL on the > >> virtual > >> >>> >>> router > >> >>> >>> >> > 4) SetSourceNatCommand - used for setting source nat on > >> the > >> >>> Public > >> >>> >>> IP > >> >>> >>> >> on > >> >>> >>> >> > the VPC VR. > >> >>> >>> >> > 5) Site2SiteVpnCfgCommand - for setting up S2S VPN > >> >>> >>> >> > > >> >>> >>> >> > > >> >>> >>> >> > Anthony/Kelven/Vijay did implementation for Xen/vmWare > >> >>> resources, > >> >>> >>> >> they can > >> >>> >>> >> > help you answering all hypervisor related questions. If > >> you > >> >>> need > >> >>> >>> more > >> >>> >>> >> > details on business logic + Vpc VR management, I can > help > >> with > >> >>> >>> that. > >> >>> >>> >> > > >> >>> >>> >> > > >> >>> >>> >> > -Alena. > >> >>> >>> >> > > >> >>> >>> >> >> > >> >>> >>> >> >>> -----Original Message----- > >> >>> >>> >> >>> From: Marcus Sorensen [mailto:shadow...@gmail.com] > >> >>> >>> >> >>> Sent: Wednesday, August 29, 2012 10:16 AM > >> >>> >>> >> >>> To: cloudstack-dev@incubator.apache.org > >> >>> >>> >> >>> Subject: Re: VM router spawning multiple public nics > >> >>> >>> >> >>> > >> >>> >>> >> >>> I'd be willing to give it a shot if someone could > point > >> me > >> >>> in > >> >>> >>> the > >> >>> >>> >> >>> right direction and be available to answer questions. > >> >>> >>> >> >>> > >> >>> >>> >> >>> On Wed, Aug 29, 2012 at 10:39 AM, Edison Su > >> >>> >>> <edison...@citrix.com> > >> >>> >>> >> >>> wrote: > >> >>> >>> >> >>> > Yah, KVM doesn't support VPC yet. Will you help to > add > >> VPC > >> >>> >>> >> support on > >> >>> >>> >> >>> KVM?:) Just implement a few VPC related commands... > >> >>> >>> >> >>> > > >> >>> >>> >> >>> >> -----Original Message----- > >> >>> >>> >> >>> >> From: Marcus Sorensen [mailto:shadow...@gmail.com] > >> >>> >>> >> >>> >> Sent: Wednesday, August 29, 2012 6:49 AM > >> >>> >>> >> >>> >> To: cloudstack-dev@incubator.apache.org > >> >>> >>> >> >>> >> Subject: Re: VM router spawning multiple public > nics > >> >>> >>> >> >>> >> > >> >>> >>> >> >>> >> I can confirm that the patch has fixed my > particular > >> >>> issue. > >> >>> >>> >> >>> >> > >> >>> >>> >> >>> >> This is likely unrelated and I think it doesn't > even > >> use > >> >>> the > >> >>> >>> >> same > >> >>> >>> >> >>> >> code, but I began to play with the VPC stuff a bit > >> and > >> >>> >>> noticed > >> >>> >>> >> that > >> >>> >>> >> >>> I > >> >>> >>> >> >>> >> don't get any interfaces except for link local. > I'd > >> >>> probably > >> >>> >>> >> chalk > >> >>> >>> >> >>> >> that up to it not being ready for KVM, but I > thought > >> it > >> >>> was > >> >>> >>> >> worth a > >> >>> >>> >> >>> >> mention. I'd be happy to try to help get it ready > if > >> >>> someone > >> >>> >>> >> has > >> >>> >>> >> >>> time > >> >>> >>> >> >>> >> to nudge me in the right direction. > >> >>> >>> >> >>> >> > >> >>> >>> >> >>> >> On Tue, Aug 28, 2012 at 3:15 PM, Edison Su > >> >>> >>> >> <edison...@citrix.com> > >> >>> >>> >> >>> wrote: > >> >>> >>> >> >>> >> > > >> >>> >>> >> >>> >> > > >> >>> >>> >> >>> >> >> -----Original Message----- > >> >>> >>> >> >>> >> >> From: Marcus Sorensen > [mailto:shadow...@gmail.com] > >> >>> >>> >> >>> >> >> Sent: Tuesday, August 28, 2012 2:00 PM > >> >>> >>> >> >>> >> >> To: cloudstack-dev@incubator.apache.org > >> >>> >>> >> >>> >> >> Subject: Re: VM router spawning multiple public > >> nics > >> >>> >>> >> >>> >> >> > >> >>> >>> >> >>> >> >> I thought about this solution myself, but > below > >> this > >> >>> >>> portion > >> >>> >>> >> of > >> >>> >>> >> >>> >> code > >> >>> >>> >> >>> >> >> it looks like it uses the hash map to determine > >> which > >> >>> nic > >> >>> >>> >> number > >> >>> >>> >> >>> to > >> >>> >>> >> >>> >> >> add the IP to, so with multiple 'untagged' > >> networks it > >> >>> >>> would > >> >>> >>> >> have > >> >>> >>> >> >>> no > >> >>> >>> >> >>> >> >> way of knowing which nicnum in the router > >> corresponds > >> >>> with > >> >>> >>> >> the > >> >>> >>> >> >>> >> correct > >> >>> >>> >> >>> >> >> untagged vlan. > >> >>> >>> >> >>> >> >> > >> >>> >>> >> >>> >> >> nicNum = > >> >>> >>> >> vlanAllocatedToVM.get(ip.getVlanId()); > >> >>> >>> >> >>> >> >> networkUsage(routerIp, "addVif", > >> "eth" > >> >>> + > >> >>> >>> >> nicNum); > >> >>> >>> >> >>> >> >> result = > >> >>> >>> >> >>> >> >> > >> _virtRouterResource.assignPublicIpAddress(routerName, > >> >>> >>> >> >>> >> >> routerIp, > ip.getPublicIp(), > >> >>> >>> >> ip.isAdd(), > >> >>> >>> >> >>> >> >> ip.isFirstIP(), > >> >>> >>> >> >>> >> >> ip.isSourceNat(), > >> >>> ip.getVlanId(), > >> >>> >>> >> >>> >> >> ip.getVlanGateway(), > >> >>> >>> >> >>> >> >> ip.getVlanNetmask(), > >> >>> >>> >> >>> ip.getVifMacAddress(), > >> >>> >>> >> >>> >> >> ip.getGuestIp(), > nicNum); > >> >>> >>> >> >>> >> >> > >> >>> >>> >> >>> >> >> if ip.getVlanId() returns untagged (as it does > on > >> >>> networks > >> >>> >>> >> with > >> >>> >>> >> >>> no > >> >>> >>> >> >>> >> >> vlan id), and we tried to put multiple untagged > >> keys > >> >>> in > >> >>> >>> >> >>> >> >> vlanAllocatedToVM (as with multiple untagged > >> networks), > >> >>> we > >> >>> >>> >> get > >> >>> >>> >> >>> the > >> >>> >>> >> >>> >> >> wrong nicNum, no? > >> >>> >>> >> >>> >> > > >> >>> >>> >> >>> >> > In the ipassoc case, if there are multiple > untagged > >> >>> >>> networks, > >> >>> >>> >> all > >> >>> >>> >> >>> of > >> >>> >>> >> >>> >> them are use the same > >> >>> >>> >> >>> >> > Public bridge. Then multiple ip address will be > >> added > >> >>> on > >> >>> >>> eth2 > >> >>> >>> >> >>> inside > >> >>> >>> >> >>> >> router VM. > >> >>> >>> >> >>> >> > If it works physically, then it works. > >> >>> >>> >> >>> >> > > >> >>> >>> >> >>> >> >> > >> >>> >>> >> >>> >> >> On Tue, Aug 28, 2012 at 2:48 PM, Edison Su > >> >>> >>> >> <edison...@citrix.com> > >> >>> >>> >> >>> >> wrote: > >> >>> >>> >> >>> >> >> > > >> >>> >>> >> >>> >> >> > > >> >>> >>> >> >>> >> >> >> -----Original Message----- > >> >>> >>> >> >>> >> >> >> From: Marcus Sorensen > >> [mailto:shadow...@gmail.com] > >> >>> >>> >> >>> >> >> >> Sent: Tuesday, August 28, 2012 1:40 PM > >> >>> >>> >> >>> >> >> >> To: cloudstack-dev@incubator.apache.org > >> >>> >>> >> >>> >> >> >> Subject: Re: VM router spawning multiple > public > >> >>> nics > >> >>> >>> >> >>> >> >> >> > >> >>> >>> >> >>> >> >> >> Yes, that looks like it would work for me, > >> however > >> >>> >>> that's > >> >>> >>> >> not > >> >>> >>> >> >>> >> >> >> something that would ever make it into > master, > >> >>> right? > >> >>> >>> >> >>> Essentially > >> >>> >>> >> >>> >> >> >> killing tagging for the public, private, and > >> guest > >> >>> >>> traffic > >> >>> >>> >> >>> labels? > >> >>> >>> >> >>> >> >> >> There's also still the issue of not being > able > >> to > >> >>> >>> >> >>> differentiate > >> >>> >>> >> >>> >> >> >> between multiple untagged networks, if we > >> wanted to > >> >>> add > >> >>> >>> an > >> >>> >>> >> IP > >> >>> >>> >> >>> to > >> >>> >>> >> >>> >> a > >> >>> >>> >> >>> >> >> >> router it might not know which untagged > >> interface > >> >>> to > >> >>> >>> apply > >> >>> >>> >> it > >> >>> >>> >> >>> to. > >> >>> >>> >> >>> >> >> > > >> >>> >>> >> >>> >> >> > Physically, all the "untagged" network will > be > >> >>> created > >> >>> >>> on > >> >>> >>> >> >>> >> >> public/guest/private bridge(the name we put in > >> >>> >>> >> >>> >> >> private/public/guest.bridge.name in > >> agent.properties"). > >> >>> >>> >> >>> >> >> > Because, there is no way to create a new > >> untagged > >> >>> bridge > >> >>> >>> by > >> >>> >>> >> >>> agent > >> >>> >>> >> >>> >> >> itself. Agent code only knows how to create a > new > >> >>> >>> tagged(vlan) > >> >>> >>> >> >>> >> bridge. > >> >>> >>> >> >>> >> >> > So the fix should be pushed into master. > >> >>> >>> >> >>> >> >> > > >> >>> >>> >> >>> >> >> >> > >> >>> >>> >> >>> >> >> >> On Tue, Aug 28, 2012 at 2:32 PM, Edison Su > >> >>> >>> >> >>> <edison...@citrix.com> > >> >>> >>> >> >>> >> >> wrote: > >> >>> >>> >> >>> >> >> >> > > >> >>> >>> >> >>> >> >> >> > > >> >>> >>> >> >>> >> >> >> >> -----Original Message----- > >> >>> >>> >> >>> >> >> >> >> From: Marcus Sorensen > >> >>> [mailto:shadow...@gmail.com] > >> >>> >>> >> >>> >> >> >> >> Sent: Tuesday, August 28, 2012 12:23 PM > >> >>> >>> >> >>> >> >> >> >> To: cloudstack-dev@incubator.apache.org > >> >>> >>> >> >>> >> >> >> >> Subject: Re: VM router spawning multiple > >> public > >> >>> nics > >> >>> >>> >> >>> >> >> >> >> > >> >>> >>> >> >>> >> >> >> >> Thanks for pointing me in the right > >> direction. > >> >>> I've > >> >>> >>> >> >>> reviewed > >> >>> >>> >> >>> >> this > >> >>> >>> >> >>> >> >> >> code > >> >>> >>> >> >>> >> >> >> >> in a bit more detail, and it seems like > it's > >> >>> >>> >> accomplishing > >> >>> >>> >> >>> the > >> >>> >>> >> >>> >> >> >> >> following: > >> >>> >>> >> >>> >> >> >> >> > >> >>> >>> >> >>> >> >> >> >> 1. get all network interfaces currently > >> >>> connected to > >> >>> >>> >> the > >> >>> >>> >> >>> >> running > >> >>> >>> >> >>> >> >> VM > >> >>> >>> >> >>> >> >> >> >> (a.k.a vnet devices via libvirt) > >> >>> >>> >> >>> >> >> >> >> 2. find out which vlans these network > >> interfaces > >> >>> are > >> >>> >>> >> >>> bridged > >> >>> >>> >> >>> >> to, > >> >>> >>> >> >>> >> >> >> store > >> >>> >>> >> >>> >> >> >> >> this in a hash map of vlan ids and nics > >> >>> >>> >> >>> >> >> >> >> 3. get all ip addresses to be added to > the > >> VM > >> >>> >>> >> >>> >> >> >> >> 4. for each ip, get the configured vlan > id > >> for > >> >>> the > >> >>> >>> ip, > >> >>> >>> >> >>> compare > >> >>> >>> >> >>> >> it > >> >>> >>> >> >>> >> >> to > >> >>> >>> >> >>> >> >> >> >> the hash map of existing vlan ids and > nics > >> >>> >>> >> >>> >> >> >> >> 5. if the required vlan id is not found > in > >> the > >> >>> hash > >> >>> >>> map, > >> >>> >>> >> >>> >> create a > >> >>> >>> >> >>> >> >> >> new > >> >>> >>> >> >>> >> >> >> >> nic > >> >>> >>> >> >>> >> >> >> >> 6. assign the ip to the nic identified by > >> the > >> >>> vlan > >> >>> >>> id > >> >>> >>> >> key > >> >>> >>> >> >>> in > >> >>> >>> >> >>> >> the > >> >>> >>> >> >>> >> >> >> hash > >> >>> >>> >> >>> >> >> >> >> map > >> >>> >>> >> >>> >> >> >> >> > >> >>> >>> >> >>> >> >> >> >> In this case, we're getting a vlan id > >> returned > >> >>> in > >> >>> >>> step > >> >>> >>> >> 2 > >> >>> >>> >> >>> for a > >> >>> >>> >> >>> >> >> >> bridged > >> >>> >>> >> >>> >> >> >> >> nic whose network is defined as untagged > in > >> the > >> >>> >>> >> cloudstack > >> >>> >>> >> >>> db, > >> >>> >>> >> >>> >> >> >> >> therefore in step 5 we never match as > >> already > >> >>> having > >> >>> >>> a > >> >>> >>> >> nic > >> >>> >>> >> >>> for > >> >>> >>> >> >>> >> >> >> >> 'untagged'. I wrote a big long response > >> >>> discussing > >> >>> >>> this > >> >>> >>> >> >>> issue, > >> >>> >>> >> >>> >> >> but > >> >>> >>> >> >>> >> >> >> as > >> >>> >>> >> >>> >> >> >> >> I began to dig further I realized that > aside > >> >>> from my > >> >>> >>> >> >>> >> particular > >> >>> >>> >> >>> >> >> case, > >> >>> >>> >> >>> >> >> >> >> untagged vlans in general are just broken > >> (for > >> >>> >>> example > >> >>> >>> >> they > >> >>> >>> >> >>> >> can't > >> >>> >>> >> >>> >> >> be > >> >>> >>> >> >>> >> >> >> >> dealt with uniquely in the current > >> >>> IpAssocCommand > >> >>> >>> code, > >> >>> >>> >> >>> given > >> >>> >>> >> >>> >> the > >> >>> >>> >> >>> >> >> >> hash > >> >>> >>> >> >>> >> >> >> >> map) and it would require more effort > than I > >> >>> have > >> >>> >>> time > >> >>> >>> >> for > >> >>> >>> >> >>> now > >> >>> >>> >> >>> >> to > >> >>> >>> >> >>> >> >> >> make > >> >>> >>> >> >>> >> >> >> >> things work. If the code were already in > >> place > >> >>> to > >> >>> >>> >> >>> >> differentiate > >> >>> >>> >> >>> >> >> >> >> between multiple untagged nics I think > that > >> >>> fixing > >> >>> >>> my > >> >>> >>> >> >>> problem > >> >>> >>> >> >>> >> >> would > >> >>> >>> >> >>> >> >> >> be > >> >>> >>> >> >>> >> >> >> >> trivial, but since its not, I'll just > find > >> an > >> >>> >>> >> alternative > >> >>> >>> >> >>> >> >> solution. > >> >>> >>> >> >>> >> >> >> >> > >> >>> >>> >> >>> >> >> >> > > >> >>> >>> >> >>> >> >> >> > The untagged network usually means > "untagged", > >> no > >> >>> >>> vlan > >> >>> >>> >> on > >> >>> >>> >> >>> the > >> >>> >>> >> >>> >> >> >> bridge... > >> >>> >>> >> >>> >> >> >> > In your case, the untagged network > actually > >> has > >> >>> >>> >> vlan(tagged) > >> >>> >>> >> >>> on > >> >>> >>> >> >>> >> >> the > >> >>> >>> >> >>> >> >> >> bridge, thus getting things confused. > >> >>> >>> >> >>> >> >> >> > Will this > patch(http://pastebin.com/HJXzZwKp) > >> >>> work > >> >>> >>> for > >> >>> >>> >> you? > >> >>> >>> >> >>> >> >> >> > > >> >>> >>> >> >>> >> >> >> >> On Mon, Aug 27, 2012 at 10:46 PM, Marcus > >> >>> Sorensen > >> >>> >>> >> >>> >> >> >> <shadow...@gmail.com> > >> >>> >>> >> >>> >> >> >> >> wrote: > >> >>> >>> >> >>> >> >> >> >> > ... > >> >>> >>> >> >>> >> >> >> >> > Integer nicPos = 0; > >> >>> >>> >> >>> >> >> >> >> > for (InterfaceDef nic : > nics) > >> { > >> >>> >>> >> >>> >> >> >> >> > if > >> >>> >>> >> >>> >> >> >> >> > >> >>> >>> (nic.getBrName().equalsIgnoreCase(_linkLocalBridgeName)) > >> >>> >>> >> { > >> >>> >>> >> >>> >> >> >> >> > > >> >>> >>> vlanAllocatedToVM.put("LinkLocal", > >> >>> >>> >> >>> >> nicPos); > >> >>> >>> >> >>> >> >> >> >> > } else { > >> >>> >>> >> >>> >> >> >> >> > String vlanId = > >> >>> >>> >> >>> >> >> >> >> getVlanIdFromBridge(nic.getBrName()); > >> >>> >>> >> >>> >> >> >> >> > if (vlanId != null) > { > >> >>> >>> >> >>> >> >> >> >> > > >> >>> >>> vlanAllocatedToVM.put(vlanId, > >> >>> >>> >> >>> >> nicPos); > >> >>> >>> >> >>> >> >> >> >> > } else { > >> >>> >>> >> >>> >> >> >> >> > > >> >>> >>> >> >>> vlanAllocatedToVM.put(Vlan.UNTAGGED, > >> >>> >>> >> >>> >> >> >> nicPos); > >> >>> >>> >> >>> >> >> >> >> > } > >> >>> >>> >> >>> >> >> >> >> > } > >> >>> >>> >> >>> >> >> >> >> > nicPos++; > >> >>> >>> >> >>> >> >> >> >> > } > >> >>> >>> >> >>> >> >> >> >> > IpAddressTO[] ips = > >> >>> >>> cmd.getIpAddresses(); > >> >>> >>> >> >>> >> >> >> >> > int i = 0; > >> >>> >>> >> >>> >> >> >> >> > String result = null; > >> >>> >>> >> >>> >> >> >> >> > int nicNum = 0; > >> >>> >>> >> >>> >> >> >> >> > for (IpAddressTO ip : ips) > { > >> >>> >>> >> >>> >> >> >> >> > if > >> >>> >>> >> >>> >> >> (!vlanAllocatedToVM.containsKey(ip.getVlanId())) > >> >>> >>> >> >>> >> >> >> { > >> >>> >>> >> >>> >> >> >> >> > /* plug a vif into > >> router > >> >>> */ > >> >>> >>> >> >>> >> >> >> >> > VifHotPlug(conn, > >> >>> routerName, > >> >>> >>> >> >>> >> ip.getVlanId(), > >> >>> >>> >> >>> >> >> >> >> > > >> >>> ip.getVifMacAddress()); > >> >>> >>> >> >>> >> >> >> >> > > >> >>> >>> >> vlanAllocatedToVM.put(ip.getVlanId(), > >> >>> >>> >> >>> >> >> >> nicPos++); > >> >>> >>> >> >>> >> >> >> >> > } > >> >>> >>> >> >>> >> >> >> >> > ... > >> >>> >>> >> >>> >> >> >> >> > > >> >>> >>> >> >>> >> >> >> >> > Looks like the getVlanIdFromBridge > might > >> be a > >> >>> bit > >> >>> >>> >> >>> misleading. > >> >>> >>> >> >>> >> I > >> >>> >>> >> >>> >> >> am > >> >>> >>> >> >>> >> >> >> >> > running my guest public traffic on a > >> >>> 'cloudbr470', > >> >>> >>> >> which > >> >>> >>> >> >>> is > >> >>> >>> >> >>> >> a > >> >>> >>> >> >>> >> >> >> bridge > >> >>> >>> >> >>> >> >> >> >> > to eth2.470, yet I configured this > network > >> as > >> >>> >>> >> 'untagged' > >> >>> >>> >> >>> >> >> because I > >> >>> >>> >> >>> >> >> >> >> > have a vlan 470 available on eth3 for > >> >>> cloudstack > >> >>> >>> to > >> >>> >>> >> >>> >> autoassign > >> >>> >>> >> >>> >> >> >> (eth3 > >> >>> >>> >> >>> >> >> >> >> > is where all of my stuff will be > >> autoassigned). > >> >>> So > >> >>> >>> >> I'm > >> >>> >>> >> >>> not > >> >>> >>> >> >>> >> 100% > >> >>> >>> >> >>> >> >> >> sure > >> >>> >>> >> >>> >> >> >> >> > yet what's going on here but it seems > as > >> >>> though > >> >>> >>> the > >> >>> >>> >> above > >> >>> >>> >> >>> is > >> >>> >>> >> >>> >> >> not > >> >>> >>> >> >>> >> >> >> >> > setting any 'Vlan.UNTAGGED', since it > >> finds a > >> >>> vlan > >> >>> >>> >> number > >> >>> >>> >> >>> >> for > >> >>> >>> >> >>> >> >> >> >> > eth2.470, but when it enumerates the > IPs > >> for > >> >>> the > >> >>> >>> >> router, > >> >>> >>> >> >>> it > >> >>> >>> >> >>> >> >> then > >> >>> >>> >> >>> >> >> >> runs > >> >>> >>> >> >>> >> >> >> >> > ip.getVlanId() and doesn't find a nic > for > >> the > >> >>> >>> >> untagged IP > >> >>> >>> >> >>> >> and > >> >>> >>> >> >>> >> >> >> creates > >> >>> >>> >> >>> >> >> >> >> > one. > >> >>> >>> >> >>> >> >> >> >> > > >> >>> >>> >> >>> >> >> >> >> > > >> >>> >>> >> >>> >> >> >> >> > I realize this is perhaps an uncommon > case, > >> >>> but a > >> >>> >>> bug > >> >>> >>> >> >>> >> >> nonetheless. > >> >>> >>> >> >>> >> >> >> >> > I'll play with the code a bit and see > if I > >> can > >> >>> >>> come > >> >>> >>> >> up > >> >>> >>> >> >>> with > >> >>> >>> >> >>> >> a > >> >>> >>> >> >>> >> >> >> >> > solution. I'm thinking I can look at > the > >> nic's > >> >>> >>> >> broadcast > >> >>> >>> >> >>> URI > >> >>> >>> >> >>> >> >> and > >> >>> >>> >> >>> >> >> >> see > >> >>> >>> >> >>> >> >> >> >> > if it's supposed to be untagged, then > add > >> to > >> >>> >>> >> >>> >> vlanAllocatedToVM > >> >>> >>> >> >>> >> >> >> >> > appropriately, off the top of my head > >> >>> something > >> >>> >>> like: > >> >>> >>> >> >>> >> >> >> >> > > >> >>> >>> >> >>> >> >> >> >> > String vlanId = > >> >>> >>> >> >>> >> >> >> >> getVlanIdFromBridge(nic.getBrName()); > >> >>> >>> >> >>> >> >> >> >> > if (vlanId != null > && > >> >>> >>> >> >>> >> >> >> >> > >> >>> >>> > !nic.getBroadcastUri().toString().contains("untagged") > >> >>> >>> >> { > >> >>> >>> >> >>> >> >> >> >> > > >> >>> >>> vlanAllocatedToVM.put(vlanId, > >> >>> >>> >> >>> >> nicPos); > >> >>> >>> >> >>> >> >> >> >> > } else { > >> >>> >>> >> >>> >> >> >> >> > > >> >>> >>> >> >>> vlanAllocatedToVM.put(Vlan.UNTAGGED, > >> >>> >>> >> >>> >> >> >> nicPos); > >> >>> >>> >> >>> >> >> >> >> > } > >> >>> >>> >> >>> >> >> >> >> > > >> >>> >>> >> >>> >> >> >> >> > > >> >>> >>> >> >>> >> >> >> >> > > >> >>> >>> >> >>> >> >> >> >> > On Mon, Aug 27, 2012 at 6:42 PM, Edison > Su > >> >>> >>> >> >>> >> >> <edison...@citrix.com> > >> >>> >>> >> >>> >> >> >> >> wrote: > >> >>> >>> >> >>> >> >> >> >> >> Possible bug in in kvm code: > >> >>> >>> >> LibvirtComputingResource- > >> >>> >>> >> >>> >> >> >> >> >execute(IpAssocCommand cmd)-> VifHotPlug, > >> which > >> >>> is > >> >>> >>> >> only > >> >>> >>> >> >>> place > >> >>> >>> >> >>> >> >> >> adding > >> >>> >>> >> >>> >> >> >> >> nic into router vm. > >> >>> >>> >> >>> >> >> >> >> >> Turn on agent log, then take a look > what > >> >>> happened. > >> >>> >>> >> >>> >> >> >> >> >> > >> >>> >>> >> >>> >> >> >> >> >>> -----Original Message----- > >> >>> >>> >> >>> >> >> >> >> >>> From: Marcus Sorensen > >> >>> >>> [mailto:shadow...@gmail.com] > >> >>> >>> >> >>> >> >> >> >> >>> Sent: Monday, August 27, 2012 5:10 PM > >> >>> >>> >> >>> >> >> >> >> >>> To: cloudstack- > d...@incubator.apache.org > >> >>> >>> >> >>> >> >> >> >> >>> Subject: VM router spawning multiple > >> public > >> >>> nics > >> >>> >>> >> >>> >> >> >> >> >>> > >> >>> >>> >> >>> >> >> >> >> >>> I've got two zones running the same > >> build of > >> >>> >>> >> cloudstack > >> >>> >>> >> >>> (a > >> >>> >>> >> >>> >> >> >> recent > >> >>> >>> >> >>> >> >> >> >> copy > >> >>> >>> >> >>> >> >> >> >> >>> of master). One of them creates > routers > >> that > >> >>> >>> turn > >> >>> >>> >> into > >> >>> >>> >> >>> >> ugly > >> >>> >>> >> >>> >> >> >> >> >>> multi-headed beasts, and by that I > mean > >> that > >> >>> any > >> >>> >>> >> time I > >> >>> >>> >> >>> >> >> create a > >> >>> >>> >> >>> >> >> >> >> port > >> >>> >>> >> >>> >> >> >> >> >>> forwarding or iptables rule for that > >> router > >> >>> I > >> >>> >>> get a > >> >>> >>> >> new > >> >>> >>> >> >>> >> >> public > >> >>> >>> >> >>> >> >> >> NIC > >> >>> >>> >> >>> >> >> >> >> >>> with an identical IP address, I have > an > >> >>> instance > >> >>> >>> >> with a > >> >>> >>> >> >>> >> few > >> >>> >>> >> >>> >> >> tens > >> >>> >>> >> >>> >> >> >> of > >> >>> >>> >> >>> >> >> >> >> >>> NICs. My guess is that some script > >> isn't > >> >>> >>> detecting > >> >>> >>> >> >>> that > >> >>> >>> >> >>> >> >> there's > >> >>> >>> >> >>> >> >> >> >> >>> already a NIC with the public IP on > it. > >> It > >> >>> >>> looks > >> >>> >>> >> fine > >> >>> >>> >> >>> in > >> >>> >>> >> >>> >> the > >> >>> >>> >> >>> >> >> >> >> >>> database, there is only one public > NIC > >> >>> defined > >> >>> >>> in > >> >>> >>> >> the > >> >>> >>> >> >>> nics > >> >>> >>> >> >>> >> >> table. > >> >>> >>> >> >>> >> >> >> >> >>> I'll troubleshoot it tomorrow, but if > >> anyone > >> >>> >>> knows > >> >>> >>> >> >>> where I > >> >>> >>> >> >>> >> >> >> should > >> >>> >>> >> >>> >> >> >> >> >>> begin the headstart would be > appreciated. > >> >>> >>> >> >>> >> >> >> >> >>> > >> >>> >>> >> >>> >> >> >> >> >>> Thanks > >> >>> >>> >> >> > >> >>> >>> >> > > >> >>> >>> >> >