src/network/utils/packet-socket.cc
author Peter D. Barnes, Jr. <barnes26@llnl.gov>
Fri, 03 Oct 2014 02:24:42 -0700
changeset 11085 6e4d08656d7c
parent 10968 2d29fee2b7b8
child 11238 96b5da288844
permissions -rw-r--r--
TracedCallback function signatures, the simple ones. These are TracedCallback function signatures for traces sources using a single argument.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7385
10beb0e53130 standardize emacs c++ mode comments
Vedran Miletić <rivanvx@gmail.com>
parents: 7256
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2007 Emmanuelle Laprise, INRIA
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 *
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 *
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * GNU General Public License for more details.
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 *
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 *
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 * Authors: Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
 */
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#include "packet-socket.h"
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include "packet-socket-address.h"
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
    24
#include "ns3/log.h"
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
#include "ns3/node.h"
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1505
diff changeset
    26
#include "ns3/packet.h"
3117
c8160bbb2085 Add SocketDefaults to store socket option attributes
Tom Henderson <tomh@tomh.org>
parents: 3112
diff changeset
    27
#include "ns3/uinteger.h"
3112
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
    28
#include "ns3/trace-source-accessor.h"
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
3219
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
    30
#include <algorithm>
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
    31
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10652
diff changeset
    32
namespace ns3 {
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10652
diff changeset
    34
NS_LOG_COMPONENT_DEFINE ("PacketSocket");
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
10652
dc18deba4502 [doxygen] Revert r10410, r10411, r10412
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10410
diff changeset
    36
NS_OBJECT_ENSURE_REGISTERED (PacketSocket);
6393
f7e1f9dfa08d ensure objects are regsitered
Josh Pelkey <jpelkey@gatech.edu>
parents: 6321
diff changeset
    37
3112
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
    38
TypeId
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
    39
PacketSocket::GetTypeId (void)
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
    40
{
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
    41
  static TypeId tid = TypeId ("ns3::PacketSocket")
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
    42
    .SetParent<Socket> ()
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
    43
    .AddConstructor<PacketSocket> ()
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
    44
    .AddTraceSource ("Drop", "Drop packet due to receive buffer overflow",
11085
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10968
diff changeset
    45
                     MakeTraceSourceAccessor (&PacketSocket::m_dropTrace),
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10968
diff changeset
    46
                     "ns3::Packet::TracedCallback")
3123
fae57a467d54 undo SocketDefaults class; plumb in new UdpSocket option attributes
Tom Henderson <tomh@tomh.org>
parents: 3122
diff changeset
    47
    .AddAttribute ("RcvBufSize",
fae57a467d54 undo SocketDefaults class; plumb in new UdpSocket option attributes
Tom Henderson <tomh@tomh.org>
parents: 3122
diff changeset
    48
                   "PacketSocket maximum receive buffer size (bytes)",
6197
ebe303de4725 Bug 835 - Unlimited receive queues in sockets == evil
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 4698
diff changeset
    49
                   UintegerValue (131072),
3123
fae57a467d54 undo SocketDefaults class; plumb in new UdpSocket option attributes
Tom Henderson <tomh@tomh.org>
parents: 3122
diff changeset
    50
                   MakeUintegerAccessor (&PacketSocket::m_rcvBufSize),
fae57a467d54 undo SocketDefaults class; plumb in new UdpSocket option attributes
Tom Henderson <tomh@tomh.org>
parents: 3122
diff changeset
    51
                   MakeUintegerChecker<uint32_t> ())
7182
5ecfee5d17de network coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6823
diff changeset
    52
  ;
3112
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
    53
  return tid;
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
    54
}
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
    55
3104
24d9d9aa0977 Implement GetRxAvailable ()
Tom Henderson <tomh@tomh.org>
parents: 3098
diff changeset
    56
PacketSocket::PacketSocket () : m_rxAvailable (0)
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
    58
  NS_LOG_FUNCTION (this);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
  m_state = STATE_OPEN;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
  m_shutdownSend = false;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
  m_shutdownRecv = false;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
  m_errno = ERROR_NOTERROR;
3778
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
    63
  m_isSingleDevice = false;
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
    64
  m_device = 0;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
2592
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1870
diff changeset
    67
void 
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1870
diff changeset
    68
PacketSocket::SetNode (Ptr<Node> node)
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1870
diff changeset
    69
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
    70
  NS_LOG_FUNCTION (this << node);
2592
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1870
diff changeset
    71
  m_node = node;
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1870
diff changeset
    72
}
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1870
diff changeset
    73
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
PacketSocket::~PacketSocket ()
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
    75
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
    76
  NS_LOG_FUNCTION (this);
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
    77
}
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
void 
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
PacketSocket::DoDispose (void)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
    82
  NS_LOG_FUNCTION (this);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
  m_device = 0;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
    86
enum Socket::SocketErrno
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
    87
PacketSocket::GetErrno (void) const
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
    88
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
    89
  NS_LOG_FUNCTION (this);
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
    90
  return m_errno;
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
    91
}
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
    92
