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

📄 mtest.c

📁 智邦网卡测试程序源码(2张网卡pingpong)
💻 C
📖 第 1 页 / 共 2 页
字号:

 inregs.h.ah=0x04;             // AH=04 send_pkt()
 inregs.x.cx=length;           // CX= packet length
 segregs.ds= _FP_SEG (sb);       // DS:SI send buffer
 inregs.x.si= _FP_OFF (sb);

 _int86x (packet_isr, &inregs, &outregs, &segregs);
 return (!outregs.x.cflag);
}
// ********************************
int  wait_packet_received(char *p, char *q,char *RxBufferInUse, int *RxDataLength)
{
 int  i;
 char *tmp1,*tmp2;

 tmp1=q;
 tmp2=p;
 if (*RxBufferInUse!=2)            // if return= 0 No Receive!
     return 0;                     //          = 1 Receive Length Error!
                                   //          = 2 Receive Data Error!
 *RxBufferInUse=0;                 //          = 3 Receive Success
 if(*RxDataLength != p_len)
    return 1;
 p=p+12;
 q=q+12;
 for(i=12;i<*RxDataLength;i++)
    if(*p++ != *q++){
       return 2;
       }
// for(i=0;i<1520;i++)
//     *(tmp1+i)=0xff;

 return 3;
}

// ********************************
int ppong_test(int times)
{
 int     key_value, try_counter, sent1, sent2, i, rtn, times1;
 int     tmp=-1,count1=-1,count2=0;
 char    string[10];
 time_t  ltime;
 struct  tm *newtime;


 p_len=60;
// p_len=1514;

 for(times1=0;times1<10;times1++)
 {                      // pre test
   send_pkt(packet_isr2,p_len,send_buffer2);
   for(i=0;i<1000;i++)
    {        //at most 1000ms
       rtn=wait_packet_received(send_buffer2, RxBuffer1, &RxBufferInUse1 ,&RxDataLength1);
       if(rtn==3)
       {
         send_pkt(packet_isr1,p_len,send_buffer1);
         break;
        }
       Delay10us(100);
     }
   Delay10us(100);
   for(i=0;i<1000;i++)
    {        //at most 1000ms
       rtn=wait_packet_received(send_buffer1, RxBuffer2, &RxBufferInUse2 ,&RxDataLength2);
       if(rtn==3)
       {
         break;
        }
       Delay10us(100);
     }
    if(rtn==3) break;
  }


 while(TRUE)
 {
   Delay10us(10);
 // client
   sent2=FALSE;
   for(try_counter=0; try_counter<10; try_counter++)
       if(send_pkt(packet_isr2,p_len,send_buffer2))
        {
          sent2=TRUE;
          break;
         }

   if (sent2)                   // if return= 0 No Receive!
       tx_count2++;             //          = 1 Receive Length Error!
   else                         //          = 2 Receive Data Error!
       tx_lost2++;              //          = 3 Receive Success

   //server
   for(i=0;i<100000;i++)
    {        //at most 100ms

       rtn=wait_packet_received(send_buffer2, RxBuffer1, &RxBufferInUse1 ,&RxDataLength1);

       if(rtn ==1)
        {
          rx_lost1++;
          break;
        }

       if(rtn ==2)
        {
          rx_lost1++;
          break;
        }

       if(rtn == 3)
        {
          sent1=FALSE;
          rx_count1++;
          for(try_counter=0; try_counter<10; try_counter++)
               if(send_pkt(packet_isr1,p_len,send_buffer1))
                {
                  sent1=TRUE;
                  break;
                 }

          if(sent1)
             tx_count1++;
          else
             tx_lost1++;
          break;
        }

       Delay10us(10);

    }

   if(rtn == 0 && i==100000)
    {
      rx_lost1++;
     }

   Delay10us(1);

   // client
   for(i=0;i<100000;i++)
    {        //at most 100ms
       rtn=wait_packet_received(send_buffer1, RxBuffer2, &RxBufferInUse2 ,&RxDataLength2);

       if(rtn != 0)
          if(rtn ==1)
           {
             rx_lost2++;
             break;
            }
          else
           if(rtn ==2)
            {
              rx_lost2++;
              break;
             }
           else
            {
              rx_count2++;
              break;
             }
      else
         Delay10us(10);
    }

   if(rtn == 0 && i==100000)
    {
      rx_lost2++;
     }

   p_len ++;

   if(p_len>1514)
    {
      p_len=60;
      prepare_send_buffer(send_buffer1,SERVER);
      prepare_send_buffer(send_buffer2,CLIENT);
    }

//   time(&ltime);

//   newtime=localtime(&ltime);

//   if(newtime->tm_sec!=tmp || ((tx_count2+tx_lost2)>=TEST_COUNT*times) || (rx_lost2)>=ERROR_COUNT)

//   if( ((tx_count2+tx_lost2) >= TEST_COUNT*times) || (rx_lost2)>=ERROR_COUNT)

//count1++;

//if (count1 >=10)
//   count1=0;


//if ( count1 == 0 )

//    {
//      tmp=newtime->tm_sec;                     // if second change or

/*
      count1++;                                // test end
      if(count1>=60)
       {                          // print data
         count1=0;
         count2++;
        }
      if(count2>=60)
       {
         count2=0;
        }
*/
      _settextwindow(1,1,25,80);
      _settextcolor(WHITE);
      sprintf(string,"%6lu",tx_count2);
      _settextposition(15,21);
      _outtext(string);
      sprintf(string,"%6lu",rx_count2);
      _settextposition(16,21);
      _outtext(string);
      sprintf(string,"%6lu",tx_count1);
      _settextposition(10,61);
      _outtext(string);
      sprintf(string,"%6lu",rx_count1);
      _settextposition(11,61);
      _outtext(string);
//     }

    if((tx_count2+tx_lost2)>=TEST_COUNT*times || rx_lost2>=ERROR_COUNT)
      break;
   }

 if (tx_count2==rx_count2)
     return 0;
 else
     return 1;
}

