diff options
author | ru <ru@FreeBSD.org> | 2003-06-01 22:49:59 +0000 |
---|---|---|
committer | ru <ru@FreeBSD.org> | 2003-06-01 22:49:59 +0000 |
commit | 09e9a903dfe557f92bab66940e04cf126f5f2407 (patch) | |
tree | cf06bfc7dad89a44777d0f9f970f360a4b3954a4 /sys/netinet/libalias/alias_db.c | |
parent | f9c2081f4f0b69309cbe01ad7f4943abfbcc25cd (diff) | |
download | FreeBSD-src-09e9a903dfe557f92bab66940e04cf126f5f2407.zip FreeBSD-src-09e9a903dfe557f92bab66940e04cf126f5f2407.tar.gz |
Make the PacketAliasSetAddress() function call optional. If it
is not called, and no static rules match an outgoing packet, the
latter retains its source IP address. This is in support of the
"static NAT only" mode.
Diffstat (limited to 'sys/netinet/libalias/alias_db.c')
-rw-r--r-- | sys/netinet/libalias/alias_db.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/sys/netinet/libalias/alias_db.c b/sys/netinet/libalias/alias_db.c index e3aab97..1b59b05 100644 --- a/sys/netinet/libalias/alias_db.c +++ b/sys/netinet/libalias/alias_db.c @@ -1239,7 +1239,7 @@ FindLinkOut(struct in_addr src_addr, specified as using the default source address (i.e. device interface address) without knowing in advance what that address is. */ - if (aliasAddress.s_addr != 0 && + if (aliasAddress.s_addr != INADDR_ANY && src_addr.s_addr == aliasAddress.s_addr) { link = _FindLinkOut(nullAddress, dst_addr, src_port, dst_port, @@ -1395,7 +1395,7 @@ FindLinkIn(struct in_addr dst_addr, specified as using the default aliasing address (i.e. device interface address) without knowing in advance what that address is. */ - if (aliasAddress.s_addr != 0 && + if (aliasAddress.s_addr != INADDR_ANY && alias_addr.s_addr == aliasAddress.s_addr) { link = _FindLinkIn(dst_addr, nullAddress, dst_port, alias_port, @@ -1805,7 +1805,8 @@ FindOriginalAddress(struct in_addr alias_addr) if (targetAddress.s_addr == INADDR_ANY) return alias_addr; else if (targetAddress.s_addr == INADDR_NONE) - return aliasAddress; + return (aliasAddress.s_addr != INADDR_ANY) ? + aliasAddress : alias_addr; else return targetAddress; } @@ -1818,7 +1819,8 @@ FindOriginalAddress(struct in_addr alias_addr) link->server = link->server->next; return (src_addr); } else if (link->src_addr.s_addr == INADDR_ANY) - return aliasAddress; + return (aliasAddress.s_addr != INADDR_ANY) ? + aliasAddress : alias_addr; else return link->src_addr; } @@ -1834,12 +1836,14 @@ FindAliasAddress(struct in_addr original_addr) 0, 0, LINK_ADDR, 0); if (link == NULL) { - return aliasAddress; + return (aliasAddress.s_addr != INADDR_ANY) ? + aliasAddress : original_addr; } else { if (link->alias_addr.s_addr == INADDR_ANY) - return aliasAddress; + return (aliasAddress.s_addr != INADDR_ANY) ? + aliasAddress : original_addr; else return link->alias_addr; } |