2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.controller.sal.compatibility;
10 import java.math.BigInteger;
11 import java.net.Inet4Address;
12 import java.net.Inet6Address;
13 import java.net.InetAddress;
14 import java.util.ArrayList;
15 import java.util.Collections;
16 import java.util.List;
18 import org.opendaylight.controller.sal.action.Action;
19 import org.opendaylight.controller.sal.action.Controller;
20 import org.opendaylight.controller.sal.action.Drop;
21 import org.opendaylight.controller.sal.action.Flood;
22 import org.opendaylight.controller.sal.action.FloodAll;
23 import org.opendaylight.controller.sal.action.HwPath;
24 import org.opendaylight.controller.sal.action.Loopback;
25 import org.opendaylight.controller.sal.action.Output;
26 import org.opendaylight.controller.sal.action.PopVlan;
27 import org.opendaylight.controller.sal.action.PushVlan;
28 import org.opendaylight.controller.sal.action.SetDlDst;
29 import org.opendaylight.controller.sal.action.SetDlSrc;
30 import org.opendaylight.controller.sal.action.SetDlType;
31 import org.opendaylight.controller.sal.action.SetNextHop;
32 import org.opendaylight.controller.sal.action.SetNwDst;
33 import org.opendaylight.controller.sal.action.SetNwSrc;
34 import org.opendaylight.controller.sal.action.SetNwTos;
35 import org.opendaylight.controller.sal.action.SetTpDst;
36 import org.opendaylight.controller.sal.action.SetTpSrc;
37 import org.opendaylight.controller.sal.action.SetVlanCfi;
38 import org.opendaylight.controller.sal.action.SetVlanId;
39 import org.opendaylight.controller.sal.action.SetVlanPcp;
40 import org.opendaylight.controller.sal.action.SwPath;
41 import org.opendaylight.controller.sal.core.Node;
42 import org.opendaylight.controller.sal.core.NodeConnector;
43 import org.opendaylight.controller.sal.flowprogrammer.Flow;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.VlanCfi;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.ControllerActionCase;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.ControllerActionCaseBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCase;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCaseBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.FloodActionCase;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.FloodActionCaseBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.FloodAllActionCase;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.FloodAllActionCaseBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.HwPathActionCase;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.HwPathActionCaseBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.LoopbackActionCase;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.LoopbackActionCaseBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCase;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCase;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCase;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstActionCase;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstActionCaseBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcActionCase;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcActionCaseBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlTypeActionCase;
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.SetNextHopActionCase;
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.SetNwDstActionCase;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCaseBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCase;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCaseBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTosActionCase;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTosActionCaseBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpDstActionCase;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpDstActionCaseBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpSrcActionCase;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpSrcActionCaseBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanCfiActionCase;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanCfiActionCaseBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCase;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCaseBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanPcpActionCase;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanPcpActionCaseBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SwPathActionCase;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SwPathActionCaseBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.controller.action._case.ControllerActionBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropActionBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.flood.action._case.FloodActionBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.flood.all.action._case.FloodAllActionBuilder;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.hw.path.action._case.HwPathActionBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.loopback.action._case.LoopbackActionBuilder;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.dst.action._case.SetDlDstActionBuilder;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.src.action._case.SetDlSrcActionBuilder;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.type.action._case.SetDlTypeActionBuilder;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.next.hop.action._case.SetNextHopActionBuilder;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstActionBuilder;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.src.action._case.SetNwSrcActionBuilder;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.tos.action._case.SetNwTosActionBuilder;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.dst.action._case.SetTpDstActionBuilder;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.src.action._case.SetTpSrcActionBuilder;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.cfi.action._case.SetVlanCfiActionBuilder;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.id.action._case.SetVlanIdActionBuilder;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.pcp.action._case.SetVlanPcpActionBuilder;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.sw.path.action._case.SwPathActionBuilder;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.Address;
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4Builder;
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv6Builder;
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput;
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder;
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAdded;
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAddedBuilder;
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInput;
126 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder;
127 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInput;
128 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInputBuilder;
129 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.OriginalFlowBuilder;
130 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlowBuilder;
131 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
132 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;
133 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
134 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
135 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder;
136 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
137 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
138 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
139 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
140 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;
142 import com.google.common.base.Preconditions;
143 import com.google.common.net.InetAddresses;
145 public final class MDFlowMapping {
146 private MDFlowMapping() {
147 throw new UnsupportedOperationException("Utility class");
150 private static List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> toMDActions(final List<Action> actions) {
151 final ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> ret =
152 new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action>(actions.size());
154 for (final Action sourceAction : actions) {
155 ret.add(toAction(sourceAction, action));
162 public static FlowAdded flowAdded(final Flow sourceFlow) {
163 Preconditions.checkArgument(sourceFlow != null);
165 return new FlowAddedBuilder()
166 .setHardTimeout(Integer.valueOf(sourceFlow.getHardTimeout()))
167 .setIdleTimeout(Integer.valueOf(sourceFlow.getIdleTimeout()))
168 .setCookie(new FlowCookie(BigInteger.valueOf(sourceFlow.getId())))
169 .setPriority(Integer.valueOf(sourceFlow.getPriority()))
170 .setInstructions(MDFlowMapping.toApplyInstruction(toMDActions(sourceFlow.getActions())))
171 .setMatch(FromSalConversionsUtils.toMatch(sourceFlow.getMatch()))
172 .setTableId((short)0)
176 private static FlowBuilder internalToMDFlow(final Flow sourceFlow) {
177 Preconditions.checkArgument(sourceFlow != null);
179 return new FlowBuilder()
180 .setHardTimeout(Integer.valueOf(sourceFlow.getHardTimeout()))
181 .setIdleTimeout(Integer.valueOf(sourceFlow.getIdleTimeout()))
182 .setCookie(new FlowCookie(BigInteger.valueOf(sourceFlow.getId())))
183 .setPriority(Integer.valueOf((sourceFlow.getPriority())))
184 .setInstructions(MDFlowMapping.toApplyInstruction(toMDActions(sourceFlow.getActions())))
185 .setMatch(FromSalConversionsUtils.toMatch(sourceFlow.getMatch()));
188 public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow toMDFlow(final Flow sourceFlow, final String flowId) {
189 return internalToMDFlow(sourceFlow)
190 .setTableId((short)0)
191 .setId(new FlowId(flowId))
195 public static org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow toMDSalflow(final Flow sourceFlow) {
196 return internalToMDFlow(sourceFlow).build();
199 public static Instructions toApplyInstruction(final List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actions) {
200 return new InstructionsBuilder()
202 Collections.singletonList(
203 new InstructionBuilder()
206 new ApplyActionsCaseBuilder()
207 .setApplyActions(new ApplyActionsBuilder().setAction(actions).build())
213 public static RemoveFlowInput removeFlowInput(final Node sourceNode, final Flow sourceFlow) {
214 final FlowAdded source = MDFlowMapping.flowAdded(sourceFlow);
215 return new RemoveFlowInputBuilder((org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow) source)
216 .setNode(NodeMapping.toNodeRef(sourceNode))
220 public static AddFlowInput addFlowInput(final Node sourceNode, final Flow sourceFlow) {
221 final FlowAdded source = MDFlowMapping.flowAdded(sourceFlow);
222 return new AddFlowInputBuilder(((org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow) source))
223 .setNode(NodeMapping.toNodeRef(sourceNode))
227 public static UpdateFlowInput updateFlowInput(final Node sourceNode, final Flow oldFlow, final Flow newFlow) {
228 return new UpdateFlowInputBuilder()
229 .setOriginalFlow(new OriginalFlowBuilder(MDFlowMapping.flowAdded(newFlow)).build())
230 .setUpdatedFlow(new UpdatedFlowBuilder(MDFlowMapping.flowAdded(newFlow)).build())
231 .setNode(NodeMapping.toNodeRef(sourceNode))
235 private static ControllerActionCase _toAction(final Controller sourceAction) {
236 return new ControllerActionCaseBuilder().setControllerAction(new ControllerActionBuilder().build()).build();
239 private static DropActionCase _toAction(final Drop sourceAction) {
240 return new DropActionCaseBuilder().setDropAction(new DropActionBuilder().build()).build();
243 private static FloodActionCase _toAction(final Flood sourceAction) {
244 return new FloodActionCaseBuilder().setFloodAction(new FloodActionBuilder().build()).build();
247 private static FloodAllActionCase _toAction(final FloodAll sourceAction) {
248 return new FloodAllActionCaseBuilder().setFloodAllAction(new FloodAllActionBuilder().build()).build();
251 private static HwPathActionCase _toAction(final HwPath sourceAction) {
252 return new HwPathActionCaseBuilder().setHwPathAction(new HwPathActionBuilder().build()).build();
255 private static LoopbackActionCase _toAction(final Loopback sourceAction) {
256 return new LoopbackActionCaseBuilder().setLoopbackAction( new LoopbackActionBuilder().build()).build();
259 private static OutputActionCase _toAction(final Output sourceAction) {
260 return new OutputActionCaseBuilder()
262 new OutputActionBuilder().setOutputNodeConnector(MDFlowMapping.toUri(sourceAction.getPort())).build()
266 private static PopVlanActionCase _toAction(final PopVlan sourceAction) {
267 return new PopVlanActionCaseBuilder().build();
270 private static PushVlanActionCase _toAction(final PushVlan sourceAction) {
271 return new PushVlanActionCaseBuilder()
273 new PushVlanActionBuilder()
274 .setCfi(new VlanCfi(sourceAction.getCfi()))
275 .setPcp(sourceAction.getPcp())
276 .setTag(sourceAction.getTag())
277 .setVlanId(new VlanId(sourceAction.getVlanId()))
282 private static SetDlDstActionCase _toAction(final SetDlDst sourceAction) {
283 return new SetDlDstActionCaseBuilder()
284 .setSetDlDstAction(new SetDlDstActionBuilder().setAddress(MDFlowMapping.toMacAddress(sourceAction.getDlAddress())).build())
288 private static SetDlSrcActionCase _toAction(final SetDlSrc sourceAction) {
289 return new SetDlSrcActionCaseBuilder()
290 .setSetDlSrcAction(new SetDlSrcActionBuilder().setAddress(MDFlowMapping.toMacAddress(sourceAction.getDlAddress())).build())
294 private static SetDlTypeActionCase _toAction(final SetDlType sourceAction) {
295 return new SetDlTypeActionCaseBuilder()
296 .setSetDlTypeAction(new SetDlTypeActionBuilder().setDlType(new EtherType(Long.valueOf(sourceAction.getDlType()))).build())
300 private static SetNextHopActionCase _toAction(final SetNextHop sourceAction) {
301 return new SetNextHopActionCaseBuilder()
302 .setSetNextHopAction(new SetNextHopActionBuilder().setAddress(MDFlowMapping.toInetAddress(sourceAction.getAddress())).build())
306 private static SetNwDstActionCase _toAction(final SetNwDst sourceAction) {
307 return new SetNwDstActionCaseBuilder()
308 .setSetNwDstAction(new SetNwDstActionBuilder().setAddress(MDFlowMapping.toInetAddress(sourceAction.getAddress())).build())
312 private static SetNwSrcActionCase _toAction(final SetNwSrc sourceAction) {
313 return new SetNwSrcActionCaseBuilder()
314 .setSetNwSrcAction(new SetNwSrcActionBuilder().setAddress(MDFlowMapping.toInetAddress(sourceAction.getAddress())).build())
318 private static SetNwTosActionCase _toAction(final SetNwTos sourceAction) {
319 return new SetNwTosActionCaseBuilder()
320 .setSetNwTosAction(new SetNwTosActionBuilder().setTos(sourceAction.getNwTos()).build())
324 private static SetTpDstActionCase _toAction(final SetTpDst sourceAction) {
325 return new SetTpDstActionCaseBuilder()
326 .setSetTpDstAction(new SetTpDstActionBuilder().setPort(new PortNumber(sourceAction.getPort())).build())
330 private static SetTpSrcActionCase _toAction(final SetTpSrc sourceAction) {
331 return new SetTpSrcActionCaseBuilder()
332 .setSetTpSrcAction(new SetTpSrcActionBuilder().setPort(new PortNumber(sourceAction.getPort())).build())
336 private static SetVlanCfiActionCase _toAction(final SetVlanCfi sourceAction) {
337 return new SetVlanCfiActionCaseBuilder()
338 .setSetVlanCfiAction(new SetVlanCfiActionBuilder().setVlanCfi(new VlanCfi(sourceAction.getCfi())).build())
342 private static SetVlanIdActionCase _toAction(final SetVlanId sourceAction) {
343 return new SetVlanIdActionCaseBuilder()
344 .setSetVlanIdAction(new SetVlanIdActionBuilder().setVlanId(new VlanId(sourceAction.getVlanId())).build())
348 private static SetVlanPcpActionCase _toAction(final SetVlanPcp sourceAction) {
349 return new SetVlanPcpActionCaseBuilder()
350 .setSetVlanPcpAction(new SetVlanPcpActionBuilder().setVlanPcp(new VlanPcp((short) sourceAction.getPcp())).build())
354 private static SwPathActionCase _toAction(final SwPath sourceAction) {
355 return new SwPathActionCaseBuilder().setSwPathAction(new SwPathActionBuilder().build()).build();
358 public static Uri toUri(final NodeConnector connector) {
359 return new NodeConnectorId(((String) connector.getID()));
362 public static MacAddress toMacAddress(final byte[] bytes) {
363 final StringBuilder sb = new StringBuilder(18);
364 boolean first = true;
366 for (final byte b : bytes) {
372 sb.append(String.format("%02x", Byte.valueOf(b)));
374 return new MacAddress(sb.toString());
377 public static org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action toAction(final Action sourceAction, final int order) {
378 final ActionBuilder ret = new ActionBuilder().setOrder(order);
380 if (sourceAction instanceof Controller) {
381 ret.setAction(_toAction((Controller)sourceAction));
382 } else if (sourceAction instanceof Drop) {
383 ret.setAction(_toAction((Drop)sourceAction));
384 } else if (sourceAction instanceof Flood) {
385 ret.setAction(_toAction((Flood)sourceAction));
386 } else if (sourceAction instanceof FloodAll) {
387 ret.setAction(_toAction((FloodAll)sourceAction));
388 } else if (sourceAction instanceof HwPath) {
389 ret.setAction(_toAction((HwPath)sourceAction));
390 } else if (sourceAction instanceof Loopback) {
391 ret.setAction(_toAction((Loopback)sourceAction));
392 } else if (sourceAction instanceof Output) {
393 ret.setAction(_toAction((Output)sourceAction));
394 } else if (sourceAction instanceof PopVlan) {
395 ret.setAction(_toAction((PopVlan)sourceAction));
396 } else if (sourceAction instanceof PushVlan) {
397 ret.setAction(_toAction((PushVlan)sourceAction));
398 } else if (sourceAction instanceof SetDlDst) {
399 ret.setAction(_toAction((SetDlDst)sourceAction));
400 } else if (sourceAction instanceof SetDlSrc) {
401 ret.setAction(_toAction((SetDlSrc)sourceAction));
402 } else if (sourceAction instanceof SetDlType) {
403 ret.setAction(_toAction((SetDlType)sourceAction));
404 } else if (sourceAction instanceof SetNextHop) {
405 ret.setAction(_toAction((SetNextHop)sourceAction));
406 } else if (sourceAction instanceof SetNwDst) {
407 ret.setAction(_toAction((SetNwDst)sourceAction));
408 } else if (sourceAction instanceof SetNwSrc) {
409 ret.setAction(_toAction((SetNwSrc)sourceAction));
410 } else if (sourceAction instanceof SetNwTos) {
411 ret.setAction(_toAction((SetNwTos)sourceAction));
412 } else if (sourceAction instanceof SetTpDst) {
413 ret.setAction(_toAction((SetTpDst)sourceAction));
414 } else if (sourceAction instanceof SetTpSrc) {
415 ret.setAction(_toAction((SetTpSrc)sourceAction));
416 } else if (sourceAction instanceof SetVlanCfi) {
417 ret.setAction(_toAction((SetVlanCfi)sourceAction));
418 } else if (sourceAction instanceof SetVlanId) {
419 ret.setAction(_toAction((SetVlanId)sourceAction));
420 } else if (sourceAction instanceof SetVlanPcp) {
421 ret.setAction(_toAction((SetVlanPcp)sourceAction));
422 } else if (sourceAction instanceof SwPath) {
423 ret.setAction(_toAction((SwPath)sourceAction));
425 throw new IllegalArgumentException(String.format("Unhandled action class %s", sourceAction.getClass()));
431 public static Address toInetAddress(final InetAddress address) {
432 if (address instanceof Inet4Address) {
433 return new Ipv4Builder()
434 .setIpv4Address(new Ipv4Prefix(InetAddresses.toAddrString(address)))
437 if (address instanceof Inet6Address) {
438 return new Ipv6Builder()
439 .setIpv6Address(new Ipv6Prefix(InetAddresses.toAddrString(address)))
443 throw new IllegalArgumentException(String.format("Unhandled address class %s", address.getClass()));