From a5a209f946c3aded21f4ec3e6fa5addc8f26c93d Mon Sep 17 00:00:00 2001 From: Martin Sunal Date: Thu, 14 May 2015 01:48:02 +0200 Subject: [PATCH] Fixed missing tunnel type Change-Id: I23d5b1cad48f132f632da4e5b038953f0b9e0d32 Signed-off-by: Martin Sunal --- commons/parent/pom.xml | 8 ++ renderers/ofoverlay/pom.xml | 4 + .../ofoverlay/flow/DestinationMapper.java | 9 +- .../renderer/ofoverlay/flow/GroupTable.java | 5 +- .../ofoverlay/flow/PolicyEnforcer.java | 3 +- .../renderer/ofoverlay/flow/PortSecurity.java | 3 +- .../renderer/ofoverlay/flow/SourceMapper.java | 3 +- .../ofoverlay/node/SwitchManager.java | 96 ++++++++++++++----- .../ofoverlay/src/main/yang/ofoverlay.yang | 21 ++-- .../ofoverlay/flow/DestinationMapperTest.java | 30 ++++-- .../ofoverlay/flow/GroupTableTest.java | 31 +++--- .../ofoverlay/flow/PolicyEnforcerTest.java | 37 ++++--- .../ofoverlay/flow/PortSecurityTest.java | 9 +- 13 files changed, 181 insertions(+), 78 deletions(-) diff --git a/commons/parent/pom.xml b/commons/parent/pom.xml index d859cae99..fdfb3de03 100644 --- a/commons/parent/pom.xml +++ b/commons/parent/pom.xml @@ -95,6 +95,14 @@ openflowplugin-extension-nicira ${openflowplugin.version} + + + + org.opendaylight.ovsdb + southbound-api + ${ovsdb.southbound.version} + + diff --git a/renderers/ofoverlay/pom.xml b/renderers/ofoverlay/pom.xml index ddae38fd3..1b7fee0af 100644 --- a/renderers/ofoverlay/pom.xml +++ b/renderers/ofoverlay/pom.xml @@ -23,6 +23,10 @@ org.opendaylight.yangtools.model yang-ext + + org.opendaylight.ovsdb + southbound-api + diff --git a/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapper.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapper.java index 9feec5ee3..376126b34 100644 --- a/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapper.java +++ b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapper.java @@ -99,6 +99,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev14 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg5; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg6; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg7; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; @@ -698,8 +699,8 @@ public class DestinationMapper extends FlowTable { String nextHop; // BEGIN TUNNEL HANDLING - IpAddress tunDst = ctx.getSwitchManager().getTunnelIP(ofc.getNodeId()); - NodeConnectorId tunPort = ctx.getSwitchManager().getTunnelPort(nodeId); + IpAddress tunDst = ctx.getSwitchManager().getTunnelIP(ofc.getNodeId(), TunnelTypeVxlan.class); + NodeConnectorId tunPort = ctx.getSwitchManager().getTunnelPort(nodeId, TunnelTypeVxlan.class); if (tunDst == null) { LOG.warn("Failed to get Tunnel IP for NodeId {} with EP {}", nodeId, ep); return null; @@ -843,8 +844,8 @@ public class DestinationMapper extends FlowTable { String nextHop; // BEGIN TUNNEL HANDLING - IpAddress tunDst = ctx.getSwitchManager().getTunnelIP(ofc.getNodeId()); - NodeConnectorId tunPort = ctx.getSwitchManager().getTunnelPort(nodeId); + IpAddress tunDst = ctx.getSwitchManager().getTunnelIP(ofc.getNodeId(), TunnelTypeVxlan.class); + NodeConnectorId tunPort = ctx.getSwitchManager().getTunnelPort(nodeId, TunnelTypeVxlan.class); if (tunDst == null) { LOG.warn("Failed to get Tunnel IP for NodeId {} with L3Address {}", nodeId, destL3Address); return null; diff --git a/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTable.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTable.java index 1c2e1ad51..f6fdca252 100644 --- a/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTable.java +++ b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTable.java @@ -46,6 +46,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay. import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -189,9 +190,9 @@ public class GroupTable extends OfTable { bucketId |= 1L << 31; IpAddress tunDst = - ctx.getSwitchManager().getTunnelIP(destNode); + ctx.getSwitchManager().getTunnelIP(destNode, TunnelTypeVxlan.class); NodeConnectorId tunPort = - ctx.getSwitchManager().getTunnelPort(nodeId); + ctx.getSwitchManager().getTunnelPort(nodeId, TunnelTypeVxlan.class); if (tunDst == null || tunPort == null) continue; Action tundstAction = null; diff --git a/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcer.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcer.java index d895c4a2e..212130fc8 100644 --- a/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcer.java +++ b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcer.java @@ -67,6 +67,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev14 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg3; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg5; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg7; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -97,7 +98,7 @@ public class PolicyEnforcer extends FlowTable { flowMap.writeFlow(nodeId, TABLE_ID, dropFlow(Integer.valueOf(1), null)); - NodeConnectorId tunPort = ctx.getSwitchManager().getTunnelPort(nodeId); + NodeConnectorId tunPort = ctx.getSwitchManager().getTunnelPort(nodeId, TunnelTypeVxlan.class); if (tunPort != null) { flowMap.writeFlow(nodeId, TABLE_ID, allowFromTunnel(tunPort)); } diff --git a/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurity.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurity.java index 044834f83..00a08a783 100644 --- a/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurity.java +++ b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurity.java @@ -30,6 +30,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatchBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -56,7 +57,7 @@ public class PortSecurity extends FlowTable { public void sync(NodeId nodeId, PolicyInfo policyInfo, FlowMap flowMap) { // Allow traffic from tunnel and external ports - NodeConnectorId tunnelIf = ctx.getSwitchManager().getTunnelPort(nodeId); + NodeConnectorId tunnelIf = ctx.getSwitchManager().getTunnelPort(nodeId, TunnelTypeVxlan.class); if (tunnelIf != null) flowMap.writeFlow(nodeId, TABLE_ID, allowFromPort(tunnelIf)); Set external = 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 e469a5df0..9972a9d73 100644 --- 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 @@ -43,6 +43,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev14 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg4; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg5; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg6; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -119,7 +120,7 @@ public class SourceMapper extends FlowTable { // Please do not check for remote v local nodeID, we need local to local tunnels // in the case of chaining - The Great Dr Sunal. - NodeConnectorId tunPort = ctx.getSwitchManager().getTunnelPort(remoteNodeId); + NodeConnectorId tunPort = ctx.getSwitchManager().getTunnelPort(remoteNodeId, TunnelTypeVxlan.class); if (tunPort == null) { LOG.trace("No tunnel port for tunnel in SourceMapper between local:{} and remote:{}", nodeId.getValue(), remoteNodeId.getValue()); diff --git a/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/node/SwitchManager.java b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/node/SwitchManager.java index 0f11cab84..5b571ba94 100644 --- a/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/node/SwitchManager.java +++ b/renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/node/SwitchManager.java @@ -28,12 +28,16 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.Fl import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayConfig.EncapsulationFormat; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayNodeConfig; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.Tunnel; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.TunnelBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeBase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,6 +47,7 @@ import com.google.common.base.Objects; import com.google.common.base.Predicate; import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; /** @@ -107,21 +112,31 @@ public class SwitchManager implements AutoCloseable { SwitchState state = switches.get(nodeId); if (state == null) return Collections.emptySet(); - return state.externalPorts; + return ImmutableSet.copyOf(state.externalPorts); } - public synchronized NodeConnectorId getTunnelPort(NodeId nodeId) { + public synchronized NodeConnectorId getTunnelPort(NodeId nodeId, Class tunnelType) { SwitchState state = switches.get(nodeId); - if (state == null) + if (state == null) { + return null; + } + TunnelBuilder tunnel = state.tunnelBuilderByType.get(tunnelType); + if (tunnel == null) { return null; - return state.tunnelPort; + } + return tunnel.getNodeConnectorId(); } - public synchronized IpAddress getTunnelIP(NodeId nodeId) { + public synchronized IpAddress getTunnelIP(NodeId nodeId, Class tunnelType) { SwitchState state = switches.get(nodeId); - if (state == null || state.nodeConfig == null) + if (state == null) { return null; - return state.nodeConfig.getTunnelIp(); + } + TunnelBuilder tunnel = state.tunnelBuilderByType.get(tunnelType); + if (tunnel == null) { + return null; + } + return tunnel.getIp(); } /** @@ -228,7 +243,7 @@ public class SwitchManager implements AutoCloseable { private OfOverlayNodeConfig nodeConfig; private Map, FlowCapableNodeConnector> fcncByNcIid = Maps.newHashMap(); - NodeConnectorId tunnelPort; + Map, TunnelBuilder> tunnelBuilderByType = new HashMap<>(); Set externalPorts = new HashSet<>(); SwitchStatus status; @@ -244,14 +259,14 @@ public class SwitchManager implements AutoCloseable { public SwitchState(NodeId node, NodeConnectorId tunnelPort, Set externalPorts, OfOverlayNodeConfig nodeConfig) { this.nodeId = node; - this.tunnelPort = tunnelPort; - this.externalPorts = externalPorts; this.nodeConfig = nodeConfig; + update(); + this.externalPorts = externalPorts; } private void update() { - HashSet externalPorts = new HashSet<>(); - NodeConnectorId tunnelPort = null; + tunnelBuilderByType = new HashMap<>(); + externalPorts = new HashSet<>(); for (Entry, FlowCapableNodeConnector> fcncByNcIidEntry : fcncByNcIid.entrySet()) { FlowCapableNodeConnector fcnc = fcncByNcIidEntry.getValue(); if (fcnc.getName() == null) { @@ -259,8 +274,13 @@ public class SwitchManager implements AutoCloseable { } InstanceIdentifier ncIid = fcncByNcIidEntry.getKey(); NodeConnectorId ncId = ncIid.firstKeyOf(NodeConnector.class, NodeConnectorKey.class).getId(); - if (fcnc.getName().matches(".*(vxlan|tun).*")) { - tunnelPort = ncId; + if (fcnc.getName().matches(".*(vxlan).*")) { + TunnelBuilder tunnelBuilder = tunnelBuilderByType.get(TunnelTypeVxlan.class); + if (tunnelBuilder == null) { + tunnelBuilder = new TunnelBuilder().setTunnelType(TunnelTypeVxlan.class); + tunnelBuilderByType.put(TunnelTypeVxlan.class, tunnelBuilder); + } + tunnelBuilder.setNodeConnectorId(ncId); } if (nodeConfig != null && nodeConfig.getExternalInterfaces() != null) { for (String pattern : nodeConfig.getExternalInterfaces()) { @@ -271,14 +291,30 @@ public class SwitchManager implements AutoCloseable { } } } - this.tunnelPort = tunnelPort; - this.externalPorts = Collections.unmodifiableSet(externalPorts); + if (nodeConfig != null && nodeConfig.getTunnel() != null) { + for (Tunnel tunnel : nodeConfig.getTunnel()) { + TunnelBuilder tunnelBuilder = tunnelBuilderByType.get(tunnel.getTunnelType()); + if (tunnelBuilder == null) { + tunnelBuilder = new TunnelBuilder(); + tunnelBuilderByType.put(tunnel.getTunnelType(), tunnelBuilder); + } + if (tunnel.getIp() != null) { + tunnelBuilder.setIp(tunnel.getIp()); + } + if (tunnel.getNodeConnectorId() != null) { + tunnelBuilder.setNodeConnectorId(tunnel.getNodeConnectorId()); + } + if (tunnel.getPort() != null) { + tunnelBuilder.setPort(tunnel.getPort()); + } + } + } } private void updateStatus() { - boolean tunnelPortWithIpExists = tunnelPortWithIpExists(); + boolean tunnelWithIpAndNcExists = tunnelWithIpAndNcExists(); if (fcNode != null) { - if (tunnelPortWithIpExists) { + if (tunnelWithIpAndNcExists) { setStatus(SwitchStatus.READY); } else { setStatus(SwitchStatus.PREPARING); @@ -296,15 +332,23 @@ public class SwitchManager implements AutoCloseable { this.status = newStatus; } - private boolean tunnelPortWithIpExists() { - boolean tunnelPortWithIpExists = false; - if (tunnelPort != null && nodeConfig != null && nodeConfig.getTunnelIp() != null) { - tunnelPortWithIpExists = true; + private boolean tunnelWithIpAndNcExists() { + if (tunnelBuilderByType.isEmpty()) { + LOG.trace("No tunnel on switch {}", nodeId.getValue()); + return false; + } + LOG.trace("Iterating over tunnel till tunnel with IP and node-connector is not found."); + for (TunnelBuilder tb : tunnelBuilderByType.values()) { + if (tb.getIp() != null && tb.getNodeConnectorId() != null) { + LOG.trace("Tunnel found. Type: {} IP: {} Port: {} Node-connector: {}", tb.getTunnelType() + .getSimpleName(), tb.getIp(), tb.getPort(), tb.getNodeConnectorId()); + return true; + } else { + LOG.trace("Tunnel which is not completed: Type: {} IP: {} Port: {} Node-connector: {}", + tb.getTunnelType().getSimpleName(), tb.getIp(), tb.getPort(), tb.getNodeConnectorId()); + } } - LOG.trace("Status of tunnel on switch {} - tunnelPort: {} tunnelIp: {}", nodeId.getValue(), - tunnelPort == null ? null : tunnelPort.getValue(), - nodeConfig == null ? null : nodeConfig.getTunnelIp()); - return tunnelPortWithIpExists; + return false; } public boolean isConfigurationEmpty() { diff --git a/renderers/ofoverlay/src/main/yang/ofoverlay.yang b/renderers/ofoverlay/src/main/yang/ofoverlay.yang index d2b7d4989..9fd7523d6 100644 --- a/renderers/ofoverlay/src/main/yang/ofoverlay.yang +++ b/renderers/ofoverlay/src/main/yang/ofoverlay.yang @@ -15,7 +15,8 @@ module ofoverlay { import ietf-inet-types { prefix "inet"; revision-date 2010-09-24; } import yang-ext {prefix ext; revision-date "2013-07-09";} - import opendaylight-inventory {prefix inv;revision-date "2013-08-19";} + import opendaylight-inventory {prefix inv; revision-date "2013-08-19";} + import overlay {prefix ovsdb-overlay; revision-date 2015-01-05;} import gbp-common {prefix gbp-common;} import endpoint {prefix endpoint;} @@ -148,11 +149,19 @@ module ofoverlay { augment "/inv:nodes/inv:node" { ext:augment-identifier "of-overlay-node-config"; - - leaf tunnel-ip { - description - "The IP address used for tunnel termination on this switch"; - type inet:ip-address; + list tunnel { + key "tunnel-type"; + uses ovsdb-overlay:tunnel-type-attributes; + uses ovsdb-overlay:ip-port-locator; + leaf node-connector-id { + description + "The node connector where is the tunnel located. The + format is openflow:[dpid]:[port] where the dpid is + the value of the switch DPID cast to a long, and port + is the openflow port number of the interface where + the endpoint is connected."; + type inv:node-connector-id; + } } container ovsdb-config { leaf ip { diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapperTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapperTest.java index c8f442b10..a50eabc7e 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapperTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/DestinationMapperTest.java @@ -29,6 +29,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.r 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.EndpointBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayNodeConfigBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.TunnelBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; @@ -36,6 +37,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6Match; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg0; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg7; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -241,16 +243,24 @@ public class DestinationMapperTest extends FlowTableTest { } private void addSwitches() { - switchManager.addSwitch(nodeId, tunnelId, - Collections. emptySet(), - new OfOverlayNodeConfigBuilder() - .setTunnelIp(new IpAddress(new Ipv4Address("1.2.3.4"))) - .build()); - switchManager.addSwitch(remoteNodeId, remoteTunnelId, - Collections. emptySet(), - new OfOverlayNodeConfigBuilder() - .setTunnelIp(new IpAddress(new Ipv4Address("1.2.3.5"))) - .build()); + switchManager.addSwitch( + nodeId, + tunnelId, + Collections.emptySet(), + new OfOverlayNodeConfigBuilder().setTunnel( + ImmutableList.of(new TunnelBuilder().setIp(new IpAddress(new Ipv4Address("1.2.3.4"))) + .setTunnelType(TunnelTypeVxlan.class) + .setNodeConnectorId(tunnelId) + .build())).build()); + switchManager.addSwitch( + remoteNodeId, + remoteTunnelId, + Collections.emptySet(), + new OfOverlayNodeConfigBuilder().setTunnel( + ImmutableList.of(new TunnelBuilder().setIp(new IpAddress(new Ipv4Address("1.2.3.5"))) + .setTunnelType(TunnelTypeVxlan.class) + .setNodeConnectorId(tunnelId) + .build())).build()); } @Test diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTableTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTableTest.java index fc088f002..b3244c0d0 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTableTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/GroupTableTest.java @@ -23,8 +23,10 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayNodeConfigBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.TunnelBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.Contract; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,17 +56,24 @@ public class GroupTableTest extends OfTableTest { endpointManager.addEndpoint(localEp); Endpoint remoteEp = remoteEP(remoteNodeId).build(); endpointManager.addEndpoint(remoteEp); - - switchManager.addSwitch(nodeId, tunnelId, - Collections.emptySet(), - new OfOverlayNodeConfigBuilder() - .setTunnelIp(new IpAddress(new Ipv4Address("1.2.3.4"))) - .build()); - switchManager.addSwitch(remoteNodeId, remoteTunnelId, - Collections.emptySet(), - new OfOverlayNodeConfigBuilder() - .setTunnelIp(new IpAddress(new Ipv4Address("1.2.3.5"))) - .build()); + switchManager.addSwitch( + nodeId, + tunnelId, + Collections.emptySet(), + new OfOverlayNodeConfigBuilder().setTunnel( + ImmutableList.of(new TunnelBuilder().setIp(new IpAddress(new Ipv4Address("1.2.3.4"))) + .setTunnelType(TunnelTypeVxlan.class) + .setNodeConnectorId(tunnelId) + .build())).build()); + switchManager.addSwitch( + remoteNodeId, + remoteTunnelId, + Collections.emptySet(), + new OfOverlayNodeConfigBuilder().setTunnel( + ImmutableList.of(new TunnelBuilder().setIp(new IpAddress(new Ipv4Address("1.2.3.5"))) + .setTunnelType(TunnelTypeVxlan.class) + .setNodeConnectorId(tunnelId) + .build())).build()); policyResolver.addTenant(baseTenant().setContract( ImmutableList.of(baseContract(null).build())).build()); diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcerTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcerTest.java index 03658e4eb..377f4a881 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcerTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PolicyEnforcerTest.java @@ -32,6 +32,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayNodeConfigBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.TunnelBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.Matcher.MatchType; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRefBuilder; @@ -56,6 +57,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev14 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg3; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg7; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.GeneralAugMatchNodesNodeTableFlow; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -66,20 +68,25 @@ import static org.junit.Assert.*; import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.*; public class PolicyEnforcerTest extends FlowTableTest { - protected static final Logger LOG = + protected static final Logger LOG = LoggerFactory.getLogger(PolicyEnforcerTest.class); + @Override @Before public void setup() throws Exception { initCtx(); table = new PolicyEnforcer(ctx); super.setup(); - - switchManager.addSwitch(nodeId, tunnelId, - Collections.emptySet(), - new OfOverlayNodeConfigBuilder() - .setTunnelIp(new IpAddress(new Ipv4Address("1.2.3.4"))) - .build()); + + switchManager.addSwitch( + nodeId, + tunnelId, + Collections.emptySet(), + new OfOverlayNodeConfigBuilder().setTunnel( + ImmutableList.of(new TunnelBuilder().setIp(new IpAddress(new Ipv4Address("1.2.3.4"))) + .setTunnelType(TunnelTypeVxlan.class) + .setNodeConnectorId(tunnelId) + .build())).build()); } @Test @@ -212,7 +219,7 @@ public class PolicyEnforcerTest extends FlowTableTest { .getTcpDestinationPort()) )) { count += 1; - } + } } return count; } @@ -235,7 +242,7 @@ public class PolicyEnforcerTest extends FlowTableTest { .setCondition(ImmutableList.of(cond1.getName(), cond2.getName())) .setEndpointGroup(eg2) .build(); - endpointManager.addEndpoint(ep2); + endpointManager.addEndpoint(ep2); TenantBuilder tb = baseTenant() .setContract(ImmutableList.of(new ContractBuilder() @@ -264,13 +271,13 @@ public class PolicyEnforcerTest extends FlowTableTest { PolicyInfo policy = policyResolver.getCurrentPolicy(); List ep1c = endpointManager.getCondsForEndpoint(ep1); - ConditionGroup cg1 = - policy.getEgCondGroup(new EgKey(tb.getId(), + ConditionGroup cg1 = + policy.getEgCondGroup(new EgKey(tb.getId(), ep1.getEndpointGroup()), ep1c); List ep2c = endpointManager.getCondsForEndpoint(ep2); - ConditionGroup cg2 = - policy.getEgCondGroup(new EgKey(tb.getId(), + ConditionGroup cg2 = + policy.getEgCondGroup(new EgKey(tb.getId(), ep2.getEndpointGroup()), ep2c); int cg1Id = OrdinalFactory.getCondGroupOrdinal(cg1); @@ -283,14 +290,14 @@ public class PolicyEnforcerTest extends FlowTableTest { assertNotEquals(cg1Id, cg2Id); MatchBuilder mb = new MatchBuilder(); - FlowUtils.addNxRegMatch(mb, + FlowUtils.addNxRegMatch(mb, RegMatch.of(NxmNxReg0.class, Long.valueOf(eg1Id)), RegMatch.of(NxmNxReg1.class, Long.valueOf(cg1Id)), RegMatch.of(NxmNxReg2.class, Long.valueOf(eg2Id)), RegMatch.of(NxmNxReg3.class, Long.valueOf(cg2Id))); GeneralAugMatchNodesNodeTableFlow m1 = mb.getAugmentation(GeneralAugMatchNodesNodeTableFlow.class); - FlowUtils.addNxRegMatch(mb, + FlowUtils.addNxRegMatch(mb, RegMatch.of(NxmNxReg0.class, Long.valueOf(eg2Id)), RegMatch.of(NxmNxReg1.class, Long.valueOf(cg2Id)), RegMatch.of(NxmNxReg2.class, Long.valueOf(eg1Id)), diff --git a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurityTest.java b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurityTest.java index c3805160b..38103e02f 100755 --- a/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurityTest.java +++ b/renderers/ofoverlay/src/test/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/flow/PortSecurityTest.java @@ -26,11 +26,14 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.r import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayNodeConfigBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.nodes.node.TunnelBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatch; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6Match; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -80,7 +83,11 @@ public class PortSecurityTest extends FlowTableTest { .addSwitch(new NodeId("openflow:1"), new NodeConnectorId("openflow:1:1"), ImmutableSet.of(new NodeConnectorId("openflow:1:2")), - null); + new OfOverlayNodeConfigBuilder().setTunnel( + ImmutableList.of(new TunnelBuilder() + .setTunnelType(TunnelTypeVxlan.class) + .setNodeConnectorId(new NodeConnectorId("openflow:1:1")) + .build())).build()); FlowMap fm = dosync(null); assertNotEquals(0 ,fm.getTableForNode(nodeId, (short) 0).getFlow().size()); -- 2.36.6