src/internet/test/udp-test.cc
author Vedran Mileti? <rivanvx@gmail.com>
Fri, 21 Sep 2012 13:47:41 +0200
changeset 9079 1e5921e6507d
parent 7717 cfa1741013dd
child 9266 d26408b17360
permissions -rw-r--r--
Clean up core, network, internet, point-to-point tests that don't access private class attributes and methods in accordance to sample-test-suite.cc.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7385
10beb0e53130 standardize emacs c++ mode comments
Vedran Mileti? <rivanvx@gmail.com>
parents: 7256
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     2
/*
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     3
 * Copyright (c) 2007 Georgia Tech Research Corporation
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     4
 * 
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     8
 *
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    12
 * GNU General Public License for more details.
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    13
 *
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    17
 *
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    18
 * Author: Raj Bhattacharjea <raj.b@gatech.edu>
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    19
 */
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    20
/**
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    21
 * This is the test code for udp-socket-impl.cc, it was moved out of udp-socket-impl.cc to 
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    22
 * be in an independent file for clarity purposes.
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    23
 */
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    24
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    25
#include "ns3/test.h"
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    26
#include "ns3/socket-factory.h"
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    27
#include "ns3/udp-socket-factory.h"
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    28
#include "ns3/simulator.h"
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    29
#include "ns3/simple-channel.h"
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    30
#include "ns3/simple-net-device.h"
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    31
#include "ns3/drop-tail-queue.h"
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    32
#include "ns3/socket.h"
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    33
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    34
#include "ns3/log.h"
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    35
#include "ns3/node.h"
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    36
#include "ns3/inet-socket-address.h"
7717
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    37
#include "ns3/inet6-socket-address.h"
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    38
6834
036f9a0b9899 Rename internet-stack to internet, and organize module
Tom Henderson <tomh@tomh.org>
parents: 6775
diff changeset
    39
#include "ns3/arp-l3-protocol.h"
036f9a0b9899 Rename internet-stack to internet, and organize module
Tom Henderson <tomh@tomh.org>
parents: 6775
diff changeset
    40
#include "ns3/ipv4-l3-protocol.h"
7717
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    41
#include "ns3/ipv6-l3-protocol.h"
6834
036f9a0b9899 Rename internet-stack to internet, and organize module
Tom Henderson <tomh@tomh.org>
parents: 6775
diff changeset
    42
#include "ns3/icmpv4-l4-protocol.h"
7717
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    43
#include "ns3/icmpv6-l4-protocol.h"
6834
036f9a0b9899 Rename internet-stack to internet, and organize module
Tom Henderson <tomh@tomh.org>
parents: 6775
diff changeset
    44
#include "ns3/udp-l4-protocol.h"
036f9a0b9899 Rename internet-stack to internet, and organize module
Tom Henderson <tomh@tomh.org>
parents: 6775
diff changeset
    45
#include "ns3/tcp-l4-protocol.h"
4573
01e876191f2e move list routing and static routing to src/routing directories
Tom Henderson <tomh@tomh.org>
parents: 4561
diff changeset
    46
#include "ns3/ipv4-list-routing.h"
01e876191f2e move list routing and static routing to src/routing directories
Tom Henderson <tomh@tomh.org>
parents: 4561
diff changeset
    47
#include "ns3/ipv4-static-routing.h"
7717
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    48
#include "ns3/ipv6-list-routing.h"
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    49
#include "ns3/ipv6-static-routing.h"
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    50
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    51
#include <string>
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    52
#include <limits>
9079
1e5921e6507d Clean up core, network, internet, point-to-point tests that don't access private class attributes and methods in accordance to sample-test-suite.cc.
Vedran Mileti? <rivanvx@gmail.com>
parents: 7717
diff changeset
    53
1e5921e6507d Clean up core, network, internet, point-to-point tests that don't access private class attributes and methods in accordance to sample-test-suite.cc.
Vedran Mileti? <rivanvx@gmail.com>
parents: 7717
diff changeset
    54
