Committed by
Gerrit Code Review
[ONOS-3108] FlowClassifier codec for SFC.
Change-Id: Ib0697ce7d911c79d202a461bbadeb155ab315396
Showing
1 changed file
with
134 additions
and
0 deletions
| 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.vtnrsc.web; | ||
| 17 | + | ||
| 18 | +import static com.google.common.base.Preconditions.checkNotNull; | ||
| 19 | +import static org.onlab.util.Tools.nullIsIllegal; | ||
| 20 | + | ||
| 21 | +import java.util.UUID; | ||
| 22 | + | ||
| 23 | +import org.onlab.packet.IpPrefix; | ||
| 24 | +import org.onosproject.codec.CodecContext; | ||
| 25 | +import org.onosproject.codec.JsonCodec; | ||
| 26 | +import org.onosproject.vtnrsc.DefaultFlowClassifier; | ||
| 27 | +import org.onosproject.vtnrsc.FlowClassifier; | ||
| 28 | +import org.onosproject.vtnrsc.FlowClassifierId; | ||
| 29 | +import org.onosproject.vtnrsc.VirtualPortId; | ||
| 30 | +import org.onosproject.vtnrsc.TenantId; | ||
| 31 | + | ||
| 32 | +import com.fasterxml.jackson.databind.node.ObjectNode; | ||
| 33 | + | ||
| 34 | +/** | ||
| 35 | + * Flow Classifier JSON codec. | ||
| 36 | + */ | ||
| 37 | +public final class FlowClassifierCodec extends JsonCodec<FlowClassifier> { | ||
| 38 | + | ||
| 39 | + private static final String FLOW_CLASSIFIER_ID = "id"; | ||
| 40 | + private static final String TENANT_ID = "tenant_id"; | ||
| 41 | + private static final String NAME = "name"; | ||
| 42 | + private static final String DESCRIPTION = "description"; | ||
| 43 | + private static final String ETHER_TYPE = "etherType"; | ||
| 44 | + private static final String PROTOCOL = "protocol"; | ||
| 45 | + private static final String MIN_SRC_PORT_RANGE = "source_port_range_min"; | ||
| 46 | + private static final String MAX_SRC_PORT_RANGE = "source_port_range_max"; | ||
| 47 | + private static final String MIN_DST_PORT_RANGE = "destination_port_range_min"; | ||
| 48 | + private static final String MAX_DST_PORT_RANGE = "destination_port_range_max"; | ||
| 49 | + private static final String SRC_IP_PREFIX = "source_ip_prefix"; | ||
| 50 | + private static final String DST_IP_PREFIX = "destination_ip_prefix"; | ||
| 51 | + private static final String SRC_PORT = "logical_source_port"; | ||
| 52 | + private static final String DST_PORT = "logical_destination_port"; | ||
| 53 | + private static final String MISSING_MEMBER_MESSAGE = " member is required in Flow Classifier."; | ||
| 54 | + | ||
| 55 | + @Override | ||
| 56 | + public FlowClassifier decode(ObjectNode json, CodecContext context) { | ||
| 57 | + if (json == null || !json.isObject()) { | ||
| 58 | + return null; | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + FlowClassifier.Builder resultBuilder = new DefaultFlowClassifier.Builder(); | ||
| 62 | + | ||
| 63 | + String flowClassifierId = nullIsIllegal(json.get(FLOW_CLASSIFIER_ID), | ||
| 64 | + FLOW_CLASSIFIER_ID + MISSING_MEMBER_MESSAGE).asText(); | ||
| 65 | + resultBuilder.setFlowClassifierId(FlowClassifierId.flowClassifierId(UUID.fromString(flowClassifierId))); | ||
| 66 | + | ||
| 67 | + String tenantId = nullIsIllegal(json.get(TENANT_ID), TENANT_ID + MISSING_MEMBER_MESSAGE).asText(); | ||
| 68 | + resultBuilder.setTenantId(TenantId.tenantId(tenantId)); | ||
| 69 | + | ||
| 70 | + String flowClassiferName = nullIsIllegal(json.get(NAME), NAME + MISSING_MEMBER_MESSAGE).asText(); | ||
| 71 | + resultBuilder.setName(flowClassiferName); | ||
| 72 | + | ||
| 73 | + String flowClassiferDescription = nullIsIllegal(json.get(DESCRIPTION), DESCRIPTION + MISSING_MEMBER_MESSAGE) | ||
| 74 | + .asText(); | ||
| 75 | + resultBuilder.setDescription(flowClassiferDescription); | ||
| 76 | + | ||
| 77 | + String etherType = nullIsIllegal(json.get(ETHER_TYPE), ETHER_TYPE + MISSING_MEMBER_MESSAGE).asText(); | ||
| 78 | + resultBuilder.setEtherType(etherType); | ||
| 79 | + | ||
| 80 | + String protocol = nullIsIllegal(json.get(PROTOCOL), PROTOCOL + MISSING_MEMBER_MESSAGE).asText(); | ||
| 81 | + resultBuilder.setProtocol(protocol); | ||
| 82 | + | ||
| 83 | + int minSrcPortRange = nullIsIllegal(json.get(MIN_SRC_PORT_RANGE), MIN_SRC_PORT_RANGE + MISSING_MEMBER_MESSAGE) | ||
| 84 | + .asInt(); | ||
| 85 | + resultBuilder.setMinSrcPortRange(minSrcPortRange); | ||
| 86 | + | ||
| 87 | + int maxSrcPortRange = nullIsIllegal(json.get(MAX_SRC_PORT_RANGE), MAX_SRC_PORT_RANGE + MISSING_MEMBER_MESSAGE) | ||
| 88 | + .asInt(); | ||
| 89 | + resultBuilder.setMaxSrcPortRange(maxSrcPortRange); | ||
| 90 | + | ||
| 91 | + int minDstPortRange = nullIsIllegal(json.get(MIN_DST_PORT_RANGE), MIN_DST_PORT_RANGE + MISSING_MEMBER_MESSAGE) | ||
| 92 | + .asInt(); | ||
| 93 | + resultBuilder.setMinDstPortRange(minDstPortRange); | ||
| 94 | + | ||
| 95 | + int maxDstPortRange = nullIsIllegal(json.get(MAX_DST_PORT_RANGE), MAX_DST_PORT_RANGE + MISSING_MEMBER_MESSAGE) | ||
| 96 | + .asInt(); | ||
| 97 | + resultBuilder.setMaxDstPortRange(maxDstPortRange); | ||
| 98 | + | ||
| 99 | + String srcIpPrefix = nullIsIllegal(json.get(SRC_IP_PREFIX), SRC_IP_PREFIX + MISSING_MEMBER_MESSAGE).asText(); | ||
| 100 | + resultBuilder.setSrcIpPrefix(IpPrefix.valueOf(srcIpPrefix)); | ||
| 101 | + | ||
| 102 | + String dstIpPrefix = nullIsIllegal(json.get(DST_IP_PREFIX), DST_IP_PREFIX + MISSING_MEMBER_MESSAGE).asText(); | ||
| 103 | + resultBuilder.setDstIpPrefix(IpPrefix.valueOf(dstIpPrefix)); | ||
| 104 | + | ||
| 105 | + String srcPort = nullIsIllegal(json.get(SRC_PORT), SRC_PORT + MISSING_MEMBER_MESSAGE).asText(); | ||
| 106 | + resultBuilder.setSrcPort(VirtualPortId.portId(srcPort)); | ||
| 107 | + | ||
| 108 | + String dstPort = nullIsIllegal(json.get(DST_PORT), DST_PORT + MISSING_MEMBER_MESSAGE).asText(); | ||
| 109 | + resultBuilder.setDstPort(VirtualPortId.portId(dstPort)); | ||
| 110 | + | ||
| 111 | + return resultBuilder.build(); | ||
| 112 | + } | ||
| 113 | + | ||
| 114 | + @Override | ||
| 115 | + public ObjectNode encode(FlowClassifier flowClassifier, CodecContext context) { | ||
| 116 | + checkNotNull(flowClassifier, "flowClassifier cannot be null"); | ||
| 117 | + ObjectNode result = context.mapper().createObjectNode() | ||
| 118 | + .put("FLOW_CLASSIFIER_ID", flowClassifier.flowClassifierId().toString()) | ||
| 119 | + .put("TENANT_ID", flowClassifier.tenantId().toString()) | ||
| 120 | + .put("NAME", flowClassifier.name()) | ||
| 121 | + .put("DESCRIPTION", flowClassifier.description()) | ||
| 122 | + .put("ETHER_TYPE", flowClassifier.etherType()) | ||
| 123 | + .put("PROTOCOL", flowClassifier.protocol()) | ||
| 124 | + .put("MIN_SRC_PORT_RANGE", flowClassifier.minSrcPortRange()) | ||
| 125 | + .put("MAX_SRC_PORT_RANGE", flowClassifier.maxSrcPortRange()) | ||
| 126 | + .put("MIN_DST_PORT_RANGE", flowClassifier.minDstPortRange()) | ||
| 127 | + .put("MAX_DST_PORT_RANGE", flowClassifier.maxDstPortRange()) | ||
| 128 | + .put("SRC_IP_PREFIX", flowClassifier.srcIpPrefix().toString()) | ||
| 129 | + .put("DST_IP_PREFIX", flowClassifier.dstIpPrefix().toString()) | ||
| 130 | + .put("SRC_PORT", flowClassifier.srcPort().toString()) | ||
| 131 | + .put("DST_PORT", flowClassifier.dstPort().toString()); | ||
| 132 | + return result; | ||
| 133 | + } | ||
| 134 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment