#!/bin/bash # # Module: vyatta-update-arp-params # # **** License **** # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # This code was originally developed by Vyatta, Inc. # Portions created by Vyatta are Copyright (C) 2009 Vyatta, Inc. # All Rights Reserved. # # Author: Mohit Mehta # Date: February 2009 # Description: Update [ARP (IPv4)|Neighbor (IPV6)] Parameters # # **** End License **** # # # subroutines # print_usage() { echo "Usage:" echo -e "\t$0 syntax-check " echo -e "\t$0 update " echo -e "\t$0 delete " } syntax_arp_param () { arp_type=$1 arp_value=$2 ip_type=$3 case "$arp_type" in table-size) allowed_values=(1024 2048 4096 8192 16384) allowed_values_len=${#allowed_values[*]} i=0 while [ $i -lt $allowed_values_len ]; do if [ "${allowed_values[$i]}" == "$arp_value" ] ; then exit 0 fi let i++ done echo "Allowed values for ARP table-size - 1024 2048 4096 8192 16384" exit 1 ;; *) echo Invalid arp parameter $arp_type to set exit 1 ;; esac } update_arp_param () { arp_type=$1 arp_value=$2 ip_type=$3 case "$arp_type" in table-size) let softmax=$arp_value\/2; let min=$arp_value\/8; sudo sysctl -q net.$ip_type.neigh.default.gc_thresh3=$arp_value sudo sysctl -q net.$ip_type.neigh.default.gc_thresh2=$softmax sudo sysctl -q net.$ip_type.neigh.default.gc_thresh1=$min ;; *) echo Invalid arp parameter $arp_type to update ;; esac } delete_arp_param () { arp_type=$1 ip_type=$2 case "$arp_type" in table-size) sudo sysctl -q net.$ip_type.neigh.default.gc_thresh3=1024 sudo sysctl -q net.$ip_type.neigh.default.gc_thresh2=512 sudo sysctl -q net.$ip_type.neigh.default.gc_thresh1=128 ;; *) echo Invalid arp parameter $arp_type to update ;; esac } # # main # case "$1" in syntax-check) if [ $# -ne 4 ]; then print_usage exit 1 fi syntax_arp_param $2 $3 $4 ;; update) if [ $# -ne 4 ]; then print_usage exit 1 fi update_arp_param $2 $3 $4 ;; delete) if [ $# -ne 3 ]; then print_usage exit 1 fi delete_arp_param $2 $3 ;; *) print_usage exit 1 ;; esac exit 0 # end of file