Sho SHIMIZU
Committed by Gerrit Code Review

Fix a cast error when creating OpticalConnectivityIntent

A cast error occurred in FlowModBuilder when the type of
Criterion was OCH_SIGID.

Move two convertion methods from FlowModBuilderVer13 to
FlowModBuilderHelper for refactoring.

Change-Id: I4634d57fc70cfb144de64d72140cbca81e060248
...@@ -20,6 +20,7 @@ import org.onlab.packet.Ip4Prefix; ...@@ -20,6 +20,7 @@ import org.onlab.packet.Ip4Prefix;
20 import org.onlab.packet.Ip6Address; 20 import org.onlab.packet.Ip6Address;
21 import org.onlab.packet.Ip6Prefix; 21 import org.onlab.packet.Ip6Prefix;
22 import org.onlab.packet.VlanId; 22 import org.onlab.packet.VlanId;
23 +import org.onosproject.net.OchSignal;
23 import org.onosproject.net.flow.FlowRule; 24 import org.onosproject.net.flow.FlowRule;
24 import org.onosproject.net.flow.TrafficSelector; 25 import org.onosproject.net.flow.TrafficSelector;
25 import org.onosproject.net.flow.criteria.EthCriterion; 26 import org.onosproject.net.flow.criteria.EthCriterion;
...@@ -36,9 +37,9 @@ import org.onosproject.net.flow.criteria.IcmpCodeCriterion; ...@@ -36,9 +37,9 @@ import org.onosproject.net.flow.criteria.IcmpCodeCriterion;
36 import org.onosproject.net.flow.criteria.IcmpTypeCriterion; 37 import org.onosproject.net.flow.criteria.IcmpTypeCriterion;
37 import org.onosproject.net.flow.criteria.Icmpv6CodeCriterion; 38 import org.onosproject.net.flow.criteria.Icmpv6CodeCriterion;
38 import org.onosproject.net.flow.criteria.Icmpv6TypeCriterion; 39 import org.onosproject.net.flow.criteria.Icmpv6TypeCriterion;
39 -import org.onosproject.net.flow.criteria.LambdaCriterion;
40 import org.onosproject.net.flow.criteria.MetadataCriterion; 40 import org.onosproject.net.flow.criteria.MetadataCriterion;
41 import org.onosproject.net.flow.criteria.MplsCriterion; 41 import org.onosproject.net.flow.criteria.MplsCriterion;
42 +import org.onosproject.net.flow.criteria.OchSignalCriterion;
42 import org.onosproject.net.flow.criteria.OpticalSignalTypeCriterion; 43 import org.onosproject.net.flow.criteria.OpticalSignalTypeCriterion;
43 import org.onosproject.net.flow.criteria.PortCriterion; 44 import org.onosproject.net.flow.criteria.PortCriterion;
44 import org.onosproject.net.flow.criteria.SctpPortCriterion; 45 import org.onosproject.net.flow.criteria.SctpPortCriterion;
...@@ -374,10 +375,17 @@ public abstract class FlowModBuilder { ...@@ -374,10 +375,17 @@ public abstract class FlowModBuilder {
374 U16.of(exthdrFlagsCriterion.exthdrFlags())); 375 U16.of(exthdrFlagsCriterion.exthdrFlags()));
375 break; 376 break;
376 case OCH_SIGID: 377 case OCH_SIGID:
377 - LambdaCriterion lc = (LambdaCriterion) c; 378 + try {
378 - mBuilder.setExact(MatchField.OCH_SIGID, 379 + OchSignalCriterion ochSignalCriterion = (OchSignalCriterion) c;
379 - new CircuitSignalID((byte) 1, (byte) 2, 380 + OchSignal signal = ochSignalCriterion.lambda();
380 - (short) lc.lambda(), (short) 1)); 381 + byte gridType = FlowModBuilderHelper.convertGridType(signal.gridType());
382 + byte channelSpacing = FlowModBuilderHelper.convertChannelSpacing(signal.channelSpacing());
383 + mBuilder.setExact(MatchField.OCH_SIGID,
384 + new CircuitSignalID(gridType, channelSpacing,
385 + (short) signal.spacingMultiplier(), (short) signal.slotGranularity()));
386 + } catch (UnsupportedGridTypeException | UnsupportedChannelSpacingException e) {
387 + log.warn(e.getMessage());
388 + }
381 break; 389 break;
382 case OCH_SIGTYPE: 390 case OCH_SIGTYPE:
383 OpticalSignalTypeCriterion sc = 391 OpticalSignalTypeCriterion sc =
......
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.provider.of.flow.impl;
17 +
18 +import org.onosproject.net.ChannelSpacing;
19 +import org.onosproject.net.GridType;
20 +import org.slf4j.Logger;
21 +import org.slf4j.LoggerFactory;
22 +
23 +/**
24 + * Collection of helper methods to convert protocol agnostic models to values used in OpenFlow spec.
25 + */
26 +final class FlowModBuilderHelper {
27 +
28 + private static final Logger log = LoggerFactory.getLogger(FlowModBuilderHelper.class);
29 +
30 + // prohibit instantiation
31 + private FlowModBuilderHelper() {}
32 +
33 + /**
34 + * Converts a {@link GridType} to the corresponding byte value defined in
35 + * ONF "Optical Transport Protocol Extensions Version 1.0".
36 + *
37 + * @param type grid type
38 + * @return the byte value corresponding to the specified grid type
39 + * @throws UnsupportedGridTypeException if the specified grid type is not supported
40 + */
41 + static byte convertGridType(GridType type) {
42 + // See ONF "Optical Transport Protocol Extensions Version 1.0"
43 + // for the following values
44 + switch (type) {
45 + case DWDM:
46 + // OFPGRIDT_DWDM of enum ofp_grid_type
47 + return 1;
48 + case CWDM:
49 + // OFPGRIDT_CWDM of enum ofp_grid_type
50 + return 2;
51 + case FLEX:
52 + // OFPGRIDT_FLEX of enum ofp_grid_type
53 + return 3;
54 + default:
55 + throw new UnsupportedGridTypeException(type);
56 + }
57 + }
58 +
59 + /**
60 + * Converts a {@link ChannelSpacing} to the corresponding byte value defined in
61 + * ONF "Optical Transport Protocol Extensions Version 1.0".
62 + *
63 + * @param spacing channel spacing
64 + * @return byte value corresponding to the specified channel spacing
65 + * @throws UnsupportedChannelSpacingException if the specified channel spacing is not supported
66 + */
67 + static byte convertChannelSpacing(ChannelSpacing spacing) {
68 + // See ONF "Optical Transport Protocol Extensions Version 1.0"
69 + // for the following values
70 + switch (spacing) {
71 + case CHL_100GHZ:
72 + // OFPCS_100GHZ of enum ofp_chl_spacing
73 + return 1;
74 + case CHL_50GHZ:
75 + // OFPCS_50GHZ of enum ofp_chl_spacing
76 + return 2;
77 + case CHL_25GHZ:
78 + // OFPCS_25GHZ of enum ofp_chl_spacing
79 + return 3;
80 + case CHL_12P5GHZ:
81 + // OFPCS_12P5GHZ of enum ofp_chl_spacing
82 + return 4;
83 + case CHL_6P25GHZ:
84 + // OFPCS_6P25GHZ of enum ofp_chl_spacing
85 + return 5;
86 + default:
87 + throw new UnsupportedChannelSpacingException(spacing);
88 + }
89 + }
90 +}
...@@ -18,8 +18,6 @@ package org.onosproject.provider.of.flow.impl; ...@@ -18,8 +18,6 @@ package org.onosproject.provider.of.flow.impl;
18 import com.google.common.collect.Lists; 18 import com.google.common.collect.Lists;
19 import org.onlab.packet.Ip4Address; 19 import org.onlab.packet.Ip4Address;
20 import org.onlab.packet.Ip6Address; 20 import org.onlab.packet.Ip6Address;
21 -import org.onosproject.net.ChannelSpacing;
22 -import org.onosproject.net.GridType;
23 import org.onosproject.net.OchSignal; 21 import org.onosproject.net.OchSignal;
24 import org.onosproject.net.PortNumber; 22 import org.onosproject.net.PortNumber;
25 import org.onosproject.net.flow.FlowRule; 23 import org.onosproject.net.flow.FlowRule;
...@@ -73,6 +71,9 @@ import java.util.LinkedList; ...@@ -73,6 +71,9 @@ import java.util.LinkedList;
73 import java.util.List; 71 import java.util.List;
74 import java.util.Optional; 72 import java.util.Optional;
75 73
74 +import static org.onosproject.provider.of.flow.impl.FlowModBuilderHelper.convertChannelSpacing;
75 +import static org.onosproject.provider.of.flow.impl.FlowModBuilderHelper.convertGridType;
76 +
76 /** 77 /**
77 * Flow mod builder for OpenFlow 1.3+. 78 * Flow mod builder for OpenFlow 1.3+.
78 */ 79 */
...@@ -281,48 +282,6 @@ public class FlowModBuilderVer13 extends FlowModBuilder { ...@@ -281,48 +282,6 @@ public class FlowModBuilderVer13 extends FlowModBuilder {
281 )); 282 ));
282 } 283 }
283 284
284 - private byte convertGridType(GridType type) {
285 - // See ONF "Optical Transport Protocol Extensions Version 1.0"
286 - // for the following values
287 - switch (type) {
288 - case DWDM:
289 - // OFPGRIDT_DWDM of enum ofp_grid_type
290 - return 1;
291 - case CWDM:
292 - // OFPGRIDT_CWDM of enum ofp_grid_type
293 - return 2;
294 - case FLEX:
295 - // OFPGRIDT_FLEX of enum ofp_grid_type
296 - return 3;
297 - default:
298 - throw new UnsupportedGridTypeException(type);
299 - }
300 - }
301 -
302 - private byte convertChannelSpacing(ChannelSpacing spacing) {
303 - // See ONF "Optical Transport Protocol Extensions Version 1.0"
304 - // for the following values
305 - switch (spacing) {
306 - case CHL_100GHZ:
307 - // OFPCS_100GHZ of enum ofp_chl_spacing
308 - return 1;
309 - case CHL_50GHZ:
310 - // OFPCS_50GHZ of enum ofp_chl_spacing
311 - return 2;
312 - case CHL_25GHZ:
313 - // OFPCS_25GHZ of enum ofp_chl_spacing
314 - return 3;
315 - case CHL_12P5GHZ:
316 - // OFPCS_12P5GHZ of enum ofp_chl_spacing
317 - return 4;
318 - case CHL_6P25GHZ:
319 - // OFPCS_6P25GHZ of enum ofp_chl_spacing
320 - return 5;
321 - default:
322 - throw new UnsupportedChannelSpacingException(spacing);
323 - }
324 - }
325 -
326 private OFAction buildL2Modification(Instruction i) { 285 private OFAction buildL2Modification(Instruction i) {
327 L2ModificationInstruction l2m = (L2ModificationInstruction) i; 286 L2ModificationInstruction l2m = (L2ModificationInstruction) i;
328 ModEtherInstruction eth; 287 ModEtherInstruction eth;
......