| .. | .. |
|---|
| 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 */ |
|---|