change to tapSocketProtocol to save interface index
dw6 [Mon, 24 Nov 2008 16:49:23 +0000 (16:49 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@977 270642c3-0616-0410-b53a-bc976706d245

Socket/Protocols/Raw/TunTapSocketHandle.cc
Socket/Protocols/Raw/TunTapSocketHandle.hh

index 58170a0..e8c5266 100644 (file)
@@ -21,8 +21,8 @@
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 /** \file
-    \brief 
-    
+    \brief
+
  */
 
 #include "TunTapSocketHandle.hh"
 #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"
 
-\f
+
 // Local Variables:
 // mode: c++
 // fill-column: 100
index 5c54ece..41c422f 100644 (file)
@@ -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
 
-\f
+
 // Local Variables:
 // mode: c++
 // fill-column: 100