src/node/address.cc
author Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
Wed, 16 Apr 2008 18:37:20 +0100
changeset 2918 6244ea5e7831
parent 2582 3e28107b870f
child 2922 916de65f67bf
child 2972 d76553495b91
permissions -rw-r--r--
Address instances of different m_type's should compare differently; closes #173.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
#include "ns3/assert.h"
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
#include "address.h"
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
#include <iostream>
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
#include <iomanip>
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
namespace ns3 {
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
1159
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
     8
Address::Address ()
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
     9
  : m_type (0),
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
    10
    m_len (0)
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
    11
{
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
    12
  memset (m_data, 0, m_len);
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
    13
}
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
    14
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
Address::Address (uint8_t type, const uint8_t *buffer, uint8_t len)
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
  : m_type (type),
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
    m_len (len)
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
  NS_ASSERT (m_len <= MAX_SIZE);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
  memset (m_data, 0, m_len);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
  memcpy (m_data, buffer, m_len);
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
Address::Address (const Address & address)
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
  : m_type (address.m_type),
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
    m_len (address.m_len)
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
  NS_ASSERT (m_len <= MAX_SIZE);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
  memset (m_data, 0, m_len);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
  memcpy (m_data, address.m_data, m_len);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
}
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
Address &
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
Address::operator = (const Address &address)
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
  NS_ASSERT (m_len <= MAX_SIZE);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
  m_type = address.m_type;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
  m_len = address.m_len;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
  NS_ASSERT (m_len <= MAX_SIZE);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
  memset (m_data, 0, m_len);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
  memcpy (m_data, address.m_data, m_len);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
  return *this;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
}
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
1187
8ea0f4d4fd34 add Address::IsInvalid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1184
diff changeset
    43
bool
8ea0f4d4fd34 add Address::IsInvalid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1184
diff changeset
    44
Address::IsInvalid (void) const
8ea0f4d4fd34 add Address::IsInvalid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1184
diff changeset
    45
{
8ea0f4d4fd34 add Address::IsInvalid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1184
diff changeset
    46
  return m_len == 0 && m_type == 0;
8ea0f4d4fd34 add Address::IsInvalid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1184
diff changeset
    47
}
8ea0f4d4fd34 add Address::IsInvalid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1184
diff changeset
    48
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
uint8_t 
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
Address::GetLength (void) const
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
  NS_ASSERT (m_len <= MAX_SIZE);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
  return m_len;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
}
1191
5583facf0af8 PacketSocketAddress serialization code was buggy.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1187
diff changeset
    55
uint32_t
1166
878f546b21e1 add doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1159
diff changeset
    56
Address::CopyTo (uint8_t buffer[MAX_SIZE]) const
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
  NS_ASSERT (m_len <= MAX_SIZE);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
  memcpy (buffer, m_data, m_len);
1191
5583facf0af8 PacketSocketAddress serialization code was buggy.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1187
diff changeset
    60
  return m_len;
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
}
1191
5583facf0af8 PacketSocketAddress serialization code was buggy.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1187
diff changeset
    62
uint32_t
1184
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    63
Address::CopyAllTo (uint8_t *buffer, uint8_t len) const
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    64
{
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    65
  NS_ASSERT (len >= m_len + 2);
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    66
  buffer[0] = m_type;
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    67
  buffer[1] = m_len;
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    68
  memcpy (buffer + 2, m_data, m_len);
1191
5583facf0af8 PacketSocketAddress serialization code was buggy.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1187
diff changeset
    69
  return m_len + 2;
1184
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    70
}
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    71
1191
5583facf0af8 PacketSocketAddress serialization code was buggy.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1187
diff changeset
    72
uint32_t
1184
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    73
Address::CopyFrom (const uint8_t *buffer, uint8_t len)
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
{
1169
b0aca73e1ea7 fix address deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
    75
  NS_ASSERT (len <= MAX_SIZE);
1159
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
    76
  memcpy (m_data, buffer, len);
1169
b0aca73e1ea7 fix address deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1166
diff changeset
    77
  m_len = len;
1191
5583facf0af8 PacketSocketAddress serialization code was buggy.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1187
diff changeset
    78
  return m_len;
1159
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
    79
}
1191
5583facf0af8 PacketSocketAddress serialization code was buggy.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1187
diff changeset
    80
uint32_t
1184
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    81
Address::CopyAllFrom (const uint8_t *buffer, uint8_t len)
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    82
{
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    83
  NS_ASSERT (len >= 2);
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    84
  m_type = buffer[0];
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    85
  m_len = buffer[1];
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    86
  NS_ASSERT (len >= m_len + 2);
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    87
  memcpy (m_data, buffer + 2, m_len);
1191
5583facf0af8 PacketSocketAddress serialization code was buggy.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1187
diff changeset
    88
  return m_len + 2;
1184
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    89
}
1159
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
    90
