#!/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 " } set_table_thresholds() { local ip_type=$1 local arp_value=$2 local softmax=$((arp_value / 2)); local 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 } syntax_arp_param () { local arp_type=$1 local arp_value=$2 local ip_type=$3 case "$arp_type" in table-size) local allowed_values=(1024 2048 4096 8192 16384 32768) local i for i in ${allowed_values[@]}; do if [[ "$i" == "$arp_value" ]]; then exit 0 fi done echo "Allowed values for ARP table-size - ${allowed_values[*]}" exit 1 ;; *) echo Invalid arp parameter $arp_type to set exit 1 ;; esac } update_arp_param () { local arp_type=$1 local arp_value=$2 local ip_type=$3 case "$arp_type" in table-size) set_table_thresholds $ip_type $arp_value ;; *) 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 ;; *) print_usage exit 1 ;; esac exit 0 # end of file