⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aggcbqegress-est.cc.cc

📁 在网络的边缘路由器中并不能完全接受所到的包
💻 CC
📖 第 1 页 / 共 2 页
字号:

  //------------ end of computation --------------------

}

void AggCbqEgress_Est::generatearrivalenvelope0()
{
  int j=0;
  double tempmean;
  double tempmeancount;
  double tempvariance;
  double tempvariancecount;
  double mean;
  double variance;

  //The arrival envelope is stored in the array arrivalenvelope 
  //The first column gives the mean and the second column the variance
  
  while(j < 17)
  {
     navigatelist0 = headoflist0;
     tempmean = 0.0;
     tempmeancount = 0;
     while(navigatelist0->next != headoflist0)
     {
        if(navigatelist0->maxminarrayoftime0[j][0] != 0 &&
navigatelist0->maxminarrayoftime0[j][0] != 9999)
        {
           tempmeancount++;
           tempmean = tempmean + navigatelist0->maxminarrayoftime0[j][0];
        }
        navigatelist0 = navigatelist0->next;
     }

     if(navigatelist0->next == headoflist0)
     {
        if(navigatelist0->maxminarrayoftime0[j][0] != 0 &&
navigatelist0->maxminarrayoftime0[j][0] != 9999)
        {
           tempmeancount++;
           tempmean = tempmean + navigatelist0->maxminarrayoftime0[j][0];
        }
     }

     if(tempmeancount > 0)
     {
        mean = tempmean/tempmeancount;
     }
     else
     {
        mean = 0.0;
     }
     arrivalenvelope0[j][0] = mean;

     navigatelist0 = headoflist0;
     tempvariance = 0.0;
     tempvariancecount = 0;

     while(navigatelist0->next != headoflist0)
     {
        if(navigatelist0->maxminarrayoftime0[j][0] != 0 &&
navigatelist0->maxminarrayoftime0[j][0] != 9999)
        {
           tempvariancecount++;
           tempvariance = tempvariance + ((mean -
navigatelist0->maxminarrayoftime0[j][0])*(mean -navigatelist0->maxminarrayoftime0[j][0]));
        }
        navigatelist0 = navigatelist0->next;
     }
 
     if(navigatelist0->next == headoflist0)
     {
        if(navigatelist0->maxminarrayoftime0[j][0] != 0 &&
navigatelist0->maxminarrayoftime0[j][0] != 9999)
        {
          tempvariancecount++;
          tempvariance = tempvariance + ((mean -
navigatelist0->maxminarrayoftime0[j][0])*(mean - navigatelist0->maxminarrayoftime0[j][0]));
        }
     }
     
     if(tempvariancecount > 1)
     {
        variance = tempvariance / (tempvariancecount-1);
     }
     else
     {
        variance = 0.0;
     }
     arrivalenvelope0[j][1] = variance;
    
     j++;
  }

  printf("\n The arrival envelopes are : \n");
  for(j = 0; j < 17; j++)
  {
    printf(" Row %d --------- Mean is %f ..... Variance is %f \n",j,arrivalenvelope0[j][0],arrivalenvelope0[j][1]);
  }
}