using namespace ns3;
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    55
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    56
static void
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    57
AddInternetStack (Ptr<Node> node)
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    58
{
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    59
  //ARP
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    60
  Ptr<ArpL3Protocol> arp = CreateObject<ArpL3Protocol> ();
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7231
diff changeset
    61
  node->AggregateObject (arp);
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    62
  //IPV4
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    63
  Ptr<Ipv4L3Protocol> ipv4 = CreateObject<Ipv4L3Protocol> ();
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    64
  //Routing for Ipv4
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents: 4560
diff changeset
    65
  Ptr<Ipv4ListRouting> ipv4Routing = CreateObject<Ipv4ListRouting> ();
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents: 4560
diff changeset
    66
  ipv4->SetRoutingProtocol (ipv4Routing);
4573
01e876191f2e move list routing and static routing to src/routing directories
Tom Henderson <tomh@tomh.org>
parents: 4561
diff changeset
    67
  Ptr<Ipv4StaticRouting> ipv4staticRouting = CreateObject<Ipv4StaticRouting> ();
01e876191f2e move list routing and static routing to src/routing directories
Tom Henderson <tomh@tomh.org>
parents: 4561
diff changeset
    68
  ipv4Routing->AddRoutingProtocol (ipv4staticRouting, 0);
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7231
diff changeset
    69
  node->AggregateObject (ipv4);
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    70
  //ICMP
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    71
  Ptr<Icmpv4L4Protocol> icmp = CreateObject<Icmpv4L4Protocol> ();
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7231
diff changeset
    72
  node->AggregateObject (icmp);
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    73
  //UDP
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    74
  Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7231
diff changeset
    75
  node->AggregateObject (udp);
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    76
  //TCP
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    77
  Ptr<TcpL4Protocol> tcp = CreateObject<TcpL4Protocol> ();
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7231
diff changeset
    78
  node->AggregateObject (tcp);
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    79
}
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    80
7717
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    81
static void
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    82
AddInternetStack6 (Ptr<Node> node)
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    83
{
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    84
  //IPV6
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    85
  Ptr<Ipv6L3Protocol> ipv6 = CreateObject<Ipv6L3Protocol> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    86
  //Routing for Ipv6
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    87
  Ptr<Ipv6ListRouting> ipv6Routing = CreateObject<Ipv6ListRouting> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    88
  ipv6->SetRoutingProtocol (ipv6Routing);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    89
  Ptr<Ipv6StaticRouting> ipv6staticRouting = CreateObject<Ipv6StaticRouting> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    90
  ipv6Routing->AddRoutingProtocol (ipv6staticRouting, 0);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    91
  node->AggregateObject (ipv6);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    92
  //ICMP
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    93
  Ptr<Icmpv6L4Protocol> icmp = CreateObject<Icmpv6L4Protocol> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    94
  node->AggregateObject (icmp);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    95
  //Ipv6 Extensions
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    96
  ipv6->RegisterExtensions ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    97
  ipv6->RegisterOptions ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    98
  //UDP
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
    99
  Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   100
  node->AggregateObject (udp);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   101
  //TCP
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   102
  Ptr<TcpL4Protocol> tcp = CreateObject<TcpL4Protocol> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   103
  node->AggregateObject (tcp);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   104
}
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   105
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   106
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6834
diff changeset
   107
class UdpSocketLoopbackTest : public TestCase
6231
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   108
{
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   109
public:
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   110
  UdpSocketLoopbackTest ();
6775
0783f42a364b Make test cases not return bool valuesMake all TestSuite instances be static
Mitch Watrous <watrous@u.washington.edu>
parents: 6441
diff changeset
   111
  virtual void DoRun (void);
6231
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   112
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   113
  void ReceivePkt (Ptr<Socket> socket);
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   114
  Ptr<Packet> m_receivedPacket;
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   115
};
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   116
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   117
UdpSocketLoopbackTest::UdpSocketLoopbackTest ()
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   118
  : TestCase ("UDP loopback test") 
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   119
{
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   120
}
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   121
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   122
void UdpSocketLoopbackTest::ReceivePkt (Ptr<Socket> socket)
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   123
{
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   124
  uint32_t availableData;
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   125
  availableData = socket->GetRxAvailable ();
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7231
diff changeset
   126
  m_receivedPacket = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
6231
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   127
  NS_ASSERT (availableData == m_receivedPacket->GetSize ());
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   128
}
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   129
6775
0783f42a364b Make test cases not return bool valuesMake all TestSuite instances be static
Mitch Watrous <watrous@u.washington.edu>
parents: 6441
diff changeset
   130
