xiaoxiang781216 commented on code in PR #7020: URL: https://github.com/apache/incubator-nuttx/pull/7020#discussion_r964354825
########## net/netdev/netdev_ioctl.c: ########## @@ -636,279 +700,183 @@ static FAR struct net_driver_s *netdev_ifr_dev(FAR struct ifreq *req) static int netdev_ifr_ioctl(FAR struct socket *psock, int cmd, FAR struct ifreq *req) { - FAR struct net_driver_s *dev; - int ret = -EINVAL; + FAR struct net_driver_s *dev = NULL; + int ret = OK; ninfo("cmd: %d\n", cmd); net_lock(); - /* Execute the command */ + /* Execute commands that do not need ifr_name or lifr_name */ switch (cmd) { + case SIOCGIFCOUNT: /* Get number of devices */ + req->ifr_count = netdev_count(); + break; + #ifdef CONFIG_NET_IPv4 - case SIOCGIFADDR: /* Get IP address */ - { - dev = netdev_ifr_dev(req); - if (dev) - { - ioctl_get_ipv4addr(&req->ifr_addr, dev->d_ipaddr); - ret = OK; - } - } + case SIOCGIFCONF: /* Return an interface list (IPv4) */ + ret = netdev_ipv4_ifconf((FAR struct ifconf *)req); break; #endif -#ifdef CONFIG_NET_IPv4 - case SIOCSIFADDR: /* Set IP address */ - { - dev = netdev_ifr_dev(req); - if (dev) - { - ioctl_set_ipv4addr(&dev->d_ipaddr, &req->ifr_addr); - ret = OK; - } - } +#ifdef CONFIG_NET_IPv6 + case SIOCGLIFCONF: /* Return an interface list (IPv6) */ + ret = netdev_ipv6_ifconf((FAR struct lifconf *)req); break; #endif -#ifdef CONFIG_NET_IPv4 - case SIOCGIFDSTADDR: /* Get P-to-P address */ +#ifdef CONFIG_NETDEV_IFINDEX + case SIOCGIFNAME: /* Get interface name */ { - dev = netdev_ifr_dev(req); - if (dev) + FAR struct net_driver_s *tmpdev; + tmpdev = netdev_findbyindex(req->ifr_ifindex); + if (tmpdev != NULL) + { + strlcpy(req->ifr_name, tmpdev->d_ifname, IFNAMSIZ); + } + else { - ioctl_get_ipv4addr(&req->ifr_dstaddr, dev->d_draddr); - ret = OK; + ret = -ENODEV; } } break; #endif - -#ifdef CONFIG_NET_IPv4 - case SIOCSIFDSTADDR: /* Set P-to-P address */ + default: { - dev = netdev_ifr_dev(req); - if (dev) + if (net_ioctl_ifreq_arglen(cmd) > 0) { - ioctl_set_ipv4addr(&dev->d_draddr, &req->ifr_dstaddr); - ret = OK; + dev = netdev_ifr_dev(req); + if (dev == NULL) + { + ret = -ENODEV; + } + } + else + { + ret = -ENOTTY; } } break; -#endif + } + + if (dev == NULL) + { + return ret; + } + + /* Execute commands that need ifr_name or lifr_name */ + switch (cmd) + { #ifdef CONFIG_NET_IPv4 + case SIOCGIFADDR: /* Get IP address */ + ioctl_get_ipv4addr(&req->ifr_addr, dev->d_ipaddr); + break; + + case SIOCSIFADDR: /* Set IP address */ + ioctl_set_ipv4addr(&dev->d_ipaddr, &req->ifr_addr); + break; + + case SIOCGIFDSTADDR: /* Get P-to-P address */ + ioctl_get_ipv4addr(&req->ifr_dstaddr, dev->d_draddr); + break; + + case SIOCSIFDSTADDR: /* Set P-to-P address */ + ioctl_set_ipv4addr(&dev->d_draddr, &req->ifr_dstaddr); + break; + case SIOCGIFBRDADDR: /* Get broadcast IP address */ - { - dev = netdev_ifr_dev(req); - if (dev) - { - ioctl_get_ipv4broadcast(&req->ifr_broadaddr, dev->d_ipaddr, - dev->d_netmask); - ret = OK; - } - } + ioctl_get_ipv4broadcast(&req->ifr_broadaddr, dev->d_ipaddr, + dev->d_netmask); break; -#endif -#ifdef CONFIG_NET_IPv4 case SIOCSIFBRDADDR: /* Set broadcast IP address */ - { - ret = -ENOSYS; - } + ret = -ENOSYS; break; -#endif -#ifdef CONFIG_NET_IPv4 case SIOCGIFNETMASK: /* Get network mask */ - { - dev = netdev_ifr_dev(req); - if (dev) - { - ioctl_get_ipv4addr(&req->ifr_addr, dev->d_netmask); - ret = OK; - } - } + ioctl_get_ipv4addr(&req->ifr_addr, dev->d_netmask); break; -#endif -#ifdef CONFIG_NET_IPv4 case SIOCSIFNETMASK: /* Set network mask */ - { - dev = netdev_ifr_dev(req); - if (dev) - { - ioctl_set_ipv4addr(&dev->d_netmask, &req->ifr_addr); - ret = OK; - } - } + ioctl_set_ipv4addr(&dev->d_netmask, &req->ifr_addr); break; #endif #ifdef CONFIG_NET_IPv6 case SIOCGLIFADDR: /* Get IP address */ - { - dev = netdev_ifr_dev(req); - if (dev) - { - FAR struct lifreq *lreq = (FAR struct lifreq *)req; - - ioctl_get_ipv6addr(&lreq->lifr_addr, dev->d_ipv6addr); - ret = OK; - } - } + FAR struct lifreq *lreq = (FAR struct lifreq *)req; Review Comment: need {} ########## net/netdev/netdev_ioctl.c: ########## @@ -636,279 +700,183 @@ static FAR struct net_driver_s *netdev_ifr_dev(FAR struct ifreq *req) static int netdev_ifr_ioctl(FAR struct socket *psock, int cmd, FAR struct ifreq *req) { - FAR struct net_driver_s *dev; - int ret = -EINVAL; + FAR struct net_driver_s *dev = NULL; + int ret = OK; ninfo("cmd: %d\n", cmd); net_lock(); - /* Execute the command */ + /* Execute commands that do not need ifr_name or lifr_name */ switch (cmd) { + case SIOCGIFCOUNT: /* Get number of devices */ + req->ifr_count = netdev_count(); + break; + #ifdef CONFIG_NET_IPv4 - case SIOCGIFADDR: /* Get IP address */ - { - dev = netdev_ifr_dev(req); - if (dev) - { - ioctl_get_ipv4addr(&req->ifr_addr, dev->d_ipaddr); - ret = OK; - } - } + case SIOCGIFCONF: /* Return an interface list (IPv4) */ + ret = netdev_ipv4_ifconf((FAR struct ifconf *)req); break; #endif -#ifdef CONFIG_NET_IPv4 - case SIOCSIFADDR: /* Set IP address */ - { - dev = netdev_ifr_dev(req); - if (dev) - { - ioctl_set_ipv4addr(&dev->d_ipaddr, &req->ifr_addr); - ret = OK; - } - } +#ifdef CONFIG_NET_IPv6 + case SIOCGLIFCONF: /* Return an interface list (IPv6) */ + ret = netdev_ipv6_ifconf((FAR struct lifconf *)req); break; #endif -#ifdef CONFIG_NET_IPv4 - case SIOCGIFDSTADDR: /* Get P-to-P address */ +#ifdef CONFIG_NETDEV_IFINDEX + case SIOCGIFNAME: /* Get interface name */ { - dev = netdev_ifr_dev(req); - if (dev) + FAR struct net_driver_s *tmpdev; + tmpdev = netdev_findbyindex(req->ifr_ifindex); + if (tmpdev != NULL) + { + strlcpy(req->ifr_name, tmpdev->d_ifname, IFNAMSIZ); + } + else { - ioctl_get_ipv4addr(&req->ifr_dstaddr, dev->d_draddr); - ret = OK; + ret = -ENODEV; } } break; #endif - -#ifdef CONFIG_NET_IPv4 - case SIOCSIFDSTADDR: /* Set P-to-P address */ + default: { - dev = netdev_ifr_dev(req); - if (dev) + if (net_ioctl_ifreq_arglen(cmd) > 0) { - ioctl_set_ipv4addr(&dev->d_draddr, &req->ifr_dstaddr); - ret = OK; + dev = netdev_ifr_dev(req); + if (dev == NULL) + { + ret = -ENODEV; + } + } + else + { + ret = -ENOTTY; } } break; -#endif + } + + if (dev == NULL) + { + return ret; + } + + /* Execute commands that need ifr_name or lifr_name */ + switch (cmd) + { #ifdef CONFIG_NET_IPv4 + case SIOCGIFADDR: /* Get IP address */ + ioctl_get_ipv4addr(&req->ifr_addr, dev->d_ipaddr); + break; + + case SIOCSIFADDR: /* Set IP address */ + ioctl_set_ipv4addr(&dev->d_ipaddr, &req->ifr_addr); + break; + + case SIOCGIFDSTADDR: /* Get P-to-P address */ + ioctl_get_ipv4addr(&req->ifr_dstaddr, dev->d_draddr); + break; + + case SIOCSIFDSTADDR: /* Set P-to-P address */ + ioctl_set_ipv4addr(&dev->d_draddr, &req->ifr_dstaddr); + break; + case SIOCGIFBRDADDR: /* Get broadcast IP address */ - { - dev = netdev_ifr_dev(req); - if (dev) - { - ioctl_get_ipv4broadcast(&req->ifr_broadaddr, dev->d_ipaddr, - dev->d_netmask); - ret = OK; - } - } + ioctl_get_ipv4broadcast(&req->ifr_broadaddr, dev->d_ipaddr, + dev->d_netmask); break; -#endif -#ifdef CONFIG_NET_IPv4 case SIOCSIFBRDADDR: /* Set broadcast IP address */ - { - ret = -ENOSYS; - } + ret = -ENOSYS; break; -#endif -#ifdef CONFIG_NET_IPv4 case SIOCGIFNETMASK: /* Get network mask */ - { - dev = netdev_ifr_dev(req); - if (dev) - { - ioctl_get_ipv4addr(&req->ifr_addr, dev->d_netmask); - ret = OK; - } - } + ioctl_get_ipv4addr(&req->ifr_addr, dev->d_netmask); break; -#endif -#ifdef CONFIG_NET_IPv4 case SIOCSIFNETMASK: /* Set network mask */ - { - dev = netdev_ifr_dev(req); - if (dev) - { - ioctl_set_ipv4addr(&dev->d_netmask, &req->ifr_addr); - ret = OK; - } - } + ioctl_set_ipv4addr(&dev->d_netmask, &req->ifr_addr); break; #endif #ifdef CONFIG_NET_IPv6 case SIOCGLIFADDR: /* Get IP address */ - { - dev = netdev_ifr_dev(req); - if (dev) - { - FAR struct lifreq *lreq = (FAR struct lifreq *)req; - - ioctl_get_ipv6addr(&lreq->lifr_addr, dev->d_ipv6addr); - ret = OK; - } - } + FAR struct lifreq *lreq = (FAR struct lifreq *)req; + ioctl_get_ipv6addr(&lreq->lifr_addr, dev->d_ipv6addr); break; -#endif -#ifdef CONFIG_NET_IPv6 case SIOCSLIFADDR: /* Set IP address */ - { - dev = netdev_ifr_dev(req); - if (dev) - { - FAR struct lifreq *lreq = (FAR struct lifreq *)req; - - ioctl_set_ipv6addr(dev->d_ipv6addr, &lreq->lifr_addr); - ret = OK; - } - } + FAR struct lifreq *lreq = (FAR struct lifreq *)req; Review Comment: ditto -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org