Skip to content

[refact](netdev): Expose netdev_set_dns and netdev_set_if #10128

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion components/net/netdev/include/netdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,9 @@ int netdev_dhcp_enabled(struct netdev *netdev, rt_bool_t is_enabled);
int netdev_set_ipaddr(struct netdev *netdev, const ip_addr_t *ipaddr);
int netdev_set_netmask(struct netdev *netdev, const ip_addr_t *netmask);
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);
void netdev_set_dns(char *netdev_name, uint8_t dns_num, char *dns_server);
int netdev_set_dns_server(struct netdev *netdev, uint8_t dns_num, const ip_addr_t *dns_server);
void netdev_set_if(char *netdev_name, char *ip_addr, char *gw_addr, char *nm_addr);

/* 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);
Expand Down
184 changes: 100 additions & 84 deletions components/net/netdev/src/netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -580,6 +580,7 @@ int netdev_set_down(struct netdev *netdev)
return err;
}

#ifdef RT_LWIP_DHCP
/**
* This function will control network interface device DHCP capability enable or disable.
*
Expand Down Expand Up @@ -609,6 +610,34 @@ int netdev_dhcp_enabled(struct netdev *netdev, rt_bool_t is_enabled)
return netdev->ops->set_dhcp(netdev, is_enabled);
}

int netdev_dhcp_open(char *netdev_name)
{
struct netdev *netdev = RT_NULL;
netdev = netdev_get_by_name(netdev_name);
if (netdev == RT_NULL)
{
rt_kprintf("bad network interface device name(%s).\n", netdev_name);
return -1;
}
netdev_dhcp_enabled(netdev, RT_TRUE);
return 0;
}

int netdev_dhcp_close(char *netdev_name)
{
struct netdev *netdev = RT_NULL;

netdev = netdev_get_by_name(netdev_name);
if (netdev == RT_NULL)
{
rt_kprintf("bad network interface device name(%s).\n", netdev_name);
return -1;
}
netdev_dhcp_enabled(netdev, RT_FALSE);
return 0;
}
#endif /* RT_LWIP_DHCP */

/**
* This function will set network interface device IP address.
*
Expand Down Expand Up @@ -708,6 +737,32 @@ int netdev_set_gw(struct netdev *netdev, const ip_addr_t *gw)
return netdev->ops->set_addr_info(netdev, RT_NULL, RT_NULL, (ip_addr_t *)gw);
}

/**
* This function will try to get network device and set DNS server address.
*
* @param netdev_name the network interface device name
* @param dns_num the number of the DNS server
* @param dns_server the new DNS server address
*/
void netdev_set_dns(char *netdev_name, uint8_t dns_num, char *dns_server)
{
struct netdev *netdev = RT_NULL;
ip_addr_t dns_addr;

netdev = netdev_get_by_name(netdev_name);
if (netdev == RT_NULL)
{
rt_kprintf("bad network interface device name(%s).\n", netdev_name);
return;
}

inet_aton(dns_server, &dns_addr);
Copy link
Preview

Copilot AI Apr 15, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider verifying the return value of inet_aton to ensure that the DNS server address string is valid before calling netdev_set_dns_server.

Suggested change
inet_aton(dns_server, &dns_addr);
if (inet_aton(dns_server, &dns_addr) == 0)
{
rt_kprintf("invalid DNS server address: %s\n", dns_server);
return;
}

Copilot uses AI. Check for mistakes.

if (netdev_set_dns_server(netdev, dns_num, &dns_addr) == RT_EOK)
{
rt_kprintf("set network interface device(%s) dns server #%d: %s\n", netdev_name, dns_num, dns_server);
}
}

