From: dw6 Date: Mon, 24 Nov 2008 16:49:23 +0000 (+0000) Subject: change to tapSocketProtocol to save interface index X-Git-Url: http://g0dil.de/git?a=commitdiff_plain;h=9c33326f5d7f5ea2bd2231143427c2681158c55a;p=senf.git change to tapSocketProtocol to save interface index git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@977 270642c3-0616-0410-b53a-bc976706d245 --- diff --git a/Socket/Protocols/Raw/TunTapSocketHandle.cc b/Socket/Protocols/Raw/TunTapSocketHandle.cc index 58170a0..e8c5266 100644 --- a/Socket/Protocols/Raw/TunTapSocketHandle.cc +++ b/Socket/Protocols/Raw/TunTapSocketHandle.cc @@ -21,8 +21,8 @@ // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /** \file - \brief - + \brief + */ #include "TunTapSocketHandle.hh" @@ -39,13 +39,13 @@ #define prefix_ ///////////////////////////////cc.p//////////////////////////////////////// -prefix_ void senf::TapSocketProtocol::init_client() +prefix_ std::string senf::TapSocketProtocol::init_client() const { - init_client(std::string()); + return init_client(std::string()); } -prefix_ void senf::TapSocketProtocol::init_client(std::string const & interface_name, bool const NO_PI) +prefix_ std::string senf::TapSocketProtocol::init_client(std::string const & interface_name, bool const NO_PI) const { int f; @@ -59,7 +59,9 @@ prefix_ void senf::TapSocketProtocol::init_client(std::string const & interface_ interface_name.copy( ifr.ifr_name, IFNAMSIZ); if (::ioctl(f, TUNSETIFF, (void *) &ifr) < 0 ) SENF_THROW_SYSTEM_EXCEPTION( "Could not create tap device: ") << ifr.ifr_name << "."; + ifaceIndex_ = if_nametoindex(ifr.ifr_name); fd(f); + return ifaceName(); } prefix_ unsigned senf::TapSocketProtocol::available() @@ -95,11 +97,25 @@ prefix_ bool senf::TapSocketProtocol::eof() return false; } +prefix_ unsigned int senf::TapSocketProtocol::ifaceIndex() + const +{ + return ifaceIndex_; +} + +prefix_ std::string senf::TapSocketProtocol::ifaceName() + const +{ + char buf[IF_NAMESIZE]; + if_indextoname(ifaceIndex_, buf); + return std::string(buf); +} + ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_ //#include "TunTapSocketHandle.mpp" - + // Local Variables: // mode: c++ // fill-column: 100 diff --git a/Socket/Protocols/Raw/TunTapSocketHandle.hh b/Socket/Protocols/Raw/TunTapSocketHandle.hh index 5c54ece..41c422f 100644 --- a/Socket/Protocols/Raw/TunTapSocketHandle.hh +++ b/Socket/Protocols/Raw/TunTapSocketHandle.hh @@ -77,20 +77,20 @@ namespace senf { public: ///\name Constructors ///@{ - void init_client() const; + std::string init_client() const; ///< Create TAP socket /**< \todo document me */ /**< \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; + std::string 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 */ /**< \note This member is implicitly called from the ProtocolClientSocketHandle::ProtocolClientSocketHandle() constructor */ - + ///@} ///\name Abstract Interface Implementation @@ -98,7 +98,11 @@ namespace senf { unsigned available() const; bool eof() const; + unsigned int ifaceIndex() const; + std::string ifaceName() const; + private: + mutable unsigned int ifaceIndex_; ///@} }; @@ -116,7 +120,7 @@ namespace senf { //#include "TunTapSocketHandle.mpp" #endif - + // Local Variables: // mode: c++ // fill-column: 100