src/internet-node/udp-socket.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon, 31 Mar 2008 14:56:41 -0700
changeset 2834 1aab57845b07
parent 2828 2344451f63c9
child 2912 843e6218834f
child 2983 e3a416fe9dd5
permissions -rw-r--r--
remove 'All rigts reserved' keyword per tom's suggestion
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2007 INRIA
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 *
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 *
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * GNU General Public License for more details.
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 *
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 *
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 */
1429
31cb0668defd debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents: 1270
diff changeset
    20
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
    21
#include "ns3/log.h"
729
b5e744285e92 rename i-node to node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 728
diff changeset
    22
#include "ns3/node.h"
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1164
diff changeset
    23
#include "ns3/inet-socket-address.h"
1317
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
    24
#include "ns3/ipv4-route.h"
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
    25
#include "ns3/ipv4.h"
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
#include "udp-socket.h"
741
38ebb2fb16f5 udp.h -> udp-l4-protocol.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 729
diff changeset
    27
#include "udp-l4-protocol.h"
495
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
    28
#include "ipv4-end-point.h"
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
#include "ipv4-l4-demux.h"
1434
2b63aafb050b set source address in socket
Craig Dowell <craigdo@ee.washington.edu>
parents: 1429
diff changeset
    30
#include "ns3/ipv4.h"
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
    32
NS_LOG_COMPONENT_DEFINE ("UdpSocket");
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
namespace ns3 {
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
2592
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2574
diff changeset
    36
UdpSocket::UdpSocket ()
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
  : m_endPoint (0),
2592
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2574
diff changeset
    38
    m_node (0),
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2574
diff changeset
    39
    m_udp (0),
646
f7475a7c5ae6 Rename the SocketErrno enumeration values, from ESOMETHING to ERROR_SOMETHING, to avoid conflict with errno #define's; fixes compilation in mingw32.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 607
diff changeset
    40
    m_errno (ERROR_NOTERROR),
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
    m_shutdownSend (false),
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
    m_shutdownRecv (false),
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
    m_connected (false)
1429
31cb0668defd debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents: 1270
diff changeset
    44
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
    45
  NS_LOG_FUNCTION;
1429
31cb0668defd debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents: 1270
diff changeset
    46
}
31cb0668defd debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents: 1270
diff changeset
    47
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
UdpSocket::~UdpSocket ()
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
    50
  NS_LOG_FUNCTION;
1429
31cb0668defd debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents: 1270
diff changeset
    51
557
927a5bb6432a convert UdpSocket and Udp to Ptr<Node>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 524
diff changeset
    52
  m_node = 0;
515
e907146a191e fix valgrind warning: UdpSocket must manage carefully its Ipv4EndPoint to avoid double deleting it.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 503
diff changeset
    53
  if (m_endPoint != 0)
e907146a191e fix valgrind warning: UdpSocket must manage carefully its Ipv4EndPoint to avoid double deleting it.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 503
diff changeset
    54
    {
e907146a191e fix valgrind warning: UdpSocket must manage carefully its Ipv4EndPoint to avoid double deleting it.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 503
diff changeset
    55
      NS_ASSERT (m_udp != 0);
e907146a191e fix valgrind warning: UdpSocket must manage carefully its Ipv4EndPoint to avoid double deleting it.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 503
diff changeset
    56
      /**
e907146a191e fix valgrind warning: UdpSocket must manage carefully its Ipv4EndPoint to avoid double deleting it.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 503
diff changeset
    57
       * Note that this piece of code is a bit tricky:
e907146a191e fix valgrind warning: UdpSocket must manage carefully its Ipv4EndPoint to avoid double deleting it.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 503
diff changeset
    58
       * when DeAllocate is called, it will call into
e907146a191e fix valgrind warning: UdpSocket must manage carefully its Ipv4EndPoint to avoid double deleting it.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 503
diff changeset
    59
       * Ipv4EndPointDemux::Deallocate which triggers
e907146a191e fix valgrind warning: UdpSocket must manage carefully its Ipv4EndPoint to avoid double deleting it.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 503
diff changeset
    60
       * a delete of the associated endPoint which triggers
e907146a191e fix valgrind warning: UdpSocket must manage carefully its Ipv4EndPoint to avoid double deleting it.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 503
diff changeset
    61
       * in turn a call to the method ::Destroy below
e907146a191e fix valgrind warning: UdpSocket must manage carefully its Ipv4EndPoint to avoid double deleting it.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 503
diff changeset
    62
       * will will zero the m_endPoint field.
e907146a191e fix valgrind warning: UdpSocket must manage carefully its Ipv4EndPoint to avoid double deleting it.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 503
diff changeset
    63
       */
e907146a191e fix valgrind warning: UdpSocket must manage carefully its Ipv4EndPoint to avoid double deleting it.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 503
diff changeset
    64
      NS_ASSERT (m_endPoint != 0);
e907146a191e fix valgrind warning: UdpSocket must manage carefully its Ipv4EndPoint to avoid double deleting it.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 503
diff changeset
    65
      m_udp->DeAllocate (m_endPoint);
e907146a191e fix valgrind warning: UdpSocket must manage carefully its Ipv4EndPoint to avoid double deleting it.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 503
diff changeset
    66
      NS_ASSERT (m_endPoint == 0);
e907146a191e fix valgrind warning: UdpSocket must manage carefully its Ipv4EndPoint to avoid double deleting it.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 503
diff changeset
    67
    }
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 557
diff changeset
    68
  m_udp = 0;
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
}
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
2592
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2574
diff changeset
    71
