📄 module-middle.cc
字号:
//// Copyright (c) 2006 Regents of the SIGNET lab, University of Padova.// All rights reserved.//// Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions// are met:// 1. Redistributions of source code must retain the above copyright// notice, this list of conditions and the following disclaimer.// 2. Redistributions in binary form must reproduce the above copyright// notice, this list of conditions and the following disclaimer in the// documentation and/or other materials provided with the distribution.// 3. Neither the name of the University of Padova (SIGNET lab) nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission.//// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED // TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.//#include "module-middle.h"#include "random.h"#include "modsend-clmsg.h"extern ClMessage_t SANDBOXMSG;/* ====================================================================== TCL Hooks for the simulator ====================================================================== */static class ModuleMiddleClass : public TclClass {public: ModuleMiddleClass() : TclClass("Module/MiddleModule") {} TclObject* create(int, const char*const*) { return (new ModuleMiddle()); }}class_modulemiddle;ModuleMiddle::ModuleMiddle(): iface_(DEFAULTINTERFACE){}ModuleMiddle::~ModuleMiddle(){} // TCL command interpreterint ModuleMiddle::command(int argc, const char*const* argv){ return Module::command(argc, argv); }int ModuleMiddle::crLayCommand(ClMessage* m){ if (m->type()==SANDBOXMSG) // Operations to be executed after the reception of a SANDBOXMSG cross layer message { if(debug_ > 5) printf("ModuleMiddle, rx a SANDBOXMSG -> set the interface used to %d\n", ((ClMsgModuleSend *)m)->getIface()); iface_ = ((ClMsgModuleSend *)m)->getIface(); delete m; return 1; } // unrecognized cl-msg -> drop it! if (debug_ > 5) printf("ModuleMiddle, rx an unknown cl-msg -> drop it (type = %i SANDBOXMSG=%i)\n",m->type(),SANDBOXMSG); //drop(m, "UNKNOWN"); return Module::crLayCommand(m);}void ModuleMiddle::recv(Packet* p){ hdr_cmn *ch = HDR_CMN(p); if (ch->direction()==hdr_cmn::UP) {// printf("ModuleMiddle, rx a pkt -> send UP\n"); sendUp(p, 0); } else { ch->iface() = iface_; // set the iface of the packet if (debug_>15) printf("ModuleMiddle(%d), rx a pkt -> send DOWN to interface %d\n", getId(), iface_); sendDown(p, 0); } // Packet::free(p);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -