[Xorp-hackers] vif indeces
Bruce Simpson
bms at incunabulum.net
Mon May 11 23:49:52 PDT 2009
pmv wrote:
> Good day.
>
>
> At the moment, b) is probably the cleanest solution overall. If it
> is a simple matter of looking up the MFEA VIF index based on a VIF
> name, then please feel free to submit a patch which exposes
> ProtoNode<V>::vif_find_by_name() via an XRL.
>
>
> Will do, thanks.
>
> Another thing. Does an IGMP XRL client need to register with finder as
> a target, or would adding XrlStdRouter handlers for
> 'mld6igmp_client/0.1/add_membership4' (and others) and calling
> XrlMld6igmpV0p1Client::send_add_protocol4() be enough?
You need to do a bit more work in a XORP process to implement an XRL
target instead of just sending XRLs. An XrlStdRouter instance is enough
to send XRLs, but not to receive them. For an example, look at the OLSR
code:
http://cvsweb.xorp.org/cgi-bin/cvsweb.cgi/xorp/contrib/olsr/xorp_olsr.cc?rev=1.4
...here, in OLSR's main() function, the XrlStdRouter instance is created
before the XrlOlsr4Target instance, because its constructor needs to see
an XrlRouter instance. The XrlOlsr4Target class is a proxy which glues
the implementation to the XRL layer. It is automatically generated from
the xrl/targets/olsr4.tgt file.
Assuming you write a .tgt file for your process's XRL target, and
add handlers for the mld6igmp_client XIF, as with any other XORP
component, the Finder should be notified of the registration when your
process starts. Feel free to use the contrib/olsr code as a reference.
One of the shortcomings of using the GNU Autotools build system is
that you cannot implement new XRL targets without actually adding them
to the top level xrl/ directory. I managed to overcome this limitation
in Jam and Boost.Build when developing OLSR, but that is not officially
supported, and it is likely the Jamfiles will go away in future. My
understanding is that we plan to switch to a new Python-based build
tool, SCons, which should eliminate this tedious and inconvenient step.
If you want to build your application using XORP 1.6, then you will
need to add your .tgt and .xif files to the global xrl/ directory,
together with the relevant entries in Makefile.am. It is entirely
likely that XRL may change greatly in future for this and other reasons.
>
>
> Some background information:
> The MFEA code is very tied to the BSD MROUTING kernel multicast
> forwarding code -- and the VIF indexes in the MFEA aren't directly
> related to the FEA's notion of a VIF; they aren't redundant, as
> such, they are different identifiers.
>
>
> If that is the case, which should take precedence? Which should be
> authority for vif indeces, or furthermore between vif names and
> indeces? Are there specific situations in which this should be a
> consideration?
I would rely on the MFEA for this mapping.
XORP client processes should never use interface indexes directly; MFEA
VIF indexes are entirely separate from any other notion of interface
names or indexes, only the MFEA knows about them.
Unfortunately, in extending IGMP, you've found a weak spot in the API
where the MFEA VIF index has to be exposed for the XRLs to be useful. Up
until now, this hasn't been an issue, because normally only PIM and IGMP
interact with the MFEA directly.
>
>
>
> In MROUTING, a VIF index is what's found in the 'struct mfcctl2'
> structure used to configure multicast forwarding, and I believe
> this is what the MFEA is dealing with internally
>
...
>
> There are platforms (e.g. Windows) where the multicast forwarding
> plane is configured in a completely different way, and the MFEA
> wouldn't be suitable for driving it without significant code
> refactoring.
>
>
> So portability might be an issue then? I mostly work on FreeBSD
> exclusively.
I wouldn't worry about it for now, although it is a hairy issue for the
future which needs to be carefully considered.
It is something we would need to revisit if the MFEA is refactored to
support multicast forwarding planes other than MROUTING, but it
shouldn't impact ongoing work with XORP on FreeBSD, as Linux suffers
from the same issue.
You can regard the multicast forwarding plane on FreeBSD and Linux as
working more or less identically. Even though the Linux code is not
directly derived from the 4.4BSD implementation (it is a clean-room
GPLv2 re-implementation), it is functionally identical, and the kernel
APIs are more or less identical.
thanks,
BMS
More information about the Xorp-hackers
mailing list