Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 92b42442 in mainline for uspace/srv/udp/udp_inet.c


Ignore:
Timestamp:
2012-04-05T21:16:00Z (10 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master
Children:
7094e196
Parents:
ee603c4
Message:

UDP datagram reception plus fixes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/udp/udp_inet.c

    ree603c4 r92b42442  
    4343#include <task.h>
    4444
     45#include "assoc.h"
     46#include "pdu.h"
    4547#include "std.h"
    4648#include "udp_inet.h"
     
    4850
    4951static int udp_inet_ev_recv(inet_dgram_t *dgram);
    50 //static void tcp_received_pdu(tcp_pdu_t *pdu);
     52static void udp_received_pdu(udp_pdu_t *pdu);
    5153
    5254static inet_ev_ops_t udp_inet_ev_ops = {
     
    5759static int udp_inet_ev_recv(inet_dgram_t *dgram)
    5860{
    59         uint8_t *pdu_raw;
    60         size_t pdu_raw_size;
     61        udp_pdu_t *pdu;
    6162
    6263        log_msg(LVL_DEBUG, "udp_inet_ev_recv()");
    6364
    64         pdu_raw = dgram->data;
    65         pdu_raw_size = dgram->size;
     65        pdu = udp_pdu_new();
     66        pdu->data = dgram->data;
     67        pdu->data_size = dgram->size;
    6668
    67         (void)pdu_raw;
    68         (void)pdu_raw_size;
    69         /* Split into header and payload. */
    70 /*
    71         log_msg(LVL_DEBUG, "tcp_inet_ev_recv() - split header/payload");
     69        pdu->src.ipv4 = dgram->src.ipv4;
     70        pdu->dest.ipv4 = dgram->dest.ipv4;
     71        log_msg(LVL_DEBUG, "src: 0x%08x, dest: 0x%08x",
     72            pdu->src.ipv4, pdu->dest.ipv4);
    7273
    73         tcp_pdu_t *pdu;
    74         size_t hdr_size;
    75         tcp_header_t *hdr;
    76         uint32_t data_offset;
     74        udp_received_pdu(pdu);
     75        udp_pdu_delete(pdu);
    7776
    78         if (pdu_raw_size < sizeof(tcp_header_t)) {
    79                 log_msg(LVL_WARN, "pdu_raw_size = %zu < sizeof(tcp_header_t) = %zu",
    80                     pdu_raw_size, sizeof(tcp_header_t));
    81                 return EINVAL;
    82         }
    83 
    84         hdr = (tcp_header_t *)pdu_raw;
    85         data_offset = BIT_RANGE_EXTRACT(uint32_t, DF_DATA_OFFSET_h, DF_DATA_OFFSET_l,
    86             uint16_t_be2host(hdr->doff_flags));
    87 
    88         hdr_size = sizeof(uint32_t) * data_offset;
    89 
    90         if (pdu_raw_size < hdr_size) {
    91                 log_msg(LVL_WARN, "pdu_raw_size = %zu < hdr_size = %zu",
    92                     pdu_raw_size, hdr_size);
    93                 return EINVAL;
    94         }
    95 
    96         if (hdr_size < sizeof(tcp_header_t)) {
    97                 log_msg(LVL_WARN, "hdr_size = %zu < sizeof(tcp_header_t) = %zu",
    98                     hdr_size, sizeof(tcp_header_t));            return EINVAL;
    99         }
    100 
    101         log_msg(LVL_DEBUG, "pdu_raw_size=%zu, hdr_size=%zu",
    102             pdu_raw_size, hdr_size);
    103         pdu = tcp_pdu_create(pdu_raw, hdr_size, pdu_raw + hdr_size,
    104             pdu_raw_size - hdr_size);
    105         if (pdu == NULL) {
    106                 log_msg(LVL_WARN, "Failed creating PDU. Dropped.");
    107                 return ENOMEM;
    108         }
    109 
    110         pdu->src_addr.ipv4 = dgram->src.ipv4;
    111         pdu->dest_addr.ipv4 = dgram->dest.ipv4;
    112         log_msg(LVL_DEBUG, "src: 0x%08x, dest: 0x%08x",
    113             pdu->src_addr.ipv4, pdu->dest_addr.ipv4);
    114 
    115         tcp_received_pdu(pdu);
    116         tcp_pdu_delete(pdu);
    117 */
    11877        return EOK;
    11978}
     
    12483        int rc;
    12584        inet_dgram_t dgram;
     85
     86        log_msg(LVL_DEBUG, "udp_transmit_pdu()");
    12687
    12788        dgram.src.ipv4 = pdu->src.ipv4;
     
    139100
    140101/** Process received PDU. */
    141 /*
    142 static void tcp_received_pdu(tcp_pdu_t *pdu)
     102static void udp_received_pdu(udp_pdu_t *pdu)
    143103{
    144         tcp_segment_t *dseg;
    145         tcp_sockpair_t rident;
     104        udp_msg_t *dmsg;
     105        udp_sockpair_t rident;
    146106
    147         log_msg(LVL_DEBUG, "tcp_received_pdu()");
     107        log_msg(LVL_DEBUG, "udp_received_pdu()");
    148108
    149         if (tcp_pdu_decode(pdu, &rident, &dseg) != EOK) {
     109        if (udp_pdu_decode(pdu, &rident, &dmsg) != EOK) {
    150110                log_msg(LVL_WARN, "Not enough memory. PDU dropped.");
    151111                return;
    152112        }
    153 */
    154         /* Insert decoded segment into rqueue */
    155 /*      tcp_rqueue_insert_seg(&rident, dseg);
     113
     114        /*
     115         * Insert decoded message into appropriate receive queue.
     116         * This transfers ownership of dmsg to the callee, we do not
     117         * free it.
     118         */
     119        udp_assoc_received(&rident, dmsg);
    156120}
    157 */
     121
    158122int udp_inet_init(void)
    159123{
Note: See TracChangeset for help on using the changeset viewer.