Changeset f023251 in mainline for uspace/srv/net/inetsrv/icmp.c
- Timestamp:
- 2013-09-29T21:06:10Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e948fde
- Parents:
- 13be2583
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/inetsrv/icmp.c
r13be2583 rf023251 123 123 { 124 124 log_msg(LOG_DEFAULT, LVL_DEBUG, "icmp_recv_echo_reply()"); 125 125 126 126 if (dgram->size < sizeof(icmp_echo_t)) 127 127 return EINVAL; 128 128 129 129 icmp_echo_t *reply = (icmp_echo_t *) dgram->data; 130 130 131 131 inetping_sdu_t sdu; 132 133 uint16_t family= inet_addr_get(&dgram->src, &sdu.src, NULL);134 if ( family != AF_INET)132 133 ip_ver_t ver = inet_addr_get(&dgram->src, &sdu.src, NULL); 134 if (ver != ip_v4) 135 135 return EINVAL; 136 137 family= inet_addr_get(&dgram->dest, &sdu.dest, NULL);138 if ( family != AF_INET)136 137 ver = inet_addr_get(&dgram->dest, &sdu.dest, NULL); 138 if (ver != ip_v4) 139 139 return EINVAL; 140 140 141 141 sdu.seq_no = uint16_t_be2host(reply->seq_no); 142 142 sdu.data = reply + sizeof(icmp_echo_t); 143 143 sdu.size = dgram->size - sizeof(icmp_echo_t); 144 144 145 145 uint16_t ident = uint16_t_be2host(reply->ident); 146 146 … … 154 154 if (rdata == NULL) 155 155 return ENOMEM; 156 156 157 157 icmp_echo_t *request = (icmp_echo_t *) rdata; 158 158 159 159 request->type = ICMP_ECHO_REQUEST; 160 160 request->code = 0; … … 162 162 request->ident = host2uint16_t_be(ident); 163 163 request->seq_no = host2uint16_t_be(sdu->seq_no); 164 164 165 165 memcpy(rdata + sizeof(icmp_echo_t), sdu->data, sdu->size); 166 166 167 167 uint16_t checksum = inet_checksum_calc(INET_CHECKSUM_INIT, rdata, rsize); 168 168 request->checksum = host2uint16_t_be(checksum); 169 169 170 170 inet_dgram_t dgram; 171 171 172 172 inet_addr_set(sdu->src, &dgram.src); 173 173 inet_addr_set(sdu->dest, &dgram.dest); 174 174 175 175 dgram.iplink = 0; 176 176 dgram.tos = ICMP_TOS; 177 177 dgram.data = rdata; 178 178 dgram.size = rsize; 179 179 180 180 int rc = inet_route_packet(&dgram, IP_PROTO_ICMP, INET_TTL_MAX, 0); 181 181 182 182 free(rdata); 183 183 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.