diff options
author | ru <ru@FreeBSD.org> | 1999-09-10 15:27:34 +0000 |
---|---|---|
committer | ru <ru@FreeBSD.org> | 1999-09-10 15:27:34 +0000 |
commit | 25ec57cdd2f8f0851611d474cf93e1f71250f76d (patch) | |
tree | f9ec7806b880b2c0b690bc0760ef235c54b263a5 /lib/libalias | |
parent | e637f5a9b7500b58f61e3e03846fd70b43af6ce0 (diff) | |
download | FreeBSD-src-25ec57cdd2f8f0851611d474cf93e1f71250f76d.zip FreeBSD-src-25ec57cdd2f8f0851611d474cf93e1f71250f76d.tar.gz |
- Optimization to the previous (rev 1.15) commit.
Requested by: eivind
Discussed with: eivind
Reviewed by: brian, eivind
Diffstat (limited to 'lib/libalias')
-rw-r--r-- | lib/libalias/alias.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/lib/libalias/alias.c b/lib/libalias/alias.c index 3808912..9c072df 100644 --- a/lib/libalias/alias.c +++ b/lib/libalias/alias.c @@ -118,7 +118,7 @@ TcpMonitorIn() -- These routines monitor TCP connections, and TcpMonitorOut() delete a link when a connection is closed. -These routines look for SYN, ACK and RST flags to determine when TCP +These routines look for SYN, FIN and RST flags to determine when TCP connections open and close. When a TCP connection closes, the data structure containing packet aliasing information is deleted after a timeout period. @@ -140,12 +140,13 @@ TcpMonitorIn(struct ip *pip, struct alias_link *link) switch (GetStateIn(link)) { case ALIAS_TCP_STATE_NOT_CONNECTED: - if (tc->th_flags & TH_SYN) + if (tc->th_flags & TH_RST) + SetStateIn(link, ALIAS_TCP_STATE_DISCONNECTED); + else if (tc->th_flags & TH_SYN) SetStateIn(link, ALIAS_TCP_STATE_CONNECTED); - /*FALLTHROUGH*/ + break; case ALIAS_TCP_STATE_CONNECTED: - if (tc->th_flags & TH_FIN - || tc->th_flags & TH_RST) + if (tc->th_flags & (TH_FIN | TH_RST)) SetStateIn(link, ALIAS_TCP_STATE_DISCONNECTED); break; } @@ -161,12 +162,13 @@ TcpMonitorOut(struct ip *pip, struct alias_link *link) switch (GetStateOut(link)) { case ALIAS_TCP_STATE_NOT_CONNECTED: - if (tc->th_flags & TH_SYN) + if (tc->th_flags & TH_RST) + SetStateOut(link, ALIAS_TCP_STATE_DISCONNECTED); + else if (tc->th_flags & TH_SYN) SetStateOut(link, ALIAS_TCP_STATE_CONNECTED); - /*FALLTHROUGH*/ + break; case ALIAS_TCP_STATE_CONNECTED: - if (tc->th_flags & TH_FIN - || tc->th_flags & TH_RST) + if (tc->th_flags & (TH_FIN | TH_RST)) SetStateOut(link, ALIAS_TCP_STATE_DISCONNECTED); break; } |