Merge "Fix for Bug 262 - goes with controller Gerrit3929"
authorAbhijit Kumbhare <abhijitk@us.ibm.com>
Fri, 3 Jan 2014 21:09:21 +0000 (21:09 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Fri, 3 Jan 2014 21:09:21 +0000 (21:09 +0000)
14 files changed:
.gitreview [new file with mode: 0644]
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertor.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/match/MatchConvertorImpl.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/ErrorTranslator.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/ExperimenterTranslator.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/FlowRemovedTranslator.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultiPartMessageDescToNodeUpdatedTranslator.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultiPartReplyPortToNodeConnectorUpdatedTranslator.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultipartReplyTableFeaturesToTableUpdatedTranslator.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/PacketInTranslator.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/PortStatusMessageToNodeConnectorUpdatedTranslator.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/queue/TicketFinisher.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/queue/TicketProcessorFactory.java
test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginTestCommandProvider.java

diff --git a/.gitreview b/.gitreview
new file mode 100644 (file)
index 0000000..9171345
--- /dev/null
@@ -0,0 +1,4 @@
+[gerrit]
+host=git.opendaylight.org
+port=29418
+project=openflowplugin.git
index fb7aff738ea782ca747f472df1121093e188bf07..49d4d4e1f71b5628e25b6d629206ebd1c7990127 100644 (file)
@@ -686,7 +686,11 @@ public final class ActionConvertor {
         OutputAction outputAction = outputActionCase.getOutputAction();
         PortActionBuilder portAction = new PortActionBuilder();
         MaxLengthActionBuilder maxLenActionBuilder = new MaxLengthActionBuilder();
-        maxLenActionBuilder.setMaxLength(outputAction.getMaxLength());
+        if (outputAction.getMaxLength() != null) {
+            maxLenActionBuilder.setMaxLength(outputAction.getMaxLength());
+        } else {
+            maxLenActionBuilder.setMaxLength(new Integer(0));
+        }
         ActionBuilder actionBuilder = new ActionBuilder();
         actionBuilder.addAugmentation(MaxLengthAction.class, maxLenActionBuilder.build());
 
index 0f44849ddd32001d0f58af31f1e42a297bd3949e..7d18d6c8a0176f73bd85cd4e5208a7a85e1698e5 100644 (file)
@@ -479,7 +479,12 @@ public class MatchConvertorImpl implements MatchConvertor<List<MatchEntries>> {
             matchBuilder.setLayer4Match(udpMatchBuilder.build());
         }
         if(swMatch.getNwTos()!=null){
-            ipMatchBuilder.setIpDscp(new Dscp(swMatch.getNwTos()));
+            //DSCP default value is 0 from the library but controller side it is null.
+            // look if there better solution 
+            if(0 != swMatch.getNwTos()) 
+            {
+               ipMatchBuilder.setIpDscp(new Dscp(swMatch.getNwTos()));
+            }
             matchBuilder.setIpMatch(ipMatchBuilder.build());
         }
         
index bec562615df38ce94a9cbed97c1660314e1e8e96..565692e0acefc8aaa3feb84e8b2a9b0cac6b9885 100644 (file)
@@ -1,6 +1,7 @@
 package org.opendaylight.openflowplugin.openflow.md.core.translator;
 
 import java.math.BigInteger;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
@@ -54,7 +55,7 @@ public class ErrorTranslator implements IMDMessageTranslator<OfHeader, List<Data
             return list;
         } else {
             LOG.error("Message is not of Error Message ");
-            return null;
+            return Collections.emptyList();
         }
     }
 
index af85a5f07900890ea9f7573ba13a03c361e24997..eea892e372ff6e59b79878ac10b53d41554f17e2 100644 (file)
@@ -1,6 +1,7 @@
 package org.opendaylight.openflowplugin.openflow.md.core.translator;
 
 import java.math.BigInteger;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
