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()
211 nr_neigh_put(nr_neigh); in nr_add_node()
220 if (nr_node->routes[i].neighbour == nr_neigh) { in nr_add_node()
236 nr_node->routes[0].neighbour = nr_neigh; in nr_add_node()
240 nr_neigh_hold(nr_neigh); in nr_add_node()
241 nr_neigh->count++; in nr_add_node()
253 nr_node->routes[2].neighbour = nr_neigh; in nr_add_node()
255 nr_neigh_hold(nr_neigh); in nr_add_node()
256 nr_neigh->count++; in nr_add_node()
274 if (nr_node->routes[i].neighbour == nr_neigh) { in nr_add_node()
281 nr_neigh_put(nr_neigh); in nr_add_node()
303 static inline void __nr_remove_neigh(struct nr_neigh *nr_neigh) in __nr_remove_neigh() argument
305 hlist_del_init(&nr_neigh->neigh_node); in __nr_remove_neigh()
306 nr_neigh_put(nr_neigh); in __nr_remove_neigh()
312 static void nr_remove_neigh(struct nr_neigh *nr_neigh) in nr_remove_neigh() argument
315 __nr_remove_neigh(nr_neigh); in nr_remove_neigh()
326 struct nr_neigh *nr_neigh; in nr_del_node() local
334 nr_neigh = nr_neigh_get_dev(neighbour, dev); in nr_del_node()
336 if (nr_neigh == NULL) { in nr_del_node()
343 if (nr_node->routes[i].neighbour == nr_neigh) { in nr_del_node()
344 nr_neigh->count--; in nr_del_node()
345 nr_neigh_put(nr_neigh); in nr_del_node()
347 if (nr_neigh->count == 0 && !nr_neigh->locked) in nr_del_node()
348 nr_remove_neigh(nr_neigh); in nr_del_node()
349 nr_neigh_put(nr_neigh); in nr_del_node()
372 nr_neigh_put(nr_neigh); in nr_del_node()
385 struct nr_neigh *nr_neigh; in nr_add_neigh() local
387 nr_neigh = nr_neigh_get_dev(callsign, dev); in nr_add_neigh()
388 if (nr_neigh) { in nr_add_neigh()
389 nr_neigh->quality = quality; in nr_add_neigh()
390 nr_neigh->locked = 1; in nr_add_neigh()
391 nr_neigh_put(nr_neigh); in nr_add_neigh()
395 if ((nr_neigh = kmalloc(sizeof(*nr_neigh), GFP_ATOMIC)) == NULL) in nr_add_neigh()
398 nr_neigh->callsign = *callsign; in nr_add_neigh()
399 nr_neigh->digipeat = NULL; in nr_add_neigh()
400 nr_neigh->ax25 = NULL; in nr_add_neigh()
401 nr_neigh->dev = dev; in nr_add_neigh()
402 nr_neigh->quality = quality; in nr_add_neigh()
403 nr_neigh->locked = 1; in nr_add_neigh()
404 nr_neigh->count = 0; in nr_add_neigh()
405 nr_neigh->number = nr_neigh_no++; in nr_add_neigh()
406 nr_neigh->failed = 0; in nr_add_neigh()
407 refcount_set(&nr_neigh->refcount, 1); in nr_add_neigh()
410 nr_neigh->digipeat = kmemdup(ax25_digi, sizeof(*ax25_digi), in nr_add_neigh()
412 if (nr_neigh->digipeat == NULL) { in nr_add_neigh()
413 kfree(nr_neigh); in nr_add_neigh()
419 hlist_add_head(&nr_neigh->neigh_node, &nr_neigh_list); in nr_add_neigh()
432 struct nr_neigh *nr_neigh; in nr_del_neigh() local
434 nr_neigh = nr_neigh_get_dev(callsign, dev); in nr_del_neigh()
436 if (nr_neigh == NULL) return -EINVAL; in nr_del_neigh()
438 nr_neigh->quality = quality; in nr_del_neigh()
439 nr_neigh->locked = 0; in nr_del_neigh()
441 if (nr_neigh->count == 0) in nr_del_neigh()
442 nr_remove_neigh(nr_neigh); in nr_del_neigh()
443 nr_neigh_put(nr_neigh); in nr_del_neigh()
455 struct nr_neigh *nr_neigh; in nr_dec_obs() local
469 nr_neigh = s->routes[i].neighbour; in nr_dec_obs()
471 nr_neigh->count--; in nr_dec_obs()
472 nr_neigh_put(nr_neigh); in nr_dec_obs()
474 if (nr_neigh->count == 0 && !nr_neigh->locked) in nr_dec_obs()
475 nr_remove_neigh(nr_neigh); in nr_dec_obs()
511 struct nr_neigh *s; in nr_rt_device_down()
709 struct nr_neigh *s, *nr_neigh = NULL; in nr_link_failed() local
716 nr_neigh = s; in nr_link_failed()
722 if (nr_neigh == NULL) in nr_link_failed()
725 nr_neigh->ax25 = NULL; in nr_link_failed()
728 if (++nr_neigh->failed < sysctl_netrom_link_fails_count) { in nr_link_failed()
729 nr_neigh_put(nr_neigh); in nr_link_failed()
736 nr_node->routes[nr_node->which].neighbour == nr_neigh) in nr_link_failed()
741 nr_neigh_put(nr_neigh); in nr_link_failed()
751 struct nr_neigh *nr_neigh; in nr_route_frame() local
799 nr_neigh = nr_node->routes[nr_node->which].neighbour; in nr_route_frame()
823 ax25s = nr_neigh->ax25; in nr_route_frame()
824 nr_neigh->ax25 = ax25_send_frame(skb, 256, in nr_route_frame()
826 &nr_neigh->callsign, in nr_route_frame()
827 nr_neigh->digipeat, nr_neigh->dev); in nr_route_frame()
832 ret = (nr_neigh->ax25 != NULL); in nr_route_frame()
924 struct nr_neigh *nr_neigh; in nr_neigh_show() local
926 nr_neigh = hlist_entry(v, struct nr_neigh, neigh_node); in nr_neigh_show()
928 nr_neigh->number, in nr_neigh_show()
929 ax2asc(buf, &nr_neigh->callsign), in nr_neigh_show()
930 nr_neigh->dev ? nr_neigh->dev->name : "???", in nr_neigh_show()
931 nr_neigh->quality, in nr_neigh_show()
932 nr_neigh->locked, in nr_neigh_show()
933 nr_neigh->count, in nr_neigh_show()
934 nr_neigh->failed); in nr_neigh_show()
936 if (nr_neigh->digipeat != NULL) { in nr_neigh_show()
937 for (i = 0; i < nr_neigh->digipeat->ndigi; i++) in nr_neigh_show()
939 ax2asc(buf, &nr_neigh->digipeat->calls[i])); in nr_neigh_show()
960 struct nr_neigh *s = NULL; in nr_rt_free()