statd: refactor to autotools, same as confd

Fix issue #299

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg
2024-02-27 08:14:41 +01:00
parent 5762a73c45
commit b0b1a79aa5
15 changed files with 131 additions and 84 deletions
@@ -1,36 +0,0 @@
#!/usr/bin/env python3
import subprocess
import sys
import json
def get_ethtool_output(interface):
try:
output = subprocess.check_output(['ethtool', interface], stderr=subprocess.DEVNULL, text=True)
return output.splitlines()
except subprocess.CalledProcessError:
print("Error: Failed to run ethtool on interface", interface)
sys.exit(1)
def parse_ethtool_output(lines, keys):
result = {}
for line in lines:
line = line.strip()
key = line.split(':', 1)[0].strip()
if key in keys:
key, value = line.split(':', 1)
result[key.strip()] = value.strip()
return result
if __name__ == "__main__":
if len(sys.argv) != 2:
print(f"Usage: {sys.argv[0]} INTERFACE")
sys.exit(1)
interface = sys.argv[1]
keys = ["Duplex", "Auto-negotiation"]
lines = get_ethtool_output(interface)
parsed_data = parse_ethtool_output(lines, keys)
print(json.dumps(parsed_data, indent=4))
+3 -10
View File
@@ -11,20 +11,13 @@ STATD_LICENSE = BSD-3-Clause
STATD_LICENSE_FILES = LICENSE
STATD_REDISTRIBUTE = NO
STATD_DEPENDENCIES = sysrepo libev libsrx jansson
STATD_AUTORECONF = YES
define STATD_CONF_ENV
CFLAGS="$(INFIX_CFLAGS)"
endef
define STATD_BUILD_CMDS
$(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \
LDFLAGS="$(TARGET_LDFLAGS)"
endef
define STATD_INSTALL_TARGET_CMDS
$(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) \
DESTDIR="$(TARGET_DIR)" install
endef
STATD_CONF_OPTS = --prefix= --disable-silent-rules
define STATD_INSTALL_EXTRA
cp $(STATD_PKGDIR)/statd.conf $(FINIT_D)/available/
@@ -32,4 +25,4 @@ define STATD_INSTALL_EXTRA
endef
STATD_TARGET_FINALIZE_HOOKS += STATD_INSTALL_EXTRA
$(eval $(generic-package))
$(eval $(autotools-package))
+6 -6
View File
@@ -274,9 +274,9 @@
sysrepocfg -d operational -X -f json -x /ietf-system:system-state/infix-system:software | \
jq -r '.[][].slot |= sort_by(.name)' > "$tmp"
if [ -n "$KLISH_PARAM_name" ]; then
cat "$tmp" | /libexec/infix/cli-pretty "infix-system" -n "$KLISH_PARAM_name"
cat "$tmp" | /usr/libexec/statd/cli-pretty "infix-system" -n "$KLISH_PARAM_name"
else
cat "$tmp" | /libexec/infix/cli-pretty "infix-system"
cat "$tmp" | /usr/libexec/statd/cli-pretty "infix-system"
fi
rm "$tmp"
</ACTION>
@@ -323,14 +323,14 @@
fi
fi
sysrepocfg -f json -X -d operational -x "/ietf-routing:routing/ribs" | \
/libexec/infix/cli-pretty "ietf-routing" -n "$KLISH_PARAM_name"
/usr/libexec/statd/cli-pretty "ietf-routing" -n "$KLISH_PARAM_name"
</ACTION>
</COMMAND>
<COMMAND name="hardware" help="Show hardware information">
<ACTION sym="script">
sysrepocfg -f json -X -d operational -x "/ietf-hardware:hardware" | \
/libexec/infix/cli-pretty "ietf-hardware"
/usr/libexec/statd/cli-pretty "ietf-hardware"
</ACTION>
</COMMAND>
@@ -346,10 +346,10 @@
if [ -n "$KLISH_PARAM_name" ]; then
sysrepocfg -f json -X -d operational -x \
"/ietf-interfaces:interfaces/interface[name='$KLISH_PARAM_name']" | \
/libexec/infix/cli-pretty "ietf-interfaces" -n "$KLISH_PARAM_name"
/usr/libexec/statd/cli-pretty "ietf-interfaces" -n "$KLISH_PARAM_name"
else
sysrepocfg -f json -X -d operational -m ietf-interfaces | \
/libexec/infix/cli-pretty "ietf-interfaces"
/usr/libexec/statd/cli-pretty "ietf-interfaces"
fi
</ACTION>
</COMMAND>
+25
View File
@@ -1,3 +1,28 @@
*~
*.o
statd
/aclocal.m4
/autom4te.cache/
/aux
/clixon.xml
/compile
/config.h
/config.h.in
/config.guess
/config.log
/config.status
/config.sub
/configure
/depcomp
/install-sh
/libtool
/ltmain.sh
/m4
/missing
GPATH
GRTAGS
GTAGS
Makefile
Makefile.in
-27
View File
@@ -1,27 +0,0 @@
CFLAGS += -Wall -Wextra -Werror
CPPFLAGS += -D_GNU_SOURCE
LDLIBS += -lsysrepo -lev -lyang -ljansson -lsrx -lite
TARGET = statd
HEADERS = shared.h
SRC = statd.c shared.c
OBJ = $(SRC:.c=.o)
all: $(TARGET)
.c.o:
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
$(OBJ): $(SRC) $(HEADERS)
$(TARGET): $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS)
clean:
-rm -f $(TARGET) $(OBJ)
distclean: clean
-rm *~
install: $(TARGET)
install -D $(TARGET) $(DESTDIR)/sbin/
+13
View File
@@ -0,0 +1,13 @@
DISTCLEANFILES = *~ *.d
ACLOCAL_AMFLAGS = -I m4
pkglibexec_SCRIPTS = cli-pretty yanger ospf-status
sbin_PROGRAMS = statd
statd_SOURCES = statd.c shared.c shared.h
statd_CPPFLAGS = -D_DEFAULT_SOURCE -D_GNU_SOURCE
statd_CFLAGS = -W -Wall -Wextra
statd_CFLAGS += $(jansson_CFLAGS) $(libite_CFLAGS) $(libyang_CFLAGS)
statd_CFLAGS += $(sysrepo_CFLAGS) $(libsrx_CFLAGS)
statd_LDADD = $(jansson_LIBS) $(libite_LIBS) $(libyang_LIBS)
statd_LDADD += $(sysrepo_LIBS) $(libsrx_LIBS)
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
autoreconf -W portability -vifm
+76
View File
@@ -0,0 +1,76 @@
AC_PREREQ(2.61)
AC_INIT([statd], [1.0.0], [https://github.com/kernelkit/infix/issues])
AM_INIT_AUTOMAKE(1.11 foreign subdir-objects)
AM_SILENT_RULES(yes)
AC_CONFIG_FILES([
Makefile
])
AC_PROG_CC
AC_PROG_INSTALL
# Check for pkg-config first, warn if it's not installed
PKG_PROG_PKG_CONFIG
PKG_CHECK_MODULES([jansson], [jansson >= 2.0.0])
PKG_CHECK_MODULES([libite], [libite >= 2.5.0])
PKG_CHECK_MODULES([libyang], [libyang >= 2.1.80])
PKG_CHECK_MODULES([sysrepo], [sysrepo >= 2.2.36])
PKG_CHECK_MODULES([libsrx], [libsrx >= 1.0.0])
AC_CHECK_HEADER([ev.h],
[AC_CHECK_LIB([ev], [ev_loop_new],
[],
[AC_MSG_ERROR("libev not found")] )],
[AC_MSG_ERROR("ev.h not found")]
)
test "x$prefix" = xNONE && prefix=$ac_default_prefix
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
DATAROOTDIR=`eval echo $datarootdir`
DATAROOTDIR=`eval echo $DATAROOTDIR`
AC_SUBST(DATAROOTDIR)
LIBDIR=`eval echo $libdir`
LIBDIR=`eval echo $LIBDIR`
AC_SUBST(LIBDIR)
LOCALSTATEDIR=`eval echo $localstatedir`
LOCALSTATEDIR=`eval echo $LOCALSTATEDIR`
AC_SUBST(LOCALSTATEDIR)
RUNSTATEDIR=`eval echo $runstatedir`
RUNSTATEDIR=`eval echo $RUNSTATEDIR`
AC_SUBST(RUNSTATEDIR)
SYSCONFDIR=`eval echo $sysconfdir`
SYSCONFDIR=`eval echo $SYSCONFDIR`
AC_SUBST(SYSCONFDIR)
AC_OUTPUT
cat <<EOF
------------------ Summary ------------------
$PACKAGE_NAME version $PACKAGE_VERSION
Prefix................: $prefix
Exec prefix...........: $eprefix
Sysconfdir............: `eval echo $sysconfdir`
Localstatedir.........: `eval echo $localstatedir`
Default fstab.........: `eval echo $fstab`
System environment....: ${sysconfig_path:-${sysconfig}}
C Compiler............: $CC $CFLAGS $CPPFLAGS $LDFLAGS $LIBS
Linker................: $LD $LLDP_LDFLAGS $LLDP_BIN_LDFLAGS $LDFLAGS $LIBS
------------- Compiler version --------------
$($CC --version || true)
-------------- Linker version ---------------
$($LD --version || true)
---------------------------------------------
Check the above options and compile with:
${MAKE-make}
EOF
+1 -1
View File
@@ -134,7 +134,7 @@ static int ly_add_yanger_data(const struct ly_ctx *ctx, struct lyd_node **parent
const char *model, const char *arg)
{
char *yanger_args[5] = {
"/libexec/infix/yanger",
"/usr/libexec/statd/yanger",
(char *)model,
NULL,
NULL,
@@ -330,7 +330,7 @@ def add_ospf_routes(ospf):
def add_ospf(ospf):
"""Populate OSPF status"""
cmd = ['/libexec/infix/ospf-status']
cmd = ['/usr/libexec/statd/ospf-status']
data = run_json_cmd(cmd, "")
ospf["ietf-ospf:router-id"] = data["routerId"]
+1 -1
View File
@@ -4,7 +4,7 @@ SCRIPT_PATH="$(dirname "$(readlink -f "$0")")"
ROOT_PATH="$SCRIPT_PATH/../../../"
CLI_OUTPUT_PATH="$SCRIPT_PATH/cli-output/"
CLI_PRETTY_TOOL="$ROOT_PATH/board/netconf/rootfs/libexec/infix/cli-pretty"
CLI_PRETTY_TOOL="$ROOT_PATH/src/statd/cli-pretty"
SR_EMULATOR_TOOL="$SCRIPT_PATH/sysrepo-emulator.sh"
CLI_OUTPUT_FILE="$(mktemp)"
+1 -1
View File
@@ -3,7 +3,7 @@
SCRIPT_PATH="$(dirname "$(readlink -f "$0")")"
ROOT_PATH="$SCRIPT_PATH/../../../"
YANGER_TOOL="$ROOT_PATH/board/netconf/rootfs/libexec/infix/yanger"
YANGER_TOOL="$ROOT_PATH/src/statd/yanger"
INTERFACES="br0 br1 e0 e1 e2 e3 e4"
+1 -1
View File
@@ -18,7 +18,7 @@ if [ ! -e "$SCRIPT_PATH/$json" ]; then
fi
cat "$SCRIPT_PATH/$json" | \
"$SCRIPT_PATH"/../../../board/netconf/rootfs/libexec/infix/cli-pretty \
"$SCRIPT_PATH"/../../../src/statd/cli-pretty \
"$module" $*
if [ $? -eq 0 ]; then
echo "ok 1 - $json printed without crashing"