Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 21 Aug 2004 23:47:07 -0700
From:      Alfred Perlstein <alfred@freebsd.org>
To:        Poul-Henning Kamp <phk@phk.freebsd.dk>
Cc:        hackers@freebsd.org
Subject:   Re: sysctl hacks
Message-ID:  <20040822064707.GF26612@elvis.mu.org>
In-Reply-To: <46719.1093120181@critter.freebsd.dk>
References:  <20040821200205.GE26612@elvis.mu.org> <46719.1093120181@critter.freebsd.dk>

next in thread | previous in thread | raw e-mail | index | archive | help
* Poul-Henning Kamp <phk@phk.freebsd.dk> [040821 13:29] wrote:
> In message <20040821200205.GE26612@elvis.mu.org>, Alfred Perlstein writes:
> >I'm doing some work that requires that I have a sysctl structure
> >be passed around, but inside that structure are several pointers I
> >may need to dereference.
> >
> >Basically:
> >
> >struct mysysctldata {
> >   .... (data here)
> >   void *moredata;
> >   size_t morelen;
> >};
> >
> >What is the proper way of sysctl'ing IN the data from moredata?
> >
> >I need to make a copy of the sysctl req, but... I'm not sure what
> >to initialize the 'lock' member to.
> 
> Just use the SYSCTL_IN() and ..._OUT() functions.

:(

I wasn't clear.

I have a sysctl node that takes a struct like so:

struct mysysctldata {
  .... (data here)
  struct moredata * vc_ptr;
  size_t len vc_len;
}

If I use SYSCTL_IN(), then I can get "mysysctldata", but I only
get the pointer to "moredata", now I want to get a copy of 
"moredata", what's a good way to do this?

I have a macro that does this:

#define VCTLTOREQ(vc, req)						\
	do {								\
		(req)->newptr = (vc)->vc_ptr;				\
		(req)->newlen = (vc)->vc_len;				\
		(req)->newidx = 0;					\
	} while (0)

Is that right?


-- 
- Alfred Perlstein
- Research Engineering Development Inc.
- email: bright@mu.org cell: 408-480-4684



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040822064707.GF26612>