Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package smc-tools for openSUSE:Factory checked in at 2025-12-11 18:40:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/smc-tools (Old) and /work/SRC/openSUSE:Factory/.smc-tools.new.1939 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "smc-tools" Thu Dec 11 18:40:59 2025 rev:18 rq:1322162 version:1.8.6 Changes: -------- --- /work/SRC/openSUSE:Factory/smc-tools/smc-tools.changes 2025-07-09 17:28:01.266581006 +0200 +++ /work/SRC/openSUSE:Factory/.smc-tools.new.1939/smc-tools.changes 2025-12-11 18:43:54.755955024 +0100 @@ -1,0 +2,19 @@ +Thu Dec 11 09:17:40 UTC 2025 - Nikolay Gueorguiev <[email protected]> + +- Upgrade smc-tools to v1.8.6 (jsc#PED-14601) + * Bug fixes: + - man pages: Update man page for smc_pnet + - smc-tools: Display sndbuf/RMB stats only if supported by the kernel +- smc-tools v1.8.5 includes + * Changes: + - smc_rnics: Add support for Network Express RNIC in smc_rnics + - smc_rnics: Add PFT and VF columns to smc_rnics output + * Bug fixes: + - libnetlink..: Fix function declaration to use a void prototype + - smc_rnics: Update smc_chk to extract PNetID from column 9 + - man pages: Update man page for --rawids option and PFT and VF columns + - smc_rnics: Fix missing PPrt values in smc_rnics -r output +- Removed obsolete patch + * smc-tools-gcc15.patch + +------------------------------------------------------------------- Old: ---- smc-tools-1.8.4.tar.gz smc-tools-gcc15.patch New: ---- smc-tools-1.8.6.tar.gz ----------(Old B)---------- Old:- Removed obsolete patch * smc-tools-gcc15.patch ----------(Old E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ smc-tools.spec ++++++ --- /var/tmp/diff_new_pack.U06soN/_old 2025-12-11 18:43:55.836000403 +0100 +++ /var/tmp/diff_new_pack.U06soN/_new 2025-12-11 18:43:55.860001410 +0100 @@ -1,7 +1,7 @@ # # spec file for package smc-tools # -# Copyright (c) 2024 SUSE LLC +# Copyright (c) 2025 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,17 +17,13 @@ Name: smc-tools -Version: 1.8.4 +Version: 1.8.6 Release: 0 Summary: Shared Memory Communication via RDMA License: EPL-1.0 Group: System/Kernel URL: https://www.ibm.com/developerworks/linux/linux390/smc-tools.html Source: https://github.com/ibm-s390-linux/%{name}/archive/refs/tags/%{version}.tar.gz#/%{name}-%{version}.tar.gz -# https://github.com/ibm-s390-linux/smc-tools/issues/17 -Patch0: smc-tools-gcc15.patch -### Source: https://github.com/ibm-s390-linux/smc-tools/releases/tag/1.8.3.tar.gz - BuildRequires: bash-completion-devel BuildRequires: libnl3-devel PreReq: permissions ++++++ smc-tools-1.8.4.tar.gz -> smc-tools-1.8.6.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/smc-tools-1.8.4/Makefile new/smc-tools-1.8.6/Makefile --- old/smc-tools-1.8.4/Makefile 2024-12-18 11:27:51.000000000 +0100 +++ new/smc-tools-1.8.6/Makefile 2025-12-05 12:21:32.000000000 +0100 @@ -9,7 +9,7 @@ # http://www.eclipse.org/legal/epl-v10.html # -SMC_TOOLS_RELEASE = 1.8.4 +SMC_TOOLS_RELEASE = 1.8.6 VER_MAJOR = $(shell echo $(SMC_TOOLS_RELEASE) | cut -d '.' -f 1) ARCHTYPE = $(shell uname -m) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/smc-tools-1.8.4/README.md new/smc-tools-1.8.6/README.md --- old/smc-tools-1.8.4/README.md 2024-12-18 11:27:51.000000000 +0100 +++ new/smc-tools-1.8.6/README.md 2025-12-05 12:21:32.000000000 +0100 @@ -39,6 +39,24 @@ Release History: ================ +* __v1.8.6 (2025-12-05)__ + + Bug fixes: + - `man pages`: Update man page for smc_pnet + - `smc-tools`: Display sndbuf/RMB stats only if supported by the kernel + +* __v1.8.5 (2025-07-16)__ + + Changes: + - `smc_rnics`: Add support for Network Express RNIC in smc_rnics + - `smc_rnics`: Add PFT and VF columns to smc_rnics output + + Bug fixes: + - `libnetlink..`: Fix function declaration to use a void prototype + - `smc_rnics`: Update smc_chk to extract PNetID from column 9 + - `man` pages: Update man page for --rawids option and PFT and VF columns + - `smc_rnics`: Fix missing PPrt values in smc_rnics -r output + * __v1.8.4 (2024-12-17)__ Changes: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/smc-tools-1.8.4/libnetlink.c new/smc-tools-1.8.6/libnetlink.c --- old/smc-tools-1.8.4/libnetlink.c 2024-12-18 11:27:51.000000000 +0100 +++ new/smc-tools-1.8.6/libnetlink.c 2025-12-05 12:21:32.000000000 +0100 @@ -207,7 +207,7 @@ /* Operations on generic netlink sockets */ -int gen_nl_open(char *pname) +int gen_nl_open(void) { int rc = EXIT_FAILURE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/smc-tools-1.8.4/libnetlink.h new/smc-tools-1.8.6/libnetlink.h --- old/smc-tools-1.8.4/libnetlink.h 2024-12-18 11:27:51.000000000 +0100 +++ new/smc-tools-1.8.6/libnetlink.h 2025-12-05 12:21:32.000000000 +0100 @@ -60,7 +60,7 @@ void parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len); int sockdiag_send(int fd, unsigned char cmd); void set_extension(int ext); -int gen_nl_open(); +int gen_nl_open(void); void gen_nl_close(); int gen_nl_handle(int cmd, int nlmsg_flags, int (*cb_handler)(struct nl_msg *msg, void *arg), void *arg); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/smc-tools-1.8.4/linkgroup.c new/smc-tools-1.8.6/linkgroup.c --- old/smc-tools-1.8.4/linkgroup.c 2024-12-18 11:27:51.000000000 +0100 +++ new/smc-tools-1.8.6/linkgroup.c 2025-12-05 12:21:32.000000000 +0100 @@ -321,8 +321,12 @@ nla_get_string(lgr_attrs[SMC_NLA_LGR_R_PNETID])); if (lgr_attrs[SMC_NLA_LGR_R_SNDBUF_ALLOC]) lgr->sndbuf_alloc = nl_attr_get_uint(lgr_attrs[SMC_NLA_LGR_R_SNDBUF_ALLOC]); + else + lgr->sndbuf_alloc = SMC_BUFF_STATS_KERNEL_SUPPORT_ABSENT; if (lgr_attrs[SMC_NLA_LGR_R_RMB_ALLOC]) lgr->rmb_alloc = nl_attr_get_uint(lgr_attrs[SMC_NLA_LGR_R_RMB_ALLOC]); + else + lgr->rmb_alloc = SMC_BUFF_STATS_KERNEL_SUPPORT_ABSENT; if (lgr_attrs[SMC_NLA_LGR_R_V2_COMMON]) { struct nlattr *v2_lgr_attrs[SMC_NLA_LGR_V2_MAX + 1]; @@ -371,8 +375,12 @@ nla_get_string(lgr_attrs[SMC_NLA_LGR_D_PNETID])); if (lgr_attrs[SMC_NLA_LGR_D_SNDBUF_ALLOC]) lgr->sndbuf_alloc = nl_attr_get_uint(lgr_attrs[SMC_NLA_LGR_D_SNDBUF_ALLOC]); + else + lgr->sndbuf_alloc = SMC_BUFF_STATS_KERNEL_SUPPORT_ABSENT; if (lgr_attrs[SMC_NLA_LGR_D_DMB_ALLOC]) lgr->dmb_alloc = nl_attr_get_uint(lgr_attrs[SMC_NLA_LGR_D_DMB_ALLOC]); + else + lgr->dmb_alloc = SMC_BUFF_STATS_KERNEL_SUPPORT_ABSENT; if (lgr_attrs[SMC_NLA_LGR_D_V2_COMMON]) { struct nlattr *v2_lgr_attrs[SMC_NLA_LGR_V2_MAX + 1]; @@ -410,8 +418,10 @@ printf("EID : %s\n", lgr->v2_lgr_info.negotiated_eid); } printf("#Conns : %d\n", lgr->conns_num); - printf("Sndbuf : %lld B\n", lgr->sndbuf_alloc); - printf("RMB : %lld B\n", lgr->rmb_alloc); + if (lgr->sndbuf_alloc != SMC_BUFF_STATS_KERNEL_SUPPORT_ABSENT) + printf("Sndbuf : %lld B\n", lgr->sndbuf_alloc); + if (lgr->rmb_alloc != SMC_BUFF_STATS_KERNEL_SUPPORT_ABSENT) + printf("RMB : %lld B\n", lgr->rmb_alloc); } static int show_lgr_smcr_info(struct nlattr **attr) @@ -492,8 +502,10 @@ printf("EID : %s\n", lgr->v2_lgr_info.negotiated_eid); } printf("#Conns : %d\n", lgr->conns_num); - printf("Sndbuf : %lld B\n", lgr->sndbuf_alloc); - printf("DMB : %lld B\n", lgr->dmb_alloc); + if (lgr->sndbuf_alloc != SMC_BUFF_STATS_KERNEL_SUPPORT_ABSENT) + printf("Sndbuf : %lld B\n", lgr->sndbuf_alloc); + if (lgr->dmb_alloc != SMC_BUFF_STATS_KERNEL_SUPPORT_ABSENT) + printf("DMB : %lld B\n", lgr->dmb_alloc); } static int show_lgr_smcd_info(struct nlattr **attr) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/smc-tools-1.8.4/smc.c new/smc-tools-1.8.6/smc.c --- old/smc-tools-1.8.4/smc.c 2024-12-18 11:27:51.000000000 +0100 +++ new/smc-tools-1.8.6/smc.c 2025-12-05 12:21:32.000000000 +0100 @@ -144,7 +144,7 @@ argc--; argv++; } - if (gen_nl_open(myname)) + if (gen_nl_open()) exit(1); if (argc > 1) { rc = run_cmd(argv[1], argc-1, argv+1); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/smc-tools-1.8.4/smc_chk new/smc-tools-1.8.6/smc_chk --- old/smc-tools-1.8.4/smc_chk 2024-12-18 11:27:51.000000000 +0100 +++ new/smc-tools-1.8.6/smc_chk 2025-12-05 12:21:32.000000000 +0100 @@ -2,7 +2,7 @@ # Copyright IBM Corp. 2021 -VERSION="1.8.4"; +VERSION="1.8.6"; function usage() { @@ -255,7 +255,7 @@ if [ $? -eq 0 ]; then # PCI device - use smc_rnics for easy PNET_ID access debug "PCI device, retrieve PNET ID via smc_rnics"; - pnetid="`smc_rnics | grep -e "$1\$" | awk '{print($7)}'`"; + pnetid="`smc_rnics | grep -e "$1\$" | awk '{print($9)}'`"; [ "$pnetid" != "" ] && return; fi if [ -e /sys/class/net/$1/device/portno ] && [ -e /sys/class/net/$1/device/chpid ]; then @@ -290,7 +290,7 @@ function set_ism() { is_smcd_available "v1"; [ $? -ne 0 ] && return; - ism="`smc_rnics | awk -v pn="$1" '$5 == "ISM" && $7 == pn {print($1)}' | sed 's/ $//'`"; + ism="`smc_rnics | awk -v pn="$1" '$5 == "ISM" && $9 == pn {print($1)}' | sed 's/ $//'`"; } # Returns all ISMv2-eligible devices (PNET ID not set or same as *some* NIC) @@ -317,7 +317,7 @@ [ $? -ne 0 ] && continue; fi ismv2="$ismv2 `echo $line | awk '{print($1)}'`"; - done <<< $(smc_rnics | awk '$5 == "ISM" {print($1" "$7)}') + done <<< $(smc_rnics | awk '$5 == "ISM" {print($1" "$9)}') ismv2="`echo $ismv2`"; # strip leading blank } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/smc-tools-1.8.4/smc_dbg new/smc-tools-1.8.6/smc_dbg --- old/smc-tools-1.8.4/smc_dbg 2024-12-18 11:27:51.000000000 +0100 +++ new/smc-tools-1.8.6/smc_dbg 2025-12-05 12:21:32.000000000 +0100 @@ -2,7 +2,7 @@ # Copyright IBM Corp. 2019 -VERSION="1.8.4"; +VERSION="1.8.6"; function usage() { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/smc-tools-1.8.4/smc_pnet.8 new/smc-tools-1.8.6/smc_pnet.8 --- old/smc-tools-1.8.4/smc_pnet.8 2024-12-18 11:27:51.000000000 +0100 +++ new/smc-tools-1.8.6/smc_pnet.8 2025-12-05 12:21:32.000000000 +0100 @@ -48,13 +48,19 @@ The SMC protocol requires grouping of standard Ethernet and RoCE networks or ISM devices. Such groups are called \fIPhysical Networks\fR (PNETs). The mapping is configured -within a table called \fIpnet table\fR. Any available Ethernet interface can be -combined with an available RDMA-capable network interface card (RNIC) or a +within a table called \fIpnet table\fR. Any Ethernet interface can be +combined with the RDMA-capable network interface card (RNIC) or a DMA-capable ISM device, if they belong to the same Converged Ethernet fabric. To configure mapping of a RoCE Adapter port or an ISM device to a standard Ethernet interface, both devices need to have the same PNET ID; either hardware-defined or user-defined using the pnet table. -Hardware-defined PNET IDs cannot be overwritten. +Hardware-defined PNET IDs cannot be overwritten. The Ethernet interface or the +RNIC or a DMA-capable ISM device may not be present while creating a pnet table +entry. Such pnet table entries will be applied once the corresponding interface +or device comes online. The entry will still remain in the pnet table when the +interface or device is removed. The entire pnet table is not persistent across +reboots. + .P The .B smc_pnet diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/smc-tools-1.8.4/smc_rnics new/smc-tools-1.8.6/smc_rnics --- old/smc-tools-1.8.4/smc_rnics 2024-12-18 11:27:51.000000000 +0100 +++ new/smc-tools-1.8.6/smc_rnics 2025-12-05 12:21:32.000000000 +0100 @@ -2,7 +2,7 @@ # Copyright IBM Corp. 2018, 2022 -VERSION="1.8.4"; +VERSION="1.8.6"; function usage() { @@ -22,12 +22,19 @@ } function print_header() { - if [ $IBdev -eq 0 ]; then - printf " FID Power PCI_ID PCHID Type PPrt PNET_ID Net-Dev\n"; + if [ $IBdev -eq 1 ] && [ $rawIDs -eq 1 ]; then + printf "FID Power PCI_ID PCHID Type PFT VFN IPrt PNET_ID IB-Dev\n"; + echo '----------------------------------------------------------------------------------------------------'; + elif [ $IBdev -eq 1 ]; then + printf "FID Power PCI_ID PCHID Type PFT VF IPrt PNET_ID IB-Dev\n"; + echo '----------------------------------------------------------------------------------------------------'; + elif [ $rawIDs -eq 1 ]; then + printf "FID Power PCI_ID PCHID Type PFT VFN PPrt PNET_ID Net-Dev\n"; + echo '----------------------------------------------------------------------------------------------------' else - printf " FID Power PCI_ID PCHID Type IPrt PNET_ID IB-Dev\n"; + printf "FID Power PCI_ID PCHID Type PFT VF PPrt PNET_ID Net-Dev\n"; + echo '----------------------------------------------------------------------------------------------------'; fi - echo '------------------------------------------------------------------------------------------'; } function get_softset_pnet_id() { @@ -78,10 +85,35 @@ } function print_rnic() { - printf "%8x %-5s %-12s %-4s %-14s %-4s %-17s %s\n" "$((16#$fid))" "$power" "$addr" "$pchid" "$dev_type" "$port" "`get_pnet_from_port`" "$int"; + if [ $rawIDs -eq 1 ]; then + printf "%4x %-5s %-12s %-4s %-15s %-4s %-3s %-4s %-17s %s\n" \ + "$((16#$fid))" "$power" "$addr" "$pchid" "$dev_type" "$pft" "${vfn:+$((16#${vfn#0x}))}" "$port" "`get_pnet_from_port`" "$int"; + else + printf "%4x %-5s %-12s %-4s %-15s %-4s %-3s %-4s %-17s %s\n" \ + "$((16#$fid))" "$power" "$addr" "$pchid" "$dev_type" "$pft" "$vfn" "$port" "`get_pnet_from_port`" "$int"; + fi (( printed++ )); } +function set_RoCE_pft_and_vfn() { + local lpft=$1; + local lvfn=$((16#${2#0x})); + + case "$lpft" in + "0x02") pft="ROC"; vfn="y";; + "0x05") pft="ISM"; vfn="y";; + "0x0a") pft="ROC2"; vfn="y";; + "0x0c") pft="NETH"; vfn="y";; + "0x0f") pft="NETD"; + if (( $lvfn != 0 )); then + vfn="y"; + else + vfn="n"; + fi;; + *) + vfn="$lvfn";; + esac +} function set_RoCE_dev_and_port() { dev_type="$1"; if [ -e port ]; then @@ -103,13 +135,14 @@ local name; local lvl; - name="Mlx_$id"; which ethtool >/dev/null 2>&1; if [ $? -eq 0 ] && [ "$int" != "n/a" ] && [ -d "net" ]; then iface="`ls -1 net | head -1`"; lvl="`ethtool -i $iface | grep -e "^firmware-version:" | awk '{print($2)}'`"; if [ "${lvl%%.*}" == "22" ]; then name="RoCE_Express3"; + elif [ "${lvl%%.*}" == "14" ]; then + name="RoCE_Express2"; fi fi set_RoCE_dev_and_port $name; @@ -133,8 +166,10 @@ if [ $all -ne 0 ]; then dev_type=""; pchid=""; + pft=""; pnet=""; port=""; + vfn=""; print_rnic; fi continue; @@ -155,25 +190,30 @@ id=`cat device`; vend=`cat vendor`; dev_type="${vend#0x}:${id#0x}"; + pft=`cat pft`; + vfn=`cat vfn`; if [ $rawIDs -eq 0 ]; then - case "$vend" in - "0x1014" ) # IBM - case "$id" in - "0x04ed") dev_type="ISM"; - int="n/a";; - *) - continue; - esac;; - "0x15b3" ) # Mellanox - case "$id" in - "0x1003" | \ - "0x1004") dev_type="RoCE_Express";; - "0x1016") set_RoCE_dev_and_port "RoCE_Express2";; - "0x101e") set_by_firmware_lvl;; - *) set_RoCE_dev_and_port "Mlx_$id";; - esac;; - *) [ $all -eq 0 ] && continue - esac + case "$pft" in + "0x05") dev_type="ISM"; + int="n/a"; + set_RoCE_pft_and_vfn "$pft" "$vfn";; + "0x02") dev_type="RoCE_Express"; + set_RoCE_pft_and_vfn "$pft" "$vfn";; + "0x0a") set_by_firmware_lvl; + set_RoCE_pft_and_vfn "$pft" "$vfn";; + "0x0c" | \ + "0x0f") set_RoCE_dev_and_port "Network_Express"; + set_RoCE_pft_and_vfn "$pft" "$vfn";; + *) + # For unknown PCI vendors, determine VF flag based on VFN value. + # This ensures consistent handling even for unrecognized vendor devices + [ $all -eq 0 ] && continue + if (( 16#${vfn#0x} != 0 )); then + vfn="y"; + else + vfn="n"; + fi;; + esac fi pchid="`cat pchid | sed 's/^0x//'`"; pnetids="`cat util_string | sed 's/\x0/\x40/g' | iconv -f IBM-1047 -t ASCII`"; @@ -187,8 +227,9 @@ fi # one device can have multiple interfaces (one per port) for int in $interfaces; do + set_RoCE_dev_and_port "$dev_type"; cd /sys/bus/pci/devices/$addr/net/$int; - if [ "$dev_type" == "RoCE_Express" ] && [ -e dev_port ]; then + if [ "$((pft))" -eq 2 ] && [ -e dev_port ]; then port=`cat dev_port`; fi print_rnic; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/smc-tools-1.8.4/smc_rnics.8 new/smc-tools-1.8.6/smc_rnics.8 --- old/smc-tools-1.8.4/smc_rnics.8 2024-12-18 11:27:51.000000000 +0100 +++ new/smc-tools-1.8.6/smc_rnics.8 2025-12-05 12:21:32.000000000 +0100 @@ -60,7 +60,7 @@ Display IB device information. .TP .BR "\-r, \-\-rawids" -Display raw PCI vendor and device codes in column. Note that this will +Display raw PCI vendor/device, PFT, and VFN codes in columns. Note that this will also include unknown devices. .TP .BR "\-v, \-\-version" @@ -87,6 +87,15 @@ .B -r to switch to display of PCI vendor and device instead. +.SS "PFT" +PCI Function Type. Display hexadecimal value with option -r or mapped name with option -a. + +.SS "VF" +Virtual Function. Indicates if the FID is a virtual function within the adapter. + +.SS "VFN" +Virtual Function number. Indicates the virtual function within the adapter. + .SS "PPrt" Corresponding physical port of an RNIC, if applicable. Starts counting at 0. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/smc-tools-1.8.4/smc_run new/smc-tools-1.8.6/smc_run --- old/smc-tools-1.8.4/smc_run 2024-12-18 11:27:51.000000000 +0100 +++ new/smc-tools-1.8.6/smc_run 2025-12-05 12:21:32.000000000 +0100 @@ -10,7 +10,7 @@ # http://www.eclipse.org/legal/epl-v10.html # LIB_NAME="libsmc-preload.so" -VERSION="1.8.4"; +VERSION="1.8.6"; function usage() { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/smc-tools-1.8.4/smctools_common.h new/smc-tools-1.8.6/smctools_common.h --- old/smc-tools-1.8.4/smctools_common.h 2024-12-18 11:27:51.000000000 +0100 +++ new/smc-tools-1.8.6/smctools_common.h 2025-12-05 12:21:32.000000000 +0100 @@ -19,7 +19,7 @@ #define STRINGIFY_1(x) #x #define STRINGIFY(x) STRINGIFY_1(x) -#define RELEASE_STRING "1.8.4" +#define RELEASE_STRING "1.8.6" #define PF_SMC 43 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/smc-tools-1.8.4/stats.c new/smc-tools-1.8.6/stats.c --- old/smc-tools-1.8.4/stats.c 2024-12-18 11:27:51.000000000 +0100 +++ new/smc-tools-1.8.6/stats.c 2025-12-05 12:21:32.000000000 +0100 @@ -399,8 +399,10 @@ printf(" Data transmitted (Bytes) %14llu (%s)\n", smc_stat.smc[tech_type].rx_bytes, temp_str); printf(" Total requests %12llu\n", tech->rx_cnt); - get_abbreviated(smc_stat.smc[tech_type].rx_rmbuse, 6, temp_str); - printf(" Buffer usage (Bytes) %12llu (%s)\n", tech->rx_rmbuse, temp_str); + if (smc_stat.smc[tech_type].rx_rmbuse != SMC_BUFF_STATS_KERNEL_SUPPORT_ABSENT) { + get_abbreviated(smc_stat.smc[tech_type].rx_rmbuse, 6, temp_str); + printf(" Buffer usage (Bytes) %12llu (%s)\n", tech->rx_rmbuse, temp_str); + } printf(" Buffer full %12llu (%.2f%%)\n", tech->rmb_rx.buf_full_cnt, buf_rx_full); if (d_level) { @@ -422,8 +424,10 @@ printf(" Data transmitted (Bytes) %14llu (%s)\n", smc_stat.smc[tech_type].tx_bytes, temp_str); printf(" Total requests %12llu\n", tech->tx_cnt); - get_abbreviated(smc_stat.smc[tech_type].tx_rmbuse, 6, temp_str); - printf(" Buffer usage (Bytes) %12llu (%s)\n", tech->tx_rmbuse, temp_str); + if (smc_stat.smc[tech_type].tx_rmbuse != SMC_BUFF_STATS_KERNEL_SUPPORT_ABSENT) { + get_abbreviated(smc_stat.smc[tech_type].tx_rmbuse, 6, temp_str); + printf(" Buffer usage (Bytes) %12llu (%s)\n", tech->tx_rmbuse, temp_str); + } printf(" Buffer full %12llu (%.2f%%)\n", tech->rmb_tx.buf_full_cnt, buf_full); printf(" Buffer full (remote) %12llu (%.2f%%)\n", tech->rmb_tx.buf_full_peer_cnt, @@ -629,11 +633,13 @@ if (tech_attrs[SMC_NLA_STATS_T_RX_RMB_USAGE]) { trgt = nl_attr_get_uint(tech_attrs[SMC_NLA_STATS_T_RX_RMB_USAGE]); smc_stat.smc[tech_type].rx_rmbuse = trgt; - } + } else + smc_stat.smc[tech_type].rx_rmbuse = SMC_BUFF_STATS_KERNEL_SUPPORT_ABSENT; if (tech_attrs[SMC_NLA_STATS_T_TX_RMB_USAGE]) { trgt = nl_attr_get_uint(tech_attrs[SMC_NLA_STATS_T_TX_RMB_USAGE]); smc_stat.smc[tech_type].tx_rmbuse = trgt; - } + } else + smc_stat.smc[tech_type].tx_rmbuse = SMC_BUFF_STATS_KERNEL_SUPPORT_ABSENT; if (tech_attrs[SMC_NLA_STATS_T_RX_CNT]) { trgt = nla_get_u64(tech_attrs[SMC_NLA_STATS_T_RX_CNT]); smc_stat.smc[tech_type].rx_cnt = trgt; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/smc-tools-1.8.4/util.h new/smc-tools-1.8.6/util.h --- old/smc-tools-1.8.4/util.h 2024-12-18 11:27:51.000000000 +0100 +++ new/smc-tools-1.8.6/util.h 2025-12-05 12:21:32.000000000 +0100 @@ -21,7 +21,7 @@ #define SMC_OPTION_ABS -1 #define SMC_OPTION_DETAIL_ABS -2 #define SMC_TYPE_STR_MAX 5 - +#define SMC_BUFF_STATS_KERNEL_SUPPORT_ABSENT ((__u64) -1) #define NEXT_ARG() do { argv++; argc--; } while(0) #define NEXT_ARG_OK() (argc - 1 > 0)