6689
e2de571e920a Implement Socket::GetSocketType
Josh Pelkey <jpelkey@gatech.edu>
parents: 6448
diff changeset
    93
enum Socket::SocketType
e2de571e920a Implement Socket::GetSocketType
Josh Pelkey <jpelkey@gatech.edu>
parents: 6448
diff changeset
    94
PacketSocket::GetSocketType (void) const
e2de571e920a Implement Socket::GetSocketType
Josh Pelkey <jpelkey@gatech.edu>
parents: 6448
diff changeset
    95
{
9144
6a15c50388bc Clean up function logging of network module.
Maja Grubišić <maja.grubisic@live.com>
parents: 8702
diff changeset
    96
  NS_LOG_FUNCTION (this);
6692
591fb1aa0ca4 Avoid enum name collision in socket
Josh Pelkey <jpelkey@gatech.edu>
parents: 6689
diff changeset
    97
  return NS3_SOCK_RAW;
6689
e2de571e920a Implement Socket::GetSocketType
Josh Pelkey <jpelkey@gatech.edu>
parents: 6448
diff changeset
    98
}
e2de571e920a Implement Socket::GetSocketType
Josh Pelkey <jpelkey@gatech.edu>
parents: 6448
diff changeset
    99
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
Ptr<Node>
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
PacketSocket::GetNode (void) const
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   103
  NS_LOG_FUNCTION (this);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
  return m_node;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
int
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
PacketSocket::Bind (void)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   109
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   110
  NS_LOG_FUNCTION (this);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
  PacketSocketAddress address;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   112
  address.SetProtocol (0);
1195
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   113
  address.SetAllDevices ();
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   114
  return DoBind (address);
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   115
}
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
   116
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   117
int
7717
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   118
PacketSocket::Bind6 (void)
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   119
{
9144
6a15c50388bc Clean up function logging of network module.
Maja Grubišić <maja.grubisic@live.com>
parents: 8702
diff changeset
   120
  NS_LOG_FUNCTION (this);
7717
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   121
  return(Bind());
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   122
}
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   123
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   124
int
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
PacketSocket::Bind (const Address &address)
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
   126
{ 
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   127
  NS_LOG_FUNCTION (this << address);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
  if (!PacketSocketAddress::IsMatchingType (address))
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
      m_errno = ERROR_INVAL;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
  PacketSocketAddress ad = PacketSocketAddress::ConvertFrom (address);
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
  return DoBind (ad);
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   137
int
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   138
PacketSocket::DoBind (const PacketSocketAddress &address)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   139
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   140
  NS_LOG_FUNCTION (this << address);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   141
  if (m_state == STATE_BOUND ||
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   142
      m_state == STATE_CONNECTED)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   143
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   144
      m_errno = ERROR_INVAL;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   145
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   146
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   147
  if (m_state == STATE_CLOSED)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   148
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   149
      m_errno = ERROR_BADF;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   150
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   151
    }
7252
c8200621e252 rerun check-style.py with uncrustify-0.58
Tom Henderson <tomh@tomh.org>
parents: 7221
diff changeset
   152
  Ptr<NetDevice> dev;
1195
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   153
  if (address.IsSingleDevice ())
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   154
    {
3018
0ac9b895494d PacketSocket bind-to-interface bug
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2983
diff changeset
   155
      dev = m_node->GetDevice (address.GetSingleDevice ());
1195
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   156
    }
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   157
  else
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   158
    {
3018
0ac9b895494d PacketSocket bind-to-interface bug
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2983
diff changeset
   159
      dev = 0;
1195
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   160
    }
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   161
  m_node->RegisterProtocolHandler (MakeCallback (&PacketSocket::ForwardUp, this),
9218
2b1da90eb6a7 fix bug on previous commit
frederic.urbani@inria.fr
parents: 9216
diff changeset
   162
                                   address.GetProtocol (), dev);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   163
  m_state = STATE_BOUND;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   164
  m_protocol = address.GetProtocol ();
1195
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   165
  m_isSingleDevice = address.IsSingleDevice ();
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   166
  m_device = address.GetSingleDevice ();
9216
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   167
  m_boundnetdevice = dev;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
  return 0;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   171
int
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   172
PacketSocket::ShutdownSend (void)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   173
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   174
  NS_LOG_FUNCTION (this);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   175
  if (m_state == STATE_CLOSED)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   176
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   177
      m_errno = ERROR_BADF;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   178
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   179
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   180
  m_shutdownSend = true;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   181
  return 0;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   182
}
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
   183
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   184
int
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   185
PacketSocket::ShutdownRecv (void)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   186
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   187
  NS_LOG_FUNCTION (this);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
  if (m_state == STATE_CLOSED)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   190
      m_errno = ERROR_BADF;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   191
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   192
    }
4698
60cd412fa3dd fix for bug 650 (PacketSocket Close()
Duy Nguyen <dnlove@gmail.com>
parents: 4502
diff changeset
   193
  m_shutdownRecv = true;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   194
  return 0;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   195
}
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
   196
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   197
int
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7252
diff changeset
   198
