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();
104 * The action info passed to this ActionType should have two actionValues string.
106 * The first string representing the metadata and the next string representing the metadatamask
112 public Action buildAction(ActionInfo actionInfo) {
113 String[] actionValues = actionInfo.getActionValues();
114 if (actionValues == null || actionValues.length != 2) {
115 throw new RuntimeException("Filter Equal set field action should have two arguments for metadata and metadata mask");
117 final BigInteger metaData = new BigInteger(actionValues[0]);
118 final BigInteger metadataMask = new BigInteger(actionValues[1]);
119 return new ActionBuilder()
121 new ExperimenterActionTypeBuilder().setActionType(
122 new FilterTypesActionBuilder()
123 .setFilterType(EricFilterTypes.ERICFTEQUAL)
125 new MetadataBuilder().setMetadata(metaData).setMetadataMask(metadataMask).build())
126 .build())//Filter Equal Action Type
127 .build())//Experimenter Action
128 .setKey(new ActionKey(actionInfo.getActionKey()))
136 public Action buildAction(ActionInfo actionInfo) {
137 return new ActionBuilder().setAction(
138 new PopMplsActionCaseBuilder().setPopMplsAction(
139 new PopMplsActionBuilder().setEthernetType(
140 Integer.valueOf(NwConstants.ETHTYPE_IPV4)).build()).build())
142 .setKey(new ActionKey(actionInfo.getActionKey())).build();
148 public Action buildAction(ActionInfo actionInfo) {
149 return new ActionBuilder()
150 .setAction(new PopPbbActionCaseBuilder().setPopPbbAction(new PopPbbActionBuilder().build()).build())
151 .setKey(new ActionKey(actionInfo.getActionKey())).build();
157 public Action buildAction(ActionInfo actionInfo) {
158 return new ActionBuilder().setAction(
159 new PopVlanActionCaseBuilder().setPopVlanAction(new PopVlanActionBuilder().build()).build())
160 .setKey(new ActionKey(actionInfo.getActionKey())).build();
166 public Action buildAction(ActionInfo actionInfo) {
167 return new ActionBuilder().setAction(
168 new ExperimenterActionTypeBuilder().setActionType(
169 new VxlanPopActionBuilder().build()).build())
170 .setKey(new ActionKey(actionInfo.getActionKey())).build();
177 public Action buildAction(ActionInfo actionInfo) {
178 return new ActionBuilder().setAction(
179 new ExperimenterActionTypeBuilder().setActionType(
180 new GrePopActionBuilder().build()).build())
181 .setKey(new ActionKey(actionInfo.getActionKey())).build();
187 public Action buildAction(ActionInfo actionInfo) {
188 return new ActionBuilder().setAction(new PushMplsActionCaseBuilder().setPushMplsAction(
189 new PushMplsActionBuilder().setEthernetType(
190 Integer.valueOf(NwConstants.ETHTYPE_MPLS_UC)).build()).build())
191 .setKey(new ActionKey(actionInfo.getActionKey())).build();
197 public Action buildAction(ActionInfo actionInfo) {
198 return new ActionBuilder().setAction(
199 new PushPbbActionCaseBuilder().setPushPbbAction(
200 new PushPbbActionBuilder()
201 .setEthernetType(Integer.valueOf(NwConstants.ETHTYPE_PBB)).build()).build())
202 .setKey(new ActionKey(actionInfo.getActionKey())).build();
208 public Action buildAction(ActionInfo actionInfo) {
209 return new ActionBuilder().setAction(
210 new PushVlanActionCaseBuilder().setPushVlanAction(
211 new PushVlanActionBuilder().setEthernetType(
212 Integer.valueOf(NwConstants.ETHTYPE_802_1Q)).build()).build())
213 .setKey(new ActionKey(actionInfo.getActionKey())).build();
219 public Action buildAction(ActionInfo actionInfo) {
220 return new ActionBuilder().setAction(
221 new ExperimenterActionTypeBuilder().setActionType(
222 new VxlanPushActionBuilder().setEthType(0x0800).build()).build())
223 .setKey(new ActionKey(actionInfo.getActionKey())).build();
230 public Action buildAction(ActionInfo actionInfo) {
231 return new ActionBuilder().setAction(
232 new ExperimenterActionTypeBuilder().setActionType(
233 new GrePushActionBuilder().setEthType(0x0800).build()).build())
234 .setKey(new ActionKey(actionInfo.getActionKey())).build();
238 set_field_mpls_label {
240 public Action buildAction(ActionInfo actionInfo) {
241 String[] actionValues = actionInfo.getActionValues();
242 long label = Long.valueOf(actionValues[0]);
244 return new ActionBuilder().setAction(
245 new SetFieldCaseBuilder().setSetField(new SetFieldBuilder().setProtocolMatchFields(
246 new ProtocolMatchFieldsBuilder().setMplsLabel(label).build()).build())
247 .build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
253 public Action buildAction(ActionInfo actionInfo) {
254 String[] actionValues = actionInfo.getActionValues();
255 long label = Long.valueOf(actionValues[0]);
257 return new ActionBuilder().setAction(
258 new SetFieldCaseBuilder().setSetField(
259 new SetFieldBuilder().setProtocolMatchFields(
260 new ProtocolMatchFieldsBuilder().setPbb(
261 new PbbBuilder().setPbbIsid(label).build()).build()).build())
262 .build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
268 public Action buildAction(ActionInfo actionInfo) {
269 String[] actionValues = actionInfo.getActionValues();
270 int vlanId = Integer.valueOf(actionValues[0]);
272 return new ActionBuilder().setAction(
273 new SetFieldCaseBuilder().setSetField(
274 new SetFieldBuilder().setVlanMatch(
275 new VlanMatchBuilder().setVlanId(
276 new VlanIdBuilder().setVlanId(new VlanId(vlanId))
277 .setVlanIdPresent(true).build()).build()).build()).build())
278 .setKey(new ActionKey(actionInfo.getActionKey())).build();
282 set_field_tunnel_id {
284 public Action buildAction(ActionInfo actionInfo) {
285 BigInteger [] actionValues = actionInfo.getBigActionValues();
286 return new ActionBuilder().setAction(
287 new SetFieldCaseBuilder().setSetField(
288 new SetFieldBuilder().setTunnel(new TunnelBuilder().setTunnelId(actionValues[0])
289 .setTunnelMask(actionValues[1]).build()).build()).build())
290 .setKey(new ActionKey(actionInfo.getActionKey())).build();
299 public Action buildAction(ActionInfo actionInfo) {
300 String[] actionValues = actionInfo.getActionValues();
301 MacAddress mac = new MacAddress(actionValues[0]);
303 return new ActionBuilder().setAction(
304 new SetFieldCaseBuilder().setSetField(
305 new SetFieldBuilder().setEthernetMatch(
306 new EthernetMatchBuilder().setEthernetDestination(
307 new EthernetDestinationBuilder().setAddress(mac).build()).build())
308 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
317 public Action buildAction(ActionInfo actionInfo) {
318 return new ActionBuilder().setAction(
319 new SetFieldCaseBuilder().setSetField(
320 new SetFieldBuilder().setIpMatch(
321 new IpMatchBuilder().setIpProtocol((short) 17).build()).
322 build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
329 public Action buildAction(ActionInfo actionInfo) {
330 ActionBuilder ab = new ActionBuilder();
331 OutputActionBuilder output = new OutputActionBuilder();
332 output.setMaxLength(0xffff);
333 Uri value = new Uri(OutputPortValues.CONTROLLER.toString());
334 output.setOutputNodeConnector(value);
335 ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
336 ab.setKey(new ActionKey(actionInfo.getActionKey()));
341 set_destination_port_field {
344 public Action buildAction(ActionInfo actionInfo) {
345 String[] actionValues = actionInfo.getActionValues();
346 Integer portNumber = new Integer(actionValues[0]);
348 return new ActionBuilder().setAction(
349 new SetFieldCaseBuilder().setSetField(
350 new SetFieldBuilder().setLayer4Match(
351 new UdpMatchBuilder().setUdpDestinationPort(
352 new PortNumber(portNumber)).build())
353 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
358 set_source_port_field {
361 public Action buildAction(ActionInfo actionInfo) {
362 String[] actionValues = actionInfo.getActionValues();
363 Integer portNumber = new Integer(actionValues[0]);
365 return new ActionBuilder().setAction(
366 new SetFieldCaseBuilder().setSetField(
367 new SetFieldBuilder().setLayer4Match(
368 new UdpMatchBuilder().setUdpSourcePort(
369 new PortNumber(portNumber)).build())
370 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
378 public Action buildAction(ActionInfo actionInfo) {
379 String[] actionValues = actionInfo.getActionValues();
380 InetAddress sourceIp = null;
382 sourceIp = InetAddress.getByName(actionValues[0]);
383 } catch (Exception e){
386 return new ActionBuilder().setAction(
387 new SetFieldCaseBuilder().setSetField(
388 new SetFieldBuilder().setLayer3Match(
389 new Ipv4MatchBuilder().setIpv4Source(
390 new Ipv4Prefix(sourceIp.getHostAddress())).build()).
391 build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
399 public Action buildAction(ActionInfo actionInfo) {
400 String[] actionValues = actionInfo.getActionValues();
401 InetAddress sourceIp = null;
403 sourceIp = InetAddress.getByName(actionValues[0]);
404 } catch (Exception e){
407 return new ActionBuilder().setAction(
408 new SetFieldCaseBuilder().setSetField(
409 new SetFieldBuilder().setLayer3Match(
410 new Ipv4MatchBuilder().setIpv4Destination(
411 new Ipv4Prefix(sourceIp.getHostAddress())).build()).
412 build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
420 public Action buildAction(ActionInfo actionInfo) {
421 String[] actionValues = actionInfo.getActionValues();
422 MacAddress mac = new MacAddress(actionValues[0]);
424 return new ActionBuilder().setAction(
425 new SetFieldCaseBuilder().setSetField(
426 new SetFieldBuilder().setEthernetMatch(
427 new EthernetMatchBuilder().setEthernetSource(
428 new EthernetSourceBuilder().setAddress(mac).build()).build())
429 .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
436 public Action buildAction(ActionInfo actionInfo) {
437 DropActionBuilder dab = new DropActionBuilder();
438 DropAction dropAction = dab.build();
439 ActionBuilder ab = new ActionBuilder();
440 ab.setAction(new DropActionCaseBuilder().setDropAction(dropAction).build());
447 public Action buildAction(ActionInfo actionInfo) {
448 ActionBuilder ab = new ActionBuilder();
453 private static final int RADIX_HEX = 16;
454 public abstract Action buildAction(ActionInfo actionInfo);