void
6231
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   131
UdpSocketLoopbackTest::DoRun ()
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   132
{
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   133
  Ptr<Node> rxNode = CreateObject<Node> ();
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   134
  AddInternetStack (rxNode);
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   135
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   136
  Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> ();
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   137
  Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7231
diff changeset
   138
  rxSocket->Bind (InetSocketAddress (Ipv4Address::GetAny (), 80));
6231
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   139
  rxSocket->SetRecvCallback (MakeCallback (&UdpSocketLoopbackTest::ReceivePkt, this));
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   140
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   141
  Ptr<Socket> txSocket = rxSocketFactory->CreateSocket ();
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   142
  txSocket->SendTo (Create<Packet> (246), 0, InetSocketAddress ("127.0.0.1", 80));
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   143
  Simulator::Run ();
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   144
  Simulator::Destroy ();
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   145
  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 246, "first socket should not receive it (it is bound specifically to the second interface's address");
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   146
}
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   147
7717
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   148
class Udp6SocketLoopbackTest : public TestCase
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   149
{
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   150
public:
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   151
  Udp6SocketLoopbackTest ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   152
  virtual void DoRun (void);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   153
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   154
  void ReceivePkt (Ptr<Socket> socket);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   155
  Ptr<Packet> m_receivedPacket;
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   156
};
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   157
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   158
Udp6SocketLoopbackTest::Udp6SocketLoopbackTest ()
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   159
  : TestCase ("UDP6 loopback test") 
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   160
{
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   161
}
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   162
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   163
void Udp6SocketLoopbackTest::ReceivePkt (Ptr<Socket> socket)
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   164
{
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   165
  uint32_t availableData;
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   166
  availableData = socket->GetRxAvailable ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   167
  m_receivedPacket = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   168
  NS_ASSERT (availableData == m_receivedPacket->GetSize ());
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   169
  //cast availableData to void, to suppress 'availableData' set but not used
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   170
  //compiler warning
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   171
  (void) availableData;
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   172
}
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   173
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   174
void
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   175
Udp6SocketLoopbackTest::DoRun ()
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   176
{
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   177
  Ptr<Node> rxNode = CreateObject<Node> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   178
  AddInternetStack6 (rxNode);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   179
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   180
  Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   181
  Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   182
  rxSocket->Bind (Inet6SocketAddress (Ipv6Address::GetAny (), 80));
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   183
  rxSocket->SetRecvCallback (MakeCallback (&Udp6SocketLoopbackTest::ReceivePkt, this));
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   184
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   185
  Ptr<Socket> txSocket = rxSocketFactory->CreateSocket ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   186
  txSocket->SendTo (Create<Packet> (246), 0, Inet6SocketAddress ("::1", 80));
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   187
  Simulator::Run ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   188
  Simulator::Destroy ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   189
  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 246, "first socket should not receive it (it is bound specifically to the second interface's address");
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   190
}
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   191
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6834
diff changeset
   192
