Joe, Can you open a Pull Request at https://github.com/FRRouting/frr/pulls for this ? If not, I will take care of it. Thanks, Jafar On 2/28/21 1:57 AM, Joe Maimon wrote:
This is still broken, the patch is quite simple.
I do have an upgraded script which is pretty nice.
Joe Maimon wrote:
Fix is pretty straightforward.
--- a/nhrpd/nhrp_event.c +++ b/nhrpd/nhrp_event.c @@ -59,9 +59,9 @@ buf[len] = 0;
debugf(NHRP_DEBUG_EVENT, "evmgr: msg: %s", buf); - if (sscanf(buf, "eventid=%" SCNu32, &eventid) != 1) + if (sscanf(buf, "eventid=%" SCNu32, &eventid) == 1) continue; - if (sscanf(buf, "result=%63s", result) != 1) + if (sscanf(buf, "result=%63s", result) == 1) continue; } debugf(NHRP_DEBUG_EVENT, "evmgr: received: eventid=%d result=%s",
Fledgling script actually works now, forgive email formatting errors
---------cut here----
#!/bin/bash
PROGNAME=`basename $0` VERSION="0.0.2"
usage() { echo "Usage: $PROGNAME -s nhrp-sock [-i interface-name] [-u user] [-g group] " echo "" echo "-s nhrp-sock file" echo "-i interface-name to execute on, may be repeated multiple times" echo "-u user to own the sock" echo "-g group to own the sock"
exit 1 }
SOCK="/var/run/frr/nhrp.sock" USER="frr" GROUP="frr" j=0
while getopts s:i:u:g: opt; do case "$opt" in s) SOCK="$OPTARG" ;; i) INTARR[((j++))]="$OPTARG" ;; u) USER="$OPTARG" ;; g) GROUP="$OPTARG" ;; esac; done
coproc socat - UNIX-LISTEN:$SOCK,unlink-early,setuid-early=$USER || exit 1 chown $USER:$GROUP $SOCK
OLDIFS="$IFS"
while read -r S; do if [[ "$S" == "" ]]; then if [[ "$EVID" != "" ]]; then echo -e "eventid=$EVID\nresult=accept\n"; fi
for((i=0;i<${#INTARR[@]};i++)); do if [[ "$EVINT" == "" ]]; then break; fi if [[ "${INTARR[$i]}" != "$EVINT" ]]; then continue; fi if [[ "$EVREM" == "" ]]; then break; fi if [[ "$EVNBMA" == "" ]]; then break; fi if [[ "$EVTYPE" != "dynamic" ]]; then break; fi
ip neigh add $EVREM dev $EVINT lladdr $EVNBMA nud noarp if [[ "$?" != "0" ]]; then ip neigh replace $EVREM dev $EVINT lladdr $EVNBMA nud noarp fi break done
unset EVID unset EVINT unset EVREM unset EVNBMA unset EVTYPE continue; fi IFS="${IFS}=" SA=($S) IFS="$OLDIFS" case "${SA[0]}" in eventid) EVID="${SA[1]}" ;; interface) EVINT="${SA[1]}" ;; type) EVTYPE="${SA[1]}" ;; remote_addr) EVREM="${SA[1]}" ;; remote_nbma) EVNBMA="${SA[1]}" ;; esac done <&"${COPROC[0]}" >&"${COPROC[1]}"
kill "$COPROC_PID"
_______________________________________________ frog mailing list frog@lists.frrouting.org https://lists.frrouting.org/listinfo/frog