Re: Packing netgraph structs
From: Ruslan Ermilov (ru_at_FreeBSD.org)
Date: 07/01/04
- Previous message: Anil Madhavapeddy: "Re: Packing netgraph structs"
- In reply to: Anil Madhavapeddy: "Re: Packing netgraph structs"
- Next in thread: Anil Madhavapeddy: "Re: Packing netgraph structs"
- Reply: Anil Madhavapeddy: "Re: Packing netgraph structs"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Thu, 1 Jul 2004 17:10:56 +0300 To: Anil Madhavapeddy <anil@recoil.org>
On Thu, Jul 01, 2004 at 02:00:06PM +0100, Anil Madhavapeddy wrote:
> On 1 Jul 2004, at 13:48, Roman Kurakin wrote:
> >
> >If this is a problem why can't you make some wrapper that will
> >pack/unpack written on C,
> >which will be a lib for you?
>
> Because I want to minimise the size of the foreign bindings - this
> would require C code for every single Netgraph struct. If they were
> packed, I could just do it all in OCaml.
>
> Isn't this a problem for other language bindings as well, or is
> everyone doing Netgraph userland hacking in C at the moment?
>
We use Netgraph from within Python, using the netgraph(3) library,
and we pack/unpack various Netgraph related structs just happily.
Speaking of "struct ng_mesg", if you pack it, it will essentially
stay the same, because I believe it was created with this in mind,
as well as most if not all other user-accessible Netgraph structs.
/* A netgraph message */
struct ng_mesg {
struct ng_msghdr {
u_char version; /* must == NG_VERSION */
u_char spare; /* pad to 2 bytes */
u_int16_t arglen; /* length of data */
u_int32_t flags; /* message status */
u_int32_t token; /* match with reply */
u_int32_t typecookie; /* node's type cookie */
u_int32_t cmd; /* command identifier */
u_char cmdstr[NG_CMDSTRLEN+1]; /* cmd string + \0 */
} header;
char data[0]; /* placeholder for actual data */
};
: $ cat a.c
: #include <sys/types.h>
: #include <netgraph/ng_message.h>
: #include <stdio.h>
:
: int
: main(void)
: {
:
: printf("%d %d\n", sizeof(struct ng_mesg),
: 2 + sizeof(u_int16_t) + sizeof(u_int32_t) * 4 + (NG_CMDSTRLEN + 1));
: return (0);
: }
: $ make a
: cc -O -pipe a.c -o a
: $ ./a
: 36 36
Cheers,
-- Ruslan Ermilov ru@FreeBSD.org FreeBSD committer
- application/pgp-signature attachment: stored
- Previous message: Anil Madhavapeddy: "Re: Packing netgraph structs"
- In reply to: Anil Madhavapeddy: "Re: Packing netgraph structs"
- Next in thread: Anil Madhavapeddy: "Re: Packing netgraph structs"
- Reply: Anil Madhavapeddy: "Re: Packing netgraph structs"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]