]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
tipc: add peer remove functionality
authorRichard Alpe <richard.alpe@ericsson.com>
Tue, 5 Jan 2016 09:57:40 +0000 (10:57 +0100)
committerStephen Hemminger <stephen@networkplumber.org>
Wed, 6 Jan 2016 17:24:25 +0000 (09:24 -0800)
This enables a user to remove an offline peer from the kernel data
structures. This could for example be useful when deliberately scaling
in peer nodes in a cloud environment.

Signed-off-by: Richard Alpe <richard.alpe@ericsson.com>
Reviewed-by: Jon Maloy <jon.maloy@ericsson.com>
Reviewed-by: Ying Xue <ying.xue@windriver.com>
12 files changed:
include/linux/tipc_netlink.h
man/man8/tipc-bearer.8
man/man8/tipc-link.8
man/man8/tipc-media.8
man/man8/tipc-nametable.8
man/man8/tipc-node.8
man/man8/tipc-peer.8 [new file with mode: 0644]
man/man8/tipc.8
tipc/Makefile
tipc/peer.c [new file with mode: 0644]
tipc/peer.h [new file with mode: 0644]
tipc/tipc.c

index d4c8f142ba633d8e96d5a227ce1d91dc79c70235..25eb645e3ae5793f7b8732620710b21c1e6722c7 100644 (file)
@@ -56,6 +56,7 @@ enum {
        TIPC_NL_NET_GET,
        TIPC_NL_NET_SET,
        TIPC_NL_NAME_TABLE_GET,
+       TIPC_NL_PEER_REMOVE,
 
        __TIPC_NL_CMD_MAX,
        TIPC_NL_CMD_MAX = __TIPC_NL_CMD_MAX - 1
index 50a1ed2452b17062d9fc3eff9bc5c2cc9374874a..565ee01d4391eaa5e6621e4907b71da262857c1e 100644 (file)
@@ -218,6 +218,7 @@ Exit status is 0 if command was successful or a positive integer upon failure.
 .BR tipc-media (8),
 .BR tipc-nametable (8),
 .BR tipc-node (8),
+.BR tipc-peer (8),
 .BR tipc-socket (8)
 .br
 .SH REPORTING BUGS
index 3be8c9ad4b16dc226f11be327ad499285237c8d7..2ee03a0bd96e54a176cb9779d2667f523ec5141f 100644 (file)
@@ -213,6 +213,7 @@ Exit status is 0 if command was successful or a positive integer upon failure.
 .BR tipc-bearer (8),
 .BR tipc-nametable (8),
 .BR tipc-node (8),
+.BR tipc-peer (8),
 .BR tipc-socket (8)
 .br
 .SH REPORTING BUGS
index 6c6e2b152d2e219aeff84dbdec3c8374c9b9c9b9..4689cb3fae96a139609197f884fdc327febce561 100644 (file)
@@ -74,6 +74,7 @@ Exit status is 0 if command was successful or a positive integer upon failure.
 .BR tipc-link (8),
 .BR tipc-nametable (8),
 .BR tipc-node (8),
+.BR tipc-peer (8),
 .BR tipc-socket (8)
 .br
 .SH REPORTING BUGS
index d3397f97de5343bca10611cbe8ff170303e33ca0..4bcefe47f6b169903b1ac6ede61c1209362f158f 100644 (file)
@@ -87,6 +87,7 @@ Exit status is 0 if command was successful or a positive integer upon failure.
 .BR tipc-link (8),
 .BR tipc-media (8),
 .BR tipc-node (8),
+.BR tipc-peer (8),
 .BR tipc-socket (8)
 .br
 .SH REPORTING BUGS
index ef32ec7c8eb045099d424f786967a067384e9c36..a72a4099110fa67fefc3821454d0fce36acc0600 100644 (file)
@@ -59,6 +59,7 @@ Exit status is 0 if command was successful or a positive integer upon failure.
 .BR tipc-link (8),
 .BR tipc-media (8),
 .BR tipc-nametable (8),
+.BR tipc-peer (8),
 .BR tipc-socket (8)
 .br
 .SH REPORTING BUGS
diff --git a/man/man8/tipc-peer.8 b/man/man8/tipc-peer.8
new file mode 100644 (file)
index 0000000..430651f
--- /dev/null
@@ -0,0 +1,52 @@
+.TH TIPC-PEER 8 "04 Dec 2015" "iproute2" "Linux"
+
+.\" For consistency, please keep padding right aligned.
+.\" For example '.B "foo " bar' and not '.B foo " bar"'
+
+.SH NAME
+tipc-peer \- modify peer information
+
+.SH SYNOPSIS
+.ad l
+.in +8
+
+.ti -8
+.B tipc peer remove address
+.IR ADDRESS
+
+.SH OPTIONS
+Options (flags) that can be passed anywhere in the command chain.
+.TP
+.BR "\-h" , " --help"
+Show help about last valid command. For example
+.B tipc peer --help
+will show peer help and
+.B tipc --help
+will show general help. The position of the option in the string is irrelevant.
+.SH DESCRIPTION
+
+.SS Peer remove
+Remove an offline peer node from the local data structures. The peer is
+identified by its
+.B address
+
+.SH EXIT STATUS
+Exit status is 0 if command was successful or a positive integer upon failure.
+
+.SH SEE ALSO
+.BR tipc (8),
+.BR tipc-bearer (8),
+.BR tipc-link (8),
+.BR tipc-media (8),
+.BR tipc-nametable (8),
+.BR tipc-node (8),
+.BR tipc-socket (8)
+.br
+.SH REPORTING BUGS
+Report any bugs to the Network Developers mailing list
+.B <netdev@vger.kernel.org>
+where the development and maintenance is primarily done.
+You do not have to be subscribed to the list to send a message there.
+
+.SH AUTHOR
+Richard Alpe <richard.alpe@ericsson.com>
index c1165523828438c95814ee17187bc2f28a646b73..32943fa50b2315fdfb6ad20bd76864755b73422b 100644 (file)
@@ -87,6 +87,7 @@ Exit status is 0 if command was successful or a positive integer upon failure.
 .BR tipc-media (8),
 .BR tipc-nametable (8),
 .BR tipc-node (8),
+.BR tipc-peer (8),
 .BR tipc-socket (8)
 .br
 .SH REPORTING BUGS
index bc5ecfd37518749e23190a3464745ddfe7ccfdbd..f06dcb11931805873ee2d2d66aef9dabbec5eb57 100644 (file)
@@ -6,7 +6,7 @@ TIPCOBJ=bearer.o \
     media.o misc.o \
     msg.o nametable.o \
     node.o socket.o \
-    tipc.o
+    peer.o tipc.o
 
 include ../Config
 
diff --git a/tipc/peer.c b/tipc/peer.c
new file mode 100644 (file)
index 0000000..de0c73c
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * 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);
+       addr = str2addr(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);
+}
diff --git a/tipc/peer.h b/tipc/peer.h
new file mode 100644 (file)
index 0000000..8972261
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * peer.h      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>
+ */
+
+#ifndef _TIPC_PEER_H
+#define _TIPC_PEER_H
+
+extern int help_flag;
+
+int cmd_peer(struct nlmsghdr *nlh, const struct cmd *cmd, struct cmdl *cmdl,
+            void *data);
+void cmd_peer_help(struct cmdl *cmdl);
+
+#endif
index 44398052af46c028ee9fba67d69ad1128a6acc89..600d5e2a160f5f9d979a9e0ec44e76cfb366190a 100644 (file)
@@ -20,6 +20,7 @@
 #include "socket.h"
 #include "media.h"
 #include "node.h"
+#include "peer.h"
 #include "cmdl.h"
 
 int help_flag;
@@ -39,6 +40,7 @@ static void about(struct cmdl *cmdl)
                " media                 - Show or modify media\n"
                " nametable             - Show nametable\n"
                " node                  - Show or modify node related parameters\n"
+               " peer                  - Peer related operations\n"
                " socket                - Show sockets\n",
                cmdl->argv[0]);
 }
@@ -59,6 +61,7 @@ int main(int argc, char *argv[])
                { "media",      cmd_media,      cmd_media_help},
                { "nametable",  cmd_nametable,  cmd_nametable_help},
                { "node",       cmd_node,       cmd_node_help},
+               { "peer",       cmd_peer,       cmd_peer_help},
                { "socket",     cmd_socket,     cmd_socket_help},
                { NULL }
        };