diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/zebra.h | 50 |
1 files changed, 46 insertions, 4 deletions
diff --git a/lib/zebra.h b/lib/zebra.h index 06302b3d..c3e41284 100644 --- a/lib/zebra.h +++ b/lib/zebra.h @@ -28,8 +28,15 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #ifdef SUNOS_5 #define _XPG4_2 #define __EXTENSIONS__ +typedef unsigned int u_int32_t; +typedef unsigned short u_int16_t; +typedef unsigned short u_int8_t; #endif /* SUNOS_5 */ +#ifndef HAVE_SOCKLEN_T +typedef int socklen_t; +#endif /* HAVE_SOCKLEN_T */ + #include <unistd.h> #include <stdio.h> #include <stdlib.h> @@ -78,10 +85,6 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #include <linux/version.h> #endif /* HAVE_LINUX_VERSION_H */ -#ifdef HAVE_ASM_TYPES_H -#include <asm/types.h> -#endif /* HAVE_ASM_TYPES_H */ - /* misc include group */ #include <stdarg.h> #include <assert.h> @@ -309,4 +312,43 @@ typedef u_char safi_t; typedef u_int16_t zebra_size_t; typedef u_int8_t zebra_command_t; +/* FIFO -- first in first out structure and macros. */ +struct fifo +{ + struct fifo *next; + struct fifo *prev; +}; + +#define FIFO_INIT(F) \ + do { \ + struct fifo *Xfifo = (struct fifo *)(F); \ + Xfifo->next = Xfifo->prev = Xfifo; \ + } while (0) + +#define FIFO_ADD(F,N) \ + do { \ + struct fifo *Xfifo = (struct fifo *)(F); \ + struct fifo *Xnode = (struct fifo *)(N); \ + Xnode->next = Xfifo; \ + Xnode->prev = Xfifo->prev; \ + Xfifo->prev = Xfifo->prev->next = Xnode; \ + } while (0) + +#define FIFO_DEL(N) \ + do { \ + struct fifo *Xnode = (struct fifo *)(N); \ + Xnode->prev->next = Xnode->next; \ + Xnode->next->prev = Xnode->prev; \ + } while (0) + +#define FIFO_HEAD(F) \ + ((((struct fifo *)(F))->next == (struct fifo *)(F)) \ + ? NULL : (F)->next) + +#define FIFO_EMPTY(F) \ + (((struct fifo *)(F))->next == (struct fifo *)(F)) + +#define FIFO_TOP(F) \ + (FIFO_EMPTY(F) ? NULL : ((struct fifo *)(F))->next) + #endif /* _ZEBRA_H */ |