diff options
Diffstat (limited to 'nuttx/net')
-rw-r--r-- | nuttx/net/Makefile | 14 | ||||
-rw-r--r-- | nuttx/net/net_poll.c | 2 | ||||
-rw-r--r-- | nuttx/net/netdev_ioctl.c | 151 | ||||
-rw-r--r-- | nuttx/net/uip/uip_icmpping.c | 2 |
4 files changed, 134 insertions, 35 deletions
diff --git a/nuttx/net/Makefile b/nuttx/net/Makefile index 506ef8213..74540b67d 100644 --- a/nuttx/net/Makefile +++ b/nuttx/net/Makefile @@ -100,24 +100,22 @@ $(COBJS): %$(OBJEXT): %.c $(call COMPILE, $<, $@) $(BIN): $(OBJS) - @( for obj in $(OBJS) ; do \ - $(call ARCHIVE, $@, $${obj}); \ - done ; ) + $(call ARCHIVE, $@, $(OBJS)) .depend: Makefile $(SRCS) ifeq ($(CONFIG_NET),y) - @$(MKDEP) --dep-path . --dep-path uip $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep + $(Q) $(MKDEP) --dep-path . --dep-path uip "$(CC)" -- $(CFLAGS) -- $(SRCS) >Make.dep endif - @touch $@ + $(Q) touch $@ depend: .depend clean: - @rm -f $(BIN) *~ .*.swp - @rm -f uip/*~ uip/.*.swp + $(call DELFILE, $(BIN)) $(call CLEAN) distclean: clean - @rm -f Make.dep .depend + $(call DELFILE, Make.dep) + $(call DELFILE, .depend) -include Make.dep diff --git a/nuttx/net/net_poll.c b/nuttx/net/net_poll.c index ca594c10f..815c6a71d 100644 --- a/nuttx/net/net_poll.c +++ b/nuttx/net/net_poll.c @@ -141,6 +141,7 @@ static uint16_t poll_interrupt(struct uip_driver_s *dev, FAR void *conn, sem_post(fds->sem); } } + return flags; } #endif /* HAVE_NETPOLL */ @@ -219,6 +220,7 @@ static inline int net_pollsetup(FAR struct socket *psock, struct pollfd *fds) sem_post(fds->sem); } } + uip_unlock(flags); return OK; diff --git a/nuttx/net/netdev_ioctl.c b/nuttx/net/netdev_ioctl.c index 4b5876efa..ea5c0e436 100644 --- a/nuttx/net/netdev_ioctl.c +++ b/nuttx/net/netdev_ioctl.c @@ -138,19 +138,47 @@ static void ioctl_setipaddr(FAR uip_ipaddr_t *outaddr, FAR const void *inaddr) * ****************************************************************************/ -static inline void ioctl_ifup(FAR struct uip_driver_s *dev) +static void ioctl_ifup(FAR struct uip_driver_s *dev) { + /* Make sure that the device supports the d_ifup() method */ + if (dev->d_ifup) { - dev->d_ifup(dev); + /* Is the interface already up? */ + + if ((dev->d_flags & IFF_RUNNING) == 0) + { + /* No, bring the interface up now */ + + if (dev->d_ifup(dev) == OK) + { + /* Mark the interface as up */ + + dev->d_flags |= IFF_RUNNING; + } + } } } -static inline void ioctl_ifdown(FAR struct uip_driver_s *dev) +static void ioctl_ifdown(FAR struct uip_driver_s *dev) { + /* Make sure that the device supports the d_ifdown() method */ + if (dev->d_ifdown) { - dev->d_ifdown(dev); + /* Is the interface already down? */ + + if ((dev->d_flags & IFF_RUNNING) != 0) + { + /* No, take the interface down now */ + + if (dev->d_ifdown(dev) == OK) + { + /* Mark the interface as down */ + + dev->d_flags &= ~IFF_RUNNING; + } + } } } @@ -194,63 +222,130 @@ static int netdev_ifrioctl(FAR struct socket *psock, int cmd, struct ifreq *req) switch (cmd) { - case SIOCGIFADDR: /* Get IP address */ - ioctl_getipaddr(&req->ifr_addr, &dev->d_ipaddr); + case SIOCGIFADDR: /* Get IP address */ + { + ioctl_getipaddr(&req->ifr_addr, &dev->d_ipaddr); + } break; - case SIOCSIFADDR: /* Set IP address */ - ioctl_ifdown(dev); - ioctl_setipaddr(&dev->d_ipaddr, &req->ifr_addr); - ioctl_ifup(dev); + case SIOCSIFADDR: /* Set IP address */ + { + ioctl_ifdown(dev); + ioctl_setipaddr(&dev->d_ipaddr, &req->ifr_addr); + ioctl_ifup(dev); + } break; case SIOCGIFDSTADDR: /* Get P-to-P address */ - ioctl_getipaddr(&req->ifr_dstaddr, &dev->d_draddr); + { + ioctl_getipaddr(&req->ifr_dstaddr, &dev->d_draddr); + } break; case SIOCSIFDSTADDR: /* Set P-to-P address */ - ioctl_setipaddr(&dev->d_draddr, &req->ifr_dstaddr); + { + ioctl_setipaddr(&dev->d_draddr, &req->ifr_dstaddr); + } break; case SIOCGIFNETMASK: /* Get network mask */ - ioctl_getipaddr(&req->ifr_addr, &dev->d_netmask); + { + ioctl_getipaddr(&req->ifr_addr, &dev->d_netmask); + } break; case SIOCSIFNETMASK: /* Set network mask */ - ioctl_setipaddr(&dev->d_netmask, &req->ifr_addr); + { + ioctl_setipaddr(&dev->d_netmask, &req->ifr_addr); + } break; case SIOCGIFMTU: /* Get MTU size */ - req->ifr_mtu = CONFIG_NET_BUFSIZE; + { + req->ifr_mtu = CONFIG_NET_BUFSIZE; + } + break; + + case SIOCSIFFLAGS: /* Sets the interface flags */ + { + /* Is this a request to bring the interface up? */ + + if (req->ifr_flags & IF_FLAG_IFUP) + { + /* Yes.. bring the interface up */ + + ioctl_ifup(dev); + } + + /* Is this a request to take the interface down? */ + + else if (req->ifr_flags & IF_FLAG_IFDOWN) + { + /* Yes.. take the interface down */ + + ioctl_ifdown(dev); + } + } + break; + + case SIOCGIFFLAGS: /* Gets the interface flags */ + { + req->ifr_flags = 0; + + /* Is the interface running? */ + + if (dev->d_flags & IFF_RUNNING) + { + /* Yes.. report interface up */ + + req->ifr_flags |= IF_FLAG_IFUP; + } + else + { + /* No.. report interface down */ + + req->ifr_flags |= IF_FLAG_IFDOWN; + } + } break; /* MAC address operations only make sense if Ethernet is supported */ #ifdef CONFIG_NET_ETHERNET case SIOCGIFHWADDR: /* Get hardware address */ - req->ifr_hwaddr.sa_family = AF_INETX; - memcpy(req->ifr_hwaddr.sa_data, dev->d_mac.ether_addr_octet, IFHWADDRLEN); + { + req->ifr_hwaddr.sa_family = AF_INETX; + memcpy(req->ifr_hwaddr.sa_data, dev->d_mac.ether_addr_octet, IFHWADDRLEN); + } break; case SIOCSIFHWADDR: /* Set hardware address -- will not take effect until ifup */ - req->ifr_hwaddr.sa_family = AF_INETX; - memcpy(dev->d_mac.ether_addr_octet, req->ifr_hwaddr.sa_data, IFHWADDRLEN); + { + req->ifr_hwaddr.sa_family = AF_INETX; + memcpy(dev->d_mac.ether_addr_octet, req->ifr_hwaddr.sa_data, IFHWADDRLEN); + } break; #endif case SIOCDIFADDR: /* Delete IP address */ - ioctl_ifdown(dev); - memset(&dev->d_ipaddr, 0, sizeof(uip_ipaddr_t)); + { + ioctl_ifdown(dev); + memset(&dev->d_ipaddr, 0, sizeof(uip_ipaddr_t)); + } break; case SIOCGIFCOUNT: /* Get number of devices */ - req->ifr_count = netdev_count(); - ret = -ENOSYS; + { + req->ifr_count = netdev_count(); + ret = -ENOSYS; + } break; - case SIOCGIFBRDADDR: /* Get broadcast IP address */ - case SIOCSIFBRDADDR: /* Set broadcast IP address */ - ret = -ENOSYS; + case SIOCGIFBRDADDR: /* Get broadcast IP address */ + case SIOCSIFBRDADDR: /* Set broadcast IP address */ + { + ret = -ENOSYS; + } break; #ifdef CONFIG_NET_ARPIOCTLS @@ -261,7 +356,9 @@ static int netdev_ifrioctl(FAR struct socket *psock, int cmd, struct ifreq *req) #endif default: - ret = -EINVAL; + { + ret = -EINVAL; + } break;; } diff --git a/nuttx/net/uip/uip_icmpping.c b/nuttx/net/uip/uip_icmpping.c index e3ebf7252..36f6e892a 100644 --- a/nuttx/net/uip/uip_icmpping.c +++ b/nuttx/net/uip/uip_icmpping.c @@ -123,6 +123,7 @@ static inline int ping_timeout(struct icmp_ping_s *pstate) { return TRUE; } + return FALSE; } @@ -365,6 +366,7 @@ int uip_ping(uip_ipaddr_t addr, uint16_t id, uint16_t seqno, uip_icmpcallbackfree(state.png_cb); } + uip_unlock(save); /* Return the negated error number in the event of a failure, or the |