2 * Copyright (c) 2013 Ericsson AB. All rights reserved.
5 package org.opendaylight.vpnservice.mdsalutil;
7 import java.math.BigInteger;
8 import java.net.InetAddress;
10 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.EricFilterTypes;
11 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.action.types.action.action.ExperimenterActionTypeBuilder;
12 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.action.types.action.action.experimenter.action.type.action.type.FilterTypesActionBuilder;
13 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.filter.types.group.Metadata;
14 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.filter.types.group.MetadataBuilder;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.pbb.action._case.PopPbbActionBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsActionBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.pbb.action._case.PushPbbActionBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetFieldBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
39 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.flow.types.rev140422.EricssonPortTypes;
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.ericsson.experimenter.action.types.rev140228.action.types.action.action.ExperimenterActionTypeBuilder;
63 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.action.types.action.action.experimenter.action.type.action.type.VxlanPopActionBuilder;
64 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.action.types.action.action.experimenter.action.type.action.type.VxlanPushActionBuilder;
65 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.action.types.action.action.experimenter.action.type.action.type.GrePopActionBuilder;
66 //import org.opendaylight.yang.gen.v1.urn.ericsson.experimenter.action.types.rev140228.action.types.action.action.experimenter.action.type.action.type.GrePushActionBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCaseBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropAction;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropActionBuilder;
71 public enum ActionType {
74 public Action buildAction(ActionInfo actionInfo) {
75 long groupId = Long.parseLong(actionInfo.getActionValues()[0]);
77 return new ActionBuilder().setAction(
78 new GroupActionCaseBuilder().setGroupAction(
79 new GroupActionBuilder().setGroupId(groupId).build()).build())
80 .setKey(new ActionKey(actionInfo.getActionKey())).build();
86 public Action buildAction(ActionInfo actionInfo) {
87 String[] actionValues = actionInfo.getActionValues();
88 String port = actionValues[0];
91 if (actionValues.length == 2) {
92 maxLength = Integer.valueOf(actionValues[1]);
95 return new ActionBuilder().setAction(
96 new OutputActionCaseBuilder().setOutputAction(
97 new OutputActionBuilder().setMaxLength(Integer.valueOf(maxLength))
98 .setOutputNodeConnector(new Uri(port)).build()).build())
99 .setKey(new ActionKey(actionInfo.getActionKey())).build();
105 public Action buildAction(ActionInfo actionInfo) {
106 return new ActionBuilder().setAction(
107 new PopMplsActionCaseBuilder().setPopMplsAction(
108 new PopMplsActionBuilder().setEthernetType(
109 Integer.valueOf(NwConstants.ETHTYPE_IPV4)).build()).build())
111 .setKey(new ActionKey(actionInfo.getActionKey())).build();
117 public Action buildAction(ActionInfo actionInfo) {
118 return new ActionBuilder()
119 .setAction(new PopPbbActionCaseBuilder().setPopPbbAction(new PopPbbActionBuilder().build()).build())
120 .setKey(new ActionKey(actionInfo.getActionKey())).build();
126 public Action buildAction(ActionInfo actionInfo) {
127 return new ActionBuilder().setAction(
128 new PopVlanActionCaseBuilder().setPopVlanAction(new PopVlanActionBuilder().build()).build())
129 .setKey(new ActionKey(actionInfo.getActionKey())).build();
135 public Action buildAction(ActionInfo actionInfo) {
136 return new ActionBuilder().setAction(new PushMplsActionCaseBuilder().setPushMplsAction(
137 new PushMplsActionBuilder().setEthernetType(
138 Integer.valueOf(NwConstants.ETHTYPE_MPLS_UC)).build()).build())
139 .setKey(new ActionKey(actionInfo.getActionKey())).build();
145 public Action buildAction(ActionInfo actionInfo) {
146 return new ActionBuilder().setAction(
147 new PushPbbActionCaseBuilder().setPushPbbAction(
148 new PushPbbActionBuilder()
149 .setEthernetType(Integer.valueOf(NwConstants.ETHTYPE_PBB)).build()).build())
150 .setKey(new ActionKey(actionInfo.getActionKey())).build();
156 public Action buildAction(ActionInfo actionInfo) {
157 return new ActionBuilder().setAction(
158 new PushVlanActionCaseBuilder().setPushVlanAction(
159 new PushVlanActionBuilder().setEthernetType(
160 Integer.valueOf(NwConstants.ETHTYPE_802_1Q)).build()).build())
161 .setKey(new ActionKey(actionInfo.getActionKey())).build();
165 set_field_mpls_label {
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(new SetFieldBuilder().setProtocolMatchFields(
173 new ProtocolMatchFieldsBuilder().setMplsLabel(label).build()).build())
174 .build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
180 public Action buildAction(ActionInfo actionInfo) {
181 String[] actionValues = actionInfo.getActionValues();
182 long label = Long.valueOf(actionValues[0]);
184 return new ActionBuilder().setAction(
185 new SetFieldCaseBuilder().setSetField(
186 new SetFieldBuilder().setProtocolMatchFields(
187 new ProtocolMatchFieldsBuilder().setPbb(
188 new PbbBuilder().setPbbIsid(label).build()).build()).build())
189 .build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
195 public Action buildAction(ActionInfo actionInfo) {
196 String[] actionValues = actionInfo.getActionValues();
197 int vlanId = Integer.valueOf(actionValues[0]);
199 return new ActionBuilder().setAction(
200 new SetFieldCaseBuilder().setSetField(
201 new SetFieldBuilder().setVlanMatch(
202 new VlanMatchBuilder().setVlanId(
203 new VlanIdBuilder().setVlanId(new VlanId(vlanId))
204 .setVlanIdPresent(true).build()).build()).build()).build())
205 .setKey(new ActionKey(actionInfo.getActionKey())).build();
209 set_field_tunnel_id {
211 public Action buildAction(ActionInfo actionInfo) {
212 BigInteger [] actionValues = actionInfo.getBigActionValues();
213 return new ActionBuilder().setAction(
214 new SetFieldCaseBuilder().setSetField(
215 new SetFieldBuilder().setTunnel(new TunnelBuilder().setTunnelId(actionValues[0])
216 .setTunnelMask(actionValues[1]).build()).build()).build())
217 .setKey(new ActionKey(actionInfo.getActionKey())).build();
226 public Action buildAction(ActionInfo actionInfo) {
227 String[] actionValues = actionInfo.getActionValues();
228 MacAddress mac = new MacAddress(actionValues[0]);
230 return new ActionBuilder().setAction(
231 new SetFieldCaseBuilder().setSetField(
232 new SetFieldBuilder().setEthernetMatch(
233 new EthernetMatchBuilder().setEthernetDestination(
234 new EthernetDestinationBuilder().setAddress(mac).build()).build())
235 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
244 public Action buildAction(ActionInfo actionInfo) {
245 return new ActionBuilder().setAction(
246 new SetFieldCaseBuilder().setSetField(
247 new SetFieldBuilder().setIpMatch(
248 new IpMatchBuilder().setIpProtocol((short) 17).build()).
249 build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
256 public Action buildAction(ActionInfo actionInfo) {
257 ActionBuilder ab = new ActionBuilder();
258 OutputActionBuilder output = new OutputActionBuilder();
259 output.setMaxLength(0xffff);
260 Uri value = new Uri(OutputPortValues.CONTROLLER.toString());
261 output.setOutputNodeConnector(value);
262 ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
263 ab.setKey(new ActionKey(actionInfo.getActionKey()));
268 set_destination_port_field {
271 public Action buildAction(ActionInfo actionInfo) {
272 String[] actionValues = actionInfo.getActionValues();
273 Integer portNumber = new Integer(actionValues[0]);
275 return new ActionBuilder().setAction(
276 new SetFieldCaseBuilder().setSetField(
277 new SetFieldBuilder().setLayer4Match(
278 new UdpMatchBuilder().setUdpDestinationPort(
279 new PortNumber(portNumber)).build())
280 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
285 set_source_port_field {
288 public Action buildAction(ActionInfo actionInfo) {
289 String[] actionValues = actionInfo.getActionValues();
290 Integer portNumber = new Integer(actionValues[0]);
292 return new ActionBuilder().setAction(
293 new SetFieldCaseBuilder().setSetField(
294 new SetFieldBuilder().setLayer4Match(
295 new UdpMatchBuilder().setUdpSourcePort(
296 new PortNumber(portNumber)).build())
297 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
305 public Action buildAction(ActionInfo actionInfo) {
306 String[] actionValues = actionInfo.getActionValues();
307 InetAddress sourceIp = null;
309 sourceIp = InetAddress.getByName(actionValues[0]);
310 } catch (Exception e){
313 return new ActionBuilder().setAction(
314 new SetFieldCaseBuilder().setSetField(
315 new SetFieldBuilder().setLayer3Match(
316 new Ipv4MatchBuilder().setIpv4Source(
317 new Ipv4Prefix(sourceIp.getHostAddress())).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().setIpv4Destination(
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 MacAddress mac = new MacAddress(actionValues[0]);
351 return new ActionBuilder().setAction(
352 new SetFieldCaseBuilder().setSetField(
353 new SetFieldBuilder().setEthernetMatch(
354 new EthernetMatchBuilder().setEthernetSource(
355 new EthernetSourceBuilder().setAddress(mac).build()).build())
356 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
363 public Action buildAction(ActionInfo actionInfo) {
364 DropActionBuilder dab = new DropActionBuilder();
365 DropAction dropAction = dab.build();
366 ActionBuilder ab = new ActionBuilder();
367 ab.setAction(new DropActionCaseBuilder().setDropAction(dropAction).build());
374 public Action buildAction(ActionInfo actionInfo) {
375 ActionBuilder ab = new ActionBuilder();
380 private static final int RADIX_HEX = 16;
381 public abstract Action buildAction(ActionInfo actionInfo);