/* * 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.mfwd.impl; import org.onlab.packet.IpPrefix; import org.onosproject.net.ConnectPoint; import org.onosproject.net.intent.Key; import org.onosproject.net.intent.SinglePointToMultiPointIntent; import java.util.Set; /** * This McastRouteBase interface is implemented by the McastRouteBase class which * in turn acts as the base class for both the McastRouteGroup and McastRouteSource. */ interface McastRoute { /** * Gets the group addresses. * * @return group address */ public IpPrefix getGaddr(); /** * Gets the source address. * * @return the source address */ public IpPrefix getSaddr(); /** * Determines if this is an IPv4 multicast route. * * @return true if it is an IPv4 route */ public boolean isIp4(); /** * Determines if this is an IPv6 multicast route. * * @return true if it is an IPv6 route */ public boolean isIp6(); /** * Get the dirty state. * * @return whether this route is dirty or not. */ public boolean getDirty(); /** * Set the dirty state to indicate that something changed. * This may require an update to the flow tables (intents). * * @param dirty set the dirty bit */ public void setDirty(boolean dirty); /** * Add the ingress ConnectPoint. * * @param cpstr string representing a ConnectPoint * @return whether ingress has been added, only add if ingressPoint is null */ public boolean addIngressPoint(String cpstr); /** * Add the ingress ConnectPoint. * * @param cp the ConnectPoint of incoming traffic. * @return whether ingress has been added, only add if ingressPoint is null */ public boolean addIngressPoint(ConnectPoint cp); /** * Get the ingress connect point. * * @return the ingress connect point */ public McastConnectPoint getIngressPoint(); /** * Add an egress connect point. * * @param cp the egress McastConnectPoint to be added * @return return the McastConnectPoint */ public McastConnectPoint addEgressPoint(ConnectPoint cp); /** * Add an egress connect point. * * @param connectPoint deviceId/portNum * @return return the McastConnectPoint */ public McastConnectPoint addEgressPoint(String connectPoint); /** * Add an egress connect point. * * @param cp the egress McastConnectPoint to be added * @param interest the protocol that has shown interest in this route * @return return the McastConnectPoint */ public McastConnectPoint addEgressPoint(ConnectPoint cp, McastConnectPoint.JoinSource interest); /** * Add an egress connect point. * * @param connectPoint deviceId/portNum * @param interest the protocol that has shown interest in this route * @return return the McastConnectPoint */ public McastConnectPoint addEgressPoint(String connectPoint, McastConnectPoint.JoinSource interest); /** * Get the egress connect points. * * @return a set of egress connect points */ public Set getEgressPoints(); /** * Get the egress connect points. * * @return a set of egress connect points */ public Set getEgressConnectPoints(); /** * Find the egress connect point if it exists. * * @param cp ConnectPoint to search for * @return the connect point when found, null otherwise. */ public McastConnectPoint findEgressConnectPoint(ConnectPoint cp); /** * remove Interest from a McastConnectPoint. * * @param mcp connect point. * @param interest the protocol interested in this multicast stream * @return whether or not interest was removed */ public boolean removeInterest(McastConnectPoint mcp, McastConnectPoint.JoinSource interest); /** * Increment the punt count. */ public void incrementPuntCount(); /** * Get the punt count. * * @return the punt count */ public int getPuntCount(); /** * Have the McastIntentManager create an intent, attempt to * install the intent and then save the key. */ public void setIntent(); /** * Set the Intent key. * * @param intent intent */ public void setIntent(SinglePointToMultiPointIntent intent); /** * Withdraw the intent if it has been installed. */ public void withdrawIntent(); /** * Get the intent key. * * @return the intentKey */ public Key getIntentKey(); /** * Pretty print the the route. * * @return a pretty string */ public String toString(); }