Bug 5540 - FlowConvertor, FlowStatsResponseConvertor, FlowInstructionResponseConvertor
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / flow / FlowConvertorTest.java
1 /*\r
2  * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 \r
9 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flow;\r
10 \r
11 import java.math.BigInteger;\r
12 import java.util.ArrayList;\r
13 import java.util.Collections;\r
14 import java.util.List;\r
15 import java.util.Optional;\r
16 import org.junit.Assert;\r
17 import org.junit.Test;\r
18 import org.opendaylight.openflowplugin.api.OFConstants;\r
19 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;\r
20 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData;\r
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCaseBuilder;\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.id.action._case.SetVlanIdActionBuilder;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder;\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowTableRef;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInput;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlow;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlowBuilder;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowRef;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ClearActionsCaseBuilder;\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.GoToTableCaseBuilder;\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.MeterCaseBuilder;\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCaseBuilder;\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCaseBuilder;\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder;\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.clear.actions._case.ClearActionsBuilder;\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.go.to.table._case.GoToTableBuilder;\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.meter._case.MeterBuilder;\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.actions._case.WriteActionsBuilder;\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.metadata._case.WriteMetadataBuilder;\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;\r
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;\r
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;\r
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;\r
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatch;\r
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;\r
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.ApplyActionsCase;\r
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.GotoTableCase;\r
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.MeterCase;\r
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteActionsCase;\r
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteMetadataCase;\r
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModCommand;\r
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;\r
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInputBuilder;\r
69 import org.opendaylight.yangtools.yang.binding.Augmentation;\r
70 import org.opendaylight.yangtools.yang.binding.DataContainer;\r
71 \r
72 /**\r
73  * @author michal.polkorab\r
74  *\r
75  */\r
76 public class FlowConvertorTest {\r
77 \r
78     /**\r
79      * Tests {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flow.FlowConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }\r
80      */\r
81     @Test\r
82     public void test() {\r
83         RemoveFlowInputBuilder flowBuilder = new RemoveFlowInputBuilder();\r
84         flowBuilder.setBarrier(false);\r
85         flowBuilder.setCookie(new FlowCookie(new BigInteger("4")));\r
86         flowBuilder.setCookieMask(new FlowCookie(new BigInteger("5")));\r
87         flowBuilder.setTableId((short) 6);\r
88         flowBuilder.setStrict(true);\r
89         flowBuilder.setIdleTimeout(50);\r
90         flowBuilder.setHardTimeout(500);\r
91         flowBuilder.setPriority(40);\r
92         flowBuilder.setBufferId(18L);\r
93         flowBuilder.setOutPort(new BigInteger("65535"));\r
94         flowBuilder.setOutGroup(5000L);\r
95         flowBuilder.setFlags(null);\r
96         flowBuilder.setMatch(null);\r
97         RemoveFlowInput flow = flowBuilder.build();\r
98 \r
99         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(OFConstants.OFP_VERSION_1_3);\r
100         data.setDatapathId(new BigInteger("42"));\r
101 \r
102         List<FlowModInputBuilder> flowMod = convert(flow, data);\r
103 \r
104         Assert.assertEquals("Wrong version", 4, flowMod.get(0).getVersion().intValue());\r
105         Assert.assertEquals("Wrong cookie", 4, flowMod.get(0).getCookie().intValue());\r
106         Assert.assertEquals("Wrong cookie mask", 5, flowMod.get(0).getCookieMask().intValue());\r
107         Assert.assertEquals("Wrong table id", 6, flowMod.get(0).getTableId().getValue().intValue());\r
108         Assert.assertEquals("Wrong command", FlowModCommand.OFPFCDELETESTRICT, flowMod.get(0).getCommand());\r
109         Assert.assertEquals("Wrong idle timeout", 50, flowMod.get(0).getIdleTimeout().intValue());\r
110         Assert.assertEquals("Wrong hard timeout", 500, flowMod.get(0).getHardTimeout().intValue());\r
111         Assert.assertEquals("Wrong priority", 40, flowMod.get(0).getPriority().intValue());\r
112         Assert.assertEquals("Wrong buffer id", 18, flowMod.get(0).getBufferId().intValue());\r
113         Assert.assertEquals("Wrong out port", 65535, flowMod.get(0).getOutPort().getValue().intValue());\r
114         Assert.assertEquals("Wrong out group", 5000, flowMod.get(0).getOutGroup().intValue());\r
115         Assert.assertEquals("Wrong flags", new FlowModFlags(false, false, false, false, false), flowMod.get(0).getFlags());\r
116         Assert.assertEquals("Wrong match", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmMatchType",\r
117                 flowMod.get(0).getMatch().getType().getName());\r
118         Assert.assertEquals("Wrong match entries size", 0, flowMod.get(0).getMatch().getMatchEntry().size());\r
119     }\r
120 \r
121     /**\r
122      * Tests {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flow.FlowConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }\r
123      */\r
124     @Test\r
125     public void testOnlyModifyStrictCommand() {\r
126         UpdatedFlowBuilder flowBuilder = new UpdatedFlowBuilder();\r
127         flowBuilder.setStrict(true);\r
128         UpdatedFlow flow = flowBuilder.build();\r
129 \r
130         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(OFConstants.OFP_VERSION_1_0);\r
131         data.setDatapathId(new BigInteger("42"));\r
132 \r
133         List<FlowModInputBuilder> flowMod = convert(flow, data);\r
134 \r
135         Assert.assertEquals("Wrong version", 1, flowMod.get(0).getVersion().intValue());\r
136         Assert.assertEquals("Wrong command", FlowModCommand.OFPFCADD, flowMod.get(0).getCommand());\r
137     }\r
138 \r
139     /**\r
140      * Tests {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flow.FlowConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }\r
141      */\r
142     @Test\r
143     public void testInstructionsTranslation() {\r
144         AddFlowInputBuilder flowBuilder = new AddFlowInputBuilder();\r
145         InstructionsBuilder instructionsBuilder = new InstructionsBuilder();\r
146         List<Instruction> instructions = new ArrayList<>();\r
147         InstructionBuilder instructionBuilder = new InstructionBuilder();\r
148         GoToTableCaseBuilder goToCaseBuilder = new GoToTableCaseBuilder();\r
149         GoToTableBuilder goToBuilder = new GoToTableBuilder();\r
150         goToBuilder.setTableId((short) 1);\r
151         goToCaseBuilder.setGoToTable(goToBuilder.build());\r
152         instructionBuilder.setInstruction(goToCaseBuilder.build());\r
153         instructionBuilder.setOrder(0);\r
154         instructions.add(instructionBuilder.build());\r
155         instructionBuilder = new InstructionBuilder();\r
156         WriteMetadataCaseBuilder metaCaseBuilder = new WriteMetadataCaseBuilder();\r
157         WriteMetadataBuilder metaBuilder = new WriteMetadataBuilder();\r
158         metaBuilder.setMetadata(new BigInteger("2"));\r
159         metaBuilder.setMetadataMask(new BigInteger("3"));\r
160         metaCaseBuilder.setWriteMetadata(metaBuilder.build());\r
161         instructionBuilder.setInstruction(metaCaseBuilder.build());\r
162         instructionBuilder.setOrder(1);\r
163         instructions.add(instructionBuilder.build());\r
164         instructionBuilder = new InstructionBuilder();\r
165         WriteActionsCaseBuilder writeCaseBuilder = new WriteActionsCaseBuilder();\r
166         WriteActionsBuilder writeBuilder = new WriteActionsBuilder();\r
167         List<Action> actions = new ArrayList<>();\r
168         writeBuilder.setAction(actions);\r
169         writeCaseBuilder.setWriteActions(writeBuilder.build());\r
170         instructionBuilder.setInstruction(writeCaseBuilder.build());\r
171         instructionBuilder.setOrder(2);\r
172         instructions.add(instructionBuilder.build());\r
173         instructionBuilder = new InstructionBuilder();\r
174         ApplyActionsCaseBuilder applyCaseBuilder = new ApplyActionsCaseBuilder();\r
175         ApplyActionsBuilder applyBuilder = new ApplyActionsBuilder();\r
176         actions = new ArrayList<>();\r
177         applyBuilder.setAction(actions);\r
178         applyCaseBuilder.setApplyActions(applyBuilder.build());\r
179         instructionBuilder.setInstruction(applyCaseBuilder.build());\r
180         instructionBuilder.setOrder(3);\r
181         instructions.add(instructionBuilder.build());\r
182         instructionBuilder = new InstructionBuilder();\r
183         ClearActionsCaseBuilder clearCaseBuilder = new ClearActionsCaseBuilder();\r
184         ClearActionsBuilder clearBuilder = new ClearActionsBuilder();\r
185         actions = new ArrayList<>();\r
186         clearBuilder.setAction(actions);\r
187         clearCaseBuilder.setClearActions(clearBuilder.build());\r
188         instructionBuilder.setInstruction(clearCaseBuilder.build());\r
189         instructionBuilder.setOrder(4);\r
190         instructions.add(instructionBuilder.build());\r
191         instructionBuilder = new InstructionBuilder();\r
192         MeterCaseBuilder meterCaseBuilder = new MeterCaseBuilder();\r
193         MeterBuilder meterBuilder = new MeterBuilder();\r
194         meterBuilder.setMeterId(new MeterId(5L));\r
195         meterCaseBuilder.setMeter(meterBuilder.build());\r
196         instructionBuilder.setInstruction(meterCaseBuilder.build());\r
197         instructionBuilder.setOrder(5);\r
198         instructions.add(instructionBuilder.build());\r
199         instructionsBuilder.setInstruction(instructions);\r
200         flowBuilder.setInstructions(instructionsBuilder.build());\r
201         AddFlowInput flow = flowBuilder.build();\r
202 \r
203         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(OFConstants.OFP_VERSION_1_0);\r
204         data.setDatapathId(new BigInteger("42"));\r
205         List<FlowModInputBuilder> flowMod = convert(flow, data);\r
206 \r
207         Assert.assertEquals("Wrong version", 1, flowMod.get(0).getVersion().intValue());\r
208         Assert.assertEquals("Wrong command", FlowModCommand.OFPFCADD, flowMod.get(0).getCommand());\r
209         Assert.assertEquals("Wrong instructions size", 6, flowMod.get(0).getInstruction().size());\r
210         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions\r
211         .grouping.Instruction instruction = flowMod.get(0).getInstruction().get(0);\r
212         Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
213                 + ".instruction.rev130731.instruction.grouping.instruction.choice.GotoTableCase", instruction.getInstructionChoice().getImplementedInterface().getName());\r
214         GotoTableCase gotoTableCase = (GotoTableCase) instruction.getInstructionChoice();\r
215         Assert.assertEquals("Wrong table id", 1, gotoTableCase.getGotoTable().getTableId().intValue());\r
216         instruction = flowMod.get(0).getInstruction().get(1);\r
217         Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
218                 + ".instruction.rev130731.instruction.grouping.instruction.choice.WriteMetadataCase", instruction.getInstructionChoice().getImplementedInterface().getName());\r
219         WriteMetadataCase writeMetadataCase = (WriteMetadataCase) instruction.getInstructionChoice();\r
220         Assert.assertArrayEquals("Wrong metadata", new byte[]{0, 0, 0, 0, 0, 0, 0, 2},\r
221                 writeMetadataCase.getWriteMetadata().getMetadata());\r
222         Assert.assertArrayEquals("Wrong metadata mask", new byte[]{0, 0, 0, 0, 0, 0, 0, 3},\r
223                 writeMetadataCase.getWriteMetadata().getMetadataMask());\r
224         \r
225         instruction = flowMod.get(0).getInstruction().get(2);\r
226         Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
227                 + ".instruction.rev130731.instruction.grouping.instruction.choice.WriteActionsCase", instruction.getInstructionChoice().getImplementedInterface().getName());\r
228         WriteActionsCase writeActionsCase = (WriteActionsCase) instruction.getInstructionChoice();\r
229         Assert.assertEquals("Wrong actions size", 0, writeActionsCase.getWriteActions().getAction().size());\r
230         instruction = flowMod.get(0).getInstruction().get(3);\r
231         Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
232                 + ".instruction.rev130731.instruction.grouping.instruction.choice.ApplyActionsCase", instruction.getInstructionChoice().getImplementedInterface().getName());\r
233         ApplyActionsCase applyActionsCase =  (ApplyActionsCase) instruction.getInstructionChoice();\r
234         Assert.assertEquals("Wrong actions size", 0, applyActionsCase.getApplyActions().getAction().size());\r
235         instruction = flowMod.get(0).getInstruction().get(4);\r
236         Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
237                 + ".instruction.rev130731.instruction.grouping.instruction.choice.ClearActionsCase", instruction.getInstructionChoice().getImplementedInterface().getName());\r
238         instruction = flowMod.get(0).getInstruction().get(5);\r
239         Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
240                 + ".instruction.rev130731.instruction.grouping.instruction.choice.MeterCase", instruction.getInstructionChoice().getImplementedInterface().getName());\r
241         MeterCase meterCase = (MeterCase) instruction.getInstructionChoice();\r
242         Assert.assertEquals("Wrong meter id", 5, meterCase.getMeter().getMeterId().intValue());\r
243     }\r
244 \r
245     @Test\r
246     public void testCloneAndAugmentFlowWithSetVlanId() {\r
247         MockFlow mockFlow = new MockFlow();\r
248         Action action1 = createAction(\r
249                 new SetVlanIdActionCaseBuilder().setSetVlanIdAction(\r
250                         new SetVlanIdActionBuilder().setVlanId(new VlanId(10)).build())\r
251                         .build(),\r
252                 0);\r
253 \r
254         mockFlow.setMatch(new MatchBuilder().setEthernetMatch(createEthernetMatch()).build());\r
255         mockFlow.setInstructions(toApplyInstruction(Collections.singletonList(action1)));\r
256 \r
257         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(OFConstants.OFP_VERSION_1_3);\r
258         data.setDatapathId(BigInteger.ONE);\r
259 \r
260         List<FlowModInputBuilder> flowModInputBuilders = convert(mockFlow, data);\r
261 \r
262         Assert.assertEquals(2, flowModInputBuilders.size());\r
263 \r
264     }\r
265 \r
266     private List<FlowModInputBuilder> convert(Flow flow, VersionDatapathIdConvertorData data) {\r
267         Optional<List<FlowModInputBuilder>> flowModOptional = ConvertorManager.getInstance().convert(flow, data);\r
268         Assert.assertTrue("Flow convertor not found", flowModOptional.isPresent());\r
269         return flowModOptional.get();\r
270     }\r
271 \r
272     private static Action createAction(final org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action actionCase,\r
273                                        final int order) {\r
274         Action action = new ActionBuilder().setOrder(order).setAction(actionCase).build();\r
275         return action;\r
276     }\r
277 \r
278     private static EthernetMatch createEthernetMatch() {\r
279         EthernetMatchBuilder ethernetMatchBuilder = new EthernetMatchBuilder();\r
280         ethernetMatchBuilder.setEthernetType(new EthernetTypeBuilder().setType(new EtherType(33024L)).build());\r
281         return ethernetMatchBuilder.build();\r
282     }\r
283 \r
284     private static Instructions toApplyInstruction(\r
285             final List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actions) {\r
286         return new InstructionsBuilder()\r
287                 .setInstruction(\r
288                         Collections.singletonList(\r
289                                 new InstructionBuilder()\r
290                                         .setOrder(0)\r
291                                         .setInstruction(\r
292                                                 new ApplyActionsCaseBuilder()\r
293                                                         .setApplyActions((new ApplyActionsBuilder()).setAction(actions).build())\r
294                                                         .build()\r
295                                         ).build())\r
296                 ).build();\r
297     }\r
298 \r
299     private static class MockFlow implements AddFlowInput {\r
300         private Instructions instructions;\r
301         private Match match;\r
302 \r
303         public void setInstructions(final Instructions instructions) {\r
304             this.instructions = instructions;\r
305         }\r
306 \r
307         public void setMatch(final Match match) {\r
308             this.match = match;\r
309         }\r
310 \r
311 \r
312         @Override\r
313         public FlowRef getFlowRef() {\r
314             return null;\r
315         }\r
316 \r
317         @Override\r
318         public <E extends Augmentation<AddFlowInput>> E getAugmentation(final Class<E> augmentationType) {\r
319             return null;\r
320         }\r
321 \r
322         @Override\r
323         public FlowTableRef getFlowTable() {\r
324             return null;\r
325         }\r
326 \r
327         @Override\r
328         public Match getMatch() {\r
329             return match;\r
330         }\r
331 \r
332         @Override\r
333         public Instructions getInstructions() {\r
334             return instructions;\r
335         }\r
336 \r
337         @Override\r
338         public String getContainerName() {\r
339             return null;\r
340         }\r
341 \r
342         @Override\r
343         public FlowCookie getCookieMask() {\r
344             return null;\r
345         }\r
346 \r
347         @Override\r
348         public Long getBufferId() {\r
349             return null;\r
350         }\r
351 \r
352         @Override\r
353         public BigInteger getOutPort() {\r
354             return null;\r
355         }\r
356 \r
357         @Override\r
358         public Long getOutGroup() {\r
359             return null;\r
360         }\r
361 \r
362         @Override\r
363         public org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags getFlags() {\r
364             return null;\r
365         }\r
366 \r
367         @Override\r
368         public String getFlowName() {\r
369             return null;\r
370         }\r
371 \r
372         @Override\r
373         public Boolean isInstallHw() {\r
374             return null;\r
375         }\r
376 \r
377         @Override\r
378         public Boolean isBarrier() {\r
379             return null;\r
380         }\r
381 \r
382         @Override\r
383         public Boolean isStrict() {\r
384             return null;\r
385         }\r
386 \r
387         @Override\r
388         public Integer getPriority() {\r
389             return null;\r
390         }\r
391 \r
392         @Override\r
393         public Integer getIdleTimeout() {\r
394             return null;\r
395         }\r
396 \r
397         @Override\r
398         public Integer getHardTimeout() {\r
399             return null;\r
400         }\r
401 \r
402         @Override\r
403         public FlowCookie getCookie() {\r
404             return null;\r
405         }\r
406 \r
407         @Override\r
408         public Short getTableId() {\r
409             return null;\r
410         }\r
411 \r
412         @Override\r
413         public NodeRef getNode() {\r
414             return null;\r
415         }\r
416 \r
417         @Override\r
418         public Uri getTransactionUri() {\r
419             return null;\r
420         }\r
421 \r
422         @Override\r
423         public Class<? extends DataContainer> getImplementedInterface() {\r
424             return null;\r
425         }\r
426     }\r
427 }