1 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
3 import java.util.ArrayList;
6 import org.opendaylight.openflowjava.protocol.api.util.BinContent;
7 import org.opendaylight.openflowplugin.openflow.md.OFConstants;
8 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchConvertorImpl;
9 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchReactor;
10 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
11 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCase;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCase;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCase;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCase;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCase;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCase;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCase;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCase;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCase;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCase;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCase;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCase;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstActionCase;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcActionCase;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCase;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCase;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCase;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCase;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCase;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCaseBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCase;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCaseBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpDstActionCase;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpSrcActionCase;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCase;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanPcpActionCase;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.StripVlanActionCase;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlInBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.out._case.CopyTtlOutBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.mpls.ttl._case.DecMplsTtlBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupAction;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputAction;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.pbb.action._case.PopPbbActionBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsActionBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.pbb.action._case.PushPbbActionBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanAction;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.dst.action._case.SetDlDstAction;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.src.action._case.SetDlSrcAction;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlAction;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlActionBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstAction;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.src.action._case.SetNwSrcAction;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.ttl.action._case.SetNwTtlActionBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.queue.action._case.SetQueueAction;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.queue.action._case.SetQueueActionBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.dst.action._case.SetTpDstAction;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.src.action._case.SetTpSrcAction;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.id.action._case.SetVlanIdAction;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.pcp.action._case.SetVlanPcpAction;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DlAddressAction;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DlAddressActionBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeActionBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterAction;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterActionBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdAction;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdActionBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IpAddressActionBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthActionBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsTtlAction;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsTtlActionBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NwTtlAction;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NwTtlActionBuilder;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsAction;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsActionBuilder;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortAction;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortActionBuilder;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.QueueIdAction;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.QueueIdActionBuilder;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpAction;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpActionBuilder;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidAction;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidActionBuilder;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Experimenter;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Group;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopMpls;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopPbb;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopVlan;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushMpls;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushPbb;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushVlan;
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetMplsTtl;
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTtl;
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetQueue;
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsList;
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsListBuilder;
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.ActionBuilder;
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumberValues;
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumberValuesV10;
126 import org.opendaylight.yangtools.yang.binding.Augmentation;
127 import org.slf4j.Logger;
128 import org.slf4j.LoggerFactory;
131 * @author usha@ericsson Action List:This class takes data from SAL layer and
132 * converts into OF Data
133 * @author avishnoi@in.ibm.com Added convertor for OF bucket actions to SAL
137 public final class ActionConvertor {
138 private static final Logger logger = LoggerFactory.getLogger(ActionConvertor.class);
139 private static final String PREFIX_SEPARATOR = "/";
141 private ActionConvertor() {
145 public static List<ActionsList> getActionList(
146 List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actions,
150 ActionsListBuilder actionsListBuilder = new ActionsListBuilder();
151 List<ActionsList> actionsList = new ArrayList<ActionsList>();
153 for (int actionItem = 0; actionItem < actions.size(); actionItem++) {
155 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action = actions.get(
156 actionItem).getAction();
158 if (action instanceof OutputActionCase)
159 actionsList.add(salToOFOutputAction(action, actionsListBuilder, version));
160 else if (action instanceof GroupActionCase)
161 actionsList.add(SalToOFGroupAction(action, actionsListBuilder));
162 else if (action instanceof CopyTtlOutCase)
163 actionsList.add(SalToOFCopyTTLIOut(actionsListBuilder));
164 else if (action instanceof CopyTtlInCase)
165 actionsList.add(SalToOFCopyTTLIIn(actionsListBuilder));
166 else if (action instanceof SetMplsTtlActionCase)
167 actionsList.add(SalToOFSetMplsTtl(action, actionsListBuilder));
168 else if (action instanceof DecMplsTtlCase)
169 actionsList.add(SalToOFDecMplsTtl(actionsListBuilder));
170 else if (action instanceof PushVlanActionCase)
171 actionsList.add(SalToOFPushVlanAction(action, actionsListBuilder));
172 else if (action instanceof PopVlanActionCase)
173 actionsList.add(SalToOFPopVlan(action, actionsListBuilder));
174 else if (action instanceof PushMplsActionCase)
175 actionsList.add(SalToOFPushMplsAction(action, actionsListBuilder));
176 else if (action instanceof PopMplsActionCase)
177 actionsList.add(SalToOFPopMpls(action, actionsListBuilder));
178 else if (action instanceof SetQueueActionCase)
179 actionsList.add(SalToOFSetQueue(action, actionsListBuilder));
180 else if (action instanceof SetNwTtlActionCase)
181 actionsList.add(SalToOFSetNwTtl(action, actionsListBuilder));
182 else if (action instanceof DecNwTtlCase)
183 actionsList.add(SalToOFDecNwTtl(action, actionsListBuilder));
184 else if (action instanceof SetFieldCase)
185 actionsList.add(SalToOFSetField(action, actionsListBuilder, version));
186 else if (action instanceof PushPbbActionCase)
187 actionsList.add(SalToOFPushPbbAction(action, actionsListBuilder));
188 else if (action instanceof PopPbbActionCase)
189 actionsList.add(SalToOFPopPBB(action, actionsListBuilder));
190 else if (action instanceof ExperimenterAction)
191 actionsList.add(SalToOFExperimenter(action, actionsListBuilder));
194 else if (action instanceof SetVlanIdActionCase)
195 actionsList.add(SalToOFSetVlanId(action, actionsListBuilder, version));
196 else if (action instanceof SetVlanPcpActionCase)
197 actionsList.add(SalToOFSetVlanpcp(action, actionsListBuilder, version));
198 else if (action instanceof StripVlanActionCase)
199 actionsList.add(SalToOFStripVlan(action, actionsListBuilder, version));
200 else if (action instanceof SetDlSrcActionCase)
201 actionsList.add(SalToOFSetDlSrc(action, actionsListBuilder, version));
202 else if (action instanceof SetDlDstActionCase)
203 actionsList.add(SalToOFSetDlDst(action, actionsListBuilder, version));
204 else if (action instanceof SetNwSrcActionCase)
205 actionsList.add(SalToOFSetNwSrc(action, actionsListBuilder, version));
206 else if (action instanceof SetNwDstActionCase)
207 actionsList.add(SalToOFSetNwDst(action, actionsListBuilder, version));
208 else if (action instanceof SetTpSrcActionCase)
209 actionsList.add(SalToOFSetTpSrc(action, actionsListBuilder, version));
210 else if (action instanceof SetTpDstActionCase)
211 actionsList.add(SalToOFSetTpDst(action, actionsListBuilder, version));
218 private static ActionsList SalToOFSetField(
219 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
220 ActionsListBuilder actionsListBuilder, short version) {
222 SetFieldCase setFieldCase = (SetFieldCase) action;
223 org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match match = setFieldCase
226 OxmFieldsActionBuilder oxmFieldsActionBuilder = new OxmFieldsActionBuilder();
227 MatchReactor.getInstance().convert(match, version, oxmFieldsActionBuilder);
229 ActionBuilder actionBuilder = new ActionBuilder();
231 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetField.class);
233 actionBuilder.addAugmentation(OxmFieldsAction.class, oxmFieldsActionBuilder.build());
234 actionsListBuilder.setAction(actionBuilder.build());
235 return actionsListBuilder.build();
239 private static ActionsList SalToOFDecNwTtl(
240 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
241 ActionsListBuilder actionsListBuilder) {
242 ActionBuilder actionBuilder = new ActionBuilder();
244 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecNwTtl.class);
246 return emtpyAction(actionBuilder, actionsListBuilder);
249 private static ActionsList SalToOFPushMplsAction(
250 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
251 ActionsListBuilder actionsListBuilder) {
252 ActionBuilder actionBuilder = new ActionBuilder();
253 PushMplsActionCase pushMplsActionCase = (PushMplsActionCase) action;
255 actionBuilder.setType(PushMpls.class);
257 return SalToOFPushAction(pushMplsActionCase.getPushMplsAction().getEthernetType(), actionBuilder,
262 private static ActionsList SalToOFPushPbbAction(
263 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
264 ActionsListBuilder actionsListBuilder) {
265 ActionBuilder actionBuilder = new ActionBuilder();
266 PushPbbActionCase pushPbbActionCase = (PushPbbActionCase) action;
267 actionBuilder.setType(PushPbb.class);
269 return SalToOFPushAction(pushPbbActionCase.getPushPbbAction().getEthernetType(), actionBuilder,
273 private static ActionsList SalToOFPushVlanAction(
274 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
275 ActionsListBuilder actionsListBuilder) {
276 ActionBuilder actionBuilder = new ActionBuilder();
277 PushVlanActionCase pushVlanActionCase = (PushVlanActionCase) action;
278 PushVlanAction pushVlanAction = pushVlanActionCase.getPushVlanAction();
279 actionBuilder.setType(PushVlan.class);
281 return SalToOFPushAction(pushVlanAction.getEthernetType(), actionBuilder, actionsListBuilder);
285 private static ActionsList SalToOFSetNwTtl(
286 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
287 ActionsListBuilder actionsListBuilder) {
288 ActionBuilder actionBuilder = new ActionBuilder();
289 SetNwTtlActionCase nwTtlActionCase = (SetNwTtlActionCase) action;
290 NwTtlActionBuilder nwTtlActionBuilder = new NwTtlActionBuilder();
291 nwTtlActionBuilder.setNwTtl(nwTtlActionCase.getSetNwTtlAction().getNwTtl());
292 actionBuilder.setType(SetNwTtl.class);
293 actionBuilder.addAugmentation(NwTtlAction.class, nwTtlActionBuilder.build());
294 actionsListBuilder.setAction(actionBuilder.build());
295 return actionsListBuilder.build();
299 private static ActionsList SalToOFSetQueue(
300 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
301 ActionsListBuilder actionsListBuilder) {
302 ActionBuilder actionBuilder = new ActionBuilder();
303 SetQueueActionCase setQueueActionCase = (SetQueueActionCase) action;
304 SetQueueAction setQueueAction = setQueueActionCase.getSetQueueAction();
306 QueueIdActionBuilder queueIdActionBuilder = new QueueIdActionBuilder();
307 queueIdActionBuilder.setQueueId(setQueueAction.getQueueId());
308 actionBuilder.setType(SetQueue.class);
309 actionBuilder.addAugmentation(QueueIdAction.class, queueIdActionBuilder.build());
311 actionsListBuilder.setAction(actionBuilder.build());
312 return actionsListBuilder.build();
315 private static ActionsList SalToOFPopMpls(
316 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
317 ActionsListBuilder actionsListBuilder) {
318 ActionBuilder actionBuilder = new ActionBuilder();
319 PopMplsActionCase popMplsActionCase = (PopMplsActionCase) action;
320 actionBuilder.setType(PopMpls.class);
322 return SalToOFPushAction(popMplsActionCase.getPopMplsAction().getEthernetType(), actionBuilder,
326 private static ActionsList SalToOFPopVlan(
327 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
328 ActionsListBuilder actionsListBuilder) {
329 ActionBuilder actionBuilder = new ActionBuilder();
330 actionBuilder.setType(PopVlan.class);
332 return emtpyAction(actionBuilder, actionsListBuilder);
335 private static ActionsList SalToOFPopPBB(
336 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
337 ActionsListBuilder actionsListBuilder) {
338 ActionBuilder actionBuilder = new ActionBuilder();
339 actionBuilder.setType(PopPbb.class);
340 return emtpyAction(actionBuilder, actionsListBuilder);
343 private static ActionsList SalToOFExperimenter(
344 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
345 ActionsListBuilder actionsListBuilder) {
347 ActionBuilder actionBuilder = new ActionBuilder();
348 ExperimenterActionBuilder experimenterActionBuilder = new ExperimenterActionBuilder();
349 experimenterActionBuilder.setExperimenter(((ExperimenterAction) action).getExperimenter());
350 actionBuilder.setType(Experimenter.class);
353 ExperimenterAction.class,
354 (Augmentation<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action>) experimenterActionBuilder);
355 actionsListBuilder.setAction(actionBuilder.build());
356 return actionsListBuilder.build();
360 private static ActionsList SalToOFSetVlanId(
361 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
362 ActionsListBuilder actionsListBuilder, short version) {
364 if (version == OFConstants.OFP_VERSION_1_0) {
365 ActionBuilder actionBuilder = new ActionBuilder();
366 SetVlanIdActionCase setvlanidcase = (SetVlanIdActionCase) action;
367 SetVlanIdAction setvlanidaction = setvlanidcase.getSetVlanIdAction();
369 VlanVidActionBuilder vlanidActionBuilder = new VlanVidActionBuilder();
370 vlanidActionBuilder.setVlanVid(setvlanidaction.getVlanId().getValue());
372 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetVlanVid.class);
373 actionBuilder.addAugmentation(VlanVidAction.class, vlanidActionBuilder.build());
374 actionsListBuilder.setAction(actionBuilder.build());
375 return actionsListBuilder.build();
377 logger.error("Unknown Action Type for the Version", version);
383 private static ActionsList SalToOFSetVlanpcp(
384 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
385 ActionsListBuilder actionsListBuilder, short version) {
387 if (version == OFConstants.OFP_VERSION_1_0) {
388 ActionBuilder actionBuilder = new ActionBuilder();
389 SetVlanPcpActionCase setvlanpcpcase = (SetVlanPcpActionCase) action;
390 SetVlanPcpAction setvlanpcpaction = setvlanpcpcase.getSetVlanPcpAction();
392 VlanPcpActionBuilder vlanpcpActionBuilder = new VlanPcpActionBuilder();
393 vlanpcpActionBuilder.setVlanPcp(setvlanpcpaction.getVlanPcp().getValue());
395 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetVlanPcp.class);
396 actionBuilder.addAugmentation(VlanPcpAction.class, vlanpcpActionBuilder.build());
397 actionsListBuilder.setAction(actionBuilder.build());
398 return actionsListBuilder.build();
400 logger.error("Unknown Action Type for the Version", version);
406 private static ActionsList SalToOFStripVlan(
407 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
408 ActionsListBuilder actionsListBuilder, short version) {
410 if (version == OFConstants.OFP_VERSION_1_0) {
411 ActionBuilder actionBuilder = new ActionBuilder();
413 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.StripVlan.class);
415 return emtpyAction(actionBuilder, actionsListBuilder);
417 logger.error("Unknown Action Type for the Version", version);
423 private static ActionsList SalToOFSetDlSrc(
424 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
425 ActionsListBuilder actionsListBuilder, short version) {
427 if (version == OFConstants.OFP_VERSION_1_0) {
428 ActionBuilder actionBuilder = new ActionBuilder();
429 SetDlSrcActionCase setdlsrccase = (SetDlSrcActionCase) action;
430 SetDlSrcAction setdlsrcaction = setdlsrccase.getSetDlSrcAction();
432 DlAddressActionBuilder dladdressactionbuilder = new DlAddressActionBuilder();
433 dladdressactionbuilder.setDlAddress(setdlsrcaction.getAddress());
435 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetDlSrc.class);
436 actionBuilder.addAugmentation(DlAddressAction.class, dladdressactionbuilder.build());
437 actionsListBuilder.setAction(actionBuilder.build());
438 return actionsListBuilder.build();
440 logger.error("Unknown Action Type for the Version", version);
446 private static ActionsList SalToOFSetDlDst(
447 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
448 ActionsListBuilder actionsListBuilder, short version) {
450 if (version == OFConstants.OFP_VERSION_1_0) {
451 ActionBuilder actionBuilder = new ActionBuilder();
452 SetDlDstActionCase setdldstcase = (SetDlDstActionCase) action;
453 SetDlDstAction setdldstaction = setdldstcase.getSetDlDstAction();
455 DlAddressActionBuilder dladdressactionbuilder = new DlAddressActionBuilder();
456 dladdressactionbuilder.setDlAddress(setdldstaction.getAddress());
458 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetDlDst.class);
459 actionBuilder.addAugmentation(DlAddressAction.class, dladdressactionbuilder.build());
460 actionsListBuilder.setAction(actionBuilder.build());
461 return actionsListBuilder.build();
463 logger.error("Unknown Action Type for the Version", version);
469 private static ActionsList SalToOFSetNwSrc(
470 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
471 ActionsListBuilder actionsListBuilder, short version) {
473 if (version == OFConstants.OFP_VERSION_1_0) {
474 ActionBuilder actionBuilder = new ActionBuilder();
475 SetNwSrcActionCase setnwsrccase = (SetNwSrcActionCase) action;
476 SetNwSrcAction setnwsrcaction = setnwsrccase.getSetNwSrcAction();
478 IpAddressActionBuilder ipvaddress = new IpAddressActionBuilder();
479 ipvaddress.setIpAddress((Ipv4Address) setnwsrcaction.getAddress());
481 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwSrc.class);
482 actionBuilder.addAugmentation(
483 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IpAddressAction.class,
485 actionsListBuilder.setAction(actionBuilder.build());
486 return actionsListBuilder.build();
488 logger.error("Unknown Action Type for the Version", version);
494 private static ActionsList SalToOFSetNwDst(
495 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
496 ActionsListBuilder actionsListBuilder, short version) {
498 if (version == OFConstants.OFP_VERSION_1_0) {
499 ActionBuilder actionBuilder = new ActionBuilder();
500 SetNwDstActionCase setnwdstcase = (SetNwDstActionCase) action;
501 SetNwDstAction setnwdstaction = setnwdstcase.getSetNwDstAction();
503 IpAddressActionBuilder ipvaddress = new IpAddressActionBuilder();
504 ipvaddress.setIpAddress((Ipv4Address) setnwdstaction.getAddress());
506 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwDst.class);
507 actionBuilder.addAugmentation(
508 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IpAddressAction.class,
510 actionsListBuilder.setAction(actionBuilder.build());
511 return actionsListBuilder.build();
514 logger.error("Unknown Action Type for the Version", version);
520 private static ActionsList SalToOFSetTpSrc(
521 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
522 ActionsListBuilder actionsListBuilder, short version) {
524 if (version == OFConstants.OFP_VERSION_1_0) {
525 ActionBuilder actionBuilder = new ActionBuilder();
526 SetTpSrcActionCase settpsrccase = (SetTpSrcActionCase) action;
527 SetTpSrcAction settpsrcaction = settpsrccase.getSetTpSrcAction();
529 PortActionBuilder settpsrc = new PortActionBuilder();
530 PortNumber port = new PortNumber(settpsrcaction.getPort().getValue().longValue());
531 settpsrc.setPort(port);
534 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetTpSrc.class);
535 actionBuilder.addAugmentation(PortAction.class, settpsrc.build());
536 actionsListBuilder.setAction(actionBuilder.build());
537 return actionsListBuilder.build();
539 logger.error("Unknown Action Type for the Version", version);
545 private static ActionsList SalToOFSetTpDst(
546 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
547 ActionsListBuilder actionsListBuilder, short version) {
549 if (version == OFConstants.OFP_VERSION_1_0) {
550 ActionBuilder actionBuilder = new ActionBuilder();
552 SetTpDstActionCase settpdstcase = (SetTpDstActionCase) action;
553 SetTpDstAction settpdstaction = settpdstcase.getSetTpDstAction();
554 PortActionBuilder settpdst = new PortActionBuilder();
555 PortNumber port = new PortNumber(settpdstaction.getPort().getValue().longValue());
556 settpdst.setPort(port);
559 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetTpDst.class);
560 actionBuilder.addAugmentation(PortAction.class, settpdst.build());
561 actionsListBuilder.setAction(actionBuilder.build());
562 return actionsListBuilder.build();
564 logger.error("Unknown Action Type for the Version", version);
570 private static ActionsList SalToOFGroupAction(
571 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
572 ActionsListBuilder actionsListBuilder) {
574 GroupActionCase groupActionCase = (GroupActionCase) action;
575 GroupAction groupAction = groupActionCase.getGroupAction();
577 GroupIdActionBuilder groupIdBuilder = new GroupIdActionBuilder();
578 groupIdBuilder.setGroupId(groupAction.getGroupId());
579 ActionBuilder actionBuilder = new ActionBuilder();
580 actionBuilder.setType(Group.class);
581 actionBuilder.addAugmentation(GroupIdAction.class, groupIdBuilder.build());
582 actionsListBuilder.setAction(actionBuilder.build());
583 return actionsListBuilder.build();
586 private static ActionsList SalToOFPushAction(Integer ethernetType, ActionBuilder actionBuilder,
587 ActionsListBuilder actionsListBuilder) {
589 EthertypeActionBuilder ethertypeActionBuilder = new EthertypeActionBuilder();
590 ethertypeActionBuilder.setEthertype(new EtherType(ethernetType));
593 actionBuilder.addAugmentation(EthertypeAction.class, ethertypeActionBuilder.build());
594 actionsListBuilder.setAction(actionBuilder.build());
595 return actionsListBuilder.build();
598 private static ActionsList SalToOFDecMplsTtl(ActionsListBuilder actionsListBuilder) {
599 ActionBuilder actionBuilder = new ActionBuilder();
601 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl.class);
602 return emtpyAction(actionBuilder, actionsListBuilder);
605 private static ActionsList SalToOFSetMplsTtl(
606 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
607 ActionsListBuilder actionsListBuilder) {
608 ActionBuilder actionBuilder = new ActionBuilder();
610 SetMplsTtlActionCase mplsTtlActionCase = (SetMplsTtlActionCase) action;
611 SetMplsTtlAction mplsTtlAction = mplsTtlActionCase.getSetMplsTtlAction();
613 MplsTtlActionBuilder mplsTtlActionBuilder = new MplsTtlActionBuilder();
614 mplsTtlActionBuilder.setMplsTtl(mplsTtlAction.getMplsTtl()/* SAL */);
616 actionBuilder.setType(SetMplsTtl.class);
617 actionBuilder.addAugmentation(MplsTtlAction.class, mplsTtlActionBuilder.build());
618 actionsListBuilder.setAction(actionBuilder.build());
619 return actionsListBuilder.build();
622 private static ActionsList SalToOFCopyTTLIIn(ActionsListBuilder actionsListBuilder) {
623 ActionBuilder actionBuilder = new ActionBuilder();
625 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlIn.class);
626 return emtpyAction(actionBuilder, actionsListBuilder);
629 private static ActionsList SalToOFCopyTTLIOut(ActionsListBuilder actionsListBuilder) {
630 ActionBuilder actionBuilder = new ActionBuilder();
632 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut.class);
633 return emtpyAction(actionBuilder, actionsListBuilder);
637 private static ActionsList emtpyAction(ActionBuilder actionBuilder, ActionsListBuilder actionsListBuilder) {
639 actionsListBuilder.setAction(actionBuilder.build());
640 return actionsListBuilder.build();
643 private static ActionsList salToOFOutputAction(
644 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action,
645 ActionsListBuilder actionsListBuilder, short version) {
647 OutputActionCase outputActionCase = ((OutputActionCase) action);
648 OutputAction outputAction = outputActionCase.getOutputAction();
649 PortActionBuilder portAction = new PortActionBuilder();
650 MaxLengthActionBuilder maxLenActionBuilder = new MaxLengthActionBuilder();
651 maxLenActionBuilder.setMaxLength(outputAction.getMaxLength());
652 ActionBuilder actionBuilder = new ActionBuilder();
653 actionBuilder.addAugmentation(MaxLengthAction.class, maxLenActionBuilder.build());
655 Uri uri = outputAction.getOutputNodeConnector();
657 if (version >= OFConstants.OFP_VERSION_1_3) {
658 if (uri.getValue().equals(OutputPortValues.CONTROLLER.toString())) {
659 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.CONTROLLER
662 if (uri.getValue().equals(OutputPortValues.ALL.toString())) {
663 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.ALL.getIntValue())));
665 if (uri.getValue().equals(OutputPortValues.ANY.toString())) {
666 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.ANY.getIntValue())));
669 if (uri.getValue().equals(OutputPortValues.FLOOD.toString())) {
670 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.FLOOD.getIntValue())));
673 if (uri.getValue().equals(OutputPortValues.INPORT.toString())) {
674 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.INPORT.getIntValue())));
677 if (uri.getValue().equals(OutputPortValues.LOCAL.toString())) {
678 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.LOCAL.getIntValue())));
681 if (uri.getValue().equals(OutputPortValues.NORMAL.toString())) {
682 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.NORMAL.getIntValue())));
685 if (uri.getValue().equals(OutputPortValues.TABLE.toString())) {
686 portAction.setPort(new PortNumber(BinContent.intToUnsignedLong(PortNumberValues.TABLE.getIntValue())));
689 if (uri.getValue().equals(OutputPortValues.NONE.toString())) {
690 logger.error("Unknown Port Type for the Version");
692 } else if (version == OFConstants.OFP_VERSION_1_0) {
694 if (uri.getValue().equals(OutputPortValues.CONTROLLER.toString())) {
695 portAction.setPort(new PortNumber((long) PortNumberValuesV10.CONTROLLER.getIntValue()));
697 if (uri.getValue().equals(OutputPortValues.ALL.toString())) {
698 portAction.setPort(new PortNumber((long) PortNumberValuesV10.ALL.getIntValue()));
701 if (uri.getValue().equals(OutputPortValues.FLOOD.toString())) {
702 portAction.setPort(new PortNumber((long) PortNumberValuesV10.FLOOD.getIntValue()));
706 if (uri.getValue().equals(OutputPortValues.INPORT.toString())) {
707 portAction.setPort(new PortNumber((long) PortNumberValuesV10.INPORT.getIntValue()));
710 if (uri.getValue().equals(OutputPortValues.LOCAL.toString())) {
711 portAction.setPort(new PortNumber((long) PortNumberValuesV10.LOCAL.getIntValue()));
714 if (uri.getValue().equals(OutputPortValues.NORMAL.toString())) {
715 portAction.setPort(new PortNumber((long) PortNumberValuesV10.NORMAL.getIntValue()));
718 if (uri.getValue().equals(OutputPortValues.TABLE.toString())) {
719 portAction.setPort(new PortNumber((long) PortNumberValuesV10.TABLE.getIntValue()));
722 if (uri.getValue().equals(OutputPortValues.NONE.toString())) {
723 portAction.setPort(new PortNumber((long) PortNumberValuesV10.NONE.getIntValue()));
725 if (uri.getValue().equals(OutputPortValues.ANY.toString())) {
726 logger.error("Unknown Port Type for the Version");
731 .setType(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output.class);
732 actionBuilder.addAugmentation(PortAction.class, portAction.build());
733 actionsListBuilder.setAction(actionBuilder.build());
734 return actionsListBuilder.build();
739 * Method to convert OF actions associated with bucket to SAL Actions.
742 * @return List of converted SAL Actions.
744 public static List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action> toSALBucketActions(
745 List<ActionsList> actionList) {
747 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>();
748 for (ActionsList actionDesc : actionList) {
750 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action = actionDesc
753 if (action.getType().equals(
754 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output.class))
755 bucketActions.add(ofToSALOutputAction(action));
756 else if (action.getType().equals(
757 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Group.class))
758 bucketActions.add(ofToSALGroupAction(action));
759 else if (action.getType().equals(
760 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut.class)) {
761 CopyTtlOutBuilder copyTtlOutaction = new CopyTtlOutBuilder();
762 bucketActions.add(new CopyTtlOutCaseBuilder().setCopyTtlOut(copyTtlOutaction.build()).build());
763 } else if (action.getType().equals(
764 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlIn.class)) {
765 CopyTtlInBuilder copyTtlInaction = new CopyTtlInBuilder();
766 bucketActions.add(new CopyTtlInCaseBuilder().setCopyTtlIn(copyTtlInaction.build()).build());
767 } else if (action.getType().equals(
768 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetMplsTtl.class))
769 bucketActions.add(ofToSALSetMplsTtl(action));
770 else if (action.getType().equals(
771 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl.class)) {
772 DecMplsTtlBuilder decMplsTtl = new DecMplsTtlBuilder();
773 bucketActions.add(new DecMplsTtlCaseBuilder().setDecMplsTtl(decMplsTtl.build()).build());
774 } else if (action.getType().equals(
775 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushVlan.class))
776 bucketActions.add(ofToSALPushVlanAction(action));
777 else if (action.getType().equals(
778 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopVlan.class)) {
779 PopVlanActionBuilder popVlan = new PopVlanActionBuilder();
780 bucketActions.add(new PopVlanActionCaseBuilder().setPopVlanAction(popVlan.build()).build());
781 } else if (action.getType().equals(
782 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushMpls.class)) {
783 PushMplsActionBuilder pushMpls = new PushMplsActionBuilder();
784 bucketActions.add(new PushMplsActionCaseBuilder().setPushMplsAction(pushMpls.build()).build());
785 } else if (action.getType().equals(
786 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopMpls.class)) {
787 PopMplsActionBuilder popMpls = new PopMplsActionBuilder();
788 bucketActions.add(new PopMplsActionCaseBuilder().setPopMplsAction(popMpls.build()).build());
789 } else if (action.getType().equals(
790 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetQueue.class))
791 bucketActions.add(ofToSALSetQueue(action));
793 else if (action.getType().equals(
794 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTtl.class))
795 bucketActions.add(ofToSALSetNwTtl(action));
796 else if (action.getType().equals(
797 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecNwTtl.class)) {
798 DecNwTtlBuilder decNwTtl = new DecNwTtlBuilder();
799 bucketActions.add(new DecNwTtlCaseBuilder().setDecNwTtl(decNwTtl.build()).build());
800 } else if (action.getType().equals(
801 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetField.class))
802 bucketActions.add(new SetFieldCaseBuilder().setSetField(MatchConvertorImpl.ofToSALSetField(action))
805 else if (action.getType().equals(
806 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushPbb.class))
807 bucketActions.add(ofToSALPushPbbAction(action));
808 else if (action.getType().equals(
809 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopPbb.class)) {
810 PopPbbActionBuilder popPbb = new PopPbbActionBuilder();
811 bucketActions.add(new PopPbbActionCaseBuilder().setPopPbbAction(popPbb.build()).build());
812 } else if (action.getType().equals(
813 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Experimenter.class)) {
814 // bucketActions.add(ofToSALExperimenter(action));
815 // TODO: Need to explore/discuss on how to handle experimenter
820 return bucketActions;
824 * Method converts OF Output action object to SAL Output action object.
827 * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.
828 * action.rev130731.actions.actions.list.Action
829 * @return OutputAction
831 public static OutputActionCase ofToSALOutputAction(
832 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action) {
834 OutputActionBuilder outputAction = new OutputActionBuilder();
835 PortAction port = action.getAugmentation(PortAction.class);
837 outputAction.setOutputNodeConnector(new Uri(port.getPort().getValue().toString()));
839 logger.error("Provided action is not OF Output action, no associated port found!");
842 MaxLengthAction length = action.getAugmentation(MaxLengthAction.class);
843 if (length != null) {
844 outputAction.setMaxLength(length.getMaxLength());
846 logger.error("Provided action is not OF Output action, no associated length found!");
849 return new OutputActionCaseBuilder().setOutputAction(outputAction.build()).build();
853 * Method converts OF GroupAction object to SAL GroupAction object
856 * @return GroupAction
858 public static GroupActionCase ofToSALGroupAction(
859 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action) {
861 GroupActionBuilder groupAction = new GroupActionBuilder();
863 GroupIdAction groupId = action.getAugmentation(GroupIdAction.class);
864 groupAction.setGroupId(groupId.getGroupId());
866 return new GroupActionCaseBuilder().setGroupAction(groupAction.build()).build();
870 * Method converts OF SetMplsTTL action object to SAL SetMplsTTL action
876 public static SetMplsTtlActionCase ofToSALSetMplsTtl(
877 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action) {
879 SetMplsTtlActionBuilder mplsTtlAction = new SetMplsTtlActionBuilder();
880 MplsTtlAction mplsTtl = action.getAugmentation(MplsTtlAction.class);
881 mplsTtlAction.setMplsTtl(mplsTtl.getMplsTtl());
882 return new SetMplsTtlActionCaseBuilder().setSetMplsTtlAction(mplsTtlAction.build()).build();
886 * Method converts OF Pushvlan action to SAL PushVlan action.
889 * @return PushVlanAction
891 public static PushVlanActionCase ofToSALPushVlanAction(
892 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action) {
894 PushVlanActionBuilder pushVlanAction = new PushVlanActionBuilder();
896 EthertypeAction etherType = action.getAugmentation(EthertypeAction.class);
897 pushVlanAction.setVlanId(new VlanId(etherType.getEthertype().getValue()));
899 return new PushVlanActionCaseBuilder().setPushVlanAction(pushVlanAction.build()).build();
903 * Method converts OF SetQueue action to SAL SetQueue action.
906 * @return SetQueueAction
908 public static SetQueueActionCase ofToSALSetQueue(
909 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action) {
911 SetQueueActionBuilder setQueueAction = new SetQueueActionBuilder();
913 QueueIdAction queueId = action.getAugmentation(QueueIdAction.class);
914 setQueueAction.setQueueId(queueId.getQueueId());
916 return new SetQueueActionCaseBuilder().setSetQueueAction(setQueueAction.build()).build();
920 * Method converts OF SetNwTtl action to SAL SetNwTtl action.
923 * @return SetNwTtlAction
925 public static SetNwTtlActionCase ofToSALSetNwTtl(
926 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action) {
928 SetNwTtlActionBuilder setNwTtl = new SetNwTtlActionBuilder();
929 NwTtlAction nwTtl = action.getAugmentation(NwTtlAction.class);
930 setNwTtl.setNwTtl(nwTtl.getNwTtl());
932 return new SetNwTtlActionCaseBuilder().setSetNwTtlAction(setNwTtl.build()).build();
936 * Method converts OF Pushvlan action to SAL PushVlan action.
939 * @return PushVlanAction
941 public static PushPbbActionCase ofToSALPushPbbAction(
942 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action) {
944 PushPbbActionBuilder pushPbbAction = new PushPbbActionBuilder();
946 EthertypeAction etherType = action.getAugmentation(EthertypeAction.class);
947 pushPbbAction.setEthernetType(etherType.getEthertype().getValue());
949 return new PushPbbActionCaseBuilder().setPushPbbAction(pushPbbAction.build()).build();
952 public static Object ofToSALExperimenter(
953 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action) {
955 ExperimenterAction ExperimenterAction = action.getAugmentation(ExperimenterAction.class);
959 * TODO: Need to explore/discuss about how to handle experimenter