About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / watchdog / src / watchdog-test.c




Custom Search

Based on kernel version 4.7.2. Page generated on 2016-08-22 22:48 EST.

1	/*
2	 * Watchdog Driver Test Program
3	 */
4	
5	#include <stdio.h>
6	#include <stdlib.h>
7	#include <string.h>
8	#include <unistd.h>
9	#include <fcntl.h>
10	#include <signal.h>
11	#include <sys/ioctl.h>
12	#include <linux/types.h>
13	#include <linux/watchdog.h>
14	
15	int fd;
16	
17	/*
18	 * This function simply sends an IOCTL to the driver, which in turn ticks
19	 * the PC Watchdog card to reset its internal timer so it doesn't trigger
20	 * a computer reset.
21	 */
22	static void keep_alive(void)
23	{
24	    int dummy;
25	
26	    ioctl(fd, WDIOC_KEEPALIVE, &dummy);
27	}
28	
29	/*
30	 * The main program.  Run the program with "-d" to disable the card,
31	 * or "-e" to enable the card.
32	 */
33	
34	static void term(int sig)
35	{
36	    close(fd);
37	    fprintf(stderr, "Stopping watchdog ticks...\n");
38	    exit(0);
39	}
40	
41	int main(int argc, char *argv[])
42	{
43	    int flags;
44	    unsigned int ping_rate = 1;
45	
46	    fd = open("/dev/watchdog", O_WRONLY);
47	
48	    if (fd == -1) {
49		fprintf(stderr, "Watchdog device not enabled.\n");
50		fflush(stderr);
51		exit(-1);
52	    }
53	
54	    if (argc > 1) {
55		if (!strncasecmp(argv[1], "-d", 2)) {
56		    flags = WDIOS_DISABLECARD;
57		    ioctl(fd, WDIOC_SETOPTIONS, &flags);
58		    fprintf(stderr, "Watchdog card disabled.\n");
59		    fflush(stderr);
60		    goto end;
61		} else if (!strncasecmp(argv[1], "-e", 2)) {
62		    flags = WDIOS_ENABLECARD;
63		    ioctl(fd, WDIOC_SETOPTIONS, &flags);
64		    fprintf(stderr, "Watchdog card enabled.\n");
65		    fflush(stderr);
66		    goto end;
67		} else if (!strncasecmp(argv[1], "-t", 2) && argv[2]) {
68		    flags = atoi(argv[2]);
69		    ioctl(fd, WDIOC_SETTIMEOUT, &flags);
70		    fprintf(stderr, "Watchdog timeout set to %u seconds.\n", flags);
71		    fflush(stderr);
72		    goto end;
73		} else if (!strncasecmp(argv[1], "-p", 2) && argv[2]) {
74		    ping_rate = strtoul(argv[2], NULL, 0);
75		    fprintf(stderr, "Watchdog ping rate set to %u seconds.\n", ping_rate);
76		    fflush(stderr);
77		} else {
78		    fprintf(stderr, "-d to disable, -e to enable, -t <n> to set " \
79			"the timeout,\n-p <n> to set the ping rate, and \n");
80		    fprintf(stderr, "run by itself to tick the card.\n");
81		    fflush(stderr);
82		    goto end;
83		}
84	    }
85	
86	    fprintf(stderr, "Watchdog Ticking Away!\n");
87	    fflush(stderr);
88	
89	    signal(SIGINT, term);
90	
91	    while(1) {
92		keep_alive();
93		sleep(ping_rate);
94	    }
95	end:
96	    close(fd);
97	    return 0;
98	}
Hide Line Numbers
About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Information is copyright its respective author. All material is available from the Linux Kernel Source distributed under a GPL License. This page is provided as a free service by mjmwired.net.