version 1.60, 2001/12/21 02:51:47 |
version 1.60.8.2, 2002/08/29 00:56:47 |
|
|
/* |
/* |
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. |
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. |
* All rights reserved. |
* All rights reserved. |
* |
* |
* Redistribution and use in source and binary forms, with or without |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* modification, are permitted provided that the following conditions |
* are met: |
* are met: |
|
|
* 3. Neither the name of the project nor the names of its contributors |
* 3. Neither the name of the project nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* without specific prior written permission. |
* |
* |
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND |
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
Line 163 rip_input(m, va_alist) |
|
Line 163 rip_input(m, va_alist) |
|
|
|
/* |
/* |
* XXX Compatibility: programs using raw IP expect ip_len |
* XXX Compatibility: programs using raw IP expect ip_len |
* XXX to have the header length subtracted. |
* XXX to have the header length subtracted, and in host order. |
|
* XXX ip_off is also expected to be host order. |
*/ |
*/ |
ip->ip_len -= ip->ip_hl << 2; |
ip->ip_len = ntohs(ip->ip_len) - (ip->ip_hl << 2); |
|
NTOHS(ip->ip_off); |
|
|
CIRCLEQ_FOREACH(inp, &rawcbtable.inpt_queue, inp_queue) { |
CIRCLEQ_FOREACH(inp, &rawcbtable.inpt_queue, inp_queue) { |
if (inp->inp_ip.ip_p && inp->inp_ip.ip_p != proto) |
if (inp->inp_ip.ip_p && inp->inp_ip.ip_p != proto) |
Line 335 rip_output(m, va_alist) |
|
Line 337 rip_output(m, va_alist) |
|
M_PREPEND(m, sizeof(struct ip), M_WAIT); |
M_PREPEND(m, sizeof(struct ip), M_WAIT); |
ip = mtod(m, struct ip *); |
ip = mtod(m, struct ip *); |
ip->ip_tos = 0; |
ip->ip_tos = 0; |
ip->ip_off = 0; |
ip->ip_off = htons(0); |
ip->ip_p = inp->inp_ip.ip_p; |
ip->ip_p = inp->inp_ip.ip_p; |
ip->ip_len = m->m_pkthdr.len; |
ip->ip_len = htons(m->m_pkthdr.len); |
ip->ip_src = inp->inp_laddr; |
ip->ip_src = inp->inp_laddr; |
ip->ip_dst = inp->inp_faddr; |
ip->ip_dst = inp->inp_faddr; |
ip->ip_ttl = MAXTTL; |
ip->ip_ttl = MAXTTL; |
Line 348 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 *); |
|
/* 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); |
return (EINVAL); |
return (EINVAL); |
} |
} |
|
HTONS(ip->ip_len); |
|
HTONS(ip->ip_off); |
if (ip->ip_id == 0) |
if (ip->ip_id == 0) |
ip->ip_id = htons(ip_id++); |
ip->ip_id = htons(ip_id++); |
opts = NULL; |
opts = NULL; |
Line 365 rip_output(m, va_alist) |
|
Line 370 rip_output(m, va_alist) |
|
return ENOBUFS; |
return ENOBUFS; |
} |
} |
#endif /*IPSEC*/ |
#endif /*IPSEC*/ |
return (ip_output(m, opts, &inp->inp_route, flags, inp->inp_moptions, &inp->inp_errormtu)); |
return (ip_output(m, opts, &inp->inp_route, flags, inp->inp_moptions, |
|
&inp->inp_errormtu)); |
} |
} |
|
|
/* |
/* |