mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-30 23:54:04 +08:00
This cleanup patchset includes the following patches:
- bump version strings, by Simon Wunderlich - Remove unused declarations, by Yue Haibing - Clean up MTU handling, by Sven Eckelmann (2 patches) - Clean up/remove (obsolete) functions, by Sven Eckelmann (3 patches) -----BEGIN PGP SIGNATURE----- iQJKBAABCgA0FiEE1ilQI7G+y+fdhnrfoSvjmEKSnqEFAmTc+z8WHHN3QHNpbW9u d3VuZGVybGljaC5kZQAKCRChK+OYQpKeoeEDD/44gdQmazggfYU2KXn42Pq8CLWR Nsr4ljmTXiCVh1a/Gw3pRvT7vjH12Jv+nlzoEXzv+iAHKnchVvq1zAguIMSQJymQ 6MbZNHYMckwb6zBXxYGC3qaDI3Zf67ECMEmQkX6ZvwYbXYUiAR+/P7UPlzc145Ur jWS0wgm9kn8631ZQoWsETIapaN8X9N9Iqt1kDLm29bMlQoEmE6XdpGgpv4JWFpwp 8lDqwcI+v4dt/QsNd07xka0+3lpnQB6bYeyYDjWY1ae04OME5B81PqbbehGNYigp VP2yepBtfWmWM2nCLqM9tK98ALw+vxtFN9K0M/9p7jd9TyVEWephD5SBrA9aJiKL ruOIu1YNe1nQ1CFIcc28MiK/1o8ljDUVBr8Mt4OhZ+Pn9fhOlWLy1ZqahiFmley/ DcmwZfreyyNZ1BIrVSsLHGgvJ+X3j4llNFdtk7oB8LplBL3wMVpvrLSwDH34aZbS dNuWanCEjoqpBEnMLD3J6BgFhvfBjuANXDmpWR6fvXz4WNFCyirvInldG1aJFHKL HyUPG6ANlT7q6A+vgWHDVsEcxIuiCZlBuNlj/Z2Sg6DAq4WTPcdg+/BYnPusDe4t M0tAHnkn/dCOCkA0Iq4vPZREgj/xvip+yTfBp5R8hMNibL5TOGoYOLVk/q0X5Dah ON1TAvgsFbymf129Jg== =f1Uk -----END PGP SIGNATURE----- Merge tag 'batadv-next-pullrequest-20230816' of git://git.open-mesh.org/linux-merge Simon Wunderlich says: ==================== This cleanup patchset includes the following patches: - bump version strings, by Simon Wunderlich - Remove unused declarations, by Yue Haibing - Clean up MTU handling, by Sven Eckelmann (2 patches) - Clean up/remove (obsolete) functions, by Sven Eckelmann (3 patches) * tag 'batadv-next-pullrequest-20230816' of git://git.open-mesh.org/linux-merge: batman-adv: Drop per algo GW section class code batman-adv: Keep batadv_netlink_notify_* static batman-adv: Drop unused function batadv_gw_bandwidth_set batman-adv: Check hardif MTU against runtime MTU batman-adv: Avoid magic value for minimum MTU batman-adv: Remove unused declarations batman-adv: Start new development cycle ==================== Link: https://lore.kernel.org/r/20230816164000.190884-1-sw@simonwunderlich.de Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
04f28408a5
@ -2516,6 +2516,7 @@ static struct batadv_algo_ops batadv_batman_iv __read_mostly = {
|
||||
},
|
||||
.gw = {
|
||||
.init_sel_class = batadv_iv_init_sel_class,
|
||||
.sel_class_max = BATADV_TQ_MAX_VALUE,
|
||||
.get_best_gw_node = batadv_iv_gw_get_best_gw_node,
|
||||
.is_eligible = batadv_iv_gw_is_eligible,
|
||||
.dump = batadv_iv_gw_dump,
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/kref.h>
|
||||
#include <linux/limits.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/minmax.h>
|
||||
#include <linux/netdevice.h>
|
||||
@ -34,7 +35,6 @@
|
||||
#include "bat_v_elp.h"
|
||||
#include "bat_v_ogm.h"
|
||||
#include "gateway_client.h"
|
||||
#include "gateway_common.h"
|
||||
#include "hard-interface.h"
|
||||
#include "hash.h"
|
||||
#include "log.h"
|
||||
@ -512,25 +512,6 @@ static void batadv_v_init_sel_class(struct batadv_priv *bat_priv)
|
||||
atomic_set(&bat_priv->gw.sel_class, 50);
|
||||
}
|
||||
|
||||
static ssize_t batadv_v_store_sel_class(struct batadv_priv *bat_priv,
|
||||
char *buff, size_t count)
|
||||
{
|
||||
u32 old_class, class;
|
||||
|
||||
if (!batadv_parse_throughput(bat_priv->soft_iface, buff,
|
||||
"B.A.T.M.A.N. V GW selection class",
|
||||
&class))
|
||||
return -EINVAL;
|
||||
|
||||
old_class = atomic_read(&bat_priv->gw.sel_class);
|
||||
atomic_set(&bat_priv->gw.sel_class, class);
|
||||
|
||||
if (old_class != class)
|
||||
batadv_gw_reselect(bat_priv);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* batadv_v_gw_throughput_get() - retrieve the GW-bandwidth for a given GW
|
||||
* @gw_node: the GW to retrieve the metric for
|
||||
@ -818,7 +799,7 @@ static struct batadv_algo_ops batadv_batman_v __read_mostly = {
|
||||
},
|
||||
.gw = {
|
||||
.init_sel_class = batadv_v_init_sel_class,
|
||||
.store_sel_class = batadv_v_store_sel_class,
|
||||
.sel_class_max = U32_MAX,
|
||||
.get_best_gw_node = batadv_v_gw_get_best_gw_node,
|
||||
.is_eligible = batadv_v_gw_is_eligible,
|
||||
.dump = batadv_v_gw_dump,
|
||||
|
@ -9,123 +9,14 @@
|
||||
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/byteorder/generic.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/kstrtox.h>
|
||||
#include <linux/limits.h>
|
||||
#include <linux/math64.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/types.h>
|
||||
#include <uapi/linux/batadv_packet.h>
|
||||
#include <uapi/linux/batman_adv.h>
|
||||
|
||||
#include "gateway_client.h"
|
||||
#include "log.h"
|
||||
#include "tvlv.h"
|
||||
|
||||
/**
|
||||
* batadv_parse_throughput() - parse supplied string buffer to extract
|
||||
* throughput information
|
||||
* @net_dev: the soft interface net device
|
||||
* @buff: string buffer to parse
|
||||
* @description: text shown when throughput string cannot be parsed
|
||||
* @throughput: pointer holding the returned throughput information
|
||||
*
|
||||
* Return: false on parse error and true otherwise.
|
||||
*/
|
||||
bool batadv_parse_throughput(struct net_device *net_dev, char *buff,
|
||||
const char *description, u32 *throughput)
|
||||
{
|
||||
enum batadv_bandwidth_units bw_unit_type = BATADV_BW_UNIT_KBIT;
|
||||
u64 lthroughput;
|
||||
char *tmp_ptr;
|
||||
int ret;
|
||||
|
||||
if (strlen(buff) > 4) {
|
||||
tmp_ptr = buff + strlen(buff) - 4;
|
||||
|
||||
if (strncasecmp(tmp_ptr, "mbit", 4) == 0)
|
||||
bw_unit_type = BATADV_BW_UNIT_MBIT;
|
||||
|
||||
if (strncasecmp(tmp_ptr, "kbit", 4) == 0 ||
|
||||
bw_unit_type == BATADV_BW_UNIT_MBIT)
|
||||
*tmp_ptr = '\0';
|
||||
}
|
||||
|
||||
ret = kstrtou64(buff, 10, <hroughput);
|
||||
if (ret) {
|
||||
batadv_err(net_dev,
|
||||
"Invalid throughput speed for %s: %s\n",
|
||||
description, buff);
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (bw_unit_type) {
|
||||
case BATADV_BW_UNIT_MBIT:
|
||||
/* prevent overflow */
|
||||
if (U64_MAX / 10 < lthroughput) {
|
||||
batadv_err(net_dev,
|
||||
"Throughput speed for %s too large: %s\n",
|
||||
description, buff);
|
||||
return false;
|
||||
}
|
||||
|
||||
lthroughput *= 10;
|
||||
break;
|
||||
case BATADV_BW_UNIT_KBIT:
|
||||
default:
|
||||
lthroughput = div_u64(lthroughput, 100);
|
||||
break;
|
||||
}
|
||||
|
||||
if (lthroughput > U32_MAX) {
|
||||
batadv_err(net_dev,
|
||||
"Throughput speed for %s too large: %s\n",
|
||||
description, buff);
|
||||
return false;
|
||||
}
|
||||
|
||||
*throughput = lthroughput;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* batadv_parse_gw_bandwidth() - parse supplied string buffer to extract
|
||||
* download and upload bandwidth information
|
||||
* @net_dev: the soft interface net device
|
||||
* @buff: string buffer to parse
|
||||
* @down: pointer holding the returned download bandwidth information
|
||||
* @up: pointer holding the returned upload bandwidth information
|
||||
*
|
||||
* Return: false on parse error and true otherwise.
|
||||
*/
|
||||
static bool batadv_parse_gw_bandwidth(struct net_device *net_dev, char *buff,
|
||||
u32 *down, u32 *up)
|
||||
{
|
||||
char *slash_ptr;
|
||||
bool ret;
|
||||
|
||||
slash_ptr = strchr(buff, '/');
|
||||
if (slash_ptr)
|
||||
*slash_ptr = 0;
|
||||
|
||||
ret = batadv_parse_throughput(net_dev, buff, "download gateway speed",
|
||||
down);
|
||||
if (!ret)
|
||||
return false;
|
||||
|
||||
/* we also got some upload info */
|
||||
if (slash_ptr) {
|
||||
ret = batadv_parse_throughput(net_dev, slash_ptr + 1,
|
||||
"upload gateway speed", up);
|
||||
if (!ret)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* batadv_gw_tvlv_container_update() - update the gw tvlv container after
|
||||
* gateway setting change
|
||||
@ -155,57 +46,6 @@ void batadv_gw_tvlv_container_update(struct batadv_priv *bat_priv)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* batadv_gw_bandwidth_set() - Parse and set download/upload gateway bandwidth
|
||||
* from supplied string buffer
|
||||
* @net_dev: netdev struct of the soft interface
|
||||
* @buff: the buffer containing the user data
|
||||
* @count: number of bytes in the buffer
|
||||
*
|
||||
* Return: 'count' on success or a negative error code in case of failure
|
||||
*/
|
||||
ssize_t batadv_gw_bandwidth_set(struct net_device *net_dev, char *buff,
|
||||
size_t count)
|
||||
{
|
||||
struct batadv_priv *bat_priv = netdev_priv(net_dev);
|
||||
u32 down_curr;
|
||||
u32 up_curr;
|
||||
u32 down_new = 0;
|
||||
u32 up_new = 0;
|
||||
bool ret;
|
||||
|
||||
down_curr = (unsigned int)atomic_read(&bat_priv->gw.bandwidth_down);
|
||||
up_curr = (unsigned int)atomic_read(&bat_priv->gw.bandwidth_up);
|
||||
|
||||
ret = batadv_parse_gw_bandwidth(net_dev, buff, &down_new, &up_new);
|
||||
if (!ret)
|
||||
return -EINVAL;
|
||||
|
||||
if (!down_new)
|
||||
down_new = 1;
|
||||
|
||||
if (!up_new)
|
||||
up_new = down_new / 5;
|
||||
|
||||
if (!up_new)
|
||||
up_new = 1;
|
||||
|
||||
if (down_curr == down_new && up_curr == up_new)
|
||||
return count;
|
||||
|
||||
batadv_gw_reselect(bat_priv);
|
||||
batadv_info(net_dev,
|
||||
"Changing gateway bandwidth from: '%u.%u/%u.%u MBit' to: '%u.%u/%u.%u MBit'\n",
|
||||
down_curr / 10, down_curr % 10, up_curr / 10, up_curr % 10,
|
||||
down_new / 10, down_new % 10, up_new / 10, up_new % 10);
|
||||
|
||||
atomic_set(&bat_priv->gw.bandwidth_down, down_new);
|
||||
atomic_set(&bat_priv->gw.bandwidth_up, up_new);
|
||||
batadv_gw_tvlv_container_update(bat_priv);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* batadv_gw_tvlv_ogm_handler_v1() - process incoming gateway tvlv container
|
||||
* @bat_priv: the bat priv with all the soft interface information
|
||||
|
@ -9,9 +9,6 @@
|
||||
|
||||
#include "main.h"
|
||||
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
/**
|
||||
* enum batadv_bandwidth_units - bandwidth unit types
|
||||
*/
|
||||
@ -27,12 +24,8 @@ enum batadv_bandwidth_units {
|
||||
#define BATADV_GW_MODE_CLIENT_NAME "client"
|
||||
#define BATADV_GW_MODE_SERVER_NAME "server"
|
||||
|
||||
ssize_t batadv_gw_bandwidth_set(struct net_device *net_dev, char *buff,
|
||||
size_t count);
|
||||
void batadv_gw_tvlv_container_update(struct batadv_priv *bat_priv);
|
||||
void batadv_gw_init(struct batadv_priv *bat_priv);
|
||||
void batadv_gw_free(struct batadv_priv *bat_priv);
|
||||
bool batadv_parse_throughput(struct net_device *net_dev, char *buff,
|
||||
const char *description, u32 *throughput);
|
||||
|
||||
#endif /* _NET_BATMAN_ADV_GATEWAY_COMMON_H_ */
|
||||
|
@ -9,6 +9,7 @@
|
||||
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/byteorder/generic.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/container_of.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/gfp.h>
|
||||
@ -699,9 +700,14 @@ int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface,
|
||||
struct batadv_priv *bat_priv;
|
||||
__be16 ethertype = htons(ETH_P_BATMAN);
|
||||
int max_header_len = batadv_max_header_len();
|
||||
unsigned int required_mtu;
|
||||
unsigned int hardif_mtu;
|
||||
int ret;
|
||||
|
||||
if (hard_iface->net_dev->mtu < ETH_MIN_MTU + max_header_len)
|
||||
hardif_mtu = READ_ONCE(hard_iface->net_dev->mtu);
|
||||
required_mtu = READ_ONCE(soft_iface->mtu) + max_header_len;
|
||||
|
||||
if (hardif_mtu < ETH_MIN_MTU + max_header_len)
|
||||
return -EINVAL;
|
||||
|
||||
if (hard_iface->if_status != BATADV_IF_NOT_IN_USE)
|
||||
@ -734,18 +740,18 @@ int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface,
|
||||
hard_iface->net_dev->name);
|
||||
|
||||
if (atomic_read(&bat_priv->fragmentation) &&
|
||||
hard_iface->net_dev->mtu < ETH_DATA_LEN + max_header_len)
|
||||
hardif_mtu < required_mtu)
|
||||
batadv_info(hard_iface->soft_iface,
|
||||
"The MTU of interface %s is too small (%i) to handle the transport of batman-adv packets. Packets going over this interface will be fragmented on layer2 which could impact the performance. Setting the MTU to %i would solve the problem.\n",
|
||||
hard_iface->net_dev->name, hard_iface->net_dev->mtu,
|
||||
ETH_DATA_LEN + max_header_len);
|
||||
hard_iface->net_dev->name, hardif_mtu,
|
||||
required_mtu);
|
||||
|
||||
if (!atomic_read(&bat_priv->fragmentation) &&
|
||||
hard_iface->net_dev->mtu < ETH_DATA_LEN + max_header_len)
|
||||
hardif_mtu < required_mtu)
|
||||
batadv_info(hard_iface->soft_iface,
|
||||
"The MTU of interface %s is too small (%i) to handle the transport of batman-adv packets. If you experience problems getting traffic through try increasing the MTU to %i.\n",
|
||||
hard_iface->net_dev->name, hard_iface->net_dev->mtu,
|
||||
ETH_DATA_LEN + max_header_len);
|
||||
hard_iface->net_dev->name, hardif_mtu,
|
||||
required_mtu);
|
||||
|
||||
if (batadv_hardif_is_iface_up(hard_iface))
|
||||
batadv_hardif_activate_interface(hard_iface);
|
||||
|
@ -13,7 +13,7 @@
|
||||
#define BATADV_DRIVER_DEVICE "batman-adv"
|
||||
|
||||
#ifndef BATADV_SOURCE_VERSION
|
||||
#define BATADV_SOURCE_VERSION "2023.1"
|
||||
#define BATADV_SOURCE_VERSION "2023.3"
|
||||
#endif
|
||||
|
||||
/* B.A.T.M.A.N. parameters */
|
||||
|
@ -377,7 +377,7 @@ nla_put_failure:
|
||||
*
|
||||
* Return: 0 on success, < 0 on error
|
||||
*/
|
||||
int batadv_netlink_notify_mesh(struct batadv_priv *bat_priv)
|
||||
static int batadv_netlink_notify_mesh(struct batadv_priv *bat_priv)
|
||||
{
|
||||
struct sk_buff *msg;
|
||||
int ret;
|
||||
@ -548,15 +548,12 @@ static int batadv_netlink_set_mesh(struct sk_buff *skb, struct genl_info *info)
|
||||
* algorithm in use implements the GW API
|
||||
*/
|
||||
|
||||
u32 sel_class_max = 0xffffffffu;
|
||||
u32 sel_class_max = bat_priv->algo_ops->gw.sel_class_max;
|
||||
u32 sel_class;
|
||||
|
||||
attr = info->attrs[BATADV_ATTR_GW_SEL_CLASS];
|
||||
sel_class = nla_get_u32(attr);
|
||||
|
||||
if (!bat_priv->algo_ops->gw.store_sel_class)
|
||||
sel_class_max = BATADV_TQ_MAX_VALUE;
|
||||
|
||||
if (sel_class >= 1 && sel_class <= sel_class_max) {
|
||||
atomic_set(&bat_priv->gw.sel_class, sel_class);
|
||||
batadv_gw_reselect(bat_priv);
|
||||
@ -858,8 +855,8 @@ nla_put_failure:
|
||||
*
|
||||
* Return: 0 on success, < 0 on error
|
||||
*/
|
||||
int batadv_netlink_notify_hardif(struct batadv_priv *bat_priv,
|
||||
struct batadv_hard_iface *hard_iface)
|
||||
static int batadv_netlink_notify_hardif(struct batadv_priv *bat_priv,
|
||||
struct batadv_hard_iface *hard_iface)
|
||||
{
|
||||
struct sk_buff *msg;
|
||||
int ret;
|
||||
@ -1073,8 +1070,8 @@ nla_put_failure:
|
||||
*
|
||||
* Return: 0 on success, < 0 on error
|
||||
*/
|
||||
int batadv_netlink_notify_vlan(struct batadv_priv *bat_priv,
|
||||
struct batadv_softif_vlan *vlan)
|
||||
static int batadv_netlink_notify_vlan(struct batadv_priv *bat_priv,
|
||||
struct batadv_softif_vlan *vlan)
|
||||
{
|
||||
struct sk_buff *msg;
|
||||
int ret;
|
||||
|
@ -21,12 +21,6 @@ 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_ */
|
||||
|
@ -27,10 +27,6 @@ int batadv_recv_frag_packet(struct sk_buff *skb,
|
||||
struct batadv_hard_iface *iface);
|
||||
int batadv_recv_bcast_packet(struct sk_buff *skb,
|
||||
struct batadv_hard_iface *recv_if);
|
||||
int batadv_recv_tt_query(struct sk_buff *skb,
|
||||
struct batadv_hard_iface *recv_if);
|
||||
int batadv_recv_roam_adv(struct sk_buff *skb,
|
||||
struct batadv_hard_iface *recv_if);
|
||||
int batadv_recv_unicast_tvlv(struct sk_buff *skb,
|
||||
struct batadv_hard_iface *recv_if);
|
||||
int batadv_recv_unhandled_unicast_packet(struct sk_buff *skb,
|
||||
|
@ -154,7 +154,7 @@ static int batadv_interface_set_mac_addr(struct net_device *dev, void *p)
|
||||
static int batadv_interface_change_mtu(struct net_device *dev, int new_mtu)
|
||||
{
|
||||
/* check ranges */
|
||||
if (new_mtu < 68 || new_mtu > batadv_hardif_min_mtu(dev))
|
||||
if (new_mtu < ETH_MIN_MTU || new_mtu > batadv_hardif_min_mtu(dev))
|
||||
return -EINVAL;
|
||||
|
||||
dev->mtu = new_mtu;
|
||||
|
@ -2191,11 +2191,10 @@ struct batadv_algo_gw_ops {
|
||||
void (*init_sel_class)(struct batadv_priv *bat_priv);
|
||||
|
||||
/**
|
||||
* @store_sel_class: parse and stores a new GW selection class
|
||||
* (optional)
|
||||
* @sel_class_max: maximum allowed GW selection class
|
||||
*/
|
||||
ssize_t (*store_sel_class)(struct batadv_priv *bat_priv, char *buff,
|
||||
size_t count);
|
||||
u32 sel_class_max;
|
||||
|
||||
/**
|
||||
* @get_best_gw_node: select the best GW from the list of available
|
||||
* nodes (optional)
|
||||
|
Loading…
Reference in New Issue
Block a user