Use decimal notation in a debug message
[madwifi/.git] / tools / athctrl.c
1 /*-
2  * Copyright (c) 2002-2004 Gunter Burchardt, Local-Web AG
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer,
10  *    without modification.
11  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
12  *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
13  *    redistribution must be conditioned upon including a substantially
14  *    similar Disclaimer requirement for further binary redistribution.
15  * 3. Neither the names of the above-listed copyright holders nor the names
16  *    of any contributors may be used to endorse or promote products derived
17  *    from this software without specific prior written permission.
18  *
19  * Alternatively, this software may be distributed under the terms of the
20  * GNU General Public License ("GPL") version 2 as published by the Free
21  * Software Foundation.
22  *
23  * NO WARRANTY
24  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26  * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
27  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
28  * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
29  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
32  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
34  * THE POSSIBILITY OF SUCH DAMAGES.
35  *
36  * $Id$
37  */
38
39 /*
40  * Simple Atheros-specific tool to inspect and set atheros specific values
41  * athctrl [-i interface] [-d distance]
42  * (default interface is wifi0).  
43  */
44 #include <sys/types.h>
45 #include <sys/file.h>
46
47 #include <getopt.h>
48
49 #include <stdio.h>
50 #include <string.h>
51 #include <stdlib.h>
52 #include <err.h>
53
54 #include <net/if.h>
55
56 static int
57 setsysctrl(const char *dev, const char *control , u_long value)
58 {
59         char buffer[256];
60         FILE * fd;
61
62         snprintf(buffer, sizeof(buffer), "/proc/sys/dev/%s/%s", dev, control);
63         fd = fopen(buffer, "w");
64         if (fd != NULL) {
65                 fprintf(fd, "%li", value);
66                 fclose(fd);
67         } else
68                 fprintf(stderr, "Could not open %s for writing!\n", buffer);
69
70         return 0;
71 }
72
73 static void usage(void)
74 {
75         fprintf(stderr,
76             "Atheros driver control\n"
77             "Copyright (c) 2002-2004 Gunter Burchardt, Local-Web AG\n"
78             "\n"
79             "usage: athctrl [-i interface] [-d distance]\n"
80             "\n"
81             "options:\n"
82             "   -h   show this usage\n"
83         "   -i   interface (default interface is wifi0)\n"
84             "   -d   specify the maximum distance of a sta or the distance\n"
85         "        of the master\n");
86
87         exit(1);
88 }
89
90 int
91 main(int argc, char *argv[])
92 {
93         char device[IFNAMSIZ + 1];
94         int distance = -1;
95         int c;
96
97         strncpy(device, "wifi0", sizeof (device));
98
99         for (;;) {
100                 c = getopt(argc, argv, "d:i:h");
101                 if (c < 0)
102                         break;
103                 switch (c) {
104                 case 'h':
105                         usage();
106                         break;
107                 case 'd':
108                         distance = atoi(optarg);
109                         break;
110                 case 'i':
111                         strncpy(device, optarg, sizeof (device));
112                         break;
113                 default:
114                         usage();
115                         break;
116                 }
117         }
118
119         if (distance >= 0) {
120                 printf("Setting distance on interface %s to %i meters\n",
121                         device, distance);
122                 setsysctrl(device, "distance", distance);
123         } else
124                 usage();
125         return 0;
126 }