26 #include "ns3/ipv4-l3-protocol.h"
27 #include "ns3/simple-net-device.h"
28 #include "ns3/ipv4-click-routing.h"
29 #include "ns3/click-internet-stack-helper.h"
31 #include <click/simclick.h>
36 AddClickInternetStack (Ptr<Node> node)
38 ClickInternetStackHelper internet;
39 internet.SetClickFile (node,
"src/click/examples/nsclick-lan-single-interface.click");
40 internet.Install (node);
44 AddNetworkDevice (Ptr<Node> node, Mac48Address macaddr, Ipv4Address ipv4addr, Ipv4Mask ipv4mask)
46 Ptr<SimpleNetDevice> rxDev1;
48 rxDev1 = CreateObject<SimpleNetDevice> ();
49 rxDev1->SetAddress (Mac48Address (macaddr));
50 node->AddDevice (rxDev1);
52 Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
53 uint32_t netdev_idx = ipv4->AddInterface (rxDev1);
54 Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (ipv4addr, ipv4mask);
55 ipv4->AddAddress (netdev_idx, ipv4Addr);
56 ipv4->SetUp (netdev_idx);
59 class ClickIfidFromNameTest :
public TestCase
62 ClickIfidFromNameTest ();
63 virtual void DoRun ();
66 ClickIfidFromNameTest::ClickIfidFromNameTest ()
67 : TestCase (
"Test SIMCLICK_IFID_FROM_NAME")
72 ClickIfidFromNameTest::DoRun ()
74 Ptr<Node> node = CreateObject<Node> ();
75 AddClickInternetStack (node);
76 AddNetworkDevice (node, Mac48Address (
"00:00:00:00:00:01"), Ipv4Address (
"10.1.1.1"), Ipv4Mask (
"255.255.255.0"));
77 Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
78 Ptr<Ipv4ClickRouting> click = DynamicCast<Ipv4ClickRouting> (ipv4->GetRoutingProtocol ());
79 click->DoInitialize ();
83 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IFID_FROM_NAME,
"tap0");
84 NS_TEST_EXPECT_MSG_EQ (ret, 0,
"tap0 is interface 0");
86 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IFID_FROM_NAME,
"tun0");
87 NS_TEST_EXPECT_MSG_EQ (ret, 0,
"tun0 is interface 0");
89 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IFID_FROM_NAME,
"eth0");
90 NS_TEST_EXPECT_MSG_EQ (ret, 1,
"Eth0 is interface 1");
92 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IFID_FROM_NAME,
"tap1");
93 NS_TEST_EXPECT_MSG_EQ (ret, 0,
"tap1 is interface 0");
95 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IFID_FROM_NAME,
"tun1");
96 NS_TEST_EXPECT_MSG_EQ (ret, 0,
"tun1 is interface 0");
98 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IFID_FROM_NAME,
"eth1");
99 NS_TEST_EXPECT_MSG_EQ (ret, -1,
"No eth1 on node");
102 class ClickIpMacAddressFromNameTest :
public TestCase
105 ClickIpMacAddressFromNameTest ();
106 virtual void DoRun ();
109 ClickIpMacAddressFromNameTest::ClickIpMacAddressFromNameTest ()
110 : TestCase (
"Test SIMCLICK_IPADDR_FROM_NAME")
115 ClickIpMacAddressFromNameTest::DoRun ()
117 Ptr<Node> node = CreateObject<Node> ();
118 AddClickInternetStack (node);
119 AddNetworkDevice (node, Mac48Address (
"00:00:00:00:00:01"), Ipv4Address (
"10.1.1.1"), Ipv4Mask (
"255.255.255.0"));
120 AddNetworkDevice (node, Mac48Address (
"00:00:00:00:00:02"), Ipv4Address (
"10.1.1.2"), Ipv4Mask (
"255.255.255.0"));
121 Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
122 Ptr<Ipv4ClickRouting> click = DynamicCast<Ipv4ClickRouting> (ipv4->GetRoutingProtocol ());
123 click->DoInitialize ();
126 buf =
new char [255];
128 simclick_sim_command (click->m_simNode, SIMCLICK_IPADDR_FROM_NAME,
"eth0", buf, 255);
129 NS_TEST_EXPECT_MSG_EQ (strcmp (buf,
"10.1.1.1"), 0,
"eth0 has IP 10.1.1.1");
131 simclick_sim_command (click->m_simNode, SIMCLICK_MACADDR_FROM_NAME,
"eth0", buf, 255);
132 NS_TEST_EXPECT_MSG_EQ (strcmp (buf,
"00:00:00:00:00:01"), 0,
"eth0 has Mac Address 00:00:00:00:00:01");
134 simclick_sim_command (click->m_simNode, SIMCLICK_IPADDR_FROM_NAME,
"eth1", buf, 255);
135 NS_TEST_EXPECT_MSG_EQ (strcmp (buf,
"10.1.1.2"), 0,
"eth1 has IP 10.1.1.2");
137 simclick_sim_command (click->m_simNode, SIMCLICK_MACADDR_FROM_NAME,
"eth1", buf, 255);
138 NS_TEST_EXPECT_MSG_EQ (strcmp (buf,
"00:00:00:00:00:02"), 0,
"eth0 has Mac Address 00:00:00:00:00:02");
144 simclick_sim_command (click->m_simNode, SIMCLICK_IPADDR_FROM_NAME,
"tap0", buf, 255);
145 NS_TEST_EXPECT_MSG_EQ (strcmp (buf,
"127.0.0.1"), 0,
"tun0 has IP 127.0.0.1");
147 simclick_sim_command (click->m_simNode, SIMCLICK_MACADDR_FROM_NAME,
"tap0", buf, 255);
148 NS_TEST_EXPECT_MSG_EQ (strcmp (buf,
"00:00:00:00:00:00"), 0,
"tun0 has IP 127.0.0.1");
153 class ClickTrivialTest :
public TestCase
157 virtual void DoRun ();
160 ClickTrivialTest::ClickTrivialTest ()
161 : TestCase (
"Test SIMCLICK_GET_NODE_NAME and SIMCLICK_IF_READY")
166 ClickTrivialTest::DoRun ()
168 Ptr<Node> node = CreateObject<Node> ();
169 AddClickInternetStack (node);
170 AddNetworkDevice (node, Mac48Address (
"00:00:00:00:00:01"), Ipv4Address (
"10.1.1.1"), Ipv4Mask (
"255.255.255.0"));
171 Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
172 Ptr<Ipv4ClickRouting> click = DynamicCast<Ipv4ClickRouting> (ipv4->GetRoutingProtocol ());
173 click->SetNodeName (
"myNode");
174 click->DoInitialize ();
178 buf =
new char [255];
180 ret = simclick_sim_command (click->m_simNode, SIMCLICK_GET_NODE_NAME, buf, 255);
181 NS_TEST_EXPECT_MSG_EQ (strcmp (buf,
"myNode"), 0,
"Node name is Node");
183 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IF_READY, 0);
184 NS_TEST_EXPECT_MSG_EQ (ret, 1,
"tap0 is ready");
186 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IF_READY, 1);
187 NS_TEST_EXPECT_MSG_EQ (ret, 1,
"eth0 is ready");
189 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IF_READY, 2);
190 NS_TEST_EXPECT_MSG_EQ (ret, 0,
"eth1 does not exist, so return 0");
195 class ClickIfidFromNameTestSuite :
public TestSuite
198 ClickIfidFromNameTestSuite () : TestSuite (
"routing-click", UNIT)
200 AddTestCase (
new ClickTrivialTest, TestCase::QUICK);
201 AddTestCase (
new ClickIfidFromNameTest, TestCase::QUICK);
202 AddTestCase (
new ClickIpMacAddressFromNameTest, TestCase::QUICK);
204 } g_ipv4ClickRoutingTestSuite;