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

Function sal_ioctlsocket

components/net/sal/src/sal_socket.c:1193–1525  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1191#define IFF_NOARP 0x80
1192
1193int sal_ioctlsocket(int socket, long cmd, void *arg)
1194{
1195 rt_slist_t *node = RT_NULL;
1196 struct netdev *netdev = RT_NULL;
1197 struct netdev *cur_netdev_list = netdev_list;
1198 struct sal_socket *sock;
1199 struct sal_proto_family *pf;
1200 struct sockaddr_in *addr_in = RT_NULL;
1201 struct sockaddr *addr = RT_NULL;
1202 ip_addr_t input_ipaddr;
1203 /* get the socket object by socket descriptor */
1204 SAL_SOCKET_OBJ_GET(sock, socket);
1205
1206 struct sal_ifreq *ifr = (struct sal_ifreq *)arg;
1207
1208 if (ifr != RT_NULL)
1209 {
1210 switch (cmd)
1211 {
1212 case SIOCGIFADDR:
1213 if (!strcmp(ifr->ifr_ifrn.ifrn_name, sock->netdev->name))
1214 {
1215 addr_in = (struct sockaddr_in *)&(ifr->ifr_ifru.ifru_addr);
1216#if NETDEV_IPV4 && NETDEV_IPV6
1217 addr_in->sin_addr.s_addr = sock->netdev->ip_addr.u_addr.ip4.addr;
1218#elif NETDEV_IPV4
1219 addr_in->sin_addr.s_addr = sock->netdev->ip_addr.addr;
1220#elif NETDEV_IPV6
1221#error "not only support IPV6"
1222#endif /* NETDEV_IPV4 && NETDEV_IPV6*/
1223 return 0;
1224 }
1225 else
1226 {
1227 if (cur_netdev_list == RT_NULL)
1228 {
1229 LOG_E("ifconfig: network interface device list error.\n");
1230 return -1;
1231 }
1232
1233 for (node = &(cur_netdev_list->list); node; node = rt_slist_next(node))
1234 {
1235 netdev = rt_list_entry(node, struct netdev, list);
1236 if (!strcmp(ifr->ifr_ifrn.ifrn_name, netdev->name))
1237 {
1238 addr_in = (struct sockaddr_in *)&(ifr->ifr_ifru.ifru_addr);
1239#if NETDEV_IPV4 && NETDEV_IPV6
1240 addr_in->sin_addr.s_addr = netdev->ip_addr.u_addr.ip4.addr;
1241#elif NETDEV_IPV4
1242 addr_in->sin_addr.s_addr = netdev->ip_addr.addr;
1243#elif NETDEV_IPV6
1244#error "Do not only support IPV6"
1245#endif /* NETDEV_IPV4 && NETDEV_IPV6 */
1246
1247 return 0;
1248 }
1249 }
1250 return -1;

Callers 3

dfs_net_ioctlFunction · 0.85
ioctlsocketFunction · 0.85
server_thread_entryFunction · 0.85

Calls 9

rt_slist_nextFunction · 0.85
sal_sockaddr_to_ipaddrFunction · 0.85
netdev_set_ipaddrFunction · 0.85
netdev_set_netmaskFunction · 0.85
rt_memcpyFunction · 0.85
netdev_set_downFunction · 0.85
netdev_set_upFunction · 0.85
rt_strcpyFunction · 0.85
netdev_get_by_nameFunction · 0.85

Tested by

no test coverage detected