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!