aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjoern A. Zeeb <bz@FreeBSD.org>2008-11-27 12:04:35 +0000
committerBjoern A. Zeeb <bz@FreeBSD.org>2008-11-27 12:04:35 +0000
commit6aee2fc550d27a19446cf586f4aec7f7eb6743b2 (patch)
treee1f15662baedc4c9181ee6f9e4cd9ced42b3fbba
parentcb5c4b10ba7c6d9f83b961c24be8f766ea6156c0 (diff)
Notes
-rw-r--r--sys/netinet/in_pcb.c9
-rw-r--r--sys/netinet/tcp_timewait.c10
-rw-r--r--sys/netinet/tcp_usrreq.c29
-rw-r--r--sys/netinet6/in6_pcb.c39
-rw-r--r--sys/netinet6/in6_pcb.h1
-rw-r--r--sys/netinet6/raw_ip6.c2
-rw-r--r--sys/netinet6/udp6_usrreq.c2
7 files changed, 17 insertions, 75 deletions
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c
index 67d609cbb086..f611e73aa478 100644
--- a/sys/netinet/in_pcb.c
+++ b/sys/netinet/in_pcb.c
@@ -899,10 +899,17 @@ in_pcbfree(struct inpcb *inp)
INP_WLOCK_ASSERT(inp);
#ifdef IPSEC
- ipsec_delete_pcbpolicy(inp);
+ if (inp->inp_sp != NULL)
+ ipsec_delete_pcbpolicy(inp);
#endif /* IPSEC */
inp->inp_gencnt = ++ipi->ipi_gencnt;
in_pcbremlists(inp);
+#ifdef INET6
+ if (inp->inp_vflag & INP_IPV6PROTO) {
+ ip6_freepcbopts(inp->in6p_outputopts);
+ ip6_freemoptions(inp->in6p_moptions);
+ }
+#endif
if (inp->inp_options)
(void)m_free(inp->inp_options);
if (inp->inp_moptions != NULL)
diff --git a/sys/netinet/tcp_timewait.c b/sys/netinet/tcp_timewait.c
index d3a582c49214..7b06de4b77bb 100644
--- a/sys/netinet/tcp_timewait.c
+++ b/sys/netinet/tcp_timewait.c
@@ -514,14 +514,8 @@ tcp_twclose(struct tcptw *tw, int reuse)
*/
INP_WUNLOCK(inp);
}
- } else {
-#ifdef INET6
- if (inp->inp_vflag & INP_IPV6PROTO)
- in6_pcbfree(inp);
- else
-#endif
- in_pcbfree(inp);
- }
+ } else
+ in_pcbfree(inp);
V_tcpstat.tcps_closed++;
crfree(tw->tw_cred);
tw->tw_cred = NULL;
diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c
index 3127c863c82b..9661a977b9ab 100644
--- a/sys/netinet/tcp_usrreq.c
+++ b/sys/netinet/tcp_usrreq.c
@@ -156,9 +156,6 @@ static void
tcp_detach(struct socket *so, struct inpcb *inp)
{
struct tcpcb *tp;
-#ifdef INET6
- int isipv6 = INP_CHECK_SOCKAF(so, AF_INET6) != 0;
-#endif
#ifdef INVARIANTS
INIT_VNET_INET(so->so_vnet);
#endif
@@ -188,12 +185,7 @@ tcp_detach(struct socket *so, struct inpcb *inp)
KASSERT(tp == NULL, ("tcp_detach: INP_TIMEWAIT && "
"INP_DROPPED && tp != NULL"));
in_pcbdetach(inp);
-#ifdef INET6
- if (isipv6)
- in6_pcbfree(inp);
- else
-#endif
- in_pcbfree(inp);
+ in_pcbfree(inp);
} else {
in_pcbdetach(inp);
INP_WUNLOCK(inp);
@@ -212,15 +204,9 @@ tcp_detach(struct socket *so, struct inpcb *inp)
tp->t_state < TCPS_SYN_SENT) {
tcp_discardcb(tp);
in_pcbdetach(inp);
-#ifdef INET6
- if (isipv6)
- in6_pcbfree(inp);
- else
-#endif
- in_pcbfree(inp);
- } else {
- in_pcbdetach(inp);
- }
+ in_pcbfree(inp);
+ } else
+ in_pcbdetach(inp);
}
}
@@ -1479,12 +1465,7 @@ tcp_attach(struct socket *so)
tp = tcp_newtcpcb(inp);
if (tp == NULL) {
in_pcbdetach(inp);
-#ifdef INET6
- if (isipv6)
- in6_pcbfree(inp);
- else
-#endif
- in_pcbfree(inp);
+ in_pcbfree(inp);
INP_INFO_WUNLOCK(&V_tcbinfo);
return (ENOBUFS);
}
diff --git a/sys/netinet6/in6_pcb.c b/sys/netinet6/in6_pcb.c
index 75bc3453c7d8..c8548911f56f 100644
--- a/sys/netinet6/in6_pcb.c
+++ b/sys/netinet6/in6_pcb.c
@@ -103,12 +103,6 @@ __FBSDID("$FreeBSD$");
#include <netinet6/in6_pcb.h>
#include <netinet6/scope6_var.h>
-#ifdef IPSEC
-#include <netipsec/ipsec.h>
-#include <netipsec/ipsec6.h>
-#include <netipsec/key.h>
-#endif /* IPSEC */
-
#include <security/mac/mac_framework.h>
struct in6_addr zeroin6_addr;
@@ -410,39 +404,6 @@ in6_pcbdisconnect(struct inpcb *inp)
in_pcbrehash(inp);
}
-void
-in6_pcbfree(struct inpcb *inp)
-{
- struct inpcbinfo *ipi = inp->inp_pcbinfo;
-
- KASSERT(inp->inp_socket == NULL, ("%s: inp_socket != NULL", __func__));
-
- INP_INFO_WLOCK_ASSERT(ipi);
- INP_WLOCK_ASSERT(inp);
-
-#ifdef IPSEC
- if (inp->in6p_sp != NULL)
- ipsec_delete_pcbpolicy(inp);
-#endif /* IPSEC */
- inp->inp_gencnt = ++ipi->ipi_gencnt;
- in_pcbremlists(inp);
- ip6_freepcbopts(inp->in6p_outputopts);
- ip6_freemoptions(inp->in6p_moptions);
- /* Check and free IPv4 related resources in case of mapped addr */
- if (inp->inp_options)
- (void)m_free(inp->inp_options);
- if (inp->inp_moptions != NULL)
- inp_freemoptions(inp->inp_moptions);
- inp->inp_vflag = 0;
- crfree(inp->inp_cred);
-
-#ifdef MAC
- mac_inpcb_destroy(inp);
-#endif
- INP_WUNLOCK(inp);
- uma_zfree(ipi->ipi_zone, inp);
-}
-
struct sockaddr *
in6_sockaddr(in_port_t port, struct in6_addr *addr_p)
{
diff --git a/sys/netinet6/in6_pcb.h b/sys/netinet6/in6_pcb.h
index c76f9f1bad23..b2cc724a11ca 100644
--- a/sys/netinet6/in6_pcb.h
+++ b/sys/netinet6/in6_pcb.h
@@ -74,7 +74,6 @@ void in6_losing __P((struct inpcb *));
int in6_pcbbind __P((struct inpcb *, struct sockaddr *, struct ucred *));
int in6_pcbconnect __P((struct inpcb *, struct sockaddr *, struct ucred *));
void in6_pcbdisconnect __P((struct inpcb *));
-void in6_pcbfree __P((struct inpcb *));
int in6_pcbladdr __P((struct inpcb *, struct sockaddr *,
struct in6_addr **));
struct inpcb *
diff --git a/sys/netinet6/raw_ip6.c b/sys/netinet6/raw_ip6.c
index bbdb27baaa7a..940bd1e3b9ea 100644
--- a/sys/netinet6/raw_ip6.c
+++ b/sys/netinet6/raw_ip6.c
@@ -605,7 +605,7 @@ rip6_detach(struct socket *so)
INP_WLOCK(inp);
free(inp->in6p_icmp6filt, M_PCB);
in_pcbdetach(inp);
- in6_pcbfree(inp);
+ in_pcbfree(inp);
INP_INFO_WUNLOCK(&V_ripcbinfo);
}
diff --git a/sys/netinet6/udp6_usrreq.c b/sys/netinet6/udp6_usrreq.c
index f51156c8ddeb..19a5199b4245 100644
--- a/sys/netinet6/udp6_usrreq.c
+++ b/sys/netinet6/udp6_usrreq.c
@@ -901,7 +901,7 @@ udp6_detach(struct socket *so)
INP_INFO_WLOCK(&V_udbinfo);
INP_WLOCK(inp);
in_pcbdetach(inp);
- in6_pcbfree(inp);
+ in_pcbfree(inp);
INP_INFO_WUNLOCK(&V_udbinfo);
}