[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: Tor Ipv6-Patch



On Tue, Dec 04, 2007 at 08:03:50AM -0500, Michael G. Reed wrote:
> On Tue, 4 Dec 2007, Marcus Wolschon - Wolschon Softwaredesign wrote:
> |> >  - You're right that the preferred way to store addresses that could be
> |> >    either IPv4 or IPv6 is indeed with tor_addr_t.  (Thanks for the
> |> >    reminder, BTW: I fixed tor_addr_t to be a tagged union of in_addr and
> |> >    in6_addr, not of sockaddr_in and sockaddr_in6.)
> |> 
> |> do you want to do the refactoring to use tor_address_t or shall I?
> |> So we need a pair of tor_address_t and int socket_family. Wouldn't it
> |> be better to have the socket_family in a struct with the tor_address_t
> |> - -union? That way it would probably be a drop-in -replacement for the
> |> 32bit-addresses.

Check out how the code for tor_addr_t is now; it's about what you say:
It's a struct with a family and a union of in_addr and in6_addr.
("Tagged union" in this case means "union with a field that tells you
which case of the union a particular item is.)

(Also, you keep saying "tor_address_t" instead of "tor_addr_t".  Are you
looking at another struct somewhere with a different name?)

> This is exactly why multi-protocol developers normally use
> sockaddr_storage to define the space for an address they do not know
> the type of in advance and then rely on the sa_family field to
> differentiate.  sockaddr_storage is guaranteed to be large enough to
> hold the largest supported address type in the system (not
> efficient/desirable/usable for on-the-wire, but is best used in
> application processing).

Alas, we need lots of these: a rough estimage is at least 40K [*] on a
busy server.  Sockaddr_storage is about 128 bytes on most platforms
I've encountered, whereas we only need ~16 bytes for an in6_addr.
(sockaddr_in6 is only ~~28 bytes).  I know Tor is already a bit of a
memory hog, but adding another 4MB to the process size for the unused
portion of all the sockaddr_storages rubs me the wrong way.

Yrs,
-- 
Nick

Attachment: pgpXVM0Ghp8L0.pgp
Description: PGP signature