Example #1
0
/*
 * A timeout has occurred.
 * Return -1 if it's time to give up, else return 0.
 */
int rtt_timeout(struct rtt_info *ptr) {
	/* double rto with min max clamps */
	ptr->rtt_rto = rtt_minmax(ptr->rtt_rto << 1);

	if (++ptr->rtt_nrexmt > RTT_MAXNREXMT)
		return(-1);			/* time to give up for this packet */
	return(0);
}
Example #2
0
/* include rtt_timeout */
int
rtt_timeout(struct rtt_info *ptr)
{
	ptr->rtt_rto = rtt_minmax(ptr->rtt_rto * 2);		/* next RTO */

	if (++ptr->rtt_nrexmt > RTT_MAXNREXMT)
		return(-1);			/* time to give up for this packet */
	return(0);
}
Example #3
0
void rtt_init(struct rtt_info *ptr) {
	ptr->rtt_base   = 0;
	ptr->rtt_rtt    = 0;
	ptr->rtt_srtt   = 0;
	ptr->rtt_rttvar = 2000000; /* initially 2 seconds */
	/* first RTO at (srtt>>3 + rttvar) = 2 seconds */
	ptr->rtt_rto    = rtt_minmax(RTT_RTOCALC(ptr));
	ptr->rtt_nrexmt = 0;
}
Example #4
0
void rtt_init(struct rtt_info *ptr)
{
    struct timeval tv;

    gettimeofday(&tv, NULL);
    ptr->rtt_base = tv.tv_sec;  // # sec since 1/1/1970 at start
    ptr->rtt_rtt = 0;
    ptr->rtt_srtt = 0;
    ptr->rtt_rttvar = 0.75;
    ptr->rtt_rto = rtt_minmax(RTT_RTOCALC(ptr));
    // first RTO at (srtt * (4 * rttvar)) = 3 seconds
}
Example #5
0
void
rtt_init(struct rtt_info *ptr)
{
	struct timeval	tv;

	Gettimeofday(&tv, NULL);
	ptr->rtt_base = tv.tv_sec;		/* # sec since 1/1/1970 at start */

	ptr->rtt_rtt    = 0;
	ptr->rtt_srtt   = 0;
	ptr->rtt_rttvar = 6;
	ptr->rtt_rto = rtt_minmax(RTT_RTOCALC(ptr));
		/* first RTO at ((srtt + (4 * rttvar)) / 8) = 3 seconds */
}
Example #6
0
// 更新RTT估算因子并计算新的RTO
void rtt_stop(struct rtt_info *ptr, uint32_t ms)
{
    double delta;

    ptr->rtt_rtt = ms / 1000.0; // measured RTT in seconds

    // update our estimators of RTT and mean deviation of RTT.
    // see Jacobson's SIGCOMM '88 paper, Appendix A, for the details.
    // we use floating poing here for simplicity.
    delta = ptr->rtt_rtt - ptr->rtt_srtt;
    if (delta < 0.0) {
        delta = -delta;     // |delta|
    }
    ptr->rtt_rttvar += (delta - ptr->rtt_rttvar) / 4;   // h = 1/4
    ptr->rtt_rto = rtt_minmax(RTT_RTOCALC(ptr));
}
Example #7
0
/* 收到新应答之后,更新RTT估算因子并计算新的RTO */
void rtt_stop(struct rtt_info *ptr, uint32_t ms)
{
    double delta;

    ptr->rtt_rtt = ms / 1000.0;  /*measured RTT in seconds */
    //Update  our estimators of RTT and mean deviation of RTT.
    delta = ptr->rtt_rtt - ptr->rtt_srtt;
    ptr->rtt_srtt += delta / 8;   /* g = 1/8 */

    if (delta < 0.0)
        delta = -delta;   /* |delta| */

    ptr->rtt_rttvar += (delta - ptr->rtt_rttvar) / 4;    /* h = 1/4 */

    ptr->rtt_rto = rtt_minmax(RTT_RTOCALC(ptr));
}
Example #8
0
File: rtt.c Project: kingfree/haut
/* include rtt_stop */
void rtt_stop(struct rtt_info* ptr, uint32_t ms)
{
    double delta;

    ptr->rtt_rtt = ms / 1000.0; /* measured RTT in seconds */

    /*
     * Update our estimators of RTT and mean deviation of RTT.
     * See Jacobson's SIGCOMM '88 paper, Appendix A, for the details.
     * We use floating point here for simplicity.
     */

    delta = ptr->rtt_rtt - ptr->rtt_srtt;
    ptr->rtt_srtt += delta / 8; /* g = 1/8 */

    if (delta < 0.0) delta = -delta; /* |delta| */

    ptr->rtt_rttvar += (delta - ptr->rtt_rttvar) / 4; /* h = 1/4 */

    ptr->rtt_rto = rtt_minmax(RTT_RTOCALC(ptr));
}
Example #9
0
/*
 * A response was received.
 * Stop the timer and update the appropriate values in the structure
 * based on this packet's RTT.  We calculate the RTT, then update the
 * estimators of the RTT and its mean deviation.
 * This function should be called right after turning off the
 * timer with alarm(0), or right after a timeout occurs.
 */
void rtt_stop(struct rtt_info *ptr) {
	/* Retransmission ambiguity problem: solved */
	if(ptr->rtt_nrexmt > 0) {
		return;
	}
	/* Update most recent measured RTT in usec */
	ptr->rtt_rtt = rtt_ts(ptr);

	/*
	 * Jacobson‐Karels  Algorithm
	 * Update our estimators of RTT and mean deviation of RTT.
	 * See Jacobson's SIGCOMM '88 paper, Appendix A, for the details.
	 */
	ptr->rtt_rtt -= ptr->rtt_srtt >> 3;
	ptr->rtt_srtt += ptr->rtt_rtt;
	if(ptr->rtt_rtt < 0) {
		ptr->rtt_rtt = -ptr->rtt_rtt;
	}
	ptr->rtt_rtt -= ptr->rtt_rttvar >> 2;
	ptr->rtt_rttvar += ptr->rtt_rtt;
	ptr->rtt_rto = rtt_minmax(RTT_RTOCALC(ptr));
}