1*c9945492SAndroid Build Coastguard Worker #pragma once 2*c9945492SAndroid Build Coastguard Worker 3*c9945492SAndroid Build Coastguard Worker #include <features.h> 4*c9945492SAndroid Build Coastguard Worker #include <stdint.h> 5*c9945492SAndroid Build Coastguard Worker #include <sys/types.h> 6*c9945492SAndroid Build Coastguard Worker 7*c9945492SAndroid Build Coastguard Worker #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 8*c9945492SAndroid Build Coastguard Worker 9*c9945492SAndroid Build Coastguard Worker struct tcphdr { 10*c9945492SAndroid Build Coastguard Worker #ifdef _GNU_SOURCE 11*c9945492SAndroid Build Coastguard Worker #ifdef __GNUC__ 12*c9945492SAndroid Build Coastguard Worker __extension__ 13*c9945492SAndroid Build Coastguard Worker #endif 14*c9945492SAndroid Build Coastguard Worker union { struct { 15*c9945492SAndroid Build Coastguard Worker 16*c9945492SAndroid Build Coastguard Worker uint16_t source; 17*c9945492SAndroid Build Coastguard Worker uint16_t dest; 18*c9945492SAndroid Build Coastguard Worker uint32_t seq; 19*c9945492SAndroid Build Coastguard Worker uint32_t ack_seq; 20*c9945492SAndroid Build Coastguard Worker #if __BYTE_ORDER == __LITTLE_ENDIAN 21*c9945492SAndroid Build Coastguard Worker uint16_t res1:4; 22*c9945492SAndroid Build Coastguard Worker uint16_t doff:4; 23*c9945492SAndroid Build Coastguard Worker uint16_t fin:1; 24*c9945492SAndroid Build Coastguard Worker uint16_t syn:1; 25*c9945492SAndroid Build Coastguard Worker uint16_t rst:1; 26*c9945492SAndroid Build Coastguard Worker uint16_t psh:1; 27*c9945492SAndroid Build Coastguard Worker uint16_t ack:1; 28*c9945492SAndroid Build Coastguard Worker uint16_t urg:1; 29*c9945492SAndroid Build Coastguard Worker uint16_t res2:2; 30*c9945492SAndroid Build Coastguard Worker #else 31*c9945492SAndroid Build Coastguard Worker uint16_t doff:4; 32*c9945492SAndroid Build Coastguard Worker uint16_t res1:4; 33*c9945492SAndroid Build Coastguard Worker uint16_t res2:2; 34*c9945492SAndroid Build Coastguard Worker uint16_t urg:1; 35*c9945492SAndroid Build Coastguard Worker uint16_t ack:1; 36*c9945492SAndroid Build Coastguard Worker uint16_t psh:1; 37*c9945492SAndroid Build Coastguard Worker uint16_t rst:1; 38*c9945492SAndroid Build Coastguard Worker uint16_t syn:1; 39*c9945492SAndroid Build Coastguard Worker uint16_t fin:1; 40*c9945492SAndroid Build Coastguard Worker #endif 41*c9945492SAndroid Build Coastguard Worker uint16_t window; 42*c9945492SAndroid Build Coastguard Worker uint16_t check; 43*c9945492SAndroid Build Coastguard Worker uint16_t urg_ptr; 44*c9945492SAndroid Build Coastguard Worker 45*c9945492SAndroid Build Coastguard Worker }; struct { 46*c9945492SAndroid Build Coastguard Worker #endif 47*c9945492SAndroid Build Coastguard Worker 48*c9945492SAndroid Build Coastguard Worker uint16_t th_sport; 49*c9945492SAndroid Build Coastguard Worker uint16_t th_dport; 50*c9945492SAndroid Build Coastguard Worker uint32_t th_seq; 51*c9945492SAndroid Build Coastguard Worker uint32_t th_ack; 52*c9945492SAndroid Build Coastguard Worker #if __BYTE_ORDER == __LITTLE_ENDIAN 53*c9945492SAndroid Build Coastguard Worker uint8_t th_x2:4; 54*c9945492SAndroid Build Coastguard Worker uint8_t th_off:4; 55*c9945492SAndroid Build Coastguard Worker #else 56*c9945492SAndroid Build Coastguard Worker uint8_t th_off:4; 57*c9945492SAndroid Build Coastguard Worker uint8_t th_x2:4; 58*c9945492SAndroid Build Coastguard Worker #endif 59*c9945492SAndroid Build Coastguard Worker uint8_t th_flags; 60*c9945492SAndroid Build Coastguard Worker uint16_t th_win; 61*c9945492SAndroid Build Coastguard Worker uint16_t th_sum; 62*c9945492SAndroid Build Coastguard Worker uint16_t th_urp; 63*c9945492SAndroid Build Coastguard Worker 64*c9945492SAndroid Build Coastguard Worker #ifdef _GNU_SOURCE 65*c9945492SAndroid Build Coastguard Worker }; }; 66*c9945492SAndroid Build Coastguard Worker #endif 67*c9945492SAndroid Build Coastguard Worker }; 68*c9945492SAndroid Build Coastguard Worker 69*c9945492SAndroid Build Coastguard Worker #endif 70