src/applications/radvd/radvd-interface.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu Nov 12 13:01:01 2009 +0100 (2009-11-12)
changeset 5505 c0ac392289c3
parent 5225 9c612cb88d6b
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_INTERFACE_H
vincent@4731
    22
#define RADVD_INTERFACE_H
vincent@4731
    23
vincent@4731
    24
#include <list>
mathieu@5505
    25
#include "ns3/simple-ref-count.h"
vincent@4731
    26
#include "radvd-prefix.h"
vincent@4731
    27
vincent@4731
    28
namespace ns3
vincent@4731
    29
{
vincent@4731
    30
vincent@4731
    31
/**
vincent@4763
    32
 * \ingroup radvd
vincent@4731
    33
 * \class RadvdInterface
vincent@4731
    34
 * \brief Radvd interface configuration.
vincent@4731
    35
 */
mathieu@5505
    36
class RadvdInterface : public SimpleRefCount<RadvdInterface>
vincent@4731
    37
{
vincent@4731
    38
  public:
vincent@4731
    39
    /**
vincent@4731
    40
     * \brief Constructor.
vincent@4731
    41
     * \param interface interface index
vincent@4731
    42
     */
vincent@4731
    43
    RadvdInterface (uint32_t interface);
vincent@4731
    44
vincent@4731
    45
    /**
vincent@4731
    46
     * \brief Constructor.
vincent@4731
    47
     * \param interface interface index
tomh@4732
    48
     * \param maxRtrAdvInterval maximum RA interval (ms)
tomh@4732
    49
     * \param minRtrAdvInterval minimum RA interval (ms)
vincent@4731
    50
     */
vincent@4731
    51
    RadvdInterface (uint32_t interface, uint32_t maxRtrAdvInterval, uint32_t minRtrAdvInterval);
vincent@4731
    52
vincent@4731
    53
    /**
vincent@4731
    54
     * \brief Destructor.
vincent@4731
    55
     */
vincent@4731
    56
    ~RadvdInterface ();
vincent@4731
    57
vincent@4731
    58
    /**
vincent@4731
    59
     * \brief Get interface index for this configuration.
vincent@4731
    60
     * \return interface index
vincent@4731
    61
     */
vincent@4731
    62
    uint32_t GetInterface () const;
vincent@4731
    63
vincent@4731
    64
    /**
vincent@4731
    65
     * \brief Get list of prefixes advertised for this interface.     
vincent@4731
    66
     * \return list of IPv6 prefixes
vincent@4731
    67
     */
vincent@4731
    68
    std::list <Ptr<RadvdPrefix> > GetPrefixes () const;
vincent@4731
    69
vincent@4731
    70
    /**
vincent@4731
    71
     * \brief Add a prefix to advertise on interface.
vincent@4731
    72
     * \param routerPrefix prefix to advertise
vincent@4731
    73
     */
vincent@4731
    74
    void AddPrefix (Ptr<RadvdPrefix> routerPrefix);
vincent@4731
    75
    
vincent@4731
    76
    /**
vincent@4731
    77
     * \brief Is send advert enabled (periodic RA and reply to RS) ?
vincent@4731
    78
     * \return send advert flag
vincent@4731
    79
     */
vincent@4731
    80
    bool IsSendAdvert () const;
vincent@4731
    81
    
vincent@4731
    82
    /**
vincent@4731
    83
     * \brief Set send advert flag.
vincent@5225
    84
     * \param sendAdvert value
vincent@4731
    85
     */
vincent@4731
    86
    void SetSendAdvert (bool sendAdvert);
vincent@4731
    87
vincent@4731
    88
    /**
vincent@4731
    89
     * \brief Get maximum RA interval.
tomh@4732
    90
     * \return RA interval (ms)
vincent@4731
    91
     */
vincent@4731
    92
    uint32_t GetMaxRtrAdvInterval () const;
vincent@4731
    93
vincent@4731
    94
    /**
vincent@4731
    95
     * \brief Get maximum RA interval.
tomh@4732
    96
     * \param maxRtrAdvInterval RA interval (ms)
vincent@4731
    97
     */
vincent@4731
    98
    void SetMaxRtrAdvInterval (uint32_t maxRtrAdvInterval);
vincent@4731
    99
vincent@4731
   100
    /**
tomh@4732
   101
     * \brief Get minimum RA interval 
tomh@4732
   102
     * \return RA interval (ms)
vincent@4731
   103
     */
vincent@4731
   104
    uint32_t GetMinRtrAdvInterval () const;
vincent@4731
   105
    
vincent@4731
   106
    /**
tomh@4732
   107
     * \brief Get minimum RA interval 
tomh@4732
   108
     * \param minRtrAdvInterval RA interval (ms).
vincent@4731
   109
     */
vincent@4731
   110
    void SetMinRtrAdvInterval (uint32_t minRtrAdvInterval);
vincent@4731
   111
vincent@4731
   112
    /**
vincent@4731
   113
     * \brief Get minimum delay between RAs.
tomh@4732
   114
     * \return minimum delay (ms)
vincent@4731
   115
     */
vincent@4731
   116
    uint32_t GetMinDelayBetweenRAs () const;
vincent@4731
   117
    
vincent@4731
   118
    /**
vincent@4731
   119
     * \brief Set minimum delay between RAs.
tomh@4732
   120
     * \param minDelayBetweenRAs minimum delay (ms)
vincent@4731
   121
     */
vincent@4731
   122
    void SetMinDelayBetweenRAs (uint32_t minDelayBetweenRAs);
vincent@4731
   123
vincent@4731
   124
    /**
vincent@4731
   125
     * \brief Is managed flag enabled ?
vincent@4731
   126
     * \return managed flag
vincent@4731
   127
     */
vincent@4731
   128
    bool IsManagedFlag () const;
vincent@4731
   129
    
vincent@4731
   130
    /**
vincent@4731
   131
     * \brief Set managed flag
vincent@4731
   132
     * \param managedFlag value
vincent@4731
   133
     */
vincent@4731
   134
    void SetManagedFlag (bool managedFlag);
vincent@4731
   135
vincent@4731
   136
    /**
vincent@4731
   137
     * \brief Is "other config" flag enabled ?
vincent@4731
   138
     * \return other config flag
vincent@4731
   139
     */
vincent@4731
   140
    bool IsOtherConfigFlag () const;
vincent@4731
   141
    
vincent@4731
   142
    /**
vincent@4731
   143
     * \brief Set "other config" flag
vincent@4731
   144
     * \param otherConfigFlag value
vincent@4731
   145
     */
vincent@4731
   146
    void SetOtherConfigFlag (bool otherConfigFlag);
vincent@4731
   147
vincent@4731
   148
    /**
vincent@4731
   149
     * \brief Get link MTU.
vincent@4731
   150
     * \return link MTU
vincent@4731
   151
     */
vincent@4731
   152
    uint32_t GetLinkMtu () const;
vincent@4731
   153
    
vincent@4731
   154
    /**
vincent@4731
   155
     * \brief Set link MTU.
vincent@4731
   156
     * \param linkMtu link MTU
vincent@4731
   157
     */
vincent@4731
   158
    void SetLinkMtu (uint32_t linkMtu); 
vincent@4731
   159
vincent@4731
   160
    /**
vincent@4731
   161
     * \brief Get reachable time.
vincent@4731
   162
     * \return reachable time
vincent@4731
   163
     */
vincent@4731
   164
    uint32_t GetReachableTime () const;
vincent@4731
   165
    
vincent@4731
   166
    /**
vincent@4731
   167
     * \brief Set reachable time.
vincent@4731
   168
     * \param reachableTime reachable time
vincent@4731
   169
     */
vincent@4731
   170
    void SetReachableTime (uint32_t reachableTime);
vincent@4731
   171
vincent@4731
   172
    /**
vincent@4731
   173
     * \brief Get default lifetime.
vincent@4731
   174
     * \return default lifetime
vincent@4731
   175
     */
vincent@4731
   176
    uint32_t GetDefaultLifeTime () const;
vincent@4731
   177
    
vincent@4731
   178
    /**
vincent@4731
   179
     * \brief Set default lifetime.
vincent@4731
   180
     * \param defaultLifeTime default lifetime
vincent@4731
   181
     */
vincent@4731
   182
    void SetDefaultLifeTime (uint32_t defaultLifeTime);
vincent@4731
   183
vincent@4731
   184
    /**
vincent@4731
   185
     * \brief Get retransmission timer.
vincent@4731
   186
     * \return retransmission timer
vincent@4731
   187
     */
vincent@4731
   188
    uint32_t GetRetransTimer () const;
vincent@4731
   189
    
vincent@4731
   190
    /**
vincent@4731
   191
     * \brief Set retransmission timer.
vincent@4731
   192
     * \param retransTimer retransmission timer
vincent@4731
   193
     */
vincent@4731
   194
    void SetRetransTimer (uint32_t retransTimer);
vincent@4731
   195
vincent@4731
   196
    /**
vincent@4731
   197
     * \brief Get current hop limit.
vincent@4731
   198
     * \return current hop limit for the link
vincent@4731
   199
     */
vincent@4731
   200
    uint8_t GetCurHopLimit () const;
vincent@4731
   201
    
vincent@4731
   202
    /**
vincent@4731
   203
     * \brief Set current hop limit.
vincent@4731
   204
     * \param curHopLimit current hop limit for the link
vincent@4731
   205
     */
vincent@4731
   206
    void SetCurHopLimit (uint8_t curHopLimit); 
vincent@4731
   207
vincent@4731
   208
    /**
vincent@4731
   209
     * \brief Get default preference.
vincent@4731
   210
     * \return default preference
vincent@4731
   211
     */
vincent@4731
   212
    uint8_t GetDefaultPreference () const;
vincent@4731
   213
    
vincent@4731
   214
    /**
vincent@4731
   215
     * \brief Set default preference.
vincent@4731
   216
     * \param defaultPreference default preference
vincent@4731
   217
     */
vincent@4731
   218
    void SetDefaultPreference (uint8_t defaultPreference);
vincent@4731
   219
vincent@4731
   220
    /**
vincent@4731
   221
     * \brief Is source LLA option should be included in RA ?
vincent@4731
   222
     * \return true if source address is added in RA, false otherwise
vincent@4731
   223
     */
vincent@4731
   224
    bool IsSourceLLAddress () const;
vincent@4731
   225
    
vincent@4731
   226
    /**
vincent@4731
   227
     * \brief Set flag to add or not LLA to RA.
vincent@4731
   228
     * \param sourceLLAddress value
vincent@4731
   229
     */
vincent@4731
   230
    void SetSourceLLAddress (bool sourceLLAddress);
vincent@4731
   231
vincent@4731
   232
    /**
vincent@4731
   233
     * \brief Is "home agent" flag enabled ?
vincent@4731
   234
     * \return "home agent" flag
vincent@4731
   235
     */
vincent@4731
   236
    bool IsHomeAgentFlag () const;
vincent@4731
   237
    
vincent@4731
   238
    /**
vincent@4731
   239
     * \brief Set "home agent" flag.
vincent@4731
   240
     * \param homeAgentFlag value
vincent@4731
   241
     */
vincent@4731
   242
    void SetHomeAgentFlag (bool homeAgentFlag);
vincent@4731
   243
vincent@4731
   244
    /**
vincent@4731
   245
     * \brief Is Home Agent Information option should be included in RA ?
vincent@4731
   246
     * \return true if HA information option is added in RA, false otherwise
vincent@4731
   247
     */
vincent@4731
   248
    bool IsHomeAgentInfo () const;
vincent@4731
   249
    
vincent@4731
   250
    /**
vincent@4731
   251
     * \brief Set flag to add or not HA information option to RA.
vincent@4731
   252
     * \param homeAgentFlag value
vincent@4731
   253
     */
vincent@4731
   254
    void SetHomeAgentInfo (bool homeAgentFlag);
vincent@4731
   255
    
vincent@4731
   256
    /**
vincent@4731
   257
     * \brief Get home agent lifetime.
vincent@4731
   258
     * \return home agent lifetime
vincent@4731
   259
     */
vincent@4731
   260
    uint32_t GetHomeAgentLifeTime () const;
vincent@4731
   261
    
vincent@4731
   262
    /**
vincent@4731
   263
     * \brief Set home agent lifetime.
vincent@4731
   264
     * \param homeAgentLifeTime home agent lifetime
vincent@4731
   265
     */
vincent@4731
   266
    void SetHomeAgentLifeTime (uint32_t homeAgentLifeTime);
vincent@4731
   267
    
vincent@4731
   268
    /**
vincent@4731
   269
     * \brief Get home agent preference.
vincent@4731
   270
     * \return home agent preference
vincent@4731
   271
     */
vincent@4731
   272
    uint32_t GetHomeAgentPreference () const;
vincent@4731
   273
    
vincent@4731
   274
    /**
vincent@4731
   275
     * \brief Set home agent preference.
vincent@4731
   276
     * \param homeAgentPreference home agent preference
vincent@4731
   277
     */
vincent@4731
   278
    void SetHomeAgentPreference (uint32_t homeAgentPreference);
vincent@4731
   279
vincent@4731
   280
    /**
vincent@4731
   281
     * \brief Is "mobile router support" flag enabled ?
vincent@4731
   282
     * \return "mobile router support" flag
vincent@4731
   283
     */
vincent@4731
   284
    bool IsMobRtrSupportFlag () const;
vincent@4731
   285
    
vincent@4731
   286
    /**
vincent@4731
   287
     * \brief Set "mobile router support" flag.
vincent@4731
   288
     * \param mobRtrSupportFlag value
vincent@4731
   289
     */
vincent@4731
   290
    void SetMobRtrSupportFlag (bool mobRtrSupportFlag);
vincent@4731
   291
    
vincent@4731
   292
    /**
vincent@4731
   293
     * \brief Is advertisement interval option should be included in RA ?
vincent@4731
   294
     * \return true if advertisement interval option is added in RA, false otherwise
vincent@4731
   295
     */
vincent@4731
   296
    bool IsIntervalOpt () const;
vincent@4731
   297
    
vincent@4731
   298
    /**
vincent@4731
   299
     * \brief Set flag to add or not advertisement interval to RA.
vincent@4731
   300
     * \param intervalOpt value
vincent@4731
   301
     */
vincent@4731
   302
    void SetIntervalOpt (bool intervalOpt);
vincent@4731
   303
vincent@4731
   304
  private:
vincent@4731
   305
    typedef std::list<Ptr<RadvdPrefix> > RadvdPrefixList;
vincent@4731
   306
    typedef std::list<Ptr<RadvdPrefix> >::iterator RadvdPrefixListI;
vincent@4731
   307
vincent@4731
   308
    /**
vincent@4731
   309
     * \brief Interface to advertise RA.
vincent@4731
   310
     */
vincent@4731
   311
    uint32_t m_interface;
vincent@4731
   312
vincent@4731
   313
    /**
vincent@4731
   314
     * \brief List of prefixes to advertise.
vincent@4731
   315
     */
vincent@4731
   316
    RadvdPrefixList m_prefixes;
vincent@4731
   317
vincent@4731
   318
    /**
vincent@4731
   319
     * \brief Flag whether or not router sends periodic RA and respond to RS.
vincent@4731
   320
     */
vincent@4731
   321
    bool m_sendAdvert;
vincent@4731
   322
vincent@4731
   323
    /**
vincent@4731
   324
     * \brief Maximum RA interval in milliseconds.
vincent@4731
   325
     */
vincent@4731
   326
    uint32_t m_maxRtrAdvInterval;
vincent@4731
   327
vincent@4731
   328
    /**
vincent@4731
   329
     * \brief Minimum RA interval in milliseconds.
vincent@4731
   330
     */
vincent@4731
   331
    uint32_t m_minRtrAdvInterval;
vincent@4731
   332
vincent@4731
   333
    /**
vincent@4731
   334
     * \brief Minimum delay between RA in milliseconds.
vincent@4731
   335
     */
vincent@4731
   336
    uint32_t m_minDelayBetweenRAs;
vincent@4731
   337
vincent@4731
   338
    /**
vincent@4731
   339
     * \brief Managed flag. If true host use the stateful protocol for address autoconfiguration.
vincent@4731
   340
     */
vincent@4731
   341
    bool m_managedFlag;
vincent@4731
   342
vincent@4731
   343
    /**
vincent@4731
   344
     * \brief Other configuration flag. If true host use stateful protocol for other (non-address) information.
vincent@4731
   345
     */
vincent@4731
   346
    bool m_otherConfigFlag;
vincent@4731
   347
vincent@4731
   348
    /**
vincent@4731
   349
     * \brief Link MTU to use.
vincent@4731
   350
     */
vincent@4731
   351
    uint32_t m_linkMtu;
vincent@4731
   352
vincent@4731
   353
    /**
vincent@4731
   354
     * \brief Reachable time in milliseconds.
vincent@4731
   355
     */
vincent@4731
   356
    uint32_t m_reachableTime;
vincent@4731
   357
vincent@4731
   358
    /**
vincent@4731
   359
     * \brief Retransmission timer in milliseconds.
vincent@4731
   360
     */
vincent@4731
   361
    uint32_t m_retransTimer;
vincent@4731
   362
vincent@4731
   363
    /**
vincent@4731
   364
     * \brief Current hop limit (TTL).
vincent@4731
   365
     */
vincent@4731
   366
    uint32_t m_curHopLimit;
vincent@4731
   367
vincent@4731
   368
    /**
vincent@4731
   369
     * \brief Default life time in seconds.
vincent@4731
   370
     */
vincent@4731
   371
    uint32_t m_defaultLifeTime;
vincent@4731
   372
vincent@4731
   373
    /**
vincent@4731
   374
     * \brief Preference associated with default router.
vincent@4731
   375
     * 0 = low
vincent@4731
   376
     * 1 = medium
vincent@4731
   377
     * 2 = high
vincent@4731
   378
     */
vincent@4731
   379
    uint8_t m_defaultPreference;
vincent@4731
   380
vincent@4731
   381
    /**
vincent@4731
   382
     * \brief Flag to add link-layer address in RA.
vincent@4731
   383
     */
vincent@4731
   384
    bool m_sourceLLAddress;
vincent@4731
   385
vincent@4731
   386
    /**
vincent@4731
   387
     * \brief Flag to add HA (home agent) flag in RA.
vincent@4731
   388
     */
vincent@4731
   389
    bool m_homeAgentFlag;
vincent@4731
   390
vincent@4731
   391
    /**
vincent@4731
   392
     * \brief Flag to add Home Agent Information option (Mobile IPv6).
vincent@4731
   393
     * Currently not implemented.
vincent@4731
   394
     */
vincent@4731
   395
    bool m_homeAgentInfo;
vincent@4731
   396
vincent@4731
   397
    /**
vincent@4731
   398
     * \brief Home agent lifetime in seconds. Ignored if home agent info is not set.
vincent@4731
   399
     */
vincent@4731
   400
    uint32_t m_homeAgentLifeTime;
vincent@4731
   401
vincent@4731
   402
    /**
vincent@4731
   403
     * \brief Home agent preference. Ignored if home agent info is not set.
vincent@4731
   404
     */
vincent@4731
   405
    uint32_t m_homeAgentPreference;
vincent@4731
   406
vincent@4731
   407
    /**
vincent@4731
   408
     * \brief Flag for HA to signals it supports Mobile Router registrations (NEMO Basic).
vincent@4731
   409
     */
vincent@4731
   410
    bool m_mobRtrSupportFlag;
vincent@4731
   411
vincent@4731
   412
    /**
vincent@4731
   413
     * \brief Flag to add Advertisement Interval option in RA.
vincent@4731
   414
     */
vincent@4731
   415
    bool m_intervalOpt;
vincent@4731
   416
};
vincent@4731
   417
vincent@4731
   418
} /* namespace ns3 */
vincent@4731
   419
vincent@4731
   420
#endif /* RADVD_INTERFACE_H */
vincent@4731
   421