152 #if defined(__linux__) || defined(__FreeBSD__) 155 #include <stdatomic.h> 160 #if defined(WIN32) || defined (WIN64) 161 #define snprintf(dst, ...) _snprintf_s((dst), _countof(dst), __VA_ARGS__) 172 #if defined(WIN32) || defined (WIN64) 191 int numPacketsDiscard=0;
192 int numBytesDiscard=0;
204 const char *ntplFilter;
208 #if defined(WIN32) || defined (WIN64) 211 struct sigaction newaction;
212 memset(&newaction, 0,
sizeof(newaction));
214 if (sigaction(SIGINT, &newaction, NULL) < 0) {
215 fprintf(stderr,
"Failed to register SIGINT sigaction.\n");
221 if ((status =
NT_Init(NTAPI_VERSION)) != NT_SUCCESS) {
224 fprintf(stderr,
"NT_Init() failed: %s\n", errorBuffer);
228 if ((status =
NT_InfoOpen(&hInfo,
"inline_example")) != NT_SUCCESS) {
231 fprintf(stderr,
"NT_InfoOpen() failed: %s\n", errorBuffer);
238 if ((status =
NT_InfoRead(hInfo, &info)) != NT_SUCCESS) {
241 fprintf(stderr,
"NT_InfoRead() failed: %s\n", errorBuffer);
248 if ((status =
NT_InfoRead(hInfo, &info)) != NT_SUCCESS) {
251 fprintf(stderr,
"NT_InfoRead() failed: %s\n", errorBuffer);
261 if ((status =
NT_InfoRead(hInfo, &info)) != NT_SUCCESS) {
264 fprintf(stderr,
"NT_InfoRead() failed: %s\n", errorBuffer);
return -1;
280 fprintf(stderr,
"NT_InfoClose() failed: %s\n", errorBuffer);
285 if (!isTxSupported) {
286 fprintf(stderr,
"error: Tx is not supported on this adapter.\n");
291 if ((status =
NT_ConfigOpen(&hCfgStream,
"TestStream")) != NT_SUCCESS) {
294 fprintf(stderr,
"NT_ConfigOpen() failed: %s\n", errorBuffer);
301 if ((status =
NT_NTPL(hCfgStream,
"Setup[TxDescriptor=Dyn;TxPorts=0;UseWL=True;TxIgnorePos=41] = StreamId == 1",
305 fprintf(stderr,
"NT_NTPL() failed: %s\n", errorBuffer);
312 ntplFilter =
"Assign[streamid=1;color=7;Descriptor=Dyn3] = All";
314 ntplFilter =
"Assign[streamid=1;color=7;txport=1] = All";
320 fprintf(stderr,
"NT_NTPL() failed: %s\n", errorBuffer);
332 fprintf(stderr,
"NT_ConfigClose() failed: %s\n", errorBuffer);
340 fprintf(stderr,
"NT_NetRxOpen() failed: %s\n", errorBuffer);
345 printf(
"Waiting for the first packet\n");
347 if ((status =
NT_NetRxGet(hNetRx, &hNetBuf, 1000)) != NT_SUCCESS) {
348 if ((status == NT_STATUS_TIMEOUT) || (status == NT_STATUS_TRYAGAIN)) {
354 fprintf(stderr,
"NT_NetRxGet() failed: %s\n", errorBuffer);
365 fprintf(stderr,
"NT_NetRxRelease() failed: %s\n", errorBuffer);
382 NT_NET_SET_PKT_TXIGNORE(hNetBuf, 1);
385 numBytesDiscard+=NT_NET_GET_PKT_WIRE_LENGTH(hNetBuf);
387 printf(
"Discarded: %016llx - %d bytes\n", (
unsigned long long)
NT_NET_GET_PKT_TIMESTAMP(hNetBuf), NT_NET_GET_PKT_WIRE_LENGTH(hNetBuf));
390 numBytes+=NT_NET_GET_PKT_WIRE_LENGTH(hNetBuf);
392 printf(
"Forwarded: %016llx - %d bytes\n", (
unsigned long long)
NT_NET_GET_PKT_TIMESTAMP(hNetBuf), NT_NET_GET_PKT_WIRE_LENGTH(hNetBuf));
402 fprintf(stderr,
"NT_NetRxRelease() failed: %s\n", errorBuffer);
408 if ((status =
NT_NetRxGet(hNetRx, &hNetBuf, 1000)) != NT_SUCCESS) {
409 if ((status == NT_STATUS_TIMEOUT) || (status == NT_STATUS_TRYAGAIN)) {
415 fprintf(stderr,
"NT_NetRxGet() failed: %s\n", errorBuffer);
423 if ((status =
NT_ConfigOpen(&hCfgStream,
"TestStream")) != NT_SUCCESS) {
426 fprintf(stderr,
"NT_ConfigOpen() failed: %s\n", errorBuffer);
431 snprintf(tmpBuffer,
sizeof(tmpBuffer),
"delete=%d", ntplInfo.
ntplId);
435 fprintf(stderr,
"NT_NTPL() failed: %s\n", errorBuffer);
447 fprintf(stderr,
"NT_ConfigClose() failed: %s\n", errorBuffer);
454 printf(
"Done: Discarded %d packets out of %d, %d bytes out of %d\n",
455 numPacketsDiscard, numPackets+numPacketsDiscard, numBytes, numBytes+numBytesDiscard);