On Friday, June 27, 2014 5:14:59 am Luigi Rizzo wrote: > Hi, > I have frequently found myself using sysctls to control some kernel > feature where a string would be a better (and sometimes the only) > option than using a numeric value, yet the internal representation > should be numeric for speed and robustness. > Examples are the kern.timecounter, the default scheduler in dummynet, > and now in netmap the selection between native and emulated mode. > I am sure many of you can come up with other cases. > > I wonder if we have some support for that already in the sysctl code, > or i should build a generic one next time i need to do that. > > Feel free to criticise the approach and suggest better ones. > Right now i am using sysctls because i have a set of macros > and wrapper functions that let me convert them to sysfs > entries when building kernel code on linux, so I have a > portable solutions. > > For the details, I'd like to have a mechanism that requires the > kernel programmer supply a (possibly extensible) table of > supported values, and matching constants to be used within > the kernel. A single declaration should generate entries > to get/set the current value as well as list options. > We can discuss frills (such as wildcards, multiple values,etc). I am not aware of such a beast. Even just supporting a simple table to map labels to indices would be nice and would handle many cases. I.e. if you had something like: struct sysctl_table vals[] = { "foo", (void *)1, "bar", (void *)2, NULL, NULL }; static int myval; static int my_sysctl(SYSCTL_HANDLER_ARGS) { void *val; int error; val = (void *)myval; error = sysctl_handle_table(oidp, vals, &val, req); if (error || req->newptr == NULL) return (error); myval = (intptr_t)val; return (0); } sysctl_handle_table() would use the initial value to find a suitable string from the table for the "old" string, etc. Using void * for the value would let you store arbitrary data, etc. -- John BaldwinReceived on Fri Jun 27 2014 - 13:51:36 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:50 UTC