diff options
Diffstat (limited to 'net/keepalived/files/usr')
-rw-r--r-- | net/keepalived/files/usr/libexec/rpcd/keepalived | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/net/keepalived/files/usr/libexec/rpcd/keepalived b/net/keepalived/files/usr/libexec/rpcd/keepalived new file mode 100644 index 000000000..2ae14f105 --- /dev/null +++ b/net/keepalived/files/usr/libexec/rpcd/keepalived @@ -0,0 +1,96 @@ +#!/bin/sh + +. /lib/functions.sh +. /usr/share/libubox/jshn.sh + +RPC_SCRIPTS=/usr/libexec/keepalived/rpc + +[ -d $RPC_SCRIPTS ] && include $RPC_SCRIPTS + +__function__() { + type "$1" > /dev/null 2>&1 +} + +foreach_extra() { + local file obj + + [ ! -d $RPC_SCRIPTS ] && return + + for file in $RPC_SCRIPTS/*; do + obj="${file##*/}" + $1 "${obj%%.*}" + done +} + +keepalived_dump() { + local stats_file="/tmp/keepalived.json" + local pids + + [ -f "$stats_file" ] && rm -f "$stats_file" + + pids=$(pidof /usr/sbin/keepalived) + if [ -n "$pids" ]; then + kill -37 $pids > /dev/null 2>&1 + json_load "{ \"status\" : $(cat $stats_file) }" + else + json_init + fi + + json_dump +} + +call_extra() { + if __function__ "$1"; then + $1 + else + json_init + json_add_string error "invalid call $1" + json_dump + fi +} + +call_method() { + case "$1" in + dump) + keepalived_dump + ;; + *) + call_extra $1 + ;; + esac +} + +list_extra() { + if __function__ "${1}_help"; then + ${1}_help + else + json_add_object "$1" + json_close_object + fi +} + +list_methods() { + local file + + json_init + + json_add_object dump + json_close_object + + foreach_extra list_extra ${1} + + json_dump +} + +main () { + case "$1" in + list) + list_methods + ;; + call) + call_method $2 + ;; + esac +} + +main "$@" |