-// $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 "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(std::string const & interface_name);
+ ///< Construct a new controller for the given interface name.
+ NetdeviceController(int interface_index);
+ ///< Construct a new controller for the given 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
+ /**< 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
+
private:
+ void openSocket();
+ void doIoctl(ifreq& ifr, int request) const;
+ void ifrName(ifreq& ifr) const;
int sockfd_;
- std::string interfacename_;
+ int ifindex_;
};
}
//#include "NetdeviceController.mpp"
#endif
-\f
+
// Local Variables:
// mode: c++
// fill-column: 100