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

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


The following commit(s) were added to refs/heads/master by this push:
     new a7567677a88 netdev_driver: add carrier_on to xxx_ifup where carrier_on 
is absent
a7567677a88 is described below

commit a7567677a888260177ec2b247b5c92ac02b3c0a2
Author: zhanghongyu <[email protected]>
AuthorDate: Wed Jan 28 22:01:27 2026 +0800

    netdev_driver: add carrier_on to xxx_ifup where carrier_on is absent
    
    since the judgment for network card selection was changed from IS_UP to
    IS_RUNNING, drivers that lack carrier_on need to add the carrier_on
    operation; otherwise, network access issues will occur.
    
    Signed-off-by: zhanghongyu <[email protected]>
---
 arch/arm/src/at32/at32_can_sock.c               |  5 ++++-
 arch/arm/src/at32/at32_eth.c                    |  6 ++++++
 arch/arm/src/c5471/c5471_ethernet.c             |  6 ++++++
 arch/arm/src/gd32f4/gd32f4xx_enet.c             |  5 +++++
 arch/arm/src/imx6/imx_enet.c                    | 12 +++++++++++-
 arch/arm/src/imxrt/imxrt_flexcan.c              |  5 +++++
 arch/arm/src/kinetis/kinetis_flexcan.c          |  5 +++++
 arch/arm/src/lpc17xx_40xx/lpc17_40_can.c        |  5 +++++
 arch/arm/src/lpc17xx_40xx/lpc17_40_ethernet.c   |  6 ++++++
 arch/arm/src/lpc43xx/lpc43_ethernet.c           |  6 ++++++
 arch/arm/src/lpc54xx/lpc54_ethernet.c           |  6 ++++++
 arch/arm/src/rtl8720c/amebaz_netdev.c           |  1 -
 arch/arm/src/s32k1xx/s32k1xx_enet.c             | 11 ++++++++++-
 arch/arm/src/s32k1xx/s32k1xx_flexcan.c          |  5 +++++
 arch/arm/src/s32k3xx/s32k3xx_emac.c             | 12 +++++++++++-
 arch/arm/src/s32k3xx/s32k3xx_flexcan.c          |  4 ++++
 arch/arm/src/sam34/sam_emac.c                   |  6 ++++++
 arch/arm/src/sama5/sam_emaca.c                  |  6 ++++++
 arch/arm/src/sama5/sam_emacb.c                  |  6 ++++++
 arch/arm/src/sama5/sam_gmac.c                   |  6 ++++++
 arch/arm/src/samd5e5/sam_gmac.c                 |  6 ++++++
 arch/arm/src/samv7/sam_emac.c                   |  6 ++++++
 arch/arm/src/samv7/sam_lin_sock.c               |  4 ++++
 arch/arm/src/stm32/stm32_can_sock.c             |  5 ++++-
 arch/arm/src/stm32/stm32_fdcan_sock.c           |  5 ++++-
 arch/arm/src/stm32f7/stm32_can_sock.c           |  4 ++++
 arch/arm/src/stm32h7/stm32_fdcan_sock.c         |  5 ++++-
 arch/arm/src/tiva/common/tiva_sock_can.c        |  4 ++++
 arch/arm/src/tiva/lm/lm3s_ethernet.c            |  6 ++++++
 arch/arm/src/tiva/tm4c/tm4c_ethernet.c          |  6 ++++++
 arch/arm64/src/imx9/imx9_enet.c                 | 11 ++++++++++-
 arch/arm64/src/imx9/imx9_flexcan.c              |  5 +++++
 arch/hc/src/m9s12/m9s12_ethernet.c              |  6 ++++++
 arch/mips/src/pic32mx/pic32mx_ethernet.c        |  6 ++++++
 arch/mips/src/pic32mz/pic32mz_ethernet.c        |  5 +++++
 arch/misoc/src/common/misoc_net.c               |  6 ++++++
 arch/renesas/src/rx65n/rx65n_eth.c              |  6 ++++++
 arch/risc-v/src/litex/litex_emac.c              |  4 ++++
 arch/risc-v/src/mpfs/mpfs_ethernet.c            |  5 +++++
 arch/xtensa/src/esp32/esp32_emac.c              |  4 ++++
 arch/z80/src/ez80/ez80_emac.c                   |  5 +++++
 drivers/can/kvaser_pci.c                        |  4 ++++
 drivers/net/dm90x0.c                            |  6 ++++++
 drivers/net/enc28j60.c                          |  3 +++
 drivers/net/ftmac100.c                          |  6 ++++++
 drivers/net/lan9250.c                           |  2 ++
 drivers/net/skeleton.c                          |  6 ++++++
 drivers/net/slip.c                              |  4 ++++
 drivers/net/w5500.c                             |  5 +++++
 drivers/usbdev/rndis.c                          |  2 ++
 drivers/usbhost/usbhost_cdcmbim.c               |  6 ++++++
 drivers/wireless/ieee802154/xbee/xbee_netdev.c  |  4 ++++
 drivers/wireless/spirit/drivers/spirit_netdev.c |  2 ++
 53 files changed, 279 insertions(+), 9 deletions(-)

