version 1.60.8.2, 2002/08/29 00:56:47 |
version 1.68, 2003/05/27 22:36:38 |
|
|
in_pcbinit(&rawcbtable, 1, 1); |
in_pcbinit(&rawcbtable, 1, 1); |
} |
} |
|
|
static struct sockaddr_in ripsrc = { sizeof(ripsrc), AF_INET }; |
|
|
|
/* |
/* |
* Setup generic address and protocol structures |
* Setup generic address and protocol structures |
* for raw_input routine, then pass them along with |
* for raw_input routine, then pass them along with |
Line 142 rip_input(m, va_alist) |
|
Line 140 rip_input(m, va_alist) |
|
va_dcl |
va_dcl |
#endif |
#endif |
{ |
{ |
int off, proto; |
int proto; |
struct ip *ip = mtod(m, struct ip *); |
struct ip *ip = mtod(m, struct ip *); |
struct inpcb *inp; |
struct inpcb *inp; |
struct inpcb *last = 0; |
struct inpcb *last = 0; |
Line 151 rip_input(m, va_alist) |
|
Line 149 rip_input(m, va_alist) |
|
va_list ap; |
va_list ap; |
|
|
va_start(ap, m); |
va_start(ap, m); |
off = va_arg(ap, int); |
(void)va_arg(ap, int); /* ignore value, advance ap */ |
proto = va_arg(ap, int); |
proto = va_arg(ap, int); |
va_end(ap); |
va_end(ap); |
|
|
Line 334 rip_output(m, va_alist) |
|
Line 332 rip_output(m, va_alist) |
|
m_freem(m); |
m_freem(m); |
return (EMSGSIZE); |
return (EMSGSIZE); |
} |
} |
M_PREPEND(m, sizeof(struct ip), M_WAIT); |
M_PREPEND(m, sizeof(struct ip), M_DONTWAIT); |
|
if (!m) |
|
return (ENOBUFS); |
ip = mtod(m, struct ip *); |
ip = mtod(m, struct ip *); |
ip->ip_tos = 0; |
ip->ip_tos = 0; |
ip->ip_off = htons(0); |
ip->ip_off = htons(0); |
Line 350 rip_output(m, va_alist) |
|
Line 350 rip_output(m, va_alist) |
|
return (EMSGSIZE); |
return (EMSGSIZE); |
} |
} |
ip = mtod(m, struct ip *); |
ip = mtod(m, struct ip *); |
|
|
|
/* |
|
* If the mbuf is read-only, we need to allocate |
|
* a new mbuf for the header, since we need to |
|
* modify the header. |
|
*/ |
|
if (M_READONLY(m)) { |
|
int hlen = ip->ip_hl << 2; |
|
|
|
m = m_copyup(m, hlen, (max_linkhdr + 3) & ~3); |
|
if (m == NULL) |
|
return (ENOMEM); /* XXX */ |
|
ip = mtod(m, struct ip *); |
|
} |
|
|
/* XXX userland passes ip_len and ip_off in host order */ |
/* XXX userland passes ip_len and ip_off in host order */ |
if (m->m_pkthdr.len != ip->ip_len) { |
if (m->m_pkthdr.len != ip->ip_len) { |
m_freem(m); |
m_freem(m); |
Line 429 rip_ctloutput(op, so, level, optname, m) |
|
Line 444 rip_ctloutput(op, so, level, optname, m) |
|
case PRCO_GETOPT: |
case PRCO_GETOPT: |
switch (optname) { |
switch (optname) { |
case IP_HDRINCL: |
case IP_HDRINCL: |
*m = m_get(M_WAIT, M_SOOPTS); |
*m = m_get(M_WAIT, MT_SOOPTS); |
|
MCLAIM((*m), so->so_mowner); |
(*m)->m_len = sizeof (int); |
(*m)->m_len = sizeof (int); |
*mtod(*m, int *) = inp->inp_flags & INP_HDRINCL ? 1 : 0; |
*mtod(*m, int *) = inp->inp_flags & INP_HDRINCL ? 1 : 0; |
break; |
break; |