network stack sysctl problems.

Thomas Doerfler Thomas.Doerfler at imd-systems.de
Fri Aug 25 09:35:29 UTC 2006


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Steven,

I am on holidays, so I don't have access to our changes, but I filed a
PR1119 about sysctl not working and a patch to get it working again some
time ago. My solution was to change the attribute "__unused__" to
"__used__" for the relevant data structures. At least for us the sysctl
interface then worked again.

Can you try ot the patch here:

http://www.rtems.com/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=RTEMS&pr=1119&return_url=http%3A%2F%2Fwww.rtems.com%2Fcgi-bin%2Fgnatsweb.pl%3Fdatabase%3DRTEMS%3Bdebug%3D%3BCategory%3Dany%3BConfidential%3Dany%3BSeverity%3Dany%3BPriority%3Dany%3BResponsible%3Dany%3BState%3Dany%3Bignoreclosed%3DIgnore%2520Closed%3BClass%3Dany%3BSubmitter-Id%3Dany%3Boriginatedbyme%3DOriginated%2520by%2520You%3BSynopsis%3Dsysctl%3Bmultitext%3D%3Bcolumns%3DNotify-List%3Bcolumns%3DCategory%3Bcolumns%3DSynopsis%3Bcolumns%3DConfidential%3Bcolumns%3DSeverity%3Bcolumns%3DPriority%3Bcolumns%3DResponsible%3Bcolumns%3DState%3Bcolumns%3DClass%3Bcolumns%3DSubmitter-Id%3Bcolumns%3DArrival-Date%3Bcolumns%3DClosed-Date%3Bcolumns%3DLast-Modified%3Bcolumns%3DOriginator%3Bcolumns%3DRelease%3Bsortby%3DNumber%3Bdisplaydate%3DCurrent%2520Date%3Bcmd%3Dsubmit%2520query

wkr,
Thomas.

Steven Johnson schrieb:
> Please see attached patch against rtems 4.6.99.3.
> 
> It appeared to us that when building rtems, the network sysctl's were
> being excluded by either the compiler or linker such that after the
> program was being built they were invisible. (This is with GCC 4.1, and
> latest binutils, etc)
> 
> We had to remove the static declarations in __MAKE_SET and SYSCTL_OID,
> to force them to be public, so the compiler/linker wouldn't make
> incorrect assumptions about them being referenced or not.  We noticed
> that in kern_sysctl.c there is an rtems change of
> 
> #if defined(__rtems__)
> void
> #else
> static void
> #endif
> sysctl_register_all(void *arg)
> 
> So we made our patch reflect this.
> 
> The only other change we made, which isn't reflected by the diff,
> because it is part of our code and not the rtems code case was:
> 
> *(set_sysctl_*);
> line in the link script changed to be
> KEEP(*(set_sysctl_*))
> 
> This may effect the standard BSP's, but I don't use or build those, so
> it wasn't possible for me to test that it was necessary for the standard
> BSP's.
> 
> Also, I asked this before, but I don't remember getting a reply,  is it
> possible to get "sysctlbyname" added as a standard network stack
> function in rtems for 4.7?  The wiki mentions the function.  Its useful
> for editing these types of sysctl values and isn't much code.  I know
> its not currently an impediment to anyone because they can just include
> the routine in their own code like I did, but it does seem like a useful
> thin to have available as standard, without having to go to the wiki,
> and add the code to your own project.  Just asking, it isn't an
> impediment to me either way. 
> 
> Steven J
> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> diff -Naur rtems-4.6.99.3/cpukit/libnetworking/sys/linker_set.h rtems-4.6.99.3-sysctl-non-static-fix/cpukit/libnetworking/sys/linker_set.h
> --- rtems-4.6.99.3/cpukit/libnetworking/sys/linker_set.h	2003-03-19 06:42:51.000000000 +1000
> +++ rtems-4.6.99.3-sysctl-non-static-fix/cpukit/libnetworking/sys/linker_set.h	2006-07-24 16:08:29.621286581 +1000
> @@ -40,9 +40,15 @@
>   * Private macros, not to be used outside this header file.
>   */
>  #ifdef __GNUC__
> +#if defined(__rtems__)
> +#define __MAKE_SET(set, sym)						\
> +	void const * const __set_##set##_sym_##sym 		\
> +	__attribute((section("set_" #set))) __unused = &sym
> +#else
>  #define __MAKE_SET(set, sym)						\
>  	static void const * const __set_##set##_sym_##sym 		\
>  	__attribute((section("set_" #set))) __unused = &sym
> +#endif	
>  #else /* !__GNUC__ */
>  #ifndef lint
>  #error "This file needs to be compiled by GCC or lint"
> diff -Naur rtems-4.6.99.3/cpukit/libnetworking/sys/sysctl.h rtems-4.6.99.3-sysctl-non-static-fix/cpukit/libnetworking/sys/sysctl.h
> --- rtems-4.6.99.3/cpukit/libnetworking/sys/sysctl.h	2005-02-22 02:24:43.000000000 +1000
> +++ rtems-4.6.99.3-sysctl-non-static-fix/cpukit/libnetworking/sys/sysctl.h	2006-07-24 16:09:53.351392686 +1000
> @@ -200,11 +200,19 @@
>  	sysctl_##parent##_##name##_children
>  
>  /* This constructs a "raw" MIB oid. */
> +#if defined(__rtems__)
> +#define SYSCTL_OID(parent, nbr, name, kind, a1, a2, handler, fmt, descr) \
> +	struct sysctl_oid sysctl__##parent##_##name = {		 \
> +		&sysctl_##parent##_children, { 0 },			 \
> +		nbr, kind, a1, a2, #name, handler, fmt, 0, descr };	 \
> +	DATA_SET(sysctl_set, sysctl__##parent##_##name)
> +#else
>  #define SYSCTL_OID(parent, nbr, name, kind, a1, a2, handler, fmt, descr) \
>  	static struct sysctl_oid sysctl__##parent##_##name = {		 \
>  		&sysctl_##parent##_children, { 0 },			 \
>  		nbr, kind, a1, a2, #name, handler, fmt, 0, descr };	 \
>  	DATA_SET(sysctl_set, sysctl__##parent##_##name)
> +#endif
>  
>  #define SYSCTL_ADD_OID(ctx, parent, nbr, name, kind, a1, a2, handler, fmt, descr) \
>  	sysctl_add_oid(ctx, parent, nbr, name, kind, a1, a2, handler, fmt, descr)


- --
- --------------------------------------------
IMD Ingenieurbuero fuer Microcomputertechnik
Thomas Doerfler           Herbststrasse 8
D-82178 Puchheim          Germany
email:    Thomas.Doerfler at imd-systems.de
PGP public key available at:
     http://www.imd-systems.de/pgpkey_en.html
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFE7sRgwHyg4bDtfjQRAnoKAJwIKyhb06zC/0NWEc6zVqyxmQR/WwCgjDSh
SUaXBPSsUNXp7NU+udb7oOg=
=/jHB
-----END PGP SIGNATURE-----



More information about the users mailing list