@Override protected IpRangeVO scripts() { IpRangeVO vo = new IpRangeVO(); vo.setUuid(ipr.getUuid() == null ? Platform.getUuid() : ipr.getUuid()); vo.setDescription(ipr.getDescription()); vo.setEndIp(ipr.getEndIp()); vo.setGateway(ipr.getGateway()); vo.setL3NetworkUuid(ipr.getL3NetworkUuid()); vo.setName(ipr.getName()); vo.setNetmask(ipr.getNetmask()); vo.setStartIp(ipr.getStartIp()); vo.setNetworkCidr(ipr.getNetworkCidr()); vo.setAccountUuid(msg.getSession().getAccountUuid()); vo.setIpVersion(ipr.getIpVersion()); vo.setAddressMode(ipr.getAddressMode()); vo.setPrefixLen(ipr.getPrefixLen()); dbf.getEntityManager().persist(vo); dbf.getEntityManager().flush(); dbf.getEntityManager().refresh(vo); return vo; } }.execute();
public static List<IpRangeInventory> valueOf(Collection<IpRangeVO> vos) { List<IpRangeInventory> invs = new ArrayList<IpRangeInventory>(vos.size()); for (IpRangeVO vo : vos) { invs.add(IpRangeInventory.valueOf(vo)); } return invs; }
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; }
public static APIAddIpRangeEvent __example__() { APIAddIpRangeEvent event = new APIAddIpRangeEvent(); IpRangeInventory ipRange = new IpRangeInventory(); ipRange.setL3NetworkUuid(uuid()); ipRange.setName("Test-IP-Range"); ipRange.setStartIp("192.168.100.10"); ipRange.setEndIp("192.168.100.250"); ipRange.setNetmask("255.255.255.0"); ipRange.setGateway("192.168.100.1"); event.setInventory(ipRange); return event; }
public static APIAddIpRangeByNetworkCidrEvent __example__() { APIAddIpRangeByNetworkCidrEvent event = new APIAddIpRangeByNetworkCidrEvent(); IpRangeInventory ipRange = new IpRangeInventory(); ipRange.setName("Test-IPRange"); ipRange.setL3NetworkUuid(uuid()); ipRange.setNetworkCidr("192.168.10.0/24"); event.setInventory(ipRange); return event; }
@Override public void afterDeleteIpRange(IpRangeInventory ipRange) { String dhcpServerIp = getDHCPServerIP(ipRange.getL3NetworkUuid()); boolean ipRangeExisted = Q.New(IpRangeVO.class).eq(IpRangeVO_.l3NetworkUuid, ipRange.getL3NetworkUuid()).isExists(); if (!ipRangeExisted && dhcpServerIp != null) { deleteDhcpServerIp(ipRange.getL3NetworkUuid(), dhcpServerIp); logger.debug(String.format("delete DHCP IP[%s] of the flat network[uuid:%s] as the IP range[uuid:%s] is deleted", dhcpServerIp, ipRange.getL3NetworkUuid(), ipRange.getUuid())); } }
public static APIGetAttachablePublicL3ForVRouterReply __example__() { APIGetAttachablePublicL3ForVRouterReply reply = new APIGetAttachablePublicL3ForVRouterReply(); L3NetworkInventory inventory = new L3NetworkInventory(); inventory.setName("test-pub-l3"); inventory.setCreateDate(new Timestamp(org.zstack.header.message.DocUtils.date)); inventory.setLastOpDate(new Timestamp(org.zstack.header.message.DocUtils.date)); inventory.setDescription("test pub l3"); inventory.setL2NetworkUuid(uuid()); inventory.setSystem(true); inventory.setUuid(uuid()); inventory.setZoneUuid(uuid()); IpRangeInventory ipRangeInventory = new IpRangeInventory(); ipRangeInventory.setCreateDate(new Timestamp(org.zstack.header.message.DocUtils.date)); ipRangeInventory.setLastOpDate(new Timestamp(org.zstack.header.message.DocUtils.date)); ipRangeInventory.setStartIp("100.64.0.10"); ipRangeInventory.setEndIp("100.64.0.100"); ipRangeInventory.setName("test ip range"); ipRangeInventory.setNetworkCidr("100.64.0.0/24"); ipRangeInventory.setNetmask("255.255.255.0"); ipRangeInventory.setGateway("100.64.0.1"); ipRangeInventory.setL3NetworkUuid(uuid()); inventory.setIpRanges(Arrays.asList(ipRangeInventory)); reply.setInventories(Arrays.asList(inventory)); return reply; } }
private UsedIpInventory reserveIpv4(IpRangeInventory ipRange, String ip) { try { UsedIpVO vo = new UsedIpVO(ipRange.getUuid(), ip); vo.setIpInLong(NetworkUtils.ipv4StringToLong(ip)); String uuid = ipRange.getUuid() + ip; uuid = UUID.nameUUIDFromBytes(uuid.getBytes()).toString().replaceAll("-", ""); vo.setUuid(uuid); vo.setL3NetworkUuid(ipRange.getL3NetworkUuid()); vo.setNetmask(ipRange.getNetmask()); vo.setGateway(ipRange.getGateway()); vo.setIpVersion(IPv6Constants.IPv4); vo = dbf.persistAndRefresh(vo); return UsedIpInventory.valueOf(vo); } catch (JpaSystemException e) { if (e.getRootCause() instanceof MySQLIntegrityConstraintViolationException) { logger.debug(String.format("Concurrent ip allocation. " + "Ip[%s] in ip range[uuid:%s] has been allocated, try allocating another one. " + "The error[Duplicate entry] printed by jdbc.spi.SqlExceptionHelper is no harm, " + "we will try finding another ip", ip, ipRange.getUuid())); logger.trace("", e); } else { throw e; } return null; } }
private void validate(IpRangeInventory ipr) { L3NetworkVO l3Vo = Q.New(L3NetworkVO.class).eq(L3NetworkVO_.uuid, ipr.getL3NetworkUuid()).find(); if (l3Vo.getIpVersion() != IPv6Constants.IPv4) { throw new ApiMessageInterceptionException(argerr("l3 network [uuid %s: name %s] is not a ipv4 network", l3Vo.getUuid(), l3Vo.getName())); if (NetworkUtils.isIpv4RangeOverlap("224.0.0.0", "239.255.255.255", ipr.getStartIp(), ipr.getEndIp())) { throw new ApiMessageInterceptionException(argerr("the IP range[%s ~ %s] contains D class addresses which are for multicast", ipr.getStartIp(), ipr.getEndIp())); if (NetworkUtils.isIpv4RangeOverlap("240.0.0.0", "255.255.255.255", ipr.getStartIp(), ipr.getEndIp())) { throw new ApiMessageInterceptionException(argerr("the IP range[%s ~ %s] contains E class addresses which are reserved", ipr.getStartIp(), ipr.getEndIp())); if (NetworkUtils.isIpv4RangeOverlap("169.254.1.0", "169.254.254.255", ipr.getStartIp(), ipr.getEndIp())) { throw new ApiMessageInterceptionException(argerr("the IP range[%s ~ %s] contains link local addresses which are reserved", ipr.getStartIp(), ipr.getEndIp())); SubnetUtils sub = new SubnetUtils(ipr.getStartIp(), ipr.getNetmask()); SubnetInfo info = sub.getInfo(); if (!info.isInRange(ipr.getGateway())) { throw new ApiMessageInterceptionException(argerr("the gateway[%s] is not in the subnet %s/%s", ipr.getGateway(), ipr.getStartIp(), ipr.getNetmask())); if (!info.isInRange(ipr.getEndIp())) { throw new ApiMessageInterceptionException(argerr("the endip[%s] is not in the subnet %s/%s", ipr.getEndIp(), ipr.getStartIp(), ipr.getNetmask())); if (!NetworkUtils.isIpv4Address(ipr.getStartIp())) { throw new ApiMessageInterceptionException(argerr("start ip[%s] is not a IPv4 address", ipr.getStartIp())); if (!NetworkUtils.isIpv4Address(ipr.getEndIp())) { throw new ApiMessageInterceptionException(argerr("end ip[%s] is not a IPv4 address", ipr.getEndIp())); if (!NetworkUtils.isIpv4Address(ipr.getGateway())) { throw new ApiMessageInterceptionException(argerr("gateway[%s] is not a IPv4 address", ipr.getGateway()));
private void validateIpv6Range(IpRangeInventory ipr) { if (ipr.getPrefixLen() > IPv6Constants.IPV6_PREFIX_LEN_MAX || ipr.getPrefixLen() < IPv6Constants.IPV6_PREFIX_LEN_MIN) { throw new ApiMessageInterceptionException(argerr("ip range prefix length is out of range [%d - %d] ", IPv6Constants.IPV6_PREFIX_LEN_MIN, IPv6Constants.IPV6_PREFIX_LEN_MAX)); L3NetworkVO l3Vo = Q.New(L3NetworkVO.class).eq(L3NetworkVO_.uuid, ipr.getL3NetworkUuid()).find(); if (l3Vo.getIpVersion() != IPv6Constants.IPv6) { throw new ApiMessageInterceptionException(argerr("l3 network [uuid %s: name %s] is not a ipv6 network", l3Vo.getUuid(), l3Vo.getName())); List<IpRangeVO> rangeVOS = Q.New(IpRangeVO.class).eq(IpRangeVO_.l3NetworkUuid, ipr.getL3NetworkUuid()).list(); if (rangeVOS != null && !rangeVOS.isEmpty()) { if (!rangeVOS.get(0).getAddressMode().equals(ipr.getAddressMode())) { throw new ApiMessageInterceptionException(argerr("addressMode[%s] is different from L3Netowork address mode[%s]", ipr.getAddressMode(), rangeVOS.get(0).getAddressMode())); if (!ipr.getAddressMode().equals(IPv6Constants.Stateful_DHCP) && ipr.getPrefixLen() != IPv6Constants.IPV6_STATELESS_PREFIX_LEN) { throw new ApiMessageInterceptionException(argerr("ipv6 prefix length must be %d for Stateless-DHCP or SLAAC", IPv6Constants.IPV6_STATELESS_PREFIX_LEN)); List<IpRangeVO> ranges = q.list(); for (IpRangeVO r : ranges) { if (IPv6NetworkUtils.isIpv6RangeOverlap(ipr.getStartIp(), ipr.getEndIp(), r.getStartIp(), r.getEndIp())) { throw new ApiMessageInterceptionException(argerr("new ip range [startip :%s, endip :%s] is overlaped with old ip range[startip :%s, endip :%s]", ipr.getStartIp(), ipr.getEndIp(), r.getStartIp(), r.getEndIp())); if (!r.getL3NetworkUuid().equals(ipr.getL3NetworkUuid())) { continue; 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()));
private Boolean isNetworkAddressEqual(String networkUuid1, String networkUuid2) { if (networkUuid1.equals(networkUuid2)) { return true; } L3NetworkVO l3vo1 = Q.New(L3NetworkVO.class).eq(L3NetworkVO_.uuid, networkUuid1).find(); L3NetworkVO l3vo2 = Q.New(L3NetworkVO.class).eq(L3NetworkVO_.uuid, networkUuid2).find(); if (!l3vo1.getIpVersion().equals(l3vo2.getIpVersion())) { return false; } List<IpRangeInventory> ipInvs1 = IpRangeInventory.valueOf(l3vo1.getIpRanges()); List<IpRangeInventory> ipInvs2 = IpRangeInventory.valueOf(l3vo2.getIpRanges()); if (l3vo1.getIpVersion() == IPv6Constants.IPv4) { String netAddr1 = new SubnetUtils(ipInvs1.get(0).getGateway(), ipInvs1.get(0).getNetmask()).getInfo().getNetworkAddress(); String netAddr2 = new SubnetUtils(ipInvs2.get(0).getGateway(), ipInvs2.get(0).getNetmask()).getInfo().getNetworkAddress(); return netAddr1.equals(netAddr2); } else if (l3vo1.getIpVersion() == IPv6Constants.IPv6) { return IPv6NetworkUtils.isIpv6CidrEqual(ipInvs1.get(0).getNetworkCidr(), ipInvs2.get(0).getNetworkCidr()); } return false; } private void validate(APICreateVirtualRouterOfferingMsg msg) {
IpRangeVO ipr = dbf.findByUuid(l3.getIpRanges().get(0).getUuid(), IpRangeVO.class); if (ipr.getIpVersion() == IPv6Constants.IPv6 && (ipr.getAddressMode().equals(IPv6Constants.SLAAC))) { struct.setMtu(new MtuGetter().getMtu(l3.getUuid())); if (l3.getIpRanges() != null && !l3.getIpRanges().isEmpty()) { struct.setRaMode(l3.getIpRanges().get(0).getAddressMode()); struct.setFirstIp(NetworkUtils.getSmallestIp(l3.getIpRanges().stream().map(r -> r.getStartIp()).collect(Collectors.toList()))); struct.setEndIP(NetworkUtils.getBiggesttIp(l3.getIpRanges().stream().map(r -> r.getEndIp()).collect(Collectors.toList()))); struct.setPrefixLength(l3.getIpRanges().get(0).getPrefixLen());
@Override public String call(IpRangeInventory arg) { return arg.getUuid(); } });
dhcpServerIp = IPv6NetworkUtils.ipv6TagValueToAddress(dhcpServerIp); if (inv.getIpVersion() == IPv6Constants.IPv4) { if (!NetworkUtils.isIpv4Address(dhcpServerIp)) { throw new ApiMessageInterceptionException(argerr("DHCP server ip [%s] is not a IPv4 address", dhcpServerIp)); if (!NetworkUtils.isIpv4InCidr(dhcpServerIp, inv.getNetworkCidr())) { throw new ApiMessageInterceptionException(argerr("DHCP server ip [%s] is not in the cidr [%s]", dhcpServerIp, inv.getNetworkCidr())); if (!IPv6NetworkUtils.isIpv6InCidrRange(dhcpServerIp, inv.getNetworkCidr())) { throw new ApiMessageInterceptionException(argerr("DHCP server ip [%s] is not in the cidr [%s]", dhcpServerIp, inv.getNetworkCidr())); String oldDhcpServer = FlatNetworkSystemTags.L3_NETWORK_DHCP_IP.getTokenByResourceUuid(inv.getL3NetworkUuid(), FlatNetworkSystemTags.L3_NETWORK_DHCP_IP_TOKEN); if (oldDhcpServer != null) { throw new ApiMessageInterceptionException(argerr("DHCP server ip [%s] is already existed in l3 network [%s]", IPv6NetworkUtils.ipv6TagValueToAddress(oldDhcpServer), inv.getL3NetworkUuid())); if (dhcpServerIp.equals(inv.getGateway())) { throw new ApiMessageInterceptionException(argerr("DHCP server ip [%s] can not be equaled to gateway ip", dhcpServerIp)); L3NetworkVO l3Vo = Q.New(L3NetworkVO.class).eq(L3NetworkVO_.uuid, inv.getL3NetworkUuid()).find(); if (l3Vo.isSystem()) { throw new ApiMessageInterceptionException(argerr("DHCP server ip [%s] can not be configured to system l3",
for (IpRangeVO range : ipRanges){ if (NetworkUtils.isInRange(nic.getIp(), range.getStartIp(), range.getEndIp())){ ips = IpRangeInventory.valueOf(range); break; vipvo.setGateway(nic.getGateway()); vipvo.setIp(nic.getIp()); vipvo.setIpRangeUuid(ips.getUuid()); vipvo.setL3NetworkUuid(nic.getL3NetworkUuid()); vipvo.setNetmask(nic.getNetmask());
if (NetworkUtils.isInRange(dhcpServerIp, ipr.getStartIp(), ipr.getEndIp())) { allocateDhcpIp(ipr.getL3NetworkUuid(), true, dhcpServerIp); } else { allocateDhcpIp(ipr.getL3NetworkUuid(), false, dhcpServerIp); String oldDhcpServerIp = getDHCPServerIP(ipr.getL3NetworkUuid()); if (oldDhcpServerIp != null && NetworkUtils.isInRange(oldDhcpServerIp, ipr.getStartIp(), ipr.getEndIp())) { deleteDhcpServerIp(ipr.getL3NetworkUuid(), oldDhcpServerIp); allocateDhcpIp(ipr.getL3NetworkUuid(), true, oldDhcpServerIp);
private void validate(APIAddIpRangeMsg msg) { IpRangeInventory ipr =IpRangeInventory.fromMessage(msg); validate(ipr); }
@Override public String call(IpRangeInventory arg) { return arg.getL3NetworkUuid(); } });
for (ApplianceVmVO vm : vmvos1) { for (VmNicVO nic : vm.getVmNics()) { if (ipr.getGateway().equals(nic.getIp())) { vmvos.add(vm);
} else { L3NetworkInventory inv = L3NetworkInventory.valueOf(l3Vo); if (!inv.getIpRanges().get(0).getAddressMode().equals(IPv6Constants.SLAAC)) { statefulIpv6++;