src/node/packet-socket.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Tue, 11 Mar 2008 13:30:12 -0700
changeset 2592 3ebf97150166
parent 1870 67b3d2dea3d5
child 2783 6c9853569bbf
permissions -rw-r--r--
get rid of CreateObjectWith
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
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"
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
    28
NS_LOG_COMPONENT_DEFINE ("PacketSocket");
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
namespace ns3 {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
2592
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1870
diff changeset
    32
PacketSocket::PacketSocket ()
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
    34
  NS_LOG_FUNCTION;
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
    35
  NS_LOG_FUNCTION;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
  m_state = STATE_OPEN;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
  m_shutdownSend = false;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
  m_shutdownRecv = false;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
  m_errno = ERROR_NOTERROR;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
2592
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1870
diff changeset
    42
void 
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1870
diff changeset
    43
PacketSocket::SetNode (Ptr<Node> node)
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1870
diff changeset
    44
{
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1870
diff changeset
    45
  m_node = node;
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1870
diff changeset
    46
}
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1870
diff changeset
    47
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
PacketSocket::~PacketSocket ()
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
    49
{
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
    50
  NS_LOG_FUNCTION;
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
    51
}
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
void 
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
PacketSocket::DoDispose (void)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
    56
  NS_LOG_FUNCTION;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
  m_device = 0;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
    60
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
    61
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
    62
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
    63
  NS_LOG_FUNCTION;
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
    64
  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
    65
}
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
    66
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
Ptr<Node>
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
PacketSocket::GetNode (void) const
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
    70
  NS_LOG_FUNCTION;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
  return m_node;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
int
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
PacketSocket::Bind (void)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
    77
  NS_LOG_FUNCTION;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
  PacketSocketAddress address;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
  address.SetProtocol (0);
1195
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
    80
  address.SetAllDevices ();
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
  return DoBind (address);
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
}
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
    83
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
int
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
PacketSocket::Bind (const Address &address)
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
    86
{ 
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
    87
  NS_LOG_FUNCTION;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    88
  if (!PacketSocketAddress::IsMatchingType (address))
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    89
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    90
      m_errno = ERROR_INVAL;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    92
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
  PacketSocketAddress ad = PacketSocketAddress::ConvertFrom (address);
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
  return DoBind (ad);
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
int
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
PacketSocket::DoBind (const PacketSocketAddress &address)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
   100
  NS_LOG_FUNCTION;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
  if (m_state == STATE_BOUND ||
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
      m_state == STATE_CONNECTED)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
      m_errno = ERROR_INVAL;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
      return -1;
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
  if (m_state == STATE_CLOSED)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   109
      m_errno = ERROR_BADF;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   110
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
    }
1195
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   112
  Ptr<NetDevice> dev ;
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   113
  if (address.IsSingleDevice ())
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   114
    {
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   115
      dev = 0;
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   116
    }
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   117
  else
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   118
    {
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   119
      m_node->GetDevice (address.GetSingleDevice ());
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   120
    }
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   121
  m_node->RegisterProtocolHandler (MakeCallback (&PacketSocket::ForwardUp, this),
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   122
                                   address.GetProtocol (), dev);
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
  m_state = STATE_BOUND;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   124
  m_protocol = address.GetProtocol ();
1195
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   125
  m_isSingleDevice = address.IsSingleDevice ();
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   126
  m_device = address.GetSingleDevice ();
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
  return 0;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
}
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
int
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
PacketSocket::ShutdownSend (void)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
   133
  NS_LOG_FUNCTION;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
  if (m_state == STATE_CLOSED)
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
      m_errno = ERROR_BADF;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   137
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   138
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   139
  m_shutdownSend = true;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   140
  return 0;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   141
}
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
   142
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   143
int
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   144
PacketSocket::ShutdownRecv (void)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   145
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
   146
  NS_LOG_FUNCTION;
1188
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
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   152
  m_shutdownRecv = false;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   153
  return 0;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   154
}
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
   155
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   156
int
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
   157
PacketSocket::Close(void)
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   158
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
   159
  NS_LOG_FUNCTION;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   160
  if (m_state == STATE_CLOSED)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   161
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   162
      m_errno = ERROR_BADF;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   163
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   164
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   165
  m_state = STATE_CLOSED;
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
   166
  NotifyCloseCompleted ();
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   167
  return 0;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
}
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
int
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
   171
PacketSocket::Connect(const Address &ad)
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   172
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
   173
  NS_LOG_FUNCTION;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   174
  PacketSocketAddress address;
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
      goto error;
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
  if (m_state == STATE_OPEN)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   181
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   182
      // connect should happen _after_ bind.
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   183
      m_errno = ERROR_INVAL; // generic error condition.
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   184
      goto error;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   185
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   186
  if (m_state == STATE_CONNECTED)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   187
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
      m_errno = ERROR_ISCONN;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
      goto error;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   190
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   191
  if (!PacketSocketAddress::IsMatchingType (ad))
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   192
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   193
      m_errno = ERROR_AFNOSUPPORT;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   194
      goto error;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   195
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   196
  m_destAddr = ad;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   197
  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
   198
  NotifyConnectionSucceeded ();
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   199
  return 0;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   200
 error:
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
   201
  NotifyConnectionFailed ();
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   202
  return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   203
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   204
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   205
int
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1505
diff changeset
   206
