routing - the LCFG routing component
This object constructs all the necessary configuration files and starts the appropriate routing daemon.
Do we want to run quagga or routed or gated?
If we run quagga then we have the option (eventually) of speaking OSPF and BGP, as well as having some control over the RIP we accept. If we run routed then we just have to accept all RIP that's thrown at us. If we run gated then we do a bit more work, but we also get more control over what we accept. We also get to run something unsupported!
If type is null then use defaultType. If this is also null then use defaultDefaultType. If this is still null then the component gets to choose what's "best" (but note that it will then force rdisc off).
This resource does not actually affect the operation of the component, but instead is included in some of its messages. Setting it to some lcfg context-specific value might therefore be useful to the user.
Do we want the daemon to attempt to speak snmp? (Probably not!) This is in principle a generic resource, though only gated understands it at the moment.
The name of the routed binary.
The name of the directory containing the generated quagga configuration files.
The name of the directory where the quagga daemons will write various state information.
The usernames and group names which will be used by the quagga daemons.
Logging mode. If qzLog is set to have things logged to files then qzLogDir contains the name of the directory where they should be written.
Debugging options for the daemons.
Where are the daemon binaries?
Should the component fire up the watchquagga daemon to keep an eye on what the routing daemons are doing? If so, it will also be invoked to do a phased restart when any of the configuration files changes.
Where is the watchquagga daemon?
Where is the quagga state kept? (Normally the default will be reasonable.)
Should a log-level be set explicitly?
The watchquagga --min-restart-interval and --max-restart-interval parameters.
The watchquagga --interval parameter.
Commands to be used by watchquagga to start, stop or restart any of the daemons, respectively.
Password and config password which should be written to the generated configuration files. If these are set then it will also be possible to connect to the daemons' CLIs using telnet. If qzRandomPasswords is set then random passwords will be used for any which are not explicitly set.
Static routes: qzStaticRoutes contains a list of static routes which should be defined. For each, there's a qzStaticDest_tag which specifies the remote network and qzStaticVia_tag which specifies the address of the local router to use for the traffic.
Various RIP parameters.
Access lists: qzAccessLists contains a list of which lists to define. For each, there's an qzAccessList_tag, containing the entries to go on that list. The component will create "permitAll" and "denyAll" on the fly if necessary. If qzAccessListNEM_tag is set, the access list is generated without exact-match being defined; otherwise if qzAccessListEM_tag is set then exact-match is used for all entries; otherwise by default exact-match is not set. Note that a list entry of "default" will always generate a "permit 0.0.0.0/0 exact-match". If qzAccessListNDA_tag is set, the access list won't be terminated by a "deny all"; by default it will be. If qzOffsetListIn_tag or qzOffsetListOut_tag is set, an appropriate offset-list is also generated.
Distribution lists: qzRipDistLists contains a list of which lists to define. For each, there's a qzRipDistIfName_tag, defaulting to tag, giving the name of the interface, qzRipDistActive_tag saying whether the interface is passive or not, qzRipDistInList_tag listing access lists to apply inbound, qzRipDistOutList_tag listing access lists to apply outbound, and qzRipDistDesc_tag specifying a helpful description for the config entry. qzRipDistInAll and qzRipDistOutAll list access lists to apply to all interfaces not otherwise set.
Specifies hosts and networks for which static routes should be installed. static contains a list of tags. For each tag there must be a corresponding gateway_tag and optional hosts_tag and/or networks_tag. The former is just a list of host IP addresses; the latter is a list of networks, with optional masks separated by ':' or mask lengths separated by '/'.
List of networks which should be imported from RIP (with optional masks or lengths separated by ':' or '/' as before ). If this is blank then we just accept everything we're given. rip_import_extra has two functions: it makes it easy to add things to the default set, and it means these resources can each be short enough to fit even though the combined length is too much.
Should we accept the default route? Set this to null to ignore it.
Should we send rip packets? If this is set then we don't.
Since we can only have one "interface" statement for each interface we bundle the functionality under the rip_ifs resource, which contains a list of interfaces for which metric-tweaking is required. For each there's then a corresponding rip_metricin_if and rip_metricout_if resource, which control the metric which should be set on input or added on output, and rip_ripin_if or rip_noripin_if, which control whether RIP is accepted or not and which can't both be set. Likewise rip_ripout_if and rip_noripout_if control the sending of routing information. At least one of the interface sub-resources has to be set. The usual gated rules apply here; in particular "all" is acceptable. The tag-name is assumed to be the interface name by default, but if this isn't appropriate then the rip_ifname_if resource can be used to change it. Finally, we may want to assign a non-default metric using if_metric_if when we export it as a direct route.
There are two lots of resources involved in RIP exporting: rip_export and rip_export_extra, if set, define the defaults for all not-otherwise-specified interfaces; and rip_exportifs contains a list of interfaces for specific handling, each of which has a corresponding rip_export_whatever list. If it's required to control explicitly which directly-connected networks should be exported everywhere, this can be done by setting the appropriate rip_export_direct_whatever resources. rip_descr_whatever adds a helpful comment to the gated configuration file. rip_name_whatever sets the interface name, if it's different from the tag.
Note that it may be necessary for whatever to be "all".
Should we run rdisc? Note that this'll be unconditionally forced off unless type is explicitly set to gated.
The name of the gated binary.
Where gated will write its pid file.
Where should the generated gated.conf file go?
At what syslog level should gated's messages be produced?
Trace options, in gated-standard form. traceoptions specifies global options, while rip_traceoptions specifies RIP-specific options.
The address of a router which should be set as the static default.
The following resources should not normally have their values changed from the installation defaults. They are use either to communicate state between method invocations, or to define where the component's various compiled C helper programs have been installed, or to provide Solaris/Linux compatibility hooks. Setting them incorrectly may result in the component not functioning correctly. Refer to the component source itself for details as to their various functions.