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 if (actionValues.length == 2) {
217 return new ActionBuilder().setAction(
218 new SetFieldCaseBuilder().setSetField(
219 new SetFieldBuilder()
220 .setTunnel(new TunnelBuilder().setTunnelId(actionValues[0])
221 .setTunnelMask(actionValues[1]).build()).build())
223 .setKey(new ActionKey(actionInfo.getActionKey())).build();
225 return new ActionBuilder().setAction(
226 new SetFieldCaseBuilder().setSetField(
227 new SetFieldBuilder()
228 .setTunnel(new TunnelBuilder().setTunnelId(actionValues[0])
231 .setKey(new ActionKey(actionInfo.getActionKey())).build();
241 public Action buildAction(ActionInfo actionInfo) {
242 String[] actionValues = actionInfo.getActionValues();
243 MacAddress mac = new MacAddress(actionValues[0]);
245 return new ActionBuilder().setAction(
246 new SetFieldCaseBuilder().setSetField(
247 new SetFieldBuilder().setEthernetMatch(
248 new EthernetMatchBuilder().setEthernetDestination(
249 new EthernetDestinationBuilder().setAddress(mac).build()).build())
250 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
259 public Action buildAction(ActionInfo actionInfo) {
260 return new ActionBuilder().setAction(
261 new SetFieldCaseBuilder().setSetField(
262 new SetFieldBuilder().setIpMatch(
263 new IpMatchBuilder().setIpProtocol((short) 17).build()).
264 build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
271 public Action buildAction(ActionInfo actionInfo) {
272 ActionBuilder ab = new ActionBuilder();
273 OutputActionBuilder output = new OutputActionBuilder();
274 output.setMaxLength(0xffff);
275 Uri value = new Uri(OutputPortValues.CONTROLLER.toString());
276 output.setOutputNodeConnector(value);
277 ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
278 ab.setKey(new ActionKey(actionInfo.getActionKey()));
283 set_destination_port_field {
286 public Action buildAction(ActionInfo actionInfo) {
287 String[] actionValues = actionInfo.getActionValues();
288 Integer portNumber = new Integer(actionValues[0]);
290 return new ActionBuilder().setAction(
291 new SetFieldCaseBuilder().setSetField(
292 new SetFieldBuilder().setLayer4Match(
293 new UdpMatchBuilder().setUdpDestinationPort(
294 new PortNumber(portNumber)).build())
295 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
300 set_source_port_field {
303 public Action buildAction(ActionInfo actionInfo) {
304 String[] actionValues = actionInfo.getActionValues();
305 Integer portNumber = new Integer(actionValues[0]);
307 return new ActionBuilder().setAction(
308 new SetFieldCaseBuilder().setSetField(
309 new SetFieldBuilder().setLayer4Match(
310 new UdpMatchBuilder().setUdpSourcePort(
311 new PortNumber(portNumber)).build())
312 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
320 public Action buildAction(ActionInfo actionInfo) {
321 String[] actionValues = actionInfo.getActionValues();
322 InetAddress sourceIp = null;
324 sourceIp = InetAddress.getByName(actionValues[0]);
325 } catch (Exception e){
328 return new ActionBuilder().setAction(
329 new SetFieldCaseBuilder().setSetField(
330 new SetFieldBuilder().setLayer3Match(
331 new Ipv4MatchBuilder().setIpv4Source(
332 new Ipv4Prefix(sourceIp.getHostAddress())).build()).
333 build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
341 public Action buildAction(ActionInfo actionInfo) {
342 String[] actionValues = actionInfo.getActionValues();
343 InetAddress sourceIp = null;
345 sourceIp = InetAddress.getByName(actionValues[0]);
346 } catch (Exception e){
349 return new ActionBuilder().setAction(
350 new SetFieldCaseBuilder().setSetField(
351 new SetFieldBuilder().setLayer3Match(
352 new Ipv4MatchBuilder().setIpv4Destination(
353 new Ipv4Prefix(sourceIp.getHostAddress())).build()).
354 build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
362 public Action buildAction(ActionInfo actionInfo) {
363 String[] actionValues = actionInfo.getActionValues();
364 MacAddress mac = new MacAddress(actionValues[0]);
366 return new ActionBuilder().setAction(
367 new SetFieldCaseBuilder().setSetField(
368 new SetFieldBuilder().setEthernetMatch(
369 new EthernetMatchBuilder().setEthernetSource(
370 new EthernetSourceBuilder().setAddress(mac).build()).build())
371 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
378 public Action buildAction(ActionInfo actionInfo) {
379 DropActionBuilder dab = new DropActionBuilder();
380 DropAction dropAction = dab.build();
381 ActionBuilder ab = new ActionBuilder();
382 ab.setAction(new DropActionCaseBuilder().setDropAction(dropAction).build());
389 public Action buildAction(ActionInfo actionInfo) {
390 ActionBuilder ab = new ActionBuilder();
395 private static final int RADIX_HEX = 16;
396 public abstract Action buildAction(ActionInfo actionInfo);