Ejemplo n.º 1
0
void
MembershipBookkeeping::SyncSourceLink::computeStats()
{
    // See Appendix A.3

    // compute cumulative packet lost.
    setExtendedMaxSeqNum(getMaxSeqNum() + getSeqNumAccum());
    uint32 expected =
        (getExtendedMaxSeqNum() - getBaseSeqNum() + 1);
    uint32 pc = getObservedPacketCount();
    uint32 lost;
    if ( 0 == pc )
        lost = 0;
    else
        lost = expected - pc;
    setCumulativePacketLost(lost);

    // compute the fraction of packets lost during the last
    // reporting interval.
    uint32 expectedDelta = expected - expectedPrior;
    expectedPrior = expected;
    uint32 receivedDelta = getObservedPacketCount() -
        receivedPrior;
    receivedPrior = getObservedPacketCount();
    uint32 lostDelta = expectedDelta - receivedDelta;
    if ( expectedDelta == 0 || lostDelta <= 0 )
        setFractionLost(0);
    else
        setFractionLost((lostDelta<<8) / expectedDelta );
}
Ejemplo n.º 2
0
/*add any new loss to the lossRecord*/
void updateLoss ()
{
    uint64_t T_loss;

    //if (higher==3)        add to lossRecord;
    //if (mylog->rear - mylog->front <4)
    //    return;

    /*get the third biggest seqNum*/
    uint32_t num = getMaxSeqNum(mylog,3);
    uint32_t num1 = getMaxSeqNum(mylog,4);

    uint32_t i;
    int index,j;//index for return value of existSeqNum, j for last receive packet index
    uint32_t latestNum;

    /*add all packets(not received) that have exactly 3 higher packet seqNum*/
    for (i=num;i>num1;i--)
    //for (i=num;i>mylog->qBase[mylog->rear]->packet->seqNum;i--)
    {
        index = existSeqNum(mylog, i-1);
        if (index == -1)
        {
            T_loss = T_lossCompute(i-1);
            append(&lossRecord, i-1, T_loss);
            countDroped++;
            printf("%u lost\n\n", i-1);
            latestNum = i-1;
        }
        else{
            j = index;
            break;
        }
    }
    //if (ackNum != latestNum){
      //  preAckNum = ackNum;
        ackNum = latestNum;
    //}
}