| 1664 | } |
| 1665 | |
| 1666 | struct in_addr |
| 1667 | FindOriginalAddress(struct libalias *la, struct in_addr alias_addr) |
| 1668 | { |
| 1669 | struct alias_link *lnk; |
| 1670 | |
| 1671 | LIBALIAS_LOCK_ASSERT(la); |
| 1672 | lnk = FindLinkIn(la, la->nullAddress, alias_addr, |
| 1673 | 0, 0, LINK_ADDR, 0); |
| 1674 | if (lnk == NULL) { |
| 1675 | la->newDefaultLink = 1; |
| 1676 | if (la->targetAddress.s_addr == INADDR_ANY) |
| 1677 | return (alias_addr); |
| 1678 | else if (la->targetAddress.s_addr == INADDR_NONE) |
| 1679 | return (la->aliasAddress.s_addr != INADDR_ANY) ? |
| 1680 | la->aliasAddress : alias_addr; |
| 1681 | else |
| 1682 | return (la->targetAddress); |
| 1683 | } else { |
| 1684 | if (lnk->server != NULL) { /* LSNAT link */ |
| 1685 | struct in_addr src_addr; |
| 1686 | |
| 1687 | src_addr = lnk->server->addr; |
| 1688 | lnk->server = lnk->server->next; |
| 1689 | return (src_addr); |
| 1690 | } else if (lnk->src_addr.s_addr == INADDR_ANY) |
| 1691 | return (la->aliasAddress.s_addr != INADDR_ANY) ? |
| 1692 | la->aliasAddress : alias_addr; |
| 1693 | else |
| 1694 | return (lnk->src_addr); |
| 1695 | } |
| 1696 | } |
| 1697 | |
| 1698 | struct in_addr |
| 1699 | FindAliasAddress(struct libalias *la, struct in_addr original_addr) |
no test coverage detected