class UdpSocketImplTest : public TestCase
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   193
{
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   194
  Ptr<Packet> m_receivedPacket;
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   195
  Ptr<Packet> m_receivedPacket2;
5530
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   196
  void DoSendData (Ptr<Socket> socket, std::string to);
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   197
  void SendData (Ptr<Socket> socket, std::string to);
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   198
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   199
public:
6775
0783f42a364b Make test cases not return bool valuesMake all TestSuite instances be static
Mitch Watrous <watrous@u.washington.edu>
parents: 6441
diff changeset
   200
  virtual void DoRun (void);
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   201
  UdpSocketImplTest ();
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   202
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   203
  void ReceivePacket (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   204
  void ReceivePacket2 (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   205
  void ReceivePkt (Ptr<Socket> socket);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   206
  void ReceivePkt2 (Ptr<Socket> socket);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   207
};
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   208
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   209
UdpSocketImplTest::UdpSocketImplTest ()
5340
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   210
  : TestCase ("UDP socket implementation") 
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   211
{
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   212
}
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   213
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   214
void UdpSocketImplTest::ReceivePacket (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from)
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   215
{
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   216
  m_receivedPacket = packet;
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   217
}
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   218
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   219
void UdpSocketImplTest::ReceivePacket2 (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from)
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   220
{
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   221
  m_receivedPacket2 = packet;
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   222
}
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   223
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   224
void UdpSocketImplTest::ReceivePkt (Ptr<Socket> socket)
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   225
{
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   226
  uint32_t availableData;
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   227
  availableData = socket->GetRxAvailable ();
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7231
diff changeset
   228
  m_receivedPacket = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   229
  NS_ASSERT (availableData == m_receivedPacket->GetSize ());
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   230
}
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   231
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   232
void UdpSocketImplTest::ReceivePkt2 (Ptr<Socket> socket)
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   233
{
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   234
  uint32_t availableData;
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   235
  availableData = socket->GetRxAvailable ();
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7231
diff changeset
   236
  m_receivedPacket2 = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   237
  NS_ASSERT (availableData == m_receivedPacket2->GetSize ());
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   238
}
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   239
5530
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   240
void
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   241
UdpSocketImplTest::DoSendData (Ptr<Socket> socket, std::string to)
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   242
{
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7231
diff changeset
   243
  Address realTo = InetSocketAddress (Ipv4Address (to.c_str ()), 1234);
5530
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   244
  NS_TEST_EXPECT_MSG_EQ (socket->SendTo (Create<Packet> (123), 0, realTo),
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   245
                         123, "XXX");
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   246
}
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   247
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   248
void
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   249
UdpSocketImplTest::SendData (Ptr<Socket> socket, std::string to)
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   250
{
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   251
  m_receivedPacket = Create<Packet> ();
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   252
  m_receivedPacket2 = Create<Packet> ();
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   253
  Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0),
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   254
                                  &UdpSocketImplTest::DoSendData, this, socket, to);
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   255
  Simulator::Run ();
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   256
}
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   257
6775
0783f42a364b Make test cases not return bool valuesMake all TestSuite instances be static
Mitch Watrous <watrous@u.washington.edu>
parents: 6441
diff changeset
   258
void
5340
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   259
UdpSocketImplTest::DoRun (void)
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   260
{
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   261
  // Create topology
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6834
diff changeset
   262
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   263
  // Receiver Node
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   264
  Ptr<Node> rxNode = CreateObject<Node> ();
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   265
  AddInternetStack (rxNode);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   266
  Ptr<SimpleNetDevice> rxDev1, rxDev2;
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   267
  { // first interface
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   268
    rxDev1 = CreateObject<SimpleNetDevice> ();
4578
88434ff8f0a5 Finally make tap bridge work with VMs (bug 569)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4573
diff changeset
   269
    rxDev1->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   270
    rxNode->AddDevice (rxDev1);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   271
    Ptr<Ipv4> ipv4 = rxNode->GetObject<Ipv4> ();
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   272
    uint32_t netdev_idx = ipv4->AddInterface (rxDev1);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   273
    Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("10.0.0.1"), Ipv4Mask (0xffff0000U));
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   274
    ipv4->AddAddress (netdev_idx, ipv4Addr);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   275
    ipv4->SetUp (netdev_idx);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   276
  }
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   277
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   278
  { // second interface
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   279
    rxDev2 = CreateObject<SimpleNetDevice> ();
4578
88434ff8f0a5 Finally make tap bridge work with VMs (bug 569)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4573
diff changeset
   280
    rxDev2->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   281
    rxNode->AddDevice (rxDev2);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   282
    Ptr<Ipv4> ipv4 = rxNode->GetObject<Ipv4> ();
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   283
    uint32_t netdev_idx = ipv4->AddInterface (rxDev2);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   284
    Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("10.0.1.1"), Ipv4Mask (0xffff0000U));
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   285
    ipv4->AddAddress (netdev_idx, ipv4Addr);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   286
    ipv4->SetUp (netdev_idx);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   287
  }
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6834
diff changeset
   288
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   289
  // Sender Node
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   290
  Ptr<Node> txNode = CreateObject<Node> ();
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   291
  AddInternetStack (txNode);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   292
  Ptr<SimpleNetDevice> txDev1;
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   293
  {
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   294
    txDev1 = CreateObject<SimpleNetDevice> ();
4578
88434ff8f0a5 Finally make tap bridge work with VMs (bug 569)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4573
diff changeset
   295
    txDev1->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   296
    txNode->AddDevice (txDev1);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   297
    Ptr<Ipv4> ipv4 = txNode->GetObject<Ipv4> ();
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   298
    uint32_t netdev_idx = ipv4->AddInterface (txDev1);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   299
    Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("10.0.0.2"), Ipv4Mask (0xffff0000U));
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   300
    ipv4->AddAddress (netdev_idx, ipv4Addr);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   301
    ipv4->SetUp (netdev_idx);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   302
  }
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   303
  Ptr<SimpleNetDevice> txDev2;
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   304
  {
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   305
    txDev2 = CreateObject<SimpleNetDevice> ();
4578
88434ff8f0a5 Finally make tap bridge work with VMs (bug 569)
Craig Dowell <craigdo@ee.washington.edu>
parents: 4573
diff changeset
   306
    txDev2->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   307
    txNode->AddDevice (txDev2);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   308
    Ptr<Ipv4> ipv4 = txNode->GetObject<Ipv4> ();
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   309
    uint32_t netdev_idx = ipv4->AddInterface (txDev2);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   310
    Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("10.0.1.2"), Ipv4Mask (0xffff0000U));
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   311
    ipv4->AddAddress (netdev_idx, ipv4Addr);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   312
    ipv4->SetUp (netdev_idx);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   313
  }
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   314
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   315
  // link the two nodes
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   316
  Ptr<SimpleChannel> channel1 = CreateObject<SimpleChannel> ();
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   317
  rxDev1->SetChannel (channel1);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   318
  txDev1->SetChannel (channel1);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   319
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   320
  Ptr<SimpleChannel> channel2 = CreateObject<SimpleChannel> ();
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   321
  rxDev2->SetChannel (channel2);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   322
  txDev2->SetChannel (channel2);
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   323
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   324
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   325
  // Create the UDP sockets
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   326
  Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> ();
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   327
  Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
