| 1191 | #define IFF_NOARP 0x80 |
| 1192 | |
| 1193 | int 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; |
no test coverage detected