Changeset fe4310f in mainline for uspace/srv/inet/pdu.c


Ignore:
Timestamp:
2012-02-12T22:40:15Z (12 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
2ff150e
Parents:
bd8bfc5a
Message:

Distinguish between datagram and packet. Deliver received datagrams to
clients based on protocol number.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/inet/pdu.c

    rbd8bfc5a rfe4310f  
    4848
    4949/** Encode Internet PDU.
    50  *
    51  * XXX We should be encoding from packet, not from datagram.
    5250 */
    53 int inet_pdu_encode(inet_dgram_t *dgram, uint8_t ttl, int df, void **rdata,
    54     size_t *rsize)
     51int inet_pdu_encode(inet_packet_t *packet, void **rdata, size_t *rsize)
    5552{
    5653        void *data;
     
    6158
    6259        hdr_size = sizeof(ip_header_t);
    63         size = hdr_size + dgram->size;
     60        size = hdr_size + packet->size;
    6461        data_offs = ROUND_UP(hdr_size, 4);
    6562
     
    7067        hdr = (ip_header_t *)data;
    7168        hdr->ver_ihl = (4 << VI_VERSION_l) | (hdr_size / sizeof(uint32_t));
    72         hdr->tos = dgram->tos;
     69        hdr->tos = packet->tos;
    7370        hdr->tot_len = host2uint16_t_be(size);
    7471        hdr->id = host2uint16_t_be(42);
    75         hdr->flags_foff = host2uint16_t_be(df ? BIT_V(uint16_t, FF_FLAG_DF) : 0);
    76         hdr->ttl = ttl;
     72        hdr->flags_foff = host2uint16_t_be(packet->df ?
     73            BIT_V(uint16_t, FF_FLAG_DF) : 0);
     74        hdr->ttl = packet->ttl;
    7775        hdr->proto = 0;
    7876        hdr->chksum = 0;
    79         hdr->src_addr = host2uint32_t_be(dgram->src.ipv4);
    80         hdr->dest_addr = host2uint32_t_be(dgram->dest.ipv4);
     77        hdr->src_addr = host2uint32_t_be(packet->src.ipv4);
     78        hdr->dest_addr = host2uint32_t_be(packet->dest.ipv4);
    8179
    82         memcpy((uint8_t *)data + data_offs, dgram->data, dgram->size);
     80        memcpy((uint8_t *)data + data_offs, packet->data, packet->size);
    8381
    8482        *rdata = data;
     
    8785}
    8886
    89 int inet_pdu_decode(void *data, size_t size, inet_dgram_t *dgram, uint8_t *ttl,
    90     int *df)
     87int inet_pdu_decode(void *data, size_t size, inet_packet_t *packet)
    9188{
    9289        ip_header_t *hdr;
     
    131128        /* XXX Checksum */
    132129
    133         dgram->src.ipv4 = uint32_t_be2host(hdr->src_addr);
    134         dgram->dest.ipv4 = uint32_t_be2host(hdr->dest_addr);
    135         dgram->tos = hdr->tos;
    136         *ttl = hdr->ttl;
    137         *df = (uint16_t_be2host(hdr->tos) & BIT_V(uint16_t, FF_FLAG_DF)) ?
    138             1 : 0;
     130        packet->src.ipv4 = uint32_t_be2host(hdr->src_addr);
     131        packet->dest.ipv4 = uint32_t_be2host(hdr->dest_addr);
     132        packet->tos = hdr->tos;
     133        packet->ttl = hdr->ttl;
     134        packet->df = (uint16_t_be2host(hdr->tos) & BIT_V(uint16_t, FF_FLAG_DF))
     135            ? 1 : 0;
    139136
    140137        /* XXX IP options */
     
    142139            VI_IHL_l, hdr->ver_ihl);
    143140
    144         dgram->size = tot_len - data_offs;
    145         dgram->data = calloc(dgram->size, 1);
    146         if (dgram->data == NULL) {
     141        packet->size = tot_len - data_offs;
     142        packet->data = calloc(packet->size, 1);
     143        if (packet->data == NULL) {
    147144                log_msg(LVL_WARN, "Out of memory.");
    148145                return ENOMEM;
    149146        }
    150147
    151         memcpy(dgram->data, (uint8_t *)data + data_offs, dgram->size);
     148        memcpy(packet->data, (uint8_t *)data + data_offs, packet->size);
    152149
    153150        return EOK;
Note: See TracChangeset for help on using the changeset viewer.