Added neutron port to endpoint mapping and vice versa 29/20229/2
authorMartin Sunal <msunal@cisco.com>
Tue, 12 May 2015 23:37:26 +0000 (01:37 +0200)
committerMartin Sunal <msunal@cisco.com>
Wed, 13 May 2015 23:57:37 +0000 (23:57 +0000)
Signed-off-by: Martin Sunal <msunal@cisco.com>
neutron-mapper/pom.xml
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/mapping/NeutronPortAware.java
neutron-mapper/src/main/java/org/opendaylight/groupbasedpolicy/neutron/mapper/util/IidFactory.java
neutron-mapper/src/main/yang/mapper.yang
neutron-mapper/src/main/yang/neutron-gbp-mapper.yang [new file with mode: 0644]

index 968349cb9f57d279c280734049cf385902035150..77b7040d24c154c09eda742e7f13de85996cb2e8 100644 (file)
@@ -57,7 +57,7 @@
         <artifactId>maven-bundle-plugin</artifactId>
         <configuration>
           <instructions>
-            <Export-Package></Export-Package>
+            <Export-Package>org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.*</Export-Package>
             <Import-Package>*</Import-Package>
           </instructions>
         </configuration>
index 5e653cff8b297762df56b25b3adf5cf884426ad6..4f391e3be5cd9d1999308f62054d99c952d9ebb5 100644 (file)
@@ -40,6 +40,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Name;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.UniqueId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.EndpointService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInputBuilder;
@@ -53,6 +54,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L2Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L3;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.unregister.endpoint.input.L3Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.endpoints.by.ports.EndpointByPort;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.endpoints.by.ports.EndpointByPortBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.neutron.by.gbp.mappings.ports.by.endpoints.PortByEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.neutron.by.gbp.mappings.ports.by.endpoints.PortByEndpointBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.EndpointGroup;
@@ -179,9 +184,17 @@ public class NeutronPortAware implements INeutronPortAware {
         if (!isFwCtxValid) {
             return false;
         }
+        EndpointKey epKey = new EndpointKey(fwCtx.getL2BridgeDomain().getId(), new MacAddress(port.getMacAddress()));
+        UniqueId portId = new UniqueId(port.getID());
+        EndpointByPort endpointByPort = createEndpointByPort(epKey, portId);
+        rwTx.put(LogicalDatastoreType.OPERATIONAL, IidFactory.endpointByPortIid(portId), endpointByPort);
+        PortByEndpoint portByEndpoint = createPortByEndpoint(portId, epKey);
+        rwTx.put(LogicalDatastoreType.OPERATIONAL,
+                IidFactory.portByEndpointIid(epKey.getL2Context(), epKey.getMacAddress()), portByEndpoint);
 
         try {
             RegisterEndpointInput registerEpRpcInput = createRegisterEndpointInput(port, fwCtx);
+
             RpcResult<Void> rpcResult = epService.registerEndpoint(registerEpRpcInput).get();
             if (!rpcResult.isSuccessful()) {
                 LOG.warn("Illegal state - RPC registerEndpoint failed. Input of RPC: {}", registerEpRpcInput);
@@ -210,6 +223,20 @@ public class NeutronPortAware implements INeutronPortAware {
         return true;
     }
 
+    private static EndpointByPort createEndpointByPort(EndpointKey epKey, UniqueId portId) {
+        return new EndpointByPortBuilder().setPortId(portId)
+            .setL2Context(epKey.getL2Context())
+            .setMacAddress(epKey.getMacAddress())
+            .build();
+    }
+
+    private static PortByEndpoint createPortByEndpoint(UniqueId portId, EndpointKey epKey) {
+        return new PortByEndpointBuilder().setPortId(portId)
+            .setL2Context(epKey.getL2Context())
+            .setMacAddress(epKey.getMacAddress())
+            .build();
+    }
+
     private List<NeutronSecurityRule> createDhcpSecRules(NeutronPort port, EndpointGroupId consumerEpgId, ReadTransaction rTx) {
         TenantId tenantId = new TenantId(Utils.normalizeUuid(port.getTenantID()));
         Neutron_IPs firstIp = MappingUtils.getFirstIp(port.getFixedIPs());
index ecb69cebc13cf08748c94a5549c704396a1c6186..f561a9d446727df20eb0f9a9d7e2a86c54e0c9ad 100644 (file)
@@ -29,6 +29,14 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Key;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.GbpByNeutronMappings;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.NeutronByGbpMappings;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.EndpointsByPorts;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.endpoints.by.ports.EndpointByPort;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.gbp.by.neutron.mappings.endpoints.by.ports.EndpointByPortKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.neutron.by.gbp.mappings.PortsByEndpoints;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.neutron.by.gbp.mappings.ports.by.endpoints.PortByEndpoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.mappings.neutron.by.gbp.mappings.ports.by.endpoints.PortByEndpointKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.mapper.rev150223.Mappings;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.mapper.rev150223.mappings.EndpointGroupPairToContractMappings;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.mapper.rev150223.mappings.NetworkMappings;
@@ -223,4 +231,22 @@ public class IidFactory {
             .child(Subnet.class, new SubnetKey(subnetId))
             .build();
     }
+
+    public static InstanceIdentifier<EndpointByPort> endpointByPortIid(UniqueId portId) {
+        return InstanceIdentifier.builder(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.Mappings.class)
+            .child(GbpByNeutronMappings.class)
+            .child(EndpointsByPorts.class)
+            .child(EndpointByPort.class, new EndpointByPortKey(portId))
+            .build();
+    }
+
+    public static InstanceIdentifier<PortByEndpoint> portByEndpointIid(L2BridgeDomainId l2BdId, MacAddress mac) {
+        return InstanceIdentifier.builder(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.Mappings.class)
+            .child(NeutronByGbpMappings.class)
+            .child(PortsByEndpoints.class)
+            .child(PortByEndpoint.class, new PortByEndpointKey(l2BdId, mac))
+            .build();
+    }
 }
index 2918bc5e24f1b634118c4a2fd593cf2aeb303453..5cbed899a6e0614317495f3eaf936d56df05ed7b 100644 (file)
@@ -9,7 +9,8 @@ module neutron-mapper {
     import ietf-inet-types {prefix inet;}
 
     description 
-        "This module defines the mapping model between Neutron IDs and GBP IDs.";
+        "This module defines the mapping model between Neutron IDs and GBP IDs. 
+        These mappings are used just internaly and are NOT EXPORTED.";
 
     revision "2015-02-23" {
         description
diff --git a/neutron-mapper/src/main/yang/neutron-gbp-mapper.yang b/neutron-mapper/src/main/yang/neutron-gbp-mapper.yang
new file mode 100644 (file)
index 0000000..ad6967f
--- /dev/null
@@ -0,0 +1,56 @@
+module neutron-gbp-mapper {
+    yang-version 1;
+
+    namespace "urn:opendaylight:groupbasedpolicy:neutron-gbp-mapper";
+    prefix "neutron-gbp-mapper";
+
+    import gbp-common {prefix gbp-common;}
+    import endpoint {prefix gbp-endpoint;}
+    import ietf-inet-types {prefix inet;}
+
+    description 
+        "This module defines the mapping model between Neutron entities and GBP entities.";
+
+    revision "2015-05-13" {
+        description
+            "Initial revision.";
+    }
+
+    grouping neutron-port-key {
+        leaf port-id {
+            description "A unique ID for the neutron port";
+            type gbp-common:unique-id;
+        }
+    }
+
+    container mappings {
+        description "Mapping of neutron entities by groupbasedpolicy entities and vice versa.";
+        config false;
+        container neutron-by-gbp-mappings {
+            description "Neutron entities by groupbasedpolicy entities";
+            container ports-by-endpoints {
+                description "Neutron ports by groupbasedpolicy endpoint";
+                list port-by-endpoint {
+                    description "Neutron port key by groupbasedpolicy endpoint key";
+                    key "l2-context mac-address";
+                    uses gbp-endpoint:l2-key;
+                    uses neutron-port-key;
+                }
+            }
+        }
+
+        container gbp-by-neutron-mappings {
+            description "Groupbasedpolicy entities by neutron entities";
+            container endpoints-by-ports {
+                description "Groupbasedpolicy endpoints by neutron ports";
+                list endpoint-by-port {
+                    description "Groupbasedpolicy endpoint key by neutron port key";
+                    key port-id;
+                    uses neutron-port-key;
+                    uses gbp-endpoint:l2-key;
+                }
+            }
+        }
+    }
+
+}
\ No newline at end of file