import static com.google.common.base.Preconditions.checkNotNull;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
-import java.util.stream.Stream;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.has.subnet.SubnetBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.has.subnet.subnet.AllocationPool;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.has.subnet.subnet.AllocationPoolBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.has.subnet.subnet.DhcpServers;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.has.subnet.subnet.DhcpServersBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.has.subnet.subnet.GatewaysBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.has.subnet.subnet.gateways.PrefixesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.forwarding.by.tenant.NetworkDomain;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.forwarding.forwarding.by.tenant.NetworkDomainBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.PortBindingExtension;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.FixedIps;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtension;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
Neutron neutron, IpAddress gwIpAddress) {
SubnetBuilder sb = new SubnetBuilder();
sb.setIpPrefix(subnet.getCidr());
- sb.setDhcpServers(resolveDhcpServerIp(neutron, subnet));
sb.setDefaultSubnetGatewayIp(subnet.getGatewayIp());
if (gwIpAddress != null) {
sb.setGateways(Collections.singletonList(new GatewaysBuilder().setGateway(gwIpAddress)
return ndb.build();
}
- private static List<DhcpServers> resolveDhcpServerIp(Neutron neutron,
- org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.Subnet subnet) {
- if (neutron == null || neutron.getPorts() == null || neutron.getPorts().getPort() == null) {
- return new ArrayList<>();
- }
- final List<DhcpServers> dhcpServers = new ArrayList<>();
-
- Stream<Port> ports = neutron.getPorts().getPort().stream()
- .filter(port -> subnet.getNetworkId().equals(port.getNetworkId()))
- .filter(port -> port.getDeviceId().contains(subnet.getNetworkId().getValue()));
-
- ports.forEach(port -> {
- java.util.Optional<FixedIps> optionalDhcpServerIp = port.getFixedIps().stream().findFirst();
- PortBindingExtension portBindingExtension = port.getAugmentation(PortBindingExtension.class);
- if (optionalDhcpServerIp.isPresent() && portBindingExtension != null && subnet.getUuid()
- .equals(optionalDhcpServerIp.get().getSubnetId())) {
- dhcpServers.add(new DhcpServersBuilder()
- .setDhcpServerIp(optionalDhcpServerIp.get().getIpAddress())
- .setNode(portBindingExtension.getHostId())
- .build());
- LOG.trace("Found DHCP server IP address: {} for node: {} in subnet: {}",
- optionalDhcpServerIp.get().getIpAddress(), portBindingExtension.getHostId(), subnet);
- }
- });
- return dhcpServers;
- }
-
@Deprecated
private void processTenantSubnet(org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.Subnet neutronSubnet, Network networkOfSubnet, TenantId tenantId, ReadWriteTransaction rwTx) {
Subnet subnet;