p-quic / pquic

The PQUIC implementation, a framework that enables QUIC clients and servers to dynamically exchange protocol plugins that extend the protocol on a per-connection basis
https://pquic.org
MIT License
126 stars 20 forks source link

Running pquic picoquicdemo with multipath plugin throws error #12

Closed The3ternum closed 3 years ago

The3ternum commented 3 years ago

Running the picoquicdemo with the multipath plugin results in a server exit, and giving the following output:

./picoquicdemo -P plugins/multipath/multipath.plugin Starting PicoQUIC server on port 4443, server name = ::, just_once = 0, hrr= 0, 1 local plugins and 0 both plugins local plugin plugins/multipath/multipath.plugin Unrecognized plugin option: "param" Impossible to parse first plugin line Cannot extract plugin id Error when setting local plugins to inject Server exit, ret = 1 Server exit with code = 1

mpiraux commented 3 years ago

This lacks documentation indeed, multipath.plugin is just not a complete plugin but just the core functionalities. We could rename it to multipath.core probably. It's included in other plugins that specialise multipath with a particular path scheduler for example. Use multipath_rr.plugin for a round robin path scheduler and multipath_rtt.plugin for a lowest RTT first path scheduler.

The3ternum commented 3 years ago

I see, It also seems that multipath_rr_cond.plugin is needed in order to run a mp supporting server? If I run multipath_rr.plugin (without the _cond) the server does not send a max_sending_uniflow_id as transport parameter, but still sends MP-frames, resulting in a client identifying that it is receiving MP frames without the peer signaling MP support.

mpiraux commented 3 years ago

Yes indeed, its our internal plugin for testing when we know that MP is supported. The _cond variants enables negotiation.

The3ternum commented 3 years ago

Thank you for the response, my client now performs the handshake and sees the transport parameter. Closing the issue now.

ArthurCChen commented 2 years ago

@The3ternum Hi! Could you still remember the commands you used for the multipath plugin? I'm currently using

./picoquicdemo -P plugins/multipath/multipath_rtt_cond.plugin -P plugins/multipath/multipath_rtt.plugin

at the server side and

./picoquicdemo -P plugins/multipath/multipath_rtt_cond.plugin -P plugins/multipath/multipath_rtt.plugin -p 4443 127.0.0.1

at the client side.

The client logs:

Starting PicoQUIC connection to server IP = 127.0.0.1, port = 4443 and 2 local plugins
    local plugin plugins/multipath/multipath_rtt_cond.plugin
    local plugin plugins/multipath/multipath_rtt.plugin
WARNING: direct plugin insertion at client might interfere with remote plugin injection...
Testing scenario: <0:index.html;4:test.html;8:/1234567;12:main.jpg;16:war-and-peace.txt;20:en/latest/;24:/file-123K>
No server name specified, certificate will not be verified.
include multipath_cond.plugin...
create memory manager for plugin be.qdeconinck.multipath.rtt
create fixed block size memory manager
Successfully inserted preplugin plugins/multipath/multipath_rtt_cond.plugin
include multipath.plugin...
create memory manager for plugin be.qdeconinck.multipath.rtt
create dynamic memory manager
Successfully inserted local plugin plugins/multipath/multipath_rtt.plugin
26b3ba679a99a813: Sending packet type: 2 (initial), S0, Version ff00001d,
26b3ba679a99a813:     <26b3ba679a99a813>, <30b9278ce0ac735c>, Seq: 0, pl: 1206
26b3ba679a99a813:     Prepared 1206 bytes
26b3ba679a99a813:     Crypto HS frame, offset 0, length 275: 0100010f0303d710...
26b3ba679a99a813:     padding, 927 bytes

26b3ba679a99a813: Sending 1252 bytes to 127.0.0.1:4443 at T=0.019404 (5d4603de9c87e)
Select returns 1252, from length 28, after 12 (delta_t was 0)
26b3ba679a99a813: Receiving 1252 bytes from 127.0.0.1:4443 at T=0.038752 (5d4603dea1412)
26b3ba679a99a813: Receiving packet type: 2 (initial), S0, Version ff00001d,
26b3ba679a99a813:     <30b9278ce0ac735c>, <5c2954282a467913>, Seq: 0, pl: 133
26b3ba679a99a813:     Decrypted 133 bytes
26b3ba679a99a813:     ACK (nb=0), 0
26b3ba679a99a813:     Crypto HS frame, offset 0, length 123: 02000077030397ee...

