| @node Kernel Interface |
| @chapter Kernel Interface |
| |
| There are several different methods for reading kernel routing table |
| information, updating kernel routing tables, and for looking up |
| interfaces. |
| |
| @table @samp |
| |
| @item ioctl |
| The @samp{ioctl} method is a very traditional way for reading or writing |
| kernel information. @samp{ioctl} can be used for looking up interfaces |
| and for modifying interface addresses, flags, mtu settings and other |
| types of information. Also, @samp{ioctl} can insert and delete kernel |
| routing table entries. It will soon be available on almost any platform |
| which zebra supports, but it is a little bit ugly thus far, so if a |
| better method is supported by the kernel, zebra will use that. |
| |
| @item sysctl |
| @samp{sysctl} can lookup kernel information using MIB (Management |
| Information Base) syntax. Normally, it only provides a way of getting |
| information from the kernel. So one would usually want to change kernel |
| information using another method such as @samp{ioctl}. |
| |
| @item proc filesystem |
| @samp{proc filesystem} provides an easy way of getting kernel |
| information. |
| |
| @item routing socket |
| |
| @item netlink |
| On recent Linux kernels (2.0.x and 2.2.x), there is a kernel/user |
| communication support called @code{netlink}. It makes asynchronous |
| communication between kernel and Quagga possible, similar to a routing |
| socket on BSD systems. |
| |
| Before you use this feature, be sure to select (in kernel configuration) |
| the kernel/netlink support option 'Kernel/User network link driver' and |
| 'Routing messages'. |
| |
| Today, the /dev/route special device file is obsolete. Netlink |
| communication is done by reading/writing over netlink socket. |
| |
| After the kernel configuration, please reconfigure and rebuild Quagga. |
| You can use netlink as a dynamic routing update channel between Quagga |
| and the kernel. |
| @end table |