src/applications/radvd/radvd-prefix.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu Nov 12 13:01:01 2009 +0100 (2009-11-12)
changeset 5505 c0ac392289c3
parent 4763 19573adf3665
child 5891 09a575cdf8db
permissions -rw-r--r--
replace RefCountBase with SimpleRefCount<> to avoid duplicate refcounting implementations.
vincent@4731
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
vincent@4731
     2
/*
vincent@4731
     3
 * Copyright (c) 2009 Strasbourg University
vincent@4731
     4
 *
vincent@4731
     5
 * This program is free software; you can redistribute it and/or modify
vincent@4731
     6
 * it under the terms of the GNU General Public License version 2 as
vincent@4731
     7
 * published by the Free Software Foundation;
vincent@4731
     8
 *
vincent@4731
     9
 * This program is distributed in the hope that it will be useful,
vincent@4731
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
vincent@4731
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
vincent@4731
    12
 * GNU General Public License for more details.
vincent@4731
    13
 *
vincent@4731
    14
 * You should have received a copy of the GNU General Public License
vincent@4731
    15
 * along with this program; if not, write to the Free Software
vincent@4731
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
vincent@4731
    17
 *
vincent@4731
    18
 * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
vincent@4731
    19
 */
vincent@4731
    20
vincent@4731
    21
#ifndef RADVD_PREFIX_H
vincent@4731
    22
#define RADVD_PREFIX_H 
vincent@4731
    23
vincent@4731
    24
#include <stdint.h>
vincent@4731
    25
vincent@4731
    26
#include "ns3/ipv6-address.h"
mathieu@5505
    27
#include "ns3/simple-ref-count.h"
vincent@4731
    28
vincent@4731
    29
