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