void 
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2574
diff changeset
    72
UdpSocket::SetNode (Ptr<Node> node)
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2574
diff changeset
    73
{
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2574
diff changeset
    74
  m_node = node;
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2574
diff changeset
    75
}
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2574
diff changeset
    76
void 
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2574
diff changeset
    77
UdpSocket::SetUdp (Ptr<UdpL4Protocol> udp)
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2574
diff changeset
    78
{
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2574
diff changeset
    79
  m_udp = udp;
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2574
diff changeset
    80
}
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2574
diff changeset
    81
3ebf97150166 get rid of CreateObjectWith
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2574
diff changeset
    82
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1186
diff changeset
    83
enum Socket::SocketErrno
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1186
diff changeset
    84
UdpSocket::GetErrno (void) const
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1186
diff changeset
    85
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
    86
  NS_LOG_FUNCTION;
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1186
diff changeset
    87
  return m_errno;
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1186
diff changeset
    88
}
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1186
diff changeset
    89
728
95c426b1cb60 rename INode to Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 646
diff changeset
    90
Ptr<Node>
95c426b1cb60 rename INode to Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 646
diff changeset
    91
UdpSocket::GetNode (void) const
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    92
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
    93
  NS_LOG_FUNCTION;
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
  return m_node;
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
}
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
495
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
    97
void 
496
894c8380d57b use Dispose more extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 495
diff changeset
    98
UdpSocket::Destroy (void)
495
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
    99
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   100
  NS_LOG_FUNCTION;
557
927a5bb6432a convert UdpSocket and Udp to Ptr<Node>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 524
diff changeset
   101
  m_node = 0;
495
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
   102
  m_endPoint = 0;
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 557
diff changeset
   103
  m_udp = 0;
495
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
   104
}
1429
31cb0668defd debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents: 1270
diff changeset
   105
495
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
   106
int
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
   107
UdpSocket::FinishBind (void)
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
   108
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   109
  NS_LOG_FUNCTION;
495
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
   110
  if (m_endPoint == 0)
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
   111
    {
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
   112
      return -1;
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
   113
    }
1182
2625b52217a7 I wonder what the point of that code was: why should you test for zero _after_ using the pointer ? It needs to be tested _before_.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1172
diff changeset
   114
  m_endPoint->SetRxCallback (MakeCallback (&UdpSocket::ForwardUp, this));
2625b52217a7 I wonder what the point of that code was: why should you test for zero _after_ using the pointer ? It needs to be tested _before_.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1172
diff changeset
   115
  m_endPoint->SetDestroyCallback (MakeCallback (&UdpSocket::Destroy, this));
495
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
   116
  return 0;
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
   117
}
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
   118
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   119
int
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   120
UdpSocket::Bind (void)
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   121
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   122
  NS_LOG_FUNCTION;
499
8a469663f7ea implement properly the refcounting rules for the capability getters
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 496
diff changeset
   123
  m_endPoint = m_udp->Allocate ();
495
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
   124
  return FinishBind ();
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
}
1429
31cb0668defd debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents: 1270
diff changeset
   126
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
int 
1162
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   128
UdpSocket::Bind (const Address &address)
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   130
  NS_LOG_FUNCTION;
