Performacne improvements via adding a netty-based openflowj and openflow plugin;...
[controller.git] / opendaylight / samples / reactiveforwarding / src / main / java / org / opendaylight / controller / samples / reactiveforwarding / LBUtil.java
diff --git a/opendaylight/samples/reactiveforwarding/src/main/java/org/opendaylight/controller/samples/reactiveforwarding/LBUtil.java b/opendaylight/samples/reactiveforwarding/src/main/java/org/opendaylight/controller/samples/reactiveforwarding/LBUtil.java
new file mode 100644 (file)
index 0000000..9c45bd8
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * Copyright IBM Corporation, 2013.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.samples.reactiveforwarding;
+
+import org.opendaylight.controller.sal.packet.IPv4;
+import org.opendaylight.controller.sal.packet.Packet;
+import org.opendaylight.controller.sal.packet.TCP;
+import org.opendaylight.controller.sal.packet.UDP;
+import org.opendaylight.controller.sal.utils.IPProtocols;
+import org.opendaylight.controller.sal.utils.NetUtils;
+import org.opendaylight.controller.samples.reactiveforwarding.entities.Client;
+import org.opendaylight.controller.samples.reactiveforwarding.entities.VIP;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Class defines utilty methods that will be used by different components
+ * of the load balancer service
+ *
+ */
+public class LBUtil {
+
+    private static final Logger lbuLogger = LoggerFactory.getLogger(LBUtil.class);
+
+    public LBUtil(){}
+
+    /**
+     * Extract the details of the source machine that sent this packet 'inPkt'
+     * @param inPkt Packet that is received by the controller
+     * @return Details of the source machine in Client object.
+     */
+    public Client getClientFromPacket(IPv4 inPkt){
+        lbuLogger.info("Find client information from packet : {}",inPkt.toString());
+
+        String ip = NetUtils.getInetAddress(inPkt.getSourceAddress()).getHostAddress();
+
+        String protocol = IPProtocols.getProtocolName(inPkt.getProtocol());
+
+        lbuLogger.info("client ip {} and protocl {}",ip,protocol);
+
+        Packet tpFrame= inPkt.getPayload();
+
+        lbuLogger.info("Get protocol layer {}",tpFrame.toString());
+
+        short port = 0;
+
+        if(protocol.equals(IPProtocols.TCP.toString())){
+            TCP tcpFrame = (TCP)tpFrame;
+            port = tcpFrame.getSourcePort();
+        }else{
+            UDP udpFrame = (UDP)tpFrame;
+            port = udpFrame.getSourcePort();
+        }
+
+        lbuLogger.info("Found port {}",port);
+
+        Client source = new Client(ip, protocol,port);
+
+        lbuLogger.info("Client information : {}",source.toString());
+
+        return source;
+    }
+
+    /**
+     * Extract the details of the destination machine where this packet 'inPkt' need
+     * to be delivered
+     * @param inPkt Packet that is received by controller for forwarding
+     * @return Details of the destination machine packet in VIP
+     */
+    public VIP getVIPFromPacket(IPv4 inPkt){
+
+        lbuLogger.info("Find VIP information from packet : {}",inPkt.toString());
+
+        String ip = NetUtils.getInetAddress(inPkt.getDestinationAddress()).getHostAddress();
+
+        String protocol = IPProtocols.getProtocolName(inPkt.getProtocol());
+
+        Packet tpFrame= inPkt.getPayload();
+
+        short port = 0;
+
+        if(protocol.equals(IPProtocols.TCP.toString())){
+            TCP tcpFrame = (TCP)tpFrame;
+            port = tcpFrame.getDestinationPort();
+        }else{
+
+            UDP udpFrame = (UDP)tpFrame;
+            port = udpFrame.getDestinationPort();
+        }
+
+        VIP dest = new VIP(null,ip, protocol,port,null);
+
+        lbuLogger.info("VIP information : {}",dest.toString());
+
+        return dest;
+    }
+}
\ No newline at end of file