mptcpd
mptcpd copied to clipboard
Unable to run ./mptcpd (error: symbol lookup error)
Hello
I have installed mptcpd 0.11 as per the instructions provided in github. Once installed I m trying to run the binary of mptcpd present in /usr/local/libexec/
. However I encountered an error which mentions ./mptcpd: symbol lookup error: ./mptcpd: undefined symbol: mptcpd_lm_destroy
. Is there any other configuration that I need to make sure before running the binary. Or is it an issue that needs to be fixed in mptcpd 0.11?
Thanks in advance
It looks like you're running mptcpd
directly from the command line in the /usr/local/libexec
directory, i.e.:
$ cd /usr/local/libexec
# ./mptcpd
Is that correct? If so, you'll need to make sure the library search path LD_LIBRARY_PATH
environment variable includes /usr/local/lib
since that directory is typically not searched by default. For example, something like the following should work:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib ./mptcpd
This is basically what the mptcpd
systemd unit file does. In mptcp.service
:
.,..
[Service]
Type=simple
DynamicUser=yes
Environment=LD_LIBRARY_PATH=/usr/local/lib
ExecStart=/usr/local/libexec/mptcpd --log=journal
...
HTH!
Hello @ossama-othman
Thanks for your reply. It helped me in starting the mptcp daemon.
However, I m actually trying to emulate a very simple experiment using mptcpd. Where I created this topology -
I started the mptcp daemon in both the machines, with default settings (i.e sspi plugin is loaded).
However I receive the following output on running iperf3 - On the server side -
root@abhinaba-VivoBook:~# LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib /usr/local/libexec/mptcpd -d
configuration.c:mptcpd_config_create() path manager plugin directory: /usr/local/lib/mptcpd
configuration.c:mptcpd_config_create() default path manager plugin: sspi
path_manager.c:family_appeared() "mptcp_pm" generic netlink family appeared
MPTCP address advertiser path manager initialized.
MPTCP single-subflow-per-interface path manager initialized.
No network interface with given IP address.
Unable to track new connection
sspi_connection_established is unimplemented.
No network interface with given IP address.
Unable to track new connection
sspi_connection_established is unimplemented.
Untracked connection closed.
Untracked connection closed.
On the client side
root@abhinaba-VivoBook:~# LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib /usr/local/libexec/mptcpd -d
configuration.c:mptcpd_config_create() path manager plugin directory: /usr/local/lib/mptcpd
configuration.c:mptcpd_config_create() default path manager plugin: sspi
path_manager.c:family_appeared() "mptcp_pm" generic netlink family appeared
MPTCP address advertiser path manager initialized.
MPTCP single-subflow-per-interface path manager initialized.
sspi_connection_established is unimplemented.
sspi_connection_established is unimplemented.
Untracked connection closed.
And on capturing the packets in wireshark, I observed new subflow creation is not taking place.
Is there some configuration that needs to be done from our end? In the plugins or the path-managers.
Hello, @abhinaba-fbr What kernel version did you use ?? did you make endpoint configuration with iptools? on client and server .. did you use mptcpsize with iperf3??
Hello @vandit86
Kernel version used is v5.19 Initially I did not configure the endpoints. Later I did make endpoints using ip mptcp, on both client and server and also used mptcpize with iperf3.
However, I observed the subflow is created if I keep pm_type=0 (Kernel mode). Started the mptcpd in both client and server. Once I changed it to pm_type=1 (userspace), and configure endpoints using ip mptcp, no additional subflow is being created.
I have few additional question?
-
If we are using mptcpd what is the need of configuring endpoints using ip mptcp. Isn't ip mptcp used for in-kernel path management?
-
Mptcpd is capable for both in-kernel and userspace path management. But how does mptcpd behave differently when pm_type is changed?
-
Is the sspi implementation currently in intel/mptcpd incomplete? Since I see several APIs (sspi_connection_established and sspi_new_address) are unimplemented.
- You can use for example mptcpd on client side, and in kernel pm on server side.. But if you use mptcpd, all PM logic should be implemented by yourself..
- Mptcpd is a userspace PM. now, MPTCP could be configured to use in-kernel or userspace PM by changing net.mptcp.pm_type
Just for a bit clarification. What do you mean by PM logic, do you mean plugins (like add_adv and sspi) or we need to implement/modify PM handling operations (mptcpd/path_manager.c) as well?
I m planning to implement my own plugin, is there any documentations, which I can follow to understand the code-base and working of mptcpd.
Just for a bit clarification. What do you mean by PM logic, do you mean plugins (like add_adv and sspi) or we need to implement/modify PM handling operations (mptcpd/path_manager.c) as well?
yes in PM logic in plugin
I m planning to implement my own plugin, is there any documentations, which I can follow to understand the code-base and working of mptcpd.
see examples in plugins folder : e.x. sspi
Okay. Thanks.
I will look into it.
Hi, I am new to mptcpd. I have just installed mptcpd 0.9 on ubuntu 22.04, configured the routing table and endpoint by iproute2 and did some tests by mptcpize run iperf. I notice that mptcpd provides us with a way to customize our own path manager somehow. But I don't really understand what sspi is doing? Are there any more easy examples to help me start? Thank you so much.