1 #ifdef BRCM_SNMP_NOT_USED
2 #include <net-snmp/net-snmp-config.h>
11 #include <net-snmp/net-snmp-includes.h>
12 #include <net-snmp/agent/net-snmp-agent-includes.h>
14 #include <net-snmp/agent/watcher.h>
15 #include <net-snmp/agent/instance.h>
16 #include <net-snmp/agent/scalar.h>
23 /** @defgroup watcher watcher: watch a specified variable and process
24 * it as an instance or scalar object
29 netsnmp_get_watcher_handler(void)
31 return netsnmp_create_handler("watcher",
32 netsnmp_watcher_helper_handler);
35 netsnmp_watcher_info *
36 netsnmp_create_watcher_info(void *data, size_t size, u_char type, int flags)
38 netsnmp_watcher_info *winfo = SNMP_MALLOC_TYPEDEF(netsnmp_watcher_info);
41 winfo->data_size = size;
42 winfo->max_size = size; /* Probably wrong for non-fixed size data */
47 winfo->flags = WATCHER_FIXED_SIZE;
53 netsnmp_register_watched_instance(netsnmp_handler_registration *reginfo,
54 netsnmp_watcher_info *watchinfo)
56 netsnmp_mib_handler *whandler;
58 whandler = netsnmp_get_watcher_handler();
59 whandler->myvoid = (void *)watchinfo;
61 netsnmp_inject_handler(reginfo, whandler);
62 return netsnmp_register_instance(reginfo);
66 netsnmp_register_watched_scalar(netsnmp_handler_registration *reginfo,
67 netsnmp_watcher_info *watchinfo)
69 netsnmp_mib_handler *whandler;
71 whandler = netsnmp_get_watcher_handler();
72 whandler->myvoid = (void *)watchinfo;
74 netsnmp_inject_handler(reginfo, whandler);
75 return netsnmp_register_scalar(reginfo);
81 netsnmp_watcher_helper_handler(netsnmp_mib_handler *handler,
82 netsnmp_handler_registration *reginfo,
83 netsnmp_agent_request_info *reqinfo,
84 netsnmp_request_info *requests)
86 netsnmp_watcher_info *winfo = (netsnmp_watcher_info *) handler->myvoid;
90 DEBUGMSGTL(("helper:watcher", "Got request: %d\n", reqinfo->mode));
91 cmp = snmp_oid_compare(requests->requestvb->name,
92 requests->requestvb->name_length,
93 reginfo->rootoid, reginfo->rootoid_len);
95 DEBUGMSGTL(( "helper:watcher", " oid:", cmp));
96 DEBUGMSGOID(("helper:watcher", requests->requestvb->name,
97 requests->requestvb->name_length));
98 DEBUGMSG(( "helper:watcher", "\n"));
102 switch (reqinfo->mode) {
107 snmp_set_var_typed_value(requests->requestvb,
114 * SET requests. Should only get here if registered RWRITE
116 case MODE_SET_RESERVE1:
117 if (requests->requestvb->type != winfo->type)
118 netsnmp_set_request_error(reqinfo, requests,
121 if (((winfo->flags & WATCHER_MAX_SIZE) &&
122 requests->requestvb->val_len > winfo->max_size) ||
123 ((winfo->flags & WATCHER_FIXED_SIZE) &&
124 requests->requestvb->val_len != winfo->data_size))
125 netsnmp_set_request_error(reqinfo, requests,
126 SNMP_ERR_WRONGLENGTH);
129 case MODE_SET_RESERVE2:
131 * store old info for undo later
133 memdup(&old_data, (u_char *) winfo->data, winfo->data_size);
134 if (old_data == NULL) {
135 netsnmp_set_request_error(reqinfo, requests,
136 SNMP_ERR_RESOURCEUNAVAILABLE);
137 return SNMP_ERR_NOERROR;
139 netsnmp_request_add_list_data(requests,
140 netsnmp_create_data_list
141 ("watcher", old_data, free));
150 case MODE_SET_ACTION:
154 memcpy(winfo->data, (void *)requests->requestvb->val.string,
155 requests->requestvb->val_len);
160 netsnmp_request_get_list_data(requests, "watcher"),
164 case MODE_SET_COMMIT:
165 winfo->data_size = requests->requestvb->val_len;
169 if (handler->next && handler->next->access_method)
170 return netsnmp_call_next_handler(handler, reginfo, reqinfo,
172 return SNMP_ERR_NOERROR;
176 /***************************
178 * A specialised form of the above, reporting
179 * the sysUpTime indicated by a given timestamp
181 ***************************/
183 netsnmp_mib_handler *
184 netsnmp_get_watched_timestamp_handler(void)
186 return netsnmp_create_handler("watcher",
187 netsnmp_watched_timestamp_handler);
191 netsnmp_register_watched_timestamp(netsnmp_handler_registration *reginfo,
194 netsnmp_mib_handler *whandler;
196 whandler = netsnmp_get_watched_timestamp_handler();
197 whandler->myvoid = (void *)timestamp;
198 netsnmp_inject_handler(reginfo, whandler);
199 return netsnmp_register_scalar(reginfo); /* XXX - or instance? */
204 netsnmp_watched_timestamp_handler(netsnmp_mib_handler *handler,
205 netsnmp_handler_registration *reginfo,
206 netsnmp_agent_request_info *reqinfo,
207 netsnmp_request_info *requests)
209 marker_t timestamp = (marker_t) handler->myvoid;
213 DEBUGMSGTL(("helper:watcher:timestamp",
214 "Got request: %d\n", reqinfo->mode));
215 cmp = snmp_oid_compare(requests->requestvb->name,
216 requests->requestvb->name_length,
217 reginfo->rootoid, reginfo->rootoid_len);
219 DEBUGMSGTL(( "helper:watcher:timestamp", " oid:", cmp));
220 DEBUGMSGOID(("helper:watcher:timestamp", requests->requestvb->name,
221 requests->requestvb->name_length));
222 DEBUGMSG(( "helper:watcher:timestamp", "\n"));
226 switch (reqinfo->mode) {
231 uptime = netsnmp_marker_uptime( timestamp );
232 snmp_set_var_typed_value(requests->requestvb,
239 * Timestamps are inherently Read-Only,
240 * so don't need to support SET requests.
243 if (handler->next && handler->next->access_method)
244 return netsnmp_call_next_handler(handler, reginfo, reqinfo,
246 return SNMP_ERR_NOERROR;
249 #endif /* #if BRCM_SNMP_NOT_USED */