package net.onrc.onos.apps.bgproute;

import net.floodlightcontroller.core.module.IFloodlightService;

public interface IBgpRouteService extends IFloodlightService {

    //public RibEntry lookupRib(byte[] dest);

    //public Ptree getPtree();
    public IPatriciaTrie<RibEntry> getPtree();

    public String getBGPdRestIp();

    public String getRouterId();

    public void clearPtree();

    /**
     * Pass a RIB update to the {@link IBgpRouteService}
     *
     * @param update
     */
    public void newRibUpdate(RibUpdate update);

    //TODO This functionality should be provided by some sort of Ptree listener framework
    //public void prefixAdded(PtreeNode node);
    //public void prefixDeleted(PtreeNode node);
}
