jwbensley / etherate Goto Github PK
View Code? Open in Web Editor NEWLinux CLI Ethernet and MPLS Testing Tool
License: MIT License
Linux CLI Ethernet and MPLS Testing Tool
License: MIT License
Add average/min/mas values for quality test final output.
Etherate version 1.17 2018-04
Results from Tx host below. The output says Min/Max jitter during test: 0.000000017s/0.000006009s
but the highest jitter value recorded was 0.000122755s
.
sudo ./etherate -I ens2f0 -Q 1000 1000
No. rtt Jitter
1: 0.000122755s 0.000122755s
2: 0.000064407s 0.000058348s
3: 0.000065850s 0.000001443s
4: 0.000071859s 0.000006009s
5: 0.000066288s 0.000005571s
6: 0.000062803s 0.000003485s
7: 0.000066670s 0.000003867s
8: 0.000063426s 0.000003244s
9: 0.000065757s 0.000002331s
10: 0.000067083s 0.000001326s
11: 0.000067066s 0.000000017s
12: 0.000065880s 0.000001186s
13: 0.000067321s 0.000001441s
14: 0.000063679s 0.000003642s
15: 0.000064127s 0.000000448s
16: 0.000064932s 0.000000805s
17: 0.000065436s 0.000000504s
18: 0.000063706s 0.000001730s
19: 0.000068546s 0.000004840s
20: 0.000066065s 0.000002481s
21: 0.000062928s 0.000003137s
22: 0.000066641s 0.000003713s
23: 0.000067589s 0.000000948s
24: 0.000065886s 0.000001703s
25: 0.000062733s 0.000003153s
26: 0.000064417s 0.000001684s
27: 0.000064453s 0.000000036s
28: 0.000065138s 0.000000685s
29: 0.000066881s 0.000001743s
30: 0.000063702s 0.000003179s
Link quality test complete
Test frames transmitted: 30
Test frames received: 30
Non test or out-of-order frames received: 0
Number of timeouts: 0
Min/Max rtt during test: 0.000062733s/0.000071859s
Min/Max jitter during test: 0.000000017s/0.000006009s
Ending test on Sat Apr 14 12:38:29 2018
Email from Bruno:
In the file functions.cpp, you could get rid of the htonll() and ntohll() functions and replace them with the following code in etherate.h :
// HtoN & NtoH methods for ull values
#if (__BYTE_ORDER == __BIG_ENDIAN)
#define ntohll(val) return (val)
#define htonll(val) return (val)
#else
#define ntohll(val) __bswap_64(val)
#define htonll(val) __bswap_64(val)
#endif
This is slightly faster as there's one less function call, it's also in line with the definition of the other hton and ntoh functions.
This is in relation to https://github.com/jwbensley/Etherate/blob/master/functions.cpp#L1017 and https://github.com/jwbensley/Etherate/blob/master/functions.cpp#L1091
Email form Bruno:
In the file defaults.cpp, the setup_frame() function prototype differs from the function definition, the first parameter is missing from the prototype.
In reference to https://github.com/jwbensley/Etherate/blob/master/defaults.cpp#L55 and https://github.com/jwbensley/Etherate/blob/master/defaults.cpp#L200
Add PACKET_QDISC BYPASS
option to the socket for newer Kernel to skip the Kernel queuing disciplines for a performance increase.
For example:
https://github.com/jwbensley/EtherateMT/blob/master/etherate_mt.c#L135
'etherate -l' does not show interfaces that don't have IPs. However, it should not be required to send ethernet frames.
# ./etherate -l
Device lo with address 00:00:00:00:00:00, interface index 1
Device eth0 with address 00:00:17:2e:c1:14, interface index 3
# ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:40:f4:cf:98:32 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:16:17:2e:c1:14 brd ff:ff:ff:ff:ff:ff
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:40:f4:cf:98:32 brd ff:ff:ff:ff:ff:ff
inet6 fe80::240:f4ff:fecf:9832/64 scope link
valid_lft forever preferred_lft forever
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:16:17:2e:c1:14 brd ff:ff:ff:ff:ff:ff
inet 192.2.0.2/24 brd 192.2.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 2001:db8::20/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::216:17ff:fe2e:c114/64 scope link
valid_lft forever preferred_lft forever
# ./etherate -r -I 2
Error: Couldn't set interface with index, returned index was 0.
Email from Christophe;
What do you think about be able to reverse tests between RX and TX, as iperf3 is able to do ?
So that you are able to test Download and Upload without any other action other than change on one side of the link.
Example with Tx using -M 10000000:
[user@ucpe_002 Etherate-master]$ sudo ./etherate -r -i ens3f3 -v 4093
...
Seconds Mbps Rx MBs Rx FrmRx/s Frames Rx
1 19.89 2 1666 1666
2 9.94 3 833 2499
3 9.94 4 833 3332
Example with Tx using -F 1
[user@ucpe_002 Etherate-master]$ sudo ./etherate -r -i ens3f3 -v 4093
...
Seconds Mbps Rx MBs Rx FrmRx/s Frames Rx
1 0.02 0 2 2
2 0.01 0 1 3
3 0.01 0 1 4
4 0.01 0 1 5
Hello
I'm trying to run tests atm in our LAN.
'sudo etherate -i enp0s25'
prints
'Delay test Tx error: Message tool long'
and
'Speed test Tx error: Message too long'
What can cause this? It does't matter if I define -f 1000 etc. We are using non managed switches.
Email from Bruno:
SIOCGIFINDEX ioctl() calls are not checked for errors in file functions.cpp, functions set_sock_interface_name(), set_sock_interface_index(), list_interfaces(). In the same file a few close() calls are not checked for error either.
This is in reference to https://github.com/jwbensley/Etherate/blob/master/functions.cpp#L1392 also https://github.com/jwbensley/Etherate/blob/master/functions.cpp#L1312 and https://github.com/jwbensley/Etherate/blob/master/functions.cpp#L1065.
Also close()
is unchecked here: https://github.com/jwbensley/Etherate/blob/master/functions.cpp#L1238
https://github.com/jwbensley/Etherate/blob/master/functions.cpp#L1254
https://github.com/jwbensley/Etherate/blob/master/functions.cpp#L1265
https://github.com/jwbensley/Etherate/blob/master/functions.cpp#L1084
ISSUE TYPE
VERSION DETAILS
2018-01
SUMMARY
The -h
option says "on the wire" for the description of the -f
option, which is incorrect.
STEPS TO REPRODUCE
./etherate -h
ISSUE TYPE
VERSION DETAILS
$ uname -a
Linux ucpe_002 4.13.12-1.el7.elrepo.x86_64 #1 SMP Wed Nov 8 13:01:08 EST 2017 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/redhat-release || lsb_release -a || cat /etc/issue
CentOS Linux release 7.4.1708 (Core)
$ lspci -nn | grep -i eth
02:00.0 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)
02:00.1 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)
06:00.0 Ethernet controller [0200]: Broadcom Limited NetXtreme BCM5719 Gigabit Ethernet PCIe [14e4:1657] (rev 01)
06:00.1 Ethernet controller [0200]: Broadcom Limited NetXtreme BCM5719 Gigabit Ethernet PCIe [14e4:1657] (rev 01)
06:00.2 Ethernet controller [0200]: Broadcom Limited NetXtreme BCM5719 Gigabit Ethernet PCIe [14e4:1657] (rev 01)
06:00.3 Ethernet controller [0200]: Broadcom Limited NetXtreme BCM5719 Gigabit Ethernet PCIe [14e4:1657] (rev 01)
09:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [8086:1572] (rev 01)
09:00.1 Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [8086:1572] (rev 01)
$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens2f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq portid 1402ec6d9dd0 state UP mode DEFAULT qlen 1000
link/ether 14:02:ec:6d:9d:d0 brd ff:ff:ff:ff:ff:ff
3: ens3f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT qlen 1000
link/ether 3c:a8:2a:e7:05:f8 brd ff:ff:ff:ff:ff:ff
4: ens3f1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT qlen 1000
link/ether 3c:a8:2a:e7:05:f9 brd ff:ff:ff:ff:ff:ff
5: ens2f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq portid 1402ec6d9dd8 state UP mode DEFAULT qlen 10000
link/ether 14:02:ec:6d:9d:d8 brd ff:ff:ff:ff:ff:ff
6: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
link/ether 94:18:82:ab:ae:f3 brd ff:ff:ff:ff:ff:ff
7: ens3f2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
link/ether 3c:a8:2a:e7:05:fa brd ff:ff:ff:ff:ff:ff
8: ens3f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
link/ether 3c:a8:2a:e7:05:fb brd ff:ff:ff:ff:ff:ff
9: eno2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT qlen 1000
link/ether 94:18:82:ab:ae:f4 brd ff:ff:ff:ff:ff:ff
10: ens3f3.501@ens3f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br501 state UP mode DEFAULT qlen 1000
link/ether 3c:a8:2a:e7:05:fb brd ff:ff:ff:ff:ff:ff
11: br501: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT qlen 1000
link/ether 3c:a8:2a:e7:05:fb brd ff:ff:ff:ff:ff:ff
12: ens3f3.502@ens3f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br502 state UP mode DEFAULT qlen 1000
link/ether 3c:a8:2a:e7:05:fb brd ff:ff:ff:ff:ff:ff
13: br502: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT qlen 1000
link/ether 3c:a8:2a:e7:05:fb brd ff:ff:ff:ff:ff:ff
14: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
15: br1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
16: br2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1000
link/ether 02:84:2b:68:80:af brd ff:ff:ff:ff:ff:ff
17: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT qlen 1000
link/ether 52:54:00:41:c6:5e brd ff:ff:ff:ff:ff:ff
18: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT qlen 1000
link/ether 52:54:00:41:c6:5e brd ff:ff:ff:ff:ff:ff
$ ./etherate -V
Etherate version 1.15 2017-10
$ sudo ./etherate -l
Device lo with address 00:00:00:00:00:00, has interface index 1
Device ens2f0 with address 14:02:ec:6d:9d:d0, has interface index 2
Device ens3f0 with address 3c:a8:2a:e7:05:f8, has interface index 3
Device ens3f1 with address 3c:a8:2a:e7:05:f9, has interface index 4
Device ens2f1 with address 14:02:ec:6d:9d:d8, has interface index 5
Device eno1 with address 94:18:82:ab:ae:f3, has interface index 6
Device ens3f2 with address 3c:a8:2a:e7:05:fa, has interface index 7
Device ens3f3 with address 3c:a8:2a:e7:05:fb, has interface index 8
Device eno2 with address 94:18:82:ab:ae:f4, has interface index 9
Device ens3f3.501 with address 3c:a8:2a:e7:05:fb, has interface index 10
Device br501 with address 3c:a8:2a:e7:05:fb, has interface index 11
Device ens3f3.502 with address 3c:a8:2a:e7:05:fb, has interface index 12
Device br502 with address 3c:a8:2a:e7:05:fb, has interface index 13
Device br0 with address 00:00:00:00:00:00, has interface index 14
Device br1 with address 00:00:00:00:00:00, has interface index 15
Device br2 with address 02:84:2b:68:80:af, has interface index 16
Device virbr0 with address 52:54:00:41:c6:5e, has interface index 17
Device virbr0-nic with address 52:54:00:41:c6:5e, has interface index 18
SUMMARY
Only on the two 10G interfaces is this issue experianced, not on the 1G interfaces. Does increasing the socket buffer help?
STEPS TO REPRODUCE
This is happeneing at all packet sizes, 256 is not specific to this issue:
$ sudo ./etherate -i ens2f1 -g -G -f 256
Running in TX mode
Using device ens2f1 with address 14:02:ec:6d:9d:d8, interface index 5
Entering promiscuous mode
Source MAC 00:00:5e:00:00:01
Destination MAC 00:00:5e:00:00:02
Sending gratuitous broadcasts...
Done.
Frame size is 270 bytes
Starting test on Mon Nov 13 17:03:13 2017
Seconds Mbps Tx MBs Tx FrmTx/s Frames Tx
1 914.41 109 423336 423336
2 1174.33 248 543672 967008
3 1174.70 389 543841 1510849
4 1174.62 529 543805 2054654
Speed test Tx error : No buffer space available
Ending test on Mon Nov 13 17:03:17 2017
Leaving promiscuous mode
This issue doesn't occur using the 1G interface, which was tested using various packet sizes. However it does seem to be happening on the 10G interfaces at any packet size I try.
The Tx host is sending 1514 byte frames (1500 bytes of payload + 6 SRC MAC + 6 DST MAC + 2 Etype). The Tx host is limited to 10000000 bps (10Mbps) which below equates to 833 frames per second:
(833 * 1514) * 8 = 10089296 bits.
[user@ucpe_003 Etherate-master]$ sudo ./etherate -i ens3f2 -v 4093 -M 10000000
...
Seconds Mbps Tx MBs Tx FrmTx/s Frames Tx
1 10.00 1 833 833
2 10.00 2 833 1666
3 10.00 3 833 2499
Below it can be seen on the Rx host that it is receiving 833 fps however it shows 9.94 Mbps. This is excluding the headers from the ingress rate calculation which the Tx host is including on its egress rate calculation (in terms of stats gathering and rate limiting):
[user@ucpe_002 Etherate-master]$ sudo ./etherate -r -i ens3f3 -v 4093
...
Seconds Mbps Rx MBs Rx FrmRx/s Frames Rx
1 19.89 2 1666 1666
2 9.94 3 833 2499
3 9.94 4 833 3332
4 9.94 5 833 4165
Email from Bruno:
Finally, the build_tlv() and build_sub_tlv() functions could be inlined and changed to :
// Build the Etherate TLV header
inline void
build_tlv(struct FRAME_HEADERS *FRAME_HEADERS, uint16_t TLV_TYPE, uint32_t TLV_VALUE)
{
uint8_t *buffer_offset = FRAME_HEADERS->TX_DATA;
*((uint16_t *) buffer_offset) = TLV_TYPE;
buffer_offset += sizeof(uint16_t);
*buffer_offset++ = sizeof(uint32_t);
*((uint32_t *) buffer_offset) = TLV_VALUE;
FRAME_HEADERS->RX_TLV_TYPE = (uint16_t*) FRAME_HEADERS->RX_DATA;
FRAME_HEADERS->RX_TLV_VALUE = (uint32_t*) (FRAME_HEADERS->RX_DATA + sizeof(uint16_t) + sizeof(uint8_t));
}
// Build a sub-TLV value after the TLV header
inline void
build_sub_tlv(struct FRAME_HEADERS *FRAME_HEADERS, uint16_t SUB_TLV_TYPE, uint64_t SUB_TLV_VALUE)
{
uint8_t *buffer_offset = FRAME_HEADERS->TX_DATA + FRAME_HEADERS->TLV_SIZE;
*((uint16_t *) buffer_offset) = SUB_TLV_TYPE;
buffer_offset += sizeof(uint16_t);
*buffer_offset++ = sizeof(uint64_t);
*((uint64_t *) buffer_offset) = SUB_TLV_VALUE;
FRAME_HEADERS->RX_SUB_TLV_TYPE = (uint16_t*) (FRAME_HEADERS->RX_DATA + FRAME_HEADERS->TLV_SIZE);
FRAME_HEADERS->RX_SUB_TLV_VALUE = (uint64_t*) (FRAME_HEADERS->RX_DATA + FRAME_HEADERS->TLV_SIZE +
sizeof(uint16_t) + sizeof(uint8_t));
}
This would be significantly faster than calling memcpy() repeatedly, and build_sub_tlv() is used a lot in the various tests.
This is in reference to: https://github.com/jwbensley/Etherate/blob/master/functions.cpp#L322 and https://github.com/jwbensley/Etherate/blob/master/functions.cpp#L346
$ ./etherate -V
Etherate version 1.15 2017-10
Using the -l
option exits with an error because sudo is required. Can this be prevented?
$ ./etherate -l
Couldn't close socket : Bad file descriptor
N/A
Provide a packet pacing feature to smooth the inter-frame transmission timing.
Have a CLI option to enable a "smoothed" transmission interval between frames (packet pacing). When setting a max speed with -m
/-M
the NIC burst until the rate-limit is reached and then for the remainder of the 1 second interval the NIC is idle. -T
could set a delay between frame transmission which will smooth out the transmission rate of the max speed set in Mbps/MBps
e.g. -T
could be a flag to enable traffic "smoothing" (packet pacing) to smooth out a 10Mbps stream so that 825 frames of 1514 bytes are evenly paced over a 1 second interval:
1514 * 8 == 12112 bits per frame.
Target "smoothed" Tx rate == 10Mbps (10,000,000 bits per second)
10,000,000 / 12112 == ~825 frames per second
1Gbps NIC == 1,000,000,000 bits per second Tx rate
12112 / 1,000,000,000 == one frame takes 0.000012112 seconds to Tx.
0.000012112ns * 825 == 0.009992400 seconds required to Tx 825 frames
1.0 - 0.0099924 == 0.990007600 remaining to be spread out as inter-frame delay
0.990007600 / 825 == 0.00120000921 seconds inter-frame delay
sudo ./etherate -M 10000000 -T
Etherate version 0.13.beta 2017-07
Quitting with CTRL+C before a running test has finished means that no "stats" are printed for the portion of a test that as run so far.
bensley@ubuntu-laptop:~/C/github/etherate/Etherate$ sudo ./etherate -i lo -g -G
[sudo] password for bensley:
Running in TX mode
Using device lo with address 00:00:00:00:00:00, interface index 1
Physical interface MTU unknown, test might exceed physical MTU!
Entering promiscuous mode
Source MAC 00:00:5e:00:00:01
Destination MAC 00:00:5e:00:00:02
Sending gratuitous broadcasts...
Done.
Frame size is 1514 bytes
Starting test on Sun Sep 24 15:30:51 2017
Seconds Mbps Tx MBs Tx FrmTx/s Frames Tx
1 971.18 115 80932 80932
2 9900.89 1296 825074 906006
3 9684.61 2450 807051 1713057
^CQuitting...
Leaving promiscuous mode
The stats that are printed when a test is fully completed (such as min/max/avg, frame counts etc) should be printed even when a test is stopped prematurely.
Hello,
Etherate failed to compile on Alpine Linux (musl libc based distro) with this error mesage.
In file included from etherate.cpp:77:0:
etherate.h:164:21: error: field 'TV_SELECT_DELAY' has incomplete type 'timeval'
struct timeval TV_SELECT_DELAY; // Elapsed time struct for polling the socket FD
^~~~~~~~~~~~~~~
etherate.h:164:13: note: forward declaration of 'struct timeval'
struct timeval TV_SELECT_DELAY; // Elapsed time struct for polling the socket FD
^~~~~~~
make: *** [Makefile:444: etherate.o] Error 1
not an issue per se, but not sure how else to communicate the request. Assuming this tool would run on Mac (don't see why not), any chance you could add it to Homebrew for easy install for Mac Users?
Add a CLI option to ACK one in every N frames, otherwise ACK mode is very slow on a stable link with no drops.
bensley@ubuntu-laptop:~/C/github/etherate/dev$ ./etherate -V
Etherate version 1.16 2018-01
The average FPS and max FPS from every speed test are the same.
Maximum speed during test: 11573.62Mbps, 955550Fps
Average speed during test: 11200.13Mbps, 955550Fps
[user@ucpe_003 Etherate-master]$ sudo ./etherate -i ens3f2 -v 4093 -M 10000000
...
Physical interface MTU (1514 with headers) is less than
the test frame size (1518 with headers). Test frames shall
be limited to the interface MTU size
...
Frame size is 1514 bytes
...
Seconds Mbps Tx MBs Tx FrmTx/s Frames Tx
1 10.00 1 833 833
2 10.00 2 833 1666
3 10.00 3 833 2499
"Frame size is 1514 bytes" - should say 1518.
Also the MTU warning means that 4 bytes of payload are being chopped from the frame (confirmed with tcpdump).
Bug sent in via email:
I sync between TX an RX a 10M test and on RX I always have 1M. I have made a port mirror and I see that my TLV value must be 0x2625A0 and I receive 0x2625A.
Confirm that the Rx host is incorrectly displaying a speed limit if one is set.
When compiling by hand there are still some errors with -pedantic
compile flag, also more errors are shown on CentOS than Ubuntu. Investigate these and see if they are genuine issues.
SOCKET_FD
is left open at the end of list_interfaces()
;
https://github.com/jwbensley/Etherate/blob/master/funcs.cpp#L1098
bensley@ubuntu-laptop:~/C/github/etherate/dev$ uname -a
Linux ubuntu-laptop 4.4.0-36-generic #55-Ubuntu SMP Thu Aug 11 18:01:55 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
bensley@ubuntu-laptop:~/C/github/etherate/dev$ cat /etc/redhat-release || lsb_release -a || cat /etc/issue
cat: /etc/redhat-release: No such file or directory
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
bensley@ubuntu-laptop:~/C/github/etherate/dev$ lspci | grep -i eth
00:19.0 Ethernet controller: Intel Corporation 82579LM Gigabit Network Connection (rev 04)
bensley@ubuntu-laptop:~/C/github/etherate/dev$ ./etherate -V
Etherate version 1.16 2018-01
Replace sendto()
with send()
in all speed test functions:
/*
tx_ret = sendto(test_interface->sock_fd,
frame_headers->tx_buffer,
test_params->f_size_total, MSG_DONTWAIT,
(struct sockaddr*)&test_interface->sock_addr,
sizeof(test_interface->sock_addr));
*/
tx_ret = send(test_interface->sock_fd,
frame_headers->tx_buffer,
test_params->f_size_total, MSG_DONTWAIT);
bind()
is used so we don't need to specify the link level details in the sendto()
call. send()
can be called directly without these extra arguments which saves a few CPU cycles and gives a minor performance boost.
Using send()
:
bensley@ubuntu-laptop:~/C/github/etherate/dev$ sudo taskset -c 3 ./etherate -i lo -g -G
...
Maximum speed during test: 12072.82Mbps, 996765Fps
Average speed during test: 11588.63Mbps, 996765Fps
Using sendto()
:
bensley@ubuntu-laptop:~/C/github/etherate/dev$ sudo taskset -c 3 ./etherate -i lo -g -G
...
Maximum speed during test: 11573.62Mbps, 955550Fps
Average speed during test: 11200.13Mbps, 955550Fps
``
Evalute if this code can be pulled into Etherate, submitted by Christophe via email, to check if an interface is connected:
diff -urpN Etherate/defaults.c Etherate-clucas/defaults.c
--- Etherate/defaults.c 2017-06-12 13:53:17.446600433 +0200
+++ Etherate-clucas/defaults.c 2017-06-15 09:22:39.639698487 +0200
@@ -283,6 +283,11 @@ int16_t setup_socket_interface(struct fr
}
+ if (verify_interface_connectivity(test_interface) != 1) {
+ printf("Error: Interace '%s' is DOWN.\n", (char*)test_interface->IF_NAME);
+ return EX_SOFTWARE;
+ }
+
// Link layer socket setup
test_interface->SOCKET_ADDRESS.sll_family = PF_PACKET;
diff -urpN Etherate/functions.c Etherate-clucas/functions.c
--- Etherate/functions.c 2017-06-12 13:53:17.456600422 +0200
+++ Etherate-clucas/functions.c 2017-06-15 09:23:27.819647543 +0200
@@ -38,6 +38,7 @@
* print_usage()
* remove_interface_promisc()
* reset_app()
+ * verify_interface_connectivity()
* set_interface_promisc()
* set_sock_interface_index()
* set_sock_interface_name()
@@ -1212,6 +1219,24 @@ void reset_app(struct frame_headers *fra
}
+int16_t verify_interface_connectivity(struct test_interface *test_interface)
+{
+ struct ifreq if_req;
+
+ int socId = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
+ if (socId < 0)
+ fprintf(stderr, "Socket failed. Errno = %d\n", errno);
+
+
+ (void) strncpy(if_req.ifr_name, (char*)test_interface->IF_NAME, sizeof(if_req.ifr_name));
+ int rv = ioctl(socId, SIOCGIFFLAGS, &if_req);
+ close(socId);
+
+ if (rv == -1)
+ fprintf(stderr, "Ioctl failed. Errno = %d\n", errno);
+
+ return (if_req.ifr_flags & IFF_UP) && (if_req.ifr_flags & IFF_RUNNING);
+}
int16_t set_interface_promisc(struct test_interface *test_interface)
Sent in via email:
I have tried some sample tests using etherate.
I have used below commands in that order
Test 1
In Rx
sudo etherate –rIn Tx
sudo etherateI can able to see the speed, number of frames transmitted at Tx side but in Rx side I don’t see the frames received or its speed. It prints the “settings have been synchronized” some calculated delay values and the title row of result “ Seconds MbpsRx MBsRx FrmRx/s FramesRx” but no values below this row.
What could be the issue?
https://github.com/jwbensley/Etherate/blob/master/tests.c#L1187
Replace that double function call with a pointer instead to save on cycles.
user@R61:~$ uname -a
Linux R61 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
user@R61:~$ cat /etc/redhat-release || lsb_release -a || cat /etc/issue
cat: /etc/redhat-release: Tiedostoa tai hakemistoa ei ole
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
user@R61:~$ lspci | grep -i eth
00:19.0 Ethernet controller: Intel Corporation 82566MM Gigabit Network Connection (rev 03)
user@R61:~$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:1f:e2:1a:f6:67 brd ff:ff:ff:ff:ff:ff
3: wls3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
link/ether 00:21:5c:75:df:b9 brd ff:ff:ff:ff:ff:ff
user@R61:~$ etherate -v
Oops! Missing 802.1p VLAN ID
Usage info: etherate -h|--h
user@R61:~$ sudo etherate -l
Device lo with address 00:00:00:00:00:00, has interface index 1
Device enp0s25 with address 00:1f:e2:1a:f6:67, has interface index 2
Device wls3 with address 00:21:5c:75:df:b9, has interface index 3
user@R61:~$ etherate -V
Etherate version 1.16 2018-01
frame_headers->sub_tlv_size = frame_headers->tlv_size + sizeof(uint8_t) + sizeof(uint16_t) + sizeof(uint64_t);
before we've set frame_headers->tlv_size
.
Reported by @yskripachov
> diff --git a/defaults.c b/defaults.c
index 0eea55e..83e94d7 100644
--- a/defaults.c
+++ b/defaults.c
@@ -92,11 +92,11 @@ void set_default_values(struct app_params *app_params,
frame_headers->src_mac[3] = 0x00;
frame_headers->src_mac[4] = 0x00;
frame_headers->src_mac[5] = 0x01;
+ frame_headers->tlv_size = sizeof(uint8_t) + sizeof(uint16_t) +
+ sizeof(uint32_t);
frame_headers->sub_tlv_size = frame_headers->tlv_size +
sizeof(uint8_t) + sizeof(uint16_t) +
sizeof(uint64_t);
- frame_headers->tlv_size = sizeof(uint8_t) + sizeof(uint16_t) +
- sizeof(uint32_t);
frame_headers->tx_buffer = (uint8_t*)calloc(1, F_SIZE_MAX);
frame_headers->vlan_dei = 0;
frame_headers->vlan_id = VLAN_ID_DEF;
@@ -328,4 +328,4 @@ int16_t setup_socket_interface(struct frame_headers *frame_headers,
Via email:
...trying to use it to test 40Gb network connectivity but can’t get it to work:
[root@r6181-d5-us01 Etherate-master]# ./etherate
Running in TX mode
Error: Couldn't find appropriate interface ID, returned ID was 0!
Try supplying a source MAC address with the -s option.
[root@r6181-d5-us01 Etherate-master]# ./etherate -s e4:1d:2d:af:c5:80
Running in TX mode
Error: Couldn't find appropriate interface ID, returned ID was 0!
Try supplying a source MAC address with the -s option.
[root@r6181-d5-us01 Etherate-master]# uname -a
Linux r6181-d5-us01 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Email from Bruno:
In the cli_args() function, the lines :
uint8_t size = sizeof(argv[i+1]);
strncpy((char*) TEST_INTERFACE->IF_NAME,
argv[i+1], size);
should be replaced by :
strncpy((char*) TEST_INTERFACE->IF_NAME, argv[i+1], sizeof(TEST_INTERFACE->IF_NAME));
Currently the code does not copy the name of the test interface, only the first 4 or 8 bytes of it.
This is in relation to https://github.com/jwbensley/Etherate/blob/master/functions.cpp#L462
This example test stalls indefinitely:
bensley@ubuntu-laptop:~/C/github/etherate/Etherate$ sudo ./etherate -I 1 -r
Running in RX mode
Using device lo with address 00:00:00:00:00:00, interface index 1
Physical interface MTU unknown, test might exceed physical MTU!
Entering promiscuous mode
Source MAC 00:00:5e:00:00:02
Destination MAC 00:00:5e:00:00:01
Sending gratuitous broadcasts...
Done.
Waiting for settings from TX host
Link quality tests enabled
Settings have been synchronised
Frame size if 1514 bytes
Calculating delay between hosts...
Tx to Rx delay calculated as 0.000000004 seconds
Starting test on Sun May 14 14:25:43 2017
No. Echo Interval
1: 0.0s
2: 0.499983196s
bensley@ubuntu-laptop:~/C/github/etherate/Etherate$ sudo ./etherate -I 1 -Q 500 500
[sudo] password for bensley:
Running in TX mode
Using device lo with address 00:00:00:00:00:00, interface index 1
Physical interface MTU unknown, test might exceed physical MTU!
Entering promiscuous mode
Source MAC 00:00:5e:00:00:01
Destination MAC 00:00:5e:00:00:02
Sending gratuitous broadcasts...
Done.
Synchronising settings with RX host
Link quality tests enabled
Settings have been synchronised
Frame size if 1514 bytes
Calculating delay between hosts...
Tx to Rx delay calculated as 0.000000004 seconds
Starting test on Sun May 14 14:25:43 2017
No. RTT Jitter
1: 0.000027326s 0.000027326s
2: 0.000009499s 0.000017827s
When running the MTU test, as soon as the first frame is received at the final/maximum size on the Rx side it stops, so the test so received frames on Rx is always 2 less than Tx frame count on TX host;
Tx:
Test frames transmitted: 33
Test frames received: 33
Rx:
Test frames transmitted: 33
Test frames received: 31
Meet all the requirements here: https://github.com/jwbensley/Etherate/community
Add a page to the Etherate site about troubleshooting too.
Whatever command I try from the examples, it gets stuck forever (well, at least several minutes) at "Calculating delay between hosts".
This is likely because my network blocks (all?) ICMP. Even if it's considered obvious, it would be nice to specify in the README (or maybe to give up after a while?).
$ sudo etherate -f 1500
Running in TX mode
Using device eth0 with address 64:00:6a:6c:5e:f5, interface index 2
Entering promiscuous mode
Source MAC 00:00:5e:00:00:01
Destination MAC 00:00:5e:00:00:02
Sending gratuitous broadcasts...
Done.
Synchronising settings with RX host
Settings have been synchronised
Frame size if 1514 bytes
Calculating delay between hosts...
q^CLeaving promiscuous mode
See firewalls:
$ sudo lft -E ripe.net
Tracing _______________________.
TTL LFT trace to www.ripe.net (193.0.6.139):80/tcp
1 10.169.0.252 10.8/17.6ms
** [firewall] the next gateway may statefully inspect packets
2 10.169.174.177 5.3/15.9ms
** [neglected] no reply packets received from TTLs 3 through 4
** [4.2-3 BSD bug] the next gateway may errantly reply with reused TTLs
5 * [target] www.ripe.net (193.0.6.139):80 18.4ms
I'm on:
$ uname -a
Linux fondazione-Precision-Tower-3620 4.10.0-22-generic #24-Ubuntu SMP Mon May 22 17:43:20 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Thanks for the patience and feel free to close as invalid. :-)
The run time flag -fsanitize=address
has found some cases such as when using -h
, socket()
s and malloc()
s aren't close()
ed and free()
ed as expected.
bensley@ubuntu-laptop:~/C/github/etherate/dev$ uname -a
Linux ubuntu-laptop 4.11.0-041100-generic #201705041534 SMP Thu May 4 19:36:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
bensley@ubuntu-laptop:~/C/github/etherate/dev$ cat /etc/redhat-release || lsb_release -a || cat /etc/issue
cat: /etc/redhat-release: No such file or directory
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
bensley@ubuntu-laptop:~/C/github/etherate/dev$ lspci | grep -i eth
00:19.0 Ethernet controller: Intel Corporation 82579LM Gigabit Network Connection (rev 04)
bensley@ubuntu-laptop:~/C/github/etherate/dev$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s25: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 3c:97:0e:bd:62:82 brd ff:ff:ff:ff:ff:ff
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
link/ether 9c:4e:36:c9:b4:98 brd ff:ff:ff:ff:ff:ff
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 52:54:00:dd:f2:ff brd ff:ff:ff:ff:ff:ff
6: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1412 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 500
link/none
bensley@ubuntu-laptop:~/C/github/etherate/dev$ ./etherate -V
Etherate version 1.17 2018-04
bensley@ubuntu-laptop:~/C/github/etherate/dev$ sudo ./etherate -l
Device lo with address 00:00:00:00:00:00, has interface index 1
Device enp0s25 with address 3c:97:0e:bd:62:82, has interface index 2
Device wlp3s0 with address 9c:4e:36:c9:b4:98, has interface index 3
Device virbr0 with address 00:00:00:00:00:00, has interface index 4
Device virbr0-nic with address 52:54:00:dd:f2:ff, has interface index 5
The frame order checking code is comparing the wrong values.
Run any speed test - the out of order packets code is comparing f_speed_max
instead of f_rx_count
.
if (ntohll(*eth->frm.rx_sub_tlv_value) == (eth->speed_test.f_speed_max+1)) {
eth->params.f_rx_ontime += 1;
eth->speed_test.f_speed_max += 1;
} else if (ntohll(*eth->frm.rx_sub_tlv_value) > (eth->params.f_rx_count)) {
eth->speed_test.f_speed_max = ntohll(*eth->frm.rx_sub_tlv_value);
eth->params.f_rx_early += 1;
} else if (ntohll(*eth->frm.rx_sub_tlv_value) <= eth->params.f_rx_count) {
eth->params.f_rx_late += 1;
}
Email from Bruno:
In the file functions.cpp, function get_interface_mtu_by_name(), the lines :
const uint8_t *pIF_NAME = TEST_INTERFACE->IF_NAME;
strcpy(ifr.ifr_name,(char*) pIF_NAME);
should be replaced by
strncpy(ifr.ifr_name, (char *) TEST_INTERFACE->IF_NAME, sizeof(ifr.ifr_name));
as TEST_INTERFACE->IF_NAME is not guaranteed to be zero-terminated.
This is in relation to https://github.com/jwbensley/Etherate/blob/master/functions.cpp#L924
DanP via Skype has shown that his Rx host is double counting frames received from Tx:
TX:
Seconds Mbps Tx MBs Tx FrmTx/s Frames Tx
1 661.46 78 55122 55122
2 975.24 195 81270 136392
3 975.23 311 81269 217661
4 975.42 427 81285 298946
RX
Seconds Mbps Rx MBs Rx FrmRx/s Frames Rx
1 767.50 91 64301 64301
2 1940.10 322 162542 226843
3 1940.29 554 162558 389401
4 1940.21 785 162551 551952
5 1940.32 1016 162560 714512
Traffis is being sent from Tx to FF:FF:FF:FF:FF:FF (because BUM testing is required) and a VLAN tag is being used on sender and receiver (the same at both sides). This is over an MPLS pseudowire, the ingress router interfaces (connected to Tx host) and egress router interface (connected to Rx host) both show the correct ingress and egress speed respectively (which is the speed shown by the Tx host). Only the Rx host is showing double the frame rate stats within Etherate.
Topology:
SERVER1 -> NE20 (BUM FILTER) -> MPLS -> MX104 -> SERVER2
When the BUM filters are enabled on the routers only 10Mbps of traffic is passing over the pseudowire but the Rx host shows 20Mbps of traffic incomming within Etherate. Physical device and router interfaces correctly show 10Mbps.
root@test1:~/Etherate# etherate -V
Etherate version 0.13.beta 2017-07
root@test1:~/Etherate# uname -a
Linux test1 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 GNU/Linux
2018-01 (1.16)
The value for calculating the max FPS is a uint64_t which should be a long double.
bensley@ubuntu-laptop:~/C/github/etherate/dev$ sudo taskset -c 3 ./etherate -i lo -g -G -T 50000
Running in TX mode
Using device lo with address 00:00:00:00:00:00, interface index 1
Physical interface MTU unknown, tests might exceed physical MTU!
Entering promiscuous mode
Source MAC 00:00:5e:00:00:01
Destination MAC 00:00:5e:00:00:02
Sending gratuitous broadcasts...
Done.
Frame size is 1514 bytes
Floating point exception (core dumped)
1.16
Run any speed test.
The speed test output is missaligned (others test too probably):
Seconds Mbps TX MBs Tx FrmTX/s Frames TX
1 3998.94 499 333245 333245
2 10518.91 1814 876576 1209821
Via emai:
I try to use etherate and the -Q option.
I run etherate on two x86 ends, but I have the result as :
One side :
root@ubuntu:~# ./etherate -I 2 -Q 1000 1000
Running in TX mode
Using device eth0 with address 00:00:60:cb:fd:ba, interface index 2
Entering promiscuous mode
Source MAC 00:00:5e:00:00:01
Destination MAC 00:00:5e:00:00:02
Sending gratuitous broadcasts...
Synchronising settings with RX host
Link quality tests enabled
Settings have been synchronised
Calculating delay between hosts...
Tx to Rx delay calculated as 0.000000051 seconds
Starting test on Fri Nov 4 12:19:09 2016
No. RTT Jitter
*
*
*
*
[...]
est frames transmitted: 30
Test frames received: 0
Non test or out-of-order frames received: 210
Number of timeouts: 31
Min/Max RTT during test: 999999.999999000s/0.000000000s
Min/Max jitter during test: 999999.999999000s/0.000000000s
Ending test on Fri Nov 4 12:19:39 2016
Leaving promiscuous mode
root@ubuntu:~#
Other side :
oot@iou:~/SRC/Etherate-master# ./etherate -r
Running in RX mode
Using device eth0 with address 00:00:24:8b:26:3d, interface index 2
Entering promiscuous mode
Source MAC 00:00:5e:00:00:02
Destination MAC 00:00:5e:00:00:01
Sending gratuitous broadcasts...
Waiting for settings from TX host
Link quality tests enabled
Settings have been synchronised
Calculating delay between hosts...
Tx to Rx delay calculated as 0.000000051 seconds
Starting test on Fri Nov 4 12:22:06 2016
-> It never ends up.
Do you know why I am not able to have a correct test ?
Test these extra compiler arguments, see if they are beneficial:
-Wduplicated-branches (GCC 7):
Warn when an if-else has identical branches.
-Wduplicated-cond (GCC 6):
Warn about duplicated condition in if-else-if chains.
-Wnull-dereference (GCC 6):
Warn when the compiler detects paths that dereferences a null pointer.
-Wjump-misses-init (GCC 4.5):
Warn if a "goto" statement or a "switch" statement jumps forward across the initialization of a variable, or jumps backward to a label after the variable has been initialized. This only warns about variables that are initialized when they are declared.
-Wlogical-op (GCC 4.3):
Warn about suspicious uses of logical operators in expressions. This includes using logical operators in contexts where a bit-wise operator is likely to be expected.
-Wshadow (GCC 3):
Warn whenever a local variable or type declaration shadows another variable, parameter, type, class member (in C++), or instance variable (in Objective-C) or whenever a built-in function is shadowed.
-Wformat=2 (GCC 3.0):
-Wformat=1 checks calls to "printf" and "scanf", etc., to make sure that the arguments supplied have types appropriate to the format string specified, and that the conversions specified in the format string make sense. This includes standard functions, and others specified by format attributes, in the "printf", "scanf", "strftime" and "strfmon" families. -Wformat=2 enables -Wformat=1 plus additional format checks, currently equivalent to -Wformat -Wformat-nonliteral -Wformat-security -Wformat-y2k.
-Wformat-signedness (GCC ?):
If -Wformat is specified, also warn if the format string requires an unsigned argument and the argument is signed and vice versa.
-Wextra (GCC ?):
This enables some extra warning flags that are not enabled by -Wall. The extra options are:
-Wclobbered -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers -Wmissing-parameter-type (C only) -Wold-style-declaration (C only) -Woverride-init -Wsign-compare -Wtype-limits -Wuninitialized -Wunused-parameter (only with -Wunused or -Wall) -Wunused-but-set-parameter (only with -Wunused or -Wall).
Can we check gcc version and change options based on available version?
Can we automate some tests too?
Any Etherate version.
Remove -fstack-protector-all compile flag, this is having a negative performance impact.
The first set of results are with -fstack-protector-all compile flag present, the second set of results are without it.
Seconds Mbps Tx MBs Tx FrmTx/s Frames Tx
1 3671.73 437 303148 303148
2 5836.00 1133 481836 784984
3 5819.13 1827 480443 1265427
4 5818.16 2520 480363 1745790
5 5813.18 3213 479952 2225742
6 5820.41 3907 480549 2706291
7 5817.24 4600 480287 3186578
8 5816.74 5294 480246 3666824
9 5818.54 5988 480395 4147219
10 5816.81 6681 480252 4627471
Seconds Mbps Tx MBs Tx FrmTx/s Frames Tx
1 4508.76 537 372256 372256
2 6045.29 1258 499116 871372
3 6046.76 1978 499237 1370609
4 6044.54 2699 499054 1869663
5 6043.55 3419 498972 2368635
6 6041.28 4140 498785 2867420
7 6046.71 4860 499233 3366653
8 6045.51 5581 499134 3865787
9 6047.50 6302 499298 4365085
10 6045.84 7023 499161 4864246
Report throughput if IPv4 or IPv6 was used, if UDP or TCP were used on top of IP.
Etherate version 1.17 2018-04
When running a longer test, e.g.5 minutes, the average bps/fps counters are overflowing:
Average speed during test: 352123.25Mbps, 709925909Fps
sudo taskset -c 2 ./etherate -i ens2f0 -t 3600 -f 48
...
900 392.23 41929 790782 709133369
901 393.10 41976 792540 709925909
^CQuitting...
Test frames transmitted: 710465807
Test frames received: 0
Non test frames received: 16
In order ACK frames received: 0
Out of order ACK frames received early: 0
Out of order ACK frames received late: 0
Maximum speed during test: 393.10Mbps, 792540Fps
Average speed during test: 352123.25Mbps, 709925909Fps
Data transmitted during test: 42008MBs
Leaving promiscuous mode
Email from Bruno:
In the file tests.cpp, function latency_test(), the final printf() in Tx mode prints :
`QM_TEST->TIMEOUT_COUNT += 1,`
as the timed out frames count. I think this is an error.
In reference to this line:
https://github.com/jwbensley/Etherate/blob/master/tests.cpp#L854
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.