00001 /* 00002 * Copyright (c) 2008, Karlstad University 00003 * Erik Andersson, Emil Ljungdahl, Lars-Olof Moilanen 00004 * All rights reserved. 00005 * 00006 * Redistribution and use in source and binary forms, with or without 00007 * modification, are permitted provided that the following conditions are met: 00008 * * Redistributions of source code must retain the above copyright 00009 * notice, this list of conditions and the following disclaimer. 00010 * * Redistributions in binary form must reproduce the above copyright 00011 * notice, this list of conditions and the following disclaimer in the 00012 * documentation and/or other materials provided with the distribution. 00013 * * Neither the name of the <organization> nor the 00014 * names of its contributors may be used to endorse or promote products 00015 * derived from this software without specific prior written permission. 00016 * 00017 * THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDERS ``AS IS'' AND ANY 00018 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00019 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00020 * DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY 00021 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00022 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00023 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00024 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00025 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00026 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00027 * 00028 * $Id: mll-module.h 92 2008-03-25 19:35:54Z emil $ 00029 */ 00030 00031 #ifndef MLL_MODULE_H 00032 #define MLL_MODULE_H 00033 00034 #include <module.h> 00035 #include <packet.h> 00036 #include <arp.h> 00037 #include <mac.h> 00038 00039 #include <vector> 00040 #include <algorithm> 00041 00042 #include "marptable.h" 00043 #include <ipmodule.h> 00044 00050 class MLLModule : public Module 00051 { 00052 public: 00054 MLLModule(); 00056 ~MLLModule(); 00057 00064 virtual int crLayCommand(ClMessage* m); 00065 virtual int recvAsyncClMsg(ClMessage* m); 00066 00068 virtual int command(int argc, const char*const* argv); 00069 00071 virtual void recv(Packet* p); 00072 00077 virtual void recv(Packet *p, int idSrc); 00078 00079 protected: 00081 virtual void sendDown(Packet* p); 00082 00084 virtual void sendUp(Packet* p); 00085 00087 virtual void processARP(Packet* p, int idSrc); 00088 00095 virtual bool netAddrPresent(nsaddr_t addr); 00096 00100 virtual void fillNetAddrTable(); 00101 00109 virtual int getDownAddr(int downId = -1); 00110 00117 virtual int arpResolve(nsaddr_t dst, Packet* p); 00118 00124 virtual void arpRequest(nsaddr_t src, nsaddr_t dst); 00125 00127 MARPTable *arptable_; 00128 00130 vector<nsaddr_t> netAddr; 00131 00133 int seqno_; 00134 00136 int ackno_; 00137 }; 00138 00139 #endif