diff options
-rw-r--r-- | net/bridge/br_sysfs_br.c | 249 |
1 files changed, 108 insertions, 141 deletions
diff --git a/net/bridge/br_sysfs_br.c b/net/bridge/br_sysfs_br.c index 3b9637fb7939..8dac65552f19 100644 --- a/net/bridge/br_sysfs_br.c +++ b/net/bridge/br_sysfs_br.c | |||
@@ -49,53 +49,51 @@ static ssize_t store_bridge_parm(struct device *d, | |||
49 | } | 49 | } |
50 | 50 | ||
51 | 51 | ||
52 | static ssize_t show_forward_delay(struct device *d, | 52 | static ssize_t forward_delay_show(struct device *d, |
53 | struct device_attribute *attr, char *buf) | 53 | struct device_attribute *attr, char *buf) |
54 | { | 54 | { |
55 | struct net_bridge *br = to_bridge(d); | 55 | struct net_bridge *br = to_bridge(d); |
56 | return sprintf(buf, "%lu\n", jiffies_to_clock_t(br->forward_delay)); | 56 | return sprintf(buf, "%lu\n", jiffies_to_clock_t(br->forward_delay)); |
57 | } | 57 | } |
58 | 58 | ||
59 | static ssize_t store_forward_delay(struct device *d, | 59 | static ssize_t forward_delay_store(struct device *d, |
60 | struct device_attribute *attr, | 60 | struct device_attribute *attr, |
61 | const char *buf, size_t len) | 61 | const char *buf, size_t len) |
62 | { | 62 | { |
63 | return store_bridge_parm(d, buf, len, br_set_forward_delay); | 63 | return store_bridge_parm(d, buf, len, br_set_forward_delay); |
64 | } | 64 | } |
65 | static DEVICE_ATTR(forward_delay, S_IRUGO | S_IWUSR, | 65 | static DEVICE_ATTR_RW(forward_delay); |
66 | show_forward_delay, store_forward_delay); | ||
67 | 66 | ||
68 | static ssize_t show_hello_time(struct device *d, struct device_attribute *attr, | 67 | static ssize_t hello_time_show(struct device *d, struct device_attribute *attr, |
69 | char *buf) | 68 | char *buf) |
70 | { | 69 | { |
71 | return sprintf(buf, "%lu\n", | 70 | return sprintf(buf, "%lu\n", |
72 | jiffies_to_clock_t(to_bridge(d)->hello_time)); | 71 | jiffies_to_clock_t(to_bridge(d)->hello_time)); |
73 | } | 72 | } |
74 | 73 | ||
75 | static ssize_t store_hello_time(struct device *d, | 74 | static ssize_t hello_time_store(struct device *d, |
76 | struct device_attribute *attr, const char *buf, | 75 | struct device_attribute *attr, const char *buf, |
77 | size_t len) | 76 | size_t len) |
78 | { | 77 | { |
79 | return store_bridge_parm(d, buf, len, br_set_hello_time); | 78 | return store_bridge_parm(d, buf, len, br_set_hello_time); |
80 | } | 79 | } |
81 | static DEVICE_ATTR(hello_time, S_IRUGO | S_IWUSR, show_hello_time, | 80 | static DEVICE_ATTR_RW(hello_time); |
82 | store_hello_time); | ||
83 | 81 | ||
84 | static ssize_t show_max_age(struct device *d, struct device_attribute *attr, | 82 | static ssize_t max_age_show(struct device *d, struct device_attribute *attr, |
85 | char *buf) | 83 | char *buf) |
86 | { | 84 | { |
87 | return sprintf(buf, "%lu\n", | 85 | return sprintf(buf, "%lu\n", |
88 | jiffies_to_clock_t(to_bridge(d)->max_age)); | 86 | jiffies_to_clock_t(to_bridge(d)->max_age)); |
89 | } | 87 | } |
90 | 88 | ||
91 | static ssize_t store_max_age(struct device *d, struct device_attribute *attr, | 89 | static ssize_t max_age_store(struct device *d, struct device_attribute *attr, |
92 | const char *buf, size_t len) | 90 | const char *buf, size_t len) |
93 | { | 91 | { |
94 | return store_bridge_parm(d, buf, len, br_set_max_age); | 92 | return store_bridge_parm(d, buf, len, br_set_max_age); |
95 | } | 93 | } |
96 | static DEVICE_ATTR(max_age, S_IRUGO | S_IWUSR, show_max_age, store_max_age); | 94 | static DEVICE_ATTR_RW(max_age); |
97 | 95 | ||
98 | static ssize_t show_ageing_time(struct device *d, | 96 | static ssize_t ageing_time_show(struct device *d, |
99 | struct device_attribute *attr, char *buf) | 97 | struct device_attribute *attr, char *buf) |
100 | { | 98 | { |
101 | struct net_bridge *br = to_bridge(d); | 99 | struct net_bridge *br = to_bridge(d); |
@@ -108,16 +106,15 @@ static int set_ageing_time(struct net_bridge *br, unsigned long val) | |||
108 | return 0; | 106 | return 0; |
109 | } | 107 | } |
110 | 108 | ||
111 | static ssize_t store_ageing_time(struct device *d, | 109 | static ssize_t ageing_time_store(struct device *d, |
112 | struct device_attribute *attr, | 110 | struct device_attribute *attr, |
113 | const char *buf, size_t len) | 111 | const char *buf, size_t len) |
114 | { | 112 | { |
115 | return store_bridge_parm(d, buf, len, set_ageing_time); | 113 | return store_bridge_parm(d, buf, len, set_ageing_time); |
116 | } | 114 | } |
117 | static DEVICE_ATTR(ageing_time, S_IRUGO | S_IWUSR, show_ageing_time, | 115 | static DEVICE_ATTR_RW(ageing_time); |
118 | store_ageing_time); | ||
119 | 116 | ||
120 | static ssize_t show_stp_state(struct device *d, | 117 | static ssize_t stp_state_show(struct device *d, |
121 | struct device_attribute *attr, char *buf) | 118 | struct device_attribute *attr, char *buf) |
122 | { | 119 | { |
123 | struct net_bridge *br = to_bridge(d); | 120 | struct net_bridge *br = to_bridge(d); |
@@ -125,7 +122,7 @@ static ssize_t show_stp_state(struct device *d, | |||
125 | } | 122 | } |
126 | 123 | ||
127 | 124 | ||
128 | static ssize_t store_stp_state(struct device *d, | 125 | static ssize_t stp_state_store(struct device *d, |
129 | struct device_attribute *attr, const char *buf, | 126 | struct device_attribute *attr, const char *buf, |
130 | size_t len) | 127 | size_t len) |
131 | { | 128 | { |
@@ -147,20 +144,21 @@ static ssize_t store_stp_state(struct device *d, | |||
147 | 144 | ||
148 | return len; | 145 | return len; |
149 | } | 146 | } |
150 | static DEVICE_ATTR(stp_state, S_IRUGO | S_IWUSR, show_stp_state, | 147 | static DEVICE_ATTR_RW(stp_state); |
151 | store_stp_state); | ||
152 | 148 | ||
153 | static ssize_t show_group_fwd_mask(struct device *d, | 149 | static ssize_t group_fwd_mask_show(struct device *d, |
154 | struct device_attribute *attr, char *buf) | 150 | struct device_attribute *attr, |
151 | char *buf) | ||
155 | { | 152 | { |
156 | struct net_bridge *br = to_bridge(d); | 153 | struct net_bridge *br = to_bridge(d); |
157 | return sprintf(buf, "%#x\n", br->group_fwd_mask); | 154 | return sprintf(buf, "%#x\n", br->group_fwd_mask); |
158 | } | 155 | } |
159 | 156 | ||
160 | 157 | ||
161 | static ssize_t store_group_fwd_mask(struct device *d, | 158 | static ssize_t group_fwd_mask_store(struct device *d, |
162 | struct device_attribute *attr, const char *buf, | 159 | struct device_attribute *attr, |
163 | size_t len) | 160 | const char *buf, |
161 | size_t len) | ||
164 | { | 162 | { |
165 | struct net_bridge *br = to_bridge(d); | 163 | struct net_bridge *br = to_bridge(d); |
166 | char *endp; | 164 | char *endp; |
@@ -180,10 +178,9 @@ static ssize_t store_group_fwd_mask(struct device *d, | |||
180 | 178 | ||
181 | return len; | 179 | return len; |
182 | } | 180 | } |
183 | static DEVICE_ATTR(group_fwd_mask, S_IRUGO | S_IWUSR, show_group_fwd_mask, | 181 | static DEVICE_ATTR_RW(group_fwd_mask); |
184 | store_group_fwd_mask); | ||
185 | 182 | ||
186 | static ssize_t show_priority(struct device *d, struct device_attribute *attr, | 183 | static ssize_t priority_show(struct device *d, struct device_attribute *attr, |
187 | char *buf) | 184 | char *buf) |
188 | { | 185 | { |
189 | struct net_bridge *br = to_bridge(d); | 186 | struct net_bridge *br = to_bridge(d); |
@@ -197,93 +194,91 @@ static int set_priority(struct net_bridge *br, unsigned long val) | |||
197 | return 0; | 194 | return 0; |
198 | } | 195 | } |
199 | 196 | ||
200 | static ssize_t store_priority(struct device *d, struct device_attribute *attr, | 197 | static ssize_t priority_store(struct device *d, struct device_attribute *attr, |
201 | const char *buf, size_t len) | 198 | const char *buf, size_t len) |
202 | { | 199 | { |
203 | return store_bridge_parm(d, buf, len, set_priority); | 200 | return store_bridge_parm(d, buf, len, set_priority); |
204 | } | 201 | } |
205 | static DEVICE_ATTR(priority, S_IRUGO | S_IWUSR, show_priority, store_priority); | 202 | static DEVICE_ATTR_RW(priority); |
206 | 203 | ||
207 | static ssize_t show_root_id(struct device *d, struct device_attribute *attr, | 204 | static ssize_t root_id_show(struct device *d, struct device_attribute *attr, |
208 | char *buf) | 205 | char *buf) |
209 | { | 206 | { |
210 | return br_show_bridge_id(buf, &to_bridge(d)->designated_root); | 207 | return br_show_bridge_id(buf, &to_bridge(d)->designated_root); |
211 | } | 208 | } |
212 | static DEVICE_ATTR(root_id, S_IRUGO, show_root_id, NULL); | 209 | static DEVICE_ATTR_RO(root_id); |
213 | 210 | ||
214 | static ssize_t show_bridge_id(struct device *d, struct device_attribute *attr, | 211 | static ssize_t bridge_id_show(struct device *d, struct device_attribute *attr, |
215 | char *buf) | 212 | char *buf) |
216 | { | 213 | { |
217 | return br_show_bridge_id(buf, &to_bridge(d)->bridge_id); | 214 | return br_show_bridge_id(buf, &to_bridge(d)->bridge_id); |
218 | } | 215 | } |
219 | static DEVICE_ATTR(bridge_id, S_IRUGO, show_bridge_id, NULL); | 216 | static DEVICE_ATTR_RO(bridge_id); |
220 | 217 | ||
221 | static ssize_t show_root_port(struct device *d, struct device_attribute *attr, | 218 | static ssize_t root_port_show(struct device *d, struct device_attribute *attr, |
222 | char *buf) | 219 | char *buf) |
223 | { | 220 | { |
224 | return sprintf(buf, "%d\n", to_bridge(d)->root_port); | 221 | return sprintf(buf, "%d\n", to_bridge(d)->root_port); |
225 | } | 222 | } |
226 | static DEVICE_ATTR(root_port, S_IRUGO, show_root_port, NULL); | 223 | static DEVICE_ATTR_RO(root_port); |
227 | 224 | ||
228 | static ssize_t show_root_path_cost(struct device *d, | 225 | static ssize_t root_path_cost_show(struct device *d, |
229 | struct device_attribute *attr, char *buf) | 226 | struct device_attribute *attr, char *buf) |
230 | { | 227 | { |
231 | return sprintf(buf, "%d\n", to_bridge(d)->root_path_cost); | 228 | return sprintf(buf, "%d\n", to_bridge(d)->root_path_cost); |
232 | } | 229 | } |
233 | static DEVICE_ATTR(root_path_cost, S_IRUGO, show_root_path_cost, NULL); | 230 | static DEVICE_ATTR_RO(root_path_cost); |
234 | 231 | ||
235 | static ssize_t show_topology_change(struct device *d, | 232 | static ssize_t topology_change_show(struct device *d, |
236 | struct device_attribute *attr, char *buf) | 233 | struct device_attribute *attr, char *buf) |
237 | { | 234 | { |
238 | return sprintf(buf, "%d\n", to_bridge(d)->topology_change); | 235 | return sprintf(buf, "%d\n", to_bridge(d)->topology_change); |
239 | } | 236 | } |
240 | static DEVICE_ATTR(topology_change, S_IRUGO, show_topology_change, NULL); | 237 | static DEVICE_ATTR_RO(topology_change); |
241 | 238 | ||
242 | static ssize_t show_topology_change_detected(struct device *d, | 239 | static ssize_t topology_change_detected_show(struct device *d, |
243 | struct device_attribute *attr, | 240 | struct device_attribute *attr, |
244 | char *buf) | 241 | char *buf) |
245 | { | 242 | { |
246 | struct net_bridge *br = to_bridge(d); | 243 | struct net_bridge *br = to_bridge(d); |
247 | return sprintf(buf, "%d\n", br->topology_change_detected); | 244 | return sprintf(buf, "%d\n", br->topology_change_detected); |
248 | } | 245 | } |
249 | static DEVICE_ATTR(topology_change_detected, S_IRUGO, | 246 | static DEVICE_ATTR_RO(topology_change_detected); |
250 | show_topology_change_detected, NULL); | ||
251 | 247 | ||
252 | static ssize_t show_hello_timer(struct device *d, | 248 | static ssize_t hello_timer_show(struct device *d, |
253 | struct device_attribute *attr, char *buf) | 249 | struct device_attribute *attr, char *buf) |
254 | { | 250 | { |
255 | struct net_bridge *br = to_bridge(d); | 251 | struct net_bridge *br = to_bridge(d); |
256 | return sprintf(buf, "%ld\n", br_timer_value(&br->hello_timer)); | 252 | return sprintf(buf, "%ld\n", br_timer_value(&br->hello_timer)); |
257 | } | 253 | } |
258 | static DEVICE_ATTR(hello_timer, S_IRUGO, show_hello_timer, NULL); | 254 | static DEVICE_ATTR_RO(hello_timer); |
259 | 255 | ||
260 | static ssize_t show_tcn_timer(struct device *d, struct device_attribute *attr, | 256 | static ssize_t tcn_timer_show(struct device *d, struct device_attribute *attr, |
261 | char *buf) | 257 | char *buf) |
262 | { | 258 | { |
263 | struct net_bridge *br = to_bridge(d); | 259 | struct net_bridge *br = to_bridge(d); |
264 | return sprintf(buf, "%ld\n", br_timer_value(&br->tcn_timer)); | 260 | return sprintf(buf, "%ld\n", br_timer_value(&br->tcn_timer)); |
265 | } | 261 | } |
266 | static DEVICE_ATTR(tcn_timer, S_IRUGO, show_tcn_timer, NULL); | 262 | static DEVICE_ATTR_RO(tcn_timer); |
267 | 263 | ||
268 | static ssize_t show_topology_change_timer(struct device *d, | 264 | static ssize_t topology_change_timer_show(struct device *d, |
269 | struct device_attribute *attr, | 265 | struct device_attribute *attr, |
270 | char *buf) | 266 | char *buf) |
271 | { | 267 | { |
272 | struct net_bridge *br = to_bridge(d); | 268 | struct net_bridge *br = to_bridge(d); |
273 | return sprintf(buf, "%ld\n", br_timer_value(&br->topology_change_timer)); | 269 | return sprintf(buf, "%ld\n", br_timer_value(&br->topology_change_timer)); |
274 | } | 270 | } |
275 | static DEVICE_ATTR(topology_change_timer, S_IRUGO, show_topology_change_timer, | 271 | static DEVICE_ATTR_RO(topology_change_timer); |
276 | NULL); | ||
277 | 272 | ||
278 | static ssize_t show_gc_timer(struct device *d, struct device_attribute *attr, | 273 | static ssize_t gc_timer_show(struct device *d, struct device_attribute *attr, |
279 | char *buf) | 274 | char *buf) |
280 | { | 275 | { |
281 | struct net_bridge *br = to_bridge(d); | 276 | struct net_bridge *br = to_bridge(d); |
282 | return sprintf(buf, "%ld\n", br_timer_value(&br->gc_timer)); | 277 | return sprintf(buf, "%ld\n", br_timer_value(&br->gc_timer)); |
283 | } | 278 | } |
284 | static DEVICE_ATTR(gc_timer, S_IRUGO, show_gc_timer, NULL); | 279 | static DEVICE_ATTR_RO(gc_timer); |
285 | 280 | ||
286 | static ssize_t show_group_addr(struct device *d, | 281 | static ssize_t group_addr_show(struct device *d, |
287 | struct device_attribute *attr, char *buf) | 282 | struct device_attribute *attr, char *buf) |
288 | { | 283 | { |
289 | struct net_bridge *br = to_bridge(d); | 284 | struct net_bridge *br = to_bridge(d); |
@@ -293,7 +288,7 @@ static ssize_t show_group_addr(struct device *d, | |||
293 | br->group_addr[4], br->group_addr[5]); | 288 | br->group_addr[4], br->group_addr[5]); |
294 | } | 289 | } |
295 | 290 | ||
296 | static ssize_t store_group_addr(struct device *d, | 291 | static ssize_t group_addr_store(struct device *d, |
297 | struct device_attribute *attr, | 292 | struct device_attribute *attr, |
298 | const char *buf, size_t len) | 293 | const char *buf, size_t len) |
299 | { | 294 | { |
@@ -324,10 +319,9 @@ static ssize_t store_group_addr(struct device *d, | |||
324 | return len; | 319 | return len; |
325 | } | 320 | } |
326 | 321 | ||
327 | static DEVICE_ATTR(group_addr, S_IRUGO | S_IWUSR, | 322 | static DEVICE_ATTR_RW(group_addr); |
328 | show_group_addr, store_group_addr); | ||
329 | 323 | ||
330 | static ssize_t store_flush(struct device *d, | 324 | static ssize_t flush_store(struct device *d, |
331 | struct device_attribute *attr, | 325 | struct device_attribute *attr, |
332 | const char *buf, size_t len) | 326 | const char *buf, size_t len) |
333 | { | 327 | { |
@@ -339,26 +333,25 @@ static ssize_t store_flush(struct device *d, | |||
339 | br_fdb_flush(br); | 333 | br_fdb_flush(br); |
340 | return len; | 334 | return len; |
341 | } | 335 | } |
342 | static DEVICE_ATTR(flush, S_IWUSR, NULL, store_flush); | 336 | static DEVICE_ATTR_WO(flush); |
343 | 337 | ||
344 | #ifdef CONFIG_BRIDGE_IGMP_SNOOPING | 338 | #ifdef CONFIG_BRIDGE_IGMP_SNOOPING |
345 | static ssize_t show_multicast_router(struct device *d, | 339 | static ssize_t multicast_router_show(struct device *d, |
346 | struct device_attribute *attr, char *buf) | 340 | struct device_attribute *attr, char *buf) |
347 | { | 341 | { |
348 | struct net_bridge *br = to_bridge(d); | 342 | struct net_bridge *br = to_bridge(d); |
349 | return sprintf(buf, "%d\n", br->multicast_router); | 343 | return sprintf(buf, "%d\n", br->multicast_router); |
350 | } | 344 | } |
351 | 345 | ||
352 | static ssize_t store_multicast_router(struct device *d, | 346 | static ssize_t multicast_router_store(struct device *d, |
353 | struct device_attribute *attr, | 347 | struct device_attribute *attr, |
354 | const char *buf, size_t len) | 348 | const char *buf, size_t len) |
355 | { | 349 | { |
356 | return store_bridge_parm(d, buf, len, br_multicast_set_router); | 350 | return store_bridge_parm(d, buf, len, br_multicast_set_router); |
357 | } | 351 | } |
358 | static DEVICE_ATTR(multicast_router, S_IRUGO | S_IWUSR, show_multicast_router, | 352 | static DEVICE_ATTR_RW(multicast_router); |
359 | store_multicast_router); | ||
360 | 353 | ||
361 | static ssize_t show_multicast_snooping(struct device *d, | 354 | static ssize_t multicast_snooping_show(struct device *d, |
362 | struct device_attribute *attr, | 355 | struct device_attribute *attr, |
363 | char *buf) | 356 | char *buf) |
364 | { | 357 | { |
@@ -366,18 +359,17 @@ static ssize_t show_multicast_snooping(struct device *d, | |||
366 | return sprintf(buf, "%d\n", !br->multicast_disabled); | 359 | return sprintf(buf, "%d\n", !br->multicast_disabled); |
367 | } | 360 | } |
368 | 361 | ||
369 | static ssize_t store_multicast_snooping(struct device *d, | 362 | static ssize_t multicast_snooping_store(struct device *d, |
370 | struct device_attribute *attr, | 363 | struct device_attribute *attr, |
371 | const char *buf, size_t len) | 364 | const char *buf, size_t len) |
372 | { | 365 | { |
373 | return store_bridge_parm(d, buf, len, br_multicast_toggle); | 366 | return store_bridge_parm(d, buf, len, br_multicast_toggle); |
374 | } | 367 | } |
375 | static DEVICE_ATTR(multicast_snooping, S_IRUGO | S_IWUSR, | 368 | static DEVICE_ATTR_RW(multicast_snooping); |
376 | show_multicast_snooping, store_multicast_snooping); | ||
377 | 369 | ||
378 | static ssize_t show_multicast_query_use_ifaddr(struct device *d, | 370 | static ssize_t multicast_query_use_ifaddr_show(struct device *d, |
379 | struct device_attribute *attr, | 371 | struct device_attribute *attr, |
380 | char *buf) | 372 | char *buf) |
381 | { | 373 | { |
382 | struct net_bridge *br = to_bridge(d); | 374 | struct net_bridge *br = to_bridge(d); |
383 | return sprintf(buf, "%d\n", br->multicast_query_use_ifaddr); | 375 | return sprintf(buf, "%d\n", br->multicast_query_use_ifaddr); |
@@ -390,17 +382,15 @@ static int set_query_use_ifaddr(struct net_bridge *br, unsigned long val) | |||
390 | } | 382 | } |
391 | 383 | ||
392 | static ssize_t | 384 | static ssize_t |
393 | store_multicast_query_use_ifaddr(struct device *d, | 385 | multicast_query_use_ifaddr_store(struct device *d, |
394 | struct device_attribute *attr, | 386 | struct device_attribute *attr, |
395 | const char *buf, size_t len) | 387 | const char *buf, size_t len) |
396 | { | 388 | { |
397 | return store_bridge_parm(d, buf, len, set_query_use_ifaddr); | 389 | return store_bridge_parm(d, buf, len, set_query_use_ifaddr); |
398 | } | 390 | } |
399 | static DEVICE_ATTR(multicast_query_use_ifaddr, S_IRUGO | S_IWUSR, | 391 | static DEVICE_ATTR_RW(multicast_query_use_ifaddr); |
400 | show_multicast_query_use_ifaddr, | ||
401 | store_multicast_query_use_ifaddr); | ||
402 | 392 | ||
403 | static ssize_t show_multicast_querier(struct device *d, | 393 | static ssize_t multicast_querier_show(struct device *d, |
404 | struct device_attribute *attr, | 394 | struct device_attribute *attr, |
405 | char *buf) | 395 | char *buf) |
406 | { | 396 | { |
@@ -408,16 +398,15 @@ static ssize_t show_multicast_querier(struct device *d, | |||
408 | return sprintf(buf, "%d\n", br->multicast_querier); | 398 | return sprintf(buf, "%d\n", br->multicast_querier); |
409 | } | 399 | } |
410 | 400 | ||
411 | static ssize_t store_multicast_querier(struct device *d, | 401 | static ssize_t multicast_querier_store(struct device *d, |
412 | struct device_attribute *attr, | 402 | struct device_attribute *attr, |
413 | const char *buf, size_t len) | 403 | const char *buf, size_t len) |
414 | { | 404 | { |
415 | return store_bridge_parm(d, buf, len, br_multicast_set_querier); | 405 | return store_bridge_parm(d, buf, len, br_multicast_set_querier); |
416 | } | 406 | } |
417 | static DEVICE_ATTR(multicast_querier, S_IRUGO | S_IWUSR, | 407 | static DEVICE_ATTR_RW(multicast_querier); |
418 | show_multicast_querier, store_multicast_querier); | ||
419 | 408 | ||
420 | static ssize_t show_hash_elasticity(struct device *d, | 409 | static ssize_t hash_elasticity_show(struct device *d, |
421 | struct device_attribute *attr, char *buf) | 410 | struct device_attribute *attr, char *buf) |
422 | { | 411 | { |
423 | struct net_bridge *br = to_bridge(d); | 412 | struct net_bridge *br = to_bridge(d); |
@@ -430,31 +419,29 @@ static int set_elasticity(struct net_bridge *br, unsigned long val) | |||
430 | return 0; | 419 | return 0; |
431 | } | 420 | } |
432 | 421 | ||
433 | static ssize_t store_hash_elasticity(struct device *d, | 422 | static ssize_t hash_elasticity_store(struct device *d, |
434 | struct device_attribute *attr, | 423 | struct device_attribute *attr, |
435 | const char *buf, size_t len) | 424 | const char *buf, size_t len) |
436 | { | 425 | { |
437 | return store_bridge_parm(d, buf, len, set_elasticity); | 426 | return store_bridge_parm(d, buf, len, set_elasticity); |
438 | } | 427 | } |
439 | static DEVICE_ATTR(hash_elasticity, S_IRUGO | S_IWUSR, show_hash_elasticity, | 428 | static DEVICE_ATTR_RW(hash_elasticity); |
440 | store_hash_elasticity); | ||
441 | 429 | ||
442 | static ssize_t show_hash_max(struct device *d, struct device_attribute *attr, | 430 | static ssize_t hash_max_show(struct device *d, struct device_attribute *attr, |
443 | char *buf) | 431 | char *buf) |
444 | { | 432 | { |
445 | struct net_bridge *br = to_bridge(d); | 433 | struct net_bridge *br = to_bridge(d); |
446 | return sprintf(buf, "%u\n", br->hash_max); | 434 | return sprintf(buf, "%u\n", br->hash_max); |
447 | } | 435 | } |
448 | 436 | ||
449 | static ssize_t store_hash_max(struct device *d, struct device_attribute *attr, | 437 | static ssize_t hash_max_store(struct device *d, struct device_attribute *attr, |
450 | const char *buf, size_t len) | 438 | const char *buf, size_t len) |
451 | { | 439 | { |
452 | return store_bridge_parm(d, buf, len, br_multicast_set_hash_max); | 440 | return store_bridge_parm(d, buf, len, br_multicast_set_hash_max); |
453 | } | 441 | } |
454 | static DEVICE_ATTR(hash_max, S_IRUGO | S_IWUSR, show_hash_max, | 442 | static DEVICE_ATTR_RW(hash_max); |
455 | store_hash_max); | ||
456 | 443 | ||
457 | static ssize_t show_multicast_last_member_count(struct device *d, | 444 | static ssize_t multicast_last_member_count_show(struct device *d, |
458 | struct device_attribute *attr, | 445 | struct device_attribute *attr, |
459 | char *buf) | 446 | char *buf) |
460 | { | 447 | { |
@@ -468,17 +455,15 @@ static int set_last_member_count(struct net_bridge *br, unsigned long val) | |||
468 | return 0; | 455 | return 0; |
469 | } | 456 | } |
470 | 457 | ||
471 | static ssize_t store_multicast_last_member_count(struct device *d, | 458 | static ssize_t multicast_last_member_count_store(struct device *d, |
472 | struct device_attribute *attr, | 459 | struct device_attribute *attr, |
473 | const char *buf, size_t len) | 460 | const char *buf, size_t len) |
474 | { | 461 | { |
475 | return store_bridge_parm(d, buf, len, set_last_member_count); | 462 | return store_bridge_parm(d, buf, len, set_last_member_count); |
476 | } | 463 | } |
477 | static DEVICE_ATTR(multicast_last_member_count, S_IRUGO | S_IWUSR, | 464 | static DEVICE_ATTR_RW(multicast_last_member_count); |
478 | show_multicast_last_member_count, | ||
479 | store_multicast_last_member_count); | ||
480 | 465 | ||
481 | static ssize_t show_multicast_startup_query_count( | 466 | static ssize_t multicast_startup_query_count_show( |
482 | struct device *d, struct device_attribute *attr, char *buf) | 467 | struct device *d, struct device_attribute *attr, char *buf) |
483 | { | 468 | { |
484 | struct net_bridge *br = to_bridge(d); | 469 | struct net_bridge *br = to_bridge(d); |
@@ -491,17 +476,15 @@ static int set_startup_query_count(struct net_bridge *br, unsigned long val) | |||
491 | return 0; | 476 | return 0; |
492 | } | 477 | } |
493 | 478 | ||
494 | static ssize_t store_multicast_startup_query_count( | 479 | static ssize_t multicast_startup_query_count_store( |
495 | struct device *d, struct device_attribute *attr, const char *buf, | 480 | struct device *d, struct device_attribute *attr, const char *buf, |
496 | size_t len) | 481 | size_t len) |
497 | { | 482 | { |
498 | return store_bridge_parm(d, buf, len, set_startup_query_count); | 483 | return store_bridge_parm(d, buf, len, set_startup_query_count); |
499 | } | 484 | } |
500 | static DEVICE_ATTR(multicast_startup_query_count, S_IRUGO | S_IWUSR, | 485 | static DEVICE_ATTR_RW(multicast_startup_query_count); |
501 | show_multicast_startup_query_count, | ||
502 | store_multicast_startup_query_count); | ||
503 | 486 | ||
504 | static ssize_t show_multicast_last_member_interval( | 487 | static ssize_t multicast_last_member_interval_show( |
505 | struct device *d, struct device_attribute *attr, char *buf) | 488 | struct device *d, struct device_attribute *attr, char *buf) |
506 | { | 489 | { |
507 | struct net_bridge *br = to_bridge(d); | 490 | struct net_bridge *br = to_bridge(d); |
@@ -515,17 +498,15 @@ static int set_last_member_interval(struct net_bridge *br, unsigned long val) | |||
515 | return 0; | 498 | return 0; |
516 | } | 499 | } |
517 | 500 | ||
518 | static ssize_t store_multicast_last_member_interval( | 501 | static ssize_t multicast_last_member_interval_store( |
519 | struct device *d, struct device_attribute *attr, const char *buf, | 502 | struct device *d, struct device_attribute *attr, const char *buf, |
520 | size_t len) | 503 | size_t len) |
521 | { | 504 | { |
522 | return store_bridge_parm(d, buf, len, set_last_member_interval); | 505 | return store_bridge_parm(d, buf, len, set_last_member_interval); |
523 | } | 506 | } |
524 | static DEVICE_ATTR(multicast_last_member_interval, S_IRUGO | S_IWUSR, | 507 | static DEVICE_ATTR_RW(multicast_last_member_interval); |
525 | show_multicast_last_member_interval, | ||
526 | store_multicast_last_member_interval); | ||
527 | 508 | ||
528 | static ssize_t show_multicast_membership_interval( | 509 | static ssize_t multicast_membership_interval_show( |
529 | struct device *d, struct device_attribute *attr, char *buf) | 510 | struct device *d, struct device_attribute *attr, char *buf) |
530 | { | 511 | { |
531 | struct net_bridge *br = to_bridge(d); | 512 | struct net_bridge *br = to_bridge(d); |
@@ -539,17 +520,15 @@ static int set_membership_interval(struct net_bridge *br, unsigned long val) | |||
539 | return 0; | 520 | return 0; |
540 | } | 521 | } |
541 | 522 | ||
542 | static ssize_t store_multicast_membership_interval( | 523 | static ssize_t multicast_membership_interval_store( |
543 | struct device *d, struct device_attribute *attr, const char *buf, | 524 | struct device *d, struct device_attribute *attr, const char *buf, |
544 | size_t len) | 525 | size_t len) |
545 | { | 526 | { |
546 | return store_bridge_parm(d, buf, len, set_membership_interval); | 527 | return store_bridge_parm(d, buf, len, set_membership_interval); |
547 | } | 528 | } |
548 | static DEVICE_ATTR(multicast_membership_interval, S_IRUGO | S_IWUSR, | 529 | static DEVICE_ATTR_RW(multicast_membership_interval); |
549 | show_multicast_membership_interval, | ||
550 | store_multicast_membership_interval); | ||
551 | 530 | ||
552 | static ssize_t show_multicast_querier_interval(struct device *d, | 531 | static ssize_t multicast_querier_interval_show(struct device *d, |
553 | struct device_attribute *attr, | 532 | struct device_attribute *attr, |
554 | char *buf) | 533 | char *buf) |
555 | { | 534 | { |
@@ -564,17 +543,15 @@ static int set_querier_interval(struct net_bridge *br, unsigned long val) | |||
564 | return 0; | 543 | return 0; |
565 | } | 544 | } |
566 | 545 | ||
567 | static ssize_t store_multicast_querier_interval(struct device *d, | 546 | static ssize_t multicast_querier_interval_store(struct device *d, |
568 | struct device_attribute *attr, | 547 | struct device_attribute *attr, |
569 | const char *buf, size_t len) | 548 | const char *buf, size_t len) |
570 | { | 549 | { |
571 | return store_bridge_parm(d, buf, len, set_querier_interval); | 550 | return store_bridge_parm(d, buf, len, set_querier_interval); |
572 | } | 551 | } |
573 | static DEVICE_ATTR(multicast_querier_interval, S_IRUGO | S_IWUSR, | 552 | static DEVICE_ATTR_RW(multicast_querier_interval); |
574 | show_multicast_querier_interval, | ||
575 | store_multicast_querier_interval); | ||
576 | 553 | ||
577 | static ssize_t show_multicast_query_interval(struct device *d, | 554 | static ssize_t multicast_query_interval_show(struct device *d, |
578 | struct device_attribute *attr, | 555 | struct device_attribute *attr, |
579 | char *buf) | 556 | char *buf) |
580 | { | 557 | { |
@@ -589,17 +566,15 @@ static int set_query_interval(struct net_bridge *br, unsigned long val) | |||
589 | return 0; | 566 | return 0; |
590 | } | 567 | } |
591 | 568 | ||
592 | static ssize_t store_multicast_query_interval(struct device *d, | 569 | static ssize_t multicast_query_interval_store(struct device *d, |
593 | struct device_attribute *attr, | 570 | struct device_attribute *attr, |
594 | const char *buf, size_t len) | 571 | const char *buf, size_t len) |
595 | { | 572 | { |
596 | return store_bridge_parm(d, buf, len, set_query_interval); | 573 | return store_bridge_parm(d, buf, len, set_query_interval); |
597 | } | 574 | } |
598 | static DEVICE_ATTR(multicast_query_interval, S_IRUGO | S_IWUSR, | 575 | static DEVICE_ATTR_RW(multicast_query_interval); |
599 | show_multicast_query_interval, | ||
600 | store_multicast_query_interval); | ||
601 | 576 | ||
602 | static ssize_t show_multicast_query_response_interval( | 577 | static ssize_t multicast_query_response_interval_show( |
603 | struct device *d, struct device_attribute *attr, char *buf) | 578 | struct device *d, struct device_attribute *attr, char *buf) |
604 | { | 579 | { |
605 | struct net_bridge *br = to_bridge(d); | 580 | struct net_bridge *br = to_bridge(d); |
@@ -614,17 +589,15 @@ static int set_query_response_interval(struct net_bridge *br, unsigned long val) | |||
614 | return 0; | 589 | return 0; |
615 | } | 590 | } |
616 | 591 | ||
617 | static ssize_t store_multicast_query_response_interval( | 592 | static ssize_t multicast_query_response_interval_store( |
618 | struct device *d, struct device_attribute *attr, const char *buf, | 593 | struct device *d, struct device_attribute *attr, const char *buf, |
619 | size_t len) | 594 | size_t len) |
620 | { | 595 | { |
621 | return store_bridge_parm(d, buf, len, set_query_response_interval); | 596 | return store_bridge_parm(d, buf, len, set_query_response_interval); |
622 | } | 597 | } |
623 | static DEVICE_ATTR(multicast_query_response_interval, S_IRUGO | S_IWUSR, | 598 | static DEVICE_ATTR_RW(multicast_query_response_interval); |
624 | show_multicast_query_response_interval, | ||
625 | store_multicast_query_response_interval); | ||
626 | 599 | ||
627 | static ssize_t show_multicast_startup_query_interval( | 600 | static ssize_t multicast_startup_query_interval_show( |
628 | struct device *d, struct device_attribute *attr, char *buf) | 601 | struct device *d, struct device_attribute *attr, char *buf) |
629 | { | 602 | { |
630 | struct net_bridge *br = to_bridge(d); | 603 | struct net_bridge *br = to_bridge(d); |
@@ -639,18 +612,16 @@ static int set_startup_query_interval(struct net_bridge *br, unsigned long val) | |||
639 | return 0; | 612 | return 0; |
640 | } | 613 | } |
641 | 614 | ||
642 | static ssize_t store_multicast_startup_query_interval( | 615 | static ssize_t multicast_startup_query_interval_store( |
643 | struct device *d, struct device_attribute *attr, const char *buf, | 616 | struct device *d, struct device_attribute *attr, const char *buf, |
644 | size_t len) | 617 | size_t len) |
645 | { | 618 | { |
646 | return store_bridge_parm(d, buf, len, set_startup_query_interval); | 619 | return store_bridge_parm(d, buf, len, set_startup_query_interval); |
647 | } | 620 | } |
648 | static DEVICE_ATTR(multicast_startup_query_interval, S_IRUGO | S_IWUSR, | 621 | static DEVICE_ATTR_RW(multicast_startup_query_interval); |
649 | show_multicast_startup_query_interval, | ||
650 | store_multicast_startup_query_interval); | ||
651 | #endif | 622 | #endif |
652 | #ifdef CONFIG_BRIDGE_NETFILTER | 623 | #ifdef CONFIG_BRIDGE_NETFILTER |
653 | static ssize_t show_nf_call_iptables( | 624 | static ssize_t nf_call_iptables_show( |
654 | struct device *d, struct device_attribute *attr, char *buf) | 625 | struct device *d, struct device_attribute *attr, char *buf) |
655 | { | 626 | { |
656 | struct net_bridge *br = to_bridge(d); | 627 | struct net_bridge *br = to_bridge(d); |
@@ -663,16 +634,15 @@ static int set_nf_call_iptables(struct net_bridge *br, unsigned long val) | |||
663 | return 0; | 634 | return 0; |
664 | } | 635 | } |
665 | 636 | ||
666 | static ssize_t store_nf_call_iptables( | 637 | static ssize_t nf_call_iptables_store( |
667 | struct device *d, struct device_attribute *attr, const char *buf, | 638 | struct device *d, struct device_attribute *attr, const char *buf, |
668 | size_t len) | 639 | size_t len) |
669 | { | 640 | { |
670 | return store_bridge_parm(d, buf, len, set_nf_call_iptables); | 641 | return store_bridge_parm(d, buf, len, set_nf_call_iptables); |
671 | } | 642 | } |
672 | static DEVICE_ATTR(nf_call_iptables, S_IRUGO | S_IWUSR, | 643 | static DEVICE_ATTR_RW(nf_call_iptables); |
673 | show_nf_call_iptables, store_nf_call_iptables); | ||
674 | 644 | ||
675 | static ssize_t show_nf_call_ip6tables( | 645 | static ssize_t nf_call_ip6tables_show( |
676 | struct device *d, struct device_attribute *attr, char *buf) | 646 | struct device *d, struct device_attribute *attr, char *buf) |
677 | { | 647 | { |
678 | struct net_bridge *br = to_bridge(d); | 648 | struct net_bridge *br = to_bridge(d); |
@@ -685,16 +655,15 @@ static int set_nf_call_ip6tables(struct net_bridge *br, unsigned long val) | |||
685 | return 0; | 655 | return 0; |
686 | } | 656 | } |
687 | 657 | ||
688 | static ssize_t store_nf_call_ip6tables( | 658 | static ssize_t nf_call_ip6tables_store( |
689 | struct device *d, struct device_attribute *attr, const char *buf, | 659 | struct device *d, struct device_attribute *attr, const char *buf, |
690 | size_t len) | 660 | size_t len) |
691 | { | 661 | { |
692 | return store_bridge_parm(d, buf, len, set_nf_call_ip6tables); | 662 | return store_bridge_parm(d, buf, len, set_nf_call_ip6tables); |
693 | } | 663 | } |
694 | static DEVICE_ATTR(nf_call_ip6tables, S_IRUGO | S_IWUSR, | 664 | static DEVICE_ATTR_RW(nf_call_ip6tables); |
695 | show_nf_call_ip6tables, store_nf_call_ip6tables); | ||
696 | 665 | ||
697 | static ssize_t show_nf_call_arptables( | 666 | static ssize_t nf_call_arptables_show( |
698 | struct device *d, struct device_attribute *attr, char *buf) | 667 | struct device *d, struct device_attribute *attr, char *buf) |
699 | { | 668 | { |
700 | struct net_bridge *br = to_bridge(d); | 669 | struct net_bridge *br = to_bridge(d); |
@@ -707,17 +676,16 @@ static int set_nf_call_arptables(struct net_bridge *br, unsigned long val) | |||
707 | return 0; | 676 | return 0; |
708 | } | 677 | } |
709 | 678 | ||
710 | static ssize_t store_nf_call_arptables( | 679 | static ssize_t nf_call_arptables_store( |
711 | struct device *d, struct device_attribute *attr, const char *buf, | 680 | struct device *d, struct device_attribute *attr, const char *buf, |
712 | size_t len) | 681 | size_t len) |
713 | { | 682 | { |
714 | return store_bridge_parm(d, buf, len, set_nf_call_arptables); | 683 | return store_bridge_parm(d, buf, len, set_nf_call_arptables); |
715 | } | 684 | } |
716 | static DEVICE_ATTR(nf_call_arptables, S_IRUGO | S_IWUSR, | 685 | static DEVICE_ATTR_RW(nf_call_arptables); |
717 | show_nf_call_arptables, store_nf_call_arptables); | ||
718 | #endif | 686 | #endif |
719 | #ifdef CONFIG_BRIDGE_VLAN_FILTERING | 687 | #ifdef CONFIG_BRIDGE_VLAN_FILTERING |
720 | static ssize_t show_vlan_filtering(struct device *d, | 688 | static ssize_t vlan_filtering_show(struct device *d, |
721 | struct device_attribute *attr, | 689 | struct device_attribute *attr, |
722 | char *buf) | 690 | char *buf) |
723 | { | 691 | { |
@@ -725,14 +693,13 @@ static ssize_t show_vlan_filtering(struct device *d, | |||
725 | return sprintf(buf, "%d\n", br->vlan_enabled); | 693 | return sprintf(buf, "%d\n", br->vlan_enabled); |
726 | } | 694 | } |
727 | 695 | ||
728 | static ssize_t store_vlan_filtering(struct device *d, | 696 | static ssize_t vlan_filtering_store(struct device *d, |
729 | struct device_attribute *attr, | 697 | struct device_attribute *attr, |
730 | const char *buf, size_t len) | 698 | const char *buf, size_t len) |
731 | { | 699 | { |
732 | return store_bridge_parm(d, buf, len, br_vlan_filter_toggle); | 700 | return store_bridge_parm(d, buf, len, br_vlan_filter_toggle); |
733 | } | 701 | } |
734 | static DEVICE_ATTR(vlan_filtering, S_IRUGO | S_IWUSR, | 702 | static DEVICE_ATTR_RW(vlan_filtering); |
735 | show_vlan_filtering, store_vlan_filtering); | ||
736 | #endif | 703 | #endif |
737 | 704 | ||
738 | static struct attribute *bridge_attrs[] = { | 705 | static struct attribute *bridge_attrs[] = { |