X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=renderers%2Fofoverlay%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fgroupbasedpolicy%2Frenderer%2Fofoverlay%2Fflow%2FSourceMapper.java;h=60384d41d1b525067947a4ab2508172714708d90;hb=refs%2Fchanges%2F93%2F31593%2F8;hp=34f382783774ec016e8ee5b5be8378060d815b0c;hpb=88ce79d8700d69eabe2f4009a958c034302ab662;p=groupbasedpolicy.git diff --git a/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/SourceMapper.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/SourceMapper.java index 34f382783..60384d41d 100755 --- a/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/SourceMapper.java +++ b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/SourceMapper.java @@ -19,15 +19,14 @@ import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtil import java.math.BigInteger; import java.util.Collections; import java.util.HashSet; -import java.util.Map; import java.util.Set; +import org.opendaylight.groupbasedpolicy.dto.EgKey; +import org.opendaylight.groupbasedpolicy.dto.IndexedTenant; import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfContext; -import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager.FlowMap; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.OfWriter; +import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint.EndpointManager; import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.OrdinalFactory.EndpointFwdCtxOrdinals; -import org.opendaylight.groupbasedpolicy.resolver.EgKey; -import org.opendaylight.groupbasedpolicy.resolver.IndexedTenant; -import org.opendaylight.groupbasedpolicy.resolver.PolicyInfo; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow; @@ -36,9 +35,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.M import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint; -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.ofoverlay.rev140528.EndpointLocation.LocationType; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; @@ -75,48 +71,41 @@ public class SourceMapper extends FlowTable { } @Override - public void sync(NodeId nodeId, PolicyInfo policyInfo, FlowMap flowMap) throws Exception { + public void sync(NodeId nodeId, OfWriter ofWriter) throws Exception { - flowMap.writeFlow(nodeId, TABLE_ID, dropFlow(Integer.valueOf(1), null, TABLE_ID)); + ofWriter.writeFlow(nodeId, TABLE_ID, dropFlow(Integer.valueOf(1), null, TABLE_ID)); // Handle case where packets from from External - Map l3EpWithNatByL2Key = ctx.getEndpointManager().getL3EpWithNatByL2Key(); for (Endpoint ep : ctx.getEndpointManager().getEndpointsForNode(nodeId)) { - OfOverlayContext ofc = ep.getAugmentation(OfOverlayContext.class); - - IndexedTenant tenant = ctx.getPolicyResolver().getTenant(ep.getTenant()); + IndexedTenant tenant = ctx.getTenant(ep.getTenant()); if (tenant == null) continue; - EndpointFwdCtxOrdinals epFwdCtxOrds = OrdinalFactory.getEndpointFwdCtxOrdinals(ctx, policyInfo, ep); - EgKey sepg = new EgKey(ep.getTenant(), ep.getEndpointGroup()); + EndpointFwdCtxOrdinals epFwdCtxOrds = OrdinalFactory.getEndpointFwdCtxOrdinals(ctx, ep); + if (epFwdCtxOrds == null) { + LOG.debug("getEndpointFwdCtxOrdinals is null for EP {}", ep); + continue; + } - createRemoteTunnels(flowMap, nodeId, ep, policyInfo, epFwdCtxOrds); + createRemoteTunnels(ofWriter, nodeId, ep, epFwdCtxOrds); if (ep.getTenant() == null || (ep.getEndpointGroup() == null && ep.getEndpointGroups() == null)) { continue; } + OfOverlayContext ofc = ep.getAugmentation(OfOverlayContext.class); if (ofc != null && ofc.getNodeConnectorId() != null - && (ofc.getLocationType() == null || LocationType.Internal.equals(ofc.getLocationType()))) { + && (EndpointManager.isInternal(ep, ctx.getTenant(ep.getTenant()).getExternalImplicitGroups()))) { /** * Sync the local EP information. */ - syncEP(flowMap, nodeId, ep, ofc.getNodeConnectorId(), epFwdCtxOrds); - + syncEP(ofWriter, nodeId, ep, ofc.getNodeConnectorId(), epFwdCtxOrds); } -// if (l3EpWithNatByL2Key.containsKey(ep.getKey())) { -// Set external = ctx.getSwitchManager().getExternalPorts(nodeId); -// for (NodeConnectorId ncId : external) { -// // TODO Bug 3546 - Difficult: External port is unrelated to Tenant, L3C, L2BD.. -// syncEP(flowMap, nodeId, ep, ncId, epFwdCtxOrds); -// } -// } } } - private void createRemoteTunnels(FlowMap flowMap, NodeId nodeId, Endpoint ep, PolicyInfo policyInfo, - EndpointFwdCtxOrdinals epFwdCtxOrds) throws Exception { + private void createRemoteTunnels(OfWriter ofWriter, NodeId nodeId, Endpoint ep, EndpointFwdCtxOrdinals epFwdCtxOrds) + throws Exception { Set epgs = new HashSet<>(); // Get EPGs and add to Set to remove duplicates @@ -132,7 +121,7 @@ public class SourceMapper extends FlowTable { // Create tunnels on remote Nodes that may talk to us. for (EgKey epg : epgs) { - Set peers = Sets.union(Collections.singleton(epg), policyInfo.getPeers(epg)); + Set peers = Sets.union(Collections.singleton(epg), ctx.getCurrentPolicy().getPeers(epg)); for (EgKey peer : peers) { for (NodeId remoteNodeId : ctx.getEndpointManager().getNodesForGroup(peer)) { @@ -144,8 +133,8 @@ public class SourceMapper extends FlowTable { nodeId.getValue(), remoteNodeId.getValue()); continue; } - flowMap.writeFlow(remoteNodeId, TABLE_ID, createTunnelFlow(tunPort, epFwdCtxOrds)); - flowMap.writeFlow(remoteNodeId, TABLE_ID, createBroadcastFlow(tunPort, epFwdCtxOrds)); + ofWriter.writeFlow(remoteNodeId, TABLE_ID, createTunnelFlow(tunPort, epFwdCtxOrds)); + ofWriter.writeFlow(remoteNodeId, TABLE_ID, createBroadcastFlow(tunPort, epFwdCtxOrds)); } } } @@ -218,7 +207,7 @@ public class SourceMapper extends FlowTable { return flowb.build(); } - private void syncEP(FlowMap flowMap, NodeId nodeId, Endpoint ep, NodeConnectorId ncId, EndpointFwdCtxOrdinals epFwdCtxOrds) throws Exception { + private void syncEP(OfWriter ofWriter, NodeId nodeId, Endpoint ep, NodeConnectorId ncId, EndpointFwdCtxOrdinals epFwdCtxOrds) throws Exception { // TODO alagalah Li/Be: We should also match on EndpointL3 with the appropriate // network containment. This would solve a lot of problems and prepare for EndpointL3 RPC. @@ -247,7 +236,7 @@ public class SourceMapper extends FlowTable { .setInstructions( instructions(applyActionIns(segReg, scgReg, bdReg, fdReg, vrfReg,tunIdAction), gotoTableIns(ctx.getPolicyManager().getTABLEID_DESTINATION_MAPPER()))); - flowMap.writeFlow(nodeId, TABLE_ID, flowb.build()); + ofWriter.writeFlow(nodeId, TABLE_ID, flowb.build()); } }