bool 
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
    91
Address::CheckCompatible (uint8_t type, uint8_t len) const
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
    92
{
1184
1da473c2225c extra Address API to be used by packet socket address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1169
diff changeset
    93
  NS_ASSERT (len <= MAX_SIZE);
1159
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
    94
  return m_len == len && (m_type == type || m_type == 0);
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
}
1191
5583facf0af8 PacketSocketAddress serialization code was buggy.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1187
diff changeset
    96
bool 
5583facf0af8 PacketSocketAddress serialization code was buggy.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1187
diff changeset
    97
Address::IsMatchingType (uint8_t type) const
5583facf0af8 PacketSocketAddress serialization code was buggy.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1187
diff changeset
    98
{
5583facf0af8 PacketSocketAddress serialization code was buggy.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1187
diff changeset
    99
  return m_type == type;
5583facf0af8 PacketSocketAddress serialization code was buggy.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1187
diff changeset
   100
}
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
uint8_t 
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
Address::Register (void)
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
  static uint8_t type = 1;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
  type++;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
  return type;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
}
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   109
2582
3e28107b870f rename old VALUE leftovers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2434
diff changeset
   110
ATTRIBUTE_HELPER_CPP (Address);
2413
85fae7abb9d9 add Value support to Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1262
diff changeset
   111
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   112
bool operator == (const Address &a, const Address &b)
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   113
{
2918
6244ea5e7831 Address instances of different m_type's should compare differently; closes #173.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2582
diff changeset
   114
  if (a.m_type != b.m_type)
6244ea5e7831 Address instances of different m_type's should compare differently; closes #173.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2582
diff changeset
   115
    {
6244ea5e7831 Address instances of different m_type's should compare differently; closes #173.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2582
diff changeset
   116
      return false;
6244ea5e7831 Address instances of different m_type's should compare differently; closes #173.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2582
diff changeset
   117
    }
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   118
  NS_ASSERT (a.GetLength() == b.GetLength());  
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   119
  return memcmp (a.m_data, b.m_data, a.m_len) == 0;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   120
}
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   121
bool operator != (const Address &a, const Address &b)
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   122
{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
  return !(a == b);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   124
}
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
bool operator < (const Address &a, const Address &b)
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
{
1159
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
   127
  NS_ASSERT (a.m_type == b.m_type  || 
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
   128
	     a.m_type == 0 || 
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
   129
	     b.m_type == 0);
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
  NS_ASSERT (a.GetLength() == b.GetLength());
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
  for (uint8_t i = 0; i < a.GetLength(); i++) 
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
    {
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
      if (a.m_data[i] < b.m_data[i]) 
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
	{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
	  return true;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
	} 
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   137
      else if (a.m_data[i] > b.m_data[i]) 
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   138
	{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   139
	  return false;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   140
	}
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   141
    }
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   142
  return false;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   143
}
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   144
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   145
std::ostream& operator<< (std::ostream& os, const Address & address)
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   146
{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   147
  if (address.m_len == 0) 
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   148
    {
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   149
      os << "NULL-ADDRESS";
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   150
      return os;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   151
    }
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   152
  os.setf (std::ios::hex, std::ios::basefield);
1262
8e3d39fa3565 fix trace output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1191
diff changeset
   153
  os.fill('0');
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   154
  for (uint8_t i=0; i < (address.m_len-1); i++) 
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   155
    {
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   156
      os << std::setw(2) << (uint32_t)address.m_data[i] << ":";
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   157
    }
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   158
  // Final byte not suffixed by ":"
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   159
  os << std::setw(2) << (uint32_t)address.m_data[address.m_len-1];
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   160
  os.setf (std::ios::dec, std::ios::basefield);
1262
8e3d39fa3565 fix trace output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1191
diff changeset
   161
  os.fill(' ');
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   162
  return os;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   163
}
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   164
2413
85fae7abb9d9 add Value support to Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1262
diff changeset
   165
std::istream& operator>> (std::istream& is, Address & address)
85fae7abb9d9 add Value support to Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1262
diff changeset
   166
{
85fae7abb9d9 add Value support to Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1262
diff changeset
   167
  // XXX: need to be able to parse this.
85fae7abb9d9 add Value support to Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1262
diff changeset
   168
  return is;
85fae7abb9d9 add Value support to Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1262
diff changeset
   169
}
85fae7abb9d9 add Value support to Address
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1262
diff changeset
   170
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   171
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   172
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   173
} // namespace ns3