src/dsr/model/dsr-option-header.h
author Peter D. Barnes, Jr. <barnes26@llnl.gov>
Fri, 03 Oct 2014 02:24:42 -0700
changeset 11085 6e4d08656d7c
parent 10521 81a6f41319cc
permissions -rw-r--r--
TracedCallback function signatures, the simple ones. These are TracedCallback function signatures for traces sources using a single argument.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     2
/*
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     3
 * Copyright (c) 2011 Yufei Cheng
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     4
 *
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     8
 *
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    12
 * GNU General Public License for more details.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    13
 *
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    17
 *
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    18
 * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    19
 *
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    20
 * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    21
 * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    22
 * Information and Telecommunication Technology Center (ITTC)
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    23
 * and Department of Electrical Engineering and Computer Science
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    24
 * The University of Kansas Lawrence, KS USA.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    25
 *
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    26
 * Work supported in part by NSF FIND (Future Internet Design) Program
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    27
 * under grant CNS-0626918 (Postmodern Internet Architecture),
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    28
 * NSF grant CNS-1050226 (Multilayer Network Resilience Analysis and Experimentation on GENI),
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    29
 * US Department of Defense (DoD), and ITTC at The University of Kansas.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    30
 */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    31
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    32
#ifndef DSR_OPTION_HEADER_H
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    33
#define DSR_OPTION_HEADER_H
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    34
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    35
#include <ostream>
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    36
#include <algorithm>
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    37
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    38
#include "ns3/header.h"
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    39
#include "ns3/ipv4-address.h"
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    40
#include "ns3/simulator.h"
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    41
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    42
namespace ns3 {
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    43
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    44
class Time;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    45
namespace dsr {
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    46
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    47
 * \class DsrOptionHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    48
 * \brief Header for Dsr Options.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    49
 */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    50
class DsrOptionHeader : public Header
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    51
{
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    52
public:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    53
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    54
   * \struct Alignment
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    55
   * \brief represents the alignment requirements of an option header
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    56
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    57
  struct Alignment
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    58
  {
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    59
    uint8_t factor;   /**< Factor */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    60
    uint8_t offset;   /**< Offset */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    61
  };
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    62
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    63
   * \brief Get the type identificator.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    64
   * \return type identificator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    65
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    66
  static TypeId GetTypeId ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    67
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    68
   * \brief Get the instance type ID.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    69
   * \return instance type ID
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    70
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    71
  virtual TypeId GetInstanceTypeId () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    72
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    73
   * \brief Constructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    74
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    75
  DsrOptionHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    76
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    77
   * \brief Destructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    78
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    79
  virtual ~DsrOptionHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    80
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    81
   * \brief Set the type of the option.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    82
   * \param type the type of the option
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    83
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    84
  void SetType (uint8_t type);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    85
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    86
   * \brief Get the type of the option.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    87
   * \return the type of the option
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    88
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    89
  uint8_t GetType () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    90
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    91
   * \brief Set the option length.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    92
   * \param length the option length
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    93
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    94
  void SetLength (uint8_t length);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    95
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    96
   * \brief Get the option length.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    97
   * \return the option length
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    98
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
    99
  uint8_t GetLength () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   100
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   101
   * \brief Print some informations about the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   102
   * \param os output stream
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   103
   * \return info about this packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   104
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   105
  virtual void Print (std::ostream &os) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   106
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   107
   * \brief Get the serialized size of the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   108
   * \return size
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   109
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   110
  virtual uint32_t GetSerializedSize () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   111
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   112
   * \brief Serialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   113
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   114
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   115
  virtual void Serialize (Buffer::Iterator start) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   116
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   117
   * \brief Deserialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   118
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   119
   * \return size of the packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   120
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   121
  virtual uint32_t Deserialize (Buffer::Iterator start);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   122
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   123
   * \brief Get the Alignment requirement of this option header
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   124
   * \return The required alignment
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   125
   *
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   126
   * Subclasses should only implement this method, if special alignment is
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   127
   * required. Default is no alignment (1n+0).
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   128
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   129
  virtual Alignment GetAlignment () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   130
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   131
private:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   132
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   133
   * \brief The type of the option.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   134
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   135
  uint8_t m_type;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   136
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   137
   * \brief The option length.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   138
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   139
  uint8_t m_length;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   140
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   141
   * \brief The anonymous data of this option
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   142
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   143
  Buffer m_data;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   144
};
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   145
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   146
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   147
 * \class DsrOptionPad1Header
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   148
 * \brief Header of Dsr Option Pad1
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   149
 */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   150
class DsrOptionPad1Header : public DsrOptionHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   151
{
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   152
public:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   153
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   154
   * \brief Get the type identificator.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   155
   * \return type identificator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   156
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   157
  static TypeId GetTypeId ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   158
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   159
   * \brief Get the instance type ID.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   160
   * \return instance type ID
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   161
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   162
  virtual TypeId GetInstanceTypeId () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   163
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   164
   * \brief Constructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   165
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   166
  DsrOptionPad1Header ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   167
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   168
   * \brief Destructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   169
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   170
  virtual ~DsrOptionPad1Header ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   171
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   172
   * \brief Print some informations about the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   173
   * \param os output stream
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   174
   * \return info about this packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   175
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   176
  virtual void Print (std::ostream &os) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   177
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   178
   * \brief Get the serialized size of the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   179
   * \return size
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   180
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   181
  virtual uint32_t GetSerializedSize () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   182
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   183
   * \brief Serialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   184
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   185
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   186
  virtual void Serialize (Buffer::Iterator start) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   187
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   188
   * \brief Deserialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   189
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   190
   * \return size of the packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   191
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   192
  virtual uint32_t Deserialize (Buffer::Iterator start);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   193
};
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   194
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   195
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   196
 * \class DsrOptionPadnHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   197
 * \brief Header of Dsr Option Padn
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   198
 */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   199
class DsrOptionPadnHeader : public DsrOptionHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   200
{
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   201
public:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   202
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   203
   * \brief Get the type identificator.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   204
   * \return type identificator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   205
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   206
  static TypeId GetTypeId ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   207
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   208
   * \brief Get the instance type ID.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   209
   * \return instance type ID
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   210
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   211
  virtual TypeId GetInstanceTypeId () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   212
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   213
   * \brief Constructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   214
   * \param pad Number of bytes to pad (>=2)
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   215
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   216
  DsrOptionPadnHeader (uint32_t pad = 2);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   217
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   218
   * \brief Destructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   219
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   220
  virtual ~DsrOptionPadnHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   221
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   222
   * \brief Print some informations about the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   223
   * \param os output stream
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   224
   * \return info about this packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   225
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   226
  virtual void Print (std::ostream &os) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   227
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   228
   * \brief Get the serialized size of the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   229
   * \return size
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   230
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   231
  virtual uint32_t GetSerializedSize () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   232
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   233
   * \brief Serialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   234
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   235
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   236
  virtual void Serialize (Buffer::Iterator start) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   237
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   238
   * \brief Deserialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   239
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   240
   * \return size of the packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   241
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   242
  virtual uint32_t Deserialize (Buffer::Iterator start);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   243
};
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   244
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   245
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   246
 * \class DsrOptionRouteRequestHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   247
 * \brief Header of Dsr Option Route Request
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   248
 */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   249
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   250
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   251
* \ingroup dsr
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   252
* \brief   Route Request (RREQ) Message Format
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   253
  \verbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   254
   |      0        |      1        |      2        |      3        |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   255
   0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   256
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   257
   |  Option Type |  Opt Data Len |         Identification         |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   258
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   259
   |                         Target Address                        |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   260
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   261
   |                            Address[1]                         |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   262
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   263
   |                            Address[2]                         |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   264
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   265
   |                               ...                             |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   266
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   267
   |                            Address[n]                         |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   268
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   269
  \endverbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   270
*/
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   271
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   272
class DsrOptionRreqHeader : public DsrOptionHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   273
{
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   274
public:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   275
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   276
   * \brief Get the type identificator.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   277
   * \return type identificator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   278
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   279
  static TypeId GetTypeId ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   280
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   281
   * \brief Get the instance type ID.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   282
   * \return instance type ID
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   283
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   284
  virtual TypeId GetInstanceTypeId () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   285
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   286
   * \brief Constructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   287
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   288
  DsrOptionRreqHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   289
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   290
   * \brief Destructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   291
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   292
  virtual ~DsrOptionRreqHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   293
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   294
   * \brief Set the number of ipv4 address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   295
   * \param n the number of ipv4 address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   296
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   297
  void SetNumberAddress (uint8_t n);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   298
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   299
   * \brief Get the target ipv4 address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   300
   * \return target the target packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   301
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   302
  Ipv4Address GetTarget ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   303
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   304
   * \brief Set the target ipv4 address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   305
   * \param target the target packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   306
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   307
  void SetTarget (Ipv4Address target);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   308
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   309
   * \brief Set the vector of ipv4 address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   310
   * \param ipv4Address the vector of ipv4 address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   311
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   312
  void SetNodesAddress (std::vector<Ipv4Address> ipv4Address);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   313
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   314
   * \brief Get the vector of ipv4 address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   315
   * \return the vector of ipv4 address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   316
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   317
  std::vector<Ipv4Address> GetNodesAddresses () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   318
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   319
   * \brief Get the number of nodes
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   320
   * \return the number of nodes
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   321
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   322
  uint32_t GetNodesNumber () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   323
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   324
   * \brief Add one node address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   325
   * \param ipv4 The ip address to add
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   326
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   327
  void AddNodeAddress (Ipv4Address ipv4);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   328
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   329
   * \brief Set a Node IPv4 Address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   330
   * \param index the index of the IPv4 Address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   331
   * \param addr the new IPv4 Address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   332
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   333
  void SetNodeAddress (uint8_t index, Ipv4Address addr);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   334
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   335
   * \brief Get a Node IPv4 Address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   336
   * \param index the index of the IPv4 Address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   337
   * \return the router IPv4 Address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   338
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   339
  Ipv4Address GetNodeAddress (uint8_t index) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   340
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   341
   * \brief Set the request id number.
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
   342
   * \param identification the identification number
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   343
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   344
  void SetId (uint16_t identification);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   345
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   346
   * \brief Set the request id number.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   347
   * \return request id number
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   348
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   349
  uint16_t GetId () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   350
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   351
   * \brief Print some informations about the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   352
   * \param os output stream
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   353
   * \return info about this packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   354
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   355
  virtual void Print (std::ostream &os) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   356
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   357
   * \brief Get the serialized size of the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   358
   * \return size
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   359
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   360
  virtual uint32_t GetSerializedSize () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   361
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   362
   * \brief Serialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   363
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   364
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   365
  virtual void Serialize (Buffer::Iterator start) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   366
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   367
   * \brief Deserialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   368
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   369
   * \return size of the packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   370
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   371
  virtual uint32_t Deserialize (Buffer::Iterator start);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   372
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   373
   * \brief Get the Alignment requirement of this option header
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   374
   * \return The required alignment
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   375
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   376
  virtual Alignment GetAlignment () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   377
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   378
private:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   379
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   380
   * \brief Identifier of the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   381
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   382
  uint16_t m_identification;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   383
  /*
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   384
   * Ipv4 address of target node
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   385
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   386
  Ipv4Address m_target;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   387
  /*
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   388
   * Ipv4 address to write when desearizing the packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   389
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   390
  Ipv4Address m_address;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   391
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   392
   * \brief A vector of IPv4 Address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   393
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   394
  typedef std::vector<Ipv4Address> VectorIpv4Address_t;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   395
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   396
   * \brief The vector of Nodes' IPv4 Address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   397
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   398
  VectorIpv4Address_t m_ipv4Address;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   399
};
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   400
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   401
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   402
 * \class DsrOptionRrepHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   403
 * \brief Header of Dsr Option Route Reply
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   404
 */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   405
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   406
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   407
* \ingroup dsr
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   408
* \brief Route Reply (RREP) Message Format
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   409
  \verbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   410
   |      0        |      1        |      2        |      3        |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   411
   0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   412
                  -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   413
                  |  Option Type  |  Opt Data Len |L|   Reserved   |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   414
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   415
   |                            Address[1]                         |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   416
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   417
   |                            Address[2]                         |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   418
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   419
   |                               ...                             |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   420
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   421
   |                            Address[n]                         |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   422
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   423
  \endverbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   424
*/
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   425
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   426
// The Route Reply header modified for ns-3 implementation
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   427
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   428
* \ingroup dsr
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   429
* \brief Route Reply (RREP) Message Format
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   430
  \verbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   431
   |      0        |      1        |      2        |      3        |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   432
   0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   433
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   434
   |  Option Type  |  Opt Data Len |L|   Reserved   |   Reserved   |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   435
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   436
   |                            Address[1]                         |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   437
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   438
   |                            Address[2]                         |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   439
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   440
   |                               ...                             |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   441
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   442
   |                            Address[n]                         |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   443
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   444
  \endverbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   445
*/
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   446
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   447
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   448
class DsrOptionRrepHeader : public DsrOptionHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   449
{
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   450
public:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   451
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   452
   * \brief Get the type identificator.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   453
   * \return type identificator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   454
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   455
  static TypeId GetTypeId ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   456
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   457
   * \brief Get the instance type ID.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   458
   * \return instance type ID
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   459
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   460
  virtual TypeId GetInstanceTypeId () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   461
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   462
   * \brief Constructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   463
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   464
  DsrOptionRrepHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   465
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   466
   * \brief Destructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   467
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   468
  virtual ~DsrOptionRrepHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   469
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   470
   * \brief Set the number of ipv4 address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   471
   * \param n the number of ipv4 address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   472
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   473
  void SetNumberAddress (uint8_t n);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   474
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   475
   * \brief Set the vector of ipv4 address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   476
   * \param ipv4Address the vector of ipv4 address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   477
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   478
  void SetNodesAddress (std::vector<Ipv4Address> ipv4Address);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   479
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   480
   * \brief Get the vector of ipv4 address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   481
   * \return the vector of ipv4 address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   482
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   483
  std::vector<Ipv4Address> GetNodesAddress () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   484
  /*
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   485
   * \brief Get the target node Ip address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   486
   * \return the target address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   487
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   488
  Ipv4Address GetTargetAddress (std::vector<Ipv4Address> ipv4Address) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   489
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   490
   * \brief Set a Node IPv4 Address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   491
   * \param index the index of the IPv4 Address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   492
   * \param addr the new IPv4 Address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   493
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   494
  void SetNodeAddress (uint8_t index, Ipv4Address addr);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   495
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   496
   * \brief Get a Node IPv4 Address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   497
   * \param index the index of the IPv4 Address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   498
   * \return the router IPv4 Address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   499
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   500
  Ipv4Address GetNodeAddress (uint8_t index) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   501
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   502
   * \brief Print some informations about the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   503
   * \param os output stream
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   504
   * \return info about this packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   505
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   506
  virtual void Print (std::ostream &os) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   507
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   508
   * \brief Get the serialized size of the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   509
   * \return size
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   510
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   511
  virtual uint32_t GetSerializedSize () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   512
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   513
   * \brief Serialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   514
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   515
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   516
  virtual void Serialize (Buffer::Iterator start) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   517
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   518
   * \brief Deserialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   519
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   520
   * \return size of the packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   521
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   522
  virtual uint32_t Deserialize (Buffer::Iterator start);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   523
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   524
   * \brief Get the Alignment requirement of this option header
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   525
   * \return The required alignment
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   526
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   527
  virtual Alignment GetAlignment () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   528
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   529
private:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   530
  /*
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   531
   * The Ip address to write to when deserialize the packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   532
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   533
  Ipv4Address m_address;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   534
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   535
    * \brief type def A vector of IPv4 Address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   536
    */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   537
  typedef std::vector<Ipv4Address> VectorIpv4Address_t;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   538
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   539
   * \brief The vector of Nodes' IPv4 Address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   540
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   541
  VectorIpv4Address_t m_ipv4Address;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   542
};
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   543
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   544
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   545
 * \class DsrOptionSRHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   546
 * \brief Header of Dsr Option Source Route
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   547
 */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   548
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   549
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   550
* \ingroup dsr
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   551
* \brief Source Route (SR) Message Format
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   552
  \verbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   553
   |      0        |      1        |      2        |      3        |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   554
   0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   555
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   556
   |  Option Type |  Opt Data Len |F|L|Reservd|Salvage|  Segs Left |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   557
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   558
   |                            Address[1]                         |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   559
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   560
   |                            Address[2]                         |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   561
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   562
   |                               ...                             |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   563
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   564
   |                            Address[n]                         |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   565
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   566
  \endverbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   567
*/
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   568
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   569
class DsrOptionSRHeader : public DsrOptionHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   570
{
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   571
public:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   572
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   573
   * \brief Get the type identificator.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   574
   * \return type identificator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   575
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   576
  static TypeId GetTypeId ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   577
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   578
   * \brief Get the instance type ID.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   579
   * \return instance type ID
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   580
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   581
  virtual TypeId GetInstanceTypeId () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   582
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   583
   * \brief Constructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   584
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   585
  DsrOptionSRHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   586
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   587
   * \brief Destructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   588
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   589
  virtual ~DsrOptionSRHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   590
  /*
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   591
   * \brief Set the number of segments left to send
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
   592
   * \param segmentsLeft The segments left
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   593
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   594
  void SetSegmentsLeft (uint8_t segmentsLeft);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   595
  /*
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   596
   * \brief Get the number of segments left to send
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   597
   * \return The segments left
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   598
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   599
  uint8_t GetSegmentsLeft () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   600
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   601
   * \brief Set the number of ipv4 address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   602
   * \param n the number of ipv4' address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   603
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   604
  void SetNumberAddress (uint8_t n);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   605
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   606
   * \brief Set the vector of ipv4 address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   607
   * \param ipv4Address the vector of ipv4 address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   608
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   609
  void SetNodesAddress (std::vector<Ipv4Address> ipv4Address);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   610
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   611
   * \brief Get the vector of ipv4 address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   612
   * \return the vector of ipv4 address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   613
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   614
  std::vector<Ipv4Address> GetNodesAddress () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   615
  /*
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   616
   * \brief Get the node list size which is the number of ip address of the route
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   617
   * \return the node list size
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   618
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   619
  uint8_t GetNodeListSize () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   620
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   621
   * \brief Set a Node IPv4 Address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   622
   * \param index the index of the IPv4 Address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   623
   * \param addr the new IPv4 Address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   624
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   625
  void SetNodeAddress (uint8_t index, Ipv4Address addr);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   626
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   627
   * \brief Get a Node IPv4 Address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   628
   * \param index the index of the IPv4 Address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   629
   * \return the router IPv4 Address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   630
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   631
  Ipv4Address GetNodeAddress (uint8_t index) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   632
  /*
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   633
   * \brief Set the salvage value for a packet
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
   634
   * \param salvage The salvage value of the packet
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   635
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   636
  void SetSalvage (uint8_t salvage);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   637
  /*
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   638
   * \brief Get the salvage value for a packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   639
   * \return The salvage value of the packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   640
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   641
  uint8_t GetSalvage () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   642
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   643
   * \brief Print some informations about the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   644
   * \param os output stream
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   645
   * \return info about this packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   646
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   647
  virtual void Print (std::ostream &os) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   648
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   649
   * \brief Get the serialized size of the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   650
   * \return size
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   651
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   652
  virtual uint32_t GetSerializedSize () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   653
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   654
   * \brief Serialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   655
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   656
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   657
  virtual void Serialize (Buffer::Iterator start) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   658
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   659
   * \brief Deserialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   660
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   661
   * \return size of the packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   662
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   663
  virtual uint32_t Deserialize (Buffer::Iterator start);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   664
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   665
   * \brief Get the Alignment requirement of this option header
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   666
   * \return The required alignment
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   667
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   668
  virtual Alignment GetAlignment () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   669
11085
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10521
diff changeset
   670
  /**
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10521
diff changeset
   671
   * TracedCallback signature for DsrOptionSrHeader.
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10521
diff changeset
   672
   *
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10521
diff changeset
   673
   * \param [in] header The DsrOptionsSRHeader
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10521
diff changeset
   674
   */
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10521
diff changeset
   675
  typedef void (* TracedCallback) (const DsrOptionSRHeader & header);
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10521
diff changeset
   676
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   677
private:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   678
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   679
   * \brief The ip address header deserilize to
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   680
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   681
  Ipv4Address m_address;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   682
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   683
   * \brief Number of left segments.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   684
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   685
  uint8_t m_segmentsLeft;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   686
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   687
   * \brief Number of savlage times for a packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   688
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   689
  uint8_t m_salvage;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   690
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   691
    * \brief A vector of IPv4 Address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   692
    */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   693
  typedef std::vector<Ipv4Address> VectorIpv4Address_t;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   694
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   695
   * \brief The vector of Nodes' IPv4 Address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   696
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   697
  VectorIpv4Address_t m_ipv4Address;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   698
};
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   699
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   700
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   701
 * \class DsrOptionRerrHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   702
 * \brief Header of Dsr Option Route Error
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   703
 */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   704
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   705
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   706
* \ingroup dsr
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   707
* \brief Route Error (RERR) Message Format
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   708
  \verbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   709
   |      0        |      1        |      2        |      3        |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   710
   0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   711
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   712
   |  Option Type |  Opt Data Len |   Error Type  |Reservd| Salvage|
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   713
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   714
   |                      Error Source Address                     |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   715
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   716
   |                    Error Destination Address                  |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   717
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   718
   .                                                               .
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   719
   .                    Type-Specific Information                  .
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   720
   .                                                               .
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   721
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   722
  \endverbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   723
*/
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   724
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
   725
/// Error type
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   726
enum ErrorType
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   727
{
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   728
  NODE_UNREACHABLE  = 1,   // !< NODE_UNREACHABLE
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   729
  FLOW_STATE_NOT_SUPPORTED  = 2,   // !< FLOW_STATE_NOT_SUPPORTED
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   730
  OPTION_NOT_SUPPORTED  = 3,   // !< OPTION_NOT_SUPPORTED
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   731
};
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   732
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   733
class DsrOptionRerrHeader : public DsrOptionHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   734
{
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   735
public:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   736
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   737
   * \brief Get the type identificator.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   738
   * \return type identificator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   739
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   740
  static TypeId GetTypeId ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   741
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   742
   * \brief Get the instance type ID.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   743
   * \return instance type ID
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   744
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   745
  virtual TypeId GetInstanceTypeId () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   746
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   747
   * \brief Constructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   748
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   749
  DsrOptionRerrHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   750
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   751
   * \brief Destructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   752
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   753
  virtual ~DsrOptionRerrHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   754
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   755
   * \brief Set the route error type
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
   756
   * \param errorType The error type
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   757
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   758
  void SetErrorType (uint8_t errorType);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   759
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   760
   * \brief Get the route error type
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   761
   * \return The error type
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   762
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   763
  uint8_t GetErrorType () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   764
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   765
   * \brief Set the route error source address
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
   766
   * \param errorSrcAddress The error source address
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   767
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   768
  virtual void SetErrorSrc (Ipv4Address errorSrcAddress);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   769
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   770
   * \brief Get the route error source address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   771
   * \return The error source address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   772
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   773
  virtual Ipv4Address GetErrorSrc () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   774
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   775
   * \brief Set the salvage value of the packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   776
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   777
  virtual void SetSalvage (uint8_t salvage);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   778
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   779
   * \brief Get the salvage value of the packet
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
   780
   * \return The salvage value of the packet
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   781
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   782
  virtual uint8_t GetSalvage () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   783
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   784
   * \brief Set the error destination ip address
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
   785
   * \param errorDstAddress The error destination address
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   786
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   787
  virtual void SetErrorDst (Ipv4Address errorDstAddress);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   788
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   789
   * \brief Get the error destination ip address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   790
   * \return The error destination address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   791
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   792
  virtual Ipv4Address GetErrorDst () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   793
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   794
   * \brief Print some informations about the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   795
   * \param os output stream
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   796
   * \return info about this packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   797
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   798
  virtual void Print (std::ostream &os) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   799
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   800
   * \brief Get the serialized size of the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   801
   * \return size
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   802
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   803
  virtual uint32_t GetSerializedSize () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   804
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   805
   * \brief Serialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   806
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   807
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   808
  virtual void Serialize (Buffer::Iterator start) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   809
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   810
   * \brief Deserialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   811
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   812
   * \return size of the packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   813
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   814
  virtual uint32_t Deserialize (Buffer::Iterator start);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   815
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   816
   * \brief Get the Alignment requirement of this option header
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   817
   * \return The required alignment
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   818
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   819
  virtual Alignment GetAlignment () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   820
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   821
private:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   822
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   823
   * \brief The error type or route error option
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   824
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   825
  uint8_t        m_errorType;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   826
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   827
   * \brief The salavage field
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   828
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   829
  uint8_t        m_salvage;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   830
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   831
   * \brief The specific error message length
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   832
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   833
  uint16_t       m_errorLength;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   834
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   835
   * \brief The error source address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   836
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   837
  Ipv4Address    m_errorSrcAddress;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   838
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   839
   * \brief The error destination address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   840
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   841
  Ipv4Address    m_errorDstAddress;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   842
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   843
   * \brief The anonymous data of this option
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   844
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   845
  Buffer m_errorData;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   846
};
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   847
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   848
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   849
* \ingroup dsr
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   850
* \brief Route Error (RERR) Unreachable node address option Message Format
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   851
  \verbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   852
   |      0        |      1        |      2        |      3        |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   853
   0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   854
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   855
   |  Option Type |  Opt Data Len |   Error Type  |Reservd| Salvage|
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   856
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   857
   |                      Error Source Address                     |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   858
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   859
   |                    Error Destination Address                  |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   860
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   861
   .                                                               .
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   862
   .                    Type-Specific Information                  .
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   863
   .                                                               .
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   864
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   865
  \endverbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   866
*/
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   867
/*
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   868
 * \brief The type-specific info field
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   869
 * \verbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   870
   |      0        |      1        |      2        |      3        |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   871
   0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   872
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   873
   |                    Unreachable Node Address                   |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   874
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   875
   \endverbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   876
 */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   877
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   878
class DsrOptionRerrUnreachHeader : public DsrOptionRerrHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   879
{
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   880
public:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   881
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   882
   * \brief Get the type identificator.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   883
   * \return type identificator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   884
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   885
  static TypeId GetTypeId ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   886
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   887
   * \brief Get the instance type ID.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   888
   * \return instance type ID
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   889
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   890
  virtual TypeId GetInstanceTypeId () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   891
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   892
   * \brief Constructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   893
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   894
  DsrOptionRerrUnreachHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   895
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   896
   * \brief Destructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   897
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   898
  virtual ~DsrOptionRerrUnreachHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   899
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   900
   * \brief Set the route error source address
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
   901
   * \param errorSrcAddress The error source address
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   902
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   903
  virtual void SetErrorSrc (Ipv4Address errorSrcAddress);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   904
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   905
   * \brief Get the route error source address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   906
   * \return The error source address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   907
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   908
  virtual Ipv4Address GetErrorSrc () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   909
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   910
   * \brief Set the salvage value of the packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   911
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   912
  virtual void SetSalvage (uint8_t salvage);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   913
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   914
   * \brief Get the salvage value of the packet
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
   915
   * \return The salvage value of the packet
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   916
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   917
  virtual uint8_t GetSalvage () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   918
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   919
   * \brief Set the error destination ip address
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
   920
   * \param errorDstAddress The error destination address
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   921
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   922
  virtual void SetErrorDst (Ipv4Address errorDstAddress);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   923
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   924
   * \brief Get the error destination ip address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   925
   * \return The error destination address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   926
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   927
  virtual Ipv4Address GetErrorDst () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   928
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   929
   * \brief Set the unreachable node ip address
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
   930
   * \param unreachNode The unreachable ip address
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   931
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   932
  void SetUnreachNode (Ipv4Address unreachNode);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   933
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   934
   * \brief Get the unreachable node ip address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   935
   * \return The unreachable ip address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   936
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   937
  Ipv4Address GetUnreachNode () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   938
  /**
8752
2da1fab73114 Update DSR model
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 8751
diff changeset
   939
   * \brief Set the unreachable node ip address
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
   940
   * \param originalDst The unreachable ip address
8752
2da1fab73114 Update DSR model
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 8751
diff changeset
   941
   */
2da1fab73114 Update DSR model
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 8751
diff changeset
   942
  void SetOriginalDst (Ipv4Address originalDst);
2da1fab73114 Update DSR model
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 8751
diff changeset
   943
  /**
2da1fab73114 Update DSR model
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 8751
diff changeset
   944
   * \brief Get the unreachable node ip address
2da1fab73114 Update DSR model
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 8751
diff changeset
   945
   * \return The unreachable ip address
2da1fab73114 Update DSR model
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 8751
diff changeset
   946
   */
2da1fab73114 Update DSR model
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 8751
diff changeset
   947
  Ipv4Address GetOriginalDst () const;
2da1fab73114 Update DSR model
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 8751
diff changeset
   948
  /**
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   949
   * \brief Print some informations about the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   950
   * \param os output stream
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   951
   * \return info about this packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   952
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   953
  virtual void Print (std::ostream &os) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   954
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   955
   * \brief Get the serialized size of the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   956
   * \return size
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   957
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   958
  virtual uint32_t GetSerializedSize () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   959
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   960
   * \brief Serialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   961
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   962
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   963
  virtual void Serialize (Buffer::Iterator start) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   964
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   965
   * \brief Deserialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   966
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   967
   * \return size of the packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   968
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   969
  virtual uint32_t Deserialize (Buffer::Iterator start);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   970
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   971
   * \brief Get the Alignment requirement of this option header
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   972
   * \return The required alignment
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   973
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   974
  virtual Alignment GetAlignment () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   975
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   976
private:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   977
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   978
   * \brief The error type or route error option
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   979
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   980
  uint8_t        m_errorType;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   981
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   982
   * \brief The salavage field
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   983
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   984
  uint8_t        m_salvage;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   985
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   986
   * \brief The error source address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   987
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   988
  Ipv4Address    m_errorSrcAddress;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   989
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   990
   * \brief The error destination address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   991
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   992
  Ipv4Address    m_errorDstAddress;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   993
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   994
   * \brief The unreachable node address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   995
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   996
  Ipv4Address    m_unreachNode;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
   997
  /**
8752
2da1fab73114 Update DSR model
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 8751
diff changeset
   998
   * \brief The original destination address
2da1fab73114 Update DSR model
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 8751
diff changeset
   999
   */
2da1fab73114 Update DSR model
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 8751
diff changeset
  1000
  Ipv4Address    m_originalDst;
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1001
};
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1002
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1003
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1004
* \ingroup dsr
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1005
* \brief Route Error (RERR) Unsupported option Message Format
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1006
  \verbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1007
   |      0        |      1        |      2        |      3        |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1008
   0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1009
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1010
   |  Option Type |  Opt Data Len |   Error Type  |Reservd| Salvage|
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1011
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1012
   |                      Error Source Address                     |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1013
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1014
   |                    Error Destination Address                  |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1015
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1016
   .                                                               .
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1017
   .                    Type-Specific Information                  .
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1018
   .                                                               .
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1019
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1020
  \endverbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1021
*/
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1022
/*
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1023
 * \brief The type-specific info field
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1024
 * \unsupported option
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1025
 * \verbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1026
   |      0        |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1027
   0 1 2 3 4 5 6 7
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1028
   +-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1029
   |Unsupported Opt|
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1030
   +-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1031
   \endverbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1032
 */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1033
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1034
class DsrOptionRerrUnsupportHeader : public DsrOptionRerrHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1035
{
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1036
public:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1037
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1038
   * \brief Get the type identificator.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1039
   * \return type identificator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1040
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1041
  static TypeId GetTypeId ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1042
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1043
   * \brief Get the instance type ID.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1044
   * \return instance type ID
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1045
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1046
  virtual TypeId GetInstanceTypeId () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1047
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1048
   * \brief Constructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1049
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1050
  DsrOptionRerrUnsupportHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1051
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1052
   * \brief Destructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1053
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1054
  virtual ~DsrOptionRerrUnsupportHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1055
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1056
   * \brief Set the route error source address
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
  1057
   * \param errorSrcAddress The error source address
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1058
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1059
  virtual void SetErrorSrc (Ipv4Address errorSrcAddress);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1060
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1061
   * \brief Get the route error source address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1062
   * \return The error source address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1063
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1064
  virtual Ipv4Address GetErrorSrc () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1065
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1066
   * \brief Set the salvage value of the packet
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
  1067
   * \param salvage the salvage value
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1068
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1069
  virtual void SetSalvage (uint8_t salvage);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1070
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1071
   * \brief Get the salvage value of the packet
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
  1072
   * \return The salvage value of the packet
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1073
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1074
  virtual uint8_t GetSalvage () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1075
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1076
   * \brief Set the error destination ip address
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
  1077
   * \param errorDstAddress The error destination address
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1078
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1079
  virtual void SetErrorDst (Ipv4Address errorDstAddress);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1080
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1081
   * \brief Get the error destination ip address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1082
   * \return The error destination address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1083
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1084
  virtual Ipv4Address GetErrorDst () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1085
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1086
   * \brief Set the unsupported option type value
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
  1087
   * \param optionType The unsupported option type value
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1088
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1089
  void SetUnsupported (uint16_t optionType);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1090
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1091
   * \brief Get the unsupported option type value
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1092
   * \return The unsupported option type value
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1093
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1094
  uint16_t GetUnsupported () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1095
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1096
   * \brief Print some informations about the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1097
   * \param os output stream
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1098
   * \return info about this packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1099
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1100
  virtual void Print (std::ostream &os) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1101
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1102
   * \brief Get the serialized size of the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1103
   * \return size
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1104
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1105
  virtual uint32_t GetSerializedSize () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1106
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1107
   * \brief Serialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1108
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1109
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1110
  virtual void Serialize (Buffer::Iterator start) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1111
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1112
   * \brief Deserialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1113
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1114
   * \return size of the packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1115
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1116
  virtual uint32_t Deserialize (Buffer::Iterator start);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1117
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1118
   * \brief Get the Alignment requirement of this option header
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1119
   * \return The required alignment
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1120
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1121
  virtual Alignment GetAlignment () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1122
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1123
private:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1124
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1125
   * \brief The error type or route error option
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1126
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1127
  uint8_t        m_errorType;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1128
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1129
   * \brief The salavage field
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1130
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1131
  uint8_t        m_salvage;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1132
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1133
   * \brief The error source address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1134
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1135
  Ipv4Address    m_errorSrcAddress;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1136
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1137
   * \brief The error destination address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1138
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1139
  Ipv4Address    m_errorDstAddress;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1140
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1141
   * \brief The unsupported option
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1142
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1143
  uint16_t       m_unsupport;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1144
};
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1145
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1146
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1147
 * \class DsrOptionAckReqHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1148
 * \brief Header of Dsr Option ack request
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1149
 */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1150
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1151
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1152
* \ingroup dsr
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1153
* \brief   Acknowledgement Request (ACK_RREQ) Message Format
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1154
  \verbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1155
   |      0        |      1        |      2        |      3        |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1156
   0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1157
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1158
   |  Option Type |  Opt Data Len |         Identification         |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1159
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1160
  \endverbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1161
*/
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1162
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1163
class DsrOptionAckReqHeader : public DsrOptionHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1164
{
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1165
public:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1166
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1167
   * \brief Get the type identificator.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1168
   * \return type identificator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1169
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1170
  static TypeId GetTypeId ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1171
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1172
   * \brief Get the instance type ID.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1173
   * \return instance type ID
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1174
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1175
  virtual TypeId GetInstanceTypeId () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1176
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1177
   * \brief Constructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1178
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1179
  DsrOptionAckReqHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1180
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1181
   * \brief Destructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1182
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1183
  virtual ~DsrOptionAckReqHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1184
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1185
   * \brief Set the Ack request id number.
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
  1186
   * \param identification the identification number
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1187
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1188
  void SetAckId (uint16_t identification);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1189
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1190
   * \brief Set the Ack request id number.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1191
   * \return request id number
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1192
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1193
  uint16_t GetAckId () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1194
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1195
   * \brief Print some informations about the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1196
   * \param os output stream
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1197
   * \return info about this packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1198
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1199
  virtual void Print (std::ostream &os) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1200
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1201
   * \brief Get the serialized size of the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1202
   * \return size
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1203
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1204
  virtual uint32_t GetSerializedSize () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1205
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1206
   * \brief Serialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1207
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1208
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1209
  virtual void Serialize (Buffer::Iterator start) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1210
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1211
   * \brief Deserialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1212
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1213
   * \return size of the packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1214
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1215
  virtual uint32_t Deserialize (Buffer::Iterator start);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1216
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1217
   * \brief Get the Alignment requirement of this option header
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1218
   * \return The required alignment
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1219
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1220
  virtual Alignment GetAlignment () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1221
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1222
private:
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
  1223
  /**
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1224
   * The identification field
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1225
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1226
  uint16_t m_identification;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1227
};
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1228
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1229
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1230
 * \class DsrOptionAckHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1231
 * \brief Header of Dsr Option ack
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1232
 */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1233
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1234
/**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1235
* \ingroup dsr
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1236
* \brief   Acknowledgement (ACK) Message Format
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1237
  \verbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1238
   |      0        |      1        |      2        |      3        |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1239
   0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1240
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1241
   |  Option Type |  Opt Data Len |         Identification         |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1242
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1243
   |                        ACK Source Address                     |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1244
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1245
   |                     ACK Destination Address                   |
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1246
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1247
  \endverbatim
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1248
*/
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1249
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1250
class DsrOptionAckHeader : public DsrOptionHeader
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1251
{
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1252
public:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1253
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1254
   * \brief Get the type identificator.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1255
   * \return type identificator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1256
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1257
  static TypeId GetTypeId ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1258
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1259
   * \brief Get the instance type ID.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1260
   * \return instance type ID
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1261
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1262
  virtual TypeId GetInstanceTypeId () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1263
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1264
   * \brief Constructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1265
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1266
  DsrOptionAckHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1267
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1268
   * \brief Destructor.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1269
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1270
  virtual ~DsrOptionAckHeader ();
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1271
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1272
   * \brief Set the Ack id number.
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
  1273
   * \param identification the identification number
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1274
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1275
  void SetAckId (uint16_t identification);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1276
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1277
   * \brief Set the Ack id number.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1278
   * \return request id number
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1279
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1280
  uint16_t GetAckId () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1281
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1282
   * \brief Set Error source ip address.
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
  1283
   * \param realSrcAddress The real source address
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1284
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1285
  void SetRealSrc (Ipv4Address realSrcAddress);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1286
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1287
   * \brief Get Error source ip address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1288
   * \return The real source address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1289
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1290
  Ipv4Address GetRealSrc () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1291
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1292
   * \brief Set Error source ip address.
10521
81a6f41319cc [doxygen] dsr module (fix only trivial warnings)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10218
diff changeset
  1293
   * \param realDstAddress The real dst address
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1294
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1295
  void SetRealDst (Ipv4Address realDstAddress);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1296
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1297
   * \brief Get Error source ip address.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1298
   * \return The real dst address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1299
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1300
  Ipv4Address GetRealDst () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1301
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1302
   * \brief Print some informations about the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1303
   * \param os output stream
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1304
   * \return info about this packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1305
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1306
  virtual void Print (std::ostream &os) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1307
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1308
   * \brief Get the serialized size of the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1309
   * \return size
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1310
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1311
  virtual uint32_t GetSerializedSize () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1312
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1313
   * \brief Serialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1314
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1315
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1316
  virtual void Serialize (Buffer::Iterator start) const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1317
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1318
   * \brief Deserialize the packet.
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1319
   * \param start Buffer iterator
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1320
   * \return size of the packet
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1321
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1322
  virtual uint32_t Deserialize (Buffer::Iterator start);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1323
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1324
   * \brief Get the Alignment requirement of this option header
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1325
   * \return The required alignment
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1326
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1327
  virtual Alignment GetAlignment () const;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1328
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1329
private:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1330
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1331
   * \brief identification field
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1332
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1333
  uint16_t m_identification;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1334
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1335
   * \brief ack source address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1336
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1337
  Ipv4Address m_realSrcAddress;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1338
  /**
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1339
   * \brief ack destination address
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1340
   */
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1341
  Ipv4Address m_realDstAddress;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1342
};
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1343
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1344
static inline std::ostream & operator<< (std::ostream& os, const DsrOptionSRHeader & sr)
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1345
{
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1346
  sr.Print (os);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1347
  return os;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1348
}
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1349
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1350
} // namespace dsr
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1351
} // namespace ns3
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1352
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents:
diff changeset
  1353
#endif /* DSR_OPTION_HEADER_H */