PacketSocket::Close (void)
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   199
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   200
  NS_LOG_FUNCTION (this);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   201
  if (m_state == STATE_CLOSED)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   202
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   203
      m_errno = ERROR_BADF;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   204
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   205
    }
6321
7476f746ba5d bug 828: PacketSocket::Close does not unregister protocol handler
Quincy Tse <quincy.tse@gmail.com>
parents: 6197
diff changeset
   206
  else if (m_state == STATE_BOUND || m_state == STATE_CONNECTED)
7476f746ba5d bug 828: PacketSocket::Close does not unregister protocol handler
Quincy Tse <quincy.tse@gmail.com>
parents: 6197
diff changeset
   207
    {
7476f746ba5d bug 828: PacketSocket::Close does not unregister protocol handler
Quincy Tse <quincy.tse@gmail.com>
parents: 6197
diff changeset
   208
      m_node->UnregisterProtocolHandler (MakeCallback (&PacketSocket::ForwardUp, this));
7476f746ba5d bug 828: PacketSocket::Close does not unregister protocol handler
Quincy Tse <quincy.tse@gmail.com>
parents: 6197
diff changeset
   209
    }
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   210
  m_state = STATE_CLOSED;
4698
60cd412fa3dd fix for bug 650 (PacketSocket Close()
Duy Nguyen <dnlove@gmail.com>
parents: 4502
diff changeset
   211
  m_shutdownSend = true;
60cd412fa3dd fix for bug 650 (PacketSocket Close()
Duy Nguyen <dnlove@gmail.com>
parents: 4502
diff changeset
   212
  m_shutdownRecv = true;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   213
  return 0;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   214
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   215
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   216
int
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7252
diff changeset
   217
PacketSocket::Connect (const Address &ad)
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   218
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   219
  NS_LOG_FUNCTION (this << ad);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   220
  PacketSocketAddress address;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   221
  if (m_state == STATE_CLOSED)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   222
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   223
      m_errno = ERROR_BADF;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   224
      goto error;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   225
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   226
  if (m_state == STATE_OPEN)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   227
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   228
      // connect should happen _after_ bind.
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   229
      m_errno = ERROR_INVAL; // generic error condition.
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   230
      goto error;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   231
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   232
  if (m_state == STATE_CONNECTED)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   233
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   234
      m_errno = ERROR_ISCONN;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   235
      goto error;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   237
  if (!PacketSocketAddress::IsMatchingType (ad))
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   238
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   239
      m_errno = ERROR_AFNOSUPPORT;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   240
      goto error;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   241
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   242
  m_destAddr = ad;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   243
  m_state = STATE_CONNECTED;
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
   244
  NotifyConnectionSucceeded ();
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   245
  return 0;
7182
5ecfee5d17de network coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6823
diff changeset
   246
error:
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
   247
  NotifyConnectionFailed ();
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   248
  return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   249
}
3213
08a0424399fb bug 203: Listen must be implemented for Udp and Packet sockets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3123
diff changeset
   250
int 
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7252
diff changeset
   251
PacketSocket::Listen (void)
3213
08a0424399fb bug 203: Listen must be implemented for Udp and Packet sockets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3123
diff changeset
   252
{
9144
6a15c50388bc Clean up function logging of network module.
Maja Grubišić <maja.grubisic@live.com>
parents: 8702
diff changeset
   253
  NS_LOG_FUNCTION (this);
3213
08a0424399fb bug 203: Listen must be implemented for Udp and Packet sockets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3123
diff changeset
   254
  m_errno = Socket::ERROR_OPNOTSUPP;
08a0424399fb bug 203: Listen must be implemented for Udp and Packet sockets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3123
diff changeset
   255
  return -1;
08a0424399fb bug 203: Listen must be implemented for Udp and Packet sockets.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3123
diff changeset
   256
}
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   257
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   258
int
3269
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   259
PacketSocket::Send (Ptr<Packet> p, uint32_t flags)
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   260
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   261
  NS_LOG_FUNCTION (this << p << flags);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   262
  if (m_state == STATE_OPEN ||
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   263
      m_state == STATE_BOUND)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   264
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   265
      m_errno = ERROR_NOTCONN;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   266
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   267
    }
3269
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   268
  return SendTo (p, flags, m_destAddr);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   269
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   270
3219
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   271
uint32_t
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   272
PacketSocket::GetMinMtu (PacketSocketAddress ad) const
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   273
{
9144
6a15c50388bc Clean up function logging of network module.
Maja Grubišić <maja.grubisic@live.com>
parents: 8702
diff changeset
   274
  NS_LOG_FUNCTION (this << ad);
3219
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   275
  if (ad.IsSingleDevice ())
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   276
    {
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   277
      Ptr<NetDevice> device = m_node->GetDevice (ad.GetSingleDevice ());
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   278
      return device->GetMtu ();
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   279
    }
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   280
  else
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   281
    {
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   282
      uint32_t minMtu = 0xffff;
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   283
      for (uint32_t i = 0; i < m_node->GetNDevices (); i++)
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   284
        {
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   285
          Ptr<NetDevice> device = m_node->GetDevice (i);
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   286
          minMtu = std::min (minMtu, (uint32_t)device->GetMtu ());
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   287
        }
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   288
      return minMtu;
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   289
    }
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   290
}
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   291
3105
682950a37ea6 Add GetTxBuffer; add some socket options; make limited UDP receive buffer functional
Tom Henderson <tomh@tomh.org>
parents: 3104
diff changeset
   292
