mirror of
https://git.proxmox.com/git/mirror_iproute2
synced 2025-10-05 19:02:41 +00:00
tipc: add link broadcast get
The command prints the actually method that multicast is running in the system. Also 'ratio' value for AUTOSELECT method. A sample usage is shown below: $tipc link get broadcast BROADCAST $tipc link get broadcast AUTOSELECT ratio:30% $tipc link get broadcast -j -p [ { "method": "AUTOSELECT" },{ "ratio": 30 } ] Acked-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: Hoang Le <hoang.h.le@dektech.com.au> Signed-off-by: David Ahern <dsahern@gmail.com>
This commit is contained in:
parent
0ea46945bc
commit
5027f233e3
85
tipc/link.c
85
tipc/link.c
@ -175,10 +175,92 @@ static void cmd_link_get_help(struct cmdl *cmdl)
|
||||
"PROPERTIES\n"
|
||||
" tolerance - Get link tolerance\n"
|
||||
" priority - Get link priority\n"
|
||||
" window - Get link window\n",
|
||||
" window - Get link window\n"
|
||||
" broadcast - Get link broadcast\n",
|
||||
cmdl->argv[0]);
|
||||
}
|
||||
|
||||
static int cmd_link_get_bcast_cb(const struct nlmsghdr *nlh, void *data)
|
||||
{
|
||||
int *prop = data;
|
||||
int prop_ratio = TIPC_NLA_PROP_BROADCAST_RATIO;
|
||||
struct genlmsghdr *genl = mnl_nlmsg_get_payload(nlh);
|
||||
struct nlattr *info[TIPC_NLA_MAX + 1] = {};
|
||||
struct nlattr *attrs[TIPC_NLA_LINK_MAX + 1] = {};
|
||||
struct nlattr *props[TIPC_NLA_PROP_MAX + 1] = {};
|
||||
int bc_mode;
|
||||
|
||||
mnl_attr_parse(nlh, sizeof(*genl), parse_attrs, info);
|
||||
if (!info[TIPC_NLA_LINK])
|
||||
return MNL_CB_ERROR;
|
||||
|
||||
mnl_attr_parse_nested(info[TIPC_NLA_LINK], parse_attrs, attrs);
|
||||
if (!attrs[TIPC_NLA_LINK_PROP])
|
||||
return MNL_CB_ERROR;
|
||||
|
||||
mnl_attr_parse_nested(attrs[TIPC_NLA_LINK_PROP], parse_attrs, props);
|
||||
if (!props[*prop])
|
||||
return MNL_CB_ERROR;
|
||||
|
||||
bc_mode = mnl_attr_get_u32(props[*prop]);
|
||||
|
||||
new_json_obj(json);
|
||||
open_json_object(NULL);
|
||||
switch (bc_mode) {
|
||||
case 0x1:
|
||||
print_string(PRINT_ANY, "method", "%s\n", "BROADCAST");
|
||||
break;
|
||||
case 0x2:
|
||||
print_string(PRINT_ANY, "method", "%s\n", "REPLICAST");
|
||||
break;
|
||||
case 0x4:
|
||||
print_string(PRINT_ANY, "method", "%s", "AUTOSELECT");
|
||||
close_json_object();
|
||||
open_json_object(NULL);
|
||||
print_uint(PRINT_ANY, "ratio", " ratio:%u%\n",
|
||||
mnl_attr_get_u32(props[prop_ratio]));
|
||||
break;
|
||||
default:
|
||||
print_string(PRINT_ANY, NULL, "UNKNOWN\n", NULL);
|
||||
break;
|
||||
}
|
||||
close_json_object();
|
||||
delete_json_obj();
|
||||
return MNL_CB_OK;
|
||||
}
|
||||
|
||||
static void cmd_link_get_bcast_help(struct cmdl *cmdl)
|
||||
{
|
||||
fprintf(stderr, "Usage: %s link get PPROPERTY\n\n"
|
||||
"PROPERTIES\n"
|
||||
" broadcast - Get link broadcast\n",
|
||||
cmdl->argv[0]);
|
||||
}
|
||||
|
||||
static int cmd_link_get_bcast(struct nlmsghdr *nlh, const struct cmd *cmd,
|
||||
struct cmdl *cmdl, void *data)
|
||||
{
|
||||
int prop = TIPC_NLA_PROP_BROADCAST;
|
||||
char buf[MNL_SOCKET_BUFFER_SIZE];
|
||||
struct nlattr *attrs;
|
||||
|
||||
if (help_flag) {
|
||||
(cmd->help)(cmdl);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
nlh = msg_init(buf, TIPC_NL_LINK_GET);
|
||||
if (!nlh) {
|
||||
fprintf(stderr, "error, message initialisation failed\n");
|
||||
return -1;
|
||||
}
|
||||
attrs = mnl_attr_nest_start(nlh, TIPC_NLA_LINK);
|
||||
/* Direct to broadcast-link setting */
|
||||
mnl_attr_put_strz(nlh, TIPC_NLA_LINK_NAME, tipc_bclink_name);
|
||||
mnl_attr_nest_end(nlh, attrs);
|
||||
return msg_doit(nlh, cmd_link_get_bcast_cb, &prop);
|
||||
}
|
||||
|
||||
static int cmd_link_get(struct nlmsghdr *nlh, const struct cmd *cmd,
|
||||
struct cmdl *cmdl, void *data)
|
||||
{
|
||||
@ -186,6 +268,7 @@ static int cmd_link_get(struct nlmsghdr *nlh, const struct cmd *cmd,
|
||||
{ PRIORITY_STR, cmd_link_get_prop, cmd_link_get_help },
|
||||
{ TOLERANCE_STR, cmd_link_get_prop, cmd_link_get_help },
|
||||
{ WINDOW_STR, cmd_link_get_prop, cmd_link_get_help },
|
||||
{ BROADCAST_STR, cmd_link_get_bcast, cmd_link_get_bcast_help },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user