ll.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
  2. /*
  3.  * Copyright (c) 1997 Regents of the University of California.
  4.  * All rights reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 1. Redistributions of source code must retain the above copyright
  10.  *    notice, this list of conditions and the following disclaimer.
  11.  * 2. Redistributions in binary form must reproduce the above copyright
  12.  *    notice, this list of conditions and the following disclaimer in the
  13.  *    documentation and/or other materials provided with the distribution.
  14.  * 3. All advertising materials mentioning features or use of this software
  15.  *    must display the following acknowledgement:
  16.  * This product includes software developed by the Daedalus Research
  17.  * Group at the University of California Berkeley.
  18.  * 4. Neither the name of the University nor of the Laboratory may be used
  19.  *    to endorse or promote products derived from this software without
  20.  *    specific prior written permission.
  21.  *
  22.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  23.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  25.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  26.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  28.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  29.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  31.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  32.  * SUCH DAMAGE.
  33.  *
  34.  * Contributed by the Daedalus Research Group, http://daedalus.cs.berkeley.edu
  35.  *
  36.  * @(#) $Header: /cvsroot/nsnam/ns-2/mac/ll.h,v 1.29 2005/04/26 18:56:35 haldar Exp $ (UCB)
  37.  */
  38. #ifndef ns_ll_h
  39. #define ns_ll_h
  40. #include <delay.h>
  41. #include <queue.h>
  42. #include <arp.h>
  43. #include <classifier.h>
  44. #include <lanRouter.h>
  45. #include <varp.h>
  46. enum LLFrameType {
  47. LL_DATA = 0x0001,
  48. LL_ACK = 0x0010
  49. };
  50. struct hdr_ll {
  51. LLFrameType lltype_; // link-layer frame type
  52. int seqno_; // sequence number
  53. int ackno_; // acknowledgement number
  54. int bopno_; // begin of packet seqno
  55. int eopno_; // end of packet seqno
  56. int psize_; // size of packet
  57. double sendtime_; // time the packet is sent
  58. static int offset_;
  59. inline int& offset() { return offset_; }
  60. static hdr_ll* access(const Packet* p) {
  61. return (hdr_ll*) p->access(offset_);
  62. }
  63. inline LLFrameType& lltype() { return lltype_; }
  64. inline int& seqno() { return seqno_; }
  65. inline int& ackno() { return ackno_; }
  66. inline int& bopno() { return bopno_; }
  67. inline int& eopno() { return eopno_; }
  68. inline int& psize() { return psize_; }
  69. inline double& sendtime() { return sendtime_; }
  70. };
  71. class LL : public LinkDelay {
  72. public:
  73. friend void ARPTable::arpinput(Packet *p, LL* ll);
  74. friend void ARPTable::arprequest(nsaddr_t src, nsaddr_t dst, LL* ll);
  75. LL();
  76. virtual void recv(Packet* p, Handler* h);
  77. void handle(Event* e) { recv((Packet*)e, 0); }
  78. inline int initialized() {
  79. return (mac_ && uptarget_ && downtarget_);
  80. }
  81. virtual void sendUp(Packet* p);
  82. virtual void sendDown(Packet* p);
  83. inline int seqno() { return seqno_; }
  84. inline int ackno() { return ackno_; }
  85. inline int macDA() { return macDA_; }
  86. inline virtual void hdr_dst(Packet *p, int macDA) {}
  87.         inline Queue *ifq() { return ifq_; }
  88.         inline NsObject* downtarget() { return downtarget_; }
  89.         inline NsObject* uptarget() { return uptarget_; }
  90.   inline ARPTable *arp_table() { return arptable_; }
  91. protected:
  92. int command(int argc, const char*const* argv);
  93. int seqno_; // link-layer sequence number
  94. int ackno_; // ACK received so far
  95. int macDA_; // destination MAC address
  96.         Queue* ifq_; // interface queue
  97. Mac*   mac_;         // MAC object
  98.         LanRouter* lanrouter_;          // for lookups of the next hop
  99. ARPTable*  arptable_;           // ARP table object
  100. VARPTable* varp_;               // Virtual ARP object
  101. NsObject* downtarget_; // for outgoing packet 
  102. NsObject* uptarget_; // for incoming packet
  103.         
  104. };
  105. #endif