diff options
-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 |