version 1.63, 2000/03/01 12:49:42 |
version 1.66.4.1, 2000/07/28 16:58:10 |
|
|
*/ |
*/ |
|
|
#include "opt_ipsec.h" |
#include "opt_ipsec.h" |
|
#include "opt_ipkdb.h" |
#include "ipkdb.h" |
|
|
|
#include <sys/param.h> |
#include <sys/param.h> |
#include <sys/malloc.h> |
#include <sys/malloc.h> |
|
|
#include <netkey/key_debug.h> |
#include <netkey/key_debug.h> |
#endif /*IPSEC*/ |
#endif /*IPSEC*/ |
|
|
|
#ifdef IPKDB |
|
#include <ipkdb/ipkdb.h> |
|
#endif |
|
|
/* |
/* |
* UDP protocol implementation. |
* UDP protocol implementation. |
* Per RFC 768, August, 1980. |
* Per RFC 768, August, 1980. |
Line 229 udp_input(m, va_alist) |
|
Line 232 udp_input(m, va_alist) |
|
*/ |
*/ |
len = ntohs((u_int16_t)uh->uh_ulen); |
len = ntohs((u_int16_t)uh->uh_ulen); |
if (ip->ip_len != iphlen + len) { |
if (ip->ip_len != iphlen + len) { |
if (ip->ip_len < iphlen + len) { |
if (ip->ip_len < iphlen + len || len < sizeof(struct udphdr)) { |
udpstat.udps_badlen++; |
udpstat.udps_badlen++; |
goto bad; |
goto bad; |
} |
} |
Line 289 udp_input(m, va_alist) |
|
Line 292 udp_input(m, va_alist) |
|
goto bad; |
goto bad; |
} |
} |
udpstat.udps_noport++; |
udpstat.udps_noport++; |
#if NIPKDB > 0 |
#ifdef IPKDB |
if (checkipkdb(&ip->ip_src, uh->uh_sport, uh->uh_dport, |
if (checkipkdb(&ip->ip_src, uh->uh_sport, uh->uh_dport, |
m, iphlen + sizeof(struct udphdr), |
m, iphlen + sizeof(struct udphdr), |
m->m_pkthdr.len - iphlen - sizeof(struct udphdr))) { |
m->m_pkthdr.len - iphlen - sizeof(struct udphdr))) { |
Line 638 udp4_realinput(src, dst, m, off) |
|
Line 641 udp4_realinput(src, dst, m, off) |
|
goto bad; |
goto bad; |
} |
} |
udpstat.udps_noport++; |
udpstat.udps_noport++; |
#if NIPKDB > 0 |
#ifdef IPKDB |
if (checkipkdb(src4, *sport, *dport, m, off, |
if (checkipkdb(src4, *sport, *dport, m, off, |
m->m_pkthdr.len - off)) { |
m->m_pkthdr.len - off)) { |
/* |
/* |
|
|
static int |
static int |
in6_mcmatch(in6p, ia6, ifp) |
in6_mcmatch(in6p, ia6, ifp) |
struct in6pcb *in6p; |
struct in6pcb *in6p; |
register struct in6_addr *ia6; |
struct in6_addr *ia6; |
struct ifnet *ifp; |
struct ifnet *ifp; |
{ |
{ |
struct ip6_moptions *im6o = in6p->in6p_moptions; |
struct ip6_moptions *im6o = in6p->in6p_moptions; |
Line 870 udp_input(m, va_alist) |
|
Line 873 udp_input(m, va_alist) |
|
#endif |
#endif |
{ |
{ |
int proto; |
int proto; |
register struct ip *ip; |
struct ip *ip; |
register struct udphdr *uh; |
struct udphdr *uh; |
register struct inpcb *inp; |
struct inpcb *inp; |
struct mbuf *opts = 0; |
struct mbuf *opts = 0; |
int len; |
int len; |
struct ip save_ip; |
struct ip save_ip; |
Line 922 udp_input(m, va_alist) |
|
Line 925 udp_input(m, va_alist) |
|
*/ |
*/ |
len = ntohs((u_int16_t)uh->uh_ulen); |
len = ntohs((u_int16_t)uh->uh_ulen); |
if (ip->ip_len != iphlen + len) { |
if (ip->ip_len != iphlen + len) { |
if (ip->ip_len < iphlen + len) { |
if (ip->ip_len < iphlen + len || len < sizeof(struct udphdr)) { |
udpstat.udps_badlen++; |
udpstat.udps_badlen++; |
goto bad; |
goto bad; |
} |
} |
Line 1090 udp_input(m, va_alist) |
|
Line 1093 udp_input(m, va_alist) |
|
} |
} |
udpstat.udps_noport++; |
udpstat.udps_noport++; |
*ip = save_ip; |
*ip = save_ip; |
#if NIPKDB > 0 |
#ifdef IPKDB |
if (checkipkdb(&ip->ip_src, |
if (checkipkdb(&ip->ip_src, |
uh->uh_sport, |
uh->uh_sport, |
uh->uh_dport, |
uh->uh_dport, |
|
|
*/ |
*/ |
static void |
static void |
udp_notify(inp, errno) |
udp_notify(inp, errno) |
register struct inpcb *inp; |
struct inpcb *inp; |
int errno; |
int errno; |
{ |
{ |
|
|
Line 1156 udp_ctlinput(cmd, sa, v) |
|
Line 1159 udp_ctlinput(cmd, sa, v) |
|
struct sockaddr *sa; |
struct sockaddr *sa; |
void *v; |
void *v; |
{ |
{ |
register struct ip *ip = v; |
struct ip *ip = v; |
register struct udphdr *uh; |
struct udphdr *uh; |
extern int inetctlerrmap[]; |
|
void (*notify) __P((struct inpcb *, int)) = udp_notify; |
void (*notify) __P((struct inpcb *, int)) = udp_notify; |
int errno; |
int errno; |
|
|
Line 1195 udp_output(m, va_alist) |
|
Line 1197 udp_output(m, va_alist) |
|
va_dcl |
va_dcl |
#endif |
#endif |
{ |
{ |
register struct inpcb *inp; |
struct inpcb *inp; |
register struct udpiphdr *ui; |
struct udpiphdr *ui; |
register int len = m->m_pkthdr.len; |
int len = m->m_pkthdr.len; |
int error = 0; |
int error = 0; |
va_list ap; |
va_list ap; |
|
|
Line 1276 udp_usrreq(so, req, m, nam, control, p) |
|
Line 1278 udp_usrreq(so, req, m, nam, control, p) |
|
struct mbuf *m, *nam, *control; |
struct mbuf *m, *nam, *control; |
struct proc *p; |
struct proc *p; |
{ |
{ |
register struct inpcb *inp; |
struct inpcb *inp; |
int s; |
int s; |
register int error = 0; |
int error = 0; |
|
|
if (req == PRU_CONTROL) |
if (req == PRU_CONTROL) |
return (in_control(so, (long)m, (caddr_t)nam, |
return (in_control(so, (long)m, (caddr_t)nam, |