Skip to content

Commit

Permalink
update to support VxWorks
Browse files Browse the repository at this point in the history
  • Loading branch information
RayWindRiver committed Nov 15, 2023
1 parent 4bea03e commit 2dc942a
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 1 deletion.
11 changes: 11 additions & 0 deletions src/iperf.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
#include "queue.h"
#include "cjson.h"
#include "iperf_time.h"
#include "portable_endian.h"

#if defined(HAVE_SSL)
#include <openssl/bio.h>
Expand All @@ -93,6 +94,10 @@ typedef uint_fast64_t iperf_size_t;
typedef atomic_uint_fast64_t atomic_iperf_size_t;
#endif // __IPERF_API_H

#if (defined(__vxworks)) || (defined(__VXWORKS__))
typedef unsigned int uint
#endif // __vxworks or __VXWORKS__

struct iperf_interval_results
{
atomic_iperf_size_t bytes_transferred; /* bytes transferred in this interval */
Expand Down Expand Up @@ -453,9 +458,15 @@ struct iperf_test
extern int gerror; /* error value from getaddrinfo(3), for use in internal error handling */

/* UDP "connect" message and reply (textual value for Wireshark, etc. readability - legacy was numeric) */
#if BYTE_ORDER == BIG_ENDIAN
#define UDP_CONNECT_MSG 0x39383736
#define UDP_CONNECT_REPLY 0x36373839
#define LEGACY_UDP_CONNECT_REPLY 0xb168de3a
#else
#define UDP_CONNECT_MSG 0x36373839 // "6789" - legacy value was 123456789
#define UDP_CONNECT_REPLY 0x39383736 // "9876" - legacy value was 987654321
#define LEGACY_UDP_CONNECT_REPLY 987654321 // Old servers may still reply with the legacy value
#endif

/* In Reverse mode, maximum number of packets to wait for "accept" response - to handle out of order packets */
#define MAX_REVERSE_OUT_OF_ORDER_PACKETS 2
Expand Down
8 changes: 8 additions & 0 deletions src/iperf_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -4710,7 +4710,15 @@ iperf_create_pidfile(struct iperf_test *test)
if (pid > 0) {

/* See if the process exists. */
#if (defined(__vxworks)) || (defined(__VXWORKS__))
#if (defined(_WRS_KERNEL)) && (defined(_WRS_CONFIG_LP64))
if (kill((_Vx_TASK_ID)pid, 0) == 0) {
#else
if (kill(pid, 0) == 0) {
#endif // _WRS_KERNEL and _WRS_CONFIG_LP64
#else
if (kill(pid, 0) == 0) {
#endif // __vxworks or __VXWORKS__
/*
* Make sure not to try to delete existing PID file by
* scribbling over the pathname we'd use to refer to it.
Expand Down
12 changes: 12 additions & 0 deletions src/iperf_client_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -614,7 +614,19 @@ iperf_run_client(struct iperf_test * test)
timeout = &used_timeout;
}

#if (defined(__vxworks)) || (defined(__VXWORKS__))
if (timeout != NULL && timeout->tv_sec == 0 && timeout->tv_usec == 0) {
taskDelay (1);
}

result = select(test->max_fd + 1,
&read_set,
(test->state == TEST_RUNNING && !test->reverse) ? &write_set : NULL,
NULL,
timeout);
#else
result = select(test->max_fd + 1, &read_set, &write_set, NULL, timeout);
#endif // __vxworks or __VXWORKS__
if (result < 0 && errno != EINTR) {
i_errno = IESELECT;
goto cleanup_and_fail;
Expand Down
1 change: 0 additions & 1 deletion src/iperf_udp.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@
#include "timer.h"
#include "net.h"
#include "cjson.h"
#include "portable_endian.h"

#if defined(HAVE_INTTYPES_H)
# include <inttypes.h>
Expand Down
2 changes: 2 additions & 0 deletions src/portable_endian.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,9 @@
// the truth because we use the homebrew htonll, et al. implementations
// that were originally the sole implementation of this functionality
// in iperf 3.0.
#if (!defined(__vxworks)) && (!defined(__VXWORKS__))
# warning platform not supported
#endif
# include <endian.h>
#if BYTE_ORDER == BIG_ENDIAN
#define HTONLL(n) (n)
Expand Down

0 comments on commit 2dc942a

Please sign in to comment.