5340
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   328
  NS_TEST_EXPECT_MSG_EQ (rxSocket->Bind (InetSocketAddress (Ipv4Address ("10.0.0.1"), 1234)), 0, "trivial");
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   329
  rxSocket->SetRecvCallback (MakeCallback (&UdpSocketImplTest::ReceivePkt, this));
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   330
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   331
  Ptr<Socket> rxSocket2 = rxSocketFactory->CreateSocket ();
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   332
  rxSocket2->SetRecvCallback (MakeCallback (&UdpSocketImplTest::ReceivePkt2, this));
5340
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   333
  NS_TEST_EXPECT_MSG_EQ (rxSocket2->Bind (InetSocketAddress (Ipv4Address ("10.0.1.1"), 1234)), 0, "trivial");
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   334
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   335
  Ptr<SocketFactory> txSocketFactory = txNode->GetObject<UdpSocketFactory> ();
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   336
  Ptr<Socket> txSocket = txSocketFactory->CreateSocket ();
6441
f555caf874dc Fix regression tests after bug 943 changes
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 6231
diff changeset
   337
  txSocket->SetAllowBroadcast (true);
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   338
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   339
  // ------ Now the tests ------------
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   340
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   341
  // Unicast test
5530
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   342
  SendData (txSocket, "10.0.0.1");
5340
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   343
  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "trivial");
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   344
  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 0, "second interface should receive it");
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   345
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4472
diff changeset
   346
  m_receivedPacket->RemoveAllByteTags ();
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4472
diff changeset
   347
  m_receivedPacket2->RemoveAllByteTags ();
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   348
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   349
  // Simple broadcast test
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   350
5530
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   351
  SendData (txSocket, "255.255.255.255");
5340
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   352
  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "trivial");
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   353
  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 0, "second socket should not receive it (it is bound specifically to the second interface's address");
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   354
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4472
diff changeset
   355
  m_receivedPacket->RemoveAllByteTags ();
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4472
diff changeset
   356
  m_receivedPacket2->RemoveAllByteTags ();
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   357
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   358
  // Broadcast test with multiple receiving sockets
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   359
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   360
  // When receiving broadcast packets, all sockets sockets bound to
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   361
  // the address/port should receive a copy of the same packet -- if
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   362
  // the socket address matches.
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   363
  rxSocket2->Dispose ();
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   364
  rxSocket2 = rxSocketFactory->CreateSocket ();
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   365
  rxSocket2->SetRecvCallback (MakeCallback (&UdpSocketImplTest::ReceivePkt2, this));
