You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2022/10/15 10:34:13 UTC

[incubator-nuttx] branch master updated (18ce70c1e7 -> 85440f5db6)

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

xiaoxiang pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git


    from 18ce70c1e7 boards: qemu-armv8a: Fix pthread_attr_setstacksize failed in ostest
     new ec4af00538 Add Cellular link layer support
     new 85440f5db6 net/ioctl/cellular: remove redundant logic

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 include/net/if.h             | 11 +++++++++++
 include/nuttx/net/ioctl.h    |  4 ++++
 include/nuttx/net/net.h      |  3 ++-
 net/Kconfig                  |  7 +++++++
 net/netdev/netdev_ioctl.c    | 25 +++++++++++++++++++++----
 net/netdev/netdev_register.c | 10 ++++++++++
 6 files changed, 55 insertions(+), 5 deletions(-)


[incubator-nuttx] 01/02: Add Cellular link layer support

Posted by xi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ec4af0053877a500fc2a913b02e0c7bb26ba320f
Author: luojun1 <lu...@xiaomi.com>
AuthorDate: Thu Jul 28 15:46:49 2022 +0800

    Add Cellular link layer support
    
    1.Add cellular link layer enum definition and register flow
    2.Add ioctl flow to set cellular NICs parameters
    
    Signed-off-by: luojun1 <lu...@xiaomi.com>
    Signed-off-by: chao an <an...@xiaomi.com>
---
 include/net/if.h             | 11 +++++++++++
 include/nuttx/net/ioctl.h    |  4 ++++
 include/nuttx/net/net.h      |  3 ++-
 net/Kconfig                  |  7 +++++++
 net/netdev/netdev_ioctl.c    | 23 +++++++++++++++++++----
 net/netdev/netdev_register.c | 10 ++++++++++
 6 files changed, 53 insertions(+), 5 deletions(-)

diff --git a/include/net/if.h b/include/net/if.h
index 05b4ab3269..aa6adcf3a6 100644
--- a/include/net/if.h
+++ b/include/net/if.h
@@ -172,6 +172,15 @@ struct can_ioctl_filter_s
   uint8_t  fprio; /* See CAN_MSGPRIO_* definitions */
 };
 
+/* Structure passed to get or set the cellular network device features */
+
+struct cell_ioctl_data_s
+{
+  uint8_t mdp_chnidx;  /* MDP(Multi Data Path) channel idx bound to this network device */
+  uint8_t sim_id;      /* Sim ID in dual sim system */
+  uint8_t cell_id;     /* Cell Identification in mobile phone networks */
+};
+
 /* There are two forms of the I/F request structure.
  * One for IPv6 and one for IPv4.
  * Notice that they are (and must be) cast compatible and really different
@@ -198,6 +207,7 @@ struct lifreq
     struct mii_ioctl_data_s    lifru_mii_data;       /* MII request data */
     struct can_ioctl_data_s    lifru_can_data;       /* CAN bitrate request data */
     struct can_ioctl_filter_s  lifru_can_filter;     /* CAN filter request data */
+    struct cell_ioctl_data_s   lifru_cell_data;      /* Cellular network data */
   } lifr_ifru;
 };
 
@@ -251,6 +261,7 @@ struct ifreq
     struct mii_ioctl_data_s    ifru_mii_data;       /* MII request data */
     struct can_ioctl_data_s    ifru_can_data;       /* CAN bitrate request data */
     struct can_ioctl_filter_s  ifru_can_filter;     /* CAN filter request data */
+    struct cell_ioctl_data_s   ifru_cell_data;      /* Cellular network data */
   } ifr_ifru;
 };
 
diff --git a/include/nuttx/net/ioctl.h b/include/nuttx/net/ioctl.h
index 6dcec0f283..6d68dae029 100644
--- a/include/nuttx/net/ioctl.h
+++ b/include/nuttx/net/ioctl.h
@@ -119,6 +119,10 @@
 #define SIOCACANSTDFILTER  _SIOC(0x0030)  /* Add hardware-level standard ID filter */
 #define SIOCDCANSTDFILTER  _SIOC(0x0031)  /* Delete hardware-level standard ID filter */
 
