Committed by
Gerrit Code Review
Define a new control message to control metric type mapper
Change-Id: Id5b365753a3a5abc3a864c4350e427336ee69448
Showing
3 changed files
with
92 additions
and
3 deletions
| ... | @@ -21,7 +21,7 @@ package org.onosproject.cpman; | ... | @@ -21,7 +21,7 @@ package org.onosproject.cpman; |
| 21 | public interface ControlMessage { | 21 | public interface ControlMessage { |
| 22 | 22 | ||
| 23 | enum Type { | 23 | enum Type { |
| 24 | - INCOMING_PACKET, OUTGOING_PACKET, FLOW_MOD_PACKET, | 24 | + INBOUND_PACKET, OUTBOUND_PACKET, FLOW_MOD_PACKET, |
| 25 | FLOW_REMOVED_PACKET, REQUEST_PACKET, REPLY_PACKET | 25 | FLOW_REMOVED_PACKET, REQUEST_PACKET, REPLY_PACKET |
| 26 | } | 26 | } |
| 27 | 27 | ... | ... |
| 1 | +/* | ||
| 2 | + * Copyright 2016 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.cpman.impl; | ||
| 17 | + | ||
| 18 | +import com.google.common.collect.BiMap; | ||
| 19 | +import com.google.common.collect.EnumHashBiMap; | ||
| 20 | +import org.onosproject.cpman.ControlMessage; | ||
| 21 | +import org.onosproject.cpman.ControlMetricType; | ||
| 22 | + | ||
| 23 | +import static org.onosproject.cpman.ControlMessage.Type; | ||
| 24 | + | ||
| 25 | +/** | ||
| 26 | + * Collection of helper methods to convert protocol agnostic control message | ||
| 27 | + * type to control metric type. | ||
| 28 | + */ | ||
| 29 | +public final class ControlMessageMetricMapper { | ||
| 30 | + | ||
| 31 | + // prohibit instantiation | ||
| 32 | + private ControlMessageMetricMapper() { | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + private static final BiMap<ControlMessage.Type, ControlMetricType> MESSAGE_TYPE = | ||
| 36 | + EnumHashBiMap.create(ControlMessage.Type.class); | ||
| 37 | + | ||
| 38 | + static { | ||
| 39 | + // key is protocol agnostic ControlMessage.Type | ||
| 40 | + // value is ControlMetricType | ||
| 41 | + MESSAGE_TYPE.put(Type.INBOUND_PACKET, ControlMetricType.INBOUND_PACKET); | ||
| 42 | + MESSAGE_TYPE.put(Type.OUTBOUND_PACKET, ControlMetricType.OUTBOUND_PACKET); | ||
| 43 | + MESSAGE_TYPE.put(Type.FLOW_MOD_PACKET, ControlMetricType.FLOW_MOD_PACKET); | ||
| 44 | + MESSAGE_TYPE.put(Type.FLOW_REMOVED_PACKET, ControlMetricType.FLOW_REMOVED_PACKET); | ||
| 45 | + MESSAGE_TYPE.put(Type.REQUEST_PACKET, ControlMetricType.REQUEST_PACKET); | ||
| 46 | + MESSAGE_TYPE.put(Type.REPLY_PACKET, ControlMetricType.REPLY_PACKET); | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + /** | ||
| 50 | + * Looks up the specified input value to the corresponding value with the specified map. | ||
| 51 | + * | ||
| 52 | + * @param map bidirectional mapping | ||
| 53 | + * @param input input type | ||
| 54 | + * @param cls class of output value | ||
| 55 | + * @param <I> type of input value | ||
| 56 | + * @param <O> type of output value | ||
| 57 | + * @return the corresponding value stored in the specified map | ||
| 58 | + */ | ||
| 59 | + private static <I, O> O lookup(BiMap<I, O> map, I input, Class<O> cls) { | ||
| 60 | + if (!map.containsKey(input)) { | ||
| 61 | + throw new RuntimeException( | ||
| 62 | + String.format("No mapping found for %s when converting to %s", | ||
| 63 | + input, cls.getName())); | ||
| 64 | + } | ||
| 65 | + return map.get(input); | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + /** | ||
| 69 | + * Looks up the corresponding {@link ControlMetricType} instance | ||
| 70 | + * from the ControlMessage.Type for control message type. | ||
| 71 | + * | ||
| 72 | + * @param type control message type | ||
| 73 | + * @return control metric type | ||
| 74 | + */ | ||
| 75 | + public static ControlMetricType lookupControlMetricType(ControlMessage.Type type) { | ||
| 76 | + return lookup(MESSAGE_TYPE, type, ControlMetricType.class); | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + /** | ||
| 80 | + * Looks up the corresponding {@link ControlMessage.Type} instance from | ||
| 81 | + * the specified control metric type. | ||
| 82 | + * | ||
| 83 | + * @param type control metric type | ||
| 84 | + * @return control message type | ||
| 85 | + */ | ||
| 86 | + public static ControlMessage.Type lookupControlMessageType(ControlMetricType type) { | ||
| 87 | + return lookup(MESSAGE_TYPE.inverse(), type, ControlMessage.Type.class); | ||
| 88 | + } | ||
| 89 | +} |
| ... | @@ -39,8 +39,8 @@ public final class OpenFlowControlMessageMapper { | ... | @@ -39,8 +39,8 @@ public final class OpenFlowControlMessageMapper { |
| 39 | static { | 39 | static { |
| 40 | // key is OpenFlow specific OFType | 40 | // key is OpenFlow specific OFType |
| 41 | // value is protocol agnostic ControlMessage.Type | 41 | // value is protocol agnostic ControlMessage.Type |
| 42 | - MESSAGE_TYPE.put(PACKET_IN, INCOMING_PACKET); | 42 | + MESSAGE_TYPE.put(PACKET_IN, INBOUND_PACKET); |
| 43 | - MESSAGE_TYPE.put(PACKET_OUT, OUTGOING_PACKET); | 43 | + MESSAGE_TYPE.put(PACKET_OUT, OUTBOUND_PACKET); |
| 44 | MESSAGE_TYPE.put(FLOW_MOD, FLOW_MOD_PACKET); | 44 | MESSAGE_TYPE.put(FLOW_MOD, FLOW_MOD_PACKET); |
| 45 | MESSAGE_TYPE.put(FLOW_REMOVED, FLOW_REMOVED_PACKET); | 45 | MESSAGE_TYPE.put(FLOW_REMOVED, FLOW_REMOVED_PACKET); |
| 46 | MESSAGE_TYPE.put(STATS_REQUEST, REQUEST_PACKET); | 46 | MESSAGE_TYPE.put(STATS_REQUEST, REQUEST_PACKET); | ... | ... |
-
Please register or login to post a comment