5340
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   366
  NS_TEST_EXPECT_MSG_EQ (rxSocket2->Bind (InetSocketAddress (Ipv4Address ("0.0.0.0"), 1234)), 0, "trivial");
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   367
5530
e5e73d83bec3 update udp test to new API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5340
diff changeset
   368
  SendData (txSocket, "255.255.255.255");
5340
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   369
  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "trivial");
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   370
  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 123, "trivial");
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   371
4551
2081e0f6709d Bug 589: UdpSocketImpl unit test is leaking
fmoatamr
parents: 4502
diff changeset
   372
  m_receivedPacket = 0;
2081e0f6709d Bug 589: UdpSocketImpl unit test is leaking
fmoatamr
parents: 4502
diff changeset
   373
  m_receivedPacket2 = 0;
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   374
6181
05727a89b220 bug 857 - Link-Local Multicast handle in Ipv4 Output processing
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 5530
diff changeset
   375
  // Simple Link-local multicast test
05727a89b220 bug 857 - Link-Local Multicast handle in Ipv4 Output processing
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 5530
diff changeset
   376
05727a89b220 bug 857 - Link-Local Multicast handle in Ipv4 Output processing
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 5530
diff changeset
   377
  txSocket->BindToNetDevice (txDev1);
05727a89b220 bug 857 - Link-Local Multicast handle in Ipv4 Output processing
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 5530
diff changeset
   378
  SendData (txSocket, "224.0.0.9");
05727a89b220 bug 857 - Link-Local Multicast handle in Ipv4 Output processing
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 5530
diff changeset
   379
  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 0, "first socket should not receive it (it is bound specifically to the second interface's address");
05727a89b220 bug 857 - Link-Local Multicast handle in Ipv4 Output processing
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 5530
diff changeset
   380
  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 123, "recv2: 224.0.0.9");
05727a89b220 bug 857 - Link-Local Multicast handle in Ipv4 Output processing
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 5530
diff changeset
   381
05727a89b220 bug 857 - Link-Local Multicast handle in Ipv4 Output processing
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 5530
diff changeset
   382
  m_receivedPacket->RemoveAllByteTags ();
05727a89b220 bug 857 - Link-Local Multicast handle in Ipv4 Output processing
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 5530
diff changeset
   383
  m_receivedPacket2->RemoveAllByteTags ();
05727a89b220 bug 857 - Link-Local Multicast handle in Ipv4 Output processing
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 5530
diff changeset
   384
