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 ());
83 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IFID_FROM_NAME,
"tap0");
86 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IFID_FROM_NAME,
"tun0");
89 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IFID_FROM_NAME,
"eth0");
92 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IFID_FROM_NAME,
"tap1");
95 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IFID_FROM_NAME,
"tun1");
98 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IFID_FROM_NAME,
"eth1");
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 ());
126 buf =
new char [255];
128 simclick_sim_command (click->m_simNode, SIMCLICK_IPADDR_FROM_NAME,
"eth0", buf, 255);
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);
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);
147 simclick_sim_command (click->m_simNode, SIMCLICK_MACADDR_FROM_NAME,
"tap0", buf, 255);
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");
178 buf =
new char [255];
180 ret = simclick_sim_command (click->m_simNode, SIMCLICK_GET_NODE_NAME, buf, 255);
183 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IF_READY, 0);
186 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IF_READY, 1);
189 ret = simclick_sim_command (click->m_simNode, SIMCLICK_IF_READY, 2);
195 class ClickIfidFromNameTestSuite :
public TestSuite
198 ClickIfidFromNameTestSuite () : TestSuite (
"routing-click", UNIT)
200 AddTestCase (
new ClickTrivialTest);
201 AddTestCase (
new ClickIfidFromNameTest);
202 AddTestCase (
new ClickIpMacAddressFromNameTest);
204 } g_ipv4ClickRoutingTestSuite;