// $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
// Custom includes
#include <sys/socket.h>
#include <sys/ioctl.h>
-#include <net/if.h>
#include "../Utils/Exception.hh"
#define prefix_
}
prefix_ std::string senf::NetdeviceController::interfaceName()
+ const
{
struct ifreq ifr;
ifrName( ifr);
}
prefix_ senf::MACAddress senf::NetdeviceController::hardwareAddress()
+ const
{
struct ifreq ifr;
ifrName( ifr);
return senf::MACAddress::from_data( ifr.ifr_hwaddr.sa_data);
}
+prefix_ void senf::NetdeviceController::hardwareAddress(const MACAddress &newAddress) {
+ struct ifreq ifr;
+ ifrName( ifr);
+ ifr.ifr_hwaddr.sa_family = 1; // TODO: lookup named constant; PF_LOCAL ???
+ std::copy(newAddress.begin(), newAddress.end(), ifr.ifr_hwaddr.sa_data);
+ doIoctl( ifr, SIOCSIFHWADDR);
+}
+
prefix_ int senf::NetdeviceController::mtu()
+ const
{
struct ifreq ifr;
ifrName( ifr);
}
prefix_ void senf::NetdeviceController::mtu(int new_mtu)
+ const
{
struct ifreq ifr;
ifrName( ifr);
}
prefix_ int senf::NetdeviceController::interfaceIndex()
+ const
{
return ifindex_;
}
{
sockfd_ = ::socket( PF_INET, SOCK_DGRAM, 0);
if ( sockfd_ < 0)
- throwErrno();
+ SENF_THROW_SYSTEM_EXCEPTION("Could not open socket for NetdeviceController.");
}
prefix_ void senf::NetdeviceController::ifrName(ifreq& ifr)
+ const
{
::memset( &ifr, 0, sizeof(ifr));
ifr.ifr_ifindex = ifindex_;
if ( ::ioctl( sockfd_, SIOCGIFNAME, &ifr ) < 0 )
- throwErrno();
+ SENF_THROW_SYSTEM_EXCEPTION("NetdeviceController")
+ << " could not discover the name of the interface with index " << ifindex_ << ".";
}
-
prefix_ void senf::NetdeviceController::doIoctl(ifreq& ifr, int request)
+ const
{
if ( ::ioctl( sockfd_, request, &ifr ) < 0 )
- throwErrno();
+ SENF_THROW_SYSTEM_EXCEPTION("NetdeviceController::doIoctl failed.");
}
///////////////////////////////cc.e////////////////////////////////////////