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.ericsson.experimenter.action.types.rev140228.EricFilterTypes;
14 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.action.types.action.action.ExperimenterActionTypeBuilder;
15 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.action.types.action.action.experimenter.action.type.action.type.FilterTypesActionBuilder;
16 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.filter.types.group.Metadata;
17 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.filter.types.group.MetadataBuilder;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.pbb.action._case.PopPbbActionBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsActionBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.pbb.action._case.PushPbbActionBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetFieldBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
42 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.flow.types.rev140422.EricssonPortTypes;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.ProtocolMatchFieldsBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.TunnelBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.protocol.match.fields.PbbBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatchBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;
65 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.action.types.action.action.ExperimenterActionTypeBuilder;
66 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.action.types.action.action.experimenter.action.type.action.type.VxlanPopActionBuilder;
67 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.action.types.action.action.experimenter.action.type.action.type.VxlanPushActionBuilder;
68 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.action.types.action.action.experimenter.action.type.action.type.GrePopActionBuilder;
69 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.action.types.action.action.experimenter.action.type.action.type.GrePushActionBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCaseBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropAction;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropActionBuilder;
74 public enum ActionType {
77 public Action buildAction(ActionInfo actionInfo) {
78 long groupId = Long.parseLong(actionInfo.getActionValues()[0]);
80 return new ActionBuilder().setAction(
81 new GroupActionCaseBuilder().setGroupAction(
82 new GroupActionBuilder().setGroupId(groupId).build()).build())
83 .setKey(new ActionKey(actionInfo.getActionKey())).build();
89 public Action buildAction(ActionInfo actionInfo) {
90 String[] actionValues = actionInfo.getActionValues();
91 String port = actionValues[0];
94 if (actionValues.length == 2) {
95 maxLength = Integer.valueOf(actionValues[1]);
98 return new ActionBuilder().setAction(
99 new OutputActionCaseBuilder().setOutputAction(
100 new OutputActionBuilder().setMaxLength(Integer.valueOf(maxLength))
101 .setOutputNodeConnector(new Uri(port)).build()).build())
102 .setKey(new ActionKey(actionInfo.getActionKey())).build();
108 public Action buildAction(ActionInfo actionInfo) {
109 return new ActionBuilder().setAction(
110 new PopMplsActionCaseBuilder().setPopMplsAction(
111 new PopMplsActionBuilder().setEthernetType(
112 Integer.valueOf(NwConstants.ETHTYPE_IPV4)).build()).build())
114 .setKey(new ActionKey(actionInfo.getActionKey())).build();
120 public Action buildAction(ActionInfo actionInfo) {
121 return new ActionBuilder()
122 .setAction(new PopPbbActionCaseBuilder().setPopPbbAction(new PopPbbActionBuilder().build()).build())
123 .setKey(new ActionKey(actionInfo.getActionKey())).build();
129 public Action buildAction(ActionInfo actionInfo) {
130 return new ActionBuilder().setAction(
131 new PopVlanActionCaseBuilder().setPopVlanAction(new PopVlanActionBuilder().build()).build())
132 .setKey(new ActionKey(actionInfo.getActionKey())).build();
138 public Action buildAction(ActionInfo actionInfo) {
139 return new ActionBuilder().setAction(new PushMplsActionCaseBuilder().setPushMplsAction(
140 new PushMplsActionBuilder().setEthernetType(
141 Integer.valueOf(NwConstants.ETHTYPE_MPLS_UC)).build()).build())
142 .setKey(new ActionKey(actionInfo.getActionKey())).build();
148 public Action buildAction(ActionInfo actionInfo) {
149 return new ActionBuilder().setAction(
150 new PushPbbActionCaseBuilder().setPushPbbAction(
151 new PushPbbActionBuilder()
152 .setEthernetType(Integer.valueOf(NwConstants.ETHTYPE_PBB)).build()).build())
153 .setKey(new ActionKey(actionInfo.getActionKey())).build();
159 public Action buildAction(ActionInfo actionInfo) {
160 return new ActionBuilder().setAction(
161 new PushVlanActionCaseBuilder().setPushVlanAction(
162 new PushVlanActionBuilder().setEthernetType(
163 Integer.valueOf(NwConstants.ETHTYPE_802_1Q)).build()).build())
164 .setKey(new ActionKey(actionInfo.getActionKey())).build();
168 set_field_mpls_label {
170 public Action buildAction(ActionInfo actionInfo) {
171 String[] actionValues = actionInfo.getActionValues();
172 long label = Long.valueOf(actionValues[0]);
174 return new ActionBuilder().setAction(
175 new SetFieldCaseBuilder().setSetField(new SetFieldBuilder().setProtocolMatchFields(
176 new ProtocolMatchFieldsBuilder().setMplsLabel(label).build()).build())
177 .build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
183 public Action buildAction(ActionInfo actionInfo) {
184 String[] actionValues = actionInfo.getActionValues();
185 long label = Long.valueOf(actionValues[0]);
187 return new ActionBuilder().setAction(
188 new SetFieldCaseBuilder().setSetField(
189 new SetFieldBuilder().setProtocolMatchFields(
190 new ProtocolMatchFieldsBuilder().setPbb(
191 new PbbBuilder().setPbbIsid(label).build()).build()).build())
192 .build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
198 public Action buildAction(ActionInfo actionInfo) {
199 String[] actionValues = actionInfo.getActionValues();
200 int vlanId = Integer.valueOf(actionValues[0]);
202 return new ActionBuilder().setAction(
203 new SetFieldCaseBuilder().setSetField(
204 new SetFieldBuilder().setVlanMatch(
205 new VlanMatchBuilder().setVlanId(
206 new VlanIdBuilder().setVlanId(new VlanId(vlanId))
207 .setVlanIdPresent(true).build()).build()).build()).build())
208 .setKey(new ActionKey(actionInfo.getActionKey())).build();
212 set_field_tunnel_id {
214 public Action buildAction(ActionInfo actionInfo) {
215 BigInteger [] actionValues = actionInfo.getBigActionValues();
216 return new ActionBuilder().setAction(
217 new SetFieldCaseBuilder().setSetField(
218 new SetFieldBuilder().setTunnel(new TunnelBuilder().setTunnelId(actionValues[0])
219 .setTunnelMask(actionValues[1]).build()).build()).build())
220 .setKey(new ActionKey(actionInfo.getActionKey())).build();
229 public Action buildAction(ActionInfo actionInfo) {
230 String[] actionValues = actionInfo.getActionValues();
231 MacAddress mac = new MacAddress(actionValues[0]);
233 return new ActionBuilder().setAction(
234 new SetFieldCaseBuilder().setSetField(
235 new SetFieldBuilder().setEthernetMatch(
236 new EthernetMatchBuilder().setEthernetDestination(
237 new EthernetDestinationBuilder().setAddress(mac).build()).build())
238 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
247 public Action buildAction(ActionInfo actionInfo) {
248 return new ActionBuilder().setAction(
249 new SetFieldCaseBuilder().setSetField(
250 new SetFieldBuilder().setIpMatch(
251 new IpMatchBuilder().setIpProtocol((short) 17).build()).
252 build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
259 public Action buildAction(ActionInfo actionInfo) {
260 ActionBuilder ab = new ActionBuilder();
261 OutputActionBuilder output = new OutputActionBuilder();
262 output.setMaxLength(0xffff);
263 Uri value = new Uri(OutputPortValues.CONTROLLER.toString());
264 output.setOutputNodeConnector(value);
265 ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
266 ab.setKey(new ActionKey(actionInfo.getActionKey()));
271 set_destination_port_field {
274 public Action buildAction(ActionInfo actionInfo) {
275 String[] actionValues = actionInfo.getActionValues();
276 Integer portNumber = new Integer(actionValues[0]);
278 return new ActionBuilder().setAction(
279 new SetFieldCaseBuilder().setSetField(
280 new SetFieldBuilder().setLayer4Match(
281 new UdpMatchBuilder().setUdpDestinationPort(
282 new PortNumber(portNumber)).build())
283 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
288 set_source_port_field {
291 public Action buildAction(ActionInfo actionInfo) {
292 String[] actionValues = actionInfo.getActionValues();
293 Integer portNumber = new Integer(actionValues[0]);
295 return new ActionBuilder().setAction(
296 new SetFieldCaseBuilder().setSetField(
297 new SetFieldBuilder().setLayer4Match(
298 new UdpMatchBuilder().setUdpSourcePort(
299 new PortNumber(portNumber)).build())
300 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
308 public Action buildAction(ActionInfo actionInfo) {
309 String[] actionValues = actionInfo.getActionValues();
310 InetAddress sourceIp = null;
312 sourceIp = InetAddress.getByName(actionValues[0]);
313 } catch (Exception e){
316 return new ActionBuilder().setAction(
317 new SetFieldCaseBuilder().setSetField(
318 new SetFieldBuilder().setLayer3Match(
319 new Ipv4MatchBuilder().setIpv4Source(
320 new Ipv4Prefix(sourceIp.getHostAddress())).build()).
321 build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
329 public Action buildAction(ActionInfo actionInfo) {
330 String[] actionValues = actionInfo.getActionValues();
331 InetAddress sourceIp = null;
333 sourceIp = InetAddress.getByName(actionValues[0]);
334 } catch (Exception e){
337 return new ActionBuilder().setAction(
338 new SetFieldCaseBuilder().setSetField(
339 new SetFieldBuilder().setLayer3Match(
340 new Ipv4MatchBuilder().setIpv4Destination(
341 new Ipv4Prefix(sourceIp.getHostAddress())).build()).
342 build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
350 public Action buildAction(ActionInfo actionInfo) {
351 String[] actionValues = actionInfo.getActionValues();
352 MacAddress mac = new MacAddress(actionValues[0]);
354 return new ActionBuilder().setAction(
355 new SetFieldCaseBuilder().setSetField(
356 new SetFieldBuilder().setEthernetMatch(
357 new EthernetMatchBuilder().setEthernetSource(
358 new EthernetSourceBuilder().setAddress(mac).build()).build())
359 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
366 public Action buildAction(ActionInfo actionInfo) {
367 DropActionBuilder dab = new DropActionBuilder();
368 DropAction dropAction = dab.build();
369 ActionBuilder ab = new ActionBuilder();
370 ab.setAction(new DropActionCaseBuilder().setDropAction(dropAction).build());
377 public Action buildAction(ActionInfo actionInfo) {
378 ActionBuilder ab = new ActionBuilder();
383 private static final int RADIX_HEX = 16;
384 public abstract Action buildAction(ActionInfo actionInfo);