⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fromsimdevice.cc

📁 COPE the first practical network coding scheme which is developped on click
💻 CC
字号:
/* * fromsimevice.{cc,hh} -- element reads packets from a simulated network * interface. * *//***************************************************************************** *  Copyright 2002, Univerity of Colorado at Boulder.                        * *                                                                           * *                        All Rights Reserved                                * *                                                                           * *  Permission to use, copy, modify, and distribute this software and its    * *  documentation for any purpose other than its incorporation into a        * *  commercial product is hereby granted without fee, provided that the      * *  above copyright notice appear in all copies and that both that           * *  copyright notice and this permission notice appear in supporting         * *  documentation, and that the name of the University not be used in        * *  advertising or publicity pertaining to distribution of the software      * *  without specific, written prior permission.                              * *                                                                           * *  UNIVERSITY OF COLORADO DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS      * *  SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND        * *  FITNESS FOR ANY PARTICULAR PURPOSE.  IN NO EVENT SHALL THE UNIVERSITY    * *  OF COLORADO BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL         * *  DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA       * *  OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER        * *  TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR         * *  PERFORMANCE OF THIS SOFTWARE.                                            * *                                                                           * ****************************************************************************/#include <click/config.h>#include <sys/time.h>#include <unistd.h>#include <click/simclick.h>#include "fromsimdevice.hh"#include "tosimdevice.hh"#include <click/error.hh>#include <click/confparse.hh>#include <click/glue.hh>#include <unistd.h>#include <fcntl.h>#include <click/router.hh>#include <sys/ioctl.h>CLICK_DECLSFromSimDevice::FromSimDevice()  : Element(0, 1), _packetbuf_size(0),_packetbuf(0){}FromSimDevice::~FromSimDevice(){  uninitialize();}intFromSimDevice::configure(Vector<String> &conf, ErrorHandler *errh){  _packetbuf_size = 2048;  if (cp_va_parse(conf, this, errh,		  cpString, "interface name", &_ifname,		  cpUnsigned, "maximum packet length", &_packetbuf_size,		  cpEnd) < 0)    return -1;  if (_packetbuf_size > 8192 || _packetbuf_size < 128)    return errh->error("maximum packet length out of range");  return 0;}intFromSimDevice::initialize(ErrorHandler *errh){  if (!_ifname)    return errh->error("interface not set");  // Get the simulator ifid  Router* myrouter = router();  _fd = myrouter->sim_get_ifid(_ifname.cc());  if (_fd < 0) return errh->error("unable to open netowrk interface");  // create packet buffer  _packetbuf = new unsigned char[_packetbuf_size];  if (!_packetbuf) {    close(_fd);    return errh->error("out of memory");  }  // Request that we get packets sent to us from the simulator  myrouter->sim_listen(_fd,eindex());    return 0;}voidFromSimDevice::uninitialize(){  if (_fd >= 0) {    //close(_fd);    //remove_select(_fd, SELECT_READ);    _fd = -1;  }  if (_packetbuf) {    delete[] _packetbuf;    _packetbuf = 0;  }}voidFromSimDevice::set_annotations(Packet *p,int ptype){  static char bcast_addr[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };  if (SIMCLICK_PTYPE_ETHER == ptype) {    // check if multicast    // ! mcast => ! bcast    if (!(p->data()[0] & 1))      return;       // check for bcast    if (memcmp(bcast_addr, p->data(), 6) == 0)      p->set_packet_type_anno(Packet::BROADCAST);    else      p->set_packet_type_anno(Packet::MULTICAST);  }  return;}intFromSimDevice::incoming_packet(int ifid,int ptype,const unsigned char* data,			       int len,simclick_simpacketinfo* pinfo){  int result = 0;  Packet *p = Packet::make(data, len);  set_annotations(p,ptype);  p->set_sim_packetinfo(pinfo);  output(0).push(p);  return result;}CLICK_ENDDECLSELEMENT_REQUIRES(ns)EXPORT_ELEMENT(FromSimDevice)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -