* get receiving interface index while no message is received @ 2008-08-08 4:27 Yang Hongyang 2008-08-08 5:59 ` [PATCH] IPv6:fix the return interface index when get it " Yang Hongyang 0 siblings, 1 reply; 5+ messages in thread From: Yang Hongyang @ 2008-08-08 4:27 UTC (permalink / raw) To: David Miller; +Cc: netdev when I use getsockopt(sk, IPPROTO_IPV6, IPV6_2292PKTOPTIONS,(char *)incmsg, &cnt) to get receiving interface index while no message is received, What interface index should be returned? ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] IPv6:fix the return interface index when get it while no message is received 2008-08-08 4:27 get receiving interface index while no message is received Yang Hongyang @ 2008-08-08 5:59 ` Yang Hongyang 2008-08-08 6:03 ` David Miller 0 siblings, 1 reply; 5+ messages in thread From: Yang Hongyang @ 2008-08-08 5:59 UTC (permalink / raw) To: David Miller, yoshfuji; +Cc: netdev Yang Hongyang wrote: > when I use getsockopt(sk, IPPROTO_IPV6, IPV6_2292PKTOPTIONS,(char *)incmsg, &cnt) > to get receiving interface index while no message is received, > > What interface index should be returned? When get receiving interface index while no message is received, the bounded device's index of the socket should be returned? Signed-off-by: Yang Hongyang<yanghy@cn.fujitsu.com> --- a/ipv6_sockglue.c +++ b/ipv6_sockglue.c @@ -911,7 +911,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, } else { if (np->rxopt.bits.rxinfo) { struct in6_pktinfo src_info; - src_info.ipi6_ifindex = np->mcast_oif; + src_info.ipi6_ifindex = np->mcast_oif ? np->mcast_oif : sk->sk_bound_dev_if; ipv6_addr_copy(&src_info.ipi6_addr, &np->daddr); put_cmsg(&msg, SOL_IPV6, IPV6_PKTINFO, sizeof(src_info), &src_info); } @@ -921,7 +921,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, } if (np->rxopt.bits.rxoinfo) { struct in6_pktinfo src_info; - src_info.ipi6_ifindex = np->mcast_oif; + src_info.ipi6_ifindex = np->mcast_oif ? np->mcast_oif : sk->sk_bound_dev_if; ipv6_addr_copy(&src_info.ipi6_addr, &np->daddr); put_cmsg(&msg, SOL_IPV6, IPV6_2292PKTINFO, sizeof(src_info), &src_info); } -- 1.5.3.8 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] IPv6:fix the return interface index when get it while no message is received 2008-08-08 5:59 ` [PATCH] IPv6:fix the return interface index when get it " Yang Hongyang @ 2008-08-08 6:03 ` David Miller 2008-08-08 14:58 ` Vlad Yasevich 0 siblings, 1 reply; 5+ messages in thread From: David Miller @ 2008-08-08 6:03 UTC (permalink / raw) To: yanghy; +Cc: yoshfuji, netdev From: Yang Hongyang <yanghy@cn.fujitsu.com> Date: Fri, 08 Aug 2008 13:59:54 +0800 > Yang Hongyang wrote: > > when I use getsockopt(sk, IPPROTO_IPV6, IPV6_2292PKTOPTIONS,(char *)incmsg, &cnt) > > to get receiving interface index while no message is received, > > > > What interface index should be returned? > > When get receiving interface index while no message is received, > the bounded device's index of the socket should be returned? > > Signed-off-by: Yang Hongyang<yanghy@cn.fujitsu.com> To me it seems to be an undefined operation. One cannot expect something valid from this socket option until a packet really is received on the socket. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] IPv6:fix the return interface index when get it while no message is received 2008-08-08 6:03 ` David Miller @ 2008-08-08 14:58 ` Vlad Yasevich 2008-08-18 5:41 ` David Miller 0 siblings, 1 reply; 5+ messages in thread From: Vlad Yasevich @ 2008-08-08 14:58 UTC (permalink / raw) To: David Miller; +Cc: yanghy, yoshfuji, netdev David Miller wrote: > From: Yang Hongyang <yanghy@cn.fujitsu.com> > Date: Fri, 08 Aug 2008 13:59:54 +0800 > >> Yang Hongyang wrote: >>> when I use getsockopt(sk, IPPROTO_IPV6, IPV6_2292PKTOPTIONS,(char *)incmsg, &cnt) >>> to get receiving interface index while no message is received, >>> >>> What interface index should be returned? >> When get receiving interface index while no message is received, >> the bounded device's index of the socket should be returned? >> >> Signed-off-by: Yang Hongyang<yanghy@cn.fujitsu.com> > > To me it seems to be an undefined operation. > > One cannot expect something valid from this socket option until a > packet really is received on the socket. Here is what 2292 has to say: > The corresponding receive option > > getsockopt(fd, IPPROTO_IPV6, IPV6_PKTOPTIONS, &buf, &len); > > returns a buffer with one or more ancillary data objects for all the > optional receive information that the application has previously > specified that it wants to receive. The fourth argument points to > the buffer that is filled in by the call. The fifth argument is a > pointer to a value-result integer: when the function is called the > integer specifies the size of the buffer pointed to by the fourth > argument, and on return this integer contains the actual number of > bytes that were returned. The application processes this buffer > exactly as if the buffer were returned by recvmsg() as control > information. So, there return value should be any sticky options set. In the case of PKTINFO, the interface should be either 0 or the one set by the sticky option. The address should be should be from the options or IN6ADDR_ANY. This is all for RFC2292 style. For RFC 3542 style, there what should be done: Issuing getsockopt() for the above options will return the sticky option value i.e., the value set with setsockopt(). If no sticky option value has been set getsockopt() will return the following values: - For the IPV6_PKTINFO option, it will return an in6_pktinfo structure with ipi6_addr being in6addr_any and ipi6_ifindex being zero. -vlad ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] IPv6:fix the return interface index when get it while no message is received 2008-08-08 14:58 ` Vlad Yasevich @ 2008-08-18 5:41 ` David Miller 0 siblings, 0 replies; 5+ messages in thread From: David Miller @ 2008-08-18 5:41 UTC (permalink / raw) To: vladislav.yasevich; +Cc: yanghy, yoshfuji, netdev From: Vlad Yasevich <vladislav.yasevich@hp.com> Date: Fri, 08 Aug 2008 10:58:04 -0400 > For RFC 3542 style, there what should be done: > > Issuing getsockopt() for the above options will return the sticky > option value i.e., the value set with setsockopt(). If no sticky > option value has been set getsockopt() will return the following > values: > > - For the IPV6_PKTINFO option, it will return an in6_pktinfo > structure with ipi6_addr being in6addr_any and ipi6_ifindex being > zero. Ok so it looks like Yang's patch is ok. Yank please resubmit your patch, thank you. ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-08-18 5:41 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-08-08 4:27 get receiving interface index while no message is received Yang Hongyang 2008-08-08 5:59 ` [PATCH] IPv6:fix the return interface index when get it " Yang Hongyang 2008-08-08 6:03 ` David Miller 2008-08-08 14:58 ` Vlad Yasevich 2008-08-18 5:41 ` David Miller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).