X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FNetdeviceController.hh;h=e969cda37bf0bd13a1927154b6e23b315f52444a;hb=fd3a0e8ac95d1158e9ea661ddf9187b67c70169f;hp=d114314b25a9f67f81c8dd5e79ff8dbce4d4b3b5;hpb=6d527cd9cf4d928926e5bf164ea470eb419fcbf8;p=senf.git diff --git a/Socket/NetdeviceController.hh b/Socket/NetdeviceController.hh index d114314..e969cda 100644 --- a/Socket/NetdeviceController.hh +++ b/Socket/NetdeviceController.hh @@ -1,9 +1,9 @@ // $Id$ // // Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) -// Thorsten Horstmann +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY +// 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 @@ -24,42 +24,85 @@ \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 -#include +#include +#include #include "Protocols/Raw/MACAddress.hh" //#include "NetdeviceController.mpp" ///////////////////////////////hh.p//////////////////////////////////////// +struct ifreq; + namespace senf { - /** \brief NetdeviceController - - \todo document me + /** \brief Netdevice Controller + + This controller provides an interface which can be used to configure network + devices. Note, that some setting members are privileged operations. + + \see manual page netdevice(7) for more informations. */ class NetdeviceController { public: - NetdeviceController(std::string const & interface_name); - NetdeviceController(int interface_index); - virtual ~NetdeviceController(); - - MACAddress hardwareAddress(); - std::string interfaceName(); - int interfaceIndex(); ///< return the interface index of the interface - int mtu(); - void mtu(int new_mtu); - + explicit NetdeviceController(std::string const & interface_name); + ///< Construct a new controller for the given interface name. + explicit NetdeviceController(int interface_index); + ///< Construct a new controller for the given interface index. + int interfaceIndex() const; ///< return the interface index + MACAddress hardwareAddress() const; + ///< return hardware address + void hardwareAddress(const MACAddress &newAddress); + ///< set hardware address + /**< Changes the hardware address of the interface. + Note, that setting the hardware address is a privileged + operation. It is only allowed when the interface is not + up. If the interface is up, this call will cause an + SystemException to be thrown. */ + std::string interfaceName() const; + ///< return interface name + void interfaceName(const std::string &newName); + ///< set interface name + /**< Changes the name of the interface. + Note, that setting the name is a privileged operation. + It is only allowed when the interface is not up. If + the interface is up, this call will cause an + SystemException to be thrown. */ + + int mtu() const; ///< return the Maximum Transmission Unit + void mtu(int new_mtu); ///< set the Maximum Transmission Unit + /**< Set the MTU (Maximum Transfer Unit) of the device. + Note, that this is a privileged operation. + Setting the MTU to too small values may cause kernel + crashes. */ + + bool promisc() const; ///< return \c true if interface is in promiscuous mode + void promisc(bool mode); ///< enable/disable promiscuous mode of the interface + /**< Note, that this is a privileged operation. */ + + bool isUp() const; ///< return \c true if interface is up + void up(); ///< ifconfig up interface + void down(); ///< ifconfig down interface + + struct SockFd { + typedef boost::shared_ptr ptr; + int fd; + SockFd(); + ~SockFd(); + }; + + static SockFd::ptr sockfd(); + private: - void openSocket(); - void doIoctl(ifreq& ifr, int request); - void ifrName(ifreq& ifr); - int sockfd_; + void doIoctl(ifreq& ifr, int request) const; + void ifrName(ifreq& ifr) const; + SockFd::ptr sockfd_; int ifindex_; }; @@ -72,7 +115,7 @@ namespace senf { //#include "NetdeviceController.mpp" #endif - + // Local Variables: // mode: c++ // fill-column: 100