]> git.sur5r.net Git - gsconf/blob - shell_vlan.c
Initial Commit
[gsconf] / shell_vlan.c
1 #include "shell.h"
2
3 void shell_vlan(char ** argv, int elem) {
4
5         int n, m, o;
6         
7         if (elem == 1) {
8         
9                 return;
10         }
11         if (strncmp(argv[1], "show", 4) == 0) {
12                 struct vlan * vl = settings.vlans;
13                 
14                 if (vl == NULL) {
15                         printf("NO Vlans\n");
16                         return;
17                 } else
18                         printf("Vlans\n");
19                 
20                 while (vl != NULL) {
21                         printf("%u\t", vl->id);
22                         for (n = 0; n < 5; n++)
23                                 printf("%s\t", vl->members & (0x80 >> n) ? (vl->tag & (0x80 >> n) ? "\033[93mT\033[0m" : "\033[92mU\033[0m") : "\033[91m-\033[0m", (unsigned int) vl->members);
24                         printf("\n");
25                         vl = vl->next;
26                 }
27                 
28         }else if (strncmp(argv[1], "add", 3) == 0) {
29                 if (elem != 3) {
30                         printf("You need to provide a vlan ID to add!\n");
31                         return;
32                 }
33                 n = atoi(argv[2]);
34                 if (n <= 0) {
35                         printf("Invalid id!\n");
36                         return;
37                 }
38                 password();
39                 printError(gs105e_addVlan(n));
40         }else if (strncmp(argv[1], "del", 3) == 0) {
41                 
42                 if (elem != 3) {
43                         printf("You need to provide a vlan ID to add!\n");
44                         return;
45                 }
46                 n = atoi(argv[2]);
47                 
48                 struct vlan * vl = settings.vlans;
49                 
50                 while (vl != NULL) {
51                         if (vl->id == n)
52                                 break;
53                         vl = vl->next;
54                 }
55                 if (vl == NULL)
56                         n = 0;
57                 
58                 if (n <= 0) {
59                         printf("Invalid id!\n");
60                         return;
61                 }
62                 password();
63                 printError(gs105e_delVlan(n));
64         }else if (strncmp(argv[1], "assign", 6) == 0) {
65                 if (elem != 5) {
66                         printf("vlan assign [vlan ID] [port ID] [T|U]\n");
67                         return;
68                 }       
69                 int n = atoi(argv[2]);
70                 struct vlan * vl = settings.vlans;
71                 
72                 while (vl != NULL) {
73                         if (vl->id == n)
74                                 break;
75                         vl = vl->next;
76                 }
77                 if (vl == NULL)
78                         n = 0;
79                 
80                 if (n <= 0) {
81                         printf("Invalid Vlan ID\n");
82                         return;
83                 }
84                 
85                 m = atoi(argv[3]);
86                 
87                 if (m < 1 | m > 5) {
88                         printf("Invalid Port ID\n");
89                         return;
90                 }         
91                 
92                 m  = (0x80 >> ((m & 0xFF) - 1))  | (int)vl->members;
93                 
94                 if (strncmp(argv[4], "T", 1) == 0) {
95                         o = (int)vl->tag | m;
96                 }else if (strncmp(argv[4], "U", 1) == 0) {
97                         o = (int)vl->tag &(~((char)m));
98                 }
99                 password();
100                 printError(gs105e_setVlanMembers(n, m, o));
101                 
102         }else if (strncmp(argv[1], "revoke", 6) == 0) {
103                 if (elem != 4) {
104                         printf("vlan revoke [vlan ID] [port ID]\n");
105                         return;
106                 }       
107                 int n = atoi(argv[2]);
108                 struct vlan * vl = settings.vlans;
109                 
110                 while (vl != NULL) {
111                         if (vl->id == n)
112                                 break;
113                         vl = vl->next;
114                 }
115                 if (vl == NULL)
116                         n = 0;
117                 
118                 if (n <= 0) {
119                         printf("Invalid Vlan ID\n");
120                         return;
121                 }
122                 
123                 m = atoi(argv[3]);
124                 
125                 if (m < 1 | m > 5) {
126                         printf("Invalid Port ID\n");
127                         return;
128                 }         
129                 
130                 m  = (~(0x80 >> ((m & 0xFF) - 1)))  & (int)vl->members;
131                 
132
133                 o = (int)vl->tag &(~((char)m));
134
135                 password();
136                 printError(gs105e_setVlanMembers(n, m, o));
137                 
138         }
139 }