+++ /dev/null
-/*
- * Copyright (c) 2013, 2015 IBM Corporation and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.netvirt.openstack.netvirt.translator.crud.impl;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.netvirt.openstack.netvirt.translator.NeutronPort;
-import org.opendaylight.netvirt.openstack.netvirt.translator.NeutronPort_AllowedAddressPairs;
-import org.opendaylight.netvirt.openstack.netvirt.translator.NeutronPort_ExtraDHCPOption;
-import org.opendaylight.netvirt.openstack.netvirt.translator.NeutronSecurityGroup;
-import org.opendaylight.netvirt.openstack.netvirt.translator.Neutron_IPs;
-import org.opendaylight.netvirt.openstack.netvirt.translator.crud.INeutronPortCRUD;
-import org.opendaylight.netvirt.openstack.netvirt.translator.crud.INeutronSecurityGroupCRUD;
-import org.opendaylight.netvirt.openstack.netvirt.translator.crud.NeutronCRUDInterfaces;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.PortBindingExtension;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.PortBindingExtensionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.binding.attributes.VifDetails;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.binding.attributes.VifDetailsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.AllowedAddressPairs;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.AllowedAddressPairsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.ExtraDhcpOpts;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.port.attributes.ExtraDhcpOptsBuilder;
-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.port.attributes.FixedIpsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.Ports;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.portsecurity.rev150712.PortSecurityExtension;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.portsecurity.rev150712.PortSecurityExtensionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.types.rev160517.IpPrefixOrAddress;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class NeutronPortInterface extends AbstractNeutronInterface<Port, NeutronPort> implements INeutronPortCRUD {
- private static final Logger LOG = LoggerFactory.getLogger(NeutronPortInterface.class);
-
- NeutronPortInterface(final DataBroker dataBroker) {
- super(dataBroker);
- }
-
- // IfNBPortCRUD methods
-
- @Override
- public boolean portExists(String uuid) {
- Port port = readMd(createInstanceIdentifier(toMd(uuid)));
- return port != null;
- }
-
- @Override
- public NeutronPort getPort(String uuid) {
- Port port = readMd(createInstanceIdentifier(toMd(uuid)));
- if (port == null) {
- return null;
- }
- return fromMd(port);
- }
-
- @Override
- public List<NeutronPort> getAllPorts() {
- Set<NeutronPort> allPorts = new HashSet<>();
- Ports ports = readMd(createInstanceIdentifier());
- if (ports != null) {
- for (Port port : ports.getPort()) {
- allPorts.add(fromMd(port));
- }
- }
- LOG.debug("Exiting getAllPorts, Found {} OpenStackPorts", allPorts.size());
- List<NeutronPort> ans = new ArrayList<>();
- ans.addAll(allPorts);
- return ans;
- }
-
- @Override
- public boolean addPort(NeutronPort input) {
- if (portExists(input.getID())) {
- return false;
- }
- addMd(input);
- return true;
- }
-
- @Override
- public boolean removePort(String uuid) {
- if (!portExists(uuid)) {
- return false;
- }
- return removeMd(toMd(uuid));
- }
-
- @Override
- public boolean updatePort(String uuid, NeutronPort delta) {
- if (!portExists(uuid)) {
- return false;
- }
- updateMd(delta);
- return true;
- }
-
- // @deprecated, will be removed in Boron
- @Override
- public boolean macInUse(String macAddress) {
- return false;
- }
-
- // @deprecated, will be removed in Boron
- @Override
- public NeutronPort getGatewayPort(String subnetUUID) {
- return null;
- }
-
- @Override
- protected InstanceIdentifier<Port> createInstanceIdentifier(Port port) {
- return InstanceIdentifier.create(Neutron.class)
- .child(Ports.class)
- .child(Port.class, port.getKey());
- }
-
- protected InstanceIdentifier<Ports> createInstanceIdentifier() {
- return InstanceIdentifier.create(Neutron.class)
- .child(Ports.class);
- }
-
- protected void addExtensions(Port port, NeutronPort result) {
- PortBindingExtension binding = port.getAugmentation(PortBindingExtension.class);
- result.setBindinghostID(binding.getHostId());
- if (binding.getVifDetails() != null) {
- final Map<String, String> details = new HashMap<>(binding.getVifDetails().size());
- for (final VifDetails vifDetail : binding.getVifDetails()) {
- details.put(vifDetail.getDetailsKey(), vifDetail.getValue());
- }
- result.setVIFDetails(details);
- }
- result.setBindingvifType(binding.getVifType());
- result.setBindingvnicType(binding.getVnicType());
- }
-
- private void portSecurityExtension(Port port, NeutronPort result) {
- PortSecurityExtension portSecurity = port.getAugmentation(PortSecurityExtension.class);
- if(portSecurity != null && portSecurity.isPortSecurityEnabled() != null) {
- result.setPortSecurityEnabled(portSecurity.isPortSecurityEnabled());
- }
- }
-
- protected NeutronPort fromMd(Port port) {
- NeutronPort result = new NeutronPort();
- result.setAdminStateUp(port.isAdminStateUp());
- if (port.getAllowedAddressPairs() != null) {
- List<NeutronPort_AllowedAddressPairs> pairs = new ArrayList<>();
- for (AllowedAddressPairs mdPair : port.getAllowedAddressPairs()) {
- NeutronPort_AllowedAddressPairs pair = new NeutronPort_AllowedAddressPairs();
- pair.setIpAddress(String.valueOf(mdPair.getIpAddress().getValue()));
- pair.setMacAddress(mdPair.getMacAddress().getValue());
- pairs.add(pair);
- }
- result.setAllowedAddressPairs(pairs);
- }
- result.setDeviceID(port.getDeviceId());
- result.setDeviceOwner(port.getDeviceOwner());
- if (port.getExtraDhcpOpts() != null) {
- List<NeutronPort_ExtraDHCPOption> options = new ArrayList<>();
- for (ExtraDhcpOpts opt : port.getExtraDhcpOpts()) {
- NeutronPort_ExtraDHCPOption arg = new NeutronPort_ExtraDHCPOption();
- arg.setName(opt.getOptName());
- arg.setValue(opt.getOptValue());
- options.add(arg);
- }
- result.setExtraDHCPOptions(options);
- }
- if (port.getFixedIps() != null) {
- List<Neutron_IPs> ips = new ArrayList<>();
- for (FixedIps mdIP : port.getFixedIps()) {
- Neutron_IPs ip = new Neutron_IPs();
- ip.setIpAddress(String.valueOf(mdIP.getIpAddress().getValue()));
- ip.setSubnetUUID(mdIP.getSubnetId().getValue());
- ips.add(ip);
- }
- result.setFixedIPs(ips);
- }
- result.setMacAddress(port.getMacAddress().getValue());
- result.setName(port.getName());
- result.setNetworkUUID(String.valueOf(port.getNetworkId().getValue()));
- if (port.getSecurityGroups() != null) {
- Set<NeutronSecurityGroup> allGroups = new HashSet<>();
- NeutronCRUDInterfaces interfaces = new NeutronCRUDInterfaces().fetchINeutronSecurityGroupCRUD(this);
- INeutronSecurityGroupCRUD sgIf = interfaces.getSecurityGroupInterface();
- for (Uuid sgUuid : port.getSecurityGroups()) {
- NeutronSecurityGroup secGroup = sgIf.getNeutronSecurityGroup(sgUuid.getValue());
- if (secGroup != null) {
- allGroups.add(sgIf.getNeutronSecurityGroup(sgUuid.getValue()));
- }
- }
- List<NeutronSecurityGroup> groups = new ArrayList<>();
- groups.addAll(allGroups);
- result.setSecurityGroups(groups);
- }
- result.setStatus(port.getStatus());
- if (port.getTenantId() != null) {
- result.setTenantID(String.valueOf(port.getTenantId().getValue()).replace("-", ""));
- }
- result.setPortUUID(String.valueOf(port.getUuid().getValue()));
- addExtensions(port, result);
- portSecurityExtension(port, result);
- return result;
- }
-
- @Override
- protected Port toMd(NeutronPort neutronPort) {
- PortBindingExtensionBuilder bindingBuilder = new PortBindingExtensionBuilder();
- if (neutronPort.getBindinghostID() != null) {
- bindingBuilder.setHostId(neutronPort.getBindinghostID());
- }
- if (neutronPort.getVIFDetails() != null) {
- final Map<String, String> vifDetails = neutronPort.getVIFDetails();
- final List<VifDetails> listVifDetail = new ArrayList<>(vifDetails.size());
- for (final Map.Entry<String, String> vifDetail : vifDetails.entrySet()) {
- final VifDetailsBuilder vifDetailsBuilder = new VifDetailsBuilder();
- if (vifDetail.getKey() != null) {
- vifDetailsBuilder.setDetailsKey(vifDetail.getKey());
- }
- if (vifDetail.getValue() != null) {
- vifDetailsBuilder.setValue(vifDetail.getValue());
- }
- listVifDetail.add(vifDetailsBuilder.build());
- }
- bindingBuilder.setVifDetails(listVifDetail);
- }
- if (neutronPort.getBindingvifType() != null) {
- bindingBuilder.setVifType(neutronPort.getBindingvifType());
- }
- if (neutronPort.getBindingvnicType() != null) {
- bindingBuilder.setVnicType(neutronPort.getBindingvnicType());
- }
-
- PortSecurityExtensionBuilder portSecurityBuilder = new PortSecurityExtensionBuilder();
- if (neutronPort.getPortSecurityEnabled() != null) {
- portSecurityBuilder.setPortSecurityEnabled(neutronPort.getPortSecurityEnabled());
- }
- PortBuilder portBuilder = new PortBuilder();
- portBuilder.addAugmentation(PortBindingExtension.class,
- bindingBuilder.build());
- portBuilder.addAugmentation(PortSecurityExtension.class, portSecurityBuilder.build());
- portBuilder.setAdminStateUp(neutronPort.isAdminStateUp());
- if(neutronPort.getAllowedAddressPairs() != null) {
- List<AllowedAddressPairs> listAllowedAddressPairs = new ArrayList<>();
- for (NeutronPort_AllowedAddressPairs allowedAddressPairs : neutronPort.getAllowedAddressPairs()) {
- AllowedAddressPairsBuilder allowedAddressPairsBuilder = new AllowedAddressPairsBuilder();
- allowedAddressPairsBuilder.setIpAddress(new IpPrefixOrAddress(allowedAddressPairs.getIpAddress().toCharArray()));
- allowedAddressPairsBuilder.setMacAddress(new MacAddress(allowedAddressPairs.getMacAddress()));
- listAllowedAddressPairs.add(allowedAddressPairsBuilder.build());
- }
- portBuilder.setAllowedAddressPairs(listAllowedAddressPairs);
- }
- if (neutronPort.getDeviceID() != null) {
- portBuilder.setDeviceId(neutronPort.getDeviceID());
- }
- if (neutronPort.getDeviceOwner() != null) {
- portBuilder.setDeviceOwner(neutronPort.getDeviceOwner());
- }
- if (neutronPort.getExtraDHCPOptions() != null) {
- List<ExtraDhcpOpts> listExtraDHCPOptions = new ArrayList<>();
- for (NeutronPort_ExtraDHCPOption extraDHCPOption : neutronPort.getExtraDHCPOptions()) {
- ExtraDhcpOptsBuilder extraDHCPOptsBuilder = new ExtraDhcpOptsBuilder();
- extraDHCPOptsBuilder.setOptName(extraDHCPOption.getName());
- extraDHCPOptsBuilder.setOptValue(extraDHCPOption.getValue());
- listExtraDHCPOptions.add(extraDHCPOptsBuilder.build());
- }
- portBuilder.setExtraDhcpOpts(listExtraDHCPOptions);
- }
- if (neutronPort.getFixedIPs() != null) {
- List<FixedIps> listNeutronIPs = new ArrayList<>();
- for (Neutron_IPs neutron_IPs : neutronPort.getFixedIPs()) {
- FixedIpsBuilder fixedIpsBuilder = new FixedIpsBuilder();
- fixedIpsBuilder.setIpAddress(new IpAddress(neutron_IPs.getIpAddress().toCharArray()));
- fixedIpsBuilder.setSubnetId(toUuid(neutron_IPs.getSubnetUUID()));
- listNeutronIPs.add(fixedIpsBuilder.build());
- }
- portBuilder.setFixedIps(listNeutronIPs);
- }
- if (neutronPort.getMacAddress() != null) {
- portBuilder.setMacAddress(new MacAddress(neutronPort.getMacAddress()));
- }
- if (neutronPort.getName() != null) {
- portBuilder.setName(neutronPort.getName());
- }
- if (neutronPort.getNetworkUUID() != null) {
- portBuilder.setNetworkId(toUuid(neutronPort.getNetworkUUID()));
- }
- if (neutronPort.getSecurityGroups() != null) {
- List<Uuid> listSecurityGroups = new ArrayList<>();
- for (NeutronSecurityGroup neutronSecurityGroup : neutronPort.getSecurityGroups()) {
- listSecurityGroups.add(toUuid(neutronSecurityGroup.getID()));
- }
- portBuilder.setSecurityGroups(listSecurityGroups);
- }
- if (neutronPort.getStatus() != null) {
- portBuilder.setStatus(neutronPort.getStatus());
- }
- if (neutronPort.getTenantID() != null) {
- portBuilder.setTenantId(toUuid(neutronPort.getTenantID()));
- }
- if (neutronPort.getPortUUID() != null) {
- portBuilder.setUuid(toUuid(neutronPort.getPortUUID()));
- } else {
- LOG.warn("Attempting to write neutron port without UUID");
- }
- return portBuilder.build();
- }
-
- @Override
- protected Port toMd(String uuid) {
- PortBuilder portBuilder = new PortBuilder();
- portBuilder.setUuid(toUuid(uuid));
- return portBuilder.build();
- }
-
- public static void registerNewInterface(BundleContext context,
- final DataBroker dataBroker,
- List<ServiceRegistration<?>> registrations) {
- NeutronPortInterface neutronPortInterface = new NeutronPortInterface(dataBroker);
- ServiceRegistration<INeutronPortCRUD> neutronPortInterfaceRegistration = context.registerService(INeutronPortCRUD.class, neutronPortInterface, null);
- if(neutronPortInterfaceRegistration != null) {
- registrations.add(neutronPortInterfaceRegistration);
- }
- }
-}