Bug 1695 - ignoring pipeline rules for any non-forwarding bridge 32/11432/2
authorMadhu Venugopal <mavenugo@gmail.com>
Mon, 22 Sep 2014 06:07:55 +0000 (23:07 -0700)
committerMadhu Venugopal <mavenugo@gmail.com>
Mon, 22 Sep 2014 07:28:53 +0000 (00:28 -0700)
By design, the AbstractServiceInstance kept the isBridgeInPipeline as an abstract method for its child concrete Services
to determine the behaviour.

But, the most important and basic case of allowing the pipeline flows on br-int and ignoring on all other Bridge seems
reasonable default in AbstractServiceInstance. This can be overriden by child Services if need be.

In addition to this fix, have also introduced a minor delay in PipelineOrchestrator as soon as a Node event is observed.
This should workaround one of the basic bugs (1997) on the pipeline management case at the minimum.

Change-Id: I34f1d24d3f72695851bda4379483c8ea2b292308
Signed-off-by: Madhu Venugopal <mavenugo@gmail.com>
14 files changed:
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/Activator.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/AbstractServiceInstance.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/PipelineOrchestratorImpl.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/ArpResponderService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/ClassifierService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/EgressAclService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/InboundNatService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/IngressAclService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/L2ForwardingService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/L2RewriteService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/L3ForwardingService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/LoadBalancerService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/OutboundNatService.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/services/RoutingService.java

