Lines Matching refs:nr_neigh
63 static struct nr_neigh *nr_neigh_get_dev(ax25_address *callsign, in nr_neigh_get_dev()
66 struct nr_neigh *found = NULL; in nr_neigh_get_dev()
67 struct nr_neigh *nr_neigh; in nr_neigh_get_dev() local
70 nr_neigh_for_each(nr_neigh, &nr_neigh_list) in nr_neigh_get_dev()
71 if (ax25cmp(callsign, &nr_neigh->callsign) == 0 && in nr_neigh_get_dev()
72 nr_neigh->dev == dev) { in nr_neigh_get_dev()
73 nr_neigh_hold(nr_neigh); in nr_neigh_get_dev()
74 found = nr_neigh; in nr_neigh_get_dev()
81 static void nr_remove_neigh(struct nr_neigh *);
92 struct nr_neigh *nr_neigh; in nr_add_node() local
104 nr_neigh = nr_neigh_get_dev(ax25, dev); in nr_add_node()
112 if (nr_neigh != NULL && nr_neigh->failed != 0 && quality == 0) { in nr_add_node()
119 if (nr_nodet->routes[i].neighbour == nr_neigh) in nr_add_node()
127 if (nr_neigh != NULL) in nr_add_node()
128 nr_neigh->failed = 0; in nr_add_node()
130 if (quality == 0 && nr_neigh != NULL && nr_node != NULL) { in nr_add_node()
131 nr_neigh_put(nr_neigh); in nr_add_node()
136 if (nr_neigh == NULL) { in nr_add_node()
137 if ((nr_neigh = kmalloc(sizeof(*nr_neigh), GFP_ATOMIC)) == NULL) { in nr_add_node()
143 nr_neigh->callsign = *ax25; in nr_add_node()
144 nr_neigh->digipeat = NULL; in nr_add_node()
145 nr_neigh->ax25 = NULL; in nr_add_node()
146 nr_neigh->dev = dev; in nr_add_node()
147 nr_neigh->quality = sysctl_netrom_default_path_quality; in nr_add_node()
148 nr_neigh->locked = 0; in nr_add_node()
149 nr_neigh->count = 0; in nr_add_node()
150 nr_neigh->number = nr_neigh_no++; in nr_add_node()
151 nr_neigh->failed = 0; in nr_add_node()
152 atomic_set(&nr_neigh->refcount, 1); in nr_add_node()
155 nr_neigh->digipeat = kmemdup(ax25_digi, in nr_add_node()
158 if (nr_neigh->digipeat == NULL) { in nr_add_node()
159 kfree(nr_neigh); in nr_add_node()
167 hlist_add_head(&nr_neigh->neigh_node, &nr_neigh_list); in nr_add_node()
168 nr_neigh_hold(nr_neigh); in nr_add_node()
172 if (quality != 0 && ax25cmp(nr, ax25) == 0 && !nr_neigh->locked) in nr_add_node()
173 nr_neigh->quality = quality; in nr_add_node()
177 if (nr_neigh) in nr_add_node()
178 nr_neigh_put(nr_neigh); in nr_add_node()
192 nr_node->routes[0].neighbour = nr_neigh; in nr_add_node()
194 nr_neigh_hold(nr_neigh); in nr_add_node()
195 nr_neigh->count++; in nr_add_node()
210 if (nr_node->routes[i].neighbour == nr_neigh) { in nr_add_node()
226 nr_node->routes[0].neighbour = nr_neigh; in nr_add_node()
230 nr_neigh_hold(nr_neigh); in nr_add_node()
231 nr_neigh->count++; in nr_add_node()
243 nr_node->routes[2].neighbour = nr_neigh; in nr_add_node()
245 nr_neigh_hold(nr_neigh); in nr_add_node()
246 nr_neigh->count++; in nr_add_node()
302 if (nr_node->routes[i].neighbour == nr_neigh) { in nr_add_node()
309 nr_neigh_put(nr_neigh); in nr_add_node()
331 static inline void __nr_remove_neigh(struct nr_neigh *nr_neigh) in __nr_remove_neigh() argument
333 hlist_del_init(&nr_neigh->neigh_node); in __nr_remove_neigh()
334 nr_neigh_put(nr_neigh); in __nr_remove_neigh()
340 static void nr_remove_neigh(struct nr_neigh *nr_neigh) in nr_remove_neigh() argument
343 __nr_remove_neigh(nr_neigh); in nr_remove_neigh()
354 struct nr_neigh *nr_neigh; in nr_del_node() local
362 nr_neigh = nr_neigh_get_dev(neighbour, dev); in nr_del_node()
364 if (nr_neigh == NULL) { in nr_del_node()
371 if (nr_node->routes[i].neighbour == nr_neigh) { in nr_del_node()
372 nr_neigh->count--; in nr_del_node()
373 nr_neigh_put(nr_neigh); in nr_del_node()
375 if (nr_neigh->count == 0 && !nr_neigh->locked) in nr_del_node()
376 nr_remove_neigh(nr_neigh); in nr_del_node()
377 nr_neigh_put(nr_neigh); in nr_del_node()
399 nr_neigh_put(nr_neigh); in nr_del_node()
412 struct nr_neigh *nr_neigh; in nr_add_neigh() local
414 nr_neigh = nr_neigh_get_dev(callsign, dev); in nr_add_neigh()
415 if (nr_neigh) { in nr_add_neigh()
416 nr_neigh->quality = quality; in nr_add_neigh()
417 nr_neigh->locked = 1; in nr_add_neigh()
418 nr_neigh_put(nr_neigh); in nr_add_neigh()
422 if ((nr_neigh = kmalloc(sizeof(*nr_neigh), GFP_ATOMIC)) == NULL) in nr_add_neigh()
425 nr_neigh->callsign = *callsign; in nr_add_neigh()
426 nr_neigh->digipeat = NULL; in nr_add_neigh()
427 nr_neigh->ax25 = NULL; in nr_add_neigh()
428 nr_neigh->dev = dev; in nr_add_neigh()
429 nr_neigh->quality = quality; in nr_add_neigh()
430 nr_neigh->locked = 1; in nr_add_neigh()
431 nr_neigh->count = 0; in nr_add_neigh()
432 nr_neigh->number = nr_neigh_no++; in nr_add_neigh()
433 nr_neigh->failed = 0; in nr_add_neigh()
434 atomic_set(&nr_neigh->refcount, 1); in nr_add_neigh()
437 nr_neigh->digipeat = kmemdup(ax25_digi, sizeof(*ax25_digi), in nr_add_neigh()
439 if (nr_neigh->digipeat == NULL) { in nr_add_neigh()
440 kfree(nr_neigh); in nr_add_neigh()
446 hlist_add_head(&nr_neigh->neigh_node, &nr_neigh_list); in nr_add_neigh()
459 struct nr_neigh *nr_neigh; in nr_del_neigh() local
461 nr_neigh = nr_neigh_get_dev(callsign, dev); in nr_del_neigh()
463 if (nr_neigh == NULL) return -EINVAL; in nr_del_neigh()
465 nr_neigh->quality = quality; in nr_del_neigh()
466 nr_neigh->locked = 0; in nr_del_neigh()
468 if (nr_neigh->count == 0) in nr_del_neigh()
469 nr_remove_neigh(nr_neigh); in nr_del_neigh()
470 nr_neigh_put(nr_neigh); in nr_del_neigh()
482 struct nr_neigh *nr_neigh; in nr_dec_obs() local
496 nr_neigh = s->routes[i].neighbour; in nr_dec_obs()
498 nr_neigh->count--; in nr_dec_obs()
499 nr_neigh_put(nr_neigh); in nr_dec_obs()
501 if (nr_neigh->count == 0 && !nr_neigh->locked) in nr_dec_obs()
502 nr_remove_neigh(nr_neigh); in nr_dec_obs()
538 struct nr_neigh *s; in nr_rt_device_down()
735 struct nr_neigh *s, *nr_neigh = NULL; in nr_link_failed() local
742 nr_neigh = s; in nr_link_failed()
748 if (nr_neigh == NULL) in nr_link_failed()
751 nr_neigh->ax25 = NULL; in nr_link_failed()
754 if (++nr_neigh->failed < sysctl_netrom_link_fails_count) { in nr_link_failed()
755 nr_neigh_put(nr_neigh); in nr_link_failed()
762 nr_node->routes[nr_node->which].neighbour == nr_neigh) in nr_link_failed()
767 nr_neigh_put(nr_neigh); in nr_link_failed()
777 struct nr_neigh *nr_neigh; in nr_route_frame() local
825 nr_neigh = nr_node->routes[nr_node->which].neighbour; in nr_route_frame()
849 ax25s = nr_neigh->ax25; in nr_route_frame()
850 nr_neigh->ax25 = ax25_send_frame(skb, 256, in nr_route_frame()
852 &nr_neigh->callsign, in nr_route_frame()
853 nr_neigh->digipeat, nr_neigh->dev); in nr_route_frame()
858 ret = (nr_neigh->ax25 != NULL); in nr_route_frame()
959 struct nr_neigh *nr_neigh; in nr_neigh_show() local
961 nr_neigh = hlist_entry(v, struct nr_neigh, neigh_node); in nr_neigh_show()
963 nr_neigh->number, in nr_neigh_show()
964 ax2asc(buf, &nr_neigh->callsign), in nr_neigh_show()
965 nr_neigh->dev ? nr_neigh->dev->name : "???", in nr_neigh_show()
966 nr_neigh->quality, in nr_neigh_show()
967 nr_neigh->locked, in nr_neigh_show()
968 nr_neigh->count, in nr_neigh_show()
969 nr_neigh->failed); in nr_neigh_show()
971 if (nr_neigh->digipeat != NULL) { in nr_neigh_show()
972 for (i = 0; i < nr_neigh->digipeat->ndigi; i++) in nr_neigh_show()
974 ax2asc(buf, &nr_neigh->digipeat->calls[i])); in nr_neigh_show()
1009 struct nr_neigh *s = NULL; in nr_rt_free()