| version 1.236.4.2, 2008/06/03 20:47:41 |
version 1.237, 2006/12/06 00:38:16 |
|
|
| /* XXX error stat??? */ |
/* XXX error stat??? */ |
| error = EINVAL; |
error = EINVAL; |
| DPRINTF(("ip_input: no SP, packet discarded\n"));/*XXX*/ |
DPRINTF(("ip_input: no SP, packet discarded\n"));/*XXX*/ |
| |
goto bad; |
| } |
} |
| splx(s); |
splx(s); |
| if (error) |
if (error) |
| Line 1727 ip_srcroute(void) |
|
| Line 1728 ip_srcroute(void) |
|
| struct mbuf *m; |
struct mbuf *m; |
| |
|
| if (ip_nhops == 0) |
if (ip_nhops == 0) |
| return ((struct mbuf *)0); |
return NULL; |
| m = m_get(M_DONTWAIT, MT_SOOPTS); |
m = m_get(M_DONTWAIT, MT_SOOPTS); |
| if (m == 0) |
if (m == 0) |
| return ((struct mbuf *)0); |
return NULL; |
| |
|
| MCLAIM(m, &inetdomain.dom_mowner); |
MCLAIM(m, &inetdomain.dom_mowner); |
| #define OPTSIZ (sizeof(ip_srcrt.nop) + sizeof(ip_srcrt.srcopt)) |
#define OPTSIZ (sizeof(ip_srcrt.nop) + sizeof(ip_srcrt.srcopt)) |
| Line 1976 ip_forward(struct mbuf *m, int srcrt) |
|
| Line 1977 ip_forward(struct mbuf *m, int srcrt) |
|
| case EMSGSIZE: |
case EMSGSIZE: |
| type = ICMP_UNREACH; |
type = ICMP_UNREACH; |
| code = ICMP_UNREACH_NEEDFRAG; |
code = ICMP_UNREACH_NEEDFRAG; |
| |
#if !defined(IPSEC) && !defined(FAST_IPSEC) |
| |
if (ipforward_rt.ro_rt) |
| |
destmtu = ipforward_rt.ro_rt->rt_ifp->if_mtu; |
| |
#else |
| |
/* |
| |
* If the packet is routed over IPsec tunnel, tell the |
| |
* originator the tunnel MTU. |
| |
* tunnel MTU = if MTU - sizeof(IP) - ESP/AH hdrsiz |
| |
* XXX quickhack!!! |
| |
*/ |
| if (ipforward_rt.ro_rt) { |
if (ipforward_rt.ro_rt) { |
| |
|
| #if defined(IPSEC) || defined(FAST_IPSEC) |
|
| /* |
|
| * If the packet is routed over IPsec tunnel, tell the |
|
| * originator the tunnel MTU. |
|
| * tunnel MTU = if MTU - sizeof(IP) - ESP/AH hdrsiz |
|
| * XXX quickhack!!! |
|
| */ |
|
| |
|
| struct secpolicy *sp; |
struct secpolicy *sp; |
| int ipsecerror; |
int ipsecerror; |
| size_t ipsechdr; |
size_t ipsechdr; |
| Line 1995 ip_forward(struct mbuf *m, int srcrt) |
|
| Line 1996 ip_forward(struct mbuf *m, int srcrt) |
|
| sp = ipsec4_getpolicybyaddr(mcopy, |
sp = ipsec4_getpolicybyaddr(mcopy, |
| IPSEC_DIR_OUTBOUND, IP_FORWARDING, |
IPSEC_DIR_OUTBOUND, IP_FORWARDING, |
| &ipsecerror); |
&ipsecerror); |
| #endif |
|
| |
|
| destmtu = ipforward_rt.ro_rt->rt_ifp->if_mtu; |
if (sp == NULL) |
| #if defined(IPSEC) || defined(FAST_IPSEC) |
destmtu = ipforward_rt.ro_rt->rt_ifp->if_mtu; |
| if (sp != NULL) { |
else { |
| /* count IPsec header size */ |
/* count IPsec header size */ |
| ipsechdr = ipsec4_hdrsiz(mcopy, |
ipsechdr = ipsec4_hdrsiz(mcopy, |
| IPSEC_DIR_OUTBOUND, NULL); |
IPSEC_DIR_OUTBOUND, NULL); |
| Line 2028 ip_forward(struct mbuf *m, int srcrt) |
|
| Line 2028 ip_forward(struct mbuf *m, int srcrt) |
|
| KEY_FREESP(&sp); |
KEY_FREESP(&sp); |
| #endif |
#endif |
| } |
} |
| #endif /*defined(IPSEC) || defined(FAST_IPSEC)*/ |
|
| } |
} |
| |
#endif /*IPSEC*/ |
| ipstat.ips_cantfrag++; |
ipstat.ips_cantfrag++; |
| break; |
break; |
| |
|