From owner-IPv6-jp@jp.freebsd.org  Fri Sep 29 14:01:19 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id OAA01158;
	Fri, 29 Sep 2000 14:01:19 +0900 (JST)
	(envelope-from owner-IPv6-jp@jp.FreeBSD.org)
Received: from TYO202.gate.nec.co.jp (TYO202.gate.nec.co.jp [202.247.6.41])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id OAA01153
	for <IPv6-jp@jp.freebsd.org>; Fri, 29 Sep 2000 14:01:18 +0900 (JST)
	(envelope-from t-endo@cx.ipn.abk.nec.co.jp)
Received: from mailsv.nec.co.jp ([10.7.68.90])
	by TYO202.gate.nec.co.jp (8.9.3/3.7W00052210) with ESMTP id OAA28936;
	Fri, 29 Sep 2000 14:01:09 +0900 (JST)
Received: from cxth10.ipn.abk.nec.co.jp ([10.42.89.40]) by mailsv.nec.co.jp (8.9.3/3.7W-MAILSV-NEC) with ESMTP
	id OAA22571; Fri, 29 Sep 2000 14:01:02 +0900 (JST)
Received: from cxtp119 (cxtp119.cx.ipn.abk.nec.co.jp [10.42.90.169]) by cxth10.ipn.abk.nec.co.jp (8.8.6 (PHNE_17190)/3.5Wpl1-98083111) with SMTP id BAA15662; Fri, 29 Sep 2000 01:01:52 -0400 (EDT)
From: "Toshio Endou" <t-endo@cx.ipn.abk.nec.co.jp>
To: <users@jp.ipv6.org>
Cc: <IPv6-jp@jp.freebsd.org>
Date: Fri, 29 Sep 2000 14:02:18 +0900
Message-ID: <NEBBIMDJLANIINPMIHPLIEGHCDAA.t-endo@cx.ipn.abk.nec.co.jp>
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0)
Importance: Normal
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2314.1300
In-Reply-To: <y7v7l7werl4.wl@condor.isl.rdc.toshiba.co.jp>
Reply-To: IPv6-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: IPv6-jp 894
Subject: [IPv6-jp 894] RE: sendmsg IPv6 Destination Options
Errors-To: owner-IPv6-jp@jp.freebsd.org
Sender: owner-IPv6-jp@jp.freebsd.org
X-Originator: t-endo@cx.ipn.abk.nec.co.jp

$B1sF#$G$9!#(B


