亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? radio_link_agent.cpp

?? 各種視頻壓縮格式的網絡傳輸的模擬信道分析
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
	  fprintf(stderr,"!!error in module %s: SDU buffer overflow\n",ModuleName);
	  exit(-1);
	}

      upper_layer_status = Upper_Layer_Agent->get_PDU(simulation_time,&(SDU_Buffer[SDU_buffer_write_position].upper_layer_PDU));
      switch (upper_layer_status)
	{
	case 0:
	  // succeeded
	  SDU_Buffer[SDU_buffer_write_position].unsent_bytes = SDU_Buffer[SDU_buffer_write_position].upper_layer_PDU.size;
	  SDU_Buffer[SDU_buffer_write_position].received_bytes_counter = 0;
	  SDU_Buffer[SDU_buffer_write_position].correct_bytes_counter = 0;
	  SDU_buffer_write_position++;
	  if ( SDU_buffer_write_position == PACKET_BUFFER_SIZE )
	    {
	      SDU_buffer_write_position = 0;   // wrap around circular SDU buffer
	    }
	  SDU_buffer_total_length++;
	  SDU_buffer_unsent_length++;
	  break;

	case 1:
	  // failed: input file still contains data, but the timestamp is younger than the current simulation time
	  // send dummy frames to simulate idle periods
	  fprintf(LogFile_ptr,"%s: not enough data available for transmission at the moment - sending dummy frame at time %d\n",ModuleName,simulation_time);
	  if ( ((*outgoing_frame) = (RADIO_LINK_FRAME *) malloc(sizeof(RADIO_LINK_FRAME))) == NULL )
	    {
              fprintf(stderr,"!!error in module %s: cannot allocate enough memory for new radio link frame\n",ModuleName);
              exit(-1);
	    }
	  (*outgoing_frame)->sequence_number = send_sequence_number;
          send_sequence_number++;
          (*outgoing_frame)->size = frame_size;
	  (*outgoing_frame)->frame_type = DUMMY;
	  (*outgoing_frame)->number_of_contained_SDUs = 0;
	  (*outgoing_frame)->number_of_retransmissions = 0;
	  total_frames_counter++;
	  total_dummy_frames_counter++;
	  simulation_time += transmission_time_interval;
	  return TRUE;

	case 2:
	  // failed: end of input file already reached
	  if ( Retransmit_buffer_length > 0 )
	    {
	      // no new data available, but retransmission buffer still contains unsent frames - send dummy frames
	      fprintf(LogFile_ptr,"%s: no more data available for transmission - but retransmission buffer still full\n",ModuleName);
	      if ( ((*outgoing_frame) = (RADIO_LINK_FRAME *) malloc(sizeof(RADIO_LINK_FRAME))) == NULL )
	        {
                  fprintf(stderr,"!!error in module %s: cannot allocate enough memory for new radio link frame\n",ModuleName);
                  exit(-1);
	        }
	      (*outgoing_frame)->sequence_number = send_sequence_number;
              send_sequence_number++;
              (*outgoing_frame)->size = frame_size;
	      (*outgoing_frame)->frame_type = DUMMY;
	      (*outgoing_frame)->number_of_contained_SDUs = 0;
	      (*outgoing_frame)->number_of_retransmissions = 0;
	      total_frames_counter++;
	      total_dummy_frames_counter++;
	      simulation_time += transmission_time_interval;
	      return TRUE;
	    }
	  else
            {
	      fprintf(LogFile_ptr,"%s: no more data available for transmission - termination initiated\n",ModuleName);
	      return FALSE;
	    }
	default:
	  // unexpected return value
	  fprintf(stderr,"!!error in module %s: unexpected return value for <get_SDU>\n",ModuleName);
	  exit(-1);
	}
    }


  // enough data available in SDU buffer 
  // prepare outgoing radio link frame for transmission
  if ( ((*outgoing_frame) = (RADIO_LINK_FRAME *) malloc(sizeof(RADIO_LINK_FRAME))) == NULL )
    {
      fprintf(stderr,"!!error in module %s: cannot allocate enough memory for new radio link frame\n",ModuleName);
      exit(-1);
    }

  (*outgoing_frame)->sequence_number = send_sequence_number;
  send_sequence_number++;
  (*outgoing_frame)->size = 0;
  (*outgoing_frame)->frame_type = DATA;
  (*outgoing_frame)->number_of_contained_SDUs = 0;
  (*outgoing_frame)->number_of_retransmissions = 0;

  // (virtually) add header fields to outgoing radio link frame
  (*outgoing_frame)->size += agent_header_size*8;
  // (virtually) map data from SDU buffer to the outgoing radio link frame, until the latter is full or the SDU buffer is empty
  while ( (*outgoing_frame)->size < frame_size )
    {
      if ( SDU_Buffer[SDU_buffer_read_position].unsent_bytes <= (frame_size - (*outgoing_frame)->size)/8 )
        {
          // unsent bytes in current SDU do no exceed the space still left in the radio link frame
          (*outgoing_frame)->size += SDU_Buffer[SDU_buffer_read_position].unsent_bytes*8;
          (*outgoing_frame)->contained_SDU[(*outgoing_frame)->number_of_contained_SDUs].identifier = SDU_buffer_read_position;
          (*outgoing_frame)->contained_SDU[(*outgoing_frame)->number_of_contained_SDUs].size = SDU_Buffer[SDU_buffer_read_position].unsent_bytes;
          (*outgoing_frame)->number_of_contained_SDUs++;
          SDU_Buffer[SDU_buffer_read_position].unsent_bytes = 0;
          SDU_buffer_unsent_length--;
          SDU_buffer_read_position++;
          if ( SDU_buffer_read_position == PACKET_BUFFER_SIZE )
            {
	      SDU_buffer_read_position = 0;   // wrap around circular SDU buffer
	    }
        }
      else
	{
	  // unsent bytes in current SDU exceed the space still left in the radio link frame - take only a fraction of them
          mapped_data_size = (frame_size - (*outgoing_frame)->size)/8;
          (*outgoing_frame)->size = frame_size;
          (*outgoing_frame)->contained_SDU[(*outgoing_frame)->number_of_contained_SDUs].identifier = SDU_buffer_read_position;
          (*outgoing_frame)->contained_SDU[(*outgoing_frame)->number_of_contained_SDUs].size = mapped_data_size;
          (*outgoing_frame)->number_of_contained_SDUs++;
          SDU_Buffer[SDU_buffer_read_position].unsent_bytes -= mapped_data_size;
	}
      // check, if SDU buffer still contains unsent data parts and the radio link frame is not completely filled yet
      if ( (SDU_buffer_unsent_length == 0) && ((*outgoing_frame)->size < frame_size) )
	{
	  // we need to request a new SDU from the upper layer agent

          //check for buffer overflow first
          if ( SDU_buffer_total_length == PACKET_BUFFER_SIZE )
	    {
	      fprintf(stderr,"!!error in module %s: SDU buffer overflow\n",ModuleName);
	      exit(-1);
	    }

          upper_layer_status = Upper_Layer_Agent->get_PDU(simulation_time,&(SDU_Buffer[SDU_buffer_write_position].upper_layer_PDU));
          switch (upper_layer_status)
	    {
	    case 0:
	      // succeeded
	      SDU_Buffer[SDU_buffer_write_position].unsent_bytes = SDU_Buffer[SDU_buffer_write_position].upper_layer_PDU.size;
	      SDU_Buffer[SDU_buffer_write_position].received_bytes_counter = 0;
	      SDU_Buffer[SDU_buffer_write_position].correct_bytes_counter = 0;
	      SDU_buffer_write_position++;
	      if ( SDU_buffer_write_position == PACKET_BUFFER_SIZE )
	        {
	          SDU_buffer_write_position = 0;   // wrap around circular SDU buffer
	        }
	      SDU_buffer_total_length++;
	      SDU_buffer_unsent_length++;
	      break;

	    case 1:
	      // failed: input file still contains data, but the timestamp is younger than the current simulation time
	      // perform (virtual) stuffing for the rest of the radio link frame
	      fprintf(LogFile_ptr,"%s: not enough data available for transmission at the moment - perform (virtual) stuffing on frame at time %d\n",ModuleName,simulation_time);
              (*outgoing_frame)->size = frame_size;
              break;

	    case 2:
	      // failed: end of input file already reached
	      // also perform (virtual) stuffing for the rest of the radio link frame
	      fprintf(LogFile_ptr,"%s: no more data available for transmission - perform (virtual) stuffing on frame at time %d\n",ModuleName,simulation_time);
              (*outgoing_frame)->size = frame_size;
	      break;
 	    default:
	      // unexpected return value
	      fprintf(stderr,"!!error in module %s: unexpected return value for <get_SDU>\n",ModuleName);
	      exit(-1);
	    } 
	}
    }

  // finish generation of new radio link frame
  total_frames_counter++;
  simulation_time += transmission_time_interval;
  return TRUE;
}



