/** * Copyright (c) 2014 Ericsson India Global Services Pvt Ltd. and others. 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 * * Contributor: hema.gopalkrishnan@ericsson.com */ package org.opendaylight.openflowplugin.test; import java.math.BigInteger; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import org.eclipse.osgi.framework.console.CommandInterpreter; import org.eclipse.osgi.framework.console.CommandProvider; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; 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.TableKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpOp; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthDst; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthSrc; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.InPort; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv4Dst; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MplsBos; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MplsLabel; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableConfig; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.set.field.match.SetFieldMatch; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.set.field.match.SetFieldMatchBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldMissBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.MatchBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTableBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTableMissBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WildcardsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldMissBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.apply.actions.ApplyActionsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.apply.actions.miss.ApplyActionsMissBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.match.MatchSetfieldBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.next.table.TablesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.next.table.miss.TablesMissBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.wildcards.WildcardSetfieldBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeaturesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.TablePropertiesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.table.properties.TableFeatureProperties; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.table.properties.TableFeaturePropertiesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.table.properties.TableFeaturePropertiesKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; import org.osgi.framework.BundleContext; public class OpenflowpluginTableFeaturesTestCommandProvider implements CommandProvider { private DataBroker dataBroker; private ProviderContext pc; private final BundleContext ctx; private Table testTable; private Node testNode; private final String originalTableName = "Foo"; private final String updatedTableName = "Bar"; public OpenflowpluginTableFeaturesTestCommandProvider(BundleContext ctx) { this.ctx = ctx; } public void onSessionInitiated(ProviderContext session) { pc = session; dataBroker = session.getSALService(DataBroker.class); ctx.registerService(CommandProvider.class.getName(), this, null); // createTestNode(); // createTestTable(); } private void createUserNode(String nodeRef) { NodeBuilder builder = new NodeBuilder(); builder.setId(new NodeId(nodeRef)); builder.setKey(new NodeKey(builder.getId())); testNode = builder.build(); } private void createTestNode() { NodeBuilder builder = new NodeBuilder(); builder.setId(new NodeId(OpenflowpluginTestActivator.NODE_ID)); builder.setKey(new NodeKey(builder.getId())); testNode = builder.build(); } private InstanceIdentifier nodeToInstanceId(Node node) { return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance(); } private TableBuilder createTestTable(String tableFeatureTypeArg) { String tableFeatureType = tableFeatureTypeArg; if (tableFeatureType == null) { tableFeatureType = "t1"; } // Sample data , committing to DataStore short id = 12; TableKey key = new TableKey(id); TableBuilder table = new TableBuilder(); table.setId((short) 12); table.setId(id); table.setKey(key); List ofTablefeatures = new ArrayList(); // Skip this to send empty table features if (!tableFeatureType.equals("t1")) { TableFeaturesBuilder tableFeature1 = new TableFeaturesBuilder(); tableFeature1.setTableId(new Short((short) 0)); tableFeature1.setName("Table 0"); tableFeature1.setMetadataMatch((new BigInteger("10", 10))); tableFeature1.setMetadataWrite((new BigInteger("10", 10))); tableFeature1.setMaxEntries(new Long(10000)); tableFeature1.setConfig(new TableConfig(false)); List properties = new ArrayList(); switch (tableFeatureType) { case "t2": //To set the ApplyActionsMiss properties.add(createApplyActionsMissTblFeatureProp().build()); break; case "t3": // To set the Next Table properties.add(createNextTblFeatureProp().build()); break; case "t4": // To set the Next Table Miss properties.add(createNextTableMissTblFeatureProp().build()); break; case "t5": //To set the ApplyActions properties.add(createApplyActionsTblFeatureProp().build()); break; case "t6": // To set the instructions properties.add(createInstructionsTblFeatureProp().build()); break; case "t7": // To set the instructions miss properties.add(createInstructionsMissTblFeatureProp().build()); break; case "t8": // To set the write actions properties.add(createWriteActionsTblFeatureProp().build()); break; case "t9": // To set the write actions miss properties.add(createWriteActionsMissTblFeatureProp().build()); break; case "t10": // To set the match field properties.add(createMatchFieldTblFeatureProp().build()); break; case "t11": // To set the write set-field properties.add(createWriteSetFieldTblFeatureProp().build()); break; case "t12": // To set the write set-field miss properties.add(createWriteSetFieldMissTblFeatureProp().build()); break; case "t13": // To set the apply set field properties.add(createApplySetFieldTblFeatureProp().build()); break; case "t14": // To set the apply set field miss properties.add(createApplySetFieldMissTblFeatureProp().build()); break; case "t15": // To set the wildcards set field match properties.add(createWildCardsTblFeatureProp().build()); break; } TablePropertiesBuilder propertyBld = new TablePropertiesBuilder(); propertyBld.setTableFeatureProperties(properties); tableFeature1.setTableProperties(propertyBld.build()); ofTablefeatures.add(tableFeature1.build()); } table.setTableFeatures(ofTablefeatures); testTable = table.build(); return table; } private TableFeaturePropertiesBuilder createApplyActionsMissTblFeatureProp() { TableFeaturePropertiesBuilder tableFeatureProperty = new TableFeaturePropertiesBuilder(); //To set the ApplyActionsMiss List actionList = new ArrayList(); ActionBuilder ab = new ActionBuilder(); ab.setAction(new PopMplsActionCaseBuilder().build()); actionList.add(ab.build()); tableFeatureProperty.setTableFeaturePropType( new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsMissBuilder() .setApplyActionsMiss(new ApplyActionsMissBuilder().setAction(actionList).build()).build()); TableFeaturePropertiesKey keyValue = new TableFeaturePropertiesKey(0); tableFeatureProperty.setKey(keyValue); tableFeatureProperty.setOrder(1); return tableFeatureProperty; } private TableFeaturePropertiesBuilder createApplyActionsTblFeatureProp() { TableFeaturePropertiesBuilder tableFeatureProperty = new TableFeaturePropertiesBuilder(); List actionListt5 = new ArrayList(); ActionBuilder abt5 = new ActionBuilder(); abt5.setAction(new PopMplsActionCaseBuilder().build()); actionListt5.add(abt5.build()); tableFeatureProperty.setTableFeaturePropType( new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsBuilder() .setApplyActions(new ApplyActionsBuilder().setAction(actionListt5).build()).build()); TableFeaturePropertiesKey keyValue = new TableFeaturePropertiesKey(0); tableFeatureProperty.setKey(keyValue); tableFeatureProperty.setOrder(1); return tableFeatureProperty; } private TableFeaturePropertiesBuilder createNextTblFeatureProp() { TableFeaturePropertiesBuilder tableFeatureProperty = new TableFeaturePropertiesBuilder(); List nextTblIds = Arrays.asList(new Short[]{2, 3}); NextTableBuilder nextTblBld = new NextTableBuilder(); nextTblBld.setTables(new TablesBuilder().setTableIds(nextTblIds).build()); tableFeatureProperty.setTableFeaturePropType(nextTblBld.build()); TableFeaturePropertiesKey keyValue = new TableFeaturePropertiesKey(0); tableFeatureProperty.setKey(keyValue); tableFeatureProperty.setOrder(1); return tableFeatureProperty; } private TableFeaturePropertiesBuilder createNextTableMissTblFeatureProp() { TableFeaturePropertiesBuilder tableFeatureProperty = new TableFeaturePropertiesBuilder(); List nextTblMissIds = Arrays.asList(new Short[]{23, 24, 25, 27, 28, 29, 30}); NextTableMissBuilder nextTblMissBld = new NextTableMissBuilder(); nextTblMissBld.setTablesMiss(new TablesMissBuilder().setTableIds(nextTblMissIds).build()); tableFeatureProperty.setTableFeaturePropType(nextTblMissBld.build()); TableFeaturePropertiesKey keyValue = new TableFeaturePropertiesKey(0); tableFeatureProperty.setKey(keyValue); tableFeatureProperty.setOrder(1); return tableFeatureProperty; } private TableFeaturePropertiesBuilder createInstructionsTblFeatureProp() { TableFeaturePropertiesBuilder tableFeatureProperty = new TableFeaturePropertiesBuilder(); List instLst = new ArrayList(); InstructionBuilder ib = new InstructionBuilder(); ib.setOrder(1); ib.setInstruction(new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder().build()); ib.setKey(new InstructionKey(1)); tableFeatureProperty.setTableFeaturePropType( new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsBuilder().setInstructions( new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.instructions.InstructionsBuilder().setInstruction(instLst).build()).build()); TableFeaturePropertiesKey keyValue = new TableFeaturePropertiesKey(0); tableFeatureProperty.setKey(keyValue); tableFeatureProperty.setOrder(1); return tableFeatureProperty; } private TableFeaturePropertiesBuilder createInstructionsMissTblFeatureProp() { // To set the instructions miss -- "t7" TableFeaturePropertiesBuilder tableFeatureProperty = new TableFeaturePropertiesBuilder(); List instLst = new ArrayList(); InstructionBuilder ib1 = new InstructionBuilder(); ib1.setOrder(1); ib1.setInstruction(new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCaseBuilder().build()); ib1.setKey(new InstructionKey(1)); InstructionBuilder ib2 = new InstructionBuilder(); ib2.setOrder(2); ib2.setInstruction(new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.MeterCaseBuilder().build()); ib2.setKey(new InstructionKey(2)); tableFeatureProperty.setTableFeaturePropType( new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsMissBuilder().setInstructionsMiss( new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.instructions.miss.InstructionsMissBuilder().setInstruction(instLst).build()).build()); TableFeaturePropertiesKey keyValue = new TableFeaturePropertiesKey(0); tableFeatureProperty.setKey(keyValue); tableFeatureProperty.setOrder(1); return tableFeatureProperty; } private TableFeaturePropertiesBuilder createWriteActionsTblFeatureProp() { // t8 TableFeaturePropertiesBuilder tableFeatureProperty = new TableFeaturePropertiesBuilder(); List actionList = new ArrayList(); ActionBuilder abt1 = new ActionBuilder(); abt1.setAction(new CopyTtlOutCaseBuilder().build()); actionList.add(abt1.build()); ActionBuilder abt2 = new ActionBuilder(); abt2.setAction(new PopVlanActionCaseBuilder().build()); actionList.add(abt2.build()); tableFeatureProperty.setTableFeaturePropType( new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteActionsBuilder() .setWriteActions(new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.write.actions.WriteActionsBuilder().setAction(actionList).build()).build()); TableFeaturePropertiesKey keyValue = new TableFeaturePropertiesKey(0); tableFeatureProperty.setKey(keyValue); tableFeatureProperty.setOrder(1); return tableFeatureProperty; } private TableFeaturePropertiesBuilder createWriteActionsMissTblFeatureProp() { // t9 TableFeaturePropertiesBuilder tableFeatureProperty = new TableFeaturePropertiesBuilder(); List actionList = new ArrayList(); ActionBuilder abt1 = new ActionBuilder(); abt1.setAction(new CopyTtlInCaseBuilder().build()); actionList.add(abt1.build()); ActionBuilder abt2 = new ActionBuilder(); abt2.setAction(new PushPbbActionCaseBuilder().build()); actionList.add(abt2.build()); tableFeatureProperty.setTableFeaturePropType( new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteActionsMissBuilder() .setWriteActionsMiss(new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.write.actions.miss.WriteActionsMissBuilder().setAction(actionList).build()).build()); TableFeaturePropertiesKey keyValue = new TableFeaturePropertiesKey(0); tableFeatureProperty.setKey(keyValue); tableFeatureProperty.setOrder(1); return tableFeatureProperty; } private TableFeaturePropertiesBuilder createMatchFieldTblFeatureProp() { //t10 TableFeaturePropertiesBuilder tableFeatureProperty = new TableFeaturePropertiesBuilder(); List setFieldMatch = new ArrayList(); SetFieldMatchBuilder setFieldMatchBld = new SetFieldMatchBuilder(); setFieldMatchBld.setHasMask(false); setFieldMatchBld.setMatchType(MplsLabel.class); setFieldMatch.add(setFieldMatchBld.build()); MatchBuilder matchBld = new MatchBuilder(); MatchSetfieldBuilder matchSetfieldBld = new MatchSetfieldBuilder(); matchSetfieldBld.setSetFieldMatch(setFieldMatch); matchBld.setMatchSetfield(matchSetfieldBld.build()); tableFeatureProperty.setTableFeaturePropType(matchBld.build()); TableFeaturePropertiesKey keyValue = new TableFeaturePropertiesKey(0); tableFeatureProperty.setKey(keyValue); tableFeatureProperty.setOrder(1); return tableFeatureProperty; } private TableFeaturePropertiesBuilder createWriteSetFieldTblFeatureProp() { //t11 TableFeaturePropertiesBuilder tableFeatureProperty = new TableFeaturePropertiesBuilder(); List setFieldMatch = new ArrayList(); SetFieldMatchBuilder setFieldMatchBld1 = new SetFieldMatchBuilder(); setFieldMatchBld1.setHasMask(false); setFieldMatchBld1.setMatchType(MplsLabel.class); SetFieldMatchBuilder setFieldMatchBld2 = new SetFieldMatchBuilder(); setFieldMatchBld2.setHasMask(true); setFieldMatchBld2.setMatchType(MplsBos.class); SetFieldMatchBuilder setFieldMatchBld3 = new SetFieldMatchBuilder(); setFieldMatchBld3.setHasMask(true); setFieldMatchBld3.setMatchType(EthDst.class); setFieldMatch.add(setFieldMatchBld1.build()); setFieldMatch.add(setFieldMatchBld2.build()); setFieldMatch.add(setFieldMatchBld3.build()); WriteSetfieldBuilder writeSetfieldBld = new WriteSetfieldBuilder(); org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.write.setfield.WriteSetfieldBuilder writeSetfieldBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.write.setfield.WriteSetfieldBuilder(); writeSetfieldBuilder.setSetFieldMatch(setFieldMatch); writeSetfieldBld.setWriteSetfield(writeSetfieldBuilder.build()); tableFeatureProperty.setTableFeaturePropType(writeSetfieldBld.build()); TableFeaturePropertiesKey keyValue = new TableFeaturePropertiesKey(0); tableFeatureProperty.setKey(keyValue); tableFeatureProperty.setOrder(1); return tableFeatureProperty; } private TableFeaturePropertiesBuilder createWriteSetFieldMissTblFeatureProp() { // t12 TableFeaturePropertiesBuilder tableFeatureProperty = new TableFeaturePropertiesBuilder(); List setFieldMatch = new ArrayList(); SetFieldMatchBuilder setFieldMatchBld1 = new SetFieldMatchBuilder(); setFieldMatchBld1.setHasMask(false); setFieldMatchBld1.setMatchType(EthSrc.class); SetFieldMatchBuilder setFieldMatchBld2 = new SetFieldMatchBuilder(); setFieldMatchBld2.setHasMask(true); setFieldMatchBld2.setMatchType(InPort.class); SetFieldMatchBuilder setFieldMatchBld3 = new SetFieldMatchBuilder(); setFieldMatchBld3.setHasMask(true); setFieldMatchBld3.setMatchType(Ipv4Dst.class); setFieldMatch.add(setFieldMatchBld1.build()); setFieldMatch.add(setFieldMatchBld2.build()); setFieldMatch.add(setFieldMatchBld3.build()); WriteSetfieldMissBuilder writeSetfieldBld = new WriteSetfieldMissBuilder(); org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.write.setfield.miss.WriteSetfieldMissBuilder writeSetfieldMissBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.write.setfield.miss.WriteSetfieldMissBuilder(); writeSetfieldMissBuilder.setSetFieldMatch(setFieldMatch); writeSetfieldBld.setWriteSetfieldMiss(writeSetfieldMissBuilder.build()); tableFeatureProperty.setTableFeaturePropType(writeSetfieldBld.build()); TableFeaturePropertiesKey keyValue = new TableFeaturePropertiesKey(0); tableFeatureProperty.setKey(keyValue); tableFeatureProperty.setOrder(1); return tableFeatureProperty; } private TableFeaturePropertiesBuilder createApplySetFieldTblFeatureProp() { //t13 TableFeaturePropertiesBuilder tableFeatureProperty = new TableFeaturePropertiesBuilder(); List setFieldMatch = new ArrayList(); SetFieldMatchBuilder setFieldMatchBld1 = new SetFieldMatchBuilder(); setFieldMatchBld1.setHasMask(false); setFieldMatchBld1.setMatchType(ArpOp.class); SetFieldMatchBuilder setFieldMatchBld2 = new SetFieldMatchBuilder(); setFieldMatchBld2.setHasMask(true); setFieldMatchBld2.setMatchType(InPort.class); SetFieldMatchBuilder setFieldMatchBld3 = new SetFieldMatchBuilder(); setFieldMatchBld3.setHasMask(true); setFieldMatchBld3.setMatchType(Ipv4Dst.class); setFieldMatch.add(setFieldMatchBld1.build()); setFieldMatch.add(setFieldMatchBld2.build()); setFieldMatch.add(setFieldMatchBld3.build()); ApplySetfieldBuilder applySetfieldBld = new ApplySetfieldBuilder(); org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.apply.setfield.ApplySetfieldBuilder applySetfieldBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.apply.setfield.ApplySetfieldBuilder(); applySetfieldBuilder.setSetFieldMatch(setFieldMatch); applySetfieldBld.setApplySetfield(applySetfieldBuilder.build()); tableFeatureProperty.setTableFeaturePropType(applySetfieldBld.build()); TableFeaturePropertiesKey keyValue = new TableFeaturePropertiesKey(0); tableFeatureProperty.setKey(keyValue); tableFeatureProperty.setOrder(1); return tableFeatureProperty; } private TableFeaturePropertiesBuilder createApplySetFieldMissTblFeatureProp() { //t14 TableFeaturePropertiesBuilder tableFeatureProperty = new TableFeaturePropertiesBuilder(); List setFieldMatch = new ArrayList(); SetFieldMatchBuilder setFieldMatchBld1 = new SetFieldMatchBuilder(); setFieldMatchBld1.setHasMask(false); setFieldMatchBld1.setMatchType(ArpOp.class); SetFieldMatchBuilder setFieldMatchBld2 = new SetFieldMatchBuilder(); setFieldMatchBld2.setHasMask(true); setFieldMatchBld2.setMatchType(InPort.class); SetFieldMatchBuilder setFieldMatchBld3 = new SetFieldMatchBuilder(); setFieldMatchBld3.setHasMask(true); setFieldMatchBld3.setMatchType(Ipv4Dst.class); setFieldMatch.add(setFieldMatchBld1.build()); setFieldMatch.add(setFieldMatchBld2.build()); setFieldMatch.add(setFieldMatchBld3.build()); ApplySetfieldMissBuilder applySetfieldMissBld = new ApplySetfieldMissBuilder(); org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.apply.setfield.miss.ApplySetfieldMissBuilder applySetfieldMissBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.apply.setfield.miss.ApplySetfieldMissBuilder(); applySetfieldMissBuilder.setSetFieldMatch(setFieldMatch); applySetfieldMissBld.setApplySetfieldMiss(applySetfieldMissBuilder.build()); tableFeatureProperty.setTableFeaturePropType(applySetfieldMissBld.build()); TableFeaturePropertiesKey keyValue = new TableFeaturePropertiesKey(0); tableFeatureProperty.setKey(keyValue); tableFeatureProperty.setOrder(1); return tableFeatureProperty; } private TableFeaturePropertiesBuilder createWildCardsTblFeatureProp() { //t15 TableFeaturePropertiesBuilder tableFeatureProperty = new TableFeaturePropertiesBuilder(); List setFieldMatch = new ArrayList(); SetFieldMatchBuilder setFieldMatchBld1 = new SetFieldMatchBuilder(); setFieldMatchBld1.setHasMask(false); setFieldMatchBld1.setMatchType(ArpOp.class); SetFieldMatchBuilder setFieldMatchBld2 = new SetFieldMatchBuilder(); setFieldMatchBld2.setHasMask(true); setFieldMatchBld2.setMatchType(InPort.class); setFieldMatch.add(setFieldMatchBld1.build()); setFieldMatch.add(setFieldMatchBld2.build()); WildcardsBuilder wildCardsBld = new WildcardsBuilder(); WildcardSetfieldBuilder wildcardsBuilder = new WildcardSetfieldBuilder(); wildcardsBuilder.setSetFieldMatch(setFieldMatch); wildCardsBld.setWildcardSetfield(wildcardsBuilder.build()); tableFeatureProperty.setTableFeaturePropType(wildCardsBld.build()); TableFeaturePropertiesKey keyValue = new TableFeaturePropertiesKey(0); tableFeatureProperty.setKey(keyValue); tableFeatureProperty.setOrder(1); return tableFeatureProperty; } private void writeTable(CommandInterpreter ci, Table table) { ReadWriteTransaction modification = dataBroker.newReadWriteTransaction(); InstanceIdentifier path1 = InstanceIdentifier.builder(Nodes.class) .child(Node.class, testNode.getKey()).augmentation(FlowCapableNode.class). child(Table.class, new TableKey(table.getId())).build(); modification.put(LogicalDatastoreType.OPERATIONAL, nodeToInstanceId(testNode), testNode); modification.put(LogicalDatastoreType.OPERATIONAL, path1, table); modification.put(LogicalDatastoreType.CONFIGURATION, nodeToInstanceId(testNode), testNode); modification.put(LogicalDatastoreType.CONFIGURATION, path1, table); Future> commitFuture = modification.commit(); try { RpcResult result = commitFuture.get(); TransactionStatus status = result.getResult(); ci.println("Status of Table Data Loaded Transaction: " + status); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void _modifyTable(CommandInterpreter ci) { String nref = ci.nextArgument(); ci.println(" Table Command Provider modify"); if (nref == null) { ci.println("test node added"); createTestNode(); } else { ci.println("User node added" + nref); createUserNode(nref); } String tableFeatureType = ci.nextArgument(); TableBuilder table = createTestTable(tableFeatureType); writeTable(ci, table.build()); } @Override public String getHelp() { StringBuffer help = new StringBuffer(); help.append("---FRM MD-SAL Table test module---\n"); help.append("\t modifyTable - node ref\n"); return help.toString(); } }