2 * Copyright (c) 2014 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
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
8 * Contributor: hema.gopalkrishnan@ericsson.com
10 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
12 import org.opendaylight.openflowjava.protocol.api.util.BinContent;
13 import org.opendaylight.openflowplugin.openflow.md.OFConstants;
14 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchConvertorImpl;
15 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchReactor;
16 import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
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.opendaylight.action.types.rev131112.action.action.CopyTtlInCase;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCase;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCase;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCase;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCase;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCase;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCase;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCase;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCase;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCase;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCase;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCase;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstActionCase;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcActionCase;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCase;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCase;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCase;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCase;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTosActionCase;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCase;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCaseBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCase;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCaseBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpDstActionCase;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpSrcActionCase;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCase;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanPcpActionCase;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.StripVlanActionCase;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlInBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.out._case.CopyTtlOutBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.mpls.ttl._case.DecMplsTtlBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupAction;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputAction;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.pbb.action._case.PopPbbActionBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsActionBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.pbb.action._case.PushPbbActionBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanAction;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.dst.action._case.SetDlDstAction;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.src.action._case.SetDlSrcAction;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlAction;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlActionBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstAction;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.src.action._case.SetNwSrcAction;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.tos.action._case.SetNwTosAction;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.ttl.action._case.SetNwTtlActionBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.queue.action._case.SetQueueAction;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.queue.action._case.SetQueueActionBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.dst.action._case.SetTpDstAction;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.src.action._case.SetTpSrcAction;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.id.action._case.SetVlanIdAction;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.pcp.action._case.SetVlanPcpAction;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DlAddressAction;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DlAddressActionBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeActionBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterAction;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterActionBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdAction;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdActionBuilder;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IpAddressActionBuilder;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthActionBuilder;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsTtlAction;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsTtlActionBuilder;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NwTosAction;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NwTosActionBuilder;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NwTtlAction;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NwTtlActionBuilder;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsAction;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsActionBuilder;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortAction;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortActionBuilder;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.QueueIdAction;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.QueueIdActionBuilder;
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpAction;
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpActionBuilder;
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidAction;
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidActionBuilder;
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Experimenter;
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Group;
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopMpls;
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopPbb;
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopVlan;
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushMpls;
126 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushPbb;
127 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushVlan;
128 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetMplsTtl;
129 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTtl;
130 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetQueue;
131 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsList;
132 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsListBuilder;
133 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.ActionBuilder;
134 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
135 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
136 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumberValues;
137 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumberValuesV10;
138 import org.opendaylight.yangtools.yang.binding.Augmentation;
139 import org.slf4j.Logger;
140 import org.slf4j.LoggerFactory;
141 import java.math.BigInteger;
142 import java.util.ArrayList;
143 import java.util.List;
146 * @author usha@ericsson Action List:This class takes data from SAL layer and
147 * converts into OF Data
148 * @author avishnoi@in.ibm.com Added convertor for OF bucket actions to SAL
152 public final class ActionConvertor {
153 private static final Logger logger = LoggerFactory.getLogger(ActionConvertor.class);
154 private static final String PREFIX_SEPARATOR = "/";
155 final private static Long MAXPortOF13 = new Long(4294967040L); // 0xffffff00
156 final private static Long MAXPortOF10 = new Long(0xff00);
158 private ActionConvertor() {
162 public static List<ActionsList> getActionList(
163 List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actions,
164 short version,BigInteger datapathid)
167 ActionsListBuilder actionsListBuilder = new ActionsListBuilder();
168 List<ActionsList> actionsList = new ArrayList<ActionsList>();
171 for (int actionItem = 0; actionItem < actions.size(); actionItem++) {
173 ActionsList list = null;
175 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action = actions.get(
176 actionItem).getAction();
178 if (action instanceof OutputActionCase)
179 list = salToOFOutputAction(action, actionsListBuilder, version);
180 else if (action instanceof GroupActionCase)
181 list = SalToOFGroupAction(action, actionsListBuilder);
182 else if (action instanceof CopyTtlOutCase)
183 list = SalToOFCopyTTLIOut(actionsListBuilder);
184 else if (action instanceof CopyTtlInCase)
185 list = SalToOFCopyTTLIIn(actionsListBuilder);
186 else if (action instanceof SetMplsTtlActionCase)
187 list = SalToOFSetMplsTtl(action, actionsListBuilder);
188 else if (action instanceof DecMplsTtlCase)
189 list = SalToOFDecMplsTtl(actionsListBuilder);
190 else if (action instanceof PushVlanActionCase)
191 list = SalToOFPushVlanAction(action, actionsListBuilder);
192 else if (action instanceof PopVlanActionCase)
193 list = SalToOFPopVlan(action, actionsListBuilder);
194 else if (action instanceof PushMplsActionCase)
195 list = SalToOFPushMplsAction(action, actionsListBuilder);
196 else if (action instanceof PopMplsActionCase)
197 list = SalToOFPopMpls(action, actionsListBuilder);
198 else if (action instanceof SetQueueActionCase)
199 list = SalToOFSetQueue(action, actionsListBuilder);
200 else if (action instanceof SetNwTtlActionCase)
201 list = SalToOFSetNwTtl(action, actionsListBuilder);
202 else if (action instanceof DecNwTtlCase)
203 list = SalToOFDecNwTtl(action, actionsListBuilder);
204 else if (action instanceof SetFieldCase)
205 list = SalToOFSetField(action, actionsListBuilder, version,datapathid);
206 else if (action instanceof PushPbbActionCase)
207 list = SalToOFPushPbbAction(action, actionsListBuilder);
208 else if (action instanceof PopPbbActionCase)
209 list = SalToOFPopPBB(action, actionsListBuilder);
210 else if (action instanceof ExperimenterAction)
211 list = SalToOFExperimenter(action, actionsListBuilder);
214 else if (action instanceof SetVlanIdActionCase)
215 list = SalToOFSetVlanId(action, actionsListBuilder, version);
216 else if (action instanceof SetVlanPcpActionCase)
217 list = SalToOFSetVlanpcp(action, actionsListBuilder, version);
218 else if (action instanceof StripVlanActionCase)
219 list = SalToOFStripVlan(action, actionsListBuilder, version);
220 else if (action instanceof SetDlSrcActionCase)
221 list = SalToOFSetDlSrc(action, actionsListBuilder, version);
222 else if (action instanceof SetDlDstActionCase)
223 list = SalToOFSetDlDst(action, actionsListBuilder, version);
224 else if (action instanceof SetNwSrcActionCase)
225 list = SalToOFSetNwSrc(action, actionsListBuilder, version);
226 else if (action instanceof SetNwDstActionCase)
227 list = SalToOFSetNwDst(action, actionsListBuilder, version);
228 else if (action instanceof SetTpSrcActionCase)
229 list = SalToOFSetTpSrc(action, actionsListBuilder, version);
230 else if (action instanceof SetTpDstActionCase)
231 list = SalToOFSetTpDst(action, actionsListBuilder, version);
232 else if (action instanceof SetNwTosActionCase)
233 list = SalToOFSetNwTos(action, actionsListBuilder, version);
236 actionsList.add(list);
244 private static ActionsList SalToOFSetField(
245 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
246 ActionsListBuilder actionsListBuilder, short version,BigInteger datapathid) {
248 SetFieldCase setFieldCase = (SetFieldCase) action;
249 org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match match = setFieldCase
252 OxmFieldsActionBuilder oxmFieldsActionBuilder = new OxmFieldsActionBuilder();
253 MatchReactor.getInstance().convert(match, version, oxmFieldsActionBuilder,datapathid);
255 ActionBuilder actionBuilder = new ActionBuilder();
257 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetField.class);
259 actionBuilder.addAugmentation(OxmFieldsAction.class, oxmFieldsActionBuilder.build());
260 actionsListBuilder.setAction(actionBuilder.build());
261 return actionsListBuilder.build();
265 private static ActionsList SalToOFDecNwTtl(
266 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
267 ActionsListBuilder actionsListBuilder) {
268 ActionBuilder actionBuilder = new ActionBuilder();
270 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecNwTtl.class);
272 return emtpyAction(actionBuilder, actionsListBuilder);
275 private static ActionsList SalToOFPushMplsAction(
276 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
277 ActionsListBuilder actionsListBuilder) {
278 ActionBuilder actionBuilder = new ActionBuilder();
279 PushMplsActionCase pushMplsActionCase = (PushMplsActionCase) action;
281 actionBuilder.setType(PushMpls.class);
283 return SalToOFPushAction(pushMplsActionCase.getPushMplsAction().getEthernetType(), actionBuilder,
288 private static ActionsList SalToOFPushPbbAction(
289 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
290 ActionsListBuilder actionsListBuilder) {
291 ActionBuilder actionBuilder = new ActionBuilder();
292 PushPbbActionCase pushPbbActionCase = (PushPbbActionCase) action;
293 actionBuilder.setType(PushPbb.class);
295 return SalToOFPushAction(pushPbbActionCase.getPushPbbAction().getEthernetType(), actionBuilder,
299 private static ActionsList SalToOFPushVlanAction(
300 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
301 ActionsListBuilder actionsListBuilder) {
302 ActionBuilder actionBuilder = new ActionBuilder();
303 PushVlanActionCase pushVlanActionCase = (PushVlanActionCase) action;
304 PushVlanAction pushVlanAction = pushVlanActionCase.getPushVlanAction();
305 actionBuilder.setType(PushVlan.class);
307 return SalToOFPushAction(pushVlanAction.getEthernetType(), actionBuilder, actionsListBuilder);
311 private static ActionsList SalToOFSetNwTtl(
312 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
313 ActionsListBuilder actionsListBuilder) {
314 ActionBuilder actionBuilder = new ActionBuilder();
315 SetNwTtlActionCase nwTtlActionCase = (SetNwTtlActionCase) action;
316 NwTtlActionBuilder nwTtlActionBuilder = new NwTtlActionBuilder();
317 nwTtlActionBuilder.setNwTtl(nwTtlActionCase.getSetNwTtlAction().getNwTtl());
318 actionBuilder.setType(SetNwTtl.class);
319 actionBuilder.addAugmentation(NwTtlAction.class, nwTtlActionBuilder.build());
320 actionsListBuilder.setAction(actionBuilder.build());
321 return actionsListBuilder.build();
325 private static ActionsList SalToOFSetQueue(
326 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
327 ActionsListBuilder actionsListBuilder) {
328 ActionBuilder actionBuilder = new ActionBuilder();
329 SetQueueActionCase setQueueActionCase = (SetQueueActionCase) action;
330 SetQueueAction setQueueAction = setQueueActionCase.getSetQueueAction();
332 QueueIdActionBuilder queueIdActionBuilder = new QueueIdActionBuilder();
333 queueIdActionBuilder.setQueueId(setQueueAction.getQueueId());
334 actionBuilder.setType(SetQueue.class);
335 actionBuilder.addAugmentation(QueueIdAction.class, queueIdActionBuilder.build());
337 actionsListBuilder.setAction(actionBuilder.build());
338 return actionsListBuilder.build();
341 private static ActionsList SalToOFPopMpls(
342 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
343 ActionsListBuilder actionsListBuilder) {
344 ActionBuilder actionBuilder = new ActionBuilder();
345 PopMplsActionCase popMplsActionCase = (PopMplsActionCase) action;
346 actionBuilder.setType(PopMpls.class);
348 return SalToOFPushAction(popMplsActionCase.getPopMplsAction().getEthernetType(), actionBuilder,
352 private static ActionsList SalToOFPopVlan(
353 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
354 ActionsListBuilder actionsListBuilder) {
355 ActionBuilder actionBuilder = new ActionBuilder();
356 actionBuilder.setType(PopVlan.class);
358 return emtpyAction(actionBuilder, actionsListBuilder);
361 private static ActionsList SalToOFPopPBB(
362 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
363 ActionsListBuilder actionsListBuilder) {
364 ActionBuilder actionBuilder = new ActionBuilder();
365 actionBuilder.setType(PopPbb.class);
366 return emtpyAction(actionBuilder, actionsListBuilder);
369 private static ActionsList SalToOFExperimenter(
370 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
371 ActionsListBuilder actionsListBuilder) {
373 ActionBuilder actionBuilder = new ActionBuilder();
374 ExperimenterActionBuilder experimenterActionBuilder = new ExperimenterActionBuilder();
375 experimenterActionBuilder.setExperimenter(((ExperimenterAction) action).getExperimenter());
376 actionBuilder.setType(Experimenter.class);
379 ExperimenterAction.class,
380 (Augmentation<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action>) experimenterActionBuilder);
381 actionsListBuilder.setAction(actionBuilder.build());
382 return actionsListBuilder.build();
386 private static ActionsList SalToOFSetVlanId(
387 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
388 ActionsListBuilder actionsListBuilder, short version) {
390 if (version == OFConstants.OFP_VERSION_1_0) {
391 ActionBuilder actionBuilder = new ActionBuilder();
392 SetVlanIdActionCase setvlanidcase = (SetVlanIdActionCase) action;
393 SetVlanIdAction setvlanidaction = setvlanidcase.getSetVlanIdAction();
395 VlanVidActionBuilder vlanidActionBuilder = new VlanVidActionBuilder();
396 vlanidActionBuilder.setVlanVid(setvlanidaction.getVlanId().getValue());
398 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetVlanVid.class);
399 actionBuilder.addAugmentation(VlanVidAction.class, vlanidActionBuilder.build());
400 actionsListBuilder.setAction(actionBuilder.build());
401 return actionsListBuilder.build();
403 logger.error("Unknown Action Type for the Version", version);
409 private static ActionsList SalToOFSetVlanpcp(
410 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
411 ActionsListBuilder actionsListBuilder, short version) {
413 if (version == OFConstants.OFP_VERSION_1_0) {
414 ActionBuilder actionBuilder = new ActionBuilder();
415 SetVlanPcpActionCase setvlanpcpcase = (SetVlanPcpActionCase) action;
416 SetVlanPcpAction setvlanpcpaction = setvlanpcpcase.getSetVlanPcpAction();
418 VlanPcpActionBuilder vlanpcpActionBuilder = new VlanPcpActionBuilder();
419 vlanpcpActionBuilder.setVlanPcp(setvlanpcpaction.getVlanPcp().getValue());
421 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetVlanPcp.class);
422 actionBuilder.addAugmentation(VlanPcpAction.class, vlanpcpActionBuilder.build());
423 actionsListBuilder.setAction(actionBuilder.build());
424 return actionsListBuilder.build();
426 logger.error("Unknown Action Type for the Version", version);
432 private static ActionsList SalToOFStripVlan(
433 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
434 ActionsListBuilder actionsListBuilder, short version) {
436 if (version == OFConstants.OFP_VERSION_1_0) {
437 ActionBuilder actionBuilder = new ActionBuilder();
439 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.StripVlan.class);
441 return emtpyAction(actionBuilder, actionsListBuilder);
443 logger.error("Unknown Action Type for the Version", version);
449 private static ActionsList SalToOFSetDlSrc(
450 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
451 ActionsListBuilder actionsListBuilder, short version) {
453 if (version == OFConstants.OFP_VERSION_1_0) {
454 ActionBuilder actionBuilder = new ActionBuilder();
455 SetDlSrcActionCase setdlsrccase = (SetDlSrcActionCase) action;
456 SetDlSrcAction setdlsrcaction = setdlsrccase.getSetDlSrcAction();
458 DlAddressActionBuilder dladdressactionbuilder = new DlAddressActionBuilder();
459 dladdressactionbuilder.setDlAddress(setdlsrcaction.getAddress());
461 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetDlSrc.class);
462 actionBuilder.addAugmentation(DlAddressAction.class, dladdressactionbuilder.build());
463 actionsListBuilder.setAction(actionBuilder.build());
464 return actionsListBuilder.build();
466 logger.error("Unknown Action Type for the Version", version);
472 private static ActionsList SalToOFSetDlDst(
473 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
474 ActionsListBuilder actionsListBuilder, short version) {
476 if (version == OFConstants.OFP_VERSION_1_0) {
477 ActionBuilder actionBuilder = new ActionBuilder();
478 SetDlDstActionCase setdldstcase = (SetDlDstActionCase) action;
479 SetDlDstAction setdldstaction = setdldstcase.getSetDlDstAction();
481 DlAddressActionBuilder dladdressactionbuilder = new DlAddressActionBuilder();
482 dladdressactionbuilder.setDlAddress(setdldstaction.getAddress());
484 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetDlDst.class);
485 actionBuilder.addAugmentation(DlAddressAction.class, dladdressactionbuilder.build());
486 actionsListBuilder.setAction(actionBuilder.build());
487 return actionsListBuilder.build();
489 logger.error("Unknown Action Type for the Version", version);
495 private static ActionsList SalToOFSetNwSrc(
496 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
497 ActionsListBuilder actionsListBuilder, short version) {
499 if (version == OFConstants.OFP_VERSION_1_0) {
500 ActionBuilder actionBuilder = new ActionBuilder();
501 SetNwSrcActionCase setnwsrccase = (SetNwSrcActionCase) action;
502 SetNwSrcAction setnwsrcaction = setnwsrccase.getSetNwSrcAction();
504 IpAddressActionBuilder ipvaddress = new IpAddressActionBuilder();
505 Ipv4 address_ipv4 = (Ipv4) setnwsrcaction.getAddress();
506 Ipv4Address address = new Ipv4Address(address_ipv4.getIpv4Address().getValue());
507 ipvaddress.setIpAddress(address);
509 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwSrc.class);
510 actionBuilder.addAugmentation(
511 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IpAddressAction.class,
513 actionsListBuilder.setAction(actionBuilder.build());
514 return actionsListBuilder.build();
516 logger.error("Unknown Action Type for the Version", version);
522 private static ActionsList SalToOFSetNwDst(
523 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
524 ActionsListBuilder actionsListBuilder, short version) {
526 if (version == OFConstants.OFP_VERSION_1_0) {
527 ActionBuilder actionBuilder = new ActionBuilder();
528 SetNwDstActionCase setnwdstcase = (SetNwDstActionCase) action;
529 SetNwDstAction setnwdstaction = setnwdstcase.getSetNwDstAction();
531 IpAddressActionBuilder ipvaddress = new IpAddressActionBuilder();
532 Ipv4 address_ipv4 = (Ipv4) setnwdstaction.getAddress();
533 Ipv4Address address = new Ipv4Address(address_ipv4.getIpv4Address().getValue());
534 ipvaddress.setIpAddress(address);
536 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwDst.class);
537 actionBuilder.addAugmentation(
538 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IpAddressAction.class,
540 actionsListBuilder.setAction(actionBuilder.build());
541 return actionsListBuilder.build();
544 logger.error("Unknown Action Type for the Version", version);
550 private static ActionsList SalToOFSetNwTos(
551 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
552 ActionsListBuilder actionsListBuilder, short version) {
554 if (version == OFConstants.OFP_VERSION_1_0) {
555 ActionBuilder actionBuilder = new ActionBuilder();
556 SetNwTosActionCase setnwtoscase = (SetNwTosActionCase) action;
557 SetNwTosAction setnwtosaction = setnwtoscase.getSetNwTosAction();
559 NwTosActionBuilder tosBuilder = new NwTosActionBuilder();
560 tosBuilder.setNwTos(setnwtosaction.getTos().shortValue());
561 actionBuilder.addAugmentation(NwTosAction.class, tosBuilder.build());
562 actionBuilder.setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTos.class);
564 actionsListBuilder.setAction(actionBuilder.build());
565 return actionsListBuilder.build();
568 logger.error("Unknown Action Type for the Version", version);
575 private static ActionsList SalToOFSetTpSrc(
576 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
577 ActionsListBuilder actionsListBuilder, short version) {
579 if (version == OFConstants.OFP_VERSION_1_0) {
580 ActionBuilder actionBuilder = new ActionBuilder();
581 SetTpSrcActionCase settpsrccase = (SetTpSrcActionCase) action;
582 SetTpSrcAction settpsrcaction = settpsrccase.getSetTpSrcAction();
584 PortActionBuilder settpsrc = new PortActionBuilder();
585 PortNumber port = new PortNumber(settpsrcaction.getPort().getValue().longValue());
586 settpsrc.setPort(port);
589 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetTpSrc.class);
590 actionBuilder.addAugmentation(PortAction.class, settpsrc.build());
591 actionsListBuilder.setAction(actionBuilder.build());
592 return actionsListBuilder.build();
594 logger.error("Unknown Action Type for the Version", version);
600 private static ActionsList SalToOFSetTpDst(
601 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
602 ActionsListBuilder actionsListBuilder, short version) {
604 if (version == OFConstants.OFP_VERSION_1_0) {
605 ActionBuilder actionBuilder = new ActionBuilder();
607 SetTpDstActionCase settpdstcase = (SetTpDstActionCase) action;
608 SetTpDstAction settpdstaction = settpdstcase.getSetTpDstAction();
609 PortActionBuilder settpdst = new PortActionBuilder();
610 PortNumber port = new PortNumber(settpdstaction.getPort().getValue().longValue());
611 settpdst.setPort(port);
614 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetTpDst.class);
615 actionBuilder.addAugmentation(PortAction.class, settpdst.build());
616 actionsListBuilder.setAction(actionBuilder.build());
617 return actionsListBuilder.build();
619 logger.error("Unknown Action Type for the Version", version);
625 private static ActionsList SalToOFGroupAction(
626 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
627 ActionsListBuilder actionsListBuilder) {
629 GroupActionCase groupActionCase = (GroupActionCase) action;
630 GroupAction groupAction = groupActionCase.getGroupAction();
632 GroupIdActionBuilder groupIdBuilder = new GroupIdActionBuilder();
633 groupIdBuilder.setGroupId(groupAction.getGroupId());
634 ActionBuilder actionBuilder = new ActionBuilder();
635 actionBuilder.setType(Group.class);
636 actionBuilder.addAugmentation(GroupIdAction.class, groupIdBuilder.build());
637 actionsListBuilder.setAction(actionBuilder.build());
638 return actionsListBuilder.build();
641 private static ActionsList SalToOFPushAction(Integer ethernetType, ActionBuilder actionBuilder,
642 ActionsListBuilder actionsListBuilder) {
644 EthertypeActionBuilder ethertypeActionBuilder = new EthertypeActionBuilder();
645 ethertypeActionBuilder.setEthertype(new EtherType(ethernetType));
648 actionBuilder.addAugmentation(EthertypeAction.class, ethertypeActionBuilder.build());
649 actionsListBuilder.setAction(actionBuilder.build());
650 return actionsListBuilder.build();
653 private static ActionsList SalToOFDecMplsTtl(ActionsListBuilder actionsListBuilder) {
654 ActionBuilder actionBuilder = new ActionBuilder();
656 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl.class);
657 return emtpyAction(actionBuilder, actionsListBuilder);
660 private static ActionsList SalToOFSetMplsTtl(
661 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
662 ActionsListBuilder actionsListBuilder) {
663 ActionBuilder actionBuilder = new ActionBuilder();
665 SetMplsTtlActionCase mplsTtlActionCase = (SetMplsTtlActionCase) action;
666 SetMplsTtlAction mplsTtlAction = mplsTtlActionCase.getSetMplsTtlAction();
668 MplsTtlActionBuilder mplsTtlActionBuilder = new MplsTtlActionBuilder();
669 mplsTtlActionBuilder.setMplsTtl(mplsTtlAction.getMplsTtl()/* SAL */);
671 actionBuilder.setType(SetMplsTtl.class);
672 actionBuilder.addAugmentation(MplsTtlAction.class, mplsTtlActionBuilder.build());
673 actionsListBuilder.setAction(actionBuilder.build());
674 return actionsListBuilder.build();
677 private static ActionsList SalToOFCopyTTLIIn(ActionsListBuilder actionsListBuilder) {
678 ActionBuilder actionBuilder = new ActionBuilder();
680 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlIn.class);
681 return emtpyAction(actionBuilder, actionsListBuilder);
684 private static ActionsList SalToOFCopyTTLIOut(ActionsListBuilder actionsListBuilder) {
685 ActionBuilder actionBuilder = new ActionBuilder();
687 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut.class);
688 return emtpyAction(actionBuilder, actionsListBuilder);
692 private static ActionsList emtpyAction(ActionBuilder actionBuilder, ActionsListBuilder actionsListBuilder) {
694 actionsListBuilder.setAction(actionBuilder.build());
695 return actionsListBuilder.build();
698 private static ActionsList salToOFOutputAction(
699 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
700 ActionsListBuilder actionsListBuilder, short version) {
702 OutputActionCase outputActionCase = ((OutputActionCase) action);
703 OutputAction outputAction = outputActionCase.getOutputAction();
704 PortActionBuilder portAction = new PortActionBuilder();
705 MaxLengthActionBuilder maxLenActionBuilder = new MaxLengthActionBuilder();
706 if (outputAction.getMaxLength() != null) {
707 maxLenActionBuilder.setMaxLength(outputAction.getMaxLength());
709 maxLenActionBuilder.setMaxLength(new Integer(0));
711 ActionBuilder actionBuilder = new ActionBuilder();
712 actionBuilder.addAugmentation(MaxLengthAction.class, maxLenActionBuilder.build());
714 Uri uri = outputAction.getOutputNodeConnector();
716 if (version >= OFConstants.OFP_VERSION_1_3) {
718 if (uri.getValue().equals(OutputPortValues.CONTROLLER.toString())) {
719 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.CONTROLLER
721 } else if (uri.getValue().equals(OutputPortValues.ALL.toString())) {
722 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.ALL.getIntValue())));
723 } else if (uri.getValue().equals(OutputPortValues.ANY.toString())) {
724 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.ANY.getIntValue())));
726 } else if (uri.getValue().equals(OutputPortValues.FLOOD.toString())) {
727 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.FLOOD.getIntValue())));
729 } else if (uri.getValue().equals(OutputPortValues.INPORT.toString())) {
730 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.INPORT.getIntValue())));
732 } else if (uri.getValue().equals(OutputPortValues.LOCAL.toString())) {
733 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.LOCAL.getIntValue())));
735 } else if (uri.getValue().equals(OutputPortValues.NORMAL.toString())) {
736 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.NORMAL.getIntValue())));
738 } else if (uri.getValue().equals(OutputPortValues.TABLE.toString())) {
739 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.TABLE.getIntValue())));
741 } else if (uri.getValue().equals(OutputPortValues.NONE.toString())) {
742 logger.error("Unknown Port Type for the Version");
743 } else if (InventoryDataServiceUtil.portNumberfromNodeConnectorId(outputAction.getOutputNodeConnector().getValue()) < MAXPortOF13) {
744 portAction.setPort(new PortNumber(InventoryDataServiceUtil.portNumberfromNodeConnectorId(outputAction.getOutputNodeConnector().getValue())));
746 logger.error("Invalid Port for Output Action");
748 } else if (version == OFConstants.OFP_VERSION_1_0) {
750 if (uri.getValue().equals(OutputPortValues.CONTROLLER.toString())) {
751 portAction.setPort(new PortNumber((long) PortNumberValuesV10.CONTROLLER.getIntValue()));
752 } else if (uri.getValue().equals(OutputPortValues.ALL.toString())) {
753 portAction.setPort(new PortNumber((long) PortNumberValuesV10.ALL.getIntValue()));
754 } else if (uri.getValue().equals(OutputPortValues.FLOOD.toString())) {
755 portAction.setPort(new PortNumber((long) PortNumberValuesV10.FLOOD.getIntValue()));
756 } else if (uri.getValue().equals(OutputPortValues.INPORT.toString())) {
757 portAction.setPort(new PortNumber((long) PortNumberValuesV10.INPORT.getIntValue()));
758 } else if (uri.getValue().equals(OutputPortValues.LOCAL.toString())) {
759 portAction.setPort(new PortNumber((long) PortNumberValuesV10.LOCAL.getIntValue()));
760 } else if (uri.getValue().equals(OutputPortValues.NORMAL.toString())) {
761 portAction.setPort(new PortNumber((long) PortNumberValuesV10.NORMAL.getIntValue()));
762 } else if (uri.getValue().equals(OutputPortValues.TABLE.toString())) {
763 portAction.setPort(new PortNumber((long) PortNumberValuesV10.TABLE.getIntValue()));
764 } else if (uri.getValue().equals(OutputPortValues.NONE.toString())) {
765 portAction.setPort(new PortNumber((long) PortNumberValuesV10.NONE.getIntValue()));
766 } else if (uri.getValue().equals(OutputPortValues.ANY.toString())) {
767 logger.error("Unknown Port Type for the Version");
768 } else if (InventoryDataServiceUtil.portNumberfromNodeConnectorId(outputAction.getOutputNodeConnector().getValue()) < MAXPortOF10) {
769 portAction.setPort(new PortNumber(InventoryDataServiceUtil.portNumberfromNodeConnectorId(outputAction.getOutputNodeConnector().getValue())));
771 logger.error("Invalid Port for Output Action");
776 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output.class);
777 actionBuilder.addAugmentation(PortAction.class, portAction.build());
778 actionsListBuilder.setAction(actionBuilder.build());
779 return actionsListBuilder.build();
784 * Method to convert OF actions associated with bucket to SAL Actions.
787 * @return List of converted SAL Actions.
789 public static List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action> toMDSalActions(
790 List<ActionsList> actionList) {
792 List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action> bucketActions = new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action>();
793 for (ActionsList actionDesc : actionList) {
795 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action = actionDesc
798 if (action.getType().equals(
799 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output.class))
800 bucketActions.add(ofToSALOutputAction(action));
801 else if (action.getType().equals(
802 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Group.class))
803 bucketActions.add(ofToSALGroupAction(action));
804 else if (action.getType().equals(
805 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut.class)) {
806 CopyTtlOutBuilder copyTtlOutaction = new CopyTtlOutBuilder();
807 bucketActions.add(new CopyTtlOutCaseBuilder().setCopyTtlOut(copyTtlOutaction.build()).build());
808 } else if (action.getType().equals(
809 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlIn.class)) {
810 CopyTtlInBuilder copyTtlInaction = new CopyTtlInBuilder();
811 bucketActions.add(new CopyTtlInCaseBuilder().setCopyTtlIn(copyTtlInaction.build()).build());
812 } else if (action.getType().equals(
813 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetMplsTtl.class))
814 bucketActions.add(ofToSALSetMplsTtl(action));
815 else if (action.getType().equals(
816 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl.class)) {
817 DecMplsTtlBuilder decMplsTtl = new DecMplsTtlBuilder();
818 bucketActions.add(new DecMplsTtlCaseBuilder().setDecMplsTtl(decMplsTtl.build()).build());
819 } else if (action.getType().equals(
820 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushVlan.class))
821 bucketActions.add(ofToSALPushVlanAction(action));
822 else if (action.getType().equals(
823 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopVlan.class)) {
824 PopVlanActionBuilder popVlan = new PopVlanActionBuilder();
825 bucketActions.add(new PopVlanActionCaseBuilder().setPopVlanAction(popVlan.build()).build());
826 } else if (action.getType().equals(
827 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushMpls.class)) {
828 PushMplsActionBuilder pushMpls = new PushMplsActionBuilder();
829 bucketActions.add(new PushMplsActionCaseBuilder().setPushMplsAction(pushMpls.build()).build());
830 } else if (action.getType().equals(
831 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopMpls.class)) {
832 PopMplsActionBuilder popMpls = new PopMplsActionBuilder();
833 bucketActions.add(new PopMplsActionCaseBuilder().setPopMplsAction(popMpls.build()).build());
834 } else if (action.getType().equals(
835 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetQueue.class))
836 bucketActions.add(ofToSALSetQueue(action));
838 else if (action.getType().equals(
839 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTtl.class))
840 bucketActions.add(ofToSALSetNwTtl(action));
841 else if (action.getType().equals(
842 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecNwTtl.class)) {
843 DecNwTtlBuilder decNwTtl = new DecNwTtlBuilder();
844 bucketActions.add(new DecNwTtlCaseBuilder().setDecNwTtl(decNwTtl.build()).build());
845 } else if (action.getType().equals(
846 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetField.class))
847 bucketActions.add(new SetFieldCaseBuilder().setSetField(MatchConvertorImpl.ofToSALSetField(action))
850 else if (action.getType().equals(
851 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushPbb.class))
852 bucketActions.add(ofToSALPushPbbAction(action));
853 else if (action.getType().equals(
854 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopPbb.class)) {
855 PopPbbActionBuilder popPbb = new PopPbbActionBuilder();
856 bucketActions.add(new PopPbbActionCaseBuilder().setPopPbbAction(popPbb.build()).build());
857 } else if (action.getType().equals(
858 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Experimenter.class)) {
859 // bucketActions.add(ofToSALExperimenter(action));
860 // TODO: Need to explore/discuss on how to handle experimenter
865 return bucketActions;
869 * Method converts OF Output action object to SAL Output action object.
872 * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.
873 * action.rev130731.actions.actions.list.Action
874 * @return OutputAction
876 public static OutputActionCase ofToSALOutputAction(
877 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action) {
879 OutputActionBuilder outputAction = new OutputActionBuilder();
880 PortAction port = action.getAugmentation(PortAction.class);
882 outputAction.setOutputNodeConnector(new Uri(port.getPort().getValue().toString()));
884 logger.error("Provided action is not OF Output action, no associated port found!");
887 MaxLengthAction length = action.getAugmentation(MaxLengthAction.class);
888 if (length != null) {
889 outputAction.setMaxLength(length.getMaxLength());
891 logger.error("Provided action is not OF Output action, no associated length found!");
894 return new OutputActionCaseBuilder().setOutputAction(outputAction.build()).build();
898 * Method converts OF GroupAction object to SAL GroupAction object
901 * @return GroupAction
903 public static GroupActionCase ofToSALGroupAction(
904 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action) {
906 GroupActionBuilder groupAction = new GroupActionBuilder();
908 GroupIdAction groupId = action.getAugmentation(GroupIdAction.class);
909 groupAction.setGroupId(groupId.getGroupId());
911 return new GroupActionCaseBuilder().setGroupAction(groupAction.build()).build();
915 * Method converts OF SetMplsTTL action object to SAL SetMplsTTL action
921 public static SetMplsTtlActionCase ofToSALSetMplsTtl(
922 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action) {
924 SetMplsTtlActionBuilder mplsTtlAction = new SetMplsTtlActionBuilder();
925 MplsTtlAction mplsTtl = action.getAugmentation(MplsTtlAction.class);
926 mplsTtlAction.setMplsTtl(mplsTtl.getMplsTtl());
927 return new SetMplsTtlActionCaseBuilder().setSetMplsTtlAction(mplsTtlAction.build()).build();
931 * Method converts OF Pushvlan action to SAL PushVlan action.
934 * @return PushVlanAction
936 public static PushVlanActionCase ofToSALPushVlanAction(
937 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action) {
939 PushVlanActionBuilder pushVlanAction = new PushVlanActionBuilder();
941 EthertypeAction etherType = action.getAugmentation(EthertypeAction.class);
942 pushVlanAction.setVlanId(new VlanId(etherType.getEthertype().getValue()));
944 return new PushVlanActionCaseBuilder().setPushVlanAction(pushVlanAction.build()).build();
948 * Method converts OF SetQueue action to SAL SetQueue action.
951 * @return SetQueueAction
953 public static SetQueueActionCase ofToSALSetQueue(
954 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action) {
956 SetQueueActionBuilder setQueueAction = new SetQueueActionBuilder();
958 QueueIdAction queueId = action.getAugmentation(QueueIdAction.class);
959 setQueueAction.setQueueId(queueId.getQueueId());
961 return new SetQueueActionCaseBuilder().setSetQueueAction(setQueueAction.build()).build();
965 * Method converts OF SetNwTtl action to SAL SetNwTtl action.
968 * @return SetNwTtlAction
970 public static SetNwTtlActionCase ofToSALSetNwTtl(
971 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action) {
973 SetNwTtlActionBuilder setNwTtl = new SetNwTtlActionBuilder();
974 NwTtlAction nwTtl = action.getAugmentation(NwTtlAction.class);
975 setNwTtl.setNwTtl(nwTtl.getNwTtl());
977 return new SetNwTtlActionCaseBuilder().setSetNwTtlAction(setNwTtl.build()).build();
981 * Method converts OF Pushvlan action to SAL PushVlan action.
984 * @return PushVlanAction
986 public static PushPbbActionCase ofToSALPushPbbAction(
987 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action) {
989 PushPbbActionBuilder pushPbbAction = new PushPbbActionBuilder();
991 EthertypeAction etherType = action.getAugmentation(EthertypeAction.class);
992 pushPbbAction.setEthernetType(etherType.getEthertype().getValue());
994 return new PushPbbActionCaseBuilder().setPushPbbAction(pushPbbAction.build()).build();
997 public static Object ofToSALExperimenter(
998 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action) {
1000 ExperimenterAction ExperimenterAction = action.getAugmentation(ExperimenterAction.class);
1004 * TODO: Need to explore/discuss about how to handle experimenter