summaryrefslogtreecommitdiffstats
path: root/sys/kern/uipc_socket2.c
diff options
context:
space:
mode:
authortodd <todd@openbsd.org>2002-08-08 18:26:37 +0000
committertodd <todd@openbsd.org>2002-08-08 18:26:37 +0000
commitb32bb6505c1757286ccacabc0e9cb9d10cbcd029 (patch)
treee950027ba6ead76bf2b71b98272b7fc30a1dd108 /sys/kern/uipc_socket2.c
parentMove closelog() into log_close() function and call that instead (diff)
downloadwireguard-openbsd-b32bb6505c1757286ccacabc0e9cb9d10cbcd029.tar.xz
wireguard-openbsd-b32bb6505c1757286ccacabc0e9cb9d10cbcd029.zip
backout the tree break. ok pb@, art@
Diffstat (limited to 'sys/kern/uipc_socket2.c')
-rw-r--r--sys/kern/uipc_socket2.c230
1 files changed, 61 insertions, 169 deletions
diff --git a/sys/kern/uipc_socket2.c b/sys/kern/uipc_socket2.c
index 02543bc3144..0371b65b037 100644
--- a/sys/kern/uipc_socket2.c
+++ b/sys/kern/uipc_socket2.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uipc_socket2.c,v 1.28 2002/08/08 17:07:32 provos Exp $ */
+/* $OpenBSD: uipc_socket2.c,v 1.29 2002/08/08 18:26:37 todd Exp $ */
/* $NetBSD: uipc_socket2.c,v 1.11 1996/02/04 02:17:55 christos Exp $ */
/*
@@ -435,61 +435,6 @@ sbrelease(sb)
* or sbdroprecord() when the data is acknowledged by the peer.
*/
-#ifdef SOCKBUF_DEBUG
-void
-sblastrecordchk(struct sockbuf *sb, const char *where)
-{
- struct mbuf *m = sb->sb_mb;
-
- while (m && m->m_nextpkt)
- m = m->m_nextpkt;
-
- if (m != sb->sb_lastrecord) {
- printf("sblastrecordchk: sb_mb %p sb_lastrecord %p last %p\n",
- sb->sb_mb, sb->sb_lastrecord, m);
- printf("packet chain:\n");
- for (m = sb->sb_mb; m != NULL; m = m->m_nextpkt)
- printf("\t%p\n", m);
- panic("sblastrecordchk from %s\n", where);
- }
-}
-
-void
-sblastmbufchk(struct sockbuf *sb, const char *where)
-{
- struct mbuf *m = sb->sb_mb;
- struct mbuf *n;
-
- while (m && m->m_nextpkt)
- m = m->m_nextpkt;
-
- while (m && m->m_next)
- m = m->m_next;
-
- if (m != sb->sb_mbtail) {
- printf("sblastmbufchk: sb_mb %p sb_mbtail %p last %p\n",
- sb->sb_mb, sb->sb_mbtail, m);
- printf("packet tree:\n");
- for (m = sb->sb_mb; m != NULL; m = m->m_nextpkt) {
- printf("\t");
- for (n = m; n != NULL; n = n->m_next)
- printf("%p ", n);
- printf("\n");
- }
- panic("sblastmbufchk from %s", where);
- }
-}
-#endif /* SOCKBUF_DEBUG */
-
-#define SBLINKRECORD(sb, m0) \
-do { \
- if ((sb)->sb_lastrecord != NULL) \
- (sb)->sb_lastrecord->m_nextpkt = (m0); \
- else \
- (sb)->sb_mb = (m0); \
- (sb)->sb_lastrecord = (m0); \
-} while (/*CONSTCOND*/0)
-
/*
* Append mbuf chain m to the last record in the
* socket buffer sb. The additional space associated
@@ -505,58 +450,26 @@ sbappend(sb, m)
if (m == 0)
return;
-
- SBLASTRECORDCHK(sb, "sbappend 1");
-
- if ((n = sb->sb_lastrecord) != NULL) {
- /*
- * XXX Would like to simply use sb_mbtail here, but
- * XXX I need to verify that I won't miss an EOR that
- * XXX way.
- */
+ if ((n = sb->sb_mb) != NULL) {
+ while (n->m_nextpkt)
+ n = n->m_nextpkt;
do {
if (n->m_flags & M_EOR) {
sbappendrecord(sb, m); /* XXXXXX!!!! */
return;
}
} while (n->m_next && (n = n->m_next));
- } else {
- /*
- * If this is the first record in the socket buffer, it's
- * also the last record.
- */
- sb->sb_lastrecord = m;
}
sbcompress(sb, m, n);
- SBLASTRECORDCHK(sb, "sbappend 2");
-}
-
-/*
- * This version of sbappend() should only be used when the caller
- * absolutely knows that there will never be more than one record
- * in the socket buffer, that is, a stream protocol (such as TCP).
- */
-void
-sbappendstream(struct sockbuf *sb, struct mbuf *m)
-{
-
- KDASSERT(m->m_nextpkt == NULL);
- KASSERT(sb->sb_mb == sb->sb_lastrecord);
-
- SBLASTMBUFCHK(sb, __func__);
-
- sbcompress(sb, m, sb->sb_mbtail);
-
- sb->sb_lastrecord = sb->sb_mb;
- SBLASTRECORDCHK(sb, __func__);
}
#ifdef SOCKBUF_DEBUG
void
-sbcheck(struct sockbuf *sb)
+sbcheck(sb)
+ register struct sockbuf *sb;
{
- struct mbuf *m;
- u_long len = 0, mbcnt = 0;
+ register struct mbuf *m;
+ register int len = 0, mbcnt = 0;
for (m = sb->sb_mb; m; m = m->m_next) {
len += m->m_len;
@@ -567,7 +480,7 @@ sbcheck(struct sockbuf *sb)
panic("sbcheck nextpkt");
}
if (len != sb->sb_cc || mbcnt != sb->sb_mbcnt) {
- printf("cc %lu != %lu || mbcnt %lu != %lu\n", len, sb->sb_cc,
+ printf("cc %d != %d || mbcnt %d != %d\n", len, sb->sb_cc,
mbcnt, sb->sb_mbcnt);
panic("sbcheck");
}
@@ -579,20 +492,26 @@ sbcheck(struct sockbuf *sb)
* begins a new record.
*/
void
-sbappendrecord(struct sockbuf *sb, struct mbuf *m0)
+sbappendrecord(sb, m0)
+ register struct sockbuf *sb;
+ register struct mbuf *m0;
{
- struct mbuf *m;
+ register struct mbuf *m;
if (m0 == 0)
return;
-
+ if ((m = sb->sb_mb) != NULL)
+ while (m->m_nextpkt)
+ m = m->m_nextpkt;
/*
* Put the first mbuf on the queue.
* Note this permits zero length records.
*/
sballoc(sb, m0);
- SBLASTRECORDCHK(sb, "sbappendrecord 1");
- SBLINKRECORD(sb, m0);
+ if (m)
+ m->m_nextpkt = m0;
+ else
+ sb->sb_mb = m0;
m = m0->m_next;
m0->m_next = 0;
if (m && (m0->m_flags & M_EOR)) {
@@ -600,7 +519,6 @@ sbappendrecord(struct sockbuf *sb, struct mbuf *m0)
m->m_flags |= M_EOR;
}
sbcompress(sb, m, m0);
- SBLASTRECORDCHK(sb, "sbappendrecord 2");
}
/*
@@ -609,15 +527,15 @@ sbappendrecord(struct sockbuf *sb, struct mbuf *m0)
* but after any other OOB data.
*/
void
-sbinsertoob(struct sockbuf *sb, struct mbuf *m0)
+sbinsertoob(sb, m0)
+ register struct sockbuf *sb;
+ register struct mbuf *m0;
{
- struct mbuf *m, **mp;
+ register struct mbuf *m;
+ register struct mbuf **mp;
if (m0 == 0)
return;
-
- SBLASTRECORDCHK(sb, "sbinsertoob 1");
-
for (mp = &sb->sb_mb; (m = *mp) != NULL; mp = &((*mp)->m_nextpkt)) {
again:
switch (m->m_type) {
@@ -637,10 +555,6 @@ sbinsertoob(struct sockbuf *sb, struct mbuf *m0)
*/
sballoc(sb, m0);
m0->m_nextpkt = *mp;
- if (*mp == NULL) {
- /* m0 is actually the new tail */
- sb->sb_lastrecord = m0;
- }
*mp = m0;
m = m0->m_next;
m0->m_next = 0;
@@ -649,7 +563,6 @@ sbinsertoob(struct sockbuf *sb, struct mbuf *m0)
m->m_flags |= M_EOR;
}
sbcompress(sb, m, m0);
- SBLASTRECORDCHK(sb, "sbinsertoob 2");
}
/*
@@ -659,10 +572,12 @@ sbinsertoob(struct sockbuf *sb, struct mbuf *m0)
* Returns 0 if no space in sockbuf or insufficient mbufs.
*/
int
-sbappendaddr(struct sockbuf *sb, struct sockaddr *asa, struct mbuf *m0,
- struct mbuf *control)
+sbappendaddr(sb, asa, m0, control)
+ register struct sockbuf *sb;
+ struct sockaddr *asa;
+ struct mbuf *m0, *control;
{
- struct mbuf *m, *n, *nlast;
+ register struct mbuf *m, *n;
int space = asa->sa_len;
if (m0 && (m0->m_flags & M_PKTHDR) == 0)
@@ -688,27 +603,23 @@ sbappendaddr(struct sockbuf *sb, struct sockaddr *asa, struct mbuf *m0,
else
control = m0;
m->m_next = control;
-
- SBLASTRECORDCHK(sb, "sbappendaddr 1");
-
- for (n = m; n->m_next != NULL; n = n->m_next)
+ for (n = m; n; n = n->m_next)
sballoc(sb, n);
- sballoc(sb, n);
- nlast = n;
- SBLINKRECORD(sb, m);
-
- sb->sb_mbtail = nlast;
- SBLASTMBUFCHK(sb, "sbappendaddr");
-
- SBLASTRECORDCHK(sb, "sbappendaddr 2");
-
+ if ((n = sb->sb_mb) != NULL) {
+ while (n->m_nextpkt)
+ n = n->m_nextpkt;
+ n->m_nextpkt = m;
+ } else
+ sb->sb_mb = m;
return (1);
}
int
-sbappendcontrol(struct sockbuf *sb, struct mbuf *m0, struct mbuf *control)
+sbappendcontrol(sb, m0, control)
+ struct sockbuf *sb;
+ struct mbuf *m0, *control;
{
- struct mbuf *m, *mlast, *n;
+ register struct mbuf *m, *n;
int space = 0;
if (control == 0)
@@ -724,20 +635,14 @@ sbappendcontrol(struct sockbuf *sb, struct mbuf *m0, struct mbuf *control)
if (space > sbspace(sb))
return (0);
n->m_next = m0; /* concatenate data to control */
-
- SBLASTRECORDCHK(sb, "sbappendcontrol 1");
-
- for (m = control; m->m_next != NULL; m = m->m_next)
+ for (m = control; m; m = m->m_next)
sballoc(sb, m);
- sballoc(sb, m);
- mlast = m;
- SBLINKRECORD(sb, control);
-
- sb->sb_mbtail = mlast;
- SBLASTMBUFCHK(sb, "sbappendcontrol");
-
- SBLASTRECORDCHK(sb, "sbappendcontrol 2");
-
+ if ((n = sb->sb_mb) != NULL) {
+ while (n->m_nextpkt)
+ n = n->m_nextpkt;
+ n->m_nextpkt = control;
+ } else
+ sb->sb_mb = control;
return (1);
}
@@ -777,7 +682,6 @@ sbcompress(struct sockbuf *sb, struct mbuf *m, struct mbuf *n)
n->m_next = m;
else
sb->sb_mb = m;
- sb->sb_mbtail = m;
sballoc(sb, m);
n = m;
m->m_flags &= ~M_EOR;
@@ -790,7 +694,6 @@ sbcompress(struct sockbuf *sb, struct mbuf *m, struct mbuf *n)
else
printf("semi-panic: sbcompress\n");
}
- SBLASTMBUFCHK(sb, __func__);
}
/*
@@ -798,27 +701,27 @@ sbcompress(struct sockbuf *sb, struct mbuf *m, struct mbuf *n)
* Check that all resources are reclaimed.
*/
void
-sbflush(struct sockbuf *sb)
+sbflush(sb)
+ register struct sockbuf *sb;
{
- KASSERT((sb->sb_flags & SB_LOCK) == 0);
-
+ if (sb->sb_flags & SB_LOCK)
+ panic("sbflush");
while (sb->sb_mbcnt)
sbdrop(sb, (int)sb->sb_cc);
-
- KASSERT(sb->sb_cc == 0);
- KASSERT(sb->sb_mb == NULL);
- KASSERT(sb->sb_mbtail == NULL);
- KASSERT(sb->sb_lastrecord == NULL);
+ if (sb->sb_cc || sb->sb_mb)
+ panic("sbflush 2");
}
/*
* Drop data from (the front of) a sockbuf.
*/
void
-sbdrop(struct sockbuf *sb, int len)
+sbdrop(sb, len)
+ register struct sockbuf *sb;
+ register int len;
{
- struct mbuf *m, *mn;
+ register struct mbuf *m, *mn;
struct mbuf *next;
next = (m = sb->sb_mb) ? m->m_nextpkt : 0;
@@ -851,17 +754,6 @@ sbdrop(struct sockbuf *sb, int len)
m->m_nextpkt = next;
} else
sb->sb_mb = next;
- /*
- * First part is an inline SB_EMPTY_FIXUP(). Second part
- * makes sure sb_lastrecord is up-to-date if we dropped
- * part of the last record.
- */
- m = sb->sb_mb;
- if (m == NULL) {
- sb->sb_mbtail = NULL;
- sb->sb_lastrecord = NULL;
- } else if (m->m_nextpkt == NULL)
- sb->sb_lastrecord = m;
}
/*
@@ -869,9 +761,10 @@ sbdrop(struct sockbuf *sb, int len)
* and move the next record to the front.
*/
void
-sbdroprecord(struct sockbuf *sb)
+sbdroprecord(sb)
+ register struct sockbuf *sb;
{
- struct mbuf *m, *mn;
+ register struct mbuf *m, *mn;
m = sb->sb_mb;
if (m) {
@@ -881,7 +774,6 @@ sbdroprecord(struct sockbuf *sb)
MFREE(m, mn);
} while ((m = mn) != NULL);
}
- SB_EMPTY_FIXUP(sb);
}
/*