MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / netdev_register

Function netdev_register

components/net/netdev/src/netdev.c:56–138  ·  view source on GitHub ↗

* This function will register network interface device and * add it to network interface device list. * * @param netdev the network interface device object * @param name the network interface device name * @param user_data user-specific data * * @return 0: registered successfully * -1: registered failed */

Source from the content-addressed store, hash-verified

54 * -1: registered failed
55 */
56int netdev_register(struct netdev *netdev, const char *name, void *user_data)
57{
58 rt_uint16_t flags_mask;
59 rt_uint16_t index;
60
61 RT_ASSERT(netdev);
62 RT_ASSERT(name);
63
64 /* clean network interface device */
65 flags_mask = NETDEV_FLAG_UP | NETDEV_FLAG_LINK_UP | NETDEV_FLAG_INTERNET_UP | NETDEV_FLAG_DHCP;
66 netdev->flags &= ~flags_mask;
67
68 ip_addr_set_zero(&(netdev->ip_addr));
69 ip_addr_set_zero(&(netdev->netmask));
70 ip_addr_set_zero(&(netdev->gw));
71
72 IP_SET_TYPE_VAL(netdev->ip_addr, IPADDR_TYPE_V4);
73 IP_SET_TYPE_VAL(netdev->netmask, IPADDR_TYPE_V4);
74 IP_SET_TYPE_VAL(netdev->gw, IPADDR_TYPE_V4);
75#if NETDEV_IPV6
76 for (index = 0; index < NETDEV_IPV6_NUM_ADDRESSES; index++)
77 {
78 ip_addr_set_zero(&(netdev->ip6_addr[index]));
79 IP_SET_TYPE_VAL(netdev->ip_addr, IPADDR_TYPE_V6);
80 }
81#endif /* NETDEV_IPV6 */
82 for (index = 0; index < NETDEV_DNS_SERVERS_NUM; index++)
83 {
84 ip_addr_set_zero(&(netdev->dns_servers[index]));
85 IP_SET_TYPE_VAL(netdev->ip_addr, IPADDR_TYPE_V4);
86 }
87 netdev->status_callback = RT_NULL;
88 netdev->addr_callback = RT_NULL;
89
90 if(rt_strlen(name) > RT_NAME_MAX)
91 {
92 char netdev_name[RT_NAME_MAX + 1] = {0};
93
94 rt_strncpy(netdev_name, name, RT_NAME_MAX);
95 LOG_E("netdev name[%s] length is so long that have been cut into [%s].", name, netdev_name);
96 }
97
98 /* fill network interface device */
99 rt_strncpy(netdev->name, name, RT_NAME_MAX);
100 netdev->user_data = user_data;
101
102 /* initialize current network interface device single list */
103 rt_slist_init(&(netdev->list));
104
105 rt_spin_lock(&_spinlock);
106
107 if (netdev_list == RT_NULL)
108 {
109 netdev_list = netdev;
110 }
111 else
112 {
113 /* tail insertion */

Callers 3

netdev_addFunction · 0.85
win_netdev_addFunction · 0.85

Calls 7

rt_strlenFunction · 0.85
rt_strncpyFunction · 0.85
rt_slist_initFunction · 0.85
rt_slist_appendFunction · 0.85
netdev_set_defaultFunction · 0.85
rt_spin_lockFunction · 0.50
rt_spin_unlockFunction · 0.50

Tested by 1