mirror of
https://git.proxmox.com/git/mirror_iproute2
synced 2025-10-04 23:05:29 +00:00

We make it easier for users to correlate between 128-bit node identities and 32-bit node hash number by extending the 'node list' command to also show the hash number. We also improve the 'nametable show' command to show the node identity instead of the node hash number. Since the former potentially is much longer than the latter, we make room for it by eliminating the (to the user) irrelevant publication key. We also reorder some of the columns so that the node id comes last, since this looks nicer and is more logical. Signed-off-by: David Ahern <dsahern@gmail.com>
98 lines
2.2 KiB
C
98 lines
2.2 KiB
C
/*
|
|
* peer.c TIPC peer functionality.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the License, or (at your option) any later version.
|
|
*
|
|
* Authors: Richard Alpe <richard.alpe@ericsson.com>
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <errno.h>
|
|
|
|
#include <linux/tipc_netlink.h>
|
|
#include <linux/tipc.h>
|
|
#include <linux/genetlink.h>
|
|
#include <libmnl/libmnl.h>
|
|
|
|
#include "cmdl.h"
|
|
#include "msg.h"
|
|
#include "misc.h"
|
|
#include "peer.h"
|
|
|
|
static int cmd_peer_rm_addr(struct nlmsghdr *nlh, const struct cmd *cmd,
|
|
struct cmdl *cmdl, void *data)
|
|
{
|
|
char *str;
|
|
uint32_t addr;
|
|
struct nlattr *nest;
|
|
char buf[MNL_SOCKET_BUFFER_SIZE];
|
|
|
|
if ((cmdl->argc != cmdl->optind + 1) || help_flag) {
|
|
fprintf(stderr, "Usage: %s peer remove address ADDRESS\n",
|
|
cmdl->argv[0]);
|
|
return -EINVAL;
|
|
}
|
|
|
|
str = shift_cmdl(cmdl);
|
|
|
|
/* First try legacy Z.C.N format, then integer format */
|
|
addr = str2addr(str);
|
|
if (!addr)
|
|
addr = atoi(str);
|
|
if (!addr)
|
|
return -1;
|
|
|
|
if (!(nlh = msg_init(buf, TIPC_NL_PEER_REMOVE))) {
|
|
fprintf(stderr, "error, message initialisation failed\n");
|
|
return -1;
|
|
}
|
|
|
|
nest = mnl_attr_nest_start(nlh, TIPC_NLA_NET);
|
|
mnl_attr_put_u32(nlh, TIPC_NLA_NET_ADDR, addr);
|
|
mnl_attr_nest_end(nlh, nest);
|
|
|
|
return msg_doit(nlh, NULL, NULL);
|
|
}
|
|
|
|
static void cmd_peer_rm_help(struct cmdl *cmdl)
|
|
{
|
|
fprintf(stderr, "Usage: %s peer remove address ADDRESS\n",
|
|
cmdl->argv[0]);
|
|
}
|
|
|
|
static int cmd_peer_rm(struct nlmsghdr *nlh, const struct cmd *cmd,
|
|
struct cmdl *cmdl, void *data)
|
|
{
|
|
const struct cmd cmds[] = {
|
|
{ "address", cmd_peer_rm_addr, cmd_peer_rm_help },
|
|
{ NULL }
|
|
};
|
|
|
|
return run_cmd(nlh, cmd, cmds, cmdl, NULL);
|
|
}
|
|
|
|
void cmd_peer_help(struct cmdl *cmdl)
|
|
{
|
|
fprintf(stderr,
|
|
"Usage: %s peer COMMAND [ARGS] ...\n\n"
|
|
"COMMANDS\n"
|
|
" remove - Remove an offline peer node\n",
|
|
cmdl->argv[0]);
|
|
}
|
|
|
|
int cmd_peer(struct nlmsghdr *nlh, const struct cmd *cmd, struct cmdl *cmdl,
|
|
void *data)
|
|
{
|
|
const struct cmd cmds[] = {
|
|
{ "remove", cmd_peer_rm, cmd_peer_rm_help },
|
|
{ NULL }
|
|
};
|
|
|
|
return run_cmd(nlh, cmd, cmds, cmdl, NULL);
|
|
}
|