[tor-dev] Proposal: Controller events to better understand connection/circuit usage

Karsten Loesing karsten at torproject.org
Tue Feb 19 15:20:27 UTC 2013

On 2/12/13 4:54 PM, Damian Johnson wrote:
>> AppWard and ExitWard indicate the direction of cell flow through the
>> circuit. Previous cell events aggregated statistics for both directions and
>> therefore did not capture information which I believe may be important.
>> These are much more informative than N and P. Do you have suggestions for
>> improving this further?
> Ahhh, gotcha. Personally I'd go for 'inbound' and 'outbound' since
> they better connotate directionality. AppWard and ExitWard sound
> weird, but they make sense now too and would be fine if CELL_STATS got
> a quick description saying what they mean.

Sure, I'm fine with calling it 'inbound' and 'outbound'.  Will change
that the next time I touch the proposal.  Thanks!

I also thought more about Rob's idea to link circuits from client to
exit in a testing network.  I think we should add two more fields
InboundName and OutboundName to CELL_STATS events.  These fields would
contain LongName ($CC88FB3B78599580F1EE4F6F73E26A7EC3DF2CA1~tokenconn)
or Target (like of the previous or next node in a
circuit.  While it may be possible to extract this information from
ORCONN events, that seems somewhat fragile to me.  (When testing this, I
had a case when we were missing ORCONN events, because the controller
was not yet connected, so it was unclear where the CELL_STATS events

Here's an example of the extended CELL_STATS event (still using
positional arguments, because I didn't change the code there yet):

CELL_STATS 48957 15 $9441269F5989487F07AE824063345A0A6BCAB279
created=1;relay=1 created=1;relay=1 created=0;relay=0 29201 16
$DC284D0012ECB812C0CA2DEB080CB2F839A77E1A create=1 create=1 create=0

And here's how we'd put together relevant CELL_STATS events to learn
what happened in a given circuit:

  00:23:16 [fileclient-] >>> circ=34760 conn=12
create_fast=1;relay_early=2 create_fast=1;relay_early=2
  00:23:16 [tokenconn-] <<< circ=34760 conn=31
relay=1;created_fast=1 relay=1;created_fast=1
  00:23:17 [tokenconn-] <<< circ=34760 conn=31 relay=1 relay=1
  00:25:01 [tokenconn-] <<< circ=34760 conn=31 relay=1 relay=1
  00:25:01 [fileclient-] >>> circ=34760 conn=12 relay_early=1
  00:25:02 [fileclient-] >>> circ=34760 conn=12 relay_early=1
  00:25:02 [tokenconn-] <<< circ=34760 conn=31 relay=6 relay=6
  00:25:03 [tokenconn-] <<< circ=34760 conn=31 relay=40 relay=40
  00:25:04 [fileclient-] >>> circ=34760 conn=12 relay_early=1
  00:25:04 [tokenconn-] <<< circ=34760 conn=31 relay=61 relay=61
  00:25:05 [fileclient-] >>> circ=34760 conn=12
relay=1;relay_early=3 relay=1;relay_early=3
  00:25:06 [tokenconn-] <<< circ=34760 conn=31 relay=1 relay=1
  00:25:06 [fileclient-] >>> circ=34760 conn=12 relay=1 relay=1
  00:25:07 [tokenconn-] <<< circ=34760 conn=31 relay=44 relay=44
  00:25:08 [tokenconn-] <<< circ=34760 conn=31 relay=63 relay=63
  00:25:08 [fileclient-] >>> circ=34760 conn=12 relay=3 relay=3
  00:25:09 [fileclient-] >>> circ=34760 conn=12 relay=2 relay=2
  00:25:10 [tokenconn-] <<< circ=34760 conn=31 relay=1 relay=1
  00:25:10 [fileclient-] >>> circ=34760 conn=12 relay=1 relay=1
  00:25:11 [tokenconn-] <<< circ=34760 conn=31 relay=94 relay=94
  00:25:12 [fileclient-] >>> circ=34760 conn=12 relay=4 relay=4
  00:25:12 [tokenconn-] <<< circ=34760 conn=31 relay=12 relay=12
  00:23:16 [tokenconn-] >>> circ=9272 conn=18
create=1;relay_early=1 create=1;relay_early=1
  00:23:16 [tokenglobal-] <<< circ=9272 conn=15
created=1;relay=1 created=1;relay=1
  00:25:01 [tokenconn-] >>> circ=9272 conn=18 relay_early=1
  00:25:01 [tokenglobal-] <<< circ=9272 conn=15 relay=1 relay=1
  00:25:02 [tokenglobal-] <<< circ=9272 conn=15 relay=6 relay=6
  00:25:02 [tokenconn-] >>> circ=9272 conn=18 relay_early=1
  00:25:03 [tokenglobal-] <<< circ=9272 conn=15 relay=41 relay=41
  00:25:04 [tokenglobal-] <<< circ=9272 conn=15 relay=60 relay=60
  00:25:04 [tokenconn-] >>> circ=9272 conn=18 relay_early=1
  00:25:05 [tokenconn-] >>> circ=9272 conn=18
relay=1;relay_early=3 relay=1;relay_early=3
  00:25:06 [tokenconn-] >>> circ=9272 conn=18 relay=1 relay=1
  00:25:06 [tokenglobal-] <<< circ=9272 conn=15 relay=1 relay=1
  00:25:07 [tokenglobal-] <<< circ=9272 conn=15 relay=52 relay=52
  00:25:08 [tokenconn-] >>> circ=9272 conn=18 relay=1 relay=1
  00:25:08 [tokenglobal-] <<< circ=9272 conn=15 relay=55 relay=55
  00:25:09 [tokenconn-] >>> circ=9272 conn=18 relay=4 relay=4
  00:25:10 [tokenconn-] >>> circ=9272 conn=18 relay=1 relay=1
  00:25:10 [tokenglobal-] <<< circ=9272 conn=15 relay=1 relay=1
  00:25:11 [tokenglobal-] <<< circ=9272 conn=15 relay=98 relay=98
  00:25:12 [tokenglobal-] <<< circ=9272 conn=15 relay=8 relay=8
  00:25:12 [tokenconn-] >>> circ=9272 conn=18 relay=4 relay=4
  00:23:16 [exit1-] <<< circ=38910 conn=24 created=1 created=1
  00:23:16 [tokenglobal-] >>> circ=38910 conn=27 create=1 create=1
  00:25:01 [exit1-] <<< circ=38910 conn=24 relay=1 relay=1
  00:25:01 [tokenglobal-] >>> circ=38910 conn=27 relay_early=1
  00:25:02 [exit1-] <<< circ=38910 conn=24 relay=30 relay=30
  00:25:02 [tokenglobal-] >>> circ=38910 conn=27 relay_early=1
  00:25:03 [exit1-] <<< circ=38910 conn=24 relay=77 relay=77
  00:25:04 [tokenglobal-] >>> circ=38910 conn=27 relay_early=1
  00:25:05 [tokenglobal-] >>> circ=38910 conn=27
relay=1;relay_early=3 relay=1;relay_early=3
  00:25:06 [exit1-] <<< circ=38910 conn=24 relay=1 relay=1
  00:25:06 [tokenglobal-] >>> circ=38910 conn=27 relay=1 relay=1
  00:25:07 [exit1-] <<< circ=38910 conn=24 relay=80 relay=80
  00:25:08 [exit1-] <<< circ=38910 conn=24 relay=27 relay=27
  00:25:08 [tokenglobal-] >>> circ=38910 conn=27 relay=1 relay=1
  00:25:09 [exit1-] <<< circ=38910 conn=24 relay=1 relay=1
  00:25:09 [tokenglobal-] >>> circ=38910 conn=27 relay=4 relay=4
  00:25:10 [exit1-] <<< circ=38910 conn=24 relay=27 relay=27
  00:25:10 [tokenglobal-] >>> circ=38910 conn=27 relay=1 relay=1
  00:25:11 [exit1-] <<< circ=38910 conn=24 relay=79 relay=79
  00:25:12 [tokenglobal-] >>> circ=38910 conn=27 relay=4 relay=4

I think this works for all circuits.  Rob, what do you think about
extending the CELL_STATS events as described above?  Also, do we still
need the ID= in ORCONN events if CELL_STATS events are sufficient to
reconstruct circuits?

Finally, Rob, should I look into CIRC_BW events you suggested a while
ago?  If yes, what did you have in mind how that event would look like,
and when/by whom would it be emitted?


More information about the tor-dev mailing list