Example #1
0
void
measurementTimerRunOffFunction(unsigned int timerID, void *parameter1, void *parameter2)
{
    int index;
    SCTP_AssociationStatus assocStatus;
    SCTP_PathStatus pathStatus;

    for (index=0; index < MAXIMUM_NUMBER_OF_ASSOCIATIONS; index++) {
        if (ulpData[index].maximumStreamID >= 0){
            SCTP_getAssocStatus(ulpData[index].assocID, &assocStatus);
            SCTP_getPathStatus(ulpData[index].assocID, 0, &pathStatus);
            fprintf(fptr, "%-8x %-8lu %-8lu %-8u %-8u %-8u %-8u %-8u\n",
                    ulpData[index].assocID,
                    ulpData[index].nrOfReceivedChunks,
                    ulpData[index].nrOfReceivedBytes,
                    assocStatus.currentReceiverWindowSize,
                    assocStatus.noOfChunksInSendQueue,
                    assocStatus.outstandingBytes,
                    pathStatus.cwnd,
                    pathStatus.ssthresh);
            fflush(fptr);
            ulpData[index].nrOfReceivedChunks = 0;
            ulpData[index].nrOfReceivedBytes  = 0;
        }
    }
    SCTP_startTimer(deltaT, measurementTimerRunOffFunction, NULL, NULL);
}
Example #2
0
void networkStatusChangeNotif(unsigned int assocID, short affectedPathID, unsigned short newState, void* ulpDataPtr)
{
    SCTP_AssociationStatus assocStatus;
    SCTP_PathStatus pathStatus;
    unsigned short pathID;

    SCTP_getPathStatus(assocID, affectedPathID, &pathStatus);
    fprintf(fptr, "%-8x: Network status change: path %u (towards %s) is now %s\n",
                    assocID, affectedPathID,
                    pathStatus.destinationAddress,
                    pathStateName(newState));
    fflush(fptr);

    /* if the primary path has become inactive */
    if ((newState == SCTP_PATH_UNREACHABLE) &&
        (affectedPathID == SCTP_getPrimary(assocID))) {

        /* select a new one */
        SCTP_getAssocStatus(assocID, &assocStatus);
        for (pathID=0; pathID < assocStatus.numberOfAddresses; pathID++){
            SCTP_getPathStatus(assocID, pathID, &pathStatus);
            if (pathStatus.state == SCTP_PATH_OK)
                break;
        }

        /* and use it */
        if (pathID < assocStatus.numberOfAddresses) {
            SCTP_setPrimary(assocID, pathID);
        }
    }
}
Example #3
0
void networkStatusChangeNotif(unsigned int assocID, short destAddrIndex, unsigned short newState, void* ulpDataPtr)
{
    SCTP_AssociationStatus assocStatus;
    SCTP_PathStatus pathStatus;
    unsigned short pathID;

    if (verbose) {
        fprintf(stdout, "%-8x: Network status change: path %u is now %s\n",
                        assocID, destAddrIndex, pathStateName(newState));
        fflush(stdout);
    }

    /* if the primary path has become inactive */
    if ((newState == SCTP_PATH_UNREACHABLE) &&
        (destAddrIndex == SCTP_getPrimary(assocID))) {

        /* select a new one */ /* should we have a sctp_get_primary()? */
        SCTP_getAssocStatus(assocID, &assocStatus);
        for (pathID=0; pathID < assocStatus.numberOfAddresses; pathID++){
            SCTP_getPathStatus(assocID, pathID, &pathStatus);
            if (pathStatus.state == SCTP_PATH_OK)
                break;
        }

        /* and use it */
        if (pathID < assocStatus.numberOfAddresses) {
            SCTP_setPrimary(assocID, pathID);
        }
    }
}
Example #4
0
void restartNotif(unsigned int assocID, void* ulpDataPtr)
{
    SCTP_AssociationStatus assocStatus;

    if (verbose) {
        fprintf(stdout, "%-8x: Restart\n", assocID);
        fflush(stdout);
    }
    SCTP_getAssocStatus(assocID, &assocStatus);
    /* update ULP data */
    ((struct ulp_data *) ulpDataPtr)->maximumStreamID = assocStatus.outStreams - 1;
}
Example #5
0
void restartNotif(unsigned int assocID, void* ulpDataPtr)
{
    SCTP_AssociationStatus assocStatus;

    fprintf(fptr, "%-8x: Restart\n", assocID);
    fflush(fptr);

    /* update ULP data */
    if (ulpDataPtr) {
        SCTP_getAssocStatus(assocID, &assocStatus);
        ((struct ulp_data *) ulpDataPtr)->maximumStreamID = assocStatus.outStreams - 1;
        ((struct ulp_data *) ulpDataPtr)->assocID = assocID;
    }

}
Example #6
0
void
measurementTimerRunOffFunction(unsigned int timerID, void *parameter1, void *parameter2)
{
    int index;
    SCTP_AssociationStatus assocStatus;
    SCTP_PathStatus pathStatus;
    unsigned short pathID;

    for (index=0; index < MAXIMUM_NUMBER_OF_ASSOCIATIONS; index++) {
        if (ulpData[index].maximumStreamID >= 0){
            if (doAllMeasurements) {
                SCTP_getAssocStatus(ulpData[index].assocID, &assocStatus);
                for (pathID=0; pathID < assocStatus.numberOfAddresses; pathID++){
                    SCTP_getPathStatus(ulpData[index].assocID, pathID, &pathStatus);
                    fprintf(stdout, "Asoc:%-8x Path:%-2u Ch:%-8lu By:%-8lu rto:%-8u srtt:%-8u qu:%-6u osb:%-8u cwnd:%-8u ssthresh:%-8u\n",
                        ulpData[index].assocID,
                        pathID,
                        ulpData[index].nrOfReceivedChunks,
                        ulpData[index].nrOfReceivedBytes,
                        pathStatus.rto,
                        pathStatus.srtt,
                        assocStatus.noOfChunksInSendQueue,
                        assocStatus.outstandingBytes,
                        pathStatus.cwnd,
                        pathStatus.ssthresh);
                }
            } else {
                fprintf(stdout, "%-8x: %-6lu Chunks, %-8lu Bytes received\n",
                        ulpData[index].assocID, ulpData[index].nrOfReceivedChunks, ulpData[index].nrOfReceivedBytes);
            }
            ulpData[index].nrOfReceivedChunks = 0;
            ulpData[index].nrOfReceivedBytes  = 0;
        }
    }
    SCTP_startTimer(deltaT, measurementTimerRunOffFunction, NULL, NULL);
}