Lines Matching refs:nr_neigh
60 static struct nr_neigh *nr_neigh_get_dev(ax25_address *callsign, in nr_neigh_get_dev()
63 struct nr_neigh *found = NULL; in nr_neigh_get_dev()
64 struct nr_neigh *nr_neigh; in nr_neigh_get_dev() local
67 nr_neigh_for_each(nr_neigh, &nr_neigh_list) in nr_neigh_get_dev()
68 if (ax25cmp(callsign, &nr_neigh->callsign) == 0 && in nr_neigh_get_dev()
69 nr_neigh->dev == dev) { in nr_neigh_get_dev()
70 nr_neigh_hold(nr_neigh); in nr_neigh_get_dev()
71 found = nr_neigh; in nr_neigh_get_dev()
78 static void nr_remove_neigh(struct nr_neigh *);
102 struct nr_neigh *nr_neigh; in nr_add_node() local
113 nr_neigh = nr_neigh_get_dev(ax25, dev); in nr_add_node()
121 if (nr_neigh != NULL && nr_neigh->failed != 0 && quality == 0) { in nr_add_node()
128 if (nr_nodet->routes[i].neighbour == nr_neigh) in nr_add_node()
136 if (nr_neigh != NULL) in nr_add_node()
137 nr_neigh->failed = 0; in nr_add_node()
139 if (quality == 0 && nr_neigh != NULL && nr_node != NULL) { in nr_add_node()
140 nr_neigh_put(nr_neigh); in nr_add_node()
145 if (nr_neigh == NULL) { in nr_add_node()
146 if ((nr_neigh = kmalloc(sizeof(*nr_neigh), GFP_ATOMIC)) == NULL) { in nr_add_node()
152 nr_neigh->callsign = *ax25; in nr_add_node()
153 nr_neigh->digipeat = NULL; in nr_add_node()
154 nr_neigh->ax25 = NULL; in nr_add_node()
155 nr_neigh->dev = dev; in nr_add_node()
156 nr_neigh->quality = sysctl_netrom_default_path_quality; in nr_add_node()
157 nr_neigh->locked = 0; in nr_add_node()
158 nr_neigh->count = 0; in nr_add_node()
159 nr_neigh->number = nr_neigh_no++; in nr_add_node()
160 nr_neigh->failed = 0; in nr_add_node()
161 refcount_set(&nr_neigh->refcount, 1); in nr_add_node()
164 nr_neigh->digipeat = kmemdup(ax25_digi, in nr_add_node()
167 if (nr_neigh->digipeat == NULL) { in nr_add_node()
168 kfree(nr_neigh); in nr_add_node()
176 hlist_add_head(&nr_neigh->neigh_node, &nr_neigh_list); in nr_add_node()
177 nr_neigh_hold(nr_neigh); in nr_add_node()
181 if (quality != 0 && ax25cmp(nr, ax25) == 0 && !nr_neigh->locked) in nr_add_node()
182 nr_neigh->quality = quality; in nr_add_node()
186 if (nr_neigh) in nr_add_node()
187 nr_neigh_put(nr_neigh); in nr_add_node()
201 nr_node->routes[0].neighbour = nr_neigh; in nr_add_node()
203 nr_neigh_hold(nr_neigh); in nr_add_node()
204 nr_neigh->count++; in nr_add_node()
219 if (nr_node->routes[i].neighbour == nr_neigh) { in nr_add_node()
235 nr_node->routes[0].neighbour = nr_neigh; in nr_add_node()
239 nr_neigh_hold(nr_neigh); in nr_add_node()
240 nr_neigh->count++; in nr_add_node()
252 nr_node->routes[2].neighbour = nr_neigh; in nr_add_node()
254 nr_neigh_hold(nr_neigh); in nr_add_node()
255 nr_neigh->count++; in nr_add_node()
273 if (nr_node->routes[i].neighbour == nr_neigh) { in nr_add_node()
280 nr_neigh_put(nr_neigh); in nr_add_node()
302 static inline void __nr_remove_neigh(struct nr_neigh *nr_neigh) in __nr_remove_neigh() argument
304 hlist_del_init(&nr_neigh->neigh_node); in __nr_remove_neigh()
305 nr_neigh_put(nr_neigh); in __nr_remove_neigh()
311 static void nr_remove_neigh(struct nr_neigh *nr_neigh) in nr_remove_neigh() argument
314 __nr_remove_neigh(nr_neigh); in nr_remove_neigh()
325 struct nr_neigh *nr_neigh; in nr_del_node() local
333 nr_neigh = nr_neigh_get_dev(neighbour, dev); in nr_del_node()
335 if (nr_neigh == NULL) { in nr_del_node()
342 if (nr_node->routes[i].neighbour == nr_neigh) { in nr_del_node()
343 nr_neigh->count--; in nr_del_node()
344 nr_neigh_put(nr_neigh); in nr_del_node()
346 if (nr_neigh->count == 0 && !nr_neigh->locked) in nr_del_node()
347 nr_remove_neigh(nr_neigh); in nr_del_node()
348 nr_neigh_put(nr_neigh); in nr_del_node()
371 nr_neigh_put(nr_neigh); in nr_del_node()
384 struct nr_neigh *nr_neigh; in nr_add_neigh() local
386 nr_neigh = nr_neigh_get_dev(callsign, dev); in nr_add_neigh()
387 if (nr_neigh) { in nr_add_neigh()
388 nr_neigh->quality = quality; in nr_add_neigh()
389 nr_neigh->locked = 1; in nr_add_neigh()
390 nr_neigh_put(nr_neigh); in nr_add_neigh()
394 if ((nr_neigh = kmalloc(sizeof(*nr_neigh), GFP_ATOMIC)) == NULL) in nr_add_neigh()
397 nr_neigh->callsign = *callsign; in nr_add_neigh()
398 nr_neigh->digipeat = NULL; in nr_add_neigh()
399 nr_neigh->ax25 = NULL; in nr_add_neigh()
400 nr_neigh->dev = dev; in nr_add_neigh()
401 nr_neigh->quality = quality; in nr_add_neigh()
402 nr_neigh->locked = 1; in nr_add_neigh()
403 nr_neigh->count = 0; in nr_add_neigh()
404 nr_neigh->number = nr_neigh_no++; in nr_add_neigh()
405 nr_neigh->failed = 0; in nr_add_neigh()
406 refcount_set(&nr_neigh->refcount, 1); in nr_add_neigh()
409 nr_neigh->digipeat = kmemdup(ax25_digi, sizeof(*ax25_digi), in nr_add_neigh()
411 if (nr_neigh->digipeat == NULL) { in nr_add_neigh()
412 kfree(nr_neigh); in nr_add_neigh()
418 hlist_add_head(&nr_neigh->neigh_node, &nr_neigh_list); in nr_add_neigh()
431 struct nr_neigh *nr_neigh; in nr_del_neigh() local
433 nr_neigh = nr_neigh_get_dev(callsign, dev); in nr_del_neigh()
435 if (nr_neigh == NULL) return -EINVAL; in nr_del_neigh()
437 nr_neigh->quality = quality; in nr_del_neigh()
438 nr_neigh->locked = 0; in nr_del_neigh()
440 if (nr_neigh->count == 0) in nr_del_neigh()
441 nr_remove_neigh(nr_neigh); in nr_del_neigh()
442 nr_neigh_put(nr_neigh); in nr_del_neigh()
454 struct nr_neigh *nr_neigh; in nr_dec_obs() local
468 nr_neigh = s->routes[i].neighbour; in nr_dec_obs()
470 nr_neigh->count--; in nr_dec_obs()
471 nr_neigh_put(nr_neigh); in nr_dec_obs()
473 if (nr_neigh->count == 0 && !nr_neigh->locked) in nr_dec_obs()
474 nr_remove_neigh(nr_neigh); in nr_dec_obs()
510 struct nr_neigh *s; in nr_rt_device_down()
708 struct nr_neigh *s, *nr_neigh = NULL; in nr_link_failed() local
715 nr_neigh = s; in nr_link_failed()
721 if (nr_neigh == NULL) in nr_link_failed()
724 nr_neigh->ax25 = NULL; in nr_link_failed()
727 if (++nr_neigh->failed < sysctl_netrom_link_fails_count) { in nr_link_failed()
728 nr_neigh_put(nr_neigh); in nr_link_failed()
735 nr_node->routes[nr_node->which].neighbour == nr_neigh) in nr_link_failed()
740 nr_neigh_put(nr_neigh); in nr_link_failed()
750 struct nr_neigh *nr_neigh; in nr_route_frame() local
798 nr_neigh = nr_node->routes[nr_node->which].neighbour; in nr_route_frame()
822 ax25s = nr_neigh->ax25; in nr_route_frame()
823 nr_neigh->ax25 = ax25_send_frame(skb, 256, in nr_route_frame()
825 &nr_neigh->callsign, in nr_route_frame()
826 nr_neigh->digipeat, nr_neigh->dev); in nr_route_frame()
831 ret = (nr_neigh->ax25 != NULL); in nr_route_frame()
919 struct nr_neigh *nr_neigh; in nr_neigh_show() local
921 nr_neigh = hlist_entry(v, struct nr_neigh, neigh_node); in nr_neigh_show()
923 nr_neigh->number, in nr_neigh_show()
924 ax2asc(buf, &nr_neigh->callsign), in nr_neigh_show()
925 nr_neigh->dev ? nr_neigh->dev->name : "???", in nr_neigh_show()
926 nr_neigh->quality, in nr_neigh_show()
927 nr_neigh->locked, in nr_neigh_show()
928 nr_neigh->count, in nr_neigh_show()
929 nr_neigh->failed); in nr_neigh_show()
931 if (nr_neigh->digipeat != NULL) { in nr_neigh_show()
932 for (i = 0; i < nr_neigh->digipeat->ndigi; i++) in nr_neigh_show()
934 ax2asc(buf, &nr_neigh->digipeat->calls[i])); in nr_neigh_show()
955 struct nr_neigh *s = NULL; in nr_rt_free()