diff options
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.java | 169 |
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); +} |