Added tx/rx to connections and smaller issues
[olsrd.git] / src / olsr_switch / ohs_cmd.c
1
2 /*
3  * The olsr.org Optimized Link-State Routing daemon(olsrd)
4  * Copyright (c) 2005, Andreas T√łnnesen(andreto@olsr.org)
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without 
8  * modification, are permitted provided that the following conditions 
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright 
12  *   notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above copyright 
14  *   notice, this list of conditions and the following disclaimer in 
15  *   the documentation and/or other materials provided with the 
16  *   distribution.
17  * * Neither the name of olsr.org, olsrd nor the names of its 
18  *   contributors may be used to endorse or promote products derived 
19  *   from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
32  * POSSIBILITY OF SUCH DAMAGE.
33  *
34  * Visit http://www.olsr.org for more information.
35  *
36  * If you find this software useful feel free to make a donation
37  * to the project. For more information see the website or contact
38  * the copyright holders.
39  *
40  * $Id: ohs_cmd.c,v 1.3 2005/05/30 20:24:54 kattemat Exp $
41  */
42
43 #include "olsr_host_switch.h"
44 #include "olsr_types.h"
45 #include "commands.h"
46 #include <string.h>
47
48 #define ARG_BUF_SIZE 500
49 static char arg_buf[ARG_BUF_SIZE];
50
51 static void
52 get_arg_buf(FILE *handle, char *buf, size_t size)
53 {
54   char c = 0;
55   int pos = 0;
56
57   while(((c = fgetc(handle)) != '\n') &&
58         pos < (size - 2))
59     {
60       buf[pos] = c;
61       pos++;
62     }
63
64   buf[pos] = 0;
65
66   printf("Args: %s\n", buf);
67 }
68
69
70 int
71 ohs_cmd_list(FILE *handle, char *args)
72 {
73   struct ohs_connection *oc = ohs_conns;
74
75   printf("All connected clients:\n");
76
77   while(oc)
78     {
79       printf("\t%s - Rx: %d Tx: %d\n", olsr_ip_to_string(&oc->ip_addr), oc->rx, oc->tx);
80       oc = oc->next;
81     }
82
83   return 1;
84 }
85
86 int
87 ohs_cmd_help(FILE *handle, char *args)
88 {
89   int i;
90
91   printf("Olsrd host switch version %s\n", OHS_VERSION);
92   printf("Available commands:\n");
93
94   for(i = 0; ohs_commands[i].cmd; i++)
95     {
96       if(ohs_commands[i].helptext_brief)
97         printf("\t%s - %s\n", 
98                ohs_commands[i].cmd,
99                ohs_commands[i].helptext_brief);
100     }
101   printf("\nType 'help cmd' for help on a specific command(NIY)\n");
102   return i;
103 }
104
105 int
106 ohs_cmd_log(FILE *handle, char *args)
107 {
108   olsr_u8_t set = 0;
109
110   set = !strncmp(args, " set", strlen(" set"));
111
112   if(set || !strncmp(args, " unset", strlen(" unset")))
113     {
114       if(strlen(args) > (strlen("set") + 1))
115         {
116           olsr_u32_t new_bit = 0;
117           
118           if(!strncmp(&args[set ? 4 : 6], " CON", strlen(" CON")))
119             new_bit = LOG_CONNECT;
120           else if(!strncmp(&args[set ? 4 : 6], " FOR", strlen(" FOR")))
121             new_bit = LOG_CONNECT;
122           
123           if(!new_bit)
124             goto print_usage;
125
126           if(set)
127             logbits |= new_bit;
128           else
129             logbits &= ~new_bit;
130
131           printf("%s log bit: 0x%08x, new log: 0x%08x\n", set ? "Setting" : "Removing",
132                  new_bit, logbits);
133
134         }
135       else
136         {
137           goto print_usage;
138         }
139     }
140   else
141     {
142       if(strlen(args))
143         goto print_usage;
144
145       printf("Log: (0x%08x) ", logbits);
146       if(logbits & LOG_CONNECT)
147         printf("CONNECT ");
148       if(logbits & LOG_FORWARD)
149         printf("FORWARD ");
150
151       printf("\n");
152     }
153   return 1;
154
155  print_usage:
156   printf("Usage: log <[set|unset] [CONNECT|FORWARD]>\n");
157   return 0;
158
159 }
160
161 int
162 ohs_cmd_exit(FILE *handle, char *args)
163 {
164
165   printf("Exitting... bye-bye!\n");
166
167 #ifdef WIN32
168   SignalHandler(0);
169 #else
170   ohs_close(0);
171 #endif
172
173   return 0;
174 }
175
176 int
177 ohs_parse_command(FILE *handle)
178 {
179   char input_data[100];
180   int i;
181
182   fscanf(handle, "%s", input_data);
183
184   get_arg_buf(handle, arg_buf, ARG_BUF_SIZE);
185
186   printf("ohs_parse_command: %s\n", input_data);
187   for(i = 0; ohs_commands[i].cmd; i++)
188     {
189       if(!strcmp(input_data, ohs_commands[i].cmd))
190         {
191           if(ohs_commands[i].cmd_cb)
192             {
193               ohs_commands[i].cmd_cb(handle, arg_buf);
194             }
195           else
196             {
197               printf("No action registered on cmd %s!\n", input_data);
198             }
199           break;
200         }
201     }
202   
203   if(!ohs_commands[i].cmd)
204     {
205       printf("%s: no such cmd!\n", input_data);
206     }
207
208
209   return 0;
210 }