Provides the following new config option, and some satellite options:
mobile (bool): if True then peer is "mobile" ie we assume it may change
its apparent IP address and port number without either it or us
being aware of the change; so, we remember the last several port/addr
pairs we've seen and send packets to all of them (subject to a timeout).
We maintain one set of addresses for key setup exchanges, and another for
data traffic. [false]
In the code this involves replacing the comm_addrs for setup_peer and
peer with a new struct transport_peers which contains zero or more
comm_addrs. This subsumes peer_valid, too.
Additionally, we are slightly cleaner about the use of setup_peer: we
ensure that we clean it out appropriately when we go into states where
it won't (shouldn't) be used.
The transport_peers structure is opaque to most of site.c and is
manipulated by a new set of functions which implement the detailed
semantics described in site.c.
The main code in site.c is no longer supposed to call dump_packet and
st->comm->sendmsg directly; it should use transport_xmit (which will
do dump_packet as well as appropriate sendmsgs).
No intentional functional change if mobile=false (the default) and the
new debug log feature ("peer-addrs") is not enabled.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>