diff --git a/arch/arm/src/at32/at32_can_sock.c 
b/arch/arm/src/at32/at32_can_sock.c
index 3239bfcd697..6faf4cdbd85 100644
--- a/arch/arm/src/at32/at32_can_sock.c
+++ b/arch/arm/src/at32/at32_can_sock.c
@@ -764,6 +764,8 @@ static int at32can_ifup(struct net_driver_s *dev)
 
   priv->dev.d_buf = (uint8_t *)priv->txdesc;
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -795,6 +797,8 @@ static int at32can_ifdown(struct net_driver_s *dev)
 
   at32can_reset(priv);
 
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
@@ -2481,4 +2485,3 @@ void arm_netinitialize(void)
 #endif
 }
 #endif
-
diff --git a/arch/arm/src/at32/at32_eth.c b/arch/arm/src/at32/at32_eth.c
index ae490aa3830..3fe41f6c28b 100644
--- a/arch/arm/src/at32/at32_eth.c
+++ b/arch/arm/src/at32/at32_eth.c
@@ -2207,6 +2207,9 @@ static int at32_ifup(struct net_driver_s *dev)
   up_enable_irq(AT32_IRQ_ETH);
 
   at32_checksetup();
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -2261,6 +2264,9 @@ static int at32_ifdown(struct net_driver_s *dev)
 
   priv->ifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return ret;
 }
 
diff --git a/arch/arm/src/c5471/c5471_ethernet.c 
b/arch/arm/src/c5471/c5471_ethernet.c
index dcfe6cf0702..3c2d75e2b99 100644
--- a/arch/arm/src/c5471/c5471_ethernet.c
+++ b/arch/arm/src/c5471/c5471_ethernet.c
@@ -1758,6 +1758,9 @@ static int c5471_ifup(struct net_driver_s *dev)
 
   priv->c_bifup = true;
   up_enable_irq(C5471_IRQ_ETHER);
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1810,6 +1813,9 @@ static int c5471_ifdown(struct net_driver_s *dev)
 
   priv->c_bifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/gd32f4/gd32f4xx_enet.c 
b/arch/arm/src/gd32f4/gd32f4xx_enet.c
index f03b7e9077e..1446d77b471 100644
--- a/arch/arm/src/gd32f4/gd32f4xx_enet.c
+++ b/arch/arm/src/gd32f4/gd32f4xx_enet.c
@@ -2264,6 +2264,8 @@ static int gd32_ifup(struct net_driver_s *dev)
   priv->ifup = true;
   up_enable_irq(GD32_IRQ_ENET);
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -2319,6 +2321,9 @@ static int gd32_ifdown(struct net_driver_s *dev)
 
   priv->ifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return ret;
 }
 
