Implement SFC integration
[groupbasedpolicy.git] / renderers / ofoverlay / src / main / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / PolicyManager.java
index ee64e488970ea7bed08c88105d6f5765a0f5767d..284028d0d411b91a693551cde65682adb472ed43 100644 (file)
@@ -36,6 +36,9 @@ import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.OfTable;
 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.PolicyEnforcer;
 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.PortSecurity;
 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.SourceMapper;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchListener;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.Action;
+import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node.SwitchManager;
 import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf.SubjectFeatures;
 import org.opendaylight.groupbasedpolicy.resolver.EgKey;
 import org.opendaylight.groupbasedpolicy.resolver.PolicyInfo;
@@ -46,6 +49,7 @@ import org.opendaylight.groupbasedpolicy.util.SingletonTask;
 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.TableBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionDefinitionId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayConfig.LearningMode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.SubjectFeatureDefinitions;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
@@ -116,6 +120,10 @@ public class PolicyManager
             t.submit();
         }
 
+        for(Entry<ActionDefinitionId, Action> entry : SubjectFeatures.getActions().entrySet()) {
+            policyResolver.registerActionDefinitions(entry.getKey(), entry.getValue());
+        }
+
         OfContext ctx = new OfContext(dataBroker, rpcRegistry,
                                         this, policyResolver, switchManager,
                                         endpointManager, executor);
@@ -142,32 +150,7 @@ public class PolicyManager
 
     @Override
     public void switchReady(final NodeId nodeId) {
-        //TODO Apr15 alagalah : OVSDB CRUD tunnels may go here.
-//        WriteTransaction t = dataBroker.newWriteOnlyTransaction();
-//
-//        NodeBuilder nb = new NodeBuilder()
-//            .setId(nodeId)
-//            .addAugmentation(FlowCapableNode.class,
-//                             new FlowCapableNodeBuilder()
-//                                .build());
-//        t.merge(LogicalDatastoreType.CONFIGURATION,
-//                FlowUtils.createNodePath(nodeId),
-//                nb.build(), true);
-//        ListenableFuture<Void> result = t.submit();
-//        Futures.addCallback(result,
-//                            new FutureCallback<Void>() {
-//            @Override
-//            public void onSuccess(Void result) {
-//                dirty.get().addNode(nodeId);
-//                scheduleUpdate();
-//            }
-//
-//            @Override
-//            public void onFailure(Throwable t) {
-//                LOG.error("Could not add switch {}", nodeId, t);
-//            }
-//        });
-
+        scheduleUpdate();
     }
 
     @Override
@@ -276,7 +259,7 @@ public class PolicyManager
                    t.read(LogicalDatastoreType.CONFIGURATION, entry.getKey()).get();
 
             if (r.isPresent()) {
-                Table curTable = (Table)r.get();
+                Table curTable = r.get();
                 curr = new HashSet<Flow>(curTable.getFlow());
             }
             Sets.SetView<Flow> deletions = Sets.difference(curr, update);
@@ -354,8 +337,6 @@ public class PolicyManager
         @Override
         public Void call() throws Exception {
             for (NodeId node : switchManager.getReadySwitches()) {
-                if (!switchManager.isSwitchReady(node))
-                    return null;
                 PolicyInfo info = policyResolver.getCurrentPolicy();
                 if (info == null)
                     return null;