1411677aeSAaron LI /* 2411677aeSAaron LI * Copyright (c) 2015 The TCPDUMP project 3411677aeSAaron LI * All rights reserved. 4411677aeSAaron LI * 5411677aeSAaron LI * Redistribution and use in source and binary forms, with or without 6411677aeSAaron LI * modification, are permitted provided that the following conditions 7411677aeSAaron LI * are met: 8411677aeSAaron LI * 1. Redistributions of source code must retain the above copyright 9411677aeSAaron LI * notice, this list of conditions and the following disclaimer. 10411677aeSAaron LI * 2. Redistributions in binary form must reproduce the above copyright 11411677aeSAaron LI * notice, this list of conditions and the following disclaimer in the 12411677aeSAaron LI * documentation and/or other materials provided with the distribution. 13411677aeSAaron LI * 14411677aeSAaron LI * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 15411677aeSAaron LI * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 16411677aeSAaron LI * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 17411677aeSAaron LI * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 18411677aeSAaron LI * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 19411677aeSAaron LI * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 20411677aeSAaron LI * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21411677aeSAaron LI * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 22411677aeSAaron LI * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23411677aeSAaron LI * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 24411677aeSAaron LI * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25411677aeSAaron LI * POSSIBILITY OF SUCH DAMAGE. 26411677aeSAaron LI */ 27411677aeSAaron LI 28411677aeSAaron LI #ifndef netdissect_timeval_operations_h 29411677aeSAaron LI #define netdissect_timeval_operations_h 30411677aeSAaron LI 31411677aeSAaron LI /* Operations on timevals. */ 32411677aeSAaron LI 33*ed775ee7SAntonio Huete Jimenez #define ND_MICRO_PER_SEC 1000000 34*ed775ee7SAntonio Huete Jimenez #define ND_NANO_PER_SEC 1000000000 35411677aeSAaron LI 36411677aeSAaron LI #define netdissect_timevalclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0) 37411677aeSAaron LI 38411677aeSAaron LI #define netdissect_timevalisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) 39411677aeSAaron LI 40411677aeSAaron LI #define netdissect_timevalcmp(tvp, uvp, cmp) \ 41411677aeSAaron LI (((tvp)->tv_sec == (uvp)->tv_sec) ? \ 42411677aeSAaron LI ((tvp)->tv_usec cmp (uvp)->tv_usec) : \ 43411677aeSAaron LI ((tvp)->tv_sec cmp (uvp)->tv_sec)) 44411677aeSAaron LI 45411677aeSAaron LI #define netdissect_timevaladd(tvp, uvp, vvp, nano_prec) \ 46411677aeSAaron LI do { \ 47411677aeSAaron LI (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \ 48411677aeSAaron LI (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \ 49411677aeSAaron LI if (nano_prec) { \ 50*ed775ee7SAntonio Huete Jimenez if ((vvp)->tv_usec >= ND_NANO_PER_SEC) { \ 51411677aeSAaron LI (vvp)->tv_sec++; \ 52*ed775ee7SAntonio Huete Jimenez (vvp)->tv_usec -= ND_NANO_PER_SEC; \ 53411677aeSAaron LI } \ 54411677aeSAaron LI } else { \ 55*ed775ee7SAntonio Huete Jimenez if ((vvp)->tv_usec >= ND_MICRO_PER_SEC) { \ 56411677aeSAaron LI (vvp)->tv_sec++; \ 57*ed775ee7SAntonio Huete Jimenez (vvp)->tv_usec -= ND_MICRO_PER_SEC; \ 58411677aeSAaron LI } \ 59411677aeSAaron LI } \ 60411677aeSAaron LI } while (0) 61411677aeSAaron LI 62411677aeSAaron LI #define netdissect_timevalsub(tvp, uvp, vvp, nano_prec) \ 63411677aeSAaron LI do { \ 64411677aeSAaron LI (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \ 65411677aeSAaron LI (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \ 66411677aeSAaron LI if ((vvp)->tv_usec < 0) { \ 67411677aeSAaron LI (vvp)->tv_sec--; \ 68*ed775ee7SAntonio Huete Jimenez (vvp)->tv_usec += (nano_prec ? ND_NANO_PER_SEC : \ 69*ed775ee7SAntonio Huete Jimenez ND_MICRO_PER_SEC); \ 70411677aeSAaron LI } \ 71411677aeSAaron LI } while (0) 72411677aeSAaron LI 73411677aeSAaron LI #endif /* netdissect_timeval_operations_h */ 74