From owner-IPv6-jp@jp.freebsd.org  Fri Sep 29 16:10:29 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id QAA12623;
	Fri, 29 Sep 2000 16:10:29 +0900 (JST)
	(envelope-from owner-IPv6-jp@jp.FreeBSD.org)
Received: from cerberus.nemoto.ecei.tohoku.ac.jp (root@cerberus.nemoto.ecei.tohoku.ac.jp [130.34.199.67])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id QAA12618
	for <IPv6-jp@jp.freebsd.org>; Fri, 29 Sep 2000 16:10:24 +0900 (JST)
	(envelope-from yoshfuji@linux-ipv6.org)
Received: from localhost (yoshfuji@localhost [127.0.0.1])
	by cerberus.nemoto.ecei.tohoku.ac.jp (8.9.3+3.2W/8.9.3/Debian 8.9.3-21) with ESMTP id QAA04500;
	Fri, 29 Sep 2000 16:10:15 +0900
To: users@jp.ipv6.org
Cc: IPv6-jp@jp.freebsd.org
In-Reply-To: <NEBBIMDJLANIINPMIHPLIEGHCDAA.t-endo@cx.ipn.abk.nec.co.jp>
References: <y7v7l7werl4.wl@condor.isl.rdc.toshiba.co.jp>
	<NEBBIMDJLANIINPMIHPLIEGHCDAA.t-endo@cx.ipn.abk.nec.co.jp>
X-Mailer: Mew version 1.94 on XEmacs 21.1 (Capitol Reef)
X-URL: http://www.ecei.tohoku.ac.jp/%7Eyoshfuji/
X-Fingerprint: F7 31 65 99 5E B2 BB A7 15 15  13 23 18 06 A9 6F 57 00 6B 25
X-Pgp5-Key-Url: http://cerberus.nemoto.ecei.tohoku.ac.jp/%7Eyoshfuji/yoshfuji@ecei.tohoku.ac.jp.asc
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Message-Id: <20000929161015U.yoshfuji@linux-ipv6.org>
Date: Fri, 29 Sep 2000 16:10:15 +0900
From: Hideaki YOSHIFUJI (=?iso-2022-jp?B?GyRCNUhGIzFRTEAbKEI=?=) 
	<yoshfuji@linux-ipv6.org>
X-Dispatcher: imput version 990905(IM130)
Lines: 139
Reply-To: IPv6-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: IPv6-jp 895
Subject: [IPv6-jp 895] Re: [USERS 370] RE: sendmsg IPv6 Destination
 Options
Errors-To: owner-IPv6-jp@jp.freebsd.org
Sender: owner-IPv6-jp@jp.freebsd.org
X-Originator: yoshfuji@cerberus.nemoto.ecei.tohoku.ac.jp

In article <NEBBIMDJLANIINPMIHPLIEGHCDAA.t-endo@cx.ipn.abk.nec.co.jp> (at Fri, 29 Sep 2000 14:02:18 +0900), "Toshio Endou" <t-endo@cx.ipn.abk.nec.co.jp> says:

> 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
:

draft-ietf-mobileip-ipv6-12.txt $B$K$h$k$H(B 8n+6 $B$G$9$M!#(B


> 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)

$B;EMM$,0c$&$+$i!#(B

inet6_option_init(): cmsghdr{} $B$r=i4|2=(B(RFC2292)
inet6_opt_init():    ip6_hbh{} or ip6_dest{} $B$r=i4|2=(B(RFC2292bis)

$B$J$<$+$H$$$&$H!"(BRFC2292bis $B$G$O(B destination option $B$J$I$r(B 
setsockopt() $B$G$b@_Dj$G$-$k$h$&$K$J$j!"HFMQ@-$r9b$a$k$?$a$G$7$g$&!#(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$$$$$(!#(Bip6_dst{} $B$N%5%$%:$,$L$1$F$$$^$9!#(B

>     $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

sendmsg() $B$NJd=u%G!<%?$r;H$&$J$i!"(B($B$"$H$G$b$5$-$G$b$$$$$G$9$,!"(B)
$B<+J,$G@_Dj$7$J$1$l$P$J$j$^$;$s!#(B

        +--- extlen --------------+
+-------+-------------------------+
+cmsghdr| ip6_dest | options ...  |
+-------+-------------------------+
        ^~~~~~~~~~~
        |       ^
      extbuf   $B$3$N$X$s$r=i4|2=(B(RFC2292bis)


> 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)

libc $B$KF~$C$F$$$k$+!"(Blibinet6 $B$KF~$C$F$$$k$+$O4D6-$K$h$j$^$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))];
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                    ip6_dst{} $B$,B-$j$J$$(B

>       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);

opt_init() $B$N0z?t$O(B CMSG_DATA(struct(cmsghdr *)extbuf), 
destination option $BA4BN$ND9$5$G$9!#(B

$B@53N$KCN$j$?$1$l$P!"FsEY$J$a$7$F(B malloc() $B$G$7$g$&$+!#(B
(inet6_opt_{init,append}() $B$OI,MW$J%5%$%:$r7W;;$7$F$/$l$k(B)$B!#(B


>     $B!c<u(B $B?.!d(B
:

>       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 */
>           }
>       }

destination option(s) $B=hM}$O(B for(){} $B$NCf$G$9!#(B
ptr $B$K$$$/$D$+$N(B destination option $B$,4^$^$l$F$$$k$+$b$7$l$J$$$N$G!"(B
$B$=$l$r2r@O$9$k$N$,(B inet6_opt_XXX() $B!#(B


$B4V0c$C$F$$$?$iD{@5$7$F2<$5$$!#(B

-- 
Hideaki YOSHIFUJI @ USAGI Project  <yoshfuji@linux-ipv6.org>
Web Page: http://www.ecei.tohoku.ac.jp/%7Eyoshfuji/
PGP5i FP: F731 6599 5EB2 BBA7 1515  1323 1806 A96F 5700 6B25 
