#!/bin/bash
set -ueo pipefail

trap end INT EXIT

function end() {
    echo 0 > /sys/kernel/debug/tracing/events/uprobes/connect/enable
    echo 0 > /sys/kernel/debug/tracing/events/uprobes/freeaddrinfo/enable
    echo 0 > /sys/kernel/debug/tracing/events/uprobes/getaddrinfo/enable
    echo > /sys/kernel/debug/tracing/uprobe_events
}

getaddrinfo='p:getaddrinfo /lib/x86_64-linux-gnu/libc.so.6:0x0000000000107bc0 node=+0(%di):string svc=+0(%si):string'
freeaddrinfo='p:freeaddrinfo /lib/x86_64-linux-gnu/libc.so.6:0x0000000000108880 addr=+4(+24(%di)):x32'
connect='p:connect /lib/x86_64-linux-gnu/libc.so.6:0x00000000001228a0 family=+0(%si):x16 addr=+4(%si):x32'
conn_filter='family == 0x2'  # AF_INET

echo nop > /sys/kernel/debug/tracing/current_tracer
echo "${getaddrinfo}" >> /sys/kernel/debug/tracing/uprobe_events
echo "${freeaddrinfo}" >> /sys/kernel/debug/tracing/uprobe_events
echo "${connect}" >> /sys/kernel/debug/tracing/uprobe_events

echo 1 > /sys/kernel/debug/tracing/events/uprobes/getaddrinfo/enable
echo 1 > /sys/kernel/debug/tracing/events/uprobes/freeaddrinfo/enable
echo "${conn_filter}" >> /sys/kernel/debug/tracing/events/uprobes/connect/filter
echo 1 > /sys/kernel/debug/tracing/events/uprobes/connect/enable

echo > /sys/kernel/debug/tracing/trace
cat /sys/kernel/debug/tracing/trace_pipe
