src/node/inet6-socket-address.cc
author Lalith Suresh <suresh.lalith@gmail.com>
Sun, 18 Jul 2010 13:29:13 +0530
changeset 6339 366418369bda
parent 5217 8a9dbc333e76
permissions -rw-r--r--
Click now handles all packets pertaining to Mac High models
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3852
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
     2
/*
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
     3
 * Copyright (c) 2007-2008 Louis Pasteur University
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
     4
 *
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
     7
 * published by the Free Software Foundation;
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
     8
 *
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    12
 * GNU General Public License for more details.
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    13
 *
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    17
 *
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    18
 * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    19
 */
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    20
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    21
#include "ns3/assert.h"
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    22
5217
8a9dbc333e76 Export more IPv6 includes.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 4731
diff changeset
    23
#include "inet6-socket-address.h"
8a9dbc333e76 Export more IPv6 includes.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 4731
diff changeset
    24
8a9dbc333e76 Export more IPv6 includes.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 4731
diff changeset
    25
namespace ns3
8a9dbc333e76 Export more IPv6 includes.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 4731
diff changeset
    26
{
3852
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    27
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    28
Inet6SocketAddress::Inet6SocketAddress (Ipv6Address ipv6, uint16_t port)
4731
510db8599bfb second phase of IPv6 checkins from Univ. of Strasbourg team
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3852
diff changeset
    29
  : m_ipv6(ipv6),
3852
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    30
  m_port(port)
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    31
{
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    32
}
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    33
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    34
Inet6SocketAddress::Inet6SocketAddress (Ipv6Address ipv6)
4731
510db8599bfb second phase of IPv6 checkins from Univ. of Strasbourg team
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3852
diff changeset
    35
  : m_ipv6(ipv6),
3852
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    36
  m_port(0)
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    37
{
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    38
}
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    39
4731
510db8599bfb second phase of IPv6 checkins from Univ. of Strasbourg team
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3852
diff changeset
    40
Inet6SocketAddress::Inet6SocketAddress (const char* ipv6, uint16_t port)
510db8599bfb second phase of IPv6 checkins from Univ. of Strasbourg team
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3852
diff changeset
    41
  : m_ipv6(Ipv6Address(ipv6)),
3852
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    42
  m_port(port)
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    43
{
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    44
}
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    45
4731
510db8599bfb second phase of IPv6 checkins from Univ. of Strasbourg team
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3852
diff changeset
    46
Inet6SocketAddress::Inet6SocketAddress (const char* ipv6)
510db8599bfb second phase of IPv6 checkins from Univ. of Strasbourg team
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3852
diff changeset
    47
  : m_ipv6(Ipv6Address(ipv6)),
3852
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    48
  m_port(0)
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    49
{
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    50
}
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    51
4731
510db8599bfb second phase of IPv6 checkins from Univ. of Strasbourg team
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3852
diff changeset
    52
Inet6SocketAddress::Inet6SocketAddress (uint16_t port)
510db8599bfb second phase of IPv6 checkins from Univ. of Strasbourg team
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3852
diff changeset
    53
  : m_ipv6(Ipv6Address::GetAny()),
3852
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    54
  m_port(port)
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    55
{
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    56
}
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    57
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    58
uint16_t Inet6SocketAddress::GetPort (void) const
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    59
{
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    60
  return m_port;
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    61
}
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    62
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    63
void Inet6SocketAddress::SetPort (uint16_t port)
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    64
{
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    65
  m_port=port;
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    66
}
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    67
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    68
Ipv6Address Inet6SocketAddress::GetIpv6 (void) const
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    69
{
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    70
  return m_ipv6;
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    71
}
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    72
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    73
void Inet6SocketAddress::SetIpv6 (Ipv6Address ipv6)
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    74
{
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    75
  m_ipv6=ipv6;
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    76
}
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    77
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    78
bool Inet6SocketAddress::IsMatchingType (const Address &addr)
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    79
{
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    80
  return addr.CheckCompatible(GetType(), 18); /* 16 (address) + 2  (port) */
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    81
}
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    82
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    83
Inet6SocketAddress::operator Address (void) const
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    84
{
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    85
  return ConvertTo();
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    86
}
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    87
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    88
Address Inet6SocketAddress::ConvertTo (void) const
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    89
{
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    90
  uint8_t buf[18];
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    91
  m_ipv6.Serialize(buf);
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    92
  buf[16]=m_port & 0xff;
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    93
  buf[17]=(m_port >> 8) &0xff;
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    94
  return Address(GetType(), buf, 18);
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    95
}
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    96
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    97
Inet6SocketAddress Inet6SocketAddress::ConvertFrom (const Address &addr)
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    98
{
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
    99
  NS_ASSERT(addr.CheckCompatible(GetType(), 18));
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
   100
  uint8_t buf[18];
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
   101
  addr.CopyTo(buf);
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
   102
  Ipv6Address ipv6=Ipv6Address::Deserialize(buf);
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
   103
  uint16_t port= buf[16] | (buf[17] << 8);
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
   104
  return Inet6SocketAddress(ipv6, port);
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
   105
}
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
   106
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
   107
uint8_t Inet6SocketAddress::GetType (void)
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
   108
{
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
   109
  static uint8_t type=Address::Register();
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
   110
  return type;
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
   111
}
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
   112
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
   113
} /* namespace ns3 */
9cf7ad0cac85 Initial IPv6 capability
vincent@clarinet.u-strasbg.fr
parents:
diff changeset
   114