aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/apps/routing-api/src/main/java/org/onosproject/routing/RoutingService.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/apps/routing-api/src/main/java/org/onosproject/routing/RoutingService.java')
-rw-r--r--framework/src/onos/apps/routing-api/src/main/java/org/onosproject/routing/RoutingService.java169
1 files changed, 169 insertions, 0 deletions
diff --git a/framework/src/onos/apps/routing-api/src/main/java/org/onosproject/routing/RoutingService.java b/framework/src/onos/apps/routing-api/src/main/java/org/onosproject/routing/RoutingService.java
new file mode 100644
index 00000000..8b7040e2
--- /dev/null
+++ b/framework/src/onos/apps/routing-api/src/main/java/org/onosproject/routing/RoutingService.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.routing;
+
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.routing.config.BgpConfig;
+
+import java.util.Collection;
+
+/**
+ * Provides a way of interacting with the RIB management component.
+ */
+public interface RoutingService {
+
+ String ROUTER_APP_ID = "org.onosproject.router";
+
+ Class<BgpConfig> CONFIG_CLASS = BgpConfig.class;
+
+ /**
+ * Specifies the type of an IP address or an IP prefix location.
+ */
+ 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>
+ */
+ 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.
+ */
+ void start();
+
+ /**
+ * Adds FIB listener.
+ *
+ * @param fibListener listener to send FIB updates to
+ */
+ void addFibListener(FibListener fibListener);
+
+ /**
+ * Adds intent creation and submission listener.
+ *
+ * @param intentRequestListener listener to send intent creation and
+ * submission request to
+ */
+ void addIntentRequestListener(IntentRequestListener
+ intentRequestListener);
+
+ /**
+ * Stops the routing service.
+ */
+ void stop();
+
+ /**
+ * Gets all IPv4 routes known to SDN-IP.
+ *
+ * @return the SDN-IP IPv4 routes
+ */
+ Collection<RouteEntry> getRoutes4();
+
+ /**
+ * Gets all IPv6 routes known to SDN-IP.
+ *
+ * @return the SDN-IP IPv6 routes
+ */
+ 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
+ */
+ 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
+ */
+ 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
+ */
+ 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
+ */
+ void packetReactiveProcessor(IpAddress dstIpAddress,
+ IpAddress srcIpAddress,
+ ConnectPoint srcConnectPoint,
+ MacAddress srcMacAddress);
+}