Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/inetsrv/icmp.c

    ra2e3ee6 ra1a101d  
    120120static int icmp_recv_echo_reply(inet_dgram_t *dgram)
    121121{
     122        icmp_echo_t *reply;
     123        inetping_sdu_t sdu;
     124        uint16_t ident;
     125
    122126        log_msg(LOG_DEFAULT, LVL_DEBUG, "icmp_recv_echo_reply()");
    123        
     127
    124128        if (dgram->size < sizeof(icmp_echo_t))
    125129                return EINVAL;
    126        
    127         icmp_echo_t *reply = (icmp_echo_t *) dgram->data;
    128        
    129         inetping_sdu_t sdu;
    130        
    131         int rc = inet_addr_pack(&dgram->src, &sdu.src);
    132         if (rc != EOK)
    133                 return rc;
    134        
    135         rc = inet_addr_pack(&dgram->dest, &sdu.dest);
    136         if (rc != EOK)
    137                 return rc;
    138        
     130
     131        reply = (icmp_echo_t *)dgram->data;
     132
     133        sdu.src = dgram->src;
     134        sdu.dest = dgram->dest;
    139135        sdu.seq_no = uint16_t_be2host(reply->seq_no);
    140136        sdu.data = reply + sizeof(icmp_echo_t);
    141137        sdu.size = dgram->size - sizeof(icmp_echo_t);
    142        
    143         uint16_t ident = uint16_t_be2host(reply->ident);
     138        ident = uint16_t_be2host(reply->ident);
    144139
    145140        return inetping_recv(ident, &sdu);
     
    148143int icmp_ping_send(uint16_t ident, inetping_sdu_t *sdu)
    149144{
    150         size_t rsize = sizeof(icmp_echo_t) + sdu->size;
    151         void *rdata = calloc(rsize, 1);
     145        inet_dgram_t dgram;
     146        icmp_echo_t *request;
     147        void *rdata;
     148        size_t rsize;
     149        uint16_t checksum;
     150        int rc;
     151
     152        rsize = sizeof(icmp_echo_t) + sdu->size;
     153        rdata = calloc(rsize, 1);
    152154        if (rdata == NULL)
    153155                return ENOMEM;
    154        
    155         icmp_echo_t *request = (icmp_echo_t *)rdata;
    156        
     156
     157        request = (icmp_echo_t *)rdata;
     158
    157159        request->type = ICMP_ECHO_REQUEST;
    158160        request->code = 0;
     
    160162        request->ident = host2uint16_t_be(ident);
    161163        request->seq_no = host2uint16_t_be(sdu->seq_no);
    162        
     164
    163165        memcpy(rdata + sizeof(icmp_echo_t), sdu->data, sdu->size);
    164        
    165         uint16_t checksum = inet_checksum_calc(INET_CHECKSUM_INIT, rdata, rsize);
     166
     167        checksum = inet_checksum_calc(INET_CHECKSUM_INIT, rdata, rsize);
    166168        request->checksum = host2uint16_t_be(checksum);
    167        
    168         inet_dgram_t dgram;
    169        
    170         inet_addr_unpack(sdu->src, &dgram.src);
    171         inet_addr_unpack(sdu->dest, &dgram.dest);
    172        
     169
     170        dgram.src = sdu->src;
     171        dgram.dest = sdu->dest;
    173172        dgram.tos = ICMP_TOS;
    174173        dgram.data = rdata;
    175174        dgram.size = rsize;
    176        
    177         int rc = inet_route_packet(&dgram, IP_PROTO_ICMP, INET_TTL_MAX, 0);
    178        
     175
     176        rc = inet_route_packet(&dgram, IP_PROTO_ICMP, INET_TTL_MAX, 0);
     177
    179178        free(rdata);
    180179        return rc;
Note: See TracChangeset for help on using the changeset viewer.