+/* Cellular net driver ******************************************************/
+
+#define SIOCSCELLNETDEV    _SIOC(0x0032)  /* Set cellular Netowrk Interface */
+
 /****************************************************************************
  * Public Type Definitions
  ****************************************************************************/
diff --git a/include/nuttx/net/net.h b/include/nuttx/net/net.h
index 425af53ddc..6051019141 100644
--- a/include/nuttx/net/net.h
+++ b/include/nuttx/net/net.h
@@ -144,7 +144,8 @@ enum net_lltype_e
   NET_LL_IEEE802154,   /* IEEE 802.15.4 MAC */
   NET_LL_PKTRADIO,     /* Non-standard packet radio */
   NET_LL_MBIM,         /* CDC-MBIM USB host driver */
-  NET_LL_CAN           /* CAN bus */
+  NET_LL_CAN,          /* CAN bus */
+  NET_LL_CELL          /* Cellular Virtual Network Device */
 };
 
 /* This defines a bitmap big enough for one bit for each socket option */
diff --git a/net/Kconfig b/net/Kconfig
index 1982f818ab..8dcd20d18a 100644
--- a/net/Kconfig
+++ b/net/Kconfig
@@ -142,6 +142,13 @@ config NET_ETHERNET
 		no need to define anything special in the configuration file to use
 		Ethernet -- it is the default).
 
+config NET_CELLULAR
+	bool "Cellular Link support"
+	default n
+	---help---
+		Add support for the cellular network device. Unlike Ethernet, cellular
+		network transmit pure IP packets.
+
 config NET_LOOPBACK
 	bool "Local loopback"
 	select ARCH_HAVE_NETDEV_STATISTICS
