All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] More RTnet fixes and updates
@ 2019-03-22  9:59 Philippe Gerum
  2019-03-22  9:59 ` [PATCH 1/5] net/stack: increase maximum number of ethernet devices Philippe Gerum
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Philippe Gerum @ 2019-03-22  9:59 UTC (permalink / raw)
  To: xenomai

Patch #0003 joins the never ending series of fixes removing unprotected
access to user memory from kernel space.

Patches #0004 builds on the multicast support posted earlier.

Christophe Carton (1):
  utils/net: ping: display min and average round-trip time

Gilles Chanteperdrix (1):
  net/stack: increase maximum number of ethernet devices

Philippe Gerum (3):
  net/drivers: e1000e: stop using deprecated pci_enable_msix()
  net/ipv4: ioctl: remove direct references to user memory
  net/drivers: fec: enable multicast

 kernel/drivers/net/drivers/e1000e/netdev.c    |   7 +-
 .../drivers/net/drivers/freescale/fec_main.c  |  60 ++++++
 kernel/drivers/net/stack/include/rtdev.h      |   2 +-
 kernel/drivers/net/stack/ipv4/ip_sock.c       | 172 +++++++++++++-----
 utils/net/rtping.c                            |  16 +-
 5 files changed, 199 insertions(+), 58 deletions(-)

-- 
2.20.1



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/5] net/stack: increase maximum number of ethernet devices
  2019-03-22  9:59 [PATCH 0/5] More RTnet fixes and updates Philippe Gerum
@ 2019-03-22  9:59 ` Philippe Gerum
  2019-03-22  9:59 ` [PATCH 2/5] net/drivers: e1000e: stop using deprecated pci_enable_msix() Philippe Gerum
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Philippe Gerum @ 2019-03-22  9:59 UTC (permalink / raw)
  To: xenomai; +Cc: Gilles Chanteperdrix, Philippe Gerum

From: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>

Each VLAN registers a (virtual) device.

Signed-off-by: Philippe Gerum <rpm@xenomai.org>
---
 kernel/drivers/net/stack/include/rtdev.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/drivers/net/stack/include/rtdev.h b/kernel/drivers/net/stack/include/rtdev.h
index 65c7ed3dc..1814b307c 100644
--- a/kernel/drivers/net/stack/include/rtdev.h
+++ b/kernel/drivers/net/stack/include/rtdev.h
@@ -26,7 +26,7 @@
 #ifndef __RTDEV_H_
 #define __RTDEV_H_
 
-#define MAX_RT_DEVICES                  8
+#define MAX_RT_DEVICES                  32
 
 #ifdef __KERNEL__
 
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/5] net/drivers: e1000e: stop using deprecated pci_enable_msix()
  2019-03-22  9:59 [PATCH 0/5] More RTnet fixes and updates Philippe Gerum
  2019-03-22  9:59 ` [PATCH 1/5] net/stack: increase maximum number of ethernet devices Philippe Gerum
@ 2019-03-22  9:59 ` Philippe Gerum
  2019-03-22  9:59 ` [PATCH 3/5] net/ipv4: ioctl: remove direct references to user memory Philippe Gerum
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Philippe Gerum @ 2019-03-22  9:59 UTC (permalink / raw)
  To: xenomai

---
 kernel/drivers/net/drivers/e1000e/netdev.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/kernel/drivers/net/drivers/e1000e/netdev.c b/kernel/drivers/net/drivers/e1000e/netdev.c
index 8516dbc89..cb4f0fdcf 100644
--- a/kernel/drivers/net/drivers/e1000e/netdev.c
+++ b/kernel/drivers/net/drivers/e1000e/netdev.c
@@ -1224,9 +1224,10 @@ void e1000e_set_interrupt_capability(struct e1000_adapter *adapter)
 				for (i = 0; i < adapter->num_vectors; i++)
 					adapter->msix_entries[i].entry = i;
 
