All of lore.kernel.org
 help / color / mirror / Atom feed
From: sumanth <sumantk2@linux.vnet.ibm.com>
To: netdev@vger.kernel.org
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>,
	Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
Subject: Some clarification regarding rfc3484 (6724) - Rule 8 Prefer smaller scope
Date: Fri, 23 May 2014 18:51:25 +0530	[thread overview]
Message-ID: <537F4B55.5040305@linux.vnet.ibm.com> (raw)

I had configured my local interface as follows :
ifconfig eth0 inet6 add fe80::1/64
ifconfig eth0 inet6 add fec0::1/10

And /etc/hosts contains :
fe80::2 server.org
fec0::2 server.org

The above two interfaces in /etc/hosts are not configured. Just to get
the result from getaddrinfo().

So according to rfc3484 , link-local has lower scope when compared to
site-local .
So i think fe80::2 should be returned first and then later fec0::2

In my fedora ( any kernel ), getaddrinfo() is preferring site-local
first instead of link-local.

So when looking into the getaddrinfo() glibc implementation ,  when two
or more addresses are available (code flow):
1) create a udp datagram socket
2) connect to the destination addresses returned from gaih_inet ( not
sorted yet ). This was done inorder to get the source address from the
kernel (using ipv6_get_saddr_eval() we get the preferred source for 
each destination). Actually doesnt need the destination to be reachable .
 #netstat | grep -i udp
udp        0      0 fec0::1:34236               server.org:http      
ESTABLISHED

3) getsockname to get the source address and store in result combo array.

So __connect() to site-local becomes successfull . But __connect() to
link-local is not successfull .

Hence rfc3484_sort() in glibc changes the order and prefers site-local
first .

i.e /* Rule 1: Avoid unusable destinations.
     We have the got_source_addr flag set if the destination is
reachable.  */
  if (a1->got_source_addr && ! a2->got_source_addr)

a1->got_source_addr is false because connect to link-local failed.

So my questions are :
1) Can this be a problem somewhere around ip6_datagram_connect() [
because connect fails ]
2) Can this be a problem with the parsing of glibc getaddrinfo ? [
something like sin6_scope_id being not set properly ]
3) Or this is the expected behaviour or am i missing out something ?


Any suggestions ?


Thank you,
Sumanth K

             reply	other threads:[~2014-05-23 13:21 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-23 13:21 sumanth [this message]
2014-05-25 19:01 ` Some clarification regarding rfc3484 (6724) - Rule 8 Prefer smaller scope sumanth

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=537F4B55.5040305@linux.vnet.ibm.com \
    --to=sumantk2@linux.vnet.ibm.com \
    --cc=netdev@vger.kernel.org \
    --cc=raghavendra.kt@linux.vnet.ibm.com \
    --cc=srikar@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.