X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FRaw%2FTunTapSocketHandle.hh;h=fb5f95f966c0a252d1ea443897eeee9b3ba50cac;hb=81f84badf27b66dbadec9890646ca1193e998505;hp=f2c21f23faa2cf045e3205d3219aab5d36b168d6;hpb=a1a6c76a214ad1935032826713cabaf9ac57bf07;p=senf.git diff --git a/Socket/Protocols/Raw/TunTapSocketHandle.hh b/Socket/Protocols/Raw/TunTapSocketHandle.hh index f2c21f2..fb5f95f 100644 --- a/Socket/Protocols/Raw/TunTapSocketHandle.hh +++ b/Socket/Protocols/Raw/TunTapSocketHandle.hh @@ -1,9 +1,9 @@ // $Id:PacketSocketHandle.hh 218 2007-03-20 14:39:32Z tho $ // -// Copyright (C) 2006 +// Copyright (C) 2008 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY -// Stefan Bund +// Thorsten Horstmann // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -21,11 +21,11 @@ // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /** \file - \brief PacketProtocol and PacketSocketHandle public header + \brief PacketSocketProtocol and PacketSocketHandle public header */ -#ifndef HH_TunTapSocketHandle_ -#define HH_TunTapSocketHandle_ 1 +#ifndef HH_SENF_Socket_Protocols_Raw_TunTapSocketHandle_ +#define HH_SENF_Socket_Protocols_Raw_TunTapSocketHandle_ 1 // Custom includes #include "../../../Socket/SocketPolicy.hh" @@ -52,59 +52,82 @@ namespace senf { ConnectedCommunicationPolicy, ReadablePolicy, WriteablePolicy - >::policy Tap_Policy; ///< Policy for TAP + >::policy Tap_Policy; ///< Policy for TapSocketProtocol - /** \brief TAP - - \todo document me + /** \brief SocketProcol for the tap pseudo-device. \par Socket Handle typedefs: - + \ref TapSocketHandle \par Policy Interface: + ClientSocketHandle::read() ... + The TapSocketProtocol provides access to the Linux tap device. - \par Address Type: - + The tap device is a virtual ethernet network device. The tap driver was designed as low + level kernel support for ethernet tunneling. Userland application can write Ethernet + frames to the socket and kernel will receive this frames from the tap interface. + In the same time every frame that kernel writes to the tap interface can be read by + userland application from the socket. This class is utilized as the protocol class of the ProtocolClientSocketHandle via the - Socket Handle typedefs above. + Socket Handle typedef above. + + \see Kernel documentation for the TUN/TAP device driver. */ - class TapProtocol - : public ConcreteSocketProtocol, + class TapSocketProtocol + : public ConcreteSocketProtocol, public BSDSocketProtocol { public: ///\name Constructors ///@{ - void init_client() const; - ///< Create TAP socket - /**< \todo document me */ + void init_client() const; ///< Open tap socket and create new tap interface + /**< Opens the tun/tap socket and create a new tap interface + Use \ref ifaceName() to get the actual name of the newly + created interface. + + The new interface is down and has to be set up separately. + After closing the socket, the tap interface and all + corresponding routes will be deleted automatically. */ /**< \note This member is implicitly called from the ProtocolClientSocketHandle::ProtocolClientSocketHandle() constructor */ - void init_client(std::string const & interface_name, bool const NO_PI=true) const; - ///< Create TAP socket - /**< \todo document me - \param[in] address remote address to connect to */ + void init_client(std::string const & interface_name, bool NO_PI=true) const; + ///< Open tap socket and create new tap interface + /**< Opens the tun/tap socket and create a new tap interface + with the given name. Note that the created interface can + have a different name as specified. Use \ref ifaceName() + to get the actual name. + + The new interface is down and has to be set up separately. + After closing the socket, the tap interface and all + corresponding routes will be deleted automatically. + \param[in] interface_name name of the new tap interface. + \param[in] NO_PI if set to \c false each packet has a + additional 4 bytes header (flags, proto) */ /**< \note This member is implicitly called from the ProtocolClientSocketHandle::ProtocolClientSocketHandle() constructor */ - + ///@} ///\name Abstract Interface Implementation ///@{ unsigned available() const; - bool eof() const; + bool eof() const; ///< returns always false. + unsigned int ifaceIndex() const;///< returns the index of the correspondent tap interface + std::string ifaceName() const; ///< returns the actual name of the correspondent tap interface + private: + mutable unsigned int ifaceIndex_; ///@} }; - typedef ProtocolClientSocketHandle TapSocketHandle; - ///< SocketHandle of TapProtocol - /**< \related TapPrototol */ + typedef ProtocolClientSocketHandle TapSocketHandle; + ///< SocketHandle of TapSocketProtocol + /**< \related TapSocketProtocol */ /// @} } @@ -116,7 +139,7 @@ namespace senf { //#include "TunTapSocketHandle.mpp" #endif - + // Local Variables: // mode: c++ // fill-column: 100