.. | .. |
---|
19 | 19 | #ifndef _LINUX_SOCKIOS_H |
---|
20 | 20 | #define _LINUX_SOCKIOS_H |
---|
21 | 21 | |
---|
| 22 | +#include <asm/bitsperlong.h> |
---|
22 | 23 | #include <asm/sockios.h> |
---|
23 | 24 | |
---|
24 | 25 | /* Linux-specific socket ioctls */ |
---|
.. | .. |
---|
27 | 28 | |
---|
28 | 29 | #define SOCK_IOC_TYPE 0x89 |
---|
29 | 30 | |
---|
| 31 | +/* |
---|
| 32 | + * the timeval/timespec data structure layout is defined by libc, |
---|
| 33 | + * so we need to cover both possible versions on 32-bit. |
---|
| 34 | + */ |
---|
| 35 | +/* Get stamp (timeval) */ |
---|
| 36 | +#define SIOCGSTAMP_NEW _IOR(SOCK_IOC_TYPE, 0x06, long long[2]) |
---|
| 37 | +/* Get stamp (timespec) */ |
---|
| 38 | +#define SIOCGSTAMPNS_NEW _IOR(SOCK_IOC_TYPE, 0x07, long long[2]) |
---|
| 39 | + |
---|
| 40 | +#if __BITS_PER_LONG == 64 || (defined(__x86_64__) && defined(__ILP32__)) |
---|
| 41 | +/* on 64-bit and x32, avoid the ?: operator */ |
---|
| 42 | +#define SIOCGSTAMP SIOCGSTAMP_OLD |
---|
| 43 | +#define SIOCGSTAMPNS SIOCGSTAMPNS_OLD |
---|
| 44 | +#else |
---|
| 45 | +#define SIOCGSTAMP ((sizeof(struct timeval)) == 8 ? \ |
---|
| 46 | + SIOCGSTAMP_OLD : SIOCGSTAMP_NEW) |
---|
| 47 | +#define SIOCGSTAMPNS ((sizeof(struct timespec)) == 8 ? \ |
---|
| 48 | + SIOCGSTAMPNS_OLD : SIOCGSTAMPNS_NEW) |
---|
| 49 | +#endif |
---|
| 50 | + |
---|
30 | 51 | /* Routing table calls. */ |
---|
31 | 52 | #define SIOCADDRT 0x890B /* add routing table entry */ |
---|
32 | 53 | #define SIOCDELRT 0x890C /* delete routing table entry */ |
---|