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

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * lms.h
  3.  * Copyright (C) 2001 by the University of Southern California
  4.  * $Id: lms.h,v 1.3 2005/08/25 18:58:07 johnh Exp $
  5.  *
  6.  * This program is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU General Public License,
  8.  * version 2, as published by the Free Software Foundation.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License along
  16.  * with this program; if not, write to the Free Software Foundation, Inc.,
  17.  * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  18.  *
  19.  *
  20.  * The copyright of this module includes the following
  21.  * linking-with-specific-other-licenses addition:
  22.  *
  23.  * In addition, as a special exception, the copyright holders of
  24.  * this module give you permission to combine (via static or
  25.  * dynamic linking) this module with free software programs or
  26.  * libraries that are released under the GNU LGPL and with code
  27.  * included in the standard release of ns-2 under the Apache 2.0
  28.  * license or under otherwise-compatible licenses with advertising
  29.  * requirements (or modified versions of such code, with unchanged
  30.  * license).  You may copy and distribute such a system following the
  31.  * terms of the GNU GPL for this module and the licenses of the
  32.  * other code concerned, provided that you include the source code of
  33.  * that other code when and as the GNU GPL requires distribution of
  34.  * source code.
  35.  *
  36.  * Note that people who make modified versions of this module
  37.  * are not obligated to grant this special exception for their
  38.  * modified versions; it is their choice whether to do so.  The GNU
  39.  * General Public License gives permission to release a modified
  40.  * version without this exception; this exception also makes it
  41.  * possible to release a modified version which carries forward this
  42.  * exception.
  43.  *
  44.  */
  45. /*
  46.  * Light-Weight Multicast Services (LMS), Reliable Multicast
  47.  *
  48.  * lms.h
  49.  *
  50.  * This holds the packet header structures, and packet type constants for
  51.  * the LMS implementation.
  52.  *
  53.  * Christos Papadopoulos. 
  54.  * christos@isi.edu
  55.  */
  56. #ifndef lms_h
  57. #define lms_h
  58. class LmsAgent;
  59. #include "node.h"
  60. #include "packet.h"
  61. #define LMS_NOADDR -1
  62. #define LMS_NOPORT      -1
  63. #define LMS_NOIFACE -99
  64. #define LMS_INFINITY 1000000
  65. /*
  66.  * PT_LMS packet types
  67.  */
  68. #define LMS_SRC_REFRESH 1
  69. #define LMS_REFRESH 2
  70. #define LMS_LEAVE 3
  71. #define LMS_REQ 4
  72. #define LMS_DMCAST 5
  73. #define LMS_SETUP 6
  74. #define LMS_SPM 7
  75. #define LMS_LINKS 8
  76. /*
  77.  * LMS header
  78.  */
  79. struct hdr_lms {
  80.     int         type_; // packet type
  81.     int         ttl_; // time-to-live
  82.     int         cost_; // cost advertisements for LMS_REFRESH
  83.     nsaddr_t    from_; // real source of packet for DMCASTs
  84.     nsaddr_t    src_; // original source of mcast packet
  85.     nsaddr_t    group_; // mcast group
  86.     nsaddr_t    tp_addr_; // turning point address
  87.     int         tp_port_; // turning point port id 
  88.     int         tp_iface_; // turning point interface
  89.     int         lo_, hi_; // range of lost packets
  90.     double      ts_; // timestamp for RTT estimation
  91.     
  92.     static int offset_;
  93.     inline static int& offset() { return offset_; }
  94.     inline static hdr_lms* access(Packet* p) {
  95.         return (hdr_lms*)p->access(offset_);
  96.     }
  97.     /* per-field member functions */    
  98.     int& type ()  { return type_;  }
  99.     nsaddr_t& from ()  { return from_;  }
  100.     nsaddr_t& src ()   { return src_;   }
  101.     nsaddr_t&   tp_addr ()  { return tp_addr_;  }
  102.     nsaddr_t&  tp_port ()  { return (nsaddr_t&) tp_port_;  }
  103.     nsaddr_t& group () { return group_; }
  104. };
  105. struct lms_ctl {
  106.     int hop_cnt_; // hop counter (similar to ttl)
  107.     int cost_; // cost advertisements for LMS_REFRESH
  108.     nsaddr_t tp_addr_; // turning point address
  109.     nsaddr_t    tp_port_;       // turning point port id
  110.     ns_addr_t downstream_lms_;// needed when in incrDeployment       
  111.     int tp_iface_; // turning point interface
  112.     int nak_lo_;
  113.     int nak_hi_; // range of lost packets
  114.     double      ts_;            // timestamp
  115. };
  116. struct lms_nak {
  117. int nak_lo_;
  118. int nak_hi_;
  119. int nak_seqn_;
  120.         int     dup_cnt_;    // num of dup requests for each NAK
  121. packet_t t;
  122. int datsize;    
  123. };
  124. struct lms_rdl {
  125. int seqn_;
  126. double ts_;
  127. struct lms_rdl *next_;
  128. };
  129. struct lms_spm {
  130. int spm_seqno_;
  131. nsaddr_t spm_path_;
  132. double spm_ts_;
  133. };
  134. #endif   /* end ifndef lms_h */