1828
6ab68edddf45 nicer logging of parameters (bug 79 patch from Gustavo)
Tom Henderson <tomh@tomh.org>
parents: 1704
diff changeset
   131
  NS_LOG_PARAMS (this << address);
1429
31cb0668defd debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents: 1270
diff changeset
   132
1172
2e5b994330c7 add InetSocketAddress::IsMatchingType and use it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1171
diff changeset
   133
  if (!InetSocketAddress::IsMatchingType (address))
2e5b994330c7 add InetSocketAddress::IsMatchingType and use it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1171
diff changeset
   134
    {
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   135
      NS_LOG_ERROR ("Not IsMatchingType");
1172
2e5b994330c7 add InetSocketAddress::IsMatchingType and use it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1171
diff changeset
   136
      return ERROR_INVAL;
2e5b994330c7 add InetSocketAddress::IsMatchingType and use it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1171
diff changeset
   137
    }
1207
a9f3610bbffa remove implicit conversion from Address to Eui48Address, to Ipv4Address and to InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1204
diff changeset
   138
  InetSocketAddress transport = InetSocketAddress::ConvertFrom (address);
1162
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   139
  Ipv4Address ipv4 = transport.GetIpv4 ();
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   140
  uint16_t port = transport.GetPort ();
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   141
  if (ipv4 == Ipv4Address::GetAny () && port == 0)
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   142
    {
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   143
      m_endPoint = m_udp->Allocate ();
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   144
    }
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   145
  else if (ipv4 == Ipv4Address::GetAny () && port != 0)
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   146
    {
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   147
      m_endPoint = m_udp->Allocate (port);
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   148
    }
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   149
  else if (ipv4 != Ipv4Address::GetAny () && port == 0)
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   150
    {
2608
408589d1dfff merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2600
diff changeset
   151
      m_endPoint = m_udp->Allocate (ipv4);
1162
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   152
    }
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   153
  else if (ipv4 != Ipv4Address::GetAny () && port != 0)
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   154
    {
2608
408589d1dfff merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2600
diff changeset
   155
      m_endPoint = m_udp->Allocate (ipv4, port);
1162
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   156
    }
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   157
495
a839408950b9 rework the socket/udp layer to remove the Ipv4EndPointDemux template
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 487
diff changeset
   158
  return FinishBind ();
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   159
}
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   160
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   161
int 
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   162
UdpSocket::ShutdownSend (void)
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   163
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   164
  NS_LOG_FUNCTION;
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   165
  m_shutdownSend = true;
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   166
  return 0;
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   167
}
1429
31cb0668defd debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents: 1270
diff changeset
   168
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
int 
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
UdpSocket::ShutdownRecv (void)
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   171
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   172
  NS_LOG_FUNCTION;
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   173
  m_shutdownRecv = false;
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   174
  return 0;
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   175
}
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   176
1186
909e9eb2124e rework the NetDevice <-> Node interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1182
diff changeset
   177
int
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1186
diff changeset
   178
UdpSocket::Close(void)
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   179
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   180
  NS_LOG_FUNCTION;
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1186
diff changeset
   181
  NotifyCloseCompleted ();
1186
909e9eb2124e rework the NetDevice <-> Node interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1182
diff changeset
   182
  return 0;
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   183
}
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1186
diff changeset
   184
1186
909e9eb2124e rework the NetDevice <-> Node interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1182
diff changeset
   185
int
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1186
diff changeset
   186
UdpSocket::Connect(const Address & address)
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   187
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   188
  NS_LOG_FUNCTION;
1828
6ab68edddf45 nicer logging of parameters (bug 79 patch from Gustavo)
Tom Henderson <tomh@tomh.org>
parents: 1704
diff changeset
   189
  NS_LOG_PARAMS (this << address);
1317
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   190
  Ipv4Route routeToDest;
1207
a9f3610bbffa remove implicit conversion from Address to Eui48Address, to Ipv4Address and to InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1204
diff changeset
   191
  InetSocketAddress transport = InetSocketAddress::ConvertFrom (address);
1162
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   192
  m_defaultAddress = transport.GetIpv4 ();
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   193
  m_defaultPort = transport.GetPort ();
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1186
diff changeset
   194
  NotifyConnectionSucceeded ();
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   195
  m_connected = true;
