Hi Tim and everyone on tor-dev,
Our QUIC + TOR project has almost been fully implemented. We are debugging
the last few bits of bugs. Update:
1. *We've now able to build many complete circuits with QUIC as its
underlying protocol. *
2. We have not debugged the actual communication part yet. We are aware
of certain failure cases for QUIC (e.g. line 15642 of the log is being
debugged right now). So we cannot send actually client data yet.
3. The current state uses QUIC for OR connections only. Thus a dual-path
is implemented as suggested in my last email thread.
4. TLS is completely bypassed and important state (that is set up in
tls_handshake functions) is preserved and refactored out. e.g.
conn->/chan->state purpose, etc.
5. Some tinkering and re-designing of QUIC itself is also underway. The
fact that QUIC is a transport protocol on application layer makes it
painful to interact with the event and timer systems of TOR. We are trying
to improve this aspect now.
*The debugging log I was attaching was too big for the tor-dev list. So if
you are interested to take a look at the file, let me know. Your help is
greatly appreciated! *
Some particularly concerning things in the log:
1. *circuit_get_by_circid_channel_impl(): found nothing for circ_id
14801, channel ID 2 (0x7f758bb6b740)*
Then it just attaches this circ onto this channel.. Is this normal?
2. *Line 4901 circuit_receive_relay_cell(): Passing on unrecognized
cell.*
It happens a lot. Is this normal?
3. This sequence happened a lot around 7500.
*relay_send_command_from_edge_(): delivering 10 cell forward.
circuit_package_relay_cell(): crypting a layer of the relay cell.
circuit_package_relay_cell(): crypting a layer of the relay cell.
circuit_package_relay_cell(): crypting a layer of the relay cell.*
It seems like its decrypting and forwarding cells along. Is it normal
for TOR (with TCP) to do this in a burst? Because I'm seeing about ~1s of
repeated calls.
*Some more general questions:*
1. Internal Circuits: any docs? What is it used for? Measuring
bandwidth? How many internal circuits are required by the system?
2. *circuit wide ID format.* We had a bug regarding this last week. The
check in process_create_cell always fails because line 281-295 in
*command.c* always failed (the check for CIRC_ID_TYPE and id_is_high).
Currently we commented out this check. What does it affect? And could we do
this?
3. From a high level, when a client sends data using a circuit, what is
its code path? Which special (as in, specific to client-initiated
communication) functions are called?
Any other comment on the log is greatly appreciated, since everyone here is
probably more familiar than me with what a normal bootstrapping process
would look like.
Thank you!