aboutsummaryrefslogtreecommitdiffstats
path: root/net/batman-adv/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/batman-adv/main.c')
-rw-r--r--net/batman-adv/main.c76
1 files changed, 39 insertions, 37 deletions
diff --git a/net/batman-adv/main.c b/net/batman-adv/main.c
index e4564306453c..9cf0b38fab8b 100644
--- a/net/batman-adv/main.c
+++ b/net/batman-adv/main.c
@@ -38,22 +38,23 @@
38 * list traversals just rcu-locked 38 * list traversals just rcu-locked
39 */ 39 */
40struct list_head batadv_hardif_list; 40struct list_head batadv_hardif_list;
41static int (*recv_packet_handler[256])(struct sk_buff *, struct hard_iface *); 41static int (*batadv_rx_handler[256])(struct sk_buff *,
42 struct hard_iface *);
42char batadv_routing_algo[20] = "BATMAN_IV"; 43char batadv_routing_algo[20] = "BATMAN_IV";
43static struct hlist_head bat_algo_list; 44static struct hlist_head batadv_algo_list;
44 45
45unsigned char batadv_broadcast_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; 46unsigned char batadv_broadcast_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
46 47
47struct workqueue_struct *batadv_event_workqueue; 48struct workqueue_struct *batadv_event_workqueue;
48 49
49static void recv_handler_init(void); 50static void batadv_recv_handler_init(void);
50 51
51static int __init batman_init(void) 52static int __init batadv_init(void)
52{ 53{
53 INIT_LIST_HEAD(&batadv_hardif_list); 54 INIT_LIST_HEAD(&batadv_hardif_list);
54 INIT_HLIST_HEAD(&bat_algo_list); 55 INIT_HLIST_HEAD(&batadv_algo_list);
55 56
56 recv_handler_init(); 57 batadv_recv_handler_init();
57 58
58 batadv_iv_init(); 59 batadv_iv_init();
59 60
@@ -76,7 +77,7 @@ static int __init batman_init(void)
76 return 0; 77 return 0;
77} 78}
78 79
79static void __exit batman_exit(void) 80static void __exit batadv_exit(void)
80{ 81{
81 batadv_debugfs_destroy(); 82 batadv_debugfs_destroy();
82 unregister_netdevice_notifier(&batadv_hard_if_notifier); 83 unregister_netdevice_notifier(&batadv_hard_if_notifier);
@@ -189,8 +190,8 @@ int batadv_is_my_mac(const uint8_t *addr)
189 return 0; 190 return 0;
190} 191}
191 192
192static int recv_unhandled_packet(struct sk_buff *skb, 193static int batadv_recv_unhandled_packet(struct sk_buff *skb,
193 struct hard_iface *recv_if) 194 struct hard_iface *recv_if)
194{ 195{
195 return NET_RX_DROP; 196 return NET_RX_DROP;
196} 197}
@@ -248,7 +249,7 @@ int batadv_batman_skb_recv(struct sk_buff *skb, struct net_device *dev,
248 * the supplied skb. if not, we have to free the skb. 249 * the supplied skb. if not, we have to free the skb.
249 */ 250 */
250 idx = batman_ogm_packet->header.packet_type; 251 idx = batman_ogm_packet->header.packet_type;
251 ret = (*recv_packet_handler[idx])(skb, hard_iface); 252 ret = (*batadv_rx_handler[idx])(skb, hard_iface);
252 253
253 if (ret == NET_RX_DROP) 254 if (ret == NET_RX_DROP)
254 kfree_skb(skb); 255 kfree_skb(skb);
@@ -265,51 +266,51 @@ err_out:
265 return NET_RX_DROP; 266 return NET_RX_DROP;
266} 267}
267 268
268static void recv_handler_init(void) 269static void batadv_recv_handler_init(void)
269{ 270{
270 int i; 271 int i;
271 272
272 for (i = 0; i < ARRAY_SIZE(recv_packet_handler); i++) 273 for (i = 0; i < ARRAY_SIZE(batadv_rx_handler); i++)
273 recv_packet_handler[i] = recv_unhandled_packet; 274 batadv_rx_handler[i] = batadv_recv_unhandled_packet;
274 275
275 /* batman icmp packet */ 276 /* batman icmp packet */
276 recv_packet_handler[BAT_ICMP] = batadv_recv_icmp_packet; 277 batadv_rx_handler[BAT_ICMP] = batadv_recv_icmp_packet;
277 /* unicast packet */ 278 /* unicast packet */
278 recv_packet_handler[BAT_UNICAST] = batadv_recv_unicast_packet; 279 batadv_rx_handler[BAT_UNICAST] = batadv_recv_unicast_packet;
279 /* fragmented unicast packet */ 280 /* fragmented unicast packet */
280 recv_packet_handler[BAT_UNICAST_FRAG] = batadv_recv_ucast_frag_packet; 281 batadv_rx_handler[BAT_UNICAST_FRAG] = batadv_recv_ucast_frag_packet;
281 /* broadcast packet */ 282 /* broadcast packet */
282 recv_packet_handler[BAT_BCAST] = batadv_recv_bcast_packet; 283 batadv_rx_handler[BAT_BCAST] = batadv_recv_bcast_packet;
283 /* vis packet */ 284 /* vis packet */
284 recv_packet_handler[BAT_VIS] = batadv_recv_vis_packet; 285 batadv_rx_handler[BAT_VIS] = batadv_recv_vis_packet;
285 /* Translation table query (request or response) */ 286 /* Translation table query (request or response) */
286 recv_packet_handler[BAT_TT_QUERY] = batadv_recv_tt_query; 287 batadv_rx_handler[BAT_TT_QUERY] = batadv_recv_tt_query;
287 /* Roaming advertisement */ 288 /* Roaming advertisement */
288 recv_packet_handler[BAT_ROAM_ADV] = batadv_recv_roam_adv; 289 batadv_rx_handler[BAT_ROAM_ADV] = batadv_recv_roam_adv;
289} 290}
290 291
291int batadv_recv_handler_register(uint8_t packet_type, 292int batadv_recv_handler_register(uint8_t packet_type,
292 int (*recv_handler)(struct sk_buff *, 293 int (*recv_handler)(struct sk_buff *,
293 struct hard_iface *)) 294 struct hard_iface *))
294{ 295{
295 if (recv_packet_handler[packet_type] != &recv_unhandled_packet) 296 if (batadv_rx_handler[packet_type] != &batadv_recv_unhandled_packet)
296 return -EBUSY; 297 return -EBUSY;
297 298
298 recv_packet_handler[packet_type] = recv_handler; 299 batadv_rx_handler[packet_type] = recv_handler;
299 return 0; 300 return 0;
300} 301}
301 302
302void batadv_recv_handler_unregister(uint8_t packet_type) 303void batadv_recv_handler_unregister(uint8_t packet_type)
303{ 304{
304 recv_packet_handler[packet_type] = recv_unhandled_packet; 305 batadv_rx_handler[packet_type] = batadv_recv_unhandled_packet;
305} 306}
306 307
307static struct bat_algo_ops *bat_algo_get(char *name) 308static struct bat_algo_ops *batadv_algo_get(char *name)
308{ 309{
309 struct bat_algo_ops *bat_algo_ops = NULL, *bat_algo_ops_tmp; 310 struct bat_algo_ops *bat_algo_ops = NULL, *bat_algo_ops_tmp;
310 struct hlist_node *node; 311 struct hlist_node *node;
311 312
312 hlist_for_each_entry(bat_algo_ops_tmp, node, &bat_algo_list, list) { 313 hlist_for_each_entry(bat_algo_ops_tmp, node, &batadv_algo_list, list) {
313 if (strcmp(bat_algo_ops_tmp->name, name) != 0) 314 if (strcmp(bat_algo_ops_tmp->name, name) != 0)
314 continue; 315 continue;
315 316
@@ -325,7 +326,7 @@ int batadv_algo_register(struct bat_algo_ops *bat_algo_ops)
325 struct bat_algo_ops *bat_algo_ops_tmp; 326 struct bat_algo_ops *bat_algo_ops_tmp;
326 int ret; 327 int ret;
327 328
328 bat_algo_ops_tmp = bat_algo_get(bat_algo_ops->name); 329 bat_algo_ops_tmp = batadv_algo_get(bat_algo_ops->name);
329 if (bat_algo_ops_tmp) { 330 if (bat_algo_ops_tmp) {
330 pr_info("Trying to register already registered routing algorithm: %s\n", 331 pr_info("Trying to register already registered routing algorithm: %s\n",
331 bat_algo_ops->name); 332 bat_algo_ops->name);
@@ -347,7 +348,7 @@ int batadv_algo_register(struct bat_algo_ops *bat_algo_ops)
347 } 348 }
348 349
349 INIT_HLIST_NODE(&bat_algo_ops->list); 350 INIT_HLIST_NODE(&bat_algo_ops->list);
350 hlist_add_head(&bat_algo_ops->list, &bat_algo_list); 351 hlist_add_head(&bat_algo_ops->list, &batadv_algo_list);
351 ret = 0; 352 ret = 0;
352 353
353out: 354out:
@@ -359,7 +360,7 @@ int batadv_algo_select(struct bat_priv *bat_priv, char *name)
359 struct bat_algo_ops *bat_algo_ops; 360 struct bat_algo_ops *bat_algo_ops;
360 int ret = -EINVAL; 361 int ret = -EINVAL;
361 362
362 bat_algo_ops = bat_algo_get(name); 363 bat_algo_ops = batadv_algo_get(name);
363 if (!bat_algo_ops) 364 if (!bat_algo_ops)
364 goto out; 365 goto out;
365 366
@@ -377,14 +378,14 @@ int batadv_algo_seq_print_text(struct seq_file *seq, void *offset)
377 378
378 seq_printf(seq, "Available routing algorithms:\n"); 379 seq_printf(seq, "Available routing algorithms:\n");
379 380
380 hlist_for_each_entry(bat_algo_ops, node, &bat_algo_list, list) { 381 hlist_for_each_entry(bat_algo_ops, node, &batadv_algo_list, list) {
381 seq_printf(seq, "%s\n", bat_algo_ops->name); 382 seq_printf(seq, "%s\n", bat_algo_ops->name);
382 } 383 }
383 384
384 return 0; 385 return 0;
385} 386}
386 387
387static int param_set_ra(const char *val, const struct kernel_param *kp) 388static int batadv_param_set_ra(const char *val, const struct kernel_param *kp)
388{ 389{
389 struct bat_algo_ops *bat_algo_ops; 390 struct bat_algo_ops *bat_algo_ops;
390 char *algo_name = (char *)val; 391 char *algo_name = (char *)val;
@@ -393,7 +394,7 @@ static int param_set_ra(const char *val, const struct kernel_param *kp)
393 if (algo_name[name_len - 1] == '\n') 394 if (algo_name[name_len - 1] == '\n')
394 algo_name[name_len - 1] = '\0'; 395 algo_name[name_len - 1] = '\0';
395 396
396 bat_algo_ops = bat_algo_get(algo_name); 397 bat_algo_ops = batadv_algo_get(algo_name);
397 if (!bat_algo_ops) { 398 if (!bat_algo_ops) {
398 pr_err("Routing algorithm '%s' is not supported\n", algo_name); 399 pr_err("Routing algorithm '%s' is not supported\n", algo_name);
399 return -EINVAL; 400 return -EINVAL;
@@ -402,19 +403,20 @@ static int param_set_ra(const char *val, const struct kernel_param *kp)
402 return param_set_copystring(algo_name, kp); 403 return param_set_copystring(algo_name, kp);
403} 404}
404 405
405static const struct kernel_param_ops param_ops_ra = { 406static const struct kernel_param_ops batadv_param_ops_ra = {
406 .set = param_set_ra, 407 .set = batadv_param_set_ra,
407 .get = param_get_string, 408 .get = param_get_string,
408}; 409};
409 410
410static struct kparam_string __param_string_ra = { 411static struct kparam_string batadv_param_string_ra = {
411 .maxlen = sizeof(batadv_routing_algo), 412 .maxlen = sizeof(batadv_routing_algo),
412 .string = batadv_routing_algo, 413 .string = batadv_routing_algo,
413}; 414};
414 415
415module_param_cb(routing_algo, &param_ops_ra, &__param_string_ra, 0644); 416module_param_cb(routing_algo, &batadv_param_ops_ra, &batadv_param_string_ra,
416module_init(batman_init); 417 0644);
417module_exit(batman_exit); 418module_init(batadv_init);
419module_exit(batadv_exit);
418 420
419MODULE_LICENSE("GPL"); 421MODULE_LICENSE("GPL");
420 422