-				err = pci_enable_msix(adapter->pdev,
-						      adapter->msix_entries,
-						      adapter->num_vectors);
+				err = pci_enable_msix_range(adapter->pdev,
+							    adapter->msix_entries,
+							    adapter->num_vectors,
+							    adapter->num_vectors);
 				if (err == 0)
 					return;
 			}
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/5] net/ipv4: ioctl: remove direct references to user memory
  2019-03-22  9:59 [PATCH 0/5] More RTnet fixes and updates Philippe Gerum
  2019-03-22  9:59 ` [PATCH 1/5] net/stack: increase maximum number of ethernet devices Philippe Gerum
  2019-03-22  9:59 ` [PATCH 2/5] net/drivers: e1000e: stop using deprecated pci_enable_msix() Philippe Gerum
@ 2019-03-22  9:59 ` Philippe Gerum
  2019-03-22  9:59 ` [PATCH 4/5] net/drivers: fec: enable multicast Philippe Gerum
  2019-03-22  9:59 ` [PATCH 5/5] utils/net: ping: display min and average round-trip time Philippe Gerum
  4 siblings, 0 replies; 6+ messages in thread
From: Philippe Gerum @ 2019-03-22  9:59 UTC (permalink / raw)
  To: xenomai

Signed-off-by: Philippe Gerum <rpm@xenomai.org>
---
 kernel/drivers/net/stack/ipv4/ip_sock.c | 172 +++++++++++++++++-------
 1 file changed, 123 insertions(+), 49 deletions(-)

diff --git a/kernel/drivers/net/stack/ipv4/ip_sock.c b/kernel/drivers/net/stack/ipv4/ip_sock.c
index 96944a891..26bde8658 100644
--- a/kernel/drivers/net/stack/ipv4/ip_sock.c
+++ b/kernel/drivers/net/stack/ipv4/ip_sock.c
@@ -28,9 +28,10 @@
 #include <rtnet_socket.h>
 #include <ipv4/igmp.h>
 
-int rt_ip_setsockopt(struct rtsocket *s, int level, int optname,
-		     const void *optval, socklen_t optlen)
+static int rt_ip_setsockopt(struct rtdm_fd *fd, int level, int optname,
+		     const void __user *u_optval, socklen_t optlen)
 {
+	struct rtsocket *s = rtdm_fd_to_private(fd);
 	int err = 0, in_rt;
 
 	if (level != SOL_IP)
@@ -39,16 +40,24 @@ int rt_ip_setsockopt(struct rtsocket *s, int level, int optname,
 	in_rt = rtdm_in_rt_context();
 
 	switch (optname) {
-	case IP_TOS:
+	case IP_TOS: {
+		unsigned int *tos, _tos;
+
 		if (optlen < sizeof(unsigned int))
 			return -EINVAL;
 
-		s->prot.inet.tos = *(unsigned int *)optval;
+		tos = rtnet_get_arg(fd, &_tos, u_optval, sizeof(_tos));
+		if (IS_ERR(tos))
+			return PTR_ERR(tos);
+
+		s->prot.inet.tos = *tos;
 		break;
+	}
 
 #ifdef CONFIG_XENO_DRIVERS_NET_RTIPV4_IGMP
 	case IP_ADD_MEMBERSHIP: {
-		struct ip_mreq *mreq = (struct ip_mreq *)optval;
+		const struct ip_mreq *mreq;
+		struct ip_mreq _mreq;
 
 		if (optlen < sizeof(*mreq))
 			return -EINVAL;
@@ -56,12 +65,17 @@ int rt_ip_setsockopt(struct rtsocket *s, int level, int optname,
 		if (!in_rt)
 			return -ENOSYS;
 
+		mreq = rtnet_get_arg(fd, &_mreq, u_optval, sizeof(_mreq));
+		if (IS_ERR(mreq))
+			return PTR_ERR(mreq);
+
 		err = rt_ip_mc_join_group(s, mreq);
 		break;
 	}
 
 	case IP_DROP_MEMBERSHIP: {
-		struct ip_mreq *mreq = (struct ip_mreq *)optval;
+		const struct ip_mreq *mreq;
+		struct ip_mreq _mreq;
 
 		if (optlen < sizeof(*mreq))
 			return -EINVAL;
@@ -69,23 +83,35 @@ int rt_ip_setsockopt(struct rtsocket *s, int level, int optname,
 		if (!in_rt)
 			return -ENOSYS;
 
+		mreq = rtnet_get_arg(fd, &_mreq, u_optval, sizeof(_mreq));
+		if (IS_ERR(mreq))
+			return PTR_ERR(mreq);
+
 		err = rt_ip_mc_leave_group(s, mreq);
 		break;
 	}
 
 	case IP_MULTICAST_IF: {
-	    struct ip_mreq mreq;
-
-	    if (optlen < sizeof(struct in_addr))
-		return -EINVAL;
+		if (optlen < sizeof(struct in_addr))
+			return -EINVAL;
 
-	    if (optlen >= sizeof(mreq))
-		memcpy(&mreq, optval, sizeof(mreq));
-	    else
-		memcpy(&mreq.imr_interface, optval, sizeof(mreq.imr_interface));
+		if (optlen >= sizeof(struct ip_mreq)) {
+			const struct ip_mreq *mreq;
+			struct ip_mreq _mreq;
+			mreq = rtnet_get_arg(fd, &_mreq, u_optval, sizeof(_mreq));
+			if (IS_ERR(mreq))
+				return PTR_ERR(mreq);
+			s->prot.inet.mc_if_addr = mreq->imr_interface.s_addr;
+		} else {
+			const struct in_addr *in_addr;
+			struct in_addr _in_addr;
+			in_addr = rtnet_get_arg(fd, &_in_addr, u_optval, sizeof(_in_addr));
+			if (IS_ERR(in_addr))
+				return PTR_ERR(in_addr);
+			s->prot.inet.mc_if_addr = in_addr->s_addr;
+		}
 
-	    s->prot.inet.mc_if_addr = mreq.imr_interface.s_addr;
-	    break;
+		break;
 	}
 #endif
 	default:
@@ -96,18 +122,30 @@ int rt_ip_setsockopt(struct rtsocket *s, int level, int optname,
 	return err;
 }
 
-int rt_ip_getsockopt(struct rtsocket *s, int level, int optname,
-		     void *optval, socklen_t * optlen)
+static int rt_ip_getsockopt(struct rtdm_fd *fd, int level, int optname,
+		     void __user *u_optval, socklen_t __user *u_optlen)
 {
+	struct rtsocket *s = rtdm_fd_to_private(fd);
+	socklen_t *optlen, _optlen;
+	unsigned int tos;
 	int err = 0;
 
-	if (*optlen < sizeof(unsigned int))
-		return -EINVAL;
+	optlen = rtnet_get_arg(fd, &_optlen, u_optlen, sizeof(_optlen));
+	if (IS_ERR(optlen))
+		return PTR_ERR(optlen);
 
 	switch (optname) {
 	case IP_TOS:
-		*(unsigned int *)optval = s->prot.inet.tos;
-		*optlen = sizeof(unsigned int);
+		if (*optlen < sizeof(tos))
+			return -EINVAL;
+		tos = s->prot.inet.tos;
+		err = rtnet_put_arg(fd, u_optval, &tos, sizeof(tos));
+		if (err)
+			return err;
+		*optlen = sizeof(tos);
+		err = rtnet_put_arg(fd, u_optlen, optlen, sizeof(*optlen));
+		if (err)
+			return err;
 		break;
 
 	default:
@@ -118,65 +156,101 @@ int rt_ip_getsockopt(struct rtsocket *s, int level, int optname,
 	return err;
 }
 
-int rt_ip_getsockname(struct rtsocket *s, struct sockaddr *addr,
-		      socklen_t * addrlen)
+static int rt_ip_getsockname(struct rtdm_fd *fd,
+			struct sockaddr __user *u_addr,
+			socklen_t __user *u_addrlen)
 {
-	struct sockaddr_in *usin = (struct sockaddr_in *)addr;
+	struct rtsocket *s = rtdm_fd_to_private(fd);
+	socklen_t *addrlen, _addrlen;
+	struct sockaddr_in in;
+	int err;
+
+	addrlen = rtnet_get_arg(fd, &_addrlen, u_addrlen, sizeof(_addrlen));
+	if (IS_ERR(addrlen))
+		return PTR_ERR(addrlen);
 
 	if (*addrlen < sizeof(struct sockaddr_in))
 		return -EINVAL;
 
-	usin->sin_family = AF_INET;
-	usin->sin_addr.s_addr = s->prot.inet.saddr;
-	usin->sin_port = s->prot.inet.sport;
+	in.sin_family = AF_INET;
+	in.sin_addr.s_addr = s->prot.inet.saddr;
+	in.sin_port = s->prot.inet.sport;
+	memset(in.sin_zero, 0, sizeof(in.sin_zero));
 
-	memset(usin->sin_zero, 0, sizeof(usin->sin_zero));
+	err = rtnet_put_arg(fd, u_addr, &in, sizeof(in));
+	if (err)
+		return err;
 
-	*addrlen = sizeof(struct sockaddr_in);
+	*addrlen = sizeof(in);
 
-	return 0;
+	return rtnet_put_arg(fd, u_addrlen, addrlen, sizeof(*addrlen));
 }
 
-int rt_ip_getpeername(struct rtsocket *s, struct sockaddr *addr,
-		      socklen_t * addrlen)
+static int rt_ip_getpeername(struct rtdm_fd *fd,
+			struct sockaddr __user *u_addr,
+			socklen_t __user *u_addrlen)
 {
-	struct sockaddr_in *usin = (struct sockaddr_in *)addr;
+	struct rtsocket *s = rtdm_fd_to_private(fd);
+	socklen_t *addrlen, _addrlen;
+	struct sockaddr_in in;
+	int err;
+
+	addrlen = rtnet_get_arg(fd, &_addrlen, u_addrlen, sizeof(_addrlen));
+	if (IS_ERR(addrlen))
+		return PTR_ERR(addrlen);
 
 	if (*addrlen < sizeof(struct sockaddr_in))
 		return -EINVAL;
 
-	usin->sin_family = AF_INET;
-	usin->sin_addr.s_addr = s->prot.inet.daddr;
-	usin->sin_port = s->prot.inet.dport;
+	in.sin_family = AF_INET;
+	in.sin_addr.s_addr = s->prot.inet.daddr;
+	in.sin_port = s->prot.inet.dport;
+	memset(in.sin_zero, 0, sizeof(in.sin_zero));
 
-	memset(usin->sin_zero, 0, sizeof(usin->sin_zero));
+	err = rtnet_put_arg(fd, u_addr, &in, sizeof(in));
+	if (err)
+		return err;
 
-	*addrlen = sizeof(struct sockaddr_in);
+	*addrlen = sizeof(in);
 
-	return 0;
+	return rtnet_put_arg(fd, u_addrlen, addrlen, sizeof(*addrlen));
 }
 
-int rt_ip_ioctl(struct rtdm_fd *fd, int request, void *arg)
+int rt_ip_ioctl(struct rtdm_fd *fd, int request, void __user *arg)
 {
-	struct rtsocket *sock = rtdm_fd_to_private(fd);
-	struct _rtdm_getsockaddr_args *getaddr = arg;
-	struct _rtdm_getsockopt_args *getopt = arg;
-	struct _rtdm_setsockopt_args *setopt = arg;
+	const struct _rtdm_getsockopt_args *getopt;
+	struct _rtdm_getsockopt_args _getopt;
+	const struct _rtdm_setsockopt_args *setopt;
+	struct _rtdm_setsockopt_args _setopt;
+	const struct _rtdm_getsockaddr_args *getaddr;
+	struct _rtdm_getsockaddr_args _getaddr;
 
 	switch (request) {
 	case _RTIOC_SETSOCKOPT:
-		return rt_ip_setsockopt(sock, setopt->level, setopt->optname,
+		setopt = rtnet_get_arg(fd, &_setopt, arg, sizeof(_setopt));
+		if (IS_ERR(setopt))
+			return PTR_ERR(setopt);
+		return rt_ip_setsockopt(fd, setopt->level, setopt->optname,
 					setopt->optval, setopt->optlen);
 
 	case _RTIOC_GETSOCKOPT:
-		return rt_ip_getsockopt(sock, getopt->level, getopt->optname,
+		getopt = rtnet_get_arg(fd, &_getopt, arg, sizeof(_getopt));
+		if (IS_ERR(getopt))
+			return PTR_ERR(getopt);
+		return rt_ip_getsockopt(fd, getopt->level, getopt->optname,
 					getopt->optval, getopt->optlen);
 
 	case _RTIOC_GETSOCKNAME:
-		return rt_ip_getsockname(sock, getaddr->addr, getaddr->addrlen);
+		getaddr = rtnet_get_arg(fd, &_getaddr, arg, sizeof(_getaddr));
+		if (IS_ERR(getaddr))
+			return PTR_ERR(getaddr);
+		return rt_ip_getsockname(fd, getaddr->addr, getaddr->addrlen);
 
 	case _RTIOC_GETPEERNAME:
-		return rt_ip_getpeername(sock, getaddr->addr, getaddr->addrlen);
+		getaddr = rtnet_get_arg(fd, &_getaddr, arg, sizeof(_getaddr));
+		if (IS_ERR(getaddr))
+			return PTR_ERR(getaddr);
+		return rt_ip_getpeername(fd, getaddr->addr, getaddr->addrlen);
 
 	default:
 		return rt_socket_if_ioctl(fd, request, arg);
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 4/5] net/drivers: fec: enable multicast
  2019-03-22  9:59 [PATCH 0/5] More RTnet fixes and updates Philippe Gerum
                   ` (2 preceding siblings ...)
  2019-03-22  9:59 ` [PATCH 3/5] net/ipv4: ioctl: remove direct references to user memory Philippe Gerum
@ 2019-03-22  9:59 ` Philippe Gerum
  2019-03-22  9:59 ` [PATCH 5/5] utils/net: ping: display min and average round-trip time Philippe Gerum
  4 siblings, 0 replies; 6+ messages in thread
From: Philippe Gerum @ 2019-03-22  9:59 UTC (permalink / raw)
  To: xenomai

Signed-off-by: Philippe Gerum <rpm@xenomai.org>
---
 .../drivers/net/drivers/freescale/fec_main.c  | 60 +++++++++++++++++++
 1 file changed, 60 insertions(+)

diff --git a/kernel/drivers/net/drivers/freescale/fec_main.c b/kernel/drivers/net/drivers/freescale/fec_main.c
index 08956dfab..41c2fb1da 100644
--- a/kernel/drivers/net/drivers/freescale/fec_main.c
+++ b/kernel/drivers/net/drivers/freescale/fec_main.c
@@ -3608,6 +3608,65 @@ static void set_multicast_list(struct net_device *ndev)
 	writel(hash_low, fep->hwp + FEC_GRP_HASH_TABLE_LOW);
 }
 
+static void fec_rt_set_multicast_list(struct rtnet_device *rtdev)
+{
+	struct fec_enet_private *fep;
+	unsigned int i, bit, data, crc, tmp;
+	unsigned char hash;
+	unsigned int hash_high = 0, hash_low = 0;
+	struct rtdev_mc_list *mca;
+
+	fep = container_of(rtdev, struct fec_enet_private, rtnet.dev);
+
+	if (rtdev->flags & IFF_PROMISC) {
+		tmp = readl(fep->hwp + FEC_R_CNTRL);
+		tmp |= 0x8;
+		writel(tmp, fep->hwp + FEC_R_CNTRL);
+		return;
+	}
+
+	tmp = readl(fep->hwp + FEC_R_CNTRL);
+	tmp &= ~0x8;
+	writel(tmp, fep->hwp + FEC_R_CNTRL);
+
+	if (rtdev->flags & IFF_ALLMULTI) {
+		/* Catch all multicast addresses, so set the
+		 * filter to all 1's
+		 */
+		writel(0xffffffff, fep->hwp + FEC_GRP_HASH_TABLE_HIGH);
+		writel(0xffffffff, fep->hwp + FEC_GRP_HASH_TABLE_LOW);
+
+		return;
+	}
+
+	/* Add the addresses in hash register */
+	for (mca = rtdev->mc_list; mca; mca = mca->next) {
+		/* calculate crc32 value of mac address */
+		crc = 0xffffffff;
+
+		for (i = 0; i < mca->dmi_addrlen; i++) {
+			data = mca->dmi_addr[i];
+			for (bit = 0; bit < 8; bit++, data >>= 1) {
+				crc = (crc >> 1) ^
+				(((crc ^ data) & 1) ? CRC32_POLY : 0);
+			}
+		}
+
+		/* only upper 6 bits (FEC_HASH_BITS) are used
+		 * which point to specific bit in the hash registers
+		 */
+		hash = (crc >> (32 - FEC_HASH_BITS)) & 0x3f;
+
+		if (hash > 31)
+			hash_high |= 1 << (hash - 32);
+		else
+			hash_low |= 1 << hash;
+	}
+
+	writel(hash_high, fep->hwp + FEC_GRP_HASH_TABLE_HIGH);
+	writel(hash_low, fep->hwp + FEC_GRP_HASH_TABLE_LOW);
+}
+
 /* Set a MAC change in hardware. */
 static int
 fec_set_mac_address(struct net_device *ndev, void *p)
@@ -3945,6 +4004,7 @@ static int fec_rt_init(struct net_device *ndev)
 	rtdev->do_ioctl = fec_rt_ioctl;
 	rtdev->hard_start_xmit = fec_rt_start_xmit;
 	rtdev->get_stats = fec_rt_stats;
+	rtdev->set_multicast_list = fec_rt_set_multicast_list;
 	rtdev->sysbind = &fep->pdev->dev;
 
 	ret = rt_init_etherdev(rtdev, (RX_RING_SIZE + TX_RING_SIZE) * 2);
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 5/5] utils/net: ping: display min and average round-trip time
  2019-03-22  9:59 [PATCH 0/5] More RTnet fixes and updates Philippe Gerum
                   ` (3 preceding siblings ...)
  2019-03-22  9:59 ` [PATCH 4/5] net/drivers: fec: enable multicast Philippe Gerum
@ 2019-03-22  9:59 ` Philippe Gerum
  4 siblings, 0 replies; 6+ messages in thread
