Marek Lindner wrote:
On Monday 11 January 2010 12:57:56 you wrote:
This fixes the bug discovered by Marek Lindner which did not allow turning on the vis-server before an interface has been added. With this patch we are using a global atomic variable for activating and deactiating the vis-server-mode instead, which can be used before inserting an interface.
Off-list: Wollte mir grad deinen Patch reinziehen, aber trotz "git send-email" ist auch diese Mail is base64 encoded ?? Im Header sehe ich jedenfalls "X-Mailer: git- send-email 1.6.6". Evtl. hängt das mit charset (utf8) zusammen ?
Aaaalso. Ich habe ersteinmal keine Ahnung woher es kommt. git-format-patch produziert sowas jedenfalls nicht. git-send-email eigentlich auch nicht (der bleibt immer bei "Content-Type: text/plain; ...". Wenn ich jetzt im Git Quellcode suche, dann finde ich auch nur funktionen um base64 in Mails zu dekodieren.
@Sven: Hast du eine Idee, woran das liegen könnte ?
Vielleicht macht der Mailman sowas oder irgendwas anderes auf open-mesh.org? Ich habe jetzt einfach mal an meine Adresse auf open-mesh.net die Mail geschickt. Die sieht aber vollkommen in Ordnung aus.
Wenn ich in die mbox von mailman schauen /var/lib/mailman/archives/private/b.a.t.m.a.n.mbox/b.a.t.m.a.n.mbox , dann sieht die Mail so aus wie ich sie von git-send-email erwarten wuerde. Kann es also sein, dass es beim wieder raussenden passiert? Also nicht das raussenden ueber sendmail, sondern das Vorbereiten von mailman.
NEWS fuer 2.1.8 (15-Apr-2006)
{{{ - Updated email library to 2.5.7 which will encode payload into qp/base64 upon setting. This enabled backing out the scrubber related patches including 'X-Mailman-Scrubbed' header in 2.1.7. }}}
Wieso es das macht ist vielleicht(tm) das "Content-Transfer-Encoding: 8bit" in der Mail von Linus + Decorating. Wenn wir das rausnehmen, sollte es eigentlich gehen.
Siehe dazu auch Mailman/Handlers/Decorate.py process(..)
Ich habe ersteinmal in https://lists.open-mesh.org/mm/admin/b.a.t.m.a.n/?VARHELP=nondigest/msg_foot... den Footer {{{ _______________________________________________ %(real_name)s mailing list %(real_name)s@%(host_name)s %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
}}} entfernt. Vielleicht kann Linus nocheinmal exakt genauso seinen Patch an die Mailingliste senden.
....das waere jedenfalls bis jetzt meine Vermutung. Leider weiss ich gerade nicht wie ich das am einfachsten Testen koennte (bis auf das Linus den Patch einfach nochmal sendet).
Gruesse, Sven
Sorry for the german mail. This was intended to be off the list. I must accidentally brought that mail back to the mailinglist while playing with mailman.
Best regards, Sven
On Fri, Jan 15, 2010 at 07:34:38PM +0100, Sven Eckelmann wrote:
Marek Lindner wrote:
On Monday 11 January 2010 12:57:56 you wrote:
This fixes the bug discovered by Marek Lindner which did not allow turning on the vis-server before an interface has been added. With this patch we are using a global atomic variable for activating and deactiating the vis-server-mode instead, which can be used before inserting an interface.
Off-list: Wollte mir grad deinen Patch reinziehen, aber trotz "git send-email" ist auch diese Mail is base64 encoded ?? Im Header sehe ich jedenfalls "X-Mailer: git- send-email 1.6.6". Evtl. h?ngt das mit charset (utf8) zusammen ?
Aaaalso. Ich habe ersteinmal keine Ahnung woher es kommt. git-format-patch produziert sowas jedenfalls nicht. git-send-email eigentlich auch nicht (der bleibt immer bei "Content-Type: text/plain; ...". Wenn ich jetzt im Git Quellcode suche, dann finde ich auch nur funktionen um base64 in Mails zu dekodieren.
All the patches i've generated so far from git have been plain old ASCII, even though some contain extended characters, because of umlauts in names. So i agree with Sven, it is more likely to be a problem with the mail system somewhere, not git.
Andrew
This fixes the bug discovered by Marek Lindner which did not allow turning on the vis-server before an interface has been added. With this patch we are using a global atomic variable for activating and deactiating the vis-server-mode instead, which can be used before inserting an interface.
Signed-off-by: Linus Lüssing linus.luessing@web.de --- batman-adv-kernelland/main.c | 2 + batman-adv-kernelland/main.h | 1 + batman-adv-kernelland/proc.c | 13 ++++++----- batman-adv-kernelland/send.c | 3 +- batman-adv-kernelland/vis.c | 45 +++++------------------------------------ batman-adv-kernelland/vis.h | 2 - 6 files changed, 18 insertions(+), 48 deletions(-)
diff --git a/batman-adv-kernelland/main.c b/batman-adv-kernelland/main.c index a64f070..002e6ea 100644 --- a/batman-adv-kernelland/main.c +++ b/batman-adv-kernelland/main.c @@ -46,6 +46,7 @@ DEFINE_SPINLOCK(forw_bcast_list_lock);
atomic_t originator_interval; atomic_t vis_interval; +atomic_t vis_mode; atomic_t aggregation_enabled; int16_t num_hna; int16_t num_ifs; @@ -86,6 +87,7 @@ int init_module(void) atomic_set(&originator_interval, 1000); atomic_set(&vis_interval, 1000);/* TODO: raise this later, this is only * for debugging now. */ + atomic_set(&vis_mode, VIS_TYPE_CLIENT_UPDATE); atomic_set(&aggregation_enabled, 1); atomic_set(&gw_mode, GW_MODE_OFF); atomic_set(&gw_srv_class, 0); diff --git a/batman-adv-kernelland/main.h b/batman-adv-kernelland/main.h index 3dfe5fe..5daa9a4 100644 --- a/batman-adv-kernelland/main.h +++ b/batman-adv-kernelland/main.h @@ -130,6 +130,7 @@ extern spinlock_t forw_bcast_list_lock;
extern atomic_t originator_interval; extern atomic_t vis_interval; +extern atomic_t vis_mode; extern atomic_t aggregation_enabled; extern int16_t num_hna; extern int16_t num_ifs; diff --git a/batman-adv-kernelland/proc.c b/batman-adv-kernelland/proc.c index 747ed5f..c41dc19 100644 --- a/batman-adv-kernelland/proc.c +++ b/batman-adv-kernelland/proc.c @@ -342,11 +342,11 @@ static ssize_t proc_vis_srv_write(struct file *file, const char __user * buffer, if ((strcmp(vis_mode_string, "client") == 0) || (strcmp(vis_mode_string, "disabled") == 0)) { printk(KERN_INFO "batman-adv:Setting VIS mode to client (disabling vis server)\n"); - vis_set_mode(VIS_TYPE_CLIENT_UPDATE); + atomic_set(&vis_mode, VIS_TYPE_CLIENT_UPDATE); } else if ((strcmp(vis_mode_string, "server") == 0) || (strcmp(vis_mode_string, "enabled") == 0)) { printk(KERN_INFO "batman-adv:Setting VIS mode to server (enabling vis server)\n"); - vis_set_mode(VIS_TYPE_SERVER_SYNC); + atomic_set(&vis_mode, VIS_TYPE_SERVER_SYNC); } else printk(KERN_ERR "batman-adv:Unknown VIS mode: %s\n", vis_mode_string); @@ -357,12 +357,12 @@ static ssize_t proc_vis_srv_write(struct file *file, const char __user * buffer,
static int proc_vis_srv_read(struct seq_file *seq, void *offset) { - int vis_server = is_vis_server(); + int vis_server = atomic_read(&vis_mode);
seq_printf(seq, "[%c] client mode (server disabled) \n", - (!vis_server) ? 'x' : ' '); + (vis_server == VIS_TYPE_CLIENT_UPDATE) ? 'x' : ' '); seq_printf(seq, "[%c] server mode (server enabled) \n", - (vis_server) ? 'x' : ' '); + (vis_server == VIS_TYPE_SERVER_SYNC) ? 'x' : ' ');
return 0; } @@ -381,9 +381,10 @@ static int proc_vis_data_read(struct seq_file *seq, void *offset) int i; char tmp_addr_str[ETH_STR_LEN]; unsigned long flags; + int vis_server = atomic_read(&vis_mode);
rcu_read_lock(); - if (list_empty(&if_list) || (!is_vis_server())) { + if (list_empty(&if_list) || (vis_server == VIS_TYPE_CLIENT_UPDATE)) { rcu_read_unlock(); goto end; } diff --git a/batman-adv-kernelland/send.c b/batman-adv-kernelland/send.c index a40e8b8..dc9b217 100644 --- a/batman-adv-kernelland/send.c +++ b/batman-adv-kernelland/send.c @@ -251,6 +251,7 @@ void schedule_own_packet(struct batman_if *batman_if) { unsigned long send_time; struct batman_packet *batman_packet; + int vis_server = atomic_read(&vis_mode);
/** * the interface gets activated here to avoid race conditions between @@ -275,7 +276,7 @@ void schedule_own_packet(struct batman_if *batman_if) /* change sequence number to network order */ batman_packet->seqno = htons((uint16_t)atomic_read(&batman_if->seqno));
- if (is_vis_server()) + if (vis_server == VIS_TYPE_SERVER_SYNC) batman_packet->flags = VIS_SERVER; else batman_packet->flags = 0; diff --git a/batman-adv-kernelland/vis.c b/batman-adv-kernelland/vis.c index fa8afdb..b118d1e 100644 --- a/batman-adv-kernelland/vis.c +++ b/batman-adv-kernelland/vis.c @@ -49,41 +49,6 @@ static void free_info(void *data) kfree(info); }
-/* set the mode of the visualization to client or server */ -void vis_set_mode(int mode) -{ - unsigned long flags; - spin_lock_irqsave(&vis_hash_lock, flags); - - if (my_vis_info != NULL) - my_vis_info->packet.vis_type = mode; - - spin_unlock_irqrestore(&vis_hash_lock, flags); -} - -/* is_vis_server(), locked outside */ -static int is_vis_server_locked(void) -{ - if (my_vis_info != NULL) - if (my_vis_info->packet.vis_type == VIS_TYPE_SERVER_SYNC) - return 1; - - return 0; -} - -/* get the current set mode */ -int is_vis_server(void) -{ - int ret = 0; - unsigned long flags; - - spin_lock_irqsave(&vis_hash_lock, flags); - ret = is_vis_server_locked(); - spin_unlock_irqrestore(&vis_hash_lock, flags); - - return ret; -} - /* Compare two vis packets, used by the hashing algorithm */ static int vis_info_cmp(void *data1, void *data2) { @@ -272,6 +237,7 @@ void receive_server_sync_packet(struct vis_packet *vis_packet, int vis_info_len) struct vis_info *info; int is_new; unsigned long flags; + int vis_server = atomic_read(&vis_mode);
spin_lock_irqsave(&vis_hash_lock, flags); info = add_packet(vis_packet, vis_info_len, &is_new); @@ -280,7 +246,7 @@ void receive_server_sync_packet(struct vis_packet *vis_packet, int vis_info_len)
/* only if we are server ourselves and packet is newer than the one in * hash.*/ - if (is_vis_server_locked() && is_new) { + if (vis_server == VIS_TYPE_SERVER_SYNC && is_new) { memcpy(info->packet.target_orig, broadcastAddr, ETH_ALEN); if (list_empty(&info->send_list)) list_add_tail(&info->send_list, &send_list); @@ -296,6 +262,7 @@ void receive_client_update_packet(struct vis_packet *vis_packet, struct vis_info *info; int is_new; unsigned long flags; + int vis_server = atomic_read(&vis_mode);
/* clients shall not broadcast. */ if (is_bcast(vis_packet->target_orig)) @@ -309,7 +276,7 @@ void receive_client_update_packet(struct vis_packet *vis_packet,
/* send only if we're the target server or ... */ - if (is_vis_server_locked() && + if (vis_server == VIS_TYPE_SERVER_SYNC && is_my_mac(info->packet.target_orig) && is_new) { info->packet.vis_type = VIS_TYPE_SERVER_SYNC; /* upgrade! */ @@ -373,6 +340,7 @@ static int generate_vis_packet(void) unsigned long flags;
info->first_seen = jiffies; + info->packet.vis_type = atomic_read(&vis_mode);
spin_lock_irqsave(&orig_hash_lock, flags); memcpy(info->packet.target_orig, broadcastAddr, ETH_ALEN); @@ -380,7 +348,7 @@ static int generate_vis_packet(void) info->packet.seqno++; info->packet.entries = 0;
- if (!is_vis_server_locked()) { + if (info->packet.vis_type == VIS_TYPE_CLIENT_UPDATE) { best_tq = find_best_vis_server(info); if (best_tq < 0) { spin_unlock_irqrestore(&orig_hash_lock, flags); @@ -578,7 +546,6 @@ int vis_init(void) INIT_LIST_HEAD(&my_vis_info->send_list); my_vis_info->packet.version = COMPAT_VERSION; my_vis_info->packet.packet_type = BAT_VIS; - my_vis_info->packet.vis_type = VIS_TYPE_CLIENT_UPDATE; my_vis_info->packet.ttl = TTL; my_vis_info->packet.seqno = 0; my_vis_info->packet.entries = 0; diff --git a/batman-adv-kernelland/vis.h b/batman-adv-kernelland/vis.h index 2e24258..0cdafde 100644 --- a/batman-adv-kernelland/vis.h +++ b/batman-adv-kernelland/vis.h @@ -48,8 +48,6 @@ struct recvlist_node { extern struct hashtable_t *vis_hash; extern spinlock_t vis_hash_lock;
-void vis_set_mode(int mode); -int is_vis_server(void); void proc_vis_read_entry(struct seq_file *seq, struct vis_info_entry *entry, struct hlist_head *if_list,
On Tuesday 19 January 2010 04:42:29 Linus Lüssing wrote:
This fixes the bug discovered by Marek Lindner which did not allow turning on the vis-server before an interface has been added. With this patch we are using a global atomic variable for activating and deactiating the vis-server-mode instead, which can be used before inserting an interface.
Thanks! Applied in revision 1557.
Regards, Marek
b.a.t.m.a.n@lists.open-mesh.org