diff --git a/apps/routing-api/src/main/java/org/onosproject/routing/RoutingService.java b/apps/routing-api/src/main/java/org/onosproject/routing/RoutingService.java
index fdd4f2c..4356984 100644
--- a/apps/routing-api/src/main/java/org/onosproject/routing/RoutingService.java
+++ b/apps/routing-api/src/main/java/org/onosproject/routing/RoutingService.java
@@ -17,17 +17,92 @@
 
 import java.util.Collection;
 
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onosproject.net.ConnectPoint;
+
 /**
  * Provides a way of interacting with the RIB management component.
  */
 public interface RoutingService {
 
     /**
-     * Starts the routing service.
-     *
-     * @param listener listener to send FIB updates to
+     * Specifies the type of an IP address or an IP prefix location.
      */
-    public void start(FibListener listener);
+    public static enum LocationType {
+        /**
+         * The location of an IP address or an IP prefix is in local SDN network.
+         */
+        LOCAL,
+        /**
+         * The location of an IP address or an IP prefix is outside local SDN network.
+         */
+        INTERNET,
+        /**
+         * There is no route for this IP address or IP prefix.
+         */
+        NO_ROUTE
+    }
+
+    /**
+     * Specifies the type of traffic.
+     * <p>
+     * We classify traffic by the first packet of each traffic.
+     * </p>
+     */
+    public enum TrafficType {
+        /**
+         * Traffic from a host located in local SDN network wants to
+         * communicate with destination host located in Internet (outside
+         * local SDN network).
+         */
+        HOST_TO_INTERNET,
+        /**
+         * Traffic from Internet wants to communicate with a host located
+         * in local SDN network.
+         */
+        INTERNET_TO_HOST,
+        /**
+         * Both the source host and destination host of a traffic are in
+         * local SDN network.
+         */
+        HOST_TO_HOST,
+        /**
+         * Traffic from Internet wants to traverse local SDN network.
+         */
+        INTERNET_TO_INTERNET,
+        /**
+         * Any traffic wants to communicate with a destination which has
+         * no route, or traffic from Internet wants to access a local private
+         * IP address.
+         */
+        DROP,
+        /**
+         * Traffic does not belong to the types above.
+         */
+        UNKNOWN
+    }
+
+    /**
+     * Starts the routing service.
+     */
+    public void start();
+
+    /**
+     * Adds FIB listener.
+     *
+     * @param fibListener listener to send FIB updates to
+     */
+    public void addFibListener(FibListener fibListener);
+
+    /**
+     * Adds intent creation and submission listener.
+     *
+     * @param intentRequestListener listener to send intent creation and
+     *        submission request to
+     */
+    public void addIntentRequestListener(IntentRequestListener
+                                         intentRequestListener);
 
     /**
      * Stops the routing service.
@@ -47,4 +122,43 @@
      * @return the SDN-IP IPv6 routes
      */
     public Collection<RouteEntry> getRoutes6();
+
+    /**
+     * Evaluates the location of an IP address and returns the location type.
+     *
+     * @param ipAddress the IP address to evaluate
+     * @return the IP address location type
+     */
+    public LocationType getLocationType(IpAddress ipAddress);
+
+    /**
+     * Finds out the route entry which has the longest matchable IP prefix.
+     *
+     * @param ipAddress IP address used to find out longest matchable IP prefix
+     * @return a route entry which has the longest matchable IP prefix if
+     * found, otherwise null
+     */
+    public RouteEntry getLongestMatchableRouteEntry(IpAddress ipAddress);
+
+    /**
+     * Finds out the egress connect point where to emit the first packet
+     * based on destination IP address.
+     *
+     * @param dstIpAddress the destination IP address
+     * @return the egress connect point if found, otherwise null
+     */
+    public ConnectPoint getEgressConnectPoint(IpAddress dstIpAddress);
+
+    /**
+     * Routes packet reactively.
+     *
+     * @param dstIpAddress the destination IP address of a packet
+     * @param srcIpAddress the source IP address of a packet
+     * @param srcConnectPoint the connect point where a packet comes from
+     * @param srcMacAddress the source MAC address of a packet
+     */
+    public void packetReactiveProcessor(IpAddress dstIpAddress,
+                                        IpAddress srcIpAddress,
+                                        ConnectPoint srcConnectPoint,
+                                        MacAddress srcMacAddress);
 }
