]> git.sur5r.net Git - openldap/blob - servers/slapd/back-monitor/back-monitor.h
Referrals should not (except in special cases) be
[openldap] / servers / slapd / back-monitor / back-monitor.h
1 /* back-monitor.h - ldap monitor back-end header file */
2 /* $OpenLDAP$ */
3 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
4  *
5  * Copyright 2001-2004 The OpenLDAP Foundation.
6  * Portions Copyright 2001-2003 Pierangelo Masarati.
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted only as authorized by the OpenLDAP
11  * Public License.
12  *
13  * A copy of this license is available in file LICENSE in the
14  * top-level directory of the distribution or, alternatively, at
15  * <http://www.OpenLDAP.org/license.html>.
16  */
17 /* ACKNOWLEDGEMENTS:
18  * This work was initially developed by Pierangelo Masarati for inclusion
19  * in OpenLDAP Software.
20  */
21
22 #ifndef _BACK_MONITOR_H_
23 #define _BACK_MONITOR_H_
24
25 #include <ldap_pvt.h>
26 #include <ldap_pvt_thread.h>
27 #include <avl.h>
28 #include <slap.h>
29
30 LDAP_BEGIN_DECL
31
32 /*
33  * The cache maps DNs to Entries.
34  * Each entry, on turn, holds the list of its children in the e_private field.
35  * This is used by search operation to perform onelevel and subtree candidate
36  * selection.
37  */
38 struct monitorcache {
39         struct berval           mc_ndn;
40         Entry                   *mc_e;
41 };
42
43 struct monitorentrypriv {
44         ldap_pvt_thread_mutex_t mp_mutex;       /* entry mutex */
45         Entry                   *mp_next;       /* pointer to next sibling */
46         Entry                   *mp_children;   /* pointer to first child */
47         struct monitorsubsys    *mp_info;       /* subsystem info */
48 #define mp_type         mp_info->mss_type
49         int                     mp_flags;       /* flags */
50
51 #define MONITOR_F_NONE          0x00
52 #define MONITOR_F_SUB           0x01            /* subentry of subsystem */
53 #define MONITOR_F_PERSISTENT    0x10            /* persistent entry */
54 #define MONITOR_F_PERSISTENT_CH 0x20            /* subsystem generates 
55                                                    persistent entries */
56 #define MONITOR_F_VOLATILE      0x40            /* volatile entry */
57 #define MONITOR_F_VOLATILE_CH   0x80            /* subsystem generates 
58                                                    volatile entries */
59 };
60
61 struct monitorinfo {
62
63         /*
64          * Internal data
65          */
66         Avlnode                 *mi_cache;
67         ldap_pvt_thread_mutex_t mi_cache_mutex;
68
69         /*
70          * Config parameters
71          */
72         struct berval           mi_l;
73         struct berval           mi_startTime;           /* don't free it! */
74         struct berval           mi_creatorsName;        /* don't free it! */
75
76         /*
77          * Specific schema entities
78          */
79         ObjectClass *mi_oc_monitor;
80         ObjectClass *mi_oc_monitorServer;
81         ObjectClass *mi_oc_monitorContainer;
82         ObjectClass *mi_oc_monitorCounterObject;
83         ObjectClass *mi_oc_monitorOperation;
84         ObjectClass *mi_oc_monitorConnection;
85         ObjectClass *mi_oc_managedObject;
86         ObjectClass *mi_oc_monitoredObject;
87
88         AttributeDescription *mi_ad_monitoredInfo;
89         AttributeDescription *mi_ad_managedInfo;
90         AttributeDescription *mi_ad_monitorCounter;
91         AttributeDescription *mi_ad_monitorOpCompleted;
92         AttributeDescription *mi_ad_monitorOpInitiated;
93         AttributeDescription *mi_ad_monitorConnectionNumber;
94         AttributeDescription *mi_ad_monitorConnectionAuthzDN;
95         AttributeDescription *mi_ad_monitorConnectionLocalAddress;
96         AttributeDescription *mi_ad_monitorConnectionPeerAddress;
97         AttributeDescription *mi_ad_monitorTimestamp;
98         AttributeDescription *mi_ad_monitorOverlay;
99
100         /*
101          * Generic description attribute
102          */
103         AttributeDescription *mi_ad_description;
104         AttributeDescription *mi_ad_seeAlso;
105         AttributeDescription *mi_ad_l;
106         AttributeDescription *mi_ad_labeledURI;
107         AttributeDescription *mi_ad_readOnly;
108         AttributeDescription *mi_ad_restrictedOperation;
109 };
110
111 /*
112  * DNs
113  */
114
115 #define SLAPD_MONITOR_AT                "cn"
116
117 #define SLAPD_MONITOR_LISTENER          0
118 #define SLAPD_MONITOR_LISTENER_NAME     "Listeners"
119 #define SLAPD_MONITOR_LISTENER_RDN      \
120         SLAPD_MONITOR_AT "=" SLAPD_MONITOR_LISTENER_NAME
121 #define SLAPD_MONITOR_LISTENER_DN       \
122         SLAPD_MONITOR_LISTENER_RDN "," SLAPD_MONITOR_DN
123
124 #define SLAPD_MONITOR_DATABASE          1
125 #define SLAPD_MONITOR_DATABASE_NAME     "Databases"
126 #define SLAPD_MONITOR_DATABASE_RDN      \
127         SLAPD_MONITOR_AT "=" SLAPD_MONITOR_DATABASE_NAME
128 #define SLAPD_MONITOR_DATABASE_DN       \
129         SLAPD_MONITOR_DATABASE_RDN "," SLAPD_MONITOR_DN
130
131 #define SLAPD_MONITOR_BACKEND           2
132 #define SLAPD_MONITOR_BACKEND_NAME      "Backends"
133 #define SLAPD_MONITOR_BACKEND_RDN       \
134         SLAPD_MONITOR_AT "=" SLAPD_MONITOR_BACKEND_NAME
135 #define SLAPD_MONITOR_BACKEND_DN        \
136         SLAPD_MONITOR_BACKEND_RDN "," SLAPD_MONITOR_DN
137
138 #define SLAPD_MONITOR_THREAD            3
139 #define SLAPD_MONITOR_THREAD_NAME       "Threads"
140 #define SLAPD_MONITOR_THREAD_RDN        \
141         SLAPD_MONITOR_AT "=" SLAPD_MONITOR_THREAD_NAME
142 #define SLAPD_MONITOR_THREAD_DN \
143         SLAPD_MONITOR_THREAD_RDN "," SLAPD_MONITOR_DN
144
145 #define SLAPD_MONITOR_SASL              4
146 #define SLAPD_MONITOR_SASL_NAME         "SASL"
147 #define SLAPD_MONITOR_SASL_RDN  \
148         SLAPD_MONITOR_AT "=" SLAPD_MONITOR_SASL_NAME
149 #define SLAPD_MONITOR_SASL_DN   \
150         SLAPD_MONITOR_SASL_RDN "," SLAPD_MONITOR_DN
151
152 #define SLAPD_MONITOR_TLS               5
153 #define SLAPD_MONITOR_TLS_NAME          "TLS"
154 #define SLAPD_MONITOR_TLS_RDN   \
155         SLAPD_MONITOR_AT "=" SLAPD_MONITOR_TLS_NAME
156 #define SLAPD_MONITOR_TLS_DN    \
157         SLAPD_MONITOR_TLS_RDN "," SLAPD_MONITOR_DN
158
159 #define SLAPD_MONITOR_CONN              6
160 #define SLAPD_MONITOR_CONN_NAME         "Connections"
161 #define SLAPD_MONITOR_CONN_RDN  \
162         SLAPD_MONITOR_AT "=" SLAPD_MONITOR_CONN_NAME
163 #define SLAPD_MONITOR_CONN_DN   \
164         SLAPD_MONITOR_CONN_RDN "," SLAPD_MONITOR_DN
165
166 #define SLAPD_MONITOR_RWW               7
167 #define SLAPD_MONITOR_RWW_NAME  "Waiters"
168 #define SLAPD_MONITOR_RWW_RDN   \
169         SLAPD_MONITOR_AT "=" SLAPD_MONITOR_RWW_NAME
170 #define SLAPD_MONITOR_RWW_DN    \
171         SLAPD_MONITOR_RWW_RDN "," SLAPD_MONITOR_DN
172
173 #define SLAPD_MONITOR_LOG               8
174 #define SLAPD_MONITOR_LOG_NAME          "Log"
175 #define SLAPD_MONITOR_LOG_RDN   \
176         SLAPD_MONITOR_AT "=" SLAPD_MONITOR_LOG_NAME
177 #define SLAPD_MONITOR_LOG_DN    \
178         SLAPD_MONITOR_LOG_RDN "," SLAPD_MONITOR_DN
179
180 #define SLAPD_MONITOR_OPS               9
181 #define SLAPD_MONITOR_OPS_NAME          "Operations"
182 #define SLAPD_MONITOR_OPS_RDN   \
183         SLAPD_MONITOR_AT "=" SLAPD_MONITOR_OPS_NAME
184 #define SLAPD_MONITOR_OPS_DN    \
185         SLAPD_MONITOR_OPS_RDN "," SLAPD_MONITOR_DN
186
187 #define SLAPD_MONITOR_SENT              10
188 #define SLAPD_MONITOR_SENT_NAME         "Statistics"
189 #define SLAPD_MONITOR_SENT_RDN  \
190         SLAPD_MONITOR_AT "=" SLAPD_MONITOR_SENT_NAME
191 #define SLAPD_MONITOR_SENT_DN   \
192         SLAPD_MONITOR_SENT_RDN "," SLAPD_MONITOR_DN
193
194 #define SLAPD_MONITOR_TIME              11
195 #define SLAPD_MONITOR_TIME_NAME         "Time"
196 #define SLAPD_MONITOR_TIME_RDN  \
197         SLAPD_MONITOR_AT "=" SLAPD_MONITOR_TIME_NAME
198 #define SLAPD_MONITOR_TIME_DN   \
199         SLAPD_MONITOR_TIME_RDN "," SLAPD_MONITOR_DN
200
201 #define SLAPD_MONITOR_OVERLAY           12
202 #define SLAPD_MONITOR_OVERLAY_NAME              "Overlay"
203 #define SLAPD_MONITOR_OVERLAY_RDN  \
204         SLAPD_MONITOR_AT "=" SLAPD_MONITOR_OVERLAY_NAME
205 #define SLAPD_MONITOR_OVERLAY_DN   \
206         SLAPD_MONITOR_OVERLAY_RDN "," SLAPD_MONITOR_DN
207
208 struct monitorsubsys {
209         int             mss_type;
210         char            *mss_name;
211         struct berval   mss_rdn;
212         struct berval   mss_dn;
213         struct berval   mss_ndn;
214         int             mss_flags;
215
216 #define MONITOR_HAS_VOLATILE_CH( mp ) \
217         ( ( mp )->mp_flags & MONITOR_F_VOLATILE_CH )
218 #define MONITOR_HAS_CHILDREN( mp ) \
219         ( ( mp )->mp_children || MONITOR_HAS_VOLATILE_CH( mp ) )
220
221         /* initialize entry and subentries */
222         int             ( *mss_init )( BackendDB * );
223         /* update existing dynamic entry and subentries */
224         int             ( *mss_update )( Operation *, Entry * );
225         /* create new dynamic subentries */
226         int             ( *mss_create )( Operation *,
227                                 struct berval *ndn, Entry *, Entry ** );
228         /* modify entry and subentries */
229         int             ( *mss_modify )( Operation *, Entry * );
230 };
231
232 extern struct monitorsubsys monitor_subsys[];
233
234 extern BackendDB *be_monitor;
235
236 /* increase this bufsize if entries in string form get too big */
237 #define BACKMONITOR_BUFSIZE     1024
238
239 /*
240  * cache
241  */
242
243 extern int monitor_cache_cmp LDAP_P(( const void *c1, const void *c2 ));
244 extern int monitor_cache_dup LDAP_P(( void *c1, void *c2 ));
245 extern int monitor_cache_add LDAP_P(( struct monitorinfo *mi, Entry *e ));
246 extern int monitor_cache_get LDAP_P(( struct monitorinfo *mi, struct berval *ndn, Entry **ep ));
247 extern int monitor_cache_dn2entry LDAP_P(( Operation *op, struct berval *ndn, Entry **ep, Entry **matched ));
248 extern int monitor_cache_lock LDAP_P(( Entry *e ));
249 extern int monitor_cache_release LDAP_P(( struct monitorinfo *mi, Entry *e ));
250
251 /*
252  * update
253  */
254
255 extern int monitor_entry_update LDAP_P(( Operation *op, Entry *e ));
256 extern int monitor_entry_create LDAP_P(( Operation *op, struct berval *ndn,
257                 Entry *e_parent, Entry **ep ));
258 extern int monitor_entry_modify LDAP_P(( Operation *op, Entry *e ));
259
260 LDAP_END_DECL
261
262 #include "proto-back-monitor.h"
263
264 #endif /* _back_monitor_h_ */
265