Changeset 6b82009 in mainline for uspace/lib/net/il/ip_remote.c
- 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
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/net/il/ip_remote.c
r55091847 r6b82009 44 44 #include <packet_client.h> 45 45 #include <generic.h> 46 #include <async_obsolete.h>47 46 #include <ipc/services.h> 48 47 #include <ipc/il.h> 49 48 #include <ipc/ip.h> 50 51 49 #include <net/modules.h> 52 50 #include <net/device.h> … … 57 55 * The target network is routed using this device. 58 56 * 59 * @param[in] ip_phone The IP module phone used for (semi)remote calls. 60 * @param[in] device_id The device identifier. 61 * @param[in] address The target network address. 62 * @param[in] netmask The target network mask. 63 * @param[in] gateway The target network gateway. Not used if zero. 64 */ 65 int ip_add_route_req_remote(int ip_phone, device_id_t device_id, 57 * @param[in] sess IP module sessions. 58 * @param[in] device_id Device identifier. 59 * @param[in] address Target network address. 60 * @param[in] netmask Target network mask. 61 * @param[in] gateway Target network gateway. Not used if zero. 62 * 63 */ 64 int ip_add_route_req_remote(async_sess_t *sess, device_id_t device_id, 66 65 in_addr_t address, in_addr_t netmask, in_addr_t gateway) 67 66 { 68 return (int) async_obsolete_req_4_0(ip_phone, NET_IP_ADD_ROUTE, 67 async_exch_t *exch = async_exchange_begin(sess); 68 int rc = async_req_4_0(exch, NET_IP_ADD_ROUTE, 69 69 (sysarg_t) device_id, (sysarg_t) gateway.s_addr, 70 70 (sysarg_t) address.s_addr, (sysarg_t) netmask.s_addr); 71 } 72 73 /** Creates bidirectional connection with the ip module service and registers 71 async_exchange_end(exch); 72 73 return rc; 74 } 75 76 /** Create bidirectional connection with the ip module service and register 74 77 * the message receiver. 75 78 * 76 * @param[in] service TheIP module service.77 * @param[in] protocol The transport layer protocol.78 * @param[in] me The requesting module service.79 * @param[in] receiver The message receiver. Used for remote connection.80 * @return The phone of the needed service.81 * @return EOK on success.82 * @return Other error codes as defined for the bind_service()83 * function.84 */ 85 intip_bind_service(services_t service, int protocol, services_t me,79 * @param[in] service IP module service. 80 * @param[in] protocol Transport layer protocol. 81 * @param[in] me Rquesting module service. 82 * @param[in] receiver Message receiver. Used for remote connection. 83 * 84 * @return Session to the needed service. 85 * @return NULL on failure. 86 * 87 */ 88 async_sess_t *ip_bind_service(services_t service, int protocol, services_t me, 86 89 async_client_conn_t receiver) 87 90 { 88 return (int)bind_service(service, (sysarg_t) protocol, me, service,91 return bind_service(service, (sysarg_t) protocol, me, service, 89 92 receiver); 90 93 } 91 94 92 /** Connects to the IP module. 93 * 94 * @param service The IP module service. Ignored parameter. 95 * @return The IP module phone on success. 96 */ 97 int ip_connect_module(services_t service) 98 { 95 /** Connect to the IP module. 96 * 97 * @return The IP module session. 98 * 99 */ 100 async_sess_t *ip_connect_module(services_t service) 101 { 102 // FIXME: Get rid of the useless argument 99 103 return connect_to_service(SERVICE_IP); 100 104 } … … 105 109 * If the device uses ARP registers also the new ARP device. 106 110 * 107 * @param[in] ip_phone The IP module phone used for (semi)remote calls. 108 * @param[in] device_id The new device identifier. 109 * @param[in] netif The underlying device network interface layer service. 110 * @return EOK on success. 111 * @return ENOMEM if there is not enough memory left. 112 * @return EINVAL if the device configuration is invalid. 113 * @return ENOTSUP if the device uses IPv6. 114 * @return ENOTSUP if the device uses DHCP. 115 * @return Other error codes as defined for the 116 * net_get_device_conf_req() function. 117 * @return Other error codes as defined for the arp_device_req() 118 * function. 119 */ 120 int ip_device_req_remote(int ip_phone, device_id_t device_id, 121 services_t service) 122 { 123 return generic_device_req_remote(ip_phone, NET_IP_DEVICE, device_id, 0, 124 service); 111 * @param[in] sess IP module session. 112 * @param[in] device_id New device identifier. 113 * 114 * @return EOK on success. 115 * @return ENOMEM if there is not enough memory left. 116 * @return EINVAL if the device configuration is invalid. 117 * @return ENOTSUP if the device uses IPv6. 118 * @return ENOTSUP if the device uses DHCP. 119 * @return Other error codes as defined for the 120 * net_get_device_conf_req() function. 121 * @return Other error codes as defined for the arp_device_req() 122 * function. 123 * 124 */ 125 int ip_device_req_remote(async_sess_t *sess, device_id_t device_id) 126 { 127 return generic_device_req_remote(sess, NET_IP_DEVICE, device_id, 0, 0); 125 128 } 126 129 … … 128 131 * destination address. 129 132 * 130 * @param[in] ip_phone The IP module phone used for (semi)remote calls.131 * @param[in] protocol The transport protocol.132 * @param[in] destination The destination address.133 * @param[in] addrlen The destination address length.134 * @param[out] device_id The device identifier.135 * @param[out] header The constructed IP pseudo header.136 * @param[out] headerlen TheIP pseudo header length.137 * 138 */ 139 int ip_get_route_req_remote( int ip_phone, ip_protocol_t protocol,133 * @param[in] sess IP module session. 134 * @param[in] protocol Transport protocol. 135 * @param[in] destination Destination address. 136 * @param[in] addrlen Destination address length. 137 * @param[out] device_id Device identifier. 138 * @param[out] header Constructed IP pseudo header. 139 * @param[out] headerlen IP pseudo header length. 140 * 141 */ 142 int ip_get_route_req_remote(async_sess_t *sess, ip_protocol_t protocol, 140 143 const struct sockaddr *destination, socklen_t addrlen, 141 144 device_id_t *device_id, void **header, size_t *headerlen) 142 145 { 143 if ( !destination|| (addrlen == 0))146 if ((!destination) || (addrlen == 0)) 144 147 return EINVAL; 145 148 146 if ( !device_id || !header || !headerlen)149 if ((!device_id) || (!header) || (!headerlen)) 147 150 return EBADMEM; 148 151 149 152 *header = NULL; 150 153 154 async_exch_t *exch = async_exchange_begin(sess); 155 151 156 ipc_call_t answer; 152 aid_t message_id = async_ obsolete_send_1(ip_phone, NET_IP_GET_ROUTE,157 aid_t message_id = async_send_1(exch, NET_IP_GET_ROUTE, 153 158 (sysarg_t) protocol, &answer); 154 159 155 if ((async_ obsolete_data_write_start(ip_phone, destination, addrlen) == EOK) &&156 (async_ obsolete_data_read_start(ip_phone, headerlen,157 sizeof(*headerlen)) == EOK) &&(*headerlen > 0)) {160 if ((async_data_write_start(exch, destination, addrlen) == EOK) && 161 (async_data_read_start(exch, headerlen, sizeof(*headerlen)) == EOK) && 162 (*headerlen > 0)) { 158 163 *header = malloc(*headerlen); 159 164 if (*header) { 160 if (async_ obsolete_data_read_start(ip_phone, *header,165 if (async_data_read_start(exch, *header, 161 166 *headerlen) != EOK) 162 167 free(*header); … … 164 169 } 165 170 171 async_exchange_end(exch); 172 166 173 sysarg_t result; 167 174 async_wait_for(message_id, &result); … … 177 184 /** Return the device packet dimension for sending. 178 185 * 179 * @param[in] ip_phone The IP module phone used for (semi)remote calls. 180 * @param[in] device_id The device identifier. 181 * @param[out] packet_dimension The packet dimension. 182 * @return EOK on success. 183 * @return ENOENT if there is no such device. 184 * @return Other error codes as defined for the 185 * generic_packet_size_req_remote() function. 186 */ 187 int ip_packet_size_req_remote(int ip_phone, device_id_t device_id, 186 * @param[in] sess IP module session. 187 * @param[in] device_id Device identifier. 188 * @param[out] packet_dimension Packet dimension. 189 * 190 * @return EOK on success. 191 * @return ENOENT if there is no such device. 192 * @return Other error codes as defined for the 193 * generic_packet_size_req_remote() function. 194 * 195 */ 196 int ip_packet_size_req_remote(async_sess_t *sess, device_id_t device_id, 188 197 packet_dimension_t *packet_dimension) 189 198 { 190 return generic_packet_size_req_remote( ip_phone, NET_IP_PACKET_SPACE,199 return generic_packet_size_req_remote(sess, NET_IP_PACKET_SPACE, 191 200 device_id, packet_dimension); 192 201 } … … 194 203 /** Notify the IP module about the received error notification packet. 195 204 * 196 * @param[in] ip_phone The IP module phone used for (semi)remote calls. 197 * @param[in] device_id The device identifier. 198 * @param[in] packet The received packet or the received packet queue. 199 * @param[in] target The target internetwork module service to be 200 * delivered to. 201 * @param[in] error The packet error reporting service. Prefixes the 202 * received packet. 203 * @return EOK on success. 204 */ 205 int ip_received_error_msg_remote(int ip_phone, device_id_t device_id, 205 * @param[in] sess IP module session. 206 * @param[in] device_id Device identifier. 207 * @param[in] packet Received packet or the received packet queue. 208 * @param[in] target Target internetwork module service to be 209 * delivered to. 210 * @param[in] error Packet error reporting service. Prefixes the 211 * received packet. 212 * 213 * @return EOK on success. 214 * 215 */ 216 int ip_received_error_msg_remote(async_sess_t *sess, device_id_t device_id, 206 217 packet_t *packet, services_t target, services_t error) 207 218 { 208 return generic_received_msg_remote( ip_phone, NET_IP_RECEIVED_ERROR,219 return generic_received_msg_remote(sess, NET_IP_RECEIVED_ERROR, 209 220 device_id, packet_get_id(packet), target, error); 210 221 } … … 214 225 * The packets may get fragmented if needed. 215 226 * 216 * @param[in] ip_phone The IP module phone used for (semi)remote calls. 217 * @param[in] device_id The device identifier. 218 * @param[in] packet The packet fragments as a packet queue. All the 219 * packets have to have the same destination address. 220 * @param[in] sender The sending module service. 221 * @param[in] error The packet error reporting service. Prefixes the 222 * received packet. 223 * @return EOK on success. 224 * @return Other error codes as defined for the generic_send_msg() 225 * function. 226 */ 227 int ip_send_msg_remote(int ip_phone, device_id_t device_id, packet_t *packet, 228 services_t sender, services_t error) 229 { 230 return generic_send_msg_remote(ip_phone, NET_IP_SEND, device_id, 227 * @param[in] sess IP module session. 228 * @param[in] device_id Device identifier. 229 * @param[in] packet Packet fragments as a packet queue. All the 230 * packets have to have the same destination address. 231 * @param[in] sender Sending module service. 232 * @param[in] error Packet error reporting service. Prefixes the 233 * received packet. 234 * 235 * @return EOK on success. 236 * @return Other error codes as defined for the generic_send_msg() 237 * function. 238 * 239 */ 240 int ip_send_msg_remote(async_sess_t *sess, device_id_t device_id, 241 packet_t *packet, services_t sender, services_t error) 242 { 243 return generic_send_msg_remote(sess, NET_IP_SEND, device_id, 231 244 packet_get_id(packet), sender, error); 232 245 } … … 236 249 * This gateway is used if no other route is found. 237 250 * 238 * @param[in] ip_phone The IP module phone used for (semi)remote calls. 239 * @param[in] device_id The device identifier. 240 * @param[in] gateway The default gateway. 241 */ 242 int ip_set_gateway_req_remote(int ip_phone, device_id_t device_id, 251 * @param[in] sess IP module session. 252 * @param[in] device_id Device identifier. 253 * @param[in] gateway Default gateway. 254 * 255 */ 256 int ip_set_gateway_req_remote(async_sess_t *sess, device_id_t device_id, 243 257 in_addr_t gateway) 244 258 { 245 return (int) async_obsolete_req_2_0(ip_phone, NET_IP_SET_GATEWAY, 259 async_exch_t *exch = async_exchange_begin(sess); 260 int rc = async_req_2_0(exch, NET_IP_SET_GATEWAY, 246 261 (sysarg_t) device_id, (sysarg_t) gateway.s_addr); 262 async_exchange_end(exch); 263 264 return rc; 247 265 } 248 266
Note:
See TracChangeset
for help on using the changeset viewer.