Changeset c6588ce in mainline for uspace/lib/net
- Timestamp:
- 2012-05-05T08:12:17Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/fix-logger-deadlock, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ee04c28
- Parents:
- 2cc7f16 (diff), d21e935c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- uspace/lib/net
- Files:
-
- 37 deleted
- 3 edited
-
Makefile (modified) (1 diff)
-
adt/module_map.c (deleted)
-
generic/generic.c (deleted)
-
generic/net_checksum.c (deleted)
-
generic/net_remote.c (deleted)
-
generic/packet_client.c (deleted)
-
generic/packet_remote.c (deleted)
-
generic/protocol_map.c (deleted)
-
il/arp_remote.c (deleted)
-
il/il_remote.c (deleted)
-
il/il_skel.c (deleted)
-
il/ip_client.c (deleted)
-
il/ip_remote.c (deleted)
-
include/adt/module_map.h (deleted)
-
include/arp_interface.h (deleted)
-
include/generic.h (deleted)
-
include/icmp_header.h (deleted)
-
include/icmp_remote.h (deleted)
-
include/il_skel.h (deleted)
-
include/ip_client.h (deleted)
-
include/ip_header.h (deleted)
-
include/ip_interface.h (deleted)
-
include/ip_remote.h (deleted)
-
include/net_interface.h (deleted)
-
include/nil_remote.h (deleted)
-
include/nil_skel.h (deleted)
-
include/packet_client.h (deleted)
-
include/protocol_map.h (deleted)
-
include/socket_core.h (modified) (3 diffs)
-
include/tl_common.h (deleted)
-
include/tl_remote.h (deleted)
-
include/tl_skel.h (deleted)
-
nil/nil_remote.c (deleted)
-
nil/nil_skel.c (deleted)
-
tl/icmp_client.c (deleted)
-
tl/icmp_remote.c (deleted)
-
tl/socket_core.c (modified) (4 diffs)
-
tl/tl_common.c (deleted)
-
tl/tl_remote.c (deleted)
-
tl/tl_skel.c (deleted)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/net/Makefile
r2cc7f16 rc6588ce 33 33 34 34 SOURCES = \ 35 generic/generic.c \ 36 generic/net_remote.c \ 37 generic/net_checksum.c \ 38 generic/packet_client.c \ 39 generic/packet_remote.c \ 40 generic/protocol_map.c \ 41 adt/module_map.c \ 42 nil/nil_remote.c \ 43 nil/nil_skel.c \ 44 il/il_remote.c \ 45 il/il_skel.c \ 46 il/ip_remote.c \ 47 il/ip_client.c \ 48 il/arp_remote.c \ 49 tl/icmp_remote.c \ 50 tl/icmp_client.c \ 51 tl/socket_core.c \ 52 tl/tl_common.c \ 53 tl/tl_remote.c \ 54 tl/tl_skel.c 35 tl/socket_core.c 55 36 56 37 include $(USPACE_PREFIX)/Makefile.common -
uspace/lib/net/include/socket_core.h
r2cc7f16 rc6588ce 44 44 #include <net/in.h> 45 45 #include <net/device.h> 46 #include <net/packet.h>47 46 #include <async.h> 48 47 … … 80 79 /** Bound port. */ 81 80 int port; 82 /** Received packets queue. */83 dyn_fifo_t received;84 81 /** Sockets for acceptance queue. */ 85 82 dyn_fifo_t accepted; … … 118 115 extern int socket_destroy(async_sess_t *, int, socket_cores_t *, 119 116 socket_ports_t *, void (*)(socket_core_t *)); 120 extern int socket_reply_packets(packet_t *, size_t *);121 117 extern socket_core_t *socket_port_find(socket_ports_t *, int, const uint8_t *, 122 118 size_t); -
uspace/lib/net/tl/socket_core.c
r2cc7f16 rc6588ce 36 36 37 37 #include <socket_core.h> 38 #include <packet_client.h>39 #include <packet_remote.h>40 38 #include <net/socket_codes.h> 41 39 #include <net/in.h> 42 40 #include <net/inet.h> 43 #include <net/packet.h>44 #include <net/modules.h>45 41 #include <stdint.h> 46 42 #include <stdlib.h> … … 92 88 } 93 89 94 /* Release all received packets */95 int packet_id;96 while ((packet_id = dyn_fifo_pop(&socket->received)) >= 0)97 pq_release_remote(sess, packet_id);98 99 dyn_fifo_destroy(&socket->received);100 90 dyn_fifo_destroy(&socket->accepted); 101 91 … … 448 438 socket->key_length = 0; 449 439 socket->specific_data = specific_data; 450 rc = dyn_fifo_initialize(&socket->received, SOCKET_INITIAL_RECEIVED_SIZE); 440 441 rc = dyn_fifo_initialize(&socket->accepted, SOCKET_INITIAL_ACCEPTED_SIZE); 451 442 if (rc != EOK) { 452 443 free(socket); 453 444 return rc; 454 445 } 455 456 rc = dyn_fifo_initialize(&socket->accepted, SOCKET_INITIAL_ACCEPTED_SIZE);457 if (rc != EOK) {458 dyn_fifo_destroy(&socket->received);459 free(socket);460 return rc;461 }462 446 socket->socket_id = *socket_id; 463 447 rc = socket_cores_add(local_sockets, socket->socket_id, socket); 464 448 if (rc < 0) { 465 dyn_fifo_destroy(&socket->received);466 449 dyn_fifo_destroy(&socket->accepted); 467 450 free(socket); … … 506 489 socket_destroy_core(sess, socket, local_sockets, global_sockets, 507 490 socket_release); 508 509 return EOK;510 }511 512 /** Replies the packet or the packet queue data to the application via the513 * socket.514 *515 * Uses the current message processing fibril.516 *517 * @param[in] packet The packet to be transfered.518 * @param[out] length The total data length.519 * @return EOK on success.520 * @return EBADMEM if the length parameter is NULL.521 * @return ENOMEM if there is not enough memory left.522 * @return Other error codes as defined for the data_reply()523 * function.524 */525 int socket_reply_packets(packet_t *packet, size_t *length)526 {527 packet_t *next_packet;528 size_t fragments;529 size_t *lengths;530 size_t index;531 int rc;532 533 if (!length)534 return EBADMEM;535 536 next_packet = pq_next(packet);537 if (!next_packet) {538 /* Write all if only one fragment */539 rc = data_reply(packet_get_data(packet),540 packet_get_data_length(packet));541 if (rc != EOK)542 return rc;543 /* Store the total length */544 *length = packet_get_data_length(packet);545 } else {546 /* Count the packet fragments */547 fragments = 1;548 next_packet = pq_next(packet);549 while ((next_packet = pq_next(next_packet)))550 ++fragments;551 552 /* Compute and store the fragment lengths */553 lengths = (size_t *) malloc(sizeof(size_t) * fragments +554 sizeof(size_t));555 if (!lengths)556 return ENOMEM;557 558 lengths[0] = packet_get_data_length(packet);559 lengths[fragments] = lengths[0];560 next_packet = pq_next(packet);561 562 for (index = 1; index < fragments; ++index) {563 lengths[index] = packet_get_data_length(next_packet);564 lengths[fragments] += lengths[index];565 next_packet = pq_next(packet);566 }567 568 /* Write the fragment lengths */569 rc = data_reply(lengths, sizeof(int) * (fragments + 1));570 if (rc != EOK) {571 free(lengths);572 return rc;573 }574 next_packet = packet;575 576 /* Write the fragments */577 for (index = 0; index < fragments; ++index) {578 rc = data_reply(packet_get_data(next_packet),579 lengths[index]);580 if (rc != EOK) {581 free(lengths);582 return rc;583 }584 next_packet = pq_next(next_packet);585 }586 587 /* Store the total length */588 *length = lengths[fragments];589 free(lengths);590 }591 491 592 492 return EOK;
Note:
See TracChangeset
for help on using the changeset viewer.
