Merge "BUG 652 leafref CCE & BUG 720 colons problem"
[controller.git] / opendaylight / md-sal / compatibility / sal-compatibility / src / test / java / org / opendaylight / controller / sal / compatibility / test / TestToSalConversionsUtils.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.sal.compatibility.test;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertTrue;
12 import static org.opendaylight.controller.sal.compatibility.ProtocolConstants.CRUDP;
13 import static org.opendaylight.controller.sal.compatibility.ProtocolConstants.ETHERNET_ARP;
14 import static org.opendaylight.controller.sal.compatibility.ProtocolConstants.TCP;
15 import static org.opendaylight.controller.sal.compatibility.ProtocolConstants.UDP;
16
17 import java.math.BigInteger;
18 import java.net.Inet4Address;
19 import java.net.Inet6Address;
20 import java.net.InetAddress;
21 import java.util.ArrayList;
22 import java.util.Collections;
23 import java.util.List;
24
25 import org.junit.Test;
26 import org.opendaylight.controller.sal.action.Flood;
27 import org.opendaylight.controller.sal.action.FloodAll;
28 import org.opendaylight.controller.sal.action.HwPath;
29 import org.opendaylight.controller.sal.action.Loopback;
30 import org.opendaylight.controller.sal.action.Output;
31 import org.opendaylight.controller.sal.action.PopVlan;
32 import org.opendaylight.controller.sal.action.PushVlan;
33 import org.opendaylight.controller.sal.action.SetDlDst;
34 import org.opendaylight.controller.sal.action.SetDlSrc;
35 import org.opendaylight.controller.sal.action.SetDlType;
36 import org.opendaylight.controller.sal.action.SetNextHop;
37 import org.opendaylight.controller.sal.action.SetNwDst;
38 import org.opendaylight.controller.sal.action.SetNwSrc;
39 import org.opendaylight.controller.sal.action.SetNwTos;
40 import org.opendaylight.controller.sal.action.SetTpDst;
41 import org.opendaylight.controller.sal.action.SetTpSrc;
42 import org.opendaylight.controller.sal.action.SetVlanCfi;
43 import org.opendaylight.controller.sal.action.SetVlanId;
44 import org.opendaylight.controller.sal.action.SetVlanPcp;
45 import org.opendaylight.controller.sal.action.SwPath;
46 import org.opendaylight.controller.sal.compatibility.ToSalConversionsUtils;
47 import org.opendaylight.controller.sal.core.ConstructionException;
48 import org.opendaylight.controller.sal.core.Node;
49 import org.opendaylight.controller.sal.core.Node.NodeIDType;
50 import org.opendaylight.controller.sal.flowprogrammer.Flow;
51 import org.opendaylight.controller.sal.match.MatchType;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
55 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
56 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
57 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.VlanCfi;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.ControllerActionCaseBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCaseBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.FloodActionCaseBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.FloodAllActionCaseBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.HwPathActionCaseBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.LoopbackActionCaseBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstActionCaseBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcActionCaseBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlTypeActionCaseBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNextHopActionCaseBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCaseBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCaseBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTosActionCaseBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCaseBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCaseBuilder;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpDstActionCaseBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpSrcActionCaseBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanCfiActionCaseBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCaseBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanPcpActionCaseBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SwPathActionCaseBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.dst.action._case.SetDlDstActionBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.src.action._case.SetDlSrcActionBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.type.action._case.SetDlTypeActionBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.next.hop.action._case.SetNextHopActionBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstActionBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.src.action._case.SetNwSrcActionBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.tos.action._case.SetNwTosActionBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.dst.action._case.SetTpDstActionBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.src.action._case.SetTpSrcActionBuilder;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.cfi.action._case.SetVlanCfiActionBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.id.action._case.SetVlanIdActionBuilder;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.pcp.action._case.SetVlanPcpActionBuilder;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.Address;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4Builder;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv6Builder;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAddedBuilder;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.NodeFlow;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder;
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpSourceHardwareAddressBuilder;
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpTargetHardwareAddressBuilder;
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestination;
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSource;
126 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;
127 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetType;
128 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;
129 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatch;
130 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
131 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatch;
132 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatchBuilder;
133 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Layer3Match;
134 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Layer4Match;
135 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatch;
136 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder;
137 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatchBuilder;
138 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
139 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchBuilder;
140 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.SctpMatchBuilder;
141 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatchBuilder;
142 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;
143 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;
144
145 import com.google.common.net.InetAddresses;
146
147 public class TestToSalConversionsUtils {
148     // prefix:
149     // od|Od = Open Daylight
150     private enum MtchType {
151         other, ipv4, ipv6, arp, sctp, tcp, udp
152     }
153
154     @Test
155     public void testToSalConversion() throws ConstructionException {
156         FlowAddedBuilder odNodeFlowBuilder = new FlowAddedBuilder();
157         odNodeFlowBuilder = prepareOdFlowCommon();
158         
159         Node node = new Node(NodeIDType.OPENFLOW,(long)1);
160         
161         Flow salFlow = ToSalConversionsUtils.toFlow(prepareOdFlow(odNodeFlowBuilder, MtchType.other), node);
162         checkSalMatch(salFlow.getMatch(), MtchType.other);
163
164         salFlow = ToSalConversionsUtils.toFlow(prepareOdFlow(odNodeFlowBuilder, MtchType.ipv4), node);
165         checkSalMatch(salFlow.getMatch(), MtchType.ipv4);
166
167         salFlow = ToSalConversionsUtils.toFlow(prepareOdFlow(odNodeFlowBuilder, MtchType.ipv6), node);
168         checkSalMatch(salFlow.getMatch(), MtchType.ipv6);
169
170         salFlow = ToSalConversionsUtils.toFlow(prepareOdFlow(odNodeFlowBuilder, MtchType.arp), node);
171         checkSalMatch(salFlow.getMatch(), MtchType.arp);
172
173         salFlow = ToSalConversionsUtils.toFlow(prepareOdFlow(odNodeFlowBuilder, MtchType.sctp), node);
174         checkSalMatch(salFlow.getMatch(), MtchType.sctp);
175
176         salFlow = ToSalConversionsUtils.toFlow(prepareOdFlow(odNodeFlowBuilder, MtchType.tcp), node);
177         checkSalMatch(salFlow.getMatch(), MtchType.tcp);
178
179         salFlow = ToSalConversionsUtils.toFlow(prepareOdFlow(odNodeFlowBuilder, MtchType.udp), node);
180         checkSalMatch(salFlow.getMatch(), MtchType.udp);
181
182         checkSalFlow(salFlow);
183     }
184
185     private void checkSalMatch(org.opendaylight.controller.sal.match.Match match, MtchType mt) {
186         switch (mt) {
187         case other:
188             /*assertNotNull("DL_DST isn't equal.", "3C:A9:F4:00:E0:C8", 
189                     new String((byte[]) match.getField(MatchType.DL_DST).getValue()));
190             assertEquals("DL_SRC isn't equal.", "24:77:03:7C:C5:F1",
191                     new String((byte[]) match.getField(MatchType.DL_SRC).getValue()));
192             */
193             assertEquals("DL_TYPE isn't equal.", (short) 0xffff, (short) match.getField(MatchType.DL_TYPE).getValue());
194             assertEquals("NW_TOS isn't equal.", (byte) 0x33, (byte) match.getField(MatchType.NW_TOS).getValue());
195             assertEquals("NW_PROTO isn't equal.", (byte) 0x3f, (byte) match.getField(MatchType.NW_PROTO).getValue());
196             assertEquals("DL_VLAN isn't equal.", (short) 0xfff, (short) match.getField(MatchType.DL_VLAN).getValue());
197             assertEquals("DL_VLAN_PR isn't equal.", (byte) 0x7, (byte) match.getField(MatchType.DL_VLAN_PR).getValue());
198             break;
199         case arp:
200             /*
201             assertEquals("DL_SRC isn't equal.", "22:44:66:88:AA:CC",
202                     new String((byte[]) match.getField(MatchType.DL_SRC).getValue()));
203             assertEquals("DL_DST isn't equal.", "11:33:55:77:BB:DD",
204                     new String((byte[]) match.getField(MatchType.DL_DST).getValue()));
205             */
206             assertEquals("NW_SRC isn't equal.", "192.168.1.101",
207                     InetAddresses.toAddrString((InetAddress) match.getField(MatchType.NW_SRC).getValue()));
208             assertEquals("NW_DST isn't equal.", "192.168.1.102",
209                     InetAddresses.toAddrString((InetAddress) match.getField(MatchType.NW_DST).getValue()));
210             assertEquals("DL_TYPE isn't equal.", ETHERNET_ARP, match.getField(MatchType.DL_TYPE).getValue());
211             break;
212         case ipv4:
213             assertEquals("NW_SRC isn't equal.", "192.168.1.104",
214                     InetAddresses.toAddrString((InetAddress) match.getField(MatchType.NW_SRC).getValue()));
215             assertEquals("NW_DST isn't equal.", "192.168.1.105",
216                     InetAddresses.toAddrString((InetAddress) match.getField(MatchType.NW_DST).getValue()));
217             break;
218         case ipv6:
219             assertEquals("NW_SRC isn't equal.", "3001:db8:85a3::8a2e:370:7334",
220                     InetAddresses.toAddrString((InetAddress) match.getField(MatchType.NW_SRC).getValue()));
221             assertEquals("NW_DST isn't equal.", "3001:db8:85a3::8a2e:370:7335",
222                     InetAddresses.toAddrString((InetAddress) match.getField(MatchType.NW_DST).getValue()));
223             break;
224         case sctp:
225             assertEquals("TP_SRC isn't equal.", 31, (short) match.getField(MatchType.TP_SRC).getValue());
226             assertEquals("TP_DST isn't equal.", 32, (short) match.getField(MatchType.TP_DST).getValue());
227             assertEquals("NW_PROTO isn't equal.", CRUDP, (byte) match.getField(MatchType.NW_PROTO).getValue());
228             break;
229         case tcp:
230             assertEquals("TP_SRC isn't equal.", 21, (short) match.getField(MatchType.TP_SRC).getValue());
231             assertEquals("TP_DST isn't equal.", 22, (short) match.getField(MatchType.TP_DST).getValue());
232             assertEquals("NW_PROTO isn't equal.", TCP, (byte) match.getField(MatchType.NW_PROTO).getValue());
233             break;
234         case udp:
235             assertEquals("TP_SRC isn't equal.", 11, (short) match.getField(MatchType.TP_SRC).getValue());
236             assertEquals("TP_DST isn't equal.", 12, (short) match.getField(MatchType.TP_DST).getValue());
237             assertEquals("NW_PROTO isn't equal.", UDP, (byte) match.getField(MatchType.NW_PROTO).getValue());
238             break;
239         default:
240             break;
241
242         }
243
244     }
245
246     private void checkSalFlow(Flow salFlow) {
247         assertTrue("Id value is incorrect.", salFlow.getId() == 9223372036854775807L);
248         assertTrue("Hard timeout is incorrect.", salFlow.getHardTimeout() == 32767);
249         assertTrue("Iddle timeout is incorrect.", salFlow.getIdleTimeout() == 32767);
250         assertTrue("Priority value is incorrect.", salFlow.getPriority() == 32767);
251
252         checkSalActions(salFlow.getActions());
253     }
254
255     private void checkSalActions(List<org.opendaylight.controller.sal.action.Action> actions) {
256         checkSalAction(actions, Flood.class, 1);
257         checkSalAction(actions, FloodAll.class, 1);
258         checkSalAction(actions, HwPath.class, 1);
259         checkSalAction(actions, Loopback.class, 1);
260         checkSalAction(actions, Output.class, 1, true);
261         checkSalAction(actions, PopVlan.class, 1);
262         checkSalAction(actions, PushVlan.class, 1, true);
263         checkSalAction(actions, SetDlDst.class, 1, true);
264         checkSalAction(actions, SetDlSrc.class, 1, true);
265         checkSalAction(actions, SetDlType.class, 1, true);
266         checkSalAction(actions, SetNextHop.class, 2, true);
267         checkSalAction(actions, SetNwDst.class, 2, true);
268         checkSalAction(actions, SetNwSrc.class, 2, true);
269         checkSalAction(actions, SetNwTos.class, 1, true);
270         checkSalAction(actions, SetTpDst.class, 1, true);
271         checkSalAction(actions, SetTpSrc.class, 1, true);
272         checkSalAction(actions, SetVlanCfi.class, 1, true);
273         checkSalAction(actions, SetVlanId.class, 1, true);
274         checkSalAction(actions, SetVlanPcp.class, 1, true);
275         checkSalAction(actions, SwPath.class, 1);
276     }
277
278     private void checkSalAction(List<org.opendaylight.controller.sal.action.Action> actions, Class<?> cls,
279             int numOfActions) {
280         checkSalAction(actions, cls, numOfActions, false);
281     }
282
283     private void checkSalAction(List<org.opendaylight.controller.sal.action.Action> actions, Class<?> cls,
284             int numOfActions, boolean additionalCheck) {
285         int numOfEqualClass = 0;
286         for (org.opendaylight.controller.sal.action.Action action : actions) {
287             if (action.getClass().equals(cls)) {
288                 if (additionalCheck) {
289                     additionalActionCheck(action);
290                 }
291                 numOfEqualClass++;
292             }
293         }
294         assertEquals("Incorrect number of actions of type " + cls.getName() + " was found.", numOfActions,
295                 numOfEqualClass);
296     }
297
298     // implement special checks
299     private void additionalActionCheck(org.opendaylight.controller.sal.action.Action action) {
300         if (action instanceof Output) {
301             // ((Output)action).getPort() //TODO finish check when mapping will
302             // be defined
303         } else if (action instanceof PushVlan) {
304             assertEquals("Wrong value for action PushVlan for tag.", 0x8100, ((PushVlan) action).getTag());
305             assertEquals("Wrong value for action PushVlan for pcp.", 7, ((PushVlan) action).getPcp());
306             assertEquals("Wrong value for action PushVlan for cfi.", 1, ((PushVlan) action).getCfi());
307             assertEquals("Wrong value for action PushVlan for vlanID.", 4095, ((PushVlan) action).getVlanId());
308         } else if (action instanceof SetDlDst) {
309             //assertEquals("Wrong value for action SetDlDst for MAC address.", "3C:A9:F4:00:E0:C8", new String(
310             //        ((SetDlDst) action).getDlAddress()));
311         } else if (action instanceof SetDlSrc) {
312             //assertEquals("Wrong value for action SetDlSrc for MAC address.", "24:77:03:7C:C5:F1", new String(
313             //      ((SetDlSrc) action).getDlAddress()));
314         } else if (action instanceof SetDlType) {
315             assertEquals("Wrong value for action SetDlType for.", 513l, ((SetDlType) action).getDlType());
316         } else if (action instanceof SetNextHop) {
317             InetAddress inetAddress = ((SetNextHop) action).getAddress();
318             checkIpAddresses(inetAddress, "192.168.100.100", "2001:db8:85a3::8a2e:370:7334");
319         } else if (action instanceof SetNwDst) {
320             InetAddress inetAddress = ((SetNwDst) action).getAddress();
321             checkIpAddresses(inetAddress, "192.168.100.101", "2001:db8:85a3::8a2e:370:7335");
322         } else if (action instanceof SetNwSrc) {
323             InetAddress inetAddress = ((SetNwSrc) action).getAddress();
324             checkIpAddresses(inetAddress, "192.168.100.102", "2001:db8:85a3::8a2e:370:7336");
325         } else if (action instanceof SetNwTos) {
326             assertEquals("Wrong value for action SetNwTos for tos.", 63, ((SetNwTos) action).getNwTos());
327         } else if (action instanceof SetTpDst) {
328             assertEquals("Wrong value for action SetTpDst for port.", 65535, ((SetTpDst) action).getPort());
329         } else if (action instanceof SetTpSrc) {
330             assertEquals("Wrong value for action SetTpSrc for port.", 65535, ((SetTpSrc) action).getPort());
331         } else if (action instanceof SetVlanCfi) {
332             assertEquals("Wrong value for action SetVlanCfi for port.", 1, ((SetVlanCfi) action).getCfi());
333         } else if (action instanceof SetVlanId) {
334             assertEquals("Wrong value for action SetVlanId for vlan ID.", 4095, ((SetVlanId) action).getVlanId());
335         } else if (action instanceof SetVlanPcp) {
336             assertEquals("Wrong value for action SetVlanPcp for vlan ID.", 7, ((SetVlanPcp) action).getPcp());
337         }
338     }
339
340     private void checkIpAddresses(InetAddress inetAddress, String ipv4, String ipv6) {
341         if (inetAddress instanceof Inet4Address) {
342             assertEquals("Wrong value for IP address.", ipv4, InetAddresses.toAddrString(inetAddress));
343         } else if (inetAddress instanceof Inet6Address) {
344             assertEquals("Wrong value for IP address.", ipv6, InetAddresses.toAddrString(inetAddress));
345         }
346     }
347
348     private FlowAddedBuilder prepareOdFlowCommon() {
349         FlowAddedBuilder odNodeFlowBuilder = new FlowAddedBuilder();
350
351         odNodeFlowBuilder.setCookie(new FlowCookie(new BigInteger("9223372036854775807")));
352         odNodeFlowBuilder.setHardTimeout(32767);
353         odNodeFlowBuilder.setIdleTimeout(32767);
354         odNodeFlowBuilder.setPriority(32767);
355         odNodeFlowBuilder.setInstructions(prepareOdActions());
356         return odNodeFlowBuilder;
357     }
358
359     private NodeFlow prepareOdFlow(FlowAddedBuilder odNodeFlowBuilder, MtchType mt) {
360         odNodeFlowBuilder.setMatch(prepOdMatch(mt));
361         return odNodeFlowBuilder.build();
362     }
363
364     private Instructions prepareOdActions() {
365         List<Action> odActions = new ArrayList<>();
366
367         ControllerActionCaseBuilder controllerActionBuilder = new ControllerActionCaseBuilder();
368         DropActionCaseBuilder dropActionBuilder = new DropActionCaseBuilder();
369         FloodActionCaseBuilder floodActionBuilder = new FloodActionCaseBuilder();
370         FloodAllActionCaseBuilder floodAllActionBuilder = new FloodAllActionCaseBuilder();
371         HwPathActionCaseBuilder hwPathActionBuilder = new HwPathActionCaseBuilder();
372         LoopbackActionCaseBuilder loopbackActionBuilder = new LoopbackActionCaseBuilder();
373         OutputActionCaseBuilder outputActionBuilder = new OutputActionCaseBuilder();
374         PopMplsActionCaseBuilder popMplsActionBuilder = new PopMplsActionCaseBuilder();
375         PopVlanActionCaseBuilder popVlanActionBuilder = new PopVlanActionCaseBuilder();
376         PushMplsActionCaseBuilder pushMplsActionBuilder = new PushMplsActionCaseBuilder();
377         PushPbbActionCaseBuilder pushPbbActionBuilder = new PushPbbActionCaseBuilder();
378         PushVlanActionCaseBuilder pushVlanActionBuilder = new PushVlanActionCaseBuilder();
379         SetDlDstActionCaseBuilder setDlDstActionBuilder = new SetDlDstActionCaseBuilder();
380         SetDlSrcActionCaseBuilder setDlSrcActionBuilder = new SetDlSrcActionCaseBuilder();
381         SetDlTypeActionCaseBuilder setDlTypeActionBuilder = new SetDlTypeActionCaseBuilder();
382         SetMplsTtlActionCaseBuilder setMplsTtlActionBuilder = new SetMplsTtlActionCaseBuilder();
383         SetNwTosActionCaseBuilder setNwTosActionBuilder = new SetNwTosActionCaseBuilder();
384         SetNwTtlActionCaseBuilder setNwTtlActionBuilder = new SetNwTtlActionCaseBuilder();
385         SetQueueActionCaseBuilder setQueueActionBuilder = new SetQueueActionCaseBuilder();
386         SetTpDstActionCaseBuilder setTpDstActionBuilder = new SetTpDstActionCaseBuilder();
387         SetTpSrcActionCaseBuilder setTpSrcActionBuilder = new SetTpSrcActionCaseBuilder();
388         SetVlanCfiActionCaseBuilder setVlanCfiActionBuilder = new SetVlanCfiActionCaseBuilder();
389         SetVlanIdActionCaseBuilder setVlanIdActionBuilder = new SetVlanIdActionCaseBuilder();
390         SetVlanPcpActionCaseBuilder setVlanPcpActionBuilder = new SetVlanPcpActionCaseBuilder();
391         SwPathActionCaseBuilder swPathActionBuilder = new SwPathActionCaseBuilder();
392
393         prepareActionOutput(outputActionBuilder);
394         prepareActionPushVlan(pushVlanActionBuilder);
395         prepareActionSetDlDst(setDlDstActionBuilder);
396         prepareActionSetDlSrc(setDlSrcActionBuilder);
397         prepareActionSetDlType(setDlTypeActionBuilder);
398         prepareActionNextHop(odActions);
399         prepareActionSetNwDst(odActions);
400         prepareActionSetNwSrc(odActions);
401         prepareActionSetNwTos(setNwTosActionBuilder);
402         prepareActionSetTpDst(setTpDstActionBuilder);
403         prepareActionSetTpSrc(setTpSrcActionBuilder);
404         prepareActionSetVlanCfi(setVlanCfiActionBuilder);
405         prepareActionSetVladId(setVlanIdActionBuilder);
406         prepareActionSetVlanPcp(setVlanPcpActionBuilder);
407
408         odActions.add(new ActionBuilder().setAction(controllerActionBuilder.build()).build());
409         odActions.add(new ActionBuilder().setAction(dropActionBuilder.build()).build());
410         odActions.add(new ActionBuilder().setAction(floodActionBuilder.build()).build());
411         odActions.add(new ActionBuilder().setAction(floodAllActionBuilder.build()).build());
412         odActions.add(new ActionBuilder().setAction(hwPathActionBuilder.build()).build());
413         odActions.add(new ActionBuilder().setAction(loopbackActionBuilder.build()).build());
414         odActions.add(new ActionBuilder().setAction(outputActionBuilder.build()).build());
415         odActions.add(new ActionBuilder().setAction(popMplsActionBuilder.build()).build());
416         odActions.add(new ActionBuilder().setAction(popVlanActionBuilder.build()).build());
417         odActions.add(new ActionBuilder().setAction(pushMplsActionBuilder.build()).build());
418         odActions.add(new ActionBuilder().setAction(pushPbbActionBuilder.build()).build());
419         odActions.add(new ActionBuilder().setAction(pushVlanActionBuilder.build()).build());
420         odActions.add(new ActionBuilder().setAction(setDlDstActionBuilder.build()).build());
421         odActions.add(new ActionBuilder().setAction(setDlSrcActionBuilder.build()).build());
422         odActions.add(new ActionBuilder().setAction(setDlTypeActionBuilder.build()).build());
423         odActions.add(new ActionBuilder().setAction(setMplsTtlActionBuilder.build()).build());
424         odActions.add(new ActionBuilder().setAction(setNwTosActionBuilder.build()).build());
425         odActions.add(new ActionBuilder().setAction(setNwTtlActionBuilder.build()).build());
426         odActions.add(new ActionBuilder().setAction(setQueueActionBuilder.build()).build());
427         odActions.add(new ActionBuilder().setAction(setTpDstActionBuilder.build()).build());
428         odActions.add(new ActionBuilder().setAction(setTpSrcActionBuilder.build()).build());
429         odActions.add(new ActionBuilder().setAction(setVlanCfiActionBuilder.build()).build());
430         odActions.add(new ActionBuilder().setAction(setVlanIdActionBuilder.build()).build());
431         odActions.add(new ActionBuilder().setAction(setVlanPcpActionBuilder.build()).build());
432         odActions.add(new ActionBuilder().setAction(swPathActionBuilder.build()).build());
433
434         
435         ApplyActionsCase innerInst = new ApplyActionsCaseBuilder().setApplyActions(new ApplyActionsBuilder().setAction(odActions).build()).build();
436         Instruction applyActions = new InstructionBuilder().setInstruction(innerInst).build();
437         List<Instruction> instructions = Collections.singletonList(applyActions );
438         InstructionsBuilder instBuilder = new InstructionsBuilder();
439         
440         instBuilder.setInstruction(instructions);
441         
442         return instBuilder.build();
443     }
444
445     private void prepareActionSetVlanPcp(SetVlanPcpActionCaseBuilder wrapper) {
446         SetVlanPcpActionBuilder setVlanPcpActionBuilder = new SetVlanPcpActionBuilder();
447         setVlanPcpActionBuilder.setVlanPcp(new VlanPcp((short) 7));
448         wrapper.setSetVlanPcpAction(setVlanPcpActionBuilder.build());
449     }
450
451     private void prepareActionSetVladId(SetVlanIdActionCaseBuilder wrapper) {
452         SetVlanIdActionBuilder setVlanIdActionBuilder = new SetVlanIdActionBuilder();
453         setVlanIdActionBuilder.setVlanId(new VlanId(4095));
454         wrapper.setSetVlanIdAction(setVlanIdActionBuilder.build());
455     }
456
457     private void prepareActionSetVlanCfi(SetVlanCfiActionCaseBuilder wrapper) {
458         SetVlanCfiActionBuilder setVlanCfiActionBuilder = new SetVlanCfiActionBuilder();
459         setVlanCfiActionBuilder.setVlanCfi(new VlanCfi(1));
460         wrapper.setSetVlanCfiAction(setVlanCfiActionBuilder.build());
461     }
462
463     private void prepareActionSetTpDst(SetTpDstActionCaseBuilder wrapper) {
464         SetTpDstActionBuilder setTpDstActionBuilder = new SetTpDstActionBuilder();
465         setTpDstActionBuilder.setPort(new PortNumber(65535));
466         wrapper.setSetTpDstAction(setTpDstActionBuilder.build());
467     }
468
469     private void prepareActionSetTpSrc(SetTpSrcActionCaseBuilder wrapper) {
470         SetTpSrcActionBuilder setTpSrcActionBuilder = new SetTpSrcActionBuilder();
471         setTpSrcActionBuilder.setPort(new PortNumber(65535));
472         wrapper.setSetTpSrcAction(setTpSrcActionBuilder.build());
473     }
474
475     private void prepareActionSetNwTos(SetNwTosActionCaseBuilder wrapper) {
476         SetNwTosActionBuilder setNwTosActionBuilder = new SetNwTosActionBuilder();
477         setNwTosActionBuilder.setTos(63);
478         wrapper.setSetNwTosAction(setNwTosActionBuilder.build());
479     }
480
481     private void prepareActionSetNwSrc(List<Action> odActions) {
482         // test case for IPv4
483         SetNwSrcActionBuilder setNwSrcActionBuilderIpv4 = new SetNwSrcActionBuilder();
484         setNwSrcActionBuilderIpv4.setAddress(prapareIpv4Address("192.168.100.102"));
485         odActions.add(new ActionBuilder().setAction(new SetNwSrcActionCaseBuilder().setSetNwSrcAction(setNwSrcActionBuilderIpv4.build()).build()).build());
486
487         // test case for IPv6
488         SetNwSrcActionBuilder setNwSrcActionBuilderIpv6 = new SetNwSrcActionBuilder();
489         setNwSrcActionBuilderIpv6.setAddress(prapareIpv6Address("2001:0db8:85a3:0000:0000:8a2e:0370:7336"));
490         odActions.add(new ActionBuilder().setAction(new SetNwSrcActionCaseBuilder().setSetNwSrcAction(setNwSrcActionBuilderIpv6.build()).build()).build());
491     }
492
493     private void prepareActionSetNwDst(List<Action> odActions) {
494         // test case for IPv4
495         
496         SetNwDstActionBuilder setNwDstActionBuilderIpv4 = new SetNwDstActionBuilder();
497         setNwDstActionBuilderIpv4.setAddress(prapareIpv4Address("192.168.100.101"));
498         odActions.add(new ActionBuilder().setAction(new SetNwDstActionCaseBuilder().setSetNwDstAction(setNwDstActionBuilderIpv4.build()).build()).build());
499
500         // test case for IPv6
501         SetNwDstActionBuilder setNwDstActionBuilderIpv6 = new SetNwDstActionBuilder();
502         setNwDstActionBuilderIpv6.setAddress(prapareIpv6Address("2001:0db8:85a3:0000:0000:8a2e:0370:7335"));
503         odActions.add(new ActionBuilder().setAction(new SetNwDstActionCaseBuilder().setSetNwDstAction(setNwDstActionBuilderIpv6.build()).build()).build());
504     }
505
506     private void prepareActionNextHop(List<Action> odActions) {
507         // test case for IPv4
508         SetNextHopActionBuilder setNextHopActionBuilderIpv4 = new SetNextHopActionBuilder();
509         setNextHopActionBuilderIpv4.setAddress(prapareIpv4Address("192.168.100.100"));
510         odActions.add(new ActionBuilder().setAction(new SetNextHopActionCaseBuilder().setSetNextHopAction(setNextHopActionBuilderIpv4.build()).build()).build());
511
512         // test case for IPv6
513         SetNextHopActionBuilder setNextHopActionBuilderIpv6 = new SetNextHopActionBuilder();
514         setNextHopActionBuilderIpv6.setAddress(prapareIpv6Address("2001:0db8:85a3:0000:0000:8a2e:0370:7334"));
515         odActions.add(new ActionBuilder().setAction(new SetNextHopActionCaseBuilder().setSetNextHopAction(setNextHopActionBuilderIpv6.build()).build()).build());
516     }
517
518     private Address prapareIpv4Address(String ipv4Address) {
519         Ipv4Builder ipv4Builder = new Ipv4Builder();
520         ipv4Builder.setIpv4Address(new Ipv4Prefix(ipv4Address));
521         return ipv4Builder.build();
522     }
523
524     private Address prapareIpv6Address(String ipv6Address) {
525         Ipv6Builder ipv6Builder = new Ipv6Builder();
526         ipv6Builder.setIpv6Address(new Ipv6Prefix(ipv6Address));
527         return ipv6Builder.build();
528     }
529
530     private void prepareActionSetDlType(SetDlTypeActionCaseBuilder wrapper) {
531         SetDlTypeActionBuilder setDlTypeActionBuilder = new SetDlTypeActionBuilder();
532         setDlTypeActionBuilder.setDlType(new EtherType(513l));
533         wrapper.setSetDlTypeAction(setDlTypeActionBuilder.build());
534     }
535
536     private void prepareActionSetDlSrc(SetDlSrcActionCaseBuilder wrapper) {
537         SetDlSrcActionBuilder setDlSrcActionBuilder = new SetDlSrcActionBuilder();
538         setDlSrcActionBuilder.setAddress(new MacAddress("24:77:03:7C:C5:F1"));
539         wrapper.setSetDlSrcAction(setDlSrcActionBuilder.build());
540     }
541
542     private void prepareActionSetDlDst(SetDlDstActionCaseBuilder wrapper) {
543         SetDlDstActionBuilder setDlDstActionBuilder = new SetDlDstActionBuilder();
544         setDlDstActionBuilder.setAddress(new MacAddress("3C:A9:F4:00:E0:C8"));
545         wrapper.setSetDlDstAction(setDlDstActionBuilder.build());
546     }
547
548     private void prepareActionPushVlan(PushVlanActionCaseBuilder wrapper) {
549         PushVlanActionBuilder pushVlanActionBuilder = new PushVlanActionBuilder();
550         pushVlanActionBuilder.setPcp(7); // 3 bits
551         pushVlanActionBuilder.setCfi(new VlanCfi(1)); // 1 bit
552         pushVlanActionBuilder.setVlanId(new VlanId(4095));
553         pushVlanActionBuilder.setTag(0x8100); // 12 bit
554         wrapper.setPushVlanAction(pushVlanActionBuilder.build());
555     }
556
557     private void prepareActionOutput(OutputActionCaseBuilder wrapper) {
558         OutputActionBuilder outputActionBuilder = new OutputActionBuilder();
559         outputActionBuilder.setOutputNodeConnector(new Uri("1"));
560         wrapper.setOutputAction(outputActionBuilder.build());
561     }
562
563     private Match prepOdMatch(MtchType mt) {
564         MatchBuilder odMatchBuilder = new MatchBuilder();
565         switch (mt) {
566         case other:
567             odMatchBuilder.setEthernetMatch(prepEthernetMatch());
568             odMatchBuilder.setIpMatch(prepIpMatch());
569             odMatchBuilder.setVlanMatch(prepVlanMatch());
570             break;
571         case ipv4:
572             odMatchBuilder.setLayer3Match(prepLayer3MatchIpv4());
573             break;
574         case ipv6:
575             odMatchBuilder.setLayer3Match(prepLayer3MatchIpv6());
576             break;
577         case arp:
578             odMatchBuilder.setLayer3Match(prepLayer3MatchArp());
579             break;
580         case sctp:
581             odMatchBuilder.setLayer4Match(prepLayer4MatchSctp());
582             break;
583         case tcp:
584             odMatchBuilder.setLayer4Match(prepLayer4MatchTcp());
585             break;
586         case udp:
587             odMatchBuilder.setLayer4Match(prepLayer4MatchUdp());
588             break;
589         }
590         return odMatchBuilder.build();
591     }
592
593     private Layer4Match prepLayer4MatchUdp() {
594         UdpMatchBuilder udpMatchBuilder = new UdpMatchBuilder();
595
596         udpMatchBuilder.setUdpSourcePort(new PortNumber(11));
597         udpMatchBuilder.setUdpDestinationPort(new PortNumber(12));
598
599         return udpMatchBuilder.build();
600     }
601
602     private Layer4Match prepLayer4MatchTcp() {
603         TcpMatchBuilder tcpMatchBuilder = new TcpMatchBuilder();
604
605         tcpMatchBuilder.setTcpSourcePort(new PortNumber(21));
606         tcpMatchBuilder.setTcpDestinationPort(new PortNumber(22));
607
608         return tcpMatchBuilder.build();
609     }
610
611     private Layer4Match prepLayer4MatchSctp() {
612         SctpMatchBuilder sctpMatchBuilder = new SctpMatchBuilder();
613
614         sctpMatchBuilder.setSctpSourcePort(new PortNumber(31));
615         sctpMatchBuilder.setSctpDestinationPort(new PortNumber(32));
616
617         return sctpMatchBuilder.build();
618     }
619
620     private Layer3Match prepLayer3MatchIpv4() {
621         Ipv4MatchBuilder ipv4MatchBuilder = new Ipv4MatchBuilder();
622         ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix("192.168.1.104"));
623         ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix("192.168.1.105"));
624         return ipv4MatchBuilder.build();
625     }
626
627     private Layer3Match prepLayer3MatchIpv6() {
628         Ipv6MatchBuilder ipv6MatchBuilder = new Ipv6MatchBuilder();
629         ipv6MatchBuilder.setIpv6Source(new Ipv6Prefix("3001:0db8:85a3:0000:0000:8a2e:0370:7334"));
630         ipv6MatchBuilder.setIpv6Destination(new Ipv6Prefix("3001:0db8:85a3:0000:0000:8a2e:0370:7335"));
631         return ipv6MatchBuilder.build();
632     }
633
634     private Layer3Match prepLayer3MatchArp() {
635         ArpMatchBuilder arpMatchBuilder = new ArpMatchBuilder();
636         arpMatchBuilder.setArpSourceTransportAddress(new Ipv4Prefix("192.168.1.101"));
637         arpMatchBuilder.setArpTargetTransportAddress(new Ipv4Prefix("192.168.1.102"));
638
639         ArpSourceHardwareAddressBuilder arpSourAddressBuild = new ArpSourceHardwareAddressBuilder();
640         arpSourAddressBuild.setAddress(new MacAddress("22:44:66:88:AA:CC"));
641         arpMatchBuilder.setArpSourceHardwareAddress(arpSourAddressBuild.build());
642
643         ArpTargetHardwareAddressBuilder arpTarAddressBuild = new ArpTargetHardwareAddressBuilder();
644         arpTarAddressBuild.setAddress(new MacAddress("11:33:55:77:BB:DD"));
645         arpMatchBuilder.setArpTargetHardwareAddress(arpTarAddressBuild.build());
646         return arpMatchBuilder.build();
647     }
648
649     private VlanMatch prepVlanMatch() {
650         VlanMatchBuilder vlanMatchBuilder = new VlanMatchBuilder();
651
652         VlanIdBuilder vlanIdBuilder = new VlanIdBuilder().setVlanId(new VlanId(0xfff));
653         vlanMatchBuilder.setVlanId(vlanIdBuilder.build());
654         vlanMatchBuilder.setVlanPcp(new VlanPcp((short) 0x7));
655
656         return vlanMatchBuilder.build();
657
658     }
659
660     private IpMatch prepIpMatch() {
661         IpMatchBuilder ipMatchBuilder = new IpMatchBuilder();
662         ipMatchBuilder.setIpDscp(new Dscp((short) 0x33));
663         ipMatchBuilder.setIpProtocol((short) 0x3f);
664         return ipMatchBuilder.build();
665     }
666
667     private EthernetMatch prepEthernetMatch() {
668         EthernetMatchBuilder odEthernetMatchBuilder = new EthernetMatchBuilder();
669         odEthernetMatchBuilder.setEthernetDestination(prepEthDest());
670         odEthernetMatchBuilder.setEthernetSource(prepEthSour());
671         odEthernetMatchBuilder.setEthernetType(prepEthType());
672         return odEthernetMatchBuilder.build();
673     }
674
675     private EthernetType prepEthType() {
676         EthernetTypeBuilder ethTypeBuild = new EthernetTypeBuilder();
677         ethTypeBuild.setType(new EtherType(0xffffl));
678         return ethTypeBuild.build();
679     }
680
681     private EthernetSource prepEthSour() {
682         EthernetSourceBuilder ethSourBuild = new EthernetSourceBuilder();
683         ethSourBuild.setAddress(new MacAddress("24:77:03:7C:C5:F1"));
684         return ethSourBuild.build();
685     }
686
687     private EthernetDestination prepEthDest() {
688         EthernetDestinationBuilder ethDestBuild = new EthernetDestinationBuilder();
689         ethDestBuild.setAddress(new MacAddress("3C:A9:F4:00:E0:C8"));
690         return ethDestBuild.build();
691     }
692 }