Committed by
Gerrit Code Review
Fix cast error when building flow entries containging optical properties
Change-Id: I6e963143a22fcd57e2f1388941f7cb4fc51e52f6
Showing
2 changed files
with
84 additions
and
3 deletions
| ... | @@ -26,6 +26,7 @@ import org.onlab.packet.MplsLabel; | ... | @@ -26,6 +26,7 @@ import org.onlab.packet.MplsLabel; |
| 26 | import org.onlab.packet.VlanId; | 26 | import org.onlab.packet.VlanId; |
| 27 | import org.onosproject.core.DefaultGroupId; | 27 | import org.onosproject.core.DefaultGroupId; |
| 28 | import org.onosproject.net.DeviceId; | 28 | import org.onosproject.net.DeviceId; |
| 29 | +import org.onosproject.net.Lambda; | ||
| 29 | import org.onosproject.net.PortNumber; | 30 | import org.onosproject.net.PortNumber; |
| 30 | import org.onosproject.net.flow.DefaultFlowEntry; | 31 | import org.onosproject.net.flow.DefaultFlowEntry; |
| 31 | import org.onosproject.net.flow.DefaultFlowRule; | 32 | import org.onosproject.net.flow.DefaultFlowRule; |
| ... | @@ -63,17 +64,24 @@ import org.projectfloodlight.openflow.protocol.match.MatchField; | ... | @@ -63,17 +64,24 @@ import org.projectfloodlight.openflow.protocol.match.MatchField; |
| 63 | import org.projectfloodlight.openflow.protocol.oxm.OFOxm; | 64 | import org.projectfloodlight.openflow.protocol.oxm.OFOxm; |
| 64 | import org.projectfloodlight.openflow.protocol.oxm.OFOxmOchSigidBasic; | 65 | import org.projectfloodlight.openflow.protocol.oxm.OFOxmOchSigidBasic; |
| 65 | import org.projectfloodlight.openflow.protocol.ver13.OFFactoryVer13; | 66 | import org.projectfloodlight.openflow.protocol.ver13.OFFactoryVer13; |
| 67 | +import org.projectfloodlight.openflow.types.CircuitSignalID; | ||
| 66 | import org.projectfloodlight.openflow.types.EthType; | 68 | import org.projectfloodlight.openflow.types.EthType; |
| 67 | import org.projectfloodlight.openflow.types.IPv4Address; | 69 | import org.projectfloodlight.openflow.types.IPv4Address; |
| 68 | import org.projectfloodlight.openflow.types.IPv6Address; | 70 | import org.projectfloodlight.openflow.types.IPv6Address; |
| 69 | import org.projectfloodlight.openflow.types.Masked; | 71 | import org.projectfloodlight.openflow.types.Masked; |
| 70 | import org.projectfloodlight.openflow.types.OFVlanVidMatch; | 72 | import org.projectfloodlight.openflow.types.OFVlanVidMatch; |
| 71 | import org.projectfloodlight.openflow.types.U32; | 73 | import org.projectfloodlight.openflow.types.U32; |
| 74 | +import org.projectfloodlight.openflow.types.U8; | ||
| 72 | import org.projectfloodlight.openflow.types.VlanPcp; | 75 | import org.projectfloodlight.openflow.types.VlanPcp; |
| 73 | import org.slf4j.Logger; | 76 | import org.slf4j.Logger; |
| 74 | 77 | ||
| 75 | import java.util.List; | 78 | import java.util.List; |
| 76 | 79 | ||
| 80 | +import static org.onosproject.net.flow.criteria.Criteria.matchLambda; | ||
| 81 | +import static org.onosproject.net.flow.criteria.Criteria.matchOchSignalType; | ||
| 82 | +import static org.onosproject.provider.of.flow.impl.FlowModBuilderHelper.convertChannelSpacing; | ||
| 83 | +import static org.onosproject.provider.of.flow.impl.FlowModBuilderHelper.convertGridType; | ||
| 84 | +import static org.onosproject.provider.of.flow.impl.FlowModBuilderHelper.convertOchSignalType; | ||
| 77 | import static org.slf4j.LoggerFactory.getLogger; | 85 | import static org.slf4j.LoggerFactory.getLogger; |
| 78 | 86 | ||
| 79 | public class FlowEntryBuilder { | 87 | public class FlowEntryBuilder { |
| ... | @@ -633,11 +641,15 @@ public class FlowEntryBuilder { | ... | @@ -633,11 +641,15 @@ public class FlowEntryBuilder { |
| 633 | .getValue()); | 641 | .getValue()); |
| 634 | break; | 642 | break; |
| 635 | case OCH_SIGID: | 643 | case OCH_SIGID: |
| 636 | - builder.matchLambda(match.get(MatchField.OCH_SIGID).getChannelNumber()); | 644 | + CircuitSignalID sigId = match.get(MatchField.OCH_SIGID); |
| 645 | + builder.add(matchLambda(Lambda.ochSignal( | ||
| 646 | + convertGridType(sigId.getGridType()), convertChannelSpacing(sigId.getChannelSpacing()), | ||
| 647 | + sigId.getChannelNumber(), sigId.getChannelSpacing()) | ||
| 648 | + )); | ||
| 637 | break; | 649 | break; |
| 638 | case OCH_SIGTYPE: | 650 | case OCH_SIGTYPE: |
| 639 | - builder.matchOpticalSignalType(match.get(MatchField | 651 | + U8 sigType = match.get(MatchField.OCH_SIGTYPE); |
| 640 | - .OCH_SIGTYPE).getValue()); | 652 | + builder.add(matchOchSignalType(convertOchSignalType((byte) sigType.getValue()))); |
| 641 | break; | 653 | break; |
| 642 | case ARP_OP: | 654 | case ARP_OP: |
| 643 | case ARP_SHA: | 655 | case ARP_SHA: | ... | ... |
| ... | @@ -24,6 +24,7 @@ import org.slf4j.LoggerFactory; | ... | @@ -24,6 +24,7 @@ import org.slf4j.LoggerFactory; |
| 24 | /** | 24 | /** |
| 25 | * Collection of helper methods to convert protocol agnostic models to values used in OpenFlow spec. | 25 | * Collection of helper methods to convert protocol agnostic models to values used in OpenFlow spec. |
| 26 | */ | 26 | */ |
| 27 | +// TODO: Rename to a better name | ||
| 27 | final class FlowModBuilderHelper { | 28 | final class FlowModBuilderHelper { |
| 28 | 29 | ||
| 29 | private static final Logger log = LoggerFactory.getLogger(FlowModBuilderHelper.class); | 30 | private static final Logger log = LoggerFactory.getLogger(FlowModBuilderHelper.class); |
| ... | @@ -58,6 +59,28 @@ final class FlowModBuilderHelper { | ... | @@ -58,6 +59,28 @@ final class FlowModBuilderHelper { |
| 58 | } | 59 | } |
| 59 | 60 | ||
| 60 | /** | 61 | /** |
| 62 | + * Converts a byte value for grid type | ||
| 63 | + * defined in ONF "Optical Transport Protocol Extensions Version 1.0" | ||
| 64 | + * to the corresponding {@link GridType} instance. | ||
| 65 | + * | ||
| 66 | + * @param type byte value as grid type defined the spec | ||
| 67 | + * @return the corresponding GridType instance | ||
| 68 | + */ | ||
| 69 | + static GridType convertGridType(byte type) { | ||
| 70 | + switch (type) { | ||
| 71 | + case 1: | ||
| 72 | + return GridType.DWDM; | ||
| 73 | + case 2: | ||
| 74 | + return GridType.CWDM; | ||
| 75 | + case 3: | ||
| 76 | + return GridType.FLEX; | ||
| 77 | + default: | ||
| 78 | + log.info("The value {} for grid type is not supported"); | ||
| 79 | + return null; | ||
| 80 | + } | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + /** | ||
| 61 | * Converts a {@link ChannelSpacing} to the corresponding byte value defined in | 84 | * Converts a {@link ChannelSpacing} to the corresponding byte value defined in |
| 62 | * ONF "Optical Transport Protocol Extensions Version 1.0". | 85 | * ONF "Optical Transport Protocol Extensions Version 1.0". |
| 63 | * | 86 | * |
| ... | @@ -90,6 +113,32 @@ final class FlowModBuilderHelper { | ... | @@ -90,6 +113,32 @@ final class FlowModBuilderHelper { |
| 90 | } | 113 | } |
| 91 | 114 | ||
| 92 | /** | 115 | /** |
| 116 | + * Converts a byte value for channel spacing | ||
| 117 | + * defined in ONF "Optical Transport Protocol Extensions Version 1.0" | ||
| 118 | + * to the corresponding {@link ChannelSpacing} instance. | ||
| 119 | + * | ||
| 120 | + * @param spacing byte value as channel spacing defined the spec | ||
| 121 | + * @return the corresponding ChannelSpacing instance | ||
| 122 | + */ | ||
| 123 | + static ChannelSpacing convertChannelSpacing(byte spacing) { | ||
| 124 | + switch (spacing) { | ||
| 125 | + case 1: | ||
| 126 | + return ChannelSpacing.CHL_100GHZ; | ||
| 127 | + case 2: | ||
| 128 | + return ChannelSpacing.CHL_50GHZ; | ||
| 129 | + case 3: | ||
| 130 | + return ChannelSpacing.CHL_25GHZ; | ||
| 131 | + case 4: | ||
| 132 | + return ChannelSpacing.CHL_12P5GHZ; | ||
| 133 | + case 5: | ||
| 134 | + return ChannelSpacing.CHL_6P25GHZ; | ||
| 135 | + default: | ||
| 136 | + log.info("The value {} for channel spacing is not supported"); | ||
| 137 | + return null; | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + /** | ||
| 93 | * Converts a {@link OchSignalType} to the corresponding byte value. | 142 | * Converts a {@link OchSignalType} to the corresponding byte value. |
| 94 | * | 143 | * |
| 95 | * @param signalType optical signal type | 144 | * @param signalType optical signal type |
| ... | @@ -106,4 +155,24 @@ final class FlowModBuilderHelper { | ... | @@ -106,4 +155,24 @@ final class FlowModBuilderHelper { |
| 106 | return (byte) 0; | 155 | return (byte) 0; |
| 107 | } | 156 | } |
| 108 | } | 157 | } |
| 158 | + | ||
| 159 | + /** | ||
| 160 | + * Converts a byte value for Och signal type | ||
| 161 | + * defined in ONF "Optical Transport Protocol Extensions Version 1.0" | ||
| 162 | + * to the corresponding {@link OchSignalType} instance. | ||
| 163 | + * | ||
| 164 | + * @param signalType byte value as Och singal type defined the spec | ||
| 165 | + * @return the corresponding OchSignalType instance | ||
| 166 | + */ | ||
| 167 | + static OchSignalType convertOchSignalType(byte signalType) { | ||
| 168 | + switch (signalType) { | ||
| 169 | + case 1: | ||
| 170 | + return OchSignalType.FIXED_GRID; | ||
| 171 | + case 2: | ||
| 172 | + return OchSignalType.FLEX_GRID; | ||
| 173 | + default: | ||
| 174 | + log.info("The value {} for Och signal type is not supported"); | ||
| 175 | + return null; | ||
| 176 | + } | ||
| 177 | + } | ||
| 109 | } | 178 | } | ... | ... |
-
Please register or login to post a comment