Date: Thu, 12 Jan 2012 12:11:04 +0100 From: Michael Tuexen <Michael.Tuexen@lurchi.franken.de> To: smahood@engmail.uwaterloo.ca Cc: freebsd-net@freebsd.org Subject: Re: [PATCH] Have netstat test for sctp kernel support Message-ID: <940650A6-785B-435B-B7C5-7C68925DEC8D@lurchi.franken.de> In-Reply-To: <20111025141741.26891k8ib38ekmkg@www.nexusmail.uwaterloo.ca> References: <20111025141741.26891k8ib38ekmkg@www.nexusmail.uwaterloo.ca>
next in thread | previous in thread | raw e-mail | index | archive | help
On Oct 25, 2011, at 8:17 PM, Sean Mahood wrote: > Hello, >=20 > I noticed that when doing a netstat -s (running on a kernel without = SCTP support compiled in), I get the following message output to stderr: >=20 > netstat: sysctl: net.inet.sctp.stats: No such file or directory >=20 > Wondering why it would attempt to fetch SCTP stats when it was = compiled out of the kernel, I noted that netstat could be compiled = without SCTP support as well, but that there is no good way to link the = two compilation conditions, or to have a generic binary that can run = without error regardless of compiled kernel options. >=20 > To that end, I added a method to check for environment compatibility = in netstat. For SCTP specifically, I used the FEATURE macros and added = SCTP as a FEATURE. >=20 > Other protocols could also be configured to be checked at runtime if = desired, though I haven't implemented any others at this time. Hi Sean, I agree, the error message should be avoided. There is a similar = situation for IPv6. When not compiled into the kernel, netstat should not report an error, even if it is not = recompiled. The way it is handled for INET6 is to pay attention to the errno in case = sysctlbyname() fails. we also have already one place in the sctp.c code where we do the correct check. I guess it = was missed in the code responsable for the above error message. So what do you think about the attached patch, which resolves the issue = you reported in a way already used in netstat and which is portable to other BSD based platform (like = Mac OS X)? Thank you very much for reporting the issue. Best regards Michael Index: sctp.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- sctp.c (revision 230008) +++ sctp.c (working copy) @@ -611,7 +611,8 @@ memset(&zerostat, 0, len); if (sysctlbyname("net.inet.sctp.stats", &sctpstat, &len, zflag ? &zerostat : NULL, zflag ? len : 0) < 0) { - warn("sysctl: net.inet.sctp.stats"); + if (errno !=3D ENOENT) + warn("sysctl: net.inet.sctp.stats"); return; } } else >=20 > -- Sean >=20 >=20 >=20 > = <main.c.diff><netstat.h.diff><sctp.c.diff><sctp_sysctl.c.diff>____________= ___________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?940650A6-785B-435B-B7C5-7C68925DEC8D>