ONOS-7066 ONOS-7067 PI abstractions refactoring and P4Info model parser
Includes changes previously reviewed in #15607, #15877, and #15955.
Change-Id: Ie2ff62e415f2099832ebfe05961a879b7b188fc3
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/CodecManager.java b/core/common/src/main/java/org/onosproject/codec/impl/CodecManager.java
index 7a88366..13782c7 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/CodecManager.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/CodecManager.java
@@ -75,10 +75,10 @@
import org.onosproject.net.intent.Constraint;
import org.onosproject.net.intent.HostToHostIntent;
import org.onosproject.net.intent.Intent;
+import org.onosproject.net.intent.MultiPointToSinglePointIntent;
import org.onosproject.net.intent.PointToPointIntent;
import org.onosproject.net.intent.SinglePointToMultiPointIntent;
import org.onosproject.net.intent.util.IntentMiniSummary;
-import org.onosproject.net.intent.MultiPointToSinglePointIntent;
import org.onosproject.net.key.DeviceKey;
import org.onosproject.net.mcast.McastRoute;
import org.onosproject.net.meter.Band;
@@ -87,12 +87,9 @@
import org.onosproject.net.packet.PacketRequest;
import org.onosproject.net.pi.model.PiActionModel;
import org.onosproject.net.pi.model.PiActionParamModel;
-import org.onosproject.net.pi.model.PiHeaderFieldTypeModel;
-import org.onosproject.net.pi.model.PiHeaderModel;
-import org.onosproject.net.pi.model.PiHeaderTypeModel;
+import org.onosproject.net.pi.model.PiMatchFieldModel;
import org.onosproject.net.pi.model.PiPipeconf;
import org.onosproject.net.pi.model.PiPipelineModel;
-import org.onosproject.net.pi.model.PiTableMatchFieldModel;
import org.onosproject.net.pi.model.PiTableModel;
import org.onosproject.net.region.Region;
import org.onosproject.net.statistic.Load;
@@ -186,13 +183,10 @@
registerCodec(TransportEndpointDescription.class, new TransportEndpointDescriptionCodec());
registerCodec(PacketRequest.class, new PacketRequestCodec());
registerCodec(PiActionModel.class, new PiActionModelCodec());
- registerCodec(PiHeaderModel.class, new PiHeaderModelCodec());
registerCodec(PiPipelineModel.class, new PiPipelineModelCodec());
registerCodec(PiPipeconf.class, new PiPipeconfCodec());
registerCodec(PiTableModel.class, new PiTableModelCodec());
- registerCodec(PiTableMatchFieldModel.class, new PiTableMatchFieldModelCodec());
- registerCodec(PiHeaderFieldTypeModel.class, new PiHeaderFieldTypeModelCodec());
- registerCodec(PiHeaderTypeModel.class, new PiHeaderTypeModelCodec());
+ registerCodec(PiMatchFieldModel.class, new PiMatchFieldModelCodec());
registerCodec(PiActionParamModel.class, new PiActionParamModelCodec());
log.info("Started");
}
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/FlowRuleCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/FlowRuleCodec.java
index da34c5e..37a173d 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/FlowRuleCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/FlowRuleCodec.java
@@ -27,7 +27,7 @@
import org.onosproject.net.flow.IndexTableId;
import org.onosproject.net.flow.TrafficSelector;
import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.pi.runtime.PiTableId;
+import org.onosproject.net.pi.model.PiTableId;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.onlab.util.Tools.nullIsIllegal;
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/PiActionModelCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/PiActionModelCodec.java
index 10cef43..dd7b336 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/PiActionModelCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/PiActionModelCodec.java
@@ -33,7 +33,7 @@
@Override
public ObjectNode encode(PiActionModel action, CodecContext context) {
ObjectNode result = context.mapper().createObjectNode();
- result.put(NAME, action.name());
+ result.put(NAME, action.id().toString());
ArrayNode params = result.putArray(PARAMS);
action.params().forEach(param -> {
ObjectNode paramData = context.encode(param, PiActionParamModel.class);
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/PiActionParamModelCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/PiActionParamModelCodec.java
index ac553fe..17f797a 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/PiActionParamModelCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/PiActionParamModelCodec.java
@@ -32,7 +32,7 @@
@Override
public ObjectNode encode(PiActionParamModel param, CodecContext context) {
ObjectNode result = context.mapper().createObjectNode();
- result.put(NAME, param.name());
+ result.put(NAME, param.id().toString());
result.put(BIT_WIDTH, param.bitWidth());
return result;
}
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/PiHeaderModelCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/PiHeaderModelCodec.java
deleted file mode 100644
index 7bcd134..0000000
--- a/core/common/src/main/java/org/onosproject/codec/impl/PiHeaderModelCodec.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.codec.impl;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.onosproject.codec.CodecContext;
-import org.onosproject.codec.JsonCodec;
-import org.onosproject.net.pi.model.PiHeaderModel;
-import org.onosproject.net.pi.model.PiHeaderTypeModel;
-
-/**
- * Codec for PiHeaderModel.
- */
-public class PiHeaderModelCodec extends JsonCodec<PiHeaderModel> {
- private static final String NAME = "name";
- private static final String TYPE = "type";
- private static final String IS_META = "isMetadata";
- private static final String INDEX = "index";
-
- @Override
- public ObjectNode encode(PiHeaderModel header, CodecContext context) {
- ObjectNode result = context.mapper().createObjectNode();
- ObjectNode headerTypeData = context.encode(header.type(), PiHeaderTypeModel.class);
- result.put(NAME, header.name());
- result.set(TYPE, headerTypeData);
- result.put(IS_META, header.isMetadata());
- result.put(INDEX, header.index());
- return result;
- }
-}
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/PiHeaderTypeModelCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/PiHeaderTypeModelCodec.java
deleted file mode 100644
index 1065a94..0000000
--- a/core/common/src/main/java/org/onosproject/codec/impl/PiHeaderTypeModelCodec.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.codec.impl;
-
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.onosproject.codec.CodecContext;
-import org.onosproject.codec.JsonCodec;
-import org.onosproject.net.pi.model.PiHeaderFieldTypeModel;
-import org.onosproject.net.pi.model.PiHeaderTypeModel;
-
-/**
- * Codec for PiHeaderTypeModel.
- */
-public class PiHeaderTypeModelCodec extends JsonCodec<PiHeaderTypeModel> {
- private static final String NAME = "name";
- private static final String FIELDS = "fields";
-
- @Override
- public ObjectNode encode(PiHeaderTypeModel headerType, CodecContext context) {
- ObjectNode result = context.mapper().createObjectNode();
- result.put(NAME, headerType.name());
- ArrayNode fields = result.putArray(FIELDS);
-
- headerType.fields().forEach(field -> {
- fields.add(context.encode(field, PiHeaderFieldTypeModel.class));
- });
-
- return result;
- }
-}
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/PiHeaderFieldTypeModelCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/PiMatchFieldModelCodec.java
similarity index 65%
rename from core/common/src/main/java/org/onosproject/codec/impl/PiHeaderFieldTypeModelCodec.java
rename to core/common/src/main/java/org/onosproject/codec/impl/PiMatchFieldModelCodec.java
index 09a1566..6d6dad4 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/PiHeaderFieldTypeModelCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/PiMatchFieldModelCodec.java
@@ -19,20 +19,19 @@
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.onosproject.codec.CodecContext;
import org.onosproject.codec.JsonCodec;
-import org.onosproject.net.pi.model.PiHeaderFieldTypeModel;
+import org.onosproject.net.pi.model.PiMatchFieldModel;
/**
- * Codec for PiHeaderFieldTypeModel.
+ * Codec for PiMatchFieldModel.
*/
-public class PiHeaderFieldTypeModelCodec extends JsonCodec<PiHeaderFieldTypeModel> {
- private static final String NAME = "name";
- private static final String BIT_WIDTH = "bitWidth";
-
+public class PiMatchFieldModelCodec extends JsonCodec<PiMatchFieldModel> {
+ private static final String MATCH_TYPE = "matchType";
+ private static final String FIELD = "field";
@Override
- public ObjectNode encode(PiHeaderFieldTypeModel headerFieldType, CodecContext context) {
+ public ObjectNode encode(PiMatchFieldModel matchFieldModel, CodecContext context) {
ObjectNode result = context.mapper().createObjectNode();
- result.put(NAME, headerFieldType.name());
- result.put(BIT_WIDTH, headerFieldType.bitWidth());
+ result.put(MATCH_TYPE, matchFieldModel.matchType().toString());
+ result.put(FIELD, matchFieldModel.id().toString());
return result;
}
}
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/PiPipelineModelCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/PiPipelineModelCodec.java
index 6b42c8d..28a7010 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/PiPipelineModelCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/PiPipelineModelCodec.java
@@ -21,7 +21,6 @@
import org.onosproject.codec.CodecContext;
import org.onosproject.codec.JsonCodec;
import org.onosproject.net.pi.model.PiActionModel;
-import org.onosproject.net.pi.model.PiHeaderModel;
import org.onosproject.net.pi.model.PiPipelineModel;
import org.onosproject.net.pi.model.PiTableModel;
@@ -29,19 +28,17 @@
* Codec for PiPipelineModel.
*/
public class PiPipelineModelCodec extends JsonCodec<PiPipelineModel> {
- private static final String HEADERS = "headers";
private static final String ACTIONS = "actions";
private static final String TABLES = "tables";
@Override
public ObjectNode encode(PiPipelineModel pipeline, CodecContext context) {
ObjectNode result = context.mapper().createObjectNode();
- ArrayNode headers = result.putArray(HEADERS);
- pipeline.headers().stream()
- .map(header -> context.encode(header, PiHeaderModel.class))
- .forEach(headers::add);
ArrayNode actions = result.putArray(ACTIONS);
- pipeline.actions().stream()
+ pipeline.tables()
+ .stream()
+ .flatMap(piTableModel -> piTableModel.actions().stream())
+ .distinct()
.map(action -> context.encode(action, PiActionModel.class))
.forEach(actions::add);
ArrayNode tables = result.putArray(TABLES);
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/PiTableMatchFieldModelCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/PiTableMatchFieldModelCodec.java
deleted file mode 100644
index a94bcba..0000000
--- a/core/common/src/main/java/org/onosproject/codec/impl/PiTableMatchFieldModelCodec.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.codec.impl;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.onosproject.codec.CodecContext;
-import org.onosproject.codec.JsonCodec;
-import org.onosproject.net.pi.model.PiHeaderFieldTypeModel;
-import org.onosproject.net.pi.model.PiHeaderModel;
-import org.onosproject.net.pi.model.PiTableMatchFieldModel;
-
-/**
- * Codec for PiTableMatchFieldModel.
- */
-public class PiTableMatchFieldModelCodec extends JsonCodec<PiTableMatchFieldModel> {
- private static final String MATCH_TYPE = "matchType";
- private static final String HEADER = "header";
- private static final String FIELD = "field";
- @Override
- public ObjectNode encode(PiTableMatchFieldModel tableMatchField, CodecContext context) {
- ObjectNode result = context.mapper().createObjectNode();
- result.put(MATCH_TYPE, tableMatchField.matchType().toString());
- PiHeaderModel header = tableMatchField.field().header();
- PiHeaderFieldTypeModel field = tableMatchField.field().type();
- ObjectNode headerData = context.encode(header, PiHeaderModel.class);
- ObjectNode headerFieldData = context.encode(field, PiHeaderFieldTypeModel.class);
- result.set(HEADER, headerData);
- result.set(FIELD, headerFieldData);
- return result;
- }
-}
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/PiTableModelCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/PiTableModelCodec.java
index 052e083..adf8bd7 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/PiTableModelCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/PiTableModelCodec.java
@@ -20,7 +20,7 @@
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.onosproject.codec.CodecContext;
import org.onosproject.codec.JsonCodec;
-import org.onosproject.net.pi.model.PiTableMatchFieldModel;
+import org.onosproject.net.pi.model.PiMatchFieldModel;
import org.onosproject.net.pi.model.PiTableModel;
/**
@@ -40,21 +40,21 @@
ObjectNode result = context.mapper().createObjectNode();
- result.put(NAME, table.name());
+ result.put(NAME, table.id().toString());
result.put(MAX_SIZE, table.maxSize());
- result.put(HAS_COUNTERS, table.hasCounters());
+ result.put(HAS_COUNTERS, table.counters().size() > 0);
result.put(SUPPORT_AGING, table.supportsAging());
ArrayNode matchFields = result.putArray(MATCH_FIELDS);
table.matchFields().forEach(matchField -> {
ObjectNode matchFieldData =
- context.encode(matchField, PiTableMatchFieldModel.class);
+ context.encode(matchField, PiMatchFieldModel.class);
matchFields.add(matchFieldData);
});
ArrayNode actions = result.putArray(ACTIONS);
table.actions().forEach(action -> {
- actions.add(action.name());
+ actions.add(action.id().toString());
});
return result;