mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-22 05:55:12 +08:00
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:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
@@ -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));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user