From 0319b7bbeef689fe3732092f56432ff112badc70 Mon Sep 17 00:00:00 2001
From: Vishnu Emmadi <vishnu.emmadi@bigswitch.com>
Date: Mon, 24 Jun 2013 07:57:59 -0700
Subject: [PATCH] Flow Mod Events

---
 .../floodlight/vendor/OFActionMirror.java     | 16 ++++++++++++++
 .../vendor/OFActionNiciraTtlDecrement.java    | 10 ++++++++-
 .../vendor/OFActionTunnelDstIP.java           |  9 +++++++-
 .../debugevent/Event.java                     | 21 +++++++++++++++++++
 .../debugevent/IDebugEventService.java        |  1 +
 .../protocol/action/OFActionDataLayer.java    | 11 ++++++++++
 .../protocol/action/OFActionEnqueue.java      | 14 ++++++++++++-
 .../action/OFActionNetworkLayerAddress.java   | 12 +++++++++++
 .../action/OFActionNetworkTypeOfService.java  | 11 +++++++++-
 .../protocol/action/OFActionOutput.java       |  9 +++++---
 .../action/OFActionStripVirtualLan.java       |  7 +++++++
 .../action/OFActionTransportLayer.java        | 10 +++++++++
 12 files changed, 124 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/bigswitch/floodlight/vendor/OFActionMirror.java b/src/main/java/com/bigswitch/floodlight/vendor/OFActionMirror.java
index e8a5bbfc1..3b55ca720 100644
--- a/src/main/java/com/bigswitch/floodlight/vendor/OFActionMirror.java
+++ b/src/main/java/com/bigswitch/floodlight/vendor/OFActionMirror.java
@@ -95,4 +95,20 @@ public class OFActionMirror extends OFActionBigSwitchVendor {
         data.writeByte(this.pad1);
         data.writeByte(this.pad2);
     }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append(type);
+        builder.append("[");
+        builder.append("BSN-MIRROR");
+        builder.append(", Dest Port: ");
+        builder.append(destPort);
+        builder.append(", Vlan: ");
+        builder.append(vlanTag);
+        builder.append(", Copy Stage: ");
+        builder.append(copyStage);
+        builder.append("]");
+        return builder.toString();
+    }
 }
diff --git a/src/main/java/com/bigswitch/floodlight/vendor/OFActionNiciraTtlDecrement.java b/src/main/java/com/bigswitch/floodlight/vendor/OFActionNiciraTtlDecrement.java
index 943fb26de..51b829a81 100644
--- a/src/main/java/com/bigswitch/floodlight/vendor/OFActionNiciraTtlDecrement.java
+++ b/src/main/java/com/bigswitch/floodlight/vendor/OFActionNiciraTtlDecrement.java
@@ -24,5 +24,13 @@ public class OFActionNiciraTtlDecrement extends OFActionNiciraVendor {
         data.writeZero(6);
     }
 
-    
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append(type);
+        builder.append("[");
+        builder.append("NICIRA-TTL-DECR");
+        builder.append("]");
+        return builder.toString();
+    }
 }
diff --git a/src/main/java/com/bigswitch/floodlight/vendor/OFActionTunnelDstIP.java b/src/main/java/com/bigswitch/floodlight/vendor/OFActionTunnelDstIP.java
index 4ee67650e..9cd851c63 100644
--- a/src/main/java/com/bigswitch/floodlight/vendor/OFActionTunnelDstIP.java
+++ b/src/main/java/com/bigswitch/floodlight/vendor/OFActionTunnelDstIP.java
@@ -64,6 +64,13 @@ public class OFActionTunnelDstIP extends OFActionBigSwitchVendor {
 
     @Override
     public String toString() {
-        return super.toString() + "; dstIP=" + IPv4.fromIPv4Address(dstIPAddr);
+        StringBuilder builder = new StringBuilder();
+        builder.append(type);
+        builder.append("[");
+        builder.append("BSN-SET-TUNNEL-DST-IP");
+        builder.append(", IP: ");
+        builder.append(IPv4.fromIPv4Address(dstIPAddr));
+        builder.append("]");
+        return builder.toString();
     }
 }