@@ -52,7 +53,7 @@ public class ExperimenterTranslator implements IMDMessageTranslator<OfHeader, Li
                        return list;
                }else {
                        LOG.error( "Message is not of Experimenter Error Message " ) ;
-                       return null;
+                       return Collections.emptyList();
                }
        }
 
index 300e21afa274d8ee668b91e8ead63c2b401cb43d..b45edba0f154e228d045c3d2b0e9dbd6da2416e3 100644 (file)
@@ -1,6 +1,7 @@
 package org.opendaylight.openflowplugin.openflow.md.core.translator;
 
 import java.math.BigInteger;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -155,7 +156,7 @@ public class FlowRemovedTranslator implements IMDMessageTranslator<OfHeader, Lis
             return list;
         } else {
             LOG.error("Message is not a flow removed message ");
-            return null;
+            return Collections.emptyList();
         }
     }
 
index 3fa527a782bb1ab6048bded28c8c2d06d3dc8eeb..6390c06852c55bef29a5b4384a3bc36b1d0f2e8c 100644 (file)
@@ -1,6 +1,7 @@
 package org.opendaylight.openflowplugin.openflow.md.core.translator;
 
 import java.math.BigInteger;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
@@ -46,7 +47,7 @@ public class MultiPartMessageDescToNodeUpdatedTranslator implements IMDMessageTr
             list.add(nodeUpdated);
             return list;
         } else {
-            return null;
+            return Collections.emptyList();
         }
     }
 
index 2b019132ddc1e36ce9b25dda436aaccabafa1e5d..e79bbc7cef0fc933d5f7d59d44976e0e5424b3c1 100644 (file)
@@ -1,6 +1,7 @@
 package org.opendaylight.openflowplugin.openflow.md.core.translator;
 
 import java.math.BigInteger;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
@@ -57,7 +58,7 @@ public class MultiPartReplyPortToNodeConnectorUpdatedTranslator implements IMDMe
             }
             return list;
         } else {
-            return null;
+            return Collections.emptyList();
         }
     }
 
index 7cdb682a59069ce9a4a0a44f69437087843969c5..219cb4916d13c44e271da26edfdfedace51043ea 100644 (file)
@@ -1,6 +1,7 @@
 package org.opendaylight.openflowplugin.openflow.md.core.translator;
 
 import java.math.BigInteger;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
@@ -52,7 +53,7 @@ public class MultipartReplyTableFeaturesToTableUpdatedTranslator implements
             return listDataObject ;
             
                }
-               return null;
+               return Collections.emptyList();
                
        }
        
index a93567d70e94a3879dd7e595048c5700188e6de1..b7d5f7a00bd6f955b13f95df101e1467b51c2cd5 100644 (file)
@@ -1,6 +1,7 @@
 package org.opendaylight.openflowplugin.openflow.md.core.translator;
 
 import java.math.BigInteger;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
@@ -87,6 +88,6 @@ public class PacketInTranslator implements IMDMessageTranslator<OfHeader, List<D
                 return list;
            } 
         } 
-        return null;
+        return Collections.emptyList();
     }
 }
index 4a297141fa8a0c2c28797805b8a25372ac585582..bd44bc66793c903bd01809b4f32104bfb71a2976 100644 (file)
@@ -1,6 +1,7 @@
 package org.opendaylight.openflowplugin.openflow.md.core.translator;
 
 import java.math.BigInteger;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
@@ -51,7 +52,7 @@ public class PortStatusMessageToNodeConnectorUpdatedTranslator implements IMDMes
             return list;
         } else {
             // TODO - Do something smarter than returning null if translation fails... what Exception should we throw here?
-            return null;
+            return Collections.emptyList();
         }
     }
 }
index f9af9f0d68916b2221141b14d862d2da409ab7e5..61d213b5c3874b50d215f66994a3482d4ade8af0 100644 (file)
@@ -63,7 +63,7 @@ public class TicketFinisher<OUT> implements Runnable {
                         }
                     }
                 }
-            } catch (ExecutionException | InterruptedException e) {
+            } catch (Exception e) {
                 LOG.error(e.getMessage(), e);
             }
         }
