1 package org.opendaylight.controller.sal.compability;
3 import com.google.common.net.InetAddresses
4 import java.math.BigInteger
5 import java.net.Inet4Address
6 import java.net.Inet6Address
7 import java.util.ArrayList
9 import org.opendaylight.controller.sal.action.Controller
10 import org.opendaylight.controller.sal.action.Drop
11 import org.opendaylight.controller.sal.action.Flood
12 import org.opendaylight.controller.sal.action.FloodAll
13 import org.opendaylight.controller.sal.action.HwPath
14 import org.opendaylight.controller.sal.action.Loopback
15 import org.opendaylight.controller.sal.action.Output
16 import org.opendaylight.controller.sal.action.PopVlan
17 import org.opendaylight.controller.sal.action.PushVlan
18 import org.opendaylight.controller.sal.action.SetDlDst
19 import org.opendaylight.controller.sal.action.SetDlSrc
20 import org.opendaylight.controller.sal.action.SetDlType
21 import org.opendaylight.controller.sal.action.SetNextHop
22 import org.opendaylight.controller.sal.action.SetNwDst
23 import org.opendaylight.controller.sal.action.SetNwSrc
24 import org.opendaylight.controller.sal.action.SetNwTos
25 import org.opendaylight.controller.sal.action.SetTpDst
26 import org.opendaylight.controller.sal.action.SetTpSrc
27 import org.opendaylight.controller.sal.action.SetVlanCfi
28 import org.opendaylight.controller.sal.action.SetVlanId
29 import org.opendaylight.controller.sal.action.SetVlanPcp
30 import org.opendaylight.controller.sal.action.SwPath
31 import org.opendaylight.controller.sal.core.Node
32 import org.opendaylight.controller.sal.core.NodeConnector
33 import org.opendaylight.controller.sal.flowprogrammer.Flow
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAddedBuilder
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInputBuilder
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowStatisticsInputBuilder
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.VlanCfi
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.ControllerActionBuilder
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.DropActionBuilder
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.FloodActionBuilder
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.FloodAllActionBuilder
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.HwPathActionBuilder
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.LoopbackActionBuilder
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.OutputActionBuilder
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.PopVlanActionBuilder
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.PushVlanActionBuilder
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetDlDstActionBuilder
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetDlSrcActionBuilder
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetDlTypeActionBuilder
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetNextHopActionBuilder
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetNwDstActionBuilder
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetNwSrcActionBuilder
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetNwTosActionBuilder
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetTpDstActionBuilder
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetTpSrcActionBuilder
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetVlanCfiActionBuilder
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetVlanIdActionBuilder
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SetVlanPcpActionBuilder
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.action.action.SwPathActionBuilder
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.Address
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.address.Ipv4Builder
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.address.address.Ipv6Builder
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Action
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.ActionBuilder
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp
76 import static extension org.opendaylight.controller.sal.compability.FromSalConversionsUtils.*
77 import static extension org.opendaylight.controller.sal.compability.NodeMapping.*
79 public class MDFlowMapping {
82 throw new UnsupportedOperationException()
85 public static def flowAdded(Flow sourceFlow) {
86 if (sourceFlow == null)
87 throw new IllegalArgumentException();
88 val it = new FlowAddedBuilder();
90 hardTimeout = sourceFlow.hardTimeout as int
91 idleTimeout = sourceFlow.idleTimeout as int
92 cookie = BigInteger.valueOf(sourceFlow.id)
93 priority = sourceFlow.priority as int
95 val sourceActions = sourceFlow.actions;
96 val targetActions = new ArrayList<Action>();
97 for (sourceAction : sourceActions) {
98 targetActions.add(sourceAction.toAction());
100 action = targetActions;
101 match = sourceFlow.match.toMatch();
106 public static def flowStatisticsInput(Node sourceNode, Flow sourceFlow) {
107 val it = new GetFlowStatisticsInputBuilder();
108 val source = flowAdded(sourceFlow);
109 cookie = (source.getCookie());
110 action = (source.getAction());
111 action = (source.getAction());
112 cookie = (source.getCookie());
113 hardTimeout = (source.getHardTimeout());
114 match = (source.getMatch());
115 priority = (source.getPriority());
116 node = sourceNode.toNodeRef();
120 public static def removeFlowInput(Node sourceNode, Flow sourceFlow) {
121 val it = new RemoveFlowInputBuilder();
122 val source = flowAdded(sourceFlow);
123 action = (source.getAction());
124 cookie = (source.getCookie());
125 action = (source.getAction());
126 cookie = (source.getCookie());
127 hardTimeout = (source.getHardTimeout());
128 match = (source.getMatch());
129 priority = (source.getPriority());
130 node = sourceNode.toNodeRef();
134 public static def addFlowInput(Node sourceNode, Flow sourceFlow) {
135 val it = new AddFlowInputBuilder();
136 val source = flowAdded(sourceFlow);
137 action = (source.getAction());
138 cookie = (source.getCookie());
139 action = (source.getAction());
140 cookie = (source.getCookie());
141 hardTimeout = (source.getHardTimeout());
142 match = (source.getMatch());
143 priority = (source.getPriority());
144 node = sourceNode.toNodeRef()
148 public static def updateFlowInput(Node sourceNode, Flow oldFlow, Flow newFlow) {
149 val it = new UpdateFlowInputBuilder();
150 val source = flowAdded(newFlow);
151 action = (source.getAction());
152 cookie = (source.getCookie());
153 action = (source.getAction());
154 cookie = (source.getCookie());
155 hardTimeout = (source.getHardTimeout());
156 match = (source.getMatch());
157 priority = (source.getPriority());
158 node = sourceNode.toNodeRef()
162 public static dispatch def toAction(Controller sourceAction) {
163 val actionBuilder = new ActionBuilder();
164 actionBuilder.action = new ControllerActionBuilder().build();
165 return actionBuilder.build();
168 public static dispatch def toAction(Drop sourceAction) {
169 val actionBuilder = new ActionBuilder();
170 actionBuilder.action = new DropActionBuilder().build();
171 return actionBuilder.build();
174 public static dispatch def toAction(Flood sourceAction) {
175 val actionBuilder = new ActionBuilder();
176 actionBuilder.action = new FloodActionBuilder().build();
177 return actionBuilder.build();
180 public static dispatch def toAction(FloodAll sourceAction) {
181 val actionBuilder = new ActionBuilder();
182 actionBuilder.action = new FloodAllActionBuilder().build();
183 return actionBuilder.build();
186 public static dispatch def toAction(HwPath sourceAction) {
187 val actionBuilder = new ActionBuilder();
188 actionBuilder.action = new HwPathActionBuilder().build();
189 return actionBuilder.build();
192 public static dispatch def toAction(Loopback sourceAction) {
193 val actionBuilder = new ActionBuilder();
194 actionBuilder.action = new LoopbackActionBuilder().build();
195 return actionBuilder.build();
198 public static dispatch def toAction(Output sourceAction) {
199 val actionBuilder = new ActionBuilder();
200 val it = new OutputActionBuilder();
201 outputNodeConnector = sourceAction.port.toUriList;
202 actionBuilder.action = it.build();
203 return actionBuilder.build();
209 public static dispatch def toAction(PopVlan sourceAction) {
210 val actionBuilder = new ActionBuilder();
211 actionBuilder.action = new PopVlanActionBuilder().build();
212 return actionBuilder.build();
215 public static dispatch def toAction(PushVlan sourceAction) {
216 val actionBuilder = new ActionBuilder();
217 val it = new PushVlanActionBuilder();
218 cfi = new VlanCfi(sourceAction.cfi);
219 vlanId = new VlanId(sourceAction.vlanId);
220 pcp = sourceAction.pcp;
221 tag = sourceAction.tag;
222 actionBuilder.action = it.build();
223 return actionBuilder.build();
226 public static dispatch def toAction(SetDlDst sourceAction) {
227 val actionBuilder = new ActionBuilder();
228 val it = new SetDlDstActionBuilder();
229 address = sourceAction.dlAddress.toMacAddress();
230 actionBuilder.action = it.build();
231 return actionBuilder.build();
234 public static dispatch def toAction(SetDlSrc sourceAction) {
235 val actionBuilder = new ActionBuilder();
236 val it = new SetDlSrcActionBuilder();
237 address = sourceAction.dlAddress.toMacAddress;
238 actionBuilder.action = it.build();
239 return actionBuilder.build();
242 public static dispatch def toAction(SetDlType sourceAction) {
243 val actionBuilder = new ActionBuilder();
244 val it = new SetDlTypeActionBuilder();
245 dlType = new EtherType(sourceAction.dlType as long);
246 actionBuilder.action = it.build();
247 return actionBuilder.build();
250 public static dispatch def toAction(SetNextHop sourceAction) {
251 val actionBuilder = new ActionBuilder();
252 val it = new SetNextHopActionBuilder();
253 val inetAddress = sourceAction.address;
254 address = inetAddress.toInetAddress;
255 actionBuilder.action = it.build();
256 return actionBuilder.build();
259 public static dispatch def toAction(SetNwDst sourceAction) {
260 val actionBuilder = new ActionBuilder();
261 val it = new SetNwDstActionBuilder();
262 val inetAddress = sourceAction.address;
263 address = inetAddress.toInetAddress;
264 actionBuilder.action = it.build();
265 return actionBuilder.build();
268 public static dispatch def toAction(SetNwSrc sourceAction) {
269 val actionBuilder = new ActionBuilder();
270 val it = new SetNwSrcActionBuilder();
271 val inetAddress = sourceAction.address;
272 address = inetAddress.toInetAddress;
273 actionBuilder.action = it.build();
274 return actionBuilder.build();
277 public static dispatch def toAction(SetNwTos sourceAction) {
278 val actionBuilder = new ActionBuilder();
279 val it = new SetNwTosActionBuilder();
280 tos = sourceAction.nwTos;
281 actionBuilder.action = it.build();
282 return actionBuilder.build();
285 public static dispatch def toAction(SetTpDst sourceAction) {
286 val actionBuilder = new ActionBuilder();
287 val it = new SetTpDstActionBuilder();
288 port = new PortNumber(sourceAction.port);
289 actionBuilder.action = it.build();
290 return actionBuilder.build();
293 public static dispatch def toAction(SetTpSrc sourceAction) {
294 val actionBuilder = new ActionBuilder();
295 val it = new SetTpSrcActionBuilder();
296 port = new PortNumber(sourceAction.port);
297 actionBuilder.action = it.build();
298 return actionBuilder.build();
301 public static dispatch def toAction(SetVlanCfi sourceAction) {
302 val actionBuilder = new ActionBuilder();
303 val it = new SetVlanCfiActionBuilder();
304 vlanCfi = new VlanCfi(sourceAction.cfi);
305 actionBuilder.action = it.build();
306 return actionBuilder.build();
309 public static dispatch def toAction(SetVlanId sourceAction) {
310 val actionBuilder = new ActionBuilder();
312 val it = new SetVlanIdActionBuilder();
313 vlanId = new VlanId(sourceAction.vlanId);
314 actionBuilder.action = it.build();
315 return actionBuilder.build();
318 public static dispatch def toAction(SetVlanPcp sourceAction) {
319 val actionBuilder = new ActionBuilder();
320 val it = new SetVlanPcpActionBuilder();
321 vlanPcp = new VlanPcp(sourceAction.pcp as short);
322 actionBuilder.action = it.build();
323 return actionBuilder.build();
326 public static dispatch def toAction(SwPath sourceAction) {
327 val actionBuilder = new ActionBuilder();
328 actionBuilder.action = new SwPathActionBuilder().build();
329 return actionBuilder.build();
332 public static def dispatch Address toInetAddress(Inet4Address address) {
333 val it = new Ipv4Builder
334 ipv4Address = new Ipv4Prefix(InetAddresses.toAddrString(address))
338 public static def dispatch Address toInetAddress(Inet6Address address) {
339 val it = new Ipv6Builder
340 ipv6Address = new Ipv6Prefix(InetAddresses.toAddrString(address))
344 public static def List<Uri> toUriList(NodeConnector connector) {
345 throw new UnsupportedOperationException("TODO: auto-generated method stub")
348 public static def MacAddress toMacAddress(byte[] bytes) {
349 val sb = new StringBuilder(18);
350 for (byte b : bytes) {
353 sb.append(String.format("%02x", b));
355 return new MacAddress(sb.toString());