47 #if defined(__linux__) || defined(__FreeBSD__) 54 #define ONEMBIT (1000000ULL) 61 "replay4ga_largefile_example [-h][-p <port no.>][-f <file name>]\n" 62 "Example: replay4ga_largefile_example -p 1 -f mycapture.cap\n",
85 #if defined(WIN32) || defined (WIN64) 106 main(
int argc,
const char **argv)
120 uint64_t firstPacketTS = 0;
121 uint64_t lastPacketTS = 0;
122 uint64_t adapterTS = 0;
123 uint64_t timeDelta = 0;
124 uint64_t timeDeltaAdjust = 0;
126 uint64_t tx_time_for_last_pkt;
127 uint64_t segment_length = 0;
128 uint64_t last_segment_length = 0;
131 int last_pkt_size = 0;
134 #if defined(WIN32) || defined (WIN64) 137 struct sigaction newaction;
138 memset(&newaction, 0,
sizeof(newaction));
140 if (sigaction(SIGINT, &newaction, NULL) < 0) {
141 fprintf(stderr,
"Failed to register SIGINT sigaction.\n");
153 fprintf(stderr,
"NT_Init() failed: %s\n", errorBuffer);
158 if ((status =
NT_InfoOpen(&hInfo,
"replay")) != NT_SUCCESS) {
160 fprintf(stderr,
"NT_InfoOpen() failed: %s\n", errorBuffer);
167 if ((status =
NT_InfoRead(hInfo, &infoRead)) != NT_SUCCESS) {
169 fprintf(stderr,
"NT_InfoRead() failed: %s\n", errorBuffer);
197 fprintf(stderr,
"BUG: Unhandled port speed\n");
203 fprintf(stderr,
"Port %d has no link\n",
opt_port);
209 fprintf(stderr,
"Transmit is not possible on the selected port %d\n",
opt_port);
218 uint64_t totalSize = 0;
219 uint64_t totalSegments = 0;
225 fprintf(stderr,
"NT_NetFileOpen() failed: %s\n", errorBuffer);
230 if ((status =
NT_NetFileGet(hNetFile, &hNetBufFile)) != NT_SUCCESS) {
231 if (status == NT_STATUS_END_OF_FILE) {
232 fprintf(stderr,
"The file %s has no data\n",
opt_filename);
243 if (status != NT_STATUS_END_OF_FILE) {
245 last_pkt_size = NT_NET_GET_PKT_WIRE_LENGTH(hNetBufFile) + 20;
250 while (status != NT_STATUS_END_OF_FILE);
256 if ((status =
NT_ConfigOpen(&hConfig,
"replay")) != NT_SUCCESS) {
258 fprintf(stderr,
"NT_ConfigOpen() failed: %s\n", errorBuffer);
267 fprintf(stderr,
"NT_NetFileOpen() failed: %s\n", errorBuffer);
271 uint64_t requiredHostbuffer = totalSize / (1024UL * 1024UL);
272 printf(
"Required host buffer: %lu MiB (Actual size: %lu MiB)\n", totalSegments, requiredHostbuffer);
278 fprintf(stderr,
"NT_NetTxOpen() failed: %s\n", errorBuffer);
285 if ((status =
NT_ConfigRead(hConfig, &configRead)) != NT_SUCCESS) {
287 fprintf(stderr,
"NT_ConfigRead() failed: %s\n", errorBuffer);
294 tx_time_for_last_pkt = (last_pkt_size * 8 * 100000000ULL) / speed;
295 timeDeltaAdjust = lastPacketTS - firstPacketTS + tx_time_for_last_pkt;
298 timeDelta = (adapterTS - firstPacketTS) + 10000000000UL;
299 printf(
"Transfer starts in 10 seconds from now\n");
308 if ((status =
NT_ConfigWrite(hConfig, &configWrite)) != NT_SUCCESS) {
310 fprintf(stderr,
"NT_ConfigWrite() failed: %s\n", errorBuffer);
315 printf(
"Capture file duration: %.01fs\n", (
double)timeDeltaAdjust / 1000000000);
316 printf(
"NOTICE: First repetition may be slower than capture rate!\n");
319 if (netBufs == NULL) {
320 fprintf(stderr,
"Could not allocate tx segment pointer array\n");
324 for (uint32_t
i = 0;
i < totalSegments;
i++) {
325 if ((status =
NT_NetFileGet(hNetFile, &hNetBufFile)) != NT_SUCCESS) {
328 fprintf(stderr,
"NT_NetFileGet() failed: %s\n", errorBuffer);
335 fprintf(stderr,
"NT_NetTxGet() failed: %s\n", errorBuffer);
339 if (i == totalSegments - 1)
349 fprintf(stderr,
"NT_NetFileRelease() failed: %s\n", errorBuffer);
358 fprintf(stderr,
"NT_NetTxRelease() failed: %s\n", errorBuffer);
378 for (uint32_t
i = 0;
i < totalSegments;
i++) {
382 uint64_t segmentLen =
i + 1 == totalSegments ? last_segment_length : segment_length;
385 if ((status != NT_SUCCESS) && (status != NT_STATUS_TIMEOUT)) {
388 fprintf(stderr,
"NT_NetFileGet() failed: %s\n", errorBuffer);
391 }
while (status == NT_STATUS_TIMEOUT);
394 NT_NET_SET_PKT_TXSETCLOCK(hNetBufTx, 1);
401 fprintf(stderr,
"NT_NetTxRelease() failed: %s\n", errorBuffer);
416 if ((status =
NT_ConfigWrite(hConfig, &configWrite)) != NT_SUCCESS) {
418 fprintf(stderr,
"NT_ConfigWrite() failed: %s\n", errorBuffer);