// SPDX-License-Identifier: GPL-2.0-or-later /* * X.25 Packet Layer release 002 * * This is ALPHA test software. This code may break your machine, * randomly fail to work with new releases, misbehave and/or generally * screw up. It might even work. * * This code REQUIRES 2.1.15 or higher * * History * X.25 001 Jonathan Naylor Started coding.
*/
/** * __x25_remove_route - remove route from x25_route_list * @rt: route to remove * * Remove route from x25_route_list. If it was there. * Caller must hold x25_route_list_lock.
*/ staticvoid __x25_remove_route(struct x25_route *rt)
{ if (rt->node.next) {
list_del(&rt->node);
x25_route_put(rt);
}
}
if (rt->dev == dev)
__x25_remove_route(rt);
}
write_unlock_bh(&x25_route_list_lock);
}
/* * Check that the device given is a valid X.25 interface that is "up".
*/ struct net_device *x25_dev_get(char *devname)
{ struct net_device *dev = dev_get_by_name(&init_net, devname);
if (dev && (!(dev->flags & IFF_UP) || dev->type != ARPHRD_X25)) {
dev_put(dev);
dev = NULL;
}
return dev;
}
/** * x25_get_route - Find a route given an X.25 address. * @addr: - address to find a route for * * Find a route given an X.25 address.
*/ struct x25_route *x25_get_route(struct x25_address *addr)
{ struct x25_route *rt, *use = NULL;
read_lock_bh(&x25_route_list_lock);
list_for_each_entry(rt, &x25_route_list, node) { if (!memcmp(&rt->address, addr, rt->sigdigits)) { if (!use)
use = rt; elseif (rt->sigdigits > use->sigdigits)
use = rt;
}
}
/* * Handle the ioctls that control the routing functions.
*/ int x25_route_ioctl(unsignedint cmd, void __user *arg)
{ struct x25_route_struct rt; struct net_device *dev; int rc = -EINVAL;
if (cmd != SIOCADDRT && cmd != SIOCDELRT) goto out;
rc = -EFAULT; if (copy_from_user(&rt, arg, sizeof(rt))) goto out;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.