47 #if defined(__linux__) || defined(__FreeBSD__) || (__MINGW32__) 58 #define ONEMBIT (1000000ULL) 65 "replay4ga_loop_example [-h][-p <port no.>][-f <file name>][-n <number of iterations> [-s <replay speed in % of capture>]\n" 66 "Example: replay4ga_loop_example -p 1 -f mycapture.cap -n 10 -s 200\n",
85 OPT_INTEGER(
's',
"scale", &
opt_scale,
"Replay speed in % of captured speed\n", NULL, 0, 0,
"value"),
93 #if defined(WIN32) || defined (WIN64) 123 switch (data->tsType) {
131 return data->nativeUnixTs * 10;
136 main(
int argc,
const char **argv)
153 uint64_t firstPacketTS = 0;
154 uint64_t lastPacketTS = 0;
155 uint64_t adapterTS = 0;
156 uint64_t adapterEndTS = 0;
157 uint64_t timeDelta = 0;
158 uint64_t timeDeltaAdjust = 0;
160 uint64_t tx_time_for_last_pkt;
164 int set_tx_clock = 1;
165 int last_pkt_size = 0;
168 #if defined(WIN32) || defined (WIN64) 171 struct sigaction newaction;
172 memset(&newaction, 0,
sizeof(newaction));
174 if (sigaction(SIGINT, &newaction, NULL) < 0) {
175 fprintf(stderr,
"Failed to register SIGINT sigaction.\n");
194 fprintf(stderr,
"NT_Init() failed: %s\n", errorBuffer);
199 if ((status =
NT_InfoOpen(&hInfo,
"replay")) != NT_SUCCESS) {
201 fprintf(stderr,
"NT_InfoOpen() failed: %s\n", errorBuffer);
208 if ((status =
NT_InfoRead(hInfo, &infoRead)) != NT_SUCCESS) {
210 fprintf(stderr,
"NT_InfoRead() failed: %s\n", errorBuffer);
241 fprintf(stderr,
"BUG: Unhandled port speed\n");
247 fprintf(stderr,
"Port %d has no link\n",
opt_port);
253 fprintf(stderr,
"Transmit is not possible on the selected port %d\n",
opt_port);
272 fprintf(stderr,
"NT_NetFileOpen() failed: %s\n", errorBuffer);
277 if ((status =
NT_NetFileGet(hNetFile, &hNetBufFile)) != NT_SUCCESS) {
278 if (status == NT_STATUS_END_OF_FILE) {
279 fprintf(stderr,
"The file %s has no data\n",
opt_filename);
288 if (status != NT_STATUS_END_OF_FILE) {
290 last_pkt_size = NT_NET_GET_PKT_WIRE_LENGTH(hNetBufFile) + 20;
293 while (status != NT_STATUS_END_OF_FILE);
301 firstPacketTS = (firstPacketTS /
opt_scale) * 100;
302 lastPacketTS = (lastPacketTS /
opt_scale) * 100;
309 if ((status =
NT_ConfigOpen(&hConfig,
"replay")) != NT_SUCCESS) {
311 fprintf(stderr,
"NT_ConfigOpen() failed: %s\n", errorBuffer);
319 if ((status =
NT_ConfigRead(hConfig, &configRead)) != NT_SUCCESS) {
321 fprintf(stderr,
"NT_ConfigRead() failed: %s\n", errorBuffer);
335 tx_time_for_last_pkt = (last_pkt_size * 8 * 100000000ULL) / speed;
336 timeDeltaAdjust = lastPacketTS - firstPacketTS + tx_time_for_last_pkt;
339 timeDelta = (adapterTS - firstPacketTS) + 1000000000 - timeDeltaAdjust;
342 adapterEndTS = adapterTS + 2000000000 + (lastPacketTS - firstPacketTS) *
opt_num_repetitions;
351 if ((status =
NT_ConfigWrite(hConfig, &configWrite)) != NT_SUCCESS) {
353 fprintf(stderr,
"NT_ConfigWrite() failed: %s\n", errorBuffer);
362 fprintf(stderr,
"NT_NetFileOpen() failed: %s\n", errorBuffer);
370 fprintf(stderr,
"NT_NetTxOpen() failed: %s\n", errorBuffer);
379 if ((status =
NT_NetFileGet(hNetFile, &hNetBufFile)) != NT_SUCCESS) {
380 if (status == NT_STATUS_END_OF_FILE) {
389 fprintf(stderr,
"NT_NetFileGet() failed: %s\n", errorBuffer);
396 if ((status != NT_SUCCESS) && (status != NT_STATUS_TIMEOUT)) {
399 fprintf(stderr,
"NT_NetFileGet() failed: %s\n", errorBuffer);
402 }
while (status == NT_STATUS_TIMEOUT);
411 NT_NET_SET_PKT_TXSETCLOCK(hNetBufTx, 1);
422 numBytes += NT_NET_GET_PKT_WIRE_LENGTH((&pktNetBuf));
440 fprintf(stderr,
"NT_NetTxRelease() failed: %s\n", errorBuffer);
447 fprintf(stderr,
"NT_NetFileRelease() failed: %s\n", errorBuffer);
453 printf(
"Done scheduling packets - Waiting for completion...\n");
460 if ((status =
NT_ConfigRead(hConfig, &configRead)) != NT_SUCCESS) {
462 fprintf(stderr,
"NT_ConfigRead() failed: %s\n", errorBuffer);
470 if (adapterTS > adapterEndTS) {
491 if ((status =
NT_ConfigWrite(hConfig, &configWrite)) != NT_SUCCESS) {
493 fprintf(stderr,
"NT_ConfigWrite() failed: %s\n", errorBuffer);
502 printf(
"Done: %d packets %d bytes replayed\n", numPackets, numBytes);