From efaad3c5b85e2d00fcc1e875f30c82862c7204af Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sat, 23 Nov 2024 18:54:18 +0100 Subject: [PATCH 1/6] board/common: misc shellcheck fixes Signed-off-by: Joachim Wiberg --- board/common/qemu/qemu.sh | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/board/common/qemu/qemu.sh b/board/common/qemu/qemu.sh index 3813d4b4..115a21bb 100755 --- a/board/common/qemu/qemu.sh +++ b/board/common/qemu/qemu.sh @@ -17,9 +17,10 @@ # # ./qemu.sh -h # +# shellcheck disable=SC3037 # Local variables -imgdir=$(readlink -f $(dirname "$0")) +imgdir=$(readlink -f "$(dirname "$0")") prognm=$(basename "$0") usage() @@ -54,19 +55,20 @@ die() load_qemucfg() { - local tmp=$(mktemp -p /tmp) + tmp=$(mktemp -p /tmp) - grep ^CONFIG_QEMU_ $1 >$tmp - . $tmp - rm $tmp + grep ^CONFIG_QEMU_ "$1" >"$tmp" + # shellcheck disable=SC1090 + . "$tmp" + rm "$tmp" [ "$CONFIG_QEMU_MACHINE" ] || die "Missing QEMU_MACHINE" [ "$CONFIG_QEMU_ROOTFS" ] || die "Missing QEMU_ROOTFS" - [ "$CONFIG_QEMU_KERNEL" -a "$CONFIG_QEMU_BIOS" ] \ + [ -n "$CONFIG_QEMU_KERNEL" ] && [ -n "$CONFIG_QEMU_BIOS" ] \ && die "QEMU_KERNEL conflicts with QEMU_BIOS" - [ ! "$CONFIG_QEMU_KERNEL" -a ! "$CONFIG_QEMU_BIOS" ] \ + [ -z "$CONFIG_QEMU_KERNEL" ] && [ -z "$CONFIG_QEMU_BIOS" ] \ && die "QEMU_KERNEL or QEMU_BIOS must be set" } @@ -93,7 +95,7 @@ append_args() if [ "$CONFIG_QEMU_ROOTFS_INITRD" = "y" ]; then # Size of initrd, rounded up to nearest kb - local size=$((($(stat -c %s $CONFIG_QEMU_ROOTFS) + 1023) >> 10)) + size=$((($(stat -c %s "$CONFIG_QEMU_ROOTFS") + 1023) >> 10)) echo -n "root=/dev/ram0 ramdisk_size=${size} " elif [ "$CONFIG_QEMU_ROOTFS_VSCSI" = "y" ]; then echo -n "root=PARTLABEL=primary " @@ -198,8 +200,8 @@ host_args() net_dev_args() { - local name="e$1" - local mac=$(printf "02:00:00:00:00:%02x" $1) + name="e$1" + mac=$(printf "02:00:00:00:00:%02x" "$1") echo -n "-device $CONFIG_QEMU_NET_MODEL,netdev=$name,mac=$mac " echo "$name $mac" >>"$mactab" @@ -216,14 +218,12 @@ net_args() echo -n "-netdev bridge,id=e1,br=$CONFIG_QEMU_NET_BRIDGE_DEV " net_dev_args 1 elif [ "$CONFIG_QEMU_NET_TAP" = "y" ]; then - for i in $(seq 1 $(($CONFIG_QEMU_NET_TAP_N))); do + for i in $(seq 1 "$CONFIG_QEMU_NET_TAP_N"); do echo -n "-netdev tap,id=e$i,ifname=qtap$i " - net_dev_args $i + net_dev_args "$i" done elif [ "$CONFIG_QEMU_NET_USER" = "y" ]; then - local useropts= [ "$CONFIG_QEMU_NET_USER_OPTS" ] && useropts=",$CONFIG_QEMU_NET_USER_OPTS" - echo -n "-netdev user,id=e1${useropts} " net_dev_args 1 else @@ -301,8 +301,7 @@ run_qemu() fi fi - local qemu - read qemu < Date: Sat, 23 Nov 2024 18:55:30 +0100 Subject: [PATCH 2/6] board/common: initial rocker switch support Fix #540 Signed-off-by: Joachim Wiberg --- board/common/qemu/Config.in.in | 10 +++++++- board/common/qemu/qemu.sh | 44 ++++++++++++++++++++++++++++------ board/x86_64/linux_defconfig | 3 +++ 3 files changed, 49 insertions(+), 8 deletions(-) diff --git a/board/common/qemu/Config.in.in b/board/common/qemu/Config.in.in index 4e9f7c0c..11268ae3 100644 --- a/board/common/qemu/Config.in.in +++ b/board/common/qemu/Config.in.in @@ -189,7 +189,7 @@ config QEMU_CLOCK comment "Networking" choice - prompt "Mode" + prompt "Network Mode" default QEMU_NET_USER config QEMU_NET_NONE @@ -204,6 +204,9 @@ config QEMU_NET_USER config QEMU_NET_TAP bool "TAP" +config QEMU_NET_ROCKER + bool "Rocker" + endchoice config QEMU_NET_MODEL @@ -229,3 +232,8 @@ config QEMU_NET_TAP_N int "Number of TAPs" depends on QEMU_NET_TAP default 1 + +config QEMU_NET_PORTS + int "Number of Rocker switch ports" + depends on QEMU_NET_ROCKER + default 10 diff --git a/board/common/qemu/qemu.sh b/board/common/qemu/qemu.sh index 115a21bb..ac562db3 100755 --- a/board/common/qemu/qemu.sh +++ b/board/common/qemu/qemu.sh @@ -207,6 +207,17 @@ net_dev_args() echo "$name $mac" >>"$mactab" } +rocker_port_args() +{ + sw=$1 + port=$2 + name="sw${sw}p${port}" + mac=$(printf "02:00:00:00:%02x:%02x" "$sw" "$port") + + echo -n "-netdev tap,id=$name,ifname=$name,script=no,downscript=no " + echo "$name $mac" >> "$mactab" +} + net_args() { # Infix will pick up this file via fwcfg and install it to /etc @@ -222,6 +233,19 @@ net_args() echo -n "-netdev tap,id=e$i,ifname=qtap$i " net_dev_args "$i" done + elif [ "$CONFIG_QEMU_NET_ROCKER" = "y" ]; then + sw=sw0 # Only single switch support atm. + echo -n "-device '{\"driver\":\"rocker\", \"name\":\"${sw}\", " + echo -n "\"fp_start_macaddr\":\"02:00:00:00:00:01\", " + echo -n "\"ports\":[" + for i in $(seq 1 "$CONFIG_QEMU_NET_PORTS"); do + [ "$i" -gt 1 ] && echo -n ", " + echo -n "\"${sw}p${i}\"" + done + echo -n "]}' " + for i in $(seq 1 "$CONFIG_QEMU_NET_PORTS"); do + rocker_port_args 0 "$i" + done elif [ "$CONFIG_QEMU_NET_USER" = "y" ]; then [ "$CONFIG_QEMU_NET_USER_OPTS" ] && useropts=",$CONFIG_QEMU_NET_USER_OPTS" echo -n "-netdev user,id=e1${useropts} " @@ -316,18 +340,24 @@ run_qemu() $(gdb_args) \ $CONFIG_QEMU_EXTRA EOF + # Save resulting command to a script, because I cannot for the life + # of me figure out how to embed the JSON snippet for Rocker and run + # it here without issues, spent way too much time on it -- Joachim + run=$(mktemp -t run.qemu.XXX) + echo "#!/bin/sh" > "$run" + if [ "$CONFIG_QEMU_KERNEL" ]; then + echo "$qemu -append \"$(append_args)\" $*" >> "$run" + else + echo "$qemu $*" >> "$run" + fi + chmod +x "$run" echo "Starting Qemu :: Ctrl-a x -- exit | Ctrl-a c -- toggle console/monitor" line=$(stty -g) stty raw - - if [ "$CONFIG_QEMU_KERNEL" ]; then - $qemu -append "$(append_args)" "$@" - else - $qemu "$@" - fi - + $run stty "$line" + rm "$run" } dtb_args() diff --git a/board/x86_64/linux_defconfig b/board/x86_64/linux_defconfig index 68ff214c..675ff999 100644 --- a/board/x86_64/linux_defconfig +++ b/board/x86_64/linux_defconfig @@ -161,12 +161,14 @@ CONFIG_MPLS=y CONFIG_NET_MPLS_GSO=y CONFIG_MPLS_ROUTING=m CONFIG_MPLS_IPTUNNEL=m +CONFIG_NET_SWITCHDEV=y CONFIG_NET_PKTGEN=y # CONFIG_WIRELESS is not set CONFIG_NET_9P=y CONFIG_NET_9P_VIRTIO=y CONFIG_LWTUNNEL=y CONFIG_PCI=y +CONFIG_PCI_MSI=y CONFIG_UEVENT_HELPER=y CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" CONFIG_DEVTMPFS=y @@ -208,6 +210,7 @@ CONFIG_NET_VRF=y CONFIG_E1000=y CONFIG_NE2K_PCI=y CONFIG_8139CP=y +CONFIG_ROCKER=y # CONFIG_WLAN is not set CONFIG_INPUT_EVDEV=y CONFIG_SERIAL_8250=y From c8046bfbdac646a22689089e05b8ef228eacb7d1 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 24 Nov 2024 20:35:54 +0100 Subject: [PATCH 3/6] board/common: add '-k' to keep new qemu.run script after session Signed-off-by: Joachim Wiberg --- board/common/qemu/qemu.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/board/common/qemu/qemu.sh b/board/common/qemu/qemu.sh index ac562db3..4830cb96 100755 --- a/board/common/qemu/qemu.sh +++ b/board/common/qemu/qemu.sh @@ -31,6 +31,7 @@ usage() echo "Options:" echo " -c Run menuconfig to change Qemu settings" echo " -h This help text" + echo " -k Keep generated qemu.run script (name shown at end)" echo echo "Arguments:" echo " ARGS1 Args before the '--' separator are for kernel space" @@ -357,7 +358,11 @@ EOF stty raw $run stty "$line" - rm "$run" + if [ -n "$keep" ]; then + echo "Keeping generated qemu.run script: $run" + else + rm "$run" + fi } dtb_args() @@ -444,6 +449,9 @@ while [ "$1" != "" ]; do -h) usage ;; + -k) + keep=true + ;; *) break esac From f9d21e58394fe28473699a55c807e2f8de91bd92 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sat, 23 Nov 2024 19:50:24 +0100 Subject: [PATCH 4/6] board/common: trick pager into using line drawing charachters This fixes a regression in v24.11.0, introduced in 46dd0c7, where line drawing characters are not properly displayed in the CLI anymore. admin@infix:/> show interfaces INTERFACE PROTOCOL STATE DATA lo ethernet UP 00:00:00:00:00:00 ipv4 127.0.0.1/8 (static) ipv6 ::1/128 (static) br0 bridge <94><82> ethernet UP 02:00:00:00:00:00 <94><82> ipv4 169.254.1.3/16 (random) <94><82> ipv6 fe80::ff:fe00:0/64 (link-layer) <94><9C> swp1 bridge FORWARDING <94><9C> swp2 bridge FORWARDING <94><9C> swp3 bridge FORWARDING <94><9C> swp4 bridge FORWARDING <94><9C> swp5 bridge FORWARDING <94><9C> swp6 bridge FORWARDING <94><9C> swp7 bridge FORWARDING <94><9C> swp8 bridge FORWARDING <94><9C> swp9 bridge FORWARDING <94><94> swp10 bridge FORWARDING This is because the raw tty from klish disables IUTF8 and the fact that it does not source any environment, e.g., /etc/profile. (We do not have any locale settings in the enviornment either, but that's a discussion for another day.) Signed-off-by: Joachim Wiberg --- board/common/rootfs/usr/bin/pager | 2 ++ 1 file changed, 2 insertions(+) diff --git a/board/common/rootfs/usr/bin/pager b/board/common/rootfs/usr/bin/pager index d307f92b..d60c8137 100755 --- a/board/common/rootfs/usr/bin/pager +++ b/board/common/rootfs/usr/bin/pager @@ -10,4 +10,6 @@ # This is what leaves the contents of the output on screen. export LESS="-P %f (press h for help or q to quit)" +export LANG=en_US.UTF-8 + less -RISKd -FX "$@" From df2689ca346fea3cb20bf7faf728eb6ce0f6b5ac Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 24 Nov 2024 20:42:23 +0100 Subject: [PATCH 5/6] board/common: minor fixes to udhcpc.script Signed-off-by: Joachim Wiberg --- board/common/rootfs/usr/share/udhcpc/default.script | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/board/common/rootfs/usr/share/udhcpc/default.script b/board/common/rootfs/usr/share/udhcpc/default.script index 1917e790..d5ec337c 100755 --- a/board/common/rootfs/usr/share/udhcpc/default.script +++ b/board/common/rootfs/usr/share/udhcpc/default.script @@ -50,7 +50,7 @@ set_dhcp_routes() # format: dest1/mask gw1 ... destn/mask gwn set -- $staticroutes while [ -n "$1" -a -n "$2" ]; do - log "adding route $1 via $2 dev $interface proto dhcp" + log "adding route $1 via $2 metric $metric tag 100" echo "ip route $1 $2 $metric tag 100" >> "$NEXT" shift 2 done @@ -115,7 +115,7 @@ case "$ACTION" in /usr/sbin/avahi-autoipd -c $interface && /usr/sbin/avahi-autoipd -k $interface fi - if /bin/ip addr add dev $interface $ip/$subnet $BROADCAST proto 5; then + if /bin/ip addr add dev $interface $ip/$subnet $BROADCAST proto dhcp; then echo "$ip" > "$IP_CACHE" fi if [ -n "$ipv6" ] ; then From 0160fd539e2c94f2e66b4b06a5b2a069e515231f Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 24 Nov 2024 20:43:28 +0100 Subject: [PATCH 6/6] package/skeleton-init-finit: ensure zebra+ospfd log to syslog Fix lack of syslog messages from Zebra and add support to easily enable debug logs for common Zebra subsystems. Same change made to ospfd for symmetry. Signed-off-by: Joachim Wiberg --- board/common/rootfs/etc/default/ospfd | 2 ++ board/common/rootfs/etc/default/zebra | 2 ++ .../skeleton/etc/finit.d/available/frr/ospfd.conf | 3 ++- .../skeleton/etc/finit.d/available/frr/zebra.conf | 3 ++- 4 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 board/common/rootfs/etc/default/ospfd create mode 100644 board/common/rootfs/etc/default/zebra diff --git a/board/common/rootfs/etc/default/ospfd b/board/common/rootfs/etc/default/ospfd new file mode 100644 index 00000000..38021e3b --- /dev/null +++ b/board/common/rootfs/etc/default/ospfd @@ -0,0 +1,2 @@ +# --log-level debug +OSPFD_ARGS="-A 127.0.0.1 -u frr -g frr -f /etc/frr/ospfd.conf --log syslog" diff --git a/board/common/rootfs/etc/default/zebra b/board/common/rootfs/etc/default/zebra new file mode 100644 index 00000000..5ce4e34c --- /dev/null +++ b/board/common/rootfs/etc/default/zebra @@ -0,0 +1,2 @@ +# --log-level debug +ZEBRA_ARGS="-A 127.0.0.1 -u frr -g frr --log syslog " diff --git a/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/ospfd.conf b/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/ospfd.conf index b7757581..e4652ff1 100644 --- a/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/ospfd.conf +++ b/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/ospfd.conf @@ -1 +1,2 @@ -service [2345] log:null ospfd -A 127.0.0.1 -u frr -g frr -f /etc/frr/ospfd.conf -- OSPF daemon +service env:-/etc/default/ospfd \ + [2345] ospfd $OSPFD_ARGS -- OSPF daemon diff --git a/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/zebra.conf b/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/zebra.conf index 85aa22fd..45d39484 100644 --- a/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/zebra.conf +++ b/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/zebra.conf @@ -1 +1,2 @@ -service [2345] pid:!/run/frr/zebra.pid zebra -A 127.0.0.1 -u frr -g frr -- Zebra routing daemon +service pid:!/run/frr/zebra.pid env:-/etc/default/zebra \ + [2345] zebra $ZEBRA_ARGS -- Zebra routing daemon