1434
2b63aafb050b set source address in socket
Craig Dowell <craigdo@ee.washington.edu>
parents: 1429
diff changeset
   196
1186
909e9eb2124e rework the NetDevice <-> Node interface
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1182
diff changeset
   197
  return 0;
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   198
}
1317
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   199
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   200
int 
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   201
UdpSocket::Send (Ptr<Packet> p)
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   202
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   203
  NS_LOG_FUNCTION;
1870
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1828 1867
diff changeset
   204
  NS_LOG_PARAMS (this << p);
1429
31cb0668defd debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents: 1270
diff changeset
   205
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   206
  if (!m_connected)
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   207
    {
646
f7475a7c5ae6 Rename the SocketErrno enumeration values, from ESOMETHING to ERROR_SOMETHING, to avoid conflict with errno #define's; fixes compilation in mingw32.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 607
diff changeset
   208
      m_errno = ERROR_NOTCONN;
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   209
      return -1;
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   210
    }
1317
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   211
  return DoSend (p);
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   212
}
1317
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   213
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   214
int 
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   215
UdpSocket::DoSend (Ptr<Packet> p)
1317
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   216
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   217
  NS_LOG_FUNCTION;
1317
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   218
  if (m_endPoint == 0)
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   219
    {
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   220
      if (Bind () == -1)
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   221
       {
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   222
          NS_ASSERT (m_endPoint == 0);
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   223
         return -1;
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   224
       }
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   225
      NS_ASSERT (m_endPoint != 0);
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   226
    }
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   227
  if (m_shutdownSend)
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   228
    {
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   229
      m_errno = ERROR_SHUTDOWN;
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   230
      return -1;
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   231
    } 
1318
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   232
  
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   233
  return DoSendTo (p, m_defaultAddress, m_defaultPort);
1317
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   234
}
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   235
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
int
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   237
UdpSocket::DoSendTo (Ptr<Packet> p, const Address &address)
1162
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   238
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   239
  NS_LOG_FUNCTION;
1870
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1828 1867
diff changeset
   240
  NS_LOG_PARAMS (this << p << address);
1449
df86e6b876ef merge with trunk
Craig Dowell <craigdo@ee.washington.edu>
parents: 1440 1318
diff changeset
   241
1318
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   242
  if (!m_connected)
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   243
    {
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   244
      NS_LOG_LOGIC ("Not connected");
1318
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   245
      InetSocketAddress transport = InetSocketAddress::ConvertFrom (address);
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   246
      Ipv4Address ipv4 = transport.GetIpv4 ();
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   247
      uint16_t port = transport.GetPort ();
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   248
      return DoSendTo (p, ipv4, port);
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   249
    }
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   250
  else
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   251
    {
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   252
      // connected UDP socket must use default addresses
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   253
      NS_LOG_LOGIC ("Connected");
1318
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   254
      return DoSendTo (p, m_defaultAddress, m_defaultPort);
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   255
    }
1162
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   256
}
1429
31cb0668defd debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents: 1270
diff changeset
   257
1162
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   258
int
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   259
UdpSocket::DoSendTo (Ptr<Packet> p, Ipv4Address dest, uint16_t port)
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   260
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   261
  NS_LOG_FUNCTION;
1870
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1828 1867
diff changeset
   262
  NS_LOG_PARAMS (this << p << dest << port);
1429
31cb0668defd debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents: 1270
diff changeset
   263
1318
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   264
  Ipv4Route routeToDest;
1449
df86e6b876ef merge with trunk
Craig Dowell <craigdo@ee.washington.edu>
parents: 1440 1318
diff changeset
   265
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   266
  if (m_endPoint == 0)
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   267
    {
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   268
      if (Bind () == -1)
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   269
	{
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   270
          NS_ASSERT (m_endPoint == 0);
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   271
	  return -1;
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   272
	}
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   273
      NS_ASSERT (m_endPoint != 0);
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   274
    }
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   275
  if (m_shutdownSend)
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   276
    {
646
f7475a7c5ae6 Rename the SocketErrno enumeration values, from ESOMETHING to ERROR_SOMETHING, to avoid conflict with errno #define's; fixes compilation in mingw32.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 607
diff changeset
   277
      m_errno = ERROR_SHUTDOWN;
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   278
      return -1;
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   279
    }
