[LTP] TST_GET_UNUSED_PORT returns ports < 1024

Cyril Hrubis chrubis@suse.cz
Thu Jun 6 15:43:21 CEST 2019


Hi!
> when using the TST_GET_UNUSED_PORT macro you sometimes get ports lower
> than 1024 which would require a testcase to have the
> CAP_NET_BIND_SERVICE capability (or simply run as root).

Looking at the code as far as I can tell the function returns the port
in the network endianity, which is big endian. Intel CPUs are little
endian, so if you want to print the port you actually have to use
ntohs() function to convert it to the host endianity. And if you are
passing that value in the sockaddr_in structure you must not use the
htons() since the value is already in the correct byte order. And yes
this is horribly confusing, but that's how it is.

I guess that we should write down this piece of information in the
documentation, because it looks like the tst_get_unused_port shell
helper does this incorrectly and prints the raw value instead of
converting it with ntohs().

-- 
Cyril Hrubis
chrubis@suse.cz


More information about the ltp mailing list