mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-09 05:58:17 +00:00
[lib] Handle upgrade from SUNWzebra to Quagga for 'interface fooX:Y' commands
2006-10-14 Paul Jakma <paul.jakma@sun.com> * if.c: (general) Handle upgrades from SUNWzebra, which tried to track each logical interface as a seperate struct interface, to Quagga, which assigns only one struct interface per ifindex. (if_sunwzebra_get) Try decompose a logical interface name (fooX:Y) to the 'primary' name (fooX), for Solaris. (interface_cmd) Use if_sunwzebra_get on Solaris.
This commit is contained in:
parent
965b83f9cc
commit
98954844ae
@ -1,3 +1,13 @@
|
|||||||
|
2006-10-14 Paul Jakma <paul.jakma@sun.com>
|
||||||
|
|
||||||
|
* if.c: (general) Handle upgrades from SUNWzebra, which tried
|
||||||
|
to track each logical interface as a seperate struct
|
||||||
|
interface, to Quagga, which assigns only one struct interface
|
||||||
|
per ifindex.
|
||||||
|
(if_sunwzebra_get) Try decompose a logical interface name
|
||||||
|
(fooX:Y) to the 'primary' name (fooX), for Solaris.
|
||||||
|
(interface_cmd) Use if_sunwzebra_get on Solaris.
|
||||||
|
|
||||||
2006-09-26 Pierre-Yves Ritschard <pierre-yves@spootnik.org>
|
2006-09-26 Pierre-Yves Ritschard <pierre-yves@spootnik.org>
|
||||||
|
|
||||||
* smux.c: (smux_open,smux_trap,smux_register) Fix various
|
* smux.c: (smux_open,smux_trap,smux_register) Fix various
|
||||||
|
46
lib/if.c
46
lib/if.c
@ -501,9 +501,49 @@ DEFUN (no_interface_desc,
|
|||||||
|
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef SUNOS_5
|
||||||
|
/* Need to handle upgrade from SUNWzebra to Quagga. SUNWzebra created
|
||||||
|
* a seperate struct interface for each logical interface, so config
|
||||||
|
* file may be full of 'interface fooX:Y'. Solaris however does not
|
||||||
|
* expose logical interfaces via PF_ROUTE, so trying to track logical
|
||||||
|
* interfaces can be fruitless, for that reason Quagga only tracks
|
||||||
|
* the primary IP interface.
|
||||||
|
*
|
||||||
|
* We try accomodate SUNWzebra by:
|
||||||
|
* - looking up the interface name, to see whether it exists, if so
|
||||||
|
* its useable
|
||||||
|
* - for protocol daemons, this could only because zebra told us of
|
||||||
|
* the interface
|
||||||
|
* - for zebra, only because it learnt from kernel
|
||||||
|
* - if not:
|
||||||
|
* - search the name to see if it contains a sub-ipif / logical interface
|
||||||
|
* seperator, the ':' char. If it does:
|
||||||
|
* - text up to that char must be the primary name - get that name.
|
||||||
|
* if not:
|
||||||
|
* - no idea, just get the name in its entirety.
|
||||||
|
*/
|
||||||
|
static struct interface *
|
||||||
|
if_sunwzebra_get (const char *name, size_t nlen)
|
||||||
|
{
|
||||||
|
struct interface *ifp;
|
||||||
|
size_t seppos = 0;
|
||||||
|
|
||||||
|
if ( (ifp = if_lookup_by_name_len(name, nlen)) != NULL)
|
||||||
|
return ifp;
|
||||||
|
|
||||||
/* See also wrapper function zebra_interface() in zebra/interface.c */
|
/* hunt the primary interface name... */
|
||||||
|
while (seppos < nlen && name[seppos] != ':')
|
||||||
|
seppos++;
|
||||||
|
|
||||||
|
/* Wont catch seperator as last char, e.g. 'foo0:' but thats invalid */
|
||||||
|
if (seppos < nlen)
|
||||||
|
return if_get_by_name_len (name, seppos);
|
||||||
|
else
|
||||||
|
return if_get_by_name_len (name, nlen);
|
||||||
|
}
|
||||||
|
#endif /* SUNOS_5 */
|
||||||
|
|
||||||
DEFUN (interface,
|
DEFUN (interface,
|
||||||
interface_cmd,
|
interface_cmd,
|
||||||
"interface IFNAME",
|
"interface IFNAME",
|
||||||
@ -521,7 +561,11 @@ DEFUN (interface,
|
|||||||
return CMD_WARNING;
|
return CMD_WARNING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef SUNOS_5
|
||||||
|
ifp = if_sunwzebra_get (argv[0], sl);
|
||||||
|
#else
|
||||||
ifp = if_get_by_name_len(argv[0], sl);
|
ifp = if_get_by_name_len(argv[0], sl);
|
||||||
|
#endif /* SUNOS_5 */
|
||||||
|
|
||||||
vty->index = ifp;
|
vty->index = ifp;
|
||||||
vty->node = INTERFACE_NODE;
|
vty->node = INTERFACE_NODE;
|
||||||
|
Loading…
Reference in New Issue
Block a user