From 9aaed4a7973a77ad788f3502d53434c51720dabd Mon Sep 17 00:00:00 2001 From: dw6 <dw6@wiback.org> Date: Mon, 24 Nov 2008 16:49:23 +0000 Subject: [PATCH] change to tapSocketProtocol to save interface index --- Socket/Protocols/Raw/TunTapSocketHandle.cc | 28 +++++++++++++++++----- Socket/Protocols/Raw/TunTapSocketHandle.hh | 12 ++++++---- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/Socket/Protocols/Raw/TunTapSocketHandle.cc b/Socket/Protocols/Raw/TunTapSocketHandle.cc index 58170a0ff..e8c526602 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 5c54ece9f..41c422fda 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 -- GitLab