|
Lines 512-518
TcpL4Protocol::Receive (Ptr<Packet> pack
|
Link Here
|
|---|
|
| 512 |
source.Print (oss); |
512 |
source.Print (oss); |
| 513 |
oss<<" source port: "<<tcpHeader.GetSourcePort (); |
513 |
oss<<" source port: "<<tcpHeader.GetSourcePort (); |
| 514 |
NS_LOG_LOGIC (oss.str ()); |
514 |
NS_LOG_LOGIC (oss.str ()); |
| 515 |
return Ipv4L4Protocol::RX_ENDPOINT_UNREACH; |
515 |
|
|
|
516 |
if (!(tcpHeader.GetFlags () & TcpHeader::RST)) |
| 517 |
{ |
| 518 |
// build a RST packet and send |
| 519 |
Ptr<Packet> rstPacket = Create<Packet> (); |
| 520 |
TcpHeader header; |
| 521 |
if (tcpHeader.GetFlags () & TcpHeader::ACK) |
| 522 |
{ |
| 523 |
// ACK bit was set |
| 524 |
header.SetFlags (TcpHeader::RST); |
| 525 |
header.SetSequenceNumber (header.GetAckNumber ()); |
| 526 |
} |
| 527 |
else |
| 528 |
{ |
| 529 |
header.SetFlags (TcpHeader::RST | TcpHeader::ACK); |
| 530 |
header.SetSequenceNumber (SequenceNumber (0)); |
| 531 |
header.SetAckNumber (header.GetSequenceNumber () + SequenceNumber (1)); |
| 532 |
} |
| 533 |
header.SetSourcePort (tcpHeader.GetDestinationPort ()); |
| 534 |
header.SetDestinationPort (tcpHeader.GetSourcePort ()); |
| 535 |
SendPacket (rstPacket, header, destination, source); |
| 536 |
return Ipv4L4Protocol::RX_OK; |
| 537 |
} |
| 538 |
else |
| 539 |
{ |
| 540 |
return Ipv4L4Protocol::RX_ENDPOINT_UNREACH; |
| 541 |
} |
| 516 |
} |
542 |
} |
| 517 |
NS_ASSERT_MSG (endPoints.size() == 1 , "Demux returned more than one endpoint"); |
543 |
NS_ASSERT_MSG (endPoints.size() == 1 , "Demux returned more than one endpoint"); |
| 518 |
NS_LOG_LOGIC ("TcpL4Protocol "<<this<<" forwarding up to endpoint/socket"); |
544 |
NS_LOG_LOGIC ("TcpL4Protocol "<<this<<" forwarding up to endpoint/socket"); |