Lines Matching +full:entry +full:- +full:address
1 // SPDX-License-Identifier: GPL-2.0-or-later
26 static int x25_add_route(struct x25_address *address, unsigned int sigdigits, in x25_add_route() argument
30 struct list_head *entry; in x25_add_route() local
31 int rc = -EINVAL; in x25_add_route()
35 list_for_each(entry, &x25_route_list) { in x25_add_route()
36 rt = list_entry(entry, struct x25_route, node); in x25_add_route()
38 if (!memcmp(&rt->address, address, sigdigits) && in x25_add_route()
39 rt->sigdigits == sigdigits) in x25_add_route()
44 rc = -ENOMEM; in x25_add_route()
48 strcpy(rt->address.x25_addr, "000000000000000"); in x25_add_route()
49 memcpy(rt->address.x25_addr, address->x25_addr, sigdigits); in x25_add_route()
51 rt->sigdigits = sigdigits; in x25_add_route()
52 rt->dev = dev; in x25_add_route()
53 refcount_set(&rt->refcnt, 1); in x25_add_route()
55 list_add(&rt->node, &x25_route_list); in x25_add_route()
63 * __x25_remove_route - remove route from x25_route_list
71 if (rt->node.next) { in __x25_remove_route()
72 list_del(&rt->node); in __x25_remove_route()
77 static int x25_del_route(struct x25_address *address, unsigned int sigdigits, in x25_del_route() argument
81 struct list_head *entry; in x25_del_route() local
82 int rc = -EINVAL; in x25_del_route()
86 list_for_each(entry, &x25_route_list) { in x25_del_route()
87 rt = list_entry(entry, struct x25_route, node); in x25_del_route()
89 if (!memcmp(&rt->address, address, sigdigits) && in x25_del_route()
90 rt->sigdigits == sigdigits && rt->dev == dev) { in x25_del_route()
107 struct list_head *entry, *tmp; in x25_route_device_down() local
111 list_for_each_safe(entry, tmp, &x25_route_list) { in x25_route_device_down()
112 rt = list_entry(entry, struct x25_route, node); in x25_route_device_down()
114 if (rt->dev == dev) in x25_route_device_down()
131 (!(dev->flags & IFF_UP) || (dev->type != ARPHRD_X25 in x25_dev_get()
133 && dev->type != ARPHRD_ETHER in x25_dev_get()
144 * x25_get_route - Find a route given an X.25 address.
145 * @addr: - address to find a route for
147 * Find a route given an X.25 address.
152 struct list_head *entry; in x25_get_route() local
156 list_for_each(entry, &x25_route_list) { in x25_get_route()
157 rt = list_entry(entry, struct x25_route, node); in x25_get_route()
159 if (!memcmp(&rt->address, addr, rt->sigdigits)) { in x25_get_route()
162 else if (rt->sigdigits > use->sigdigits) in x25_get_route()
181 int rc = -EINVAL; in x25_route_ioctl()
186 rc = -EFAULT; in x25_route_ioctl()
190 rc = -EINVAL; in x25_route_ioctl()
199 rc = x25_add_route(&rt.address, rt.sigdigits, dev); in x25_route_ioctl()
201 rc = x25_del_route(&rt.address, rt.sigdigits, dev); in x25_route_ioctl()
213 struct list_head *entry, *tmp; in x25_route_free() local
216 list_for_each_safe(entry, tmp, &x25_route_list) { in x25_route_free()
217 rt = list_entry(entry, struct x25_route, node); in x25_route_free()