1452
973c456d3684 socket update broke multicast
Craig Dowell <craigdo@ee.washington.edu>
parents: 1450
diff changeset
   280
973c456d3684 socket update broke multicast
Craig Dowell <craigdo@ee.washington.edu>
parents: 1450
diff changeset
   281
  uint32_t localIfIndex;
2257
71a58e70c671 QueryInterface -> GetObject
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2231
diff changeset
   282
  Ptr<Ipv4> ipv4 = m_node->GetObject<Ipv4> ();
1452
973c456d3684 socket update broke multicast
Craig Dowell <craigdo@ee.washington.edu>
parents: 1450
diff changeset
   283
1318
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   284
  //
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   285
  // If dest is sent to the limited broadcast address (all ones),
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   286
  // convert it to send a copy of the packet out of every interface
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   287
  //
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   288
  if (dest.IsBroadcast ())
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   289
    {
2299
0b9193f38f18 Some more udp socket debug messages
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2257
diff changeset
   290
      NS_LOG_LOGIC ("Limited broadcast start.");
1318
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   291
      for (uint32_t i = 0; i < ipv4->GetNInterfaces (); i++ )
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   292
        {
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   293
          Ipv4Address addri = ipv4->GetAddress (i);
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   294
          Ipv4Mask maski = ipv4->GetNetworkMask (i);
2299
0b9193f38f18 Some more udp socket debug messages
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2257
diff changeset
   295
          Ipv4Address bcast = addri.GetSubnetDirectedBroadcast (maski);
2305
518187ed457c Backed out changeset 055ff23aa034 (Tom does not like it turns out OLSR does not need it)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2300
diff changeset
   296
          NS_LOG_LOGIC ("Sending one copy from " << addri << " to " << bcast
2299
0b9193f38f18 Some more udp socket debug messages
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2257
diff changeset
   297
                        << " (mask is " << maski << ")");
2305
518187ed457c Backed out changeset 055ff23aa034 (Tom does not like it turns out OLSR does not need it)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2300
diff changeset
   298
          m_udp->Send (p->Copy (), addri, bcast,
1318
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   299
                       m_endPoint->GetLocalPort (), port);
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   300
          NotifyDataSent (p->GetSize ());
1318
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   301
        }
2299
0b9193f38f18 Some more udp socket debug messages
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2257
diff changeset
   302
      NS_LOG_LOGIC ("Limited broadcast end.");
1318
89b78e2d521e Fix for bug69: set local address correctly upon UDP connect; apply correct UDP connect() semantics (that sendto cannot override addresses on a connected socket); if destination is IPv4 limited broadcast address, convert to subnet-directed broadcast and send out on each interface; provide example csma-broadcast.cc script
Tom Henderson <tomh@tomh.org>
parents: 1317
diff changeset
   303
    }
1452
973c456d3684 socket update broke multicast
Craig Dowell <craigdo@ee.washington.edu>
parents: 1450
diff changeset
   304
  else if (ipv4->GetIfIndexForDestination(dest, localIfIndex))
1317
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   305
    {
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   306
      NS_LOG_LOGIC ("Route exists");
2305
518187ed457c Backed out changeset 055ff23aa034 (Tom does not like it turns out OLSR does not need it)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2300
diff changeset
   307
      m_udp->Send (p, ipv4->GetAddress (localIfIndex), dest,
1162
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   308
		   m_endPoint->GetLocalPort (), port);
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   309
      NotifyDataSent (p->GetSize ());
1317
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   310
      return 0;
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   311
    }
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   312
  else
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   313
   {
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   314
      NS_LOG_ERROR ("ERROR_NOROUTETOHOST");
1317
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   315
      m_errno = ERROR_NOROUTETOHOST;
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   316
      return -1;
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   317
   }
1440
c77745b2731c add ipv4 methods, remove source multicast route requirement, fix udp socket source address prob
Craig Dowell <craigdo@ee.washington.edu>
parents: 1435
diff changeset
   318
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   319
  return 0;
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   320
}
1317
82629189efff Fold the two patches for bu6 69 together, building on the bug 65 patch
Tom Henderson <tomh@tomh.org>
parents: 1308
diff changeset
   321
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   322
int 
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   323
UdpSocket::SendTo(const Address &address, Ptr<Packet> p)
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   324
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   325
  NS_LOG_FUNCTION;
