Added notification for Flow add/delete/update
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / session / MessageDispatchServiceImpl.java
index fcb8455ef65141a2c558507df46a0bb6fca480da..7f1239b1be4457db3c57dd28935089a0f143fb3b 100644 (file)
@@ -5,6 +5,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.concurrent.Future;
 
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
  import org.opendaylight.controller.sal.common.util.Rpcs;
 import org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter;
 import org.opendaylight.openflowplugin.openflow.md.core.ConnectionConductor;
@@ -17,6 +18,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.Upd
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInput;
@@ -41,6 +43,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SetAsyncInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SetConfigInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.TableModInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.port.service.rev131107.UpdatePortOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.port.service.rev131107.UpdatePortOutputBuilder;
 import org.opendaylight.yangtools.yang.common.RpcError;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
@@ -58,7 +62,7 @@ public class MessageDispatchServiceImpl implements IMessageDispatchService {
 
     private static final Logger LOG = LoggerFactory.getLogger(MessageDispatchServiceImpl.class);
 
-    private SessionContext session;
+    private SessionContext session;    
 
     /**
      * constructor
@@ -67,7 +71,7 @@ public class MessageDispatchServiceImpl implements IMessageDispatchService {
      *            - MessageDispatchService for this session
      */
     public MessageDispatchServiceImpl(SessionContext session) {
-        this.session = session;
+        this.session = session;        
     }
 
     /**
@@ -102,7 +106,7 @@ public class MessageDispatchServiceImpl implements IMessageDispatchService {
     }
 
     @Override
-    public Future<RpcResult<BarrierOutput>> barrier(BarrierInput input, SwitchConnectionDistinguisher cookie) {
+    public Future<RpcResult<BarrierOutput>> barrier(BarrierInput input, SwitchConnectionDistinguisher cookie) {  
         return getConnectionAdapter(cookie).barrier(input);
     }
 
@@ -113,32 +117,12 @@ public class MessageDispatchServiceImpl implements IMessageDispatchService {
 
     @Override
     public Future<RpcResult<UpdateFlowOutput>> flowMod(FlowModInput input, SwitchConnectionDistinguisher cookie) {
-
-        // Set Xid before invoking RPC on OFLibrary
-        // TODO : Cleaner approach is to use a copy constructor once it is implemented
-        Long Xid = session.getNextXid();
-        FlowModInputBuilder mdInput = new FlowModInputBuilder();
-        mdInput.setXid(Xid);
-        mdInput.setBufferId(input.getBufferId());
-        mdInput.setCommand(input.getCommand());
-        mdInput.setCookie(input.getCookie());
-        mdInput.setCookieMask(input.getCookieMask());
-        mdInput.setFlags(input.getFlags());
-        mdInput.setHardTimeout(input.getHardTimeout());
-        mdInput.setIdleTimeout(input.getHardTimeout());
-        mdInput.setMatch(input.getMatch());
-        mdInput.setOutGroup(input.getOutGroup());
-        mdInput.setOutPort(input.getOutPort());
-        mdInput.setPriority(input.getPriority());
-        mdInput.setTableId(input.getTableId());
-        mdInput.setVersion(input.getVersion());
         LOG.debug("Calling OFLibrary flowMod");
-        Future<RpcResult<Void>> response = getConnectionAdapter(cookie).flowMod(mdInput.build());
+        Future<RpcResult<Void>> response = getConnectionAdapter(cookie).flowMod(input);
 
         // Send the same Xid back to caller - MessageDrivenSwitch
-        UpdateFlowOutputBuilder flowModOutput = new UpdateFlowOutputBuilder();
-        String stringXid =Xid.toString();
-        BigInteger bigIntXid = new BigInteger( stringXid );
+        UpdateFlowOutputBuilder flowModOutput = new UpdateFlowOutputBuilder();        
+        BigInteger bigIntXid = BigInteger.valueOf(input.getXid()) ;
         flowModOutput.setTransactionId(new TransactionId(bigIntXid));
 
         UpdateFlowOutput result = flowModOutput.build();
@@ -174,26 +158,15 @@ public class MessageDispatchServiceImpl implements IMessageDispatchService {
     }
 
     @Override
-    public Future<RpcResult<UpdateGroupOutput>> groupMod(GroupModInput input, SwitchConnectionDistinguisher cookie) {
-
-        // Set Xid before invoking RPC on OFLibrary
-        // TODO : Cleaner approach is to use a copy constructor once it is implemented
-        Long Xid = session.getNextXid();
-        GroupModInputBuilder mdInput = new GroupModInputBuilder();
-        mdInput.setXid(Xid);
-        mdInput.setBucketsList(input.getBucketsList());
-        mdInput.setCommand(input.getCommand());
-        mdInput.setGroupId(input.getGroupId());
-        mdInput.setType(input.getType());
-        mdInput.setVersion(input.getVersion());
+    public Future<RpcResult<UpdateGroupOutput>> groupMod(GroupModInput input, SwitchConnectionDistinguisher cookie) {        
         LOG.debug("Calling OFLibrary groupMod");
-        Future<RpcResult<Void>> response = getConnectionAdapter(cookie).groupMod(mdInput.build());
+        Future<RpcResult<Void>> response = getConnectionAdapter(cookie).groupMod(input);
 
         // Send the same Xid back to caller - MessageDrivenSwitch
-        UpdateGroupOutputBuilder groupModOutput = new UpdateGroupOutputBuilder();
-        String stringXid =Xid.toString();
-        BigInteger bigIntXid = new BigInteger( stringXid );
+        UpdateGroupOutputBuilder groupModOutput = new UpdateGroupOutputBuilder();      
+        BigInteger bigIntXid = BigInteger.valueOf(input.getXid());
         groupModOutput.setTransactionId(new TransactionId(bigIntXid));
+       
         UpdateGroupOutput result = groupModOutput.build();
         Collection<RpcError> errors = Collections.emptyList();
         RpcResult<UpdateGroupOutput> rpcResult = Rpcs.getRpcResult(true, result, errors);
@@ -207,26 +180,14 @@ public class MessageDispatchServiceImpl implements IMessageDispatchService {
 
     @Override
     public Future<RpcResult<UpdateMeterOutput>> meterMod(MeterModInput input, SwitchConnectionDistinguisher cookie) {
-
-        // Set Xid before invoking RPC on OFLibrary
-        // TODO : Cleaner approach is to use a copy constructor once it is implemented
-        Long Xid = session.getNextXid();
-        MeterModInputBuilder mdInput = new MeterModInputBuilder();
-        mdInput.setXid(Xid);
-        mdInput.setBands(input.getBands());
-        mdInput.setCommand(input.getCommand());
-        mdInput.setFlags(input.getFlags());
-        mdInput.setMeterId(input.getMeterId());
-        mdInput.setVersion(input.getVersion());
-        mdInput.setVersion(input.getVersion());
         LOG.debug("Calling OFLibrary meterMod");
-        Future<RpcResult<Void>> response = getConnectionAdapter(cookie).meterMod(mdInput.build());
+        Future<RpcResult<Void>> response = getConnectionAdapter(cookie).meterMod(input);
 
         // Send the same Xid back to caller - MessageDrivenSwitch
-        UpdateMeterOutputBuilder meterModOutput = new UpdateMeterOutputBuilder();
-        String stringXid =Xid.toString();
-        BigInteger bigIntXid = new BigInteger( stringXid );
+        UpdateMeterOutputBuilder meterModOutput = new UpdateMeterOutputBuilder();       
+        BigInteger bigIntXid =BigInteger.valueOf(input.getXid());
         meterModOutput.setTransactionId(new TransactionId(bigIntXid));
+        
         UpdateMeterOutput result = meterModOutput.build();
         Collection<RpcError> errors = Collections.emptyList();
         RpcResult<UpdateMeterOutput> rpcResult = Rpcs.getRpcResult(true, result, errors);
@@ -249,8 +210,22 @@ public class MessageDispatchServiceImpl implements IMessageDispatchService {
     }
 
     @Override
-    public Future<RpcResult<Void>> portMod(PortModInput input, SwitchConnectionDistinguisher cookie) {
-        return getConnectionAdapter(cookie).portMod(input);
+    public Future<RpcResult<UpdatePortOutput>> portMod(PortModInput input, SwitchConnectionDistinguisher cookie) {
+
+        LOG.debug("Calling OFLibrary portMod");
+        Future<RpcResult<Void>> response = getConnectionAdapter(cookie).portMod(input);
+
+        // Send the same Xid back to caller - ModelDrivenSwitch
+        UpdatePortOutputBuilder portModOutput = new UpdatePortOutputBuilder();
+        String stringXid =input.getXid().toString();
+        BigInteger bigIntXid = new BigInteger( stringXid );
+        portModOutput.setTransactionId(new TransactionId(bigIntXid));
+        UpdatePortOutput result = portModOutput.build();
+        Collection<RpcError> errors = Collections.emptyList();
+        RpcResult<UpdatePortOutput> rpcResult = Rpcs.getRpcResult(true, result, errors);
+
+        LOG.debug("Returning to ModelDrivenSwitch for portMod RPC");
+        return Futures.immediateFuture(rpcResult);
     }
 
     @Override
@@ -272,5 +247,4 @@ public class MessageDispatchServiceImpl implements IMessageDispatchService {
     public Future<RpcResult<Void>> tableMod(TableModInput input, SwitchConnectionDistinguisher cookie) {
         return getConnectionAdapter(cookie).tableMod(input);
     }
-
 }