// ********************************
int init_card1_drv(void)
{
 int try=0;

 while(TRUE){
       packet_isr1 = search_packet_driver_vector(1);
       if(packet_isr1 !=0){
          sprintf (str,"Found packet driver entry at 0x%02X.", packet_isr1);
          print_msg(YELLOW, str);
          break;
          }
       else if(try==0){
             print_msg(RED, "Warning : No packet driver entry found between 0x60-0x80.");
             print_msg(YELLOW,"Try to load Server packet driver. ");

             system("e100bpkt 0x60 >nul");
             try++;
             }
          else{
             print_msg(RED, "Error : Server packet driver load ERROR !!");
             error_code=0x12;
             return 2;
             }
       }

 if(!set_access_type(packet_isr1,&packet_handle1,receive_handler1) ) {
    print_msg(RED, "ERROR-2:  Card1 cannot register as a protocol stack.");
    error_code=0x13;
    return 3;
    }
 if(!get_address(packet_isr1,packet_handle1,(char *)ether_id1)) {
    print_msg(RED, "ERROR-4:  Card1 cannot get the NIC Ethernet address.");
    error_code=0x14;
    return 4;
    }
 if(!set_rcv_mode(packet_isr1, packet_handle1,3)) {
    print_msg(RED, "ERROR-5:  Card1 cannot set the NIC receive mode.");
    error_code=0x15;
    return 5;
    }
 return 0;
}

// ********************************
int init_card2_drv(void)
{

 _setbkcolor(BLUE);

 print_msg(GREEN,"Loading client packet driver ...........");
 if(system("mtdpkt 0x61 100full >nul")!=0){
    print_msg(RED_L,"Load client packet driver FAIL !!!");
    return 1;
    }

 packet_isr2 = search_packet_driver_vector(2);
 if(packet_isr2 !=0){
    print_msg(GREEN,"Driver loaded success!!");
    sprintf (str,"Found packet driver entry at 0x%2X.", packet_isr2);
    print_msg(YELLOW,str);
    }
 else{
    print_msg(RED,"Driver loaded fial!!");
    print_msg(RED, "Error: No packet driver entry found between 0x60-0x80.");
    error_code=0x22;
    return 2;
    }
 if(!set_access_type(packet_isr2,&packet_handle2,receive_handler2) ) {
    print_msg(RED, "Error: Card2 cannot register as a protocol stack.");
    error_code=0x23;
    return 3;
    }
 if(!get_address(packet_isr2,packet_handle2,(char *)ether_id2)) {
    print_msg(RED, "Error : Card2 cannot get the NIC Ethernet address.");
    error_code=0x24;
    return 4;
    }
 if(!set_rcv_mode(packet_isr2, packet_handle2,3)) {
    print_msg(RED, "Error : Card2 cannot set the NIC receive mode.");
    error_code=0x25;
    return 5;
    }
 return 0;
}

int release_drv(int x)
{

 if (!release_type(packet_isr1, packet_handle1)) {
     print_msg(RED, "Card1 ERROR-3:  cannot deregister a protocol stack.");
     return 3;
     }
 if (!release_type(packet_isr2, packet_handle2)) {
    print_msg(RED, "Card2 ERROR-3:  cannot deregister a protocol stack.");
    return 3;
    }
 print_msg(GREEN,"Release server and client packet driver ....");
 system("mtdpkt -u 0x61 > nul");

  system("e100bpkt -u >nul");
  print_OX(x);
}

⌨️ 快捷键说明

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