diff --git a/arch/arm/src/imx6/imx_enet.c b/arch/arm/src/imx6/imx_enet.c
index 655398d652c..70cb825200f 100644
--- a/arch/arm/src/imx6/imx_enet.c
+++ b/arch/arm/src/imx6/imx_enet.c
@@ -1399,7 +1399,14 @@ static int imx_ifup(struct net_driver_s *dev)
 {
   /* The externally available ifup action includes resetting the phy */
 
-  return imx_ifup_action(dev, true);
+  int ret = imx_ifup_action(dev, true);
+
+  if (ret == OK)
+    {
+      netdev_carrier_on(dev);
+    }
+
+  return ret;
 }
 
 /****************************************************************************
@@ -1451,6 +1458,9 @@ static int imx_ifdown(struct net_driver_s *dev)
 
   priv->bifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/imxrt/imxrt_flexcan.c 
b/arch/arm/src/imxrt/imxrt_flexcan.c
index ae794b5cb98..43e15731425 100644
--- a/arch/arm/src/imxrt/imxrt_flexcan.c
+++ b/arch/arm/src/imxrt/imxrt_flexcan.c
@@ -1371,6 +1371,8 @@ static int imxrt_ifup(struct net_driver_s *dev)
 
   up_enable_irq(priv->config->irq);
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1398,6 +1400,9 @@ static int imxrt_ifdown(struct net_driver_s *dev)
   imxrt_reset(priv);
 
   priv->bifup = false;
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/kinetis/kinetis_flexcan.c 
b/arch/arm/src/kinetis/kinetis_flexcan.c
index ccc3d98b591..6766811a108 100644
--- a/arch/arm/src/kinetis/kinetis_flexcan.c
+++ b/arch/arm/src/kinetis/kinetis_flexcan.c
@@ -1338,6 +1338,8 @@ static int kinetis_ifup(struct net_driver_s *dev)
 
   up_enable_irq(priv->config->mb_irq);
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1365,6 +1367,9 @@ static int kinetis_ifdown(struct net_driver_s *dev)
   kinetis_reset(priv);
 
   priv->bifup = false;
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/lpc17xx_40xx/lpc17_40_can.c 
b/arch/arm/src/lpc17xx_40xx/lpc17_40_can.c
index 514870c704c..077a0524569 100644
--- a/arch/arm/src/lpc17xx_40xx/lpc17_40_can.c
+++ b/arch/arm/src/lpc17xx_40xx/lpc17_40_can.c
@@ -1766,6 +1766,8 @@ static int lpc17can_ifup(struct net_driver_s *dev)
   lpc17can_rxint(priv, true);
   lpc17can_txint(priv, true);
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1793,6 +1795,9 @@ static int lpc17can_ifdown(struct net_driver_s *dev)
   lpc17can_reset(priv);
 
   priv->bifup = false;
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/lpc17xx_40xx/lpc17_40_ethernet.c 
b/arch/arm/src/lpc17xx_40xx/lpc17_40_ethernet.c
index 69cbc40efe0..f8b19ed862a 100644
--- a/arch/arm/src/lpc17xx_40xx/lpc17_40_ethernet.c
+++ b/arch/arm/src/lpc17xx_40xx/lpc17_40_ethernet.c
@@ -1507,6 +1507,9 @@ static int lpc17_40_ifup(struct net_driver_s *dev)
 #else
   up_enable_irq(LPC17_40_IRQ_ETH);
 #endif
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1546,6 +1549,9 @@ static int lpc17_40_ifdown(struct net_driver_s *dev)
   lpc17_40_ethreset(priv);
   priv->lp_ifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/lpc43xx/lpc43_ethernet.c 
b/arch/arm/src/lpc43xx/lpc43_ethernet.c
index dae1dab96f3..5e3b184a189 100644
--- a/arch/arm/src/lpc43xx/lpc43_ethernet.c
+++ b/arch/arm/src/lpc43xx/lpc43_ethernet.c
@@ -2097,6 +2097,9 @@ static int lpc43_ifup(struct net_driver_s *dev)
   up_enable_irq(LPC43M4_IRQ_ETHERNET);
 
   lpc43_checksetup();
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -2144,6 +2147,9 @@ static int lpc43_ifdown(struct net_driver_s *dev)
 
   priv->ifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/lpc54xx/lpc54_ethernet.c 
b/arch/arm/src/lpc54xx/lpc54_ethernet.c
index 3cd62bc336f..495f4efa050 100644
--- a/arch/arm/src/lpc54xx/lpc54_ethernet.c
+++ b/arch/arm/src/lpc54xx/lpc54_ethernet.c
@@ -1971,6 +1971,9 @@ static int lpc54_eth_ifup(struct net_driver_s *dev)
 
   priv->eth_bifup = 1;
   up_enable_irq(LPC54_IRQ_ETHERNET);
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -2048,6 +2051,9 @@ static int lpc54_eth_ifdown(struct net_driver_s *dev)
 
   priv->eth_bifup = 0;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/rtl8720c/amebaz_netdev.c 
b/arch/arm/src/rtl8720c/amebaz_netdev.c
index 99f859c5429..9f136f5d90f 100644
--- a/arch/arm/src/rtl8720c/amebaz_netdev.c
+++ b/arch/arm/src/rtl8720c/amebaz_netdev.c
@@ -349,4 +349,3 @@ int amebaz_netdev_register(struct amebaz_dev_s *priv)
   dev->d_private = priv;
   return netdev_register(dev, NET_LL_IEEE80211);
 }
-
diff --git a/arch/arm/src/s32k1xx/s32k1xx_enet.c 
b/arch/arm/src/s32k1xx/s32k1xx_enet.c
index 98b632f67c9..d0b751beffc 100644
--- a/arch/arm/src/s32k1xx/s32k1xx_enet.c
+++ b/arch/arm/src/s32k1xx/s32k1xx_enet.c
@@ -1269,7 +1269,13 @@ static int s32k1xx_ifup(struct net_driver_s *dev)
 {
   /* The externally available ifup action includes resetting the phy */
 
-  return s32k1xx_ifup_action(dev, true);
+  int ret = s32k1xx_ifup_action(dev, true);
+  if (ret == OK)
+    {
+      netdev_carrier_on(dev);
+    }
+
+  return ret;
 }
 
 /****************************************************************************
@@ -1321,6 +1327,9 @@ static int s32k1xx_ifdown(struct net_driver_s *dev)
 
   priv->bifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/s32k1xx/s32k1xx_flexcan.c 
b/arch/arm/src/s32k1xx/s32k1xx_flexcan.c
index c9439f4bb46..d02fc93178d 100644
--- a/arch/arm/src/s32k1xx/s32k1xx_flexcan.c
+++ b/arch/arm/src/s32k1xx/s32k1xx_flexcan.c
@@ -1323,6 +1323,8 @@ static int s32k1xx_ifup(struct net_driver_s *dev)
 
   up_enable_irq(priv->config->mb_irq);
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1350,6 +1352,9 @@ static int s32k1xx_ifdown(struct net_driver_s *dev)
   s32k1xx_reset(priv);
 
   priv->bifup = false;
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/s32k3xx/s32k3xx_emac.c 
b/arch/arm/src/s32k3xx/s32k3xx_emac.c
index 4288d1a013a..03d9f762dc1 100644
--- a/arch/arm/src/s32k3xx/s32k3xx_emac.c
+++ b/arch/arm/src/s32k3xx/s32k3xx_emac.c
@@ -2033,7 +2033,14 @@ static int s32k3xx_ifup(struct net_driver_s *dev)
 {
   /* The externally available ifup action includes resetting the phy */
 
