diff --git a/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/IntConstants.java b/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/IntConstants.java
new file mode 100644
index 0000000..22b983a
--- /dev/null
+++ b/pipelines/basic/src/main/java/org/onosproject/pipelines/basic/IntConstants.java
@@ -0,0 +1,175 @@
+/*
+ * 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.pipelines.basic;
+
+import org.onosproject.net.pi.model.PiActionId;
+import org.onosproject.net.pi.model.PiActionParamId;
+import org.onosproject.net.pi.model.PiCounterId;
+import org.onosproject.net.pi.model.PiMatchFieldId;
+import org.onosproject.net.pi.model.PiTableId;
+
+import static org.onosproject.pipelines.basic.BasicConstants.DOT;
+import static org.onosproject.pipelines.basic.BasicConstants.HDR;
+import static org.onosproject.pipelines.basic.BasicConstants.LOCAL_METADATA;
+
+/**
+ * Constants for INT pipeline.
+ */
+public final class IntConstants {
+
+    // Hide default constructor
+    private IntConstants() {
+    }
+
+    // Strings
+    private static final String CTRL_SET_SOURCE_SINK = "process_set_source_sink";
+    private static final String CTRL_INT_SOURCE = "process_int_source";
+    private static final String CTRL_INT_TRANSIT = "process_int_transit";
+    private static final String CTRL_INT_SINK = "process_int_sink";
+    private static final String CTRL_INT_OUTER_ENCAP = "process_int_outer_encap";
+    private static final String INT_METADATA = "int_meta";
+    private static final String INT_HDR = "int_header";
+
+    // Header field IDs
+    public static final PiMatchFieldId LOCAL_META_SRC_PORT_ID =
+            PiMatchFieldId.of(LOCAL_METADATA + DOT + "l4_src_port");
+    public static final PiMatchFieldId LOCAL_META_DST_PORT_ID =
+            PiMatchFieldId.of(LOCAL_METADATA + DOT + "l4_dst_port");
+    public static final PiMatchFieldId INT_META_SINK_ID =
+            PiMatchFieldId.of(LOCAL_METADATA + DOT + INT_METADATA + DOT + "sink");
+    public static final PiMatchFieldId INT_HDR_INST_MASK_0003_ID =
+            PiMatchFieldId.of(HDR + DOT + INT_HDR + DOT + "instruction_mask_0003");
+    public static final PiMatchFieldId INT_HDR_INST_MASK_0407_ID =
+            PiMatchFieldId.of(HDR + DOT + INT_HDR + DOT + "instruction_mask_0407");
+
+    // Table IDs
+    public static final PiTableId TBL_SET_SOURCE_SINK_ID =
+            PiTableId.of(CTRL_SET_SOURCE_SINK + DOT + "tb_set_source_sink");
+    public static final PiTableId TBL_INT_SOURCE_ID =
+            PiTableId.of(CTRL_INT_SOURCE + DOT + "tb_int_source");
+    public static final PiTableId TBL_INT_INSERT_ID =
+            PiTableId.of(CTRL_INT_TRANSIT + DOT + "tb_int_insert");
+    public static final PiTableId TBL_INT_INST_0003_ID =
+            PiTableId.of(CTRL_INT_TRANSIT + DOT + "tb_int_inst_0003");
+    public static final PiTableId TBL_INT_INST_0407_ID =
+            PiTableId.of(CTRL_INT_TRANSIT + DOT + "tb_int_inst_0407");
+
+    // Counter IDs
+    public static final PiCounterId CNT_SET_SOURCE_SINK_ID =
+            PiCounterId.of(CTRL_SET_SOURCE_SINK + DOT + "counter_set_source_sink");
+    public static final PiCounterId CNT_INT_SOURCE_ID =
+            PiCounterId.of(CTRL_INT_SOURCE + DOT + "counter_int_source");
+    public static final PiCounterId CNT_INT_INSERT_ID =
+            PiCounterId.of(CTRL_INT_TRANSIT + DOT + "counter_int_insert");
+    public static final PiCounterId CNT_INT_INST_0003_ID =
+            PiCounterId.of(CTRL_INT_TRANSIT + DOT + "counter_int_inst_0003");
+    public static final PiCounterId CNT_INT_INST_0407_ID =
+            PiCounterId.of(CTRL_INT_TRANSIT + DOT + "counter_int_inst_0407");
+
+    // Action IDs
+    public static final PiActionId ACT_INT_SET_SOURCE_ID =
+            PiActionId.of(CTRL_SET_SOURCE_SINK + DOT + "int_set_source");
+    public static final PiActionId ACT_INT_SET_SINK_ID =
+            PiActionId.of(CTRL_SET_SOURCE_SINK + DOT + "int_set_sink");
+    public static final PiActionId ACT_INT_SOURCE_DSCP_ID =
+            PiActionId.of(CTRL_INT_SOURCE + DOT + "int_source_dscp");
+    public static final PiActionId ACT_INT_UPDATE_TOTAL_HOP_CNT_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_update_total_hop_cnt");
+    public static final PiActionId ACT_INT_TRANSIT_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_transit");
+    public static final PiActionId ACT_INT_SET_HEADER_0003_I0_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0003_i0");
+    public static final PiActionId ACT_INT_SET_HEADER_0003_I1_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0003_i1");
+    public static final PiActionId ACT_INT_SET_HEADER_0003_I2_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0003_i2");
+    public static final PiActionId ACT_INT_SET_HEADER_0003_I3_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0003_i3");
+    public static final PiActionId ACT_INT_SET_HEADER_0003_I4_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0003_i4");
+    public static final PiActionId ACT_INT_SET_HEADER_0003_I5_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0003_i5");
+    public static final PiActionId ACT_INT_SET_HEADER_0003_I6_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0003_i6");
+    public static final PiActionId ACT_INT_SET_HEADER_0003_I7_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0003_i7");
+    public static final PiActionId ACT_INT_SET_HEADER_0003_I8_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0003_i8");
+    public static final PiActionId ACT_INT_SET_HEADER_0003_I9_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0003_i9");
+    public static final PiActionId ACT_INT_SET_HEADER_0003_I10_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0003_i10");
+    public static final PiActionId ACT_INT_SET_HEADER_0003_I11_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0003_i11");
+    public static final PiActionId ACT_INT_SET_HEADER_0003_I12_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0003_i12");
+    public static final PiActionId ACT_INT_SET_HEADER_0003_I13_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0003_i13");
+    public static final PiActionId ACT_INT_SET_HEADER_0003_I14_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0003_i14");
+    public static final PiActionId ACT_INT_SET_HEADER_0003_I15_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0003_i15");
+    public static final PiActionId ACT_INT_SET_HEADER_0407_I0_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0407_i0");
+    public static final PiActionId ACT_INT_SET_HEADER_0407_I1_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0407_i1");
+    public static final PiActionId ACT_INT_SET_HEADER_0407_I2_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0407_i2");
+    public static final PiActionId ACT_INT_SET_HEADER_0407_I3_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0407_i3");
+    public static final PiActionId ACT_INT_SET_HEADER_0407_I4_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0407_i4");
+    public static final PiActionId ACT_INT_SET_HEADER_0407_I5_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0407_i5");
+    public static final PiActionId ACT_INT_SET_HEADER_0407_I6_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0407_i6");
+    public static final PiActionId ACT_INT_SET_HEADER_0407_I7_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0407_i7");
+    public static final PiActionId ACT_INT_SET_HEADER_0407_I8_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0407_i8");
+    public static final PiActionId ACT_INT_SET_HEADER_0407_I9_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0407_i9");
+    public static final PiActionId ACT_INT_SET_HEADER_0407_I10_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0407_i10");
+    public static final PiActionId ACT_INT_SET_HEADER_0407_I11_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0407_i11");
+    public static final PiActionId ACT_INT_SET_HEADER_0407_I12_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0407_i12");
+    public static final PiActionId ACT_INT_SET_HEADER_0407_I13_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0407_i13");
+    public static final PiActionId ACT_INT_SET_HEADER_0407_I14_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0407_i14");
+    public static final PiActionId ACT_INT_SET_HEADER_0407_I15_ID =
+            PiActionId.of(CTRL_INT_TRANSIT + DOT + "int_set_header_0407_i15");
+    public static final PiActionId ACT_INT_UPDATE_IPV4_ID =
+            PiActionId.of(CTRL_INT_OUTER_ENCAP + DOT + "int_update_ipv4");
+    public static final PiActionId ACT_INT_UPDATE_UDP_ID =
+            PiActionId.of(CTRL_INT_OUTER_ENCAP + DOT + "int_update_udp");
+    public static final PiActionId ACT_INT_UPDATE_SHIM_ID =
+            PiActionId.of(CTRL_INT_OUTER_ENCAP + DOT + "int_update_shim");
+    public static final PiActionId ACT_INT_RESTORE_HEADER_ID =
+            PiActionId.of(CTRL_INT_SINK + DOT + "restore_header");
+    public static final PiActionId ACT_INT_SINK_ID =
+            PiActionId.of(CTRL_INT_SINK + DOT + "int_sink");
+
+    // Action param IDs
+    public static final PiActionParamId ACT_PRM_MAX_HOP_ID = PiActionParamId.of("max_hop");
+    public static final PiActionParamId ACT_PRM_INS_CNT_ID = PiActionParamId.of("ins_cnt");
+    public static final PiActionParamId ACT_PRM_INS_MASK0003_ID = PiActionParamId.of("ins_mask0003");
+    public static final PiActionParamId ACT_PRM_INS_MASK0407_ID = PiActionParamId.of("ins_mask0407");
+    public static final PiActionParamId ACT_PRM_SWITCH_ID = PiActionParamId.of("switch_id");
+}
