> On Aug 13, 2024, at 6:12 PM, Martin KaFai Lau <martin.lau@xxxxxxxxx> wrote: > > > > On 8/5/24 2:52 AM, Matthieu Baerts (NGI0) wrote: >> +static int endpoint_init(char *flags) >> +{ >> + SYS(fail, "ip -net %s link add veth1 type veth peer name veth2", NS_TEST); >> + SYS(fail, "ip -net %s addr add %s/24 dev veth1", NS_TEST, ADDR_1); >> + SYS(fail, "ip -net %s link set dev veth1 up", NS_TEST); >> + SYS(fail, "ip -net %s addr add %s/24 dev veth2", NS_TEST, ADDR_2); >> + SYS(fail, "ip -net %s link set dev veth2 up", NS_TEST); >> + if (SYS_NOFAIL("ip -net %s mptcp endpoint add %s %s", NS_TEST, ADDR_2, flags)) { >> + printf("'ip mptcp' not supported, skip this test.\n"); >> + test__skip(); > > It is always a skip now in bpf CI: > > #171/3 mptcp/subflow:SKIP > > This test is a useful addition for the bpf CI selftest. > > It can't catch regression if it is always a skip in bpf CI though. > > iproute2 needs to be updated (cc: Daniel Xu and Manu, the outdated iproute2 is something that came up multiple times). > > Not sure when the iproute2 can be updated. In the mean time, your v3 is pretty close to getting pm_nl_ctl compiled. Is there other blocker on this? I have updated runners to Ubuntu 24.04 which comes with: root@1fdd5d75581b:/actions-runner# ip --json -V ip utility, iproute2-6.1.0, libbpf 1.3.0 root@1fdd5d75581b:/actions-runner# ip mptcp help Usage: ip mptcp endpoint add ADDRESS [ dev NAME ] [ id ID ] [ port NR ] [ FLAG-LIST ] ip mptcp endpoint delete id ID [ ADDRESS ] ip mptcp endpoint change [ id ID ] [ ADDRESS ] [ port NR ] CHANGE-OPT ip mptcp endpoint show [ id ID ] ip mptcp endpoint flush ip mptcp limits set [ subflows NR ] [ add_addr_accepted NR ] ip mptcp limits show ip mptcp monitor FLAG-LIST := [ FLAG-LIST ] FLAG FLAG := [ signal | subflow | backup | fullmesh ] CHANGE-OPT := [ backup | nobackup | fullmesh | nofullmesh ] Assuming I don’t need to revert back to old runners due to unrelated issue, you should now have `ip mptcp` available. Manu > >> + goto fail; >> + } >> + >> + return 0; >> +fail: >> + return -1; >> +} >> + >> +static int _ss_search(char *src, char *dst, char *port, char *keyword) >> +{ >> + return SYS_NOFAIL("ip netns exec %s ss -enita src %s dst %s %s %d | grep -q '%s'", >> + NS_TEST, src, dst, port, PORT_1, keyword); >> +} >> + >> +static int ss_search(char *src, char *keyword) >> +{ >> + return _ss_search(src, ADDR_1, "dport", keyword); >> +} >> + >> +static void run_subflow(char *new) >> +{ >> + int server_fd, client_fd, err; >> + char cc[TCP_CA_NAME_MAX]; >> + socklen_t len = sizeof(cc); >> + >> + server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0); >> + if (!ASSERT_GE(server_fd, 0, "start_mptcp_server")) >> + return; >> + >> + client_fd = connect_to_fd(server_fd, 0); >> + if (!ASSERT_GE(client_fd, 0, "connect to fd")) >> + goto fail; >> + >> + err = getsockopt(server_fd, SOL_TCP, TCP_CONGESTION, cc, &len); >> + if (!ASSERT_OK(err, "getsockopt(srv_fd, TCP_CONGESTION)")) >> + goto fail; >> + >> + send_byte(client_fd); >> + >> + ASSERT_OK(ss_search(ADDR_1, "fwmark:0x1"), "ss_search fwmark:0x1"); >> + ASSERT_OK(ss_search(ADDR_2, "fwmark:0x2"), "ss_search fwmark:0x2"); >> + ASSERT_OK(ss_search(ADDR_1, new), "ss_search new cc"); >> + ASSERT_OK(ss_search(ADDR_2, cc), "ss_search default cc"); > > Is there a getsockopt way instead of ss + grep? >