@Override public void updateIpAllocationMsg(AllocateIpMsg msg, String mac) { if (msg.getRequiredIp() != null) { return; } List<IpRangeVO> iprs = Q.New(IpRangeVO.class).eq(IpRangeVO_.l3NetworkUuid, msg.getL3NetworkUuid()).list(); if (iprs.get(0).getIpVersion() == IPv6Constants.IPv4) { return; } if (!iprs.get(0).getAddressMode().equals(IPv6Constants.Stateful_DHCP)) { msg.setRequiredIp(IPv6NetworkUtils.getIPv6AddresFromMac(iprs.get(0).getNetworkCidr(), mac)); } }
private void handle(APIGetAttachablePublicL3ForVRouterMsg msg) { APIGetAttachablePublicL3ForVRouterReply reply = new APIGetAttachablePublicL3ForVRouterReply(); List<L3NetworkVO> l3NetworkVOS = Q.New(L3NetworkVO.class).notEq(L3NetworkVO_.category, L3NetworkCategory.Private).list(); List<VmNicVO> vmNicVOS = Q.New(VmNicVO.class).eq(VmNicVO_.vmInstanceUuid, msg.getVmInstanceUuid()).list(); if (l3NetworkVOS == null || l3NetworkVOS.isEmpty()) { reply.setInventories(new ArrayList<L3NetworkInventory>()); bus.reply(msg, reply); return; } Set<L3NetworkVO> attachableL3NetworkVOS = new HashSet<>(l3NetworkVOS); for (L3NetworkVO l3NetworkVO : l3NetworkVOS) { for (VmNicVO vmNicVO : vmNicVOS) { if (l3NetworkVO.getIpRanges() == null || l3NetworkVO.getIpRanges().isEmpty()) { attachableL3NetworkVOS.remove(l3NetworkVO); } String vmNicCidr = NetworkUtils.getCidrFromIpMask(vmNicVO.getIp(), vmNicVO.getNetmask()); if (NetworkUtils.isCidrOverlap(l3NetworkVO.getIpRanges().stream().findFirst().get().getNetworkCidr(), vmNicCidr)) { attachableL3NetworkVOS.remove(l3NetworkVO); } attachableL3NetworkVOS.removeAll(attachableL3NetworkVOS.stream() .filter(vo -> vo.getUuid().equals(vmNicVO.getL3NetworkUuid())) .collect(Collectors.toSet())); } } reply.setInventories(L3NetworkInventory.valueOf(attachableL3NetworkVOS)); bus.reply(msg, reply); }
private void validateIpRangeOverlapWithVm(String l3NetworkUuid, String vmInstanceUuid) { List<VmNicVO> vmNicVOS = Q.New(VmNicVO.class).eq(VmNicVO_.vmInstanceUuid, vmInstanceUuid).list(); List<IpRangeVO> newIpRangeVOS = Q.New(IpRangeVO.class).eq(IpRangeVO_.l3NetworkUuid, l3NetworkUuid).list(); if (newIpRangeVOS == null || newIpRangeVOS.isEmpty()) { throw new ApiMessageInterceptionException(operr("no ip ranges attached with l3 network[uuid:%s]", l3NetworkUuid)); } for (VmNicVO vmNicVO: vmNicVOS) { List<IpRangeVO> ipRangeVOS = Q.New(IpRangeVO.class).eq(IpRangeVO_.l3NetworkUuid, vmNicVO.getL3NetworkUuid()).limit(1).list(); if (ipRangeVOS != null && !ipRangeVOS.isEmpty()) { if (NetworkUtils.isCidrOverlap(ipRangeVOS.get(0).getNetworkCidr(), newIpRangeVOS.get(0).getNetworkCidr())) { throw new ApiMessageInterceptionException(operr("unable to attach a L3 network. The cidr of l3[%s] to attach overlapped with l3[%s] already attached to vm", l3NetworkUuid, vmNicVO.getL3NetworkUuid())); } } } }
private void validateStaticIPv4(VmNicVO vmNicVO, L3NetworkVO l3NetworkVO, String ip) { if (!NetworkUtils.isIpv4Address(ip)) { throw new ApiMessageInterceptionException(argerr("%s is not a valid IPv4 address", ip)); } for (UsedIpVO ipVo : vmNicVO.getUsedIps()) { if (ipVo.getL3NetworkUuid().equals(l3NetworkVO.getUuid())) { IpRangeVO rangeVO = dbf.findByUuid(ipVo.getIpRangeUuid(), IpRangeVO.class); if (ipVo.getIp().equals(ip)) { throw new ApiMessageInterceptionException(argerr("ip address [%s] already set to vmNic [uuid:%s]", ip, vmNicVO.getUuid())); } if (!NetworkUtils.isIpv4InCidr(ip, rangeVO.getNetworkCidr())) { throw new ApiMessageInterceptionException(argerr("ip address [%s] is not in ip range [%s]", ip, rangeVO.getNetworkCidr())); } } } }
private void validate(APISetL3NetworkRouterInterfaceIpMsg msg) { if (!NetworkUtils.isIpv4Address(msg.getRouterInterfaceIp())) { throw new ApiMessageInterceptionException(argerr("invalid IP[%s]", msg.getRouterInterfaceIp())); } List<IpRangeVO> ipRangeVOS = Q.New(IpRangeVO.class).eq(IpRangeVO_.l3NetworkUuid, msg.getL3NetworkUuid()).list(); if (ipRangeVOS == null || ipRangeVOS.isEmpty()) { throw new ApiMessageInterceptionException(argerr("no ip range in l3[%s]", msg.getL3NetworkUuid())); } for (IpRangeVO ipRangeVO : ipRangeVOS) { if (!NetworkUtils.isIpv4InCidr(msg.getRouterInterfaceIp(), ipRangeVO.getNetworkCidr())) { throw new ApiMessageInterceptionException(argerr("ip[%s] is not in the cidr of ip range[uuid:%s, cidr:%s] which l3 network[%s] attached", msg.getRouterInterfaceIp(), ipRangeVO.getUuid(), ipRangeVO.getNetworkCidr(), msg.getL3NetworkUuid())); } if (NetworkUtils.isInRange(msg.getRouterInterfaceIp(), ipRangeVO.getStartIp(), ipRangeVO.getEndIp())) { throw new ApiMessageInterceptionException(argerr("ip[%s] in ip range[uuid:%s, startIp:%s, endIp:%s] which l3 network[%s] attached, this is not allowed", msg.getRouterInterfaceIp(), ipRangeVO.getUuid(), ipRangeVO.getStartIp(), ipRangeVO.getEndIp(), msg.getL3NetworkUuid())); } } }
if (!r.getNetworkCidr().equals(ipr.getNetworkCidr())) { throw new ApiMessageInterceptionException(argerr("new network CIDR [%s] is different from old network cidr [%s]", r.getNetworkCidr(), ipr.getNetworkCidr()));
public static IpRangeInventory valueOf(IpRangeVO vo) { IpRangeInventory inv = new IpRangeInventory(); inv.setCreateDate(vo.getCreateDate()); inv.setDescription(vo.getDescription()); inv.setEndIp(vo.getEndIp()); inv.setGateway(vo.getGateway()); inv.setL3NetworkUuid(vo.getL3NetworkUuid()); inv.setName(vo.getName()); inv.setNetmask(vo.getNetmask()); inv.setStartIp(vo.getStartIp()); inv.setUuid(vo.getUuid()); inv.setLastOpDate(vo.getLastOpDate()); inv.setNetworkCidr(vo.getNetworkCidr()); inv.setIpVersion(vo.getIpVersion()); inv.setAddressMode(vo.getAddressMode()); inv.setPrefixLen(vo.getPrefixLen()); return inv; }
private void isVipInVmNicSubnet(String vipUuid, String guestIpUuid) { VipVO vip = dbf.findByUuid(vipUuid, VipVO.class); UsedIpVO vipIp = dbf.findByUuid(vip.getUsedIpUuid(), UsedIpVO.class); IpRangeVO vipRange = dbf.findByUuid(vipIp.getIpRangeUuid(), IpRangeVO.class); UsedIpVO guestIp = dbf.findByUuid(guestIpUuid, UsedIpVO.class); IpRangeVO guestRange = dbf.findByUuid(guestIp.getIpRangeUuid(), IpRangeVO.class); if (vipIp.getIpVersion() != guestIp.getIpVersion()) { throw new ApiMessageInterceptionException(operr("vip ipVersion [%d] is different from guestIp ipVersion [%d].", vipIp.getIpVersion(), guestIp.getIpVersion())); } if (vipIp.getIpVersion() == IPv6Constants.IPv4) { SubnetUtils guestSub = new SubnetUtils(guestRange.getGateway(), guestRange.getNetmask()); if (guestSub.getInfo().isInRange(vipIp.getIp())) { throw new ApiMessageInterceptionException(operr("Vip[%s] is in the guest ip range [%s, %s]", vipIp.getIp(), guestRange.getStartIp(), guestRange.getEndIp())); } } else { if (IPv6NetworkUtils.isIpv6InCidrRange(vipIp.getIp(), guestRange.getNetworkCidr())){ throw new ApiMessageInterceptionException(operr("Vip[%s] is in the guest ip range [%s, %s]", vipIp.getIp(), guestRange.getStartIp(), guestRange.getEndIp())); } } }