summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2025-11-08 16:33:25 -0800
committerrtk0c <[email protected]>2025-11-08 16:47:12 -0800
commitd2597b3d5aa9e07ff92a09eb73d580b2d325f073 (patch)
treefabd86a4aa07a9a78d4f97a505013fcf8e08b17a
parent0dbdad755139bec2b917adae63e282f4159bfcee (diff)
Prompt claude-4.5 plus manual fixup
https://www.perplexity.ai/search/i-will-give-you-the-source-cod-gC4f5PhBQYeuk1GBVZ0Dnw#0
-rw-r--r--netns.diff132
-rwxr-xr-xwg-quick55
2 files changed, 182 insertions, 5 deletions
diff --git a/netns.diff b/netns.diff
new file mode 100644
index 0000000..4072b84
--- /dev/null
+++ b/netns.diff
@@ -0,0 +1,132 @@
+--- wg-quick.orig
++++ wg-quick
+@@ -24,6 +24,7 @@
+ SAVE_CONFIG=0
+ CONFIG_FILE=""
+ PROGRAM="${0##*/}"
+ ARGS=( "$@" )
++NETNS=""
+
+@@ -68,6 +69,20 @@
+ "$@"
+ }
+
++ensure_netns() {
++ [[ -z $NETNS ]] && return 0
++ if [[ ! -e /run/netns/$NETNS ]]; then
++ cmd ip netns add "$NETNS"
++ fi
++}
++
++move_to_netns() {
++ [[ -z $NETNS ]] && return 0
++ cmd ip link set "$INTERFACE" netns "$NETNS"
++}
++
+ die() {
+ echo "$PROGRAM: $*" >&2
+ exit 1
+
+@@ -169,11 +184,23 @@
+ local proto=-4
+ [[ $1 == *:* ]] && proto=-6
+- cmd ip $proto route add "$1" dev "$INTERFACE" table "$TABLE"
++
++ if [[ -n $NETNS ]]; then
++ cmd ip -n "$NETNS" $proto route add "$1" dev "$INTERFACE" table "$TABLE"
++ else
++ cmd ip $proto route add "$1" dev "$INTERFACE" table "$TABLE"
++ fi
+ elif [[ $1 == */0 ]]; then
+ add_default "$1"
+ else
+- [[ -n $(ip $proto route show dev "$INTERFACE" match "$1" 2>/dev/null) ]] || cmd ip $proto route add "$1" dev "$INTERFACE"
++ if [[ -n $NETNS ]]; then
++ [[ -n $(ip -n "$NETNS" $proto route show dev "$INTERFACE" match "$1" 2>/dev/null) ]] || cmd ip -n "$NETNS" $proto route add "$1" dev "$INTERFACE"
++ else
++ [[ -n $(ip $proto route show dev "$INTERFACE" match "$1" 2>/dev/null) ]] || cmd ip $proto route add "$1" dev "$INTERFACE"
++ fi
+ fi
+ }
+
+@@ -267,8 +294,18 @@
+ HAVE_SET_DNS=0
+ set_dns() {
+ [[ ${#DNS[@]} -gt 0 ]] || return 0
++ if [[ -n $NETNS ]]; then
++ local netns_resolv_dir="/etc/netns/$NETNS"
++ cmd mkdir -p "$netns_resolv_dir"
++ { printf 'nameserver %s\n' "${DNS[@]}"
++ [[ ${#DNS_SEARCH[@]} -eq 0 ]] || printf 'search %s\n' "${DNS_SEARCH[*]}"
++ } | cmd tee "$netns_resolv_dir/resolv.conf" > /dev/null
++ else
+ { printf 'nameserver %s\n' "${DNS[@]}"
+ [[ ${#DNS_SEARCH[@]} -eq 0 ]] || printf 'search %s\n' "${DNS_SEARCH[*]}"
+ } | cmd resolvconf -a "$(resolvconf_iface_prefix)$INTERFACE" -m 0 -x
++ fi
+ HAVE_SET_DNS=1
+ }
+
+@@ -276,6 +313,11 @@
+ unset_dns() {
+ [[ ${#DNS[@]} -gt 0 ]] || return 0
++ if [[ -n $NETNS ]]; then
++ local netns_resolv="/etc/netns/$NETNS/resolv.conf"
++ [[ -f $netns_resolv ]] && cmd rm -f "$netns_resolv"
++ return 0
++ fi
+ cmd resolvconf -d "$(resolvconf_iface_prefix)$INTERFACE" -f
+ }
+
+@@ -431,7 +473,7 @@
+
+ cmd_usage() {
+ cat >&2 <<-_EOF
+- Usage: $PROGRAM [ up | down | save | strip ] [ CONFIG_FILE | INTERFACE ]
++ Usage: $PROGRAM [ up | down | save | strip ] [ CONFIG_FILE | INTERFACE ] [ NETNS ]
+
+ CONFIG_FILE is a configuration file, whose filename is the interface name
+ followed by \`.conf'. Otherwise, INTERFACE is an interface name, with
+
+@@ -462,9 +504,11 @@
+ cmd_up() {
+ local i
+ [[ -z $(ip link show dev "$INTERFACE" 2>/dev/null) ]] || die "\`$INTERFACE' already exists"
++ ensure_netns
+ trap 'del_if; exit' INT TERM EXIT
+ add_if
+ execute_hooks "${PRE_UP[@]}"
++ move_to_netns
+ set_config
+ for i in "${ADDRESSES[@]}"; do
+ add_addr "$i"
+@@ -503,16 +547,28 @@
+ if [[ $# -eq 1 && ( $1 == --help || $1 == -h || $1 == help ) ]]; then
+ cmd_usage
+ elif [[ $# -eq 2 && $1 == up ]]; then
++ auto_su
++ parse_options "$2"
++ cmd_up
++elif [[ $# -eq 3 && $1 == up ]]; then
+ auto_su
+ parse_options "$2"
++ NETNS="$3"
+ cmd_up
+ elif [[ $# -eq 2 && $1 == down ]]; then
++ auto_su
++ parse_options "$2"
++ cmd_down
++elif [[ $# -eq 3 && $1 == down ]]; then
+ auto_su
+ parse_options "$2"
++ NETNS="$3"
+ cmd_down
+ elif [[ $# -eq 2 && $1 == save ]]; then
+ auto_su
+ parse_options "$2"
+ cmd_save
+ elif [[ $# -eq 2 && $1 == strip ]]; then
++ auto_su
+ parse_options "$2"
+ cmd_strip
+ else
diff --git a/wg-quick b/wg-quick
index 93df80d..1325109 100755
--- a/wg-quick
+++ b/wg-quick
@@ -26,12 +26,26 @@ SAVE_CONFIG=0
CONFIG_FILE=""
PROGRAM="${0##*/}"
ARGS=( "$@" )
+NETNS=""
cmd() {
echo "[#] $*" >&2
"$@"
}
+ensure_netns() {
+ [[ -z $NETNS ]] && return 0
+ if [[ ! -e /run/netns/$NETNS ]]; then
+ cmd ip netns add "$NETNS"
+ fi
+}
+
+move_to_netns() {
+ [[ -z $NETNS ]] && return 0
+ cmd ip link set "$INTERFACE" netns "$NETNS"
+}
+
+
die() {
echo "$PROGRAM: $*" >&2
exit 1
@@ -153,6 +167,16 @@ resolvconf_iface_prefix() {
HAVE_SET_DNS=0
set_dns() {
[[ ${#DNS[@]} -gt 0 ]] || return 0
+ if [[ -n $NETNS ]]; then
+ local netns_resolv_dir="/etc/netns/$NETNS"
+ cmd mkdir -p "$netns_resolv_dir"
+ # TODO make this not jank
+ { printf 'nameserver %s\n' "${DNS[@]}"
+ [[ ${#DNS_SEARCH[@]} -eq 0 ]] || printf 'search %s\n' "${DNS_SEARCH[*]}"
+ } | cmd tee "$netns_resolv_dir/resolv.conf" > /dev/null
+ HAVE_SET_DNS=1
+ return 0
+ fi
{ printf 'nameserver %s\n' "${DNS[@]}"
[[ ${#DNS_SEARCH[@]} -eq 0 ]] || printf 'search %s\n' "${DNS_SEARCH[*]}"
} | cmd resolvconf -a "$(resolvconf_iface_prefix)$INTERFACE" -m 0 -x
@@ -161,6 +185,11 @@ set_dns() {
unset_dns() {
[[ ${#DNS[@]} -gt 0 ]] || return 0
+ if [[ -n $NETNS ]]; then
+ local netns_resolv="/etc/netns/$NETNS/resolv.conf"
+ [[ -f $netns_resolv ]] && cmd rm -f "$netns_resolv"
+ return 0
+ fi
cmd resolvconf -d "$(resolvconf_iface_prefix)$INTERFACE" -f
}
@@ -170,11 +199,19 @@ add_route() {
[[ $TABLE != off ]] || return 0
if [[ -n $TABLE && $TABLE != auto ]]; then
- cmd ip $proto route add "$1" dev "$INTERFACE" table "$TABLE"
+ if [[ -n $NETNS ]]; then
+ cmd ip -n "$NETNS" $proto route add "$1" dev "$INTERFACE" table "$TABLE"
+ else
+ cmd ip $proto route add "$1" dev "$INTERFACE" table "$TABLE"
+ fi
elif [[ $1 == */0 ]]; then
add_default "$1"
else
- [[ -n $(ip $proto route show dev "$INTERFACE" match "$1" 2>/dev/null) ]] || cmd ip $proto route add "$1" dev "$INTERFACE"
+ if [[ -n $NETNS ]]; then
+ [[ -n $(ip -n "$NETNS" $proto route show dev "$INTERFACE" match "$1" 2>/dev/null) ]] || cmd ip -n "$NETNS" $proto route add "$1" dev "$INTERFACE"
+ else
+ [[ -n $(ip $proto route show dev "$INTERFACE" match "$1" 2>/dev/null) ]] || cmd ip $proto route add "$1" dev "$INTERFACE"
+ fi
fi
}
@@ -298,7 +335,7 @@ execute_hooks() {
cmd_usage() {
cat >&2 <<-_EOF
- Usage: $PROGRAM [ up | down | save | strip ] [ CONFIG_FILE | INTERFACE ]
+ Usage: $PROGRAM [ up | down | save | strip ] [ CONFIG_FILE | INTERFACE ] [ NETNS ]
CONFIG_FILE is a configuration file, whose filename is the interface name
followed by \`.conf'. Otherwise, INTERFACE is an interface name, with
@@ -326,9 +363,11 @@ cmd_usage() {
cmd_up() {
local i
[[ -z $(ip link show dev "$INTERFACE" 2>/dev/null) ]] || die "\`$INTERFACE' already exists"
+ ensure_netns
trap 'del_if; exit' INT TERM EXIT
add_if
execute_hooks "${PRE_UP[@]}"
+ move_to_netns
set_config
for i in "${ADDRESSES[@]}"; do
add_addr "$i"
@@ -365,13 +404,19 @@ cmd_strip() {
if [[ $# -eq 1 && ( $1 == --help || $1 == -h || $1 == help ) ]]; then
cmd_usage
-elif [[ $# -eq 2 && $1 == up ]]; then
+elif [[ $# -ge 2 && $1 == up ]]; then
auto_su
parse_options "$2"
+ if [[ $# -eq 3 ]]; then
+ NETNS="$3"
+ fi
cmd_up
-elif [[ $# -eq 2 && $1 == down ]]; then
+elif [[ $# -ge 2 && $1 == down ]]; then
auto_su
parse_options "$2"
+ if [[ $# -eq 3 ]]; then
+ NETNS="$3"
+ fi
cmd_down
elif [[ $# -eq 2 && $1 == save ]]; then
auto_su