|
Lines 1157-1181
TcpSocketBase::DoForwardUp (Ptr<Packet> packet, const Address &fromAddress,
|
Link Here
|
|---|
|
| 1157 |
// Peel off TCP header and do validity checking |
1157 |
// Peel off TCP header and do validity checking |
| 1158 |
TcpHeader tcpHeader; |
1158 |
TcpHeader tcpHeader; |
| 1159 |
uint32_t bytesRemoved = packet->RemoveHeader (tcpHeader); |
1159 |
uint32_t bytesRemoved = packet->RemoveHeader (tcpHeader); |
|
|
1160 |
SequenceNumber32 seq = tcpHeader.GetSequenceNumber (); |
| 1160 |
if (bytesRemoved == 0 || bytesRemoved > 60) |
1161 |
if (bytesRemoved == 0 || bytesRemoved > 60) |
| 1161 |
{ |
1162 |
{ |
| 1162 |
NS_LOG_ERROR ("Bytes removed: " << bytesRemoved << " invalid"); |
1163 |
NS_LOG_ERROR ("Bytes removed: " << bytesRemoved << " invalid"); |
| 1163 |
return; // Discard invalid packet |
1164 |
return; // Discard invalid packet |
| 1164 |
} |
1165 |
} |
| 1165 |
|
1166 |
else if (packet->GetSize () > 0 && OutOfRange (seq, seq + packet->GetSize ())) |
| 1166 |
m_rxTrace (packet, tcpHeader, this); |
|
|
| 1167 |
|
| 1168 |
ReadOptions (tcpHeader); |
| 1169 |
|
| 1170 |
if (tcpHeader.GetFlags () & TcpHeader::ACK) |
| 1171 |
{ |
| 1172 |
EstimateRtt (tcpHeader); |
| 1173 |
} |
| 1174 |
|
| 1175 |
// Discard fully out of range data packets |
| 1176 |
if (packet->GetSize () |
| 1177 |
&& OutOfRange (tcpHeader.GetSequenceNumber (), tcpHeader.GetSequenceNumber () + packet->GetSize ())) |
| 1178 |
{ |
1167 |
{ |
|
|
1168 |
// Discard fully out of range data packets |
| 1179 |
NS_LOG_LOGIC ("At state " << TcpStateName[m_state] << |
1169 |
NS_LOG_LOGIC ("At state " << TcpStateName[m_state] << |
| 1180 |
" received packet of seq [" << tcpHeader.GetSequenceNumber () << |
1170 |
" received packet of seq [" << tcpHeader.GetSequenceNumber () << |
| 1181 |
":" << tcpHeader.GetSequenceNumber () + packet->GetSize () << |
1171 |
":" << tcpHeader.GetSequenceNumber () + packet->GetSize () << |
|
Lines 1189-1194
TcpSocketBase::DoForwardUp (Ptr<Packet> packet, const Address &fromAddress,
|
Link Here
|
|---|
|
| 1189 |
return; |
1179 |
return; |
| 1190 |
} |
1180 |
} |
| 1191 |
|
1181 |
|
|
|
1182 |
m_rxTrace (packet, tcpHeader, this); |
| 1183 |
|
| 1184 |
ReadOptions (tcpHeader); |
| 1185 |
|
| 1186 |
if (tcpHeader.GetFlags () & TcpHeader::ACK) |
| 1187 |
{ |
| 1188 |
EstimateRtt (tcpHeader); |
| 1189 |
} |
| 1190 |
|
| 1192 |
// Update Rx window size, i.e. the flow control window |
1191 |
// Update Rx window size, i.e. the flow control window |
| 1193 |
if (tcpHeader.GetFlags () & TcpHeader::ACK) |
1192 |
if (tcpHeader.GetFlags () & TcpHeader::ACK) |
| 1194 |
{ |
1193 |
{ |