vis.[ch] Linux coding style cleanup
Fix all the warnings generated by the 2.6.29 checkpatch script about violations of the Linux coding style in the vis.[ch] files.
Signed-off-by Andrew Lunn <[email protected]>
vis.c +210 -177
@@ -17,10 +17,6 @@* */ - - - -#include "main.h" #include "send.h" #include "translation-table.h"
@@ -31,30 +27,74 @@#include "hash.h" #include "compat.h" - -static DECLARE_DELAYED_WORK(vis_timer_wq, send_vis_packets); -struct hashtable_t *vis_hash;DEFINE_SPINLOCK (vis_hash_lock); -static struct vis_info *my_vis_info =NULL ; -static struct list_head send_list;/* always locked with vis_hash_lock ... */ +static struct vis_info *my_vis_info; +static struct list_head send_list;/* always locked with vis_hash_lock */ -void free_info (void *data); -void send_vis_packet (struct vis_info *info); -void start_vis_timer (void ); -volatile uint8_t vis_format =DOT_DRAW ; +static void start_vis_timer (void ); +/* free the info */ +static void free_info (void *data) +{ +struct vis_info *info = data; +struct recvlist_node *entry, *tmp; -int vis_info_cmp (void *data1,void *data2) { +list_del_init (&info->send_list); +list_for_each_entry_safe (entry, tmp, &info->recv_list, list) { +list_del (&entry->list); +kfree (entry); + } +kfree (info); +} + +/* set the mode of the visualization to client or server */ +void vis_set_mode (int mode) +{ +spin_lock (&vis_hash_lock); + +if (my_vis_info !=NULL ) + my_vis_info->packet.vis_type = mode; + +spin_unlock (&vis_hash_lock); + +} + +/* 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 ; + +spin_lock (&vis_hash_lock); + ret =is_vis_server_locked (); +spin_unlock (&vis_hash_lock); + +return ret; +} + +/* Compare two vis packets, used by the hashing algorithm */ +static int vis_info_cmp (void *data1,void *data2) +{struct vis_info *d1, *d2; d1 = data1; d2 = data2; -return (memcmp (d1->packet.vis_orig, d2->packet.vis_orig,ETH_ALEN ) ==0 ); +return memcmp (d1->packet.vis_orig, d2->packet.vis_orig,ETH_ALEN ) ==0 ; } -/* hashfunction to choose an entry in a hash table of given size */ +/* hash function to choose an entry in a hash table of given size */ /* hash algorithm from http://en.wikipedia.org/wiki/Hash_table */ -int vis_info_choose (void *data,int size) { +static int vis_info_choose (void *data,int size) +{struct vis_info *vis_info = data;unsigned char *key;uint32_t hash =0 ;
@@ -71,11 +111,11 @@ hash ^= (hash >>11 ); hash += (hash <<15 ); -return (hash%size); +return hash%size; }/* tries to add one entry to the receive list. */ -void recv_list_add (struct list_head *recv_list,char *mac) +static void recv_list_add (struct list_head *recv_list,char *mac) {struct recvlist_node *entry; entry =kmalloc (sizeof (struct recvlist_node ),GFP_KERNEL );
@@ -87,24 +127,22 @@ }/* returns 1 if this mac is in the recv_list */ -int recv_list_is_in (struct list_head *recv_list,char *mac) +static int recv_list_is_in (struct list_head *recv_list,char *mac) {struct recvlist_node *entry;list_for_each_entry (entry, recv_list, list) { -if (memcmp (entry->mac, mac,ETH_ALEN ) ==0 )return 1 ; } -return 0 ; } -/* try to add the packet to the vis_hash. return NULL if invalid (e.g. too old, broken.. ). -* vis hash must be locked outside. -* is_new is set when the packet is newer than old entries in the hash. */ - -struct vis_info *add_packet (struct vis_packet *vis_packet,int vis_info_len,int *is_new) +/* try to add the packet to the vis_hash. return NULL if invalid (e.g. too old, +* broken.. ). vis hash must be locked outside. is_new is set when the packet +* is newer than old entries in the hash. */ +static struct vis_info *add_packet (struct vis_packet *vis_packet, +int vis_info_len,int *is_new) {struct vis_info *info, *old_info;struct vis_info search_elem;
@@ -121,12 +159,12 @@if (old_info !=NULL ) {if (vis_packet->seqno - old_info->packet.seqno <=0 ) {if (old_info->packet.seqno == vis_packet->seqno) { - -recv_list_add (&old_info->recv_list, vis_packet->sender_orig); -return (old_info); +recv_list_add (&old_info->recv_list, + vis_packet->sender_orig); +return old_info; }else {/* newer packet is already in hash. */ -return (NULL ); +return NULL ; } }/* remove old entry */
@@ -134,14 +172,15 @@free_info (old_info); } - info =kmalloc (sizeof (struct vis_info ) + vis_info_len,GFP_KERNEL ); + info =kmalloc (sizeof (struct vis_info ) + vis_info_len,GFP_KERNEL );if (info ==NULL )return NULL ;INIT_LIST_HEAD (&info->send_list);INIT_LIST_HEAD (&info->recv_list); info->first_seen = jiffies; -memcpy (&info->packet, vis_packet,sizeof (struct vis_packet ) + vis_info_len); +memcpy (&info->packet, vis_packet, +sizeof (struct vis_packet ) + vis_info_len);/* initialize and add new packet. */ *is_new =1 ;
@@ -153,7 +192,7 @@recv_list_add (&info->recv_list, info->packet.sender_orig);/* try to add it */ -if (hash_add (vis_hash, info)<0 ) { +if (hash_add (vis_hash, info) <0 ) {/* did not work (for some reason) */ free_info (info); info =NULL ;
@@ -172,20 +211,20 @@if (info ==NULL ) goto end; -/* only if we are server ourselves and packet is newer than the one in hash.*/ +/* only if we are server ourselves and packet is newer than the one in +* hash.*/ if (is_vis_server_locked () && is_new) {memcpy (info->packet.target_orig, broadcastAddr,ETH_ALEN );if (list_empty (&info->send_list))list_add_tail (&info->send_list, &send_list); } - end:spin_unlock (&vis_hash_lock); - }/* handle an incoming client update packet and schedule forward if needed. */ -void receive_client_update_packet (struct vis_packet *vis_packet,int vis_info_len) +void receive_client_update_packet (struct vis_packet *vis_packet, +int vis_info_len) {struct vis_info *info;int is_new;
@@ -201,62 +240,58 @@/* send only if we're the target server or ... */ -if (is_vis_server_locked () - &&is_my_mac (info->packet.target_orig) - && is_new) { - +if (is_vis_server_locked () && +is_my_mac (info->packet.target_orig) && + is_new) { info->packet.vis_type =VIS_TYPE_SERVER_SYNC ;/* upgrade! */ memcpy (info->packet.target_orig, broadcastAddr,ETH_ALEN );if (list_empty (&info->send_list))list_add_tail (&info->send_list, &send_list); -/* ... we're not the recipient (and thus need to forward). */ +/* ... we're not the recipient (and thus need to forward). */ }else if (!is_my_mac (info->packet.target_orig)) { -if (list_empty (&info->send_list))list_add_tail (&info->send_list, &send_list); } - end:spin_unlock (&vis_hash_lock); } -/* set the mode of the visualization to client or server */ -void vis_set_mode (int mode) +/* Walk the originators and find the VIS server with the best tq. Set the packet +* address to its address and return the best_tq. +* +* Must be called with the originator hash locked */ +static int find_best_vis_server (struct vis_info *info) { -spin_lock (&vis_hash_lock); +struct hash_it_t *hashit =NULL ; +struct orig_node *orig_node; +int best_tq =-1 ; -if (my_vis_info !=NULL ) - my_vis_info->packet.vis_type = mode; - -spin_unlock (&vis_hash_lock); - +while (NULL != (hashit =hash_iterate (orig_hash, hashit))) { + orig_node = hashit->bucket->data; +if ((orig_node !=NULL ) && + (orig_node->router !=NULL ) && + (orig_node->flags &VIS_SERVER ) && + (orig_node->router->tq_avg > best_tq)) { + best_tq = orig_node->router->tq_avg; +memcpy (info->packet.target_orig, orig_node->orig, +ETH_ALEN ); + } + } +return best_tq; } -/* is_vis_server(), locked outside */ -int is_vis_server_locked (void ) +/* Return true if the vis packet is full. */ +static bool vis_packet_full (struct vis_info *info) { -if (my_vis_info !=NULL ) -if (my_vis_info->packet.vis_type ==VIS_TYPE_SERVER_SYNC ) -return 1 ; - -return 0 ; +if (info->packet.entries +1 > + (1000 -sizeof (struct vis_info )) /sizeof (struct vis_info_entry )) +return true; +return false; } -/* get the current set mode */ -int is_vis_server (void ) -{ -int ret =0 ; -spin_lock (&vis_hash_lock); - ret =is_vis_server_locked (); -spin_unlock (&vis_hash_lock); - -return ret; -} -/* generates a packet of own vis data, * returns 0 on success, -1 if no packet could be generated */ -static int generate_vis_packet (void ) {struct hash_it_t *hashit =NULL ;
@@ -270,22 +305,13 @@ info->first_seen = jiffies;spin_lock (&orig_hash_lock); -memcpy (info->packet.target_orig, broadcastAddr,6 ); +memcpy (info->packet.target_orig, broadcastAddr,ETH_ALEN ); info->packet.ttl =TTL ; info->packet.seqno++; info->packet.entries =0 ;if (!is_vis_server_locked ()) { -/* find vis-server to receive. */ -while (NULL != (hashit =hash_iterate (orig_hash, hashit))) { - orig_node = hashit->bucket->data; -if ((orig_node !=NULL ) && (orig_node->router !=NULL )) { -if ((orig_node->flags &VIS_SERVER ) && orig_node->router->tq_avg > best_tq) { - best_tq = orig_node->router->tq_avg; -memcpy (info->packet.target_orig, orig_node->orig,6 ); - } - } - } + best_tq =find_best_vis_server (info);if (best_tq <0 ) {spin_unlock (&orig_hash_lock);return -1 ;
@@ -293,22 +319,23 @@ } hashit =NULL ; - entry_array = (struct vis_info_entry *)((char *)info +sizeof (struct vis_info )); + entry_array = (struct vis_info_entry *) + ((char *)info +sizeof (struct vis_info ));while (NULL != (hashit =hash_iterate (orig_hash, hashit))) { orig_node = hashit->bucket->data; -if (orig_node->router !=NULL - &&memcmp (orig_node->router->addr, orig_node->orig,ETH_ALEN ) ==0 - && orig_node->router->tq_avg >0 ) { +if (orig_node->router !=NULL && +memcmp (orig_node->router->addr, + orig_node->orig,ETH_ALEN ) ==0 && + orig_node->router->tq_avg >0 ) {/* fill one entry into buffer. */ entry = &entry_array[info->packet.entries]; -memcpy (entry->dest, orig_node->orig,ETH_ALEN ); entry->quality = orig_node->router->tq_avg; info->packet.entries++; -/* don't fill more than 1000 bytes */ -if (info->packet.entries +1 > (1000 -sizeof (struct vis_info )) /sizeof (struct vis_info_entry )) { + +if (vis_packet_full (info)) {spin_unlock (&orig_hash_lock);return 0 ; }
@@ -321,23 +348,20 @@spin_lock_irqsave (&hna_local_hash_lock, flags);while (NULL != (hashit =hash_iterate (hna_local_hash, hashit))) { hna_local_entry = hashit->bucket->data; - entry = &entry_array[info->packet.entries]; -memcpy (entry->dest, hna_local_entry->addr,ETH_ALEN ); entry->quality =0 ;/* 0 means HNA */ info->packet.entries++; -/* don't fill more than 1000 bytes */ -if (info->packet.entries +1 > (1000 -sizeof (struct vis_info )) /sizeof (struct vis_info_entry )) { +if (vis_packet_full (info)) {spin_unlock_irqrestore (&hna_local_hash_lock, flags);return 0 ; } }spin_unlock_irqrestore (&hna_local_hash_lock, flags);return 0 ; +} -}void purge_vis_packets (void ) {struct hash_it_t *hashit =NULL ;
@@ -348,7 +372,8 @@ info = hashit->bucket->data;if (info == my_vis_info)/* never purge own data. */ continue ; -if (time_after (jiffies, info->first_seen + (VIS_TIMEOUT /1000 )*HZ )) { +if (time_after (jiffies, + info->first_seen + (VIS_TIMEOUT /1000 )*HZ )) {hash_remove_bucket (vis_hash, hashit);free_info (info); }
@@ -356,100 +381,119 @@spin_unlock (&vis_hash_lock); } -/* called from timer; send (and maybe generate) vis packet. */ -void send_vis_packets (struct work_struct *work) +static void broadcast_vis_packet (struct vis_info *info,int packet_length) { -struct vis_info *info, *temp; +struct hash_it_t *hashit =NULL ; +struct orig_node *orig_node; -purge_vis_packets (); -spin_lock (&vis_hash_lock); -if (generate_vis_packet () ==0 ) -/* schedule if generation was successful */ -list_add_tail (&my_vis_info->send_list, &send_list); +spin_lock (&orig_hash_lock); -list_for_each_entry_safe (info, temp, &send_list, send_list) { -list_del_init (&info->send_list); -send_vis_packet (info); +/* send to all routers in range. */ +while (NULL != (hashit =hash_iterate (orig_hash, hashit))) { + orig_node = hashit->bucket->data; + +/* if it's a vis server and reachable, send it. */ +if (orig_node && + (orig_node->flags &VIS_SERVER ) && + orig_node->batman_if && + orig_node->router) { + +/* don't send it if we already received the packet from +* this node. */ +if (recv_list_is_in (&info->recv_list, orig_node->orig)) +continue ; + +memcpy (info->packet.target_orig, + orig_node->orig,ETH_ALEN ); + +send_raw_packet ((unsigned char *) &info->packet, + packet_length, + orig_node->batman_if->net_dev->dev_addr, + orig_node->router->addr, + orig_node->batman_if); + } } -spin_unlock (&vis_hash_lock); -start_vis_timer (); +memcpy (info->packet.target_orig, broadcastAddr,ETH_ALEN ); +spin_unlock (&orig_hash_lock); +} +static void unicast_vis_packet (struct vis_info *info,int packet_length) +{ +struct orig_node *orig_node; + +spin_lock (&orig_hash_lock); + orig_node = ((struct orig_node *) +hash_find (orig_hash, info->packet.target_orig)); + +if ((orig_node !=NULL ) && + (orig_node->batman_if !=NULL ) && + (orig_node->router !=NULL )) { +send_raw_packet ((unsigned char *) &info->packet, packet_length, + orig_node->batman_if->net_dev->dev_addr, + orig_node->router->addr, orig_node->batman_if); + } +spin_unlock (&orig_hash_lock); }/* only send one vis packet. called from send_vis_packets() */ -void send_vis_packet (struct vis_info *info) +static void send_vis_packet (struct vis_info *info) { -struct hash_it_t *hashit =NULL ; -struct orig_node *orig_node;int packet_length; -if (info->packet.ttl <2 ) { -debug_log (LOG_TYPE_NOTICE ,"Error - can't send vis packet: ttl exceeded\n" ); +debug_log (LOG_TYPE_NOTICE , +"Error - can't send vis packet: ttl exceeded\n" );return ; }memcpy (info->packet.sender_orig, mainIfAddr,ETH_ALEN ); - info->packet.ttl--; - packet_length =sizeof (struct vis_packet ) + info->packet.entries *sizeof (struct vis_info_entry ); + packet_length =sizeof (struct vis_packet ) + + info->packet.entries *sizeof (struct vis_info_entry ); -if (is_bcast (info->packet.target_orig)) { -/* broadcast packet */ -spin_lock (&orig_hash_lock); +if (is_bcast (info->packet.target_orig)) +broadcast_vis_packet (info, packet_length); +else +unicast_vis_packet (info, packet_length); + info->packet.ttl++;/* restore TTL */ +} -/* send to all routers in range. */ -while (NULL != (hashit =hash_iterate (orig_hash, hashit))) { +/* called from timer; send (and maybe generate) vis packet. */ +static void send_vis_packets (struct work_struct *work) +{ +struct vis_info *info, *temp; - orig_node = hashit->bucket->data; +purge_vis_packets (); +spin_lock (&vis_hash_lock); +if (generate_vis_packet () ==0 ) +/* schedule if generation was successful */ +list_add_tail (&my_vis_info->send_list, &send_list); -/* if it's a vis server and reachable, send it. */ -if ((orig_node !=NULL ) && (orig_node->flags &VIS_SERVER ) && (orig_node->batman_if !=NULL ) && (orig_node->router !=NULL )) { - -/* don't send it if we already received the packet from this node. */ -if (recv_list_is_in (&info->recv_list, orig_node->orig)) -continue ; - - -memcpy (info->packet.target_orig, orig_node->orig,ETH_ALEN ); -send_raw_packet ((unsigned char *) &info->packet, packet_length, - orig_node->batman_if->net_dev->dev_addr, orig_node->router->addr, orig_node->batman_if); - } - } -memcpy (info->packet.target_orig, broadcastAddr,ETH_ALEN ); - -spin_unlock (&orig_hash_lock); - }else { -/* unicast packet */ -spin_lock (&orig_hash_lock); - orig_node = ((struct orig_node *)hash_find (orig_hash, info->packet.target_orig)); - -if ((orig_node !=NULL ) && (orig_node->batman_if !=NULL ) && (orig_node->router !=NULL )) { -send_raw_packet ((unsigned char *) &info->packet, packet_length, - orig_node->batman_if->net_dev->dev_addr, orig_node->router->addr, orig_node->batman_if); - } -spin_unlock (&orig_hash_lock); - +list_for_each_entry_safe (info, temp, &send_list, send_list) { +list_del_init (&info->send_list); +send_vis_packet (info); } - info->packet.ttl++;/* restore TTL */ +spin_unlock (&vis_hash_lock); +start_vis_timer (); } +static DECLARE_DELAYED_WORK(vis_timer_wq, send_vis_packets); -/* init the vis server. this may only be called when if_list is already initialized -* (e.g. bat0 is initialized, interfaces have been added) */ +/* init the vis server. this may only be called when if_list is already +* initialized (e.g. bat0 is initialized, interfaces have been added) */ int vis_init (void ) { vis_hash =hash_new (256 , vis_info_cmp, vis_info_choose);if (vis_hash ==NULL ) {debug_log (LOG_TYPE_CRIT ,"Can't initialize vis_hash\n" ); -return (-1 ); +return -1 ; } my_vis_info =kmalloc (1000 ,GFP_KERNEL );if (my_vis_info ==NULL ) {vis_quit ();debug_log (LOG_TYPE_CRIT ,"Can't initialize vis packet\n" ); -return (-1 ); +return -1 ; }/* prefill the vis info */ my_vis_info->first_seen = jiffies -atomic_read (&vis_interval);
@@ -468,47 +512,36 @@memcpy (my_vis_info->packet.sender_orig, mainIfAddr,ETH_ALEN );if (hash_add (vis_hash, my_vis_info) <0 ) { -debug_log (LOG_TYPE_CRIT ,"Can't add own vis packet into hash\n" ); -free_info (my_vis_info);/* not in hash, need to remove it manually. */ +debug_log (LOG_TYPE_CRIT , +"Can't add own vis packet into hash\n" ); +free_info (my_vis_info);/* not in hash, need to remove it +* manually. */ vis_quit (); -return (-1 ); +return -1 ; }start_vis_timer (); -return (0 ); +return 0 ; } -/* free the info */ -void free_info (void *data) -{ -struct vis_info *info = data; -struct recvlist_node *entry, *tmp; - -list_del_init (&info->send_list); -list_for_each_entry_safe (entry, tmp, &info->recv_list, list) { -list_del (&entry->list); -kfree (entry); - } -kfree (info); -} -/* shutdown vis-server */ int vis_quit (void ) {if (vis_hash !=NULL ) {cancel_delayed_work_sync (&vis_timer_wq);spin_lock (&vis_hash_lock); -hash_delete (vis_hash, free_info);/* properly remove, kill timers ... */ +/* properly remove, kill timers ... */ +hash_delete (vis_hash, free_info); vis_hash =NULL ; my_vis_info =NULL ;spin_unlock (&vis_hash_lock); } -return (0 ); +return 0 ; }/* schedule packets for (re)transmission */ -void start_vis_timer (void ) +static void start_vis_timer (void ) { -queue_delayed_work (bat_event_workqueue, &vis_timer_wq, (atomic_read (&vis_interval)/1000 ) *HZ ); +queue_delayed_work (bat_event_workqueue, &vis_timer_wq, + (atomic_read (&vis_interval)/1000 ) *HZ ); } -
vis.h +8 -12
@@ -17,19 +17,17 @@* */ -#define VIS_TIMEOUT 200000#define VIS_FORMAT_DD_NAME "dot_draw"#define VIS_FORMAT_JSON_NAME "json" -struct vis_info {unsigned long first_seen;struct list_head recv_list; -/* list of server-neighbors we received a vis-packet from. -* we should not reply to them. */ +/* list of server-neighbors we received a vis-packet +* from. we should not reply to them. */ struct list_head send_list; -/* this packet might be part of the vis send queue. */ +/* this packet might be part of the vis send queue. */ struct vis_packet packet;/* vis_info may follow here*/ } __attribute__((packed));
@@ -41,7 +39,7 @@struct recvlist_node {struct list_head list; -uint8_t mac[6 ]; +uint8_t mac[ETH_ALEN ]; };enum vis_formats {
@@ -51,14 +49,12 @@extern struct hashtable_t *vis_hash;extern spinlock_t vis_hash_lock; -extern volatile uint8_t vis_format; -void receive_vis_packet (struct ethhdr *ethhdr,struct vis_packet *vis_packet,int vis_info_len);void vis_set_mode (int mode);int is_vis_server (void ); -int is_vis_server_locked (void ); -void receive_server_sync_packet (struct vis_packet *vis_packet,int vis_info_len); -void receive_client_update_packet (struct vis_packet *vis_packet,int vis_info_len); -void send_vis_packets (struct work_struct *work); +void receive_server_sync_packet (struct vis_packet *vis_packet, +int vis_info_len); +void receive_client_update_packet (struct vis_packet *vis_packet, +int vis_info_len);int vis_init (void );int vis_quit (void );