4472
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   385
  Simulator::Destroy ();
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   386
e20a31541404 src/ and utils/ changes for IPv4 routing rework
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   387
}
6231
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   388
7717
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   389
class Udp6SocketImplTest : public TestCase
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   390
{
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   391
  Ptr<Packet> m_receivedPacket;
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   392
  Ptr<Packet> m_receivedPacket2;
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   393
  void DoSendData (Ptr<Socket> socket, std::string to);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   394
  void SendData (Ptr<Socket> socket, std::string to);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   395
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   396
public:
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   397
  virtual void DoRun (void);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   398
  Udp6SocketImplTest ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   399
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   400
  void ReceivePacket (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   401
  void ReceivePacket2 (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   402
  void ReceivePkt (Ptr<Socket> socket);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   403
  void ReceivePkt2 (Ptr<Socket> socket);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   404
};
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   405
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   406
Udp6SocketImplTest::Udp6SocketImplTest ()
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   407
  : TestCase ("UDP6 socket implementation")
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   408
{
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   409
}
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   410
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   411
void Udp6SocketImplTest::ReceivePacket (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from)
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   412
{
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   413
  m_receivedPacket = packet;
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   414
}
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   415
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   416
void Udp6SocketImplTest::ReceivePacket2 (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from)
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   417
{
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   418
  m_receivedPacket2 = packet;
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   419
}
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   420
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   421
void Udp6SocketImplTest::ReceivePkt (Ptr<Socket> socket)
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   422
{
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   423
  uint32_t availableData;
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   424
  availableData = socket->GetRxAvailable ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   425
  m_receivedPacket = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   426
  NS_ASSERT (availableData == m_receivedPacket->GetSize ());
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   427
  //cast availableData to void, to suppress 'availableData' set but not used
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   428
  //compiler warning
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   429
  (void) availableData;
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   430
}
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   431
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   432
void Udp6SocketImplTest::ReceivePkt2 (Ptr<Socket> socket)
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   433
{
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   434
  uint32_t availableData;
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   435
  availableData = socket->GetRxAvailable ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   436
  m_receivedPacket2 = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   437
  NS_ASSERT (availableData == m_receivedPacket2->GetSize ());
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   438
  //cast availableData to void, to suppress 'availableData' set but not used
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   439
  //compiler warning
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   440
  (void) availableData;
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   441
}
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   442
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   443
void
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   444
Udp6SocketImplTest::DoSendData (Ptr<Socket> socket, std::string to)
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   445
{
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   446
  Address realTo = Inet6SocketAddress (Ipv6Address (to.c_str ()), 1234);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   447
  NS_TEST_EXPECT_MSG_EQ (socket->SendTo (Create<Packet> (123), 0, realTo),
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   448
                         123, "XXX");
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   449
}
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   450
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   451
void
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   452
Udp6SocketImplTest::SendData (Ptr<Socket> socket, std::string to)
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   453
{
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   454
  m_receivedPacket = Create<Packet> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   455
  m_receivedPacket2 = Create<Packet> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   456
  Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0),
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   457
                                  &Udp6SocketImplTest::DoSendData, this, socket, to);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   458
  Simulator::Run ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   459
}
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   460
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   461
void
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   462
Udp6SocketImplTest::DoRun (void)
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   463
{
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   464
  // Create topology
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   465
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   466
  // Receiver Node
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   467
  Ptr<Node> rxNode = CreateObject<Node> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   468
  AddInternetStack6 (rxNode);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   469
  Ptr<SimpleNetDevice> rxDev1, rxDev2;
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   470
  { // first interface
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   471
    rxDev1 = CreateObject<SimpleNetDevice> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   472
    rxDev1->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   473
    rxNode->AddDevice (rxDev1);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   474
    Ptr<Ipv6> ipv6 = rxNode->GetObject<Ipv6> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   475
    uint32_t netdev_idx = ipv6->AddInterface (rxDev1);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   476
    Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:0100::1"), Ipv6Prefix (64));
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   477
    ipv6->AddAddress (netdev_idx, ipv6Addr);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   478
    ipv6->SetUp (netdev_idx);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   479
  }
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   480
  { // second interface
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   481
    rxDev2 = CreateObject<SimpleNetDevice> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   482
    rxDev2->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   483
    rxNode->AddDevice (rxDev2);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   484
    Ptr<Ipv6> ipv6 = rxNode->GetObject<Ipv6> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   485
    uint32_t netdev_idx = ipv6->AddInterface (rxDev2);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   486
    Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:0100:1::1"), Ipv6Prefix (64));
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   487
    ipv6->AddAddress (netdev_idx, ipv6Addr);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   488
    ipv6->SetUp (netdev_idx);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   489
  }
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   490
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   491
  // Sender Node
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   492
  Ptr<Node> txNode = CreateObject<Node> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   493
  AddInternetStack6 (txNode);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   494
  Ptr<SimpleNetDevice> txDev1;
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   495
  {
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   496
    txDev1 = CreateObject<SimpleNetDevice> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   497
    txDev1->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   498
    txNode->AddDevice (txDev1);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   499
    Ptr<Ipv6> ipv6 = txNode->GetObject<Ipv6> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   500
    uint32_t netdev_idx = ipv6->AddInterface (txDev1);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   501
    Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:0100::2"), Ipv6Prefix (64));
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   502
    ipv6->AddAddress (netdev_idx, ipv6Addr);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   503
    ipv6->SetUp (netdev_idx);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   504
  }
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   505
  Ptr<SimpleNetDevice> txDev2;
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   506
  {
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   507
    txDev2 = CreateObject<SimpleNetDevice> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   508
    txDev2->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   509
    txNode->AddDevice (txDev2);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   510
    Ptr<Ipv6> ipv6 = txNode->GetObject<Ipv6> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   511
    uint32_t netdev_idx = ipv6->AddInterface (txDev2);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   512
    Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:0100:1::2"), Ipv6Prefix (64));
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   513
    ipv6->AddAddress (netdev_idx, ipv6Addr);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   514
    ipv6->SetUp (netdev_idx);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   515
  }
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   516
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   517
  // link the two nodes
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   518
  Ptr<SimpleChannel> channel1 = CreateObject<SimpleChannel> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   519
  rxDev1->SetChannel (channel1);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   520
  txDev1->SetChannel (channel1);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   521
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   522
  Ptr<SimpleChannel> channel2 = CreateObject<SimpleChannel> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   523
  rxDev2->SetChannel (channel2);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   524
  txDev2->SetChannel (channel2);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   525
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   526
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   527
  // Create the UDP sockets
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   528
  Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   529
  Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   530
  NS_TEST_EXPECT_MSG_EQ (rxSocket->Bind (Inet6SocketAddress (Ipv6Address ("2001:0100::1"), 1234)), 0, "trivial");
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   531
  rxSocket->SetRecvCallback (MakeCallback (&Udp6SocketImplTest::ReceivePkt, this));
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   532
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   533
  Ptr<Socket> rxSocket2 = rxSocketFactory->CreateSocket ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   534
  rxSocket2->SetRecvCallback (MakeCallback (&Udp6SocketImplTest::ReceivePkt2, this));
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   535
  NS_TEST_EXPECT_MSG_EQ (rxSocket2->Bind (Inet6SocketAddress (Ipv6Address ("2001:0100:1::1"), 1234)), 0, "trivial");
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   536
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   537
  Ptr<SocketFactory> txSocketFactory = txNode->GetObject<UdpSocketFactory> ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   538
  Ptr<Socket> txSocket = txSocketFactory->CreateSocket ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   539
  txSocket->SetAllowBroadcast (true);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   540
  // ------ Now the tests ------------
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   541
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   542
  // Unicast test
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   543
  SendData (txSocket, "2001:0100::1");
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   544
  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "trivial");
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   545
  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 0, "second interface should receive it");
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   546
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   547
  m_receivedPacket->RemoveAllByteTags ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   548
  m_receivedPacket2->RemoveAllByteTags ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   549
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   550
  // Simple Link-local multicast test
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   551
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   552
  // When receiving broadcast packets, all sockets sockets bound to
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   553
  // the address/port should receive a copy of the same packet -- if
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   554
  // the socket address matches.
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   555
  rxSocket2->Dispose ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   556
  rxSocket2 = rxSocketFactory->CreateSocket ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   557
  rxSocket2->SetRecvCallback (MakeCallback (&Udp6SocketImplTest::ReceivePkt2, this));
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   558
  NS_TEST_EXPECT_MSG_EQ (rxSocket2->Bind (Inet6SocketAddress (Ipv6Address ("::"), 1234)), 0, "trivial");
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   559
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   560
  txSocket->BindToNetDevice (txDev1);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   561
  SendData (txSocket, "ff02::1");
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   562
  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 0, "first socket should not receive it (it is bound specifically to the second interface's address");
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   563
  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 123, "recv2: ff02::1");
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   564
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   565
  m_receivedPacket->RemoveAllByteTags ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   566
  m_receivedPacket2->RemoveAllByteTags ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   567
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   568
  Simulator::Destroy ();
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   569
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   570
}
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   571
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   572
5340
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   573
//-----------------------------------------------------------------------------
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   574
class UdpTestSuite : public TestSuite
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   575
{
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   576
public:
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   577
  UdpTestSuite () : TestSuite ("udp", UNIT)
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   578
  {
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   579
    AddTestCase (new UdpSocketImplTest);
6231
6f5fdc2104d7 UDP test code for loopback net device
Tom Henderson <tomh@tomh.org>
parents: 6181
diff changeset
   580
    AddTestCase (new UdpSocketLoopbackTest);
7717
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   581
    AddTestCase (new Udp6SocketImplTest);
cfa1741013dd Add support for IPv6 transport protocols
Ken Renard <kdrenard2@gmail.com>
parents: 7704
diff changeset
   582
    AddTestCase (new Udp6SocketLoopbackTest);
5340
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   583
  }
9ca7ee51d883 udp test ported (the last one!)
Pavel Boyko <boyko@iitp.ru>
parents: 5100
diff changeset
   584
} g_udpTestSuite;