Files

78 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
PROGNAME="$0"
LINES="$1"
COLUMNS="$2"
if [[ "$2" = "" ]]
then
echo "Usage: $0 <LINES> <COLUMNS>"
exit 1
fi
OS=$(uname)
MAGIC_VALUE_LINUX=$(((COLUMNS*28+12)*LINES+36))
linux_min_vals() {
cat << EOF
net.core.wmem_max $MAGIC_VALUE_LINUX
net.core.wmem_default $MAGIC_VALUE_LINUX
EOF
}
MAGIC_VALUE_FREEBSD=16777216
freebsd_min_vals() {
cat << EOF
net.local.dgram.recvspace $MAGIC_VALUE_FREEBSD
net.local.dgram.maxdgram $MAGIC_VALUE_FREEBSD
net.local.seqpacket.recvspace $MAGIC_VALUE_FREEBSD
net.local.seqpacket.maxseqpacket $MAGIC_VALUE_FREEBSD
kern.ipc.maxsockbuf $((4*MAGIC_VALUE_FREEBSD))
EOF
}
list_fixup_commands() {
while read -r param min_value
do
cur_val=$(sysctl -n "$param")
if [[ "$cur_val" -lt "$min_value" ]]
then
echo "$PROGNAME -- $ sudo sysctl $param=$min_value"
fi
done
}
echo
echo "$PROGNAME -- Detected OS: $OS"
case "$OS" in
"Linux")
fixup_commands="$(linux_min_vals | list_fixup_commands)"
;;
"FreeBSD")
fixup_commands="$(freebsd_min_vals | list_fixup_commands)"
;;
*)
echo "$PROGNAME -- Sorry, the program has not been designed or tested for your OS!"
exit 1 # failed, unknown OS
esac
if [[ -z "$fixup_commands" ]]
then
echo "$PROGNAME -- Checking IPC parameters... OK!"
echo
exit # script was successful
else
cat << EOF
$PROGNAME -- Checking IPC parameters... FAILED!
$PROGNAME -- Program compiled as ${COLUMNS}x${LINES} needs higher default IPC parameters.
$PROGNAME -- Please run:
$fixup_commands
EOF
exit 2 # failed, OS needs higher IPC parameter values.
fi