Changeset 1aa4bf7 for lib/trace.c
- Timestamp:
- 04/03/09 14:22:52 (12 years ago)
- Branches:
- 4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, getfragoff, help, libtrace4, master, ndag_format, pfring, rc-4.0.1, rc-4.0.2, rc-4.0.3, rc-4.0.4, ringdecrementfix, ringperformance, ringtimestampfixes
- Children:
- 327b1df
- Parents:
- af0918a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lib/trace.c
r91b72d3 r1aa4bf7 902 902 */ 903 903 DLLEXPORT uint64_t trace_get_erf_timestamp(const libtrace_packet_t *packet) { 904 uint64_t timestamp = 0;905 double seconds = 0.0;906 struct timeval ts;907 908 904 if (packet->trace->format->get_erf_timestamp) { 909 905 /* timestamp -> timestamp */ 910 timestamp = packet->trace->format->get_erf_timestamp(packet); 906 return packet->trace->format->get_erf_timestamp(packet); 907 } else if (packet->trace->format->get_timespec) { 908 /* timespec -> timestamp */ 909 struct timespec ts; 910 ts = packet->trace->format->get_timespec(packet); 911 return ((((uint64_t)ts.tv_sec) << 32) + 912 (((uint64_t)ts.tv_nsec << 32)/1000000000)); 911 913 } else if (packet->trace->format->get_timeval) { 912 914 /* timeval -> timestamp */ 913 ts = packet->trace->format->get_timeval(packet); 914 timestamp = ((((uint64_t)ts.tv_sec) << 32) + 915 (((uint64_t)ts.tv_usec << 32)/1000000)); 915 struct timeval tv; 916 tv = packet->trace->format->get_timeval(packet); 917 return ((((uint64_t)tv.tv_sec) << 32) + 918 (((uint64_t)tv.tv_usec << 32)/1000000)); 916 919 } else if (packet->trace->format->get_seconds) { 917 920 /* seconds -> timestamp */ 918 seconds = packet->trace->format->get_seconds(packet);919 timestamp =(((uint64_t)seconds)<<32)921 double seconds = packet->trace->format->get_seconds(packet); 922 return (((uint64_t)seconds)<<32) 920 923 + (uint64_t)((seconds-(uint64_t)seconds)*UINT_MAX); 924 } 925 else { 926 return (uint64_t)0; 927 } 921 928 922 }923 return timestamp;924 929 } 925 930 … … 934 939 struct timeval tv; 935 940 uint64_t ts = 0; 936 double seconds = 0.0;937 941 if (packet->trace->format->get_timeval) { 938 942 /* timeval -> timeval */ … … 953 957 tv.tv_sec += 1; 954 958 } 959 } else if (packet->trace->format->get_timespec) { 960 struct timespec ts = packet->trace->format->get_timespec(packet); 961 tv.tv_sec = ts.tv_sec; 962 tv.tv_usec = ts.tv_nsec/1000; 955 963 } else if (packet->trace->format->get_seconds) { 956 964 /* seconds -> timeval */ 957 seconds = packet->trace->format->get_seconds(packet);965 double seconds = packet->trace->format->get_seconds(packet); 958 966 tv.tv_sec = (uint32_t)seconds; 959 967 tv.tv_usec = (uint32_t)(((seconds - tv.tv_sec) * 1000000)/UINT_MAX); … … 966 974 return tv; 967 975 } 976 977 DLLEXPORT struct timespec trace_get_timespec(const libtrace_packet_t *packet) { 978 struct timespec ts; 979 980 if (packet->trace->format->get_timespec) { 981 return packet->trace->format->get_timespec(packet); 982 } else if (packet->trace->format->get_erf_timestamp) { 983 /* timestamp -> timeval */ 984 uint64_t erfts = packet->trace->format->get_erf_timestamp(packet); 985 #if __BYTE_ORDER == __BIG_ENDIAN 986 ts.tv_sec = erfts & 0xFFFFFFFF; 987 #elif __BYTE_ORDER == __LITTLE_ENDIAN 988 ts.tv_sec = erfts >> 32; 989 #else 990 #error "What on earth are you running this on?" 991 #endif 992 ts.tv_nsec = ((erfts&0xFFFFFFFF)*1000000000)>>32; 993 if (ts.tv_nsec >= 1000000000) { 994 ts.tv_nsec -= 1000000000; 995 ts.tv_sec += 1; 996 } 997 return ts; 998 } else if (packet->trace->format->get_timeval) { 999 /* timeval -> timespec */ 1000 struct timeval tv = packet->trace->format->get_timeval(packet); 1001 ts.tv_sec = tv.tv_sec; 1002 ts.tv_nsec = tv.tv_usec*1000; 1003 return ts; 1004 } else if (packet->trace->format->get_seconds) { 1005 /* seconds -> timespec */ 1006 double seconds = packet->trace->format->get_seconds(packet); 1007 ts.tv_sec = (uint32_t)seconds; 1008 ts.tv_nsec = (long)(((seconds - ts.tv_sec) * 1000000000)/UINT_MAX); 1009 return ts; 1010 } 1011 else { 1012 ts.tv_sec=-1; 1013 ts.tv_nsec=-1; 1014 return ts; 1015 } 1016 } 1017 968 1018 969 1019 /* Get the current time in floating point seconds … … 974 1024 DLLEXPORT double trace_get_seconds(const libtrace_packet_t *packet) { 975 1025 double seconds = 0.0; 976 uint64_t ts = 0;977 struct timeval tv;978 1026 979 1027 if (packet->trace->format->get_seconds) { … … 982 1030 } else if (packet->trace->format->get_erf_timestamp) { 983 1031 /* timestamp -> seconds */ 1032 uint64_t ts = 0; 984 1033 ts = packet->trace->format->get_erf_timestamp(packet); 985 1034 seconds = (ts>>32) + ((ts & UINT_MAX)*1.0 / UINT_MAX); 1035 } else if (packet->trace->format->get_timespec) { 1036 /* timespec -> seconds */ 1037 struct timespec ts; 1038 ts = packet->trace->format->get_timespec(packet); 1039 seconds = ts.tv_sec + ((ts.tv_nsec * 1.0) / 1000000000); 986 1040 } else if (packet->trace->format->get_timeval) { 987 1041 /* timeval -> seconds */ 1042 struct timeval tv; 988 1043 tv = packet->trace->format->get_timeval(packet); 989 1044 seconds = tv.tv_sec + ((tv.tv_usec * 1.0) / 1000000);
Note: See TracChangeset
for help on using the changeset viewer.