Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
Trac
Trac
  • Project overview
    • Project overview
    • Details
    • Activity
  • Issues 246
    • Issues 246
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Operations
    • Operations
    • Metrics
    • Incidents
  • Analytics
    • Analytics
    • Value Stream
  • Wiki
    • Wiki
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Create a new issue
  • Issue Boards

GitLab is used only for code review, issue tracking and project management. Canonical locations for source code are still https://gitweb.torproject.org/ https://git.torproject.org/ and git-rw.torproject.org.

  • Legacy
  • TracTrac
  • Issues
  • #33898

Closed (moved)
Open
Opened Apr 14, 2020 by teor@teor

Stop modifying addr on connections, and delete real_addr

In connection_or_check_canonicity(), we overwrite conn.addr with the canonical address of the relay in the consensus. That makes accurate logging impossible.

And so we also need channel.real_addr, to store the actual address of the remote peer. And for some reason, we also have conn.address, a string copy of the peer's canonical address and port.

See: https://github.com/torproject/tor/blob/7f9eaec538b7d01e0d1b130dc4cf2ec634252d46/src/core/or/connection_or.c#L920

This is... a mess.

Here's the high-level interface I'd like to see:

  • use a function to format a connection or channel addresses for loogging
  • use exactly as many address and port variables as needed in connection and channel (no extras!)
  • qualify each address and port variable's name with its purpose

For example, here's one possible design:

  • delete addr, port, address, and real_addr
  • add remote_ap, a tor_addr_port_t that is the remote address and port of the TCP connection to the remote peer
  • implement connection_describe(), which:
    • formats remote_ap,
    • formats is_canonical (and any other useful info), and
    • calls node_describe() to format the canonical IPv4 and IPv6 addresses and ports of the remote peer.

We may also need separate fields for reverse proxied addresses, see the comment at: https://github.com/torproject/tor/blob/7517e1b5d31aada1f594c2594737a231d9d8e116/src/core/or/channeltls.c#L1339

If we need separate variables or functions for channels, we can use a similar design. (But ideally, re-using as many functions and variables as possible.)

This is important for Sponsor 55: getting accurate connection information will make diagnosing bugs much easier.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
Tor: 0.4.5.x-final
Milestone
Tor: 0.4.5.x-final
Assign milestone
Time tracking
None
Due date
None
Reference: legacy/trac#33898