From: Philippe Gerum @ 2019-03-22  9:59 UTC (permalink / raw)
  To: xenomai

From: Christophe Carton <christophe.carton@ixblue.com>

Signed-off-by: Philippe Gerum <rpm@xenomai.org>
---
 utils/net/rtping.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/utils/net/rtping.c b/utils/net/rtping.c
index bdaf6cb15..878fa6dce 100644
--- a/utils/net/rtping.c
+++ b/utils/net/rtping.c
@@ -29,6 +29,7 @@
 #include <signal.h>
 #include <string.h>
 #include <unistd.h>
+#include <float.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/ioctl.h>
@@ -46,7 +47,9 @@ unsigned int    count    = 0;
 int             delay    = 1000;
 unsigned int    sent     = 0;
 unsigned int    received = 0;
-float           wc_rtt   = 0;
+float           max_rtt   = FLT_MIN;
+float           min_rtt   = FLT_MAX;
+float           avr_rtt   = 0.0f;
 
 
 void help(void)
@@ -81,9 +84,9 @@ void print_statistics()
 {
     printf("\n--- %s rtping statistics ---\n"
            "%d packets transmitted, %d received, %d%% packet loss\n"
-           "worst case rtt = %.1f us\n",
+           "rtt min/avg/max = %.1f/%.1f/%.1f us\n",
            inet_ntoa(addr), sent, received, 100 - ((received * 100) / sent),
-           wc_rtt);
+           min_rtt, avr_rtt/received, max_rtt);
     exit(0);
 }
 
