include/net/netrom.h
106
struct nr_neigh *neighbour;
include/net/netrom.h
137
static __inline__ void nr_neigh_put(struct nr_neigh *nr_neigh)
include/net/netrom.h
139
if (refcount_dec_and_test(&nr_neigh->refcount)) {
include/net/netrom.h
140
if (nr_neigh->ax25)
include/net/netrom.h
141
ax25_cb_put(nr_neigh->ax25);
include/net/netrom.h
142
kfree(nr_neigh->digipeat);
include/net/netrom.h
143
kfree(nr_neigh);
net/netrom/nr_route.c
102
struct nr_neigh *nr_neigh;
net/netrom/nr_route.c
113
nr_neigh = nr_neigh_get_dev(ax25, dev);
net/netrom/nr_route.c
121
if (nr_neigh != NULL && nr_neigh->failed != 0 && quality == 0) {
net/netrom/nr_route.c
128
if (nr_nodet->routes[i].neighbour == nr_neigh)
net/netrom/nr_route.c
136
if (nr_neigh != NULL)
net/netrom/nr_route.c
137
nr_neigh->failed = 0;
net/netrom/nr_route.c
139
if (quality == 0 && nr_neigh != NULL && nr_node != NULL) {
net/netrom/nr_route.c
140
nr_neigh_put(nr_neigh);
net/netrom/nr_route.c
145
if (nr_neigh == NULL) {
net/netrom/nr_route.c
146
if ((nr_neigh = kmalloc(sizeof(*nr_neigh), GFP_ATOMIC)) == NULL) {
net/netrom/nr_route.c
152
nr_neigh->callsign = *ax25;
net/netrom/nr_route.c
153
nr_neigh->digipeat = NULL;
net/netrom/nr_route.c
154
nr_neigh->ax25 = NULL;
net/netrom/nr_route.c
155
nr_neigh->dev = dev;
net/netrom/nr_route.c
156
nr_neigh->quality = READ_ONCE(sysctl_netrom_default_path_quality);
net/netrom/nr_route.c
157
nr_neigh->locked = 0;
net/netrom/nr_route.c
158
nr_neigh->count = 0;
net/netrom/nr_route.c
159
nr_neigh->number = nr_neigh_no++;
net/netrom/nr_route.c
160
nr_neigh->failed = 0;
net/netrom/nr_route.c
161
refcount_set(&nr_neigh->refcount, 1);
net/netrom/nr_route.c
164
nr_neigh->digipeat = kmemdup(ax25_digi,
net/netrom/nr_route.c
167
if (nr_neigh->digipeat == NULL) {
net/netrom/nr_route.c
168
kfree(nr_neigh);
net/netrom/nr_route.c
176
hlist_add_head(&nr_neigh->neigh_node, &nr_neigh_list);
net/netrom/nr_route.c
177
nr_neigh_hold(nr_neigh);
net/netrom/nr_route.c
181
if (quality != 0 && ax25cmp(nr, ax25) == 0 && !nr_neigh->locked)
net/netrom/nr_route.c
182
nr_neigh->quality = quality;
net/netrom/nr_route.c
186
if (nr_neigh)
net/netrom/nr_route.c
187
nr_neigh_put(nr_neigh);
net/netrom/nr_route.c
201
nr_node->routes[0].neighbour = nr_neigh;
net/netrom/nr_route.c
203
nr_neigh_hold(nr_neigh);
net/netrom/nr_route.c
204
nr_neigh->count++;
net/netrom/nr_route.c
211
nr_neigh_put(nr_neigh);
net/netrom/nr_route.c
220
if (nr_node->routes[i].neighbour == nr_neigh) {
net/netrom/nr_route.c
236
nr_node->routes[0].neighbour = nr_neigh;
net/netrom/nr_route.c
240
nr_neigh_hold(nr_neigh);
net/netrom/nr_route.c
241
nr_neigh->count++;
net/netrom/nr_route.c
253
nr_node->routes[2].neighbour = nr_neigh;
net/netrom/nr_route.c
255
nr_neigh_hold(nr_neigh);
net/netrom/nr_route.c
256
nr_neigh->count++;
net/netrom/nr_route.c
275
if (nr_node->routes[i].neighbour == nr_neigh) {
net/netrom/nr_route.c
282
nr_neigh_put(nr_neigh);
net/netrom/nr_route.c
296
static inline void __nr_remove_neigh(struct nr_neigh *nr_neigh)
net/netrom/nr_route.c
298
hlist_del_init(&nr_neigh->neigh_node);
net/netrom/nr_route.c
299
nr_neigh_put(nr_neigh);
net/netrom/nr_route.c
305
static void nr_remove_neigh(struct nr_neigh *nr_neigh)
net/netrom/nr_route.c
308
__nr_remove_neigh(nr_neigh);
net/netrom/nr_route.c
319
struct nr_neigh *nr_neigh;
net/netrom/nr_route.c
327
nr_neigh = nr_neigh_get_dev(neighbour, dev);
net/netrom/nr_route.c
329
if (nr_neigh == NULL) {
net/netrom/nr_route.c
337
if (nr_node->routes[i].neighbour == nr_neigh) {
net/netrom/nr_route.c
338
nr_neigh->count--;
net/netrom/nr_route.c
339
nr_neigh_put(nr_neigh);
net/netrom/nr_route.c
341
if (nr_neigh->count == 0 && !nr_neigh->locked)
net/netrom/nr_route.c
342
nr_remove_neigh(nr_neigh);
net/netrom/nr_route.c
343
nr_neigh_put(nr_neigh);
net/netrom/nr_route.c
368
nr_neigh_put(nr_neigh);
net/netrom/nr_route.c
382
struct nr_neigh *nr_neigh;
net/netrom/nr_route.c
384
nr_neigh = nr_neigh_get_dev(callsign, dev);
net/netrom/nr_route.c
385
if (nr_neigh) {
net/netrom/nr_route.c
386
nr_neigh->quality = quality;
net/netrom/nr_route.c
387
nr_neigh->locked = 1;
net/netrom/nr_route.c
388
nr_neigh_put(nr_neigh);
net/netrom/nr_route.c
392
if ((nr_neigh = kmalloc(sizeof(*nr_neigh), GFP_ATOMIC)) == NULL)
net/netrom/nr_route.c
395
nr_neigh->callsign = *callsign;
net/netrom/nr_route.c
396
nr_neigh->digipeat = NULL;
net/netrom/nr_route.c
397
nr_neigh->ax25 = NULL;
net/netrom/nr_route.c
398
nr_neigh->dev = dev;
net/netrom/nr_route.c
399
nr_neigh->quality = quality;
net/netrom/nr_route.c
400
nr_neigh->locked = 1;
net/netrom/nr_route.c
401
nr_neigh->count = 0;
net/netrom/nr_route.c
402
nr_neigh->number = nr_neigh_no++;
net/netrom/nr_route.c
403
nr_neigh->failed = 0;
net/netrom/nr_route.c
404
refcount_set(&nr_neigh->refcount, 1);
net/netrom/nr_route.c
407
nr_neigh->digipeat = kmemdup(ax25_digi, sizeof(*ax25_digi),
net/netrom/nr_route.c
409
if (nr_neigh->digipeat == NULL) {
net/netrom/nr_route.c
410
kfree(nr_neigh);
net/netrom/nr_route.c
416
hlist_add_head(&nr_neigh->neigh_node, &nr_neigh_list);
net/netrom/nr_route.c
429
struct nr_neigh *nr_neigh;
net/netrom/nr_route.c
431
nr_neigh = nr_neigh_get_dev(callsign, dev);
net/netrom/nr_route.c
433
if (nr_neigh == NULL) return -EINVAL;
net/netrom/nr_route.c
435
nr_neigh->quality = quality;
net/netrom/nr_route.c
436
nr_neigh->locked = 0;
net/netrom/nr_route.c
438
if (nr_neigh->count == 0)
net/netrom/nr_route.c
439
nr_remove_neigh(nr_neigh);
net/netrom/nr_route.c
440
nr_neigh_put(nr_neigh);
net/netrom/nr_route.c
452
struct nr_neigh *nr_neigh;
net/netrom/nr_route.c
466
nr_neigh = s->routes[i].neighbour;
net/netrom/nr_route.c
468
nr_neigh->count--;
net/netrom/nr_route.c
469
nr_neigh_put(nr_neigh);
net/netrom/nr_route.c
471
if (nr_neigh->count == 0 && !nr_neigh->locked)
net/netrom/nr_route.c
472
nr_remove_neigh(nr_neigh);
net/netrom/nr_route.c
509
struct nr_neigh *s;
net/netrom/nr_route.c
60
static struct nr_neigh *nr_neigh_get_dev(ax25_address *callsign,
net/netrom/nr_route.c
63
struct nr_neigh *found = NULL;
net/netrom/nr_route.c
64
struct nr_neigh *nr_neigh;
net/netrom/nr_route.c
67
nr_neigh_for_each(nr_neigh, &nr_neigh_list)
net/netrom/nr_route.c
68
if (ax25cmp(callsign, &nr_neigh->callsign) == 0 &&
net/netrom/nr_route.c
69
nr_neigh->dev == dev) {
net/netrom/nr_route.c
70
nr_neigh_hold(nr_neigh);
net/netrom/nr_route.c
707
struct nr_neigh *s, *nr_neigh = NULL;
net/netrom/nr_route.c
71
found = nr_neigh;
net/netrom/nr_route.c
714
nr_neigh = s;
net/netrom/nr_route.c
720
if (nr_neigh == NULL)
net/netrom/nr_route.c
723
nr_neigh->ax25 = NULL;
net/netrom/nr_route.c
726
if (++nr_neigh->failed < READ_ONCE(sysctl_netrom_link_fails_count)) {
net/netrom/nr_route.c
727
nr_neigh_put(nr_neigh);
net/netrom/nr_route.c
734
nr_node->routes[nr_node->which].neighbour == nr_neigh)
net/netrom/nr_route.c
739
nr_neigh_put(nr_neigh);
net/netrom/nr_route.c
749
struct nr_neigh *nr_neigh;
net/netrom/nr_route.c
78
static void nr_remove_neigh(struct nr_neigh *);
net/netrom/nr_route.c
803
nr_neigh = nr_node->routes[nr_node->which].neighbour;
net/netrom/nr_route.c
829
ax25s = nr_neigh->ax25;
net/netrom/nr_route.c
830
nr_neigh->ax25 = ax25_send_frame(skb, 256,
net/netrom/nr_route.c
832
&nr_neigh->callsign,
net/netrom/nr_route.c
833
nr_neigh->digipeat, nr_neigh->dev);
net/netrom/nr_route.c
838
ret = (nr_neigh->ax25 != NULL);
net/netrom/nr_route.c
933
struct nr_neigh *nr_neigh;
net/netrom/nr_route.c
935
nr_neigh = hlist_entry(v, struct nr_neigh, neigh_node);
net/netrom/nr_route.c
937
nr_neigh->number,
net/netrom/nr_route.c
938
ax2asc(buf, &nr_neigh->callsign),
net/netrom/nr_route.c
939
nr_neigh->dev ? nr_neigh->dev->name : "???",
net/netrom/nr_route.c
940
nr_neigh->quality,
net/netrom/nr_route.c
941
nr_neigh->locked,
net/netrom/nr_route.c
942
nr_neigh->count,
net/netrom/nr_route.c
943
nr_neigh->failed);
net/netrom/nr_route.c
945
if (nr_neigh->digipeat != NULL) {
net/netrom/nr_route.c
946
for (i = 0; i < nr_neigh->digipeat->ndigi; i++)
net/netrom/nr_route.c
948
ax2asc(buf, &nr_neigh->digipeat->calls[i]));
net/netrom/nr_route.c
969
struct nr_neigh *s = NULL;