Changes in uspace/srv/net/tl/udp/udp.c [6b82009:348c589] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/tl/udp/udp.c
r6b82009 r348c589 99 99 static int udp_release_and_return(packet_t *packet, int result) 100 100 { 101 pq_release_remote(udp_globals.net_ sess, packet_get_id(packet));101 pq_release_remote(udp_globals.net_phone, packet_get_id(packet)); 102 102 return result; 103 103 } … … 192 192 ntohs(header->destination_port), (uint8_t *) SOCKET_MAP_KEY_LISTENING, 0); 193 193 if (!socket) { 194 if (tl_prepare_icmp_packet(udp_globals.net_ sess,195 udp_globals.icmp_ sess, packet, error) == EOK) {196 icmp_destination_unreachable_msg(udp_globals.icmp_ sess,194 if (tl_prepare_icmp_packet(udp_globals.net_phone, 195 udp_globals.icmp_phone, packet, error) == EOK) { 196 icmp_destination_unreachable_msg(udp_globals.icmp_phone, 197 197 ICMP_PORT_UNREACH, 0, packet); 198 198 } … … 251 251 while (tmp_packet) { 252 252 next_packet = pq_detach(tmp_packet); 253 pq_release_remote(udp_globals.net_ sess,253 pq_release_remote(udp_globals.net_phone, 254 254 packet_get_id(tmp_packet)); 255 255 tmp_packet = next_packet; … … 274 274 if (flip_checksum(compact_checksum(checksum)) != 275 275 IP_CHECKSUM_ZERO) { 276 if (tl_prepare_icmp_packet(udp_globals.net_ sess,277 udp_globals.icmp_ sess, packet, error) == EOK) {276 if (tl_prepare_icmp_packet(udp_globals.net_phone, 277 udp_globals.icmp_phone, packet, error) == EOK) { 278 278 /* Checksum error ICMP */ 279 279 icmp_parameter_problem_msg( 280 udp_globals.icmp_ sess, ICMP_PARAM_POINTER,280 udp_globals.icmp_phone, ICMP_PARAM_POINTER, 281 281 ((size_t) ((void *) &header->checksum)) - 282 282 ((size_t) ((void *) header)), packet); … … 292 292 return udp_release_and_return(packet, rc); 293 293 294 rc = tl_get_ip_packet_dimension(udp_globals.ip_ sess,294 rc = tl_get_ip_packet_dimension(udp_globals.ip_phone, 295 295 &udp_globals.dimensions, device_id, &packet_dimension); 296 296 if (rc != EOK) … … 299 299 /* Notify the destination socket */ 300 300 fibril_rwlock_write_unlock(&udp_globals.lock); 301 302 async_exch_t *exch = async_exchange_begin(socket->sess); 303 async_msg_5(exch, NET_SOCKET_RECEIVED, (sysarg_t) socket->socket_id, 304 packet_dimension->content, 0, 0, (sysarg_t) fragments); 305 async_exchange_end(exch); 301 async_msg_5(socket->phone, NET_SOCKET_RECEIVED, 302 (sysarg_t) socket->socket_id, packet_dimension->content, 0, 0, 303 (sysarg_t) fragments); 306 304 307 305 return EOK; … … 339 337 * @param[in] iid Message identifier. 340 338 * @param[in,out] icall Message parameters. 341 * @param[in] arg Local argument. 342 * 343 */ 344 static void udp_receiver(ipc_callid_t iid, ipc_call_t *icall, void *arg) 339 * 340 */ 341 static void udp_receiver(ipc_callid_t iid, ipc_call_t *icall) 345 342 { 346 343 packet_t *packet; … … 350 347 switch (IPC_GET_IMETHOD(*icall)) { 351 348 case NET_TL_RECEIVED: 352 rc = packet_translate_remote(udp_globals.net_ sess, &packet,349 rc = packet_translate_remote(udp_globals.net_phone, &packet, 353 350 IPC_GET_PACKET(*icall)); 354 351 if (rc == EOK) … … 368 365 /** Initialize the UDP module. 369 366 * 370 * @param[in] sess Network module session.367 * @param[in] net_phone Network module phone. 371 368 * 372 369 * @return EOK on success. … … 374 371 * 375 372 */ 376 int tl_initialize( async_sess_t *sess)373 int tl_initialize(int net_phone) 377 374 { 378 375 measured_string_t names[] = { … … 393 390 fibril_rwlock_write_lock(&udp_globals.lock); 394 391 395 udp_globals.net_sess = sess; 396 udp_globals.icmp_sess = icmp_connect_module(); 397 398 udp_globals.ip_sess = ip_bind_service(SERVICE_IP, IPPROTO_UDP, 399 SERVICE_UDP, udp_receiver); 400 if (udp_globals.ip_sess == NULL) { 401 fibril_rwlock_write_unlock(&udp_globals.lock); 402 return ENOENT; 392 udp_globals.net_phone = net_phone; 393 394 udp_globals.icmp_phone = icmp_connect_module(ICMP_CONNECT_TIMEOUT); 395 396 udp_globals.ip_phone = ip_bind_service(SERVICE_IP, IPPROTO_UDP, 397 SERVICE_UDP, udp_receiver); 398 if (udp_globals.ip_phone < 0) { 399 fibril_rwlock_write_unlock(&udp_globals.lock); 400 return udp_globals.ip_phone; 403 401 } 404 402 405 403 /* Read default packet dimensions */ 406 int rc = ip_packet_size_req(udp_globals.ip_ sess, -1,404 int rc = ip_packet_size_req(udp_globals.ip_phone, -1, 407 405 &udp_globals.packet_dimension); 408 406 if (rc != EOK) { … … 433 431 /* Get configuration */ 434 432 configuration = &names[0]; 435 rc = net_get_conf_req(udp_globals.net_ sess, &configuration, count,433 rc = net_get_conf_req(udp_globals.net_phone, &configuration, count, 436 434 &data); 437 435 if (rc != EOK) { … … 527 525 528 526 if (udp_globals.checksum_computing) { 529 rc = ip_get_route_req(udp_globals.ip_ sess, IPPROTO_UDP, addr,527 rc = ip_get_route_req(udp_globals.ip_phone, IPPROTO_UDP, addr, 530 528 addrlen, &device_id, &ip_header, &headerlen); 531 529 if (rc != EOK) 532 530 return rc; 533 531 /* Get the device packet dimension */ 534 // rc = tl_get_ip_packet_dimension(udp_globals.ip_ sess,532 // rc = tl_get_ip_packet_dimension(udp_globals.ip_phone, 535 533 // &udp_globals.dimensions, device_id, &packet_dimension); 536 534 // if (rc != EOK) … … 539 537 // } else { 540 538 /* Do not ask all the time */ 541 rc = ip_packet_size_req(udp_globals.ip_ sess, -1,539 rc = ip_packet_size_req(udp_globals.ip_phone, -1, 542 540 &udp_globals.packet_dimension); 543 541 if (rc != EOK) … … 557 555 558 556 /* Read the first packet fragment */ 559 result = tl_socket_read_packet_data(udp_globals.net_ sess, &packet,557 result = tl_socket_read_packet_data(udp_globals.net_phone, &packet, 560 558 UDP_HEADER_SIZE, packet_dimension, addr, addrlen); 561 559 if (result < 0) … … 578 576 /* Read the rest of the packet fragments */ 579 577 for (index = 1; index < fragments; index++) { 580 result = tl_socket_read_packet_data(udp_globals.net_ sess,578 result = tl_socket_read_packet_data(udp_globals.net_phone, 581 579 &next_packet, 0, packet_dimension, addr, addrlen); 582 580 if (result < 0) … … 630 628 631 629 /* Send the packet */ 632 ip_send_msg(udp_globals.ip_ sess, device_id, packet, SERVICE_UDP, 0);630 ip_send_msg(udp_globals.ip_phone, device_id, packet, SERVICE_UDP, 0); 633 631 634 632 return EOK; … … 677 675 return NO_DATA; 678 676 679 rc = packet_translate_remote(udp_globals.net_ sess, &packet, packet_id);677 rc = packet_translate_remote(udp_globals.net_phone, &packet, packet_id); 680 678 if (rc != EOK) { 681 679 (void) dyn_fifo_pop(&socket->received); … … 737 735 } 738 736 739 /** Process the socket client messages. 740 * 741 * Run until the client module disconnects. 742 * 743 * @see socket.h 744 * 745 * @param[in] sess Callback session. 746 * @param[in] callid Message identifier. 747 * @param[in] call Message parameters. 748 * 749 * @return EOK on success. 750 * 751 */ 752 static int udp_process_client_messages(async_sess_t *sess, ipc_callid_t callid, 753 ipc_call_t call) 737 /** Processes the socket client messages. 738 * 739 * Runs until the client module disconnects. 740 * 741 * @param[in] callid The message identifier. 742 * @param[in] call The message parameters. 743 * @return EOK on success. 744 * 745 * @see socket.h 746 */ 747 static int udp_process_client_messages(ipc_callid_t callid, ipc_call_t call) 754 748 { 755 749 int res; 750 bool keep_on_going = true; 756 751 socket_cores_t local_sockets; 752 int app_phone = IPC_GET_PHONE(call); 757 753 struct sockaddr *addr; 758 754 int socket_id; … … 777 773 socket_cores_initialize(&local_sockets); 778 774 779 while ( true) {775 while (keep_on_going) { 780 776 781 777 /* Answer the call */ … … 789 785 790 786 /* Process the call */ 791 if (!IPC_GET_IMETHOD(call)) { 787 switch (IPC_GET_IMETHOD(call)) { 788 case IPC_M_PHONE_HUNGUP: 789 keep_on_going = false; 792 790 res = EHANGUP; 793 791 break; 794 } 795 796 switch (IPC_GET_IMETHOD(call)) { 792 797 793 case NET_SOCKET: 798 794 socket_id = SOCKET_GET_SOCKET_ID(call); 799 res = socket_create(&local_sockets, sess, NULL,795 res = socket_create(&local_sockets, app_phone, NULL, 800 796 &socket_id); 801 797 SOCKET_SET_SOCKET_ID(answer, socket_id); … … 805 801 806 802 size = MAX_UDP_FRAGMENT_SIZE; 807 if (tl_get_ip_packet_dimension(udp_globals.ip_ sess,803 if (tl_get_ip_packet_dimension(udp_globals.ip_phone, 808 804 &udp_globals.dimensions, DEVICE_INVALID_ID, 809 805 &packet_dimension) == EOK) { … … 869 865 case NET_SOCKET_CLOSE: 870 866 fibril_rwlock_write_lock(&udp_globals.lock); 871 res = socket_destroy(udp_globals.net_ sess,867 res = socket_destroy(udp_globals.net_phone, 872 868 SOCKET_GET_SOCKET_ID(call), &local_sockets, 873 869 &udp_globals.sockets, NULL); … … 883 879 } 884 880 885 /* Release the application session*/886 async_hangup( sess);881 /* Release the application phone */ 882 async_hangup(app_phone); 887 883 888 884 /* Release all local sockets */ 889 socket_cores_release(udp_globals.net_ sess, &local_sockets,885 socket_cores_release(udp_globals.net_phone, &local_sockets, 890 886 &udp_globals.sockets, NULL); 891 887 … … 917 913 { 918 914 *answer_count = 0; 919 920 async_sess_t *callback =921 async_callback_receive_start(EXCHANGE_SERIALIZE, call);922 if (callback)923 return udp_process_client_messages(callback, callid, *call);924 915 916 switch (IPC_GET_IMETHOD(*call)) { 917 case IPC_M_CONNECT_TO_ME: 918 return udp_process_client_messages(callid, *call); 919 } 920 925 921 return ENOTSUP; 926 922 }
Note:
See TracChangeset
for help on using the changeset viewer.