-  return s32k3xx_ifup_action(dev, true);
+  int ret = s32k3xx_ifup_action(dev, true);
+
+  if (ret == OK)
+    {
+      netdev_carrier_on(dev);
+    }
+
+  return ret;
 }
 
 /****************************************************************************
@@ -2087,6 +2094,9 @@ static int s32k3xx_ifdown(struct net_driver_s *dev)
 
   priv->bifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/s32k3xx/s32k3xx_flexcan.c 
b/arch/arm/src/s32k3xx/s32k3xx_flexcan.c
index 49a978ad2a7..fa20c820915 100644
--- a/arch/arm/src/s32k3xx/s32k3xx_flexcan.c
+++ b/arch/arm/src/s32k3xx/s32k3xx_flexcan.c
@@ -1502,6 +1502,8 @@ static int s32k3xx_ifup(struct net_driver_s *dev)
       s32k3xx_gpiowrite(priv->config->led_pin, priv->config->led_high);
     }
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1537,6 +1539,8 @@ static int s32k3xx_ifdown(struct net_driver_s *dev)
       s32k3xx_gpiowrite(priv->config->led_pin, !priv->config->led_high);
     }
 
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/sam34/sam_emac.c b/arch/arm/src/sam34/sam_emac.c
index 0144794c7fb..6fc884cd8af 100644
--- a/arch/arm/src/sam34/sam_emac.c
+++ b/arch/arm/src/sam34/sam_emac.c
@@ -1718,6 +1718,9 @@ static int sam_ifup(struct net_driver_s *dev)
 
   priv->ifup = true;
   up_enable_irq(SAM_IRQ_EMAC);
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1764,6 +1767,9 @@ static int sam_ifdown(struct net_driver_s *dev)
 
   priv->ifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/sama5/sam_emaca.c b/arch/arm/src/sama5/sam_emaca.c
index ef179ea85f4..fbea7f727fd 100644
--- a/arch/arm/src/sama5/sam_emaca.c
+++ b/arch/arm/src/sama5/sam_emaca.c
@@ -1771,6 +1771,9 @@ static int sam_ifup(struct net_driver_s *dev)
 
   priv->ifup = true;
   up_enable_irq(SAM_IRQ_EMAC);
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1817,6 +1820,9 @@ static int sam_ifdown(struct net_driver_s *dev)
 
   priv->ifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/sama5/sam_emacb.c b/arch/arm/src/sama5/sam_emacb.c
index be7137e66a1..4a6a39ccbdd 100644
--- a/arch/arm/src/sama5/sam_emacb.c
+++ b/arch/arm/src/sama5/sam_emacb.c
@@ -2124,6 +2124,9 @@ static int sam_ifup(struct net_driver_s *dev)
 
   priv->ifup = true;
   up_enable_irq(priv->attr->irq);
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -2170,6 +2173,9 @@ static int sam_ifdown(struct net_driver_s *dev)
 
   priv->ifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/sama5/sam_gmac.c b/arch/arm/src/sama5/sam_gmac.c
index 8b4eb991a2d..5f0b339eb41 100644
--- a/arch/arm/src/sama5/sam_gmac.c
+++ b/arch/arm/src/sama5/sam_gmac.c
@@ -1761,6 +1761,9 @@ static int sam_ifup(struct net_driver_s *dev)
 
   priv->ifup = true;
   up_enable_irq(SAM_IRQ_GMAC);
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1807,6 +1810,9 @@ static int sam_ifdown(struct net_driver_s *dev)
 
   priv->ifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/samd5e5/sam_gmac.c b/arch/arm/src/samd5e5/sam_gmac.c
index 167abe4e241..77a63865dfb 100644
--- a/arch/arm/src/samd5e5/sam_gmac.c
+++ b/arch/arm/src/samd5e5/sam_gmac.c
@@ -1726,6 +1726,9 @@ static int sam_ifup(struct net_driver_s *dev)
 
   priv->ifup = true;
   up_enable_irq(SAM_IRQ_GMAL);
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1772,6 +1775,9 @@ static int sam_ifdown(struct net_driver_s *dev)
 
   priv->ifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/samv7/sam_emac.c b/arch/arm/src/samv7/sam_emac.c
index b8c2873393a..fe98c6cf9f0 100644
--- a/arch/arm/src/samv7/sam_emac.c
+++ b/arch/arm/src/samv7/sam_emac.c
@@ -2577,6 +2577,9 @@ static int sam_ifup(struct net_driver_s *dev)
 
   priv->ifup = true;
   up_enable_irq(priv->attr->irq);
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -2623,6 +2626,9 @@ static int sam_ifdown(struct net_driver_s *dev)
 
   priv->ifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/samv7/sam_lin_sock.c 
b/arch/arm/src/samv7/sam_lin_sock.c
index 4da4ab5bf68..e6bc8aa0cf1 100644
--- a/arch/arm/src/samv7/sam_lin_sock.c
+++ b/arch/arm/src/samv7/sam_lin_sock.c
@@ -427,6 +427,8 @@ static int sam_lin_ifup(struct net_driver_s *dev)
                      UART_INT_LINID | UART_INT_LINERR);
     }
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -470,6 +472,8 @@ static int sam_lin_ifdown(struct net_driver_s *dev)
         }
     }
 
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/stm32/stm32_can_sock.c 
b/arch/arm/src/stm32/stm32_can_sock.c
index 7624e73ea36..7fc53613f8b 100644
--- a/arch/arm/src/stm32/stm32_can_sock.c
+++ b/arch/arm/src/stm32/stm32_can_sock.c
@@ -762,6 +762,8 @@ static int stm32can_ifup(struct net_driver_s *dev)
 
   priv->dev.d_buf = (uint8_t *)priv->txdesc;
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -793,6 +795,8 @@ static int stm32can_ifdown(struct net_driver_s *dev)
 
   stm32can_reset(priv);
 
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
@@ -2484,4 +2488,3 @@ void arm_netinitialize(void)
 #endif
 }
 #endif
-
diff --git a/arch/arm/src/stm32/stm32_fdcan_sock.c 
b/arch/arm/src/stm32/stm32_fdcan_sock.c
index 966d7cd6aac..b936a4326ca 100644
--- a/arch/arm/src/stm32/stm32_fdcan_sock.c
+++ b/arch/arm/src/stm32/stm32_fdcan_sock.c
@@ -2975,6 +2975,8 @@ static int fdcan_ifup(struct net_driver_s *dev)
 
   priv->dev.d_buf = (uint8_t *)priv->txdesc;
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -3007,6 +3009,8 @@ static int fdcan_ifdown(struct net_driver_s *dev)
 
   fdcan_reset(priv);
 
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
@@ -3321,4 +3325,3 @@ void arm_netinitialize(void)
 #endif
 }
 #endif
-
diff --git a/arch/arm/src/stm32f7/stm32_can_sock.c 
b/arch/arm/src/stm32f7/stm32_can_sock.c
index 6f4d5b49904..6b6f3dd8977 100644
--- a/arch/arm/src/stm32f7/stm32_can_sock.c
+++ b/arch/arm/src/stm32f7/stm32_can_sock.c
@@ -786,6 +786,8 @@ static int stm32can_ifup(struct net_driver_s *dev)
 
   priv->dev.d_buf = (uint8_t *)priv->txdesc;
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -817,6 +819,8 @@ static int stm32can_ifdown(struct net_driver_s *dev)
 
   stm32can_reset(priv);
 
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/stm32h7/stm32_fdcan_sock.c 
b/arch/arm/src/stm32h7/stm32_fdcan_sock.c
index fdf667bce55..f6cfec83e31 100644
--- a/arch/arm/src/stm32h7/stm32_fdcan_sock.c
+++ b/arch/arm/src/stm32h7/stm32_fdcan_sock.c
@@ -1805,6 +1805,8 @@ static int fdcan_ifup(struct net_driver_s *dev)
 
   priv->bifup = true;
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1833,6 +1835,8 @@ static int fdcan_ifdown(struct net_driver_s *dev)
 
   priv->bifup = false;
 
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
@@ -3041,4 +3045,3 @@ static void fdcan_errint(struct fdcan_driver_s *priv, 
bool enable)
   putreg32(regval, priv->base + STM32_FDCAN_IE_OFFSET);
 }
 #endif
-
diff --git a/arch/arm/src/tiva/common/tiva_sock_can.c 
b/arch/arm/src/tiva/common/tiva_sock_can.c
index 72219e1d2ab..e97c9e58807 100644
--- a/arch/arm/src/tiva/common/tiva_sock_can.c
+++ b/arch/arm/src/tiva/common/tiva_sock_can.c
@@ -2250,6 +2250,8 @@ static int tivacan_ifup(struct net_driver_s *dev)
 
   priv->dev.d_buf = (uint8_t *)priv->tx_pool;
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -2279,6 +2281,8 @@ static int tivacan_ifdown(struct net_driver_s *dev)
 
   tivacan_reset(dev);
 
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/tiva/lm/lm3s_ethernet.c 
b/arch/arm/src/tiva/lm/lm3s_ethernet.c
index 73be2530e4a..9b3cfdb458f 100644
--- a/arch/arm/src/tiva/lm/lm3s_ethernet.c
+++ b/arch/arm/src/tiva/lm/lm3s_ethernet.c
@@ -1260,6 +1260,9 @@ static int tiva_ifup(struct net_driver_s *dev)
 
   priv->ld_bifup = true;
   leave_critical_section(flags);
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1342,6 +1345,9 @@ static int tiva_ifdown(struct net_driver_s *dev)
 
   priv->ld_bifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm/src/tiva/tm4c/tm4c_ethernet.c 
b/arch/arm/src/tiva/tm4c/tm4c_ethernet.c
index 12a67a4251f..2a7bed2892a 100644
--- a/arch/arm/src/tiva/tm4c/tm4c_ethernet.c
+++ b/arch/arm/src/tiva/tm4c/tm4c_ethernet.c
@@ -2223,6 +2223,9 @@ static int tiva_ifup(struct net_driver_s *dev)
   up_enable_irq(TIVA_IRQ_ETHCON);
 
   tiva_checksetup();
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -2270,6 +2273,9 @@ static int tiva_ifdown(struct net_driver_s *dev)
 
   priv->ifup = false;
   spin_unlock_irqrestore(&priv->lock, flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm64/src/imx9/imx9_enet.c b/arch/arm64/src/imx9/imx9_enet.c
index f225916f6fa..1847e80b36c 100644
--- a/arch/arm64/src/imx9/imx9_enet.c
+++ b/arch/arm64/src/imx9/imx9_enet.c
@@ -1441,7 +1441,14 @@ static int imx9_ifup(struct net_driver_s *dev)
 {
   /* The externally available ifup action includes resetting the phy */
 
