src/node/mac48-address.h
author Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
Fri, 11 Jul 2008 18:39:19 +0100
changeset 3416 926ccb845111
parent 3183 fc3b2e03e61e
child 3549 4eaf02702f17
permissions -rw-r--r--
Rescan APIs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1181
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
     2
/*
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
     3
 * Copyright (c) 2007 INRIA
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
     4
 *
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
     7
 * published by the Free Software Foundation;
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
     8
 *
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    12
 * GNU General Public License for more details.
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    13
 *
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    14
 * You should have received a copy of the GNU General Public License
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    15
 * along with this program; if not, write to the Free Software
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    17
 *
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
762d1616e16a add license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    19
 */
2414
78222cdb1963 fix an old typo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2411
diff changeset
    20
#ifndef MAC48_ADDRESS_H
78222cdb1963 fix an old typo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2411
diff changeset
    21
#define MAC48_ADDRESS_H
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include <stdint.h>
1167
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
    24
#include <ostream>
2438
e2ac9f9aeeb9 value.h -> attribute.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2422
diff changeset
    25
#include "ns3/attribute.h"
2451
8979f07befd5 value-helper.h -> attribute-helper.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2438
diff changeset
    26
#include "ns3/attribute-helper.h"
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
namespace ns3 {
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
class Address;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
1166
878f546b21e1 add doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1161
diff changeset
    32
/**
3183
fc3b2e03e61e more doxygen
Tom Henderson <tomh@tomh.org>
parents: 3094
diff changeset
    33
 * \ingroup address
fc3b2e03e61e more doxygen
Tom Henderson <tomh@tomh.org>
parents: 3094
diff changeset
    34
 * 
1166
878f546b21e1 add doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1161
diff changeset
    35
 * \brief an EUI-48 address
878f546b21e1 add doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1161
diff changeset
    36
 *
878f546b21e1 add doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1161
diff changeset
    37
 * This class can contain 48 bit IEEE addresses.
878f546b21e1 add doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1161
diff changeset
    38
 */
1494
c2985e1cd091 rename Euixx to Macxx
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1208
diff changeset
    39
class Mac48Address
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
public:
1494
c2985e1cd091 rename Euixx to Macxx
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1208
diff changeset
    42
  Mac48Address ();
1166
878f546b21e1 add doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1161
diff changeset
    43
  /**
1494
c2985e1cd091 rename Euixx to Macxx
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1208
diff changeset
    44
   * \param str a string representing the new Mac48Address
1166
878f546b21e1 add doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1161
diff changeset
    45
   *
878f546b21e1 add doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1161
diff changeset
    46
   * The format of the string is "xx:xx:xx:xx:xx:xx"
878f546b21e1 add doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1161
diff changeset
    47
   */
1494
c2985e1cd091 rename Euixx to Macxx
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1208
diff changeset
    48
  Mac48Address (const char *str);
1167
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
    49
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
    50
  /**
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
    51
   * \param buffer address in network order
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
    52
   *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
    53
   * Copy the input address to our internal buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
    54
   */
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
    55
  void CopyFrom (const uint8_t buffer[6]);
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
    56
  /**
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
    57
   * \param buffer address in network order
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
    58
   *
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
    59
   * Copy the internal address to the input buffer.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
    60
   */
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
    61
  void CopyTo (uint8_t buffer[6]) const;
1205
6cee0d34bda6 add implicit conversion to Eui48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    62
6cee0d34bda6 add implicit conversion to Eui48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    63
  /**
6cee0d34bda6 add implicit conversion to Eui48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    64
   * \returns a new Address instance
6cee0d34bda6 add implicit conversion to Eui48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    65
   *
6cee0d34bda6 add implicit conversion to Eui48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    66
   * Convert an instance of this class to a polymorphic Address instance.
6cee0d34bda6 add implicit conversion to Eui48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    67
   */
1705
ae9623064367 constify conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1494
diff changeset
    68
  operator Address () const;
1205
6cee0d34bda6 add implicit conversion to Eui48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    69
  /**
6cee0d34bda6 add implicit conversion to Eui48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    70
   * \param address a polymorphic address
1494
c2985e1cd091 rename Euixx to Macxx
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1208
diff changeset
    71
   * \returns a new Mac48Address from the polymorphic address
1207
a9f3610bbffa remove implicit conversion from Address to Eui48Address, to Ipv4Address and to InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1205
diff changeset
    72
   * 
a9f3610bbffa remove implicit conversion from Address to Eui48Address, to Ipv4Address and to InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1205
diff changeset
    73
   * This function performs a type check and asserts if the
a9f3610bbffa remove implicit conversion from Address to Eui48Address, to Ipv4Address and to InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1205
diff changeset
    74
   * type of the input address is not compatible with an
1494
c2985e1cd091 rename Euixx to Macxx
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1208
diff changeset
    75
   * Mac48Address.
1205
6cee0d34bda6 add implicit conversion to Eui48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    76
   */
1494
c2985e1cd091 rename Euixx to Macxx
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1208
diff changeset
    77
  static Mac48Address ConvertFrom (const Address &address);
1205
6cee0d34bda6 add implicit conversion to Eui48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    78
  /**
6cee0d34bda6 add implicit conversion to Eui48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    79
   * \returns true if the address matches, false otherwise.
6cee0d34bda6 add implicit conversion to Eui48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    80
   */
6cee0d34bda6 add implicit conversion to Eui48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    81
  static bool IsMatchingType (const Address &address);
6cee0d34bda6 add implicit conversion to Eui48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    82
  /**
1494
c2985e1cd091 rename Euixx to Macxx
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1208
diff changeset
    83
   * Allocate a new Mac48Address.
1205
6cee0d34bda6 add implicit conversion to Eui48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
    84
   */
1494
c2985e1cd091 rename Euixx to Macxx
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1208
diff changeset
    85
  static Mac48Address Allocate (void);
1707
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
    86
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
    87
  /**
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
    88
   * \returns true if this is a broadcast address, false otherwise.
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
    89
   */
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
    90
  bool IsBroadcast (void) const;
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
    91
  /**
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
    92
   * \returns true if this is a multicast address, false otherwise.
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
    93
   */
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
    94
  bool IsMulticast (void) const;
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
    95
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
    96
  /**
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
    97
   * \returns the broadcast address
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
    98
   */
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
    99
  static Mac48Address GetBroadcast (void);
2411
a50e95c98d3f add Value support to Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1953
diff changeset
   100
1205
6cee0d34bda6 add implicit conversion to Eui48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1173
diff changeset
   101
private:
1166
878f546b21e1 add doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1161
diff changeset
   102
  /**
878f546b21e1 add doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1161
diff changeset
   103
   * \returns a new Address instance
878f546b21e1 add doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1161
diff changeset
   104
   *
878f546b21e1 add doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1161
diff changeset
   105
   * Convert an instance of this class to a polymorphic Address instance.
878f546b21e1 add doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1161
diff changeset
   106
   */
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
  Address ConvertTo (void) const;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
  static uint8_t GetType (void);
1707
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
   109
  friend bool operator < (const Mac48Address &a, const Mac48Address &b);
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
   110
  friend bool operator == (const Mac48Address &a, const Mac48Address &b);
2954
a1a6028e4c39 implement operator >>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   111
  friend std::istream& operator>> (std::istream& is, Mac48Address & address);
1707
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
   112
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   113
  uint8_t m_address[6];
1167
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
   114
};
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   115
2969
9d05d2a95dfa improve the auto-generated doxygen output.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2954
diff changeset
   116