PacketSocket::Send (Ptr<Packet> p)
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   207
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
   208
  NS_LOG_FUNCTION;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   209
  if (m_state == STATE_OPEN ||
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   210
      m_state == STATE_BOUND)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   211
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   212
      m_errno = ERROR_NOTCONN;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   213
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   214
    }
1267
0ea5ae44f96b remove uint8_t * from the send path of the socket API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1264
diff changeset
   215
  return SendTo (m_destAddr, p);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   216
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   217
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   218
int
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1505
diff changeset
   219
PacketSocket::SendTo(const Address &address, Ptr<Packet> p)
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   220
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
   221
  NS_LOG_FUNCTION;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   222
  PacketSocketAddress ad;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   223
  if (m_state == STATE_CLOSED)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   224
    {
1832
80654949d03b Add a few NS_LOG_LOGIC calls in PacketSocket::SendTo ()
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1505
diff changeset
   225
      NS_LOG_LOGIC ("ERROR_BADF");
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   226
      m_errno = ERROR_BADF;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   227
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   228
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   229
  if (m_state == STATE_OPEN)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   230
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   231
      // XXX should return another error here.
1832
80654949d03b Add a few NS_LOG_LOGIC calls in PacketSocket::SendTo ()
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1505
diff changeset
   232
      NS_LOG_LOGIC ("ERROR_INVAL");
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   233
      m_errno = ERROR_INVAL;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   234
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   235
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
  if (m_shutdownSend)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   237
    {
1832
80654949d03b Add a few NS_LOG_LOGIC calls in PacketSocket::SendTo ()
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1505
diff changeset
   238
      NS_LOG_LOGIC ("ERROR_SHUTDOWN");
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   239
      m_errno = ERROR_SHUTDOWN;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   240
      return -1;
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
  if (!PacketSocketAddress::IsMatchingType (address))
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   243
    {
1832
80654949d03b Add a few NS_LOG_LOGIC calls in PacketSocket::SendTo ()
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1505
diff changeset
   244
      NS_LOG_LOGIC ("ERROR_AFNOSUPPORT");
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   245
      m_errno = ERROR_AFNOSUPPORT;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   246
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   247
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   248
  ad = PacketSocketAddress::ConvertFrom (address);
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   249
  
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   250
  bool error = false;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   251
  Address dest = ad.GetPhysicalAddress ();
1195
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   252
  if (ad.IsSingleDevice ())
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   253
    {
1195
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   254
      Ptr<NetDevice> device = m_node->GetDevice (ad.GetSingleDevice ());
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   255
      if (!device->Send (p, dest, ad.GetProtocol ()))
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   256
        {
1832
80654949d03b Add a few NS_LOG_LOGIC calls in PacketSocket::SendTo ()
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1505
diff changeset
   257
          NS_LOG_LOGIC ("error: NetDevice::Send error");
1195
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   258
          error = true;
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   259
        }
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   260
    }
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   261
  else
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   262
    {
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   263
      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
   264
        {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   265
          Ptr<NetDevice> device = m_node->GetDevice (i);
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   266
          if (!device->Send (p, dest, ad.GetProtocol ()))
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   267
            {
1832
80654949d03b Add a few NS_LOG_LOGIC calls in PacketSocket::SendTo ()
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1505
diff changeset
   268
              NS_LOG_LOGIC ("error: NetDevice::Send error");
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   269
              error = true;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   270
            }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   271
        }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   272
    }
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1195
diff changeset
   273
  if (!error)
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   274
    {
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1505
diff changeset
   275
      NotifyDataSent (p->GetSize ());
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   276
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   277
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   278
  if (error)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   279
    {
1832
80654949d03b Add a few NS_LOG_LOGIC calls in PacketSocket::SendTo ()
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1505
diff changeset
   280
      NS_LOG_LOGIC ("ERROR_INVAL 2");
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   281
      m_errno = ERROR_INVAL;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   282
      return -1;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   283
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   284
  else
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   285
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   286
      return 0;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   287
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   288
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   289
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   290
void 
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1505
diff changeset
   291
PacketSocket::ForwardUp (Ptr<NetDevice> device, Ptr<Packet> packet, 
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   292
                         uint16_t protocol, const Address &from)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   293
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1308
diff changeset
   294
  NS_LOG_FUNCTION;
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   295
  if (m_shutdownRecv)
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   296
    {
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   297
      return;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   298
    }
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   299
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   300
  PacketSocketAddress address;
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   301
  address.SetPhysicalAddress (from);
1195
53f1175dbe94 fix tracing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1188
diff changeset
   302
  address.SetSingleDevice (device->GetIfIndex ());
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   303
  address.SetProtocol (protocol);
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   304
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1505
diff changeset
   305
  NS_LOG_LOGIC ("UID is " << packet->GetUid() << " PacketSocket " << this);
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1505
diff changeset
   306
  NotifyDataReceived (packet, address);
1188
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   307
}
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   308
34386185bc1f a packet socket
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   309
}//namespace ns3