2 * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice.mdsalutil;
10 import java.math.BigInteger;
11 import java.net.InetAddress;
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.pbb.action._case.PopPbbActionBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsActionBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.pbb.action._case.PushPbbActionBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetFieldBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.ProtocolMatchFieldsBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.TunnelBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.protocol.match.fields.PbbBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
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.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatchBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatchBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCaseBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropAction;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropActionBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionResubmitRpcAddGroupCaseBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.resubmit.grouping.NxResubmitBuilder;
58 public enum ActionType {
61 public Action buildAction(ActionInfo actionInfo) {
62 long groupId = Long.parseLong(actionInfo.getActionValues()[0]);
64 return new ActionBuilder().setAction(
65 new GroupActionCaseBuilder().setGroupAction(
66 new GroupActionBuilder().setGroupId(groupId).build()).build())
67 .setKey(new ActionKey(actionInfo.getActionKey())).build();
73 public Action buildAction(ActionInfo actionInfo) {
74 String[] actionValues = actionInfo.getActionValues();
75 String port = actionValues[0];
78 if (actionValues.length == 2) {
79 maxLength = Integer.valueOf(actionValues[1]);
82 return new ActionBuilder().setAction(
83 new OutputActionCaseBuilder().setOutputAction(
84 new OutputActionBuilder().setMaxLength(Integer.valueOf(maxLength))
85 .setOutputNodeConnector(new Uri(port)).build()).build())
86 .setKey(new ActionKey(actionInfo.getActionKey())).build();
92 public Action buildAction(ActionInfo actionInfo) {
93 return new ActionBuilder().setAction(
94 new PopMplsActionCaseBuilder().setPopMplsAction(
95 new PopMplsActionBuilder().setEthernetType(
96 Integer.valueOf(NwConstants.ETHTYPE_IPV4)).build()).build())
98 .setKey(new ActionKey(actionInfo.getActionKey())).build();
104 public Action buildAction(ActionInfo actionInfo) {
105 return new ActionBuilder()
106 .setAction(new PopPbbActionCaseBuilder().setPopPbbAction(new PopPbbActionBuilder().build()).build())
107 .setKey(new ActionKey(actionInfo.getActionKey())).build();
113 public Action buildAction(ActionInfo actionInfo) {
114 return new ActionBuilder().setAction(
115 new PopVlanActionCaseBuilder().setPopVlanAction(new PopVlanActionBuilder().build()).build())
116 .setKey(new ActionKey(actionInfo.getActionKey())).build();
122 public Action buildAction(ActionInfo actionInfo) {
123 return new ActionBuilder().setAction(new PushMplsActionCaseBuilder().setPushMplsAction(
124 new PushMplsActionBuilder().setEthernetType(
125 Integer.valueOf(NwConstants.ETHTYPE_MPLS_UC)).build()).build())
126 .setKey(new ActionKey(actionInfo.getActionKey())).build();
132 public Action buildAction(ActionInfo actionInfo) {
133 return new ActionBuilder().setAction(
134 new PushPbbActionCaseBuilder().setPushPbbAction(
135 new PushPbbActionBuilder()
136 .setEthernetType(Integer.valueOf(NwConstants.ETHTYPE_PBB)).build()).build())
137 .setKey(new ActionKey(actionInfo.getActionKey())).build();
143 public Action buildAction(ActionInfo actionInfo) {
144 return new ActionBuilder().setAction(
145 new PushVlanActionCaseBuilder().setPushVlanAction(
146 new PushVlanActionBuilder().setEthernetType(
147 Integer.valueOf(NwConstants.ETHTYPE_802_1Q)).build()).build())
148 .setKey(new ActionKey(actionInfo.getActionKey())).build();
152 set_field_mpls_label {
154 public Action buildAction(ActionInfo actionInfo) {
155 String[] actionValues = actionInfo.getActionValues();
156 long label = Long.valueOf(actionValues[0]);
158 return new ActionBuilder().setAction(
159 new SetFieldCaseBuilder().setSetField(new SetFieldBuilder().setProtocolMatchFields(
160 new ProtocolMatchFieldsBuilder().setMplsLabel(label).build()).build())
161 .build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
167 public Action buildAction(ActionInfo actionInfo) {
168 String[] actionValues = actionInfo.getActionValues();
169 long label = Long.valueOf(actionValues[0]);
171 return new ActionBuilder().setAction(
172 new SetFieldCaseBuilder().setSetField(
173 new SetFieldBuilder().setProtocolMatchFields(
174 new ProtocolMatchFieldsBuilder().setPbb(
175 new PbbBuilder().setPbbIsid(label).build()).build()).build())
176 .build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
182 public Action buildAction(ActionInfo actionInfo) {
183 String[] actionValues = actionInfo.getActionValues();
184 int vlanId = Integer.valueOf(actionValues[0]);
186 return new ActionBuilder().setAction(
187 new SetFieldCaseBuilder().setSetField(
188 new SetFieldBuilder().setVlanMatch(
189 new VlanMatchBuilder().setVlanId(
190 new VlanIdBuilder().setVlanId(new VlanId(vlanId))
191 .setVlanIdPresent(true).build()).build()).build()).build())
192 .setKey(new ActionKey(actionInfo.getActionKey())).build();
196 set_field_tunnel_id {
198 public Action buildAction(ActionInfo actionInfo) {
199 BigInteger [] actionValues = actionInfo.getBigActionValues();
200 if (actionValues.length == 2) {
201 return new ActionBuilder().setAction(
202 new SetFieldCaseBuilder().setSetField(
203 new SetFieldBuilder()
204 .setTunnel(new TunnelBuilder().setTunnelId(actionValues[0])
205 .setTunnelMask(actionValues[1]).build()).build())
207 .setKey(new ActionKey(actionInfo.getActionKey())).build();
209 return new ActionBuilder().setAction(
210 new SetFieldCaseBuilder().setSetField(
211 new SetFieldBuilder()
212 .setTunnel(new TunnelBuilder().setTunnelId(actionValues[0])
215 .setKey(new ActionKey(actionInfo.getActionKey())).build();
225 public Action buildAction(ActionInfo actionInfo) {
226 String[] actionValues = actionInfo.getActionValues();
227 MacAddress mac = new MacAddress(actionValues[0]);
229 return new ActionBuilder().setAction(
230 new SetFieldCaseBuilder().setSetField(
231 new SetFieldBuilder().setEthernetMatch(
232 new EthernetMatchBuilder().setEthernetDestination(
233 new EthernetDestinationBuilder().setAddress(mac).build()).build())
234 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
243 public Action buildAction(ActionInfo actionInfo) {
244 return new ActionBuilder().setAction(
245 new SetFieldCaseBuilder().setSetField(
246 new SetFieldBuilder().setIpMatch(
247 new IpMatchBuilder().setIpProtocol((short) 17).build()).
248 build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
255 public Action buildAction(ActionInfo actionInfo) {
256 ActionBuilder ab = new ActionBuilder();
257 OutputActionBuilder output = new OutputActionBuilder();
258 output.setMaxLength(0xffff);
259 Uri value = new Uri(OutputPortValues.CONTROLLER.toString());
260 output.setOutputNodeConnector(value);
261 ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
262 ab.setKey(new ActionKey(actionInfo.getActionKey()));
267 set_udp_destination_port {
270 public Action buildAction(ActionInfo actionInfo) {
271 String[] actionValues = actionInfo.getActionValues();
272 Integer portNumber = new Integer(actionValues[0]);
274 return new ActionBuilder().setAction(
275 new SetFieldCaseBuilder().setSetField(
276 new SetFieldBuilder().setLayer4Match(
277 new UdpMatchBuilder().setUdpDestinationPort(
278 new PortNumber(portNumber)).build())
279 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
284 set_udp_source_port {
287 public Action buildAction(ActionInfo actionInfo) {
288 String[] actionValues = actionInfo.getActionValues();
289 Integer portNumber = new Integer(actionValues[0]);
291 return new ActionBuilder().setAction(
292 new SetFieldCaseBuilder().setSetField(
293 new SetFieldBuilder().setLayer4Match(
294 new UdpMatchBuilder().setUdpSourcePort(
295 new PortNumber(portNumber)).build())
296 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
301 set_tcp_destination_port {
304 public Action buildAction(ActionInfo actionInfo) {
305 String[] actionValues = actionInfo.getActionValues();
306 Integer portNumber = new Integer(actionValues[0]);
308 return new ActionBuilder().setAction(
309 new SetFieldCaseBuilder().setSetField(
310 new SetFieldBuilder().setLayer4Match(
311 new TcpMatchBuilder().setTcpDestinationPort(
312 new PortNumber(portNumber)).build())
313 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
318 set_tcp_source_port {
321 public Action buildAction(ActionInfo actionInfo) {
322 String[] actionValues = actionInfo.getActionValues();
323 Integer portNumber = new Integer(actionValues[0]);
325 return new ActionBuilder().setAction(
326 new SetFieldCaseBuilder().setSetField(
327 new SetFieldBuilder().setLayer4Match(
328 new TcpMatchBuilder().setTcpSourcePort(
329 new PortNumber(portNumber)).build())
330 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
338 public Action buildAction(ActionInfo actionInfo) {
339 String[] actionValues = actionInfo.getActionValues();
340 InetAddress sourceIp = null;
342 sourceIp = InetAddress.getByName(actionValues[0]);
343 } catch (Exception e){
346 return new ActionBuilder().setAction(
347 new SetFieldCaseBuilder().setSetField(
348 new SetFieldBuilder().setLayer3Match(
349 new Ipv4MatchBuilder().setIpv4Source(
350 new Ipv4Prefix(sourceIp.getHostAddress() + "/" + actionValues[1])).build()).
351 build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
359 public Action buildAction(ActionInfo actionInfo) {
360 String[] actionValues = actionInfo.getActionValues();
361 InetAddress sourceIp = null;
363 sourceIp = InetAddress.getByName(actionValues[0]);
364 } catch (Exception e){
367 return new ActionBuilder().setAction(
368 new SetFieldCaseBuilder().setSetField(
369 new SetFieldBuilder().setLayer3Match(
370 new Ipv4MatchBuilder().setIpv4Destination(
371 new Ipv4Prefix(sourceIp.getHostAddress() + "/" + actionValues[1])).build()).
372 build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
380 public Action buildAction(ActionInfo actionInfo) {
381 String[] actionValues = actionInfo.getActionValues();
382 MacAddress mac = new MacAddress(actionValues[0]);
384 return new ActionBuilder().setAction(
385 new SetFieldCaseBuilder().setSetField(
386 new SetFieldBuilder().setEthernetMatch(
387 new EthernetMatchBuilder().setEthernetSource(
388 new EthernetSourceBuilder().setAddress(mac).build()).build())
389 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
397 public Action buildAction(ActionInfo actionInfo) {
398 DropActionBuilder dab = new DropActionBuilder();
399 DropAction dropAction = dab.build();
400 ActionBuilder ab = new ActionBuilder();
401 ab.setAction(new DropActionCaseBuilder().setDropAction(dropAction).build());
402 ab.setKey(new ActionKey(actionInfo.getActionKey())).build();
410 public Action buildAction(ActionInfo actionInfo) {
411 String[] actionValues = actionInfo.getActionValues();
412 NxResubmitBuilder nxarsb = new NxResubmitBuilder();
413 nxarsb.setTable(Short.parseShort(actionValues[0]));
414 ActionBuilder ab = new ActionBuilder();
415 ab.setAction(new NxActionResubmitRpcAddGroupCaseBuilder().setNxResubmit(nxarsb.build()).build());
416 ab.setKey(new ActionKey(actionInfo.getActionKey()));
424 public Action buildAction(ActionInfo actionInfo) {
425 ActionBuilder ab = new ActionBuilder();
430 private static final int RADIX_HEX = 16;
431 public abstract Action buildAction(ActionInfo actionInfo);