From c4518a8480a5bb9bdd4316b453cdae586c30ab2e Mon Sep 17 00:00:00 2001 From: Anil Vishnoi Date: Thu, 26 Mar 2015 19:13:49 +0530 Subject: [PATCH] Bug 2902 - NPE when apply_action doesn't contain action list Signed-off-by: Anil Vishnoi Change-Id: Ibf7f2e940388f1a28466fa5b19b75a95aa9a4e24 --- .../core/sal/convertor/ActionConvertor.java | 120 +++++++++--------- 1 file changed, 61 insertions(+), 59 deletions(-) diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertor.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertor.java index 785ff6fa0f..4ac04efcf6 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertor.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ActionConvertor.java @@ -934,65 +934,67 @@ public final class ActionConvertor { final List actionList, final OpenflowVersion ofVersion, final ActionPath actionPath) { List bucketActions = new ArrayList<>(); - for (Action action : actionList) { - if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.OutputActionCase) { - bucketActions.add(ofToSALOutputAction(ofVersion, action)); - } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.GroupCase) { - bucketActions.add(ofToSALGroupAction(action)); - } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlOutCase) { - CopyTtlOutBuilder copyTtlOutaction = new CopyTtlOutBuilder(); - bucketActions.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder().setCopyTtlOut(copyTtlOutaction.build()).build()); - } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlInCase) { - CopyTtlInBuilder copyTtlInaction = new CopyTtlInBuilder(); - bucketActions.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder().setCopyTtlIn(copyTtlInaction.build()).build()); - - } else if (action.getActionChoice() instanceof SetMplsTtlCase) { - bucketActions.add(ofToSALSetMplsTtl(action)); - } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.DecMplsTtlCase) { - DecMplsTtlBuilder decMplsTtl = new DecMplsTtlBuilder(); - bucketActions.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder().setDecMplsTtl(decMplsTtl.build()).build()); - } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushVlanCase) { - bucketActions.add(ofToSALPushVlanAction(action)); - } else if ((action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopVlanCase) - || (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.StripVlanCase)) { - // OF1.0 nodes will emit StripVlan and OF1.3+ will emit StripVlan/PopVlan, convert both to PopVlan for SAL - PopVlanActionBuilder popVlan = new PopVlanActionBuilder(); - bucketActions.add(new PopVlanActionCaseBuilder().setPopVlanAction(popVlan.build()).build()); - } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushMplsCase) { - bucketActions.add(ofToSALPushMplsAction(action)); - } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopMplsCase) { - bucketActions.add(ofToSALPopMplsAction(action)); - } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetQueueCase) { - bucketActions.add(ofToSALSetQueue(action)); - } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwTtlCase) { - bucketActions.add(ofToSALSetNwTtl(action)); - } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.DecNwTtlCase) { - DecNwTtlBuilder decNwTtl = new DecNwTtlBuilder(); - bucketActions.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder() - .setDecNwTtl(decNwTtl.build()).build()); - } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetFieldCase) { - bucketActions.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder() - .setSetField(MatchConvertorImpl.fromOFSetFieldToSALSetFieldAction(action, ofVersion)).build()); - } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushPbbCase) { - bucketActions.add(ofToSALPushPbbAction(action)); - } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopPbbCase) { - PopPbbActionBuilder popPbb = new PopPbbActionBuilder(); - bucketActions.add(new PopPbbActionCaseBuilder().setPopPbbAction(popPbb.build()).build()); - - } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwDstCase) { - org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstActionBuilder setNwDstActionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstActionBuilder(); - bucketActions.add(new SetNwDstActionCaseBuilder().setSetNwDstAction(setNwDstActionBuilder.build()).build()); - - } else { - /** - * TODO: EXTENSION PROPOSAL (action, OFJava to MD-SAL) - * - we might also need a way on how to identify exact type of augmentation to be - * used as match can be bound to multiple models - */ - org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action processedAction = - ActionExtensionHelper.processAlienAction(action, ofVersion, actionPath); - if (processedAction != null) { - bucketActions.add(processedAction); + if(actionList != null){ + for (Action action : actionList) { + if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.OutputActionCase) { + bucketActions.add(ofToSALOutputAction(ofVersion, action)); + } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.GroupCase) { + bucketActions.add(ofToSALGroupAction(action)); + } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlOutCase) { + CopyTtlOutBuilder copyTtlOutaction = new CopyTtlOutBuilder(); + bucketActions.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder().setCopyTtlOut(copyTtlOutaction.build()).build()); + } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlInCase) { + CopyTtlInBuilder copyTtlInaction = new CopyTtlInBuilder(); + bucketActions.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder().setCopyTtlIn(copyTtlInaction.build()).build()); + + } else if (action.getActionChoice() instanceof SetMplsTtlCase) { + bucketActions.add(ofToSALSetMplsTtl(action)); + } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.DecMplsTtlCase) { + DecMplsTtlBuilder decMplsTtl = new DecMplsTtlBuilder(); + bucketActions.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder().setDecMplsTtl(decMplsTtl.build()).build()); + } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushVlanCase) { + bucketActions.add(ofToSALPushVlanAction(action)); + } else if ((action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopVlanCase) + || (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.StripVlanCase)) { + // OF1.0 nodes will emit StripVlan and OF1.3+ will emit StripVlan/PopVlan, convert both to PopVlan for SAL + PopVlanActionBuilder popVlan = new PopVlanActionBuilder(); + bucketActions.add(new PopVlanActionCaseBuilder().setPopVlanAction(popVlan.build()).build()); + } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushMplsCase) { + bucketActions.add(ofToSALPushMplsAction(action)); + } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopMplsCase) { + bucketActions.add(ofToSALPopMplsAction(action)); + } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetQueueCase) { + bucketActions.add(ofToSALSetQueue(action)); + } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwTtlCase) { + bucketActions.add(ofToSALSetNwTtl(action)); + } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.DecNwTtlCase) { + DecNwTtlBuilder decNwTtl = new DecNwTtlBuilder(); + bucketActions.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder() + .setDecNwTtl(decNwTtl.build()).build()); + } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetFieldCase) { + bucketActions.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder() + .setSetField(MatchConvertorImpl.fromOFSetFieldToSALSetFieldAction(action, ofVersion)).build()); + } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushPbbCase) { + bucketActions.add(ofToSALPushPbbAction(action)); + } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopPbbCase) { + PopPbbActionBuilder popPbb = new PopPbbActionBuilder(); + bucketActions.add(new PopPbbActionCaseBuilder().setPopPbbAction(popPbb.build()).build()); + + } else if (action.getActionChoice() instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwDstCase) { + org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstActionBuilder setNwDstActionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstActionBuilder(); + bucketActions.add(new SetNwDstActionCaseBuilder().setSetNwDstAction(setNwDstActionBuilder.build()).build()); + + } else { + /** + * TODO: EXTENSION PROPOSAL (action, OFJava to MD-SAL) + * - we might also need a way on how to identify exact type of augmentation to be + * used as match can be bound to multiple models + */ + org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action processedAction = + ActionExtensionHelper.processAlienAction(action, ofVersion, actionPath); + if (processedAction != null) { + bucketActions.add(processedAction); + } } } } -- 2.36.6