--- a/src/click/model/ipv4-click-routing.cc Fri Dec 30 15:37:31 2011 +0000
+++ b/src/click/model/ipv4-click-routing.cc Fri Dec 30 18:45:18 2011 +0100
@@ -256,11 +256,48 @@
return m_clickInstanceFromSimNode[simnode];
}
+struct timeval
+Ipv4ClickRouting::GetTimevalFromNow () const
+{
+ struct timeval curtime;
+ uint64_t remainder = 0;
+
+ curtime.tv_sec = Simulator::Now ().GetSeconds ();
+ curtime.tv_usec = Simulator::Now ().GetMicroSeconds () % 1000000;
+
+ switch (Simulator::Now ().GetResolution())
+ {
+ case Time::NS:
+ remainder = Simulator::Now ().GetNanoSeconds () % 1000;
+ break;
+ case Time::PS:
+ remainder = Simulator::Now ().GetPicoSeconds () % 1000000;
+ break;
+ case Time::FS:
+ remainder = Simulator::Now ().GetFemtoSeconds () % 1000000000;
+ break;
+ default:
+ break;
+ }
+
+ if (remainder)
+ {
+ ++curtime.tv_usec;
+ if (curtime.tv_usec == 1000000)
+ {
+ ++curtime.tv_sec;
+ curtime.tv_usec = 0;
+ }
+ }
+
+ return curtime;
+}
+
void
Ipv4ClickRouting::RunClickEvent ()
{
- m_simNode->curtime.tv_sec = Simulator::Now ().GetSeconds ();
- m_simNode->curtime.tv_usec = Simulator::Now ().GetMicroSeconds () % 1000000;
+ m_simNode->curtime = GetTimevalFromNow ();
+
NS_LOG_DEBUG ("RunClickEvent at " << m_simNode->curtime.tv_sec << " " <<
m_simNode->curtime.tv_usec << " " << Simulator::Now ());
simclick_click_run (m_simNode);
@@ -311,8 +348,7 @@
Ipv4ClickRouting::SendPacketToClick (int ifid, int ptype, const unsigned char* data, int len)
{
NS_LOG_FUNCTION (this << ifid);
- m_simNode->curtime.tv_sec = Simulator::Now ().GetSeconds ();
- m_simNode->curtime.tv_usec = Simulator::Now ().GetMicroSeconds () % 1000000;
+ m_simNode->curtime = GetTimevalFromNow ();
// Since packets in ns-3 don't have global Packet ID's and Flow ID's, we
// feed dummy values into pinfo. This avoids the need to make changes in the Click code
--- a/src/click/model/ipv4-click-routing.h Fri Dec 30 15:37:31 2011 +0000
+++ b/src/click/model/ipv4-click-routing.h Fri Dec 30 18:45:18 2011 +0100
@@ -181,6 +181,11 @@
void AddSimNodeToClickMapping ();
/**
+ * \brief Get current simulation time as a timeval
+ */
+ struct timeval GetTimevalFromNow () const;
+
+ /**
* \brief This method has to be scheduled everytime Click calls SIMCLICK_SCHEDULE
*/
void RunClickEvent ();