1870
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1828 1867
diff changeset
   326
  NS_LOG_PARAMS (this << address << p);
1207
a9f3610bbffa remove implicit conversion from Address to Eui48Address, to Ipv4Address and to InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1204
diff changeset
   327
  InetSocketAddress transport = InetSocketAddress::ConvertFrom (address);
1162
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   328
  Ipv4Address ipv4 = transport.GetIpv4 ();
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   329
  uint16_t port = transport.GetPort ();
1264
577875bb5a65 split callback registration from socket operations in socket.h API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1186
diff changeset
   330
  return DoSendTo (p, ipv4, port);
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   331
}
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   332
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   333
void 
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   334
UdpSocket::ForwardUp (Ptr<Packet> packet, Ipv4Address ipv4, uint16_t port)
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   335
{
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1452
diff changeset
   336
  NS_LOG_FUNCTION;
1870
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1828 1867
diff changeset
   337
  NS_LOG_PARAMS (this << packet << ipv4 << port);
1429
31cb0668defd debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents: 1270
diff changeset
   338
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   339
  if (m_shutdownRecv)
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   340
    {
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   341
      return;
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   342
    }
1162
10f9613bd9be convert Socket to use Address class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 742
diff changeset
   343
  
1204
d40723d53e3d InetSocketAddress: replace explicit conversion to implicit conversion
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1172
diff changeset
   344
  Address address = InetSocketAddress (ipv4, port);
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   345
  NotifyDataReceived (packet, address);
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   346
}
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   347
1435
a70de165a25a set source IP address in udp-socket packets
Craig Dowell <craigdo@ee.washington.edu>
parents: 1434
diff changeset
   348
} //namespace ns3
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   349
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   350
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   351
#ifdef RUN_SELF_TESTS
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   352
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   353
#include "ns3/test.h"
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   354
#include "ns3/socket-factory.h"
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   355
#include "ns3/udp.h"
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   356
#include "ns3/simulator.h"
2673
a70e0c7aaf56 SimpleChannel/SimpleNetDevice. Use them where needed.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2608
diff changeset
   357
#include "ns3/simple-channel.h"
a70e0c7aaf56 SimpleChannel/SimpleNetDevice. Use them where needed.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2608
diff changeset
   358
#include "ns3/simple-net-device.h"
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   359
#include "ns3/drop-tail-queue.h"
2828
2344451f63c9 do not use InternetNode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2674
diff changeset
   360