@@ -117,8 +120,11 @@ void ping(int signal)
     received++;
     from.s_addr = cmd.args.ping.ip_addr;
     rtt = (float)cmd.args.ping.rtt / (float)1000;
-    if (rtt > wc_rtt)
-        wc_rtt = rtt;
+    if (rtt > max_rtt)
+        max_rtt = rtt;
+    if (rtt < min_rtt)
+        min_rtt = rtt;
+    avr_rtt += rtt;
     printf("%d bytes from %s: icmp_seq=%d time=%.1f us\n",
            ret, inet_ntoa(from), cmd.args.ping.sequence, rtt);
 
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-03-22  9:59 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-22  9:59 [PATCH 0/5] More RTnet fixes and updates Philippe Gerum
2019-03-22  9:59 ` [PATCH 1/5] net/stack: increase maximum number of ethernet devices Philippe Gerum
2019-03-22  9:59 ` [PATCH 2/5] net/drivers: e1000e: stop using deprecated pci_enable_msix() Philippe Gerum
2019-03-22  9:59 ` [PATCH 3/5] net/ipv4: ioctl: remove direct references to user memory Philippe Gerum
2019-03-22  9:59 ` [PATCH 4/5] net/drivers: fec: enable multicast Philippe Gerum
2019-03-22  9:59 ` [PATCH 5/5] utils/net: ping: display min and average round-trip time Philippe Gerum

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.