Loading net/batman-adv/bat_iv_ogm.c +53 −0 Original line number Diff line number Diff line Loading @@ -1861,6 +1861,58 @@ static void batadv_iv_ogm_orig_print(struct batadv_priv *bat_priv, seq_puts(seq, "No batman nodes in range ...\n"); } /** * batadv_iv_hardif_neigh_print - print a single hop neighbour node * @seq: neighbour table seq_file struct * @hardif_neigh: hardif neighbour information */ static void batadv_iv_hardif_neigh_print(struct seq_file *seq, struct batadv_hardif_neigh_node *hardif_neigh) { int last_secs, last_msecs; last_secs = jiffies_to_msecs(jiffies - hardif_neigh->last_seen) / 1000; last_msecs = jiffies_to_msecs(jiffies - hardif_neigh->last_seen) % 1000; seq_printf(seq, " %10s %pM %4i.%03is\n", hardif_neigh->if_incoming->net_dev->name, hardif_neigh->addr, last_secs, last_msecs); } /** * batadv_iv_ogm_neigh_print - print the single hop neighbour list * @bat_priv: the bat priv with all the soft interface information * @seq: neighbour table seq_file struct */ static void batadv_iv_neigh_print(struct batadv_priv *bat_priv, struct seq_file *seq) { struct net_device *net_dev = (struct net_device *)seq->private; struct batadv_hardif_neigh_node *hardif_neigh; struct batadv_hard_iface *hard_iface; int batman_count = 0; seq_printf(seq, " %10s %-13s %s\n", "IF", "Neighbor", "last-seen"); rcu_read_lock(); list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) { if (hard_iface->soft_iface != net_dev) continue; hlist_for_each_entry_rcu(hardif_neigh, &hard_iface->neigh_list, list) { batadv_iv_hardif_neigh_print(seq, hardif_neigh); batman_count++; } } rcu_read_unlock(); if (batman_count == 0) 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 Loading Loading @@ -1954,6 +2006,7 @@ static struct batadv_algo_ops batadv_batman_iv __read_mostly = { .bat_ogm_emit = batadv_iv_ogm_emit, .bat_neigh_cmp = batadv_iv_ogm_neigh_cmp, .bat_neigh_is_equiv_or_better = batadv_iv_ogm_neigh_is_eob, .bat_neigh_print = batadv_iv_neigh_print, .bat_orig_print = batadv_iv_ogm_orig_print, .bat_orig_free = batadv_iv_ogm_orig_free, .bat_orig_add_if = batadv_iv_ogm_orig_add_if, Loading net/batman-adv/debugfs.c +9 −0 Original line number Diff line number Diff line Loading @@ -262,6 +262,13 @@ static int batadv_algorithms_open(struct inode *inode, struct file *file) return single_open(file, batadv_algo_seq_print_text, NULL); } static int neighbors_open(struct inode *inode, struct file *file) { struct net_device *net_dev = (struct net_device *)inode->i_private; return single_open(file, batadv_hardif_neigh_seq_print_text, net_dev); } static int batadv_originators_open(struct inode *inode, struct file *file) { struct net_device *net_dev = (struct net_device *)inode->i_private; Loading Loading @@ -375,6 +382,7 @@ static struct batadv_debuginfo *batadv_general_debuginfos[] = { }; /* The following attributes are per soft interface */ static BATADV_DEBUGINFO(neighbors, S_IRUGO, neighbors_open); static BATADV_DEBUGINFO(originators, S_IRUGO, batadv_originators_open); static BATADV_DEBUGINFO(gateways, S_IRUGO, batadv_gateways_open); static BATADV_DEBUGINFO(transtable_global, S_IRUGO, Loading @@ -394,6 +402,7 @@ static BATADV_DEBUGINFO(nc_nodes, S_IRUGO, batadv_nc_nodes_open); #endif static struct batadv_debuginfo *batadv_mesh_debuginfos[] = { &batadv_debuginfo_neighbors, &batadv_debuginfo_originators, &batadv_debuginfo_gateways, &batadv_debuginfo_transtable_global, Loading net/batman-adv/originator.c +34 −0 Original line number Diff line number Diff line Loading @@ -692,6 +692,40 @@ batadv_neigh_node_new(struct batadv_orig_node *orig_node, return neigh_node; } /** * batadv_hardif_neigh_seq_print_text - print the single hop neighbour list * @seq: neighbour table seq_file struct * @offset: not used * * Always returns 0. */ int batadv_hardif_neigh_seq_print_text(struct seq_file *seq, void *offset) { struct net_device *net_dev = (struct net_device *)seq->private; struct batadv_priv *bat_priv = netdev_priv(net_dev); struct batadv_hard_iface *primary_if; primary_if = batadv_seq_print_text_primary_if_get(seq); if (!primary_if) return 0; seq_printf(seq, "[B.A.T.M.A.N. adv %s, MainIF/MAC: %s/%pM (%s %s)]\n", BATADV_SOURCE_VERSION, primary_if->net_dev->name, primary_if->net_dev->dev_addr, net_dev->name, bat_priv->bat_algo_ops->name); batadv_hardif_free_ref(primary_if); if (!bat_priv->bat_algo_ops->bat_neigh_print) { seq_puts(seq, "No printing function for this routing protocol\n"); return 0; } bat_priv->bat_algo_ops->bat_neigh_print(bat_priv, seq); return 0; } /** * batadv_orig_ifinfo_free_rcu - free the orig_ifinfo object * @rcu: rcu pointer of the orig_ifinfo object Loading net/batman-adv/originator.h +2 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,8 @@ batadv_neigh_ifinfo_get(struct batadv_neigh_node *neigh, struct batadv_hard_iface *if_outgoing); void batadv_neigh_ifinfo_free_ref(struct batadv_neigh_ifinfo *neigh_ifinfo); int batadv_hardif_neigh_seq_print_text(struct seq_file *seq, void *offset); struct batadv_orig_ifinfo * batadv_orig_ifinfo_get(struct batadv_orig_node *orig_node, struct batadv_hard_iface *if_outgoing); Loading net/batman-adv/types.h +2 −0 Original line number Diff line number Diff line Loading @@ -1159,6 +1159,7 @@ struct batadv_forw_packet { * @bat_neigh_is_equiv_or_better: check if neigh1 is equally good or better * than neigh2 for their respective outgoing interface from the metric * prospective * @bat_neigh_print: print the single hop neighbor list (optional) * @bat_neigh_free: free the resources allocated by the routing algorithm for a * neigh_node object * @bat_orig_print: print the originator table (optional) Loading Loading @@ -1189,6 +1190,7 @@ struct batadv_algo_ops { struct batadv_hard_iface *if_outgoing1, struct batadv_neigh_node *neigh2, struct batadv_hard_iface *if_outgoing2); void (*bat_neigh_print)(struct batadv_priv *priv, struct seq_file *seq); void (*bat_neigh_free)(struct batadv_neigh_node *neigh); /* orig_node handling API */ void (*bat_orig_print)(struct batadv_priv *priv, struct seq_file *seq, Loading Loading
net/batman-adv/bat_iv_ogm.c +53 −0 Original line number Diff line number Diff line Loading @@ -1861,6 +1861,58 @@ static void batadv_iv_ogm_orig_print(struct batadv_priv *bat_priv, seq_puts(seq, "No batman nodes in range ...\n"); } /** * batadv_iv_hardif_neigh_print - print a single hop neighbour node * @seq: neighbour table seq_file struct * @hardif_neigh: hardif neighbour information */ static void batadv_iv_hardif_neigh_print(struct seq_file *seq, struct batadv_hardif_neigh_node *hardif_neigh) { int last_secs, last_msecs; last_secs = jiffies_to_msecs(jiffies - hardif_neigh->last_seen) / 1000; last_msecs = jiffies_to_msecs(jiffies - hardif_neigh->last_seen) % 1000; seq_printf(seq, " %10s %pM %4i.%03is\n", hardif_neigh->if_incoming->net_dev->name, hardif_neigh->addr, last_secs, last_msecs); } /** * batadv_iv_ogm_neigh_print - print the single hop neighbour list * @bat_priv: the bat priv with all the soft interface information * @seq: neighbour table seq_file struct */ static void batadv_iv_neigh_print(struct batadv_priv *bat_priv, struct seq_file *seq) { struct net_device *net_dev = (struct net_device *)seq->private; struct batadv_hardif_neigh_node *hardif_neigh; struct batadv_hard_iface *hard_iface; int batman_count = 0; seq_printf(seq, " %10s %-13s %s\n", "IF", "Neighbor", "last-seen"); rcu_read_lock(); list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) { if (hard_iface->soft_iface != net_dev) continue; hlist_for_each_entry_rcu(hardif_neigh, &hard_iface->neigh_list, list) { batadv_iv_hardif_neigh_print(seq, hardif_neigh); batman_count++; } } rcu_read_unlock(); if (batman_count == 0) 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 Loading Loading @@ -1954,6 +2006,7 @@ static struct batadv_algo_ops batadv_batman_iv __read_mostly = { .bat_ogm_emit = batadv_iv_ogm_emit, .bat_neigh_cmp = batadv_iv_ogm_neigh_cmp, .bat_neigh_is_equiv_or_better = batadv_iv_ogm_neigh_is_eob, .bat_neigh_print = batadv_iv_neigh_print, .bat_orig_print = batadv_iv_ogm_orig_print, .bat_orig_free = batadv_iv_ogm_orig_free, .bat_orig_add_if = batadv_iv_ogm_orig_add_if, Loading
net/batman-adv/debugfs.c +9 −0 Original line number Diff line number Diff line Loading @@ -262,6 +262,13 @@ static int batadv_algorithms_open(struct inode *inode, struct file *file) return single_open(file, batadv_algo_seq_print_text, NULL); } static int neighbors_open(struct inode *inode, struct file *file) { struct net_device *net_dev = (struct net_device *)inode->i_private; return single_open(file, batadv_hardif_neigh_seq_print_text, net_dev); } static int batadv_originators_open(struct inode *inode, struct file *file) { struct net_device *net_dev = (struct net_device *)inode->i_private; Loading Loading @@ -375,6 +382,7 @@ static struct batadv_debuginfo *batadv_general_debuginfos[] = { }; /* The following attributes are per soft interface */ static BATADV_DEBUGINFO(neighbors, S_IRUGO, neighbors_open); static BATADV_DEBUGINFO(originators, S_IRUGO, batadv_originators_open); static BATADV_DEBUGINFO(gateways, S_IRUGO, batadv_gateways_open); static BATADV_DEBUGINFO(transtable_global, S_IRUGO, Loading @@ -394,6 +402,7 @@ static BATADV_DEBUGINFO(nc_nodes, S_IRUGO, batadv_nc_nodes_open); #endif static struct batadv_debuginfo *batadv_mesh_debuginfos[] = { &batadv_debuginfo_neighbors, &batadv_debuginfo_originators, &batadv_debuginfo_gateways, &batadv_debuginfo_transtable_global, Loading
net/batman-adv/originator.c +34 −0 Original line number Diff line number Diff line Loading @@ -692,6 +692,40 @@ batadv_neigh_node_new(struct batadv_orig_node *orig_node, return neigh_node; } /** * batadv_hardif_neigh_seq_print_text - print the single hop neighbour list * @seq: neighbour table seq_file struct * @offset: not used * * Always returns 0. */ int batadv_hardif_neigh_seq_print_text(struct seq_file *seq, void *offset) { struct net_device *net_dev = (struct net_device *)seq->private; struct batadv_priv *bat_priv = netdev_priv(net_dev); struct batadv_hard_iface *primary_if; primary_if = batadv_seq_print_text_primary_if_get(seq); if (!primary_if) return 0; seq_printf(seq, "[B.A.T.M.A.N. adv %s, MainIF/MAC: %s/%pM (%s %s)]\n", BATADV_SOURCE_VERSION, primary_if->net_dev->name, primary_if->net_dev->dev_addr, net_dev->name, bat_priv->bat_algo_ops->name); batadv_hardif_free_ref(primary_if); if (!bat_priv->bat_algo_ops->bat_neigh_print) { seq_puts(seq, "No printing function for this routing protocol\n"); return 0; } bat_priv->bat_algo_ops->bat_neigh_print(bat_priv, seq); return 0; } /** * batadv_orig_ifinfo_free_rcu - free the orig_ifinfo object * @rcu: rcu pointer of the orig_ifinfo object Loading
net/batman-adv/originator.h +2 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,8 @@ batadv_neigh_ifinfo_get(struct batadv_neigh_node *neigh, struct batadv_hard_iface *if_outgoing); void batadv_neigh_ifinfo_free_ref(struct batadv_neigh_ifinfo *neigh_ifinfo); int batadv_hardif_neigh_seq_print_text(struct seq_file *seq, void *offset); struct batadv_orig_ifinfo * batadv_orig_ifinfo_get(struct batadv_orig_node *orig_node, struct batadv_hard_iface *if_outgoing); Loading
net/batman-adv/types.h +2 −0 Original line number Diff line number Diff line Loading @@ -1159,6 +1159,7 @@ struct batadv_forw_packet { * @bat_neigh_is_equiv_or_better: check if neigh1 is equally good or better * than neigh2 for their respective outgoing interface from the metric * prospective * @bat_neigh_print: print the single hop neighbor list (optional) * @bat_neigh_free: free the resources allocated by the routing algorithm for a * neigh_node object * @bat_orig_print: print the originator table (optional) Loading Loading @@ -1189,6 +1190,7 @@ struct batadv_algo_ops { struct batadv_hard_iface *if_outgoing1, struct batadv_neigh_node *neigh2, struct batadv_hard_iface *if_outgoing2); void (*bat_neigh_print)(struct batadv_priv *priv, struct seq_file *seq); void (*bat_neigh_free)(struct batadv_neigh_node *neigh); /* orig_node handling API */ void (*bat_orig_print)(struct batadv_priv *priv, struct seq_file *seq, Loading