Changeset 6b82009 in mainline for uspace/lib/net/tl
- Timestamp:
- 2011-06-22T20:41:41Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ef09a7a
- Parents:
- 55091847
- Location:
- uspace/lib/net/tl
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/net/tl/icmp_remote.c
r55091847 r6b82009 39 39 #include <net/modules.h> 40 40 #include <packet_client.h> 41 42 #include <async.h>43 #include <async_obsolete.h>44 #include <errno.h>45 41 #include <ipc/services.h> 46 42 #include <ipc/icmp.h> 47 43 #include <sys/types.h> 44 #include <async.h> 45 #include <errno.h> 48 46 49 /** Send sthe Destination Unreachable error notification packet.47 /** Send the Destination Unreachable error notification packet. 50 48 * 51 49 * Beginning of the packet is sent as the notification packet data. … … 53 51 * packet. 54 52 * 55 * @param[in] icmp_phone The ICMP module phone used for (semi)remote calls. 56 * @param[in] code The error specific code. 57 * @param[in] mtu The error MTU value. 58 * @param[in] packet The original packet. 59 * @return EOK on success. 60 * @return EPERM if the ICMP error notifications are disabled. 61 * @return ENOMEM if there is not enough memory left. 53 * @param[in] sess ICMP module session. 54 * @param[in] code Error specific code. 55 * @param[in] mtu Error MTU value. 56 * @param[in] packet Original packet. 57 * 58 * @return EOK on success. 59 * @return EPERM if the ICMP error notifications are disabled. 60 * @return ENOMEM if there is not enough memory left. 61 * 62 62 */ 63 int 64 icmp_destination_unreachable_msg(int icmp_phone, icmp_code_t code, 63 int icmp_destination_unreachable_msg(async_sess_t *sess, icmp_code_t code, 65 64 icmp_param_t mtu, packet_t *packet) 66 65 { 67 async_obsolete_msg_3(icmp_phone, NET_ICMP_DEST_UNREACH, (sysarg_t) code, 66 async_exch_t *exch = async_exchange_begin(sess); 67 async_msg_3(exch, NET_ICMP_DEST_UNREACH, (sysarg_t) code, 68 68 (sysarg_t) packet_get_id(packet), (sysarg_t) mtu); 69 async_exchange_end(exch); 70 69 71 return EOK; 70 72 } 71 73 72 /** Send sthe Source Quench error notification packet.74 /** Send the Source Quench error notification packet. 73 75 * 74 76 * Beginning of the packet is sent as the notification packet data. … … 76 78 * packet. 77 79 * 78 * @param[in] icmp_phone The ICMP module phone used for (semi)remote calls. 79 * @param[in] packet The original packet. 80 * @return EOK on success. 81 * @return EPERM if the ICMP error notifications are disabled. 82 * @return ENOMEM if there is not enough memory left. 80 * @param[in] sess ICMP module session. 81 * @param[in] packet Original packet. 82 * 83 * @return EOK on success. 84 * @return EPERM if the ICMP error notifications are disabled. 85 * @return ENOMEM if there is not enough memory left. 86 * 83 87 */ 84 int icmp_source_quench_msg( int icmp_phone, packet_t *packet)88 int icmp_source_quench_msg(async_sess_t *sess, packet_t *packet) 85 89 { 86 async_obsolete_msg_2(icmp_phone, NET_ICMP_SOURCE_QUENCH, 0, 90 async_exch_t *exch = async_exchange_begin(sess); 91 async_msg_2(exch, NET_ICMP_SOURCE_QUENCH, 0, 87 92 (sysarg_t) packet_get_id(packet)); 93 async_exchange_end(exch); 94 88 95 return EOK; 89 96 } 90 97 91 /** Send sthe Time Exceeded error notification packet.98 /** Send the Time Exceeded error notification packet. 92 99 * 93 100 * Beginning of the packet is sent as the notification packet data. … … 95 102 * packet. 96 103 * 97 * @param[in] icmp_phone The ICMP module phone used for (semi)remote calls. 98 * @param[in] code The error specific code. 99 * @param[in] packet The original packet. 100 * @return EOK on success. 101 * @return EPERM if the ICMP error notifications are disabled. 102 * @return ENOMEM if there is not enough memory left. 104 * @param[in] sess ICMP module session. 105 * @param[in] code Error specific code. 106 * @param[in] packet Original packet. 107 * 108 * @return EOK on success. 109 * @return EPERM if the ICMP error notifications are disabled. 110 * @return ENOMEM if there is not enough memory left. 111 * 103 112 */ 104 int icmp_time_exceeded_msg(int icmp_phone, icmp_code_t code, packet_t *packet) 113 int icmp_time_exceeded_msg(async_sess_t *sess, icmp_code_t code, 114 packet_t *packet) 105 115 { 106 async_obsolete_msg_2(icmp_phone, NET_ICMP_TIME_EXCEEDED, (sysarg_t) code, 116 async_exch_t *exch = async_exchange_begin(sess); 117 async_msg_2(exch, NET_ICMP_TIME_EXCEEDED, (sysarg_t) code, 107 118 (sysarg_t) packet_get_id(packet)); 119 async_exchange_end(exch); 120 108 121 return EOK; 109 122 } 110 123 111 /** Send sthe Parameter Problem error notification packet.124 /** Send the Parameter Problem error notification packet. 112 125 * 113 126 * Beginning of the packet is sent as the notification packet data. … … 115 128 * packet. 116 129 * 117 * @param[in] icmp_phone The ICMP module phone used for (semi)remote calls. 118 * @param[in] code The error specific code. 119 * @param[in] pointer The problematic parameter offset. 120 * @param[in] packet The original packet. 121 * @return EOK on success. 122 * @return EPERM if the ICMP error notifications are disabled. 123 * @return ENOMEM if there is not enough memory left. 130 * @param[in] sess ICMP module session. 131 * @param[in] code Error specific code. 132 * @param[in] pointer Problematic parameter offset. 133 * @param[in] packet Original packet. 134 * 135 * @return EOK on success. 136 * @return EPERM if the ICMP error notifications are disabled. 137 * @return ENOMEM if there is not enough memory left. 138 * 124 139 */ 125 int icmp_parameter_problem_msg( int icmp_phone, icmp_code_t code,140 int icmp_parameter_problem_msg(async_sess_t *sess, icmp_code_t code, 126 141 icmp_param_t pointer, packet_t *packet) 127 142 { 128 async_obsolete_msg_3(icmp_phone, NET_ICMP_PARAMETERPROB, (sysarg_t) code, 143 async_exch_t *exch = async_exchange_begin(sess); 144 async_msg_3(exch, NET_ICMP_PARAMETERPROB, (sysarg_t) code, 129 145 (sysarg_t) packet_get_id(packet), (sysarg_t) pointer); 146 async_exchange_end(exch); 147 130 148 return EOK; 131 149 } … … 133 151 /** @} 134 152 */ 135 -
uspace/lib/net/tl/socket_core.c
r55091847 r6b82009 38 38 #include <packet_client.h> 39 39 #include <packet_remote.h> 40 41 40 #include <net/socket_codes.h> 42 41 #include <net/in.h> … … 44 43 #include <net/packet.h> 45 44 #include <net/modules.h> 46 47 45 #include <stdint.h> 48 46 #include <stdlib.h> 49 47 #include <errno.h> 50 51 48 #include <adt/dynamic_fifo.h> 52 49 #include <adt/int_map.h> … … 56 53 * switching to the sequence. 57 54 */ 58 #define SOCKET_ID_TRIES 55 #define SOCKET_ID_TRIES 100 59 56 60 57 /** Bound port sockets.*/ … … 72 69 INT_MAP_IMPLEMENT(socket_ports, socket_port_t); 73 70 74 /** Destroy sthe socket.71 /** Destroy the socket. 75 72 * 76 73 * If the socket is bound, the port is released. 77 * Release s all buffered packets, calls the release function and removesthe74 * Release all buffered packets, call the release function and remove the 78 75 * socket from the local sockets. 79 76 * 80 * @param[in] packet_phone The packet server phone to release buffered packets.81 * @param[in] socket The socket to be destroyed.82 * @param[in,out] local_sockets The local sockets to be updated.83 * @param[in,out] global_sockets The global sockets to be updated.84 * @param[in] socket_release The client release callback function.85 * /86 static void 87 s ocket_destroy_core(int packet_phone, socket_core_t *socket,77 * @param[in] sess Packet server session. 78 * @param[in] socket Socket to be destroyed. 79 * @param[in,out] local_sockets Local sockets to be updated. 80 * @param[in,out] global_sockets Global sockets to be updated. 81 * @param[in] socket_release Client release callback function. 82 * 83 */ 84 static void socket_destroy_core(async_sess_t *sess, socket_core_t *socket, 88 85 socket_cores_t *local_sockets, socket_ports_t *global_sockets, 89 86 void (* socket_release)(socket_core_t *socket)) 90 87 { 91 int packet_id;92 93 88 /* If bound */ 94 89 if (socket->port) { … … 98 93 99 94 /* Release all received packets */ 95 int packet_id; 100 96 while ((packet_id = dyn_fifo_pop(&socket->received)) >= 0) 101 pq_release_remote( packet_phone, packet_id);102 97 pq_release_remote(sess, packet_id); 98 103 99 dyn_fifo_destroy(&socket->received); 104 100 dyn_fifo_destroy(&socket->accepted); 105 101 106 102 if (socket_release) 107 103 socket_release(socket); 108 104 109 105 socket_cores_exclude(local_sockets, socket->socket_id, free); 110 106 } 111 107 112 /** Destroy slocal sockets.113 * 114 * Release s all buffered packets and callsthe release function for each of the108 /** Destroy local sockets. 109 * 110 * Release all buffered packets and call the release function for each of the 115 111 * sockets. 116 112 * 117 * @param[in] packet_phone The packet server phone to release buffered packets.118 * @param[in] local_sockets The local sockets to be destroyed.119 * @param[in,out] global_sockets The global sockets to be updated.120 * @param[in] socket_release The client release callback function.121 * /122 void 123 socket_cores_release(int packet_phone, socket_cores_t *local_sockets,113 * @param[in] sess Packet server session. 114 * @param[in] local_sockets Local sockets to be destroyed. 115 * @param[in,out] global_sockets Global sockets to be updated. 116 * @param[in] socket_release Client release callback function. 117 * 118 */ 119 void socket_cores_release(async_sess_t *sess, socket_cores_t *local_sockets, 124 120 socket_ports_t *global_sockets, 125 121 void (* socket_release)(socket_core_t *socket)) 126 122 { 127 int index;128 129 123 if (!socket_cores_is_valid(local_sockets)) 130 124 return; 131 125 132 126 local_sockets->magic = 0; 133 127 128 int index; 134 129 for (index = 0; index < local_sockets->next; ++index) { 135 130 if (socket_cores_item_is_valid(&local_sockets->items[index])) { 136 131 local_sockets->items[index].magic = 0; 137 132 138 133 if (local_sockets->items[index].value) { 139 socket_destroy_core( packet_phone,134 socket_destroy_core(sess, 140 135 local_sockets->items[index].value, 141 136 local_sockets, global_sockets, … … 146 141 } 147 142 } 148 143 149 144 free(local_sockets->items); 150 145 } … … 406 401 } 407 402 408 /** Creates a new socket. 409 * 410 * @param[in,out] local_sockets The local sockets to be updated. 411 * @param[in] app_phone The application phone. 412 * @param[in] specific_data The socket specific data. 413 * @param[in,out] socket_id The new socket identifier. A new identifier is 414 * chosen if set to zero or negative. A negative identifier 415 * is chosen if set to negative. 416 * @return EOK on success. 417 * @return EINVAL if the socket_id parameter is NULL. 418 * @return ENOMEM if there is not enough memory left. 419 */ 420 int 421 socket_create(socket_cores_t *local_sockets, int app_phone, 403 /** Create a new socket. 404 * 405 * @param[in,out] local_sockets Local sockets to be updated. 406 * @param[in] sess Application session. 407 * @param[in] specific_data Socket specific data. 408 * @param[in,out] socket_id New socket identifier. A new identifier 409 * is chosen if set to zero or negative. 410 * A negative identifier is chosen if set 411 * to negative. 412 * 413 * @return EOK on success. 414 * @return EINVAL if the socket_id parameter is NULL. 415 * @return ENOMEM if there is not enough memory left. 416 * 417 */ 418 int socket_create(socket_cores_t *local_sockets, async_sess_t* sess, 422 419 void *specific_data, int *socket_id) 423 420 { … … 446 443 447 444 /* Initialize */ 448 socket-> phone = app_phone;445 socket->sess = sess; 449 446 socket->port = -1; 450 447 socket->key = NULL; … … 475 472 } 476 473 477 /** Destroy sthe socket.474 /** Destroy the socket. 478 475 * 479 476 * If the socket is bound, the port is released. 480 * Release s all buffered packets, calls the release function and removesthe477 * Release all buffered packets, call the release function and remove the 481 478 * socket from the local sockets. 482 479 * 483 * @param[in] packet_phone The packet server phone to release buffered packets. 484 * @param[in] socket_id The socket identifier. 485 * @param[in,out] local_sockets The local sockets to be updated. 486 * @param[in,out] global_sockets The global sockets to be updated. 487 * @param[in] socket_release The client release callback function. 488 * @return EOK on success. 489 * @return ENOTSOCK if the socket is not found. 480 * @param[in] sess Packet server session. 481 * @param[in] socket_id Socket identifier. 482 * @param[in,out] local_sockets Local sockets to be updated. 483 * @param[in,out] global_sockets Global sockets to be updated. 484 * @param[in] socket_release Client release callback function. 485 * 486 * @return EOK on success. 487 * @return ENOTSOCK if the socket is not found. 488 * 490 489 */ 491 490 int 492 socket_destroy( int packet_phone, int socket_id, socket_cores_t *local_sockets,491 socket_destroy(async_sess_t *sess, int socket_id, socket_cores_t *local_sockets, 493 492 socket_ports_t *global_sockets, 494 493 void (*socket_release)(socket_core_t *socket)) 495 494 { 496 socket_core_t *socket;497 int accepted_id;498 499 495 /* Find the socket */ 500 socket = socket_cores_find(local_sockets, socket_id);496 socket_core_t *socket = socket_cores_find(local_sockets, socket_id); 501 497 if (!socket) 502 498 return ENOTSOCK; 503 499 504 500 /* Destroy all accepted sockets */ 501 int accepted_id; 505 502 while ((accepted_id = dyn_fifo_pop(&socket->accepted)) >= 0) 506 socket_destroy( packet_phone, accepted_id, local_sockets,503 socket_destroy(sess, accepted_id, local_sockets, 507 504 global_sockets, socket_release); 508 505 509 socket_destroy_core( packet_phone, socket, local_sockets, global_sockets,506 socket_destroy_core(sess, socket, local_sockets, global_sockets, 510 507 socket_release); 511 508 -
uspace/lib/net/tl/tl_common.c
r55091847 r6b82009 43 43 #include <ip_interface.h> 44 44 #include <tl_remote.h> 45 46 45 #include <net/socket_codes.h> 47 46 #include <net/in.h> … … 50 49 #include <net/device.h> 51 50 #include <net/packet.h> 52 53 51 #include <async.h> 54 52 #include <ipc/services.h> … … 107 105 * The reply is cached then. 108 106 * 109 * @param[in] ip_phone The IP moduel phone for (semi)remote calls. 110 * @param[in] packet_dimensions The packet dimensions cache. 111 * @param[in] device_id The device identifier. 112 * @param[out] packet_dimension The IP packet dimensions. 113 * @return EOK on success. 114 * @return EBADMEM if the packet_dimension parameter is NULL. 115 * @return ENOMEM if there is not enough memory left. 116 * @return EINVAL if the packet_dimensions cache is not valid. 117 * @return Other codes as defined for the ip_packet_size_req() 118 * function. 119 */ 120 int 121 tl_get_ip_packet_dimension(int ip_phone, 107 * @param[in] sess IP module session. 108 * @param[in] packet_dimensions Packet dimensions cache. 109 * @param[in] device_id Device identifier. 110 * @param[out] packet_dimension IP packet dimensions. 111 * 112 * @return EOK on success. 113 * @return EBADMEM if the packet_dimension parameter is NULL. 114 * @return ENOMEM if there is not enough memory left. 115 * @return EINVAL if the packet_dimensions cache is not valid. 116 * @return Other codes as defined for the ip_packet_size_req() 117 * function. 118 * 119 */ 120 int tl_get_ip_packet_dimension(async_sess_t *sess, 122 121 packet_dimensions_t *packet_dimensions, device_id_t device_id, 123 122 packet_dimension_t **packet_dimension) 124 123 { 125 int rc;126 127 124 if (!packet_dimension) 128 125 return EBADMEM; … … 133 130 /* Ask for and remember them if not found */ 134 131 *packet_dimension = malloc(sizeof(**packet_dimension)); 135 if (!*packet_dimension)132 if (!*packet_dimension) 136 133 return ENOMEM; 137 134 138 rc = ip_packet_size_req(ip_phone, device_id, *packet_dimension);135 int rc = ip_packet_size_req(sess, device_id, *packet_dimension); 139 136 if (rc != EOK) { 140 137 free(*packet_dimension); … … 236 233 /** Prepares the packet for ICMP error notification. 237 234 * 238 * Keeps the first packet and releases all the others. 239 * Releases all the packets on error. 240 * 241 * @param[in] packet_phone The packet server module phone. 242 * @param[in] icmp_phone The ICMP module phone. 243 * @param[in] packet The packet to be send. 244 * @param[in] error The packet error reporting service. Prefixes the 245 * received packet. 246 * @return EOK on success. 247 * @return ENOENT if no packet may be sent. 248 */ 249 int 250 tl_prepare_icmp_packet(int packet_phone, int icmp_phone, packet_t *packet, 251 services_t error) 252 { 253 packet_t *next; 235 * Keep the first packet and release all the others. 236 * Release all the packets on error. 237 * 238 * @param[in] packet_sess Packet server module session. 239 * @param[in] icmp_sess ICMP module phone. 240 * @param[in] packet Packet to be send. 241 * @param[in] error Packet error reporting service. Prefixes the 242 * received packet. 243 * 244 * @return EOK on success. 245 * @return ENOENT if no packet may be sent. 246 * 247 */ 248 int tl_prepare_icmp_packet(async_sess_t *packet_sess, async_sess_t *icmp_sess, 249 packet_t *packet, services_t error) 250 { 251 /* Detach the first packet and release the others */ 252 packet_t *next = pq_detach(packet); 253 if (next) 254 pq_release_remote(packet_sess, packet_get_id(next)); 255 254 256 uint8_t *src; 255 int length; 256 257 /* Detach the first packet and release the others */ 258 next = pq_detach(packet); 259 if (next) 260 pq_release_remote(packet_phone, packet_get_id(next)); 261 262 length = packet_get_addr(packet, &src, NULL); 263 if ((length > 0) && (!error) && (icmp_phone >= 0) && 257 int length = packet_get_addr(packet, &src, NULL); 258 if ((length > 0) && (!error) && (icmp_sess) && 264 259 /* 265 260 * Set both addresses to the source one (avoids the source address … … 269 264 return EOK; 270 265 } else 271 pq_release_remote(packet_ phone, packet_get_id(packet));272 266 pq_release_remote(packet_sess, packet_get_id(packet)); 267 273 268 return ENOENT; 274 269 } … … 276 271 /** Receives data from the socket into a packet. 277 272 * 278 * @param[in] packet_phone The packet server module phone. 279 * @param[out] packet The new created packet. 280 * @param[in] prefix Reserved packet data prefix length. 281 * @param[in] dimension The packet dimension. 282 * @param[in] addr The destination address. 283 * @param[in] addrlen The address length. 284 * @return Number of bytes received. 285 * @return EINVAL if the client does not send data. 286 * @return ENOMEM if there is not enough memory left. 287 * @return Other error codes as defined for the 288 * async_data_read_finalize() function. 289 */ 290 int 291 tl_socket_read_packet_data(int packet_phone, packet_t **packet, size_t prefix, 292 const packet_dimension_t *dimension, const struct sockaddr *addr, 293 socklen_t addrlen) 273 * @param[in] sess Packet server module session. 274 * @param[out] packet New created packet. 275 * @param[in] prefix Reserved packet data prefix length. 276 * @param[in] dimension Packet dimension. 277 * @param[in] addr Destination address. 278 * @param[in] addrlen Address length. 279 * 280 * @return Number of bytes received. 281 * @return EINVAL if the client does not send data. 282 * @return ENOMEM if there is not enough memory left. 283 * @return Other error codes as defined for the 284 * async_data_read_finalize() function. 285 * 286 */ 287 int tl_socket_read_packet_data(async_sess_t *sess, packet_t **packet, 288 size_t prefix, const packet_dimension_t *dimension, 289 const struct sockaddr *addr, socklen_t addrlen) 294 290 { 295 291 ipc_callid_t callid; … … 306 302 307 303 /* Get a new packet */ 308 *packet = packet_get_4_remote( packet_phone, length, dimension->addr_len,304 *packet = packet_get_4_remote(sess, length, dimension->addr_len, 309 305 prefix + dimension->prefix, dimension->suffix); 310 306 if (!packet) … … 314 310 data = packet_suffix(*packet, length); 315 311 if (!data) { 316 pq_release_remote( packet_phone, packet_get_id(*packet));312 pq_release_remote(sess, packet_get_id(*packet)); 317 313 return ENOMEM; 318 314 } … … 321 317 rc = async_data_write_finalize(callid, data, length); 322 318 if (rc != EOK) { 323 pq_release_remote( packet_phone, packet_get_id(*packet));319 pq_release_remote(sess, packet_get_id(*packet)); 324 320 return rc; 325 321 } … … 328 324 rc = packet_set_addr(*packet, NULL, (uint8_t *) addr, addrlen); 329 325 if (rc != EOK) { 330 pq_release_remote( packet_phone, packet_get_id(*packet));326 pq_release_remote(sess, packet_get_id(*packet)); 331 327 return rc; 332 328 } -
uspace/lib/net/tl/tl_remote.c
r55091847 r6b82009 34 34 #include <generic.h> 35 35 #include <packet_client.h> 36 37 36 #include <ipc/services.h> 38 37 #include <ipc/tl.h> 39 40 38 #include <net/device.h> 41 39 #include <net/packet.h> 40 #include <async.h> 42 41 43 42 /** Notify the remote transport layer modules about the received packet/s. 44 43 * 45 * @param[in] tl_phone The transport layer module phone used for remote calls.46 * @param[in] device_id The device identifier.47 * @param[in] packet The received packet or the received packet queue.44 * @param[in] sess Transport layer module session. 45 * @param[in] device_id Device identifier. 46 * @param[in] packet Received packet or the received packet queue. 48 47 * The packet queue is used to carry a fragmented 49 48 * datagram. The first packet contains the headers, 50 49 * the others contain only data. 51 * @param[in] target T he target transport layer module service to be50 * @param[in] target Target transport layer module service to be 52 51 * delivered to. 53 * @param[in] error The packet error reporting service. Prefixes the52 * @param[in] error Packet error reporting service. Prefixes the 54 53 * received packet. 55 54 * … … 57 56 * 58 57 */ 59 int tl_received_msg( int tl_phone, device_id_t device_id, packet_t *packet,58 int tl_received_msg(async_sess_t *sess, device_id_t device_id, packet_t *packet, 60 59 services_t target, services_t error) 61 60 { 62 return generic_received_msg_remote( tl_phone, NET_TL_RECEIVED, device_id,61 return generic_received_msg_remote(sess, NET_TL_RECEIVED, device_id, 63 62 packet_get_id(packet), target, error); 64 63 } -
uspace/lib/net/tl/tl_skel.c
r55091847 r6b82009 38 38 #include <bool.h> 39 39 #include <errno.h> 40 #include <ns.h> 40 41 #include <tl_skel.h> 41 42 #include <net_interface.h> 42 43 #include <net/modules.h> 43 #include <async_obsolete.h>44 45 // FIXME: remove this header46 #include <kernel/ipc/ipc_methods.h>47 44 48 45 /** Default thread for new connections. 49 46 * 50 * @param[in] iid 51 * @param[in] icall 52 * @param[in] arg 47 * @param[in] iid The initial message identifier. 48 * @param[in] icall The initial message call structure. 49 * @param[in] arg Local argument. 53 50 * 54 51 */ … … 107 104 * 108 105 */ 109 int tl_module_start( int service)106 int tl_module_start(sysarg_t service) 110 107 { 111 108 async_set_client_connection(tl_client_connection); 112 int net_phone= net_connect_module();113 if ( net_phone < 0)114 return net_phone;109 async_sess_t *sess = net_connect_module(); 110 if (!sess) 111 return ENOENT; 115 112 116 113 int rc = pm_init(); … … 118 115 return rc; 119 116 120 rc = tl_initialize( net_phone);117 rc = tl_initialize(sess); 121 118 if (rc != EOK) 122 119 goto out; 123 120 124 rc = async_obsolete_connect_to_me(PHONE_NS, service, 0, 0, NULL, NULL);121 rc = service_register(service); 125 122 if (rc != EOK) 126 123 goto out;
Note:
See TracChangeset
for help on using the changeset viewer.