Changes in uspace/lib/c/generic/inetcfg.c [7af0cc5:77ad86c] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/inetcfg.c
r7af0cc5 r77ad86c 137 137 { 138 138 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 139 140 ipc_call_t answer; 141 aid_t req = async_send_1(exch, INETCFG_ADDR_CREATE_STATIC, link_id, 142 &answer); 143 144 int rc = async_data_write_start(exch, naddr, sizeof(inet_naddr_t)); 145 if (rc != EOK) { 146 async_exchange_end(exch); 147 async_forget(req); 148 return rc; 149 } 150 151 rc = async_data_write_start(exch, name, str_size(name)); 152 153 async_exchange_end(exch); 154 155 if (rc != EOK) { 156 async_forget(req); 157 return rc; 158 } 159 160 sysarg_t retval; 161 async_wait_for(req, &retval); 162 139 140 ipc_call_t answer; 141 aid_t req = async_send_3(exch, INETCFG_ADDR_CREATE_STATIC, naddr->ipv4, 142 naddr->bits, link_id, &answer); 143 sysarg_t retval = async_data_write_start(exch, name, str_size(name)); 144 145 async_exchange_end(exch); 146 147 if (retval != EOK) { 148 async_forget(req); 149 return retval; 150 } 151 152 async_wait_for(req, &retval); 163 153 *addr_id = IPC_GET_ARG1(answer); 164 165 return (int)retval;154 155 return retval; 166 156 } 167 157 … … 177 167 178 168 int inetcfg_addr_get(sysarg_t addr_id, inet_addr_info_t *ainfo) 179 {180 async_exch_t *exch = async_exchange_begin(inetcfg_sess);181 182 ipc_call_t answer;183 aid_t req = async_send_1(exch, INETCFG_ADDR_GET, addr_id, &answer);184 185 ipc_call_t answer_naddr;186 aid_t req_naddr = async_data_read(exch, &ainfo->naddr,187 sizeof(inet_naddr_t), &answer_naddr);188 189 sysarg_t retval_naddr;190 async_wait_for(req_naddr, &retval_naddr);191 192 if (retval_naddr != EOK) {193 async_exchange_end(exch);194 async_forget(req);195 return (int) retval_naddr;196 }197 198 ipc_call_t answer_name;199 char name_buf[LOC_NAME_MAXLEN + 1];200 aid_t req_name = async_data_read(exch, name_buf, LOC_NAME_MAXLEN,201 &answer_name);202 203 async_exchange_end(exch);204 205 sysarg_t retval_name;206 async_wait_for(req_name, &retval_name);207 208 if (retval_name != EOK) {209 async_forget(req);210 return (int) retval_name;211 }212 213 sysarg_t retval;214 async_wait_for(req, &retval);215 216 if (retval != EOK)217 return (int) retval;218 219 size_t act_size = IPC_GET_ARG2(answer_name);220 assert(act_size <= LOC_NAME_MAXLEN);221 222 name_buf[act_size] = '\0';223 224 ainfo->ilink = IPC_GET_ARG1(answer);225 ainfo->name = str_dup(name_buf);226 227 return EOK;228 }229 230 int inetcfg_addr_get_id(const char *name, sysarg_t link_id, sysarg_t *addr_id)231 {232 async_exch_t *exch = async_exchange_begin(inetcfg_sess);233 234 ipc_call_t answer;235 aid_t req = async_send_1(exch, INETCFG_ADDR_GET_ID, link_id, &answer);236 sysarg_t retval = async_data_write_start(exch, name, str_size(name));237 238 async_exchange_end(exch);239 240 if (retval != EOK) {241 async_forget(req);242 return retval;243 }244 245 async_wait_for(req, &retval);246 *addr_id = IPC_GET_ARG1(answer);247 248 return retval;249 }250 251 int inetcfg_get_addr_list(sysarg_t **addrs, size_t *count)252 {253 return inetcfg_get_ids_internal(INETCFG_GET_ADDR_LIST,254 0, addrs, count);255 }256 257 int inetcfg_get_link_list(sysarg_t **links, size_t *count)258 {259 return inetcfg_get_ids_internal(INETCFG_GET_LINK_LIST,260 0, links, count);261 }262 263 int inetcfg_get_sroute_list(sysarg_t **sroutes, size_t *count)264 {265 return inetcfg_get_ids_internal(INETCFG_GET_SROUTE_LIST,266 0, sroutes, count);267 }268 269 int inetcfg_link_add(sysarg_t link_id)270 {271 async_exch_t *exch = async_exchange_begin(inetcfg_sess);272 273 int rc = async_req_1_0(exch, INETCFG_LINK_ADD, link_id);274 async_exchange_end(exch);275 276 return rc;277 }278 279 int inetcfg_link_get(sysarg_t link_id, inet_link_info_t *linfo)280 169 { 281 170 ipc_call_t dreply; … … 287 176 288 177 ipc_call_t answer; 289 aid_t req = async_send_1(exch, INETCFG_ LINK_GET, link_id, &answer);178 aid_t req = async_send_1(exch, INETCFG_ADDR_GET, addr_id, &answer); 290 179 aid_t dreq = async_data_read(exch, name_buf, LOC_NAME_MAXLEN, &dreply); 291 int rc = async_data_read_start(exch, &linfo->mac_addr, sizeof(addr48_t));292 180 async_wait_for(dreq, &dretval); 293 181 294 182 async_exchange_end(exch); 295 183 296 if (dretval != EOK || rc != EOK) {184 if (dretval != EOK) { 297 185 async_forget(req); 298 186 return dretval; … … 309 197 name_buf[act_size] = '\0'; 310 198 199 ainfo->naddr.ipv4 = IPC_GET_ARG1(answer); 200 ainfo->naddr.bits = IPC_GET_ARG2(answer); 201 ainfo->ilink = IPC_GET_ARG3(answer); 202 ainfo->name = str_dup(name_buf); 203 204 return EOK; 205 } 206 207 int inetcfg_addr_get_id(const char *name, sysarg_t link_id, sysarg_t *addr_id) 208 { 209 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 210 211 ipc_call_t answer; 212 aid_t req = async_send_1(exch, INETCFG_ADDR_GET_ID, link_id, &answer); 213 sysarg_t retval = async_data_write_start(exch, name, str_size(name)); 214 215 async_exchange_end(exch); 216 217 if (retval != EOK) { 218 async_forget(req); 219 return retval; 220 } 221 222 async_wait_for(req, &retval); 223 *addr_id = IPC_GET_ARG1(answer); 224 225 return retval; 226 } 227 228 int inetcfg_get_addr_list(sysarg_t **addrs, size_t *count) 229 { 230 return inetcfg_get_ids_internal(INETCFG_GET_ADDR_LIST, 231 0, addrs, count); 232 } 233 234 int inetcfg_get_link_list(sysarg_t **links, size_t *count) 235 { 236 return inetcfg_get_ids_internal(INETCFG_GET_LINK_LIST, 237 0, links, count); 238 } 239 240 int inetcfg_get_sroute_list(sysarg_t **sroutes, size_t *count) 241 { 242 return inetcfg_get_ids_internal(INETCFG_GET_SROUTE_LIST, 243 0, sroutes, count); 244 } 245 246 int inetcfg_link_get(sysarg_t link_id, inet_link_info_t *linfo) 247 { 248 ipc_call_t dreply; 249 sysarg_t dretval; 250 size_t act_size; 251 char name_buf[LOC_NAME_MAXLEN + 1]; 252 253 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 254 255 ipc_call_t answer; 256 aid_t req = async_send_1(exch, INETCFG_LINK_GET, link_id, &answer); 257 aid_t dreq = async_data_read(exch, name_buf, LOC_NAME_MAXLEN, &dreply); 258 async_wait_for(dreq, &dretval); 259 260 async_exchange_end(exch); 261 262 if (dretval != EOK) { 263 async_forget(req); 264 return dretval; 265 } 266 267 sysarg_t retval; 268 async_wait_for(req, &retval); 269 270 if (retval != EOK) 271 return retval; 272 273 act_size = IPC_GET_ARG2(dreply); 274 assert(act_size <= LOC_NAME_MAXLEN); 275 name_buf[act_size] = '\0'; 276 311 277 linfo->name = str_dup(name_buf); 312 278 linfo->def_mtu = IPC_GET_ARG1(answer); … … 315 281 } 316 282 317 int inetcfg_link_remove(sysarg_t link_id)318 {319 async_exch_t *exch = async_exchange_begin(inetcfg_sess);320 321 int rc = async_req_1_0(exch, INETCFG_LINK_REMOVE, link_id);322 async_exchange_end(exch);323 324 return rc;325 }326 327 283 int inetcfg_sroute_create(const char *name, inet_naddr_t *dest, 328 284 inet_addr_t *router, sysarg_t *sroute_id) 329 285 { 330 286 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 331 332 ipc_call_t answer; 333 aid_t req = async_send_0(exch, INETCFG_SROUTE_CREATE, &answer); 334 335 int rc = async_data_write_start(exch, dest, sizeof(inet_naddr_t)); 336 if (rc != EOK) { 337 async_exchange_end(exch); 338 async_forget(req); 339 return rc; 340 } 341 342 rc = async_data_write_start(exch, router, sizeof(inet_addr_t)); 343 if (rc != EOK) { 344 async_exchange_end(exch); 345 async_forget(req); 346 return rc; 347 } 348 349 rc = async_data_write_start(exch, name, str_size(name)); 350 351 async_exchange_end(exch); 352 353 if (rc != EOK) { 354 async_forget(req); 355 return rc; 356 } 357 287 288 ipc_call_t answer; 289 aid_t req = async_send_3(exch, INETCFG_SROUTE_CREATE, 290 dest->ipv4, dest->bits, router->ipv4, &answer); 291 sysarg_t retval = async_data_write_start(exch, name, str_size(name)); 292 293 async_exchange_end(exch); 294 295 if (retval != EOK) { 296 async_forget(req); 297 return retval; 298 } 299 300 async_wait_for(req, &retval); 301 *sroute_id = IPC_GET_ARG1(answer); 302 303 return retval; 304 } 305 306 int inetcfg_sroute_delete(sysarg_t sroute_id) 307 { 308 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 309 310 int rc = async_req_1_0(exch, INETCFG_SROUTE_DELETE, sroute_id); 311 async_exchange_end(exch); 312 313 return rc; 314 } 315 316 int inetcfg_sroute_get(sysarg_t sroute_id, inet_sroute_info_t *srinfo) 317 { 318 ipc_call_t dreply; 319 sysarg_t dretval; 320 size_t act_size; 321 char name_buf[LOC_NAME_MAXLEN + 1]; 322 323 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 324 325 ipc_call_t answer; 326 aid_t req = async_send_1(exch, INETCFG_SROUTE_GET, sroute_id, &answer); 327 aid_t dreq = async_data_read(exch, name_buf, LOC_NAME_MAXLEN, &dreply); 328 async_wait_for(dreq, &dretval); 329 330 async_exchange_end(exch); 331 332 if (dretval != EOK) { 333 async_forget(req); 334 return dretval; 335 } 336 358 337 sysarg_t retval; 359 338 async_wait_for(req, &retval); 360 361 *sroute_id = IPC_GET_ARG1(answer); 362 363 return (int) retval; 364 } 365 366 int inetcfg_sroute_delete(sysarg_t sroute_id) 367 { 368 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 369 370 int rc = async_req_1_0(exch, INETCFG_SROUTE_DELETE, sroute_id); 371 async_exchange_end(exch); 372 373 return rc; 374 } 375 376 int inetcfg_sroute_get(sysarg_t sroute_id, inet_sroute_info_t *srinfo) 377 { 378 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 379 380 ipc_call_t answer; 381 aid_t req = async_send_1(exch, INETCFG_SROUTE_GET, sroute_id, &answer); 382 383 ipc_call_t answer_dest; 384 aid_t req_dest = async_data_read(exch, &srinfo->dest, 385 sizeof(inet_naddr_t), &answer_dest); 386 387 sysarg_t retval_dest; 388 async_wait_for(req_dest, &retval_dest); 389 390 if (retval_dest != EOK) { 391 async_exchange_end(exch); 392 async_forget(req); 393 return (int) retval_dest; 394 } 395 396 ipc_call_t answer_router; 397 aid_t req_router = async_data_read(exch, &srinfo->router, 398 sizeof(inet_addr_t), &answer_router); 399 400 sysarg_t retval_router; 401 async_wait_for(req_router, &retval_router); 402 403 if (retval_router != EOK) { 404 async_exchange_end(exch); 405 async_forget(req); 406 return (int) retval_router; 407 } 408 409 ipc_call_t answer_name; 410 char name_buf[LOC_NAME_MAXLEN + 1]; 411 aid_t req_name = async_data_read(exch, name_buf, LOC_NAME_MAXLEN, 412 &answer_name); 413 414 async_exchange_end(exch); 415 416 sysarg_t retval_name; 417 async_wait_for(req_name, &retval_name); 418 419 if (retval_name != EOK) { 420 async_forget(req); 421 return (int) retval_name; 422 } 423 424 sysarg_t retval; 425 async_wait_for(req, &retval); 426 339 427 340 if (retval != EOK) 428 return (int)retval;429 430 size_t act_size = IPC_GET_ARG2(answer_name);341 return retval; 342 343 act_size = IPC_GET_ARG2(dreply); 431 344 assert(act_size <= LOC_NAME_MAXLEN); 432 433 345 name_buf[act_size] = '\0'; 434 346 347 srinfo->dest.ipv4 = IPC_GET_ARG1(answer); 348 srinfo->dest.bits = IPC_GET_ARG2(answer); 349 srinfo->router.ipv4 = IPC_GET_ARG3(answer); 435 350 srinfo->name = str_dup(name_buf); 436 351 437 352 return EOK; 438 353 }
Note:
See TracChangeset
for help on using the changeset viewer.