/**
* This function will set network interface device DNS server address.
*
Expand Down Expand Up @@ -739,6 +794,49 @@ int netdev_set_dns_server(struct netdev *netdev, uint8_t dns_num, const ip_addr_
return netdev->ops->set_dns_server(netdev, dns_num, (ip_addr_t *)dns_server);
}

/**
* This function will set network interface device IP, gateway and netmask address according to device name.
*
* @param netdev_name the network interface device name
* @param ip_addr the new IP address
* @param gw_addr the new gateway address
* @param nm_addr the new netmask address
*/
void netdev_set_if(char *netdev_name, char *ip_addr, char *gw_addr, char *nm_addr)
{
struct netdev *netdev = RT_NULL;
ip_addr_t addr;

netdev = netdev_get_by_name(netdev_name);
if (netdev == RT_NULL)
{
rt_kprintf("bad network interface device name(%s).\n", netdev_name);
return;
}

#ifdef RT_LWIP_DHCP
netdev_dhcp_close(netdev_name);
#endif

/* set IP address */
if ((ip_addr != RT_NULL) && inet_aton(ip_addr, &addr))
{
netdev_set_ipaddr(netdev, &addr);
}

/* set gateway address */
if ((gw_addr != RT_NULL) && inet_aton(gw_addr, &addr))
{
netdev_set_gw(netdev, &addr);
}

/* set netmask address */
if ((nm_addr != RT_NULL) && inet_aton(nm_addr, &addr))
{
netdev_set_netmask(netdev, &addr);
}
}

/**
* This function will set callback to be called when the network interface device status has been changed.
*
Expand Down Expand Up @@ -1172,70 +1270,6 @@ static void netdev_list_if(void)
}
}

#ifdef RT_LWIP_DHCP
int netdev_dhcp_open(char* netdev_name)
{
struct netdev *netdev = RT_NULL;
netdev = netdev_get_by_name(netdev_name);
if (netdev == RT_NULL)
{
rt_kprintf("bad network interface device name(%s).\n", netdev_name);
return -1;
}
netdev_dhcp_enabled(netdev,RT_TRUE);
return 0;
}

int netdev_dhcp_close(char* netdev_name)
{
struct netdev *netdev = RT_NULL;

netdev = netdev_get_by_name(netdev_name);
if (netdev == RT_NULL)
{
rt_kprintf("bad network interface device name(%s).\n", netdev_name);
return -1;
}
netdev_dhcp_enabled(netdev,RT_FALSE);
return 0;
}
#endif

static void netdev_set_if(char* netdev_name, char* ip_addr, char* gw_addr, char* nm_addr)
{
struct netdev *netdev = RT_NULL;
ip_addr_t addr;

netdev = netdev_get_by_name(netdev_name);
if (netdev == RT_NULL)
{
rt_kprintf("bad network interface device name(%s).\n", netdev_name);
return;
}

#ifdef RT_LWIP_DHCP
netdev_dhcp_close(netdev_name);
#endif

/* set IP address */
if ((ip_addr != RT_NULL) && inet_aton(ip_addr, &addr))
{
netdev_set_ipaddr(netdev, &addr);
}

/* set gateway address */
if ((gw_addr != RT_NULL) && inet_aton(gw_addr, &addr))
{
netdev_set_gw(netdev, &addr);
}

/* set netmask address */
if ((nm_addr != RT_NULL) && inet_aton(nm_addr, &addr))
{
netdev_set_netmask(netdev, &addr);
}
}

int netdev_ifconfig(int argc, char **argv)
{
if (argc == 1)
Expand Down Expand Up @@ -1429,7 +1463,7 @@ int netdev_ping(int argc, char **argv)
return 0;
}
MSH_CMD_EXPORT_ALIAS(netdev_ping, ping, ping network host);
#endif /* NETDEV_USING_IFCONFIG */
#endif /* NETDEV_USING_PING */

static void netdev_list_dns(void)
{
Expand Down Expand Up @@ -1457,25 +1491,6 @@ static void netdev_list_dns(void)
}
}

static void netdev_set_dns(char *netdev_name, uint8_t dns_num, char *dns_server)
{
struct netdev *netdev = RT_NULL;
ip_addr_t dns_addr;

netdev = netdev_get_by_name(netdev_name);
if (netdev == RT_NULL)
{
rt_kprintf("bad network interface device name(%s).\n", netdev_name);
return;
}

inet_aton(dns_server, &dns_addr);
if (netdev_set_dns_server(netdev, dns_num, &dns_addr) == RT_EOK)
{
rt_kprintf("set network interface device(%s) dns server #%d: %s\n", netdev_name, dns_num, dns_server);
}
}

int netdev_dns(int argc, char **argv)
{
if (argc == 1)
Expand All @@ -1499,6 +1514,7 @@ int netdev_dns(int argc, char **argv)
return 0;
}
MSH_CMD_EXPORT_ALIAS(netdev_dns, dns, list and set the information of dns);

#ifdef NETDEV_USING_NETSTAT
static void netdev_cmd_netstat(void)
{
Expand Down