ELAN FT Support for BE
[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.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.pbb.action._case.PopPbbActionBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsActionBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.pbb.action._case.PushPbbActionBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetField;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetFieldBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActions;
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.opendaylight.action.types.rev131112.action.action.DropActionCaseBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropAction;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropActionBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.field._case.SetFieldActionBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.OfjNxActionOutputRegGrouping;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionOutputRegBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg1;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionOutputRegRpcAddGroupCase;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionOutputRegRpcAddGroupCaseBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.add.group.input.buckets.bucket.action.action.NxActionResubmitRpcAddGroupCaseBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionOutputRegNodesNodeGroupBucketsBucketActionsCase;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionOutputRegNodesNodeGroupBucketsBucketActionsCaseBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionRegLoadNodesNodeGroupBucketsBucketActionsCaseBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionOutputRegNodesNodeTableFlowApplyActionsCaseBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.output.reg.grouping.NxOutputReg;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.output.reg.grouping.NxOutputRegBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.resubmit.grouping.NxResubmitBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.src.choice.SrcNxRegCaseBuilder;
80 public enum ActionType {
81     group {
82         @Override
83         public Action buildAction(ActionInfo actionInfo) {
84             long groupId = Long.parseLong(actionInfo.getActionValues()[0]);
85
86             return new ActionBuilder().setAction(
87                             new GroupActionCaseBuilder().setGroupAction(
88                                     new GroupActionBuilder().setGroupId(groupId).build()).build())
89                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
90         }
91     },
92
93     output {
94         @Override
95         public Action buildAction(ActionInfo actionInfo) {
96             String[] actionValues = actionInfo.getActionValues();
97             String port = actionValues[0];
98             int maxLength = 0;
99
100             if (actionValues.length == 2) {
101                 maxLength = Integer.valueOf(actionValues[1]);
102             }
103
104             return new ActionBuilder().setAction(
105                     new OutputActionCaseBuilder().setOutputAction(
106                             new OutputActionBuilder().setMaxLength(Integer.valueOf(maxLength))
107                                             .setOutputNodeConnector(new Uri(port)).build()).build())
108                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
109         }
110     },
111
112     pop_mpls {
113         @Override
114         public Action buildAction(ActionInfo actionInfo) {
115             return new ActionBuilder().setAction(
116                     new PopMplsActionCaseBuilder().setPopMplsAction(
117                             new PopMplsActionBuilder().setEthernetType(
118                                     Integer.valueOf(NwConstants.ETHTYPE_IPV4)).build()).build())
119
120                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
121         }
122     },
123
124     pop_pbb {
125         @Override
126         public Action buildAction(ActionInfo actionInfo) {
127             return new ActionBuilder()
128                     .setAction(new PopPbbActionCaseBuilder().setPopPbbAction(new PopPbbActionBuilder().build()).build())
129                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
130         }
131     },
132
133     pop_vlan {
134         @Override
135         public Action buildAction(ActionInfo actionInfo) {
136             return new ActionBuilder().setAction(
137                     new PopVlanActionCaseBuilder().setPopVlanAction(new PopVlanActionBuilder().build()).build())
138                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
139         }
140     },
141
142     push_mpls {
143         @Override
144         public Action buildAction(ActionInfo actionInfo) {
145             return new ActionBuilder().setAction(new PushMplsActionCaseBuilder().setPushMplsAction(
146                                     new PushMplsActionBuilder().setEthernetType(
147                                             Integer.valueOf(NwConstants.ETHTYPE_MPLS_UC)).build()).build())
148                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
149         }
150     },
151
152     push_pbb {
153         @Override
154         public Action buildAction(ActionInfo actionInfo) {
155             return new ActionBuilder().setAction(
156                     new PushPbbActionCaseBuilder().setPushPbbAction(
157                                     new PushPbbActionBuilder()
158                                             .setEthernetType(Integer.valueOf(NwConstants.ETHTYPE_PBB)).build()).build())
159                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
160         }
161     },
162
163     push_vlan {
164         @Override
165         public Action buildAction(ActionInfo actionInfo) {
166             return new ActionBuilder().setAction(
167                     new PushVlanActionCaseBuilder().setPushVlanAction(
168                                     new PushVlanActionBuilder().setEthernetType(
169                                             Integer.valueOf(NwConstants.ETHTYPE_802_1Q)).build()).build())
170                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
171         }
172     },
173
174     set_field_mpls_label {
175         @Override
176         public Action buildAction(ActionInfo actionInfo) {
177             String[] actionValues = actionInfo.getActionValues();
178             long label = Long.valueOf(actionValues[0]);
179
180             return new ActionBuilder().setAction(
181                     new SetFieldCaseBuilder().setSetField(new SetFieldBuilder().setProtocolMatchFields(
182                                             new ProtocolMatchFieldsBuilder().setMplsLabel(label).build()).build())
183                                     .build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
184         }
185     },
186
187     set_field_pbb_isid {
188         @Override
189         public Action buildAction(ActionInfo actionInfo) {
190             String[] actionValues = actionInfo.getActionValues();
191             long label = Long.valueOf(actionValues[0]);
192
193             return new ActionBuilder().setAction(
194                     new SetFieldCaseBuilder().setSetField(
195                             new SetFieldBuilder().setProtocolMatchFields(
196                                             new ProtocolMatchFieldsBuilder().setPbb(
197                                                     new PbbBuilder().setPbbIsid(label).build()).build()).build())
198                                     .build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
199         }
200     },
201
202     set_field_vlan_vid {
203         @Override
204         public Action buildAction(ActionInfo actionInfo) {
205             String[] actionValues = actionInfo.getActionValues();
206             int vlanId = Integer.valueOf(actionValues[0]);
207
208             return new ActionBuilder().setAction(
209                     new SetFieldCaseBuilder().setSetField(
210                             new SetFieldBuilder().setVlanMatch(
211                                     new VlanMatchBuilder().setVlanId(
212                                                     new VlanIdBuilder().setVlanId(new VlanId(vlanId))
213                                                             .setVlanIdPresent(true).build()).build()).build()).build())
214                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
215         }
216     },
217
218     set_field_tunnel_id {
219         @Override
220         public Action buildAction(ActionInfo actionInfo) {
221             BigInteger [] actionValues = actionInfo.getBigActionValues();
222             if (actionValues.length == 2) {
223                 return new ActionBuilder().setAction(
224                     new SetFieldCaseBuilder().setSetField(
225                         new SetFieldBuilder()
226                             .setTunnel(new TunnelBuilder().setTunnelId(actionValues[0])
227                                            .setTunnelMask(actionValues[1]).build()).build())
228                         .build())
229                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
230             } else {
231                 return new ActionBuilder().setAction(
232                     new SetFieldCaseBuilder().setSetField(
233                         new SetFieldBuilder()
234                             .setTunnel(new TunnelBuilder().setTunnelId(actionValues[0])
235                                            .build()).build())
236                         .build())
237                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
238             }
239
240         }
241
242     },
243
244     set_field_eth_dest {
245
246         @Override
247         public Action buildAction(ActionInfo actionInfo) {
248             String[] actionValues = actionInfo.getActionValues();
249             MacAddress mac = new MacAddress(actionValues[0]);
250
251             return new ActionBuilder().setAction(
252                     new SetFieldCaseBuilder().setSetField(
253                             new SetFieldBuilder().setEthernetMatch(
254                                     new EthernetMatchBuilder().setEthernetDestination(
255                                                     new EthernetDestinationBuilder().setAddress(mac).build()).build())
256                                             .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
257
258         }
259
260     },
261
262     set_udp_protocol {
263
264         @Override
265         public Action buildAction(ActionInfo actionInfo) {
266             return new ActionBuilder().setAction(
267                     new SetFieldCaseBuilder().setSetField(
268                             new SetFieldBuilder().setIpMatch(
269                                     new IpMatchBuilder().setIpProtocol((short) 17).build()).
270                                     build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
271
272         }
273
274     },
275     punt_to_controller {
276         @Override
277         public Action buildAction(ActionInfo actionInfo) {
278             ActionBuilder ab = new ActionBuilder();
279             OutputActionBuilder output = new OutputActionBuilder();
280             output.setMaxLength(0xffff);
281             Uri value = new Uri(OutputPortValues.CONTROLLER.toString());
282             output.setOutputNodeConnector(value);
283             ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
284             ab.setKey(new ActionKey(actionInfo.getActionKey()));
285             return ab.build();
286         }
287
288     },
289     set_destination_port_field {
290
291         @Override
292         public Action buildAction(ActionInfo actionInfo) {
293             String[] actionValues = actionInfo.getActionValues();
294             Integer portNumber = new Integer(actionValues[0]);
295
296             return new ActionBuilder().setAction(
297                     new SetFieldCaseBuilder().setSetField(
298                             new SetFieldBuilder().setLayer4Match(
299                                     new UdpMatchBuilder().setUdpDestinationPort(
300                                             new PortNumber(portNumber)).build())
301                             .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
302
303         }
304
305     },
306     set_source_port_field {
307
308         @Override
309         public Action buildAction(ActionInfo actionInfo) {
310             String[] actionValues = actionInfo.getActionValues();
311             Integer portNumber = new Integer(actionValues[0]);
312
313             return new ActionBuilder().setAction(
314                     new SetFieldCaseBuilder().setSetField(
315                             new SetFieldBuilder().setLayer4Match(
316                                     new UdpMatchBuilder().setUdpSourcePort(
317                                             new PortNumber(portNumber)).build())
318                             .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
319
320         }
321
322     },
323     set_source_ip {
324
325         @Override
326         public Action buildAction(ActionInfo actionInfo) {
327             String[] actionValues = actionInfo.getActionValues();
328             InetAddress sourceIp = null;
329             try{
330                 sourceIp = InetAddress.getByName(actionValues[0]);
331             } catch (Exception e){
332                 e.printStackTrace();
333             }
334             return new ActionBuilder().setAction(
335                     new SetFieldCaseBuilder().setSetField(
336                             new SetFieldBuilder().setLayer3Match(
337                                     new Ipv4MatchBuilder().setIpv4Source(
338                                             new Ipv4Prefix(sourceIp.getHostAddress())).build()).
339                                             build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
340
341         }
342
343     },
344     set_destination_ip {
345
346         @Override
347         public Action buildAction(ActionInfo actionInfo) {
348             String[] actionValues = actionInfo.getActionValues();
349             InetAddress sourceIp = null;
350             try{
351                 sourceIp = InetAddress.getByName(actionValues[0]);
352             } catch (Exception e){
353                 e.printStackTrace();
354             }
355             return new ActionBuilder().setAction(
356                     new SetFieldCaseBuilder().setSetField(
357                             new SetFieldBuilder().setLayer3Match(
358                                     new Ipv4MatchBuilder().setIpv4Destination(
359                                             new Ipv4Prefix(sourceIp.getHostAddress())).build()).
360                                             build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
361
362         }
363
364     },
365     set_field_eth_src {
366
367         @Override
368         public Action buildAction(ActionInfo actionInfo) {
369             String[] actionValues = actionInfo.getActionValues();
370             MacAddress mac = new MacAddress(actionValues[0]);
371
372             return new ActionBuilder().setAction(
373                     new SetFieldCaseBuilder().setSetField(
374                             new SetFieldBuilder().setEthernetMatch(
375                                     new EthernetMatchBuilder().setEthernetSource(
376                                                     new EthernetSourceBuilder().setAddress(mac).build()).build())
377                                             .build()).build()).setKey(new ActionKey(actionInfo.getActionKey())).build();
378
379         }
380     },
381
382     drop_action {
383
384         @Override
385         public Action buildAction(ActionInfo actionInfo) {
386             DropActionBuilder dab = new DropActionBuilder();
387             DropAction dropAction = dab.build();
388             ActionBuilder ab = new ActionBuilder();
389             ab.setAction(new DropActionCaseBuilder().setDropAction(dropAction).build());
390             ab.setKey(new ActionKey(actionInfo.getActionKey())).build();
391             return ab.build();
392         }
393     },
394     set_field_reg {
395
396         @Override
397         public Action buildAction(ActionInfo actionInfo) {
398             ActionBuilder ab = new ActionBuilder();
399             String[] actionValues = actionInfo.getActionValues();
400             NxOutputReg r = new NxOutputRegBuilder().setSrc(
401                     new org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.output.reg.grouping.nx.output.reg.SrcBuilder().setSrcChoice(
402                             new SrcNxRegCaseBuilder().setNxReg(NxmNxReg1.class).build())
403                             .setOfsNbits(Integer.valueOf(Integer.parseInt(actionValues[0])))
404                             .build())
405                     .setMaxLen(Integer.valueOf(0xffff))
406                     .build();
407             ab.setAction(new NxActionOutputRegNodesNodeGroupBucketsBucketActionsCaseBuilder().setNxOutputReg(r).build());
408             ab.setKey(new ActionKey(actionInfo.getActionKey()));
409             return ab.build();
410         }
411     },
412
413
414
415     nx_resubmit {
416
417         @Override
418         public Action buildAction(ActionInfo actionInfo) {
419             NxResubmitBuilder nxarsb = new NxResubmitBuilder();
420             nxarsb.setTable((short) 55);
421             ActionBuilder ab = new ActionBuilder();
422             ab.setAction(new NxActionResubmitRpcAddGroupCaseBuilder().setNxResubmit(nxarsb.build()).build());
423             ab.setKey(new ActionKey(actionInfo.getActionKey()));
424             return ab.build();
425         }
426     },
427
428     goto_table {
429
430         @Override
431         public Action buildAction(ActionInfo actionInfo) {
432             ActionBuilder ab = new ActionBuilder();
433             return null;
434         }
435     };
436
437     private static final int RADIX_HEX = 16;
438     public abstract Action buildAction(ActionInfo actionInfo);
439 }