-  return imx9_ifup_action(dev, true);
+  int ret = imx9_ifup_action(dev, true);
+
+  if (ret == OK)
+    {
+      netdev_carrier_on(dev);
+    }
+
+  return ret;
 }
 
 /****************************************************************************
@@ -1494,6 +1501,8 @@ static int imx9_ifdown(struct net_driver_s *dev)
 
   priv->bifup = false;
 
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/arm64/src/imx9/imx9_flexcan.c 
b/arch/arm64/src/imx9/imx9_flexcan.c
index 8d2e3359d84..1e2067dd4f5 100644
--- a/arch/arm64/src/imx9/imx9_flexcan.c
+++ b/arch/arm64/src/imx9/imx9_flexcan.c
@@ -1461,6 +1461,8 @@ static int imx9_ifup(struct net_driver_s *dev)
   up_enable_irq(priv->irq);
   up_enable_irq(priv->irq + 1);
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1492,6 +1494,9 @@ static int imx9_ifdown(struct net_driver_s *dev)
   imx9_reset(priv);
 
   priv->bifup = false;
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/hc/src/m9s12/m9s12_ethernet.c 
b/arch/hc/src/m9s12/m9s12_ethernet.c
index 3c6a43bddb9..de6dcecd316 100644
--- a/arch/hc/src/m9s12/m9s12_ethernet.c
+++ b/arch/hc/src/m9s12/m9s12_ethernet.c
@@ -448,6 +448,9 @@ static int emac_ifup(struct net_driver_s *dev)
 
   priv->d_bifup = true;
   up_enable_irq(CONFIG_HCS12_IRQ);
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -491,6 +494,9 @@ static int emac_ifdown(struct net_driver_s *dev)
 
   priv->d_bifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/mips/src/pic32mx/pic32mx_ethernet.c 
b/arch/mips/src/pic32mx/pic32mx_ethernet.c
index 90dc2f5410d..af0bcfcc784 100644
--- a/arch/mips/src/pic32mx/pic32mx_ethernet.c
+++ b/arch/mips/src/pic32mx/pic32mx_ethernet.c
@@ -2191,6 +2191,9 @@ static int pic32mx_ifup(struct net_driver_s *dev)
 #else
   up_enable_irq(PIC32MX_IRQSRC_ETH);
 #endif
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -2233,6 +2236,9 @@ static int pic32mx_ifdown(struct net_driver_s *dev)
   pic32mx_ethreset(priv);
   priv->pd_ifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/mips/src/pic32mz/pic32mz_ethernet.c 
b/arch/mips/src/pic32mz/pic32mz_ethernet.c
index 6ade32ef811..a27f1fe80ab 100644
--- a/arch/mips/src/pic32mz/pic32mz_ethernet.c
+++ b/arch/mips/src/pic32mz/pic32mz_ethernet.c
@@ -2340,6 +2340,8 @@ static int pic32mz_ifup(struct net_driver_s *dev)
   up_enable_irq(PIC32MZ_IRQ_ETH);
 #endif
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -2382,6 +2384,9 @@ static int pic32mz_ifdown(struct net_driver_s *dev)
   pic32mz_ethreset(priv);
   priv->pd_ifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/misoc/src/common/misoc_net.c 
b/arch/misoc/src/common/misoc_net.c
index 87a26e073e1..2197ebc1716 100644
--- a/arch/misoc/src/common/misoc_net.c
+++ b/arch/misoc/src/common/misoc_net.c
@@ -694,6 +694,9 @@ static int misoc_net_ifup(struct net_driver_s *dev)
 
   ethmac_sram_writer_ev_enable_write(1);
   leave_critical_section(flags);
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -740,6 +743,9 @@ static int misoc_net_ifdown(struct net_driver_s *dev)
 
   priv->misoc_net_bifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/renesas/src/rx65n/rx65n_eth.c 
b/arch/renesas/src/rx65n/rx65n_eth.c
index 1e5e262d4a7..c1c09e0d278 100644
--- a/arch/renesas/src/rx65n/rx65n_eth.c
+++ b/arch/renesas/src/rx65n/rx65n_eth.c
@@ -2073,6 +2073,9 @@ static int rx65n_ifup(struct net_driver_s *dev)
 
   priv->prevlinkstatus = ETHER_LINKUP;
   rx65n_checksetup();
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -2128,6 +2131,9 @@ static int rx65n_ifdown(struct net_driver_s *dev)
   priv->prevlinkstatus = ETHER_LINKDOWN;
 
   spin_unlock_irqrestore(&priv->lock, flags);
+
+  netdev_carrier_off(dev);
+
   return ret;
 }
 
diff --git a/arch/risc-v/src/litex/litex_emac.c 
b/arch/risc-v/src/litex/litex_emac.c
index 927e3bb320d..14dac42c9b1 100644
--- a/arch/risc-v/src/litex/litex_emac.c
+++ b/arch/risc-v/src/litex/litex_emac.c
@@ -859,6 +859,8 @@ static int litex_ifup(struct net_driver_s *dev)
 
   litex_phydump(priv);
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -900,6 +902,8 @@ static int litex_ifdown(struct net_driver_s *dev)
 
   litex_phydump(priv);
 
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/risc-v/src/mpfs/mpfs_ethernet.c 
b/arch/risc-v/src/mpfs/mpfs_ethernet.c
index 6ad88a75ed6..4916800f73e 100644
--- a/arch/risc-v/src/mpfs/mpfs_ethernet.c
+++ b/arch/risc-v/src/mpfs/mpfs_ethernet.c
@@ -1592,6 +1592,8 @@ static int mpfs_ifup(struct net_driver_s *dev)
            mpfs_txtimeout_expiry, (wdparm_t)priv);
 #endif
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1652,6 +1654,9 @@ static int mpfs_ifdown(struct net_driver_s *dev)
 
   priv->ifup = false;
   spin_unlock_irqrestore(&priv->lock, flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/arch/xtensa/src/esp32/esp32_emac.c 
b/arch/xtensa/src/esp32/esp32_emac.c
index 33b163a5194..ae65a018b50 100644
--- a/arch/xtensa/src/esp32/esp32_emac.c
+++ b/arch/xtensa/src/esp32/esp32_emac.c
@@ -1760,6 +1760,8 @@ static int emac_ifup(struct net_driver_s *dev)
 
   leave_critical_section(flags);
 
+  netdev_carrier_on(dev);
+
   return 0;
 }
 
@@ -1818,6 +1820,8 @@ static int emac_ifdown(struct net_driver_s *dev)
 
   leave_critical_section(flags);
 
+  netdev_carrier_off(dev);
+
   return 0;
 }
 
diff --git a/arch/z80/src/ez80/ez80_emac.c b/arch/z80/src/ez80/ez80_emac.c
index 898af6f2874..1844e30ee95 100644
--- a/arch/z80/src/ez80/ez80_emac.c
+++ b/arch/z80/src/ez80/ez80_emac.c
@@ -1990,6 +1990,8 @@ static int ez80emac_ifup(FAR struct net_driver_s *dev)
       priv->bifup = true;
       outp(EZ80_EMAC_IEN, EMAC_EIN_HANDLED); /* Enable all interrupts */
       ret = OK;