void AggCbqEgress_Est::generatearrivalenvelope1()
{
  int j=0;
  double tempmean;
  double tempmeancount;
  double tempvariance;
  double tempvariancecount;
  double mean;
  double variance;

  //The arrival envelope is stored in the array arrivalenvelope 
  //The first column gives the mean and the second column the variance
  
  while(j < 17)
  {
     navigatelist1 = headoflist1;
     tempmean = 0.0;
     tempmeancount = 0;
     while(navigatelist1->next != headoflist1)
     {
        if(navigatelist1->maxminarrayoftime1[j][0] != 0 &&
navigatelist1->maxminarrayoftime1[j][0] != 9999)
        {
           tempmeancount++;
           tempmean = tempmean + navigatelist1->maxminarrayoftime1[j][0];
        }
        navigatelist1 = navigatelist1->next;
     }

     if(navigatelist1->next == headoflist1)
     {
        if(navigatelist1->maxminarrayoftime1[j][0] != 0 &&
navigatelist1->maxminarrayoftime1[j][0] != 9999)
        {
           tempmeancount++;
           tempmean = tempmean + navigatelist1->maxminarrayoftime1[j][0];
        }
     }

     if(tempmeancount > 0)
     {
        mean = tempmean/tempmeancount;
     }
     else
     {
        mean = 0.0;
     }
     arrivalenvelope1[j][0] = mean;

     navigatelist1 = headoflist1;
     tempvariance = 0.0;
     tempvariancecount = 0;

     while(navigatelist1->next != headoflist1)
     {
        if(navigatelist1->maxminarrayoftime1[j][0] != 0 &&
navigatelist1->maxminarrayoftime1[j][0] != 9999)
        {
           tempvariancecount++;
           tempvariance = tempvariance + ((mean -
navigatelist1->maxminarrayoftime1[j][0])*(mean -navigatelist1->maxminarrayoftime1[j][0]));
        }
        navigatelist1 = navigatelist1->next;
     }
 
     if(navigatelist1->next == headoflist1)
     {
        if(navigatelist1->maxminarrayoftime1[j][0] != 0 &&
navigatelist1->maxminarrayoftime1[j][0] != 9999)
        {
          tempvariancecount++;
          tempvariance = tempvariance + ((mean -
navigatelist1->maxminarrayoftime1[j][0])*(mean - navigatelist1->maxminarrayoftime1[j][0]));
        }
     }
     
     if(tempvariancecount > 1)
     {
        variance = tempvariance / (tempvariancecount-1);
     }
     else
     {
        variance = 0.0;
     }
     arrivalenvelope1[j][1] = variance;
    
     j++;
  }

  printf("\n The arrival envelopes are : \n");
  for(j = 0; j < 17; j++)
  {
    printf(" Row %d --------- Mean is %f ..... Variance is %f \n",j,arrivalenvelope1[j][0],arrivalenvelope1[j][1]);
  }
}
 
void AggCbqEgress_Est::generateserviceenvelope0()
{
  int j=0;
  double tempmean;
  double tempmeancount;
  double tempvariance;
  double tempvariancecount;
  double mean;
  double variance;

  //The service envelope is stored in the array service envelope
  //The first column gives the mean and the second column the variance
  
  while(j < 17)
  {
     navigatelist0 = headoflist0;
     tempmean = 0.0;
     tempmeancount = 0;
     while(navigatelist0->next != headoflist0)
     {
        if(navigatelist0->maxminarrayoftime0[j][1] != 9999 &&
navigatelist0->maxminarrayoftime0[j][1] != 0)
        {
           tempmeancount++;
           tempmean = tempmean + navigatelist0->maxminarrayoftime0[j][1];
        }
        navigatelist0 = navigatelist0->next;
     }

     if(navigatelist0->next == headoflist0)
     {
        if(navigatelist0->maxminarrayoftime0[j][1] != 9999 &&
navigatelist0->maxminarrayoftime0[j][1] != 0)
        {
           tempmeancount++;
           tempmean = tempmean + navigatelist0->maxminarrayoftime0[j][1];
        }
     }

     if(tempmeancount > 0)
     {
        mean = tempmean/tempmeancount;
     }
     else
     {
        mean = 0.0;
     }
     serviceenvelope0[j][0] = mean;

     navigatelist0 = headoflist0;
     tempvariance = 0.0;
     tempvariancecount = 0;

     while(navigatelist0->next != headoflist0)
     {
        if(navigatelist0->maxminarrayoftime0[j][1] != 9999 &&
navigatelist0->maxminarrayoftime0[j][1] != 0)
        {
           tempvariancecount++;
           tempvariance = tempvariance + ((mean -
navigatelist0->maxminarrayoftime0[j][1])*(mean -navigatelist0->maxminarrayoftime0[j][1]));
        }
        navigatelist0 = navigatelist0->next;
     }
 
     if(navigatelist0->next == headoflist0)
     {
        if(navigatelist0->maxminarrayoftime0[j][1] != 9999 &&
navigatelist0->maxminarrayoftime0[j][1] != 0)
        {
          tempvariancecount++;
          tempvariance = tempvariance + ((mean -
navigatelist0->maxminarrayoftime0[j][1])*(mean - navigatelist0->maxminarrayoftime0[j][1]));
        }
     }
     
     if(tempvariancecount > 1)
     {
        variance = tempvariance / (tempvariancecount-1);
     }
     else
     {
        variance = 0.0;
     }
     serviceenvelope0[j][1] = variance;
    
     j++;
  }

  printf("\n The service envelopes are : \n");
  for(j = 0; j < 17; j++)
  {
    printf(" Row %d --------- Mean is %f ..... Variance is %f \n",j,serviceenvelope0[j][0],serviceenvelope0[j][1]);
  }

}  