index cffedb68bd46acafc44613f6ed87374d73384fdb..203ea8742b79f7be07705a32b8c88757ca3fce83 100644 (file)
@@ -187,6 +187,8 @@ public class Activator extends ComponentActivatorAbstractBase {
         }
 
         if (AbstractServiceInstance.class.isAssignableFrom((Class) imp)) {
+            c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
+            c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
             c.add(createServiceDependency()
                           .setService(PipelineOrchestrator.class)
                           .setRequired(true));
index add2bfe41d9b4c4f5fe4a123cd514222a02b460a..59805661bf7742b4955c3cdabfcfc9a6f52a8c30 100644 (file)
@@ -10,6 +10,8 @@
 package org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13;
 
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ExecutionException;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
@@ -18,6 +20,12 @@ import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.controller.sal.utils.HexEncode;
+import org.opendaylight.ovsdb.lib.notation.Row;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
+import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
+import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
+import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
 import org.opendaylight.ovsdb.utils.mdsal.openflow.InstructionUtils;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
@@ -59,6 +67,8 @@ public abstract class AbstractServiceInstance {
     // OSGi Services that we are dependent on.
     private volatile MdsalConsumer mdsalConsumer;
     private volatile PipelineOrchestrator orchestrator;
+    private volatile OvsdbConfigurationService ovsdbConfigService;
+    private volatile OvsdbConnectionService connectionService;
 
     // Concrete Service that this AbstractServiceInstance represent
     private Service service;
@@ -67,8 +77,37 @@ public abstract class AbstractServiceInstance {
         this.service = service;
     }
 
-    // Let the Concrete service instance class decide if a Bride is part of the pipeline or not.
-    public abstract boolean isBridgeInPipeline (String nodeId);
+    public boolean isBridgeInPipeline (String nodeId){
+        String bridgeName = getBridgeName(nodeId.split(":")[1]);
+        logger.debug("isBridgeInPipeline: nodeId {} bridgeName {}", nodeId, bridgeName);
+        if (bridgeName != null && Constants.INTEGRATION_BRIDGE.equalsIgnoreCase(bridgeName)) {
+            return true;
+        }
+        return false;
+    }
+
+    private String getBridgeName(String nodeId){
+        List<org.opendaylight.controller.sal.core.Node> ovsNodes = connectionService.getNodes();
+
+        for (org.opendaylight.controller.sal.core.Node ovsNode : ovsNodes) {
+            Map<String, Row> bridges = ovsdbConfigService.getRows(ovsNode, ovsdbConfigService.getTableName(ovsNode, Bridge.class));
+            if (bridges == null) continue;
+            for (String brUuid : bridges.keySet()) {
+                Bridge bridge = ovsdbConfigService.getTypedRow(ovsNode, Bridge.class, bridges.get(brUuid));
+
+                Set<String> dpids = bridge.getDatapathIdColumn().getData();
+                if (dpids == null || dpids.size() == 0) return null;
+                Long dpid = HexEncode.stringToLong((String) dpids.toArray()[0]);
+                logger.debug("getBridgeName: bridgeDpid {} ofNodeDpid {}", bridge.getDatapathIdColumn().getData().toArray()[0], nodeId);
+                if (dpid.equals(Long.parseLong(nodeId))){
+                    // Found the bridge
+                    logger.debug("getOvsNode: found ovsNode {} bridge {} for ofNode {}", ovsNode.getNodeIDString(), bridge.getName(), nodeId);
+                    return bridge.getName();
+                }
+            }
+        }
+        return null;
+    }
 
     public short getTable() {
         return service.getTable();
@@ -212,6 +251,10 @@ public abstract class AbstractServiceInstance {
      * @param nodeId Node on which the default pipeline flow is programmed.
      */
     protected void programDefaultPipelineRule(String nodeId) {
+        if (!isBridgeInPipeline(nodeId)) {
+            logger.debug("Bridge {} is not in pipeline", nodeId);
+            return;
+        }
         MatchBuilder matchBuilder = new MatchBuilder();
         FlowBuilder flowBuilder = new FlowBuilder();
         NodeBuilder nodeBuilder = createNodeBuilder(nodeId);
index c4a5aa37026883b9ac84941cb992f1e7f3d1deb9..7ea43965ba3eb25df15072591aa6c3d38216551d 100644 (file)
@@ -104,13 +104,15 @@ public class PipelineOrchestratorImpl implements PipelineOrchestrator, Opendayli
                 try {
                     while (true) {
                         String nodeId = queue.take();
+                        /*
+                         * Since we are hooking on OpendaylightInventoryListener and as observed in
+                         * Bug 1997 multiple Threads trying to write to a same table at the same time
+                         * causes programming issues. Hence delaying the programming by a second to
+                         * avoid the clash. This hack/workaround should be removed once Bug 1997 is resolved.
+                         */
+                        Thread.sleep(1000);
                         for (Service service : staticPipeline) {
                             AbstractServiceInstance serviceInstance = getServiceInstance(service);
-                            if (!serviceInstance.isBridgeInPipeline(nodeId)) {
-                                logger.debug("Bridge {} is not in pipeline", nodeId);
-                                continue;
-                            }
-
                             serviceInstance.programDefaultPipelineRule(nodeId);
                         }
                     }
index 88383a287eae5f3cc464d0976e4c79476ba1b872..299bb5e6b0710015c50813a01353a5f0f9e6da33 100644 (file)
@@ -49,11 +49,6 @@ public class ArpResponderService extends AbstractServiceInstance implements ArpP
         super(service);
     }
 
-    @Override
-    public boolean isBridgeInPipeline (String nodeId) {
-        return true;
-    }
-
     @Override
     public Status programStaticArpEntry(Node node, Long dpid, String segmentationId, String macAddressStr,
                                         InetAddress ipAddress, Action action) {
index 1e282579f8ed5a0d401d3b01b1edff1f1dd533a1..25890656263401d6711f052278660b698bd0d264 100644 (file)
@@ -55,11 +55,6 @@ public class ClassifierService extends AbstractServiceInstance implements Classi
         super(service);
     }
 
-    @Override
-    public boolean isBridgeInPipeline (String nodeId) {
-        return true;
-    }
-
     /*
      * (Table:Classifier) Egress VM Traffic Towards TEP
      * Match: Destination Ethernet Addr and OpenFlow InPort
index ceaf38037717e1668ccb73cc6104418452f8c289..aa1cc56a8380962ed9722a59257ff99a39ea18fc 100644 (file)
@@ -9,6 +9,9 @@
  */
 package org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services;
 
+import java.math.BigInteger;
+import java.util.List;
+
 import org.opendaylight.controller.networkconfig.neutron.NeutronSecurityGroup;
 import org.opendaylight.controller.networkconfig.neutron.NeutronSecurityRule;
 import org.opendaylight.controller.sal.core.Node;
@@ -30,14 +33,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instru
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
-
-import com.google.common.collect.Lists;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.math.BigInteger;
-import java.util.List;
+import com.google.common.collect.Lists;
 
 public class EgressAclService extends AbstractServiceInstance implements EgressAclProvider {
 
@@ -51,12 +50,6 @@ public class EgressAclService extends AbstractServiceInstance implements EgressA
         super(service);
     }
 
-
-    @Override
-    public boolean isBridgeInPipeline (String nodeId) {
-        return true;
-    }
-
     @Override
     public void programPortSecurityACL(Node node, Long dpid, String segmentationId, String attachedMac, long localPort,
                                        NeutronSecurityGroup securityGroup) {
index a63ce20e44ec327bfabbe4a97d08df2541186871..a9300402be8c543c198037c52eb6346ce8bccc51 100644 (file)
@@ -9,6 +9,10 @@
  */
 package org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services;
 
+import java.math.BigInteger;
+import java.net.InetAddress;
+import java.util.List;
+
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.utils.Status;
 import org.opendaylight.controller.sal.utils.StatusCode;
@@ -33,10 +37,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.N
 
 import com.google.common.collect.Lists;
 
-import java.math.BigInteger;
-import java.net.InetAddress;
-import java.util.List;
-
 public class InboundNatService extends AbstractServiceInstance implements InboundNatProvider {
     public InboundNatService() {
         super(Service.INBOUND_NAT);
@@ -46,11 +46,6 @@ public class InboundNatService extends AbstractServiceInstance implements Inboun
         super(service);
     }
 
-    @Override
-    public boolean isBridgeInPipeline (String nodeId) {
-        return true;
-    }
-
     @Override
     public Status programIpRewriteRule(Node node, Long dpid, String segmentationId, InetAddress matchAddress,
                                        InetAddress rewriteAddress, Action action) {
index ad2e37a9f474a992b85cbb074670bebebf1e2864..33bf1f033c245b80baadcba966a4316e98973e46 100644 (file)
@@ -50,11 +50,6 @@ public class IngressAclService extends AbstractServiceInstance implements Ingres
         super(service);
     }
 
-    @Override
-    public boolean isBridgeInPipeline(String nodeId) {
-        return true;
-    }
-
     @Override
     public void programPortSecurityACL(Node node, Long dpid, String segmentationId, String attachedMac,
             long localPort, NeutronSecurityGroup securityGroup) {
index af0289d4d1e303df3123174938e09ec6e43c4ed6..137a5f56908982ab9ed007457a2ecc521612c260 100644 (file)
@@ -59,11 +59,6 @@ public class L2ForwardingService extends AbstractServiceInstance implements L2Fo
         super(service);
     }
 
-    @Override
-    public boolean isBridgeInPipeline (String nodeId) {
-        return true;
-    }
-
     /*
      * (Table:L2Forwarding) Local Unicast
      * Match: Tunnel ID and dMAC
index 1b68a94f39db77d290e62470df9ae99c18f3b0fe..489f9838e4faeb0e6c3b8bf9b22d28005e8d0773 100644 (file)
@@ -20,9 +20,4 @@ public class L2RewriteService extends AbstractServiceInstance {
     public L2RewriteService(Service service) {
         super(service);
     }
-
-    @Override
-    public boolean isBridgeInPipeline (String nodeId) {
-        return true;
-    }
 }
\ No newline at end of file
index e7665f06060475bd07fb6e2a38cd1364d68426b4..446c0f29f78d8e020fed38c319281db8d4ced114 100644 (file)
@@ -48,11 +48,6 @@ public class L3ForwardingService extends AbstractServiceInstance implements L3Fo
         super(service);
     }
 
-    @Override
-    public boolean isBridgeInPipeline (String nodeId) {
-        return true;
-    }
-
     @Override
     public Status programForwardingTableEntry(Node node, Long dpid, String segmentationId, InetAddress ipAddress,
                                               String macAddress, Action action) {
index e29305bf90bb0a6f66d5e5621443a91196f79d37..261a95fba13d728e5c291490c1ac9056c5132266 100644 (file)
@@ -13,10 +13,11 @@ import java.math.BigInteger;
 import java.util.List;
 import java.util.Map;
 
-import org.opendaylight.controller.sal.utils.Status;
-import org.opendaylight.controller.sal.utils.StatusCode;
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.core.Node.NodeIDType;
+import org.opendaylight.controller.sal.utils.Status;
+import org.opendaylight.controller.sal.utils.StatusCode;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
 import org.opendaylight.ovsdb.openstack.netvirt.api.LoadBalancerConfiguration;
 import org.opendaylight.ovsdb.openstack.netvirt.api.LoadBalancerConfiguration.LoadBalancerPoolMember;
 import org.opendaylight.ovsdb.openstack.netvirt.api.LoadBalancerProvider;
@@ -27,10 +28,10 @@ import org.opendaylight.ovsdb.utils.mdsal.openflow.MatchUtils;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4Builder;
 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.FlowBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;
@@ -44,18 +45,16 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instru
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxRegCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjNxHashFields;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjNxMpAlgorithm;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg2;
-import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
-
-import com.google.common.collect.Lists;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxRegCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjNxHashFields;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.action.rev140421.OfjNxMpAlgorithm;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.Lists;
 public class LoadBalancerService extends AbstractServiceInstance implements LoadBalancerProvider {
 
     private static final Logger logger = LoggerFactory.getLogger(LoadBalancerProvider.class);
@@ -74,11 +73,6 @@ public class LoadBalancerService extends AbstractServiceInstance implements Load
         super(service);
     }
 
-    @Override
-    public boolean isBridgeInPipeline (String nodeId) {
-        return true;
-    }
-
     /**
      * When this method is called, we do the following for minimizing flow updates:
      * 1. Overwrite the solo multipath rule that applies to all members
@@ -171,10 +165,10 @@ public class LoadBalancerService extends AbstractServiceInstance implements Load
 
         ab = new ActionBuilder();
         ab.setAction(ActionUtils.nxMultipathAction(OfjNxHashFields.NXHASHFIELDSSYMMETRICL4,
-                (Integer)0, OfjNxMpAlgorithm.NXMPALGMODULON,
-                (Integer)lbConfig.getMembers().size()-1, //By Nicira-Ext spec, this field is max_link minus 1
-                (Long)0L, new DstNxRegCaseBuilder().setNxReg(REG_FIELD_B).build(),
-                (Integer)0, (Integer)31));
+                0, OfjNxMpAlgorithm.NXMPALGMODULON,
+                lbConfig.getMembers().size()-1, //By Nicira-Ext spec, this field is max_link minus 1
+                0L, new DstNxRegCaseBuilder().setNxReg(REG_FIELD_B).build(),
+                0, 31));
         ab.setOrder(1);
         ab.setKey(new ActionKey(1));
         actionList.add(ab.build());
@@ -208,7 +202,7 @@ public class LoadBalancerService extends AbstractServiceInstance implements Load
         flowBuilder.setMatch(matchBuilder.build());
         flowBuilder.setPriority(DEFAULT_FLOW_PRIORITY);
         flowBuilder.setBarrier(true);
-        flowBuilder.setTableId((short) this.getTable());
+        flowBuilder.setTableId(this.getTable());
         flowBuilder.setKey(key);
         flowBuilder.setFlowName(flowId);
         flowBuilder.setHardTimeout(0);
@@ -224,7 +218,7 @@ public class LoadBalancerService extends AbstractServiceInstance implements Load
      */
     private void insertLoadBalancerVIPRulesSecondPass(NodeBuilder nodeBuilder, LoadBalancerConfiguration lbConfig) {
         for(Map.Entry<String, LoadBalancerPoolMember> entry : lbConfig.getMembers().entrySet()){
-            insertLoadBalancerMemberVIPRulesSecondPass(nodeBuilder, lbConfig.getVip(), (LoadBalancerPoolMember)entry.getValue());
+            insertLoadBalancerMemberVIPRulesSecondPass(nodeBuilder, lbConfig.getVip(), entry.getValue());
         }
     }
 
@@ -286,7 +280,7 @@ public class LoadBalancerService extends AbstractServiceInstance implements Load
         flowBuilder.setMatch(matchBuilder.build());
         flowBuilder.setPriority(DEFAULT_FLOW_PRIORITY+1);
         flowBuilder.setBarrier(true);
-        flowBuilder.setTableId((short) this.getTable());
+        flowBuilder.setTableId(this.getTable());
         flowBuilder.setKey(key);
         flowBuilder.setFlowName(flowId);
         flowBuilder.setHardTimeout(0);
@@ -302,7 +296,7 @@ public class LoadBalancerService extends AbstractServiceInstance implements Load
      */
     private void insertLoadBalancerReverseRules(NodeBuilder nodeBuilder, LoadBalancerConfiguration lbConfig) {
         for(Map.Entry<String, LoadBalancerPoolMember> entry : lbConfig.getMembers().entrySet()){
-            insertLoadBalancerMemberReverseRules(nodeBuilder, lbConfig.getVip(), (LoadBalancerPoolMember)entry.getValue());
+            insertLoadBalancerMemberReverseRules(nodeBuilder, lbConfig.getVip(), entry.getValue());
         }
     }
 
@@ -362,7 +356,7 @@ public class LoadBalancerService extends AbstractServiceInstance implements Load
         flowBuilder.setMatch(matchBuilder.build());
         flowBuilder.setPriority(DEFAULT_FLOW_PRIORITY);
         flowBuilder.setBarrier(true);
-        flowBuilder.setTableId((short) this.getTable());
+        flowBuilder.setTableId(this.getTable());
         flowBuilder.setKey(key);
         flowBuilder.setFlowName(flowId);
         flowBuilder.setHardTimeout(0);
@@ -390,13 +384,13 @@ public class LoadBalancerService extends AbstractServiceInstance implements Load
         FlowKey key = new FlowKey(new FlowId(flowId));
         flowBuilder.setPriority(DEFAULT_FLOW_PRIORITY);
         flowBuilder.setBarrier(true);
-        flowBuilder.setTableId((short) this.getTable());
+        flowBuilder.setTableId(this.getTable());
         flowBuilder.setKey(key);
         removeFlow(flowBuilder, nodeBuilder);
 
         // Match all second pass rules
         for(Map.Entry<String, LoadBalancerPoolMember> entry : lbConfig.getMembers().entrySet()){
-            LoadBalancerPoolMember member = (LoadBalancerPoolMember) entry.getValue();
+            LoadBalancerPoolMember member = entry.getValue();
             MatchUtils.addNxRegMatch(matchBuilder, new MatchUtils.RegMatch(REG_FIELD_A, SECOND_PASS_REGA_MATCH_VALUE),
                                                    new MatchUtils.RegMatch(REG_FIELD_B, (long)member.getIndex()));
             MatchUtils.createDstL3IPv4Match(matchBuilder, new Ipv4Prefix(lbConfig.getVip()));
@@ -417,7 +411,7 @@ public class LoadBalancerService extends AbstractServiceInstance implements Load
      */
     private void removeLoadBalancerReverseRules(NodeBuilder nodeBuilder, LoadBalancerConfiguration lbConfig) {
         for(Map.Entry<String, LoadBalancerPoolMember> entry : lbConfig.getMembers().entrySet()){
-            LoadBalancerPoolMember member = (LoadBalancerPoolMember) entry.getValue();
+            LoadBalancerPoolMember member = entry.getValue();
 
             MatchBuilder matchBuilder = new MatchBuilder();
             FlowBuilder flowBuilder = new FlowBuilder();
@@ -437,7 +431,7 @@ public class LoadBalancerService extends AbstractServiceInstance implements Load
             flowBuilder.setMatch(matchBuilder.build());
             flowBuilder.setPriority(DEFAULT_FLOW_PRIORITY);
             flowBuilder.setBarrier(true);
-            flowBuilder.setTableId((short) this.getTable());
+            flowBuilder.setTableId(this.getTable());
             flowBuilder.setKey(key);
             removeFlow(flowBuilder, nodeBuilder);
         }
index 261f6c1a620d890eeb288bcafa140ad69292736f..aa3330478e3ed88b19f80848800007f39bce944b 100644 (file)
 
 package org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services;
 
+import java.math.BigInteger;
+import java.net.InetAddress;
+import java.util.List;
+
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.utils.Status;
 import org.opendaylight.controller.sal.utils.StatusCode;
@@ -34,10 +38,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.N
 
 import com.google.common.collect.Lists;
 
-import java.math.BigInteger;
-import java.net.InetAddress;
-import java.util.List;
-
 public class OutboundNatService extends AbstractServiceInstance implements OutboundNatProvider {
     public OutboundNatService() {
         super(Service.OUTBOUND_NAT);
@@ -47,11 +47,6 @@ public class OutboundNatService extends AbstractServiceInstance implements Outbo
         super(service);
     }
 
-    @Override
-    public boolean isBridgeInPipeline (String nodeId) {
-        return true;
-    }
-
     @Override
     public Status programIpRewriteRule(Node node, Long dpid, String segmentationId, InetAddress matchAddress,
                                        InetAddress rewriteAddress, Action action) {
index 4098869fe684c2be81c8ee04da4dfc6f07cecb87..eaec19af98bc7ddb5445f7ea01a8de909333b12f 100644 (file)
 
 package org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services;
 
+import java.math.BigInteger;
+import java.net.InetAddress;
+import java.util.List;
+
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.utils.Status;
 import org.opendaylight.controller.sal.utils.StatusCode;
@@ -35,10 +39,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.N
 
 import com.google.common.collect.Lists;
 
-import java.math.BigInteger;
-import java.net.InetAddress;
-import java.util.List;
-
 public class RoutingService extends AbstractServiceInstance implements RoutingProvider {
     public RoutingService() {
         super(Service.ROUTING);
@@ -48,11 +48,6 @@ public class RoutingService extends AbstractServiceInstance implements RoutingPr
         super(service);
     }
 
-    @Override
-    public boolean isBridgeInPipeline (String nodeId) {
-        return true;
-    }
-
     @Override
     public Status programRouterInterface(Node node, Long dpid, String segmentationId, String macAddress,
                                          InetAddress address, int mask, Action action) {