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

📄 hdr_sr.h

📁 柯老师网站上找到的
💻 H
字号:
/* -*-	Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- *//* * Copyright (c) 1997 Regents of the University of California. * 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. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the Computer Systems *	Engineering Group at Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used *    to endorse or promote products derived from this software without *    specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. *//* Ported from CMU/Monarch's code, nov'98 -Padma.*//* -*- c++ -*-   hdr_sr.h   source route header   $Id: hdr_sr.h,v 1.4 1999/12/21 02:39:38 salehi Exp $*/#ifndef sr_hdr_h#define sr_hdr_h#include <assert.h>#include <packet.h>#define SR_HDR_SZ 4		// size of constant part of hdr#define MAX_SR_LEN 16		// longest source route we can handle#define MAX_ROUTE_ERRORS 3	// how many route errors can fit in one pkt?struct sr_addr {  int addr_type;		/* same as hdr_cmn in packet.h */  nsaddr_t addr;};struct link_down {  int addr_type;		/* same as hdr_cmn in packet.h */  nsaddr_t tell_addr;		// tell this host  nsaddr_t from_addr;		// that from_addr host can no longer  nsaddr_t to_addr;		// get packets to to_addr host};struct hdr_sr {  int valid_;			/* is this header actually in the packet? 				   and initialized? */  int num_addrs_;  int cur_addr_;  struct sr_addr addrs[MAX_SR_LEN];    int route_request_;		/* is this a route request? */  int rtreq_seq_;		// route request sequence number  int max_propagation_;		// how many times can RTreq be forwarded?#if defined(sun)  // The following field is to bypass what seems to be a compiler bug.  // Under Solaris and gcc 2.7.2.2 (and apparently higher version)  // route_reply_ and route_reply_len_ become part of reply_addrs_!  // this causes the wireless code to malfunction.  This seems like a  // byte alignment problem  // Nader Salehi 12/20/99  char dummy_variable_to_bypass_byte_alignment_problem_in_solaris_[8];#endif // defined(sun)  int route_reply_;		// is the reply below valid?  int route_reply_len_;  struct sr_addr reply_addrs_[MAX_SR_LEN];  int route_error_;		// are we carrying a route reply?  int num_route_errors_;  struct link_down down_links_[MAX_ROUTE_ERRORS];  static int offset_;		/* offset for this header */  inline int& offset() { return offset_; }  inline int& valid() {return valid_;}  inline int& num_addrs() {return num_addrs_;}  inline int& cur_addr() {return cur_addr_;}  inline int& route_request() {return route_request_;}  inline int& rtreq_seq() {return rtreq_seq_;}  inline int& max_propagation() {return max_propagation_;}  inline int& route_reply() {return route_reply_;}  inline int& route_reply_len() {return route_reply_len_;}  inline struct sr_addr* reply_addrs() {return reply_addrs_;}  inline int& route_error() {return route_error_;}  inline int& num_route_errors() {return num_route_errors_;}  inline struct link_down* down_links() {return down_links_;}  inline nsaddr_t& get_next_addr() {     assert(cur_addr_ < num_addrs_);    return (addrs[cur_addr_ + 1].addr); }  inline int& get_next_type() {    assert(cur_addr_ < num_addrs_);    return (addrs[cur_addr_ + 1].addr_type); }  inline void append_addr(nsaddr_t a, int type) {    assert(num_addrs_ < MAX_SR_LEN-1);    addrs[num_addrs_].addr_type = type;    addrs[num_addrs_++].addr = a; }  inline void init() {    valid_ = 1;    num_addrs_ = 0;    cur_addr_ = 0;    route_request_ = 0;    route_reply_ = 0;    route_reply_len_ = 0;    route_error_ = 0;    num_route_errors_ = 0;}  inline int size() { 	int sz = SR_HDR_SZ +		 4 * (num_addrs_ - 1) +		 4 * (route_reply_ ? route_reply_len_ : 0) +		 8 * (route_error_ ? num_route_errors_ : 0);	assert(sz >= 0);	return sz;  }  void dump(char *);  char* dump();};#endif  // sr_hdr_h

⌨️ 快捷键说明

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