X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FNetdeviceController.hh;h=e969cda37bf0bd13a1927154b6e23b315f52444a;hb=5443435c4c2b6e4386c5334b5b8358273f2bae93;hp=db7c5cf2a1bf945c145000502ce04475f12d9948;hpb=c5ebf1fef99c27a3fdc02a70bff041ac881f4c32;p=senf.git diff --git a/Socket/NetdeviceController.hh b/Socket/NetdeviceController.hh index db7c5cf..e969cda 100644 --- a/Socket/NetdeviceController.hh +++ b/Socket/NetdeviceController.hh @@ -29,13 +29,16 @@ // Custom includes #include -#include +#include +#include #include "Protocols/Raw/MACAddress.hh" //#include "NetdeviceController.mpp" ///////////////////////////////hh.p//////////////////////////////////////// +struct ifreq; + namespace senf { /** \brief Netdevice Controller @@ -48,12 +51,10 @@ namespace senf { class NetdeviceController { public: - NetdeviceController(std::string const & interface_name); + explicit NetdeviceController(std::string const & interface_name); ///< Construct a new controller for the given interface name. - NetdeviceController(int interface_index); + explicit NetdeviceController(int interface_index); ///< Construct a new controller for the given interface index. - virtual ~NetdeviceController(); - int interfaceIndex() const; ///< return the interface index MACAddress hardwareAddress() const; ///< return hardware address @@ -84,12 +85,24 @@ namespace senf { 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) const; void ifrName(ifreq& ifr) const; - int sockfd_; + SockFd::ptr sockfd_; int ifindex_; };