[ONOS-7154] Add Interpreter for int.p4

Change-Id: If489987565452ce3fc25f48b3a54220a5c0d4f60
diff --git a/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/PipeconfLoader.java b/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/PipeconfLoader.java
index 9b33883..1a5d4d2 100644
--- a/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/PipeconfLoader.java
+++ b/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/PipeconfLoader.java
@@ -52,7 +52,13 @@
 
     public static final PiPipeconf BASIC_PIPECONF = buildBasicPipeconf();
 
-    private static final Collection<PiPipeconf> ALL_PIPECONFS = ImmutableList.of(BASIC_PIPECONF);
+    private static final PiPipeconfId INT_PIPECONF_ID = new PiPipeconfId("org.onosproject.pipelines.int");
+    private static final String INT_JSON_PATH = "/p4c-out/bmv2/int.json";
+    private static final String INT_P4INFO = "/p4c-out/bmv2/int.p4info";
+
+    public static final PiPipeconf INT_PIPECONF = buildIntPipeconf();
+
+    private static final Collection<PiPipeconf> ALL_PIPECONFS = ImmutableList.of(BASIC_PIPECONF, INT_PIPECONF);
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     private PiPipeconfService piPipeconfService;
@@ -85,6 +91,23 @@
                 .build();
     }
 
+    private static PiPipeconf buildIntPipeconf() {
+        final URL jsonUrl = PipeconfLoader.class.getResource(INT_JSON_PATH);
+        final URL p4InfoUrl = PipeconfLoader.class.getResource(INT_P4INFO);
+
+        // INT behavior is controlled using pipeline-specific flow rule,
+        // not using flow objectives, so we just borrow pipeliner to basic pipeconf.
+        return DefaultPiPipeconf.builder()
+                .withId(INT_PIPECONF_ID)
+                .withPipelineModel(parseP4Info(p4InfoUrl))
+                .addBehaviour(PiPipelineInterpreter.class, IntInterpreterImpl.class)
+                .addBehaviour(Pipeliner.class, DefaultSingleTablePipeline.class)
+                .addBehaviour(PortStatisticsDiscovery.class, PortStatisticsDiscoveryImpl.class)
+                .addExtension(P4_INFO_TEXT, p4InfoUrl)
+                .addExtension(BMV2_JSON, jsonUrl)
+                .build();
+    }
+
     private static PiPipelineModel parseP4Info(URL p4InfoUrl) {
         try {
             return P4InfoParser.parse(p4InfoUrl);