Em Sun, Aug 07, 2005 at 08:58:34AM +0200, Harald Welte escreveu:
> On Sat, Aug 06, 2005 at 06:34:40PM -0300, Arnaldo Carvalho de Melo wrote:
> > On 8/6/05, Harald Welte <[EMAIL PROTECTED]> wrote:
> > > Hi Arnaldo!
> > >
> > > The protocol header files in <linux/foo.h> are usually structured in a
> > > way to be included by userspace code. The top section consists of
> > > general protocol structure definitions, typedefs, enums - followed by an
> > > #ifdef __KERNEL__ section.
> > >
> > > Currently <linux/dccp.h> doesn't follow that convention and can
> > > therefore not be used from userspace. However, e.g. iptables'
> > > libipt_dccp.c actually needs various definitions.
> > >
> > > Below is a proposed patch to clean up dccp.h. Please review and
> > > consider applying it. Thanks!
> > >
> > > [the iptables ipt_dccp patch applies cleanly on top of this - but not
> > > the other way around]
> >
> > OK, I'm applying both patches, just had to add an include for linux/in.h
> > that
> > was missing, thanks!
>
> you cannot include linux/in.h from the top of the file, I think I tried
> that and ran into problems (the definitions collide with glibc
> definitions e.g. of sockaddr_in, etc.)
>
> So if possible, move that include down to the __KERNEL__ section. At
> least this way iptables libipt_dccp.c compiles.
Oh my, OK, I should be more careful about making sure kernel headers are
usable by userland programs ;-\ Nah, I'll fix that properly by just not
including linux/in.h at all and fixing sockaddr_dccp, take a look:
diff --git a/include/linux/dccp.h b/include/linux/dccp.h
--- a/include/linux/dccp.h
+++ b/include/linux/dccp.h
@@ -1,14 +1,17 @@
#ifndef _LINUX_DCCP_H
#define _LINUX_DCCP_H
-#include <linux/in.h>
#include <linux/types.h>
#include <asm/byteorder.h>
-/* FIXME: this is utterly wrong */
+/* Structure describing an Internet (DCCP) socket address. */
struct sockaddr_dccp {
- struct sockaddr_in in;
- unsigned int service;
+ sa_family_t sdccp_family; /* Address family */
+ unsigned short int sdccp_port; /* Port number */
+ struct in_addr sdccp_addr; /* Internet address */
+ unsigned int sdccp_service; /* Service */
+ /* Pad to size of `struct sockaddr': 16 bytes . */
+ unsignd int sdccp_pad;
};
/**
Better? :-)
- Arnaldo
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html