Mercurial > hg > toybox
annotate toys/pending/brctl.c @ 1166:8b3cf974c66d draft
An implementation for brctl (ethernet bridge control).
author | Ashwini Sharma <ak.ashwini1981@gmail.com> |
---|---|
date | Thu, 26 Dec 2013 09:37:03 -0600 |
parents | |
children | 0ecfaa7022e8 |
rev | line source |
---|---|
1166
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
1 /* brctl.c - ethernet bridge control |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
2 * |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
3 * Copyright 2013 Ashwini Kumar <ak.ashwini1981@gmail.com> |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
4 * Copyright 2013 Kyungwan Han <asura321@gmail.com> |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
5 * |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
6 * No Standard |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
7 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
8 USE_BRCTL(NEWTOY(brctl, "<1", TOYFLAG_USR|TOYFLAG_SBIN)) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
9 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
10 config BRCTL |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
11 bool "brctl" |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
12 default n |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
13 help |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
14 Usage: brctl COMMAND [BRIDGE [INTERFACE]] |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
15 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
16 Manage ethernet bridges |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
17 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
18 Commands: |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
19 show Show a list of bridges |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
20 addbr BRIDGE Create BRIDGE |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
21 delbr BRIDGE Delete BRIDGE |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
22 addif BRIDGE IFACE Add IFACE to BRIDGE |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
23 delif BRIDGE IFACE Delete IFACE from BRIDGE |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
24 setageing BRIDGE TIME Set ageing time |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
25 setfd BRIDGE TIME Set bridge forward delay |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
26 sethello BRIDGE TIME Set hello time |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
27 setmaxage BRIDGE TIME Set max message age |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
28 setpathcost BRIDGE PORT COST Set path cost |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
29 setportprio BRIDGE PORT PRIO Set port priority |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
30 setbridgeprio BRIDGE PRIO Set bridge priority |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
31 stp BRIDGE [1/yes/on|0/no/off] STP on/off |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
32 */ |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
33 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
34 #define FOR_brctl |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
35 #include "toys.h" |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
36 #include <linux/if_bridge.h> |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
37 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
38 GLOBALS( |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
39 int sockfd; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
40 ) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
41 #define MAX_BRIDGES 1024 //same is no of ports supported |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
42 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
43 static void get_ports(char *bridge, int *indices) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
44 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
45 struct ifreq ifr; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
46 int ifindices[MAX_BRIDGES]; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
47 unsigned long args[4] = { BRCTL_GET_PORT_LIST, |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
48 (unsigned long) ifindices, MAX_BRIDGES, 0 }; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
49 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
50 memset(ifindices, 0, MAX_BRIDGES); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
51 args[1] = (unsigned long)ifindices; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
52 strncpy(ifr.ifr_name, bridge, IFNAMSIZ); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
53 ifr.ifr_data = (char *)args; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
54 xioctl(TT.sockfd, SIOCDEVPRIVATE, &ifr); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
55 if (indices) memcpy(indices, ifindices, sizeof(ifindices)); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
56 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
57 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
58 void get_br_info(char *bridge, struct __bridge_info *info) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
59 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
60 struct ifreq ifr; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
61 unsigned long args[4] = { BRCTL_GET_BRIDGE_INFO, |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
62 (unsigned long) info, 0, 0 }; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
63 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
64 memset(info, 0, sizeof(*info)); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
65 strncpy(ifr.ifr_name, bridge, IFNAMSIZ); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
66 ifr.ifr_data = (char *)args; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
67 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
68 if (ioctl(TT.sockfd, SIOCDEVPRIVATE, &ifr) < 0) { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
69 perror_msg("%s: can't get info %s\n", bridge, strerror(errno)); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
70 return; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
71 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
72 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
73 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
74 void br_show(char **argv) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
75 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
76 struct __bridge_info info; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
77 int num, cnt, i, j, ifindices[MAX_BRIDGES], pindices[MAX_BRIDGES]; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
78 unsigned long args[4] = { BRCTL_GET_BRIDGES, |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
79 (unsigned long)ifindices, MAX_BRIDGES,0 }; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
80 char br[IF_NAMESIZE], ifn[IF_NAMESIZE]; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
81 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
82 num = ioctl(TT.sockfd, SIOCGIFBR, args); //ret is num of bridges found |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
83 if (num < 0) error_exit("get bridges fail"); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
84 printf("bridge name\tbridge id\t\tSTP enabled\tinterfaces\n"); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
85 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
86 for (i = 0; i < num; i++) { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
87 unsigned char *id; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
88 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
89 if (!if_indextoname(ifindices[i], br)) perror_exit("interface not found"); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
90 get_br_info(br, &info); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
91 id = (unsigned char*)&(info.bridge_id); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
92 printf("%s\t\t",br); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
93 printf("%.2x%.2x.%.2x%.2x%.2x%.2x%.2x%.2x", id[0], id[1], |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
94 id[2], id[3], id[4], id[5], id[6], id[7]); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
95 printf("\t%s\t\t",(info.stp_enabled)?"yes" : "no"); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
96 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
97 memset(pindices, 0, sizeof(pindices)); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
98 get_ports(br, pindices); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
99 for (j = 0, cnt = 0; j < MAX_BRIDGES; j++) { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
100 if (!pindices[j]) continue; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
101 if (!if_indextoname(pindices[j], ifn)) { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
102 error_msg("no name for index :%d", pindices[j]); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
103 continue; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
104 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
105 if (cnt) printf("\n\t\t\t\t\t\t\t"); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
106 printf("%s", ifn); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
107 cnt++; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
108 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
109 xputc('\n'); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
110 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
111 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
112 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
113 void br_addbr(char **argv) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
114 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
115 char br[IFNAMSIZ]; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
116 unsigned long args[4] = {BRCTL_ADD_BRIDGE, (unsigned long) br, 0, 0}; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
117 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
118 #ifdef SIOCBRADDBR |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
119 xioctl(TT.sockfd, SIOCBRADDBR, argv[0]); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
120 #else |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
121 strncpy(br, argv[0], IFNAMSIZ); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
122 xioctl(TT.sockfd, SIOCSIFBR, args); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
123 #endif |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
124 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
125 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
126 void br_delbr(char **argv) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
127 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
128 char br[IFNAMSIZ]; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
129 unsigned long args[4] = {BRCTL_DEL_BRIDGE, (unsigned long) br, 0, 0}; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
130 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
131 #ifdef SIOCBRDELBR |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
132 xioctl(TT.sockfd, SIOCBRDELBR, argv[0]); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
133 #else |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
134 strncpy(br, argv[0], IFNAMSIZ); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
135 xioctl(TT.sockfd, SIOCSIFBR, args); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
136 #endif |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
137 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
138 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
139 void br_addif(char **argv) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
140 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
141 int index; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
142 struct ifreq ifr; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
143 unsigned long args[4] = {BRCTL_ADD_IF, 0, 0, 0}; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
144 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
145 if (!(index = if_nametoindex(argv[1]))) perror_exit("interface %s", argv[1]); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
146 #ifdef SIOCBRADDIF |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
147 ifr.ifr_ifindex = index; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
148 xioctl(TT.sockfd, SIOCBRADDIF, &ifr); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
149 #else |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
150 args[1] = index; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
151 strncpy(ifr.ifr_name, argv[0], IFNAMSIZ); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
152 ifr.ifr_data = (char *)args; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
153 xioctl(TT.sockfd, SIOCDEVPRIVATE, &ifr); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
154 #endif |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
155 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
156 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
157 void br_delif(char **argv) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
158 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
159 int index; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
160 struct ifreq ifr; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
161 unsigned long args[4] = {BRCTL_DEL_IF, 0, 0, 0}; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
162 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
163 if (!(index = if_nametoindex(argv[1]))) perror_exit("interface %s",argv[1]); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
164 #ifdef SIOCBRDELIF |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
165 ifr.ifr_ifindex = ifindex; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
166 xioctl(TT.sockfd, SIOCBRDELIF, &ifr); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
167 #else |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
168 args[1] = index; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
169 strncpy(ifr.ifr_name, argv[0], IFNAMSIZ); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
170 ifr.ifr_data = (char *)args; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
171 xioctl(TT.sockfd, SIOCDEVPRIVATE, &ifr); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
172 #endif |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
173 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
174 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
175 static void strtotimeval(struct timeval *tv, char *time) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
176 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
177 double secs; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
178 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
179 if (sscanf(time, "%lf", &secs) != 1) error_exit("time format not proper"); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
180 tv->tv_sec = secs; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
181 tv->tv_usec = 1000000 * (secs - tv->tv_sec); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
182 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
183 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
184 static unsigned long tv_to_jify(struct timeval *tv) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
185 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
186 unsigned long long jify; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
187 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
188 jify = 1000000ULL * tv->tv_sec + tv->tv_usec; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
189 return (jify/10000); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
190 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
191 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
192 void set_time(char *br, unsigned long cmd, unsigned long val) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
193 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
194 struct ifreq ifr; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
195 unsigned long args[4] = {cmd, val, 0, 0}; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
196 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
197 strncpy(ifr.ifr_name, br, IFNAMSIZ); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
198 ifr.ifr_data = (char *)args; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
199 xioctl(TT.sockfd, SIOCDEVPRIVATE, &ifr); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
200 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
201 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
202 void br_set_ageing_time(char **argv) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
203 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
204 struct timeval tv; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
205 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
206 strtotimeval(&tv, argv[1]); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
207 set_time(argv[0], BRCTL_SET_AGEING_TIME, tv_to_jify(&tv)); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
208 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
209 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
210 void br_set_fwd_delay(char **argv) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
211 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
212 struct timeval tv; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
213 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
214 strtotimeval(&tv, argv[1]); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
215 set_time(argv[0], BRCTL_SET_BRIDGE_FORWARD_DELAY, tv_to_jify(&tv)); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
216 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
217 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
218 void br_set_hello_time(char **argv) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
219 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
220 struct timeval tv; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
221 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
222 strtotimeval(&tv, argv[1]); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
223 set_time(argv[0], BRCTL_SET_BRIDGE_HELLO_TIME, tv_to_jify(&tv)); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
224 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
225 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
226 void br_set_max_age(char **argv) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
227 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
228 struct timeval tv; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
229 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
230 strtotimeval(&tv, argv[1]); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
231 set_time(argv[0], BRCTL_SET_BRIDGE_MAX_AGE, tv_to_jify(&tv)); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
232 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
233 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
234 void br_set_bridge_prio(char **argv) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
235 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
236 int prio; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
237 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
238 if (sscanf(argv[1], "%i", &prio) != 1) error_exit("prio not proper"); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
239 set_time(argv[0], BRCTL_SET_BRIDGE_PRIORITY, prio); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
240 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
241 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
242 void br_set_stp(char **argv) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
243 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
244 int i; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
245 struct stp { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
246 char *n; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
247 int set; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
248 } ss[] = {{"1", 1}, {"yes", 1},{"on", 1}, |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
249 {"0", 0}, {"no", 0},{"off", 0}}; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
250 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
251 for (i = 0; i < ARRAY_LEN(ss); i++) { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
252 if (!strcmp(ss[i].n, argv[1])) break; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
253 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
254 if (i >= ARRAY_LEN(ss)) error_exit("invalid stp state"); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
255 set_time(argv[0], BRCTL_SET_BRIDGE_STP_STATE, ss[i].set); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
256 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
257 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
258 void set_cost_prio(char *br, char *port, unsigned long cmd, unsigned long val) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
259 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
260 struct ifreq ifr; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
261 int i, index, pindices[MAX_BRIDGES]; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
262 unsigned long args[4] = {cmd, 0, val, 0}; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
263 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
264 if (!(index = if_nametoindex(port))) error_exit("invalid port"); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
265 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
266 memset(pindices, 0, sizeof(pindices)); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
267 get_ports(br, pindices); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
268 for (i = 0; i < MAX_BRIDGES; i++) { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
269 if (index == pindices[i]) break; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
270 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
271 if (i >= MAX_BRIDGES) error_exit("%s not in bridge", port); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
272 args[1] = i; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
273 strncpy(ifr.ifr_name, br, IFNAMSIZ); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
274 ifr.ifr_data = (char *)args; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
275 xioctl(TT.sockfd, SIOCDEVPRIVATE, &ifr); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
276 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
277 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
278 void br_set_path_cost(char **argv) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
279 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
280 int cost; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
281 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
282 cost = atolx_range(argv[2], 0, INT_MAX); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
283 set_cost_prio(argv[0], argv[1], BRCTL_SET_PATH_COST, cost); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
284 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
285 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
286 void br_set_port_prio(char **argv) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
287 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
288 int prio; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
289 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
290 prio = atolx_range(argv[2], 0, INT_MAX); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
291 set_cost_prio(argv[0], argv[1], BRCTL_SET_PORT_PRIORITY, prio); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
292 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
293 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
294 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
295 void brctl_main(void) |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
296 { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
297 int i; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
298 struct cmds { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
299 char *cmd; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
300 int nargs; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
301 void (*f)(char **argv); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
302 } cc[] = {{"show", 0, br_show}, |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
303 {"addbr", 1, br_addbr}, {"delbr", 1, br_delbr}, |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
304 {"addif", 2, br_addif}, {"delif", 2, br_delif}, |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
305 {"setageing", 2, br_set_ageing_time}, |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
306 {"setfd", 2, br_set_fwd_delay}, |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
307 {"sethello", 2, br_set_hello_time}, |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
308 {"setmaxage", 2, br_set_max_age}, |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
309 {"setpathcost", 3, br_set_path_cost}, |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
310 {"setportprio", 3, br_set_port_prio}, |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
311 {"setbridgeprio", 2, br_set_bridge_prio}, |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
312 {"stp", 2, br_set_stp}, |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
313 }; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
314 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
315 TT.sockfd = xsocket(AF_INET, SOCK_STREAM, 0); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
316 while (*toys.optargs) { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
317 for (i = 0; i < ARRAY_LEN(cc); i++) { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
318 struct cmds *t = cc + i; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
319 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
320 if (strcmp(t->cmd, *toys.optargs)) continue; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
321 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
322 toys.optargs++, toys.optc--; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
323 if (toys.optc < t->nargs) { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
324 toys.exithelp++; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
325 error_exit("check args"); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
326 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
327 t->f(toys.optargs); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
328 toys.optargs += t->nargs; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
329 toys.optc -= t->nargs; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
330 break; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
331 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
332 |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
333 if (i == ARRAY_LEN(cc)) { |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
334 toys.exithelp++; |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
335 error_exit("invalid option '%s'", *toys.optargs); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
336 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
337 } |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
338 xclose(TT.sockfd); |
8b3cf974c66d
An implementation for brctl (ethernet bridge control).
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
339 } |