Thread (1 message) 1 message, 1 author, 2003-11-20

Re: Function to determine if IP exists on a net-device?

From: Ben Greear <hidden>
Date: 2003-11-20 08:30:28

David S. Miller wrote:
On Wed, 19 Nov 2003 18:05:15 -0800
Ben Greear [off-list ref] wrote:

quoted
Is there not a more direct access if I already have the netdevice in question?
ie, can I get at the list by looking at dev->ip_ptr struct?

Yes, using dev->ip_ptr as a "struct in_device *in_dev"
do something like this:

	struct in_ifaddr *ifa;

	read_lock(&in_dev->lock);
	for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
		if (inet_ifa_match(my_addr, ifa)) {
			/* match */
		}
	}
	read_unlock(&in_dev->lock);

should work...

The inet_ifa_match thing uses a mask, and was matching everything on the subnet,
or something...

This seems to work though:

static int is_ip_on_dev(struct net_device* dev, __u32 ip) {
	int rv = 0;
	struct in_device* in_dev = in_dev_get(dev);
	if (in_dev) {
		struct in_ifaddr *ifa;

		read_lock(&in_dev->lock);
		for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
			if (ifa->ifa_address == ip) {
				/* match */
				rv = 1;
				break;
			}
		}
		read_unlock(&in_dev->lock);
		in_dev_put(in_dev);
	}
	return rv;
}


-- 
Ben Greear [off-list ref]
Candela Technologies Inc  http://www.candelatech.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help