This is an automated email from the ASF dual-hosted git repository.

linguini pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git


The following commit(s) were added to refs/heads/master by this push:
     new 9da2bc069 apps/net: add get iobinfo api
9da2bc069 is described below

commit 9da2bc06961587ec0d288686099a3e75524f8cc3
Author: meijian <[email protected]>
AuthorDate: Wed Oct 9 17:34:00 2024 +0800

    apps/net: add get iobinfo api
    
    Obtain detailed IOB information by parsing the /proc/iobinfo file.
    
    Signed-off-by: meijian <[email protected]>
---
 include/netutils/netlib.h           |   5 ++
 netutils/netlib/CMakeLists.txt      |   4 ++
 netutils/netlib/Makefile            |   4 ++
 netutils/netlib/netlib_getiobinfo.c | 108 ++++++++++++++++++++++++++++++++++++
 4 files changed, 121 insertions(+)

diff --git a/include/netutils/netlib.h b/include/netutils/netlib.h
index 07a66906c..b5389a55d 100644
--- a/include/netutils/netlib.h
+++ b/include/netutils/netlib.h
@@ -52,6 +52,7 @@
 
 #include <net/if.h>
 #include <netinet/in.h>
+#include <nuttx/mm/iob.h>
 #include <nuttx/net/netdev.h>
 #include <nuttx/net/netconfig.h>
 
@@ -507,6 +508,10 @@ int netlib_getifstatistics(FAR const char *ifname,
 int netlib_check_ifconflict(FAR const char *ifname);
 #endif
 
+#ifdef CONFIG_MM_IOB
+int netlib_get_iobinfo(FAR struct iob_stats_s *iob);
+#endif
+
 #undef EXTERN
 #ifdef __cplusplus
 }
diff --git a/netutils/netlib/CMakeLists.txt b/netutils/netlib/CMakeLists.txt
index 560a71834..82cc8d610 100644
--- a/netutils/netlib/CMakeLists.txt
+++ b/netutils/netlib/CMakeLists.txt
@@ -149,6 +149,10 @@ if(CONFIG_NETUTILS_NETLIB)
     list(APPEND SRCS netlib_checkifconflict.c)
   endif()
 
+  if(CONFIG_MM_IOB)
+    list(APPEND SRCS netlib_getiobinfo.c)
+  endif()
+
   target_sources(apps PRIVATE ${SRCS})
 
 endif()
diff --git a/netutils/netlib/Makefile b/netutils/netlib/Makefile
index 237cc76de..3d6066e3f 100644
--- a/netutils/netlib/Makefile
+++ b/netutils/netlib/Makefile
@@ -148,4 +148,8 @@ ifeq ($(CONFIG_NET_ARP_ACD),y)
 CSRCS += netlib_checkifconflict.c
 endif
 
+ifeq ($(CONFIG_MM_IOB),y)
+CSRCS += netlib_getiobinfo.c
+endif
+
 include $(APPDIR)/Application.mk
diff --git a/netutils/netlib/netlib_getiobinfo.c 
b/netutils/netlib/netlib_getiobinfo.c
new file mode 100644
index 000000000..fe9a97983
--- /dev/null
+++ b/netutils/netlib/netlib_getiobinfo.c
@@ -0,0 +1,108 @@
+/****************************************************************************
+ * apps/netutils/netlib/netlib_getiobinfo.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+
+#include <netinet/in.h>
+#include <net/if.h>
+
+#include "netutils/netlib.h"
+
+#ifdef CONFIG_MM_IOB
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Determines the size of an intermediate buffer that must be large enough
+ * to handle the longest line generated by this logic.
+ */
+
+#define PROCFS_LINELEN   80
+#define PROCFS_IOB_PATH "/proc/iobinfo"
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: netlib_get_iobinfo
+ *
+ * Description:
+ *   Get the network iob info.
+ *
+ * Parameters:
+ *   iob   The pointer to return iobinfo.
+ *
+ * Return:
+ *   0 on success; a nagtive on failure.
+ *
+ ****************************************************************************/
+
+int netlib_get_iobinfo(FAR struct iob_stats_s *iob)
+{
+  int ret = OK;
+  FAR FILE *stream;
+  char line[PROCFS_LINELEN];
+
+  stream = fopen(PROCFS_IOB_PATH, "r");
+  if (stream == NULL)
+    {
+      fprintf(stderr, "ERROR: Failed to open path:%s \n", PROCFS_IOB_PATH);
+      return -errno;
+    }
+
+  /*  Read ioninfo header and next is the data */
+
+  if (fgets(line, sizeof(line), stream) != NULL)
+    {
+      if (fgets(line, sizeof(line), stream) == NULL)
+        {
+          ret = -EINVAL;
+          fclose(stream);
+          return ret;
+        }
+
+      if (sscanf(line, "%d %d %d %d", &iob->ntotal, &iob->nfree,
+                 &iob->nwait, &iob->nthrottle) <= 0)
+        {
+          ret = -errno;
+          fclose(stream);
+          return ret;
+        }
+    }
+
+  fclose(stream);
+  return ret;
+}
+
+#endif /* CONFIG_MM_IOB */
\ No newline at end of file

Reply via email to