Ignore:
File:
1 edited

Legend:

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

    r9520af7 r7c15d6f  
    4343#include <mem.h>
    4444#include <stdlib.h>
    45 
    4645#include "conn.h"
    47 #include "inet.h"
    4846#include "ncsim.h"
     47#include "pdu.h"
    4948#include "rqueue.h"
    5049#include "segment.h"
    5150#include "seq_no.h"
    5251#include "tqueue.h"
     52#include "tcp.h"
    5353#include "tcp_type.h"
    5454
    5555#define RETRANSMIT_TIMEOUT      (2*1000*1000)
    5656
    57 static void retransmit_timeout_func(void *);
    58 static void tcp_tqueue_timer_set(tcp_conn_t *);
    59 static void tcp_tqueue_timer_clear(tcp_conn_t *);
    60 static void tcp_tqueue_seg(tcp_conn_t *, tcp_segment_t *);
    61 static void tcp_conn_transmit_segment(tcp_conn_t *, tcp_segment_t *);
    62 static void tcp_prepare_transmit_segment(tcp_conn_t *, tcp_segment_t *);
    63 static void tcp_tqueue_send_immed(tcp_conn_t *, tcp_segment_t *);
    64 
    65 int tcp_tqueue_init(tcp_tqueue_t *tqueue, tcp_conn_t *conn,
    66     tcp_tqueue_cb_t *cb)
     57static void retransmit_timeout_func(void *arg);
     58static void tcp_tqueue_timer_set(tcp_conn_t *conn);
     59static void tcp_tqueue_timer_clear(tcp_conn_t *conn);
     60
     61int tcp_tqueue_init(tcp_tqueue_t *tqueue, tcp_conn_t *conn)
    6762{
    6863        tqueue->conn = conn;
    6964        tqueue->timer = fibril_timer_create(&conn->lock);
    70         tqueue->cb = cb;
    7165        if (tqueue->timer == NULL)
    7266                return ENOMEM;
     
    8478void tcp_tqueue_fini(tcp_tqueue_t *tqueue)
    8579{
    86         link_t *link;
    87         tcp_tqueue_entry_t *tqe;
    88 
    8980        if (tqueue->timer != NULL) {
    9081                fibril_timer_destroy(tqueue->timer);
    9182                tqueue->timer = NULL;
    9283        }
    93 
    94         while (!list_empty(&tqueue->list)) {
    95                 link = list_first(&tqueue->list);
    96                 tqe = list_get_instance(link, tcp_tqueue_entry_t, link);
    97                 list_remove(link);
    98 
    99                 tcp_segment_delete(tqe->seg);
    100                 free(tqe);
    101         }
    10284}
    10385
     
    10587{
    10688        tcp_segment_t *seg;
    107 
    108         assert(fibril_mutex_is_locked(&conn->lock));
    10989
    11090        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_tqueue_ctrl_seg(%p, %u)", conn, ctrl);
     
    11595}
    11696
    117 static void tcp_tqueue_seg(tcp_conn_t *conn, tcp_segment_t *seg)
     97void tcp_tqueue_seg(tcp_conn_t *conn, tcp_segment_t *seg)
    11898{
    11999        tcp_segment_t *rt_seg;
    120100        tcp_tqueue_entry_t *tqe;
    121 
    122         assert(fibril_mutex_is_locked(&conn->lock));
    123101
    124102        log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: tcp_tqueue_seg(%p, %p)", conn->name, conn,
     
    157135}
    158136
    159 static void tcp_prepare_transmit_segment(tcp_conn_t *conn, tcp_segment_t *seg)
     137void tcp_prepare_transmit_segment(tcp_conn_t *conn, tcp_segment_t *seg)
    160138{
    161139        /*
     
    289267}
    290268
    291 static void tcp_conn_transmit_segment(tcp_conn_t *conn, tcp_segment_t *seg)
     269void tcp_conn_transmit_segment(tcp_conn_t *conn, tcp_segment_t *seg)
    292270{
    293271        log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: tcp_conn_transmit_segment(%p, %p)",
     
    301279                seg->ack = 0;
    302280
    303         tcp_tqueue_send_immed(conn, seg);
    304 }
    305 
    306 void tcp_tqueue_send_immed(tcp_conn_t *conn, tcp_segment_t *seg)
     281        tcp_transmit_segment(&conn->ident, seg);
     282}
     283
     284void tcp_transmit_segment(inet_ep2_t *epp, tcp_segment_t *seg)
    307285{
    308286        log_msg(LOG_DEFAULT, LVL_DEBUG,
    309             "tcp_tqueue_send_immed(l:(%u),f:(%u), %p)",
    310             conn->ident.local.port, conn->ident.remote.port, seg);
     287            "tcp_transmit_segment(l:(%u),f:(%u), %p)",
     288            epp->local.port, epp->remote.port, seg);
    311289
    312290        log_msg(LOG_DEFAULT, LVL_DEBUG, "SEG.SEQ=%" PRIu32 ", SEG.WND=%" PRIu32,
     
    314292
    315293        tcp_segment_dump(seg);
    316 
    317         conn->retransmit.cb->transmit_seg(&conn->ident, seg);
     294/*
     295        tcp_pdu_prepare(conn, seg, &data, &len);
     296        tcp_pdu_transmit(data, len);
     297*/
     298//      tcp_rqueue_bounce_seg(sp, seg);
     299//      tcp_ncsim_bounce_seg(sp, seg);
     300
     301        tcp_pdu_t *pdu;
     302
     303        if (tcp_pdu_encode(epp, seg, &pdu) != EOK) {
     304                log_msg(LOG_DEFAULT, LVL_WARN, "Not enough memory. Segment dropped.");
     305                return;
     306        }
     307
     308        tcp_transmit_pdu(pdu);
     309        tcp_pdu_delete(pdu);
    318310}
    319311
     
    370362static void tcp_tqueue_timer_set(tcp_conn_t *conn)
    371363{
    372         assert(fibril_mutex_is_locked(&conn->lock));
    373 
    374364        log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: tcp_tqueue_timer_set() begin", conn->name);
    375365
     
    387377static void tcp_tqueue_timer_clear(tcp_conn_t *conn)
    388378{
    389         assert(fibril_mutex_is_locked(&conn->lock));
    390 
    391379        log_msg(LOG_DEFAULT, LVL_DEBUG, "### %s: tcp_tqueue_timer_clear() begin", conn->name);
    392380
Note: See TracChangeset for help on using the changeset viewer.