[dtrace-discuss] values from a struct

goinsane
2010-09-17T15:14:04Z

> On 09/17/10 09:34, goinsane wrote:
> > Yes, you''re right, the manpage expresses this, too.
>
> > But how to get the value? copyin returns the
> address of the scratch buffer. could this be used as
> argument of the 2nd copyin of
> fbt:sockfs:accept:return ?
> >
> > fbt:sockfs:accept:entry
> > {
> >     self->sockaddr = arg1;
> >     self->socklen  = (int*)copyin(arg2, 4);
> >  }
>
> It''s an in-out parameter.  The value at entry is just
> the _maximum_ size
> of the caller''s buffer, and not the _actual_ size of
> the returned data.
>
> > fbt:sockfs:accept:return
> > {
> >    self->sockcont = (struct
> sockaddr_in*)copyin(self->sockaddr, self->socklen);
> > }
>
> I would do this in the entry clause:
>
> 	self->sockaddr = arg1;
> 	self->socklenp = arg2;
>
> and then this in the return clause:
>
> 	self->socklen = *(int *)copyin(self->socklenp, 4);

Oh, I forgot to derefence it.  I should really refresh my knowledge of C ...

> self->sockcont = (struct sockaddr_in
> n *)copyin(self->sockaddr,
> 			self->socklen);
>
> (This assumes the application is 32-bit or at least
> that the system is
> little-endian.  Things get more complicated if you
> have to deal with
> 64-bit big-endian systems.)
>

Hm, that''s a point I had not noticed yet. I expected the D scripts
running independent from the system''s arch. But as it becomes more
complex, it seems this has to be handled, too.
Right now, I''m running at 64 bit i86pc . I''m getting a value
of the port (have to verify it), but no value of the ip address.

   self->port = self->sockcont->sin_port;
   self->ip_int = (uint_t)self->sockcont->sin_addr.s_addr;


> To be really robust, you could have multiple return
> causes -- one to get
> the return length, another to check it and fetch the
> contents, still
> another to look at the sa_family, and so on.

That''s the one I''ll try next.


Tank you very much, James!


>
> --
> James Carlson         42.703N 71.076W
>         <carlsonj at workingcode.com>
> _______________________________________
> dtrace-discuss mailing list
> dtrace-discuss at opensolaris.org