forked from Minki/linux
This feature/cleanup patchset includes the following patches:
- fix memory leak in in batadv_dat_put_dhcp, by Martin Weinelt - fix typo, by Sven Eckelmann - netlink restructuring patch series (part 2), by Sven Eckelmann (19 patches) -----BEGIN PGP SIGNATURE----- iQJKBAABCgA0FiEE1ilQI7G+y+fdhnrfoSvjmEKSnqEFAlxj6MYWHHN3QHNpbW9u d3VuZGVybGljaC5kZQAKCRChK+OYQpKeoYTMD/9Uyaqe4ULGQ+rLBnCMSuNc5AnQ d7hebUep1RVDyyzJaHRNLmPwmSDNscdQX2AaAxOMhrbmDiBceHq1vDpNvLMDCa0g 4KbljpfICc6Wm8cq6zHMvL5DQYdxvHt3xDDOvTufhTDra0+cZ8b7tLN1GIztrSSL BJ4gUkVydtFUIGCPkSfqZoMI82VTo4V/vOQpaAAANJXVehajHhPLOc2+AqnsHTxC 6EpNFbMib7sxvrDV5/GdkhtyikmNyHXlaZaiboJjH8htdRWmxHSIfelgDZ2KzqJK NG5EhZNljLEHHU5cnCBA1ptvjB0zWVF1WEZDyD3fHPraNdmeyCyqI1kuEMFHPSEr PZ+gD9wqnmgQUc3D7Xi7Q0faEQ5wcOKtcCvMrWgydbQxanhiftBH8pikkR9VJh+B 1ADuN2m+OSKaZ8Fw5tqknNbd8paKztlndgSNRHEc9KOWnT91cKO02Zg9wCyNhn7S SI/0eLZx0N0v3T/UVsoKbjKGCEiFZzgXMBRRb7jthJghD2hnyx+s1tRzkgxIJj8z fI5hwAl//m6tSCDjbOLjCdsNHiGs4AhP0MsFq5jHmpqvsY8ZUX59LcRnpfhX3IaN L+KpBxH9O25Pd3JgXgjlcuza2L1L/V7piPUit/C8LVb7goNN3QCi+UtXFVMR1C4c J7kI7vMak8BEIs4EuQ== =+p14 -----END PGP SIGNATURE----- Merge tag 'batadv-next-for-davem-20190213' of git://git.open-mesh.org/linux-merge Simon Wunderlich says: ==================== This feature/cleanup patchset includes the following patches: - fix memory leak in in batadv_dat_put_dhcp, by Martin Weinelt - fix typo, by Sven Eckelmann - netlink restructuring patch series (part 2), by Sven Eckelmann (19 patches) ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
03b9674202
@ -229,7 +229,7 @@ struct batadv_ogm_packet {
|
||||
* @packet_type: batman-adv packet type, part of the general header
|
||||
* @version: batman-adv protocol version, part of the general header
|
||||
* @ttl: time to live for this packet, part of the general header
|
||||
* @flags: reseved for routing relevant flags - currently always 0
|
||||
* @flags: reserved for routing relevant flags - currently always 0
|
||||
* @seqno: sequence number
|
||||
* @orig: originator mac address
|
||||
* @tvlv_len: length of the appended tvlv buffer (in bytes)
|
||||
|
@ -27,6 +27,7 @@
|
||||
|
||||
#define BATADV_NL_NAME "batadv"
|
||||
|
||||
#define BATADV_NL_MCAST_GROUP_CONFIG "config"
|
||||
#define BATADV_NL_MCAST_GROUP_TPMETER "tpmeter"
|
||||
|
||||
/**
|
||||
@ -138,6 +139,20 @@ enum batadv_mcast_flags_priv {
|
||||
BATADV_MCAST_FLAGS_QUERIER_IPV6_SHADOWING = (1 << 4),
|
||||
};
|
||||
|
||||
/**
|
||||
* enum batadv_gw_modes - gateway mode of node
|
||||
*/
|
||||
enum batadv_gw_modes {
|
||||
/** @BATADV_GW_MODE_OFF: gw mode disabled */
|
||||
BATADV_GW_MODE_OFF,
|
||||
|
||||
/** @BATADV_GW_MODE_CLIENT: send DHCP requests to gw servers */
|
||||
BATADV_GW_MODE_CLIENT,
|
||||
|
||||
/** @BATADV_GW_MODE_SERVER: announce itself as gatway server */
|
||||
BATADV_GW_MODE_SERVER,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum batadv_nl_attrs - batman-adv netlink attributes
|
||||
*/
|
||||
@ -344,6 +359,138 @@ enum batadv_nl_attrs {
|
||||
*/
|
||||
BATADV_ATTR_MCAST_FLAGS_PRIV,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_VLANID: VLAN id on top of soft interface
|
||||
*/
|
||||
BATADV_ATTR_VLANID,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_AGGREGATED_OGMS_ENABLED: whether the batman protocol
|
||||
* messages of the mesh interface shall be aggregated or not.
|
||||
*/
|
||||
BATADV_ATTR_AGGREGATED_OGMS_ENABLED,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_AP_ISOLATION_ENABLED: whether the data traffic going
|
||||
* from a wireless client to another wireless client will be silently
|
||||
* dropped.
|
||||
*/
|
||||
BATADV_ATTR_AP_ISOLATION_ENABLED,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_ISOLATION_MARK: the isolation mark which is used to
|
||||
* classify clients as "isolated" by the Extended Isolation feature.
|
||||
*/
|
||||
BATADV_ATTR_ISOLATION_MARK,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_ISOLATION_MASK: the isolation (bit)mask which is used to
|
||||
* classify clients as "isolated" by the Extended Isolation feature.
|
||||
*/
|
||||
BATADV_ATTR_ISOLATION_MASK,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_BONDING_ENABLED: whether the data traffic going through
|
||||
* the mesh will be sent using multiple interfaces at the same time.
|
||||
*/
|
||||
BATADV_ATTR_BONDING_ENABLED,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED: whether the bridge loop
|
||||
* avoidance feature is enabled. This feature detects and avoids loops
|
||||
* between the mesh and devices bridged with the soft interface
|
||||
*/
|
||||
BATADV_ATTR_BRIDGE_LOOP_AVOIDANCE_ENABLED,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED: whether the distributed
|
||||
* arp table feature is enabled. This feature uses a distributed hash
|
||||
* table to answer ARP requests without flooding the request through
|
||||
* the whole mesh.
|
||||
*/
|
||||
BATADV_ATTR_DISTRIBUTED_ARP_TABLE_ENABLED,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_FRAGMENTATION_ENABLED: whether the data traffic going
|
||||
* through the mesh will be fragmented or silently discarded if the
|
||||
* packet size exceeds the outgoing interface MTU.
|
||||
*/
|
||||
BATADV_ATTR_FRAGMENTATION_ENABLED,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_GW_BANDWIDTH_DOWN: defines the download bandwidth which
|
||||
* is propagated by this node if %BATADV_ATTR_GW_BANDWIDTH_MODE was set
|
||||
* to 'server'.
|
||||
*/
|
||||
BATADV_ATTR_GW_BANDWIDTH_DOWN,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_GW_BANDWIDTH_UP: defines the upload bandwidth which
|
||||
* is propagated by this node if %BATADV_ATTR_GW_BANDWIDTH_MODE was set
|
||||
* to 'server'.
|
||||
*/
|
||||
BATADV_ATTR_GW_BANDWIDTH_UP,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_GW_MODE: defines the state of the gateway features.
|
||||
* Possible values are specified in enum batadv_gw_modes
|
||||
*/
|
||||
BATADV_ATTR_GW_MODE,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_GW_SEL_CLASS: defines the selection criteria this node
|
||||
* will use to choose a gateway if gw_mode was set to 'client'.
|
||||
*/
|
||||
BATADV_ATTR_GW_SEL_CLASS,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_HOP_PENALTY: defines the penalty which will be applied
|
||||
* to an originator message's tq-field on every hop.
|
||||
*/
|
||||
BATADV_ATTR_HOP_PENALTY,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_LOG_LEVEL: bitmask with to define which debug messages
|
||||
* should be send to the debug log/trace ring buffer
|
||||
*/
|
||||
BATADV_ATTR_LOG_LEVEL,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_MULTICAST_FORCEFLOOD_ENABLED: whether multicast
|
||||
* optimizations should be replaced by simple broadcast-like flooding
|
||||
* of multicast packets. If set to non-zero then all nodes in the mesh
|
||||
* are going to use classic flooding for any multicast packet with no
|
||||
* optimizations.
|
||||
*/
|
||||
BATADV_ATTR_MULTICAST_FORCEFLOOD_ENABLED,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_NETWORK_CODING_ENABLED: whether Network Coding (using
|
||||
* some magic to send fewer wifi packets but still the same content) is
|
||||
* enabled or not.
|
||||
*/
|
||||
BATADV_ATTR_NETWORK_CODING_ENABLED,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_ORIG_INTERVAL: defines the interval in milliseconds in
|
||||
* which batman sends its protocol messages.
|
||||
*/
|
||||
BATADV_ATTR_ORIG_INTERVAL,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_ELP_INTERVAL: defines the interval in milliseconds in
|
||||
* which batman emits probing packets for neighbor sensing (ELP).
|
||||
*/
|
||||
BATADV_ATTR_ELP_INTERVAL,
|
||||
|
||||
/**
|
||||
* @BATADV_ATTR_THROUGHPUT_OVERRIDE: defines the throughput value to be
|
||||
* used by B.A.T.M.A.N. V when estimating the link throughput using
|
||||
* this interface. If the value is set to 0 then batman-adv will try to
|
||||
* estimate the throughput by itself.
|
||||
*/
|
||||
BATADV_ATTR_THROUGHPUT_OVERRIDE,
|
||||
|
||||
/* add attributes above here, update the policy in netlink.c */
|
||||
|
||||
/**
|
||||
@ -372,10 +519,14 @@ enum batadv_nl_commands {
|
||||
BATADV_CMD_UNSPEC,
|
||||
|
||||
/**
|
||||
* @BATADV_CMD_GET_MESH_INFO: Query basic information about batman-adv
|
||||
* device
|
||||
* @BATADV_CMD_GET_MESH: Get attributes from softif/mesh
|
||||
*/
|
||||
BATADV_CMD_GET_MESH_INFO,
|
||||
BATADV_CMD_GET_MESH,
|
||||
|
||||
/**
|
||||
* @BATADV_CMD_GET_MESH_INFO: Alias for @BATADV_CMD_GET_MESH
|
||||
*/
|
||||
BATADV_CMD_GET_MESH_INFO = BATADV_CMD_GET_MESH,
|
||||
|
||||
/**
|
||||
* @BATADV_CMD_TP_METER: Start a tp meter session
|
||||
@ -393,9 +544,15 @@ enum batadv_nl_commands {
|
||||
BATADV_CMD_GET_ROUTING_ALGOS,
|
||||
|
||||
/**
|
||||
* @BATADV_CMD_GET_HARDIFS: Query list of hard interfaces
|
||||
* @BATADV_CMD_GET_HARDIF: Get attributes from a hardif of the
|
||||
* current softif
|
||||
*/
|
||||
BATADV_CMD_GET_HARDIFS,
|
||||
BATADV_CMD_GET_HARDIF,
|
||||
|
||||
/**
|
||||
* @BATADV_CMD_GET_HARDIFS: Alias for @BATADV_CMD_GET_HARDIF
|
||||
*/
|
||||
BATADV_CMD_GET_HARDIFS = BATADV_CMD_GET_HARDIF,
|
||||
|
||||
/**
|
||||
* @BATADV_CMD_GET_TRANSTABLE_LOCAL: Query list of local translations
|
||||
@ -443,6 +600,29 @@ enum batadv_nl_commands {
|
||||
*/
|
||||
BATADV_CMD_GET_MCAST_FLAGS,
|
||||
|
||||
/**
|
||||
* @BATADV_CMD_SET_MESH: Set attributes for softif/mesh
|
||||
*/
|
||||
BATADV_CMD_SET_MESH,
|
||||
|
||||
/**
|
||||
* @BATADV_CMD_SET_HARDIF: Set attributes for hardif of the
|
||||
* current softif
|
||||
*/
|
||||
BATADV_CMD_SET_HARDIF,
|
||||
|
||||
/**
|
||||
* @BATADV_CMD_GET_VLAN: Get attributes from a VLAN of the
|
||||
* current softif
|
||||
*/
|
||||
BATADV_CMD_GET_VLAN,
|
||||
|
||||
/**
|
||||
* @BATADV_CMD_SET_VLAN: Set attributes for VLAN of the
|
||||
* current softif
|
||||
*/
|
||||
BATADV_CMD_SET_VLAN,
|
||||
|
||||
/* add new commands above here */
|
||||
|
||||
/**
|
||||
|
@ -1711,6 +1711,8 @@ static void batadv_dat_put_dhcp(struct batadv_priv *bat_priv, u8 *chaddr,
|
||||
batadv_dat_send_data(bat_priv, skb, yiaddr, vid, BATADV_P_DAT_DHT_PUT);
|
||||
batadv_dat_send_data(bat_priv, skb, ip_dst, vid, BATADV_P_DAT_DHT_PUT);
|
||||
|
||||
consume_skb(skb);
|
||||
|
||||
batadv_dbg(BATADV_DBG_DAT, bat_priv,
|
||||
"Snooped from outgoing DHCPACK (server address): %pI4, %pM (vid: %i)\n",
|
||||
&ip_dst, hw_dst, batadv_print_vid(vid));
|
||||
|
@ -47,7 +47,6 @@
|
||||
#include <uapi/linux/batadv_packet.h>
|
||||
#include <uapi/linux/batman_adv.h>
|
||||
|
||||
#include "gateway_common.h"
|
||||
#include "hard-interface.h"
|
||||
#include "log.h"
|
||||
#include "netlink.h"
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/string.h>
|
||||
#include <uapi/linux/batadv_packet.h>
|
||||
#include <uapi/linux/batman_adv.h>
|
||||
|
||||
#include "gateway_client.h"
|
||||
#include "log.h"
|
||||
|
@ -25,12 +25,6 @@
|
||||
|
||||
struct net_device;
|
||||
|
||||
enum batadv_gw_modes {
|
||||
BATADV_GW_MODE_OFF,
|
||||
BATADV_GW_MODE_CLIENT,
|
||||
BATADV_GW_MODE_SERVER,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum batadv_bandwidth_units - bandwidth unit types
|
||||
*/
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -34,6 +34,12 @@ int batadv_netlink_tpmeter_notify(struct batadv_priv *bat_priv, const u8 *dst,
|
||||
u8 result, u32 test_time, u64 total_bytes,
|
||||
u32 cookie);
|
||||
|
||||
int batadv_netlink_notify_mesh(struct batadv_priv *bat_priv);
|
||||
int batadv_netlink_notify_hardif(struct batadv_priv *bat_priv,
|
||||
struct batadv_hard_iface *hard_iface);
|
||||
int batadv_netlink_notify_vlan(struct batadv_priv *bat_priv,
|
||||
struct batadv_softif_vlan *vlan);
|
||||
|
||||
extern struct genl_family batadv_netlink_family;
|
||||
|
||||
#endif /* _NET_BATMAN_ADV_NETLINK_H_ */
|
||||
|
@ -50,13 +50,13 @@
|
||||
#include <linux/string.h>
|
||||
#include <linux/types.h>
|
||||
#include <uapi/linux/batadv_packet.h>
|
||||
#include <uapi/linux/batman_adv.h>
|
||||
|
||||
#include "bat_algo.h"
|
||||
#include "bridge_loop_avoidance.h"
|
||||
#include "debugfs.h"
|
||||
#include "distributed-arp-table.h"
|
||||
#include "gateway_client.h"
|
||||
#include "gateway_common.h"
|
||||
#include "hard-interface.h"
|
||||
#include "multicast.h"
|
||||
#include "network-coding.h"
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include <linux/stringify.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <uapi/linux/batadv_packet.h>
|
||||
#include <uapi/linux/batman_adv.h>
|
||||
|
||||
#include "bridge_loop_avoidance.h"
|
||||
#include "distributed-arp-table.h"
|
||||
@ -47,6 +48,7 @@
|
||||
#include "gateway_common.h"
|
||||
#include "hard-interface.h"
|
||||
#include "log.h"
|
||||
#include "netlink.h"
|
||||
#include "network-coding.h"
|
||||
#include "soft-interface.h"
|
||||
|
||||
@ -153,9 +155,14 @@ ssize_t batadv_store_##_name(struct kobject *kobj, \
|
||||
{ \
|
||||
struct net_device *net_dev = batadv_kobj_to_netdev(kobj); \
|
||||
struct batadv_priv *bat_priv = netdev_priv(net_dev); \
|
||||
ssize_t length; \
|
||||
\
|
||||
return __batadv_store_bool_attr(buff, count, _post_func, attr, \
|
||||
&bat_priv->_name, net_dev); \
|
||||
length = __batadv_store_bool_attr(buff, count, _post_func, attr,\
|
||||
&bat_priv->_name, net_dev); \
|
||||
\
|
||||
batadv_netlink_notify_mesh(bat_priv); \
|
||||
\
|
||||
return length; \
|
||||
}
|
||||
|
||||
#define BATADV_ATTR_SIF_SHOW_BOOL(_name) \
|
||||
@ -185,11 +192,16 @@ ssize_t batadv_store_##_name(struct kobject *kobj, \
|
||||
{ \
|
||||
struct net_device *net_dev = batadv_kobj_to_netdev(kobj); \
|
||||
struct batadv_priv *bat_priv = netdev_priv(net_dev); \
|
||||
ssize_t length; \
|
||||
\
|
||||
return __batadv_store_uint_attr(buff, count, _min, _max, \
|
||||
_post_func, attr, \
|
||||
&bat_priv->_var, net_dev, \
|
||||
NULL); \
|
||||
length = __batadv_store_uint_attr(buff, count, _min, _max, \
|
||||
_post_func, attr, \
|
||||
&bat_priv->_var, net_dev, \
|
||||
NULL); \
|
||||
\
|
||||
batadv_netlink_notify_mesh(bat_priv); \
|
||||
\
|
||||
return length; \
|
||||
}
|
||||
|
||||
#define BATADV_ATTR_SIF_SHOW_UINT(_name, _var) \
|
||||
@ -222,6 +234,11 @@ ssize_t batadv_store_vlan_##_name(struct kobject *kobj, \
|
||||
attr, &vlan->_name, \
|
||||
bat_priv->soft_iface); \
|
||||
\
|
||||
if (vlan->vid) \
|
||||
batadv_netlink_notify_vlan(bat_priv, vlan); \
|
||||
else \
|
||||
batadv_netlink_notify_mesh(bat_priv); \
|
||||
\
|
||||
batadv_softif_vlan_put(vlan); \
|
||||
return res; \
|
||||
}
|
||||
@ -255,6 +272,7 @@ ssize_t batadv_store_##_name(struct kobject *kobj, \
|
||||
{ \
|
||||
struct net_device *net_dev = batadv_kobj_to_netdev(kobj); \
|
||||
struct batadv_hard_iface *hard_iface; \
|
||||
struct batadv_priv *bat_priv; \
|
||||
ssize_t length; \
|
||||
\
|
||||
hard_iface = batadv_hardif_get_by_netdev(net_dev); \
|
||||
@ -267,6 +285,11 @@ ssize_t batadv_store_##_name(struct kobject *kobj, \
|
||||
hard_iface->soft_iface, \
|
||||
net_dev); \
|
||||
\
|
||||
if (hard_iface->soft_iface) { \
|
||||
bat_priv = netdev_priv(hard_iface->soft_iface); \
|
||||
batadv_netlink_notify_hardif(bat_priv, hard_iface); \
|
||||
} \
|
||||
\
|
||||
batadv_hardif_put(hard_iface); \
|
||||
return length; \
|
||||
}
|
||||
@ -536,6 +559,9 @@ static ssize_t batadv_store_gw_mode(struct kobject *kobj,
|
||||
batadv_gw_check_client_stop(bat_priv);
|
||||
atomic_set(&bat_priv->gw.mode, (unsigned int)gw_mode_tmp);
|
||||
batadv_gw_tvlv_container_update(bat_priv);
|
||||
|
||||
batadv_netlink_notify_mesh(bat_priv);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
@ -562,6 +588,7 @@ static ssize_t batadv_store_gw_sel_class(struct kobject *kobj,
|
||||
size_t count)
|
||||
{
|
||||
struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
|
||||
ssize_t length;
|
||||
|
||||
/* setting the GW selection class is allowed only if the routing
|
||||
* algorithm in use implements the GW API
|
||||
@ -577,10 +604,14 @@ static ssize_t batadv_store_gw_sel_class(struct kobject *kobj,
|
||||
return bat_priv->algo_ops->gw.store_sel_class(bat_priv, buff,
|
||||
count);
|
||||
|
||||
return __batadv_store_uint_attr(buff, count, 1, BATADV_TQ_MAX_VALUE,
|
||||
batadv_post_gw_reselect, attr,
|
||||
&bat_priv->gw.sel_class,
|
||||
bat_priv->soft_iface, NULL);
|
||||
length = __batadv_store_uint_attr(buff, count, 1, BATADV_TQ_MAX_VALUE,
|
||||
batadv_post_gw_reselect, attr,
|
||||
&bat_priv->gw.sel_class,
|
||||
bat_priv->soft_iface, NULL);
|
||||
|
||||
batadv_netlink_notify_mesh(bat_priv);
|
||||
|
||||
return length;
|
||||
}
|
||||
|
||||
static ssize_t batadv_show_gw_bwidth(struct kobject *kobj,
|
||||
@ -600,12 +631,18 @@ static ssize_t batadv_store_gw_bwidth(struct kobject *kobj,
|
||||
struct attribute *attr, char *buff,
|
||||
size_t count)
|
||||
{
|
||||
struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
|
||||
struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
|
||||
ssize_t length;
|
||||
|
||||
if (buff[count - 1] == '\n')
|
||||
buff[count - 1] = '\0';
|
||||
|
||||
return batadv_gw_bandwidth_set(net_dev, buff, count);
|
||||
length = batadv_gw_bandwidth_set(net_dev, buff, count);
|
||||
|
||||
batadv_netlink_notify_mesh(bat_priv);
|
||||
|
||||
return length;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -673,6 +710,8 @@ static ssize_t batadv_store_isolation_mark(struct kobject *kobj,
|
||||
"New skb mark for extended isolation: %#.8x/%#.8x\n",
|
||||
bat_priv->isolation_mark, bat_priv->isolation_mark_mask);
|
||||
|
||||
batadv_netlink_notify_mesh(bat_priv);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
@ -1077,6 +1116,7 @@ static ssize_t batadv_store_throughput_override(struct kobject *kobj,
|
||||
struct attribute *attr,
|
||||
char *buff, size_t count)
|
||||
{
|
||||
struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
|
||||
struct net_device *net_dev = batadv_kobj_to_netdev(kobj);
|
||||
struct batadv_hard_iface *hard_iface;
|
||||
u32 tp_override;
|
||||
@ -1107,6 +1147,8 @@ static ssize_t batadv_store_throughput_override(struct kobject *kobj,
|
||||
|
||||
atomic_set(&hard_iface->bat_v.throughput_override, tp_override);
|
||||
|
||||
batadv_netlink_notify_hardif(bat_priv, hard_iface);
|
||||
|
||||
out:
|
||||
batadv_hardif_put(hard_iface);
|
||||
return count;
|
||||
|
Loading…
Reference in New Issue
Block a user