version 1.217.4.3, 2015/09/22 12:06:11 |
version 1.217.4.4, 2016/03/19 11:30:33 |
Line 405 udp_input(struct mbuf *m, ...) |
|
Line 405 udp_input(struct mbuf *m, ...) |
|
memset(&src6, 0, sizeof(src6)); |
memset(&src6, 0, sizeof(src6)); |
src6.sin6_family = AF_INET6; |
src6.sin6_family = AF_INET6; |
src6.sin6_len = sizeof(struct sockaddr_in6); |
src6.sin6_len = sizeof(struct sockaddr_in6); |
src6.sin6_addr.s6_addr[10] = src6.sin6_addr.s6_addr[11] = 0xff; |
in6_in_2_v4mapin6(&ip->ip_src, &src6.sin6_addr); |
memcpy(&src6.sin6_addr.s6_addr[12], &ip->ip_src, |
|
sizeof(ip->ip_src)); |
|
src6.sin6_port = uh->uh_sport; |
src6.sin6_port = uh->uh_sport; |
memset(&dst6, 0, sizeof(dst6)); |
memset(&dst6, 0, sizeof(dst6)); |
dst6.sin6_family = AF_INET6; |
dst6.sin6_family = AF_INET6; |
dst6.sin6_len = sizeof(struct sockaddr_in6); |
dst6.sin6_len = sizeof(struct sockaddr_in6); |
dst6.sin6_addr.s6_addr[10] = dst6.sin6_addr.s6_addr[11] = 0xff; |
in6_in_2_v4mapin6(&ip->ip_dst, &dst6.sin6_addr); |
memcpy(&dst6.sin6_addr.s6_addr[12], &ip->ip_dst, |
|
sizeof(ip->ip_dst)); |
|
dst6.sin6_port = uh->uh_dport; |
dst6.sin6_port = uh->uh_dport; |
|
|
n += udp6_realinput(AF_INET, &src6, &dst6, m, iphlen); |
n += udp6_realinput(AF_INET, &src6, &dst6, m, iphlen); |
|
|
|
|
|
|
int |
int |
udp_output(struct mbuf *m, ...) |
udp_output(struct mbuf *m, struct inpcb *inp) |
{ |
{ |
struct inpcb *inp; |
|
struct udpiphdr *ui; |
struct udpiphdr *ui; |
struct route *ro; |
struct route *ro; |
int len = m->m_pkthdr.len; |
int len = m->m_pkthdr.len; |
int error = 0; |
int error = 0; |
va_list ap; |
|
|
|
MCLAIM(m, &udp_tx_mowner); |
MCLAIM(m, &udp_tx_mowner); |
va_start(ap, m); |
|
inp = va_arg(ap, struct inpcb *); |
|
va_end(ap); |
|
|
|
/* |
/* |
* Calculate data length and get a mbuf |
* Calculate data length and get a mbuf |