diff options
author | paul <paul> | 2005-05-06 21:25:49 +0000 |
---|---|---|
committer | paul <paul> | 2005-05-06 21:25:49 +0000 |
commit | 8cc4198f9fabe5f10f5a773de1503d82f33a01fb (patch) | |
tree | 77045da709ff66629bd12029b9ee17700360909b | |
parent | e7fe8c88c3d552400e1ae3ae9243319ab95d6f2d (diff) |
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
-rw-r--r-- | lib/ChangeLog | 26 | ||||
-rw-r--r-- | lib/buffer.h | 6 | ||||
-rw-r--r-- | lib/checksum.c | 4 | ||||
-rw-r--r-- | lib/command.c | 10 | ||||
-rw-r--r-- | lib/command.h | 42 | ||||
-rw-r--r-- | lib/distribute.c | 27 | ||||
-rw-r--r-- | lib/distribute.h | 20 | ||||
-rw-r--r-- | lib/filter.c | 62 | ||||
-rw-r--r-- | lib/filter.h | 12 | ||||
-rw-r--r-- | lib/getopt.h | 2 | ||||
-rw-r--r-- | lib/hash.c | 9 | ||||
-rw-r--r-- | lib/hash.h | 24 | ||||
-rw-r--r-- | lib/if.c | 28 | ||||
-rw-r--r-- | lib/if.h | 52 | ||||
-rw-r--r-- | lib/if_rmap.c | 34 | ||||
-rw-r--r-- | lib/if_rmap.h | 12 | ||||
-rw-r--r-- | lib/jhash.h | 10 | ||||
-rw-r--r-- | lib/keychain.c | 77 | ||||
-rw-r--r-- | lib/keychain.h | 10 | ||||
-rw-r--r-- | lib/linklist.c | 4 | ||||
-rw-r--r-- | lib/linklist.h | 28 | ||||
-rw-r--r-- | lib/log.h | 42 | ||||
-rw-r--r-- | lib/md5.c | 30 | ||||
-rw-r--r-- | lib/memory.c | 2 | ||||
-rw-r--r-- | lib/memory.h | 53 | ||||
-rw-r--r-- | lib/network.h | 4 | ||||
-rw-r--r-- | lib/plist.c | 26 | ||||
-rw-r--r-- | lib/plist.h | 29 | ||||
-rw-r--r-- | lib/pqueue.c | 2 | ||||
-rw-r--r-- | lib/pqueue.h | 10 | ||||
-rw-r--r-- | lib/prefix.c | 10 | ||||
-rw-r--r-- | lib/prefix.h | 83 | ||||
-rw-r--r-- | lib/privs.h | 6 | ||||
-rw-r--r-- | lib/routemap.c | 36 | ||||
-rw-r--r-- | lib/routemap.h | 56 | ||||
-rw-r--r-- | lib/sigevent.c | 4 | ||||
-rw-r--r-- | lib/sigevent.h | 4 | ||||
-rw-r--r-- | lib/smux.h | 23 | ||||
-rw-r--r-- | lib/sockopt.h | 31 | ||||
-rw-r--r-- | lib/sockunion.c | 8 | ||||
-rw-r--r-- | lib/sockunion.h | 54 | ||||
-rw-r--r-- | lib/str.h | 11 | ||||
-rw-r--r-- | lib/stream.h | 101 | ||||
-rw-r--r-- | lib/table.c | 10 | ||||
-rw-r--r-- | lib/table.h | 30 | ||||
-rw-r--r-- | lib/thread.c | 36 | ||||
-rw-r--r-- | lib/thread.h | 52 | ||||
-rw-r--r-- | lib/vector.h | 26 | ||||
-rw-r--r-- | lib/vty.h | 55 | ||||
-rw-r--r-- | lib/workqueue.h | 13 | ||||
-rw-r--r-- | lib/zclient.c | 3 | ||||
-rw-r--r-- | lib/zclient.h | 36 | ||||
-rw-r--r-- | lib/zebra.h | 3 |
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); @@ -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; @@ -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 */ @@ -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; @@ -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 (...) { ... } @@ -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[]; @@ -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 */ @@ -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 */ @@ -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 */ @@ -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 |