ERROR: trying to get input 5, but there are only 5 inputs available
Segment Fault

The server can receive the first initial packet from the client and keeps sending packets but the client has shut. Maybe I used the wrong commands?

qdeconinck commented 2 years ago

This is strange that PQUIC does not raise error when trying to insert both plugins/multipath/multipath_rtt_cond.plugin and plugins/multipath/multipath_rtt.plugin, as they should be mutually exclusive. Only insert plugins/multipath/multipath_rtt_cond.plugin.

dylanfernandezdelara commented 1 year ago

@The3ternum Hi! Could you still remember the commands you used for the multipath plugin? I'm currently using

./picoquicdemo -P plugins/multipath/multipath_rtt_cond.plugin -P plugins/multipath/multipath_rtt.plugin

at the server side and

./picoquicdemo -P plugins/multipath/multipath_rtt_cond.plugin -P plugins/multipath/multipath_rtt.plugin -p 4443 127.0.0.1

at the client side.

The client logs:

Starting PicoQUIC connection to server IP = 127.0.0.1, port = 4443 and 2 local plugins
  local plugin plugins/multipath/multipath_rtt_cond.plugin
  local plugin plugins/multipath/multipath_rtt.plugin
WARNING: direct plugin insertion at client might interfere with remote plugin injection...
Testing scenario: <0:index.html;4:test.html;8:/1234567;12:main.jpg;16:war-and-peace.txt;20:en/latest/;24:/file-123K>
No server name specified, certificate will not be verified.
include multipath_cond.plugin...
create memory manager for plugin be.qdeconinck.multipath.rtt
create fixed block size memory manager
Successfully inserted preplugin plugins/multipath/multipath_rtt_cond.plugin
include multipath.plugin...
create memory manager for plugin be.qdeconinck.multipath.rtt
create dynamic memory manager
Successfully inserted local plugin plugins/multipath/multipath_rtt.plugin
26b3ba679a99a813: Sending packet type: 2 (initial), S0, Version ff00001d,
26b3ba679a99a813:     <26b3ba679a99a813>, <30b9278ce0ac735c>, Seq: 0, pl: 1206
26b3ba679a99a813:     Prepared 1206 bytes
26b3ba679a99a813:     Crypto HS frame, offset 0, length 275: 0100010f0303d710...
26b3ba679a99a813:     padding, 927 bytes

26b3ba679a99a813: Sending 1252 bytes to 127.0.0.1:4443 at T=0.019404 (5d4603de9c87e)
Select returns 1252, from length 28, after 12 (delta_t was 0)
26b3ba679a99a813: Receiving 1252 bytes from 127.0.0.1:4443 at T=0.038752 (5d4603dea1412)
26b3ba679a99a813: Receiving packet type: 2 (initial), S0, Version ff00001d,
26b3ba679a99a813:     <30b9278ce0ac735c>, <5c2954282a467913>, Seq: 0, pl: 133
26b3ba679a99a813:     Decrypted 133 bytes
26b3ba679a99a813:     ACK (nb=0), 0
26b3ba679a99a813:     Crypto HS frame, offset 0, length 123: 02000077030397ee...

ERROR: trying to get input 5, but there are only 5 inputs available
Segment Fault

The server can receive the first initial packet from the client and keeps sending packets but the client has shut. Maybe I used the wrong commands?

I'm receiving this error as well. How did you fix this? I am currently running ./picoquicdemo -P plugins/multipath/multipath_rtt_cond.plugin for the server and ./picoquicdemo -4 -G 10000 -P plugins/multipath/multipath_rtt_cond.plugin -p 4443 127.0.0.1 for the client

mpiraux commented 1 year ago

What platform are you running this on?

dylanfernandezdelara commented 1 year ago

Ubuntu 20.04. I managed to avoid the segmentation fault, but I still see the same error statement, "trying to get input 5..."

mpiraux commented 1 year ago

ERROR: trying to get input 5, but there are only 5 inputs available, this one is not a real problem but a corner case in the plugin that we never fixed. I assume your platform is x86 64bits then. Does the transfer completes? How did you prevent the segmentation fault from happening?