void catch_close(int sig) { char *s=NULL; ptpdShutdown(); /* zhenwei switch(sig) { case SIGINT: s = "interrupt"; break; case SIGTERM: s = "terminate"; break; case SIGHUP: s = "hangup"; break; default: s = "?"; } */ NOTIFY("shutdown on %s signal\n", s); exit(0); }
void catch_close(int sig) { char *s; ptpdShutdown(); switch(sig) { case SIGINT: s = "interrupt"; break; case SIGTERM: s = "terminate"; break; case SIGHUP: s = "hangup"; break; default: s = "?"; } exit(0); }
int main(int argc, char **argv) { PtpPortDS *ptpPortDS; PtpClockDS ptpClockDS; Integer16 ret; /* start netif */ if( !netStartup()) return -1; /*Initialize run time options with command line arguments*/ if( !(ptpPortDS = ptpdStartup(argc, argv, &ret, &rtOpts, &ptpClockDS)) ) return ret; ptpd_init_exports();//from Tomeks' /* initialize data sets common to entire boundary clock*/ initDataClock(&rtOpts, &ptpClockDS); /* show the options you are starting with*/ displayConfigINFO(&rtOpts); /* do the protocol engine */ if(rtOpts.portNumber > 0) multiProtocol(&rtOpts, ptpPortDS); //forever loop for any number of ports else ptpdShutdown(); return 1; }
/* * exit the program cleanly */ void do_signal_close(PtpClock * ptpClock) { ptpdShutdown(ptpClock); NOTIFY("Shutdown on close signal\n"); exit(0); }
int main(int argc, char **argv) { PtpClock *ptpClock; Integer16 ret; /* initialize run-time options to reasonable values */ rtOpts.syncInterval = DEFAULT_SYNC_INTERVAL; memcpy(rtOpts.subdomainName, DEFAULT_PTP_DOMAIN_NAME, PTP_SUBDOMAIN_NAME_LENGTH); memcpy(rtOpts.clockIdentifier, IDENTIFIER_DFLT, PTP_CODE_STRING_LENGTH); rtOpts.clockVariance = DEFAULT_CLOCK_VARIANCE; rtOpts.clockStratum = DEFAULT_CLOCK_STRATUM; rtOpts.unicastAddress[0] = 0; rtOpts.inboundLatency.nanoseconds = DEFAULT_INBOUND_LATENCY; rtOpts.outboundLatency.nanoseconds = DEFAULT_OUTBOUND_LATENCY; rtOpts.noResetClock = DEFAULT_NO_RESET_CLOCK; rtOpts.s = DEFAULT_DELAY_S; rtOpts.ap = DEFAULT_AP; rtOpts.ai = DEFAULT_AI; rtOpts.max_foreign_records = DEFAULT_MAX_FOREIGN_RECORDS; rtOpts.currentUtcOffset = DEFAULT_UTC_OFFSET; rtOpts.logFd = -1; rtOpts.recordFP = NULL; rtOpts.useSysLog = FALSE; rtOpts.ttl = 1; if (!(ptpClock = ptpdStartup(argc, argv, &ret, &rtOpts))) return ret; if (rtOpts.probe) { probe(&rtOpts, ptpClock); } else { /* do the protocol engine */ protocol(&rtOpts, ptpClock); } ptpdShutdown(); NOTIFY("self shutdown, probably due to an error\n"); return 1; }
void probe(PtpClock *ptpClock) { UInteger16 i; UInteger16 length; TimeInternal interval, now, finish; /* check */ if(ptpClock->runTimeOpts.probe_management_key == PTP_MM_UPDATE_DEFAULT_DATA_SET || ptpClock->runTimeOpts.probe_management_key == PTP_MM_UPDATE_GLOBAL_TIME_PROPERTIES || ptpClock->runTimeOpts.probe_management_key == PTP_MM_SET_SYNC_INTERVAL) { ERROR("send not supported for that management message\n"); return; } /* init */ if(!netInit(ptpClock)) { ERROR("failed to initialize network\n"); return; } initData(ptpClock); msgPackHeader(ptpClock->msgObuf, ptpClock); memset(&ptpClock->msgTmp.manage, 0, sizeof(MsgManagement)); ptpClock->msgTmp.manage.targetCommunicationTechnology = PTP_DEFAULT; /* send */ for(i = 0; i < KEY_ARRAY_LEN; ++i) { if(ptpClock->runTimeOpts.probe_management_key > 0) { ptpClock->msgTmp.manage.managementMessageKey = ptpClock->runTimeOpts.probe_management_key; ptpClock->msgTmp.manage.recordKey = ptpClock->runTimeOpts.probe_record_key; } else ptpClock->msgTmp.manage.managementMessageKey = management_key_array[i]; if(!(length = msgPackManagement(ptpClock->msgObuf, &ptpClock->msgTmp.manage, ptpClock))) { ERROR("failed to pack management message\n"); return; } printf("\n(sending managementMessageKey %hhu)\n", ptpClock->msgTmp.manage.managementMessageKey); if(!netSendGeneral(ptpClock->msgObuf, length, ptpClock)) { ERROR("failed to send message\n"); return; } if(ptpClock->runTimeOpts.probe_management_key > 0) break; } timerNow(&finish); finish.seconds += PTP_SYNC_INTERVAL_TIMEOUT(ptpClock->sync_interval); for(;;) { interval.seconds = PTP_SYNC_INTERVAL_TIMEOUT(ptpClock->sync_interval); interval.nanoseconds = 0; netSelect(&interval, ptpClock); netRecvEvent(ptpClock->msgIbuf, NULL, ptpClock); if(netRecvGeneral(ptpClock->msgIbuf, ptpClock)) { msgUnpackHeader(ptpClock->msgIbuf, &ptpClock->msgTmpHeader); if(ptpClock->msgTmpHeader.control == PTP_MANAGEMENT_MESSAGE) { msgUnpackManagement(ptpClock->msgIbuf, &ptpClock->msgTmp.manage); msgUnpackManagementPayload(ptpClock->msgIbuf, &ptpClock->msgTmp.manage); displayManagement(&ptpClock->msgTmpHeader, &ptpClock->msgTmp.manage); } fflush(stdout); } timerNow(&now); if( now.seconds > finish.seconds || (now.seconds == finish.seconds && now.nanoseconds > finish.nanoseconds) ) break; } /* done */ printf("\n"); ptpdShutdown(); exit(0); }