Hey,
this is a patchset which allows the usage of AddressInfo elements within
a ns3 simulation to specify network and broadcast addresses
(device:ipnet device:bcast).
One patch (ns-3-click-ipprefix.patch) adds the required command to the
ns3 click extension, the other one (click-addressinfo-prefix-ns.patch)
extends addressinfo.cc to query the ip prefix from the simulator.
Sascha
diff -r -u click/elements/standard/addressinfo.cc click-patch/elements/standard/addressinfo.cc
--- click/elements/standard/addressinfo.cc 2011-09-06 14:07:30.000000000 +0200
+++ click-patch/elements/standard/addressinfo.cc 2011-09-16 17:26:28.000000000 +0200
@@ -364,6 +364,16 @@
int r = simclick_sim_command(context->router()->master()->simnode(), SIMCLICK_MACADDR_FROM_NAME, s.c_str(), tmp, 255);
if (r >= 0 && tmp[0] && EtherAddressArg().parse(tmp, store))
return true;
+ } else if (context && type == 'I') {
+ char tmp[255];
+ unsigned char *ip, *prefix;
+ int r;
+ r = simclick_sim_command(context->router()->master()->simnode(), SIMCLICK_IPADDR_FROM_NAME, s.c_str(), tmp, 255);
+ if (r >= 0) {
+ r = simclick_sim_command(context->router()->master()->simnode(), SIMCLICK_IPPREFIX_FROM_NAME, s.c_str(), tmp + 16, 239);
+ if (r >= 0 && tmp[0] && tmp[16] && IPAddressArg().parse(tmp, *reinterpret_cast<IPAddress *>(store)) && IPAddressArg().parse(tmp + 16, *reinterpret_cast<IPAddress *>(store + 4)))
+ return true;
+ }
}
#endif
diff -r -u click/include/click/simclick.h click-patch/include/click/simclick.h
--- click/include/click/simclick.h 2011-09-06 14:07:30.000000000 +0200
+++ click-patch/include/click/simclick.h 2011-09-16 17:26:31.000000000 +0200
@@ -105,6 +105,7 @@
#define SIMCLICK_GET_NEXT_PKT_ID 10 // none
#define SIMCLICK_CHANGE_CHANNEL 11 // int ifid, int channelid
#define SIMCLICK_IF_PROMISC 12 // int ifid
+#define SIMCLICK_IPPREFIX_FROM_NAME 13 // const char *ifname, char *buf, int len
int simclick_sim_command(simclick_node_t *sim, int cmd, ...);
int simclick_click_command(simclick_node_t *sim, int cmd, ...);
--- ns-allinone-3.11/ns-3.11/src/click/model/ipv4-click-routing.cc 2011-05-25 22:42:27.000000000 +0200
+++ ns-allinone-3.11-patched/ns-3.11/src/click/model/ipv4-click-routing.cc 2011-09-16 17:32:28.000000000 +0200
@@ -224,6 +224,15 @@
}
std::string
+Ipv4ClickRouting::GetIpPrefixFromInterfaceId (int ifid)
+{
+ std::stringstream addr;
+ m_ipv4->GetAddress (ifid, 0).GetMask ().Print (addr);
+
+ return addr.str ();
+}
+
+std::string
Ipv4ClickRouting::GetMacAddressFromInterfaceId (int ifid)
{
std::stringstream addr;
@@ -586,6 +595,27 @@
break;
}
+ case SIMCLICK_IPPREFIX_FROM_NAME:
+ {
+ const char *ifname = va_arg (val, const char *);
+ char *buf = va_arg (val, char *);
+ int len = va_arg (val, int);
+
+ int ifid = clickInstance->GetInterfaceId (ifname);
+
+ if (ifid >= 0)
+ {
+ retval = simstrlcpy (buf, len, clickInstance->GetIpPrefixFromInterfaceId (ifid));
+ }
+ else
+ {
+ retval = -1;
+ }
+
+ NS_LOG_DEBUG (clickInstance->GetNodeName () << " SIMCLICK_IPPREFIX_FROM_NAME: " << ifname << " " << buf << " " << len);
+ break;
+ }
+
case SIMCLICK_MACADDR_FROM_NAME:
{
const char *ifname = va_arg (val, const char *);
diff -r -u ns-allinone-3.11/ns-3.11/src/click/model/ipv4-click-routing.h ns-allinone-3.11-patched/ns-3.11/src/click/model/ipv4-click-routing.h
--- ns-allinone-3.11/ns-3.11/src/click/model/ipv4-click-routing.h 2011-05-25 22:42:27.000000000 +0200
+++ ns-allinone-3.11-patched/ns-3.11/src/click/model/ipv4-click-routing.h 2011-09-16 17:32:28.000000000 +0200
@@ -142,6 +142,13 @@
std::string GetIpAddressFromInterfaceId (int ifid);
/**
+ * \brief Provides for SIMCLICK_IPPREFIX_FROM_NAME
+ * \param ifid The interface ID for which the IP Prefix is required
+ * \return The IP Prefix of the interface in string format
+ */
+ std::string GetIpPrefixFromInterfaceId (int ifid);
+
+ /**
* \brief Provides for SIMCLICK_MACADDR_FROM_NAME
* \param ifid The interface ID for which the MAC Address is required
* \return The MAC Address of the interface in string format
_______________________________________________
click mailing list
[email protected]
https://amsterdam.lcs.mit.edu/mailman/listinfo/click