Re: SL 6.7 Kernel headers misses typedef sa_family_t

2016-01-14 Thread André Hartmann

Dear Mark,

thanks for your investigation.

Indeed, I had included linux/can.h before sys/socket.h (which includes 
bits/sockaddr.h, and should *not* be included directly) so the compiler 
struggled.


After swapping the include lines, and including sys/socket.h before 
linux/can.h, it compiles fine.


So again, many thanks!

Best regards,
André


Am 14.01.2016 um 15:33 schrieb Mark Stodola:

On 01/14/2016 04:06 AM, André Hartmann wrote:

Hello List,

I have written a program which uses SocketCAN for CAN communication.
The development takes place under Ubuntu Linux and compilation is fine
there (also cross-compilation for an embedded ARM Linux).

But when I compile my program under Scientific Linux 6.7, I get the
following errors:

"
In file included from socket_can/receivethread.h:6,
  from socket_can/receivethread.c:4:
/usr/include/linux/can.h:81: error: expected specifier-qualifier-list
before 'sa_family_t'
socket_can/receivethread.c: In function 'receivethread_init':
socket_can/receivethread.c:52: error: 'struct sockaddr_can' has no
member named 'can_family'
socket_can/receivethread.c:53: error: 'struct sockaddr_can' has no
member named 'can_ifindex'
"

Searching for the definition of sa_family_t gave a lot of usages,
but no definition:

$ cd /usr/include/linux
$ grep -r sa_family_t
llc.h:sa_family_t sllc_family;/* AF_LLC */
llc.h:sa_family_tsllc_arphrd;/* ARPHRD_ETHER */
llc.h:unsigned char   __pad[__LLC_SOCK_SIZE__ - sizeof(sa_family_t)
* 2 -
rose.h:sa_family_tsrose_family;
rose.h:sa_family_tsrose_family;
x25.h:sa_family_t   sx25_family;/* Must be AF_X25 */
if_pppox.h:   sa_family_t sa_family;/* address
family, AF_PPPOX */
if_pppox.h:sa_family_t sa_family;  /* address family,
AF_PPPOX */
in.h:  sa_family_tsin_family;/* Address family*/
ax25.h:sa_family_tsax25_family;
ipx.h:sa_family_tsipx_family;
netlink.h:#include  /* for sa_family_t */
netlink.h:sa_family_tnl_family;/* AF_NETLINK*/
can.h:sa_family_t can_family;
phonet.h:sa_family_t spn_family;
phonet.h:__u8 spn_zero[sizeof(struct sockaddr) - sizeof(sa_family_t)
- 3];
un.h:sa_family_t sun_family;/* AF_UNIX */
irda.h:sa_family_t sir_family;   /* AF_IRDA */
atalk.h:sa_family_t  sat_family;

If I add the typedef to socket.h, everything is fine until the next
kernel update:

typedef unsigned short sa_family_t;

The system is:

$ uname -a
Linux sl67-x64 2.6.32-573.12.1.el6.x86_64 #1 SMP Tue Dec 15 08:24:23 CST
2015 x86_64 x86_64 x86_64 GNU/Linux

Any opinion on this?

Best regards,
André


It looks like sa_family_t has been morphing over time.  In SL5, it is
indeed defined in linux/socket.h.  In SL6 I find it defined in
bits/sockaddr.h.  In SL7 it continues to be in bits/sockaddr.h, but
there is also __kernel_sa_family_t defined in linux/socket.h.

Try adding bits/sockaddr.h to your includes.

-Mark


Re: SL 6.7 Kernel headers misses typedef sa_family_t

2016-01-14 Thread Mark Stodola

On 01/14/2016 04:06 AM, André Hartmann wrote:

Hello List,

I have written a program which uses SocketCAN for CAN communication.
The development takes place under Ubuntu Linux and compilation is fine
there (also cross-compilation for an embedded ARM Linux).

But when I compile my program under Scientific Linux 6.7, I get the
following errors:

"
In file included from socket_can/receivethread.h:6,
  from socket_can/receivethread.c:4:
/usr/include/linux/can.h:81: error: expected specifier-qualifier-list
before 'sa_family_t'
socket_can/receivethread.c: In function 'receivethread_init':
socket_can/receivethread.c:52: error: 'struct sockaddr_can' has no
member named 'can_family'
socket_can/receivethread.c:53: error: 'struct sockaddr_can' has no
member named 'can_ifindex'
"

Searching for the definition of sa_family_t gave a lot of usages,
but no definition:

$ cd /usr/include/linux
$ grep -r sa_family_t
llc.h:sa_family_t sllc_family;/* AF_LLC */
llc.h:sa_family_tsllc_arphrd;/* ARPHRD_ETHER */
llc.h:unsigned char   __pad[__LLC_SOCK_SIZE__ - sizeof(sa_family_t)
* 2 -
rose.h:sa_family_tsrose_family;
rose.h:sa_family_tsrose_family;
x25.h:sa_family_t   sx25_family;/* Must be AF_X25 */
if_pppox.h:   sa_family_t sa_family;/* address
family, AF_PPPOX */
if_pppox.h:sa_family_t sa_family;  /* address family,
AF_PPPOX */
in.h:  sa_family_tsin_family;/* Address family*/
ax25.h:sa_family_tsax25_family;
ipx.h:sa_family_tsipx_family;
netlink.h:#include  /* for sa_family_t */
netlink.h:sa_family_tnl_family;/* AF_NETLINK*/
can.h:sa_family_t can_family;
phonet.h:sa_family_t spn_family;
phonet.h:__u8 spn_zero[sizeof(struct sockaddr) - sizeof(sa_family_t)
- 3];
un.h:sa_family_t sun_family;/* AF_UNIX */
irda.h:sa_family_t sir_family;   /* AF_IRDA */
atalk.h:sa_family_t  sat_family;

If I add the typedef to socket.h, everything is fine until the next
kernel update:

typedef unsigned short sa_family_t;

The system is:

$ uname -a
Linux sl67-x64 2.6.32-573.12.1.el6.x86_64 #1 SMP Tue Dec 15 08:24:23 CST
2015 x86_64 x86_64 x86_64 GNU/Linux

Any opinion on this?

Best regards,
André


It looks like sa_family_t has been morphing over time.  In SL5, it is 
indeed defined in linux/socket.h.  In SL6 I find it defined in 
bits/sockaddr.h.  In SL7 it continues to be in bits/sockaddr.h, but 
there is also __kernel_sa_family_t defined in linux/socket.h.


Try adding bits/sockaddr.h to your includes.

-Mark


Re: SL 6.7 Kernel headers misses typedef sa_family_t

2016-01-14 Thread Antonio Querubin

On Thu, 14 Jan 2016, Mark Stodola wrote:

It looks like sa_family_t has been morphing over time.  In SL5, it is indeed 
defined in linux/socket.h.  In SL6 I find it defined in bits/sockaddr.h.  In 
SL7 it continues to be in bits/sockaddr.h, but there is also 
__kernel_sa_family_t defined in linux/socket.h.


Try adding bits/sockaddr.h to your includes.


That probably should be .  From the sockaddr.h:

 * Never include this file directly; use  instead.


Antonio Querubin
e-mail:  t...@lavanauts.org
xmpp:  antonioqueru...@gmail.com