On Tue, Aug 29, 2017 at 4:21 AM, Neale Ranns (nranns) <nra...@cisco.com> wrote:
> Hi Jon,
>
> (apologies for repeating some of what you already know, but from the top…)
>
> A VRF is virtualisation of a router’s *IP* routing and forwarding. VRFs are 
> typically identified by a name (and again typically named to refer to the VPN 
> customer they represent). IP packets in VRF RED must be separate from IP 
> packets in VRF BLUE. By ‘IP’ in this context we mean IPv4 and IPv6 and 
> unicast and multicast (known as sub-address families or SAFIs). To provide 
> this separation we therefore need 4 ‘tables’ per-VRF, one for each SAFI. A 
> ‘table’ in this context is the well known longest-prefix matching DB. Tables 
> are known by a unique per-AFI ID (note per-AFI not per-SAFI, so IPv4 unicast 
> and multicast share the same table-id). It is the client’s responsibility to 
> associate unique table IDs to tables within all of its VRFs. The client is 
> free to choose the table-ID from the full u32 range. So, bottom line, in the 
> context of IP forwarding a table (and its associated ID) refer to an instance 
> of a LPM DB.
>
> Despite code comments and variable naming, VPP does not maintain the concept 
> of a VRF, i.e. it does not maintain a grouping of ‘tables’. At the client 
> interface VPP deals only with table IDs – i.e. an identifier that the client 
> provided for a given LPM DB. All APIs that claim to accept a VRF index should 
> be renamed to accept an IP table ID.
> As with all things VPP the allocation of the data-structure that represents 
> the LPM-DB comes from a memory pool. This data-structure thus has an 
> associated pool index – this is the FIB index. So, there is a one to one 
> mapping between the externally visible and client assigned ‘table ID’ and the 
> internal use only ‘FIB index’. Both are a u32, neither are strictly typed…
>
> With regards to the creation of tables, I’m currently working on the API you 
> discovered – ip_table_add_del. With this API the client instructs VPP to 
> add/delete a ‘table ID’ (as discussed above). The VPP FIB has the concept of 
> ownership or ‘sourcing’ of its resources. Sources can be external (i.e. the 
> CLI or the API) or internal (e.g. LISP and DHCP). FIB resources are only 
> completely free’d was there are no more sources that are referencing it.
> My intention with the table add/delete API is that the client can add the 
> table then insert routes and bind interfaces. If the client then deletes the 
> table its routes will be purged. The table will then be deleted iff it held 
> the last reference. With the introduction of this API VPP will insist that it 
> has been called to create the table before any routes or interfaces refer to 
> it.
> The current behaviour is that tables can be created either by setting an 
> interface into that table, or by setting the ‘create_vrf_if_needed’ flag in a 
> route add. There is no means to delete it, hence my new API work.
>
> Hth,
> neale

Neale,

That helps tremendously!

I am poised to add a bunch of route-related API calls to our project.
Are the "new" IP Route APIs in place at this time?  Or shall I wait a bit
and watch for a bit still?

Thank you!

jdl
_______________________________________________
vpp-dev mailing list
vpp-dev@lists.fd.io
https://lists.fd.io/mailman/listinfo/vpp-dev

Reply via email to