2 * iplink_bridge.c Bridge device support
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version
7 * 2 of the License, or (at your option) any later version.
9 * Authors: Jiri Pirko <jiri@resnulli.us>
15 #include <linux/if_link.h>
18 #include "ip_common.h"
20 static void print_explain(FILE *f
)
23 "Usage: ... bridge [ forward_delay FORWARD_DELAY ]\n"
24 " [ hello_time HELLO_TIME ]\n"
25 " [ max_age MAX_AGE ]\n"
26 " [ ageing_time AGEING_TIME ]\n"
27 " [ stp_state STP_STATE ]\n"
28 " [ priority PRIORITY ]\n"
32 static void explain(void)
34 print_explain(stderr
);
37 static int bridge_parse_opt(struct link_util
*lu
, int argc
, char **argv
,
43 if (matches(*argv
, "forward_delay") == 0) {
45 if (get_u32(&val
, *argv
, 0)) {
46 invarg("invalid forward_delay", *argv
);
49 addattr32(n
, 1024, IFLA_BR_FORWARD_DELAY
, val
);
50 } else if (matches(*argv
, "hello_time") == 0) {
52 if (get_u32(&val
, *argv
, 0)) {
53 invarg("invalid hello_time", *argv
);
56 addattr32(n
, 1024, IFLA_BR_HELLO_TIME
, val
);
57 } else if (matches(*argv
, "max_age") == 0) {
59 if (get_u32(&val
, *argv
, 0)) {
60 invarg("invalid max_age", *argv
);
63 addattr32(n
, 1024, IFLA_BR_MAX_AGE
, val
);
64 } else if (matches(*argv
, "ageing_time") == 0) {
66 if (get_u32(&val
, *argv
, 0)) {
67 invarg("invalid ageing_time", *argv
);
70 addattr32(n
, 1024, IFLA_BR_AGEING_TIME
, val
);
71 } else if (matches(*argv
, "stp_state") == 0) {
73 if (get_u32(&val
, *argv
, 0)) {
74 invarg("invalid stp_state", *argv
);
77 addattr32(n
, 1024, IFLA_BR_STP_STATE
, val
);
78 } else if (matches(*argv
, "priority") == 0) {
82 if (get_u16(&prio
, *argv
, 0)) {
83 invarg("invalid priority", *argv
);
86 addattr16(n
, 1024, IFLA_BR_PRIORITY
, prio
);
87 } else if (matches(*argv
, "help") == 0) {
91 fprintf(stderr
, "bridge: unknown command \"%s\"?\n", *argv
);
101 static void bridge_print_opt(struct link_util
*lu
, FILE *f
, struct rtattr
*tb
[])
106 if (tb
[IFLA_BR_FORWARD_DELAY
])
107 fprintf(f
, "forward_delay %u ",
108 rta_getattr_u32(tb
[IFLA_BR_FORWARD_DELAY
]));
110 if (tb
[IFLA_BR_HELLO_TIME
])
111 fprintf(f
, "hello_time %u ",
112 rta_getattr_u32(tb
[IFLA_BR_HELLO_TIME
]));
114 if (tb
[IFLA_BR_MAX_AGE
])
115 fprintf(f
, "max_age %u ",
116 rta_getattr_u32(tb
[IFLA_BR_MAX_AGE
]));
119 static void bridge_print_help(struct link_util
*lu
, int argc
, char **argv
,
125 struct link_util bridge_link_util
= {
127 .maxattr
= IFLA_BR_MAX
,
128 .parse_opt
= bridge_parse_opt
,
129 .print_opt
= bridge_print_opt
,
130 .print_help
= bridge_print_help
,