2006-01-02 18:04:38 +00:00
|
|
|
/*
|
|
|
|
* net/tipc/netlink.c: TIPC configuration handling
|
2007-02-09 14:25:21 +00:00
|
|
|
*
|
2014-11-20 09:29:07 +00:00
|
|
|
* Copyright (c) 2005-2006, 2014, Ericsson AB
|
2008-05-21 21:52:30 +00:00
|
|
|
* Copyright (c) 2005-2007, Wind River Systems
|
2006-01-02 18:04:38 +00:00
|
|
|
* All rights reserved.
|
|
|
|
*
|
2006-01-11 12:30:43 +00:00
|
|
|
* Redistribution and use in source and binary forms, with or without
|
2006-01-02 18:04:38 +00:00
|
|
|
* modification, are permitted provided that the following conditions are met:
|
|
|
|
*
|
2006-01-11 12:30:43 +00:00
|
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
|
|
|
* 3. Neither the names of the copyright holders nor the names of its
|
|
|
|
* contributors may be used to endorse or promote products derived from
|
|
|
|
* this software without specific prior written permission.
|
2006-01-02 18:04:38 +00:00
|
|
|
*
|
2006-01-11 12:30:43 +00:00
|
|
|
* Alternatively, this software may be distributed under the terms of the
|
|
|
|
* GNU General Public License ("GPL") version 2 as published by the Free
|
|
|
|
* Software Foundation.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
|
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
2006-01-02 18:04:38 +00:00
|
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "core.h"
|
2014-11-20 09:29:10 +00:00
|
|
|
#include "socket.h"
|
2014-11-20 09:29:20 +00:00
|
|
|
#include "name_table.h"
|
2014-11-20 09:29:07 +00:00
|
|
|
#include "bearer.h"
|
2014-11-20 09:29:12 +00:00
|
|
|
#include "link.h"
|
2014-11-20 09:29:17 +00:00
|
|
|
#include "node.h"
|
2014-11-20 09:29:18 +00:00
|
|
|
#include "net.h"
|
2016-08-26 08:52:56 +00:00
|
|
|
#include "udp_media.h"
|
2006-01-02 18:04:38 +00:00
|
|
|
#include <net/genetlink.h>
|
|
|
|
|
2014-11-20 09:29:07 +00:00
|
|
|
static const struct nla_policy tipc_nl_policy[TIPC_NLA_MAX + 1] = {
|
|
|
|
[TIPC_NLA_UNSPEC] = { .type = NLA_UNSPEC, },
|
|
|
|
[TIPC_NLA_BEARER] = { .type = NLA_NESTED, },
|
2014-11-20 09:29:10 +00:00
|
|
|
[TIPC_NLA_SOCK] = { .type = NLA_NESTED, },
|
2014-11-20 09:29:12 +00:00
|
|
|
[TIPC_NLA_PUBL] = { .type = NLA_NESTED, },
|
|
|
|
[TIPC_NLA_LINK] = { .type = NLA_NESTED, },
|
2014-11-20 09:29:15 +00:00
|
|
|
[TIPC_NLA_MEDIA] = { .type = NLA_NESTED, },
|
2014-11-20 09:29:18 +00:00
|
|
|
[TIPC_NLA_NODE] = { .type = NLA_NESTED, },
|
2014-11-20 09:29:20 +00:00
|
|
|
[TIPC_NLA_NET] = { .type = NLA_NESTED, },
|
2016-07-26 06:47:19 +00:00
|
|
|
[TIPC_NLA_NAME_TABLE] = { .type = NLA_NESTED, },
|
|
|
|
[TIPC_NLA_MON] = { .type = NLA_NESTED, },
|
2014-11-20 09:29:07 +00:00
|
|
|
};
|
|
|
|
|
2016-03-04 16:04:42 +00:00
|
|
|
const struct nla_policy
|
|
|
|
tipc_nl_name_table_policy[TIPC_NLA_NAME_TABLE_MAX + 1] = {
|
|
|
|
[TIPC_NLA_NAME_TABLE_UNSPEC] = { .type = NLA_UNSPEC },
|
|
|
|
[TIPC_NLA_NAME_TABLE_PUBL] = { .type = NLA_NESTED }
|
|
|
|
};
|
|
|
|
|
2016-07-26 06:47:19 +00:00
|
|
|
const struct nla_policy tipc_nl_monitor_policy[TIPC_NLA_MON_MAX + 1] = {
|
|
|
|
[TIPC_NLA_MON_UNSPEC] = { .type = NLA_UNSPEC },
|
2016-07-26 06:47:22 +00:00
|
|
|
[TIPC_NLA_MON_REF] = { .type = NLA_U32 },
|
2016-07-26 06:47:19 +00:00
|
|
|
[TIPC_NLA_MON_ACTIVATION_THRESHOLD] = { .type = NLA_U32 },
|
|
|
|
};
|
|
|
|
|
2016-03-04 16:04:42 +00:00
|
|
|
const struct nla_policy tipc_nl_sock_policy[TIPC_NLA_SOCK_MAX + 1] = {
|
|
|
|
[TIPC_NLA_SOCK_UNSPEC] = { .type = NLA_UNSPEC },
|
|
|
|
[TIPC_NLA_SOCK_ADDR] = { .type = NLA_U32 },
|
|
|
|
[TIPC_NLA_SOCK_REF] = { .type = NLA_U32 },
|
|
|
|
[TIPC_NLA_SOCK_CON] = { .type = NLA_NESTED },
|
|
|
|
[TIPC_NLA_SOCK_HAS_PUBL] = { .type = NLA_FLAG }
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct nla_policy tipc_nl_net_policy[TIPC_NLA_NET_MAX + 1] = {
|
|
|
|
[TIPC_NLA_NET_UNSPEC] = { .type = NLA_UNSPEC },
|
2018-04-16 15:29:42 +00:00
|
|
|
[TIPC_NLA_NET_ID] = { .type = NLA_U32 },
|
|
|
|
[TIPC_NLA_NET_ADDR] = { .type = NLA_U32 },
|
2018-04-16 15:29:43 +00:00
|
|
|
[TIPC_NLA_NET_NODEID] = { .type = NLA_U64 },
|
|
|
|
[TIPC_NLA_NET_NODEID_W1] = { .type = NLA_U64 },
|
2019-12-19 05:03:57 +00:00
|
|
|
[TIPC_NLA_NET_ADDR_LEGACY] = { .type = NLA_FLAG }
|
2016-03-04 16:04:42 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
const struct nla_policy tipc_nl_link_policy[TIPC_NLA_LINK_MAX + 1] = {
|
|
|
|
[TIPC_NLA_LINK_UNSPEC] = { .type = NLA_UNSPEC },
|
2023-10-30 07:55:40 +00:00
|
|
|
[TIPC_NLA_LINK_NAME] = { .type = NLA_NUL_STRING,
|
2016-03-04 16:04:42 +00:00
|
|
|
.len = TIPC_MAX_LINK_NAME },
|
|
|
|
[TIPC_NLA_LINK_MTU] = { .type = NLA_U32 },
|
|
|
|
[TIPC_NLA_LINK_BROADCAST] = { .type = NLA_FLAG },
|
|
|
|
[TIPC_NLA_LINK_UP] = { .type = NLA_FLAG },
|
|
|
|
[TIPC_NLA_LINK_ACTIVE] = { .type = NLA_FLAG },
|
|
|
|
[TIPC_NLA_LINK_PROP] = { .type = NLA_NESTED },
|
|
|
|
[TIPC_NLA_LINK_STATS] = { .type = NLA_NESTED },
|
|
|
|
[TIPC_NLA_LINK_RX] = { .type = NLA_U32 },
|
|
|
|
[TIPC_NLA_LINK_TX] = { .type = NLA_U32 }
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct nla_policy tipc_nl_node_policy[TIPC_NLA_NODE_MAX + 1] = {
|
|
|
|
[TIPC_NLA_NODE_UNSPEC] = { .type = NLA_UNSPEC },
|
|
|
|
[TIPC_NLA_NODE_ADDR] = { .type = NLA_U32 },
|
2019-11-08 05:05:12 +00:00
|
|
|
[TIPC_NLA_NODE_UP] = { .type = NLA_FLAG },
|
|
|
|
[TIPC_NLA_NODE_ID] = { .type = NLA_BINARY,
|
|
|
|
.len = TIPC_NODEID_LEN},
|
|
|
|
[TIPC_NLA_NODE_KEY] = { .type = NLA_BINARY,
|
|
|
|
.len = TIPC_AEAD_KEY_SIZE_MAX},
|
tipc: introduce encryption master key
In addition to the supported cluster & per-node encryption keys for the
en/decryption of TIPC messages, we now introduce one option for user to
set a cluster key as 'master key', which is simply a symmetric key like
the former but has a longer life cycle. It has two purposes:
- Authentication of new member nodes in the cluster. New nodes, having
no knowledge of current session keys in the cluster will still be
able to join the cluster as long as they know the master key. This is
because all neighbor discovery (LINK_CONFIG) messages must be
encrypted with this key.
- Encryption of session encryption keys during automatic exchange and
update of those.This is a feature we will introduce in a later commit
in this series.
We insert the new key into the currently unused slot 0 in the key array
and start using it immediately once the user has set it.
After joining, a node only knowing the master key should be fully
communicable to existing nodes in the cluster, although those nodes may
have their own session keys activated (i.e. not the master one). To
support this, we define a 'grace period', starting from the time a node
itself reports having no RX keys, so the existing nodes will use the
master key for encryption instead. The grace period can be extended but
will automatically stop after e.g. 5 seconds without a new report. This
is also the basis for later key exchanging feature as the new node will
be impossible to decrypt anything without the support from master key.
For user to set a master key, we define a new netlink flag -
'TIPC_NLA_NODE_KEY_MASTER', so it can be added to the current 'set key'
netlink command to specify the setting key to be a master key.
Above all, the traditional cluster/per-node key mechanism is guaranteed
to work when user comes not to use this master key option. This is also
compatible to legacy nodes without the feature supported.
Even this master key can be updated without any interruption of cluster
connectivity but is so is needed, this has to be coordinated and set by
the user.
Acked-by: Jon Maloy <jmaloy@redhat.com>
Signed-off-by: Tuong Lien <tuong.t.lien@dektech.com.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-09-18 01:17:27 +00:00
|
|
|
[TIPC_NLA_NODE_KEY_MASTER] = { .type = NLA_FLAG },
|
2020-09-18 01:17:29 +00:00
|
|
|
[TIPC_NLA_NODE_REKEYING] = { .type = NLA_U32 },
|
2016-03-04 16:04:42 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Properties valid for media, bearer and link */
|
|
|
|
const struct nla_policy tipc_nl_prop_policy[TIPC_NLA_PROP_MAX + 1] = {
|
|
|
|
[TIPC_NLA_PROP_UNSPEC] = { .type = NLA_UNSPEC },
|
|
|
|
[TIPC_NLA_PROP_PRIO] = { .type = NLA_U32 },
|
|
|
|
[TIPC_NLA_PROP_TOL] = { .type = NLA_U32 },
|
tipc: support broadcast/replicast configurable for bc-link
Currently, a multicast stream uses either broadcast or replicast as
transmission method, based on the ratio between number of actual
destinations nodes and cluster size.
However, when an L2 interface (e.g., VXLAN) provides pseudo
broadcast support, this becomes very inefficient, as it blindly
replicates multicast packets to all cluster/subnet nodes,
irrespective of whether they host actual target sockets or not.
The TIPC multicast algorithm is able to distinguish real destination
nodes from other nodes, and hence provides a smarter and more
efficient method for transferring multicast messages than
pseudo broadcast can do.
Because of this, we now make it possible for users to force
the broadcast link to permanently switch to using replicast,
irrespective of which capabilities the bearer provides,
or pretend to provide.
Conversely, we also make it possible to force the broadcast link
to always use true broadcast. While maybe less useful in
deployed systems, this may at least be useful for testing the
broadcast algorithm in small clusters.
We retain the current AUTOSELECT ability, i.e., to let the broadcast link
automatically select which algorithm to use, and to switch back and forth
between broadcast and replicast as the ratio between destination
node number and cluster size changes. This remains the default method.
Furthermore, we make it possible to configure the threshold ratio for
such switches. The default ratio is now set to 10%, down from 25% in the
earlier implementation.
Acked-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: Hoang Le <hoang.h.le@dektech.com.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-03-19 11:49:48 +00:00
|
|
|
[TIPC_NLA_PROP_WIN] = { .type = NLA_U32 },
|
2020-03-03 05:05:23 +00:00
|
|
|
[TIPC_NLA_PROP_MTU] = { .type = NLA_U32 },
|
tipc: support broadcast/replicast configurable for bc-link
Currently, a multicast stream uses either broadcast or replicast as
transmission method, based on the ratio between number of actual
destinations nodes and cluster size.
However, when an L2 interface (e.g., VXLAN) provides pseudo
broadcast support, this becomes very inefficient, as it blindly
replicates multicast packets to all cluster/subnet nodes,
irrespective of whether they host actual target sockets or not.
The TIPC multicast algorithm is able to distinguish real destination
nodes from other nodes, and hence provides a smarter and more
efficient method for transferring multicast messages than
pseudo broadcast can do.
Because of this, we now make it possible for users to force
the broadcast link to permanently switch to using replicast,
irrespective of which capabilities the bearer provides,
or pretend to provide.
Conversely, we also make it possible to force the broadcast link
to always use true broadcast. While maybe less useful in
deployed systems, this may at least be useful for testing the
broadcast algorithm in small clusters.
We retain the current AUTOSELECT ability, i.e., to let the broadcast link
automatically select which algorithm to use, and to switch back and forth
between broadcast and replicast as the ratio between destination
node number and cluster size changes. This remains the default method.
Furthermore, we make it possible to configure the threshold ratio for
such switches. The default ratio is now set to 10%, down from 25% in the
earlier implementation.
Acked-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: Hoang Le <hoang.h.le@dektech.com.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-03-19 11:49:48 +00:00
|
|
|
[TIPC_NLA_PROP_BROADCAST] = { .type = NLA_U32 },
|
|
|
|
[TIPC_NLA_PROP_BROADCAST_RATIO] = { .type = NLA_U32 }
|
2016-03-04 16:04:42 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
const struct nla_policy tipc_nl_bearer_policy[TIPC_NLA_BEARER_MAX + 1] = {
|
|
|
|
[TIPC_NLA_BEARER_UNSPEC] = { .type = NLA_UNSPEC },
|
2023-10-30 07:55:40 +00:00
|
|
|
[TIPC_NLA_BEARER_NAME] = { .type = NLA_NUL_STRING,
|
2016-03-04 16:04:42 +00:00
|
|
|
.len = TIPC_MAX_BEARER_NAME },
|
|
|
|
[TIPC_NLA_BEARER_PROP] = { .type = NLA_NESTED },
|
|
|
|
[TIPC_NLA_BEARER_DOMAIN] = { .type = NLA_U32 }
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct nla_policy tipc_nl_media_policy[TIPC_NLA_MEDIA_MAX + 1] = {
|
|
|
|
[TIPC_NLA_MEDIA_UNSPEC] = { .type = NLA_UNSPEC },
|
|
|
|
[TIPC_NLA_MEDIA_NAME] = { .type = NLA_STRING },
|
|
|
|
[TIPC_NLA_MEDIA_PROP] = { .type = NLA_NESTED }
|
|
|
|
};
|
|
|
|
|
|
|
|
const struct nla_policy tipc_nl_udp_policy[TIPC_NLA_UDP_MAX + 1] = {
|
|
|
|
[TIPC_NLA_UDP_UNSPEC] = {.type = NLA_UNSPEC},
|
|
|
|
[TIPC_NLA_UDP_LOCAL] = {.type = NLA_BINARY,
|
|
|
|
.len = sizeof(struct sockaddr_storage)},
|
|
|
|
[TIPC_NLA_UDP_REMOTE] = {.type = NLA_BINARY,
|
|
|
|
.len = sizeof(struct sockaddr_storage)},
|
|
|
|
};
|
|
|
|
|
2014-11-20 09:29:07 +00:00
|
|
|
/* Users of the legacy API (tipc-config) can't handle that we add operations,
|
|
|
|
* so we have a separate genl handling for the new API.
|
|
|
|
*/
|
|
|
|
static const struct genl_ops tipc_genl_v2_ops[] = {
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_BEARER_DISABLE,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2014-11-20 09:29:07 +00:00
|
|
|
.doit = tipc_nl_bearer_disable,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_BEARER_ENABLE,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2014-11-20 09:29:07 +00:00
|
|
|
.doit = tipc_nl_bearer_enable,
|
2014-11-20 09:29:08 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_BEARER_GET,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2014-11-20 09:29:08 +00:00
|
|
|
.doit = tipc_nl_bearer_get,
|
|
|
|
.dumpit = tipc_nl_bearer_dump,
|
2014-11-20 09:29:09 +00:00
|
|
|
},
|
2016-08-26 08:52:53 +00:00
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_BEARER_ADD,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2016-08-26 08:52:53 +00:00
|
|
|
.doit = tipc_nl_bearer_add,
|
|
|
|
},
|
2014-11-20 09:29:09 +00:00
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_BEARER_SET,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2014-11-20 09:29:09 +00:00
|
|
|
.doit = tipc_nl_bearer_set,
|
2014-11-20 09:29:10 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_SOCK_GET,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2018-08-24 19:28:06 +00:00
|
|
|
.start = tipc_dump_start,
|
2014-11-20 09:29:10 +00:00
|
|
|
.dumpit = tipc_nl_sk_dump,
|
2018-08-24 19:28:06 +00:00
|
|
|
.done = tipc_dump_done,
|
2014-11-20 09:29:11 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_PUBL_GET,
|
2019-10-05 18:04:39 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT |
|
|
|
|
GENL_DONT_VALIDATE_DUMP_STRICT,
|
2014-11-20 09:29:11 +00:00
|
|
|
.dumpit = tipc_nl_publ_dump,
|
2014-11-20 09:29:12 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_LINK_GET,
|
2020-05-26 09:38:37 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT,
|
2015-11-19 19:30:45 +00:00
|
|
|
.doit = tipc_nl_node_get_link,
|
2015-11-19 19:30:46 +00:00
|
|
|
.dumpit = tipc_nl_node_dump_link,
|
2014-11-20 09:29:13 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_LINK_SET,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2015-11-19 19:30:45 +00:00
|
|
|
.doit = tipc_nl_node_set_link,
|
2014-11-20 09:29:14 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_LINK_RESET_STATS,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2015-11-19 19:30:45 +00:00
|
|
|
.doit = tipc_nl_node_reset_link_stats,
|
2014-11-20 09:29:15 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_MEDIA_GET,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2014-11-20 09:29:15 +00:00
|
|
|
.doit = tipc_nl_media_get,
|
|
|
|
.dumpit = tipc_nl_media_dump,
|
2014-11-20 09:29:16 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_MEDIA_SET,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2014-11-20 09:29:16 +00:00
|
|
|
.doit = tipc_nl_media_set,
|
2014-11-20 09:29:17 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_NODE_GET,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2014-11-20 09:29:17 +00:00
|
|
|
.dumpit = tipc_nl_node_dump,
|
2014-11-20 09:29:18 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_NET_GET,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2014-11-20 09:29:18 +00:00
|
|
|
.dumpit = tipc_nl_net_dump,
|
2014-11-20 09:29:19 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_NET_SET,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2014-11-20 09:29:19 +00:00
|
|
|
.doit = tipc_nl_net_set,
|
2014-11-20 09:29:20 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_NAME_TABLE_GET,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2014-11-20 09:29:20 +00:00
|
|
|
.dumpit = tipc_nl_name_table_dump,
|
2016-07-26 06:47:19 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_MON_SET,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2016-07-26 06:47:19 +00:00
|
|
|
.doit = tipc_nl_node_set_monitor,
|
|
|
|
},
|
2016-07-26 06:47:20 +00:00
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_MON_GET,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2016-07-26 06:47:20 +00:00
|
|
|
.doit = tipc_nl_node_get_monitor,
|
2016-07-26 06:47:22 +00:00
|
|
|
.dumpit = tipc_nl_node_dump_monitor,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_MON_PEER_GET,
|
2019-10-05 18:04:39 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT |
|
|
|
|
GENL_DONT_VALIDATE_DUMP_STRICT,
|
2016-07-26 06:47:22 +00:00
|
|
|
.dumpit = tipc_nl_node_dump_monitor_peer,
|
2016-07-26 06:47:20 +00:00
|
|
|
},
|
2016-08-18 08:33:52 +00:00
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_PEER_REMOVE,
|
2019-04-26 12:07:31 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
2016-08-18 08:33:52 +00:00
|
|
|
.doit = tipc_nl_peer_rm,
|
2016-08-26 08:52:56 +00:00
|
|
|
},
|
|
|
|
#ifdef CONFIG_TIPC_MEDIA_UDP
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_UDP_GET_REMOTEIP,
|
2019-10-05 18:04:39 +00:00
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT |
|
|
|
|
GENL_DONT_VALIDATE_DUMP_STRICT,
|
2016-08-26 08:52:56 +00:00
|
|
|
.dumpit = tipc_udp_nl_dump_remoteip,
|
|
|
|
},
|
|
|
|
#endif
|
2019-11-08 05:05:12 +00:00
|
|
|
#ifdef CONFIG_TIPC_CRYPTO
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_KEY_SET,
|
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
|
|
|
.doit = tipc_nl_node_set_key,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_KEY_FLUSH,
|
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
|
|
|
.doit = tipc_nl_node_flush_key,
|
|
|
|
},
|
|
|
|
#endif
|
2019-12-19 05:03:57 +00:00
|
|
|
{
|
|
|
|
.cmd = TIPC_NL_ADDR_LEGACY_GET,
|
|
|
|
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
|
|
|
.doit = tipc_nl_net_addr_legacy_get,
|
|
|
|
},
|
2014-11-20 09:29:07 +00:00
|
|
|
};
|
|
|
|
|
2016-10-24 12:40:05 +00:00
|
|
|
struct genl_family tipc_genl_family __ro_after_init = {
|
2016-10-24 12:40:03 +00:00
|
|
|
.name = TIPC_GENL_V2_NAME,
|
|
|
|
.version = TIPC_GENL_V2_VERSION,
|
|
|
|
.hdrsize = 0,
|
|
|
|
.maxattr = TIPC_NLA_MAX,
|
2019-06-24 06:45:16 +00:00
|
|
|
.policy = tipc_nl_policy,
|
2016-10-24 12:40:03 +00:00
|
|
|
.netnsok = true,
|
|
|
|
.module = THIS_MODULE,
|
|
|
|
.ops = tipc_genl_v2_ops,
|
|
|
|
.n_ops = ARRAY_SIZE(tipc_genl_v2_ops),
|
2022-08-25 00:18:30 +00:00
|
|
|
.resv_start_op = TIPC_NL_ADDR_LEGACY_GET + 1,
|
2016-10-24 12:40:03 +00:00
|
|
|
};
|
|
|
|
|
2016-10-24 12:40:05 +00:00
|
|
|
int __init tipc_netlink_start(void)
|
2006-01-02 18:04:38 +00:00
|
|
|
{
|
2009-05-21 10:34:05 +00:00
|
|
|
int res;
|
2006-01-10 18:54:24 +00:00
|
|
|
|
2016-10-24 12:40:03 +00:00
|
|
|
res = genl_register_family(&tipc_genl_family);
|
2009-05-21 10:34:05 +00:00
|
|
|
if (res) {
|
2012-06-29 04:16:37 +00:00
|
|
|
pr_err("Failed to register netlink interface\n");
|
2009-05-21 10:34:05 +00:00
|
|
|
return res;
|
|
|
|
}
|
2007-02-09 14:25:21 +00:00
|
|
|
return 0;
|
2006-01-02 18:04:38 +00:00
|
|
|
}
|
|
|
|
|
2006-01-17 23:38:21 +00:00
|
|
|
void tipc_netlink_stop(void)
|
2006-01-02 18:04:38 +00:00
|
|
|
{
|
2009-05-21 10:34:05 +00:00
|
|
|
genl_unregister_family(&tipc_genl_family);
|
2006-01-02 18:04:38 +00:00
|
|
|
}
|