]> git.sur5r.net Git - ngadmin/blob - cli/common.c
CLI: added the possibility to interrupt hanging commands with CTRL+C.
[ngadmin] / cli / common.c
1
2 #include "common.h"
3
4
5
6
7
8
9
10 void printErrCode (int err) {
11  
12  
13  switch ( err ) {
14   case ERR_OK: /*printf("ok\n");*/ break;
15   case ERR_NET: printf("network error\n"); break;
16   case ERR_NOTLOG: printf("no switch selected\n"); break;
17   case ERR_BADPASS: printf("wrong password\n"); break;
18   case ERR_BADID: printf("bad switch id\n"); break;
19   case ERR_INVARG: printf("invalid argument\n"); break;
20   case ERR_TIMEOUT: printf("timeout\n"); break;
21   case ERR_NOTIMPL: printf("not implemented\n"); break;
22   default: printf("unknown status code (%i)\n", err);
23  }
24  
25  
26 }
27
28
29
30
31 const char* bitrates[]={
32  "nl", 
33  "512K", 
34  "1M", 
35  "2M",  
36  "4M", 
37  "8M", 
38  "16M", 
39  "32M", 
40  "64M", 
41  "128M", 
42  "256M", 
43  "512M", 
44  NULL
45 };
46
47
48 const char* prio[]={
49  NULL, 
50  "high", 
51  "medium", 
52  "normal", 
53  "low", 
54  NULL
55 };
56
57
58 int parseBitrate (const char *s) {
59  
60  int i;
61  
62  
63  for (i=0; bitrates[i]!=NULL && strcasecmp(bitrates[i], s)!=0; ++i);
64  
65  
66  return i;
67  
68 }
69
70
71
72 char parsePrio (const char *s) {
73  
74  int i;
75  
76  
77  for (i=1; prio[i]!=NULL && strcasecmp(prio[i], s)!=0; ++i);
78  
79  
80  return (char)i;
81  
82 }
83
84
85
86 void displaySwitchTab (const struct swi_attr *sa, int nb) {
87  
88  int i=0;
89  
90  
91  if ( nb==0 ) {
92   printf("no switch found\n");
93   return;
94  }
95  
96  
97  printf("Num\tMac\t\t\tProduct\t\tName\t\t\tIP/mask\t\t\tDHCP\tPorts\tFirmware\n");
98  
99  for (i=0; i<nb; ++i) {
100   printf("%i\t%s\t%s\t%s\t\t%s/", i, ether_ntoa(&sa[i].mac), sa[i].product, sa[i].name, inet_ntoa(sa[i].nc.ip));
101   printf("%s\t%s\t%i\t%s\n", inet_ntoa(sa[i].nc.netmask), ( sa[i].nc.dhcp ? "Yes" : "No" ), sa[i].ports, sa[i].firmware);
102  }
103  
104  printf("\nfound %i switch(es)\n", nb);
105  
106  
107 }
108
109
110
111 // ----------------------------
112 int trim (char *txt, int start) {
113  
114  char *p, c;
115  
116  
117  if ( txt==NULL ) {
118   return 0;
119  }
120  
121  //for (p=txt; *p!=0; p++);
122  p=txt+start;
123  for (p--; p>=txt && ( (c=*p)==' ' || c=='\n' ); *p--=0);
124  
125  
126  return p-txt+1;
127  
128 }
129
130
131
132 // --------------------------------------------------------
133 int explode (const char *commande, char** tab, int maximum) {
134  
135  const char *start, *end;
136  char c;
137  int n=0, len;
138  
139  
140  for (end=commande; ; n++) {
141   
142   for (start=end; (c=*start)==' ' && c!=0; start++);
143   for (end=start; ( (c=*end)!=' ' || n>=maximum-1 ) && c!=0; end++);
144   
145   if ( (len=end-start)==0 ) {
146    break;
147   }
148   
149   tab[n]=malloc(sizeof(char)*(len+1));
150   memcpy(tab[n], start, len);
151   tab[n][len]=0;
152   
153  }
154  
155  
156  return n;
157  
158 }
159
160