Programming ingress table for OF-tunnels 97/79597/12
authorEdw7n <n.edwin.anthony@ericsson.com>
Fri, 15 Mar 2019 08:14:24 +0000 (13:44 +0530)
committerFaseela K <faseela.k@ericsson.com>
Mon, 6 May 2019 08:20:37 +0000 (08:20 +0000)
- to program ingress flow per OF-tunnel basis
- table 0 will now also match on source IP

Change-Id: Ifad2202aaa30ac40479cab34266055676403ef49
Signed-off-by: Edw7n <n.edwin.anthony@ericsson.com>
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/renderer/ovs/utilities/DirectTunnelUtils.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/itmdirecttunnels/workers/TunnelStateAddWorker.java

index 175176214509fec974b4b9271224447b5f69ef8f..b74e65a5da718e5756283f11193178944d35b559 100644 (file)
@@ -43,9 +43,11 @@ import org.opendaylight.genius.mdsalutil.instructions.InstructionWriteMetadata;
 import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
 import org.opendaylight.genius.mdsalutil.matches.MatchInPort;
 import org.opendaylight.genius.mdsalutil.nxmatches.NxMatchRegister;
+import org.opendaylight.genius.mdsalutil.nxmatches.NxMatchTunnelSourceIp;
 import org.opendaylight.genius.utils.clustering.EntityOwnershipUtils;
 import org.opendaylight.infrautils.utils.concurrent.KeyedLocks;
 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.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
@@ -350,12 +352,15 @@ public final class DirectTunnelUtils {
     }
 
     public void addTunnelIngressFlow(TypedWriteTransaction<Configuration> tx, BigInteger dpnId, long portNo,
-        String interfaceName, int ifIndex) {
+                                     String interfaceName, int ifIndex, Ipv4Address ipAddress) {
         LOG.debug("Adding tunnel ingress flow for {}", interfaceName);
         List<MatchInfoBase> matches = new ArrayList<>();
 
         List<InstructionInfo> mkInstructions = new ArrayList<>();
         matches.add(new MatchInPort(dpnId, portNo));
+        if (itmConfig.isUseOfTunnels()) {
+            matches.add(new NxMatchTunnelSourceIp(ipAddress));
+        }
         mkInstructions.add(new InstructionWriteMetadata(MetaDataUtil.getLportTagMetaData(ifIndex)
             .or(BigInteger.ONE), MetaDataUtil.METADATA_MASK_LPORT_TAG_SH_FLAG));
         short tableId = NwConstants.INTERNAL_TUNNEL_TABLE;
index ffb77c7002a60b7310c3b00cba3d95081071abde..2532987b175aa6bdd02930488e298a0e8d15dec3 100644 (file)
@@ -85,7 +85,9 @@ public final class TunnelStateAddWorker {
             return Collections.singletonList(txRunner.callWithNewWriteOnlyTransactionAndSubmit(Datastore.CONFIGURATION,
                 tx -> {
                     BigInteger dpId = DirectTunnelUtils.getDpnFromNodeConnectorId(nodeConnectorId);
-                    directTunnelUtils.addTunnelIngressFlow(tx, dpId, portNo, interfaceName, stateTnl.getIfIndex());
+                    directTunnelUtils.addTunnelIngressFlow(tx, dpId, portNo, interfaceName, stateTnl.getIfIndex(),
+                        tunnelStateInfo.getDstDpnTepsInfo().getTunnelEndPoints().get(0).getIpAddress()
+                            .getIpv4Address());
                     directTunnelUtils.addTunnelEgressFlow(tx, dpId, String.valueOf(portNo),
                         tunnelStateInfo.getDstDpnTepsInfo().getDstId(), interfaceName,
                         tunnelStateInfo.getDstDpnTepsInfo().getTunnelEndPoints().get(0).getIpAddress());