示例#1
0
文件: startup.c 项目: DomChey/ptpd
/*
 * Synchronous signal processing:
 * This function should be called regularly from the main loop
 */
void
checkSignals(RunTimeOpts * rtOpts, PtpClock * ptpClock)
{
    /*
     * note:
     * alarm signals are handled in a similar way in dep/timer.c
     */

    if(sigint_received || sigterm_received) {
        do_signal_close(ptpClock);
    }

    if(sighup_received) {
        do_signal_sighup(rtOpts, ptpClock);
        sighup_received=0;
    }

    if(sigusr1_received) {
        if(ptpClock->portState == PTP_SLAVE) {
            WARNING("SIGUSR1 received, stepping clock to current known OFM\n");
            servo_perform_clock_step(rtOpts, ptpClock);
        } else {
            ERROR("SIGUSR1 received - will not step clock, not in PTP_SLAVE state\n");
        }
        sigusr1_received = 0;
    }

    if(sigusr2_received) {
        displayCounters(ptpClock);
        if(rtOpts->timingAclEnabled) {
            INFO("\n\n");
            INFO("** Timing message ACL:\n");
            dumpIpv4AccessList(ptpClock->netPath.timingAcl);
        }
        if(rtOpts->managementAclEnabled) {
            INFO("\n\n");
            INFO("** Management message ACL:\n");
            dumpIpv4AccessList(ptpClock->netPath.managementAcl);
        }
        if(rtOpts->clearCounters) {
            clearCounters(ptpClock);
            NOTIFY("PTP engine counters cleared\n");
        }
        sigusr2_received = 0;
    }

}
示例#2
0
void Machine::performTurnover()
{
    clearCounters();

    // find situations where the rotor on the right causes the rotor
    // on the left to turnover
    for (int i = rotorArray.count() - 1; i > 0; i--)
    {
        if (rotorArray.value(i+1)->checkForTurnover())
        {
            qDebug("1 - rotorname [%s] number [%d] turnover YES",
                   rotorArray.value(i)->getRotorName().toStdString().data(),
                   i);
            incCounter(i);
        }
    }

    // rotor double steps if its on its turnover position and
    // its not the first or last rotor.
    for (int i = 2; i < rotorArray.count(); i++)
    {
        qDebug("\t\t Double Step rotor [%d] name [%s]",
               i,
               rotorArray.value(i)->getRotorName().toStdString().data());
        if (rotorArray.value(i)->checkForTurnover() )
        {
            incCounter(i);
        }
    }

    // The right hand rotor ALWAYS turns one position
    qDebug("3 - rotor name [%s] number [%d] turnover YES",
           rotorArray.value(rotorArray.count())->getRotorName().toStdString().data(),
           rotorArray.count());
    incCounter(rotorArray.count()); // force a turnover on the right most rotor

    displayCounters(); // display debug information

    executeTurnovers(); // use the accumulated information to turnover the rotor(s)
}
示例#3
0
文件: startup.c 项目: skreuzer/ptpd
/*
 * Synchronous signal processing:
 * This function should be called regularly from the main loop
 */
void
checkSignals(RunTimeOpts * rtOpts, PtpClock * ptpClock)
{
	/*
	 * note:
	 * alarm signals are handled in a similar way in dep/timer.c
	 */

	if(sigint_received || sigterm_received){
		do_signal_close(ptpClock);
	}

	if(sighup_received){
		do_signal_sighup(rtOpts, ptpClock);
	sighup_received=0;
	}

	if(sigusr1_received){
	    if(ptpClock->portState == PTP_SLAVE){
		    WARNING("SIGUSR1 received, stepping clock to current known OFM\n");
                    stepClock(rtOpts, ptpClock);                                                                                                        
//		    ptpClock->clockControl.stepRequired = TRUE;
	    } else {
		    ERROR("SIGUSR1 received - will not step clock, not in PTP_SLAVE state\n");
	    }
	sigusr1_received = 0;
	}

	if(sigusr2_received){

/* testing only: testing step detection */
#if 0
		{
		ptpClock->addOffset ^= 1;
		INFO("a: %d\n", ptpClock->addOffset);
		sigusr2_received = 0;
		return;
		}
#endif
		displayCounters(ptpClock);
		if(rtOpts->timingAclEnabled) {
			INFO("\n\n");
			INFO("** Timing message ACL:\n");
			dumpIpv4AccessList(ptpClock->netPath.timingAcl);
		}
		if(rtOpts->managementAclEnabled) {
			INFO("\n\n");
			INFO("** Management message ACL:\n");
			dumpIpv4AccessList(ptpClock->netPath.managementAcl);
		}
		if(rtOpts->clearCounters) {
			clearCounters(ptpClock);
			NOTIFY("PTP engine counters cleared\n");
		}
#ifdef PTPD_STATISTICS
		if(rtOpts->oFilterSMConfig.enabled) {
			ptpClock->oFilterSM.display(&ptpClock->oFilterSM);
		}
		if(rtOpts->oFilterMSConfig.enabled) {
			ptpClock->oFilterMS.display(&ptpClock->oFilterMS);
		}
#endif /* PTPD_STATISTICS */
		sigusr2_received = 0;
	}

}