mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-09 03:47:47 +00:00
2003-06-15 Paul Jakma <paul@dishone.st>
* lib/vty.{c,h}: Remove vty layer depending on a 'master' global, pass the thread master in explicitly to vty_init. Sort out some header dependency problems with lib/command.h * zebra/: Move globals to struct zebrad. Update vty_init(). * (.*)/\1_main.c: update call to vty_init().
This commit is contained in:
parent
0e4f190ebf
commit
b21b19c578
@ -282,7 +282,7 @@ main (int argc, char **argv)
|
|||||||
signal_init ();
|
signal_init ();
|
||||||
zprivs_init (&bgpd_privs);
|
zprivs_init (&bgpd_privs);
|
||||||
cmd_init (1);
|
cmd_init (1);
|
||||||
vty_init ();
|
vty_init (master);
|
||||||
memory_init ();
|
memory_init ();
|
||||||
|
|
||||||
/* BGP related initialization. */
|
/* BGP related initialization. */
|
||||||
|
@ -20,11 +20,14 @@ Boston, MA 02111-1307, USA. */
|
|||||||
|
|
||||||
#include <zebra.h>
|
#include <zebra.h>
|
||||||
|
|
||||||
#include "command.h"
|
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
|
#include "vector.h"
|
||||||
|
#include "vty.h"
|
||||||
|
#include "command.h"
|
||||||
|
|
||||||
/* Command vector which includes some level of command lists. Normally
|
/* Command vector which includes some level of command lists. Normally
|
||||||
each daemon maintains each own cmdvec. */
|
each daemon maintains each own cmdvec. */
|
||||||
|
10
lib/vty.c
10
lib/vty.c
@ -23,16 +23,17 @@
|
|||||||
#include <zebra.h>
|
#include <zebra.h>
|
||||||
|
|
||||||
#include "linklist.h"
|
#include "linklist.h"
|
||||||
|
#include "thread.h"
|
||||||
#include "buffer.h"
|
#include "buffer.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "command.h"
|
#include "command.h"
|
||||||
#include "sockunion.h"
|
#include "sockunion.h"
|
||||||
#include "thread.h"
|
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "str.h"
|
#include "str.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "prefix.h"
|
#include "prefix.h"
|
||||||
#include "filter.h"
|
#include "filter.h"
|
||||||
|
#include "vty.h"
|
||||||
#include "privs.h"
|
#include "privs.h"
|
||||||
|
|
||||||
/* Vty events */
|
/* Vty events */
|
||||||
@ -2342,8 +2343,7 @@ vty_config_unlock (struct vty *vty)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Master of the threads. */
|
/* Master of the threads. */
|
||||||
extern struct thread_master *master;
|
static struct thread_master *master;
|
||||||
/* struct thread_master *master; */
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vty_event (enum event event, int sock, struct vty *vty)
|
vty_event (enum event event, int sock, struct vty *vty)
|
||||||
@ -2791,13 +2791,15 @@ vty_init_vtysh ()
|
|||||||
|
|
||||||
/* Install vty's own commands like `who' command. */
|
/* Install vty's own commands like `who' command. */
|
||||||
void
|
void
|
||||||
vty_init ()
|
vty_init (struct thread_master *master_thread)
|
||||||
{
|
{
|
||||||
/* For further configuration read, preserve current directory. */
|
/* For further configuration read, preserve current directory. */
|
||||||
vty_save_cwd ();
|
vty_save_cwd ();
|
||||||
|
|
||||||
vtyvec = vector_init (VECTOR_MIN_SIZE);
|
vtyvec = vector_init (VECTOR_MIN_SIZE);
|
||||||
|
|
||||||
|
master = master_thread;
|
||||||
|
|
||||||
/* Initilize server thread vector. */
|
/* Initilize server thread vector. */
|
||||||
Vvty_serv_thread = vector_init (VECTOR_MIN_SIZE);
|
Vvty_serv_thread = vector_init (VECTOR_MIN_SIZE);
|
||||||
|
|
||||||
|
@ -21,6 +21,8 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|||||||
#ifndef _ZEBRA_VTY_H
|
#ifndef _ZEBRA_VTY_H
|
||||||
#define _ZEBRA_VTY_H
|
#define _ZEBRA_VTY_H
|
||||||
|
|
||||||
|
#include "thread.h"
|
||||||
|
|
||||||
#define VTY_BUFSIZ 512
|
#define VTY_BUFSIZ 512
|
||||||
#define VTY_MAXHIST 20
|
#define VTY_MAXHIST 20
|
||||||
|
|
||||||
@ -184,7 +186,7 @@ struct vty
|
|||||||
extern char integrate_default[];
|
extern char integrate_default[];
|
||||||
|
|
||||||
/* Prototypes. */
|
/* Prototypes. */
|
||||||
void vty_init (void);
|
void vty_init (struct thread_master *);
|
||||||
void vty_init_vtysh (void);
|
void vty_init_vtysh (void);
|
||||||
void vty_reset (void);
|
void vty_reset (void);
|
||||||
void vty_finish (void);
|
void vty_finish (void);
|
||||||
|
@ -317,7 +317,7 @@ main (int argc, char *argv[], char *envp[])
|
|||||||
zprivs_init (&ospf6d_privs);
|
zprivs_init (&ospf6d_privs);
|
||||||
signal_init ();
|
signal_init ();
|
||||||
cmd_init (1);
|
cmd_init (1);
|
||||||
vty_init ();
|
vty_init (master);
|
||||||
ospf6_init ();
|
ospf6_init ();
|
||||||
memory_init ();
|
memory_init ();
|
||||||
sort_node ();
|
sort_node ();
|
||||||
|
@ -288,7 +288,7 @@ main (int argc, char **argv)
|
|||||||
signal_init ();
|
signal_init ();
|
||||||
cmd_init (1);
|
cmd_init (1);
|
||||||
debug_init ();
|
debug_init ();
|
||||||
vty_init ();
|
vty_init (master);
|
||||||
memory_init ();
|
memory_init ();
|
||||||
|
|
||||||
access_list_init ();
|
access_list_init ();
|
||||||
|
@ -270,7 +270,7 @@ main (int argc, char **argv)
|
|||||||
zprivs_init (&ripd_privs);
|
zprivs_init (&ripd_privs);
|
||||||
signal_init ();
|
signal_init ();
|
||||||
cmd_init (1);
|
cmd_init (1);
|
||||||
vty_init ();
|
vty_init (master);
|
||||||
memory_init ();
|
memory_init ();
|
||||||
keychain_init ();
|
keychain_init ();
|
||||||
|
|
||||||
|
@ -274,7 +274,7 @@ main (int argc, char **argv)
|
|||||||
zprivs_init (&ripngd_privs);
|
zprivs_init (&ripngd_privs);
|
||||||
signal_init ();
|
signal_init ();
|
||||||
cmd_init (1);
|
cmd_init (1);
|
||||||
vty_init ();
|
vty_init (master);
|
||||||
memory_init ();
|
memory_init ();
|
||||||
|
|
||||||
/* RIPngd inits. */
|
/* RIPngd inits. */
|
||||||
|
13
zebra/main.c
13
zebra/main.c
@ -36,8 +36,11 @@
|
|||||||
#include "zebra/debug.h"
|
#include "zebra/debug.h"
|
||||||
#include "zebra/rib.h"
|
#include "zebra/rib.h"
|
||||||
|
|
||||||
/* Master of threads. */
|
/* Zebra instance */
|
||||||
struct thread_master *master;
|
struct zebra_t zebrad =
|
||||||
|
{
|
||||||
|
.rtm_table_default = 0,
|
||||||
|
};
|
||||||
|
|
||||||
/* process id. */
|
/* process id. */
|
||||||
pid_t old_pid;
|
pid_t old_pid;
|
||||||
@ -280,7 +283,7 @@ main (int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Make master thread emulator. */
|
/* Make master thread emulator. */
|
||||||
master = thread_master_create ();
|
zebrad.master = thread_master_create ();
|
||||||
|
|
||||||
/* privs initialise */
|
/* privs initialise */
|
||||||
zprivs_init (&zserv_privs);
|
zprivs_init (&zserv_privs);
|
||||||
@ -288,7 +291,7 @@ main (int argc, char **argv)
|
|||||||
/* Vty related initialize. */
|
/* Vty related initialize. */
|
||||||
signal_init ();
|
signal_init ();
|
||||||
cmd_init (1);
|
cmd_init (1);
|
||||||
vty_init ();
|
vty_init (zebrad.master);
|
||||||
memory_init ();
|
memory_init ();
|
||||||
|
|
||||||
/* Zebra related initialize. */
|
/* Zebra related initialize. */
|
||||||
@ -345,7 +348,7 @@ main (int argc, char **argv)
|
|||||||
/* Make vty server socket. */
|
/* Make vty server socket. */
|
||||||
vty_serv_sock (vty_addr, vty_port, ZEBRA_VTYSH_PATH);
|
vty_serv_sock (vty_addr, vty_port, ZEBRA_VTYSH_PATH);
|
||||||
|
|
||||||
while (thread_fetch (master, &thread))
|
while (thread_fetch (zebrad.master, &thread))
|
||||||
thread_call (&thread);
|
thread_call (&thread);
|
||||||
|
|
||||||
/* Not reached... */
|
/* Not reached... */
|
||||||
|
@ -36,6 +36,9 @@
|
|||||||
#include "zebra/redistribute.h"
|
#include "zebra/redistribute.h"
|
||||||
#include "zebra/debug.h"
|
#include "zebra/debug.h"
|
||||||
|
|
||||||
|
/* master zebra server structure */
|
||||||
|
extern struct zebra_t zebrad;
|
||||||
|
|
||||||
int
|
int
|
||||||
zebra_check_addr (struct prefix *p)
|
zebra_check_addr (struct prefix *p)
|
||||||
{
|
{
|
||||||
@ -162,15 +165,13 @@ zebra_redistribute (struct zserv *client, int type)
|
|||||||
#endif /* HAVE_IPV6 */
|
#endif /* HAVE_IPV6 */
|
||||||
}
|
}
|
||||||
|
|
||||||
extern list client_list;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
redistribute_add (struct prefix *p, struct rib *rib)
|
redistribute_add (struct prefix *p, struct rib *rib)
|
||||||
{
|
{
|
||||||
listnode node;
|
listnode node;
|
||||||
struct zserv *client;
|
struct zserv *client;
|
||||||
|
|
||||||
for (node = listhead (client_list); node; nextnode (node))
|
for (node = listhead (zebrad.client_list); node; nextnode (node))
|
||||||
if ((client = getdata (node)) != NULL)
|
if ((client = getdata (node)) != NULL)
|
||||||
{
|
{
|
||||||
if (is_default (p))
|
if (is_default (p))
|
||||||
@ -207,7 +208,7 @@ redistribute_delete (struct prefix *p, struct rib *rib)
|
|||||||
if (rib->distance == DISTANCE_INFINITY)
|
if (rib->distance == DISTANCE_INFINITY)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (node = listhead (client_list); node; nextnode (node))
|
for (node = listhead (zebrad.client_list); node; nextnode (node))
|
||||||
if ((client = getdata (node)) != NULL)
|
if ((client = getdata (node)) != NULL)
|
||||||
{
|
{
|
||||||
if (is_default (p))
|
if (is_default (p))
|
||||||
@ -310,7 +311,7 @@ zebra_interface_up_update (struct interface *ifp)
|
|||||||
if (IS_ZEBRA_DEBUG_EVENT)
|
if (IS_ZEBRA_DEBUG_EVENT)
|
||||||
zlog_info ("MESSAGE: ZEBRA_INTERFACE_UP %s", ifp->name);
|
zlog_info ("MESSAGE: ZEBRA_INTERFACE_UP %s", ifp->name);
|
||||||
|
|
||||||
for (node = listhead (client_list); node; nextnode (node))
|
for (node = listhead (zebrad.client_list); node; nextnode (node))
|
||||||
if ((client = getdata (node)) != NULL)
|
if ((client = getdata (node)) != NULL)
|
||||||
zsend_interface_up (client, ifp);
|
zsend_interface_up (client, ifp);
|
||||||
}
|
}
|
||||||
@ -325,7 +326,7 @@ zebra_interface_down_update (struct interface *ifp)
|
|||||||
if (IS_ZEBRA_DEBUG_EVENT)
|
if (IS_ZEBRA_DEBUG_EVENT)
|
||||||
zlog_info ("MESSAGE: ZEBRA_INTERFACE_DOWN %s", ifp->name);
|
zlog_info ("MESSAGE: ZEBRA_INTERFACE_DOWN %s", ifp->name);
|
||||||
|
|
||||||
for (node = listhead (client_list); node; nextnode (node))
|
for (node = listhead (zebrad.client_list); node; nextnode (node))
|
||||||
if ((client = getdata (node)) != NULL)
|
if ((client = getdata (node)) != NULL)
|
||||||
zsend_interface_down (client, ifp);
|
zsend_interface_down (client, ifp);
|
||||||
}
|
}
|
||||||
@ -340,7 +341,7 @@ zebra_interface_add_update (struct interface *ifp)
|
|||||||
if (IS_ZEBRA_DEBUG_EVENT)
|
if (IS_ZEBRA_DEBUG_EVENT)
|
||||||
zlog_info ("MESSAGE: ZEBRA_INTERFACE_ADD %s", ifp->name);
|
zlog_info ("MESSAGE: ZEBRA_INTERFACE_ADD %s", ifp->name);
|
||||||
|
|
||||||
for (node = listhead (client_list); node; nextnode (node))
|
for (node = listhead (zebrad.client_list); node; nextnode (node))
|
||||||
if ((client = getdata (node)) != NULL)
|
if ((client = getdata (node)) != NULL)
|
||||||
if (client->ifinfo)
|
if (client->ifinfo)
|
||||||
zsend_interface_add (client, ifp);
|
zsend_interface_add (client, ifp);
|
||||||
@ -355,7 +356,7 @@ zebra_interface_delete_update (struct interface *ifp)
|
|||||||
if (IS_ZEBRA_DEBUG_EVENT)
|
if (IS_ZEBRA_DEBUG_EVENT)
|
||||||
zlog_info ("MESSAGE: ZEBRA_INTERFACE_DELETE %s", ifp->name);
|
zlog_info ("MESSAGE: ZEBRA_INTERFACE_DELETE %s", ifp->name);
|
||||||
|
|
||||||
for (node = listhead (client_list); node; nextnode (node))
|
for (node = listhead (zebrad.client_list); node; nextnode (node))
|
||||||
if ((client = getdata (node)) != NULL)
|
if ((client = getdata (node)) != NULL)
|
||||||
if (client->ifinfo)
|
if (client->ifinfo)
|
||||||
zsend_interface_delete (client, ifp);
|
zsend_interface_delete (client, ifp);
|
||||||
@ -379,7 +380,7 @@ zebra_interface_address_add_update (struct interface *ifp,
|
|||||||
p->prefixlen, ifc->ifp->name);
|
p->prefixlen, ifc->ifp->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (node = listhead (client_list); node; nextnode (node))
|
for (node = listhead (zebrad.client_list); node; nextnode (node))
|
||||||
if ((client = getdata (node)) != NULL)
|
if ((client = getdata (node)) != NULL)
|
||||||
if (client->ifinfo && CHECK_FLAG (ifc->conf, ZEBRA_IFC_REAL))
|
if (client->ifinfo && CHECK_FLAG (ifc->conf, ZEBRA_IFC_REAL))
|
||||||
zsend_interface_address_add (client, ifp, ifc);
|
zsend_interface_address_add (client, ifp, ifc);
|
||||||
@ -403,7 +404,7 @@ zebra_interface_address_delete_update (struct interface *ifp,
|
|||||||
p->prefixlen, ifc->ifp->name);
|
p->prefixlen, ifc->ifp->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (node = listhead (client_list); node; nextnode (node))
|
for (node = listhead (zebrad.client_list); node; nextnode (node))
|
||||||
if ((client = getdata (node)) != NULL)
|
if ((client = getdata (node)) != NULL)
|
||||||
if (client->ifinfo && CHECK_FLAG (ifc->conf, ZEBRA_IFC_REAL))
|
if (client->ifinfo && CHECK_FLAG (ifc->conf, ZEBRA_IFC_REAL))
|
||||||
zsend_interface_address_delete (client, ifp, ifc);
|
zsend_interface_address_delete (client, ifp, ifc);
|
||||||
|
@ -66,7 +66,7 @@ struct message nlmsg_str[] =
|
|||||||
{0, NULL}
|
{0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
extern int rtm_table_default;
|
extern struct zebra_t zebrad;
|
||||||
|
|
||||||
extern struct zebra_privs_t zserv_privs;
|
extern struct zebra_privs_t zserv_privs;
|
||||||
|
|
||||||
@ -615,7 +615,7 @@ netlink_routing_table (struct sockaddr_nl *snl, struct nlmsghdr *h)
|
|||||||
|
|
||||||
table = rtm->rtm_table;
|
table = rtm->rtm_table;
|
||||||
#if 0 /* we weed them out later in rib_weed_tables () */
|
#if 0 /* we weed them out later in rib_weed_tables () */
|
||||||
if (table != RT_TABLE_MAIN && table != rtm_table_default)
|
if (table != RT_TABLE_MAIN && table != zebrad.rtm_table_default)
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -734,7 +734,7 @@ netlink_route_change (struct sockaddr_nl *snl, struct nlmsghdr *h)
|
|||||||
}
|
}
|
||||||
|
|
||||||
table = rtm->rtm_table;
|
table = rtm->rtm_table;
|
||||||
if (table != RT_TABLE_MAIN && table != rtm_table_default)
|
if (table != RT_TABLE_MAIN && table != zebrad.rtm_table_default)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1600,7 +1600,7 @@ kernel_read (struct thread *thread)
|
|||||||
|
|
||||||
sock = THREAD_FD (thread);
|
sock = THREAD_FD (thread);
|
||||||
ret = netlink_parse_info (netlink_information_fetch, &netlink);
|
ret = netlink_parse_info (netlink_information_fetch, &netlink);
|
||||||
thread_add_read (master, kernel_read, NULL, netlink.sock);
|
thread_add_read (zebrad.master, kernel_read, NULL, netlink.sock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1621,5 +1621,5 @@ kernel_init ()
|
|||||||
|
|
||||||
/* Register kernel socket. */
|
/* Register kernel socket. */
|
||||||
if (netlink.sock > 0)
|
if (netlink.sock > 0)
|
||||||
thread_add_read (master, kernel_read, NULL, netlink.sock);
|
thread_add_read (zebrad.master, kernel_read, NULL, netlink.sock);
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "zebra/interface.h"
|
#include "zebra/interface.h"
|
||||||
#include "zebra/rtadv.h"
|
#include "zebra/rtadv.h"
|
||||||
#include "zebra/debug.h"
|
#include "zebra/debug.h"
|
||||||
|
#include "zebra/zserv.h"
|
||||||
|
|
||||||
extern struct zebra_privs_t zserv_privs;
|
extern struct zebra_privs_t zserv_privs;
|
||||||
|
|
||||||
@ -50,6 +51,8 @@ extern struct zebra_privs_t zserv_privs;
|
|||||||
#define ALLNODE "ff02::1"
|
#define ALLNODE "ff02::1"
|
||||||
#define ALLROUTER "ff02::2"
|
#define ALLROUTER "ff02::2"
|
||||||
|
|
||||||
|
extern struct zebra_t zebrad;
|
||||||
|
|
||||||
enum rtadv_event {RTADV_START, RTADV_STOP, RTADV_TIMER, RTADV_READ};
|
enum rtadv_event {RTADV_START, RTADV_STOP, RTADV_TIMER, RTADV_READ};
|
||||||
|
|
||||||
void rtadv_event (enum rtadv_event, int);
|
void rtadv_event (enum rtadv_event, int);
|
||||||
@ -999,7 +1002,6 @@ rtadv_config_write (struct vty *vty, struct interface *ifp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern struct thread_master *master;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
rtadv_event (enum rtadv_event event, int val)
|
rtadv_event (enum rtadv_event event, int val)
|
||||||
@ -1008,9 +1010,9 @@ rtadv_event (enum rtadv_event event, int val)
|
|||||||
{
|
{
|
||||||
case RTADV_START:
|
case RTADV_START:
|
||||||
if (! rtadv->ra_read)
|
if (! rtadv->ra_read)
|
||||||
rtadv->ra_read = thread_add_read (master, rtadv_read, NULL, val);
|
rtadv->ra_read = thread_add_read (zebrad.master, rtadv_read, NULL, val);
|
||||||
if (! rtadv->ra_timer)
|
if (! rtadv->ra_timer)
|
||||||
rtadv->ra_timer = thread_add_event (master, rtadv_timer, NULL, 0);
|
rtadv->ra_timer = thread_add_event (zebrad.master, rtadv_timer, NULL, 0);
|
||||||
break;
|
break;
|
||||||
case RTADV_STOP:
|
case RTADV_STOP:
|
||||||
if (rtadv->ra_timer)
|
if (rtadv->ra_timer)
|
||||||
@ -1026,11 +1028,11 @@ rtadv_event (enum rtadv_event event, int val)
|
|||||||
break;
|
break;
|
||||||
case RTADV_TIMER:
|
case RTADV_TIMER:
|
||||||
if (! rtadv->ra_timer)
|
if (! rtadv->ra_timer)
|
||||||
rtadv->ra_timer = thread_add_timer (master, rtadv_timer, NULL, val);
|
rtadv->ra_timer = thread_add_timer (zebrad.master, rtadv_timer, NULL, val);
|
||||||
break;
|
break;
|
||||||
case RTADV_READ:
|
case RTADV_READ:
|
||||||
if (! rtadv->ra_read)
|
if (! rtadv->ra_read)
|
||||||
rtadv->ra_read = thread_add_read (master, rtadv_read, NULL, val);
|
rtadv->ra_read = thread_add_read (zebrad.master, rtadv_read, NULL, val);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
#include "zebra/debug.h"
|
#include "zebra/debug.h"
|
||||||
|
|
||||||
/* Default rtm_table for all clients */
|
/* Default rtm_table for all clients */
|
||||||
extern int rtm_table_default;
|
extern struct zebra_t zebrad;
|
||||||
|
|
||||||
/* Each route type's string and default distance value. */
|
/* Each route type's string and default distance value. */
|
||||||
struct
|
struct
|
||||||
@ -2147,7 +2147,7 @@ rib_weed_table (struct route_table *table)
|
|||||||
{
|
{
|
||||||
next = rib->next;
|
next = rib->next;
|
||||||
|
|
||||||
if (rib->table != rtm_table_default &&
|
if (rib->table != zebrad.rtm_table_default &&
|
||||||
rib->table != RT_TABLE_MAIN)
|
rib->table != RT_TABLE_MAIN)
|
||||||
{
|
{
|
||||||
rib_delnode (rn, rib);
|
rib_delnode (rn, rib);
|
||||||
|
@ -43,17 +43,11 @@
|
|||||||
/* Event list of zebra. */
|
/* Event list of zebra. */
|
||||||
enum event { ZEBRA_SERV, ZEBRA_READ, ZEBRA_WRITE };
|
enum event { ZEBRA_SERV, ZEBRA_READ, ZEBRA_WRITE };
|
||||||
|
|
||||||
/* Zebra client list. */
|
extern struct zebra_t zebrad;
|
||||||
list client_list;
|
|
||||||
|
|
||||||
/* Default rtm_table for all clients */
|
|
||||||
int rtm_table_default = 0;
|
|
||||||
|
|
||||||
void zebra_event (enum event event, int sock, struct zserv *client);
|
void zebra_event (enum event event, int sock, struct zserv *client);
|
||||||
|
|
||||||
extern struct zebra_privs_t zserv_privs;
|
extern struct zebra_privs_t zserv_privs;
|
||||||
|
|
||||||
extern struct thread_master *master;
|
|
||||||
|
|
||||||
/* For logging of zebra meesages. */
|
/* For logging of zebra meesages. */
|
||||||
char *zebra_command_str [] =
|
char *zebra_command_str [] =
|
||||||
@ -126,7 +120,8 @@ zebra_server_dequeue (struct thread *t)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (FIFO_TOP (&message_queue))
|
if (FIFO_TOP (&message_queue))
|
||||||
THREAD_WRITE_ON (master, t_write, zebra_server_dequeue, NULL, sock);
|
THREAD_WRITE_ON (zebrad.master, t_write, zebra_server_dequeue,
|
||||||
|
NULL, sock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -146,7 +141,7 @@ zebra_server_enqueue (int sock, u_char *buf, unsigned long length,
|
|||||||
|
|
||||||
FIFO_ADD (&message_queue, queue);
|
FIFO_ADD (&message_queue, queue);
|
||||||
|
|
||||||
THREAD_WRITE_ON (master, t_write, zebra_server_dequeue, NULL, sock);
|
THREAD_WRITE_ON (zebrad.master, t_write, zebra_server_dequeue, NULL, sock);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -1422,7 +1417,7 @@ zebra_client_close (struct zserv *client)
|
|||||||
thread_cancel (client->t_write);
|
thread_cancel (client->t_write);
|
||||||
|
|
||||||
/* Free client structure. */
|
/* Free client structure. */
|
||||||
listnode_delete (client_list, client);
|
listnode_delete (zebrad.client_list, client);
|
||||||
XFREE (0, client);
|
XFREE (0, client);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1440,10 +1435,10 @@ zebra_client_create (int sock)
|
|||||||
client->obuf = stream_new (ZEBRA_MAX_PACKET_SIZ);
|
client->obuf = stream_new (ZEBRA_MAX_PACKET_SIZ);
|
||||||
|
|
||||||
/* Set table number. */
|
/* Set table number. */
|
||||||
client->rtm_table = rtm_table_default;
|
client->rtm_table = zebrad.rtm_table_default;
|
||||||
|
|
||||||
/* Add this client to linked list. */
|
/* Add this client to linked list. */
|
||||||
listnode_add (client_list, client);
|
listnode_add (zebrad.client_list, client);
|
||||||
|
|
||||||
/* Make new read thread. */
|
/* Make new read thread. */
|
||||||
zebra_event (ZEBRA_READ, sock, client);
|
zebra_event (ZEBRA_READ, sock, client);
|
||||||
@ -1726,8 +1721,6 @@ zebra_serv_un (char *path)
|
|||||||
zebra_event (ZEBRA_SERV, sock, NULL);
|
zebra_event (ZEBRA_SERV, sock, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Zebra's event management function. */
|
|
||||||
extern struct thread_master *master;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
zebra_event (enum event event, int sock, struct zserv *client)
|
zebra_event (enum event event, int sock, struct zserv *client)
|
||||||
@ -1735,11 +1728,11 @@ zebra_event (enum event event, int sock, struct zserv *client)
|
|||||||
switch (event)
|
switch (event)
|
||||||
{
|
{
|
||||||
case ZEBRA_SERV:
|
case ZEBRA_SERV:
|
||||||
thread_add_read (master, zebra_accept, client, sock);
|
thread_add_read (zebrad.master, zebra_accept, client, sock);
|
||||||
break;
|
break;
|
||||||
case ZEBRA_READ:
|
case ZEBRA_READ:
|
||||||
client->t_read =
|
client->t_read =
|
||||||
thread_add_read (master, zebra_client_read, client, sock);
|
thread_add_read (zebrad.master, zebra_client_read, client, sock);
|
||||||
break;
|
break;
|
||||||
case ZEBRA_WRITE:
|
case ZEBRA_WRITE:
|
||||||
/**/
|
/**/
|
||||||
@ -1754,7 +1747,7 @@ DEFUN (show_table,
|
|||||||
SHOW_STR
|
SHOW_STR
|
||||||
"default routing table to use for all clients\n")
|
"default routing table to use for all clients\n")
|
||||||
{
|
{
|
||||||
vty_out (vty, "table %d%s", rtm_table_default,
|
vty_out (vty, "table %d%s", zebrad.rtm_table_default,
|
||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -1765,7 +1758,7 @@ DEFUN (config_table,
|
|||||||
"Configure target kernel routing table\n"
|
"Configure target kernel routing table\n"
|
||||||
"TABLE integer\n")
|
"TABLE integer\n")
|
||||||
{
|
{
|
||||||
rtm_table_default = strtol (argv[0], (char**)0, 10);
|
zebrad.rtm_table_default = strtol (argv[0], (char**)0, 10);
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1833,7 +1826,7 @@ DEFUN (show_zebra_client,
|
|||||||
listnode node;
|
listnode node;
|
||||||
struct zserv *client;
|
struct zserv *client;
|
||||||
|
|
||||||
for (node = listhead (client_list); node; nextnode (node))
|
for (node = listhead (zebrad.client_list); node; nextnode (node))
|
||||||
{
|
{
|
||||||
client = getdata (node);
|
client = getdata (node);
|
||||||
vty_out (vty, "Client fd %d%s", client->sock, VTY_NEWLINE);
|
vty_out (vty, "Client fd %d%s", client->sock, VTY_NEWLINE);
|
||||||
@ -1845,8 +1838,8 @@ DEFUN (show_zebra_client,
|
|||||||
int
|
int
|
||||||
config_write_table (struct vty *vty)
|
config_write_table (struct vty *vty)
|
||||||
{
|
{
|
||||||
if (rtm_table_default)
|
if (zebrad.rtm_table_default)
|
||||||
vty_out (vty, "table %d%s", rtm_table_default,
|
vty_out (vty, "table %d%s", zebrad.rtm_table_default,
|
||||||
VTY_NEWLINE);
|
VTY_NEWLINE);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1958,7 +1951,7 @@ void
|
|||||||
zebra_init ()
|
zebra_init ()
|
||||||
{
|
{
|
||||||
/* Client list init. */
|
/* Client list init. */
|
||||||
client_list = list_new ();
|
zebrad.client_list = list_new ();
|
||||||
|
|
||||||
/* Forwarding is on by default. */
|
/* Forwarding is on by default. */
|
||||||
ipforward_on ();
|
ipforward_on ();
|
||||||
|
@ -56,6 +56,18 @@ struct zserv
|
|||||||
u_char ifinfo;
|
u_char ifinfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Zebra instance */
|
||||||
|
struct zebra_t
|
||||||
|
{
|
||||||
|
/* Thread master */
|
||||||
|
struct thread_master *master;
|
||||||
|
list client_list;
|
||||||
|
|
||||||
|
/* default table */
|
||||||
|
int rtm_table_default;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
/* Count prefix size from mask length */
|
/* Count prefix size from mask length */
|
||||||
#define PSIZE(a) (((a) + 7) / (8))
|
#define PSIZE(a) (((a) + 7) / (8))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user