/* greater than operation */ int gtTime(TimeInternal *x, TimeInternal *y) { TimeInternal r; subTime(&r, x, y); return !isTimeInternalNegative(&r); }
int snprint_TimeInternal(char *s, int max_len, const TimeInternal * p) { int len = 0; if (isTimeInternalNegative(p)) len += snprintf(&s[len], max_len - len, "-"); len += snprintf(&s[len], max_len - len, "%d.%09d", abs(p->seconds), abs(p->nanoseconds)); return len; }
/*Check if data has been received*/ int netSelect(TimeInternal * timeout, NetPath * netPath, fd_set *readfds) { int ret, nfds; struct timeval tv, *tv_ptr; #if defined PTPD_SNMP extern RunTimeOpts rtOpts; struct timeval snmp_timer_wait = { 0, 0}; // initialise to avoid unused warnings when SNMP disabled int snmpblock = 0; #endif if (timeout) { if(isTimeInternalNegative(timeout)) { ERROR("Negative timeout attempted for select()\n"); return -1; } tv.tv_sec = timeout->seconds; tv.tv_usec = timeout->nanoseconds / 1000; tv_ptr = &tv; } else { tv_ptr = NULL; } FD_ZERO(readfds); nfds = 0; #ifdef PTPD_PCAP if (netPath->pcapEventSock >= 0) { FD_SET(netPath->pcapEventSock, readfds); if (netPath->pcapGeneralSock >= 0) FD_SET(netPath->pcapGeneralSock, readfds); nfds = netPath->pcapEventSock; if (netPath->pcapEventSock < netPath->pcapGeneralSock) nfds = netPath->pcapGeneralSock; } else if (netPath->eventSock >= 0) { #endif FD_SET(netPath->eventSock, readfds); if (netPath->generalSock >= 0) FD_SET(netPath->generalSock, readfds); nfds = netPath->eventSock; if (netPath->eventSock < netPath->generalSock) nfds = netPath->generalSock; #ifdef PTPD_PCAP } #endif nfds++; #if defined PTPD_SNMP if (rtOpts.snmp_enabled) { snmpblock = 1; if (tv_ptr) { snmpblock = 0; memcpy(&snmp_timer_wait, tv_ptr, sizeof(struct timeval)); } snmp_select_info(&nfds, readfds, &snmp_timer_wait, &snmpblock); if (snmpblock == 0) tv_ptr = &snmp_timer_wait; } #endif ret = select(nfds, readfds, 0, 0, tv_ptr); if (ret < 0) { if (errno == EAGAIN || errno == EINTR) return 0; } #if defined PTPD_SNMP if (rtOpts.snmp_enabled) { /* Maybe we have received SNMP related data */ if (ret > 0) { snmp_read(readfds); } else if (ret == 0) { snmp_timeout(); run_alarms(); } netsnmp_check_outstanding_agent_requests(); } #endif return ret; }