summaryrefslogtreecommitdiffstats
path: root/sys/netinet/libalias
diff options
context:
space:
mode:
authorru <ru@FreeBSD.org>2003-06-01 23:15:00 +0000
committerru <ru@FreeBSD.org>2003-06-01 23:15:00 +0000
commit648544852f7a39363cd8cb606a45f62d3153198e (patch)
tree1be5b9507140e3fd97a52c41224763582eed0f1a /sys/netinet/libalias
parent7f7e0909c558b7d7048b54812f02a0979741f7cd (diff)
downloadFreeBSD-src-648544852f7a39363cd8cb606a45f62d3153198e.zip
FreeBSD-src-648544852f7a39363cd8cb606a45f62d3153198e.tar.gz
A new API function PacketAliasRedirectDynamic() can be used
to mark a fully specified static link as dynamic; i.e. make it a one-time link.
Diffstat (limited to 'sys/netinet/libalias')
-rw-r--r--sys/netinet/libalias/alias.h1
-rw-r--r--sys/netinet/libalias/alias_db.c15
-rw-r--r--sys/netinet/libalias/libalias.321
3 files changed, 36 insertions, 1 deletions
diff --git a/sys/netinet/libalias/alias.h b/sys/netinet/libalias/alias.h
index eab4044..eb35bf7 100644
--- a/sys/netinet/libalias/alias.h
+++ b/sys/netinet/libalias/alias.h
@@ -69,6 +69,7 @@ int PacketAliasAddServer(struct alias_link *_link,
struct alias_link *
PacketAliasRedirectAddr(struct in_addr _src_addr,
struct in_addr _alias_addr);
+int PacketAliasRedirectDynamic(struct alias_link *_link);
void PacketAliasRedirectDelete(struct alias_link *_link);
struct alias_link *
PacketAliasRedirectPort(struct in_addr _src_addr,
diff --git a/sys/netinet/libalias/alias_db.c b/sys/netinet/libalias/alias_db.c
index 1b59b05..84b38ae 100644
--- a/sys/netinet/libalias/alias_db.c
+++ b/sys/netinet/libalias/alias_db.c
@@ -2358,6 +2358,7 @@ UninitPacketAliasLog(void)
PacketAliasAddServer()
PacketAliasRedirectProto()
PacketAliasRedirectAddr()
+ PacketAliasRedirectDynamic()
PacketAliasRedirectDelete()
PacketAliasSetAddress()
PacketAliasInit()
@@ -2499,6 +2500,20 @@ PacketAliasRedirectAddr(struct in_addr src_addr,
}
+/* Mark the aliasing link dynamic */
+int
+PacketAliasRedirectDynamic(struct alias_link *link)
+{
+
+ if (link->flags & LINK_PARTIALLY_SPECIFIED)
+ return (-1);
+ else {
+ link->flags &= ~LINK_PERMANENT;
+ return (0);
+ }
+}
+
+
void
PacketAliasRedirectDelete(struct alias_link *link)
{
diff --git a/sys/netinet/libalias/libalias.3 b/sys/netinet/libalias/libalias.3
index 71735b2..6eb4f4b 100644
--- a/sys/netinet/libalias/libalias.3
+++ b/sys/netinet/libalias/libalias.3
@@ -545,7 +545,26 @@ the
.Fa port
argument is ignored and could have any value, e.g. htons(~0).
.Pp
-This function returns 0 on success, -1 otherwise.
+This function returns 0 on success, \-1 otherwise.
+.Ed
+.Pp
+.Ft int
+.Fn PacketAliasRedirectDynamic "struct alias_link *link"
+.Bd -ragged -offset indent
+This function marks the specified static redirect rule entered by
+.Fn PacketAliasRedirectPort
+as dynamic.
+This can be used to e.g. dynamically redirect a single TCP connection,
+after which the rule is removed.
+Only fully specified links can be made dynamic.
+(See the
+.Sx STATIC AND DYNAMIC LINKS
+and
+.Sx PARTIALLY SPECIFIED ALIASING LINKS
+sections below for a definition of static vs. dynamic,
+and partially vs. fully specified links.)
+.Pp
+This function returns 0 on success, \-1 otherwise.
.Ed
.Pp
.Ft void
OpenPOWER on IntegriCloud