From 7ec14378ef65590043e89a13fea1db305f9bbaf1 Mon Sep 17 00:00:00 2001 From: tyx <462747508@qq.com> Date: Sat, 29 Oct 2022 09:17:55 +0800 Subject: [PATCH] [net][netdev]Add more hook functions --- components/net/netdev/include/netdev.h | 4 +++ components/net/netdev/src/netdev.c | 37 ++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/components/net/netdev/include/netdev.h b/components/net/netdev/include/netdev.h index 91f68ba3ea..ae0e89b65b 100644 --- a/components/net/netdev/include/netdev.h +++ b/components/net/netdev/include/netdev.h @@ -67,6 +67,8 @@ enum netdev_cb_type NETDEV_CB_STATUS_INTERNET_DOWN, /* changed to 'internet down' */ NETDEV_CB_STATUS_DHCP_ENABLE, /* enable DHCP capability */ NETDEV_CB_STATUS_DHCP_DISABLE, /* disable DHCP capability */ + NETDEV_CB_REGISTER, /* netdev register */ + NETDEV_CB_DEFAULT_CHANGE, /* netdev default change */ }; struct netdev; @@ -157,6 +159,7 @@ int netdev_family_get(struct netdev *netdev); /* Set default network interface device in list */ void netdev_set_default(struct netdev *netdev); +void netdev_set_default_change_callback(netdev_callback_fn register_callback); /* Set network interface device status */ int netdev_set_up(struct netdev *netdev); @@ -176,6 +179,7 @@ int netdev_set_gw(struct netdev *netdev, const ip_addr_t *gw); int netdev_set_dns_server(struct netdev *netdev, uint8_t dns_num, const ip_addr_t *dns_server); /* Set network interface device callback, it can be called when the status or address changed */ +void netdev_set_register_callback(netdev_callback_fn status_callback); void netdev_set_status_callback(struct netdev *netdev, netdev_callback_fn status_callback); void netdev_set_addr_callback(struct netdev *netdev, netdev_callback_fn addr_callback); diff --git a/components/net/netdev/src/netdev.c b/components/net/netdev/src/netdev.c index 319329b20e..9f1165c52f 100644 --- a/components/net/netdev/src/netdev.c +++ b/components/net/netdev/src/netdev.c @@ -31,6 +31,9 @@ struct netdev *netdev_list = RT_NULL; /* The default network interface device */ struct netdev *netdev_default = RT_NULL; +/* The global network register callback */ +static netdev_callback_fn g_netdev_register_callback = RT_NULL; +static netdev_callback_fn g_netdev_default_change_callback = RT_NULL; /** * This function will register network interface device and @@ -112,6 +115,12 @@ int netdev_register(struct netdev *netdev, const char *name, void *user_data) netdev_set_default(netdev_list); } + /* execute netdev register callback */ + if (g_netdev_register_callback) + { + g_netdev_register_callback(netdev, NETDEV_CB_REGISTER); + } + return RT_EOK; } @@ -179,6 +188,17 @@ int netdev_unregister(struct netdev *netdev) return -RT_ERROR; } +/** + * This function will set register callback + * + * @param register_callback the network register callback + * + */ +void netdev_set_register_callback(netdev_callback_fn register_callback) +{ + g_netdev_register_callback = register_callback; +} + /** * This function will get the first network interface device * with the flags in network interface device list. @@ -373,10 +393,27 @@ void netdev_set_default(struct netdev *netdev) { netdev->ops->set_default(netdev); } + + /* execture application netdev default change callback */ + if (g_netdev_default_change_callback) + { + g_netdev_default_change_callback(netdev, NETDEV_CB_DEFAULT_CHANGE); + } LOG_D("Setting default network interface device name(%s) successfully.", netdev->name); } } +/** + * This function will set defalut netdev change callback + * + * @param register_callback the network default change callback + * + */ +void netdev_set_default_change_callback(netdev_callback_fn register_callback) +{ + g_netdev_default_change_callback = register_callback; +} + /** * This function will enable network interface device . *