2002-09-14 Vyacheslav V. Burdjanadze <wr@zelax.ru>

* kern/uipc_mbuf.c, sys/mbuf.h, netinet/udp_usrreq.c: Add
	optional UDP broadcast forwarding support.
	* netinet/Makefile.am: Defined FORWARD_PROTOCOL to enabled UDP
	broadcast forwarding.
This commit is contained in:
Joel Sherrill
2002-09-14 18:18:50 +00:00
parent c019ff07c8
commit ce2c216469
5 changed files with 602 additions and 39 deletions
+7
View File
@@ -1,3 +1,10 @@
2002-09-14 Vyacheslav V. Burdjanadze <wr@zelax.ru>
* kern/uipc_mbuf.c, sys/mbuf.h, netinet/udp_usrreq.c: Add
optional UDP broadcast forwarding support.
* netinet/Makefile.am: Defined FORWARD_PROTOCOL to enabled UDP
broadcast forwarding.
2002-09-02 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* netinet/in_cksum.c: #include <string.h> for puts in generic
+38 -12
View File
@@ -354,9 +354,10 @@ nospace:
/*
* Copy data from an mbuf chain starting "off" bytes from the beginning,
* continuing for "len" bytes, into the indicated buffer.
* continuing for "len" bytes, into the indicated buffer. Return -1 if requested
* size is bigger than available
*/
void
int
m_copydata(m, off, len, cp)
register struct mbuf *m;
register int off;
@@ -364,20 +365,36 @@ m_copydata(m, off, len, cp)
caddr_t cp;
{
register unsigned count;
struct mbuf *m0 = m;
if (off < 0 || len < 0)
panic("m_copydata");
while (off > 0) {
if (m == 0)
panic("m_copydata");
if (m == 0) {
/*printf("m_copydata: offset > mbuf length (");
while(m0) {
printf("[%d] ",m0->m_len);
m0 = m0->m_next;
}
printf(")\n");*/
return -1;
}
if (off < m->m_len)
break;
off -= m->m_len;
m = m->m_next;
}
while (len > 0) {
if (m == 0)
panic("m_copydata");
if (m == 0) {
/*printf("m_copydata: length > mbuf length (");
while(m0) {
printf("[%d] ",m0->m_len);
m0 = m0->m_next;
}
printf(")\n");*/
return -1;
}
count = min(m->m_len - off, len);
bcopy(mtod(m, caddr_t) + off, cp, count);
len -= count;
@@ -385,6 +402,7 @@ m_copydata(m, off, len, cp)
off = 0;
m = m->m_next;
}
return 0;
}
/*
@@ -699,7 +717,7 @@ m_devget(buf, totlen, off0, ifp, copy)
* starting "off" bytes from the beginning, extending the mbuf
* chain if necessary.
*/
void
int
m_copyback(m0, off, len, cp)
struct mbuf *m0;
register int off;
@@ -717,8 +735,10 @@ m_copyback(m0, off, len, cp)
totlen += mlen;
if (m->m_next == 0) {
n = m_getclr(M_DONTWAIT, m->m_type);
if (n == 0)
goto out;
if (n == 0) {
/*panic("m_copyback() : malformed chain\n");*/
return -1;
}
n->m_len = min(MLEN, len + off);
m->m_next = n;
}
@@ -732,17 +752,23 @@ m_copyback(m0, off, len, cp)
mlen += off;
off = 0;
totlen += mlen;
if (len == 0)
if (len == 0) {
m->m_len = mlen;
break;
}
if (m->m_next == 0) {
n = m_get(M_DONTWAIT, m->m_type);
if (n == 0)
break;
if (n == 0) {
/*panic("m_copyback() : malformed chain 2\n");*/
return -1;
};
n->m_len = min(MLEN, len);
m->m_next = n;
}
m->m_len = mlen;
m = m->m_next;
}
out: if (((m = m0)->m_flags & M_PKTHDR) && (m->m_pkthdr.len < totlen))
m->m_pkthdr.len = totlen;
return 0;
}
+1 -1
View File
@@ -23,7 +23,7 @@ include $(top_srcdir)/../automake/lib.am
#
AM_CPPFLAGS += -D_COMPILING_BSD_KERNEL_ -DKERNEL -DINET -DNFS -DDIAGNOSTIC \
-DBOOTP_COMPAT
-DBOOTP_COMPAT -DFORWARD_PROTOCOL
$(LIB): $(OBJS)
$(make-library)
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -407,8 +407,8 @@ void m_adj __P((struct mbuf *, int));
void m_cat __P((struct mbuf *,struct mbuf *));
int m_mballoc __P((int, int));
int m_clalloc __P((int, int));
void m_copyback __P((struct mbuf *, int, int, caddr_t));
void m_copydata __P((struct mbuf *,int,int,caddr_t));
int m_copyback __P((struct mbuf *, int, int, caddr_t));
int m_copydata __P((struct mbuf *, int, int, caddr_t));
void m_freem __P((struct mbuf *));
void m_reclaim __P((void));