Terminaing service table fix in fibmanager
[vpnservice.git] / mdsalutil / mdsalutil-api / src / main / java / org / opendaylight / vpnservice / mdsalutil / ActionType.java
1 /*
2  * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.vpnservice.mdsalutil;
9
10 import java.math.BigInteger;
11 import java.net.InetAddress;
12
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;
73
74 public enum ActionType {
75     group {
76         @Override
77         public Action buildAction(ActionInfo actionInfo) {
78             long groupId = Long.parseLong(actionInfo.getActionValues()[0]);
79
80             return new ActionBuilder().setAction(
81                             new GroupActionCaseBuilder().setGroupAction(
82                                     new GroupActionBuilder().setGroupId(groupId).build()).build())
83                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
84         }
85     },
86
87     output {
88         @Override
89         public Action buildAction(ActionInfo actionInfo) {
90             String[] actionValues = actionInfo.getActionValues();
91             String port = actionValues[0];
92             int maxLength = 0;
93
94             if (actionValues.length == 2) {
95                 maxLength = Integer.valueOf(actionValues[1]);
96             }
97
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();
103         }
104     },
105
106     pop_mpls {
107         @Override
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())
113
114                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
115         }
116     },
117
118     pop_pbb {
119         @Override
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();
124         }
125     },
126
127     pop_vlan {
128         @Override
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();
133         }
134     },
135
136     push_mpls {
137         @Override
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();
143         }
144     },
145
146     push_pbb {
147         @Override
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();
154         }
155     },
156
157     push_vlan {
158         @Override
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();
165         }
166     },
167
168     set_field_mpls_label {
169         @Override
170         public Action buildAction(ActionInfo actionInfo) {
171             String[] actionValues = actionInfo.getActionValues();
172             long label = Long.valueOf(actionValues[0]);
173
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();
178         }
179     },
180
181     set_field_pbb_isid {
182         @Override
183         public Action buildAction(ActionInfo actionInfo) {
184             String[] actionValues = actionInfo.getActionValues();
185             long label = Long.valueOf(actionValues[0]);
186
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();
193         }
194     },
195
196     set_field_vlan_vid {
197         @Override
198         public Action buildAction(ActionInfo actionInfo) {
199             String[] actionValues = actionInfo.getActionValues();
200             int vlanId = Integer.valueOf(actionValues[0]);
201
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();
209         }
210     },
211
212     set_field_tunnel_id {
213         @Override
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())
222                         .build())
223                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
224             } else {
225                 return new ActionBuilder().setAction(
226                     new SetFieldCaseBuilder().setSetField(
227                         new SetFieldBuilder()
228                             .setTunnel(new TunnelBuilder().setTunnelId(actionValues[0])
229                                            .build()).build())
230                         .build())
231                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
232             }
233
234         }
235
236     },
237
238     set_field_eth_dest {
239
240         @Override
241         public Action buildAction(ActionInfo actionInfo) {
242             String[] actionValues = actionInfo.getActionValues();
243             MacAddress mac = new MacAddress(actionValues[0]);
244
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();
251
252         }
253
254     },
255
256     set_udp_protocol {
257
258         @Override
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();
265
266         }
267
268     },
269     punt_to_controller {
270         @Override
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()));
279             return ab.build();
280         }
281
282     },
283     set_destination_port_field {
284
285         @Override
286         public Action buildAction(ActionInfo actionInfo) {
287             String[] actionValues = actionInfo.getActionValues();
288             Integer portNumber = new Integer(actionValues[0]);
289
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();
296
297         }
298
299     },
300     set_source_port_field {
301
302         @Override
303         public Action buildAction(ActionInfo actionInfo) {
304             String[] actionValues = actionInfo.getActionValues();
305             Integer portNumber = new Integer(actionValues[0]);
306
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();
313
314         }
315
316     },
317     set_source_ip {
318
319         @Override
320         public Action buildAction(ActionInfo actionInfo) {
321             String[] actionValues = actionInfo.getActionValues();
322             InetAddress sourceIp = null;
323             try{
324                 sourceIp = InetAddress.getByName(actionValues[0]);
325             } catch (Exception e){
326                 e.printStackTrace();
327             }
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();
334
335         }
336
337     },
338     set_destination_ip {
339
340         @Override
341         public Action buildAction(ActionInfo actionInfo) {
342             String[] actionValues = actionInfo.getActionValues();
343             InetAddress sourceIp = null;
344             try{
345                 sourceIp = InetAddress.getByName(actionValues[0]);
346             } catch (Exception e){
347                 e.printStackTrace();
348             }
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();
355
356         }
357
358     },
359     set_field_eth_src {
360
361         @Override
362         public Action buildAction(ActionInfo actionInfo) {
363             String[] actionValues = actionInfo.getActionValues();
364             MacAddress mac = new MacAddress(actionValues[0]);
365
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();
372
373         }
374     },
375     drop_action {
376
377         @Override
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());
383             return ab.build();
384         }
385     },
386     goto_table {
387
388         @Override
389         public Action buildAction(ActionInfo actionInfo) {
390             ActionBuilder ab = new ActionBuilder();
391             return null;
392         }
393     };
394
395     private static final int RADIX_HEX = 16;
396     public abstract Action buildAction(ActionInfo actionInfo);
397 }