private void registerDhcpInfo(OpenstackPort openstackPort) { checkNotNull(openstackPort); checkArgument(!openstackPort.fixedIps().isEmpty()); OpenstackSubnet openstackSubnet = openstackService.subnets().stream() .filter(n -> n.networkId().equals(openstackPort.networkId())) .findFirst().orElse(null); if (openstackSubnet == null) { log.warn("Failed to find subnet for {}", openstackPort); return; } Ip4Address ipAddress = openstackPort.fixedIps().values().stream().findFirst().get(); IpPrefix subnetPrefix = IpPrefix.valueOf(openstackSubnet.cidr()); Ip4Address broadcast = Ip4Address.makeMaskedAddress( ipAddress, subnetPrefix.prefixLength()); // TODO: supports multiple DNS servers Ip4Address domainServer = openstackSubnet.dnsNameservers().isEmpty() ? DNS_SERVER_IP : openstackSubnet.dnsNameservers().get(0); IpAssignment ipAssignment = IpAssignment.builder() .ipAddress(ipAddress) .leasePeriod(DHCP_INFINITE_LEASE) .timestamp(new Date()) .subnetMask(Ip4Address.makeMaskPrefix(subnetPrefix.prefixLength())) .broadcast(broadcast) .domainServer(domainServer) .assignmentStatus(Option_RangeNotEnforced) .routerAddress(Ip4Address.valueOf(openstackSubnet.gatewayIp())) .build(); dhcpService.setStaticMapping(openstackPort.macAddress(), ipAssignment); }
if (ip4Prefix.prefixLength() != Ip4Prefix.MAX_MASK_LENGTH) { Ip4Address maskAddr = Ip4Address.makeMaskPrefix(ip4Prefix.prefixLength()); Masked<IPv4Address> maskedIp = Masked.of(IPv4Address.of(ip4Prefix.address().toInt()), if (ip4Prefix.prefixLength() != Ip4Prefix.MAX_MASK_LENGTH) { Ip4Address maskAddr = Ip4Address.makeMaskPrefix(ip4Prefix.prefixLength()); Masked<IPv4Address> maskedIp = Masked.of(IPv4Address.of(ip4Prefix.address().toInt()),