mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 12:49:18 +00:00
Patch from Cougar - sort iflist by name.
This commit is contained in:
parent
41908818b8
commit
a939514c59
@ -1,3 +1,8 @@
|
|||||||
|
2003-06-05 Hasso Tepper <hasso@linux.ee>
|
||||||
|
|
||||||
|
* Patch from Cougar <cougar@random.ee>: Sort interface lists (iflist)
|
||||||
|
by name.
|
||||||
|
|
||||||
2003-04-13 Paul Jakma <paul@dishone.st>
|
2003-04-13 Paul Jakma <paul@dishone.st>
|
||||||
|
|
||||||
* Amir: Opaque LSA bug fix for deletion of Type11's
|
* Amir: Opaque LSA bug fix for deletion of Type11's
|
||||||
|
69
lib/if.c
69
lib/if.c
@ -46,6 +46,52 @@ struct if_master
|
|||||||
int (*if_delete_hook) (struct interface *);
|
int (*if_delete_hook) (struct interface *);
|
||||||
} if_master;
|
} if_master;
|
||||||
|
|
||||||
|
/* Compare interface names */
|
||||||
|
int
|
||||||
|
if_cmp_func (struct interface *ifp1, struct interface *ifp2)
|
||||||
|
{
|
||||||
|
unsigned int l1, l2;
|
||||||
|
long int x1, x2;
|
||||||
|
char *p1, *p2;
|
||||||
|
int res;
|
||||||
|
|
||||||
|
p1 = ifp1->name;
|
||||||
|
p2 = ifp2->name;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
/* look up to any number */
|
||||||
|
l1 = strcspn(p1, "0123456789");
|
||||||
|
l2 = strcspn(p2, "0123456789");
|
||||||
|
|
||||||
|
/* name lengths are different -> compare names */
|
||||||
|
if (l1 != l2)
|
||||||
|
return (strcmp(p1, p2));
|
||||||
|
|
||||||
|
res = strncmp(p1, p2, l1);
|
||||||
|
|
||||||
|
/* names are different -> compare them */
|
||||||
|
if (res)
|
||||||
|
return res;
|
||||||
|
|
||||||
|
/* with identical name part, go to numeric part */
|
||||||
|
|
||||||
|
p1 += l1;
|
||||||
|
p2 += l1;
|
||||||
|
|
||||||
|
x1 = strtol(p1, &p1, 10);
|
||||||
|
x2 = strtol(p2, &p2, 10);
|
||||||
|
|
||||||
|
/* let's compare numbers now */
|
||||||
|
if (x1 < x2)
|
||||||
|
return -1;
|
||||||
|
if (x1 > x2)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* numbers were equal, lets do it again..
|
||||||
|
(it happens with name like "eth123.456:789") */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Create new interface structure. */
|
/* Create new interface structure. */
|
||||||
struct interface *
|
struct interface *
|
||||||
if_new ()
|
if_new ()
|
||||||
@ -58,13 +104,18 @@ if_new ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct interface *
|
struct interface *
|
||||||
if_create ()
|
if_create (char *name, int namelen)
|
||||||
{
|
{
|
||||||
struct interface *ifp;
|
struct interface *ifp;
|
||||||
|
|
||||||
ifp = if_new ();
|
ifp = if_new ();
|
||||||
|
|
||||||
listnode_add (iflist, ifp);
|
if (name) {
|
||||||
|
strncpy (ifp->name, name, namelen);
|
||||||
|
listnode_add_sort (iflist, ifp);
|
||||||
|
} else {
|
||||||
|
listnode_add (iflist, ifp);
|
||||||
|
}
|
||||||
ifp->connected = list_new ();
|
ifp->connected = list_new ();
|
||||||
ifp->connected->del = (void (*) (void *)) connected_free;
|
ifp->connected->del = (void (*) (void *)) connected_free;
|
||||||
|
|
||||||
@ -248,10 +299,7 @@ if_get_by_name (char *name)
|
|||||||
|
|
||||||
ifp = if_lookup_by_name (name);
|
ifp = if_lookup_by_name (name);
|
||||||
if (ifp == NULL)
|
if (ifp == NULL)
|
||||||
{
|
ifp = if_create (name, IFNAMSIZ);
|
||||||
ifp = if_create ();
|
|
||||||
strncpy (ifp->name, name, IFNAMSIZ);
|
|
||||||
}
|
|
||||||
return ifp;
|
return ifp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -430,10 +478,7 @@ DEFUN (interface,
|
|||||||
ifp = if_lookup_by_name (argv[0]);
|
ifp = if_lookup_by_name (argv[0]);
|
||||||
|
|
||||||
if (ifp == NULL)
|
if (ifp == NULL)
|
||||||
{
|
ifp = if_create (argv[0], INTERFACE_NAMSIZ);
|
||||||
ifp = if_create ();
|
|
||||||
strncpy (ifp->name, argv[0], INTERFACE_NAMSIZ);
|
|
||||||
}
|
|
||||||
vty->index = ifp;
|
vty->index = ifp;
|
||||||
vty->node = INTERFACE_NODE;
|
vty->node = INTERFACE_NODE;
|
||||||
|
|
||||||
@ -803,8 +848,10 @@ if_init ()
|
|||||||
iflist = list_new ();
|
iflist = list_new ();
|
||||||
ifaddr_ipv4_table = route_table_init ();
|
ifaddr_ipv4_table = route_table_init ();
|
||||||
|
|
||||||
if (iflist)
|
if (iflist) {
|
||||||
|
iflist->cmp = (int (*)(void *, void *))if_cmp_func;
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
memset (&if_master, 0, sizeof if_master);
|
memset (&if_master, 0, sizeof if_master);
|
||||||
}
|
}
|
||||||
|
2
lib/if.h
2
lib/if.h
@ -181,7 +181,7 @@ struct connected
|
|||||||
|
|
||||||
/* Prototypes. */
|
/* Prototypes. */
|
||||||
struct interface *if_new (void);
|
struct interface *if_new (void);
|
||||||
struct interface *if_create (void);
|
struct interface *if_create (char *name, int namelen);
|
||||||
struct interface *if_lookup_by_index (unsigned int);
|
struct interface *if_lookup_by_index (unsigned int);
|
||||||
struct interface *if_lookup_by_name (char *);
|
struct interface *if_lookup_by_name (char *);
|
||||||
struct interface *if_lookup_exact_address (struct in_addr);
|
struct interface *if_lookup_exact_address (struct in_addr);
|
||||||
|
@ -555,10 +555,7 @@ zebra_interface_add_read (struct stream *s)
|
|||||||
|
|
||||||
/* If such interface does not exist, make new one. */
|
/* If such interface does not exist, make new one. */
|
||||||
if (! ifp)
|
if (! ifp)
|
||||||
{
|
ifp = if_create (ifname_tmp, IFNAMSIZ);
|
||||||
ifp = if_create ();
|
|
||||||
strncpy (ifp->name, ifname_tmp, IFNAMSIZ);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Read interface's index. */
|
/* Read interface's index. */
|
||||||
ifp->ifindex = stream_getl (s);
|
ifp->ifindex = stream_getl (s);
|
||||||
|
@ -745,7 +745,7 @@ ospf_vl_new (struct ospf *ospf, struct ospf_vl_data *vl_data)
|
|||||||
if (IS_DEBUG_OSPF_EVENT)
|
if (IS_DEBUG_OSPF_EVENT)
|
||||||
zlog_info ("ospf_vl_new(): creating pseudo zebra interface");
|
zlog_info ("ospf_vl_new(): creating pseudo zebra interface");
|
||||||
|
|
||||||
vi = if_create ();
|
vi = if_create (NULL, 0);
|
||||||
co = connected_new ();
|
co = connected_new ();
|
||||||
co->ifp = vi;
|
co->ifp = vi;
|
||||||
listnode_add (vi->connected, co);
|
listnode_add (vi->connected, co);
|
||||||
|
@ -218,9 +218,8 @@ ifm_read (struct if_msghdr *ifm)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ifp = if_create ();
|
ifp = if_create (sdl->sdl_data, sdl->sdl_nlen);
|
||||||
|
|
||||||
strncpy (ifp->name, sdl->sdl_data, sdl->sdl_nlen);
|
|
||||||
ifp->ifindex = ifm->ifm_index;
|
ifp->ifindex = ifm->ifm_index;
|
||||||
ifp->flags = ifm->ifm_flags;
|
ifp->flags = ifm->ifm_flags;
|
||||||
#if defined(__bsdi__)
|
#if defined(__bsdi__)
|
||||||
|
Loading…
Reference in New Issue
Block a user