...
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 <[email protected]> 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:[email protected]]
>> Sent: Monday, August 27, 2012 5:10 PM
>> To: [email protected]
>> 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