4198d64947bc95b18b0e10e3f1ac75e0829aafed
[bgpcep.git] / bgp / rib-spi / src / main / java / org / opendaylight / protocol / bgp / rib / spi / RIBExtensionProviderContext.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.protocol.bgp.rib.spi;
9
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.AddressFamily;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.SubsequentAddressFamily;
12
13 /**
14  * Interface for registering AdjRIBsIn factories. In order for a model-driven RIB implementation to work correctly, it
15  * has to know how to handle individual NLRI fields, whose encoding is specific to a AFI/SAFI pair. This interface
16  * exposes an interface for registration of factories for creating AdjRIBsIn instances, which handle the specifics.
17  */
18 public interface RIBExtensionProviderContext extends RIBExtensionConsumerContext {
19     /**
20      * Register a AdjRIBsInFactory for a particular AFI/SAFI combination.
21      *
22      * @param afi Address Family identifier
23      * @param safi Subsequent Address Family identifier
24      * @param factory AdjRIBsInFactory
25      * @return Registration handle. Call its close() method to remove it.
26      */
27     AutoCloseable registerAdjRIBsInFactory(Class<? extends AddressFamily> afi, Class<? extends SubsequentAddressFamily> safi,
28             AdjRIBsFactory factory);
29
30     /**
31      * Register a RIBSupport instance for a particular AFI/SAFI combination.
32      *
33      * @param afi Address Family identifier
34      * @param safi Subsequent Address Family identifier
35      * @param support T RIBSupport instance
36      * @return Registration handle. Call {@link RIBSupportRegistration#close()} method to remove it.
37      * @throws NullPointerException if any of the arguments is null
38      */
39     <T extends RIBSupport> RIBSupportRegistration<T> registerRIBSupport(Class<? extends AddressFamily> afi, Class<? extends SubsequentAddressFamily> safi, T support);
40 }