From: tho Date: Fri, 7 Dec 2007 17:30:28 +0000 (+0000) Subject: very first version for a netdevice controller (not tested yet) X-Git-Url: http://g0dil.de/git?a=commitdiff_plain;h=d91d33394bc18350f20407201bd5fbe7346f8f7f;p=senf.git very first version for a netdevice controller (not tested yet) git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@549 270642c3-0616-0410-b53a-bc976706d245 --- diff --git a/Socket/NetdeviceController.cc b/Socket/NetdeviceController.cc new file mode 100644 index 0000000..6cc7d6b --- /dev/null +++ b/Socket/NetdeviceController.cc @@ -0,0 +1,79 @@ +// $Id: BufferingPolicy.cc 533 2007-11-23 17:34:30Z g0dil $ +// +// Copyright (C) 2007 +// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) +// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// 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 +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +/** \file + \brief BufferingPolicy non-inline non-template implementation + */ + +#include "NetdeviceController.hh" +//#include "NetdeviceController.ih" + +// Custom includes +#include +#include +#include +#include +#include "../Utils/Exception.hh" + +#define prefix_ +///////////////////////////////cc.p//////////////////////////////////////// + +prefix_ senf::NetdeviceController::NetdeviceController(std::string const interface_name) +{ + sockfd_ = ::socket(PF_PACKET, SOCK_DGRAM, 0); + if (sockfd_ < 0) + throwErrno(); + interfacename_ = interface_name; +} + +prefix_ senf::MACAddress senf::NetdeviceController::hardwareAddress() +{ + struct ifreq ifr; + ::memset( &ifr, 0, sizeof(ifr)); + interfacename_.copy( ifr.ifr_name, IFNAMSIZ); + if ( ::ioctl( sockfd_, SIOCGIFHWADDR , &ifr ) < 0 ) + throwErrno(); + return senf::MACAddress::from_string( + ether_ntoa( (struct ether_addr*) ifr.ifr_hwaddr.sa_data ) ); +} + +prefix_ senf::NetdeviceController::~NetdeviceController() +{ + close( sockfd_ ); +} + + + +///////////////////////////////cc.e//////////////////////////////////////// +#undef prefix_ +//#include "NetdeviceController.mpp" + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 +// End: diff --git a/Socket/NetdeviceController.hh b/Socket/NetdeviceController.hh new file mode 100644 index 0000000..50f878f --- /dev/null +++ b/Socket/NetdeviceController.hh @@ -0,0 +1,75 @@ +// $Id: AddressingPolicy.hh 296 2007-07-10 20:39:34Z g0dil $ +// +// Copyright (C) 2007 +// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) +// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// 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 +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +/** \file + \brief NetdeviceController public header + */ + +#ifndef HH_NetdeviceController_ +#define HH_NetdeviceController_ 1 + +// Custom includes +#include +#include "Protocols/Raw/MACAddress.hh" + +//#include "NetdeviceController.mpp" +///////////////////////////////hh.p//////////////////////////////////////// + +namespace senf { + + /** \brief NetdeviceController + + \todo document me + */ + class NetdeviceController + { + public: + NetdeviceController(std::string const interface_name); + + virtual ~NetdeviceController(); + + MACAddress hardwareAddress(); + + private: + int sockfd_; + std::string interfacename_; + }; + +} + +///////////////////////////////hh.e//////////////////////////////////////// +//#include "NetdeviceController.cci" +//#include "NetdeviceController.ct" +//#include "NetdeviceController.cti" +//#include "NetdeviceController.mpp" +#endif + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 +// End: