File: mptcp-get-debug

package info (click to toggle)
mptcpd 0.14-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 3,612 kB
  • sloc: ansic: 9,472; sh: 5,154; makefile: 467; cpp: 61
file content (131 lines) | stat: -rwxr-xr-x 2,576 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#! /bin/sh
# SPDX-License-Identifier: BSD-3-Clause
#
# Copyright (c) 2024, Matthieu Baerts

SCRIPT="$(basename "${0}")"
VERSION="1"
PID_IP=

EQ="========================================"

title() {
    printf "\n%s\n%s\n%s\n" "${EQ}" "${*}" "${EQ}"
}

stdout() {
    printf "\n%s\n" "${*}"
}

stderr() {
    stdout "${@}" >&2
}

cmd() {
    title "${*}"
    "${@}" 2>&1
}

start_ip_mptcp_monitor() {
    title "ip mptcp monitor: start"
    ip mptcp monitor 2>&1 &  # not using cmd to get the right PID
    PID_IP=$!

    sleep 0.1 2>/dev/null || sleep 1

    for _ in $(seq 20); do
        out="$(ss -f netlink -H "src = rtnl:${PID_IP}" 2>/dev/null)" || break
        [ "$(echo "${out}" | wc -l)" != 0 ] && return 0

        sleep 0.1 2>/dev/null || break
    done

    if [ ! -d "/proc/${PID_IP}" ]; then
        stdout "ip monitor has been killed"
        return 1
    fi
}

stop_ip_mptcp_monitor() {
    title "ip mptcp monitor: stop"

    if [ -n "${PID_IP}" ] && [ -d "/proc/${PID_IP}" ]; then
        kill "${PID_IP}"
    fi
}

collect_data_pre() {
    stdout "${SCRIPT}: version ${VERSION}"

    if [ "$(id -u)" != 0 ]; then
        stderr "This script is not executed as root, not all info can be collected."
        stderr "Press Enter to continue, Ctrl+C to stop"
        read -r _
    fi

    cmd uname -a
    cmd cat /etc/os-release
    cmd sysctl net.mptcp
    cmd ip mptcp endpoint show
    cmd ip mptcp limits show
}

collect_data_post() {
    cmd ss -ManiH
    cmd nstat
}

collect_data() {
    collect_data_pre
    collect_data_post
}

collect_data_repro() {
    collect_data_pre

    cmd ss -ManiH
    nstat -n 2>&1
    start_ip_mptcp_monitor

    stderr "Please reproduce the issue now, then press the Enter key when it is done."
    read -r _

    collect_data_post
    stop_ip_mptcp_monitor
}

version() {
    printf "%s: version %s\n" "${SCRIPT}" ${VERSION}
}

usage() {
    version
    printf "\n"
    printf "  -c | --collect      Collect info and exit.\n"
    printf "  -r | --reproduce    Collect info, start monitor, wait for user and exit.\n"
    printf "  -h | --help         Show this and exit.\n"
    printf "  -v | --version      Show the version and exit.\n"
    printf "\n"
    printf "Please check https://mptcp.dev website for more info.\n"
}

case "${1}" in
    "-c" | "--collect")
        collect_data
        ;;
    "-r" | "--reproduce")
        collect_data_repro
        ;;
    "-h" | "--help")
        usage
        ;;
    "-v" | "--version")
        version
        ;;
    *)
        usage >&2
        exit 1
        ;;
esac

exit 0