2 * Copyright (c) 2013, 2015 IBM Corporation and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.neutron.transcriber;
11 import com.google.common.collect.ImmutableBiMap;
12 import java.util.ArrayList;
13 import java.util.List;
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
15 import org.opendaylight.neutron.spi.INeutronNetworkCRUD;
16 import org.opendaylight.neutron.spi.NeutronNetwork;
17 import org.opendaylight.neutron.spi.NeutronNetworkSegment;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.ext.rev150712.NetworkL3Extension;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.ext.rev150712.NetworkL3ExtensionBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeBase;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeFlat;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeGre;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeVlan;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeVxlan;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.Networks;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.NetworkBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.NetworkKey;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtension;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.NetworkProviderExtensionBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.neutron.networks.network.Segments;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.provider.ext.rev150712.neutron.networks.network.SegmentsBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.qos.ext.rev160613.QosNetworkExtension;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.qos.ext.rev160613.QosNetworkExtensionBuilder;
36 public final class NeutronNetworkInterface
37 extends AbstractNeutronInterface<Network, Networks, NetworkKey, NeutronNetwork>
38 implements INeutronNetworkCRUD {
39 private static final ImmutableBiMap<Class<? extends NetworkTypeBase>,
40 String> NETWORK_MAP = new ImmutableBiMap.Builder<Class<? extends NetworkTypeBase>, String>()
41 .put(NetworkTypeFlat.class, "flat").put(NetworkTypeGre.class, "gre")
42 .put(NetworkTypeVlan.class, "vlan").put(NetworkTypeVxlan.class, "vxlan").build();
44 NeutronNetworkInterface(DataBroker db) {
45 super(NetworkBuilder.class, db);
48 // IfNBNetworkCRUD methods
50 protected List<Network> getDataObjectList(Networks networks) {
51 return networks.getNetwork();
54 protected NeutronNetwork fromMd(Network network) {
55 final NeutronNetwork result = new NeutronNetwork();
56 result.initDefaults();
57 fromMdAdminAttributes(network, result);
58 result.setShared(network.isShared());
60 final NetworkL3Extension l3Extension = network.getAugmentation(NetworkL3Extension.class);
61 result.setRouterExternal(l3Extension.isExternal());
63 final NetworkProviderExtension providerExtension = network.getAugmentation(NetworkProviderExtension.class);
64 result.setProviderPhysicalNetwork(providerExtension.getPhysicalNetwork());
65 result.setProviderSegmentationID(providerExtension.getSegmentationId());
66 result.setProviderNetworkType(NETWORK_MAP.get(providerExtension.getNetworkType()));
67 final List<NeutronNetworkSegment> segments = new ArrayList<NeutronNetworkSegment>();
68 if (providerExtension.getSegments() != null) {
69 for (final Segments segment : providerExtension.getSegments()) {
70 final NeutronNetworkSegment neutronSegment = new NeutronNetworkSegment();
71 neutronSegment.setProviderPhysicalNetwork(segment.getPhysicalNetwork());
72 neutronSegment.setProviderSegmentationID(segment.getSegmentationId());
73 neutronSegment.setProviderNetworkType(NETWORK_MAP.get(segment.getNetworkType()));
74 segments.add(neutronSegment);
77 final QosNetworkExtension qos = network.getAugmentation(QosNetworkExtension.class);
78 if (qos != null && qos.getQosPolicyId() != null) {
79 result.setQosPolicyId(qos.getQosPolicyId().getValue());
81 result.setSegments(segments);
85 private void fillExtensions(NetworkBuilder networkBuilder, NeutronNetwork network) {
86 final NetworkL3ExtensionBuilder l3ExtensionBuilder = new NetworkL3ExtensionBuilder();
87 if (network.getRouterExternal() != null) {
88 l3ExtensionBuilder.setExternal(network.getRouterExternal());
91 final NetworkProviderExtensionBuilder providerExtensionBuilder = new NetworkProviderExtensionBuilder();
92 if (network.getProviderPhysicalNetwork() != null) {
93 providerExtensionBuilder.setPhysicalNetwork(network.getProviderPhysicalNetwork());
95 if (network.getProviderSegmentationID() != null) {
96 providerExtensionBuilder.setSegmentationId(network.getProviderSegmentationID());
98 if (network.getProviderNetworkType() != null) {
99 final ImmutableBiMap<String, Class<? extends NetworkTypeBase>> mapper = NETWORK_MAP.inverse();
100 providerExtensionBuilder
101 .setNetworkType((Class<? extends NetworkTypeBase>) mapper.get(network.getProviderNetworkType()));
103 if (network.getSegments() != null) {
104 final List<Segments> segments = new ArrayList<Segments>();
106 for (final NeutronNetworkSegment segment : network.getSegments()) {
108 final SegmentsBuilder segmentsBuilder = new SegmentsBuilder();
109 if (segment.getProviderPhysicalNetwork() != null) {
110 segmentsBuilder.setPhysicalNetwork(segment.getProviderPhysicalNetwork());
112 if (segment.getProviderSegmentationID() != null) {
113 segmentsBuilder.setSegmentationId(segment.getProviderSegmentationID());
115 if (segment.getProviderNetworkType() != null) {
116 final ImmutableBiMap<String, Class<? extends NetworkTypeBase>> mapper = NETWORK_MAP.inverse();
117 segmentsBuilder.setNetworkType(
118 (Class<? extends NetworkTypeBase>) mapper.get(segment.getProviderNetworkType()));
120 segmentsBuilder.setSegmentationIndex(Long.valueOf(count));
121 segments.add(segmentsBuilder.build());
123 providerExtensionBuilder.setSegments(segments);
125 if (network.getProviderSegmentationID() != null) {
126 providerExtensionBuilder.setSegmentationId(network.getProviderSegmentationID());
128 if (network.getQosPolicyId() != null) {
129 final QosNetworkExtensionBuilder qosExtensionBuilder = new QosNetworkExtensionBuilder();
130 qosExtensionBuilder.setQosPolicyId(toUuid(network.getQosPolicyId()));
131 networkBuilder.addAugmentation(QosNetworkExtension.class, qosExtensionBuilder.build());
133 networkBuilder.addAugmentation(NetworkL3Extension.class, l3ExtensionBuilder.build());
134 networkBuilder.addAugmentation(NetworkProviderExtension.class, providerExtensionBuilder.build());
137 protected Network toMd(NeutronNetwork network) {
138 final NetworkBuilder networkBuilder = new NetworkBuilder();
139 toMdAdminAttributes(network, networkBuilder);
140 fillExtensions(networkBuilder, network);
142 if (network.getShared() != null) {
143 networkBuilder.setShared(network.getShared());
145 return networkBuilder.build();