/*
subnet.c -- handle subnet lookups and lists
- Copyright (C) 2000-2002 Guus Sliepen <guus@sliepen.warande.net>,
- 2000-2002 Ivo Timmermans <itimmermans@bigfoot.com>
+ Copyright (C) 2000-2002 Guus Sliepen <guus@sliepen.eu.org>,
+ 2000-2002 Ivo Timmermans <ivo@o2w.nl>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- $Id: subnet.c,v 1.1.2.36 2002/06/08 12:57:10 guus Exp $
+ $Id: subnet.c,v 1.1.2.39 2002/07/11 12:42:43 guus Exp $
*/
#include "config.h"
int subnet_compare_mac(subnet_t *a, subnet_t *b)
{
+ int result;
cp
- return memcmp(&a->net.mac.address, &b->net.mac.address, sizeof(mac_t));
+ result = memcmp(&a->net.mac.address, &b->net.mac.address, sizeof(mac_t));
+
+ if(result || !a->owner || !b->owner)
+ return result;
+
+ return strcmp(a->owner->name, b->owner->name);
}
int subnet_compare_ipv4(subnet_t *a, subnet_t *b)
if(result)
return result;
- return a->net.ipv4.prefixlength - b->net.ipv4.prefixlength;
+ result = a->net.ipv4.prefixlength - b->net.ipv4.prefixlength;
+
+ if(result || !a->owner || !b->owner)
+ return result;
+
+ return strcmp(a->owner->name, b->owner->name);
}
int subnet_compare_ipv6(subnet_t *a, subnet_t *b)
if(result)
return result;
- return a->net.ipv6.prefixlength - b->net.ipv6.prefixlength;
+ result = a->net.ipv6.prefixlength - b->net.ipv6.prefixlength;
+
+ if(result || !a->owner || !b->owner)
+ return result;
+
+ return strcmp(a->owner->name, b->owner->name);
}
int subnet_compare(subnet_t *a, subnet_t *b)
subnet_t *new_subnet(void)
{
cp
- return (subnet_t *)xmalloc(sizeof(subnet_t));
+ return (subnet_t *)xmalloc_and_zero(sizeof(subnet_t));
}
void free_subnet(subnet_t *subnet)
cp
subnet.type = SUBNET_MAC;
memcpy(&subnet.net.mac.address, address, sizeof(mac_t));
+ subnet.owner = NULL;
p = (subnet_t *)avl_search(subnet_tree, &subnet);
cp
subnet.type = SUBNET_IPV4;
memcpy(&subnet.net.ipv4.address, address, sizeof(ipv4_t));
subnet.net.ipv4.prefixlength = 32;
+ subnet.owner = NULL;
do
{
subnet.type = SUBNET_IPV6;
memcpy(&subnet.net.ipv6.address, address, sizeof(ipv6_t));
subnet.net.ipv6.prefixlength = 128;
+ subnet.owner = NULL;
do
{