#include "internet-stack.h"
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   361
#include <string>
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   362
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   363
namespace ns3 {
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   364
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   365
class UdpSocketTest: public Test
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   366
{
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   367
  Ptr<Packet> m_receivedPacket;
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   368
  Ptr<Packet> m_receivedPacket2;
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   369
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   370
public:
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   371
  virtual bool RunTests (void);
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   372
  UdpSocketTest ();
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   373
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   374
  void ReceivePacket (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from);
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   375
  void ReceivePacket2 (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from);
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   376
};
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   377
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   378
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   379
UdpSocketTest::UdpSocketTest ()
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   380
  : Test ("UdpSocket") {}
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   381
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   382
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   383
void UdpSocketTest::ReceivePacket (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from)
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   384
{
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   385
  m_receivedPacket = packet;
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   386
}
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   387
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   388
void UdpSocketTest::ReceivePacket2 (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from)
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   389
{
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   390
  m_receivedPacket2 = packet;
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   391
}
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   392
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   393
bool
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   394
UdpSocketTest::RunTests (void)
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   395
{
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   396
  bool result = true;
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   397
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   398
  // Create topology
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   399
  
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   400
  // Receiver Node
2828
2344451f63c9 do not use InternetNode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2674
diff changeset
   401
  Ptr<Node> rxNode = CreateObject<Node> ();
2344451f63c9 do not use InternetNode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2674
diff changeset
   402
  AddInternetStack (rxNode);
2673
a70e0c7aaf56 SimpleChannel/SimpleNetDevice. Use them where needed.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2608
diff changeset
   403
  Ptr<SimpleNetDevice> rxDev1, rxDev2;
2326
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   404
  { // first interface
2673
a70e0c7aaf56 SimpleChannel/SimpleNetDevice. Use them where needed.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2608
diff changeset
   405
    rxDev1 = CreateObject<SimpleNetDevice> ();
a70e0c7aaf56 SimpleChannel/SimpleNetDevice. Use them where needed.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2608
diff changeset
   406
    rxDev1->SetAddress (Mac48Address::Allocate ());
2503
e667dc0f350e merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2326 2501
diff changeset
   407
    rxNode->AddDevice (rxDev1);
2326
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   408
    Ptr<Ipv4> ipv4 = rxNode->GetObject<Ipv4> ();
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   409
    uint32_t netdev_idx = ipv4->AddInterface (rxDev1);
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   410
    ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.0.1"));
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   411
    ipv4->SetNetworkMask (netdev_idx, Ipv4Mask (0xffff0000U));
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   412
    ipv4->SetUp (netdev_idx);
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   413
  }
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   414
2326
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   415
  { // second interface
2673
a70e0c7aaf56 SimpleChannel/SimpleNetDevice. Use them where needed.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2608
diff changeset
   416
    rxDev2 = CreateObject<SimpleNetDevice> ();
a70e0c7aaf56 SimpleChannel/SimpleNetDevice. Use them where needed.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2608
diff changeset
   417
    rxDev2->SetAddress (Mac48Address::Allocate ());
2503
e667dc0f350e merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2326 2501
diff changeset
   418
    rxNode->AddDevice (rxDev2);
2326
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   419
    Ptr<Ipv4> ipv4 = rxNode->GetObject<Ipv4> ();
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   420
    uint32_t netdev_idx = ipv4->AddInterface (rxDev2);
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   421
    ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.1.1"));
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   422
    ipv4->SetNetworkMask (netdev_idx, Ipv4Mask (0xffff0000U));
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   423
    ipv4->SetUp (netdev_idx);
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   424
  }
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   425
  
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   426
  // Sender Node
2828
2344451f63c9 do not use InternetNode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2674
diff changeset
   427
  Ptr<Node> txNode = CreateObject<Node> ();
2344451f63c9 do not use InternetNode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2674
diff changeset
   428
  AddInternetStack (txNode);
2674
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   429
  Ptr<SimpleNetDevice> txDev1;
2326
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   430
  {
2674
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   431
    txDev1 = CreateObject<SimpleNetDevice> ();
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   432
    txDev1->SetAddress (Mac48Address::Allocate ());
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   433
    txNode->AddDevice (txDev1);
2326
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   434
    Ptr<Ipv4> ipv4 = txNode->GetObject<Ipv4> ();
2674
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   435
    uint32_t netdev_idx = ipv4->AddInterface (txDev1);
2326
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   436
    ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.0.2"));
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   437
    ipv4->SetNetworkMask (netdev_idx, Ipv4Mask (0xffff0000U));
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   438
    ipv4->SetUp (netdev_idx);
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   439
  }
2674
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   440
  Ptr<SimpleNetDevice> txDev2;
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   441
  {
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   442
    txDev2 = CreateObject<SimpleNetDevice> ();
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   443
    txDev2->SetAddress (Mac48Address::Allocate ());
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   444
    txNode->AddDevice (txDev2);
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   445
    Ptr<Ipv4> ipv4 = txNode->GetObject<Ipv4> ();
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   446
    uint32_t netdev_idx = ipv4->AddInterface (txDev2);
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   447
    ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.1.2"));
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   448
    ipv4->SetNetworkMask (netdev_idx, Ipv4Mask (0xffff0000U));
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   449
    ipv4->SetUp (netdev_idx);
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   450
  }
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   451
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   452
  // link the two nodes
2674
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   453
  Ptr<SimpleChannel> channel1 = CreateObject<SimpleChannel> ();
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   454
  rxDev1->SetChannel (channel1);
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   455
  txDev1->SetChannel (channel1);
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   456
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   457
  Ptr<SimpleChannel> channel2 = CreateObject<SimpleChannel> ();
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   458
  rxDev2->SetChannel (channel2);
41f943501ae7 Fix the udp socket unit test problem discovered by Mathieu.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2673
diff changeset
   459
  txDev2->SetChannel (channel2);
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   460
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   461
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   462
  // Create the UDP sockets
2257
71a58e70c671 QueryInterface -> GetObject
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2231
diff changeset
   463
  Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<Udp> ();
1524
3ead2b66f2e4 Fix a regression in handling of broadcast packets and UDP sockets (closes bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1520
diff changeset
   464
  Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
2326
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   465
  NS_TEST_ASSERT_EQUAL (rxSocket->Bind (InetSocketAddress (Ipv4Address ("10.0.0.1"), 1234)), 0);
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   466
  rxSocket->SetRecvCallback (MakeCallback (&UdpSocketTest::ReceivePacket, this));
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   467
2326
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   468
  Ptr<Socket> rxSocket2 = rxSocketFactory->CreateSocket ();
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   469
  rxSocket2->SetRecvCallback (MakeCallback (&UdpSocketTest::ReceivePacket2, this));
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   470
  NS_TEST_ASSERT_EQUAL (rxSocket2->Bind (InetSocketAddress (Ipv4Address ("10.0.1.1"), 1234)), 0);
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   471
2257
71a58e70c671 QueryInterface -> GetObject
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2231
diff changeset
   472
  Ptr<SocketFactory> txSocketFactory = txNode->GetObject<Udp> ();
1524
3ead2b66f2e4 Fix a regression in handling of broadcast packets and UDP sockets (closes bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1520
diff changeset
   473
  Ptr<Socket> txSocket = txSocketFactory->CreateSocket ();
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   474
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   475
  // ------ Now the tests ------------
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   476
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   477
  // Unicast test
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   478
  m_receivedPacket = Create<Packet> ();
2326
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   479
  m_receivedPacket2 = Create<Packet> ();
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   480
  NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("10.0.0.1"), 1234),
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   481
                                          Create<Packet> (123)), 0);
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   482
  Simulator::Run ();
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   483
  NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123);
