Module Name: src Committed By: rtr Date: Mon Feb 15 19:00:42 UTC 2016
Modified Files: src/sys/netinet: sctp_indata.c sctputil.c Log Message: Fix building of IPv4-Mapped IPv6 addresses. As discussed on tech-net@ use in6_sin_2_v4mapsin6() to build mapped addresses. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/netinet/sctp_indata.c cvs rdiff -u -r1.1 -r1.2 src/sys/netinet/sctputil.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/netinet/sctp_indata.c diff -u src/sys/netinet/sctp_indata.c:1.2 src/sys/netinet/sctp_indata.c:1.3 --- src/sys/netinet/sctp_indata.c:1.2 Sun Dec 13 18:53:57 2015 +++ src/sys/netinet/sctp_indata.c Mon Feb 15 19:00:42 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: sctp_indata.c,v 1.2 2015/12/13 18:53:57 christos Exp $ */ +/* $NetBSD: sctp_indata.c,v 1.3 2016/02/15 19:00:42 rtr Exp $ */ /* $KAME: sctp_indata.c,v 1.36 2005/03/06 16:04:17 itojun Exp $ */ /* @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sctp_indata.c,v 1.2 2015/12/13 18:53:57 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sctp_indata.c,v 1.3 2016/02/15 19:00:42 rtr Exp $"); #ifdef _KERNEL_OPT #include "opt_ipsec.h" @@ -424,13 +424,7 @@ sctp_deliver_data(struct sctp_tcb *stcb, const struct sockaddr_in *sin; sin = (const struct sockaddr_in *)to; - memset(&sin6, 0, sizeof(sin6)); - sin6.sin6_family = AF_INET6; - sin6.sin6_len = sizeof(struct sockaddr_in6); - sin6.sin6_addr.s6_addr16[2] = 0xffff; - bcopy(&sin->sin_addr, &sin6.sin6_addr.s6_addr16[3], - sizeof(sin6.sin6_addr.s6_addr16[3])); - sin6.sin6_port = sin->sin_port; + in6_sin_2_v4mapsin6(sin, &sin6); to = (struct sockaddr *)&sin6; } /* check and strip embedded scope junk */ @@ -653,14 +647,7 @@ sctp_service_reassembly(struct sctp_tcb const struct sockaddr_in *sin; sin = satocsin(to); - memset(&sin6, 0, sizeof(sin6)); - sin6.sin6_family = AF_INET6; - sin6.sin6_len = sizeof(struct sockaddr_in6); - sin6.sin6_addr.s6_addr16[2] = 0xffff; - bcopy(&sin->sin_addr, - &sin6.sin6_addr.s6_addr16[3], - sizeof(sin6.sin6_addr.s6_addr16[3])); - sin6.sin6_port = sin->sin_port; + in6_sin_2_v4mapsin6(sin, &sin6); to = (struct sockaddr *)&sin6; } /* check and strip embedded scope junk */ @@ -1962,14 +1949,7 @@ sctp_process_a_data_chunk(struct sctp_tc const struct sockaddr_in *sin; sin = satocsin(to); - memset(&sin6, 0, sizeof(sin6)); - sin6.sin6_family = AF_INET6; - sin6.sin6_len = sizeof(struct sockaddr_in6); - sin6.sin6_addr.s6_addr16[2] = 0xffff; - bcopy(&sin->sin_addr, - &sin6.sin6_addr.s6_addr16[3], - sizeof(sin6.sin6_addr.s6_addr16[3])); - sin6.sin6_port = sin->sin_port; + in6_sin_2_v4mapsin6(sin, &sin6); to = (struct sockaddr *)&sin6; } Index: src/sys/netinet/sctputil.c diff -u src/sys/netinet/sctputil.c:1.1 src/sys/netinet/sctputil.c:1.2 --- src/sys/netinet/sctputil.c:1.1 Tue Oct 13 21:28:35 2015 +++ src/sys/netinet/sctputil.c Mon Feb 15 19:00:42 2016 @@ -1,5 +1,5 @@ /* $KAME: sctputil.c,v 1.39 2005/06/16 20:54:06 jinmei Exp $ */ -/* $NetBSD: sctputil.c,v 1.1 2015/10/13 21:28:35 rjs Exp $ */ +/* $NetBSD: sctputil.c,v 1.2 2016/02/15 19:00:42 rtr Exp $ */ /* * Copyright (c) 2001, 2002, 2003, 2004 Cisco Systems, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sctputil.c,v 1.1 2015/10/13 21:28:35 rjs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sctputil.c,v 1.2 2016/02/15 19:00:42 rtr Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -2087,13 +2087,7 @@ sctp_notify_assoc_change(u_int32_t event const struct sockaddr_in *sin; sin = (const struct sockaddr_in *)to; - memset(&sin6, 0, sizeof(sin6)); - sin6.sin6_family = AF_INET6; - sin6.sin6_len = sizeof(struct sockaddr_in6); - sin6.sin6_addr.s6_addr16[2] = 0xffff; - memcpy(&sin6.sin6_addr.s6_addr16[3], &sin->sin_addr, - sizeof(sin6.sin6_addr.s6_addr16[3])); - sin6.sin6_port = sin->sin_port; + in6_sin_2_v4mapsin6(sin, &sin6); to = (struct sockaddr *)&sin6; } /* check and strip embedded scope junk */ @@ -2179,13 +2173,7 @@ sctp_notify_peer_addr_change(struct sctp const struct sockaddr_in *sin; sin = (const struct sockaddr_in *)to; - memset(&sin6, 0, sizeof(sin6)); - sin6.sin6_family = AF_INET6; - sin6.sin6_len = sizeof(struct sockaddr_in6); - sin6.sin6_addr.s6_addr16[2] = 0xffff; - bcopy(&sin->sin_addr, &sin6.sin6_addr.s6_addr16[3], - sizeof(sin6.sin6_addr.s6_addr16[3])); - sin6.sin6_port = sin->sin_port; + in6_sin_2_v4mapsin6(sin, &sin6); to = (struct sockaddr *)&sin6; } /* check and strip embedded scope junk */ @@ -2279,13 +2267,7 @@ sctp_notify_send_failed(struct sctp_tcb const struct sockaddr_in *sin; sin = satocsin(to); - memset(&sin6, 0, sizeof(sin6)); - sin6.sin6_family = AF_INET6; - sin6.sin6_len = sizeof(struct sockaddr_in6); - sin6.sin6_addr.s6_addr16[2] = 0xffff; - bcopy(&sin->sin_addr, &sin6.sin6_addr.s6_addr16[3], - sizeof(sin6.sin6_addr.s6_addr16[3])); - sin6.sin6_port = sin->sin_port; + in6_sin_2_v4mapsin6(sin, &sin6); to = (struct sockaddr *)&sin6; } /* check and strip embedded scope junk */ @@ -2357,13 +2339,7 @@ sctp_notify_adaption_layer(struct sctp_t const struct sockaddr_in *sin; sin = satocsin(to); - memset(&sin6, 0, sizeof(sin6)); - sin6.sin6_family = AF_INET6; - sin6.sin6_len = sizeof(struct sockaddr_in6); - sin6.sin6_addr.s6_addr16[2] = 0xffff; - bcopy(&sin->sin_addr, &sin6.sin6_addr.s6_addr16[3], - sizeof(sin6.sin6_addr.s6_addr16[3])); - sin6.sin6_port = sin->sin_port; + in6_sin_2_v4mapsin6(sin, &sin6); to = (struct sockaddr *)&sin6; } /* check and strip embedded scope junk */ @@ -2433,13 +2409,7 @@ sctp_notify_partial_delivery_indication( const struct sockaddr_in *sin; sin = satocsin(to); - memset(&sin6, 0, sizeof(sin6)); - sin6.sin6_family = AF_INET6; - sin6.sin6_len = sizeof(struct sockaddr_in6); - sin6.sin6_addr.s6_addr16[2] = 0xffff; - bcopy(&sin->sin_addr, &sin6.sin6_addr.s6_addr16[3], - sizeof(sin6.sin6_addr.s6_addr16[3])); - sin6.sin6_port = sin->sin_port; + in6_sin_2_v4mapsin6(sin, &sin6); to = (struct sockaddr *)&sin6; } /* check and strip embedded scope junk */ @@ -2518,13 +2488,7 @@ sctp_notify_shutdown_event(struct sctp_t const struct sockaddr_in *sin; sin = satocsin(to); - memset(&sin6, 0, sizeof(sin6)); - sin6.sin6_family = AF_INET6; - sin6.sin6_len = sizeof(struct sockaddr_in6); - sin6.sin6_addr.s6_addr16[2] = 0xffff; - bcopy(&sin->sin_addr, &sin6.sin6_addr.s6_addr16[3], - sizeof(sin6.sin6_addr.s6_addr16[3])); - sin6.sin6_port = sin->sin_port; + in6_sin_2_v4mapsin6(sin, &sin6); to = (struct sockaddr *)&sin6; } /* check and strip embedded scope junk */ @@ -2620,13 +2584,7 @@ sctp_notify_stream_reset(struct sctp_tcb const struct sockaddr_in *sin; sin = satocsin(to); - memset(&sin6, 0, sizeof(sin6)); - sin6.sin6_family = AF_INET6; - sin6.sin6_len = sizeof(struct sockaddr_in6); - sin6.sin6_addr.s6_addr16[2] = 0xffff; - bcopy(&sin->sin_addr, &sin6.sin6_addr.s6_addr16[3], - sizeof(sin6.sin6_addr.s6_addr16[3])); - sin6.sin6_port = sin->sin_port; + in6_sin_2_v4mapsin6(sin, &sin6); to = (struct sockaddr *)&sin6; } /* check and strip embedded scope junk */