+
+      netdev_carrier_on(dev);
     }
 
   return ret;
@@ -2039,6 +2041,9 @@ static int ez80emac_ifdown(FAR struct net_driver_s *dev)
 
   priv->bifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/drivers/can/kvaser_pci.c b/drivers/can/kvaser_pci.c
index 090325ff263..c6277dfbb25 100644
--- a/drivers/can/kvaser_pci.c
+++ b/drivers/can/kvaser_pci.c
@@ -1023,6 +1023,8 @@ static int kvaser_sock_ifup(FAR struct netdev_lowerhalf_s 
*dev)
   kvaser_txint(priv, true);
   kvaser_rxint(priv, true);
 
+  netdev_lower_carrier_on(dev);
+
   return OK;
 }
 
@@ -1051,6 +1053,8 @@ static int kvaser_sock_ifdown(FAR struct 
netdev_lowerhalf_s *dev)
 
   kvaser_sleep(priv);
 
+  netdev_lower_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/drivers/net/dm90x0.c b/drivers/net/dm90x0.c
index 8e9e05a45b7..b8af17f26f5 100644
--- a/drivers/net/dm90x0.c
+++ b/drivers/net/dm90x0.c
@@ -1396,6 +1396,9 @@ static int dm9x_ifup(FAR struct net_driver_s *dev)
 
   priv->dm_bifup = true;
   up_enable_irq(CONFIG_DM9X_IRQ);
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1442,6 +1445,9 @@ static int dm9x_ifdown(FAR struct net_driver_s *dev)
 
   priv->dm_bifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/drivers/net/enc28j60.c b/drivers/net/enc28j60.c
