Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to run ./mptcpd (error: symbol lookup error) #266

Open
abhinaba-fbr opened this issue Oct 6, 2022 · 9 comments
Open

Unable to run ./mptcpd (error: symbol lookup error) #266

abhinaba-fbr opened this issue Oct 6, 2022 · 9 comments
Labels
question Further information is requested

Comments

@abhinaba-fbr
Copy link

abhinaba-fbr commented Oct 6, 2022

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

@ossama-othman ossama-othman added the question Further information is requested label Oct 6, 2022
@ossama-othman
Copy link
Member

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!

@abhinaba-fbr
Copy link
Author

abhinaba-fbr commented Oct 10, 2022

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 -
Basic-topology drawio

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.

@vandit86
Copy link

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??

@abhinaba-fbr
Copy link
Author

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?

  1. 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?

  2. Mptcpd is capable for both in-kernel and userspace path management. But how does mptcpd behave differently when pm_type is changed?

  3. Is the sspi implementation currently in intel/mptcpd incomplete? Since I see several APIs (sspi_connection_established and sspi_new_address) are unimplemented.

@vandit86
Copy link

  1. 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..
  2. Mptcpd is a userspace PM. now, MPTCP could be configured to use in-kernel or userspace PM by changing net.mptcp.pm_type

@abhinaba-fbr
Copy link
Author

abhinaba-fbr commented Oct 13, 2022

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.

@vandit86
Copy link

vandit86 commented Nov 2, 2022

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

@abhinaba-fbr
Copy link
Author

Okay.
Thanks.

I will look into it.

@zzerodream
Copy link

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

4 participants