Changeset 6896409c in mainline for uspace/srv/net/tl/tcp/tqueue.c


Ignore:
Timestamp:
2011-11-21T22:46:37Z (12 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1812a0d
Parents:
eea65f4
Message:

Fix off-by-one bug in BIT_V.
Fix FIN being sent too early.
Fix FIN not being sent.
Fix seg→len from decoded PDU.
Add segment dumps.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/tl/tcp/tqueue.c

    reea65f4 r6896409c  
    152152        size_t data_size;
    153153        tcp_control_t ctrl;
     154        bool send_fin;
    154155
    155156        tcp_segment_t *seg;
    156157
    157         log_msg(LVL_DEBUG, "tcp_tqueue_new_data()");
     158        log_msg(LVL_DEBUG, "%s: tcp_tqueue_new_data()", conn->name);
    158159
    159160        /* Number of free sequence numbers in send window */
     
    162163
    163164        xfer_seqlen = min(snd_buf_seqlen, avail_wnd);
    164         log_msg(LVL_DEBUG, "snd_buf_seqlen = %zu, SND.WND = %zu, "
    165             "xfer_seqlen = %zu", snd_buf_seqlen, conn->snd_wnd,
     165        log_msg(LVL_DEBUG, "%s: snd_buf_seqlen = %zu, SND.WND = %zu, "
     166            "xfer_seqlen = %zu", conn->name, snd_buf_seqlen, conn->snd_wnd,
    166167            xfer_seqlen);
    167168
     
    171172        /* XXX Do not always send immediately */
    172173
    173         data_size = xfer_seqlen - (conn->snd_buf_fin ? 1 : 0);
    174         if (conn->snd_buf_fin && data_size + 1 == xfer_seqlen) {
     174        send_fin = conn->snd_buf_fin && xfer_seqlen == snd_buf_seqlen;
     175        data_size = xfer_seqlen - (send_fin ? 1 : 0);
     176
     177        if (send_fin) {
     178                log_msg(LVL_DEBUG, "%s: Sending out FIN.", conn->name);
    175179                /* We are sending out FIN */
    176180                ctrl = CTL_FIN;
     
    190194            conn->snd_buf_used - data_size);
    191195        conn->snd_buf_used -= data_size;
    192         conn->snd_buf_fin = false;
     196
     197        if (send_fin)
     198                conn->snd_buf_fin = false;
    193199
    194200        tcp_tqueue_seg(conn, seg);
     
    261267        log_msg(LVL_DEBUG, "SEG.SEQ=%" PRIu32 ", SEG.WND=%" PRIu32,
    262268            seg->seq, seg->wnd);
     269
     270        tcp_segment_dump(seg);
    263271/*
    264272        tcp_pdu_prepare(conn, seg, &data, &len);
Note: See TracChangeset for help on using the changeset viewer.