/**
9d05d2a95dfa improve the auto-generated doxygen output.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2954
diff changeset
   117
 * \class ns3::Mac48AddressValue
9d05d2a95dfa improve the auto-generated doxygen output.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2954
diff changeset
   118
 * \brief hold objects of type ns3::Mac48Address
9d05d2a95dfa improve the auto-generated doxygen output.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2954
diff changeset
   119
 */
9d05d2a95dfa improve the auto-generated doxygen output.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2954
diff changeset
   120
3094
6e787ec9c8aa ATTRIBUTE_HELPER_HEADER_2 -> ATTRIBUTE_HELPER_HEADER
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3093
diff changeset
   121
ATTRIBUTE_HELPER_HEADER (Mac48Address);
2422
6cbcb8fe4551 macro-ify
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2414
diff changeset
   122
1494
c2985e1cd091 rename Euixx to Macxx
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1208
diff changeset
   123
bool operator == (const Mac48Address &a, const Mac48Address &b);
c2985e1cd091 rename Euixx to Macxx
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1208
diff changeset
   124
bool operator != (const Mac48Address &a, const Mac48Address &b);
1707
64531b6e76f1 bug 86: add missing functions to manipulate Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1705
diff changeset
   125
bool operator < (const Mac48Address &a, const Mac48Address &b);
1494
c2985e1cd091 rename Euixx to Macxx
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1208
diff changeset
   126
std::ostream& operator<< (std::ostream& os, const Mac48Address & address);
2954
a1a6028e4c39 implement operator >>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2582
diff changeset
   127
std::istream& operator>> (std::istream& is, Mac48Address & address);
2411
a50e95c98d3f add Value support to Mac48Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1953
diff changeset
   128
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
} // namespace ns3
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
2414
78222cdb1963 fix an old typo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2411
diff changeset
   131
#endif /* MAC48_ADDRESS_H */