index ca5cafd93ec..2d18b3c81c8 100644
--- a/drivers/net/enc28j60.c
+++ b/drivers/net/enc28j60.c
@@ -1936,6 +1936,7 @@ static int enc_ifup(struct net_driver_s *dev)
 
       priv->ifstate = ENCSTATE_UP;
       priv->lower->enable(priv->lower);
+      netdev_carrier_on(dev);
     }
 
   /* Un-lock the SPI bus */
@@ -1991,6 +1992,8 @@ static int enc_ifdown(struct net_driver_s *dev)
   priv->ifstate = ENCSTATE_DOWN;
   leave_critical_section(flags);
 
+  netdev_carrier_off(dev);
+
   /* Un-lock the SPI bus */
 
   enc_unlock(priv);
diff --git a/drivers/net/ftmac100.c b/drivers/net/ftmac100.c
index 2f8c14f2d8f..9b96c769355 100644
--- a/drivers/net/ftmac100.c
+++ b/drivers/net/ftmac100.c
@@ -1064,6 +1064,9 @@ static int ftmac100_ifup(struct net_driver_s *dev)
 
   priv->ft_bifup = true;
   up_enable_irq(CONFIG_FTMAC100_IRQ);
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1111,6 +1114,9 @@ static int ftmac100_ifdown(struct net_driver_s *dev)
 
   priv->ft_bifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/drivers/net/lan9250.c b/drivers/net/lan9250.c
index 723725ebddc..46d3865c2f4 100644
--- a/drivers/net/lan9250.c
+++ b/drivers/net/lan9250.c
@@ -2189,6 +2189,7 @@ static int lan9250_ifup(FAR struct net_driver_s *dev)
             (uint8_t)(mac_addr[0] >> 24), (uint8_t)(mac_addr[0] >> 16),
             (uint8_t)(mac_addr[0] >>  8), (uint8_t)(mac_addr[0] >>  0));
 #endif
+      netdev_carrier_on(dev);
     }
 
   /* Un-lock the SPI bus */