index c4ff3e2b3fe4430b24f6e4788342430d2ba461d3..ff37cba3151956be7c7ac5f7f77a312d569d3f76 100644 (file)
@@ -122,8 +122,8 @@ public class TicketProcessorFactory<IN, OUT> {
                             cookie = conductor.getAuxiliaryKey();
                         }
                         List<OUT> translatorOutput = translator.translate(cookie, conductor.getSessionContext(), message);
-                        if(translatorOutput != null) {
-                            result.addAll(translator.translate(cookie, conductor.getSessionContext(), message));
+                        if(translatorOutput != null && !translatorOutput.isEmpty()) {
+                            result.addAll(translatorOutput);
                         }
                     }
                 } else {
index 2e3477cef18cf17c14faa167aabb3e81f32eaf46..df1a59bc5a61c92cfd248ee2f350cb8987e1ca32 100644 (file)
@@ -19,7 +19,6 @@ import org.eclipse.osgi.framework.console.CommandProvider;
 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
 import org.opendaylight.controller.md.sal.common.api.data.DataModification;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
-import org.opendaylight.controller.sal.binding.api.NotificationListener;
 import org.opendaylight.controller.sal.binding.api.NotificationService;
 import org.opendaylight.controller.sal.binding.api.data.DataBrokerService;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp;
@@ -52,6 +51,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlTypeActionCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNextHopActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCaseBuilder;
@@ -63,7 +63,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpSrcActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanCfiActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanPcpActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.StripVlanActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SwPathActionCaseBuilder;
@@ -109,12 +108,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti
 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.config.rev130819.Flows;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
+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;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
 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;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAdded;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowRemoved;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowUpdated;
@@ -123,7 +123,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.Node
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowListener;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SwitchFlowRemoved;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
@@ -137,9 +136,14 @@ 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.Instruction;
 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.NodeConnectorRemoved;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdated;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRemoved;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeUpdated;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.OpendaylightInventoryListener;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
@@ -147,7 +151,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherTyp
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.ExperimenterBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpSourceHardwareAddressBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpTargetHardwareAddressBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
@@ -175,13 +178,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.osgi.framework.BundleContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey;
 
 public class OpenflowpluginTestCommandProvider implements CommandProvider {
 
@@ -194,9 +194,11 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
     private NodeBuilder testNode;
     private final String originalFlowName = "Foo";
     private final String updatedFlowName = "Bar";
-    private FlowEventListener flowEventListener = new FlowEventListener();
+    private final FlowEventListener flowEventListener = new FlowEventListener();
+    private final PortEventListener portEventListener = new PortEventListener();
     private static NotificationService notificationService;
     private Registration<org.opendaylight.yangtools.yang.binding.NotificationListener> listener1Reg;
+    private Registration<org.opendaylight.yangtools.yang.binding.NotificationListener> listener2Reg;
 
     public OpenflowpluginTestCommandProvider(BundleContext ctx) {
         this.ctx = ctx;
@@ -205,8 +207,9 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
     public void onSessionInitiated(ProviderContext session) {
         pc = session;
         notificationService = session.getSALService(NotificationService.class);
-     // For switch events
+        // For switch events
         listener1Reg = notificationService.registerNotificationListener(flowEventListener);
+        listener2Reg = notificationService.registerNotificationListener(portEventListener);
         dataBrokerService = session.getSALService(DataBrokerService.class);
         ctx.registerService(CommandProvider.class.getName(), this, null);
         createTestFlow(createTestNode(null), null, null);
@@ -225,19 +228,19 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
     }
 
     final class FlowEventListener implements SalFlowListener {
-        
+
         List<FlowAdded> addedFlows = new ArrayList<>();
         List<FlowRemoved> removedFlows = new ArrayList<>();
         List<FlowUpdated> updatedFlows = new ArrayList<>();
-    
+
         @Override
         public void onFlowAdded(FlowAdded notification) {
-            System.out.println("flow to be added.........................."+notification.toString());
-            System.out.println("added flow Xid........................."+notification.getTransactionId().getValue());
+            System.out.println("flow to be added.........................." + notification.toString());
+            System.out.println("added flow Xid........................." + notification.getTransactionId().getValue());
             System.out.println("-----------------------------------------------------------------------------------");
             addedFlows.add(notification);
         }
-    
+
         @Override
         public void onFlowRemoved(FlowRemoved notification) {
             System.out.println("removed flow.........................." + notification.toString());
@@ -245,36 +248,78 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
             System.out.println("-----------------------------------------------------------------------------------");
             removedFlows.add(notification);
         };
-    
+
         @Override
         public void onFlowUpdated(FlowUpdated notification) {
             System.out.println("updated flow.........................." + notification.toString());
-            System.out.println("updated flow Xid........................." + notification.getTransactionId().getValue());
+            System.out
+                    .println("updated flow Xid........................." + notification.getTransactionId().getValue());
             System.out.println("-----------------------------------------------------------------------------------");
             updatedFlows.add(notification);
         }
 
         @Override
         public void onNodeErrorNotification(NodeErrorNotification notification) {
-            System.out.println("Error notification  flow Xid........................." + notification.getTransactionId().getValue());
+            System.out.println("Error notification  flow Xid........................."
+                    + notification.getTransactionId().getValue());
             System.out.println("-----------------------------------------------------------------------------------");
         }
 
         @Override
         public void onNodeExperimenterErrorNotification(NodeExperimenterErrorNotification notification) {
             // TODO Auto-generated method stub
-            
+
         }
 
         @Override
         public void onSwitchFlowRemoved(SwitchFlowRemoved notification) {
-            System.out.println("Switch flow removed flow..........................");
-            // TODO Auto-generated method stub
-            
+            System.out
+                    .println("Switch flow removed : Cookies..................." + notification.getCookie().toString());
+            System.out.println("-----------------------------------------------------------------------------------");
+        }
+
+    }
+
+    final class PortEventListener implements OpendaylightInventoryListener {
+
+        List<NodeUpdated> nodeUpdated = new ArrayList<>();
+        List<NodeRemoved> nodeRemoved = new ArrayList<>();
+        List<NodeConnectorUpdated> nodeConnectorUpdated = new ArrayList<>();
+        List<NodeConnectorRemoved> nodeConnectorRemoved = new ArrayList<>();
+
+        @Override
+        public void onNodeConnectorRemoved(NodeConnectorRemoved notification) {
+            System.out.println("NodeConnectorRemoved Notification ...................");
+            System.out.println(notification.getNodeConnectorRef());
+            System.out.println("----------------------------------------------------------------------");
+            nodeConnectorRemoved.add(notification);
+        }
+
+        @Override
+        public void onNodeConnectorUpdated(NodeConnectorUpdated notification) {
+            System.out.println("NodeConnectorUpdated Notification...................");
+            System.out.println(notification.getNodeConnectorRef());
+            System.out.println("----------------------------------------------------------------------");
+            nodeConnectorUpdated.add(notification);
+        }
+
+        @Override
+        public void onNodeRemoved(NodeRemoved notification) {
+            System.out.println("NodeConnectorUpdated Notification ...................");
+            System.out.println(notification.getNodeRef());
+            System.out.println("----------------------------------------------------------------------");
+            nodeRemoved.add(notification);
+        }
+
+        @Override
+        public void onNodeUpdated(NodeUpdated notification) {
+            System.out.println("NodeConnectorUpdated Notification ...................");
+            System.out.println(notification.getNodeRef());
+            System.out.println("----------------------------------------------------------------------");
+            nodeUpdated.add(notification);
         }
-    
     }
-    
+
     private InstanceIdentifier<Node> nodeBuilderToInstanceId(NodeBuilder node) {
         return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
     }
@@ -677,6 +722,21 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
             flow.setMatch(createTunnelIDMatch().build());
             flow.setInstructions(createAppyActionInstruction48().build());
             break;
+        case "f78":
+            id += 78;
+            flow.setMatch(createMatch33().build());
+            flow.setInstructions(createDropInstructions().build());
+            break;
+        case "f79":
+            id += 79;
+            flow.setMatch(createICMPv6Match1().build());
+            flow.setInstructions(createDecNwTtlInstructions().build());
+            break;
+        case "f80":
+            id += 80;
+            flow.setMatch(createMatch1().build());
+            flow.setInstructions(createAppyActionInstruction88().build());
+            break;
         default:
             LOG.warn("flow type not understood: {}", flowType);
         }
@@ -695,7 +755,7 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
         flow.setInstallHw(false);
         flow.setStrict(false);
         flow.setContainerName(null);
-        flow.setFlags(new FlowModFlags(false, false, false, false, false));
+        flow.setFlags(new FlowModFlags(false, false, false, false, true));
         flow.setId(new FlowId(new Long(12)));
         flow.setTableId(getTableId(tableId));
         flow.setOutGroup(new Long(2));
@@ -1148,6 +1208,33 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
         return isb;
     }
 
+    private static InstructionsBuilder createAppyActionInstruction88() {
+
+        List<Action> actionList = new ArrayList<Action>();
+        ActionBuilder ab = new ActionBuilder();
+
+        SetVlanPcpActionBuilder pcp = new SetVlanPcpActionBuilder();
+        VlanPcp pcp1 = new VlanPcp((short) 9);
+        pcp.setVlanPcp(pcp1);
+        ab.setAction(new SetVlanPcpActionCaseBuilder().setSetVlanPcpAction(pcp.build()).build());
+        actionList.add(ab.build());
+        // Create an Apply Action
+        ApplyActionsBuilder aab = new ApplyActionsBuilder();
+        aab.setAction(actionList);
+
+        // Wrap our Apply Action in an Instruction
+        InstructionBuilder ib = new InstructionBuilder();
+        ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
+
+        // Put our Instruction in a list of Instructions
+        InstructionsBuilder isb = new InstructionsBuilder();
+        List<Instruction> instructions = new ArrayList<Instruction>();
+        instructions.add(ib.build());
+        isb.setInstruction(instructions);
+        return isb;
+    }  
+       
+
     private static InstructionsBuilder createAppyActionInstruction9() {
 
         List<Action> actionList = new ArrayList<Action>();
@@ -1211,8 +1298,10 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
         // Wrap our Apply Action in an Instruction
         InstructionBuilder ib = new InstructionBuilder();
         ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
+        ib.setKey(new InstructionKey(0));
+        ib.setOrder(0);
 
-        // Put our Instruction in a list of Instructions
+        // Put our Instruction in a list of Instruction
         InstructionsBuilder isb = new InstructionsBuilder();
         List<Instruction> instructions = new ArrayList<Instruction>();
         instructions.add(ib.build());
@@ -1759,7 +1848,7 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
         isb.setInstruction(instructions);
         return isb;
     }
-
+       
     private static InstructionsBuilder createAppyActionInstruction33() {
 
         List<Action> actionList = new ArrayList<Action>();
@@ -2174,8 +2263,8 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
         // setting the values of ARP
         MacAddress macdest = new MacAddress("ff:ff:ff:ff:ff:ff");
         MacAddress macsrc = new MacAddress("00:00:00:00:23:ae");
-        Ipv4Prefix dstiparp = new Ipv4Prefix("200.71.9.52/10");
-        Ipv4Prefix srciparp = new Ipv4Prefix("100.1.1.1/8");
+        Ipv4Prefix dstiparp = new Ipv4Prefix("200.71.9.52");
+        Ipv4Prefix srciparp = new Ipv4Prefix("100.1.1.1");
         // create ARP match action
         ArpMatchBuilder arpmatch = new ArpMatchBuilder();
         ArpMatchBuilder arpmatch1 = new ArpMatchBuilder();
@@ -2233,31 +2322,87 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
 
     private static InstructionsBuilder createAppyActionInstruction44() {
 
-        List<Action> actionList = new ArrayList<Action>();
+        List<Action> actionLists = new ArrayList<Action>();
         ActionBuilder ab = new ActionBuilder();
         SetFieldBuilder setFieldBuilder = new SetFieldBuilder();
         ActionBuilder ab1 = new ActionBuilder();
         SetFieldBuilder setFieldBuilder1 = new SetFieldBuilder();
+    /*    ActionBuilder ab2 = new ActionBuilder();
+        SetFieldBuilder setFieldBuilder2 = new SetFieldBuilder();
+        ActionBuilder ab3 = new ActionBuilder();
+        SetFieldBuilder setFieldBuilder3 = new SetFieldBuilder();
+        ActionBuilder ab4 = new ActionBuilder();
+        SetFieldBuilder setFieldBuilder4 = new SetFieldBuilder();   */
+        ActionBuilder ab5 = new ActionBuilder();
+        SetFieldBuilder setFieldBuilder5 = new SetFieldBuilder();
+        ActionBuilder ab6 = new ActionBuilder();
+        SetFieldBuilder setFieldBuilder6 = new SetFieldBuilder();
 
         // IPv6
         Ipv6MatchBuilder ipv6Builder = new Ipv6MatchBuilder();
         Ipv6MatchBuilder ipv6Builder1 = new Ipv6MatchBuilder();
+     //   Ipv6MatchBuilder ipv6Builder2 = new Ipv6MatchBuilder();
+      //  Ipv6MatchBuilder ipv6Builder3 = new Ipv6MatchBuilder();
+       // Ipv6MatchBuilder ipv6Builder4 = new Ipv6MatchBuilder();
+        Ipv6MatchBuilder ipv6Builder5 = new Ipv6MatchBuilder();
+        Ipv6MatchBuilder ipv6Builder6 = new Ipv6MatchBuilder();
+
         Ipv6Prefix dstip6 = new Ipv6Prefix("2002::2");
         Ipv6Prefix srcip6 = new Ipv6Prefix("2001:0:0:0:0:0:0:1");
-        ipv6Builder1.setIpv6Destination(dstip6);
+      //  Ipv6Address ndtarget = new Ipv6Address("2001:db8:0:1:fd97:f9f0:a810:782e");
+      //  MacAddress ndsll = new MacAddress("c2:00:54:f5:00:00");
+       // MacAddress ndtll = new MacAddress("00:0c:29:0e:4c:67");
+        Ipv6ExtHeaderBuilder nextheader = new Ipv6ExtHeaderBuilder();
+        nextheader.setIpv6Exthdr(58);
+        Ipv6LabelBuilder ipv6label = new Ipv6LabelBuilder();
+        Ipv6FlowLabel label = new Ipv6FlowLabel(10028L);
+        ipv6label.setIpv6Flabel(label);
+
         ipv6Builder.setIpv6Source(srcip6);
+        ipv6Builder1.setIpv6Destination(dstip6);
+     //   ipv6Builder2.setIpv6NdTarget(ndtarget);
+      //  ipv6Builder3.setIpv6NdSll(ndsll);
+       // ipv6Builder4.setIpv6NdTll(ndtll);
+        ipv6Builder5.setIpv6ExtHeader(nextheader.build());
+        ipv6Builder6.setIpv6Label(ipv6label.build());
+
         setFieldBuilder.setLayer3Match(ipv6Builder.build());
         ab.setAction(new SetFieldCaseBuilder().setSetField(setFieldBuilder.build()).build());
         ab.setKey(new ActionKey(0));
-        actionList.add(ab.build());
+        actionLists.add(ab.build());
 
         setFieldBuilder1.setLayer3Match(ipv6Builder1.build());
         ab1.setAction(new SetFieldCaseBuilder().setSetField(setFieldBuilder1.build()).build());
         ab1.setKey(new ActionKey(1));
-        actionList.add(ab1.build());
+        actionLists.add(ab1.build());
+
+    /*  setFieldBuilder2.setLayer3Match(ipv6Builder2.build());
+        ab2.setAction(new SetFieldCaseBuilder().setSetField(setFieldBuilder2.build()).build());
+        ab2.setKey(new ActionKey(2));
+        actionLists.add(ab2.build());
+
+        setFieldBuilder3.setLayer3Match(ipv6Builder3.build());
+        ab3.setAction(new SetFieldCaseBuilder().setSetField(setFieldBuilder3.build()).build());
+        ab3.setKey(new ActionKey(3));
+        actionLists.add(ab3.build());
+
+        setFieldBuilder4.setLayer3Match(ipv6Builder4.build());
+        ab4.setAction(new SetFieldCaseBuilder().setSetField(setFieldBuilder4.build()).build());
+        ab4.setKey(new ActionKey(4));
+        actionLists.add(ab4.build());
+*/
+        setFieldBuilder5.setLayer3Match(ipv6Builder5.build());
+        ab5.setAction(new SetFieldCaseBuilder().setSetField(setFieldBuilder5.build()).build());
+        ab5.setKey(new ActionKey(5));
+        actionLists.add(ab5.build());
+
+        setFieldBuilder6.setLayer3Match(ipv6Builder6.build());
+        ab6.setAction(new SetFieldCaseBuilder().setSetField(setFieldBuilder6.build()).build());
+        ab6.setKey(new ActionKey(6));
+        actionLists.add(ab6.build());
 
         ApplyActionsBuilder aab = new ApplyActionsBuilder();
-        aab.setAction(actionList);
+        aab.setAction(actionLists);
 
         InstructionBuilder ib = new InstructionBuilder();
         ib.setKey(new InstructionKey(0));
@@ -2271,6 +2416,7 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
         return isb;
     }
 
+
     private static InstructionsBuilder createAppyActionInstruction45() {
 
         List<Action> actionList = new ArrayList<Action>();
@@ -2494,6 +2640,48 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
 
         return match;
     }
+       
+    /**
+     * @return
+     */
+    private static MatchBuilder createICMPv6Match1() {
+
+        MatchBuilder match = new MatchBuilder();
+        EthernetMatchBuilder eth = new EthernetMatchBuilder();
+        EthernetTypeBuilder ethTypeBuilder = new EthernetTypeBuilder();
+        ethTypeBuilder.setType(new EtherType(0x86ddL));
+        eth.setEthernetType(ethTypeBuilder.build());
+        match.setEthernetMatch(eth.build());
+
+        IpMatchBuilder ipmatch = new IpMatchBuilder(); // ipv4 version
+        ipmatch.setIpProtocol((short) 256);
+        match.setIpMatch(ipmatch.build());
+
+        Icmpv6MatchBuilder icmpv6match = new Icmpv6MatchBuilder(); // icmpv6
+                                                                   // match
+        icmpv6match.setIcmpv6Type((short) 135);
+        icmpv6match.setIcmpv6Code((short) 1);
+        match.setIcmpv6Match(icmpv6match.build());
+
+        return match;
+    }  
+       
+    private static MatchBuilder createMatch33() {
+
+        MatchBuilder match = new MatchBuilder();
+        Ipv4MatchBuilder ipv4Match = new Ipv4MatchBuilder();
+        Ipv4Prefix prefix = new Ipv4Prefix("10.0.0.10");
+        ipv4Match.setIpv4Source(prefix);
+        Ipv4Match i4m = ipv4Match.build();
+        match.setLayer3Match(i4m);
+
+        EthernetMatchBuilder eth = new EthernetMatchBuilder();
+        EthernetTypeBuilder ethTypeBuilder = new EthernetTypeBuilder();
+        ethTypeBuilder.setType(new EtherType(0xfffeL));
+        eth.setEthernetType(ethTypeBuilder.build());
+        match.setEthernetMatch(eth.build());
+        return match;
+    }  
 
     private static MatchBuilder createInphyportMatch() {
         MatchBuilder match = new MatchBuilder();