fragmentation.c 1.55 KB
Newer Older
1
// SPDX-License-Identifier: GPL-2.0
2
/* Copyright (C) 2009-2019  B.A.T.M.A.N. contributors:
3 4 5 6 7 8 9
 *
 * Marek Lindner <mareklindner@neomailbox.ch>
 *
 * License-Filename: LICENSES/preferred/GPL-2.0
 */

#include "main.h"
10 11 12 13 14 15 16

#include <errno.h>
#include <linux/genetlink.h>
#include <netlink/genl/genl.h>

#include "batman_adv.h"
#include "netlink.h"
17 18
#include "sys.h"

19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
static struct simple_boolean_data fragmentation;

static int print_fragmentation(struct nl_msg *msg, void *arg)
{
	return sys_simple_print_boolean(msg, arg,
					BATADV_ATTR_FRAGMENTATION_ENABLED);
}

static int get_fragmentation(struct state *state)
{
	return sys_simple_nlquery(state, BATADV_CMD_GET_MESH,
				  NULL, print_fragmentation);
}

static int set_attrs_fragmentation(struct nl_msg *msg, void *arg)
{
	struct state *state = arg;
	struct settings_data *settings = state->cmd->arg;
	struct simple_boolean_data *data = settings->data;

	nla_put_u8(msg, BATADV_ATTR_FRAGMENTATION_ENABLED, data->val);

	return 0;
}

static int set_fragmentation(struct state *state)
{
	return sys_simple_nlquery(state, BATADV_CMD_SET_MESH,
				  set_attrs_fragmentation, NULL);
}

50 51
static struct settings_data batctl_settings_fragmentation = {
	.sysfs_name = "fragmentation",
52 53 54 55
	.data = &fragmentation,
	.parse = parse_simple_boolean,
	.netlink_get = get_fragmentation,
	.netlink_set = set_fragmentation,
56 57
};

58
COMMAND_NAMED(SUBCOMMAND_MIF, fragmentation, "f", handle_sys_setting,
59 60
	      COMMAND_FLAG_MESH_IFACE | COMMAND_FLAG_NETLINK,
	      &batctl_settings_fragmentation,
61
	      "[0|1]             \tdisplay or modify fragmentation setting");