@@ -269,7 +269,7 @@ struct netdev *netdev_get_by_family(int family)
269269 {
270270 netdev = rt_slist_entry (node , struct netdev , list );
271271 pf = (struct sal_proto_family * ) netdev -> sal_user_data ;
272- if (pf && pf -> skt_ops && pf -> family == family && netdev_is_up (netdev ) && netdev_is_link_up ( netdev ) )
272+ if (pf && pf -> skt_ops && pf -> family == family && netdev_is_up (netdev ))
273273 {
274274 rt_hw_interrupt_enable (level );
275275 return netdev ;
@@ -671,6 +671,23 @@ void netdev_low_level_set_dns_server(struct netdev *netdev, uint8_t dns_num, con
671671 }
672672}
673673
674+ #ifdef NETDEV_USING_AUTO_DEFAULT
675+ /* Change to the first link_up network interface device automatically */
676+ static void netdev_auto_change_default (struct netdev * netdev )
677+ {
678+ struct netdev * new_netdev = RT_NULL ;
679+
680+ if (rt_memcmp (netdev , netdev_default , sizeof (struct netdev )) == 0 )
681+ {
682+ new_netdev = netdev_get_first_link_up ();
683+ if (new_netdev )
684+ {
685+ netdev_set_default (new_netdev );
686+ }
687+ }
688+ }
689+ #endif /* NETDEV_USING_AUTO_DEFAULT */
690+
674691/**
675692 * This function will set network interface device status.
676693 * @NOTE it can only be called in the network interface device driver.
@@ -689,6 +706,11 @@ void netdev_low_level_set_status(struct netdev *netdev, rt_bool_t is_up)
689706 else
690707 {
691708 netdev -> flags &= ~NETDEV_FLAG_UP ;
709+
710+ #ifdef NETDEV_USING_AUTO_DEFAULT
711+ /* change to the first link_up network interface device automatically */
712+ netdev_auto_change_default (netdev );
713+ #endif /* NETDEV_USING_AUTO_DEFAULT */
692714 }
693715
694716 /* execute network interface device status change callback function */
@@ -728,6 +750,11 @@ void netdev_low_level_set_link_status(struct netdev *netdev, rt_bool_t is_up)
728750
729751 /* set network interface device flags to internet down */
730752 netdev -> flags &= ~NETDEV_FLAG_INTERNET_UP ;
753+
754+ #ifdef NETDEV_USING_AUTO_DEFAULT
755+ /* change to the first link_up network interface device automatically */
756+ netdev_auto_change_default (netdev );
757+ #endif /* NETDEV_USING_AUTO_DEFAULT */
731758 }
732759
733760 /* execute link status change callback function */
0 commit comments