Changeset 8d48c7e in mainline for uspace/lib/nettl
- Timestamp:
- 2015-06-02T16:00:42Z (10 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2c4bb828
- Parents:
- ab6326bc
- Location:
- uspace/lib/nettl
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/nettl/include/nettl/amap.h
rab6326bc r8d48c7e 96 96 inet_ep2_t *); 97 97 extern void amap_remove(amap_t *, inet_ep2_t *); 98 extern int amap_find (amap_t *, inet_ep2_t *, void **);98 extern int amap_find_match(amap_t *, inet_ep2_t *, void **); 99 99 100 100 #endif -
uspace/lib/nettl/include/nettl/portrng.h
rab6326bc r8d48c7e 46 46 /** Port number */ 47 47 uint16_t pn; 48 /** User argument */ 49 void *arg; 48 50 } portrng_port_t; 49 51 … … 60 62 extern int portrng_alloc(portrng_t *, uint16_t, void *, 61 63 portrng_flags_t, uint16_t *); 64 extern int portrng_find_port(portrng_t *, uint16_t, void **); 62 65 extern void portrng_free_port(portrng_t *, uint16_t); 63 66 extern bool portrng_empty(portrng_t *); -
uspace/lib/nettl/src/amap.c
rab6326bc r8d48c7e 510 510 } 511 511 512 int amap_find(amap_t *map, inet_ep2_t *epp, void **rarg) 513 { 514 log_msg(LOG_DEFAULT, LVL_NOTE, "amap_find()"); 515 return EOK; 512 /** Find association matching an endpoint pair. 513 * 514 * Used to find which association to deliver a datagram to. 515 * 516 * @param map Association map 517 * @param epp Endpoint pair 518 * @param rarg Place to store user argument for the matching association. 519 * 520 * @return EOK on success, ENOENT if not found. 521 */ 522 int amap_find_match(amap_t *map, inet_ep2_t *epp, void **rarg) 523 { 524 int rc; 525 amap_repla_t *repla; 526 amap_laddr_t *laddr; 527 amap_llink_t *llink; 528 529 log_msg(LOG_DEFAULT, LVL_NOTE, "amap_find_match(llink=%zu)", 530 epp->local_link); 531 532 /* Remode endpoint, local address */ 533 rc = amap_repla_find(map, &epp->remote, &epp->local.addr, &repla); 534 if (rc == EOK) { 535 rc = portrng_find_port(repla->portrng, epp->local.port, 536 rarg); 537 if (rc == EOK) { 538 log_msg(LOG_DEFAULT, LVL_NOTE, "Matched repla / " 539 "port %" PRIu16, epp->local.port); 540 return EOK; 541 } 542 } 543 544 /* Local address */ 545 rc = amap_laddr_find(map, &epp->local.addr, &laddr); 546 if (rc == EOK) { 547 rc = portrng_find_port(laddr->portrng, epp->local.port, 548 rarg); 549 if (rc == EOK) { 550 log_msg(LOG_DEFAULT, LVL_NOTE, "Matched laddr / " 551 "port %" PRIu16, epp->local.port); 552 return EOK; 553 } 554 } 555 556 /* Local link */ 557 rc = amap_llink_find(map, epp->local_link, &llink); 558 if (epp->local_link != 0 && rc == EOK) { 559 rc = portrng_find_port(llink->portrng, epp->local.port, 560 rarg); 561 if (rc == EOK) { 562 log_msg(LOG_DEFAULT, LVL_NOTE, "Matched llink / " 563 "port %" PRIu16, epp->local.port); 564 return EOK; 565 } 566 } 567 568 /* Unspecified */ 569 rc = portrng_find_port(map->unspec, epp->local.port, rarg); 570 if (rc == EOK) { 571 log_msg(LOG_DEFAULT, LVL_NOTE, "Matched unspec / port %" PRIu16, 572 epp->local.port); 573 return EOK; 574 } 575 576 log_msg(LOG_DEFAULT, LVL_NOTE, "No match."); 577 return ENOENT; 516 578 } 517 579 -
uspace/lib/nettl/src/portrng.c
rab6326bc r8d48c7e 118 118 119 119 p->pn = pnum; 120 p->arg = arg; 120 121 list_append(&p->lprng, &pr->used); 121 122 *apnum = pnum; … … 123 124 pnum); 124 125 return EOK; 126 } 127 128 int portrng_find_port(portrng_t *pr, uint16_t pnum, void **rarg) 129 { 130 list_foreach(pr->used, lprng, portrng_port_t, port) { 131 if (port->pn == pnum) { 132 *rarg = port->arg; 133 return EOK; 134 } 135 } 136 137 return ENOENT; 125 138 } 126 139
Note:
See TracChangeset
for help on using the changeset viewer.