[LTP] [PATCH 2/2] sctputil.h: TCONF on EAFNOSUPPORT
Petr Vorel
pvorel@suse.cz
Thu Feb 17 12:45:22 CET 2022
Hi Cyril, all,
> Hi!
> > diff --git a/utils/sctp/testlib/sctputil.h b/utils/sctp/testlib/sctputil.h
> > index 1e21760bec..c4bedb47cf 100644
> > --- a/utils/sctp/testlib/sctputil.h
> > +++ b/utils/sctp/testlib/sctputil.h
> > @@ -133,9 +133,14 @@ extern int TST_CNT;
> > static inline int test_socket(int domain, int type, int protocol)
> > {
> > int sk = socket(domain, type, protocol);
> > + int res = TBROK;
> > - if (sk == -1)
> > - tst_brkm(TBROK, tst_exit, "socket: %s", strerror(errno));
> > + if (sk == -1) {
> > + if (errno == EAFNOSUPPORT)
> > + res = TCONF;
> > +
> > + tst_brkm(res, tst_exit, "socket: %s", strerror(errno));
> > + }
> I would keep the messages separated here, i.e. do something as:
> if (errno == EAFNOSUPPORT)
> tst_brkm(TBROK | TERRNO, "socket(%i, %i, %i) not supported",
> domain, type, protocol);
> tst_brkm(TBROK | TERRNO, "socket()");
+1
> Btw this code actually duplicates the safe_socket() function we do have
> already, so it may as well be easier to just replace the test_socket()
> with SAFE_SOCKET() in the tests...
I originally wanted to use safe_macros.h in sctputil.h to replace these
test_{bind,connect,listen,socket} with their SAFE_*() variants.
But it leads into dependency many redefinition problems due mixing
<netinet/in.h> and <linux/in.h>, e.g.:
/usr/include/netinet/in.h:68:5: error: redeclaration of enumerator ‘IPPROTO_GRE’
68 | IPPROTO_GRE = 47, /* General Routing Encapsulation. */
/usr/include/linux/in.h:55:3: note: previous definition of ‘IPPROTO_GRE’ with type ‘enum <anonymous>’
55 | IPPROTO_GRE = 47, /* Cisco GRE tunnels (rfc 1701,1702) */
| ^~~~~~~~~~~
in utils/sctp/func_tests/test_1_to_1_rtoinfo.c, which requires <linux/in.h> for
at least IPPROTO_SCTP which is not in <netinet/in.h>.
IPPROTO_SCTP is also in <linux/sctp.h>, but it also requires <netinet/sctp.h>
for sctp_recvmsg() and it creates another redefinition conflict due using
<netinet/sctp.h> with <linux/sctp.h> => dependency hell :).
FYI test_1_to_1_rtoinfo.c uses test_socket() and sctputil.h.
Sure this is solvable via either using lapi headers which would load only one of
them and with adding extra definitions or simple just adding the missing
definitions into sctputil.h.
But IMHO a cleaner solution is to rewrite test one by one (which would take
time), but we're waiting reply from SCTP maintainers where (and who) is going to
maintain these tests which deserve a massive cleanup...
Thus for now, I'll follow your other suggestions and merge so that we have IPv6
fixes in.
Kind regards,
Petr
More information about the ltp
mailing list