A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Portuguese
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
API
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
ipv6-list-routing-test-suite.cc
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2009 University of Washington
4
*
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License version 2 as
7
* published by the Free Software Foundation;
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
*
18
*/
19
20
#include "ns3/test.h"
21
#include "ns3/ipv6-list-routing.h"
22
#include "ns3/ipv6-route.h"
23
#include "ns3/ipv6-routing-protocol.h"
24
25
using namespace
ns3;
26
27
class
Ipv6ARouting
:
public
Ipv6RoutingProtocol
{
28
public
:
29
Ptr<Ipv6Route>
RouteOutput
(
Ptr<Packet>
p,
const
Ipv6Header
&header,
Ptr<NetDevice>
oif,
Socket::SocketErrno
&sockerr) {
return
0; }
30
bool
RouteInput (
Ptr<const Packet>
p,
const
Ipv6Header
&header,
Ptr<const NetDevice>
idev,
31
UnicastForwardCallback
ucb,
MulticastForwardCallback
mcb,
32
LocalDeliverCallback
lcb,
ErrorCallback
ecb) {
return
false
; }
33
void
NotifyInterfaceUp
(uint32_t interface) {}
34
void
NotifyInterfaceDown
(uint32_t interface) {}
35
void
NotifyAddAddress
(uint32_t interface,
Ipv6InterfaceAddress
address) {}
36
void
NotifyRemoveAddress
(uint32_t interface,
Ipv6InterfaceAddress
address) {}
37
void
NotifyAddRoute (
Ipv6Address
dst,
Ipv6Prefix
mask,
Ipv6Address
nextHop, uint32_t interface,
Ipv6Address
prefixToUse =
Ipv6Address
::
38
GetZero ()) {}
39
void
NotifyRemoveRoute
(
Ipv6Address
dst,
Ipv6Prefix
mask,
Ipv6Address
nextHop, uint32_t interface,
Ipv6Address
prefixToUse) {}
40
void
SetIpv6
(
Ptr<Ipv6>
ipv6) {}
41
virtual
void
PrintRoutingTable
(
Ptr<OutputStreamWrapper>
stream)
const
{};
42
};
43
44
class
Ipv6BRouting
:
public
Ipv6RoutingProtocol
{
45
public
:
46
Ptr<Ipv6Route>
RouteOutput
(
Ptr<Packet>
p,
const
Ipv6Header
&header,
Ptr<NetDevice>
oif,
Socket::SocketErrno
&sockerr) {
return
0; }
47
bool
RouteInput (
Ptr<const Packet>
p,
const
Ipv6Header
&header,
Ptr<const NetDevice>
idev,
48
UnicastForwardCallback
ucb,
MulticastForwardCallback
mcb,
49
LocalDeliverCallback
lcb,
ErrorCallback
ecb) {
return
false
; }
50
void
NotifyInterfaceUp
(uint32_t interface) {}
51
void
NotifyInterfaceDown
(uint32_t interface) {}
52
void
NotifyAddAddress
(uint32_t interface,
Ipv6InterfaceAddress
address) {}
53
void
NotifyRemoveAddress
(uint32_t interface,
Ipv6InterfaceAddress
address) {}
54
void
NotifyAddRoute (
Ipv6Address
dst,
Ipv6Prefix
mask,
Ipv6Address
nextHop, uint32_t interface,
Ipv6Address
prefixToUse =
Ipv6Address
::
55
GetZero ()) {}
56
void
NotifyRemoveRoute
(
Ipv6Address
dst,
Ipv6Prefix
mask,
Ipv6Address
nextHop, uint32_t interface,
Ipv6Address
prefixToUse) {}
57
void
SetIpv6
(
Ptr<Ipv6>
ipv6) {}
58
virtual
void
PrintRoutingTable
(
Ptr<OutputStreamWrapper>
stream)
const
{};
59
};
60
61
class
Ipv6ListRoutingNegativeTestCase
:
public
TestCase
62
{
63
public
:
64
Ipv6ListRoutingNegativeTestCase
();
65
virtual
void
DoRun (
void
);
66
};
67
68
Ipv6ListRoutingNegativeTestCase::Ipv6ListRoutingNegativeTestCase
()
69
:
TestCase
(
"Check negative priorities"
)
70
{
71
}
72
void
73
Ipv6ListRoutingNegativeTestCase::DoRun
(
void
)
74
{
75
Ptr<Ipv6ListRouting>
lr = CreateObject<Ipv6ListRouting> ();
76
Ptr<Ipv6RoutingProtocol>
aRouting = CreateObject<Ipv6ARouting> ();
77
Ptr<Ipv6RoutingProtocol>
bRouting = CreateObject<Ipv6BRouting> ();
78
// The Ipv6BRouting should be added with higher priority (larger integer value)
79
lr->
AddRoutingProtocol
(aRouting, -10);
80
lr->
AddRoutingProtocol
(bRouting, -5);
81
int16_t first = 3;
82
uint32_t num = lr->
GetNRoutingProtocols
();
83
NS_TEST_ASSERT_MSG_EQ
(num, 2,
"XXX"
);
84
Ptr<Ipv6RoutingProtocol>
firstRp = lr->
GetRoutingProtocol
(0, first);
85
NS_TEST_ASSERT_MSG_EQ
(-5, first,
"XXX"
);
86
NS_TEST_ASSERT_MSG_EQ
(firstRp, bRouting,
"XXX"
);
87
}
88
89
class
Ipv6ListRoutingPositiveTestCase
:
public
TestCase
90
{
91
public
:
92
Ipv6ListRoutingPositiveTestCase
();
93
virtual
void
DoRun
(
void
);
94
};
95
96
Ipv6ListRoutingPositiveTestCase::Ipv6ListRoutingPositiveTestCase
()
97
:
TestCase
(
"Check positive priorities"
)
98
{
99
}
100
void
101
Ipv6ListRoutingPositiveTestCase::DoRun
(
void
)
102
{
103
Ptr<Ipv6ListRouting>
lr = CreateObject<Ipv6ListRouting> ();
104
Ptr<Ipv6RoutingProtocol>
aRouting = CreateObject<Ipv6ARouting> ();
105
Ptr<Ipv6RoutingProtocol>
bRouting = CreateObject<Ipv6BRouting> ();
106
// The Ipv6ARouting should be added with higher priority (larger integer
107
// value) and will be fetched first below
108
lr->
AddRoutingProtocol
(aRouting, 10);
109
lr->
AddRoutingProtocol
(bRouting, 5);
110
int16_t first = 3;
111
int16_t second = 3;
112
uint32_t num = lr->
GetNRoutingProtocols
();
113
NS_TEST_ASSERT_MSG_EQ
(num, 2,
"XXX"
);
114
Ptr<Ipv6RoutingProtocol>
firstRp = lr->
GetRoutingProtocol
(0, first);
115
NS_TEST_ASSERT_MSG_EQ
(10, first,
"XXX"
);
116
NS_TEST_ASSERT_MSG_EQ
(firstRp, aRouting,
"XXX"
);
117
Ptr<Ipv6RoutingProtocol>
secondRp = lr->
GetRoutingProtocol
(1, second);
118
NS_TEST_ASSERT_MSG_EQ
(5, second,
"XXX"
);
119
NS_TEST_ASSERT_MSG_EQ
(secondRp, bRouting,
"XXX"
);
120
}
121
122
static
class
Ipv6ListRoutingTestSuite
:
public
TestSuite
123
{
124
public
:
125
Ipv6ListRoutingTestSuite
()
126
:
TestSuite
(
"ipv6-list-routing"
,
UNIT
)
127
{
128
AddTestCase
(
new
Ipv6ListRoutingPositiveTestCase
(), TestCase::QUICK);
129
AddTestCase
(
new
Ipv6ListRoutingNegativeTestCase
(), TestCase::QUICK);
130
}
131
132
}
g_ipv6ListRoutingTestSuite
;
src
internet
test
ipv6-list-routing-test-suite.cc
Generated on Tue May 14 2013 11:08:24 for ns-3 by
1.8.1.2