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