@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