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; }
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); }
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); }