Packets: Fix VariantParser invalid parser access bug
[senf.git] / Socket / NetdeviceController.hh
index 50f878f..56afdac 100644 (file)
@@ -1,9 +1,9 @@
-// $Id: AddressingPolicy.hh 296 2007-07-10 20:39:34Z g0dil $
+// $Id$
 //
 // Copyright (C) 2007
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
-//     Thorsten Horstmann <thorsten.horstmann@fokus.fraunhofer.de>
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
+//     Thorsten Horstmann <tho@berlios.de>
 //
 // 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
     \brief NetdeviceController public header
  */
 
-#ifndef HH_NetdeviceController_
-#define HH_NetdeviceController_ 1
+#ifndef HH_SENF_Socket_NetdeviceController_
+#define HH_SENF_Socket_NetdeviceController_ 1
 
 // Custom includes
 #include <string>
+#include <net/if.h>
 #include "Protocols/Raw/MACAddress.hh"
 
+
 //#include "NetdeviceController.mpp"
 ///////////////////////////////hh.p////////////////////////////////////////
 
@@ -39,19 +41,32 @@ namespace senf {
     /** \brief NetdeviceController
      
         \todo document me
+        \todo Add 'promisc' member to enable/disable promiscuous mode
      */
     class NetdeviceController
     {
     public:
-        NetdeviceController(std::string const interface_name);
-        
+        NetdeviceController(std::string const & interface_name);
+        NetdeviceController(int interface_index);
         virtual ~NetdeviceController();
         
-        MACAddress hardwareAddress();
+        int interfaceIndex() const; ///< return the interface index
     
+        MACAddress hardwareAddress() const; ///< return hardware address
+        void hardwareAddress(const MACAddress &newAddress); ///< set hardware address
+
+        std::string interfaceName() const; ///< return interface name
+        void interfaceName(const std::string &newName) const; ///< set interface name
+
+        int mtu() const; ///< return the Maximum Transmission Unit
+        void mtu(int new_mtu) const; //< set the Maximum Transmission Unit
+
     private:
+        void openSocket();
+        void doIoctl(ifreq& ifr, int request) const;
+        void ifrName(ifreq& ifr) const;
         int sockfd_;
-        std::string interfacename_;
+        int ifindex_;
     };
 
 }