예제 #1
0
void newpf( char *pfile)
 {
 
     elog_complain( 0, "Re-reading parameter file to get new settings..." );
     initpf( pffile ); 
     Packets == NULL; init_packets();
     StaID == NULL; init_StaID();
     StaCh == NULL; init_StaCh();
     
     elog_complain( 0, "Done.\n");
   return;
 }
예제 #2
0
파일: ether.c 프로젝트: aunali1/exopc
void do_client ()
{
   struct ae_recv *packet;
   int ret;
   int pktsent = 0, ackrecv = 0;

   init ();
   setnetcardno (eth_myaddr);

	/* set up pktring and get DPF filter for proper UDP packets */
   xio_net_wrap_init (&nwinfo, malloc(32 * 4096), (32 * 4096));
printf ("getting dpf: dstportno %x (%d), srcportno %x (%d)\n", dstportno, dstportno, srcportno, srcportno);
   ret = xio_net_wrap_getdpf_udp (&nwinfo, dstportno, srcportno);
   assert (ret != -1);

   init_packets ();

	/* construct and send start packet */
   setup_start_packet (outpkt, pktcnt, pktdata, ackfreq, ackdata);
printf ("sending packet: netcardno %d, dstportno %02x %02x, srcportno %02x %02x\n", netcardno, outpkt->r[0].data[36], outpkt->r[0].data[37], outpkt->r[0].data[34], outpkt->r[0].data[35]);
   send_packet (netcardno, outpkt);

	/* setup data packet */
   setup_data_packet (outpkt);

	/* get ack.  start timer. */
   //while ((packet = xio_net_wrap_getPacket(&nwinfo)) == NULL) ;
   //xio_net_wrap_returnPacket (&nwinfo, packet);
//
//printf ("got ack\n");

	/* send packets, and wait for acks when appropriate */
   while (pktsent < pktcnt) {
#ifndef DIRECT_XMIT
      ((struct pkt *)outpkt->r[0].data)->id = pktsent;
#endif
      send_packet (netcardno, outpkt);
      pktsent++;
      if ((ackfreq) && ((pktsent % ackfreq) == 0)) {
         while ((packet = xio_net_wrap_getPacket(&nwinfo)) == NULL) ;
         assert (packet->r[0].sz == max(64,(sizeof(struct pkt) + ackdata - 4)));
         xio_net_wrap_returnPacket (&nwinfo, packet);
         ackrecv++;
      }
   }

	/* when sent "pktcnt" packets, get time send stop packet */
   setup_stop_packet (outpkt);
   send_packet (netcardno, outpkt);

   /* print results */
   printf ("packets sent %d (%d acks)\n", pktsent, ackrecv);
}
예제 #3
0
파일: ether.c 프로젝트: aunali1/exopc
void do_server ()
{
   struct ae_recv *packet;
   int ret;
   int pktrecv = 0;
   int acksent = 0;
   int gotstop = 0;
   int printmismatch;
   int adjust;

	/* se  up pktring and get DPF filter for proper UDP packets */
   xio_net_wrap_init (&nwinfo, malloc(32 * 4096), (32 * 4096));
printf ("getting dpf: dstportno %x (%d), srcportno %x (%d)\n", dstportno, dstportno, -1, -1);
   ret = xio_net_wrap_getdpf_udp (&nwinfo, dstportno, -1);
   assert (ret != -1);

	/* wait for start packet */
   while ((packet = xio_net_wrap_getPacket(&nwinfo)) == NULL) ;

printf ("got packet: dstportno %02x %02x, srcportno %02x %02x\n", packet->r[0].data[36], packet->r[0].data[37], packet->r[0].data[34], packet->r[0].data[35]);

	/* set up proper variables, send ack packet and start timer */
   process_start_packet ((struct start_pkt *) packet->r[0].data);
   setnetcardno (packet->r[0].data);
   xio_net_wrap_returnPacket (&nwinfo, packet);
   init_packets ();
   setup_startack_packet (outpkt);
printf ("sending packet: netcardno %d, dstportno %02x %02x, srcportno %02x %02x\n", netcardno, outpkt->r[0].data[36], outpkt->r[0].data[37], outpkt->r[0].data[34], outpkt->r[0].data[35]);
   send_packet (netcardno, outpkt);

	/* get Packets, check their size, ack when appropriate */
   printmismatch = 1;
   adjust = 0;
   while (pktrecv < pktcnt) {
      while ((packet = xio_net_wrap_getPacket(&nwinfo)) == NULL) ;
      if (is_stop_pkt (packet)) {
         gotstop = 1;
         break;
      }
#ifndef DIRECT_XMIT
      if ((printmismatch) && (((struct pkt *)packet->r[0].data)->id != (pktrecv+adjust))) {
         //printf ("out of order packet: id %d, expected %d (adjust %d)\n", ((struct pkt *)packet->r[0].data)->id, pktrecv, adjust);
         //printmismatch = 0;
         adjust = ((struct pkt *)packet->r[0].data)->id - pktrecv;
      }
#endif
      assert (packet->r[0].sz == max(64,(sizeof(struct pkt) + pktdata - 4)));
      xio_net_wrap_returnPacket (&nwinfo, packet);
      pktrecv++;
      if ((ackfreq) && ((pktrecv % ackfreq) == 0)) {
         setup_dataack_packet (outpkt);
         send_packet (netcardno, outpkt);
         acksent++;
      }
   }

   /* when stop packet received, get time */

   /* print results */
   printf ("packets received %d (acks %d)   (gotstop %d)\n", pktrecv, acksent, gotstop);
}