2326
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   484
  NS_TEST_ASSERT_EQUAL (m_receivedPacket2->GetSize (), 0); // second interface should receive it
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   485
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   486
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   487
  // Simple broadcast test
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   488
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   489
  m_receivedPacket = Create<Packet> ();
2326
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   490
  m_receivedPacket2 = Create<Packet> ();
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   491
  NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("255.255.255.255"), 1234),
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   492
                                          Create<Packet> (123)), 0);
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   493
  Simulator::Run ();
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   494
  NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123);
2326
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   495
  // second socket should not receive it (it is bound specifically to the second interface's address
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   496
  NS_TEST_ASSERT_EQUAL (m_receivedPacket2->GetSize (), 0);
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   497
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   498
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   499
  // Broadcast test with multiple receiving sockets
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   500
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   501
  // When receiving broadcast packets, all sockets sockets bound to
2326
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   502
  // the address/port should receive a copy of the same packet -- if
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   503
  // the socket address matches.
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   504
  rxSocket2->Dispose ();
eec07777d1a2 Fix broadcast packet reception for locally bound sockets (bug #136)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 2305
diff changeset
   505
  rxSocket2 = rxSocketFactory->CreateSocket ();
1520
47d4ee8f48b8 Fix a small error in the unit test added recently (though it doesn't change the result)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1519
diff changeset
   506
  rxSocket2->SetRecvCallback (MakeCallback (&UdpSocketTest::ReceivePacket2, this));
1524
3ead2b66f2e4 Fix a regression in handling of broadcast packets and UDP sockets (closes bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1520
diff changeset
   507
  NS_TEST_ASSERT_EQUAL (rxSocket2->Bind (InetSocketAddress (Ipv4Address ("0.0.0.0"), 1234)), 0);
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   508
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   509
  m_receivedPacket = Create<Packet> ();
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   510
  m_receivedPacket2 = Create<Packet> ();
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   511
  NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("255.255.255.255"), 1234),
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   512
                                          Create<Packet> (123)), 0);
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   513
  Simulator::Run ();
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   514
  NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123);
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   515
  NS_TEST_ASSERT_EQUAL (m_receivedPacket2->GetSize (), 123);
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   516
1704
41c3142f4293 add missing call to Simulator::Destroy to cleanup after test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   517
  Simulator::Destroy ();
41c3142f4293 add missing call to Simulator::Destroy to cleanup after test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1524
diff changeset
   518
1519
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   519
  return result;
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   520
}
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   521
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   522
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   523
static UdpSocketTest gUdpSocketTest;
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   524
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   525
}; // namespace ns3
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   526
9b1cbc4c63f8 Add a couple of Udp socket unit tests: unicast (passing) and broadcast (failing, bug #51).
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1511
diff changeset
   527
#endif /* RUN_SELF_TESTS */