changing congetion window after every rtt

68 views
Skip to first unread message

shubhu

unread,
Mar 24, 2014, 5:20:52 AM3/24/14
to ns-3-...@googlegroups.com
hello

i have created 2 files tcpvegas.h and tcpvegas.cc,
in .cc file i need to double the congestion window
after 2*rtt times

i use following code:

  Time current = Time::FromInteger(((m_rtt->GetCurrentEstimate().GetInteger())*2), Time::S);
   Simulator::Schedule(Seconds(current),MakeCallback(&TcpVegas::winuprtt));

the  above 2 lines are wriiten inside " void  TcpVegas::NewAck (const SequenceNumber32& seq)"


and the function called defined as:

void TcpVegas::winuprtt()
{
 
m_cWnd=2*(m_cWnd.Get());


}
 

and fuction winuprtt is declared as the member function of class TcpVegas;



m_cWnd is declared in tcpvegas.h as
  TracedValue<uint32_t> m_cWnd;


when i use it in it gives following errors:

./src/internet/model/tcp-vegas.cc:119:6: error: prototype for ‘void ns3::TcpVegas::winuprtt()’ does not match any in class ‘ns3::TcpVegas’
./ns3/tcp-vegas.h:47:6: error: candidate is: void ns3::TcpVegas::winuprtt(ns3::Ptr<ns3::TcpVegas>)
../src/internet/model/tcp-vegas.cc: In member function ‘virtual void ns3::TcpVegas::NewAck(const SequenceNumber32&)’:
../src/internet/model/tcp-vegas.cc:277:52: error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function.  Say ‘&ns3::TcpVegas::winuprtt’ [-fpermissive]
../src/internet/model/tcp-vegas.cc:277:60: error: no matching function for call to ‘MakeCallback(void (ns3::TcpVegas::*)(ns3::Ptr<ns3::TcpVegas>))’
../src/internet/model/tcp-vegas.cc:277:60: note: candidates are:
./ns3/callback.h:1238:13: note: template<class T, class OBJ, class R> ns3::Callback<R> ns3::MakeCallback(R (T::*)(), OBJ)
./ns3/callback.h:1242:13: note: template<class T, class OBJ, class R> ns3::Callback<R> ns3::MakeCallback(R (T::*)()const, OBJ)
./ns3/callback.h:1246:16: note: template<class T, class OBJ, class R, class T1> ns3::Callback<R, T1> ns3::MakeCallback(R (T::*)(T1), OBJ)
./ns3/callback.h:1250:16: note: template<class T, class OBJ, class R, class T1> ns3::Callback<R, T1> ns3::MakeCallback(R (T::*)(T1)const, OBJ)
./ns3/callback.h:1254:19: note: template<class T, class OBJ, class R, class T1, class T2> ns3::Callback<R, T1, T2> ns3::MakeCallback(R (T::*)(T1, T2), OBJ)
./ns3/callback.h:1258:19: note: template<class T, class OBJ, class R, class T1, class T2> ns3::Callback<R, T1, T2> ns3::MakeCallback(R (T::*)(T1, T2)const, OBJ)
./ns3/callback.h:1262:22: note: template<class T, class OBJ, class R, class T1, class T2, class T3> ns3::Callback<R, T1, T2, T3> ns3::MakeCallback(R (T::*)(T1, T2, T3), OBJ)
./ns3/callback.h:1266:22: note: template<class T, class OBJ, class R, class T1, class T2, class T3> ns3::Callback<R, T1, T2, T3> ns3::MakeCallback(R (T::*)(T1, T2, T3)const, OBJ)
./ns3/callback.h:1270:25: note: template<class T, class OBJ, class R, class T1, class T2, class T3, class T4> ns3::Callback<R, T1, T2, T3, T4> ns3::MakeCallback(R (T::*)(T1, T2, T3, T4), OBJ)
./ns3/callback.h:1274:25: note: template<class T, class OBJ, class R, class T1, class T2, class T3, class T4> ns3::Callback<R, T1, T2, T3, T4> ns3::MakeCallback(R (T::*)(T1, T2, T3, T4)const, OBJ)
./ns3/callback.h:1278:28: note: template<class T, class OBJ, class R, class T1, class T2, class T3, class T4, class T5> ns3::Callback<R, T1, T2, T3, T4, T5> ns3::MakeCallback(R (T::*)(T1, T2, T3, T4, T5), OBJ)
./ns3/callback.h:1282:28: note: template<class T, class OBJ, class R, class T1, class T2, class T3, class T4, class T5> ns3::Callback<R, T1, T2, T3, T4, T5> ns3::MakeCallback(R (T::*)(T1, T2, T3, T4, T5)const, OBJ)
./ns3/callback.h:1286:31: note: template<class T, class OBJ, class R, class T1, class T2, class T3, class T4, class T5, class T6> ns3::Callback<R, T1, T2, T3, T4, T5, T6> ns3::MakeCallback(R (T::*)(T1, T2, T3, T4, T5, T6), OBJ)
./ns3/callback.h:1290:31: note: template<class T, class OBJ, class R, class T1, class T2, class T3, class T4, class T5, class T6> ns3::Callback<R, T1, T2, T3, T4, T5, T6> ns3::MakeCallback(R (T::*)(T1, T2, T3, T4, T5, T6)const, OBJ)
./ns3/callback.h:1294:34: note: template<class T, class OBJ, class R, class T1, class T2, class T3, class T4, class T5, class T6, class T7> ns3::Callback<R, T1, T2, T3, T4, T5, T6, T7> ns3::MakeCallback(R (T::*)(T1, T2, T3, T4, T5, T6, T7), OBJ)
./ns3/callback.h:1298:34: note: template<class T, class OBJ, class R, class T1, class T2, class T3, class T4, class T5, class T6, class T7> ns3::Callback<R, T1, T2, T3, T4, T5, T6, T7> ns3::MakeCallback(R (T::*)(T1, T2, T3, T4, T5, T6, T7)const, OBJ)
./ns3/callback.h:1302:37: note: template<class T, class OBJ, class R, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8> ns3::Callback<R, T1, T2, T3, T4, T5, T6, T7, T8> ns3::MakeCallback(R (T::*)(T1, T2, T3, T4, T5, T6, T7, T8), OBJ)
./ns3/callback.h:1306:37: note: template<class T, class OBJ, class R, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8> ns3::Callback<R, T1, T2, T3, T4, T5, T6, T7, T8> ns3::MakeCallback(R (T::*)(T1, T2, T3, T4, T5, T6, T7, T8)const, OBJ)
./ns3/callback.h:1310:40: note: template<class T, class OBJ, class R, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9> ns3::Callback<R, T1, T2, T3, T4, T5, T6, T7, T8, T9> ns3::MakeCallback(R (T::*)(T1, T2, T3, T4, T5, T6, T7, T8, T9), OBJ)
./ns3/callback.h:1314:40: note: template<class T, class OBJ, class R, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9> ns3::Callback<R, T1, T2, T3, T4, T5, T6, T7, T8, T9> ns3::MakeCallback(R (T::*)(T1, T2, T3, T4, T5, T6, T7, T8, T9)const, OBJ)
./ns3/callback.h:1338:13: note: template<class R> ns3::Callback<R> ns3::MakeCallback(R (*)())
./ns3/callback.h:1342:16: note: template<class R, class T1> ns3::Callback<R, T1> ns3::MakeCallback(R (*)(T1))
./ns3/callback.h:1346:19: note: template<class R, class T1, class T2> ns3::Callback<R, T1, T2> ns3::MakeCallback(R (*)(T1, T2))
./ns3/callback.h:1350:22: note: template<class R, class T1, class T2, class T3> ns3::Callback<R, T1, T2, T3> ns3::MakeCallback(R (*)(T1, T2, T3))
./ns3/callback.h:1354:25: note: template<class R, class T1, class T2, class T3, class T4> ns3::Callback<R, T1, T2, T3, T4> ns3::MakeCallback(R (*)(T1, T2, T3, T4))
./ns3/callback.h:1358:28: note: template<class R, class T1, class T2, class T3, class T4, class T5> ns3::Callback<R, T1, T2, T3, T4, T5> ns3::MakeCallback(R (*)(T1, T2, T3, T4, T5))
./ns3/callback.h:1362:31: note: template<class R, class T1, class T2, class T3, class T4, class T5, class T6> ns3::Callback<R, T1, T2, T3, T4, T5, T6> ns3::MakeCallback(R (*)(T1, T2, T3, T4, T5, T6))
./ns3/callback.h:1366:34: note: template<class R, class T1, class T2, class T3, class T4, class T5, class T6, class T7> ns3::Callback<R, T1, T2, T3, T4, T5, T6, T7> ns3::MakeCallback(R (*)(T1, T2, T3, T4, T5, T6, T7))
./ns3/callback.h:1370:37: note: template<class R, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8> ns3::Callback<R, T1, T2, T3, T4, T5, T6, T7, T8> ns3::MakeCallback(R (*)(T1, T2, T3, T4, T5, T6, T7, T8))
./ns3/callback.h:1374:40: note: template<class R, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9> ns3::Callback<R, T1, T2, T3, T4, T5, T6, T7, T8, T9> ns3::MakeCallback(R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9))



what am i doing wrong and how can i solve this issue

Konstantinos

unread,
Mar 24, 2014, 7:00:50 AM3/24/14
to ns-3-...@googlegroups.com
See the first error and work step by step from there:

./src/internet/model/tcp-vegas.cc:119:6: error: prototype for ‘void ns3::TcpVegas::winuprtt()’ does not match any in class ‘ns3::TcpVegas’
./ns3/tcp-vegas.h:47:6: error: candidate is: void ns3::TcpVegas::winuprtt(ns3::Ptr<ns3::TcpVegas>)

You have declared winuprtt() in the .h file as:  

void ns3::TcpVegas::winuprtt(ns3::Ptr<ns3::TcpVegas>)

However, when you call it, you do not pass any variable.

If you fix this, I guess the other errors (or some of them) will be fixed as well.

Finally, why do you use integer for getting the RTT? I would expect double because RTT could be 0.5sec. Now you will get 0; that's the integer!
Reply all
Reply to author
Forward
0 new messages