From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> We are sending data to controller at wrong average rate not equal to 1 packet / SDU interval, if Transport_Latency is not an integer multiple of SDU_Interval. The calculation currently may also give zero, so no data gets sent. --- tools/isotest.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tools/isotest.c b/tools/isotest.c index 68154b19caa4..c1bb6abd29aa 100644 --- a/tools/isotest.c +++ b/tools/isotest.c @@ -46,6 +46,7 @@ #define NSEC_USEC(_t) (_t / 1000L) #define SEC_USEC(_t) (_t * 1000000L) #define TS_USEC(_ts) (SEC_USEC((_ts)->tv_sec) + NSEC_USEC((_ts)->tv_nsec)) +#define ROUND_CLOSEST(_x, _y) (((_x) + (_y / 2)) / (_y)) #define DEFAULT_BIG_ID 0x01 #define DEFAULT_BIS_ID 0x01 @@ -834,7 +835,9 @@ static void do_send(int sk, int fd, char *peer, bool repeat) } /* num of packets = latency (ms) / interval (us) */ - num = (out->latency * 1000 / out->interval); + num = ROUND_CLOSEST(out->latency * 1000, out->interval); + if (!num) + num = 1; syslog(LOG_INFO, "Number of packets: %d", num); @@ -843,8 +846,7 @@ static void do_send(int sk, int fd, char *peer, bool repeat) * latency: * jitter buffer = 2 * (SDU * subevents) */ - sndbuf = 2 * ((out->latency * 1000 / out->interval) * - out->sdu); + sndbuf = 2 * (num * out->sdu); len = sizeof(sndbuf); if (setsockopt(sk, SOL_SOCKET, SO_SNDBUF, &sndbuf, len) < 0) { -- 2.45.1