99 #if defined(__linux__) || defined(__FreeBSD__) 102 #elif defined(WIN32) || defined (WIN64) 103 #include <winsock2.h> 121 "USAGE: bypass_watchdog_example [-a <adapter> | -p <port>] -t <watchdogTimeoutMsec> -s <watchdogDelayMsec>\n",
133 #if defined(WIN32) || defined (WIN64) 158 OPT_INTEGER(
'a', NULL, &adapterNo,
"Adapter Number", NULL, 0, 0,
"adapter number"),
159 OPT_INTEGER(
'p', NULL, &portNo,
"Port Number", NULL, 0, 0,
"port number"),
160 OPT_INTEGER(
't', NULL, &watchdogTimeoutMsec,
"Watchdog Timeout in msec", NULL, 0, 0,
"msec"),
161 OPT_INTEGER(
's', NULL, &watchdogDelayMsec,
"Watchdog Delay in msec", NULL, 0, 0,
"msec"),
168 int main(
int argc,
const char *argv[])
191 int iterationCount = 0;
192 int bypassFeatureFound = 0;
201 if ((watchdogTimeoutMsec == -1) || (watchdogDelayMsec == -1) || (adapterNo == -1 && portNo == -1) || (adapterNo != -1 && portNo != -1)) {
207 #if defined(WIN32) || defined (WIN64) 210 struct sigaction newaction;
211 memset(&newaction, 0,
sizeof(newaction));
213 if (sigaction(SIGINT, &newaction, NULL) < 0) {
214 fprintf(stderr,
"Failed to register sigaction.\n");
220 memset(&configBypassState, 0,
sizeof(configBypassState));
221 memset(&saveBypassState, 0,
sizeof(saveBypassState));
222 memset(&configBypassWatchdogTimeout, 0,
sizeof(configBypassWatchdogTimeout));
223 memset(&configBypassWatchdogTimer, 0,
sizeof(configBypassWatchdogTimer));
228 fprintf(stderr,
">>> Error: NT_Init failed. Code 0x%x = %s\n", status, errBuf);
234 if (status != NT_SUCCESS) {
236 fprintf(stderr,
">>> Error: NT_ConfigOpen failed. Code 0x%x = %s\n", status, errBuf);
241 if ((status =
NT_InfoOpen(&hInfo,
"bypass_watchdog_example")) != NT_SUCCESS) {
243 fprintf(stderr,
">>> Error: NT_InfoOpen failed. Code 0x%x = %s\n", status, errBuf);
249 if ((status =
NT_InfoRead(hInfo, &infoSystem)) != NT_SUCCESS) {
251 fprintf(stderr,
">>> Error: NT_InfoRead failed. Code 0x%x = %s\n", status, errBuf);
263 if ( adapterNo != -1 && portNo == -1) {
264 printf(
"Adapter: %d\n", adapterNo);
266 printf(
"Port: %d\n", portNo);
268 printf(
"watchdogTimeoutMsec: %d\n", watchdogTimeoutMsec);
269 printf(
"watchdogDelayMsec: %d\n", watchdogDelayMsec);
279 if ( adapterNo != -1 && portNo == -1) {
282 if ((status =
NT_InfoRead(hInfo, &infoAdapter)) != NT_SUCCESS) {
284 fprintf(stderr,
">>> Error: NT_InfoRead failed. Code 0x%x = %s\n", status, errBuf);
291 printf(
"Adapter #%d has bypass feature\n", adapterNo);
292 bypassFeatureFound++;
300 for (port = 0; port < portCount; port++) {
303 if ((status =
NT_InfoRead(hInfo, &infoPort)) != 0) {
305 fprintf(stderr,
">>> Error: NT_InfoRead failed. Code 0x%x = %s\n", status, errBuf);
309 printf(
"Port #%d has bypass feature\n", portBegin + port);
310 bypassFeatureFound++;
317 if ( adapterNo != -1 && portNo == -1) {
318 printf(
"Adapter #%d: ", adapterNo);
320 printf(
"Port #%d: ", portNo);
323 if ( bypassFeatureFound != 0) {
324 printf(
"bypass feature found: OK\n\n");
326 printf(
"ERROR: bypass feature NOT found\n\n");
335 if ( adapterNo != -1 && portNo == -1) {
342 if ((status =
NT_ConfigRead(hConfig, &configBypassState)) != 0) {
344 fprintf(stderr,
">>> Error: NT_ConfigRead failed. Code 0x%08X = %s\n", status, errBuf);
349 saveBypassState = configBypassState;
356 for (port = 0; port < portCount; port++) {
359 if ((status =
NT_ConfigRead(hConfig, &configBypassState)) != 0) {
361 fprintf(stderr,
">>> Error: NT_ConfigRead failed. Code 0x%08X = %s\n", status, errBuf);
373 if ( adapterNo != -1 && portNo == -1) {
384 if ((status =
NT_ConfigWrite(hConfig, &configBypassState)) != 0) {
386 fprintf(stderr,
">>> Error: NT_ConfigWrite failed. Code 0x%08X = %s\n", status, errBuf);
392 if ( adapterNo != -1 && portNo == -1) {
400 if ((status =
NT_ConfigWrite(hConfig, &configBypassWatchdogTimeout)) != 0) {
402 fprintf(stderr,
">>> Error: NT_ConfigWrite failed. Code 0x%08X = %s\n", status, errBuf);
403 if (status == NT_ERROR_WATCHDOG_TIMEOUT_OUT_OF_RANGE) {
406 fprintf(stderr,
"\nRestoring previous bypass state\n");
407 configBypassState = saveBypassState;
410 if ( adapterNo != -1 && portNo == -1) {
417 if ((status =
NT_ConfigWrite(hConfig, &configBypassState)) != 0) {
419 fprintf(stderr,
">>> Error: NT_ConfigWrite failed. Code 0x%08X = %s\n", status, errBuf);
427 for (port = 0; port < portCount; port++) {
431 if ((status =
NT_ConfigWrite(hConfig, &configBypassState)) != 0) {
433 fprintf(stderr,
">>> Error: NT_ConfigWrite failed. Code 0x%08X = %s\n", status, errBuf);
454 if ( adapterNo != -1 && portNo == -1) {
463 if ((status =
NT_ConfigWrite(hConfig, &configBypassWatchdogTimer)) != 0) {
466 fprintf(stderr,
">>> Error: NT_ConfigRead failed. Code 0x%08X = %s\n", status, errBuf);
473 printf(
"INFO: watchdog ping response : %s=%d wdt_timeout=%u msec wdt_remaining=%u msec iteration=%u\n", (portNo!=-1?
"port":
"adapter"), (portNo!=-1?portNo:adapterNo), bypassWatchdogTimerData->
bypassWatchdogTimeout, bypassWatchdogTimerData->
bypassWatchdogTimeRemaining, iterationCount);
478 fprintf(stderr,
"\n");
479 fprintf(stderr,
"STOP: watchdog ping response : %s=%d wdt_timeout=%u msec wdt_remaining=%u msec iteration=%u\n", (portNo!=-1?
"port":
"adapter"), (portNo!=-1?portNo:adapterNo), bypassWatchdogTimerData->
bypassWatchdogTimeout, bypassWatchdogTimerData->
bypassWatchdogTimeRemaining, iterationCount);
480 fprintf(stderr,
"\n");
487 if (watchdogDelayMsec >= 1) {
488 #if defined(__linux__) || defined(__FreeBSD__) 489 usleep(watchdogDelayMsec*1000U);
490 #elif defined(WIN32) || defined (WIN64) 491 Sleep(watchdogDelayMsec);