text: 
  # hook
  cleanup () { true; }
  
  die()
  {
  	local ret=1
  	trap EXIT
  	cleanup
  	case "$1" in
  		[0-9]) ret="$1"; shift ;;
  	esac
  	[ -z "$@" ] || echo "$@" >&2
  	exit $ret
  }
  
  checkconnactive()
  {
  	[ -z "$1" ] && return 0
  	ipsec auto --status | awk -v var="$1" '
  BEGIN {
  	expr="^000 \"" var "\": "
  	status=1
  }
  $0 ~ expr {
  	gsub("^000 \"","")
  	gsub("\": .*","")
  	status=0
  	exit
  }
  END {
  	exit status
  }
  '
  	return $?
  }
  
  # set $interface, $gateway
  defaultrouteinterface()
  {
  	gateway=
  	interface=
  	while read -a a; do
  		[ "${a[0]}" != "default" ] && continue
  		set -- "${a[@]}"
  		break
  	done < <(ip route show)
  
  	while [ $# -gt 0 ]; do
  		token="$1"
  		shift
  		case "$token" in
  			via)
  				gateway="$1"
  				shift
  			;;
  			dev)
  				interface="$1"
  				shift
  			;;
  		esac
  	done
  }
  
  # set $ip, $mask, $brd for $1
  getfirstipv4addr()
  {
  	iface="$1"
  	ip=
  	mask=
  	brd=
  	[ -z "$iface" ] && return 1
  
  	read -a a < <(ip -o -4 a show dev $iface)
  	set -- "${a[@]}"
  
  	while [ $# -gt 0 ]; do
  		token="$1"
  		shift
  		case "$token" in
  			inet)
  				ip=${1%%/*}
  				mask=${1##*/}
  				shift
  			;;
  
  			brd)
  				brd=${1}
  				shift
  			;;
  		esac
  	done
  
  	return 0
  }
  