// invoke reception procedure for radio link frames depending on radio link operation mode
void RADIO_LINK_AGENT::receive_frame(RADIO_LINK_FRAME *incoming_frame, Boolean frame_error_indicator)
{
  if ( ACK_mode )
    {
      // acknowledged mode
      AM_receive_frame(incoming_frame, frame_error_indicator);
    }
  else
    {
      //unacknowledged mode
      UM_receive_frame(incoming_frame, frame_error_indicator);
    }
}



void RADIO_LINK_AGENT::write_statistics(FILE *StatisticsFile_ptr)
{
  //calculate statistics first
  total_bitrate = (double)(total_frames_counter*frame_size)/(double)simulation_time;
  total_net_bitrate = (double)(total_frames_counter*(frame_size-agent_header_size*8))/(double)simulation_time;
  effective_net_bitrate = (double)total_correct_payload_bits_counter/(double)simulation_time;

  // write statistics to file
  fprintf(StatisticsFile_ptr,"----------------------------------------------------------------------------\n");
  fprintf(StatisticsFile_ptr,"%s: Statistics:\n\n",ModuleName);

  fprintf(StatisticsFile_ptr,"total number of radio link frames transmitted:  %10d\n",total_frames_counter);
  fprintf(StatisticsFile_ptr,"number of retransmissions:                      %10d\n",total_retransmitted_frames_counter);
  fprintf(StatisticsFile_ptr,"number of dummy frames:                         %10d\n\n",total_dummy_frames_counter);
  
  fprintf(StatisticsFile_ptr,"total bitrate (including radio link header):                %f kbit/s\n",total_bitrate);
  fprintf(StatisticsFile_ptr,"total net bitrate (excluding radio link header):            %f kbit/s\n",total_net_bitrate);
  fprintf(StatisticsFile_ptr,"effective net bitrate (including only correct data bits):   %f kbit/s\n",effective_net_bitrate);

  fprintf(StatisticsFile_ptr,"----------------------------------------------------------------------------\n");
  fprintf(StatisticsFile_ptr,"total simulation time: %d ms\n",simulation_time);
  fprintf(StatisticsFile_ptr,"----------------------------------------------------------------------------\n");
}



