1 package org.opendaylight.controller.sal.compability;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertTrue;
6 import java.math.BigInteger;
7 import java.net.Inet4Address;
8 import java.net.Inet6Address;
9 import java.net.InetAddress;
10 import java.util.ArrayList;
11 import java.util.List;
13 import org.junit.Test;
14 import org.opendaylight.controller.sal.action.*;
15 import org.opendaylight.controller.sal.flowprogrammer.Flow;
16 import org.opendaylight.controller.sal.match.MatchType;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.*;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAddedBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.NodeFlow;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.VlanCfi;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.*;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.Address;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.address.Ipv4Builder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.address.Ipv6Builder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Action;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.ActionBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Match;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.MatchBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.arp.match.fields.ArpSourceHardwareAddressBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.arp.match.fields.ArpTargetHardwareAddressBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.ethernet.match.fields.*;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.*;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.ArpMatchBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.Ipv4MatchBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._3.match.Ipv6MatchBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.SctpMatchBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.TcpMatchBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.match.layer._4.match.UdpMatchBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev130819.vlan.match.fields.VlanIdBuilder;
45 import com.google.common.net.InetAddresses;
46 import static org.opendaylight.controller.sal.compability.ProtocolConstants.ETHERNET_ARP;
47 import static org.opendaylight.controller.sal.compability.ProtocolConstants.SCTP;
48 import static org.opendaylight.controller.sal.compability.ProtocolConstants.TCP;
49 import static org.opendaylight.controller.sal.compability.ProtocolConstants.UDP;
51 public class TestToSalConversionsUtils {
53 // od|Od = Open Daylight
54 private enum MtchType {
55 other, ipv4, ipv6, arp, sctp, tcp, udp
59 public void testToSalConversion() {
60 FlowAddedBuilder odNodeFlowBuilder = new FlowAddedBuilder();
61 odNodeFlowBuilder = prepareOdFlowCommon();
63 Flow salFlow = ToSalConversionsUtils.toFlow(prepareOdFlow(odNodeFlowBuilder, MtchType.other));
64 checkSalMatch(salFlow.getMatch(), MtchType.other);
66 salFlow = ToSalConversionsUtils.toFlow(prepareOdFlow(odNodeFlowBuilder, MtchType.ipv4));
67 checkSalMatch(salFlow.getMatch(), MtchType.ipv4);
69 salFlow = ToSalConversionsUtils.toFlow(prepareOdFlow(odNodeFlowBuilder, MtchType.ipv6));
70 checkSalMatch(salFlow.getMatch(), MtchType.ipv6);
72 salFlow = ToSalConversionsUtils.toFlow(prepareOdFlow(odNodeFlowBuilder, MtchType.arp));
73 checkSalMatch(salFlow.getMatch(), MtchType.arp);
75 salFlow = ToSalConversionsUtils.toFlow(prepareOdFlow(odNodeFlowBuilder, MtchType.sctp));
76 checkSalMatch(salFlow.getMatch(), MtchType.sctp);
78 salFlow = ToSalConversionsUtils.toFlow(prepareOdFlow(odNodeFlowBuilder, MtchType.tcp));
79 checkSalMatch(salFlow.getMatch(), MtchType.tcp);
81 salFlow = ToSalConversionsUtils.toFlow(prepareOdFlow(odNodeFlowBuilder, MtchType.udp));
82 checkSalMatch(salFlow.getMatch(), MtchType.udp);
84 checkSalFlow(salFlow);
87 private void checkSalMatch(org.opendaylight.controller.sal.match.Match match, MtchType mt) {
90 /*assertNotNull("DL_DST isn't equal.", "3C:A9:F4:00:E0:C8",
91 new String((byte[]) match.getField(MatchType.DL_DST).getValue()));
92 assertEquals("DL_SRC isn't equal.", "24:77:03:7C:C5:F1",
93 new String((byte[]) match.getField(MatchType.DL_SRC).getValue()));
95 assertEquals("DL_TYPE isn't equal.", (short) 0xffff, (short) match.getField(MatchType.DL_TYPE).getValue());
96 assertEquals("NW_TOS isn't equal.", (byte) 0x33, (byte) match.getField(MatchType.NW_TOS).getValue());
97 assertEquals("NW_PROTO isn't equal.", (byte) 0x3f, (byte) match.getField(MatchType.NW_PROTO).getValue());
98 assertEquals("DL_VLAN isn't equal.", (short) 0xfff, (short) match.getField(MatchType.DL_VLAN).getValue());
99 assertEquals("DL_VLAN_PR isn't equal.", (byte) 0x7, (byte) match.getField(MatchType.DL_VLAN_PR).getValue());
103 assertEquals("DL_SRC isn't equal.", "22:44:66:88:AA:CC",
104 new String((byte[]) match.getField(MatchType.DL_SRC).getValue()));
105 assertEquals("DL_DST isn't equal.", "11:33:55:77:BB:DD",
106 new String((byte[]) match.getField(MatchType.DL_DST).getValue()));
108 assertEquals("NW_SRC isn't equal.", "192.168.1.101",
109 InetAddresses.toAddrString((InetAddress) match.getField(MatchType.NW_SRC).getValue()));
110 assertEquals("NW_DST isn't equal.", "192.168.1.102",
111 InetAddresses.toAddrString((InetAddress) match.getField(MatchType.NW_DST).getValue()));
112 assertEquals("DL_TYPE isn't equal.", ETHERNET_ARP, match.getField(MatchType.DL_TYPE).getValue());
115 assertEquals("NW_SRC isn't equal.", "192.168.1.104",
116 InetAddresses.toAddrString((InetAddress) match.getField(MatchType.NW_SRC).getValue()));
117 assertEquals("NW_DST isn't equal.", "192.168.1.105",
118 InetAddresses.toAddrString((InetAddress) match.getField(MatchType.NW_DST).getValue()));
121 assertEquals("NW_SRC isn't equal.", "3001:db8:85a3::8a2e:370:7334",
122 InetAddresses.toAddrString((InetAddress) match.getField(MatchType.NW_SRC).getValue()));
123 assertEquals("NW_DST isn't equal.", "3001:db8:85a3::8a2e:370:7335",
124 InetAddresses.toAddrString((InetAddress) match.getField(MatchType.NW_DST).getValue()));
127 assertEquals("TP_SRC isn't equal.", 31, (short) match.getField(MatchType.TP_SRC).getValue());
128 assertEquals("TP_DST isn't equal.", 32, (short) match.getField(MatchType.TP_DST).getValue());
129 assertEquals("NW_PROTO isn't equal.", SCTP, (byte) match.getField(MatchType.NW_PROTO).getValue());
132 assertEquals("TP_SRC isn't equal.", 21, (short) match.getField(MatchType.TP_SRC).getValue());
133 assertEquals("TP_DST isn't equal.", 22, (short) match.getField(MatchType.TP_DST).getValue());
134 assertEquals("NW_PROTO isn't equal.", TCP, (byte) match.getField(MatchType.NW_PROTO).getValue());
137 assertEquals("TP_SRC isn't equal.", 11, (short) match.getField(MatchType.TP_SRC).getValue());
138 assertEquals("TP_DST isn't equal.", 12, (short) match.getField(MatchType.TP_DST).getValue());
139 assertEquals("NW_PROTO isn't equal.", UDP, (byte) match.getField(MatchType.NW_PROTO).getValue());
148 private void checkSalFlow(Flow salFlow) {
149 assertTrue("Id value is incorrect.", salFlow.getId() == 9223372036854775807L);
150 assertTrue("Hard timeout is incorrect.", salFlow.getHardTimeout() == 32767);
151 assertTrue("Iddle timeout is incorrect.", salFlow.getIdleTimeout() == 32767);
152 assertTrue("Priority value is incorrect.", salFlow.getPriority() == 32767);
154 checkSalActions(salFlow.getActions());
157 private void checkSalActions(List<org.opendaylight.controller.sal.action.Action> actions) {
158 checkSalAction(actions, Flood.class, 1);
159 checkSalAction(actions, FloodAll.class, 1);
160 checkSalAction(actions, HwPath.class, 1);
161 checkSalAction(actions, Loopback.class, 1);
162 checkSalAction(actions, Output.class, 2, true);
163 checkSalAction(actions, PopVlan.class, 1);
164 checkSalAction(actions, PushVlan.class, 1, true);
165 checkSalAction(actions, SetDlDst.class, 1, true);
166 checkSalAction(actions, SetDlSrc.class, 1, true);
167 checkSalAction(actions, SetDlType.class, 1, true);
168 checkSalAction(actions, SetNextHop.class, 2, true);
169 checkSalAction(actions, SetNwDst.class, 2, true);
170 checkSalAction(actions, SetNwSrc.class, 2, true);
171 checkSalAction(actions, SetNwTos.class, 1, true);
172 checkSalAction(actions, SetTpDst.class, 1, true);
173 checkSalAction(actions, SetTpSrc.class, 1, true);
174 checkSalAction(actions, SetVlanCfi.class, 1, true);
175 checkSalAction(actions, SetVlanId.class, 1, true);
176 checkSalAction(actions, SetVlanPcp.class, 1, true);
177 checkSalAction(actions, SwPath.class, 1);
180 private void checkSalAction(List<org.opendaylight.controller.sal.action.Action> actions, Class<?> cls,
182 checkSalAction(actions, cls, numOfActions, false);
185 private void checkSalAction(List<org.opendaylight.controller.sal.action.Action> actions, Class<?> cls,
186 int numOfActions, boolean additionalCheck) {
187 int numOfEqualClass = 0;
188 for (org.opendaylight.controller.sal.action.Action action : actions) {
189 if (action.getClass().equals(cls)) {
190 if (additionalCheck) {
191 additionalActionCheck(action);
196 assertEquals("Incorrect number of actions of type " + cls.getName() + " was found.", numOfActions,
200 // implement special checks
201 private void additionalActionCheck(org.opendaylight.controller.sal.action.Action action) {
202 if (action instanceof Output) {
203 // ((Output)action).getPort() //TODO finish check when mapping will
205 } else if (action instanceof PushVlan) {
206 assertEquals("Wrong value for action PushVlan for tag.", 0x8100, ((PushVlan) action).getTag());
207 assertEquals("Wrong value for action PushVlan for pcp.", 7, ((PushVlan) action).getPcp());
208 assertEquals("Wrong value for action PushVlan for cfi.", 1, ((PushVlan) action).getCfi());
209 assertEquals("Wrong value for action PushVlan for vlanID.", 4095, ((PushVlan) action).getVlanId());
210 } else if (action instanceof SetDlDst) {
211 //assertEquals("Wrong value for action SetDlDst for MAC address.", "3C:A9:F4:00:E0:C8", new String(
212 // ((SetDlDst) action).getDlAddress()));
213 } else if (action instanceof SetDlSrc) {
214 //assertEquals("Wrong value for action SetDlSrc for MAC address.", "24:77:03:7C:C5:F1", new String(
215 // ((SetDlSrc) action).getDlAddress()));
216 } else if (action instanceof SetDlType) {
217 assertEquals("Wrong value for action SetDlType for.", 513l, ((SetDlType) action).getDlType());
218 } else if (action instanceof SetNextHop) {
219 InetAddress inetAddress = ((SetNextHop) action).getAddress();
220 checkIpAddresses(inetAddress, "192.168.100.100", "2001:db8:85a3::8a2e:370:7334");
221 } else if (action instanceof SetNwDst) {
222 InetAddress inetAddress = ((SetNwDst) action).getAddress();
223 checkIpAddresses(inetAddress, "192.168.100.101", "2001:db8:85a3::8a2e:370:7335");
224 } else if (action instanceof SetNwSrc) {
225 InetAddress inetAddress = ((SetNwSrc) action).getAddress();
226 checkIpAddresses(inetAddress, "192.168.100.102", "2001:db8:85a3::8a2e:370:7336");
227 } else if (action instanceof SetNwTos) {
228 assertEquals("Wrong value for action SetNwTos for tos.", 63, ((SetNwTos) action).getNwTos());
229 } else if (action instanceof SetTpDst) {
230 assertEquals("Wrong value for action SetTpDst for port.", 65535, ((SetTpDst) action).getPort());
231 } else if (action instanceof SetTpSrc) {
232 assertEquals("Wrong value for action SetTpSrc for port.", 65535, ((SetTpSrc) action).getPort());
233 } else if (action instanceof SetVlanCfi) {
234 assertEquals("Wrong value for action SetVlanCfi for port.", 1, ((SetVlanCfi) action).getCfi());
235 } else if (action instanceof SetVlanId) {
236 assertEquals("Wrong value for action SetVlanId for vlan ID.", 4095, ((SetVlanId) action).getVlanId());
237 } else if (action instanceof SetVlanPcp) {
238 assertEquals("Wrong value for action SetVlanPcp for vlan ID.", 7, ((SetVlanPcp) action).getPcp());
242 private void checkIpAddresses(InetAddress inetAddress, String ipv4, String ipv6) {
243 if (inetAddress instanceof Inet4Address) {
244 assertEquals("Wrong value for IP address.", ipv4, InetAddresses.toAddrString(inetAddress));
245 } else if (inetAddress instanceof Inet6Address) {
246 assertEquals("Wrong value for IP address.", ipv6, InetAddresses.toAddrString(inetAddress));
250 private FlowAddedBuilder prepareOdFlowCommon() {
251 FlowAddedBuilder odNodeFlowBuilder = new FlowAddedBuilder();
253 odNodeFlowBuilder.setCookie(new BigInteger("9223372036854775807"));
254 odNodeFlowBuilder.setHardTimeout(32767);
255 odNodeFlowBuilder.setIdleTimeout(32767);
256 odNodeFlowBuilder.setPriority(32767);
257 odNodeFlowBuilder.setAction(prepareOdActions());
258 return odNodeFlowBuilder;
261 private NodeFlow prepareOdFlow(FlowAddedBuilder odNodeFlowBuilder, MtchType mt) {
262 odNodeFlowBuilder.setMatch(prepOdMatch(mt));
263 return odNodeFlowBuilder.build();
266 private List<Action> prepareOdActions() {
267 List<Action> odActions = new ArrayList<>();
269 ControllerActionBuilder controllerActionBuilder = new ControllerActionBuilder();
270 DropActionBuilder dropActionBuilder = new DropActionBuilder();
271 FloodActionBuilder floodActionBuilder = new FloodActionBuilder();
272 FloodAllActionBuilder floodAllActionBuilder = new FloodAllActionBuilder();
273 HwPathActionBuilder hwPathActionBuilder = new HwPathActionBuilder();
274 LoopbackActionBuilder loopbackActionBuilder = new LoopbackActionBuilder();
275 OutputActionBuilder outputActionBuilder = new OutputActionBuilder();
276 PopMplsActionBuilder popMplsActionBuilder = new PopMplsActionBuilder();
277 PopVlanActionBuilder popVlanActionBuilder = new PopVlanActionBuilder();
278 PushMplsActionBuilder pushMplsActionBuilder = new PushMplsActionBuilder();
279 PushPbbActionBuilder pushPbbActionBuilder = new PushPbbActionBuilder();
280 PushVlanActionBuilder pushVlanActionBuilder = new PushVlanActionBuilder();
281 SetDlDstActionBuilder setDlDstActionBuilder = new SetDlDstActionBuilder();
282 SetDlSrcActionBuilder setDlSrcActionBuilder = new SetDlSrcActionBuilder();
283 SetDlTypeActionBuilder setDlTypeActionBuilder = new SetDlTypeActionBuilder();
284 SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
285 SetNwTosActionBuilder setNwTosActionBuilder = new SetNwTosActionBuilder();
286 SetNwTtlActionBuilder setNwTtlActionBuilder = new SetNwTtlActionBuilder();
287 SetQueueActionBuilder setQueueActionBuilder = new SetQueueActionBuilder();
288 SetTpDstActionBuilder setTpDstActionBuilder = new SetTpDstActionBuilder();
289 SetTpSrcActionBuilder setTpSrcActionBuilder = new SetTpSrcActionBuilder();
290 SetVlanCfiActionBuilder setVlanCfiActionBuilder = new SetVlanCfiActionBuilder();
291 SetVlanIdActionBuilder setVlanIdActionBuilder = new SetVlanIdActionBuilder();
292 SetVlanPcpActionBuilder setVlanPcpActionBuilder = new SetVlanPcpActionBuilder();
293 SwPathActionBuilder swPathActionBuilder = new SwPathActionBuilder();
295 prepareActionOutput(outputActionBuilder);
296 prepareActionPushVlan(pushVlanActionBuilder);
297 prepareActionSetDlDst(setDlDstActionBuilder);
298 prepareActionSetDlSrc(setDlSrcActionBuilder);
299 prepareActionSetDlType(setDlTypeActionBuilder);
300 prepareActionNextHop(odActions);
301 prepareActionSetNwDst(odActions);
302 prepareActionSetNwSrc(odActions);
303 prepareActionSetNwTos(setNwTosActionBuilder);
304 prepareActionSetTpDst(setTpDstActionBuilder);
305 prepareActionSetTpSrc(setTpSrcActionBuilder);
306 prepareActionSetVlanCfi(setVlanCfiActionBuilder);
307 prepareActionSetVladId(setVlanIdActionBuilder);
308 prepareActionSetVlanPcp(setVlanPcpActionBuilder);
310 odActions.add(new ActionBuilder().setAction(controllerActionBuilder.build()).build());
311 odActions.add(new ActionBuilder().setAction(dropActionBuilder.build()).build());
312 odActions.add(new ActionBuilder().setAction(floodActionBuilder.build()).build());
313 odActions.add(new ActionBuilder().setAction(floodAllActionBuilder.build()).build());
314 odActions.add(new ActionBuilder().setAction(hwPathActionBuilder.build()).build());
315 odActions.add(new ActionBuilder().setAction(loopbackActionBuilder.build()).build());
316 odActions.add(new ActionBuilder().setAction(outputActionBuilder.build()).build());
317 odActions.add(new ActionBuilder().setAction(popMplsActionBuilder.build()).build());
318 odActions.add(new ActionBuilder().setAction(popVlanActionBuilder.build()).build());
319 odActions.add(new ActionBuilder().setAction(pushMplsActionBuilder.build()).build());
320 odActions.add(new ActionBuilder().setAction(pushPbbActionBuilder.build()).build());
321 odActions.add(new ActionBuilder().setAction(pushVlanActionBuilder.build()).build());
322 odActions.add(new ActionBuilder().setAction(setDlDstActionBuilder.build()).build());
323 odActions.add(new ActionBuilder().setAction(setDlSrcActionBuilder.build()).build());
324 odActions.add(new ActionBuilder().setAction(setDlTypeActionBuilder.build()).build());
325 odActions.add(new ActionBuilder().setAction(setMplsTtlActionBuilder.build()).build());
326 odActions.add(new ActionBuilder().setAction(setNwTosActionBuilder.build()).build());
327 odActions.add(new ActionBuilder().setAction(setNwTtlActionBuilder.build()).build());
328 odActions.add(new ActionBuilder().setAction(setQueueActionBuilder.build()).build());
329 odActions.add(new ActionBuilder().setAction(setTpDstActionBuilder.build()).build());
330 odActions.add(new ActionBuilder().setAction(setTpSrcActionBuilder.build()).build());
331 odActions.add(new ActionBuilder().setAction(setVlanCfiActionBuilder.build()).build());
332 odActions.add(new ActionBuilder().setAction(setVlanIdActionBuilder.build()).build());
333 odActions.add(new ActionBuilder().setAction(setVlanPcpActionBuilder.build()).build());
334 odActions.add(new ActionBuilder().setAction(swPathActionBuilder.build()).build());
339 private void prepareActionSetVlanPcp(SetVlanPcpActionBuilder setVlanPcpActionBuilder) {
340 setVlanPcpActionBuilder.setVlanPcp(new VlanPcp((short) 7));
343 private void prepareActionSetVladId(SetVlanIdActionBuilder setVlanIdActionBuilder) {
344 setVlanIdActionBuilder.setVlanId(new VlanId(4095));
347 private void prepareActionSetVlanCfi(SetVlanCfiActionBuilder setVlanCfiActionBuilder) {
348 setVlanCfiActionBuilder.setVlanCfi(new VlanCfi(1));
351 private void prepareActionSetTpDst(SetTpDstActionBuilder setTpDstActionBuilder) {
352 setTpDstActionBuilder.setPort(new PortNumber(65535));
355 private void prepareActionSetTpSrc(SetTpSrcActionBuilder setTpSrcActionBuilder) {
356 setTpSrcActionBuilder.setPort(new PortNumber(65535));
359 private void prepareActionSetNwTos(SetNwTosActionBuilder setNwTosActionBuilder) {
360 setNwTosActionBuilder.setTos(63);
363 private void prepareActionSetNwSrc(List<Action> odActions) {
364 // test case for IPv4
365 SetNwSrcActionBuilder setNwSrcActionBuilderIpv4 = new SetNwSrcActionBuilder();
366 setNwSrcActionBuilderIpv4.setAddress(prapareIpv4Address("192.168.100.102"));
367 odActions.add(new ActionBuilder().setAction(setNwSrcActionBuilderIpv4.build()).build());
369 // test case for IPv6
370 SetNwSrcActionBuilder setNwSrcActionBuilderIpv6 = new SetNwSrcActionBuilder();
371 setNwSrcActionBuilderIpv6.setAddress(prapareIpv6Address("2001:0db8:85a3:0000:0000:8a2e:0370:7336"));
372 odActions.add(new ActionBuilder().setAction(setNwSrcActionBuilderIpv6.build()).build());
375 private void prepareActionSetNwDst(List<Action> odActions) {
376 // test case for IPv4
377 SetNwDstActionBuilder setNwDstActionBuilderIpv4 = new SetNwDstActionBuilder();
378 setNwDstActionBuilderIpv4.setAddress(prapareIpv4Address("192.168.100.101"));
379 odActions.add(new ActionBuilder().setAction(setNwDstActionBuilderIpv4.build()).build());
381 // test case for IPv6
382 SetNwDstActionBuilder setNwDstActionBuilderIpv6 = new SetNwDstActionBuilder();
383 setNwDstActionBuilderIpv6.setAddress(prapareIpv6Address("2001:0db8:85a3:0000:0000:8a2e:0370:7335"));
384 odActions.add(new ActionBuilder().setAction(setNwDstActionBuilderIpv6.build()).build());
387 private void prepareActionNextHop(List<Action> odActions) {
388 // test case for IPv4
389 SetNextHopActionBuilder setNextHopActionBuilderIpv4 = new SetNextHopActionBuilder();
390 setNextHopActionBuilderIpv4.setAddress(prapareIpv4Address("192.168.100.100"));
391 odActions.add(new ActionBuilder().setAction(setNextHopActionBuilderIpv4.build()).build());
393 // test case for IPv6
394 SetNextHopActionBuilder setNextHopActionBuilderIpv6 = new SetNextHopActionBuilder();
395 setNextHopActionBuilderIpv6.setAddress(prapareIpv6Address("2001:0db8:85a3:0000:0000:8a2e:0370:7334"));
396 odActions.add(new ActionBuilder().setAction(setNextHopActionBuilderIpv6.build()).build());
399 private Address prapareIpv4Address(String ipv4Address) {
400 Ipv4Builder ipv4Builder = new Ipv4Builder();
401 ipv4Builder.setIpv4Address(new Ipv4Prefix(ipv4Address));
402 return ipv4Builder.build();
405 private Address prapareIpv6Address(String ipv6Address) {
406 Ipv6Builder ipv6Builder = new Ipv6Builder();
407 ipv6Builder.setIpv6Address(new Ipv6Prefix(ipv6Address));
408 return ipv6Builder.build();
411 private void prepareActionSetDlType(SetDlTypeActionBuilder setDlTypeActionBuilder) {
412 setDlTypeActionBuilder.setDlType(new EtherType(513l));
415 private void prepareActionSetDlSrc(SetDlSrcActionBuilder setDlSrcActionBuilder) {
416 setDlSrcActionBuilder.setAddress(new MacAddress("24:77:03:7C:C5:F1"));
419 private void prepareActionSetDlDst(SetDlDstActionBuilder setDlDstActionBuilder) {
420 setDlDstActionBuilder.setAddress(new MacAddress("3C:A9:F4:00:E0:C8"));
423 private void prepareActionPushVlan(PushVlanActionBuilder pushVlanActionBuilder) {
424 pushVlanActionBuilder.setPcp(7); // 3 bits
425 pushVlanActionBuilder.setCfi(new VlanCfi(1)); // 1 bit
426 pushVlanActionBuilder.setVlanId(new VlanId(4095));
427 pushVlanActionBuilder.setTag(0x8100); // 12 bit
430 private void prepareActionOutput(OutputActionBuilder outputActionBuilder) {
431 List<Uri> uris = new ArrayList<>();
432 uris.add(new Uri("uri1"));
433 uris.add(new Uri("uri2"));
434 outputActionBuilder.setOutputNodeConnector(uris);
437 private Match prepOdMatch(MtchType mt) {
438 MatchBuilder odMatchBuilder = new MatchBuilder();
441 odMatchBuilder.setEthernetMatch(prepEthernetMatch());
442 odMatchBuilder.setIpMatch(prepIpMatch());
443 odMatchBuilder.setVlanMatch(prepVlanMatch());
446 odMatchBuilder.setLayer3Match(prepLayer3MatchIpv4());
449 odMatchBuilder.setLayer3Match(prepLayer3MatchIpv6());
452 odMatchBuilder.setLayer3Match(prepLayer3MatchArp());
455 odMatchBuilder.setLayer4Match(prepLayer4MatchSctp());
458 odMatchBuilder.setLayer4Match(prepLayer4MatchTcp());
461 odMatchBuilder.setLayer4Match(prepLayer4MatchUdp());
464 return odMatchBuilder.build();
467 private Layer4Match prepLayer4MatchUdp() {
468 UdpMatchBuilder udpMatchBuilder = new UdpMatchBuilder();
470 udpMatchBuilder.setUdpSourcePort(new PortNumber(11));
471 udpMatchBuilder.setUdpDestinationPort(new PortNumber(12));
473 return udpMatchBuilder.build();
476 private Layer4Match prepLayer4MatchTcp() {
477 TcpMatchBuilder tcpMatchBuilder = new TcpMatchBuilder();
479 tcpMatchBuilder.setTcpSourcePort(new PortNumber(21));
480 tcpMatchBuilder.setTcpDestinationPort(new PortNumber(22));
482 return tcpMatchBuilder.build();
485 private Layer4Match prepLayer4MatchSctp() {
486 SctpMatchBuilder sctpMatchBuilder = new SctpMatchBuilder();
488 sctpMatchBuilder.setSctpSourcePort(new PortNumber(31));
489 sctpMatchBuilder.setSctpDestinationPort(new PortNumber(32));
491 return sctpMatchBuilder.build();
494 private Layer3Match prepLayer3MatchIpv4() {
495 Ipv4MatchBuilder ipv4MatchBuilder = new Ipv4MatchBuilder();
496 ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix("192.168.1.104"));
497 ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix("192.168.1.105"));
498 return ipv4MatchBuilder.build();
501 private Layer3Match prepLayer3MatchIpv6() {
502 Ipv6MatchBuilder ipv6MatchBuilder = new Ipv6MatchBuilder();
503 ipv6MatchBuilder.setIpv6Source(new Ipv6Prefix("3001:0db8:85a3:0000:0000:8a2e:0370:7334"));
504 ipv6MatchBuilder.setIpv6Destination(new Ipv6Prefix("3001:0db8:85a3:0000:0000:8a2e:0370:7335"));
505 return ipv6MatchBuilder.build();
508 private Layer3Match prepLayer3MatchArp() {
509 ArpMatchBuilder arpMatchBuilder = new ArpMatchBuilder();
510 arpMatchBuilder.setArpSourceTransportAddress(new Ipv4Prefix("192.168.1.101"));
511 arpMatchBuilder.setArpTargetTransportAddress(new Ipv4Prefix("192.168.1.102"));
513 ArpSourceHardwareAddressBuilder arpSourAddressBuild = new ArpSourceHardwareAddressBuilder();
514 arpSourAddressBuild.setAddress(new MacAddress("22:44:66:88:AA:CC"));
515 arpMatchBuilder.setArpSourceHardwareAddress(arpSourAddressBuild.build());
517 ArpTargetHardwareAddressBuilder arpTarAddressBuild = new ArpTargetHardwareAddressBuilder();
518 arpTarAddressBuild.setAddress(new MacAddress("11:33:55:77:BB:DD"));
519 arpMatchBuilder.setArpTargetHardwareAddress(arpTarAddressBuild.build());
520 return arpMatchBuilder.build();
523 private VlanMatch prepVlanMatch() {
524 VlanMatchBuilder vlanMatchBuilder = new VlanMatchBuilder();
526 VlanIdBuilder vlanIdBuilder = new VlanIdBuilder().setVlanId(new VlanId(0xfff));
527 vlanMatchBuilder.setVlanId(vlanIdBuilder.build());
528 vlanMatchBuilder.setVlanPcp(new VlanPcp((short) 0x7));
530 return vlanMatchBuilder.build();
534 private IpMatch prepIpMatch() {
535 IpMatchBuilder ipMatchBuilder = new IpMatchBuilder();
536 ipMatchBuilder.setIpDscp(new Dscp((short) 0x33));
537 ipMatchBuilder.setIpProtocol((short) 0x3f);
538 return ipMatchBuilder.build();
541 private EthernetMatch prepEthernetMatch() {
542 EthernetMatchBuilder odEthernetMatchBuilder = new EthernetMatchBuilder();
543 odEthernetMatchBuilder.setEthernetDestination(prepEthDest());
544 odEthernetMatchBuilder.setEthernetSource(prepEthSour());
545 odEthernetMatchBuilder.setEthernetType(prepEthType());
546 return odEthernetMatchBuilder.build();
549 private EthernetType prepEthType() {
550 EthernetTypeBuilder ethTypeBuild = new EthernetTypeBuilder();
551 ethTypeBuild.setType(new EtherType(0xffffl));
552 return ethTypeBuild.build();
555 private EthernetSource prepEthSour() {
556 EthernetSourceBuilder ethSourBuild = new EthernetSourceBuilder();
557 ethSourBuild.setAddress(new MacAddress("24:77:03:7C:C5:F1"));
558 return ethSourBuild.build();
561 private EthernetDestination prepEthDest() {
562 EthernetDestinationBuilder ethDestBuild = new EthernetDestinationBuilder();
563 ethDestBuild.setAddress(new MacAddress("3C:A9:F4:00:E0:C8"));
564 return ethDestBuild.build();