Changeset a17356fd in mainline for uspace/srv/net/inetsrv/inet_link.c
- Timestamp:
- 2013-07-12T15:33:20Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- bb9b0c6
- Parents:
- f5f79cd
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/inetsrv/inet_link.c
rf5f79cd ra17356fd 201 201 goto error; 202 202 } 203 204 /* 205 * Get the MAC address of the link. If the link has a MAC 206 * address, we assume that it supports NDP. 207 */ 208 rc = iplink_get_mac48(ilink->iplink, &ilink->mac); 209 ilink->mac_valid = (rc == EOK); 203 210 204 211 log_msg(LOG_DEFAULT, LVL_DEBUG, "Opened IP link '%s'", ilink->svc_name); … … 298 305 } 299 306 300 /** Send datagram over Internet link */ 301 int inet_link_send_dgram(inet_link_t *ilink, inet_addr_t *lsrc, 302 inet_addr_t *ldest, inet_dgram_t *dgram, uint8_t proto, uint8_t ttl, int df) 303 { 307 /** Send IPv4 datagram over Internet link */ 308 int inet_link_send_dgram(inet_link_t *ilink, addr32_t lsrc, addr32_t ldest, 309 inet_dgram_t *dgram, uint8_t proto, uint8_t ttl, int df) 310 { 311 addr32_t src_v4; 312 uint16_t src_af = inet_addr_get(&dgram->src, &src_v4, NULL); 313 if (src_af != AF_INET) 314 return EINVAL; 315 316 addr32_t dest_v4; 317 uint16_t dest_af = inet_addr_get(&dgram->dest, &dest_v4, NULL); 318 if (dest_af != AF_INET) 319 return EINVAL; 320 304 321 /* 305 322 * Fill packet structure. Fragmentation is performed by 306 323 * inet_pdu_encode(). 307 324 */ 325 326 iplink_sdu_t sdu; 327 328 sdu.src = lsrc; 329 sdu.dest = ldest; 308 330 309 331 inet_packet_t packet; … … 318 340 packet.size = dgram->size; 319 341 320 iplink_sdu_t sdu;321 342 size_t offs = 0; 322 343 int rc; 323 324 sdu.src = *lsrc;325 sdu.dest = *ldest;326 344 327 345 do { 328 346 /* Encode one fragment */ 347 329 348 size_t roffs; 330 rc = inet_pdu_encode(&packet, offs, ilink->def_mtu, &sdu.data,331 &sdu. size, &roffs);349 rc = inet_pdu_encode(&packet, src_v4, dest_v4, offs, ilink->def_mtu, 350 &sdu.data, &sdu.size, &roffs); 332 351 if (rc != EOK) 333 352 return rc; … … 335 354 /* Send the PDU */ 336 355 rc = iplink_send(ilink->iplink, &sdu); 356 337 357 free(sdu.data); 338 358 offs = roffs; 359 } while (offs < packet.size); 360 361 return rc; 362 } 363 364 /** Send IPv6 datagram over Internet link */ 365 int inet_link_send_dgram6(inet_link_t *ilink, addr48_t ldest, 366 inet_dgram_t *dgram, uint8_t proto, uint8_t ttl, int df) 367 { 368 addr128_t src_v6; 369 uint16_t src_af = inet_addr_get(&dgram->src, NULL, &src_v6); 370 if (src_af != AF_INET6) 371 return EINVAL; 372 373 addr128_t dest_v6; 374 uint16_t dest_af = inet_addr_get(&dgram->dest, NULL, &dest_v6); 375 if (dest_af != AF_INET6) 376 return EINVAL; 377 378 iplink_sdu6_t sdu6; 379 addr48(ldest, sdu6.dest); 380 381 /* 382 * Fill packet structure. Fragmentation is performed by 383 * inet_pdu_encode6(). 384 */ 385 386 inet_packet_t packet; 387 388 packet.src = dgram->src; 389 packet.dest = dgram->dest; 390 packet.tos = dgram->tos; 391 packet.proto = proto; 392 packet.ttl = ttl; 393 packet.df = df; 394 packet.data = dgram->data; 395 packet.size = dgram->size; 396 397 int rc; 398 size_t offs = 0; 399 400 do { 401 /* Encode one fragment */ 402 403 size_t roffs; 404 rc = inet_pdu_encode6(&packet, src_v6, dest_v6, offs, ilink->def_mtu, 405 &sdu6.data, &sdu6.size, &roffs); 406 if (rc != EOK) 407 return rc; 408 409 /* Send the PDU */ 410 rc = iplink_send6(ilink->iplink, &sdu6); 411 412 free(sdu6.data); 339 413 offs = roffs; 340 414 } while (offs < packet.size);
Note:
See TracChangeset
for help on using the changeset viewer.