| /* |
| * Copyright (C) 1995, 1997-1999, 2002 Jeffrey A. Uphoff |
| * Major rewrite by Olaf Kirch, Dec. 1996. |
| * |
| * NSM for Linux. |
| */ |
| |
| #include <netinet/in.h> |
| |
| /* |
| * Primary information structure. |
| */ |
| struct notify_list { |
| mon mon; /* Big honkin' NSM structure. */ |
| in_port_t port; /* port number for callback */ |
| short int times; /* Counter used for various things. */ |
| int state; /* For storing notified state for callbacks. */ |
| char *dns_name; /* used for matching incoming |
| * NOTIFY requests */ |
| struct notify_list *next; /* Linked list forward pointer. */ |
| struct notify_list *prev; /* Linked list backward pointer. */ |
| uint32_t xid; /* XID of MS_NOTIFY RPC call */ |
| time_t when; /* notify: timeout for re-xmit */ |
| }; |
| |
| typedef struct notify_list notify_list; |
| |
| /* |
| * Global Variables |
| */ |
| extern notify_list * rtnl; /* Run-time notify list */ |
| extern notify_list * notify; /* Pending RPC calls */ |
| |
| /* |
| * List-handling functions |
| */ |
| extern notify_list * nlist_new(char *, char *, int); |
| extern void nlist_insert(notify_list **, notify_list *); |
| extern void nlist_remove(notify_list **, notify_list *); |
| extern void nlist_insert_timer(notify_list **, notify_list *); |
| extern notify_list * nlist_clone(notify_list *); |
| extern void nlist_free(notify_list **, notify_list *); |
| extern void nlist_kill(notify_list **); |
| extern notify_list * nlist_gethost(notify_list *, char *, int); |
| |
| /* |
| * List-handling macros. |
| * THESE INHERIT INFORMATION FROM PREVIOUSLY-DEFINED MACROS. |
| * (So don't change their order unless you study them first!) |
| */ |
| #define NL_NEXT(L) ((L)->next) |
| #define NL_FIRST NL_NEXT |
| #define NL_PREV(L) ((L)->prev) |
| #define NL_DATA(L) ((L)->mon) |
| #define NL_STATE(L) ((L)->state) |
| #define NL_TIMES(L) ((L)->times) |
| #define NL_MON_ID(L) (NL_DATA((L)).mon_id) |
| #define NL_PRIV(L) (NL_DATA((L)).priv) |
| #define NL_MON_NAME(L) (NL_MON_ID((L)).mon_name) |
| #define NL_MY_ID(L) (NL_MON_ID((L)).my_id) |
| #define NL_MY_NAME(L) (NL_MY_ID((L)).my_name) |
| #define NL_MY_PROC(L) (NL_MY_ID((L)).my_proc) |
| #define NL_MY_PROG(L) (NL_MY_ID((L)).my_prog) |
| #define NL_MY_VERS(L) (NL_MY_ID((L)).my_vers) |
| #define NL_WHEN(L) ((L)->when) |