void AggCbqEgress_Est::generateserviceenvelope1()
{
  int j=0;
  double tempmean;
  double tempmeancount;
  double tempvariance;
  double tempvariancecount;
  double mean;
  double variance;

  //The service envelope is stored in the array service envelope
  //The first column gives the mean and the second column the variance
  
  while(j < 17)
  {
     navigatelist1 = headoflist1;
     tempmean = 0.0;
     tempmeancount = 0;
     while(navigatelist1->next != headoflist1)
     {
        if(navigatelist1->maxminarrayoftime1[j][1] != 9999 &&
navigatelist1->maxminarrayoftime1[j][1] != 0)
        {
           tempmeancount++;
           tempmean = tempmean + navigatelist1->maxminarrayoftime1[j][1];
        }
        navigatelist1 = navigatelist1->next;
     }

     if(navigatelist1->next == headoflist1)
     {
        if(navigatelist1->maxminarrayoftime1[j][1] != 9999 &&
navigatelist1->maxminarrayoftime1[j][1] != 0)
        {
           tempmeancount++;
           tempmean = tempmean + navigatelist1->maxminarrayoftime1[j][1];
        }
     }

     if(tempmeancount > 0)
     {
        mean = tempmean/tempmeancount;
     }
     else
     {
        mean = 0.0;
     }
     serviceenvelope1[j][0] = mean;

     navigatelist1 = headoflist1;
     tempvariance = 0.0;
     tempvariancecount = 0;

     while(navigatelist1->next != headoflist1)
     {
        if(navigatelist1->maxminarrayoftime1[j][1] != 9999 &&
navigatelist1->maxminarrayoftime1[j][1] != 0)
        {
           tempvariancecount++;
           tempvariance = tempvariance + ((mean -
navigatelist1->maxminarrayoftime1[j][1])*(mean -navigatelist1->maxminarrayoftime1[j][1]));
        }
        navigatelist1 = navigatelist1->next;
     }
 
     if(navigatelist1->next == headoflist1)
     {
        if(navigatelist1->maxminarrayoftime1[j][1] != 9999 &&
navigatelist1->maxminarrayoftime1[j][1] != 0)
        {
          tempvariancecount++;
          tempvariance = tempvariance + ((mean -
navigatelist1->maxminarrayoftime1[j][1])*(mean - navigatelist1->maxminarrayoftime1[j][1]));
        }
     }
     
     if(tempvariancecount > 1)
     {
        variance = tempvariance / (tempvariancecount-1);
     }
     else
     {
        variance = 0.0;
     }
     serviceenvelope1[j][1] = variance;
    
     j++;
  }

  printf("\n The service envelopes are : \n");
  for(j = 0; j < 17; j++)
  {
    printf(" Row %d --------- Mean is %f ..... Variance is %f \n",j,serviceenvelope1[j][0],serviceenvelope1[j][1]);
  }

}  
   

void AggCbqEgress_Est::estimate() 
{
     static int check = 0;

     if(check == 0)
     {

        double now2 = Scheduler::instance().clock();
        printf("\n the time in estimate function is %f \n",now2); 

        // This part of the code is for extracting the arrival and service times of the 
        // packets into an array

        extractarrivalservicetimesintoarray();      

        // this part of the code is used for generating the table which contains the
        // maximum arrival time and minimum service time for 1k, 2k, 4k...... 64k

        computationofminarrivalmaxservicetimes0();     
        computationofminarrivalmaxservicetimes1();
  
       // This part of the code is for creating the circular list which keeps data over a 
       // time period of 10 seconds

        createmaxmintimelist0(maxmintimes0);
        createmaxmintimelist1(maxmintimes1);
       // printmaxmintimelist0();
       // printmaxmintimelist1();      

       // This part of the code is for generating the arrival and service envelopes
       
       // The arrival envelope contains the mean and variance of all the arrival times
         generatearrivalenvelope0();
         generatearrivalenvelope1();

       // The service envelope contains the mean and variance of all the service times
         generateserviceenvelope0();
         generateserviceenvelope1();

         Trace::snoopqueueinitialize();
         Trace::setsnoopqueuecount();

     }

     if(check == 0)
     {
        check = 1;
     }
     else
     {
        check = 0;
     }


}

void AggCbqEgress_Est::start() {

	printf("AggTrafEnv_Est::start\n");
        initializemaxminlist0();
        initializemaxminlist1();
        //printmaxmintimelist();
	est_timer_.resched(period_);

}


		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -