summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ChangeLog26
-rw-r--r--lib/buffer.h6
-rw-r--r--lib/checksum.c4
-rw-r--r--lib/command.c10
-rw-r--r--lib/command.h42
-rw-r--r--lib/distribute.c27
-rw-r--r--lib/distribute.h20
-rw-r--r--lib/filter.c62
-rw-r--r--lib/filter.h12
-rw-r--r--lib/getopt.h2
-rw-r--r--lib/hash.c9
-rw-r--r--lib/hash.h24
-rw-r--r--lib/if.c28
-rw-r--r--lib/if.h52
-rw-r--r--lib/if_rmap.c34
-rw-r--r--lib/if_rmap.h12
-rw-r--r--lib/jhash.h10
-rw-r--r--lib/keychain.c77
-rw-r--r--lib/keychain.h10
-rw-r--r--lib/linklist.c4
-rw-r--r--lib/linklist.h28
-rw-r--r--lib/log.h42
-rw-r--r--lib/md5.c30
-rw-r--r--lib/memory.c2
-rw-r--r--lib/memory.h53
-rw-r--r--lib/network.h4
-rw-r--r--lib/plist.c26
-rw-r--r--lib/plist.h29
-rw-r--r--lib/pqueue.c2
-rw-r--r--lib/pqueue.h10
-rw-r--r--lib/prefix.c10
-rw-r--r--lib/prefix.h83
-rw-r--r--lib/privs.h6
-rw-r--r--lib/routemap.c36
-rw-r--r--lib/routemap.h56
-rw-r--r--lib/sigevent.c4
-rw-r--r--lib/sigevent.h4
-rw-r--r--lib/smux.h23
-rw-r--r--lib/sockopt.h31
-rw-r--r--lib/sockunion.c8
-rw-r--r--lib/sockunion.h54
-rw-r--r--lib/str.h11
-rw-r--r--lib/stream.h101
-rw-r--r--lib/table.c10
-rw-r--r--lib/table.h30
-rw-r--r--lib/thread.c36
-rw-r--r--lib/thread.h52
-rw-r--r--lib/vector.h26
-rw-r--r--lib/vty.h55
-rw-r--r--lib/workqueue.h13
-rw-r--r--lib/zclient.c3
-rw-r--r--lib/zclient.h36
-rw-r--r--lib/zebra.h3
53 files changed, 722 insertions, 666 deletions
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 38f9cf6e..f5145321 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,29 @@
+2005-05-06 Paul Jakma <paul@dishone.st>
+
+ * (general) extern and static'ification of functions in code and
+ header.
+ Cleanup any definitions with unspecified arguments.
+ Add casts for callback assignments where the callback is defined,
+ typically, as passing void *, but the function being assigned has
+ some other pointer type defined as its argument, as gcc complains
+ about casts from void * to X* via function arguments.
+ Fix some old K&R style function argument definitions.
+ Add noreturn gcc attribute to some functions, as appropriate.
+ Add unused gcc attribute to some functions (eg ones meant to help
+ while debugging)
+ Add guard defines to headers which were missing them.
+ * command.c: (install_node) add const qualifier, still doesnt shut
+ up the warning though, because of the double pointer.
+ (cmp_node) ditto
+ * keychain.c: (key_str2time) Add GET_LONG_RANGE() macro, derived
+ fromn vty.h ones to fix some of the (long) < 0 warnings.
+ * thread.c: (various) use thread_empty
+ (cpu_record_hash_key) should cast to uintptr_t, a stdint.h type
+ * vty.h: Add VTY_GET_IPV4_ADDRESS and VTY_GET_IPV4_PREFIX so they
+ removed from ospfd/ospf_vty.h
+ * zebra.h: Move definition of ZEBRA_PORT to here, to remove
+ dependence of lib on zebra/zserv.h
+
2005-05-06 Hasso Tepper <hasso at quagga.net>
* sockunion.c: Fix warning message.
diff --git a/lib/buffer.h b/lib/buffer.h
index 249354cb..6c3dc76a 100644
--- a/lib/buffer.h
+++ b/lib/buffer.h
@@ -27,14 +27,14 @@
/* Create a new buffer. Memory will be allocated in chunks of the given
size. If the argument is 0, the library will supply a reasonable
default size suitable for buffering socket I/O. */
-struct buffer *buffer_new (size_t);
+extern struct buffer *buffer_new (size_t);
/* Free all data in the buffer. */
-void buffer_reset (struct buffer *);
+extern void buffer_reset (struct buffer *);
/* This function first calls buffer_reset to release all buffered data.
Then it frees the struct buffer itself. */
-void buffer_free (struct buffer *);
+extern void buffer_free (struct buffer *);
/* Add the given data to the end of the buffer. */
extern void buffer_put (struct buffer *, const void *, size_t);
diff --git a/lib/checksum.c b/lib/checksum.c
index 6a29cbac..8c0ea521 100644
--- a/lib/checksum.c
+++ b/lib/checksum.c
@@ -9,9 +9,7 @@
#include <zebra.h>
int /* return checksum in low-order 16 bits */
-in_cksum(ptr, nbytes)
-register u_short *ptr;
-register int nbytes;
+in_cksum(u_short *ptr, int nbytes)
{
register long sum; /* assumes long == 32 bits */
u_short oddbyte;
diff --git a/lib/command.c b/lib/command.c
index 9b5f75f2..83b8a956 100644
--- a/lib/command.c
+++ b/lib/command.c
@@ -1,5 +1,5 @@
/*
- $Id: command.c,v 1.47 2005/04/25 16:26:42 paul Exp $
+ $Id: command.c,v 1.48 2005/05/06 21:25:49 paul Exp $
Command interpreter routine for virtual terminal [aka TeletYpe]
Copyright (C) 1997, 98, 99 Kunihiro Ishiguro
@@ -193,8 +193,8 @@ install_node (struct cmd_node *node,
static int
cmp_node (const void *p, const void *q)
{
- struct cmd_element *a = *(struct cmd_element **)p;
- struct cmd_element *b = *(struct cmd_element **)q;
+ const struct cmd_element *a = *(struct cmd_element **)p;
+ const struct cmd_element *b = *(struct cmd_element **)q;
return strcmp (a->string, b->string);
}
@@ -202,8 +202,8 @@ cmp_node (const void *p, const void *q)
static int
cmp_desc (const void *p, const void *q)
{
- struct desc *a = *(struct desc **)p;
- struct desc *b = *(struct desc **)q;
+ const struct desc *a = *(struct desc **)p;
+ const struct desc *b = *(struct desc **)q;
return strcmp (a->cmd, b->cmd);
}
diff --git a/lib/command.h b/lib/command.h
index 6fd42fa1..5328888a 100644
--- a/lib/command.h
+++ b/lib/command.h
@@ -318,27 +318,27 @@ struct desc
#endif /* HAVE_IPV6 */
/* Prototypes. */
-void install_node (struct cmd_node *, int (*) (struct vty *));
-void install_default (enum node_type);
-void install_element (enum node_type, struct cmd_element *);
-void sort_node ();
+extern void install_node (struct cmd_node *, int (*) (struct vty *));
+extern void install_default (enum node_type);
+extern void install_element (enum node_type, struct cmd_element *);
+extern void sort_node (void);
/* Concatenates argv[shift] through argv[argc-1] into a single NUL-terminated
string with a space between each element (allocated using
XMALLOC(MTYPE_TMP)). Returns NULL if shift >= argc. */
-char *argv_concat (const char **argv, int argc, int shift);
-
-vector cmd_make_strvec (const char *);
-void cmd_free_strvec (vector);
-vector cmd_describe_command ();
-char **cmd_complete_command ();
-const char *cmd_prompt (enum node_type);
-int config_from_file (struct vty *, FILE *);
-enum node_type node_parent (enum node_type);
-int cmd_execute_command (vector, struct vty *, struct cmd_element **, int);
-int cmd_execute_command_strict (vector, struct vty *, struct cmd_element **);
-void config_replace_string (struct cmd_element *, char *, ...);
-void cmd_init (int);
+extern char *argv_concat (const char **argv, int argc, int shift);
+
+extern vector cmd_make_strvec (const char *);
+extern void cmd_free_strvec (vector);
+extern vector cmd_describe_command (vector, struct vty *, int *status);
+extern char **cmd_complete_command (vector, struct vty *, int *status);
+extern const char *cmd_prompt (enum node_type);
+extern int config_from_file (struct vty *, FILE *);
+extern enum node_type node_parent (enum node_type);
+extern int cmd_execute_command (vector, struct vty *, struct cmd_element **, int);
+extern int cmd_execute_command_strict (vector, struct vty *, struct cmd_element **);
+extern void config_replace_string (struct cmd_element *, char *, ...);
+extern void cmd_init (int);
/* Export typical functions. */
extern struct cmd_element config_end_cmd;
@@ -346,9 +346,9 @@ extern struct cmd_element config_exit_cmd;
extern struct cmd_element config_quit_cmd;
extern struct cmd_element config_help_cmd;
extern struct cmd_element config_list_cmd;
-char *host_config_file ();
-void host_config_set (char *);
-
-void print_version (const char *);
+extern char *host_config_file (void);
+extern void host_config_set (char *);
+extern void print_version (const char *);
+
#endif /* _ZEBRA_COMMAND_H */
diff --git a/lib/distribute.c b/lib/distribute.c
index 48eb0403..3d616211 100644
--- a/lib/distribute.c
+++ b/lib/distribute.c
@@ -35,8 +35,8 @@ struct hash *disthash;
void (*distribute_add_hook) (struct distribute *);
void (*distribute_delete_hook) (struct distribute *);
-struct distribute *
-distribute_new ()
+static struct distribute *
+distribute_new (void)
{
struct distribute *new;
@@ -47,7 +47,7 @@ distribute_new ()
}
/* Free distribute object. */
-void
+static void
distribute_free (struct distribute *dist)
{
if (dist->ifname)
@@ -93,7 +93,7 @@ distribute_list_delete_hook (void (*func) (struct distribute *))
distribute_delete_hook = func;
}
-void *
+static void *
distribute_hash_alloc (struct distribute *arg)
{
struct distribute *dist;
@@ -107,7 +107,7 @@ distribute_hash_alloc (struct distribute *arg)
}
/* Make new distribute list and push into hash. */
-struct distribute *
+static struct distribute *
distribute_get (const char *ifname)
{
struct distribute key;
@@ -115,10 +115,10 @@ distribute_get (const char *ifname)
/* temporary reference */
key.ifname = (char *)ifname;
- return hash_get (disthash, &key, distribute_hash_alloc);
+ return hash_get (disthash, &key, (void * (*) (void *))distribute_hash_alloc);
}
-unsigned int
+static unsigned int
distribute_hash_make (struct distribute *dist)
{
unsigned int i, key;
@@ -133,7 +133,7 @@ distribute_hash_make (struct distribute *dist)
/* If two distribute-list have same value then return 1 else return
0. This function is used by hash package. */
-int
+static int
distribute_cmp (struct distribute *dist1, struct distribute *dist2)
{
if (dist1->ifname && dist2->ifname)
@@ -145,7 +145,7 @@ distribute_cmp (struct distribute *dist1, struct distribute *dist2)
}
/* Set access-list name to the distribute list. */
-struct distribute *
+static struct distribute *
distribute_list_set (const char *ifname, enum distribute_type type,
const char *alist_name)
{
@@ -174,7 +174,7 @@ distribute_list_set (const char *ifname, enum distribute_type type,
/* Unset distribute-list. If matched distribute-list exist then
return 1. */
-int
+static int
distribute_list_unset (const char *ifname, enum distribute_type type,
const char *alist_name)
{
@@ -223,7 +223,7 @@ distribute_list_unset (const char *ifname, enum distribute_type type,
}
/* Set access-list name to the distribute list. */
-struct distribute *
+static struct distribute *
distribute_list_prefix_set (const char *ifname, enum distribute_type type,
const char *plist_name)
{
@@ -252,7 +252,7 @@ distribute_list_prefix_set (const char *ifname, enum distribute_type type,
/* Unset distribute-list. If matched distribute-list exist then
return 1. */
-int
+static int
distribute_list_prefix_unset (const char *ifname, enum distribute_type type,
const char *plist_name)
{
@@ -768,7 +768,8 @@ distribute_list_reset ()
void
distribute_list_init (int node)
{
- disthash = hash_create (distribute_hash_make, distribute_cmp);
+ disthash = hash_create ((unsigned int (*) (void *)) distribute_hash_make,
+ (int (*) (void *, void *)) distribute_cmp);
if(node==RIP_NODE) {
install_element (RIP_NODE, &distribute_list_all_cmd);
diff --git a/lib/distribute.h b/lib/distribute.h
index 77bb8758..a1bec03a 100644
--- a/lib/distribute.h
+++ b/lib/distribute.h
@@ -43,15 +43,15 @@ struct distribute
};
/* Prototypes for distribute-list. */
-void distribute_list_init (int);
-void distribute_list_reset (void);
-void distribute_list_add_hook (void (*) (struct distribute *));
-void distribute_list_delete_hook (void (*) (struct distribute *));
-struct distribute *distribute_lookup (const char *);
-int config_write_distribute (struct vty *);
-int config_show_distribute (struct vty *);
-
-enum filter_type distribute_apply_in (struct interface *, struct prefix *);
-enum filter_type distribute_apply_out (struct interface *, struct prefix *);
+extern void distribute_list_init (int);
+extern void distribute_list_reset (void);
+extern void distribute_list_add_hook (void (*) (struct distribute *));
+extern void distribute_list_delete_hook (void (*) (struct distribute *));
+extern struct distribute *distribute_lookup (const char *);
+extern int config_write_distribute (struct vty *);
+extern int config_show_distribute (struct vty *);
+
+extern enum filter_type distribute_apply_in (struct interface *, struct prefix *);
+extern enum filter_type distribute_apply_out (struct interface *, struct prefix *);
#endif /* _ZEBRA_DISTRIBUTE_H */
diff --git a/lib/filter.c b/lib/filter.c
index 0dd7a775..55bcdf4b 100644
--- a/lib/filter.c
+++ b/lib/filter.c
@@ -84,10 +84,10 @@ struct access_master
struct access_list_list str;
/* Hook function which is executed when new access_list is added. */
- void (*add_hook) ();
+ void (*add_hook) (struct access_list *);
/* Hook function which is executed when access_list is deleted. */
- void (*delete_hook) ();
+ void (*delete_hook) (struct access_list *);
};
/* Static structure for IPv4 access_list's master. */
@@ -110,7 +110,7 @@ static struct access_master access_master_ipv6 =
};
#endif /* HAVE_IPV6 */
-struct access_master *
+static struct access_master *
access_master_get (afi_t afi)
{
if (afi == AFI_IP)
@@ -123,14 +123,14 @@ access_master_get (afi_t afi)
}
/* Allocate new filter structure. */
-struct filter *
-filter_new ()
+static struct filter *
+filter_new (void)
{
return (struct filter *) XCALLOC (MTYPE_ACCESS_FILTER,
sizeof (struct filter));
}
-void
+static void
filter_free (struct filter *filter)
{
XFREE (MTYPE_ACCESS_FILTER, filter);
@@ -209,22 +209,22 @@ filter_match_zebra (struct filter *mfilter, struct prefix *p)
}
/* Allocate new access list structure. */
-struct access_list *
-access_list_new ()
+static struct access_list *
+access_list_new (void)
{
return (struct access_list *) XCALLOC (MTYPE_ACCESS_LIST,
sizeof (struct access_list));
}
/* Free allocated access_list. */
-void
+static void
access_list_free (struct access_list *access)
{
XFREE (MTYPE_ACCESS_LIST, access);
}
/* Delete access_list from access_master and free it. */
-void
+static void
access_list_delete (struct access_list *access)
{
struct filter *filter;
@@ -266,7 +266,7 @@ access_list_delete (struct access_list *access)
/* Insert new access list to list of access_list. Each acceess_list
is sorted by the name. */
-struct access_list *
+static struct access_list *
access_list_insert (afi_t afi, const char *name)
{
unsigned int i;
@@ -383,7 +383,7 @@ access_list_lookup (afi_t afi, const char *name)
/* Get access list from list of access_list. If there isn't matched
access_list create new one and return it. */
-struct access_list *
+static struct access_list *
access_list_get (afi_t afi, const char *name)
{
struct access_list *access;
@@ -444,7 +444,7 @@ access_list_delete_hook (void (*func) (struct access_list *access))
}
/* Add new filter to the end of specified access_list. */
-void
+static void
access_list_filter_add (struct access_list *access, struct filter *filter)
{
filter->next = NULL;
@@ -473,7 +473,7 @@ access_list_empty (struct access_list *access)
/* Delete filter from specified access_list. If there is hook
function execute it. */
-void
+static void
access_list_filter_delete (struct access_list *access, struct filter *filter)
{
struct access_master *master;
@@ -513,7 +513,7 @@ access_list_filter_delete (struct access_list *access, struct filter *filter)
host A single host address
*/
-struct filter *
+static struct filter *
filter_lookup_cisco (struct access_list *access, struct filter *mnew)
{
struct filter *mfilter;
@@ -547,7 +547,7 @@ filter_lookup_cisco (struct access_list *access, struct filter *mnew)
return NULL;
}
-struct filter *
+static struct filter *
filter_lookup_zebra (struct access_list *access, struct filter *mnew)
{
struct filter *mfilter;
@@ -568,7 +568,7 @@ filter_lookup_zebra (struct access_list *access, struct filter *mnew)
return NULL;
}
-int
+static int
vty_access_list_remark_unset (struct vty *vty, afi_t afi, const char *name)
{
struct access_list *access;
@@ -593,7 +593,7 @@ vty_access_list_remark_unset (struct vty *vty, afi_t afi, const char *name)
return CMD_SUCCESS;
}
-int
+static int
filter_set_cisco (struct vty *vty, const char *name_str, const char *type_str,
const char *addr_str, const char *addr_mask_str,
const char *mask_str, const char *mask_mask_str,
@@ -1152,7 +1152,7 @@ DEFUN (no_access_list_extended_host_any,
"255.255.255.255", 1, 0);
}
-int
+static int
filter_set_zebra (struct vty *vty, const char *name_str, const char *type_str,
afi_t afi, const char *prefix_str, int exact, int set)
{
@@ -1567,7 +1567,7 @@ void config_write_access_zebra (struct vty *, struct filter *);
void config_write_access_cisco (struct vty *, struct filter *);
/* show access-list command. */
-int
+static int
filter_show (struct vty *vty, const char *name, afi_t afi)
{
struct access_list *access;
@@ -1782,7 +1782,7 @@ config_write_access_zebra (struct vty *vty, struct filter *mfilter)
vty_out (vty, "%s", VTY_NEWLINE);
}
-int
+static int
config_write_access (struct vty *vty, afi_t afi)
{
struct access_list *access;
@@ -1858,14 +1858,14 @@ struct cmd_node access_node =
1
};
-int
+static int
config_write_access_ipv4 (struct vty *vty)
{
return config_write_access (vty, AFI_IP);
}
-void
-access_list_reset_ipv4 ()
+static void
+access_list_reset_ipv4 (void)
{
struct access_list *access;
struct access_list *next;
@@ -1894,8 +1894,8 @@ access_list_reset_ipv4 ()
}
/* Install vty related command. */
-void
-access_list_init_ipv4 ()
+static void
+access_list_init_ipv4 (void)
{
install_node (&access_node, config_write_access_ipv4);
@@ -1954,14 +1954,14 @@ struct cmd_node access_ipv6_node =
1
};
-int
+static int
config_write_access_ipv6 (struct vty *vty)
{
return config_write_access (vty, AFI_IP6);
}
-void
-access_list_reset_ipv6 ()
+static void
+access_list_reset_ipv6 (void)
{
struct access_list *access;
struct access_list *next;
@@ -1989,8 +1989,8 @@ access_list_reset_ipv6 ()
assert (master->str.tail == NULL);
}
-void
-access_list_init_ipv6 ()
+static void
+access_list_init_ipv6 (void)
{
install_node (&access_ipv6_node, config_write_access_ipv6);
diff --git a/lib/filter.h b/lib/filter.h
index a33e7bfe..37535cb1 100644
--- a/lib/filter.h
+++ b/lib/filter.h
@@ -57,11 +57,11 @@ struct access_list
};
/* Prototypes for access-list. */
-void access_list_init (void);
-void access_list_reset (void);
-void access_list_add_hook (void (*func)(struct access_list *));
-void access_list_delete_hook (void (*func)(struct access_list *));
-struct access_list *access_list_lookup (afi_t, const char *);
-enum filter_type access_list_apply (struct access_list *, void *);
+extern void access_list_init (void);
+extern void access_list_reset (void);
+extern void access_list_add_hook (void (*func)(struct access_list *));
+extern void access_list_delete_hook (void (*func)(struct access_list *));
+extern struct access_list *access_list_lookup (afi_t, const char *);
+extern enum filter_type access_list_apply (struct access_list *, void *);
#endif /* _ZEBRA_FILTER_H */
diff --git a/lib/getopt.h b/lib/getopt.h
index fb30719a..c4519b7f 100644
--- a/lib/getopt.h
+++ b/lib/getopt.h
@@ -105,7 +105,7 @@ struct option
errors, only prototype getopt for the GNU C library. */
extern int getopt (int argc, char *const *argv, const char *shortopts);
#else /* not __GNU_LIBRARY__ */
-extern int getopt ();
+extern int getopt (void);
#endif /* __GNU_LIBRARY__ */
extern int getopt_long (int argc, char *const *argv, const char *shortopts,
const struct option *longopts, int *longind);
diff --git a/lib/hash.c b/lib/hash.c
index 04549ada..76bf802a 100644
--- a/lib/hash.c
+++ b/lib/hash.c
@@ -26,8 +26,8 @@
/* Allocate a new hash. */
struct hash *
-hash_create_size (unsigned int size,
- unsigned int (*hash_key) (), int (*hash_cmp) ())
+hash_create_size (unsigned int size, unsigned int (*hash_key) (void *),
+ int (*hash_cmp) (void *, void *))
{
struct hash *hash;
@@ -45,7 +45,8 @@ hash_create_size (unsigned int size,
/* Allocate a new hash with default hash size. */
struct hash *
-hash_create (unsigned int (*hash_key) (), int (*hash_cmp) ())
+hash_create (unsigned int (*hash_key) (void *),
+ int (*hash_cmp) (void *, void *))
{
return hash_create_size (HASHTABSIZE, hash_key, hash_cmp);
}
@@ -63,7 +64,7 @@ hash_alloc_intern (void *arg)
corresponding hash backet and alloc_func is specified, create new
hash backet. */
void *
-hash_get (struct hash *hash, void *data, void * (*alloc_func) ())
+hash_get (struct hash *hash, void *data, void * (*alloc_func) (void *))
{
unsigned int key;
unsigned int index;
diff --git a/lib/hash.h b/lib/hash.h
index 715e53b5..a6e3d59a 100644
--- a/lib/hash.h
+++ b/lib/hash.h
@@ -45,27 +45,29 @@ struct hash
unsigned int size;
/* Key make function. */
- unsigned int (*hash_key) ();
+ unsigned int (*hash_key) (void *);
/* Data compare function. */
- int (*hash_cmp) ();
+ int (*hash_cmp) (void *, void *);
/* Backet alloc. */
unsigned long count;
};
-struct hash *hash_create (unsigned int (*) (), int (*) ());
-struct hash *hash_create_size (unsigned int, unsigned int (*) (), int (*) ());
+extern struct hash *hash_create (unsigned int (*) (void *),
+ int (*) (void *, void *));
+extern struct hash *hash_create_size (unsigned int, unsigned int (*) (void *),
+ int (*) (void *, void *));
-void *hash_get (struct hash *, void *, void * (*) ());
-void *hash_alloc_intern (void *);
-void *hash_lookup (struct hash *, void *);
-void *hash_release (struct hash *, void *);
+extern void *hash_get (struct hash *, void *, void * (*) (void *));
+extern void *hash_alloc_intern (void *);
+extern void *hash_lookup (struct hash *, void *);
+extern void *hash_release (struct hash *, void *);
-void hash_iterate (struct hash *,
+extern void hash_iterate (struct hash *,
void (*) (struct hash_backet *, void *), void *);
-void hash_clean (struct hash *, void (*) (void *));
-void hash_free (struct hash *);
+extern void hash_clean (struct hash *, void (*) (void *));
+extern void hash_free (struct hash *);
#endif /* _ZEBRA_HASH_H */
diff --git a/lib/if.c b/lib/if.c
index 35fe9caa..a57da352 100644
--- a/lib/if.c
+++ b/lib/if.c
@@ -191,13 +191,13 @@ if_lookup_by_index (unsigned int index)
return NULL;
}
-char *
+const char *
ifindex2ifname (unsigned int index)
{
struct interface *ifp;
return ((ifp = if_lookup_by_index(index)) != NULL) ?
- ifp->name : (char *)"unknown";
+ ifp->name : "unknown";
}
unsigned int
@@ -434,7 +434,7 @@ if_flag_dump (unsigned long flag)
}
/* For debugging */
-void
+static void
if_dump (struct interface *ifp)
{
struct listnode *node;
@@ -587,7 +587,7 @@ DEFUN (show_address,
/* Allocate connected structure. */
struct connected *
-connected_new ()
+connected_new (void)
{
struct connected *new = XMALLOC (MTYPE_CONNECTED, sizeof (struct connected));
memset (new, 0, sizeof (struct connected));
@@ -611,7 +611,7 @@ connected_free (struct connected *connected)
}
/* Print if_addr structure. */
-void
+static void __attribute__ ((unused))
connected_log (struct connected *connected, char *str)
{
struct prefix *p;
@@ -637,7 +637,7 @@ connected_log (struct connected *connected, char *str)
}
/* If two connected address has same prefix return 1. */
-int
+static int
connected_same_prefix (struct prefix *p1, struct prefix *p2)
{
if (p1->family == p2->family)
@@ -767,13 +767,16 @@ if_indextoname (unsigned int ifindex, char *name)
}
#endif
+#if 0 /* this route_table of struct connected's is unused
+ * however, it would be good to use a route_table rather than
+ * a list..
+ */
/* Interface looking up by interface's address. */
-
/* Interface's IPv4 address reverse lookup table. */
struct route_table *ifaddr_ipv4_table;
/* struct route_table *ifaddr_ipv6_table; */
-void
+static void
ifaddr_ipv4_add (struct in_addr *ifaddr, struct interface *ifp)
{
struct route_node *rn;
@@ -794,7 +797,7 @@ ifaddr_ipv4_add (struct in_addr *ifaddr, struct interface *ifp)
rn->info = ifp;
}
-void
+static void
ifaddr_ipv4_delete (struct in_addr *ifaddr, struct interface *ifp)
{
struct route_node *rn;
@@ -817,7 +820,7 @@ ifaddr_ipv4_delete (struct in_addr *ifaddr, struct interface *ifp)
}
/* Lookup interface by interface's IP address or interface index. */
-struct interface *
+static struct interface *
ifaddr_ipv4_lookup (struct in_addr *addr, unsigned int ifindex)
{
struct prefix_ipv4 p;
@@ -841,13 +844,16 @@ ifaddr_ipv4_lookup (struct in_addr *addr, unsigned int ifindex)
else
return if_lookup_by_index(ifindex);
}
+#endif /* ifaddr_ipv4_table */
/* Initialize interface list. */
void
-if_init ()
+if_init (void)
{
iflist = list_new ();
+#if 0
ifaddr_ipv4_table = route_table_init ();
+#endif /* ifaddr_ipv4_table */
if (iflist) {
iflist->cmp = (int (*)(void *, void *))if_cmp_func;
diff --git a/lib/if.h b/lib/if.h
index 6946865c..8126ea9c 100644
--- a/lib/if.h
+++ b/lib/if.h
@@ -211,16 +211,16 @@ struct connected
#endif /* IFF_VIRTUAL */
/* Prototypes. */
-int if_cmp_func (struct interface *, struct interface *);
-struct interface *if_create (const char *name, int namelen);
-struct interface *if_lookup_by_index (unsigned int);
-struct interface *if_lookup_exact_address (struct in_addr);
-struct interface *if_lookup_address (struct in_addr);
+extern int if_cmp_func (struct interface *, struct interface *);
+extern struct interface *if_create (const char *name, int namelen);
+extern struct interface *if_lookup_by_index (unsigned int);
+extern struct interface *if_lookup_exact_address (struct in_addr);
+extern struct interface *if_lookup_address (struct in_addr);
/* These 2 functions are to be used when the ifname argument is terminated
by a '\0' character: */
-struct interface *if_lookup_by_name (const char *ifname);
-struct interface *if_get_by_name (const char *ifname);
+extern struct interface *if_lookup_by_name (const char *ifname);
+extern struct interface *if_get_by_name (const char *ifname);
/* For these 2 functions, the namelen argument should be the precise length
of the ifname string (not counting any optional trailing '\0' character).
@@ -239,22 +239,22 @@ extern void if_delete_retain (struct interface *);
deletes it from the interface list and frees the structure. */
extern void if_delete (struct interface *);
-int if_is_up (struct interface *);
-int if_is_running (struct interface *);
-int if_is_operative (struct interface *);
-int if_is_loopback (struct interface *);
-int if_is_broadcast (struct interface *);
-int if_is_pointopoint (struct interface *);
-int if_is_multicast (struct interface *);
-void if_add_hook (int, int (*)(struct interface *));
-void if_init ();
-void if_dump_all ();
+extern int if_is_up (struct interface *);
+extern int if_is_running (struct interface *);
+extern int if_is_operative (struct interface *);
+extern int if_is_loopback (struct interface *);
+extern int if_is_broadcast (struct interface *);
+extern int if_is_pointopoint (struct interface *);
+extern int if_is_multicast (struct interface *);
+extern void if_add_hook (int, int (*)(struct interface *));
+extern void if_init (void);
+extern void if_dump_all (void);
extern const char *if_flag_dump(unsigned long);
/* Please use ifindex2ifname instead of if_indextoname where possible;
ifindex2ifname uses internal interface info, whereas if_indextoname must
make a system call. */
-extern char *ifindex2ifname (unsigned int);
+extern const char *ifindex2ifname (unsigned int);
/* Please use ifname2ifindex instead of if_nametoindex where possible;
ifname2ifindex uses internal interface info, whereas if_nametoindex must
@@ -262,22 +262,22 @@ extern char *ifindex2ifname (unsigned int);
extern unsigned int ifname2ifindex(const char *ifname);
/* Connected address functions. */
-struct connected *connected_new ();
-void connected_free (struct connected *);
-void connected_add (struct interface *, struct connected *);
-struct connected *connected_add_by_prefix (struct interface *,
+extern struct connected *connected_new (void);
+extern void connected_free (struct connected *);
+extern void connected_add (struct interface *, struct connected *);
+extern struct connected *connected_add_by_prefix (struct interface *,
struct prefix *,
struct prefix *);
-struct connected *connected_delete_by_prefix (struct interface *,
+extern struct connected *connected_delete_by_prefix (struct interface *,
struct prefix *);
-struct connected *connected_lookup_address (struct interface *,
+extern struct connected *connected_lookup_address (struct interface *,
struct in_addr);
#ifndef HAVE_IF_NAMETOINDEX
-unsigned int if_nametoindex (const char *);
+extern unsigned int if_nametoindex (const char *);
#endif
#ifndef HAVE_IF_INDEXTONAME
-char *if_indextoname (unsigned int, char *);
+extern char *if_indextoname (unsigned int, char *);
#endif
/* Exported variables. */
diff --git a/lib/if_rmap.c b/lib/if_rmap.c
index 3f95af39..6730e94c 100644
--- a/lib/if_rmap.c
+++ b/lib/if_rmap.c
@@ -30,11 +30,11 @@
struct hash *ifrmaphash;
/* Hook functions. */
-void (*if_rmap_add_hook) (struct if_rmap *) = NULL;
-void (*if_rmap_delete_hook) (struct if_rmap *) = NULL;
+static void (*if_rmap_add_hook) (struct if_rmap *) = NULL;
+static void (*if_rmap_delete_hook) (struct if_rmap *) = NULL;
-struct if_rmap *
-if_rmap_new ()
+static struct if_rmap *
+if_rmap_new (void)
{
struct if_rmap *new;
@@ -43,7 +43,7 @@ if_rmap_new ()
return new;
}
-void
+static void
if_rmap_free (struct if_rmap *if_rmap)
{
if (if_rmap->ifname)
@@ -83,18 +83,19 @@ if_rmap_hook_delete (void (*func) (struct if_rmap *))
if_rmap_delete_hook = func;
}
-void *
-if_rmap_hash_alloc (struct if_rmap *arg)
+static void *
+if_rmap_hash_alloc (void *arg)
{
+ struct if_rmap *ifarg = arg;
struct if_rmap *if_rmap;
if_rmap = if_rmap_new ();
- if_rmap->ifname = strdup (arg->ifname);
+ if_rmap->ifname = strdup (ifarg->ifname);
return if_rmap;
}
-struct if_rmap *
+static struct if_rmap *
if_rmap_get (const char *ifname)
{
struct if_rmap key;
@@ -105,9 +106,10 @@ if_rmap_get (const char *ifname)
return (struct if_rmap *) hash_get (ifrmaphash, &key, if_rmap_hash_alloc);
}
-unsigned int
-if_rmap_hash_make (struct if_rmap *if_rmap)
+static unsigned int
+if_rmap_hash_make (void *data)
{
+ struct if_rmap *if_rmap = data;
unsigned int i, key;
key = 0;
@@ -117,15 +119,17 @@ if_rmap_hash_make (struct if_rmap *if_rmap)
return key;
}
-int
-if_rmap_hash_cmp (struct if_rmap *if_rmap1, struct if_rmap *if_rmap2)
+static int
+if_rmap_hash_cmp (void *arg1, void* arg2)
{
+ struct if_rmap *if_rmap1 = arg1;
+ struct if_rmap *if_rmap2 = arg2;
if (strcmp (if_rmap1->ifname, if_rmap2->ifname) == 0)
return 1;
return 0;
}
-struct if_rmap *
+static struct if_rmap *
if_rmap_set (const char *ifname, enum if_rmap_type type,
const char *routemap_name)
{
@@ -152,7 +156,7 @@ if_rmap_set (const char *ifname, enum if_rmap_type type,
return if_rmap;
}
-int
+static int
if_rmap_unset (const char *ifname, enum if_rmap_type type,
const char *routemap_name)
{
diff --git a/lib/if_rmap.h b/lib/if_rmap.h
index 540d68fc..e6c2966f 100644
--- a/lib/if_rmap.h
+++ b/lib/if_rmap.h
@@ -37,11 +37,11 @@ struct if_rmap
char *routemap[IF_RMAP_MAX];
};
-void if_rmap_init (int);
-void if_rmap_reset (void);
-void if_rmap_hook_add (void (*) (struct if_rmap *));
-void if_rmap_hook_delete (void (*) (struct if_rmap *));
-struct if_rmap *if_rmap_lookup (const char *);
-int config_write_if_rmap (struct vty *);
+extern void if_rmap_init (int);
+extern void if_rmap_reset (void);
+extern void if_rmap_hook_add (void (*) (struct if_rmap *));
+extern void if_rmap_hook_delete (void (*) (struct if_rmap *));
+extern struct if_rmap *if_rmap_lookup (const char *);
+extern int config_write_if_rmap (struct vty *);
#endif /* _ZEBRA_IF_RMAP_H */
diff --git a/lib/jhash.h b/lib/jhash.h
index 86a721c9..44dd1b56 100644
--- a/lib/jhash.h
+++ b/lib/jhash.h
@@ -24,12 +24,12 @@
* of bytes. No alignment or length assumptions are made about
* the input key.
*/
-u_int32_t jhash(void *key, u_int32_t length, u_int32_t initval);
+extern u_int32_t jhash(void *key, u_int32_t length, u_int32_t initval);
/* A special optimized version that handles 1 or more of u_int32_ts.
* The length parameter here is the number of u_int32_ts in the key.
*/
-u_int32_t jhash2(u_int32_t *k, u_int32_t length, u_int32_t initval);
+extern u_int32_t jhash2(u_int32_t *k, u_int32_t length, u_int32_t initval);
/* A special ultra-optimized versions that knows they are hashing exactly
* 3, 2 or 1 word(s).
@@ -37,8 +37,8 @@ u_int32_t jhash2(u_int32_t *k, u_int32_t length, u_int32_t initval);
* NOTE: In partilar the "c += length; __jhash_mix(a,b,c);" normally
* done at the end is not done here.
*/
-u_int32_t jhash_3words(u_int32_t a, u_int32_t b, u_int32_t c, u_int32_t initval);
-u_int32_t jhash_2words(u_int32_t a, u_int32_t b, u_int32_t initval);
-u_int32_t jhash_1word(u_int32_t a, u_int32_t initval);
+extern u_int32_t jhash_3words(u_int32_t a, u_int32_t b, u_int32_t c, u_int32_t initval);
+extern u_int32_t jhash_2words(u_int32_t a, u_int32_t b, u_int32_t initval);
+extern u_int32_t jhash_1word(u_int32_t a, u_int32_t initval);
#endif /* _QUAGGA_JHASH_H */
diff --git a/lib/keychain.c b/lib/keychain.c
index 2b5b0684..10928b11 100644
--- a/lib/keychain.c
+++ b/lib/keychain.c
@@ -28,8 +28,8 @@ Boston, MA 02111-1307, USA. */
/* Master list of key chain. */
struct list *keychain_list;
-struct keychain *
-keychain_new ()
+static struct keychain *
+keychain_new (void)
{
struct keychain *new;
new = XMALLOC (MTYPE_KEYCHAIN, sizeof (struct keychain));
@@ -37,14 +37,14 @@ keychain_new ()
return new;
}
-void
+static void
keychain_free (struct keychain *keychain)
{
XFREE (MTYPE_KEYCHAIN, keychain);
}
-struct key *
-key_new ()
+static struct key *
+key_new (void)
{
struct key *new;
new = XMALLOC (MTYPE_KEY, sizeof (struct key));
@@ -52,7 +52,7 @@ key_new ()
return new;
}
-void
+static void
key_free (struct key *key)
{
XFREE (MTYPE_KEY, key);
@@ -75,9 +75,12 @@ keychain_lookup (const char *name)
return NULL;
}
-int
-key_cmp_func (const struct key *k1, const struct key *k2)
+static int
+key_cmp_func (void *arg1, void *arg2)
{
+ const struct key *k1 = arg1;
+ const struct key *k2 = arg2;
+
if (k1->index > k2->index)
return 1;
if (k1->index < k2->index)
@@ -85,7 +88,7 @@ key_cmp_func (const struct key *k1, const struct key *k2)
return 0;
}
-void
+static void
key_delete_func (struct key *key)
{
if (key->string)
@@ -93,7 +96,7 @@ key_delete_func (struct key *key)
key_free (key);
}
-struct keychain *
+static struct keychain *
keychain_get (const char *name)
{
struct keychain *keychain;
@@ -113,7 +116,7 @@ keychain_get (const char *name)
return keychain;
}
-void
+static void
keychain_delete (struct keychain *keychain)
{
if (keychain->name)
@@ -124,7 +127,7 @@ keychain_delete (struct keychain *keychain)
keychain_free (keychain);
}
-struct key *
+static struct key *
key_lookup (const struct keychain *keychain, u_int32_t index)
{
struct listnode *node;
@@ -203,7 +206,7 @@ key_lookup_for_send (const struct keychain *keychain)
return NULL;
}
-struct key *
+static struct key *
key_get (const struct keychain *keychain, u_int32_t index)
{
struct key *key;
@@ -220,7 +223,7 @@ key_get (const struct keychain *keychain, u_int32_t index)
return key;
}
-void
+static void
key_delete (struct keychain *keychain, struct key *key)
{
listnode_delete (keychain->key, key);
@@ -356,7 +359,7 @@ DEFUN (no_key_string,
/* Convert HH:MM:SS MON DAY YEAR to time_t value. -1 is returned when
given string is malformed. */
-time_t
+static time_t
key_str2time (const char *time_str, const char *day_str, const char *month_str,
const char *year_str)
{
@@ -366,7 +369,6 @@ key_str2time (const char *time_str, const char *day_str, const char *month_str,
time_t time;
unsigned int sec, min, hour;
unsigned int day, month, year;
- char *endptr = NULL;
const char *month_name[] =
{
@@ -385,6 +387,18 @@ key_str2time (const char *time_str, const char *day_str, const char *month_str,
NULL
};
+#define GET_LONG_RANGE(V,STR,MIN,MAX) \
+{ \
+ unsigned long tmpl; \
+ char *endptr = NULL; \
+ tmpl = strtoul ((STR), &endptr, 10); \
+ if (*endptr != '\0' || tmpl == ULONG_MAX) \
+ return -1; \
+ if ( tmpl < (MIN) || tmpl > (MAX)) \
+ return -1; \
+ (V) = tmpl; \
+}
+
/* Check hour field of time_str. */
colon = strchr (time_str, ':');
if (colon == NULL)
@@ -392,9 +406,7 @@ key_str2time (const char *time_str, const char *day_str, const char *month_str,
*colon = '\0';
/* Hour must be between 0 and 23. */
- hour = strtoul (time_str, &endptr, 10);
- if (hour == ULONG_MAX || *endptr != '\0' || hour < 0 || hour > 23)
- return -1;
+ GET_LONG_RANGE (hour, time_str, 0, 23);
/* Check min field of time_str. */
time_str = colon + 1;
@@ -404,9 +416,7 @@ key_str2time (const char *time_str, const char *day_str, const char *month_str,
*colon = '\0';
/* Min must be between 0 and 59. */
- min = strtoul (time_str, &endptr, 10);
- if (min == ULONG_MAX || *endptr != '\0' || min < 0 || min > 59)
- return -1;
+ GET_LONG_RANGE (min, time_str, 0, 59);
/* Check sec field of time_str. */
time_str = colon + 1;
@@ -414,14 +424,10 @@ key_str2time (const char *time_str, const char *day_str, const char *month_str,
return -1;
/* Sec must be between 0 and 59. */
- sec = strtoul (time_str, &endptr, 10);
- if (sec == ULONG_MAX || *endptr != '\0' || sec < 0 || sec > 59)
- return -1;
+ GET_LONG_RANGE (sec, time_str, 0, 59);
/* Check day_str. Day must be <1-31>. */
- day = strtoul (day_str, &endptr, 10);
- if (day == ULONG_MAX || *endptr != '\0' || day < 0 || day > 31)
- return -1;
+ GET_LONG_RANGE (day, day_str, 1, 31);
/* Check month_str. Month must match month_name. */
month = 0;
@@ -436,9 +442,7 @@ key_str2time (const char *time_str, const char *day_str, const char *month_str,
return -1;
/* Check year_str. Year must be <1993-2035>. */
- year = strtoul (year_str, &endptr, 10);
- if (year == ULONG_MAX || *endptr != '\0' || year < 1993 || year > 2035)
- return -1;
+ GET_LONG_RANGE (year, year_str, 1993, 2035);
memset (&tm, 0, sizeof (struct tm));
tm.tm_sec = sec;
@@ -451,9 +455,10 @@ key_str2time (const char *time_str, const char *day_str, const char *month_str,
time = mktime (&tm);
return time;
+#undef GET_LONG_RANGE
}
-int
+static int
key_lifetime_set (struct vty *vty, struct key_range *krange,
const char *stime_str, const char *sday_str,
const char *smonth_str, const char *syear_str,
@@ -489,7 +494,7 @@ key_lifetime_set (struct vty *vty, struct key_range *krange,
return CMD_SUCCESS;
}
-int
+static int
key_lifetime_duration_set (struct vty *vty, struct key_range *krange,
const char *stime_str, const char *sday_str,
const char *smonth_str, const char *syear_str,
@@ -513,7 +518,7 @@ key_lifetime_duration_set (struct vty *vty, struct key_range *krange,
return CMD_SUCCESS;
}
-int
+static int
key_lifetime_infinite_set (struct vty *vty, struct key_range *krange,
const char *stime_str, const char *sday_str,
const char *smonth_str, const char *syear_str)
@@ -863,7 +868,7 @@ struct cmd_node keychain_key_node =
1
};
-int
+static int
keychain_strftime (char *buf, int bufsiz, time_t *time)
{
struct tm *tm;
@@ -876,7 +881,7 @@ keychain_strftime (char *buf, int bufsiz, time_t *time)
return len;
}
-int
+static int
keychain_config_write (struct vty *vty)
{
struct keychain *keychain;
diff --git a/lib/keychain.h b/lib/keychain.h
index e98c403f..f962864c 100644
--- a/lib/keychain.h
+++ b/lib/keychain.h
@@ -47,10 +47,10 @@ struct key
struct key_range accept;
};
-void keychain_init ();
-struct keychain *keychain_lookup (const char *);
-struct key *key_lookup_for_accept (const struct keychain *, u_int32_t);
-struct key *key_match_for_accept (const struct keychain *, const char *);
-struct key *key_lookup_for_send (const struct keychain *);
+extern void keychain_init (void);
+extern struct keychain *keychain_lookup (const char *);
+extern struct key *key_lookup_for_accept (const struct keychain *, u_int32_t);
+extern struct key *key_match_for_accept (const struct keychain *, const char *);
+extern struct key *key_lookup_for_send (const struct keychain *);
#endif /* _ZEBRA_KEYCHAIN_H */
diff --git a/lib/linklist.c b/lib/linklist.c
index 4c471533..71c4db82 100644
--- a/lib/linklist.c
+++ b/lib/linklist.c
@@ -26,7 +26,7 @@
/* Allocate new list. */
struct list *
-list_new ()
+list_new (void)
{
struct list *new;
@@ -44,7 +44,7 @@ list_free (struct list *l)
/* Allocate new listnode. Internal use only. */
static struct listnode *
-listnode_new ()
+listnode_new (void)
{
struct listnode *node;
diff --git a/lib/linklist.h b/lib/linklist.h
index 80b21f64..cc6867cd 100644
--- a/lib/linklist.h
+++ b/lib/linklist.h
@@ -62,26 +62,26 @@ struct list
#define listgetdata(X) (assert((X)->data != NULL), (X)->data)
/* Prototypes. */
-struct list *list_new(); /* encouraged: set list.del callback on new lists */
-void list_free (struct list *);
+extern struct list *list_new(void); /* encouraged: set list.del callback on new lists */
+extern void list_free (struct list *);
-void listnode_add (struct list *, void *);
-void listnode_add_sort (struct list *, void *);
-void listnode_add_after (struct list *, struct listnode *, void *);
-void listnode_delete (struct list *, void *);
-struct listnode *listnode_lookup (struct list *, void *);
-void *listnode_head (struct list *);
+extern void listnode_add (struct list *, void *);
+extern void listnode_add_sort (struct list *, void *);
+extern void listnode_add_after (struct list *, struct listnode *, void *);
+extern void listnode_delete (struct list *, void *);
+extern struct listnode *listnode_lookup (struct list *, void *);
+extern void *listnode_head (struct list *);
-void list_delete (struct list *);
-void list_delete_all_node (struct list *);
+extern void list_delete (struct list *);
+extern void list_delete_all_node (struct list *);
/* For ospfd and ospf6d. */
-void list_delete_node (struct list *, struct listnode *);
+extern void list_delete_node (struct list *, struct listnode *);
/* For ospf_spf.c */
-void list_add_node_prev (struct list *, struct listnode *, void *);
-void list_add_node_next (struct list *, struct listnode *, void *);
-void list_add_list (struct list *, struct list *);
+extern void list_add_node_prev (struct list *, struct listnode *, void *);
+extern void list_add_node_next (struct list *, struct listnode *, void *);
+extern void list_add_list (struct list *, struct list *);
/* List iteration macro.
* Usage: for (ALL_LIST_ELEMENTS (...) { ... }
diff --git a/lib/log.h b/lib/log.h
index 46c4f11d..0f058a8b 100644
--- a/lib/log.h
+++ b/lib/log.h
@@ -1,5 +1,5 @@
/*
- * $Id: log.h,v 1.17 2005/01/18 22:18:59 ajs Exp $
+ * $Id: log.h,v 1.18 2005/05/06 21:25:49 paul Exp $
*
* Zebra logging funcions.
* Copyright (C) 1997, 1998, 1999 Kunihiro Ishiguro
@@ -96,11 +96,11 @@ struct message
extern struct zlog *zlog_default;
/* Open zlog function */
-struct zlog *openzlog (const char *progname, zlog_proto_t protocol,
- int syslog_options, int syslog_facility);
+extern struct zlog *openzlog (const char *progname, zlog_proto_t protocol,
+ int syslog_options, int syslog_facility);
/* Close zlog function. */
-void closezlog (struct zlog *zl);
+extern void closezlog (struct zlog *zl);
/* GCC have printf type attribute check. */
#ifdef __GNUC__
@@ -110,41 +110,41 @@ void closezlog (struct zlog *zl);
#endif /* __GNUC__ */
/* Generic function for zlog. */
-void zlog (struct zlog *zl, int priority, const char *format, ...) PRINTF_ATTRIBUTE(3, 4);
+extern void zlog (struct zlog *zl, int priority, const char *format, ...) PRINTF_ATTRIBUTE(3, 4);
/* Handy zlog functions. */
-void zlog_err (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
-void zlog_warn (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
-void zlog_info (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
-void zlog_notice (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
-void zlog_debug (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
+extern void zlog_err (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
+extern void zlog_warn (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
+extern void zlog_info (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
+extern void zlog_notice (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
+extern void zlog_debug (const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
/* For bgpd's peer oriented log. */
-void plog_err (struct zlog *, const char *format, ...);
-void plog_warn (struct zlog *, const char *format, ...);
-void plog_info (struct zlog *, const char *format, ...);
-void plog_notice (struct zlog *, const char *format, ...);
-void plog_debug (struct zlog *, const char *format, ...);
+extern void plog_err (struct zlog *, const char *format, ...);
+extern void plog_warn (struct zlog *, const char *format, ...);
+extern void plog_info (struct zlog *, const char *format, ...);
+extern void plog_notice (struct zlog *, const char *format, ...);
+extern void plog_debug (struct zlog *, const char *format, ...);
/* Set logging level for the given destination. If the log_level
argument is ZLOG_DISABLED, then the destination is disabled.
This function should not be used for file logging (use zlog_set_file
or zlog_reset_file instead). */
-void zlog_set_level (struct zlog *zl, zlog_dest_t, int log_level);
+extern void zlog_set_level (struct zlog *zl, zlog_dest_t, int log_level);
/* Set logging to the given filename at the specified level. */
-int zlog_set_file (struct zlog *zl, const char *filename, int log_level);
+extern int zlog_set_file (struct zlog *zl, const char *filename, int log_level);
/* Disable file logging. */
-int zlog_reset_file (struct zlog *zl);
+extern int zlog_reset_file (struct zlog *zl);
/* Rotate log. */
-int zlog_rotate (struct zlog *);
+extern int zlog_rotate (struct zlog *);
/* For hackey massage lookup and check */
#define LOOKUP(x, y) mes_lookup(x, x ## _max, y)
-const char *lookup (struct message *, int);
-const char *mes_lookup (struct message *meslist, int max, int index);
+extern const char *lookup (struct message *, int);
+extern const char *mes_lookup (struct message *meslist, int max, int index);
extern const char *zlog_priority[];
extern const char *zlog_proto_names[];
diff --git a/lib/md5.c b/lib/md5.c
index 2068c46d..c6b7ca52 100644
--- a/lib/md5.c
+++ b/lib/md5.c
@@ -69,8 +69,7 @@ static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ };
/* Initialize structure containing state of computation.
(RFC 1321, 3.3: Step 3) */
void
-md5_init_ctx (ctx)
- struct md5_ctx *ctx;
+md5_init_ctx (struct md5_ctx *ctx)
{
ctx->A = 0x67452301;
ctx->B = 0xefcdab89;
@@ -87,9 +86,7 @@ md5_init_ctx (ctx)
IMPORTANT: On some systems it is required that RESBUF is correctly
aligned for a 32 bits value. */
void *
-md5_read_ctx (ctx, resbuf)
- const struct md5_ctx *ctx;
- void *resbuf;
+md5_read_ctx (const struct md5_ctx *ctx, void *resbuf)
{
((md5_uint32 *) resbuf)[0] = SWAP (ctx->A);
((md5_uint32 *) resbuf)[1] = SWAP (ctx->B);
@@ -105,9 +102,7 @@ md5_read_ctx (ctx, resbuf)
IMPORTANT: On some systems it is required that RESBUF is correctly
aligned for a 32 bits value. */
void *
-md5_finish_ctx (ctx, resbuf)
- struct md5_ctx *ctx;
- void *resbuf;
+md5_finish_ctx (struct md5_ctx *ctx, void *resbuf)
{
/* Take yet unprocessed bytes into account. */
md5_uint32 bytes = ctx->buflen;
@@ -136,9 +131,7 @@ md5_finish_ctx (ctx, resbuf)
resulting message digest number will be written into the 16 bytes
beginning at RESBLOCK. */
int
-md5_stream (stream, resblock)
- FILE *stream;
- void *resblock;
+md5_stream (FILE *stream, void *resblock)
{
/* Important: BLOCKSIZE must be a multiple of 64. */
#define BLOCKSIZE 4096
@@ -193,10 +186,7 @@ md5_stream (stream, resblock)
output yields to the wanted ASCII representation of the message
digest. */
void *
-md5_buffer (buffer, len, resblock)
- const char *buffer;
- size_t len;
- void *resblock;
+md5_buffer (const char *buffer, size_t len, void *resblock)
{
struct md5_ctx ctx;
@@ -212,10 +202,7 @@ md5_buffer (buffer, len, resblock)
void
-md5_process_bytes (buffer, len, ctx)
- const void *buffer;
- size_t len;
- struct md5_ctx *ctx;
+md5_process_bytes (const void *buffer, size_t len, struct md5_ctx *ctx)
{
/* When we already have some bits in our internal buffer concatenate
both inputs first. */
@@ -270,10 +257,7 @@ md5_process_bytes (buffer, len, ctx)
It is assumed that LEN % 64 == 0. */
void
-md5_process_block (buffer, len, ctx)
- const void *buffer;
- size_t len;
- struct md5_ctx *ctx;
+md5_process_block (const void *buffer, size_t len, struct md5_ctx *ctx)
{
md5_uint32 correct_words[16];
const md5_uint32 *words = buffer;
diff --git a/lib/memory.c b/lib/memory.c
index adf23b19..8ddf3f4d 100644
--- a/lib/memory.c
+++ b/lib/memory.c
@@ -40,7 +40,7 @@ static struct message mstr [] =
};
/* Fatal memory allocation error occured. */
-static void
+static void __attribute__ ((noreturn))
zerror (const char *fname, int type, size_t size)
{
zlog_err ("%s : can't allocate memory for `%s' size %d: %s\n",
diff --git a/lib/memory.h b/lib/memory.h
index 3ec89a97..ef20b8c9 100644
--- a/lib/memory.h
+++ b/lib/memory.h
@@ -58,38 +58,25 @@ extern struct mlist mlists[];
#endif /* MEMORY_LOG */
/* Prototypes of memory function. */
-void *zmalloc (int type, size_t size);
-void *zcalloc (int type, size_t size);
-void *zrealloc (int type, void *ptr, size_t size);
-void zfree (int type, void *ptr);
-char *zstrdup (int type, const char *str);
-
-void *mtype_zmalloc (const char *file,
- int line,
- int type,
- size_t size);
-
-void *mtype_zcalloc (const char *file,
- int line,
- int type,
- size_t num,
- size_t size);
-
-void *mtype_zrealloc (const char *file,
- int line,
- int type,
- void *ptr,
- size_t size);
-
-void mtype_zfree (const char *file,
- int line,
- int type,
- void *ptr);
-
-char *mtype_zstrdup (const char *file,
- int line,
- int type,
- const char *str);
-void memory_init (void);
+extern void *zmalloc (int type, size_t size);
+extern void *zcalloc (int type, size_t size);
+extern void *zrealloc (int type, void *ptr, size_t size);
+extern void zfree (int type, void *ptr);
+extern char *zstrdup (int type, const char *str);
+
+extern void *mtype_zmalloc (const char *file, int line, int type, size_t size);
+
+extern void *mtype_zcalloc (const char *file, int line, int type,
+ size_t num, size_t size);
+
+extern void *mtype_zrealloc (const char *file, int line, int type, void *ptr,
+ size_t size);
+
+extern void mtype_zfree (const char *file, int line, int type,
+ void *ptr);
+
+extern char *mtype_zstrdup (const char *file, int line, int type,
+ const char *str);
+extern void memory_init (void);
#endif /* _ZEBRA_MEMORY_H */
diff --git a/lib/network.h b/lib/network.h
index 9333ef81..4d9c2284 100644
--- a/lib/network.h
+++ b/lib/network.h
@@ -26,8 +26,8 @@
/* Both readn and writen are deprecated and will be removed. They are not
suitable for use with non-blocking file descriptors.
*/
-int readn (int, u_char *, int);
-int writen (int, const u_char *, int);
+extern int readn (int, u_char *, int);
+extern int writen (int, const u_char *, int);
/* Set the file descriptor to use non-blocking I/O. Returns 0 for success,
-1 on error. */
diff --git a/lib/plist.c b/lib/plist.c
index 5e2edd29..97d254f4 100644
--- a/lib/plist.c
+++ b/lib/plist.c
@@ -72,10 +72,10 @@ struct prefix_master
struct prefix_list *recent;
/* Hook function which is executed when new prefix_list is added. */
- void (*add_hook) ();
+ void (*add_hook) (struct prefix_list *);
/* Hook function which is executed when prefix_list is deleted. */
- void (*delete_hook) ();
+ void (*delete_hook) (struct prefix_list *);
};
/* Static structure of IPv4 prefix_list's master. */
@@ -150,7 +150,7 @@ prefix_list_lookup (afi_t afi, const char *name)
}
static struct prefix_list *
-prefix_list_new ()
+prefix_list_new (void)
{
struct prefix_list *new;
@@ -165,7 +165,7 @@ prefix_list_free (struct prefix_list *plist)
}
static struct prefix_list_entry *
-prefix_list_entry_new ()
+prefix_list_entry_new (void)
{
struct prefix_list_entry *new;
@@ -326,11 +326,11 @@ prefix_list_delete (struct prefix_list *plist)
if (plist->name)
XFREE (MTYPE_PREFIX_LIST_STR, plist->name);
-
+
prefix_list_free (plist);
-
+
if (master->delete_hook)
- (*master->delete_hook) ();
+ (*master->delete_hook) (NULL);
}
static struct prefix_list_entry *
@@ -586,7 +586,7 @@ prefix_list_apply (struct prefix_list *plist, void *object)
return PREFIX_DENY;
}
-void
+static void __attribute__ ((unused))
prefix_list_print (struct prefix_list *plist)
{
struct prefix_list_entry *pentry;
@@ -2578,7 +2578,7 @@ prefix_bgp_show_prefix_list (struct vty *vty, afi_t afi, char *name)
}
static void
-prefix_list_reset_orf ()
+prefix_list_reset_orf (void)
{
struct prefix_list *plist;
struct prefix_list *next;
@@ -2625,7 +2625,7 @@ config_write_prefix_ipv4 (struct vty *vty)
}
static void
-prefix_list_reset_ipv4 ()
+prefix_list_reset_ipv4 (void)
{
struct prefix_list *plist;
struct prefix_list *next;
@@ -2657,7 +2657,7 @@ prefix_list_reset_ipv4 ()
}
static void
-prefix_list_init_ipv4 ()
+prefix_list_init_ipv4 (void)
{
install_node (&prefix_node, config_write_prefix_ipv4);
@@ -2734,7 +2734,7 @@ config_write_prefix_ipv6 (struct vty *vty)
}
static void
-prefix_list_reset_ipv6 ()
+prefix_list_reset_ipv6 (void)
{
struct prefix_list *plist;
struct prefix_list *next;
@@ -2766,7 +2766,7 @@ prefix_list_reset_ipv6 ()
}
static void
-prefix_list_init_ipv6 ()
+prefix_list_init_ipv6 (void)
{
install_node (&prefix_ipv6_node, config_write_prefix_ipv6);
diff --git a/lib/plist.h b/lib/plist.h
index 01ac9874..fb3168a6 100644
--- a/lib/plist.h
+++ b/lib/plist.h
@@ -20,6 +20,9 @@
* Boston, MA 02111-1307, USA.
*/
+#ifndef _QUAGGA_PLIST_H
+#define _QUAGGA_PLIST_H
+
#define AFI_ORF_PREFIX 65535
enum prefix_list_type
@@ -62,17 +65,19 @@ struct orf_prefix
};
/* Prototypes. */
-void prefix_list_init (void);
-void prefix_list_reset (void);
-void prefix_list_add_hook (void (*func) (struct prefix_list *));
-void prefix_list_delete_hook (void (*func) (struct prefix_list *));
+extern void prefix_list_init (void);
+extern void prefix_list_reset (void);
+extern void prefix_list_add_hook (void (*func) (struct prefix_list *));
+extern void prefix_list_delete_hook (void (*func) (struct prefix_list *));
+
+extern struct prefix_list *prefix_list_lookup (afi_t, const char *);
+extern enum prefix_list_type prefix_list_apply (struct prefix_list *, void *);
-struct prefix_list *prefix_list_lookup (afi_t, const char *);
-enum prefix_list_type prefix_list_apply (struct prefix_list *, void *);
+extern struct stream * prefix_bgp_orf_entry (struct stream *,
+ struct prefix_list *,
+ u_char, u_char, u_char);
+extern int prefix_bgp_orf_set (char *, afi_t, struct orf_prefix *, int, int);
+extern void prefix_bgp_orf_remove_all (char *);
+extern int prefix_bgp_show_prefix_list (struct vty *, afi_t, char *);
-struct stream *
-prefix_bgp_orf_entry (struct stream *, struct prefix_list *,
- u_char, u_char, u_char);
-int prefix_bgp_orf_set (char *, afi_t, struct orf_prefix *, int, int);
-void prefix_bgp_orf_remove_all (char *);
-int prefix_bgp_show_prefix_list (struct vty *, afi_t, char *);
+#endif /* _QUAGGA_PLIST_H */
diff --git a/lib/pqueue.c b/lib/pqueue.c
index 870f8a7c..2bbafe7c 100644
--- a/lib/pqueue.c
+++ b/lib/pqueue.c
@@ -106,7 +106,7 @@ trickle_down (int index, struct pqueue *queue)
}
struct pqueue *
-pqueue_create ()
+pqueue_create (void)
{
struct pqueue *queue;
diff --git a/lib/pqueue.h b/lib/pqueue.h
index d19c46de..1f3201b9 100644
--- a/lib/pqueue.h
+++ b/lib/pqueue.h
@@ -33,12 +33,12 @@ struct pqueue
#define PQUEUE_INIT_ARRAYSIZE 32
-struct pqueue *pqueue_create ();
-void pqueue_delete (struct pqueue *queue);
+extern struct pqueue *pqueue_create (void);
+extern void pqueue_delete (struct pqueue *queue);
-void pqueue_enqueue (void *data, struct pqueue *queue);
-void *pqueue_dequeue (struct pqueue *queue);
+extern void pqueue_enqueue (void *data, struct pqueue *queue);
+extern void *pqueue_dequeue (struct pqueue *queue);
-void trickle_down (int index, struct pqueue *queue);
+extern void trickle_down (int index, struct pqueue *queue);
#endif /* _ZEBRA_PQUEUE_H */
diff --git a/lib/prefix.c b/lib/prefix.c
index 2e594aa0..b4347dd2 100644
--- a/lib/prefix.c
+++ b/lib/prefix.c
@@ -72,8 +72,8 @@ prefix_match (const struct prefix *n, const struct prefix *p)
int shift;
/* Set both prefix's head pointer. */
- u_char *np = (u_char *)&n->u.prefix;
- u_char *pp = (u_char *)&p->u.prefix;
+ const u_char *np = (const u_char *)&n->u.prefix;
+ const u_char *pp = (const u_char *)&p->u.prefix;
/* If n's prefix is longer than p's one return 0. */
if (n->prefixlen > p->prefixlen)
@@ -160,8 +160,8 @@ prefix_cmp (const struct prefix *p1, const struct prefix *p2)
int shift;
/* Set both prefix's head pointer. */
- u_char *pp1 = (u_char *)&p1->u.prefix;
- u_char *pp2 = (u_char *)&p2->u.prefix;
+ const u_char *pp1 = (const u_char *)&p1->u.prefix;
+ const u_char *pp2 = (const u_char *)&p2->u.prefix;
if (p1->family != p2->family || p1->prefixlen != p2->prefixlen)
return 1;
@@ -344,7 +344,7 @@ prefix_ipv4_any (const struct prefix_ipv4 *p)
/* Allocate a new ip version 6 route */
struct prefix_ipv6 *
-prefix_ipv6_new ()
+prefix_ipv6_new (void)
{
struct prefix_ipv6 *p;
diff --git a/lib/prefix.h b/lib/prefix.h
index 506d644e..7afe7a1e 100644
--- a/lib/prefix.h
+++ b/lib/prefix.h
@@ -23,6 +23,8 @@
#ifndef _ZEBRA_PREFIX_H
#define _ZEBRA_PREFIX_H
+#include "sockunion.h"
+
/*
* A struct prefix contains an address family, a prefix length, and an
* address. This can represent either a 'network prefix' as defined
@@ -125,58 +127,59 @@ struct prefix_rd
#define PREFIX_FAMILY(p) ((p)->family)
/* Prototypes. */
-int afi2family (int);
-int family2afi (int);
-
-struct prefix *prefix_new ();
-void prefix_free (struct prefix *);
-const char *prefix_family_str (const struct prefix *);
-int prefix_blen (const struct prefix *);
-int str2prefix (const char *, struct prefix *);
-int prefix2str (const struct prefix *, char *, int);
-int prefix_match (const struct prefix *, const struct prefix *);
-int prefix_same (const struct prefix *, const struct prefix *);
-int prefix_cmp (const struct prefix *, const struct prefix *);
-void prefix_copy (struct prefix *dest, const struct prefix *src);
-void apply_mask (struct prefix *);
-
-struct prefix *sockunion2prefix ();
-struct prefix *sockunion2hostprefix ();
-
-struct prefix_ipv4 *prefix_ipv4_new ();
-void prefix_ipv4_free (struct prefix_ipv4 *);
-int str2prefix_ipv4 (const char *, struct prefix_ipv4 *);
-void apply_mask_ipv4 (struct prefix_ipv4 *);
-
-int prefix_ipv4_any (const struct prefix_ipv4 *);
-void apply_classful_mask_ipv4 (struct prefix_ipv4 *);
-
-u_char ip_masklen (struct in_addr);
-void masklen2ip (int, struct in_addr *);
+extern int afi2family (int);
+extern int family2afi (int);
+
+extern struct prefix *prefix_new (void);
+extern void prefix_free (struct prefix *);
+extern const char *prefix_family_str (const struct prefix *);
+extern int prefix_blen (const struct prefix *);
+extern int str2prefix (const char *, struct prefix *);
+extern int prefix2str (const struct prefix *, char *, int);
+extern int prefix_match (const struct prefix *, const struct prefix *);
+extern int prefix_same (const struct prefix *, const struct prefix *);
+extern int prefix_cmp (const struct prefix *, const struct prefix *);
+extern void prefix_copy (struct prefix *dest, const struct prefix *src);
+extern void apply_mask (struct prefix *);
+
+extern struct prefix *sockunion2prefix (const union sockunion *dest,
+ const union sockunion *mask);
+extern struct prefix *sockunion2hostprefix (const union sockunion *);
+
+extern struct prefix_ipv4 *prefix_ipv4_new (void);
+extern void prefix_ipv4_free (struct prefix_ipv4 *);
+extern int str2prefix_ipv4 (const char *, struct prefix_ipv4 *);
+extern void apply_mask_ipv4 (struct prefix_ipv4 *);
+
+extern int prefix_ipv4_any (const struct prefix_ipv4 *);
+extern void apply_classful_mask_ipv4 (struct prefix_ipv4 *);
+
+extern u_char ip_masklen (struct in_addr);
+extern void masklen2ip (int, struct in_addr *);
/* returns the network portion of the host address */
-in_addr_t ipv4_network_addr (in_addr_t hostaddr, int masklen);
+extern in_addr_t ipv4_network_addr (in_addr_t hostaddr, int masklen);
/* given the address of a host on a network and the network mask length,
* calculate the broadcast address for that network;
* special treatment for /31: returns the address of the other host
* on the network by flipping the host bit */
-in_addr_t ipv4_broadcast_addr (in_addr_t hostaddr, int masklen);
+extern in_addr_t ipv4_broadcast_addr (in_addr_t hostaddr, int masklen);
-int netmask_str2prefix_str (const char *, const char *, char *);
+extern int netmask_str2prefix_str (const char *, const char *, char *);
#ifdef HAVE_IPV6
-struct prefix_ipv6 *prefix_ipv6_new ();
-void prefix_ipv6_free (struct prefix_ipv6 *);
-int str2prefix_ipv6 (const char *, struct prefix_ipv6 *);
-void apply_mask_ipv6 (struct prefix_ipv6 *);
+extern struct prefix_ipv6 *prefix_ipv6_new (void);
+extern void prefix_ipv6_free (struct prefix_ipv6 *);
+extern int str2prefix_ipv6 (const char *, struct prefix_ipv6 *);
+extern void apply_mask_ipv6 (struct prefix_ipv6 *);
-int ip6_masklen (struct in6_addr);
-void masklen2ip6 (int, struct in6_addr *);
+extern int ip6_masklen (struct in6_addr);
+extern void masklen2ip6 (int, struct in6_addr *);
-void str2in6_addr (const char *, struct in6_addr *);
-const char *inet6_ntoa (struct in6_addr);
+extern void str2in6_addr (const char *, struct in6_addr *);
+extern const char *inet6_ntoa (struct in6_addr);
#endif /* HAVE_IPV6 */
-int all_digit (const char *);
+extern int all_digit (const char *);
#endif /* _ZEBRA_PREFIX_H */
diff --git a/lib/privs.h b/lib/privs.h
index 76e8af23..70507565 100644
--- a/lib/privs.h
+++ b/lib/privs.h
@@ -82,10 +82,10 @@ struct zprivs_ids_t
};
/* initialise zebra privileges */
-void zprivs_init (struct zebra_privs_t *zprivs);
+extern void zprivs_init (struct zebra_privs_t *zprivs);
/* drop all and terminate privileges */
-void zprivs_terminate (void);
+extern void zprivs_terminate (void);
/* query for runtime uid's and gid's, eg vty needs this */
-void zprivs_get_ids(struct zprivs_ids_t *);
+extern void zprivs_get_ids(struct zprivs_ids_t *);
#endif /* _ZEBRA_PRIVS_H */
diff --git a/lib/routemap.c b/lib/routemap.c
index cd1abbc9..c52b050a 100644
--- a/lib/routemap.c
+++ b/lib/routemap.c
@@ -159,7 +159,7 @@ route_map_lookup_by_name (const char *name)
/* Lookup route map. If there isn't route map create one and return
it. */
-struct route_map *
+static struct route_map *
route_map_get (const char *name)
{
struct route_map *map;
@@ -171,7 +171,7 @@ route_map_get (const char *name)
}
/* Return route map's type string. */
-const static char *
+static const char *
route_map_type_str (enum route_map_type type)
{
switch (type)
@@ -188,7 +188,7 @@ route_map_type_str (enum route_map_type type)
}
}
-int
+static int
route_map_empty (struct route_map *map)
{
if (map->head == NULL && map->tail == NULL)
@@ -245,7 +245,7 @@ vty_show_route_map_entry (struct vty *vty, struct route_map *map)
}
}
-int
+static int
vty_show_route_map (struct vty *vty, const char *name)
{
struct route_map *map;
@@ -271,8 +271,8 @@ vty_show_route_map (struct vty *vty, const char *name)
/* New route map allocation. Please note route map's name must be
specified. */
-struct route_map_index *
-route_map_index_new ()
+static struct route_map_index *
+route_map_index_new (void)
{
struct route_map_index *new;
@@ -319,7 +319,7 @@ route_map_index_delete (struct route_map_index *index, int notify)
}
/* Lookup index from route map. */
-struct route_map_index *
+static struct route_map_index *
route_map_index_lookup (struct route_map *map, enum route_map_type type,
int pref)
{
@@ -333,7 +333,7 @@ route_map_index_lookup (struct route_map *map, enum route_map_type type,
}
/* Add new index to route map. */
-struct route_map_index *
+static struct route_map_index *
route_map_index_add (struct route_map *map, enum route_map_type type,
int pref)
{
@@ -385,7 +385,7 @@ route_map_index_add (struct route_map *map, enum route_map_type type,
}
/* Get route map index. */
-struct route_map_index *
+static struct route_map_index *
route_map_index_get (struct route_map *map, enum route_map_type type,
int pref)
{
@@ -404,8 +404,8 @@ route_map_index_get (struct route_map *map, enum route_map_type type,
}
/* New route map rule */
-struct route_map_rule *
-route_map_rule_new ()
+static struct route_map_rule *
+route_map_rule_new (void)
{
struct route_map_rule *new;
@@ -428,7 +428,7 @@ route_map_install_set (struct route_map_rule_cmd *cmd)
}
/* Lookup rule command from match list. */
-struct route_map_rule_cmd *
+static struct route_map_rule_cmd *
route_map_lookup_match (const char *name)
{
unsigned int i;
@@ -442,7 +442,7 @@ route_map_lookup_match (const char *name)
}
/* Lookup rule command from set list. */
-struct route_map_rule_cmd *
+static struct route_map_rule_cmd *
route_map_lookup_set (const char *name)
{
unsigned int i;
@@ -493,7 +493,7 @@ route_map_rule_delete (struct route_map_rule_list *list,
}
/* strcmp wrapper function which don't crush even argument is NULL. */
-int
+static int
rulecmp (const char *dst, const char *src)
{
if (dst == NULL)
@@ -731,7 +731,7 @@ route_map_delete_set (struct route_map_index *index, const char *set_name,
We need to make sure our route-map processing matches the above
*/
-route_map_result_t
+static route_map_result_t
route_map_apply_match (struct route_map_rule_list *match_list,
struct prefix *prefix, route_map_object_t type,
void *object)
@@ -875,7 +875,7 @@ route_map_event_hook (void (*func) (route_map_event_t, const char *))
}
void
-route_map_init ()
+route_map_init (void)
{
/* Make vector for match and set. */
route_match_vec = vector_init (1);
@@ -1230,7 +1230,7 @@ DEFUN (no_rmap_description,
}
/* Configuration write function. */
-int
+static int
route_map_config_write (struct vty *vty)
{
struct route_map *map;
@@ -1286,7 +1286,7 @@ struct cmd_node rmap_node =
/* Initialization of route map vector. */
void
-route_map_init_vty ()
+route_map_init_vty (void)
{
/* Install route map top node. */
install_node (&rmap_node, route_map_config_write);
diff --git a/lib/routemap.h b/lib/routemap.h
index 072526a6..c9cf4410 100644
--- a/lib/routemap.h
+++ b/lib/routemap.h
@@ -150,52 +150,46 @@ struct route_map
};
/* Prototypes. */
-void route_map_init ();
-void route_map_init_vty ();
+extern void route_map_init (void);
+extern void route_map_init_vty (void);
/* Add match statement to route map. */
-int
-route_map_add_match (struct route_map_index *index,
- const char *match_name,
- const char *match_arg);
+extern int route_map_add_match (struct route_map_index *index,
+ const char *match_name,
+ const char *match_arg);
/* Delete specified route match rule. */
-int
-route_map_delete_match (struct route_map_index *index,
- const char *match_name,
- const char *match_arg);
+extern int route_map_delete_match (struct route_map_index *index,
+ const char *match_name,
+ const char *match_arg);
/* Add route-map set statement to the route map. */
-int
-route_map_add_set (struct route_map_index *index,
- const char *set_name,
- const char *set_arg);
+extern int route_map_add_set (struct route_map_index *index,
+ const char *set_name,
+ const char *set_arg);
/* Delete route map set rule. */
-int
-route_map_delete_set (struct route_map_index *index, const char *set_name,
- const char *set_arg);
+extern int route_map_delete_set (struct route_map_index *index,
+ const char *set_name,
+ const char *set_arg);
/* Install rule command to the match list. */
-void
-route_map_install_match (struct route_map_rule_cmd *cmd);
+extern void route_map_install_match (struct route_map_rule_cmd *cmd);
/* Install rule command to the set list. */
-void
-route_map_install_set (struct route_map_rule_cmd *cmd);
+extern void route_map_install_set (struct route_map_rule_cmd *cmd);
/* Lookup route map by name. */
-struct route_map *
-route_map_lookup_by_name (const char *name);
+extern struct route_map * route_map_lookup_by_name (const char *name);
/* Apply route map to the object. */
-route_map_result_t
-route_map_apply (struct route_map *map, struct prefix *,
- route_map_object_t object_type, void *object);
-
-void route_map_add_hook (void (*func) (const char *));
-void route_map_delete_hook (void (*func) (const char *));
-void route_map_event_hook (void (*func) (route_map_event_t, const char *));
-
+extern route_map_result_t route_map_apply (struct route_map *map,
+ struct prefix *,
+ route_map_object_t object_type,
+ void *object);
+
+extern void route_map_add_hook (void (*func) (const char *));
+extern void route_map_delete_hook (void (*func) (const char *));
+extern void route_map_event_hook (void (*func) (route_map_event_t, const char *));
#endif /* _ZEBRA_ROUTEMAP_H */
diff --git a/lib/sigevent.c b/lib/sigevent.c
index 08141afa..30e9a3d1 100644
--- a/lib/sigevent.c
+++ b/lib/sigevent.c
@@ -185,7 +185,7 @@ program_counter(void *context)
#endif /* SA_SIGINFO */
-static void
+static void __attribute__ ((noreturn))
exit_handler(int signo
#ifdef SA_SIGINFO
, siginfo_t *siginfo, void *context
@@ -200,7 +200,7 @@ exit_handler(int signo
_exit(128+signo);
}
-static void
+static void __attribute__ ((noreturn))
core_handler(int signo
#ifdef SA_SIGINFO
, siginfo_t *siginfo, void *context
diff --git a/lib/sigevent.h b/lib/sigevent.h
index 20012aff..62b944a7 100644
--- a/lib/sigevent.h
+++ b/lib/sigevent.h
@@ -44,10 +44,10 @@ struct quagga_signal_t
* - array of quagga_signal_t's describing signals to handle
* and handlers to use for each signal
*/
-void signal_init (struct thread_master *m, int sigc,
+extern void signal_init (struct thread_master *m, int sigc,
struct quagga_signal_t *signals);
/* check whether there are signals to handle, process any found */
-int quagga_sigevent_process (void);
+extern int quagga_sigevent_process (void);
#endif /* _QUAGGA_SIGNAL_H */
diff --git a/lib/smux.h b/lib/smux.h
index dd44a31d..a4f1718d 100644
--- a/lib/smux.h
+++ b/lib/smux.h
@@ -144,16 +144,17 @@ struct trap_object
(u_char *) &snmp_in_addr_val \
)
-void smux_init (struct thread_master *tm);
-void smux_start (void);
-void smux_register_mib(const char *, struct variable *, size_t, int, oid [], size_t);
-int smux_header_generic (struct variable *, oid [], size_t *, int, size_t *,
- WriteMethod **);
-int smux_trap (oid *, size_t, oid *, size_t, struct trap_object *, size_t, unsigned int, u_char);
-
-int oid_compare (oid *, int, oid *, int);
-void oid2in_addr (oid [], int, struct in_addr *);
-void *oid_copy (void *, void *, size_t);
-void oid_copy_addr (oid [], struct in_addr *, int);
+extern void smux_init (struct thread_master *tm);
+extern void smux_start (void);
+extern void smux_register_mib(const char *, struct variable *,
+ size_t, int, oid [], size_t);
+extern int smux_header_generic (struct variable *, oid [], size_t *,
+ int, size_t *, WriteMethod **);
+extern int smux_trap (oid *, size_t, oid *, size_t, struct trap_object *,
+ size_t, unsigned int, u_char);
+extern int oid_compare (oid *, int, oid *, int);
+extern void oid2in_addr (oid [], int, struct in_addr *);
+extern void *oid_copy (void *, void *, size_t);
+extern void oid_copy_addr (oid [], struct in_addr *, int);
#endif /* _ZEBRA_SNMP_H */
diff --git a/lib/sockopt.h b/lib/sockopt.h
index df199c19..d88bfa6d 100644
--- a/lib/sockopt.h
+++ b/lib/sockopt.h
@@ -22,15 +22,15 @@
#ifndef _ZEBRA_SOCKOPT_H
#define _ZEBRA_SOCKOPT_H
-int setsockopt_so_recvbuf (int sock, int size);
+extern int setsockopt_so_recvbuf (int sock, int size);
#ifdef HAVE_IPV6
-int setsockopt_ipv6_pktinfo (int, int);
-int setsockopt_ipv6_checksum (int, int);
-int setsockopt_ipv6_multicast_hops (int, int);
-int setsockopt_ipv6_unicast_hops (int, int);
-int setsockopt_ipv6_hoplimit (int, int);
-int setsockopt_ipv6_multicast_loop (int, int);
+extern int setsockopt_ipv6_pktinfo (int, int);
+extern int setsockopt_ipv6_checksum (int, int);
+extern int setsockopt_ipv6_multicast_hops (int, int);
+extern int setsockopt_ipv6_unicast_hops (int, int);
+extern int setsockopt_ipv6_hoplimit (int, int);
+extern int setsockopt_ipv6_multicast_loop (int, int);
#endif /* HAVE_IPV6 */
/*
@@ -78,20 +78,19 @@ int setsockopt_ipv6_multicast_loop (int, int);
(((af) == AF_INET) : SOPT_SIZE_CMSG_IFINDEX_IPV4() \
? SOPT_SIZE_CMSG_PKTINFO_IPV6())
-int setsockopt_multicast_ipv4(int sock,
- int optname,
- struct in_addr if_addr,
- unsigned int mcast_addr,
- unsigned int ifindex);
+extern int setsockopt_multicast_ipv4(int sock, int optname,
+ struct in_addr if_addr,
+ unsigned int mcast_addr,
+ unsigned int ifindex);
/* Ask for, and get, ifindex, by whatever method is supported. */
-int setsockopt_ifindex (int, int, int);
-int getsockopt_ifindex (int, struct msghdr *);
+extern int setsockopt_ifindex (int, int, int);
+extern int getsockopt_ifindex (int, struct msghdr *);
/* swab the fields in iph between the host order and system order expected
* for IP_HDRINCL.
*/
-void sockopt_iphdrincl_swab_htosys (struct ip *iph);
-void sockopt_iphdrincl_swab_systoh (struct ip *iph);
+extern void sockopt_iphdrincl_swab_htosys (struct ip *iph);
+extern void sockopt_iphdrincl_swab_systoh (struct ip *iph);
#endif /*_ZEBRA_SOCKOPT_H */
diff --git a/lib/sockunion.c b/lib/sockunion.c
index 8a1fd9d2..a636c641 100644
--- a/lib/sockunion.c
+++ b/lib/sockunion.c
@@ -273,7 +273,7 @@ sockunion_accept (int sock, union sockunion *su)
}
/* Return sizeof union sockunion. */
-int
+static int
sockunion_sizeof (union sockunion *su)
{
int ret;
@@ -294,7 +294,7 @@ sockunion_sizeof (union sockunion *su)
}
/* return sockunion structure : this function should be revised. */
-char *
+static char *
sockunion_log (union sockunion *su)
{
static char buf[SU_ADDRSTRLEN];
@@ -662,7 +662,7 @@ sockunion_getpeername (int fd)
}
/* Print sockunion structure */
-void
+static void __attribute__ ((unused))
sockunion_print (union sockunion *su)
{
if (su == NULL)
@@ -701,7 +701,7 @@ sockunion_print (union sockunion *su)
}
#ifdef HAVE_IPV6
-int
+static int
in6addr_cmp (struct in6_addr *addr1, struct in6_addr *addr2)
{
unsigned int i;
diff --git a/lib/sockunion.h b/lib/sockunion.h
index 738df06c..96b9a0d4 100644
--- a/lib/sockunion.h
+++ b/lib/sockunion.h
@@ -87,42 +87,42 @@ enum connect_result
#define sockunion_family(X) (X)->sa.sa_family
/* Prototypes. */
-int str2sockunion (const char *, union sockunion *);
-const char *sockunion2str (union sockunion *, char *, size_t);
-int sockunion_cmp (union sockunion *, union sockunion *);
-int sockunion_same (union sockunion *, union sockunion *);
+extern int str2sockunion (const char *, union sockunion *);
+extern const char *sockunion2str (union sockunion *, char *, size_t);
+extern int sockunion_cmp (union sockunion *, union sockunion *);
+extern int sockunion_same (union sockunion *, union sockunion *);
-char *sockunion_su2str (union sockunion *su);
-union sockunion *sockunion_str2su (const char *str);
-struct in_addr sockunion_get_in_addr (union sockunion *su);
-int sockunion_accept (int sock, union sockunion *);
-int sockunion_stream_socket (union sockunion *);
-int sockopt_reuseaddr (int);
-int sockopt_reuseport (int);
-int sockunion_bind (int sock, union sockunion *, unsigned short, union sockunion *);
-int sockopt_ttl (int family, int sock, int ttl);
-int sockunion_socket (union sockunion *su);
-const char *inet_sutop (union sockunion *su, char *str);
-enum connect_result
-sockunion_connect (int fd, union sockunion *su, unsigned short port, unsigned int);
-union sockunion *sockunion_getsockname (int);
-union sockunion *sockunion_getpeername (int);
-union sockunion *sockunion_dup (union sockunion *);
-void sockunion_free (union sockunion *);
+extern char *sockunion_su2str (union sockunion *su);
+extern union sockunion *sockunion_str2su (const char *str);
+extern struct in_addr sockunion_get_in_addr (union sockunion *su);
+extern int sockunion_accept (int sock, union sockunion *);
+extern int sockunion_stream_socket (union sockunion *);
+extern int sockopt_reuseaddr (int);
+extern int sockopt_reuseport (int);
+extern int sockunion_bind (int sock, union sockunion *,
+ unsigned short, union sockunion *);
+extern int sockopt_ttl (int family, int sock, int ttl);
+extern int sockunion_socket (union sockunion *su);
+extern const char *inet_sutop (union sockunion *su, char *str);
+extern enum connect_result sockunion_connect (int fd, union sockunion *su,
+ unsigned short port,
+ unsigned int);
+extern union sockunion *sockunion_getsockname (int);
+extern union sockunion *sockunion_getpeername (int);
+extern union sockunion *sockunion_dup (union sockunion *);
+extern void sockunion_free (union sockunion *);
#ifndef HAVE_INET_NTOP
-const char *
-inet_ntop (int family, const void *addrptr, char *strptr, size_t len);
+extern const char * inet_ntop (int family, const void *addrptr,
+ char *strptr, size_t len);
#endif /* HAVE_INET_NTOP */
#ifndef HAVE_INET_PTON
-int
-inet_pton (int family, const char *strptr, void *addrptr);
+extern int inet_pton (int family, const char *strptr, void *addrptr);
#endif /* HAVE_INET_PTON */
#ifndef HAVE_INET_ATON
-int
-inet_aton (const char *cp, struct in_addr *inaddr);
+extern int inet_aton (const char *cp, struct in_addr *inaddr);
#endif
#endif /* _ZEBRA_SOCKUNION_H */
diff --git a/lib/str.h b/lib/str.h
index c0016565..145863d2 100644
--- a/lib/str.h
+++ b/lib/str.h
@@ -1,12 +1,12 @@
/*
- * $Id: str.h,v 1.2 2005/04/02 16:01:05 ajs Exp $
+ * $Id: str.h,v 1.3 2005/05/06 21:25:49 paul Exp $
*/
#ifndef _ZEBRA_STR_H
#define _ZEBRA_STR_H
#ifndef HAVE_SNPRINTF
-int snprintf(char *, size_t, const char *, ...);
+extern int snprintf(char *, size_t, const char *, ...);
#endif
#ifndef HAVE_VSNPRINTF
@@ -14,15 +14,16 @@ int snprintf(char *, size_t, const char *, ...);
#endif
#ifndef HAVE_STRLCPY
-size_t strlcpy(char *, const char *, size_t);
+extern size_t strlcpy(char *, const char *, size_t);
#endif
#ifndef HAVE_STRLCAT
-size_t strlcat(char *, const char *, size_t);
+extern size_t strlcat(char *, const char *, size_t);
#endif
#ifndef HAVE_STRNLEN
extern size_t strnlen(const char *s, size_t maxlen);
#endif
-#endif
+#endif /* _ZEBRA_STR_H */
+
diff --git a/lib/stream.h b/lib/stream.h
index 7565fac8..4753f829 100644
--- a/lib/stream.h
+++ b/lib/stream.h
@@ -128,50 +128,51 @@ struct stream_fifo
#define STREAM_REMAIN(S) STREAM_WRITEABLE((S))
/* Stream prototypes. */
-struct stream *stream_new (size_t);
-void stream_free (struct stream *);
-struct stream * stream_copy (struct stream *new, struct stream *src);
-struct stream *stream_dup (struct stream *);
-
-size_t stream_get_getp (struct stream *);
-size_t stream_get_endp (struct stream *);
-size_t stream_get_size (struct stream *);
-u_char *stream_get_data (struct stream *);
-
-void stream_set_getp (struct stream *, size_t);
-void stream_forward_getp (struct stream *, size_t);
-void stream_forward_endp (struct stream *, size_t);
-
-void stream_put (struct stream *, void *, size_t); /* NULL source zeroes */
-int stream_putc (struct stream *, u_char);
-int stream_putc_at (struct stream *, size_t, u_char);
-int stream_putw (struct stream *, u_int16_t);
-int stream_putw_at (struct stream *, size_t, u_int16_t);
-int stream_putl (struct stream *, u_int32_t);
-int stream_putl_at (struct stream *, size_t, u_int32_t);
-int stream_put_ipv4 (struct stream *, u_int32_t);
-int stream_put_in_addr (struct stream *, struct in_addr *);
-int stream_put_prefix (struct stream *, struct prefix *);
-
-void stream_get (void *, struct stream *, size_t);
-u_char stream_getc (struct stream *);
-u_char stream_getc_from (struct stream *, size_t);
-u_int16_t stream_getw (struct stream *);
-u_int16_t stream_getw_from (struct stream *, size_t);
-u_int32_t stream_getl (struct stream *);
-u_int32_t stream_getl_from (struct stream *, size_t);
-u_int32_t stream_get_ipv4 (struct stream *);
+extern struct stream *stream_new (size_t);
+extern void stream_free (struct stream *);
+extern struct stream * stream_copy (struct stream *new, struct stream *src);
+extern struct stream *stream_dup (struct stream *);
+
+extern size_t stream_get_getp (struct stream *);
+extern size_t stream_get_endp (struct stream *);
+extern size_t stream_get_size (struct stream *);
+extern u_char *stream_get_data (struct stream *);
+
+extern void stream_set_getp (struct stream *, size_t);
+extern void stream_forward_getp (struct stream *, size_t);
+extern void stream_forward_endp (struct stream *, size_t);
+
+/* steam_put: NULL source zeroes out size_t bytes of stream */
+extern void stream_put (struct stream *, void *, size_t);
+extern int stream_putc (struct stream *, u_char);
+extern int stream_putc_at (struct stream *, size_t, u_char);
+extern int stream_putw (struct stream *, u_int16_t);
+extern int stream_putw_at (struct stream *, size_t, u_int16_t);
+extern int stream_putl (struct stream *, u_int32_t);
+extern int stream_putl_at (struct stream *, size_t, u_int32_t);
+extern int stream_put_ipv4 (struct stream *, u_int32_t);
+extern int stream_put_in_addr (struct stream *, struct in_addr *);
+extern int stream_put_prefix (struct stream *, struct prefix *);
+
+extern void stream_get (void *, struct stream *, size_t);
+extern u_char stream_getc (struct stream *);
+extern u_char stream_getc_from (struct stream *, size_t);
+extern u_int16_t stream_getw (struct stream *);
+extern u_int16_t stream_getw_from (struct stream *, size_t);
+extern u_int32_t stream_getl (struct stream *);
+extern u_int32_t stream_getl_from (struct stream *, size_t);
+extern u_int32_t stream_get_ipv4 (struct stream *);
#undef stream_read
#undef stream_write
/* Deprecated: assumes blocking I/O. Will be removed.
Use stream_read_try instead. */
-int stream_read (struct stream *, int, size_t);
+extern int stream_read (struct stream *, int, size_t);
/* Deprecated: all file descriptors should already be non-blocking.
Will be removed. Use stream_read_try instead. */
-int stream_read_unblock (struct stream *, int, size_t);
+extern int stream_read_unblock (struct stream *, int, size_t);
/* Read up to size bytes into the stream.
Return code:
@@ -184,24 +185,26 @@ int stream_read_unblock (struct stream *, int, size_t);
extern ssize_t stream_read_try(struct stream *s, int fd, size_t size);
extern ssize_t stream_recvmsg (struct stream *s, int fd, struct msghdr *,
- int flags, size_t size);
-extern ssize_t stream_recvfrom (struct stream *s, int fd, size_t len, int flags,
- struct sockaddr *from, socklen_t *fromlen);
-size_t stream_write (struct stream *, u_char *, size_t);
+ int flags, size_t size);
+extern ssize_t stream_recvfrom (struct stream *s, int fd, size_t len,
+ int flags, struct sockaddr *from,
+ socklen_t *fromlen);
+extern size_t stream_write (struct stream *, u_char *, size_t);
-void stream_reset (struct stream *); /* reset the stream. See Note above */
-int stream_flush (struct stream *, int);
-int stream_empty (struct stream *); /* is the stream empty? */
+/* reset the stream. See Note above */
+extern void stream_reset (struct stream *);
+extern int stream_flush (struct stream *, int);
+extern int stream_empty (struct stream *); /* is the stream empty? */
/* deprecated */
-u_char *stream_pnt (struct stream *);
+extern u_char *stream_pnt (struct stream *);
/* Stream fifo. */
-struct stream_fifo *stream_fifo_new (void);
-void stream_fifo_push (struct stream_fifo *fifo, struct stream *s);
-struct stream *stream_fifo_pop (struct stream_fifo *fifo);
-struct stream *stream_fifo_head (struct stream_fifo *fifo);
-void stream_fifo_clean (struct stream_fifo *fifo);
-void stream_fifo_free (struct stream_fifo *fifo);
+extern struct stream_fifo *stream_fifo_new (void);
+extern void stream_fifo_push (struct stream_fifo *fifo, struct stream *s);
+extern struct stream *stream_fifo_pop (struct stream_fifo *fifo);
+extern struct stream *stream_fifo_head (struct stream_fifo *fifo);
+extern void stream_fifo_clean (struct stream_fifo *fifo);
+extern void stream_fifo_free (struct stream_fifo *fifo);
#endif /* _ZEBRA_STREAM_H */
diff --git a/lib/table.c b/lib/table.c
index 281dfb64..2ade71b8 100644
--- a/lib/table.c
+++ b/lib/table.c
@@ -46,8 +46,8 @@ route_table_finish (struct route_table *rt)
}
/* Allocate new route node. */
-struct route_node *
-route_node_new ()
+static struct route_node *
+route_node_new (void)
{
struct route_node *node;
node = XCALLOC (MTYPE_ROUTE_NODE, sizeof (struct route_node));
@@ -55,7 +55,7 @@ route_node_new ()
}
/* Allocate new route node with prefix set. */
-struct route_node *
+static struct route_node *
route_node_set (struct route_table *table, struct prefix *prefix)
{
struct route_node *node;
@@ -69,7 +69,7 @@ route_node_set (struct route_table *table, struct prefix *prefix)
}
/* Free route node. */
-void
+static void
route_node_free (struct route_node *node)
{
XFREE (MTYPE_ROUTE_NODE, node);
@@ -220,7 +220,7 @@ route_unlock_node (struct route_node *node)
}
/* Dump routing table. */
-void
+static void __attribute__ ((unused))
route_dump_node (struct route_table *t)
{
struct route_node *node;
diff --git a/lib/table.h b/lib/table.h
index 6f090995..45ec6067 100644
--- a/lib/table.h
+++ b/lib/table.h
@@ -53,21 +53,25 @@ struct route_node
};
/* Prototypes. */
-struct route_table *route_table_init (void);
-void route_table_finish (struct route_table *);
-void route_unlock_node (struct route_node *node);
-void route_node_delete (struct route_node *node);
-struct route_node *route_top (struct route_table *);
-struct route_node *route_next (struct route_node *);
-struct route_node *route_next_until (struct route_node *, struct route_node *);
-struct route_node *route_node_get (struct route_table *, struct prefix *);
-struct route_node *route_node_lookup (struct route_table *, struct prefix *);
-struct route_node *route_lock_node (struct route_node *node);
-struct route_node *route_node_match (struct route_table *, struct prefix *);
-struct route_node *route_node_match_ipv4 (struct route_table *,
+extern struct route_table *route_table_init (void);
+extern void route_table_finish (struct route_table *);
+extern void route_unlock_node (struct route_node *node);
+extern void route_node_delete (struct route_node *node);
+extern struct route_node *route_top (struct route_table *);
+extern struct route_node *route_next (struct route_node *);
+extern struct route_node *route_next_until (struct route_node *,
+ struct route_node *);
+extern struct route_node *route_node_get (struct route_table *,
+ struct prefix *);
+extern struct route_node *route_node_lookup (struct route_table *,
+ struct prefix *);
+extern struct route_node *route_lock_node (struct route_node *node);
+extern struct route_node *route_node_match (struct route_table *,
+ struct prefix *);
+extern struct route_node *route_node_match_ipv4 (struct route_table *,
struct in_addr *);
#ifdef HAVE_IPV6
-struct route_node *route_node_match_ipv6 (struct route_table *,
+extern struct route_node *route_node_match_ipv6 (struct route_table *,
struct in6_addr *);
#endif /* HAVE_IPV6 */
diff --git a/lib/thread.c b/lib/thread.c
index 2e1dd245..a18db25a 100644
--- a/lib/thread.c
+++ b/lib/thread.c
@@ -88,7 +88,7 @@ timeval_elapsed (struct timeval a, struct timeval b)
static unsigned int
cpu_record_hash_key (struct cpu_thread_history *a)
{
- return (unsigned int) a->func;
+ return (uintptr_t) a->func;
}
static int
@@ -98,7 +98,7 @@ cpu_record_hash_cmp (struct cpu_thread_history *a,
return a->func == b->func;
}
-static void*
+static void *
cpu_record_hash_alloc (struct cpu_thread_history *a)
{
struct cpu_thread_history *new;
@@ -252,7 +252,7 @@ thread_list_debug (struct thread_list *list)
}
/* Debug print for thread_master. */
-void
+static void __attribute__ ((unused))
thread_master_debug (struct thread_master *m)
{
printf ("-----------\n");
@@ -277,8 +277,9 @@ struct thread_master *
thread_master_create ()
{
if (cpu_record == NULL)
- cpu_record = hash_create_size (1011, cpu_record_hash_key,
- cpu_record_hash_cmp);
+ cpu_record
+ = hash_create_size (1011, (unsigned int (*) (void *))cpu_record_hash_key,
+ (int (*) (void *, void *))cpu_record_hash_cmp);
return (struct thread_master *) XCALLOC (MTYPE_THREAD_MASTER,
sizeof (struct thread_master));
@@ -375,22 +376,22 @@ thread_master_free (struct thread_master *m)
XFREE (MTYPE_THREAD_MASTER, m);
}
+/* Thread list is empty or not. */
+static inline int
+thread_empty (struct thread_list *list)
+{
+ return list->head ? 0 : 1;
+}
+
/* Delete top of the list and return it. */
static struct thread *
thread_trim_head (struct thread_list *list)
{
- if (list->head)
+ if (!thread_empty (list))
return thread_list_delete (list, list->head);
return NULL;
}
-/* Thread list is empty or not. */
-int
-thread_empty (struct thread_list *list)
-{
- return list->head ? 0 : 1;
-}
-
/* Return remain time in second. */
unsigned long
thread_timer_remain_second (struct thread *thread)
@@ -437,7 +438,7 @@ thread_get (struct thread_master *m, u_char type,
{
struct thread *thread;
- if (m->unuse.head)
+ if (!thread_empty (&m->unuse))
{
thread = thread_trim_head (&m->unuse);
if (thread->funcname)
@@ -687,7 +688,7 @@ thread_cancel_event (struct thread_master *m, void *arg)
static struct timeval *
thread_timer_wait (struct thread_list *tlist, struct timeval *timer_val)
{
- if (tlist->head)
+ if (!thread_empty (tlist))
{
*timer_val = timeval_subtract (tlist->head->u.sands, recent_time);
return timer_val;
@@ -695,7 +696,7 @@ thread_timer_wait (struct thread_list *tlist, struct timeval *timer_val)
return NULL;
}
-struct thread *
+static struct thread *
thread_run (struct thread_master *m, struct thread *thread,
struct thread *fetch)
{
@@ -879,7 +880,8 @@ thread_call (struct thread *thread)
tmp.func = thread->func;
tmp.funcname = thread->funcname;
- cpu = hash_get(cpu_record, &tmp, cpu_record_hash_alloc);
+ cpu = hash_get (cpu_record, &tmp,
+ (void * (*) (void *))cpu_record_hash_alloc);
GETRUSAGE (&thread->ru);
diff --git a/lib/thread.h b/lib/thread.h
index 0d84cfc5..4a3bbbe5 100644
--- a/lib/thread.h
+++ b/lib/thread.h
@@ -158,32 +158,38 @@ struct cpu_thread_history
#define thread_add_background(m,f,a,v) funcname_thread_add_background(m,f,a,v,#f)
/* Prototypes. */
-struct thread_master *thread_master_create ();
-struct thread *funcname_thread_add_read (struct thread_master *,
- int (*)(struct thread *), void *, int, const char*);
-struct thread *funcname_thread_add_write (struct thread_master *,
- int (*)(struct thread *), void *, int, const char*);
-struct thread *funcname_thread_add_timer (struct thread_master *,
- int (*)(struct thread *), void *, long, const char*);
-struct thread *funcname_thread_add_timer_msec (struct thread_master *,
- int (*)(struct thread *), void *, long, const char*);
-struct thread *funcname_thread_add_event (struct thread_master *,
- int (*)(struct thread *), void *, int, const char*);
-struct thread *funcname_thread_add_background (struct thread_master *,
- int (*func)(struct thread *),
+extern struct thread_master *thread_master_create (void);
+extern void thread_master_free (struct thread_master *);
+
+extern struct thread *funcname_thread_add_read (struct thread_master *,
+ int (*)(struct thread *),
+ void *, int, const char*);
+extern struct thread *funcname_thread_add_write (struct thread_master *,
+ int (*)(struct thread *),
+ void *, int, const char*);
+extern struct thread *funcname_thread_add_timer (struct thread_master *,
+ int (*)(struct thread *),
+ void *, long, const char*);
+extern struct thread *funcname_thread_add_timer_msec (struct thread_master *,
+ int (*)(struct thread *),
+ void *, long, const char*);
+extern struct thread *funcname_thread_add_event (struct thread_master *,
+ int (*)(struct thread *),
+ void *, int, const char*);
+extern struct thread *funcname_thread_add_background (struct thread_master *,
+ int (*func)(struct thread *),
void *arg,
long milliseconds_to_delay,
const char *funcname);
-
-void thread_cancel (struct thread *);
-void thread_cancel_event (struct thread_master *, void *);
-
-struct thread *thread_fetch (struct thread_master *, struct thread *);
-struct thread *funcname_thread_execute (struct thread_master *,
- int (*)(struct thread *), void *, int, const char *);
-void thread_call (struct thread *);
-unsigned long thread_timer_remain_second (struct thread *);
-int thread_should_yield (struct thread *);
+extern struct thread *funcname_thread_execute (struct thread_master *,
+ int (*)(struct thread *),
+ void *, int, const char *);
+extern void thread_cancel (struct thread *);
+extern void thread_cancel_event (struct thread_master *, void *);
+extern struct thread *thread_fetch (struct thread_master *, struct thread *);
+extern void thread_call (struct thread *);
+extern unsigned long thread_timer_remain_second (struct thread *);
+extern int thread_should_yield (struct thread *);
extern struct cmd_element show_thread_cpu_cmd;
diff --git a/lib/vector.h b/lib/vector.h
index deaf6a87..6b27fd96 100644
--- a/lib/vector.h
+++ b/lib/vector.h
@@ -45,19 +45,19 @@ typedef struct _vector *vector;
#define vector_active(V) ((V)->active)
/* Prototypes. */
-vector vector_init (unsigned int size);
-void vector_ensure (vector v, unsigned int num);
-int vector_empty_slot (vector v);
-int vector_set (vector v, void *val);
-int vector_set_index (vector v, unsigned int i, void *val);
-void vector_unset (vector v, unsigned int i);
-unsigned int vector_count (vector v);
-void vector_only_wrapper_free (vector v);
-void vector_only_index_free (void *index);
-void vector_free (vector v);
-vector vector_copy (vector v);
+extern vector vector_init (unsigned int size);
+extern void vector_ensure (vector v, unsigned int num);
+extern int vector_empty_slot (vector v);
+extern int vector_set (vector v, void *val);
+extern int vector_set_index (vector v, unsigned int i, void *val);
+extern void vector_unset (vector v, unsigned int i);
+extern unsigned int vector_count (vector v);
+extern void vector_only_wrapper_free (vector v);
+extern void vector_only_index_free (void *index);
+extern void vector_free (vector v);
+extern vector vector_copy (vector v);
-void *vector_lookup (vector, unsigned int);
-void *vector_lookup_ensure (vector, unsigned int);
+extern void *vector_lookup (vector, unsigned int);
+extern void *vector_lookup_ensure (vector, unsigned int);
#endif /* _ZEBRA_VECTOR_H */
diff --git a/lib/vty.h b/lib/vty.h
index 6faa7d89..7289b7e6 100644
--- a/lib/vty.h
+++ b/lib/vty.h
@@ -174,26 +174,49 @@ struct vty
#define VTY_GET_INTEGER(NAME,V,STR) \
VTY_GET_INTEGER_RANGE(NAME,V,STR,0U,UINT32_MAX)
+#define VTY_GET_IPV4_ADDRESS(NAME,V,STR) \
+{ \
+ int retv; \
+ retv = inet_aton ((STR), &(V)); \
+ if (!retv) \
+ { \
+ vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \
+ return CMD_WARNING; \
+ } \
+}
+
+#define VTY_GET_IPV4_PREFIX(NAME,V,STR) \
+{ \
+ int retv; \
+ retv = str2prefix_ipv4 ((STR), &(V)); \
+ if (retv <= 0) \
+ { \
+ vty_out (vty, "%% Invalid %s value%s", NAME, VTY_NEWLINE); \
+ return CMD_WARNING; \
+ } \
+}
+
/* Exported variables */
extern char integrate_default[];
/* Prototypes. */
-void vty_init (struct thread_master *);
-void vty_init_vtysh (void);
-void vty_reset (void);
-struct vty *vty_new (void);
-int vty_out (struct vty *, const char *, ...) PRINTF_ATTRIBUTE(2, 3);
-void vty_read_config (char *, char *);
-void vty_time_print (struct vty *, int);
-void vty_serv_sock (const char *, unsigned short, const char *);
-void vty_close (struct vty *);
-char *vty_get_cwd (void);
-void vty_log (const char *level, const char *proto, const char *fmt, va_list);
-int vty_config_lock (struct vty *);
-int vty_config_unlock (struct vty *);
-int vty_shell (struct vty *);
-int vty_shell_serv (struct vty *);
-void vty_hello (struct vty *);
+extern void vty_init (struct thread_master *);
+extern void vty_init_vtysh (void);
+extern void vty_reset (void);
+extern struct vty *vty_new (void);
+extern int vty_out (struct vty *, const char *, ...) PRINTF_ATTRIBUTE(2, 3);
+extern void vty_read_config (char *, char *);
+extern void vty_time_print (struct vty *, int);
+extern void vty_serv_sock (const char *, unsigned short, const char *);
+extern void vty_close (struct vty *);
+extern char *vty_get_cwd (void);
+extern void vty_log (const char *level, const char *proto,
+ const char *fmt, va_list);
+extern int vty_config_lock (struct vty *);
+extern int vty_config_unlock (struct vty *);
+extern int vty_shell (struct vty *);
+extern int vty_shell_serv (struct vty *);
+extern void vty_hello (struct vty *);
/* Send a fixed-size message to all vty terminal monitors; this should be
an async-signal-safe function. */
diff --git a/lib/workqueue.h b/lib/workqueue.h
index 5b4e82e5..257667e2 100644
--- a/lib/workqueue.h
+++ b/lib/workqueue.h
@@ -54,13 +54,13 @@ struct work_queue
/* specification for this work queue */
struct {
/* work function to process items with */
- wq_item_status (*workfunc) ();
+ wq_item_status (*workfunc) (void *);
/* error handling function, optional */
void (*errorfunc) (struct work_queue *, struct work_queue_item *);
/* callback to delete user specific item data */
- void (*del_item_data) ();
+ void (*del_item_data) (void *);
/* max number of retries to make for item that errors */
unsigned int max_retries;
@@ -81,11 +81,12 @@ struct work_queue
};
/* User API */
-struct work_queue *work_queue_new (struct thread_master *, const char *);
-void work_queue_free (struct work_queue *);
-void work_queue_add (struct work_queue *, void *);
+extern struct work_queue *work_queue_new (struct thread_master *,
+ const char *);
+extern void work_queue_free (struct work_queue *);
+extern void work_queue_add (struct work_queue *, void *);
/* Helpers, exported for thread.c and command.c */
-int work_queue_run (struct thread *);
+extern int work_queue_run (struct thread *);
extern struct cmd_element show_work_queues_cmd;
#endif /* _QUAGGA_WORK_QUEUE_H */
diff --git a/lib/zclient.c b/lib/zclient.c
index cd99b843..d0c4c3bd 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -32,9 +32,6 @@
#include "zclient.h"
#include "memory.h"
#include "table.h"
-
-#include "zebra/rib.h"
-#include "zebra/zserv.h"
/* Zebra client events. */
enum event {ZCLIENT_SCHEDULE, ZCLIENT_READ, ZCLIENT_CONNECT};
diff --git a/lib/zclient.h b/lib/zclient.h
index aa9f75c2..910db0dc 100644
--- a/lib/zclient.h
+++ b/lib/zclient.h
@@ -108,38 +108,38 @@ struct zapi_ipv4
};
/* Prototypes of zebra client service functions. */
-struct zclient *zclient_new (void);
-void zclient_init (struct zclient *, int);
-int zclient_start (struct zclient *);
-void zclient_stop (struct zclient *);
-void zclient_reset (struct zclient *);
+extern struct zclient *zclient_new (void);
+extern void zclient_init (struct zclient *, int);
+extern int zclient_start (struct zclient *);
+extern void zclient_stop (struct zclient *);
+extern void zclient_reset (struct zclient *);
/* Get TCP socket connection to zebra daemon at loopback address. */
-int zclient_socket (void);
+extern int zclient_socket (void);
/* Get unix stream socket connection to zebra daemon at given path. */
-int zclient_socket_un (const char *);
+extern int zclient_socket_un (const char *);
/* Send redistribute command to zebra daemon. Do not update zclient state. */
-int zebra_redistribute_send (int command, struct zclient *, int type);
+extern int zebra_redistribute_send (int command, struct zclient *, int type);
/* If state has changed, update state and call zebra_redistribute_send. */
-void zclient_redistribute (int command, struct zclient *, int type);
+extern void zclient_redistribute (int command, struct zclient *, int type);
/* If state has changed, update state and send the command to zebra. */
-void zclient_redistribute_default (int command, struct zclient *);
+extern void zclient_redistribute_default (int command, struct zclient *);
/* Send the message in zclient->obuf to the zebra daemon (or enqueue it).
Returns 0 for success or -1 on an I/O error. */
extern int zclient_send_message(struct zclient *);
-struct interface *zebra_interface_add_read (struct stream *);
-struct interface *zebra_interface_state_read (struct stream *s);
-struct connected *zebra_interface_address_read (int, struct stream *);
-void zebra_interface_if_set_value (struct stream *, struct interface *);
-void zebra_router_id_update_read (struct stream *s, struct prefix *rid);
-int zapi_ipv4_route (u_char, struct zclient *, struct prefix_ipv4 *,
- struct zapi_ipv4 *);
+extern struct interface *zebra_interface_add_read (struct stream *);
+extern struct interface *zebra_interface_state_read (struct stream *s);
+extern struct connected *zebra_interface_address_read (int, struct stream *);
+extern void zebra_interface_if_set_value (struct stream *, struct interface *);
+extern void zebra_router_id_update_read (struct stream *s, struct prefix *rid);
+extern int zapi_ipv4_route (u_char, struct zclient *, struct prefix_ipv4 *,
+ struct zapi_ipv4 *);
#ifdef HAVE_IPV6
/* IPv6 prefix add and delete function prototype. */
@@ -163,7 +163,7 @@ struct zapi_ipv6
u_int32_t metric;
};
-int zapi_ipv6_route (u_char cmd, struct zclient *zclient,
+extern int zapi_ipv6_route (u_char cmd, struct zclient *zclient,
struct prefix_ipv6 *p, struct zapi_ipv6 *api);
#endif /* HAVE_IPV6 */
diff --git a/lib/zebra.h b/lib/zebra.h
index 3a93b7a9..b4ab3352 100644
--- a/lib/zebra.h
+++ b/lib/zebra.h
@@ -345,6 +345,9 @@ struct in_pktinfo
#define IN6_ARE_ADDR_EQUAL IN6_IS_ADDR_EQUAL
#endif /* IN6_ARE_ADDR_EQUAL */
+/* default zebra TCP port for zclient */
+#define ZEBRA_PORT 2600
+
/* Zebra message types. */
#define ZEBRA_INTERFACE_ADD 1
#define ZEBRA_INTERFACE_DELETE 2