namespace ns3
vincent@4731
    30
{
vincent@4731
    31
vincent@4731
    32
/**
vincent@4763
    33
 * \ingroup radvd
vincent@4731
    34
 * \class RadvdPrefix
vincent@4731
    35
 * \brief Router prefix for radvd application.
vincent@4731
    36
 */
mathieu@5505
    37
class RadvdPrefix : public SimpleRefCount<RadvdPrefix>
vincent@4731
    38
{
vincent@4731
    39
  public:
vincent@4731
    40
    /**
vincent@4731
    41
     * \brief Constructor.
vincent@4731
    42
     * \param network network prefix advertised
vincent@4731
    43
     * \param prefixLength prefix length ( 0 < x <= 128)
vincent@4731
    44
     * \param preferredLifeTime preferred life time in seconds (default 7 days)
vincent@4731
    45
     * \param validLifeTime valid life time in seconds (default 30 days)
vincent@4731
    46
     * \param onLinkFlag on link flag
vincent@4731
    47
     * \param autonomousFlag autonomous link flag
vincent@4731
    48
     * \param routerAddrFlag router address flag (for Mobile IPv6)
vincent@4731
    49
     */
vincent@4731
    50
    RadvdPrefix (Ipv6Address network, uint8_t prefixLength, uint32_t preferredLifeTime = 604800, uint32_t validLifeTime = 2592000, bool onLinkFlag = true, bool autonomousFlag = true, bool routerAddrFlag = false);
vincent@4731
    51
vincent@4731
    52
    /**
vincent@4731
    53
     * \brief Destructor.
vincent@4731
    54
     */
vincent@4731
    55
    ~RadvdPrefix ();
vincent@4731
    56
vincent@4731
    57
    /**
vincent@4731
    58
     * \brief Get network prefix.
vincent@4731
    59
     * \return network prefix
vincent@4731
    60
     */
vincent@4731
    61
    Ipv6Address GetNetwork () const;
vincent@4731
    62
vincent@4731
    63
    /**
vincent@4731
    64
     * \brief Set network prefix.
vincent@4731
    65
     * \param network network prefix
vincent@4731
    66
     */
vincent@4731
    67
    void SetNetwork (Ipv6Address network);
vincent@4731
    68
vincent@4731
    69
    /**
vincent@4731
    70
     * \brief Get prefix length.
vincent@4731
    71
     * \return prefix length
vincent@4731
    72
     */
vincent@4731
    73
    uint8_t GetPrefixLength () const;
vincent@4731
    74
vincent@4731
    75
    /**
vincent@4731
    76
     * \brief Set prefix length.
vincent@4731
    77
     * \param prefixLength prefix length
vincent@4731
    78
     */
vincent@4731
    79
    void SetPrefixLength (uint8_t prefixLength);
vincent@4731
    80
vincent@4731
    81
    /**
vincent@4731
    82
     * \brief Get preferred lifetime.
vincent@4731
    83
     * \return lifetime
vincent@4731
    84
     */
vincent@4731
    85
    uint32_t GetPreferredLifeTime () const;
vincent@4731
    86
vincent@4731
    87
    /**
vincent@4731
    88
     * \brief Set preferred lifetime.
vincent@4731
    89
     * \param preferredLifeTime lifetime
vincent@4731
    90
     */
vincent@4731
    91
    void SetPreferredLifeTime (uint32_t preferredLifeTime);
vincent@4731
    92
vincent@4731
    93
    /**
vincent@4731
    94
     * \brief Get valid lifetime.
vincent@4731
    95
     * \return lifetime
vincent@4731
    96
     */
vincent@4731
    97
    uint32_t GetValidLifeTime () const;
vincent@4731
    98
vincent@4731
    99
    /**
vincent@4731
   100
     * \brief Set valid lifetime.
vincent@4731
   101
     * \param validLifeTime lifetime
vincent@4731
   102
     */
vincent@4731
   103
    void SetValidLifeTime (uint32_t validLifeTime);
vincent@4731
   104
vincent@4731
   105
    /**
vincent@4731
   106
     * \brief Is on-link flag ?
vincent@4731
   107
     * \return true if on-link is activated, false otherwise
vincent@4731
   108
     */
vincent@4731
   109
    bool IsOnLinkFlag () const;
vincent@4731
   110
vincent@4731
   111
    /**
vincent@4731
   112
     * \brief Set on-link flag.
vincent@4731
   113
     * \param onLinkFlag value
vincent@4731
   114
     */
vincent@4731
   115
    void SetOnLinkFlag (bool onLinkFlag);
vincent@4731
   116
vincent@4731
   117
    /**
vincent@4731
   118
     * \brief Is autonomous flag ?
vincent@4731
   119
     * \return true if autonomous is activated, false otherwise
vincent@4731
   120
     */
vincent@4731
   121
    bool IsAutonomousFlag () const;
vincent@4731
   122
vincent@4731
   123
    /**
vincent@4731
   124
     * \brief Set autonomous flag.
vincent@4731
   125
     * \param autonomousFlag value
vincent@4731
   126
     */
vincent@4731
   127
    void SetAutonomousFlag (bool autonomousFlag);
vincent@4731
   128
vincent@4731
   129
    /**
vincent@4731
   130
     * \brief Is router address flag ?
vincent@4731
   131
     * \return true if router address is activated, false otherwise
vincent@4731
   132
     */
vincent@4731
   133
    bool IsRouterAddrFlag () const;
vincent@4731
   134
vincent@4731
   135
    /**
vincent@4731
   136
     * \brief Set router address flag.
vincent@4731
   137
     * \param routerAddrFlag value
vincent@4731
   138
     */
vincent@4731
   139
    void SetRouterAddrFlag (bool routerAddrFlag);
vincent@4731
   140
vincent@4731
   141
  private:
vincent@4731
   142
    /**
vincent@4731
   143
     * \brief Network prefix.
vincent@4731
   144
     */
vincent@4731
   145
    Ipv6Address m_network;
vincent@4731
   146
vincent@4731
   147
    /**
vincent@4731
   148
     * \brief Prefix length.
vincent@4731
   149
     */
vincent@4731
   150
    uint8_t m_prefixLength;
vincent@4731
   151
vincent@4731
   152
    /**
vincent@4731
   153
     * \brief Preferred time.
vincent@4731
   154
     */
vincent@4731
   155
    uint32_t m_preferredLifeTime;
vincent@4731
   156
vincent@4731
   157
    /**
vincent@4731
   158
     * \brief Valid time.
vincent@4731
   159
     */
vincent@4731
   160
    uint32_t m_validLifeTime;
vincent@4731
   161
vincent@4731
   162
    /**
vincent@4731
   163
     * \brief On link flag, indicates that this prefix can be used for on-link determination.
vincent@4731
   164
     */
vincent@4731
   165
    bool m_onLinkFlag;
vincent@4731
   166
vincent@4731
   167
    /**
vincent@4731
   168
     * \brief Autonomous flag, it is used for autonomous address configuration (RFC 2462).
vincent@4731
   169
     */
vincent@4731
   170
    bool m_autonomousFlag;
vincent@4731
   171
vincent@4731
   172
    /**
vincent@4731
   173
     * \brief Router address flag, indicates that router address is sent instead 
vincent@4731
   174
     * of network prefix as is required by Mobile IPv6.
vincent@4731
   175
     */
vincent@4731
   176
    bool m_routerAddrFlag;
vincent@4731
   177
};
vincent@4731
   178
vincent@4731
   179
} /* namespace ns3 */
vincent@4731
   180
vincent@4731
   181
#endif /* RADVD_PREFIX_H */
vincent@4731
   182