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.SetField;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetFieldBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActions;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.ProtocolMatchFieldsBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.TunnelBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.protocol.match.fields.PbbBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatchBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCaseBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropAction;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropActionBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.field._case.SetFieldActionBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.OfjNxActionOutputRegGrouping;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionOutputRegBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg1;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionOutputRegRpcAddGroupCase;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionOutputRegRpcAddGroupCaseBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionResubmitRpcAddGroupCaseBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionOutputRegNodesNodeGroupBucketsBucketActionsCase;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionOutputRegNodesNodeGroupBucketsBucketActionsCaseBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionRegLoadNodesNodeGroupBucketsBucketActionsCaseBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionOutputRegNodesNodeTableFlowApplyActionsCaseBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.output.reg.grouping.NxOutputReg;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.output.reg.grouping.NxOutputRegBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.resubmit.grouping.NxResubmitBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.src.choice.SrcNxRegCaseBuilder;
80 public enum ActionType {
83 public Action buildAction(ActionInfo actionInfo) {
84 long groupId = Long.parseLong(actionInfo.getActionValues()[0]);
86 return new ActionBuilder().setAction(
87 new GroupActionCaseBuilder().setGroupAction(
88 new GroupActionBuilder().setGroupId(groupId).build()).build())
89 .setKey(new ActionKey(actionInfo.getActionKey())).build();
95 public Action buildAction(ActionInfo actionInfo) {
96 String[] actionValues = actionInfo.getActionValues();
97 String port = actionValues[0];
100 if (actionValues.length == 2) {
101 maxLength = Integer.valueOf(actionValues[1]);
104 return new ActionBuilder().setAction(
105 new OutputActionCaseBuilder().setOutputAction(
106 new OutputActionBuilder().setMaxLength(Integer.valueOf(maxLength))
107 .setOutputNodeConnector(new Uri(port)).build()).build())
108 .setKey(new ActionKey(actionInfo.getActionKey())).build();
114 public Action buildAction(ActionInfo actionInfo) {
115 return new ActionBuilder().setAction(
116 new PopMplsActionCaseBuilder().setPopMplsAction(
117 new PopMplsActionBuilder().setEthernetType(
118 Integer.valueOf(NwConstants.ETHTYPE_IPV4)).build()).build())
120 .setKey(new ActionKey(actionInfo.getActionKey())).build();
126 public Action buildAction(ActionInfo actionInfo) {
127 return new ActionBuilder()
128 .setAction(new PopPbbActionCaseBuilder().setPopPbbAction(new PopPbbActionBuilder().build()).build())
129 .setKey(new ActionKey(actionInfo.getActionKey())).build();
135 public Action buildAction(ActionInfo actionInfo) {
136 return new ActionBuilder().setAction(
137 new PopVlanActionCaseBuilder().setPopVlanAction(new PopVlanActionBuilder().build()).build())
138 .setKey(new ActionKey(actionInfo.getActionKey())).build();
144 public Action buildAction(ActionInfo actionInfo) {
145 return new ActionBuilder().setAction(new PushMplsActionCaseBuilder().setPushMplsAction(
146 new PushMplsActionBuilder().setEthernetType(
147 Integer.valueOf(NwConstants.ETHTYPE_MPLS_UC)).build()).build())
148 .setKey(new ActionKey(actionInfo.getActionKey())).build();
154 public Action buildAction(ActionInfo actionInfo) {
155 return new ActionBuilder().setAction(
156 new PushPbbActionCaseBuilder().setPushPbbAction(
157 new PushPbbActionBuilder()
158 .setEthernetType(Integer.valueOf(NwConstants.ETHTYPE_PBB)).build()).build())
159 .setKey(new ActionKey(actionInfo.getActionKey())).build();
165 public Action buildAction(ActionInfo actionInfo) {
166 return new ActionBuilder().setAction(
167 new PushVlanActionCaseBuilder().setPushVlanAction(
168 new PushVlanActionBuilder().setEthernetType(
169 Integer.valueOf(NwConstants.ETHTYPE_802_1Q)).build()).build())
170 .setKey(new ActionKey(actionInfo.getActionKey())).build();
174 set_field_mpls_label {
176 public Action buildAction(ActionInfo actionInfo) {
177 String[] actionValues = actionInfo.getActionValues();
178 long label = Long.valueOf(actionValues[0]);
180 return new ActionBuilder().setAction(
181 new SetFieldCaseBuilder().setSetField(new SetFieldBuilder().setProtocolMatchFields(
182 new ProtocolMatchFieldsBuilder().setMplsLabel(label).build()).build())
183 .build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
189 public Action buildAction(ActionInfo actionInfo) {
190 String[] actionValues = actionInfo.getActionValues();
191 long label = Long.valueOf(actionValues[0]);
193 return new ActionBuilder().setAction(
194 new SetFieldCaseBuilder().setSetField(
195 new SetFieldBuilder().setProtocolMatchFields(
196 new ProtocolMatchFieldsBuilder().setPbb(
197 new PbbBuilder().setPbbIsid(label).build()).build()).build())
198 .build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
204 public Action buildAction(ActionInfo actionInfo) {
205 String[] actionValues = actionInfo.getActionValues();
206 int vlanId = Integer.valueOf(actionValues[0]);
208 return new ActionBuilder().setAction(
209 new SetFieldCaseBuilder().setSetField(
210 new SetFieldBuilder().setVlanMatch(
211 new VlanMatchBuilder().setVlanId(
212 new VlanIdBuilder().setVlanId(new VlanId(vlanId))
213 .setVlanIdPresent(true).build()).build()).build()).build())
214 .setKey(new ActionKey(actionInfo.getActionKey())).build();
218 set_field_tunnel_id {
220 public Action buildAction(ActionInfo actionInfo) {
221 BigInteger [] actionValues = actionInfo.getBigActionValues();
222 if (actionValues.length == 2) {
223 return new ActionBuilder().setAction(
224 new SetFieldCaseBuilder().setSetField(
225 new SetFieldBuilder()
226 .setTunnel(new TunnelBuilder().setTunnelId(actionValues[0])
227 .setTunnelMask(actionValues[1]).build()).build())
229 .setKey(new ActionKey(actionInfo.getActionKey())).build();
231 return new ActionBuilder().setAction(
232 new SetFieldCaseBuilder().setSetField(
233 new SetFieldBuilder()
234 .setTunnel(new TunnelBuilder().setTunnelId(actionValues[0])
237 .setKey(new ActionKey(actionInfo.getActionKey())).build();
247 public Action buildAction(ActionInfo actionInfo) {
248 String[] actionValues = actionInfo.getActionValues();
249 MacAddress mac = new MacAddress(actionValues[0]);
251 return new ActionBuilder().setAction(
252 new SetFieldCaseBuilder().setSetField(
253 new SetFieldBuilder().setEthernetMatch(
254 new EthernetMatchBuilder().setEthernetDestination(
255 new EthernetDestinationBuilder().setAddress(mac).build()).build())
256 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
265 public Action buildAction(ActionInfo actionInfo) {
266 return new ActionBuilder().setAction(
267 new SetFieldCaseBuilder().setSetField(
268 new SetFieldBuilder().setIpMatch(
269 new IpMatchBuilder().setIpProtocol((short) 17).build()).
270 build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
277 public Action buildAction(ActionInfo actionInfo) {
278 ActionBuilder ab = new ActionBuilder();
279 OutputActionBuilder output = new OutputActionBuilder();
280 output.setMaxLength(0xffff);
281 Uri value = new Uri(OutputPortValues.CONTROLLER.toString());
282 output.setOutputNodeConnector(value);
283 ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
284 ab.setKey(new ActionKey(actionInfo.getActionKey()));
289 set_destination_port_field {
292 public Action buildAction(ActionInfo actionInfo) {
293 String[] actionValues = actionInfo.getActionValues();
294 Integer portNumber = new Integer(actionValues[0]);
296 return new ActionBuilder().setAction(
297 new SetFieldCaseBuilder().setSetField(
298 new SetFieldBuilder().setLayer4Match(
299 new UdpMatchBuilder().setUdpDestinationPort(
300 new PortNumber(portNumber)).build())
301 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
306 set_source_port_field {
309 public Action buildAction(ActionInfo actionInfo) {
310 String[] actionValues = actionInfo.getActionValues();
311 Integer portNumber = new Integer(actionValues[0]);
313 return new ActionBuilder().setAction(
314 new SetFieldCaseBuilder().setSetField(
315 new SetFieldBuilder().setLayer4Match(
316 new UdpMatchBuilder().setUdpSourcePort(
317 new PortNumber(portNumber)).build())
318 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
326 public Action buildAction(ActionInfo actionInfo) {
327 String[] actionValues = actionInfo.getActionValues();
328 InetAddress sourceIp = null;
330 sourceIp = InetAddress.getByName(actionValues[0]);
331 } catch (Exception e){
334 return new ActionBuilder().setAction(
335 new SetFieldCaseBuilder().setSetField(
336 new SetFieldBuilder().setLayer3Match(
337 new Ipv4MatchBuilder().setIpv4Source(
338 new Ipv4Prefix(sourceIp.getHostAddress())).build()).
339 build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
347 public Action buildAction(ActionInfo actionInfo) {
348 String[] actionValues = actionInfo.getActionValues();
349 InetAddress sourceIp = null;
351 sourceIp = InetAddress.getByName(actionValues[0]);
352 } catch (Exception e){
355 return new ActionBuilder().setAction(
356 new SetFieldCaseBuilder().setSetField(
357 new SetFieldBuilder().setLayer3Match(
358 new Ipv4MatchBuilder().setIpv4Destination(
359 new Ipv4Prefix(sourceIp.getHostAddress())).build()).
360 build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
368 public Action buildAction(ActionInfo actionInfo) {
369 String[] actionValues = actionInfo.getActionValues();
370 MacAddress mac = new MacAddress(actionValues[0]);
372 return new ActionBuilder().setAction(
373 new SetFieldCaseBuilder().setSetField(
374 new SetFieldBuilder().setEthernetMatch(
375 new EthernetMatchBuilder().setEthernetSource(
376 new EthernetSourceBuilder().setAddress(mac).build()).build())
377 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
385 public Action buildAction(ActionInfo actionInfo) {
386 DropActionBuilder dab = new DropActionBuilder();
387 DropAction dropAction = dab.build();
388 ActionBuilder ab = new ActionBuilder();
389 ab.setAction(new DropActionCaseBuilder().setDropAction(dropAction).build());
390 ab.setKey(new ActionKey(actionInfo.getActionKey())).build();
397 public Action buildAction(ActionInfo actionInfo) {
398 ActionBuilder ab = new ActionBuilder();
399 String[] actionValues = actionInfo.getActionValues();
400 NxOutputReg r = new NxOutputRegBuilder().setSrc(
401 new org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.output.reg.grouping.nx.output.reg.SrcBuilder().setSrcChoice(
402 new SrcNxRegCaseBuilder().setNxReg(NxmNxReg1.class).build())
403 .setOfsNbits(Integer.valueOf(Integer.parseInt(actionValues[0])))
405 .setMaxLen(Integer.valueOf(0xffff))
407 ab.setAction(new NxActionOutputRegNodesNodeGroupBucketsBucketActionsCaseBuilder().setNxOutputReg(r).build());
408 ab.setKey(new ActionKey(actionInfo.getActionKey()));
418 public Action buildAction(ActionInfo actionInfo) {
419 NxResubmitBuilder nxarsb = new NxResubmitBuilder();
420 nxarsb.setTable((short) 55);
421 ActionBuilder ab = new ActionBuilder();
422 ab.setAction(new NxActionResubmitRpcAddGroupCaseBuilder().setNxResubmit(nxarsb.build()).build());
423 ab.setKey(new ActionKey(actionInfo.getActionKey()));
431 public Action buildAction(ActionInfo actionInfo) {
432 ActionBuilder ab = new ActionBuilder();
437 private static final int RADIX_HEX = 16;
438 public abstract Action buildAction(ActionInfo actionInfo);