Added copyright and updated appropriate log levels
[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             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();
221
222         }
223
224     },
225
226     set_field_eth_dest {
227
228         @Override
229         public Action buildAction(ActionInfo actionInfo) {
230             String[] actionValues = actionInfo.getActionValues();
231             MacAddress mac = new MacAddress(actionValues[0]);
232
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();
239
240         }
241
242     },
243
244     set_udp_protocol {
245
246         @Override
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();
253
254         }
255
256     },
257     punt_to_controller {
258         @Override
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()));
267             return ab.build();
268         }
269
270     },
271     set_destination_port_field {
272
273         @Override
274         public Action buildAction(ActionInfo actionInfo) {
275             String[] actionValues = actionInfo.getActionValues();
276             Integer portNumber = new Integer(actionValues[0]);
277
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();
284
285         }
286
287     },
288     set_source_port_field {
289
290         @Override
291         public Action buildAction(ActionInfo actionInfo) {
292             String[] actionValues = actionInfo.getActionValues();
293             Integer portNumber = new Integer(actionValues[0]);
294
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();
301
302         }
303
304     },
305     set_source_ip {
306
307         @Override
308         public Action buildAction(ActionInfo actionInfo) {
309             String[] actionValues = actionInfo.getActionValues();
310             InetAddress sourceIp = null;
311             try{
312                 sourceIp = InetAddress.getByName(actionValues[0]);
313             } catch (Exception e){
314                 e.printStackTrace();
315             }
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();
322
323         }
324
325     },
326     set_destination_ip {
327
328         @Override
329         public Action buildAction(ActionInfo actionInfo) {
330             String[] actionValues = actionInfo.getActionValues();
331             InetAddress sourceIp = null;
332             try{
333                 sourceIp = InetAddress.getByName(actionValues[0]);
334             } catch (Exception e){
335                 e.printStackTrace();
336             }
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();
343
344         }
345
346     },
347     set_field_eth_src {
348
349         @Override
350         public Action buildAction(ActionInfo actionInfo) {
351             String[] actionValues = actionInfo.getActionValues();
352             MacAddress mac = new MacAddress(actionValues[0]);
353
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();
360
361         }
362     },
363     drop_action {
364
365         @Override
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());
371             return ab.build();
372         }
373     },
374     goto_table {
375
376         @Override
377         public Action buildAction(ActionInfo actionInfo) {
378             ActionBuilder ab = new ActionBuilder();
379             return null;
380         }
381     };
382
383     private static final int RADIX_HEX = 16;
384     public abstract Action buildAction(ActionInfo actionInfo);
385 }