diff --git a/src/main/java/net/floodlightcontroller/debugevent/Event.java b/src/main/java/net/floodlightcontroller/debugevent/Event.java
index 9da23f170..e45ec5e7b 100644
--- a/src/main/java/net/floodlightcontroller/debugevent/Event.java
+++ b/src/main/java/net/floodlightcontroller/debugevent/Event.java
@@ -12,6 +12,7 @@ import net.floodlightcontroller.debugevent.IDebugEventService.EventFieldType;
 import net.floodlightcontroller.devicemanager.SwitchPort;
 import net.floodlightcontroller.packet.IPv4;
 
+import org.openflow.protocol.OFFlowMod;
 import org.openflow.util.HexString;
 
 public class Event {
@@ -143,6 +144,25 @@ public class Event {
                     case IPv4:
                         retMap.put(ec.name(), IPv4.fromIPv4Address((Integer) obj));
                         break;
+                    case FLOW_MOD_FLAGS:
+                        int flags = (Integer)obj;
+                        StringBuilder builder = new StringBuilder();
+                        if (flags == 0) {
+                            builder.append("None");
+                        }
+                        else {
+                            if ((flags & OFFlowMod.OFPFF_SEND_FLOW_REM) != 0) {
+                                builder.append("SEND_FLOW_REM ");
+                            }
+                            if ((flags & OFFlowMod.OFPFF_CHECK_OVERLAP) != 0) {
+                                builder.append("CHECK_OVERLAP ");
+                            }
+                            if ((flags & OFFlowMod.OFPFF_EMERG) != 0) {
+                                builder.append("EMERG ");
+                            }
+                        }
+                        retMap.put(ec.name(), builder.toString());
+                        break;
                     case LIST_IPV4:
                         @SuppressWarnings("unchecked")
                         List<Integer> ipv4Addresses = (List<Integer>)obj;
@@ -216,6 +236,7 @@ public class Event {
                         } else {
                             retMap.put(ec.name(), "-- reference not available --");
                         }
+                        break;
                     case STRING:
                     case OBJECT:
                     case PRIMITIVE:
diff --git a/src/main/java/net/floodlightcontroller/debugevent/IDebugEventService.java b/src/main/java/net/floodlightcontroller/debugevent/IDebugEventService.java
index 300f8fa09..d40784877 100644
--- a/src/main/java/net/floodlightcontroller/debugevent/IDebugEventService.java
+++ b/src/main/java/net/floodlightcontroller/debugevent/IDebugEventService.java
@@ -27,6 +27,7 @@ public interface IDebugEventService extends IFloodlightService {
     enum EventFieldType {
         DPID, IPv4, MAC, STRING, OBJECT, PRIMITIVE, LIST_IPV4,
         LIST_ATTACHMENT_POINT, LIST_OBJECT, SREF_LIST_OBJECT, SREF_OBJECT,
+        FLOW_MOD_FLAGS
     }
 
     /**
diff --git a/src/main/java/org/openflow/protocol/action/OFActionDataLayer.java b/src/main/java/org/openflow/protocol/action/OFActionDataLayer.java
index de6a92bb6..644dc5f2f 100644
--- a/src/main/java/org/openflow/protocol/action/OFActionDataLayer.java
+++ b/src/main/java/org/openflow/protocol/action/OFActionDataLayer.java
@@ -23,6 +23,7 @@ package org.openflow.protocol.action;
 import java.util.Arrays;
 
 import net.floodlightcontroller.core.web.serializers.ByteArrayMACSerializer;
+import net.floodlightcontroller.util.MACAddress;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import org.jboss.netty.buffer.ChannelBuffer;
@@ -95,4 +96,14 @@ public abstract class OFActionDataLayer extends OFAction {
         }
         return true;
     }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append(type);
+        builder.append("[");
+        builder.append(MACAddress.valueOf(dataLayerAddress).toString());
+        builder.append("]");
+        return builder.toString();
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/org/openflow/protocol/action/OFActionEnqueue.java b/src/main/java/org/openflow/protocol/action/OFActionEnqueue.java
index 0ec2fa331..537716612 100644
--- a/src/main/java/org/openflow/protocol/action/OFActionEnqueue.java
+++ b/src/main/java/org/openflow/protocol/action/OFActionEnqueue.java
@@ -20,7 +20,6 @@
  */
 package org.openflow.protocol.action;
 
-
 import org.jboss.netty.buffer.ChannelBuffer;
 
 /**
@@ -121,4 +120,17 @@ public class OFActionEnqueue extends OFAction {
         }
         return true;
     }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append(type);
+        builder.append("[");
+        builder.append("Port: ");
+        builder.append(port);
+        builder.append(", Queue Id: ");
+        builder.append(queueId);
+        builder.append("]");
+        return builder.toString();
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/org/openflow/protocol/action/OFActionNetworkLayerAddress.java b/src/main/java/org/openflow/protocol/action/OFActionNetworkLayerAddress.java
index dc65ae916..67bc5a822 100644
--- a/src/main/java/org/openflow/protocol/action/OFActionNetworkLayerAddress.java
+++ b/src/main/java/org/openflow/protocol/action/OFActionNetworkLayerAddress.java
@@ -21,6 +21,8 @@
 package org.openflow.protocol.action;
 
 
+import net.floodlightcontroller.packet.IPv4;
+
 import org.jboss.netty.buffer.ChannelBuffer;
 
 /**
@@ -83,4 +85,14 @@ public abstract class OFActionNetworkLayerAddress extends OFAction {
         }
         return true;
     }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append(type);
+        builder.append("[");
+        builder.append(IPv4.fromIPv4Address(networkAddress));
+        builder.append("]");
+        return builder.toString();
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/org/openflow/protocol/action/OFActionNetworkTypeOfService.java b/src/main/java/org/openflow/protocol/action/OFActionNetworkTypeOfService.java
index 0d381802c..ec91c7649 100644
--- a/src/main/java/org/openflow/protocol/action/OFActionNetworkTypeOfService.java
+++ b/src/main/java/org/openflow/protocol/action/OFActionNetworkTypeOfService.java
@@ -20,7 +20,6 @@
  */
 package org.openflow.protocol.action;
 
-
 import org.jboss.netty.buffer.ChannelBuffer;
 
 /**
@@ -98,4 +97,14 @@ public class OFActionNetworkTypeOfService extends OFAction {
         }
         return true;
     }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append(type);
+        builder.append("[");
+        builder.append(networkTypeOfService);
+        builder.append("]");
+        return builder.toString();
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/org/openflow/protocol/action/OFActionOutput.java b/src/main/java/org/openflow/protocol/action/OFActionOutput.java
index b9521d09a..beca7e4f2 100644
--- a/src/main/java/org/openflow/protocol/action/OFActionOutput.java
+++ b/src/main/java/org/openflow/protocol/action/OFActionOutput.java
@@ -22,7 +22,6 @@ package org.openflow.protocol.action;
 
 
 import org.jboss.netty.buffer.ChannelBuffer;
-import org.openflow.util.U16;
 
 /**
  * @author David Erickson (daviderickson@cs.stanford.edu) - Mar 11, 2010
@@ -152,7 +151,11 @@ public class OFActionOutput extends OFAction implements Cloneable {
      */
     @Override
     public String toString() {
-        return "OFActionOutput [maxLength=" + maxLength + ", port=" + U16.f(port)
-                + ", length=" + length + ", type=" + type + "]";
+        StringBuilder builder = new StringBuilder();
+        builder.append(type);
+        builder.append("[");
+        builder.append(port);
+        builder.append("]");
+        return builder.toString();
     }
 }
\ No newline at end of file
diff --git a/src/main/java/org/openflow/protocol/action/OFActionStripVirtualLan.java b/src/main/java/org/openflow/protocol/action/OFActionStripVirtualLan.java
index 7d6b849a6..f79c84d39 100644
--- a/src/main/java/org/openflow/protocol/action/OFActionStripVirtualLan.java
+++ b/src/main/java/org/openflow/protocol/action/OFActionStripVirtualLan.java
@@ -50,4 +50,11 @@ public class OFActionStripVirtualLan extends OFAction {
         // PAD
         data.writeInt(0);
     }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append(type);
+        return builder.toString();
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/org/openflow/protocol/action/OFActionTransportLayer.java b/src/main/java/org/openflow/protocol/action/OFActionTransportLayer.java
index 0bc09c958..696c1c7a2 100644
--- a/src/main/java/org/openflow/protocol/action/OFActionTransportLayer.java
+++ b/src/main/java/org/openflow/protocol/action/OFActionTransportLayer.java
@@ -85,4 +85,14 @@ public abstract class OFActionTransportLayer extends OFAction {
         }
         return true;
     }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append(type);
+        builder.append("[");
+        builder.append(transportPort);
+        builder.append("]");
+        return builder.toString();
+    }
 }
\ No newline at end of file
-- 
GitLab