// reception procedure for acknowledged mode operation 
void RADIO_LINK_AGENT::AM_receive_frame(RADIO_LINK_FRAME *incoming_frame, Boolean frame_error_indicator)
{
  int32 i, identifier;

  // determine the type of the received frame
  switch ( incoming_frame->frame_type )
    {
    case DATA:
      // check for frame sequence reordering
      if ( incoming_frame->sequence_number != receive_sequence_number )
        {
          fprintf(stderr,"!!error in module %s: frame reordering in acknowledged mode has occurred\n",ModuleName);
        }
      receive_sequence_number++;
      // check frame error status
      if ( frame_error_indicator )
	{
          // retransmission is allowed at least once per frame in acknowledged mode
	  incoming_frame->frame_type = RETRANSMIT;
	  incoming_frame->number_of_retransmissions = 0;
	  // check for retransmission buffer overflow
	  if ( Retransmit_buffer_length == FRAME_BUFFER_SIZE )
	    {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国模大尺度一区二区三区| 99视频超级精品| 久久综合九色综合97_久久久| 欧美国产视频在线| 一区二区欧美在线观看| 亚洲一区二区精品3399| 在线观看日韩电影| 首页国产欧美日韩丝袜| 欧美成人a视频| 国产精品白丝jk白祙喷水网站| 国产精品久久久爽爽爽麻豆色哟哟| 99re在线精品| 午夜激情一区二区三区| 欧美videos大乳护士334| 成人网在线播放| 亚洲最新在线观看| 日韩免费观看高清完整版| 国产成人精品免费网站| 一区二区三区欧美| 日韩一区二区视频| 国产成人99久久亚洲综合精品| 亚洲精品成人a在线观看| 欧美一区二区三区免费大片 | 国产日韩欧美一区二区三区综合| 99久久精品国产一区二区三区| 香蕉久久夜色精品国产使用方法 | 亚洲人成网站精品片在线观看| 欧美日韩一二区| 精品亚洲国内自在自线福利| 亚洲视频在线观看三级| 3d动漫精品啪啪| 成人国产亚洲欧美成人综合网| 亚洲一区二区成人在线观看| 久久久五月婷婷| 午夜激情一区二区三区| 国产亚洲va综合人人澡精品| 色综合久久88色综合天天6| 美女免费视频一区二区| 综合久久国产九一剧情麻豆| 日韩精品综合一本久道在线视频| www.欧美亚洲| 麻豆国产精品视频| 一区二区三区日韩在线观看| 久久先锋影音av鲁色资源| 欧洲激情一区二区| 国产xxx精品视频大全| 日韩在线一区二区| 亚洲欧洲成人av每日更新| 久久精品一区二区三区av| 蜜桃一区二区三区在线| 国产精品久久久久久亚洲伦| 91精品国产综合久久蜜臀| 99在线视频精品| 久久er99热精品一区二区| 一区二区三区中文字幕在线观看| 26uuu久久天堂性欧美| 欧美三级电影网站| 成人精品国产福利| 免费在线观看精品| 亚洲另类色综合网站| 国产视频一区在线播放| 制服丝袜亚洲播放| 色呦呦日韩精品| 丁香六月综合激情| 精品亚洲国内自在自线福利| 亚洲国产综合色| 一区在线中文字幕| 国产午夜精品一区二区三区视频 | 在线免费观看一区| 处破女av一区二区| 韩国精品久久久| 制服丝袜中文字幕一区| 91在线视频播放地址| 国产传媒久久文化传媒| 久久激情五月激情| 丝袜a∨在线一区二区三区不卡| 亚洲日本电影在线| 国产精品久久久久一区二区三区 | 国产成人8x视频一区二区| 奇米影视一区二区三区| av午夜精品一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区 | 激情六月婷婷久久| 日产精品久久久久久久性色| 一区二区高清视频在线观看| 国产精品久久福利| 欧美国产精品一区二区三区| 亚洲精品一区二区三区香蕉| 日韩午夜精品视频| 91精品国产aⅴ一区二区| 欧美日韩三级视频| 欧美三级资源在线| 91黄色免费网站| 日本高清免费不卡视频| 91首页免费视频| 99riav久久精品riav| 成人午夜短视频| 大白屁股一区二区视频| 高清国产一区二区| 丁香亚洲综合激情啪啪综合| 国产成人综合视频| 国产不卡在线视频| 成人小视频在线观看| 丁香桃色午夜亚洲一区二区三区| 国产精品 欧美精品| 国产成人在线免费观看| 福利一区二区在线| 成人美女视频在线观看| www.欧美日韩| 91女厕偷拍女厕偷拍高清| 色偷偷久久人人79超碰人人澡| 91影视在线播放| 在线视频综合导航| 欧美午夜免费电影| 91麻豆精品国产自产在线| 欧美亚洲综合在线| 92国产精品观看| 色综合天天综合色综合av| 色综合欧美在线| 欧美中文字幕一区二区三区| 欧美三级日韩在线| 7777女厕盗摄久久久| 欧美成人精品3d动漫h| 久久蜜桃av一区精品变态类天堂| 国产日韩欧美电影| 日韩一区欧美小说| 亚洲一二三区在线观看| 日本不卡123| 国产精品一区二区在线播放| 亚洲欧洲日韩在线| 一区二区欧美在线观看| 视频一区二区三区在线| 免费成人在线视频观看| 国产乱妇无码大片在线观看| 白白色 亚洲乱淫| 色狠狠一区二区三区香蕉| 欧美电影一区二区三区| 精品欧美一区二区三区精品久久| 国产亚洲综合av| 亚洲精品视频在线看| 天使萌一区二区三区免费观看| 精品一区二区国语对白| 成人免费视频免费观看| 欧美做爰猛烈大尺度电影无法无天| 555www色欧美视频| 国产喷白浆一区二区三区| 悠悠色在线精品| 免费人成在线不卡| 成人毛片在线观看| 欧美日韩一级片网站| 久久综合一区二区| 自拍av一区二区三区| 日韩不卡一区二区三区| 国产jizzjizz一区二区| 欧美亚洲综合久久| 精品久久久久久最新网址| 日韩一区有码在线| 蜜臀精品久久久久久蜜臀| 成人国产免费视频| 欧美剧情电影在线观看完整版免费励志电影 | 亚洲欧美日韩电影| 秋霞午夜鲁丝一区二区老狼| 高清国产一区二区| 欧美日韩国产色站一区二区三区| 久久嫩草精品久久久精品| 亚洲你懂的在线视频| 免费不卡在线观看| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美一区二区三区免费大片| 亚洲天天做日日做天天谢日日欢 | 亚洲综合一区二区| 加勒比av一区二区| 欧美自拍丝袜亚洲| 国产欧美日韩在线视频| 亚洲mv在线观看| 成人av免费在线| 欧美成va人片在线观看| 亚洲主播在线播放| 国产v日产∨综合v精品视频| 8x8x8国产精品| 亚洲人123区| 国产精品资源站在线| 337p亚洲精品色噜噜噜| 亚洲欧美日韩精品久久久久| 国产在线视频一区二区| 91福利在线播放| 国产欧美日韩在线| 免费观看一级特黄欧美大片| 91国产丝袜在线播放| 国产欧美日本一区二区三区| 喷水一区二区三区| 91福利国产精品| 国产精品天天看| 精品亚洲成a人在线观看| 欧美剧在线免费观看网站 | www.欧美.com| 久久婷婷国产综合国色天香| 日韩国产精品久久久| 日本韩国欧美一区二区三区| 欧美国产激情一区二区三区蜜月|