resolver: Use proper IPv6 source address when sending DNS queries
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Tue, 24 Apr 2012 13:40:41 +0000 (16:40 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Tue, 24 Apr 2012 14:21:41 +0000 (16:21 +0200)
commit1c249af7946667f24cd2b995cc13149b77dd62df
treeacfb81f855260ff6278c6d0be830630f7f7fed53
parent51f6e0a79fffaea92d044a2b541da316bd57ffcd
resolver: Use proper IPv6 source address when sending DNS queries

This fix is for following scenario:
 - New interface is coming up.
 - There is radvd in the connected network and it is
   advertising IPv6 addresses and DNS servers.
 - Kernel receives router advertisement and picks up the DNS
   server information which is then routed via netlink to
   rtnl.c:rtnl_newnduseropt() which then creates DNS listener.
 - Kernel activates DAD (duplicate address detection).
 - As the DAD takes some time we now have interface up
   and it only has link local IPv6 address defined.
 - The DNS listener is now using link local source addresses when
   sending queries instead of proper autoconfigured addresses.
 - When DAD is finished, the interface will have autoconfigured
   addresses assigned and corresponding netlink message will cause
   function rtnl.c:process_newaddr() to be called.
 - If all this happens, then we re-create DNS listener
   in dnsproxy.c so that listener will have a proper
   (autoconfigured) source address when sending DNS packets.
src/connman.h
src/resolver.c
src/rtnl.c