aboutsummaryrefslogtreecommitdiff
path: root/nuttx/net
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/net')
-rw-r--r--nuttx/net/Makefile14
-rw-r--r--nuttx/net/net_poll.c2
-rw-r--r--nuttx/net/netdev_ioctl.c151
-rw-r--r--nuttx/net/uip/uip_icmpping.c2
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