Dynamic addition of interfaces in multipath connection #1833
Replies: 3 comments 3 replies
-
In your example, you have a path failing and being deleted. You then are notified that the address might work again. You cannot reuse the same "path" structure -- once deleted, it cannot be reinstated, and all CID for that old path have been freed. You need to create a new path, with a new path identifier. Picoquicdemo is using an internal API, picoquic_obtain_stashed_cnxid, which is not really meant for public consumption. That part of the code probably need to be tidied up. We need an API to "get a CID for a new path", and |
Beta Was this translation helpful? Give feedback.
-
@sanjaybhat2004, I opened issue #1835, "Need API to signal when adding a new path is possible". Please comment on that issue before we settle on a design. |
Beta Was this translation helpful? Give feedback.
-
Also I had another concern regarding this, which was related to a issue we were facing. In our setup as I wrote earlier, we dynamically query the IP of interfaces, and we filter by seeing which are However, we have a case where its failing. The setup was such that, in the IP list, there were 4 interfaces. 1 of them was ethernet which was the primary interface over which the first connection was made (and we avoided probing this interface). The problem arised due to the next 2 interfaces, which were bridge interfaces which had an IP address but were not connected to outside internet. (these might be any type of bridge interfaces, but for the sake of reproducibility it happens in Linux virtual interfaces as well). The next and the 4th interface was a WiFi interface. Now, what was happening is that, when we looped through this list and called (quicctx.c file)
the path_x variable was NULL, signifying that the unique_path_id was UINT64_MAX. Trying to understand that function, I came to the conclusion that it is related to stash not having another path. So 2 things here:
Also all this is using the API at the time when this discussion was created, and not the latest API, we will migrate our code to that in some time. Also I saw this in the latest documentation:
Could you please provide information on how such a frame might be sent to the server on path 0 so that we can get new CID for probing even if the previous one failed? Thank for you all the help. |
Beta Was this translation helpful? Give feedback.
-
Hello, currently we have a connection between a client and a server setup using picoquic, via multipath. We have modeled our multipath implementation similar to the way it has been done in
picoquicdemo.c
. However, there the ip address of alternative interface needs to be added by the user at the start of the program manually, while we have written a function, saydetect_interfaces()
which returns the IP address and interface index of each interface by asking it from the OS. We then iterate through each of these IP, and then if that IP is not the same as the IP address of the primary path, we callpicoquic_probe_new_path_ex
similar to the way it is done inpicoquicdemo.c
. This implementation works well, when the required interfaces already exist at the start of the connection.However, we want to support dynamic addition of interfaces as well, in the sense that if an additional interface comes online during the course of the connection, traffic be routed through it as well. So we come up with following implementation:
(In a mix of C and Pseudo code)
However the issue we are encountering is, say there are 2 interfaces initially, and one goes down, and then it comes back. Initially multipath works fine, but later when interface comes back up it actually it does not go into the branch of if statement where probing is there, and instead says "Remote CID not ready". We did not really understand what the
get_stashed_cnxid
function does, so we were wondering how to do the implementation.Beta Was this translation helpful? Give feedback.
All reactions