src/node/ipv4-address.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon, 30 Jul 2007 10:35:03 +0200
changeset 1167 2cb083ff04c6
parent 1158 12d68dff3353
parent 986 a1354f6319fe
child 1173 06e382cadbbb
permissions -rw-r--r--
merge
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2005 INRIA
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 * All rights reserved.
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 *
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License version 2 as
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 * published by the Free Software Foundation;
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 *
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 * GNU General Public License for more details.
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 *
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * along with this program; if not, write to the Free Software
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 *
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
 */
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#ifndef IPV4_ADDRESS_H
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#define IPV4_ADDRESS_H
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
#include <stdint.h>
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
#include <ostream>
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 784
diff changeset
    27
#include "address.h"
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
namespace ns3 {
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
979
cb805f7a2e8d Add patch 49 (add/remove network route when bringing interface up/down)
Tom Henderson <tomh@tomh.org>
parents: 784
diff changeset
    31
class Ipv4Mask;
cb805f7a2e8d Add patch 49 (add/remove network route when bringing interface up/down)
Tom Henderson <tomh@tomh.org>
parents: 784
diff changeset
    32
625
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    33
/** Ipv4 addresses are stored in host order in
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    34
  * this class.
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    35
  */
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
class Ipv4Address {
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
public:
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
  Ipv4Address ();
625
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    39
  /**
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    40
   * input address is in host order.
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    41
   * \param address The host order 32-bit address
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    42
   */
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
  Ipv4Address (uint32_t address);
625
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    44
  /** 
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    45
    * \brief Constructs an Ipv4Address by parsing a the input C-string
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    46
    *
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    47
    * Input address is in format:
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    48
    * hhh.xxx.xxx.lll
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    49
    * where h is the high byte and l the
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    50
    * low byte
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    51
    * \param address C-string containing the address as described above
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    52
    */
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    53
  Ipv4Address (char const *address);
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    54
  
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    55
  /**
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    56
   * \brief Comparison operation between two Ipv4Addresses
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    57
   * \param other address to which to compare this address
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    58
   * \return True if the addresses are equal. False otherwise.
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
   */
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
  bool IsEqual (Ipv4Address other) const;
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
625
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    62
  /** 
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    63
   * \brief Get the host-order 32-bit IP address
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    64
   *
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    65
   * Using this method is frowned upon.
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
   * Please, do _not_ use this method.
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
   * It is there only for chunk-ipv4.
625
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    68
   * \return the host-order 32-bit IP address
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
   */
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
  uint32_t GetHostOrder (void) const;
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
  void SetHostOrder (uint32_t ip);
625
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    72
  /**
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    73
   * Serialize this address to a 4-byte buffer
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 784
diff changeset
    74
   *
625
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    75
   * \param buf output buffer to which this address gets overwritten with this
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    76
   * Ipv4Address
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    77
   */
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
  void Serialize (uint8_t buf[4]) const;
625
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    79
  /**
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 784
diff changeset
    80
   * \param buf buffer to read address from
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 784
diff changeset
    81
   * \returns an Ipv4Address
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 784
diff changeset
    82
   * 
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 784
diff changeset
    83
   * The input address is expected to be in network byte order format.
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 784
diff changeset
    84
   */
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 784
diff changeset
    85
  static Ipv4Address Deserialize (const uint8_t buf[4]);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 784
diff changeset
    86
  /**
625
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    87
   * \brief Print this address to the given output stream
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    88
   *
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    89
   * The print format is in the typical "192.168.1.1"
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    90
   * \param os The output stream to which this Ipv4Address is printed
12fa3d0c4f94 droptail and ipv4address dox
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 256
diff changeset
    91
   */
256
8978ff0dc351 replace pointer with reference
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 234
diff changeset
    92
  void Print (std::ostream &os) const;
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
986
a1354f6319fe Add Ipv4Address::CombineMask, and implement Ipv4Address::IsBroadcast.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 979
diff changeset
    94
  bool IsBroadcast (void) const;
a1354f6319fe Add Ipv4Address::CombineMask, and implement Ipv4Address::IsBroadcast.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 979
diff changeset
    95
  bool IsMulticast (void) const;
979
cb805f7a2e8d Add patch 49 (add/remove network route when bringing interface up/down)
Tom Henderson <tomh@tomh.org>
parents: 784
diff changeset
    96
  /**
cb805f7a2e8d Add patch 49 (add/remove network route when bringing interface up/down)
Tom Henderson <tomh@tomh.org>
parents: 784
diff changeset
    97
   * \brief Combine this address with a network mask
cb805f7a2e8d Add patch 49 (add/remove network route when bringing interface up/down)
Tom Henderson <tomh@tomh.org>
parents: 784
diff changeset
    98
   *
cb805f7a2e8d Add patch 49 (add/remove network route when bringing interface up/down)
Tom Henderson <tomh@tomh.org>
parents: 784
diff changeset
    99
   * This method returns an IPv4 address that is this address combined
cb805f7a2e8d Add patch 49 (add/remove network route when bringing interface up/down)
Tom Henderson <tomh@tomh.org>
parents: 784
diff changeset
   100
   * (bitwise and) with a network mask, yielding an IPv4 network
cb805f7a2e8d Add patch 49 (add/remove network route when bringing interface up/down)
Tom Henderson <tomh@tomh.org>
parents: 784
diff changeset
   101
   * address.
cb805f7a2e8d Add patch 49 (add/remove network route when bringing interface up/down)
Tom Henderson <tomh@tomh.org>
parents: 784
diff changeset
   102
   *
cb805f7a2e8d Add patch 49 (add/remove network route when bringing interface up/down)
Tom Henderson <tomh@tomh.org>
parents: 784
diff changeset
   103
   * \param a network mask 
cb805f7a2e8d Add patch 49 (add/remove network route when bringing interface up/down)
Tom Henderson <tomh@tomh.org>
parents: 784
diff changeset
   104
   */
cb805f7a2e8d Add patch 49 (add/remove network route when bringing interface up/down)
Tom Henderson <tomh@tomh.org>
parents: 784
diff changeset
   105
  Ipv4Address CombineMask (Ipv4Mask const &mask) const;
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 784
diff changeset
   107
  Address ConvertTo (void) const;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 784
diff changeset
   108
  static Ipv4Address ConvertFrom (const Address &address);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 784
diff changeset
   109
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   110
  static Ipv4Address GetZero (void);
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
  static Ipv4Address GetAny (void);
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   112
  static Ipv4Address GetBroadcast (void);
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   113
  static Ipv4Address GetLoopback (void);
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   114
private:
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 784
diff changeset
   115
  static uint8_t GetType (void);
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   116
  uint32_t m_address;
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   117
};
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   118
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   119
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   120
class Ipv4Mask {
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   121
public:
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   122
  Ipv4Mask ();
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
  Ipv4Mask (uint32_t mask);
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   124
  Ipv4Mask (char const *mask);
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
  bool IsMatch (Ipv4Address a, Ipv4Address b) const;
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
  bool IsEqual (Ipv4Mask other) const;
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
  /* Using this method is frowned upon.
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
   * Please, do _not_ use this method.
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
   */
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
  uint32_t GetHostOrder (void) const;
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
  void SetHostOrder (uint32_t value);
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
256
8978ff0dc351 replace pointer with reference
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 234
diff changeset
   137
  void Print (std::ostream &os) const;
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   138
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   139
  static Ipv4Mask GetLoopback (void);
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   140
  static Ipv4Mask GetZero (void);
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   141
private:
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   142
  uint32_t m_mask;
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   143
};
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   144
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   145
std::ostream& operator<< (std::ostream& os, Ipv4Address const& address);
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   146
std::ostream& operator<< (std::ostream& os, Ipv4Mask const& mask);
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   147
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   148
bool operator == (Ipv4Address const &a, Ipv4Address const &b);
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   149
bool operator != (Ipv4Address const &a, Ipv4Address const &b);
784
a3f6b5783790 Add Ipv4Address operator <, to allow Ipv4Address to be used in std::set; Closes #39.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 782
diff changeset
   150
bool operator < (Ipv4Address const &addrA, Ipv4Address const &addrB);
a3f6b5783790 Add Ipv4Address operator <, to allow Ipv4Address to be used in std::set; Closes #39.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 782
diff changeset
   151
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   152
class Ipv4AddressHash : public std::unary_function<Ipv4Address, size_t> {
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   153
public:
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   154
  size_t operator()(Ipv4Address const &x) const;
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   155
};
782
ca907fdc28fb Add Ipv4Mask == and != operators, similarly to Ipv4Address.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 625
diff changeset
   156
ca907fdc28fb Add Ipv4Mask == and != operators, similarly to Ipv4Address.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 625
diff changeset
   157
bool operator == (Ipv4Mask const &a, Ipv4Mask const &b);
ca907fdc28fb Add Ipv4Mask == and != operators, similarly to Ipv4Address.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 625
diff changeset
   158
bool operator != (Ipv4Mask const &a, Ipv4Mask const &b);
234
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   159
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   160
}; // namespace ns3
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   161
6124bda39cb3 code from all trees.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   162
#endif /* IPV4_ADDRESS_H */