@@ -2240,6 +2241,7 @@ static int lan9250_ifdown(FAR struct net_driver_s *dev)
 
   IFF_CLR_UP(priv->dev.d_flags);
   leave_critical_section(flags);
+  netdev_carrier_off(dev);
 
   /* Un-lock the SPI bus */
 
diff --git a/drivers/net/skeleton.c b/drivers/net/skeleton.c
index 2f83a0e12ad..c9281b7c429 100644
--- a/drivers/net/skeleton.c
+++ b/drivers/net/skeleton.c
@@ -657,6 +657,9 @@ static int skel_ifup(FAR struct net_driver_s *dev)
   priv->sk_bifup = true;
   up_enable_irq(CONFIG_NET_SKELETON_IRQ);
   spin_unlock_irqrestore(&priv->sk_lock, flags);
+
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -701,6 +704,9 @@ static int skel_ifdown(FAR struct net_driver_s *dev)
 
   priv->sk_bifup = false;
   spin_unlock_irqrestore(&priv->sk_lock, flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/drivers/net/slip.c b/drivers/net/slip.c
index 79e7f29bfb4..ea16656f827 100644
--- a/drivers/net/slip.c
+++ b/drivers/net/slip.c
@@ -837,6 +837,8 @@ static int slip_ifup(FAR struct net_driver_s *dev)
 
   self->bifup = true;
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -870,6 +872,8 @@ static int slip_ifdown(FAR struct net_driver_s *dev)
 
   self->bifup = false;
 
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/drivers/net/w5500.c b/drivers/net/w5500.c
index 154a36c6ef8..584cea409b9 100644
--- a/drivers/net/w5500.c
+++ b/drivers/net/w5500.c
@@ -1772,6 +1772,8 @@ static int w5500_ifup(FAR struct net_driver_s *dev)
   self->w_bifup = true;
   self->lower->enable(self->lower, true);
 
+  netdev_carrier_on(dev);
+
   return OK;
 }
 
@@ -1818,6 +1820,9 @@ static int w5500_ifdown(FAR struct net_driver_s *dev)
 
   self->w_bifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/drivers/usbdev/rndis.c b/drivers/usbdev/rndis.c
index e8b7aa754d6..4b20e5a3855 100644
--- a/drivers/usbdev/rndis.c
+++ b/drivers/usbdev/rndis.c
@@ -1164,6 +1164,7 @@ static int rndis_transmit(FAR struct rndis_dev_s *priv)
 
 static int rndis_ifup(FAR struct net_driver_s *dev)
 {
+  netdev_carrier_on(dev);
   return OK;
 }
 
@@ -1177,6 +1178,7 @@ static int rndis_ifup(FAR struct net_driver_s *dev)
 
 static int rndis_ifdown(FAR struct net_driver_s *dev)
 {
+  netdev_carrier_off(dev);
   return OK;
 }
 
diff --git a/drivers/usbhost/usbhost_cdcmbim.c 
b/drivers/usbhost/usbhost_cdcmbim.c
index e989c10096a..9901e8b9f55 100644
--- a/drivers/usbhost/usbhost_cdcmbim.c
+++ b/drivers/usbhost/usbhost_cdcmbim.c
@@ -2347,6 +2347,9 @@ static int cdcmbim_ifup(FAR struct net_driver_s *dev)
     }
 
   priv->bifup = true;
+
+  netdev_lower_carrier_on(dev);
+
   return OK;
 }
 
@@ -2379,6 +2382,9 @@ static int cdcmbim_ifdown(FAR struct net_driver_s *dev)
   priv->bifup = false;
 
   spin_unlock_irqrestore(&priv->spinlock, flags);
+
+  netdev_lower_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/drivers/wireless/ieee802154/xbee/xbee_netdev.c 
b/drivers/wireless/ieee802154/xbee/xbee_netdev.c
index 6c7b4bec6a8..69fb6c619f0 100644
--- a/drivers/wireless/ieee802154/xbee/xbee_netdev.c
+++ b/drivers/wireless/ieee802154/xbee/xbee_netdev.c
@@ -680,6 +680,7 @@ static int xbeenet_ifup(FAR struct net_driver_s *dev)
 
       priv->xd_bifup = true;
       ret = OK;
+      netdev_carrier_on(dev);
     }
 
   return ret;
@@ -720,6 +721,9 @@ static int xbeenet_ifdown(FAR struct net_driver_s *dev)
 
   priv->xd_bifup = false;
   leave_critical_section(flags);
+
+  netdev_carrier_off(dev);
+
   return OK;
 }
 
diff --git a/drivers/wireless/spirit/drivers/spirit_netdev.c 
b/drivers/wireless/spirit/drivers/spirit_netdev.c
index 784dd089fe0..5871e4113ff 100644
--- a/drivers/wireless/spirit/drivers/spirit_netdev.c
+++ b/drivers/wireless/spirit/drivers/spirit_netdev.c
@@ -1777,6 +1777,7 @@ static int spirit_ifup(FAR struct net_driver_s *dev)
       /* We are up! */
 
       priv->ifup = true;
+      netdev_carrier_on(dev);
     }
 
   return OK;
@@ -1875,6 +1876,7 @@ static int spirit_ifdown(FAR struct net_driver_s *dev)
         }
 
       priv->ifup = false;
+      netdev_carrier_off(dev);
     }
 
   return ret;


Reply via email to