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

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)


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-dev@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
>> >>> >>> >> >>
>> >>> >>> >> >
>> >>> >>> >> >

Reply via email to