diff options
Diffstat (limited to 'framework/src/onos/apps/mfwd/src/main/java/org/onosproject/mfwd/impl/McastRouteTable.java')
-rw-r--r-- | framework/src/onos/apps/mfwd/src/main/java/org/onosproject/mfwd/impl/McastRouteTable.java | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/framework/src/onos/apps/mfwd/src/main/java/org/onosproject/mfwd/impl/McastRouteTable.java b/framework/src/onos/apps/mfwd/src/main/java/org/onosproject/mfwd/impl/McastRouteTable.java index 5a07bec7..1140c3a8 100644 --- a/framework/src/onos/apps/mfwd/src/main/java/org/onosproject/mfwd/impl/McastRouteTable.java +++ b/framework/src/onos/apps/mfwd/src/main/java/org/onosproject/mfwd/impl/McastRouteTable.java @@ -17,6 +17,7 @@ package org.onosproject.mfwd.impl; import org.apache.felix.scr.annotations.Service; import org.onlab.packet.IpPrefix; + import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import static com.google.common.base.Preconditions.checkNotNull; @@ -191,6 +192,30 @@ public final class McastRouteTable { } /** + * Delete a specific egress from the MRIB. + * + * @param saddr source address * or x.x.x.x or x.x.x.x/y + * @param gaddr group address x.x.x.x or x.x.x.x/y + * @param egress group address x.x.x.x or x.x.x.x/y + * @return boolean if egress was deleted + */ + public boolean removeEgress(String saddr, String gaddr, String egress) { + + IpPrefix gpfx = IpPrefix.valueOf(gaddr); + IpPrefix spfx = IpPrefix.valueOf(0, 0); + if (saddr != null && !saddr.equals("*")) { + spfx = IpPrefix.valueOf(saddr); + } + + McastRouteSource src = (McastRouteSource) findBestMatch(spfx, gpfx); + boolean removed = src.removeEgressPoint(egress); + if (removed) { + src.setIntent(); + } + return removed; + } + + /** * Delete a multicast route from the MRIB. * * @param saddr source address * or x.x.x.x or x.x.x.x/y |