diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowEntryEnumsProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowEntryEnumsProtoTranslator.java index 1c61a68667..2c7d51e914 100644 --- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowEntryEnumsProtoTranslator.java +++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowEntryEnumsProtoTranslator.java @@ -25,7 +25,7 @@ import java.util.Optional; /** - * gRPC FlowEntryEnumsProto message to equivalant ONOS FlowRule enums conversion related utilities. + * gRPC FlowEntryEnumsProto message to equivalent ONOS FlowEntry enums conversion related utilities. */ public final class FlowEntryEnumsProtoTranslator { diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowEntryProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowEntryProtoTranslator.java index 9082f27d56..dfbbdf8054 100644 --- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowEntryProtoTranslator.java +++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowEntryProtoTranslator.java @@ -18,7 +18,6 @@ package org.onosproject.incubator.protobuf.models.net.flow; import org.onosproject.grpc.net.flow.models.FlowEntryProtoOuterClass.FlowEntryProto; import org.onosproject.net.flow.DefaultFlowEntry; import org.onosproject.net.flow.FlowEntry; -import org.onosproject.net.flow.FlowRule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,9 +29,9 @@ public final class FlowEntryProtoTranslator { private static final Logger log = LoggerFactory.getLogger(FlowEntryProtoTranslator.class); /** - * Translates {@link FlowRule} to gRPC FlowRuleProto. + * Translates {@link FlowEntry} to gRPC FlowEntryProto. * - * @param flowEntry {@link FlowRule} + * @param flowEntry {@link FlowEntry} * @return gRPC message */ public static FlowEntryProto translate(FlowEntry flowEntry) { @@ -54,10 +53,10 @@ public final class FlowEntryProtoTranslator { } /** - * Translates gRPC FlowRule to {@link FlowRule}. + * Translates gRPC FlowEntry to {@link FlowEntry}. * * @param flowEntry gRPC message - * @return {@link FlowRule} + * @return {@link FlowEntry} */ public static FlowEntry translate(FlowEntryProto flowEntry) { if (flowEntry.equals(FlowEntryProto.getDefaultInstance())) { diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowRuleEnumsProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowRuleEnumsProtoTranslator.java new file mode 100644 index 0000000000..dcb2038606 --- /dev/null +++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowRuleEnumsProtoTranslator.java @@ -0,0 +1,92 @@ +/* + * Copyright 2017-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onosproject.incubator.protobuf.models.net.flow; + +import org.onosproject.grpc.net.flow.models.FlowRuleEnumsProto; +import org.onosproject.net.flow.FlowRule.FlowRemoveReason; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Optional; + +/** + * gRPC FlowRuleEnumsProto message to equivalent ONOS FlowRule enums conversion related utilities. + */ +public final class FlowRuleEnumsProtoTranslator { + + private static final Logger log = LoggerFactory.getLogger(FlowRuleEnumsProtoTranslator.class); + + /** + * Translates {@link FlowRemoveReason} to gRPC FlowRemoveReason. + * + * @param flowRemoveReason {@link FlowRemoveReason} + * @return gRPC message + */ + public static FlowRuleEnumsProto.FlowRemoveReasonProto translate(FlowRemoveReason flowRemoveReason) { + + switch (flowRemoveReason) { + case DELETE: + return FlowRuleEnumsProto.FlowRemoveReasonProto.DELETE; + case EVICTION: + return FlowRuleEnumsProto.FlowRemoveReasonProto.EVICTION; + case GROUP_DELETE: + return FlowRuleEnumsProto.FlowRemoveReasonProto.GROUP_DELETE; + case METER_DELETE: + return FlowRuleEnumsProto.FlowRemoveReasonProto.METER_DELETE; + case HARD_TIMEOUT: + return FlowRuleEnumsProto.FlowRemoveReasonProto.HARD_TIMEOUT; + case IDLE_TIMEOUT: + return FlowRuleEnumsProto.FlowRemoveReasonProto.IDLE_TIMEOUT; + case NO_REASON: + return FlowRuleEnumsProto.FlowRemoveReasonProto.NO_REASON; + default: + log.warn("Unexpected flow remove reason: {}", flowRemoveReason); + return FlowRuleEnumsProto.FlowRemoveReasonProto.UNRECOGNIZED; + } + } + + /** + * Translates gRPC FlowRemoveReason to {@link FlowRemoveReason}. + * + * @param flowRemoveReason gRPC message + * @return {@link FlowRemoveReason} + */ + public static Optional translate(FlowRuleEnumsProto.FlowRemoveReasonProto flowRemoveReason) { + + switch (flowRemoveReason) { + case DELETE: + return Optional.of(FlowRemoveReason.DELETE); + case EVICTION: + return Optional.of(FlowRemoveReason.EVICTION); + case GROUP_DELETE: + return Optional.of(FlowRemoveReason.GROUP_DELETE); + case METER_DELETE: + return Optional.of(FlowRemoveReason.METER_DELETE); + case HARD_TIMEOUT: + return Optional.of(FlowRemoveReason.HARD_TIMEOUT); + case IDLE_TIMEOUT: + return Optional.of(FlowRemoveReason.IDLE_TIMEOUT); + case NO_REASON: + return Optional.of(FlowRemoveReason.NO_REASON); + default: + log.warn("Unexpected flow remove reason: {}", flowRemoveReason); + return Optional.empty(); + } + } + + // Utility class not intended for instantiation. + private FlowRuleEnumsProtoTranslator() {} +} diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowRuleProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowRuleProtoTranslator.java new file mode 100644 index 0000000000..2babd83771 --- /dev/null +++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/flow/FlowRuleProtoTranslator.java @@ -0,0 +1,97 @@ +/* + * Copyright 2017-present Open Networking Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onosproject.incubator.protobuf.models.net.flow; + +import org.onosproject.grpc.net.flow.models.FlowRuleProtoOuterClass.FlowRuleProto; +import org.onosproject.net.DeviceId; +import org.onosproject.net.flow.DefaultFlowRule; +import org.onosproject.net.flow.FlowRule; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * gRPC FlowRuleProto message to equivalent ONOS FlowRule conversion related utilities. + */ +public final class FlowRuleProtoTranslator { + + private static final Logger log = LoggerFactory.getLogger(FlowRuleProtoTranslator.class); + + /** + * Translates {@link FlowRule} to gRPC FlowRuleProto. + * + * @param flowRule {@link FlowRule} + * @return gRPC message + */ + public static FlowRuleProto translate(FlowRule flowRule) { + + if (flowRule != null) { + FlowRuleProto.Builder builder = FlowRuleProto.newBuilder(); + builder.setAppId(flowRule.appId()) + .setDeviceId(flowRule.deviceId().toString()) + .setFlowId(flowRule.id().value()) + .setPermanent(flowRule.isPermanent()) + .setPriority(flowRule.priority()) + .setReason(FlowRuleEnumsProtoTranslator.translate(flowRule.reason())) + .setTableId(flowRule.tableId()) + .setTableName(flowRule.table().toString()); + + // TODO: need to set TrafficTreatment and TrafficSelector + + return builder.build(); + } + return FlowRuleProto.getDefaultInstance(); + } + + /** + * Translates gRPC FlowRule to {@link FlowRule}. + * + * @param flowRule gRPC message + * @return {@link FlowRule} + */ + public static FlowRule translate(FlowRuleProto flowRule) { + + if (flowRule.equals(FlowRuleProto.getDefaultInstance())) { + return null; + } + + DeviceId deviceId = DeviceId.deviceId(flowRule.getDeviceId()); + + // TODO: to register AppId need to find a way to get CoreService + + FlowRule.FlowRemoveReason reason = (FlowRule.FlowRemoveReason) + FlowRuleEnumsProtoTranslator.translate(flowRule.getReason()).get(); + + FlowRule.Builder resultBuilder = new DefaultFlowRule.Builder(); + resultBuilder.forDevice(deviceId); + resultBuilder.forTable(flowRule.getTableId()); + resultBuilder.withPriority(flowRule.getPriority()); + resultBuilder.withCookie(flowRule.getFlowId()); + resultBuilder.withReason(reason); + + if (flowRule.getPermanent()) { + resultBuilder.makePermanent(); + } else { + resultBuilder.makeTemporary(flowRule.getTimeout()); + } + + // TODO: need to deal with TrafficTreatment and TrafficSelector + + return resultBuilder.build(); + } + + // Utility class not intended for instantiation. + private FlowRuleProtoTranslator() {} +}