version 1.93.2.8, 2001/04/21 17:46:48 |
version 1.136.2.1, 2001/10/01 12:47:43 |
|
|
#include "opt_pfil_hooks.h" |
#include "opt_pfil_hooks.h" |
#include "opt_ipsec.h" |
#include "opt_ipsec.h" |
#include "opt_mrouting.h" |
#include "opt_mrouting.h" |
|
#include "opt_inet_csum.h" |
|
|
#include <sys/param.h> |
#include <sys/param.h> |
#include <sys/systm.h> |
#include <sys/systm.h> |
|
|
|
|
struct pool ipqent_pool; |
struct pool ipqent_pool; |
|
|
|
#ifdef INET_CSUM_COUNTERS |
|
#include <sys/device.h> |
|
|
|
struct evcnt ip_hwcsum_bad = EVCNT_INITIALIZER(EVCNT_TYPE_MISC, |
|
NULL, "inet", "hwcsum bad"); |
|
struct evcnt ip_hwcsum_ok = EVCNT_INITIALIZER(EVCNT_TYPE_MISC, |
|
NULL, "inet", "hwcsum ok"); |
|
struct evcnt ip_swcsum = EVCNT_INITIALIZER(EVCNT_TYPE_MISC, |
|
NULL, "inet", "swcsum"); |
|
|
|
#define INET_CSUM_COUNTER_INCR(ev) (ev)->ev_count++ |
|
|
|
#else |
|
|
|
#define INET_CSUM_COUNTER_INCR(ev) /* nothing */ |
|
|
|
#endif /* INET_CSUM_COUNTERS */ |
|
|
/* |
/* |
* We need to save the IP options in case a protocol wants to respond |
* We need to save the IP options in case a protocol wants to respond |
* to an incoming packet over the same route if the packet got here |
* to an incoming packet over the same route if the packet got here |
|
|
printf("ip_init: WARNING: unable to register pfil hook, " |
printf("ip_init: WARNING: unable to register pfil hook, " |
"error %d\n", i); |
"error %d\n", i); |
#endif /* PFIL_HOOKS */ |
#endif /* PFIL_HOOKS */ |
|
|
|
#ifdef INET_CSUM_COUNTERS |
|
evcnt_attach_static(&ip_hwcsum_bad); |
|
evcnt_attach_static(&ip_hwcsum_ok); |
|
evcnt_attach_static(&ip_swcsum); |
|
#endif /* INET_CSUM_COUNTERS */ |
} |
} |
|
|
struct sockaddr_in ipaddr = { sizeof(ipaddr), AF_INET }; |
struct sockaddr_in ipaddr = { sizeof(ipaddr), AF_INET }; |
Line 433 ip_input(struct mbuf *m) |
|
Line 458 ip_input(struct mbuf *m) |
|
} |
} |
} |
} |
|
|
if (in_cksum(m, hlen) != 0) { |
switch (m->m_pkthdr.csum_flags & |
ipstat.ips_badsum++; |
((m->m_pkthdr.rcvif->if_csum_flags_rx & M_CSUM_IPv4) | |
goto bad; |
M_CSUM_IPv4_BAD)) { |
|
case M_CSUM_IPv4|M_CSUM_IPv4_BAD: |
|
INET_CSUM_COUNTER_INCR(&ip_hwcsum_bad); |
|
goto badcsum; |
|
|
|
case M_CSUM_IPv4: |
|
/* Checksum was okay. */ |
|
INET_CSUM_COUNTER_INCR(&ip_hwcsum_ok); |
|
break; |
|
|
|
default: |
|
/* Must compute it ourselves. */ |
|
INET_CSUM_COUNTER_INCR(&ip_swcsum); |
|
if (in_cksum(m, hlen) != 0) |
|
goto bad; |
|
break; |
} |
} |
|
|
/* Retrieve the packet length. */ |
/* Retrieve the packet length. */ |
Line 491 ip_input(struct mbuf *m) |
|
Line 531 ip_input(struct mbuf *m) |
|
* not the decapsulated packet. |
* not the decapsulated packet. |
*/ |
*/ |
#ifdef IPSEC |
#ifdef IPSEC |
if (!ipsec_gethist(m, NULL)) |
if (!ipsec_getnhist(m)) |
#else |
#else |
if (1) |
if (1) |
#endif |
#endif |
|
|
} |
} |
bad: |
bad: |
m_freem(m); |
m_freem(m); |
|
return; |
|
|
|
badcsum: |
|
ipstat.ips_badsum++; |
|
m_freem(m); |
} |
} |
|
|
/* |
/* |
Line 1434 ip_forward(m, srcrt) |
|
Line 1479 ip_forward(m, srcrt) |
|
struct ifnet dummyifp; |
struct ifnet dummyifp; |
#endif |
#endif |
|
|
|
/* |
|
* Clear any in-bound checksum flags for this packet. |
|
*/ |
|
m->m_pkthdr.csum_flags = 0; |
|
|
dest = 0; |
dest = 0; |
#ifdef DIAGNOSTIC |
#ifdef DIAGNOSTIC |
if (ipprintfs) |
if (ipprintfs) |
Line 1514 ip_forward(m, srcrt) |
|
Line 1564 ip_forward(m, srcrt) |
|
} |
} |
|
|
#ifdef IPSEC |
#ifdef IPSEC |
/* Don't lookup socket in forwading case */ |
/* Don't lookup socket in forwarding case */ |
(void)ipsec_setsocket(m, NULL); |
(void)ipsec_setsocket(m, NULL); |
#endif |
#endif |
error = ip_output(m, (struct mbuf *)0, &ipforward_rt, |
error = ip_output(m, (struct mbuf *)0, &ipforward_rt, |