diff options
-rw-r--r-- | net/core/neighbour.c | 43 |
1 files changed, 13 insertions, 30 deletions
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 37d8d8c29522..1dcf7fa1f0fe 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
@@ -175,39 +175,10 @@ static void pneigh_queue_purge(struct sk_buff_head *list) | |||
175 | } | 175 | } |
176 | } | 176 | } |
177 | 177 | ||
178 | void neigh_changeaddr(struct neigh_table *tbl, struct net_device *dev) | 178 | static void neigh_flush_dev(struct neigh_table *tbl, struct net_device *dev) |
179 | { | ||
180 | int i; | ||
181 | |||
182 | write_lock_bh(&tbl->lock); | ||
183 | |||
184 | for (i=0; i <= tbl->hash_mask; i++) { | ||
185 | struct neighbour *n, **np; | ||
186 | |||
187 | np = &tbl->hash_buckets[i]; | ||
188 | while ((n = *np) != NULL) { | ||
189 | if (dev && n->dev != dev) { | ||
190 | np = &n->next; | ||
191 | continue; | ||
192 | } | ||
193 | *np = n->next; | ||
194 | write_lock_bh(&n->lock); | ||
195 | n->dead = 1; | ||
196 | neigh_del_timer(n); | ||
197 | write_unlock_bh(&n->lock); | ||
198 | neigh_release(n); | ||
199 | } | ||
200 | } | ||
201 | |||
202 | write_unlock_bh(&tbl->lock); | ||
203 | } | ||
204 | |||
205 | int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev) | ||
206 | { | 179 | { |
207 | int i; | 180 | int i; |
208 | 181 | ||
209 | write_lock_bh(&tbl->lock); | ||
210 | |||
211 | for (i = 0; i <= tbl->hash_mask; i++) { | 182 | for (i = 0; i <= tbl->hash_mask; i++) { |
212 | struct neighbour *n, **np = &tbl->hash_buckets[i]; | 183 | struct neighbour *n, **np = &tbl->hash_buckets[i]; |
213 | 184 | ||
@@ -243,7 +214,19 @@ int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev) | |||
243 | neigh_release(n); | 214 | neigh_release(n); |
244 | } | 215 | } |
245 | } | 216 | } |
217 | } | ||
246 | 218 | ||
219 | void neigh_changeaddr(struct neigh_table *tbl, struct net_device *dev) | ||
220 | { | ||
221 | write_lock_bh(&tbl->lock); | ||
222 | neigh_flush_dev(tbl, dev); | ||
223 | write_unlock_bh(&tbl->lock); | ||
224 | } | ||
225 | |||
226 | int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev) | ||
227 | { | ||
228 | write_lock_bh(&tbl->lock); | ||
229 | neigh_flush_dev(tbl, dev); | ||
247 | pneigh_ifdown(tbl, dev); | 230 | pneigh_ifdown(tbl, dev); |
248 | write_unlock_bh(&tbl->lock); | 231 | write_unlock_bh(&tbl->lock); |
249 | 232 | ||