uint32_t 
682950a37ea6 Add GetTxBuffer; add some socket options; make limited UDP receive buffer functional
Tom Henderson <tomh@tomh.org>
parents: 3104
diff changeset
   293
PacketSocket::GetTxAvailable (void) const
682950a37ea6 Add GetTxBuffer; add some socket options; make limited UDP receive buffer functional
Tom Henderson <tomh@tomh.org>
parents: 3104
diff changeset
   294
{
9144
6a15c50388bc Clean up function logging of network module.
Maja Grubišić <maja.grubisic@live.com>
parents: 8702
diff changeset
   295
  NS_LOG_FUNCTION (this);
3219
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   296
  if (m_state == STATE_CONNECTED)
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   297
    {
7182
5ecfee5d17de network coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6823
diff changeset
   298
      PacketSocketAddress ad = PacketSocketAddress::ConvertFrom (m_destAddr);
3219
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   299
      return GetMinMtu (ad);
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   300
    }
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   301
  // If we are not connected, we return a 'safe' value by default.
3122
dfa83ab5172d improve send semantics, documentation
Tom Henderson <tomh@tomh.org>
parents: 3121
diff changeset
   302
  return 0xffff;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   303
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   304
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   305
int
3269
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   306
PacketSocket::SendTo (Ptr<Packet> p, uint32_t flags, const Address &address)
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   307
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   308
  NS_LOG_FUNCTION (this << p << flags << address);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   309
  PacketSocketAddress ad;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   310
  if (m_state == STATE_CLOSED)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   311
    {
1832
80654949d03b Add a few NS_LOG_LOGIC calls in PacketSocket::SendTo ()
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1505
diff changeset
   312
      NS_LOG_LOGIC ("ERROR_BADF");
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   313
      m_errno = ERROR_BADF;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   314
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   315
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   316
  if (m_shutdownSend)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   317
    {
1832
80654949d03b Add a few NS_LOG_LOGIC calls in PacketSocket::SendTo ()
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1505
diff changeset
   318
      NS_LOG_LOGIC ("ERROR_SHUTDOWN");
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   319
      m_errno = ERROR_SHUTDOWN;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   320
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   321
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   322
  if (!PacketSocketAddress::IsMatchingType (address))
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   323
    {
1832
80654949d03b Add a few NS_LOG_LOGIC calls in PacketSocket::SendTo ()
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1505
diff changeset
   324
      NS_LOG_LOGIC ("ERROR_AFNOSUPPORT");
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   325
      m_errno = ERROR_AFNOSUPPORT;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   326
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   327
    }
3219
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   328
  ad = PacketSocketAddress::ConvertFrom (address);
49dcb3f0bd34 bug 210: must take device mtu into account.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3218
diff changeset
   329
  if (p->GetSize () > GetMinMtu (ad))
3122
dfa83ab5172d improve send semantics, documentation
Tom Henderson <tomh@tomh.org>
parents: 3121
diff changeset
   330
    {
dfa83ab5172d improve send semantics, documentation
Tom Henderson <tomh@tomh.org>
parents: 3121
diff changeset
   331
      m_errno = ERROR_MSGSIZE;
dfa83ab5172d improve send semantics, documentation
Tom Henderson <tomh@tomh.org>
parents: 3121
diff changeset
   332
      return -1;
dfa83ab5172d improve send semantics, documentation
Tom Henderson <tomh@tomh.org>
parents: 3121
diff changeset
   333
    }
7182
5ecfee5d17de network coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6823
diff changeset
   334
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   335
  bool error = false;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   336
  Address dest = ad.GetPhysicalAddress ();
1195
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   337
  if (ad.IsSingleDevice ())
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   338
    {
1195
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   339
      Ptr<NetDevice> device = m_node->GetDevice (ad.GetSingleDevice ());
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   340
      if (!device->Send (p, dest, ad.GetProtocol ()))
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   341
        {
1832
80654949d03b Add a few NS_LOG_LOGIC calls in PacketSocket::SendTo ()
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1505
diff changeset
   342
          NS_LOG_LOGIC ("error: NetDevice::Send error");
1195
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   343
          error = true;
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   344
        }
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   345
    }
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   346
  else
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   347
    {
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   348
      for (uint32_t i = 0; i < m_node->GetNDevices (); i++)
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   349
        {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   350
          Ptr<NetDevice> device = m_node->GetDevice (i);
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   351
          if (!device->Send (p, dest, ad.GetProtocol ()))
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   352
            {
1832
80654949d03b Add a few NS_LOG_LOGIC calls in PacketSocket::SendTo ()
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1505
diff changeset
   353
              NS_LOG_LOGIC ("error: NetDevice::Send error");
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   354
              error = true;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   355
            }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   356
        }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   357
    }
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
   358
  if (!error)
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   359
    {
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1505
diff changeset
   360
      NotifyDataSent (p->GetSize ());
3776
362d7e1c12a6 Apply patch to fix bug 364
Craig Dowell <craigdo@ee.washington.edu>
parents: 3772
diff changeset
   361
      NotifySend (GetTxAvailable ());
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   362
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   363
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   364
  if (error)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   365
    {
1832
80654949d03b Add a few NS_LOG_LOGIC calls in PacketSocket::SendTo ()
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1505
diff changeset
   366
      NS_LOG_LOGIC ("ERROR_INVAL 2");
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   367
      m_errno = ERROR_INVAL;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   368
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   369
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   370
  else
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   371
    {
7755
0e50e485b38b fixed bug 1283: PacketSocket::SendTo should return number of bytes
Nicola Baldo <nbaldo@cttc.es>
parents: 7717
diff changeset
   372
      return p->GetSize ();
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   373
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   374
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   375
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   376
void 
3548
e5ab96db540e bug 273: constify packet pointers.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3448
diff changeset
   377
PacketSocket::ForwardUp (Ptr<NetDevice> device, Ptr<const Packet> packet, 
3448
0bd851bb1225 Simplify promiscuous mode API: NetDevices always operate in promiscuous mode, normal receive callbacks receive extra destination address and packet type.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3276
diff changeset
   378
                         uint16_t protocol, const Address &from,
0bd851bb1225 Simplify promiscuous mode API: NetDevices always operate in promiscuous mode, normal receive callbacks receive extra destination address and packet type.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3276
diff changeset
   379
                         const Address &to, NetDevice::PacketType packetType)
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   380
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   381
  NS_LOG_FUNCTION (this << device << packet << protocol << from << to << packetType);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   382
  if (m_shutdownRecv)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   383
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   384
      return;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   385
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   386
  PacketSocketAddress address;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   387
  address.SetPhysicalAddress (from);
1195
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   388
  address.SetSingleDevice (device->GetIfIndex ());
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   389
  address.SetProtocol (protocol);
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   390
3123
fae57a467d54 undo SocketDefaults class; plumb in new UdpSocket option attributes
Tom Henderson <tomh@tomh.org>
parents: 3122
diff changeset
   391
  if ((m_rxAvailable + packet->GetSize ()) <= m_rcvBufSize)
3112
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
   392
    {
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   393
      Ptr<Packet> copy = packet->Copy ();
9216
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   394
      DeviceNameTag dnt;
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   395
      dnt.SetDeviceName (device->GetTypeId ().GetName ());
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   396
      PacketSocketTag pst;
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   397
      pst.SetPacketType (packetType);
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   398
      pst.SetDestAddress (to);
3269
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   399
      SocketAddressTag tag;
3112
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
   400
      tag.SetAddress (address);
9216
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   401
      copy->AddPacketTag (tag); // Attach From Physical Address
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   402
      copy->AddPacketTag (pst); // Attach Packet Type and Dest Address
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   403
      copy->AddPacketTag (dnt); // Attach device source name
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   404
      m_deliveryQueue.push (copy);
3112
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
   405
      m_rxAvailable += packet->GetSize ();
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7252
diff changeset
   406
      NS_LOG_LOGIC ("UID is " << packet->GetUid () << " PacketSocket " << this);
3112
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
   407
      NotifyDataRecv ();
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
   408
    }
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
   409
  else
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
   410
    {
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
   411
      // In general, this case should not occur unless the
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
   412
      // receiving application reads data from this socket slowly
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
   413
      // in comparison to the arrival rate
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
   414
      //
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
   415
      // drop and trace packet
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
   416
      NS_LOG_WARN ("No receive buffer space available.  Drop.");
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
   417
      m_dropTrace (packet);
b5413dcad0c8 Enable receive buffer limit for packet socket
Tom Henderson <tomh@tomh.org>
parents: 3107
diff changeset
   418
    }
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   419
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   420
3269
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   421
uint32_t
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   422
PacketSocket::GetRxAvailable (void) const
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   423
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   424
  NS_LOG_FUNCTION (this);
3269
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   425
  // We separately maintain this state to avoid walking the queue 
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   426
  // every time this might be called
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   427
  return m_rxAvailable;
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   428
}
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   429
3097
1b1661bbfa33 Plumb in socket receive pull model, in parallel to existing Receive framework
Tom Henderson <tomh@tomh.org>
parents: 2983
diff changeset
   430
Ptr<Packet> 
1b1661bbfa33 Plumb in socket receive pull model, in parallel to existing Receive framework
Tom Henderson <tomh@tomh.org>
parents: 2983
diff changeset
   431
PacketSocket::Recv (uint32_t maxSize, uint32_t flags)
1b1661bbfa33 Plumb in socket receive pull model, in parallel to existing Receive framework
Tom Henderson <tomh@tomh.org>
parents: 2983
diff changeset
   432
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   433
  NS_LOG_FUNCTION (this << maxSize << flags);
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7252
diff changeset
   434
  if (m_deliveryQueue.empty () )
3098
d384d52f8f6e Cut over UDP applications to use the new receive API
Tom Henderson <tomh@tomh.org>
parents: 3097
diff changeset
   435
    {
d384d52f8f6e Cut over UDP applications to use the new receive API
Tom Henderson <tomh@tomh.org>
parents: 3097
diff changeset
   436
      return 0;
d384d52f8f6e Cut over UDP applications to use the new receive API
Tom Henderson <tomh@tomh.org>
parents: 3097
diff changeset
   437
    }
3097
1b1661bbfa33 Plumb in socket receive pull model, in parallel to existing Receive framework
Tom Henderson <tomh@tomh.org>
parents: 2983
diff changeset
   438
  Ptr<Packet> p = m_deliveryQueue.front ();
3104
24d9d9aa0977 Implement GetRxAvailable ()
Tom Henderson <tomh@tomh.org>
parents: 3098
diff changeset
   439
  if (p->GetSize () <= maxSize)
3098
d384d52f8f6e Cut over UDP applications to use the new receive API
Tom Henderson <tomh@tomh.org>
parents: 3097
diff changeset
   440
    {
d384d52f8f6e Cut over UDP applications to use the new receive API
Tom Henderson <tomh@tomh.org>
parents: 3097
diff changeset
   441
      m_deliveryQueue.pop ();
3104
24d9d9aa0977 Implement GetRxAvailable ()
Tom Henderson <tomh@tomh.org>
parents: 3098
diff changeset
   442
      m_rxAvailable -= p->GetSize ();
3098
d384d52f8f6e Cut over UDP applications to use the new receive API
Tom Henderson <tomh@tomh.org>
parents: 3097
diff changeset
   443
    }
d384d52f8f6e Cut over UDP applications to use the new receive API
Tom Henderson <tomh@tomh.org>
parents: 3097
diff changeset
   444
  else
d384d52f8f6e Cut over UDP applications to use the new receive API
Tom Henderson <tomh@tomh.org>
parents: 3097
diff changeset
   445
    {
d384d52f8f6e Cut over UDP applications to use the new receive API
Tom Henderson <tomh@tomh.org>
parents: 3097
diff changeset
   446
      p = 0;
d384d52f8f6e Cut over UDP applications to use the new receive API
Tom Henderson <tomh@tomh.org>
parents: 3097
diff changeset
   447
    }
3097
1b1661bbfa33 Plumb in socket receive pull model, in parallel to existing Receive framework
Tom Henderson <tomh@tomh.org>
parents: 2983
diff changeset
   448
  return p;
1b1661bbfa33 Plumb in socket receive pull model, in parallel to existing Receive framework
Tom Henderson <tomh@tomh.org>
parents: 2983
diff changeset
   449
}
1b1661bbfa33 Plumb in socket receive pull model, in parallel to existing Receive framework
Tom Henderson <tomh@tomh.org>
parents: 2983
diff changeset
   450
3269
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   451
Ptr<Packet>
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   452
PacketSocket::RecvFrom (uint32_t maxSize, uint32_t flags, Address &fromAddress)
3104
24d9d9aa0977 Implement GetRxAvailable ()
Tom Henderson <tomh@tomh.org>
parents: 3098
diff changeset
   453
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   454
  NS_LOG_FUNCTION (this << maxSize << flags << fromAddress);
3269
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   455
  Ptr<Packet> packet = Recv (maxSize, flags);
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   456
  if (packet != 0)
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   457
    {
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   458
      SocketAddressTag tag;
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   459
      bool found;
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   460
      found = packet->PeekPacketTag (tag);
3269
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   461
      NS_ASSERT (found);
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   462
      fromAddress = tag.GetAddress ();
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   463
    }
448134601b03 RecvFrom() expansion, add flags parameter to some Send calls
Tom Henderson <tomh@tomh.org>
parents: 3219
diff changeset
   464
  return packet;
3104
24d9d9aa0977 Implement GetRxAvailable ()
Tom Henderson <tomh@tomh.org>
parents: 3098
diff changeset
   465
}
24d9d9aa0977 Implement GetRxAvailable ()
Tom Henderson <tomh@tomh.org>
parents: 3098
diff changeset
   466
3778
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
   467
int
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
   468
PacketSocket::GetSockName (Address &address) const
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
   469
{
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3778
diff changeset
   470
  NS_LOG_FUNCTION (this << address);
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7252
diff changeset
   471
  PacketSocketAddress ad = PacketSocketAddress::ConvertFrom (address);
7182
5ecfee5d17de network coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6823
diff changeset
   472
3778
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
   473
  ad.SetProtocol (m_protocol);
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
   474
  if (m_isSingleDevice)
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
   475
    {
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
   476
      Ptr<NetDevice> device = m_node->GetDevice (ad.GetSingleDevice ());
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7252
diff changeset
   477
      ad.SetPhysicalAddress (device->GetAddress ());
3778
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
   478
      ad.SetSingleDevice (m_device);
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
   479
    }
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
   480
  else
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
   481
    {
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7252
diff changeset
   482
      ad.SetPhysicalAddress (Address ());
3778
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
   483
      ad.SetAllDevices ();
7182
5ecfee5d17de network coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6823
diff changeset
   484
    }
3778
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
   485
  address = ad;
7182
5ecfee5d17de network coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6823
diff changeset
   486
3778
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
   487
  return 0;
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
   488
}
78c4c41557f3 Liu's GetSockName patch
Craig Dowell <craigdo@ee.washington.edu>
parents: 3776
diff changeset
   489
6448
184a509cc71d Still Bug 943: fix UdpSocketImpl::GetAllowBroadcast, let Socket::SetAllowBroadcast return a bool indicating success/failure, instead of a fatal error.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6446
diff changeset
   490
bool
6437
c11291f51d57 Bug 943 - Add a SO_BROADCAST socket option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6393
diff changeset
   491
PacketSocket::SetAllowBroadcast (bool allowBroadcast)
c11291f51d57 Bug 943 - Add a SO_BROADCAST socket option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6393
diff changeset
   492
{
9144
6a15c50388bc Clean up function logging of network module.
Maja Grubišić <maja.grubisic@live.com>
parents: 8702
diff changeset
   493
  NS_LOG_FUNCTION (this << allowBroadcast);
6448
184a509cc71d Still Bug 943: fix UdpSocketImpl::GetAllowBroadcast, let Socket::SetAllowBroadcast return a bool indicating success/failure, instead of a fatal error.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6446
diff changeset
   494
  if (allowBroadcast)
184a509cc71d Still Bug 943: fix UdpSocketImpl::GetAllowBroadcast, let Socket::SetAllowBroadcast return a bool indicating success/failure, instead of a fatal error.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6446
diff changeset
   495
    {
184a509cc71d Still Bug 943: fix UdpSocketImpl::GetAllowBroadcast, let Socket::SetAllowBroadcast return a bool indicating success/failure, instead of a fatal error.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6446
diff changeset
   496
      return false;
184a509cc71d Still Bug 943: fix UdpSocketImpl::GetAllowBroadcast, let Socket::SetAllowBroadcast return a bool indicating success/failure, instead of a fatal error.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6446
diff changeset
   497
    }
184a509cc71d Still Bug 943: fix UdpSocketImpl::GetAllowBroadcast, let Socket::SetAllowBroadcast return a bool indicating success/failure, instead of a fatal error.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6446
diff changeset
   498
  return true;
6437
c11291f51d57 Bug 943 - Add a SO_BROADCAST socket option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6393
diff changeset
   499
}
c11291f51d57 Bug 943 - Add a SO_BROADCAST socket option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6393
diff changeset
   500
c11291f51d57 Bug 943 - Add a SO_BROADCAST socket option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6393
diff changeset
   501
bool
c11291f51d57 Bug 943 - Add a SO_BROADCAST socket option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6393
diff changeset
   502
PacketSocket::GetAllowBroadcast () const
c11291f51d57 Bug 943 - Add a SO_BROADCAST socket option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6393
diff changeset
   503
{
9144
6a15c50388bc Clean up function logging of network module.
Maja Grubišić <maja.grubisic@live.com>
parents: 8702
diff changeset
   504
  NS_LOG_FUNCTION (this);
6446
46365b8f28c8 PacketSocket should not report that it allows broadcast
Tom Henderson <tomh@tomh.org>
parents: 6437
diff changeset
   505
  return false;
6437
c11291f51d57 Bug 943 - Add a SO_BROADCAST socket option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6393
diff changeset
   506
}
c11291f51d57 Bug 943 - Add a SO_BROADCAST socket option
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6393
diff changeset
   507
9216
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   508
/***************************************************************
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   509
 *           PacketSocket Tags
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   510
 ***************************************************************/
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   511
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   512
PacketSocketTag::PacketSocketTag ()
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   513
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   514
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   515
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   516
void
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   517
PacketSocketTag::SetPacketType(NetDevice::PacketType t)
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   518
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   519
  m_packetType = t;
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   520
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   521
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   522
NetDevice::PacketType
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   523
PacketSocketTag::GetPacketType (void) const
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   524
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   525
  return m_packetType;
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   526
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   527
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   528
void
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   529
PacketSocketTag::SetDestAddress(Address a)
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   530
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   531
  m_destAddr = a;
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   532
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   533
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   534
Address
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   535
PacketSocketTag::GetDestAddress (void) const
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   536
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   537
  return m_destAddr;
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   538
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   539
10652
dc18deba4502 [doxygen] Revert r10410, r10411, r10412
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10410
diff changeset
   540
NS_OBJECT_ENSURE_REGISTERED (PacketSocketTag);
9216
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   541
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   542
TypeId
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   543
PacketSocketTag::GetTypeId (void)
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   544
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   545
  static TypeId tid = TypeId ("ns3::PacketSocketTag")
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   546
    .SetParent<Tag> ()
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   547
    .AddConstructor<PacketSocketTag> ()
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   548
  ;
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   549
  return tid;
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   550
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   551
TypeId
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   552
PacketSocketTag::GetInstanceTypeId (void) const
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   553
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   554
  return GetTypeId ();
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   555
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   556
uint32_t
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   557
PacketSocketTag::GetSerializedSize (void) const
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   558
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   559
  return  1 + m_destAddr.GetSerializedSize();
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   560
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   561
void
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   562
PacketSocketTag::Serialize (TagBuffer i) const
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   563
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   564
  i.WriteU8 (m_packetType);
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   565
  m_destAddr.Serialize (i);
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   566
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   567
void
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   568
PacketSocketTag::Deserialize (TagBuffer i)
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   569
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   570
  m_packetType = (NetDevice::PacketType) i.ReadU8 ();
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   571
  m_destAddr.Deserialize (i);
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   572
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   573
void
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   574
PacketSocketTag::Print (std::ostream &os) const
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   575
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   576
  os << "packetType=" << m_packetType;
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   577
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   578
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   579
/***************************************************************
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   580
 *           DeviceName Tags
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   581
 ***************************************************************/
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   582
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   583
DeviceNameTag::DeviceNameTag ()
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   584
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   585
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   586
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   587
void
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   588
DeviceNameTag::SetDeviceName (std::string n)
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   589
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   590
  if ( n.substr(0,5) == "ns3::" )
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   591
    {
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   592
      n = n.substr (5);
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   593
    }
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   594
  m_deviceName = n;
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   595
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   596
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   597
std::string
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   598
DeviceNameTag::GetDeviceName (void) const
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   599
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   600
  return m_deviceName;
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   601
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   602
10652
dc18deba4502 [doxygen] Revert r10410, r10411, r10412
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10410
diff changeset
   603
NS_OBJECT_ENSURE_REGISTERED (DeviceNameTag);
9216
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   604
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   605
TypeId
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   606
DeviceNameTag::GetTypeId (void)
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   607
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   608
  static TypeId tid = TypeId ("ns3::DeviceNameTag")
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   609
    .SetParent<Tag> ()
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   610
    .AddConstructor<DeviceNameTag> ();
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   611
  return tid;
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   612
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   613
TypeId
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   614
DeviceNameTag::GetInstanceTypeId (void) const
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   615
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   616
  return GetTypeId ();
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   617
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   618
uint32_t
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   619
DeviceNameTag::GetSerializedSize (void) const
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   620
{
9770
d9bc7131bb68 Use PacketTagList::TagData::MAX_SIZE in DeviceNameTag
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9218
diff changeset
   621
  uint32_t s = 1 + m_deviceName.size();  // +1 for name length field
d9bc7131bb68 Use PacketTagList::TagData::MAX_SIZE in DeviceNameTag
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9218
diff changeset
   622
  s = std::min (s, (uint32_t)PacketTagList::TagData::MAX_SIZE);
d9bc7131bb68 Use PacketTagList::TagData::MAX_SIZE in DeviceNameTag
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9218
diff changeset
   623
  return s;
9216
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   624
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   625
void
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   626
DeviceNameTag::Serialize (TagBuffer i) const
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   627
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   628
  const char *n = m_deviceName.c_str();
9770
d9bc7131bb68 Use PacketTagList::TagData::MAX_SIZE in DeviceNameTag
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9218
diff changeset
   629
  uint8_t l = (uint8_t) m_deviceName.size ();
9216
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   630
9770
d9bc7131bb68 Use PacketTagList::TagData::MAX_SIZE in DeviceNameTag
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9218
diff changeset
   631
  l = std::min ((uint32_t)l, (uint32_t)PacketTagList::TagData::MAX_SIZE - 1);
9216
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   632
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   633
  i.WriteU8 (l);
9770
d9bc7131bb68 Use PacketTagList::TagData::MAX_SIZE in DeviceNameTag
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9218
diff changeset
   634
  i.Write ( (uint8_t*) n , (uint32_t) l);
9216
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   635
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   636
void
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   637
DeviceNameTag::Deserialize (TagBuffer i)
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   638
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   639
  uint8_t l = i.ReadU8();
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   640
  char buf[256];
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   641
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   642
  i.Read ( (uint8_t* ) buf, (uint32_t) l);
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   643
  m_deviceName = std::string (buf, l);
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   644
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   645
void
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   646
DeviceNameTag::Print (std::ostream &os) const
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   647
{
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   648
  os << "DeviceName=" << m_deviceName;
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   649
}
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   650
a777dcd2f0bf Add some tags to packets passing through PacketSocket.
frederic.urbani@inria.fr
parents: 9144
diff changeset
   651
7386
2310ed220a61 standardize ns-3 namespace declaration format
Vedran Miletić <rivanvx@gmail.com>
parents: 7385
diff changeset
   652
} // namespace ns3