$B:#!"(Bdraft-ietf-ipngwg-rfc2292bis-01.txt$B$r;2>H$7$F$$$^$9!#(B
[Page 67]$B$N!V(B24.1.  Building options$B!W$K$D$$$F(B5$BE@$[$IITL@$JE@$,(B
$B$"$j$^$7$?$N$G<ALd$r$5$;$FD:$-$^$9!#(B

Q1$B!%(BOption Data$B$r%;%C%H$9$k:]$K;HMQ$9$k!"(Binet6_opt_append$B4X?t$G!"(B
    currentlen = inet6_opt_append(extbuf, extlen, currentlen,
                                  OPT_X, 12, 8, &databuf);
    align parameter$B$N@_DjCM$N7h$aJ}$,$h$/$o$+$j$^$;$s!#(B
    Option data length$B$r1[$($J$1$l$P2?$G$bNI$$$H$$$&$o$1$G$O(B
    $B$J$$$H;W$&$N$G$9$,!#!#!#(B

    $BNc$($P!"(BHome Address Option$B$r@_Dj$7$?$$>l9g!"(B
    inet6_opt_append$B4X?t$N3F%Q%i%a!<%?CM$O$I$N$h$&$K$J$k$N(B
    $B$G$7$g$&$+!)(B
        #define IP6OPT_HOME_ADDRESS 0xc9/* 11 0 01001 */

        /* Home Address Option */
        struct ip6_opt_home_address {
            uint8_tip6oh_type;
            uint8_tip6oh_len;
            uint8_t ip6oh_addr[16];/* Home Address */
              /* followed by sub-options */
        };

Q2. struct cmsghdr$B!JJd=u%G!<%?%X%C%@!K$N@_Dj$,(Binet_option_init$B4X?t(B
    $B$G$O9T$o$l$F$$$^$9$,!"(Binet_opt_init$B4X?t$G$O9T$o$l$F$$$^$;$s!#(B
    $B$J$<$G$7$g$&$+!)(B(ip6opt.c$B$r;2>H$7$^$7$?!#(B)

    currentlen = inet6_opt_init(extbuf, extlen);
    $B$N(Bextbuf$B$N%5%$%:$O!"(B

      struct cmsghdr + IP6Option($BNc(B:struct ip6_opt_home_address)

    $B$G$"$j!"(Bstruct cmsghdr$B$N(Bparameter$B$O(Binet6_opt_init$B$r(Bcall$B$9$kA0$K(B
    $B%;%C%H$7$F$*$/$N$G$7$g$&$+!)(B

Q3. $BG0$N$?$a3NG'$5$;$FD:$-$?$$$N$G$9$,!"(Binet6_opt_XXX()$B4X?t$O(B
    <netinet/in.h>$B$r(Binclude$B$9$k$@$1$G;HMQ2DG=$G$7$g$&$+!)(B
    ($BNc$($P!"(Blibrary$B$K$J$C$F$$$F!"(Blink$B$7$J$$$H$$$1$J$$$H$+!)(B)

Q4. uintX_t$B7?$r;HMQ$7$F%3%s%Q%$%k$9$k$H!"(B
      'uint8_t' undeclared (first use this function)
      $B!J(B'uint16_t'$B!$(B'uint32_t'$B!$(B'uint64_t'$B$bF1MM!#!K(B
    $B$H%(%i!<$,=P$^$9!#$J$<$G$7$g$&$+!)(B
    <sys/types>$B$r(Binclude$B$9$k$@$1$G(BOK$B$H;W$C$?$N$G$9$,!#!#!#(B

Q5. IPv6 Destination Options$B$NAw?.!?<u?.A4BN$N<j=g$r3NG'$5$;$FD:$-$?$$(B
    $B$N$G$9$,!"Nc$($P!"(BHome Address Option$B$r(B1$B$DAw?.!?<u?.$7$?$$>l9g!"(B
    $B0J2<$N<j=g$G$h$m$7$$$N$G$7$g$&$+!)(B
    $B!cAw(B $B?.!d(B
      struct sockaddr_in6 recver;
      struct msghdr mhdr;
      char extbuf[CMSG_SPACE(sizeof(struct ip6_opt_home_address))];
      char userdata[] = "123";

      sockfd = socket(AF_INET6, SOCK_STREAM, 0); /* TCP$B$N>l9g(B */
      soxket(AF_INER6, SOCK_DGRAM, 0);  /* UDP$B$N>l9g(B */

      bind(... /* UDP$B$N>l9g(B */

      connect(... /* TCP$B$N>l9g(B */

      inet6_opt_init(extbuf, sizeof(extbuf));

      inet6_opt_append(extbuf, ...

      inet6_opt_set_val(...

      inet6_opt_finish(...

      mhdr.msg_name = (caddr_t)&recver;  /* UDP$B$N>l9g(B */
      mhdr.msg_namelen = sizeof(recver); /* UDP$B$N>l9g(B */
      iov.iov_buf = userdata;
      iov.iov_len = sizeof(userdata);
      mhdr.msg_iov = &iov;
      mhdr.msg_iovlen = 1;
      mhdr.msg_control = (caddr_t)extbuf;
      mhdr.msg_controllen = sizeof(extbuf);

      sendmsg(sockfd, &mkdr, 0);

    $B!c<u(B $B?.!d(B
      struct sockaddr_in6 sender;
      struct msghdr mhdr;
      char extbuf[CMSG_SPACE(sizeof(struct ip6_opt_home_address))];
      char userdata[256];
      struct cmsghdr  *cmsgptr;
      int  on;

      sockfd = socket(AF_INET6, SOCK_STREAM, 0); /* TCP$B$N>l9g(B */
      soxket(AF_INER6, SOCK_DGRAM, 0);  /* UDP$B$N>l9g(B */

      bind(... /* UDP$B$N>l9g(B */

      listen(... /* TCP$B$N>l9g(B */

      accept(... /* TCP$B$N>l9g(B */

      mhdr.msg_name = (caddr_t)&sender;  /* UDP$B$N>l9g(B */
      mhdr.msg_namelen = sizeof(sender); /* UDP$B$N>l9g(B */
      iov.iov_buf = userdata;
      iov.iov_len = sizeof(userdata);
      mhdr.msg_iov = &iov;
      mhdr.msg_iovlen = 1;
      mhdr.msg_control = (caddr_t)extbuf;
      mhdr.msg_controllen = sizeof(extbuf);

      on = 1;
      setsockopt(fd, IPPROTO_IPV6, IPV6_RECVDSTOPTS, &on, sizeof(on));

      recvmsg(sockfd, &mhdr, 0);

      inet6_opt_next(...     --
                              |  $B$3$N(B2$B$D$N4X?t!"(B
                              |  $B$^$?$O(B[Page 56]$B$N(B
                              |  22.3.  Ancillary Data Object Macros
      inet6_opt_get_val(...  --              $B!C(B
                                             $B!C(B
                                             $B"-(B
      for (cmsgptr = CMSG_FIRSTHDR(&mhdr); cmsgptr != NULL;
           cmsgptr = CMSG_NXTHDR(&mhdr, cmsgptr)) {
          if (cmsgptr->cmsg_level == IPPROTO_IPV6
               && cmsgptr->cmsg_type == IPV6_DSTOPTS) {
              u_char  *ptr;

              ptr = CMSG_DATA(cmsgptr);
              /* process data pointed to by ptr */
          }
      }

$BD9!9$H<ALdCW$7$^$7$F!"?=$7Lu$4$6$$$^$;$s$,!"$h$m$7$/$*4j$$CW$7$^$9!#(B


$B0J>e$G$9!#(B

-----
 Toshio Endou  < t-endo@cx.ipn.abk.nec.co.jp >

