forked from Mirror/frr

* (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
93 lines
3.1 KiB
C
93 lines
3.1 KiB
C
/*
|
|
* Quagga Work Queues.
|
|
*
|
|
* Copyright (C) 2005 Sun Microsystems, Inc.
|
|
*
|
|
* This file is part of Quagga.
|
|
*
|
|
* Quagga is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2, or (at your option) any
|
|
* later version.
|
|
*
|
|
* Quagga is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with Quagga; see the file COPYING. If not, write to the Free
|
|
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
* 02111-1307, USA.
|
|
*/
|
|
|
|
#ifndef _QUAGGA_WORK_QUEUE_H
|
|
#define _QUAGGA_WORK_QUEUE_H
|
|
|
|
/* Work queue default hold and cycle times - millisec */
|
|
#define WORK_QUEUE_DEFAULT_HOLD 50 /* hold time for initial run of a queue */
|
|
#define WORK_QUEUE_DEFAULT_DELAY 10 /* minimum delay between queue runs */
|
|
|
|
/* action value, for use by item processor and item error handlers */
|
|
typedef enum
|
|
{
|
|
WQ_SUCCESS = 0,
|
|
WQ_ERROR, /* Error, run error handler if provided */
|
|
WQ_RETRY_NOW, /* retry immediately */
|
|
WQ_RETRY_LATER, /* retry later, cease processing work queue */
|
|
WQ_REQUEUE /* requeue item, continue processing work queue */
|
|
} wq_item_status;
|
|
|
|
/* A single work queue item, unsurprisingly */
|
|
struct work_queue_item
|
|
{
|
|
void *data; /* opaque data */
|
|
unsigned short ran; /* # of times item has been run */
|
|
};
|
|
|
|
struct work_queue
|
|
{
|
|
struct thread_master *master; /* thread master */
|
|
struct thread *thread; /* thread, if one is active */
|
|
char *name; /* work queue name */
|
|
|
|
/* specification for this work queue */
|
|
struct {
|
|
/* work function to process items with */
|
|
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 *);
|
|
|
|
/* max number of retries to make for item that errors */
|
|
unsigned int max_retries;
|
|
|
|
unsigned int hold; /* hold time for first run, in ms */
|
|
unsigned int delay; /* min delay between queue runs, in ms */
|
|
} spec;
|
|
|
|
/* remaining fields should be opaque to users */
|
|
struct list *items; /* queue item list */
|
|
unsigned long runs; /* runs count */
|
|
|
|
struct {
|
|
unsigned int best;
|
|
unsigned int granularity;
|
|
unsigned long total;
|
|
} cycles; /* cycle counts */
|
|
};
|
|
|
|
/* User API */
|
|
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 */
|
|
extern int work_queue_run (struct thread *);
|
|
extern struct cmd_element show_work_queues_cmd;
|
|
#endif /* _QUAGGA_WORK_QUEUE_H */
|