* [B.A.T.M.A.N.] [PATCH 1/3] batman-adv: drop useless argument for arp_change_timeout() @ 2012-04-17 10:24 Antonio Quartulli 2012-04-17 10:24 ` [B.A.T.M.A.N.] [PATCH 2/3] batman-adv: introduce a boolean switch to enable/disable DAT Antonio Quartulli 2012-04-17 10:24 ` [B.A.T.M.A.N.] [PATCH 3/3] batman-adv: use static inline functions instead of bla(...) Antonio Quartulli 0 siblings, 2 replies; 5+ messages in thread From: Antonio Quartulli @ 2012-04-17 10:24 UTC (permalink / raw) To: b.a.t.m.a.n The net_device structure already has a "name" field therefore we don't need to pass the name by using another parameter. Signed-off-by: Antonio Quartulli <ordex@autistici.org> --- distributed-arp-table.c | 4 ++-- distributed-arp-table.h | 2 +- soft-interface.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/distributed-arp-table.c b/distributed-arp-table.c index b43bece..5386af0 100644 --- a/distributed-arp-table.c +++ b/distributed-arp-table.c @@ -562,12 +562,12 @@ bool dat_drop_broadcast_packet(struct bat_priv *bat_priv, return false; } -void arp_change_timeout(struct net_device *soft_iface, const char *name) +void arp_change_timeout(struct net_device *soft_iface) { struct in_device *in_dev = in_dev_get(soft_iface); if (!in_dev) { pr_err("Unable to set ARP parameters for the batman interface '%s'\n", - name); + soft_iface->name); return; } diff --git a/distributed-arp-table.h b/distributed-arp-table.h index 26b98c0..c16aa1b 100644 --- a/distributed-arp-table.h +++ b/distributed-arp-table.h @@ -49,7 +49,7 @@ bool dat_snoop_incoming_arp_reply(struct bat_priv *bat_priv, struct sk_buff *skb, int hdr_size); bool dat_drop_broadcast_packet(struct bat_priv *bat_priv, struct forw_packet *forw_packet); -void arp_change_timeout(struct net_device *soft_iface, const char *name); +void arp_change_timeout(struct net_device *soft_iface); /* hash function to choose an entry in a hash table of given size */ /* hash algorithm from http://en.wikipedia.org/wiki/Hash_table */ diff --git a/soft-interface.c b/soft-interface.c index b56dafd..de0ceb2 100644 --- a/soft-interface.c +++ b/soft-interface.c @@ -381,7 +381,7 @@ struct net_device *softif_create(const char *name) goto free_soft_iface; } - arp_change_timeout(soft_iface, name); + arp_change_timeout(soft_iface); bat_priv = netdev_priv(soft_iface); -- 1.7.9.4 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [B.A.T.M.A.N.] [PATCH 2/3] batman-adv: introduce a boolean switch to enable/disable DAT 2012-04-17 10:24 [B.A.T.M.A.N.] [PATCH 1/3] batman-adv: drop useless argument for arp_change_timeout() Antonio Quartulli @ 2012-04-17 10:24 ` Antonio Quartulli 2012-04-17 10:33 ` Marek Lindner 2012-04-17 10:35 ` Marek Lindner 2012-04-17 10:24 ` [B.A.T.M.A.N.] [PATCH 3/3] batman-adv: use static inline functions instead of bla(...) Antonio Quartulli 1 sibling, 2 replies; 5+ messages in thread From: Antonio Quartulli @ 2012-04-17 10:24 UTC (permalink / raw) To: b.a.t.m.a.n This patch introduces a boolean switch which enables D.A.T. (Distributed ARP Table) to be activated/deactivated at run-time. Signed-off-by: Antonio Quartulli <ordex@autistici.org> --- bat_sysfs.c | 7 +++++ distributed-arp-table.c | 72 +++++++++++++++++++++++++++++++++++------------ distributed-arp-table.h | 3 +- soft-interface.c | 3 +- types.h | 1 + 5 files changed, 64 insertions(+), 22 deletions(-) diff --git a/bat_sysfs.c b/bat_sysfs.c index d0f8453..9415f9f 100644 --- a/bat_sysfs.c +++ b/bat_sysfs.c @@ -21,6 +21,7 @@ #include "main.h" #include "bat_sysfs.h" +#include "distributed-arp-table.h" #include "translation-table.h" #include "originator.h" #include "hard-interface.h" @@ -433,6 +434,9 @@ BAT_ATTR_SIF_BOOL(bonding, S_IRUGO | S_IWUSR, NULL); #ifdef CONFIG_BATMAN_ADV_BLA BAT_ATTR_SIF_BOOL(bridge_loop_avoidance, S_IRUGO | S_IWUSR, NULL); #endif +#ifdef CONFIG_BATMAN_ADV_DAT +BAT_ATTR_SIF_BOOL(distributed_arp_table, S_IRUGO | S_IWUSR, dat_sysfs_change); +#endif BAT_ATTR_SIF_BOOL(fragmentation, S_IRUGO | S_IWUSR, update_min_mtu); BAT_ATTR_SIF_BOOL(ap_isolation, S_IRUGO | S_IWUSR, NULL); static BAT_ATTR(vis_mode, S_IRUGO | S_IWUSR, show_vis_mode, store_vis_mode); @@ -454,6 +458,9 @@ static struct bat_attribute *mesh_attrs[] = { #ifdef CONFIG_BATMAN_ADV_BLA &bat_attr_bridge_loop_avoidance, #endif +#ifdef CONFIG_BATMAN_ADV_DAT + &bat_attr_distributed_arp_table, +#endif &bat_attr_fragmentation, &bat_attr_ap_isolation, &bat_attr_vis_mode, diff --git a/distributed-arp-table.c b/distributed-arp-table.c index 5386af0..eb94e43 100644 --- a/distributed-arp-table.c +++ b/distributed-arp-table.c @@ -345,6 +345,45 @@ out: return type; } +static void arp_change_timeout(struct net_device *soft_iface, bool enable_dat) +{ + struct in_device *in_dev = in_dev_get(soft_iface); + if (!in_dev) { + pr_err("Unable to set ARP parameters for the batman interface '%s'\n", + soft_iface->name); + return; + } + + if (enable_dat) { + /* Introduce a delay in the ARP state-machine transactions. + * Entries will be kept in the ARP table for the default time + * multiplied by 4 + */ + in_dev->arp_parms->base_reachable_time *= ARP_TIMEOUT_FACTOR; + in_dev->arp_parms->gc_staletime *= ARP_TIMEOUT_FACTOR; + in_dev->arp_parms->reachable_time *= ARP_TIMEOUT_FACTOR; + } else { + in_dev->arp_parms->base_reachable_time /= ARP_TIMEOUT_FACTOR; + in_dev->arp_parms->gc_staletime /= ARP_TIMEOUT_FACTOR; + in_dev->arp_parms->reachable_time /= ARP_TIMEOUT_FACTOR; + } + + in_dev_put(in_dev); +} + +void dat_sysfs_change(struct net_device *soft_iface) +{ + struct bat_priv *bat_priv = netdev_priv(soft_iface); + + if (!bat_priv) + return; + + /* increase or decrease the ARP timeout */ + arp_change_timeout(soft_iface, + atomic_read(&bat_priv->distributed_arp_table)); +} + + /* return true if the message has been sent to the dht candidates, false * otherwise. In case of true the message has to be enqueued to permit the * fallback */ @@ -359,6 +398,9 @@ bool dat_snoop_outgoing_arp_request(struct bat_priv *bat_priv, struct hard_iface *primary_if = NULL; struct sk_buff *skb_new; + if (!atomic_read(&bat_priv->distributed_arp_table)) + return false; + type = arp_get_type(bat_priv, skb, 0); /* If we get an ARP_REQUEST we have to send the unicast message to the * selected DHT candidates */ @@ -421,6 +463,9 @@ bool dat_snoop_incoming_arp_request(struct bat_priv *bat_priv, struct neighbour *n = NULL; bool ret = false; + if (!atomic_read(&bat_priv->distributed_arp_table)) + return false; + type = arp_get_type(bat_priv, skb, hdr_size); if (type != ARPOP_REQUEST) goto out; @@ -474,6 +519,9 @@ bool dat_snoop_outgoing_arp_reply(struct bat_priv *bat_priv, uint8_t *hw_src, *hw_dst; bool ret = false; + if (!atomic_read(&bat_priv->distributed_arp_table)) + return false; + type = arp_get_type(bat_priv, skb, 0); if (type != ARPOP_REPLY) goto out; @@ -507,6 +555,9 @@ bool dat_snoop_incoming_arp_reply(struct bat_priv *bat_priv, uint8_t *hw_src, *hw_dst; bool ret = false; + if (!atomic_read(&bat_priv->distributed_arp_table)) + return false; + type = arp_get_type(bat_priv, skb, hdr_size); if (type != ARPOP_REPLY) goto out; @@ -537,6 +588,9 @@ bool dat_drop_broadcast_packet(struct bat_priv *bat_priv, { struct neighbour *n; + if (!atomic_read(&bat_priv->distributed_arp_table)) + return false; + /* If this packet is an ARP_REQUEST and we already have the information * that it is going to ask, we can drop the packet */ if (!forw_packet->num_packets && @@ -561,21 +615,3 @@ bool dat_drop_broadcast_packet(struct bat_priv *bat_priv, } return false; } - -void arp_change_timeout(struct net_device *soft_iface) -{ - struct in_device *in_dev = in_dev_get(soft_iface); - if (!in_dev) { - pr_err("Unable to set ARP parameters for the batman interface '%s'\n", - soft_iface->name); - return; - } - - /* Introduce a delay in the ARP state-machine transactions. Entries - * will be kept in the ARP table for the default time multiplied by 4 */ - in_dev->arp_parms->base_reachable_time *= ARP_TIMEOUT_FACTOR; - in_dev->arp_parms->gc_staletime *= ARP_TIMEOUT_FACTOR; - in_dev->arp_parms->reachable_time *= ARP_TIMEOUT_FACTOR; - - in_dev_put(in_dev); -} diff --git a/distributed-arp-table.h b/distributed-arp-table.h index c16aa1b..0e93c75 100644 --- a/distributed-arp-table.h +++ b/distributed-arp-table.h @@ -39,6 +39,7 @@ #define ARP_IP_DST(skb, hdr_size) (*(uint32_t *)(ARP_HW_SRC(skb, hdr_size) + \ ETH_ALEN * 2 + 4)) +void dat_sysfs_change(struct net_device *soft_iface); bool dat_snoop_outgoing_arp_request(struct bat_priv *bat_priv, struct sk_buff *skb); bool dat_snoop_incoming_arp_request(struct bat_priv *bat_priv, @@ -49,7 +50,6 @@ bool dat_snoop_incoming_arp_reply(struct bat_priv *bat_priv, struct sk_buff *skb, int hdr_size); bool dat_drop_broadcast_packet(struct bat_priv *bat_priv, struct forw_packet *forw_packet); -void arp_change_timeout(struct net_device *soft_iface); /* hash function to choose an entry in a hash table of given size */ /* hash algorithm from http://en.wikipedia.org/wiki/Hash_table */ @@ -93,7 +93,6 @@ static inline void dat_init_own_dht_addr(struct bat_priv *bat_priv, #define dat_snoop_outgoing_arp_reply(...) #define dat_snoop_incoming_arp_reply(...) (0) #define dat_drop_broadcast_packet(...) (0) -#define arp_change_timeout(...) #define dat_init_orig_node_dht_addr(...) #define dat_init_own_dht_addr(...) diff --git a/soft-interface.c b/soft-interface.c index de0ceb2..3ce67c6 100644 --- a/soft-interface.c +++ b/soft-interface.c @@ -381,13 +381,12 @@ struct net_device *softif_create(const char *name) goto free_soft_iface; } - arp_change_timeout(soft_iface); - bat_priv = netdev_priv(soft_iface); atomic_set(&bat_priv->aggregated_ogms, 1); atomic_set(&bat_priv->bonding, 0); atomic_set(&bat_priv->bridge_loop_avoidance, 0); + atomic_set(&bat_priv->distributed_arp_table, 0); atomic_set(&bat_priv->ap_isolation, 0); atomic_set(&bat_priv->vis_mode, VIS_TYPE_CLIENT_UPDATE); atomic_set(&bat_priv->gw_mode, GW_MODE_OFF); diff --git a/types.h b/types.h index 15f538a..8728266 100644 --- a/types.h +++ b/types.h @@ -170,6 +170,7 @@ struct bat_priv { atomic_t fragmentation; /* boolean */ atomic_t ap_isolation; /* boolean */ atomic_t bridge_loop_avoidance; /* boolean */ + atomic_t distributed_arp_table; /* boolean */ atomic_t vis_mode; /* VIS_TYPE_* */ atomic_t gw_mode; /* GW_MODE_* */ atomic_t gw_sel_class; /* uint */ -- 1.7.9.4 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [B.A.T.M.A.N.] [PATCH 2/3] batman-adv: introduce a boolean switch to enable/disable DAT 2012-04-17 10:24 ` [B.A.T.M.A.N.] [PATCH 2/3] batman-adv: introduce a boolean switch to enable/disable DAT Antonio Quartulli @ 2012-04-17 10:33 ` Marek Lindner 2012-04-17 10:35 ` Marek Lindner 1 sibling, 0 replies; 5+ messages in thread From: Marek Lindner @ 2012-04-17 10:33 UTC (permalink / raw) To: The list for a Better Approach To Mobile Ad-hoc Networking On Tuesday, April 17, 2012 12:24:53 Antonio Quartulli wrote: > +static void arp_change_timeout(struct net_device *soft_iface, bool > enable_dat) +{ > + struct in_device *in_dev = in_dev_get(soft_iface); > + if (!in_dev) { > + pr_err("Unable to set ARP parameters for the batman > interface '%s'\n", + soft_iface->name); > + return; > + } > + > + if (enable_dat) { > + /* Introduce a delay in the ARP state-machine transactions. > + * Entries will be kept in the ARP table for the default > time + * multiplied by 4 > + */ > + in_dev->arp_parms->base_reachable_time *= > ARP_TIMEOUT_FACTOR; + in_dev->arp_parms->gc_staletime *= > ARP_TIMEOUT_FACTOR; + in_dev->arp_parms->reachable_time *= > ARP_TIMEOUT_FACTOR; + } else { > + in_dev->arp_parms->base_reachable_time /= > ARP_TIMEOUT_FACTOR; + in_dev->arp_parms->gc_staletime /= > ARP_TIMEOUT_FACTOR; + in_dev->arp_parms->reachable_time /= > ARP_TIMEOUT_FACTOR; + } > + > + in_dev_put(in_dev); > +} > + > +void dat_sysfs_change(struct net_device *soft_iface) > +{ > + struct bat_priv *bat_priv = netdev_priv(soft_iface); > + > + if (!bat_priv) > + return; > + > + /* increase or decrease the ARP timeout */ > + arp_change_timeout(soft_iface, > + atomic_read(&bat_priv->distributed_arp_table)); > +} AFAIK there is no check whether the received value actually changes something but arp_change_timeout() implicitely assumes so. I guess the following will break the timeouts: echo 0 > /sys/class/net/bat0/mesh/distributed_arp_table echo 0 > /sys/class/net/bat0/mesh/distributed_arp_table Regards, Marek ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [B.A.T.M.A.N.] [PATCH 2/3] batman-adv: introduce a boolean switch to enable/disable DAT 2012-04-17 10:24 ` [B.A.T.M.A.N.] [PATCH 2/3] batman-adv: introduce a boolean switch to enable/disable DAT Antonio Quartulli 2012-04-17 10:33 ` Marek Lindner @ 2012-04-17 10:35 ` Marek Lindner 1 sibling, 0 replies; 5+ messages in thread From: Marek Lindner @ 2012-04-17 10:35 UTC (permalink / raw) To: The list for a Better Approach To Mobile Ad-hoc Networking On Tuesday, April 17, 2012 12:24:53 Antonio Quartulli wrote: > +static void arp_change_timeout(struct net_device *soft_iface, bool > enable_dat) +{ > + struct in_device *in_dev = in_dev_get(soft_iface); > + if (!in_dev) { > + pr_err("Unable to set ARP parameters for the batman > interface '%s'\n", + soft_iface->name); > + return; > + } > + > + if (enable_dat) { > + /* Introduce a delay in the ARP state-machine transactions. > + * Entries will be kept in the ARP table for the default > time + * multiplied by 4 > + */ > + in_dev->arp_parms->base_reachable_time *= > ARP_TIMEOUT_FACTOR; + in_dev->arp_parms->gc_staletime *= > ARP_TIMEOUT_FACTOR; + in_dev->arp_parms->reachable_time *= > ARP_TIMEOUT_FACTOR; + } else { > + in_dev->arp_parms->base_reachable_time /= > ARP_TIMEOUT_FACTOR; + in_dev->arp_parms->gc_staletime /= > ARP_TIMEOUT_FACTOR; + in_dev->arp_parms->reachable_time /= > ARP_TIMEOUT_FACTOR; + } > + > + in_dev_put(in_dev); > +} One more thing: Are we never going to release the in_dev ? Regards, Marek ^ permalink raw reply [flat|nested] 5+ messages in thread
* [B.A.T.M.A.N.] [PATCH 3/3] batman-adv: use static inline functions instead of bla(...) 2012-04-17 10:24 [B.A.T.M.A.N.] [PATCH 1/3] batman-adv: drop useless argument for arp_change_timeout() Antonio Quartulli 2012-04-17 10:24 ` [B.A.T.M.A.N.] [PATCH 2/3] batman-adv: introduce a boolean switch to enable/disable DAT Antonio Quartulli @ 2012-04-17 10:24 ` Antonio Quartulli 1 sibling, 0 replies; 5+ messages in thread From: Antonio Quartulli @ 2012-04-17 10:24 UTC (permalink / raw) To: b.a.t.m.a.n When the DAT component is not built, instead of having fake function like foo(...) we must use a static inline function in order to allow the compiler to check the number of the type of the passed arguments Signed-off-by: Antonio Quartulli <ordex@autistici.org> --- distributed-arp-table.h | 51 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/distributed-arp-table.h b/distributed-arp-table.h index 0e93c75..d87f26c 100644 --- a/distributed-arp-table.h +++ b/distributed-arp-table.h @@ -88,13 +88,50 @@ static inline void dat_init_own_dht_addr(struct bat_priv *bat_priv, #else -#define dat_snoop_outgoing_arp_request(...) (0) -#define dat_snoop_incoming_arp_request(...) (0) -#define dat_snoop_outgoing_arp_reply(...) -#define dat_snoop_incoming_arp_reply(...) (0) -#define dat_drop_broadcast_packet(...) (0) -#define dat_init_orig_node_dht_addr(...) -#define dat_init_own_dht_addr(...) +static inline void dat_sysfs_change(struct net_device *soft_iface) +{ +} + +static inline bool dat_snoop_outgoing_arp_request(struct bat_priv *bat_priv, + struct sk_buff *skb) +{ + return false; +} + +static inline bool dat_snoop_incoming_arp_request(struct bat_priv *bat_priv, + struct sk_buff *skb, + int hdr_size) +{ + return false; +} + +static inline bool dat_snoop_outgoing_arp_reply(struct bat_priv *bat_priv, + struct sk_buff *skb) +{ + return false; +} + +static inline bool dat_snoop_incoming_arp_reply(struct bat_priv *bat_priv, + struct sk_buff *skb, + int hdr_size) +{ + return false; +} + +static inline bool dat_drop_broadcast_packet(struct bat_priv *bat_priv, + struct forw_packet *forw_packet) +{ + return false; +} + +static inline void dat_init_orig_node_dht_addr(struct orig_node *orig_node) +{ +} + +static inline void dat_init_own_dht_addr(struct bat_priv *bat_priv, + struct hard_iface *primary_if) +{ +} #endif /* CONFIG_BATMAN_ADV_DAT */ -- 1.7.9.4 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-04-17 10:35 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-04-17 10:24 [B.A.T.M.A.N.] [PATCH 1/3] batman-adv: drop useless argument for arp_change_timeout() Antonio Quartulli 2012-04-17 10:24 ` [B.A.T.M.A.N.] [PATCH 2/3] batman-adv: introduce a boolean switch to enable/disable DAT Antonio Quartulli 2012-04-17 10:33 ` Marek Lindner 2012-04-17 10:35 ` Marek Lindner 2012-04-17 10:24 ` [B.A.T.M.A.N.] [PATCH 3/3] batman-adv: use static inline functions instead of bla(...) Antonio Quartulli
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox