From 0f6364ac757bbdd02fe0e1577edebc2bd6198221 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Sun, 10 Jul 2011 21:49:44 +0100 Subject: [PATCH] functions.m4: Set IPv6 options in setopt and setdevopt. Also allow selection of interfaces in setdevopt. We don't need this yet, but it will allow selective enabling of reverse-path filtering and similar should that turn out to be useful. --- functions.m4 | 45 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/functions.m4 b/functions.m4 index ca4519e..c0cd0b3 100644 --- a/functions.m4 +++ b/functions.m4 @@ -108,19 +108,50 @@ m4_divert(24)m4_dnl ## Set an IP sysctl. setopt () { set -e - opt=$1; shift; val=$* - run sysctl -q net/ipv4/$opt="$val" + opt=$1 val=$2 + any=nil + for ver in ipv4 ipv6; do + if [ -f /proc/sys/net/$ver/$opt ]; then + run sysctl -q net/$ver/$opt="$val" + any=t + fi + done + case $any in + nil) echo >&2 "$0: unknown IP option $opt"; exit 1 ;; + esac } -## setdevopt OPTION VALUE +## setdevopt OPTION VALUE [INTERFACES ...] ## ## Set an IP interface-level sysctl. setdevopt () { set -e - opt=$1; shift; val=$* - for i in /proc/sys/net/ipv4/conf/*; do - [ -f $i/$opt ] && - run sysctl -q net/ipv4/conf/${i#/proc/sys/net/ipv4/conf/}/$opt="$val" + opt=$1 val=$2; shift 2 + case "$#,$1" in + 0, | 1,all) + set -- $( + seen=: + for ver in ipv4 ipv6; do + cd /proc/sys/net/$ver/conf + for i in *; do + [ -f $i/$opt ] || continue + case "$seen" in (*:$i:*) continue ;; esac + echo $i + done + done) + ;; + esac + for i in "$@"; do + any=nil + for ver in ipv4 ipv6; do + if [ -f /proc/sys/net/$ver/conf/$i/$opt ]; then + any=t + run sysctl -q net/ipv4/conf/$i/$opt="$val" + fi + done + case $any in + nil) echo >&2 "$0: unknown device option $opt"; exit 1 ;; + esac done } -- 2.11.0