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.
+
\todo Add 'promisc' member to enable/disable promiscuous mode
*/
class NetdeviceController
{
public:
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();
-
- 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
+ int interfaceIndex() const; ///< return the interface index
+ MACAddress hardwareAddress() const;
+ ///< return hardware address
+ void hardwareAddress(const MACAddress &newAddress);
+ ///< set hardware address
+ /**< Note, that setting the hardware address is a privileged operation. */
+ std::string interfaceName() const;
+ ///< return interface name
+ void interfaceName(const std::string &newName);
+ ///< set interface name
+ /**< Changes the name of the interface. Note, that this is a
+ privileged operation. It is only allowed when the interface is not up. */
+ 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. */
private:
void openSocket();
void doIoctl(ifreq& ifr, int request) const;
//#include "NetdeviceController.mpp"
#endif
-\f
+
// Local Variables:
// mode: c++
// fill-column: 100
BOOST_AUTO_UNIT_TEST(NetdeviceController) {
senf::NetdeviceController ctrl ("lo");
- std::cout << "name: " << ctrl.interfaceName() << "\n";
+ BOOST_CHECK_EQUAL( ctrl.interfaceName(), "lo");
- senf::MACAddress oldAddr(ctrl.hardwareAddress());
- int oldMTU = ctrl.mtu();
-
- std::cout << "hw addr: " << oldAddr << "\n";
- std::cout << "mtu: " << oldMTU << "\n";
+ int oldMTU;
+ BOOST_CHECK_NO_THROW( oldMTU = ctrl.mtu());
if (getuid() != 0) {
BOOST_WARN_MESSAGE(false, "Cannot run some tests of senf::NetdeviceController as non-root user");
return;
}
- ctrl.mtu(oldMTU - 16);
- std::cout << "new mtu: " << ctrl.mtu() << "\n";
- ctrl.mtu(oldMTU);
-
- senf::MACAddress newAddr(senf::MACAddress::from_string("00:18:de:2e:ec:00"));
- ctrl.hardwareAddress(newAddr);
- std::cout << "new hw addr: " << ctrl.hardwareAddress() << "\n";
- ctrl.hardwareAddress(oldAddr);
+ BOOST_CHECK_NO_THROW( ctrl.mtu(oldMTU-16));
+ BOOST_CHECK_EQUAL( ctrl.mtu(), oldMTU-16);
+ BOOST_CHECK_NO_THROW( ctrl.mtu(oldMTU));
+ BOOST_CHECK_EQUAL( ctrl.mtu(), oldMTU);
}
///////////////////////////////cc.e////////////////////////////////////////
#undef prefix_
-\f
+
// Local Variables:
// mode: c++
// fill-column: 100