mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-04 04:06:26 +00:00
batman-adv: add bat_neigh_cmp API function
This new API allows to compare the two neighbours based on the metric avoiding the user to deal with any routing algorithm specific detail Signed-off-by: Antonio Quartulli <antonio@open-mesh.com> Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
This commit is contained in:
parent
737a2a2297
commit
a3285a8f20
@ -1475,6 +1475,25 @@ static void batadv_iv_ogm_orig_print(struct batadv_priv *bat_priv,
|
|||||||
seq_puts(seq, "No batman nodes in range ...\n");
|
seq_puts(seq, "No batman nodes in range ...\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* batadv_iv_ogm_neigh_cmp - compare the metrics of two neighbors
|
||||||
|
* @neigh1: the first neighbor object of the comparison
|
||||||
|
* @neigh2: the second neighbor object of the comparison
|
||||||
|
*
|
||||||
|
* Returns a value less, equal to or greater than 0 if the metric via neigh1 is
|
||||||
|
* lower, the same as or higher than the metric via neigh2
|
||||||
|
*/
|
||||||
|
static int batadv_iv_ogm_neigh_cmp(struct batadv_neigh_node *neigh1,
|
||||||
|
struct batadv_neigh_node *neigh2)
|
||||||
|
{
|
||||||
|
uint8_t tq1, tq2;
|
||||||
|
|
||||||
|
tq1 = neigh1->bat_iv.tq_avg;
|
||||||
|
tq2 = neigh2->bat_iv.tq_avg;
|
||||||
|
|
||||||
|
return tq1 - tq2;
|
||||||
|
}
|
||||||
|
|
||||||
static struct batadv_algo_ops batadv_batman_iv __read_mostly = {
|
static struct batadv_algo_ops batadv_batman_iv __read_mostly = {
|
||||||
.name = "BATMAN_IV",
|
.name = "BATMAN_IV",
|
||||||
.bat_iface_enable = batadv_iv_ogm_iface_enable,
|
.bat_iface_enable = batadv_iv_ogm_iface_enable,
|
||||||
@ -1483,6 +1502,7 @@ static struct batadv_algo_ops batadv_batman_iv __read_mostly = {
|
|||||||
.bat_primary_iface_set = batadv_iv_ogm_primary_iface_set,
|
.bat_primary_iface_set = batadv_iv_ogm_primary_iface_set,
|
||||||
.bat_ogm_schedule = batadv_iv_ogm_schedule,
|
.bat_ogm_schedule = batadv_iv_ogm_schedule,
|
||||||
.bat_ogm_emit = batadv_iv_ogm_emit,
|
.bat_ogm_emit = batadv_iv_ogm_emit,
|
||||||
|
.bat_neigh_cmp = batadv_iv_ogm_neigh_cmp,
|
||||||
.bat_orig_print = batadv_iv_ogm_orig_print,
|
.bat_orig_print = batadv_iv_ogm_orig_print,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -501,7 +501,8 @@ int batadv_algo_register(struct batadv_algo_ops *bat_algo_ops)
|
|||||||
!bat_algo_ops->bat_iface_update_mac ||
|
!bat_algo_ops->bat_iface_update_mac ||
|
||||||
!bat_algo_ops->bat_primary_iface_set ||
|
!bat_algo_ops->bat_primary_iface_set ||
|
||||||
!bat_algo_ops->bat_ogm_schedule ||
|
!bat_algo_ops->bat_ogm_schedule ||
|
||||||
!bat_algo_ops->bat_ogm_emit) {
|
!bat_algo_ops->bat_ogm_emit ||
|
||||||
|
!bat_algo_ops->bat_neigh_cmp) {
|
||||||
pr_info("Routing algo '%s' does not implement required ops\n",
|
pr_info("Routing algo '%s' does not implement required ops\n",
|
||||||
bat_algo_ops->name);
|
bat_algo_ops->name);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
@ -992,6 +992,7 @@ struct batadv_forw_packet {
|
|||||||
* @bat_primary_iface_set: called when primary interface is selected / changed
|
* @bat_primary_iface_set: called when primary interface is selected / changed
|
||||||
* @bat_ogm_schedule: prepare a new outgoing OGM for the send queue
|
* @bat_ogm_schedule: prepare a new outgoing OGM for the send queue
|
||||||
* @bat_ogm_emit: send scheduled OGM
|
* @bat_ogm_emit: send scheduled OGM
|
||||||
|
* @bat_neigh_cmp: compare the metrics of two neighbors
|
||||||
* @bat_orig_print: print the originator table (optional)
|
* @bat_orig_print: print the originator table (optional)
|
||||||
*/
|
*/
|
||||||
struct batadv_algo_ops {
|
struct batadv_algo_ops {
|
||||||
@ -1003,6 +1004,8 @@ struct batadv_algo_ops {
|
|||||||
void (*bat_primary_iface_set)(struct batadv_hard_iface *hard_iface);
|
void (*bat_primary_iface_set)(struct batadv_hard_iface *hard_iface);
|
||||||
void (*bat_ogm_schedule)(struct batadv_hard_iface *hard_iface);
|
void (*bat_ogm_schedule)(struct batadv_hard_iface *hard_iface);
|
||||||
void (*bat_ogm_emit)(struct batadv_forw_packet *forw_packet);
|
void (*bat_ogm_emit)(struct batadv_forw_packet *forw_packet);
|
||||||
|
int (*bat_neigh_cmp)(struct batadv_neigh_node *neigh1,
|
||||||
|
struct batadv_neigh_node *neigh2);
|
||||||
/* orig_node handling API */
|
/* orig_node handling API */
|
||||||
void (*bat_orig_print)(struct batadv_priv *priv, struct seq_file *seq);
|
void (*bat_orig_print)(struct batadv_priv *priv, struct seq_file *seq);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user