diff --git a/net/netdev/netdev_ioctl.c b/net/netdev/netdev_ioctl.c
index 6c52242f05..9896d9eb50 100644
--- a/net/netdev/netdev_ioctl.c
+++ b/net/netdev/netdev_ioctl.c
@@ -983,7 +983,7 @@ static int netdev_ifr_ioctl(FAR struct socket *psock, int cmd,
       case SIOCMIINOTIFY: /* Set up for PHY event notifications */
         if (dev->d_ioctl)
           {
-            struct mii_ioctl_notify_s *notify =
+            FAR struct mii_ioctl_notify_s *notify =
               &req->ifr_ifru.ifru_mii_notify;
             ret = dev->d_ioctl(dev, cmd, (unsigned long)(uintptr_t)notify);
           }
@@ -999,7 +999,7 @@ static int netdev_ifr_ioctl(FAR struct socket *psock, int cmd,
       case SIOCSMIIREG: /* Set MII register via MDIO */
         if (dev->d_ioctl)
           {
-            struct mii_ioctl_data_s *mii_data =
+            FAR struct mii_ioctl_data_s *mii_data =
               &req->ifr_ifru.ifru_mii_data;
             ret = dev->d_ioctl(dev, cmd,
                                (unsigned long)(uintptr_t)mii_data);
@@ -1016,7 +1016,7 @@ static int netdev_ifr_ioctl(FAR struct socket *psock, int cmd,
       case SIOCSCANBITRATE:  /* Set bitrate of a CAN controller */
         if (dev->d_ioctl)
           {
-            struct can_ioctl_data_s *can_bitrate_data =
+            FAR struct can_ioctl_data_s *can_bitrate_data =
               &req->ifr_ifru.ifru_can_data;
             ret = dev->d_ioctl(dev, cmd,
                           (unsigned long)(uintptr_t)can_bitrate_data);
@@ -1035,7 +1035,7 @@ static int netdev_ifr_ioctl(FAR struct socket *psock, int cmd,
       case SIOCDCANSTDFILTER:  /* Delete a standard-ID filter */
         if (dev->d_ioctl)
           {
-            struct can_ioctl_filter_s *can_filter =
+            FAR struct can_ioctl_filter_s *can_filter =
               &req->ifr_ifru.ifru_can_filter;
             ret = dev->d_ioctl(dev, cmd,
                           (unsigned long)(uintptr_t)can_filter);
@@ -1053,6 +1053,21 @@ static int netdev_ifr_ioctl(FAR struct socket *psock, int cmd,
         break;
 #endif
 
+#if defined(CONFIG_NETDEV_IOCTL) && defined(CONFIG_NET_CELLULAR)
+      case SIOCSCELLNETDEV:  /* set params for cellular network devices */
+        {
+          dev = netdev_findbyname(req->ifr_name);
+          if (dev && dev->d_ioctl)
+            {
+              FAR struct cell_ioctl_data_s *cell_netdev_data =
+                              &req->ifr_ifru.ifru_cell_data;
+              ret = dev->d_ioctl(dev, cmd,
+                              (unsigned long)(uintptr_t)cell_netdev_data);
+            }
+        }
+        break;
+#endif
+
       default:
         ret = -ENOTTY;
         break;
diff --git a/net/netdev/netdev_register.c b/net/netdev/netdev_register.c
index be95534895..2f3c77b033 100644
--- a/net/netdev/netdev_register.c
+++ b/net/netdev/netdev_register.c
@@ -58,6 +58,7 @@
 #define NETDEV_WPAN_FORMAT  "wpan%d"
 #define NETDEV_WWAN_FORMAT  "wwan%d"
 #define NETDEV_CAN_FORMAT   "can%d"
+#define NETDEV_CELL_FORMAT  "cell%d"
 
 #if defined(CONFIG_DRIVERS_IEEE80211) /* Usually also has CONFIG_NET_ETHERNET */
 #  define NETDEV_DEFAULT_FORMAT NETDEV_WLAN_FORMAT
@@ -346,6 +347,15 @@ int netdev_register(FAR struct net_driver_s *dev, enum net_lltype_e lltype)
             break;
 #endif
 
+#ifdef CONFIG_NET_CELLULAR
+          case NET_LL_CELL:
+            llhdrlen = 0;
+            pktsize  = CONFIG_NET_ETH_PKTSIZE;
+            devfmt   = NETDEV_CELL_FORMAT;
+            flags    = IFF_NOARP;
+            break;
+#endif
+
           default:
             nerr("ERROR: Unrecognized link type: %d\n", lltype);
             return -EINVAL;


[incubator-nuttx] 02/02: net/ioctl/cellular: remove redundant logic

Posted by xi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 85440f5db6a8de75159360f067456a38870b941b
Author: chao an <an...@xiaomi.com>
AuthorDate: Sat Oct 15 14:20:59 2022 +0800

    net/ioctl/cellular: remove redundant logic
    
    Signed-off-by: chao an <an...@xiaomi.com>
---
 net/netdev/netdev_ioctl.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/net/netdev/netdev_ioctl.c b/net/netdev/netdev_ioctl.c
index 9896d9eb50..da189c90c9 100644
--- a/net/netdev/netdev_ioctl.c
+++ b/net/netdev/netdev_ioctl.c
@@ -660,6 +660,7 @@ static ssize_t net_ioctl_ifreq_arglen(int cmd)
       case SIOCDCANEXTFILTER:
       case SIOCACANSTDFILTER:
       case SIOCDCANSTDFILTER:
+      case SIOCSCELLNETDEV:
       case SIOCGIFNAME:
       case SIOCGIFINDEX:
         return sizeof(struct ifreq);
@@ -1055,16 +1056,17 @@ static int netdev_ifr_ioctl(FAR struct socket *psock, int cmd,
 
 #if defined(CONFIG_NETDEV_IOCTL) && defined(CONFIG_NET_CELLULAR)
       case SIOCSCELLNETDEV:  /* set params for cellular network devices */
-        {
-          dev = netdev_findbyname(req->ifr_name);
-          if (dev && dev->d_ioctl)
-            {
-              FAR struct cell_ioctl_data_s *cell_netdev_data =
-                              &req->ifr_ifru.ifru_cell_data;
-              ret = dev->d_ioctl(dev, cmd,
-                              (unsigned long)(uintptr_t)cell_netdev_data);
-            }
-        }
+        if (dev->d_ioctl)
+          {
+            FAR struct cell_ioctl_data_s *cell_netdev_data =
+                            &req->ifr_ifru.ifru_cell_data;
+            ret = dev->d_ioctl(dev, cmd,
+                            (unsigned long)(uintptr_t)cell_netdev_data);
+          }
+        else
+          {
+            ret = -ENOSYS;
+          }
         break;
 #endif