diff --git a/cpu/esp_common/esp-now/esp_now_netdev.c b/cpu/esp_common/esp-now/esp_now_netdev.c index b4da397604..97b44f44b1 100644 --- a/cpu/esp_common/esp-now/esp_now_netdev.c +++ b/cpu/esp_common/esp-now/esp_now_netdev.c @@ -487,6 +487,9 @@ static int _init(netdev_t *netdev) { DEBUG("%s: %p\n", __func__, netdev); + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/cpu/native/netdev_tap/netdev_tap.c b/cpu/native/netdev_tap/netdev_tap.c index bb6fd0fe35..531e17e849 100644 --- a/cpu/native/netdev_tap/netdev_tap.c +++ b/cpu/native/netdev_tap/netdev_tap.c @@ -404,5 +404,9 @@ static int _init(netdev_t *netdev) native_async_read_add_handler(dev->tap_fd, netdev, _tap_isr); DEBUG("gnrc_tapnet: initialized.\n"); + + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/cpu/nrf5x_common/radio/nrfble/nrfble.c b/cpu/nrf5x_common/radio/nrfble/nrfble.c index ba08feeb0f..01b6a2ca75 100644 --- a/cpu/nrf5x_common/radio/nrfble/nrfble.c +++ b/cpu/nrf5x_common/radio/nrfble/nrfble.c @@ -279,6 +279,10 @@ static int _nrfble_init(netdev_t *dev) NVIC_EnableIRQ(RADIO_IRQn); DEBUG("[nrfble] initialization successful\n"); + + /* signal link UP */ + dev->event_callback(dev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/cpu/nrf5x_common/radio/nrfmin/nrfmin.c b/cpu/nrf5x_common/radio/nrfmin/nrfmin.c index 7eed0e09a6..a5dc012445 100644 --- a/cpu/nrf5x_common/radio/nrfmin/nrfmin.c +++ b/cpu/nrf5x_common/radio/nrfmin/nrfmin.c @@ -448,6 +448,9 @@ static int nrfmin_init(netdev_t *dev) DEBUG("[nrfmin] initialization successful\n"); + /* signal link UP */ + dev->event_callback(dev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/cpu/sam0_common/sam0_eth/eth-netdev.c b/cpu/sam0_common/sam0_eth/eth-netdev.c index 6dbb605f06..f73073dbe2 100644 --- a/cpu/sam0_common/sam0_eth/eth-netdev.c +++ b/cpu/sam0_common/sam0_eth/eth-netdev.c @@ -55,6 +55,10 @@ static int _sam0_eth_init(netdev_t *netdev) eui48_t hwaddr; netdev_eui48_get(netdev, &hwaddr); sam0_eth_set_mac(&hwaddr); + + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/cpu/stm32/periph/eth.c b/cpu/stm32/periph/eth.c index 43d7e1628e..27d7ecd9ae 100644 --- a/cpu/stm32/periph/eth.c +++ b/cpu/stm32/periph/eth.c @@ -460,6 +460,11 @@ static int stm32_eth_init(netdev_t *netdev) _setup_phy(); + /* signal link UP if no proper link detection is enabled */ + if (!IS_USED(MODULE_STM32_ETH_LINK_UP)) { + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + } + return 0; } diff --git a/drivers/at86rf215/at86rf215_netdev.c b/drivers/at86rf215/at86rf215_netdev.c index 5a2ce1f6ba..58b1b02f95 100644 --- a/drivers/at86rf215/at86rf215_netdev.c +++ b/drivers/at86rf215/at86rf215_netdev.c @@ -137,6 +137,9 @@ static int _init(netdev_t *netdev) /* reset device to default values and put it into RX state */ at86rf215_reset_and_cfg(dev); + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/drivers/at86rf2xx/at86rf2xx_netdev.c b/drivers/at86rf2xx/at86rf2xx_netdev.c index ae5e32a989..5d387b2403 100644 --- a/drivers/at86rf2xx/at86rf2xx_netdev.c +++ b/drivers/at86rf2xx/at86rf2xx_netdev.c @@ -108,6 +108,9 @@ static int _init(netdev_t *netdev) /* reset device to default values and put it into RX state */ at86rf2xx_reset(dev); + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/drivers/cc110x/cc110x_netdev.c b/drivers/cc110x/cc110x_netdev.c index a2d56abbfe..5d66fc856a 100644 --- a/drivers/cc110x/cc110x_netdev.c +++ b/drivers/cc110x/cc110x_netdev.c @@ -343,6 +343,10 @@ static int cc110x_init(netdev_t *netdev) } DEBUG("[cc110x] netdev_driver_t::init(): Success\n"); + + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/drivers/cc2420/cc2420_netdev.c b/drivers/cc2420/cc2420_netdev.c index 82c3e64718..bf05998b5b 100644 --- a/drivers/cc2420/cc2420_netdev.c +++ b/drivers/cc2420/cc2420_netdev.c @@ -136,7 +136,13 @@ static int _init(netdev_t *netdev) return -1; } - return cc2420_init(dev); + int res = cc2420_init(dev); + if (res == 0) { + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + } + + return res; } static void _isr(netdev_t *netdev) diff --git a/drivers/dose/dose.c b/drivers/dose/dose.c index cf17d128bf..2c1e8effef 100644 --- a/drivers/dose/dose.c +++ b/drivers/dose/dose.c @@ -761,6 +761,8 @@ static int _init(netdev_t *dev) state(ctx, DOSE_SIGNAL_INIT); + dev->event_callback(dev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/drivers/ethos/ethos.c b/drivers/ethos/ethos.c index 6df510b229..69f5763f78 100644 --- a/drivers/ethos/ethos.c +++ b/drivers/ethos/ethos.c @@ -211,9 +211,11 @@ static void _isr(netdev_t *netdev) netdev->event_callback(netdev, NETDEV_EVENT_RX_COMPLETE); } -static int _init(netdev_t *encdev) +static int _init(netdev_t *netdev) { - (void)encdev; + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/drivers/kw41zrf/kw41zrf_netdev.c b/drivers/kw41zrf/kw41zrf_netdev.c index f5d9e170cf..c8910b1bba 100644 --- a/drivers/kw41zrf/kw41zrf_netdev.c +++ b/drivers/kw41zrf/kw41zrf_netdev.c @@ -100,6 +100,9 @@ static int kw41zrf_netdev_init(netdev_t *netdev) return -1; } + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/drivers/mrf24j40/mrf24j40_netdev.c b/drivers/mrf24j40/mrf24j40_netdev.c index 098b1c852e..e11fa4064f 100644 --- a/drivers/mrf24j40/mrf24j40_netdev.c +++ b/drivers/mrf24j40/mrf24j40_netdev.c @@ -64,6 +64,9 @@ static int _init(netdev_t *netdev) return -ENODEV; } + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/drivers/netdev_ieee802154_submac/netdev_ieee802154_submac.c b/drivers/netdev_ieee802154_submac/netdev_ieee802154_submac.c index d5692a5f57..8d54906d7e 100644 --- a/drivers/netdev_ieee802154_submac/netdev_ieee802154_submac.c +++ b/drivers/netdev_ieee802154_submac/netdev_ieee802154_submac.c @@ -365,6 +365,10 @@ static int _init(netdev_t *netdev) &enable, sizeof(enable)); netdev_submac->dev.txpower = tx_power; + + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/drivers/nrf24l01p_ng/nrf24l01p_ng_netdev.c b/drivers/nrf24l01p_ng/nrf24l01p_ng_netdev.c index c3ddd71425..aef405d429 100644 --- a/drivers/nrf24l01p_ng/nrf24l01p_ng_netdev.c +++ b/drivers/nrf24l01p_ng/nrf24l01p_ng_netdev.c @@ -255,6 +255,10 @@ static int _init(netdev_t *netdev) DEBUG_PUTS("[nrf24l01p_ng] _init(): gpio_init_int() failed"); return -EIO; } + + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/drivers/slipdev/slipdev.c b/drivers/slipdev/slipdev.c index e120b8deb9..1823d54d17 100644 --- a/drivers/slipdev/slipdev.c +++ b/drivers/slipdev/slipdev.c @@ -88,6 +88,10 @@ static int _init(netdev_t *netdev) dev->config.uart, dev->config.baudrate); return -ENODEV; } + + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/drivers/sx126x/sx126x_netdev.c b/drivers/sx126x/sx126x_netdev.c index 6940e20a0b..306a1692a4 100644 --- a/drivers/sx126x/sx126x_netdev.c +++ b/drivers/sx126x/sx126x_netdev.c @@ -141,6 +141,10 @@ static int _init(netdev_t *netdev) } DEBUG("[sx126x] netdev: initialization successful\n"); + + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/drivers/sx127x/sx127x_netdev.c b/drivers/sx127x/sx127x_netdev.c index c2091fea26..9114caa0d6 100644 --- a/drivers/sx127x/sx127x_netdev.c +++ b/drivers/sx127x/sx127x_netdev.c @@ -229,6 +229,9 @@ static int _init(netdev_t *netdev) DEBUG("[sx127x] netdev: initialization done\n"); + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/drivers/sx1280/sx1280_netdev.c b/drivers/sx1280/sx1280_netdev.c index 4c48fd6244..4b55bc75de 100644 --- a/drivers/sx1280/sx1280_netdev.c +++ b/drivers/sx1280/sx1280_netdev.c @@ -149,6 +149,10 @@ static int _init(netdev_t *netdev) } DEBUG("[sx1280] netdev: initialization successful\n"); + + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/drivers/w5100/w5100.c b/drivers/w5100/w5100.c index 3b13d6d446..d5c2b4bd59 100644 --- a/drivers/w5100/w5100.c +++ b/drivers/w5100/w5100.c @@ -180,6 +180,9 @@ static int init(netdev_t *netdev) /* release the SPI bus again */ spi_release(dev->p.spi); + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/drivers/xbee/xbee.c b/drivers/xbee/xbee.c index 930b670057..7dcbb718d9 100644 --- a/drivers/xbee/xbee.c +++ b/drivers/xbee/xbee.c @@ -639,6 +639,10 @@ int xbee_init(netdev_t *dev) } DEBUG("[xbee] init: Initialization successful\n"); + + /* signal link UP */ + dev->event_callback(dev, NETDEV_EVENT_LINK_UP); + return 0; } diff --git a/sys/usb/usbus/cdc/ecm/cdc_ecm_netdev.c b/sys/usb/usbus/cdc/ecm/cdc_ecm_netdev.c index b7a8d81535..906ab9f2d0 100644 --- a/sys/usb/usbus/cdc/ecm/cdc_ecm_netdev.c +++ b/sys/usb/usbus/cdc/ecm/cdc_ecm_netdev.c @@ -155,6 +155,9 @@ static int _init(netdev_t *netdev) netdev_eui48_get(netdev, (eui48_t*)&cdcecm->mac_netdev); + /* signal link UP */ + netdev->event_callback(netdev, NETDEV_EVENT_LINK_UP); + return 0; }