diff options
Diffstat (limited to 'sys/netinet/tcp_input.c')
-rw-r--r-- | sys/netinet/tcp_input.c | 79 |
1 files changed, 42 insertions, 37 deletions
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 33b8926e9e1..8d99ae6f22f 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tcp_input.c,v 1.242 2011/04/04 22:25:24 blambert Exp $ */ +/* $OpenBSD: tcp_input.c,v 1.243 2011/04/04 23:04:18 blambert Exp $ */ /* $NetBSD: tcp_input.c,v 1.23 1996/02/13 23:43:44 christos Exp $ */ /* @@ -190,6 +190,9 @@ do { \ TCP_SET_DELACK(tp); \ } while (0) +void syn_cache_put(struct syn_cache *); +void syn_cache_rm(struct syn_cache *); + /* * Insert segment ti into reassembly queue of tcp with * control block tp. Return TH_FIN if reassembly now includes @@ -3353,27 +3356,29 @@ do { \ } while (/*CONSTCOND*/0) #endif /* INET6 */ -#define SYN_CACHE_RM(sc) \ -do { \ - (sc)->sc_flags |= SCF_DEAD; \ - TAILQ_REMOVE(&tcp_syn_cache[(sc)->sc_bucketidx].sch_bucket, \ - (sc), sc_bucketq); \ - (sc)->sc_tp = NULL; \ - LIST_REMOVE((sc), sc_tpq); \ - tcp_syn_cache[(sc)->sc_bucketidx].sch_length--; \ - timeout_del(&(sc)->sc_timer); \ - syn_cache_count--; \ -} while (/*CONSTCOND*/0) +void +syn_cache_rm(struct syn_cache *sc) +{ + sc->sc_flags |= SCF_DEAD; + TAILQ_REMOVE(&tcp_syn_cache[sc->sc_bucketidx].sch_bucket, + sc, sc_bucketq); + sc->sc_tp = NULL; + LIST_REMOVE(sc, sc_tpq); + tcp_syn_cache[sc->sc_bucketidx].sch_length--; + timeout_del(&sc->sc_timer); + syn_cache_count--; +} -#define SYN_CACHE_PUT(sc) \ -do { \ - if ((sc)->sc_ipopts) \ - (void) m_free((sc)->sc_ipopts); \ - if ((sc)->sc_route4.ro_rt != NULL) \ - RTFREE((sc)->sc_route4.ro_rt); \ - timeout_set(&(sc)->sc_timer, syn_cache_reaper, (sc)); \ - timeout_add(&(sc)->sc_timer, 0); \ -} while (/*CONSTCOND*/0) +void +syn_cache_put(struct syn_cache *sc) +{ + if (sc->sc_ipopts) + (void) m_free(sc->sc_ipopts); + if (sc->sc_route4.ro_rt != NULL) + RTFREE(sc->sc_route4.ro_rt); + timeout_set(&sc->sc_timer, syn_cache_reaper, sc); + timeout_add(&sc->sc_timer, 0); +} struct pool syn_cache_pool; @@ -3447,8 +3452,8 @@ syn_cache_insert(struct syn_cache *sc, struct tcpcb *tp) if (sc2 == NULL) panic("syn_cache_insert: bucketoverflow: impossible"); #endif - SYN_CACHE_RM(sc2); - SYN_CACHE_PUT(sc2); + syn_cache_rm(sc2); + syn_cache_put(sc2); } else if (syn_cache_count >= tcp_syn_cache_limit) { struct syn_cache_head *scp2, *sce; @@ -3481,8 +3486,8 @@ syn_cache_insert(struct syn_cache *sc, struct tcpcb *tp) #endif } sc2 = TAILQ_FIRST(&scp2->sch_bucket); - SYN_CACHE_RM(sc2); - SYN_CACHE_PUT(sc2); + syn_cache_rm(sc2); + syn_cache_put(sc2); } /* @@ -3547,8 +3552,8 @@ syn_cache_timer(void *arg) dropit: tcpstat.tcps_sc_timed_out++; - SYN_CACHE_RM(sc); - SYN_CACHE_PUT(sc); + syn_cache_rm(sc); + syn_cache_put(sc); splx(s); } @@ -3584,8 +3589,8 @@ syn_cache_cleanup(struct tcpcb *tp) if (sc->sc_tp != tp) panic("invalid sc_tp in syn_cache_cleanup"); #endif - SYN_CACHE_RM(sc); - SYN_CACHE_PUT(sc); + syn_cache_rm(sc); + syn_cache_put(sc); } /* just for safety */ LIST_INIT(&tp->t_sc); @@ -3680,7 +3685,7 @@ syn_cache_get(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th, } /* Remove this cache entry */ - SYN_CACHE_RM(sc); + syn_cache_rm(sc); splx(s); /* @@ -3879,7 +3884,7 @@ syn_cache_get(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th, tp->last_ack_sent = tp->rcv_nxt; tcpstat.tcps_sc_completed++; - SYN_CACHE_PUT(sc); + syn_cache_put(sc); return (so); resetandabort: @@ -3889,7 +3894,7 @@ resetandabort: abort: if (so != NULL) (void) soabort(so); - SYN_CACHE_PUT(sc); + syn_cache_put(sc); tcpstat.tcps_sc_aborted++; return ((struct socket *)(-1)); } @@ -3917,10 +3922,10 @@ syn_cache_reset(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th, splx(s); return; } - SYN_CACHE_RM(sc); + syn_cache_rm(sc); splx(s); tcpstat.tcps_sc_reset++; - SYN_CACHE_PUT(sc); + syn_cache_put(sc); } void @@ -3956,10 +3961,10 @@ syn_cache_unreach(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th, return; } - SYN_CACHE_RM(sc); + syn_cache_rm(sc); splx(s); tcpstat.tcps_sc_unreach++; - SYN_CACHE_PUT(sc); + syn_cache_put(sc); } /* @@ -4148,7 +4153,7 @@ syn_cache_add(struct sockaddr *src, struct sockaddr *dst, struct tcphdr *th, tcpstat.tcps_sndacks++; tcpstat.tcps_sndtotal++; } else { - SYN_CACHE_PUT(sc); + syn_cache_put(sc); tcpstat.tcps_sc_dropped++; } return (1); |