View | Details | Raw Unified | Return to bug 615
Collapse All | Expand All

(-)a/src/internet-stack/tcp-l4-protocol.cc (-1 / +27 lines)
 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");

Return to bug 615