Added utility methods for set_nsp and set_nsi actions.
[ovsdb.git] / openstack / net-virt-providers / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / providers / mdsalopenflow13 / OF13MdSalAction.java
1 package org.opendaylight.ovsdb.openstack.netvirt.providers.mdsalopenflow13;
2
3 import java.math.BigInteger;
4
5 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
6 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
7 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action;
8 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCaseBuilder;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstActionCaseBuilder;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcActionCaseBuilder;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropActionBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.dst.action._case.SetDlDstActionBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.src.action._case.SetDlSrcActionBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.DstChoice;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxArpShaCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxArpThaCaseBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxRegCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxTunIdCaseBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxTunIpv4DstCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstOfArpOpCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstOfArpSpaCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstOfArpTpaCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstOfEthDstCaseBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionRegLoadNodesNodeGroupBucketsBucketActionsCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.group.buckets.bucket.action.action.NxActionRegMoveNodesNodeGroupBucketsBucketActionsCaseBuilder;
34 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;
35 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.NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder;
36 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.NxActionRegMoveNodesNodeTableFlowApplyActionsCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.output.reg.grouping.NxOutputReg;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.output.reg.grouping.NxOutputRegBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.NxRegLoad;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.NxRegLoadBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.nx.reg.load.DstBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.move.grouping.NxRegMove;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.move.grouping.NxRegMoveBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.move.grouping.nx.reg.move.SrcBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.SrcChoice;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.src.choice.SrcNxArpShaCaseBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.src.choice.SrcNxRegCaseBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.src.choice.SrcOfArpSpaCaseBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.src.choice.grouping.src.choice.SrcOfEthSrcCaseBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionResubmitNodesNodeTableFlowApplyActionsCaseBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.resubmit.grouping.NxResubmit;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.resubmit.grouping.NxResubmitBuilder;
53
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionSetNspNodesNodeTableFlowApplyActionsCaseBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.set.nsp.grouping.NxSetNsp;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.set.nsp.grouping.NxSetNspBuilder;
57
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionSetNsiNodesNodeTableFlowApplyActionsCaseBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.set.nsi.grouping.NxSetNsi;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.ovs.nx.sal.action.rev140714.nx.action.set.nsi.grouping.NxSetNsiBuilder;
61
62 import com.google.common.net.InetAddresses;
63
64 public final class OF13MdSalAction {
65     public static Action dropAction() {
66         return new DropActionCaseBuilder()
67             .setDropAction(new DropActionBuilder()
68                 .build())
69             .build();
70     }
71
72     public static Action outputAction(NodeConnectorId id) {
73         return new OutputActionCaseBuilder()
74             .setOutputAction(new OutputActionBuilder()
75                 .setOutputNodeConnector(new Uri(id.getValue()))
76                 .build())
77             .build();
78     }
79
80     public static Action groupAction(Long id) {
81         return new GroupActionCaseBuilder()
82             .setGroupAction(new GroupActionBuilder()
83                 .setGroupId(id)
84                 .build())
85             .build();
86     }
87
88     public static Action setDlSrcAction(MacAddress mac) {
89         return new SetDlSrcActionCaseBuilder()
90             .setSetDlSrcAction(new SetDlSrcActionBuilder()
91                 .setAddress(mac)
92                 .build())
93             .build();
94     }
95
96     public static Action setDlDstAction(MacAddress mac) {
97         return new SetDlDstActionCaseBuilder()
98             .setSetDlDstAction(new SetDlDstActionBuilder()
99                 .setAddress(mac)
100                 .build())
101             .build();
102     }
103
104     public static Action decNwTtlAction() {
105         return new DecNwTtlCaseBuilder()
106             .setDecNwTtl(new DecNwTtlBuilder()
107                 .build())
108             .build();
109     }
110
111     public static Action nxLoadRegAction(DstChoice dstChoice,
112                                          BigInteger value,
113                                          int endOffset,
114                                          boolean groupBucket) {
115         NxRegLoad r = new NxRegLoadBuilder()
116             .setDst(new DstBuilder()
117                 .setDstChoice(dstChoice)
118                 .setStart(Integer.valueOf(0))
119                 .setEnd(Integer.valueOf(endOffset))
120                 .build())
121             .setValue(value)
122             .build();
123         if (groupBucket) {
124             return new NxActionRegLoadNodesNodeGroupBucketsBucketActionsCaseBuilder()
125                 .setNxRegLoad(r).build();
126         } else {
127             return new NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder()
128                 .setNxRegLoad(r).build();
129         }
130     }
131
132     public static Action nxLoadRegAction(DstChoice dstChoice,
133                                          BigInteger value) {
134         return nxLoadRegAction(dstChoice, value, 31, false);
135     }
136
137     public static Action nxLoadRegAction(Class<? extends NxmNxReg> reg,
138                                          BigInteger value) {
139         return nxLoadRegAction(new DstNxRegCaseBuilder().setNxReg(reg).build(),
140                                value);
141     }
142
143     public static Action nxLoadTunIPv4Action(String ipAddress,
144                                              boolean groupBucket) {
145         int ip = InetAddresses.coerceToInteger(InetAddresses.forString(ipAddress));
146         long ipl = ip & 0xffffffffL;
147         return nxLoadRegAction(new DstNxTunIpv4DstCaseBuilder()
148                                     .setNxTunIpv4Dst(Boolean.TRUE).build(),
149                                BigInteger.valueOf(ipl),
150                                31,
151                                groupBucket);
152     }
153
154     public static Action nxLoadArpOpAction(BigInteger value) {
155         return nxLoadRegAction(new DstOfArpOpCaseBuilder()
156             .setOfArpOp(Boolean.TRUE).build(), value, 15, false);
157     }
158
159     public static Action nxLoadArpShaAction(BigInteger value) {
160         return nxLoadRegAction(new DstNxArpShaCaseBuilder()
161             .setNxArpSha(Boolean.TRUE).build(), value, 47, false);
162     }
163
164     public static Action nxLoadArpSpaAction(BigInteger value) {
165         return nxLoadRegAction(new DstOfArpSpaCaseBuilder()
166             .setOfArpSpa(Boolean.TRUE).build(), value);
167     }
168
169     public static Action nxLoadArpSpaAction(String ipAddress) {
170         int ip = InetAddresses.coerceToInteger(InetAddresses.forString(ipAddress));
171         long ipl = ip & 0xffffffffL;
172         return nxLoadArpSpaAction(BigInteger.valueOf(ipl));
173     }
174
175     public static Action nxMoveRegAction(SrcChoice srcChoice,
176                                          DstChoice dstChoice,
177                                          int endOffset,
178                                          boolean groupBucket) {
179         NxRegMove r = new NxRegMoveBuilder()
180             .setSrc(new SrcBuilder()
181                 .setSrcChoice(srcChoice)
182                 .setStart(Integer.valueOf(0))
183                 .setEnd(Integer.valueOf(endOffset))
184                 .build())
185             .setDst(new org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.move.grouping.nx.reg.move.DstBuilder()
186                 .setDstChoice(dstChoice)
187                 .setStart(Integer.valueOf(0))
188                 .setEnd(Integer.valueOf(endOffset))
189                 .build())
190             .build();
191         if (groupBucket) {
192             return new NxActionRegMoveNodesNodeGroupBucketsBucketActionsCaseBuilder()
193                 .setNxRegMove(r).build();
194         } else {
195             return new NxActionRegMoveNodesNodeTableFlowApplyActionsCaseBuilder()
196                 .setNxRegMove(r).build();
197         }
198     }
199
200     public static Action nxMoveRegAction(SrcChoice srcChoice,
201                                          DstChoice dstChoice) {
202         return nxMoveRegAction(srcChoice, dstChoice, 31, false);
203     }
204
205     public static Action nxMoveRegTunIdAction(Class<? extends NxmNxReg> src,
206                                               boolean groupBucket) {
207         return nxMoveRegAction(new SrcNxRegCaseBuilder()
208                                     .setNxReg(src).build(),
209                                new DstNxTunIdCaseBuilder()
210                                    .setNxTunId(Boolean.TRUE).build(),
211                                31,
212                                groupBucket);
213     }
214
215     public static Action nxMoveArpShaToArpThaAction() {
216         return nxMoveRegAction(new SrcNxArpShaCaseBuilder()
217                                    .setNxArpSha(Boolean.TRUE).build(),
218                                new DstNxArpThaCaseBuilder()
219                                    .setNxArpTha(Boolean.TRUE).build(),
220                                47, false);
221     }
222
223     public static Action nxMoveEthSrcToEthDstAction() {
224         return nxMoveRegAction(new SrcOfEthSrcCaseBuilder()
225                                    .setOfEthSrc(Boolean.TRUE).build(),
226                                new DstOfEthDstCaseBuilder()
227                                    .setOfEthDst(Boolean.TRUE).build(),
228                                47, false);
229     }
230
231     public static Action nxMoveArpSpaToArpTpaAction() {
232         return nxMoveRegAction(new SrcOfArpSpaCaseBuilder()
233                                    .setOfArpSpa(Boolean.TRUE).build(),
234                                new DstOfArpTpaCaseBuilder()
235                                    .setOfArpTpa(Boolean.TRUE).build());
236     }
237
238     public static Action nxOutputRegAction(SrcChoice srcChoice) {
239         NxOutputReg r = new NxOutputRegBuilder()
240             .setSrc(new org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.output.reg.grouping.nx.output.reg.SrcBuilder()
241                 .setSrcChoice(srcChoice)
242                 .setOfsNbits(Integer.valueOf(31))
243                 .build())
244             .setMaxLen(Integer.valueOf(0xffff))
245             .build();
246         return new NxActionOutputRegNodesNodeTableFlowApplyActionsCaseBuilder()
247             .setNxOutputReg(r).build();
248     }
249
250     public static Action nxOutputRegAction(Class<? extends NxmNxReg> reg) {
251         return nxOutputRegAction(new SrcNxRegCaseBuilder().setNxReg(reg).build());
252     }
253
254     public static Action nxResubmitAction(Integer inPort, Short table) {
255         NxResubmitBuilder builder = new NxResubmitBuilder();
256         if (inPort != null) {
257             builder.setInPort(inPort);
258         }
259         if (table != null) {
260             builder.setTable(table);
261         }
262         NxResubmit r = builder.build();
263         return new NxActionResubmitNodesNodeTableFlowApplyActionsCaseBuilder().setNxResubmit(r).build();
264     }
265
266     public static Action nxSetNspAction(Long nsp) {
267         NxSetNspBuilder builder = new NxSetNspBuilder();
268         if (nsp != null) {
269             builder.setNsp(nsp);
270         }
271         NxSetNsp r = builder.build();
272         return new NxActionSetNspNodesNodeTableFlowApplyActionsCaseBuilder().setNxSetNsp(r).build();
273     }
274
275     public static Action nxSetNsiAction(Short nsp) {
276         NxSetNsiBuilder builder = new NxSetNsiBuilder();
277         if (nsp != null) {
278             builder.setNsi(nsp);
279         }
280         NxSetNsi r = builder.build();
281         return new NxActionSetNsiNodesNodeTableFlowApplyActionsCaseBuilder().setNxSetNsi(r).build();
282     }
283
284 }
285