private-octopus / picoquic

Minimal implementation of the QUIC protocol
MIT License
547 stars 161 forks source link

Having issues setting up Multipath with picoquicdemo #1513

Closed sureshpsu closed 1 year ago

sureshpsu commented 1 year ago

Hi, I am trying to setup a Realtime wireless systems with WiFi and WiGi as two paths. I am using ./picoquicdemo to stream data over both wifi and wigi but unfortunately it is not working (it just uses one path). Currently, I am using following commands:

on client: ./picoquicdemo -a perf -M 3 -A 192.168.10.245/5, 192.168.1.4/4 192.168.10.231 4433 "*1:0:-:397:5000000" on Server: ./picoquicdemo -a perf -M 3 -A 192.168.10.231/3, 192.168.1.2/2

With the above setup, i am not able to stream QUIC data over both WiFi and WiGi in my setup. Please, advise me if i am doing some thing wrong?

Thanking you, Warm regards, Suresh

huitema commented 1 year ago

Maybe ask @clarkzjw, who is using that option successfully?

I think you have two issues:

1) The parameters should be quoted, as in:

./picoquicdemo -a perf -M 3 -A "192.168.10.245/5, 192.168.1.4/4 192.168.10.231" 4433 "*1:0:-:397:5000000"

2) The parameters are only applied on the client.

clarkzjw commented 1 year ago

try quoting IPs and interface indexes on the client side

./picoquicdemo -a perf -M 3 -A "192.168.10.245/5,192.168.1.4/4" 192.168.10.231 4433 "*1:0:-:397:5000000"

and yes, the -A option only applies to the client.


Update: Actually, you don't have to quote the IPs and interface indexes on the client side. Here is a working example:

Server:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: h1-eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc htb state UP group default qlen 1000
    link/ether d6:26:2f:9c:28:b4 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.0.1.2/24 brd 10.0.1.255 scope global h1-eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::d426:2fff:fe9c:28b4/64 scope link
       valid_lft forever preferred_lft forever

Client:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: h2-eth0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc htb state UP group default qlen 1000
    link/ether 32:1f:91:2a:82:e0 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.0.2.2/24 brd 10.0.2.255 scope global h2-eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::301f:91ff:fe2a:82e0/64 scope link
       valid_lft forever preferred_lft forever
3: h2-eth1@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc htb state UP group default qlen 1000
    link/ether 22:38:69:cf:05:59 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.0.3.2/24 brd 10.0.3.255 scope global h2-eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::2038:69ff:fecf:559/64 scope link
       valid_lft forever preferred_lft forever

Start server:

./picoquicdemo -a perf -M 3 -p 4433 

Start client:

./picoquicdemo -a perf -M 3 -A 10.0.2.2/2,10.0.3.2/3 10.0.1.2 4433 "*1:0:-:397:5000000"

and you should be able to see traffic on both interfaces on the client side.

sureshpsu commented 1 year ago

Hi Jinwei Zhao, I got it working, thanks for all the inputs. The issue was with the routing table, picoquic was not able to reach the server from the secondary link.....I fixed the routing issues and it started working.

I used tcpdump to debug and caught the issue.......

PS: Indeed, picoquic did send quic packets over the secondary link but it just could not route it to the server.

Thanking you, Warm regards, Suresh