OLD | NEW |
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ | 1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ |
2 /* | 2 /* |
3 * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com> | 3 * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com> |
4 * | 4 * |
5 * This program is free software; you can redistribute it and/or modify | 5 * This program is free software; you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 2 as | 6 * it under the terms of the GNU General Public License version 2 as |
7 * published by the Free Software Foundation; | 7 * published by the Free Software Foundation; |
8 * | 8 * |
9 * This program is distributed in the hope that it will be useful, | 9 * This program is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 m_receiverSocket = CreateReceiverSocket (nodes.Get (1)); | 166 m_receiverSocket = CreateReceiverSocket (nodes.Get (1)); |
167 | 167 |
168 m_receiverSocket->SetRecvCallback (MakeCallback (&TcpGeneralTest::ReceivePacke
t, this)); | 168 m_receiverSocket->SetRecvCallback (MakeCallback (&TcpGeneralTest::ReceivePacke
t, this)); |
169 m_receiverSocket->SetAcceptCallback ( | 169 m_receiverSocket->SetAcceptCallback ( |
170 MakeNullCallback<bool, Ptr<Socket>, const Address &> (), | 170 MakeNullCallback<bool, Ptr<Socket>, const Address &> (), |
171 MakeCallback (&TcpGeneralTest::HandleAccept, this)); | 171 MakeCallback (&TcpGeneralTest::HandleAccept, this)); |
172 m_receiverSocket->SetCloseCallbacks (MakeCallback (&TcpGeneralTest::NormalClos
eCb, this), | 172 m_receiverSocket->SetCloseCallbacks (MakeCallback (&TcpGeneralTest::NormalClos
eCb, this), |
173 MakeCallback (&TcpGeneralTest::ErrorClose
Cb, this)); | 173 MakeCallback (&TcpGeneralTest::ErrorClose
Cb, this)); |
174 m_receiverSocket->SetRcvAckCb (MakeCallback (&TcpGeneralTest::RcvAckCb, this))
; | 174 m_receiverSocket->SetRcvAckCb (MakeCallback (&TcpGeneralTest::RcvAckCb, this))
; |
175 m_receiverSocket->SetProcessedAckCb (MakeCallback (&TcpGeneralTest::ProcessedA
ckCb, this)); | 175 m_receiverSocket->SetProcessedAckCb (MakeCallback (&TcpGeneralTest::ProcessedA
ckCb, this)); |
176 m_receiverSocket->SetRetransmitCb (MakeCallback (&TcpGeneralTest::RtoExpiredCb
, this)); | 176 m_receiverSocket->SetAfterRetransmitCb (MakeCallback (&TcpGeneralTest::AfterRe
transmitCb, this)); |
| 177 m_receiverSocket->SetBeforeRetransmitCb (MakeCallback (&TcpGeneralTest::Before
RetransmitCb, this)); |
177 m_receiverSocket->SetForkCb (MakeCallback (&TcpGeneralTest::ForkCb, this)); | 178 m_receiverSocket->SetForkCb (MakeCallback (&TcpGeneralTest::ForkCb, this)); |
178 m_receiverSocket->SetUpdateRttHistoryCb (MakeCallback (&TcpGeneralTest::Update
RttHistoryCb, this)); | 179 m_receiverSocket->SetUpdateRttHistoryCb (MakeCallback (&TcpGeneralTest::Update
RttHistoryCb, this)); |
179 m_receiverSocket->TraceConnectWithoutContext ("Tx", | 180 m_receiverSocket->TraceConnectWithoutContext ("Tx", |
180 MakeCallback (&TcpGeneralTest::T
xPacketCb, this)); | 181 MakeCallback (&TcpGeneralTest::T
xPacketCb, this)); |
181 m_receiverSocket->TraceConnectWithoutContext ("Rx", | 182 m_receiverSocket->TraceConnectWithoutContext ("Rx", |
182 MakeCallback (&TcpGeneralTest::R
xPacketCb, this)); | 183 MakeCallback (&TcpGeneralTest::R
xPacketCb, this)); |
183 | 184 |
184 InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 4477); | 185 InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 4477); |
185 m_receiverSocket->Bind (local); | 186 m_receiverSocket->Bind (local); |
186 | 187 |
187 m_senderSocket = CreateSenderSocket (nodes.Get (0)); | 188 m_senderSocket = CreateSenderSocket (nodes.Get (0)); |
188 m_senderSocket->SetCloseCallbacks (MakeCallback (&TcpGeneralTest::NormalCloseC
b, this), | 189 m_senderSocket->SetCloseCallbacks (MakeCallback (&TcpGeneralTest::NormalCloseC
b, this), |
189 MakeCallback (&TcpGeneralTest::ErrorCloseCb
, this)); | 190 MakeCallback (&TcpGeneralTest::ErrorCloseCb
, this)); |
190 m_senderSocket->SetRcvAckCb (MakeCallback (&TcpGeneralTest::RcvAckCb, this)); | 191 m_senderSocket->SetRcvAckCb (MakeCallback (&TcpGeneralTest::RcvAckCb, this)); |
191 m_senderSocket->SetProcessedAckCb (MakeCallback (&TcpGeneralTest::ProcessedAck
Cb, this)); | 192 m_senderSocket->SetProcessedAckCb (MakeCallback (&TcpGeneralTest::ProcessedAck
Cb, this)); |
192 m_senderSocket->SetRetransmitCb (MakeCallback (&TcpGeneralTest::RtoExpiredCb,
this)); | 193 m_senderSocket->SetAfterRetransmitCb (MakeCallback (&TcpGeneralTest::AfterRetr
ansmitCb, this)); |
| 194 m_senderSocket->SetBeforeRetransmitCb (MakeCallback (&TcpGeneralTest::BeforeRe
transmitCb, this)); |
193 m_senderSocket->SetDataSentCallback (MakeCallback (&TcpGeneralTest::DataSentCb
, this)); | 195 m_senderSocket->SetDataSentCallback (MakeCallback (&TcpGeneralTest::DataSentCb
, this)); |
194 m_senderSocket->SetUpdateRttHistoryCb (MakeCallback (&TcpGeneralTest::UpdateRt
tHistoryCb, this)); | 196 m_senderSocket->SetUpdateRttHistoryCb (MakeCallback (&TcpGeneralTest::UpdateRt
tHistoryCb, this)); |
195 m_senderSocket->TraceConnectWithoutContext ("CongestionWindow", | 197 m_senderSocket->TraceConnectWithoutContext ("CongestionWindow", |
196 MakeCallback (&TcpGeneralTest::CWn
dTrace, this)); | 198 MakeCallback (&TcpGeneralTest::CWn
dTrace, this)); |
197 m_senderSocket->TraceConnectWithoutContext ("SlowStartThreshold", | 199 m_senderSocket->TraceConnectWithoutContext ("SlowStartThreshold", |
198 MakeCallback (&TcpGeneralTest::SsT
hreshTrace, this)); | 200 MakeCallback (&TcpGeneralTest::SsT
hreshTrace, this)); |
199 m_senderSocket->TraceConnectWithoutContext ("CongState", | 201 m_senderSocket->TraceConnectWithoutContext ("CongState", |
200 MakeCallback (&TcpGeneralTest::Con
gStateTrace, this)); | 202 MakeCallback (&TcpGeneralTest::Con
gStateTrace, this)); |
201 m_senderSocket->TraceConnectWithoutContext ("Tx", | 203 m_senderSocket->TraceConnectWithoutContext ("Tx", |
202 MakeCallback (&TcpGeneralTest::TxP
acketCb, this)); | 204 MakeCallback (&TcpGeneralTest::TxP
acketCb, this)); |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 { | 365 { |
364 UpdatedRttHistory (seq, sz, isRetransmission, SENDER); | 366 UpdatedRttHistory (seq, sz, isRetransmission, SENDER); |
365 } | 367 } |
366 else | 368 else |
367 { | 369 { |
368 NS_FATAL_ERROR ("Closed socket, but not recognized"); | 370 NS_FATAL_ERROR ("Closed socket, but not recognized"); |
369 } | 371 } |
370 } | 372 } |
371 | 373 |
372 void | 374 void |
373 TcpGeneralTest::RtoExpiredCb (const Ptr<const TcpSocketState> tcb, | 375 TcpGeneralTest::AfterRetransmitCb (const Ptr<const TcpSocketState> tcb, |
374 const Ptr<const TcpSocketBase> tcp) | 376 const Ptr<const TcpSocketBase> tcp) |
375 { | 377 { |
376 if (tcp->GetNode () == m_receiverSocket->GetNode ()) | 378 if (tcp->GetNode () == m_receiverSocket->GetNode ()) |
377 { | 379 { |
378 RTOExpired (tcb, RECEIVER); | 380 AfterRTOExpired (tcb, RECEIVER); |
379 } | 381 } |
380 else if (tcp->GetNode () == m_senderSocket->GetNode ()) | 382 else if (tcp->GetNode () == m_senderSocket->GetNode ()) |
381 { | 383 { |
382 RTOExpired (tcb, SENDER); | 384 AfterRTOExpired (tcb, SENDER); |
383 } | 385 } |
384 else | 386 else |
385 { | 387 { |
| 388 NS_FATAL_ERROR ("Closed socket, but not recognized"); |
| 389 } |
| 390 } |
| 391 |
| 392 void |
| 393 TcpGeneralTest::BeforeRetransmitCb (const Ptr<const TcpSocketState> tcb, |
| 394 const Ptr<const TcpSocketBase> tcp) |
| 395 { |
| 396 if (tcp->GetNode () == m_receiverSocket->GetNode ()) |
| 397 { |
| 398 BeforeRTOExpired (tcb, RECEIVER); |
| 399 } |
| 400 else if (tcp->GetNode () == m_senderSocket->GetNode ()) |
| 401 { |
| 402 BeforeRTOExpired (tcb, SENDER); |
| 403 } |
| 404 else |
| 405 { |
386 NS_FATAL_ERROR ("Closed socket, but not recognized"); | 406 NS_FATAL_ERROR ("Closed socket, but not recognized"); |
387 } | 407 } |
388 } | 408 } |
389 | 409 |
390 void | 410 void |
391 TcpGeneralTest::DataSentCb (Ptr<Socket> socket, uint32_t size) | 411 TcpGeneralTest::DataSentCb (Ptr<Socket> socket, uint32_t size) |
392 { | 412 { |
393 if (socket->GetNode () == m_receiverSocket->GetNode ()) | 413 if (socket->GetNode () == m_receiverSocket->GetNode ()) |
394 { | 414 { |
395 DataSent (size, RECEIVER); | 415 DataSent (size, RECEIVER); |
(...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
926 } | 946 } |
927 | 947 |
928 void | 948 void |
929 TcpSocketMsgBase::SetProcessedAckCb (AckManagementCb cb) | 949 TcpSocketMsgBase::SetProcessedAckCb (AckManagementCb cb) |
930 { | 950 { |
931 NS_ASSERT (!cb.IsNull ()); | 951 NS_ASSERT (!cb.IsNull ()); |
932 m_processedAckCb = cb; | 952 m_processedAckCb = cb; |
933 } | 953 } |
934 | 954 |
935 void | 955 void |
936 TcpSocketMsgBase::SetRetransmitCb (RetrCb cb) | 956 TcpSocketMsgBase::SetAfterRetransmitCb (RetrCb cb) |
937 { | 957 { |
938 NS_ASSERT (!cb.IsNull ()); | 958 NS_ASSERT (!cb.IsNull ()); |
939 m_retrCallback = cb; | 959 m_afterRetrCallback = cb; |
940 } | 960 } |
941 | 961 |
942 void | 962 void |
| 963 TcpSocketMsgBase::SetBeforeRetransmitCb (RetrCb cb) |
| 964 { |
| 965 NS_ASSERT (!cb.IsNull ()); |
| 966 m_beforeRetrCallback = cb; |
| 967 } |
| 968 |
| 969 void |
943 TcpSocketMsgBase::ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader) | 970 TcpSocketMsgBase::ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader) |
944 { | 971 { |
945 NS_ASSERT (!(m_rcvAckCb.IsNull () || m_processedAckCb.IsNull ())); | 972 NS_ASSERT (!(m_rcvAckCb.IsNull () || m_processedAckCb.IsNull ())); |
946 m_rcvAckCb (packet, tcpHeader, this); | 973 m_rcvAckCb (packet, tcpHeader, this); |
947 | 974 |
948 TcpSocketBase::ReceivedAck (packet, tcpHeader); | 975 TcpSocketBase::ReceivedAck (packet, tcpHeader); |
949 | 976 |
950 m_processedAckCb (packet, tcpHeader, this); | 977 m_processedAckCb (packet, tcpHeader, this); |
951 } | 978 } |
952 | 979 |
953 void | 980 void |
954 TcpSocketMsgBase::Retransmit () | 981 TcpSocketMsgBase::ReTxTimeout () |
955 { | 982 { |
956 TcpSocketBase::Retransmit (); | 983 m_beforeRetrCallback (m_tcb, this); |
957 | 984 TcpSocketBase::ReTxTimeout (); |
958 m_retrCallback (m_tcb, this); | 985 m_afterRetrCallback (m_tcb, this); |
959 } | 986 } |
960 | 987 |
961 void | 988 void |
962 TcpSocketMsgBase::SetForkCb (Callback<void, Ptr<TcpSocketMsgBase> > cb) | 989 TcpSocketMsgBase::SetForkCb (Callback<void, Ptr<TcpSocketMsgBase> > cb) |
963 { | 990 { |
964 NS_ASSERT (!cb.IsNull ()); | 991 NS_ASSERT (!cb.IsNull ()); |
965 m_forkCb = cb; | 992 m_forkCb = cb; |
966 } | 993 } |
967 | 994 |
968 void | 995 void |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1170 } | 1197 } |
1171 } | 1198 } |
1172 | 1199 |
1173 Ptr<TcpSocketBase> | 1200 Ptr<TcpSocketBase> |
1174 TcpSocketSmallAcks::Fork (void) | 1201 TcpSocketSmallAcks::Fork (void) |
1175 { | 1202 { |
1176 return CopyObject<TcpSocketSmallAcks> (this); | 1203 return CopyObject<TcpSocketSmallAcks> (this); |
1177 } | 1204 } |
1178 | 1205 |
1179 } // namespace ns3 | 1206 } // namespace ns3 |
OLD | NEW |