diff options
Diffstat (limited to 'framework/src/onos/providers')
4 files changed, 33 insertions, 2 deletions
diff --git a/framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java b/framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java index 329df20b..a7e334f4 100644 --- a/framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java +++ b/framework/src/onos/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java @@ -319,6 +319,9 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr } DeviceId did = deviceId(uri(dpid)); OpenFlowSwitch sw = controller.getSwitch(dpid); + if (sw == null) { + return; + } ChassisId cId = new ChassisId(dpid.value()); @@ -339,9 +342,14 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr providerService.updatePorts(did, buildPortDescriptions(sw)); PortStatsCollector psc = - new PortStatsCollector(controller.getSwitch(dpid), portStatsPollFrequency); + new PortStatsCollector(sw, portStatsPollFrequency); psc.start(); collectors.put(dpid, psc); + + //figure out race condition for collectors.remove() and collectors.put() + if (controller.getSwitch(dpid) == null) { + switchRemoved(dpid); + } } @Override @@ -364,6 +372,9 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr } DeviceId did = deviceId(uri(dpid)); OpenFlowSwitch sw = controller.getSwitch(dpid); + if (sw == null) { + return; + } providerService.updatePorts(did, buildPortDescriptions(sw)); } diff --git a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java index cf918605..1039d049 100644 --- a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java +++ b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java @@ -55,6 +55,7 @@ import org.projectfloodlight.openflow.protocol.action.OFActionCircuit; import org.projectfloodlight.openflow.protocol.action.OFActionExperimenter; import org.projectfloodlight.openflow.protocol.action.OFActionGroup; import org.projectfloodlight.openflow.protocol.action.OFActionOutput; +import org.projectfloodlight.openflow.protocol.action.OFActionSetQueue; import org.projectfloodlight.openflow.protocol.action.OFActionPopMpls; import org.projectfloodlight.openflow.protocol.action.OFActionSetDlDst; import org.projectfloodlight.openflow.protocol.action.OFActionSetDlSrc; @@ -333,6 +334,10 @@ public class FlowEntryBuilder { OFActionGroup group = (OFActionGroup) act; builder.group(new DefaultGroupId(group.getGroup().getGroupNumber())); break; + case SET_QUEUE: + OFActionSetQueue setQueue = (OFActionSetQueue) act; + builder.setQueue(setQueue.getQueueId()); + break; case STRIP_VLAN: case POP_VLAN: builder.popVlan(); @@ -350,7 +355,6 @@ public class FlowEntryBuilder { case SET_NW_ECN: case SET_NW_TOS: case SET_NW_TTL: - case SET_QUEUE: case ENQUEUE: default: diff --git a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java index cc265758..64b4360a 100644 --- a/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java +++ b/framework/src/onos/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java @@ -26,6 +26,7 @@ import org.onosproject.net.flow.instructions.Instruction; import org.onosproject.net.flow.instructions.Instructions; import org.onosproject.net.flow.instructions.Instructions.GroupInstruction; import org.onosproject.net.flow.instructions.Instructions.OutputInstruction; +import org.onosproject.net.flow.instructions.Instructions.SetQueueInstruction; import org.onosproject.net.flow.instructions.L0ModificationInstruction; import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModLambdaInstruction; import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModOchSignalInstruction; @@ -50,6 +51,7 @@ import org.projectfloodlight.openflow.protocol.OFFlowModFlags; import org.projectfloodlight.openflow.protocol.action.OFAction; import org.projectfloodlight.openflow.protocol.action.OFActionGroup; import org.projectfloodlight.openflow.protocol.action.OFActionOutput; +import org.projectfloodlight.openflow.protocol.action.OFActionSetQueue; import org.projectfloodlight.openflow.protocol.instruction.OFInstruction; import org.projectfloodlight.openflow.protocol.match.Match; import org.projectfloodlight.openflow.protocol.oxm.OFOxm; @@ -244,6 +246,12 @@ public class FlowModBuilderVer13 extends FlowModBuilder { .setGroup(OFGroup.of(group.groupId().id())); actions.add(groupBuilder.build()); break; + case QUEUE: + SetQueueInstruction queue = (SetQueueInstruction) i; + OFActionSetQueue.Builder queueBuilder = factory().actions().buildSetQueue() + .setQueueId(queue.queueId()); + actions.add(queueBuilder.build()); + break; case TABLE: //FIXME: should not occur here. tableFound = true; diff --git a/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java b/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java index 78650fe6..8acf08ee 100644 --- a/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java +++ b/framework/src/onos/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java @@ -334,12 +334,20 @@ public class OpenFlowGroupProvider extends AbstractProvider implements GroupProv @Override public void switchAdded(Dpid dpid) { OpenFlowSwitch sw = controller.getSwitch(dpid); + if (sw == null) { + return; + } if (isGroupSupported(sw)) { GroupStatsCollector gsc = new GroupStatsCollector( controller.getSwitch(dpid), POLL_INTERVAL); gsc.start(); collectors.put(dpid, gsc); } + + //figure out race condition + if (controller.getSwitch(dpid) == null) { + switchRemoved(dpid); + } } @Override |