/*!\page kernelppp The Kernel PPP Kit (libkernelppp.a)The PPP stack is a kernel module that interfaces with the network stack.Thanks to its modular nature new protocols and extensions can be added withouthaving to recompile the PPP stack.The kernel API is mostly intended for developers who want to write extension modules,but you can also create and control PPP interfaces from within your kernel module.Every instance of a PPP interface initially consists of the following classes:- KPPPInterface (the main interface class)- KPPPLCP (the Link Control Protocol)- KPPPStateMachine (the state machine for the Link Control Protocol)- KPPPProfile (this manages the current interface profile)KPPPLCP, KPPPStateMachine, and KPPPProfile are integrated into KPPPInterface asmember variables. All these classes have private constructors. Only the PPPinterface manager can create a new instance of KPPPInterface. \nSuch an interface does nothing useful because it needs at least a device to connectto a PPP server. \nThese are the base classes for extending an interface:- KPPPDevice (a PPP transport device: PPPoE, modem, cell phone, etc.)- KPPPLCPExtension (adds new basic codes to the LCP protocol)- KPPPOptionHandler (adds new configure-packet types to the LCP protocol)- KPPPProtocol (a base class for protocols; e.g.: LCP and IPCP)\section kppppackethandling Packet handlingKPPPInterface, KPPPDevice, and KPPPProtocol derive from KPPPLayer. When sending,packets are passed down the stack to every layer that can handle the packet.This facilitates creating packet encapsulators like compression protocols. You caneven catch packets before they arrive at the device layer. \nA different system is used for receiving packets: KPPPDevice passes the receivedpacket to KPPPInterface which in turn tries to find the best fitting KPPPProtocolthat can handle this kind of packet. If one is found it may pass the packet to thenetstack or, in case of an encapsulator, it can put the packet back into the decodequeue by calling KPPPInterface::Receive().\section kpppmultilink Multilink interfacesInterfaces can have one parent and multiple children. The first interface of amultilink bundle is split into a parent and a child. All other children must be addedto the parent when they are needed. Normally, a bundle (main) interface has no parentand a sub-interface (child) has no children. \nA multilink protocol can use any desired technique for creating the additionalchildren. For instance, it could save the descriptions of all children as privateparameters in the interface description file. Alternatively, it could use internalbundle names to bundle all interfaces with the equal bundle names. \nIf a received packet could not be handled by a child it is passed up to the parent.On the other hand, an interface without a device (no next layer after the interface)will \e not pass the packet to its children.\section kpppwritingmodules Writing modulesPPP makes use of the kernel module API. Every module must export a \c ppp_module_infostructure. \nKPPPInterface loads all specified modules and calls their \c ppp_module_info::add_to()function. Depending on the type of module you should add the corresponding objectto the interface.\sa ppp_module_info*/