Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.sbin/mld6query $KAME$ cleanup. address PR 11616 (CMSG_S...
details: https://anonhg.NetBSD.org/src/rev/3a3b9e739867
branches: trunk
changeset: 500040:3a3b9e739867
user: itojun <itojun%NetBSD.org@localhost>
date: Mon Dec 04 07:04:37 2000 +0000
description:
$KAME$ cleanup. address PR 11616 (CMSG_SPACE should be CMSG_LEN).
sync with kame.
diffstat:
usr.sbin/mld6query/mld6.c | 48 ++++++++++++++++++++++++++++++++++++-----
usr.sbin/mld6query/mld6query.8 | 6 ++--
2 files changed, 45 insertions(+), 9 deletions(-)
diffs (124 lines):
diff -r f082d33f0351 -r 3a3b9e739867 usr.sbin/mld6query/mld6.c
--- a/usr.sbin/mld6query/mld6.c Mon Dec 04 07:03:17 2000 +0000
+++ b/usr.sbin/mld6query/mld6.c Mon Dec 04 07:04:37 2000 +0000
@@ -1,4 +1,5 @@
-/* $NetBSD: mld6.c,v 1.2 1999/09/03 04:34:34 itojun Exp $ */
+/* $NetBSD: mld6.c,v 1.3 2000/12/04 07:04:37 itojun Exp $ */
+/* $KAME: mld6.c,v 1.9 2000/12/04 06:29:37 itojun Exp $ */
/*
* Copyright (C) 1998 WIDE Project.
@@ -77,7 +78,6 @@
struct itimerval itimer;
u_int type;
int ch;
- extern int optind;
type = MLD6_LISTENER_QUERY;
while ((ch = getopt(argc, argv, "d")) != EOF) {
@@ -157,8 +157,13 @@
{
static struct iovec iov[2];
static u_char *cmsgbuf;
- int cmsglen;
+ int cmsglen, hbhlen = 0;
+#ifdef USE_RFC2292BIS
+ void *hbhbuf = NULL, *optp = NULL;
+ int currentlen;
+#else
u_int8_t raopt[IP6OPT_RTALERT_LEN];
+#endif
struct in6_pktinfo *pi;
struct cmsghdr *cmsgp;
u_short rtalert_code = htons(IP6OPT_RTALERT_MLD);
@@ -183,22 +188,51 @@
mldh.mld6_maxdelay = htons(QUERY_RESPONSE_INTERVAL);
mldh.mld6_addr = *addr;
+#ifdef USE_RFC2292BIS
+ if ((hbhlen = inet6_opt_init(NULL, 0)) == -1)
+ errx(1, "inet6_opt_init(0) failed");
+ if ((hbhlen = inet6_opt_append(NULL, 0, hbhlen, IP6OPT_ROUTER_ALERT, 2,
+ 2, NULL)) == -1)
+ errx(1, "inet6_opt_append(0) failed");
+ if ((hbhlen = inet6_opt_finish(NULL, 0, hbhlen)) == -1)
+ errx(1, "inet6_opt_finish(0) failed");
+ cmsglen = CMSG_SPACE(sizeof(struct in6_pktinfo)) + CMSG_SPACE(hbhlen);
+#else
+ hbhlen = sizeof(raopt);
cmsglen = CMSG_SPACE(sizeof(struct in6_pktinfo)) +
- inet6_option_space(sizeof(raopt));
+ inet6_option_space(hbhlen);
+#endif
+
if ((cmsgbuf = malloc(cmsglen)) == NULL)
errx(1, "can't allocate enough memory for cmsg");
cmsgp = (struct cmsghdr *)cmsgbuf;
m.msg_control = (caddr_t)cmsgbuf;
m.msg_controllen = cmsglen;
/* specify the outgoing interface */
- cmsgp->cmsg_len = CMSG_SPACE(sizeof(struct in6_pktinfo));
+ cmsgp->cmsg_len = CMSG_LEN(sizeof(struct in6_pktinfo));
cmsgp->cmsg_level = IPPROTO_IPV6;
cmsgp->cmsg_type = IPV6_PKTINFO;
pi = (struct in6_pktinfo *)CMSG_DATA(cmsgp);
- pi->ipi6_ifindex = ifindex;
+ pi->ipi6_ifindex = index;
memset(&pi->ipi6_addr, 0, sizeof(pi->ipi6_addr));
/* specifiy to insert router alert option in a hop-by-hop opt hdr. */
cmsgp = CMSG_NXTHDR(&m, cmsgp);
+#ifdef USE_RFC2292BIS
+ cmsgp->cmsg_len = CMSG_LEN(hbhlen);
+ cmsgp->cmsg_level = IPPROTO_IPV6;
+ cmsgp->cmsg_type = IPV6_HOPOPTS;
+ hbhbuf = CMSG_DATA(cmsgp);
+ if ((currentlen = inet6_opt_init(hbhbuf, hbhlen)) == -1)
+ errx(1, "inet6_opt_init(len = %d) failed", hbhlen);
+ if ((currentlen = inet6_opt_append(hbhbuf, hbhlen, currentlen,
+ IP6OPT_ROUTER_ALERT, 2,
+ 2, &optp)) == -1)
+ errx(1, "inet6_opt_append(currentlen = %d, hbhlen = %d) failed",
+ currentlen, hbhlen);
+ (void)inet6_opt_set_val(optp, 0, &rtalert_code, sizeof(rtalert_code));
+ if ((currentlen = inet6_opt_finish(hbhbuf, hbhlen, currentlen)) == -1)
+ errx(1, "inet6_opt_finish(buf) failed");
+#else /* old advanced API */
if (inet6_option_init((void *)cmsgp, &cmsgp, IPV6_HOPOPTS))
errx(1, "inet6_option_init failed\n");
raopt[0] = IP6OPT_RTALERT;
@@ -206,6 +240,7 @@
memcpy(&raopt[2], (caddr_t)&rtalert_code, sizeof(u_short));
if (inet6_option_append(cmsgp, raopt, 4, 0))
errx(1, "inet6_option_append failed\n");
+#endif
}
void
@@ -250,6 +285,7 @@
fflush(stdout);
}
+/* ARGSUSED */
void
quit(int signum) {
mreq.ipv6mr_multiaddr = any;
diff -r f082d33f0351 -r 3a3b9e739867 usr.sbin/mld6query/mld6query.8
--- a/usr.sbin/mld6query/mld6query.8 Mon Dec 04 07:03:17 2000 +0000
+++ b/usr.sbin/mld6query/mld6query.8 Mon Dec 04 07:04:37 2000 +0000
@@ -1,3 +1,6 @@
+.\" $NetBSD: mld6query.8,v 1.5 2000/12/04 07:04:37 itojun Exp $
+.\" $KAME: mld6query.8,v 1.5 2000/12/04 06:28:23 itojun Exp $
+.\"
.\" Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
.\" All rights reserved.
.\"
@@ -25,9 +28,6 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $NetBSD: mld6query.8,v 1.4 2000/11/07 06:43:37 lukem Exp $
-.\" KAME Id: mld6query.8,v 1.3 1999/08/20 10:00:06 itojun Exp
-.\"
.Dd May 17, 1998
.Dt MLD6QUERY 8
.Os
Home |
Main Index |
Thread Index |
Old Index