Blame view
net/batman-adv/main.c
4.32 KB
c6c8fea29 net: Add batman-a... |
1 |
/* |
64afe3539 batman-adv: Updat... |
2 |
* Copyright (C) 2007-2011 B.A.T.M.A.N. contributors: |
c6c8fea29 net: Add batman-a... |
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
* * Marek Lindner, Simon Wunderlich * * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA * */ #include "main.h" #include "bat_sysfs.h" #include "bat_debugfs.h" #include "routing.h" #include "send.h" #include "originator.h" #include "soft-interface.h" #include "icmp_socket.h" #include "translation-table.h" #include "hard-interface.h" #include "gateway_client.h" |
c6c8fea29 net: Add batman-a... |
33 34 |
#include "vis.h" #include "hash.h" |
c3caf5196 batman-adv: Remov... |
35 36 37 |
/* List manipulations on hardif_list have to be rtnl_lock()'ed, * list traversals just rcu-locked */ |
4389e47af batman-adv: renam... |
38 |
struct list_head hardif_list; |
c6c8fea29 net: Add batman-a... |
39 40 41 42 43 44 45 |
unsigned char broadcast_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; struct workqueue_struct *bat_event_workqueue; static int __init batman_init(void) { |
4389e47af batman-adv: renam... |
46 |
INIT_LIST_HEAD(&hardif_list); |
c6c8fea29 net: Add batman-a... |
47 48 49 50 51 52 53 54 55 56 57 58 |
/* the name should not be longer than 10 chars - see * http://lwn.net/Articles/23634/ */ bat_event_workqueue = create_singlethread_workqueue("bat_events"); if (!bat_event_workqueue) return -ENOMEM; bat_socket_init(); debugfs_init(); register_netdevice_notifier(&hard_if_notifier); |
44c4349a2 batman-adv: Repla... |
59 60 61 |
pr_info("B.A.T.M.A.N. advanced %s (compatibility version %i) " "loaded ", SOURCE_VERSION, COMPAT_VERSION); |
c6c8fea29 net: Add batman-a... |
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
return 0; } static void __exit batman_exit(void) { debugfs_destroy(); unregister_netdevice_notifier(&hard_if_notifier); hardif_remove_interfaces(); flush_workqueue(bat_event_workqueue); destroy_workqueue(bat_event_workqueue); bat_event_workqueue = NULL; rcu_barrier(); } int mesh_init(struct net_device *soft_iface) { struct bat_priv *bat_priv = netdev_priv(soft_iface); |
c6c8fea29 net: Add batman-a... |
82 83 |
spin_lock_init(&bat_priv->forw_bat_list_lock); spin_lock_init(&bat_priv->forw_bcast_list_lock); |
a73105b8d batman-adv: impro... |
84 85 |
spin_lock_init(&bat_priv->tt_changes_list_lock); spin_lock_init(&bat_priv->tt_req_list_lock); |
cc47f66e6 batman-adv: impro... |
86 |
spin_lock_init(&bat_priv->tt_roam_list_lock); |
a73105b8d batman-adv: impro... |
87 |
spin_lock_init(&bat_priv->tt_buff_lock); |
c6c8fea29 net: Add batman-a... |
88 89 90 91 |
spin_lock_init(&bat_priv->gw_list_lock); spin_lock_init(&bat_priv->vis_hash_lock); spin_lock_init(&bat_priv->vis_list_lock); spin_lock_init(&bat_priv->softif_neigh_lock); |
61906ae86 batman-adv: multi... |
92 |
spin_lock_init(&bat_priv->softif_neigh_vid_lock); |
c6c8fea29 net: Add batman-a... |
93 94 95 96 |
INIT_HLIST_HEAD(&bat_priv->forw_bat_list); INIT_HLIST_HEAD(&bat_priv->forw_bcast_list); INIT_HLIST_HEAD(&bat_priv->gw_list); |
61906ae86 batman-adv: multi... |
97 |
INIT_HLIST_HEAD(&bat_priv->softif_neigh_vids); |
a73105b8d batman-adv: impro... |
98 99 |
INIT_LIST_HEAD(&bat_priv->tt_changes_list); INIT_LIST_HEAD(&bat_priv->tt_req_list); |
cc47f66e6 batman-adv: impro... |
100 |
INIT_LIST_HEAD(&bat_priv->tt_roam_list); |
c6c8fea29 net: Add batman-a... |
101 102 103 |
if (originator_init(bat_priv) < 1) goto err; |
a73105b8d batman-adv: impro... |
104 |
if (tt_init(bat_priv) < 1) |
c6c8fea29 net: Add batman-a... |
105 |
goto err; |
bc2790808 batman-adv: detec... |
106 |
tt_local_add(soft_iface, soft_iface->dev_addr, NULL_IFINDEX); |
c6c8fea29 net: Add batman-a... |
107 108 109 |
if (vis_init(bat_priv) < 1) goto err; |
2265c1410 batman-adv: gatew... |
110 |
atomic_set(&bat_priv->gw_reselect, 0); |
c6c8fea29 net: Add batman-a... |
111 112 113 114 |
atomic_set(&bat_priv->mesh_state, MESH_ACTIVE); goto end; err: |
c6c8fea29 net: Add batman-a... |
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
mesh_free(soft_iface); return -1; end: return 0; } void mesh_free(struct net_device *soft_iface) { struct bat_priv *bat_priv = netdev_priv(soft_iface); atomic_set(&bat_priv->mesh_state, MESH_DEACTIVATING); purge_outstanding_packets(bat_priv, NULL); vis_quit(bat_priv); gw_node_purge(bat_priv); originator_free(bat_priv); |
a73105b8d batman-adv: impro... |
134 |
tt_free(bat_priv); |
c6c8fea29 net: Add batman-a... |
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
softif_neigh_purge(bat_priv); atomic_set(&bat_priv->mesh_state, MESH_INACTIVE); } void inc_module_count(void) { try_module_get(THIS_MODULE); } void dec_module_count(void) { module_put(THIS_MODULE); } |
747e4221a batman-adv: Add c... |
150 |
int is_my_mac(const uint8_t *addr) |
c6c8fea29 net: Add batman-a... |
151 |
{ |
747e4221a batman-adv: Add c... |
152 |
const struct hard_iface *hard_iface; |
c6c8fea29 net: Add batman-a... |
153 154 |
rcu_read_lock(); |
e6c10f433 batman-adv: renam... |
155 156 |
list_for_each_entry_rcu(hard_iface, &hardif_list, list) { if (hard_iface->if_status != IF_ACTIVE) |
c6c8fea29 net: Add batman-a... |
157 |
continue; |
e6c10f433 batman-adv: renam... |
158 |
if (compare_eth(hard_iface->net_dev->dev_addr, addr)) { |
c6c8fea29 net: Add batman-a... |
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
rcu_read_unlock(); return 1; } } rcu_read_unlock(); return 0; } module_init(batman_init); module_exit(batman_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_DESCRIPTION(DRIVER_DESC); MODULE_SUPPORTED_DEVICE(DRIVER_DEVICE); |
c6c8fea29 net: Add batman-a... |
176 |
MODULE_VERSION(SOURCE_VERSION); |