2
* Note: this file originally auto-generated by mib2c using
3
* version : 1.67 $ of : mfd-interface.m2c,v $
5
* $Id: ipAddressPrefixTable_interface.c,v 1.2 2005/12/01 15:49:39 rstory Exp $
8
* *********************************************************************
9
* *********************************************************************
10
* *********************************************************************
12
* *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
15
* *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
18
* *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
21
* *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
24
* *********************************************************************
25
* *********************************************************************
26
* *********************************************************************
30
* standard Net-SNMP includes
32
#include <net-snmp/net-snmp-config.h>
33
#include <net-snmp/net-snmp-includes.h>
34
#include <net-snmp/agent/net-snmp-agent-includes.h>
37
* include our parent header
39
#include "ipAddressPrefixTable.h"
42
#include <net-snmp/agent/table_container.h>
43
#include <net-snmp/library/container.h>
45
#include "ipAddressPrefixTable_interface.h"
49
/**********************************************************************
50
**********************************************************************
52
*** Table ipAddressPrefixTable
54
**********************************************************************
55
**********************************************************************/
57
* IP-MIB::ipAddressPrefixTable is subid 32 of ip.
58
* Its status is Current.
59
* OID: .1.3.6.1.2.1.4.32, length: 8
61
typedef struct ipAddressPrefixTable_interface_ctx_s {
63
netsnmp_container *container;
66
ipAddressPrefixTable_registration *user_ctx;
68
netsnmp_table_registration_info tbl_info;
70
netsnmp_baby_steps_access_methods access_multiplexer;
72
} ipAddressPrefixTable_interface_ctx;
74
static ipAddressPrefixTable_interface_ctx ipAddressPrefixTable_if_ctx;
77
_ipAddressPrefixTable_container_init(ipAddressPrefixTable_interface_ctx *
80
_ipAddressPrefixTable_container_shutdown(ipAddressPrefixTable_interface_ctx
85
ipAddressPrefixTable_container_get(void)
87
return ipAddressPrefixTable_if_ctx.container;
90
ipAddressPrefixTable_registration *
91
ipAddressPrefixTable_registration_get(void)
93
return ipAddressPrefixTable_if_ctx.user_ctx;
96
ipAddressPrefixTable_registration *
97
ipAddressPrefixTable_registration_set(ipAddressPrefixTable_registration *
100
ipAddressPrefixTable_registration *old =
101
ipAddressPrefixTable_if_ctx.user_ctx;
102
ipAddressPrefixTable_if_ctx.user_ctx = newreg;
107
ipAddressPrefixTable_container_size(void)
109
return CONTAINER_SIZE(ipAddressPrefixTable_if_ctx.container);
113
* mfd multiplexer modes
115
static Netsnmp_Node_Handler _mfd_ipAddressPrefixTable_pre_request;
116
static Netsnmp_Node_Handler _mfd_ipAddressPrefixTable_post_request;
117
static Netsnmp_Node_Handler _mfd_ipAddressPrefixTable_object_lookup;
118
static Netsnmp_Node_Handler _mfd_ipAddressPrefixTable_get_values;
121
* Initialize the table ipAddressPrefixTable
122
* (Define its contents and how it's structured)
125
_ipAddressPrefixTable_initialize_interface
126
(ipAddressPrefixTable_registration * reg_ptr, u_long flags)
128
netsnmp_baby_steps_access_methods *access_multiplexer =
129
&ipAddressPrefixTable_if_ctx.access_multiplexer;
130
netsnmp_table_registration_info *tbl_info =
131
&ipAddressPrefixTable_if_ctx.tbl_info;
132
netsnmp_handler_registration *reginfo;
133
netsnmp_mib_handler *handler;
136
DEBUGMSGTL(("internal:ipAddressPrefixTable:_ipAddressPrefixTable_initialize_interface", "called\n"));
139
/*************************************************
141
* save interface context for ipAddressPrefixTable
144
* Setting up the table's definition
146
netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
147
/** index: ipAddressPrefixIfIndex */
149
/** index: ipAddressPrefixType */
151
/** index: ipAddressPrefixPrefix */
153
/** index: ipAddressPrefixLength */
157
* Define the minimum and maximum accessible columns. This
158
* optimizes retrival.
160
tbl_info->min_column = IPADDRESSPREFIXTABLE_MIN_COL;
161
tbl_info->max_column = IPADDRESSPREFIXTABLE_MAX_COL;
166
ipAddressPrefixTable_if_ctx.user_ctx = reg_ptr;
169
* call data access initialization code
171
ipAddressPrefixTable_init_data(reg_ptr);
174
* set up the container
176
_ipAddressPrefixTable_container_init(&ipAddressPrefixTable_if_ctx);
177
if (NULL == ipAddressPrefixTable_if_ctx.container) {
179
"could not initialize container for ipAddressPrefixTable\n");
184
* access_multiplexer: REQUIRED wrapper for get request handling
186
access_multiplexer->object_lookup =
187
_mfd_ipAddressPrefixTable_object_lookup;
188
access_multiplexer->get_values = _mfd_ipAddressPrefixTable_get_values;
193
access_multiplexer->pre_request =
194
_mfd_ipAddressPrefixTable_pre_request;
195
access_multiplexer->post_request =
196
_mfd_ipAddressPrefixTable_post_request;
199
/*************************************************
201
* Create a registration, save our reg data, register table.
203
DEBUGMSGTL(("ipAddressPrefixTable:init_ipAddressPrefixTable",
204
"Registering ipAddressPrefixTable as a mibs-for-dummies table.\n"));
206
netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
208
netsnmp_handler_registration_create("ipAddressPrefixTable",
210
ipAddressPrefixTable_oid,
211
ipAddressPrefixTable_oid_size,
212
HANDLER_CAN_BABY_STEP |
214
if (NULL == reginfo) {
216
"error registering table ipAddressPrefixTable\n");
219
reginfo->my_reg_void = &ipAddressPrefixTable_if_ctx;
221
/*************************************************
223
* set up baby steps handler, create it and inject it
225
if (access_multiplexer->object_lookup)
226
mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
227
if (access_multiplexer->set_values)
228
mfd_modes |= BABY_STEP_SET_VALUES;
229
if (access_multiplexer->irreversible_commit)
230
mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
231
if (access_multiplexer->object_syntax_checks)
232
mfd_modes |= BABY_STEP_CHECK_OBJECT;
234
if (access_multiplexer->pre_request)
235
mfd_modes |= BABY_STEP_PRE_REQUEST;
236
if (access_multiplexer->post_request)
237
mfd_modes |= BABY_STEP_POST_REQUEST;
239
if (access_multiplexer->undo_setup)
240
mfd_modes |= BABY_STEP_UNDO_SETUP;
241
if (access_multiplexer->undo_cleanup)
242
mfd_modes |= BABY_STEP_UNDO_CLEANUP;
243
if (access_multiplexer->undo_sets)
244
mfd_modes |= BABY_STEP_UNDO_SETS;
246
if (access_multiplexer->row_creation)
247
mfd_modes |= BABY_STEP_ROW_CREATE;
248
if (access_multiplexer->consistency_checks)
249
mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
250
if (access_multiplexer->commit)
251
mfd_modes |= BABY_STEP_COMMIT;
252
if (access_multiplexer->undo_commit)
253
mfd_modes |= BABY_STEP_UNDO_COMMIT;
255
handler = netsnmp_baby_steps_handler_get(mfd_modes);
256
netsnmp_inject_handler(reginfo, handler);
258
/*************************************************
260
* inject row_merge helper with prefix rootoid_len + 2 (entry.col)
262
handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
263
netsnmp_inject_handler(reginfo, handler);
265
/*************************************************
267
* inject container_table helper
270
netsnmp_container_table_handler_get(tbl_info,
271
ipAddressPrefixTable_if_ctx.
273
TABLE_CONTAINER_KEY_NETSNMP_INDEX);
274
netsnmp_inject_handler(reginfo, handler);
276
/*************************************************
278
* inject cache helper
280
if (NULL != ipAddressPrefixTable_if_ctx.cache) {
282
netsnmp_cache_handler_get(ipAddressPrefixTable_if_ctx.cache);
283
netsnmp_inject_handler(reginfo, handler);
289
netsnmp_register_table(reginfo, tbl_info);
291
} /* _ipAddressPrefixTable_initialize_interface */
295
* Shutdown the table ipAddressPrefixTable
298
_ipAddressPrefixTable_shutdown_interface(ipAddressPrefixTable_registration
302
* shutdown the container
304
_ipAddressPrefixTable_container_shutdown(&ipAddressPrefixTable_if_ctx);
308
ipAddressPrefixTable_valid_columns_set(netsnmp_column_info *vc)
310
ipAddressPrefixTable_if_ctx.tbl_info.valid_columns = vc;
311
} /* ipAddressPrefixTable_valid_columns_set */
315
* convert the index component stored in the context to an oid
318
ipAddressPrefixTable_index_to_oid(netsnmp_index * oid_idx,
319
ipAddressPrefixTable_mib_index * mib_idx)
321
int err = SNMP_ERR_NOERROR;
324
* temp storage for parsing indexes
327
* ipAddressPrefixIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
329
netsnmp_variable_list var_ipAddressPrefixIfIndex;
331
* ipAddressPrefixType(2)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
333
netsnmp_variable_list var_ipAddressPrefixType;
335
* ipAddressPrefixPrefix(3)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
337
netsnmp_variable_list var_ipAddressPrefixPrefix;
339
* ipAddressPrefixLength(4)/InetAddressPrefixLength/ASN_UNSIGNED/u_long(u_long)//l/a/w/e/R/d/H
341
netsnmp_variable_list var_ipAddressPrefixLength;
346
memset(&var_ipAddressPrefixIfIndex, 0x00,
347
sizeof(var_ipAddressPrefixIfIndex));
348
var_ipAddressPrefixIfIndex.type = ASN_INTEGER;
349
memset(&var_ipAddressPrefixType, 0x00,
350
sizeof(var_ipAddressPrefixType));
351
var_ipAddressPrefixType.type = ASN_INTEGER;
352
memset(&var_ipAddressPrefixPrefix, 0x00,
353
sizeof(var_ipAddressPrefixPrefix));
354
var_ipAddressPrefixPrefix.type = ASN_OCTET_STR;
355
memset(&var_ipAddressPrefixLength, 0x00,
356
sizeof(var_ipAddressPrefixLength));
357
var_ipAddressPrefixLength.type = ASN_UNSIGNED;
360
* chain temp index varbinds together
362
var_ipAddressPrefixIfIndex.next_variable = &var_ipAddressPrefixType;
363
var_ipAddressPrefixType.next_variable = &var_ipAddressPrefixPrefix;
364
var_ipAddressPrefixPrefix.next_variable = &var_ipAddressPrefixLength;
365
var_ipAddressPrefixLength.next_variable = NULL;
368
DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_index_to_oid", "called\n"));
371
* ipAddressPrefixIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
373
snmp_set_var_value(&var_ipAddressPrefixIfIndex,
374
(u_char *) & mib_idx->ipAddressPrefixIfIndex,
375
sizeof(mib_idx->ipAddressPrefixIfIndex));
378
* ipAddressPrefixType(2)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
380
snmp_set_var_value(&var_ipAddressPrefixType,
381
(u_char *) & mib_idx->ipAddressPrefixType,
382
sizeof(mib_idx->ipAddressPrefixType));
385
* ipAddressPrefixPrefix(3)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
387
snmp_set_var_value(&var_ipAddressPrefixPrefix,
388
(u_char *) & mib_idx->ipAddressPrefixPrefix,
389
mib_idx->ipAddressPrefixPrefix_len *
390
sizeof(mib_idx->ipAddressPrefixPrefix[0]));
393
* ipAddressPrefixLength(4)/InetAddressPrefixLength/ASN_UNSIGNED/u_long(u_long)//l/a/w/e/R/d/H
395
snmp_set_var_value(&var_ipAddressPrefixLength,
396
(u_char *) & mib_idx->ipAddressPrefixLength,
397
sizeof(mib_idx->ipAddressPrefixLength));
400
err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
401
NULL, 0, &var_ipAddressPrefixIfIndex);
403
snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
406
* parsing may have allocated memory. free it.
408
snmp_reset_var_buffers(&var_ipAddressPrefixIfIndex);
411
} /* ipAddressPrefixTable_index_to_oid */
414
* extract ipAddressPrefixTable indexes from a netsnmp_index
416
* @retval SNMP_ERR_NOERROR : no error
417
* @retval SNMP_ERR_GENERR : error
420
ipAddressPrefixTable_index_from_oid(netsnmp_index * oid_idx,
421
ipAddressPrefixTable_mib_index *
424
int err = SNMP_ERR_NOERROR;
427
* temp storage for parsing indexes
430
* ipAddressPrefixIfIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
432
netsnmp_variable_list var_ipAddressPrefixIfIndex;
434
* ipAddressPrefixType(2)/InetAddressType/ASN_INTEGER/long(u_long)//l/a/w/E/r/d/h
436
netsnmp_variable_list var_ipAddressPrefixType;
438
* ipAddressPrefixPrefix(3)/InetAddress/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/h
440
netsnmp_variable_list var_ipAddressPrefixPrefix;
442
* ipAddressPrefixLength(4)/InetAddressPrefixLength/ASN_UNSIGNED/u_long(u_long)//l/a/w/e/R/d/H
444
netsnmp_variable_list var_ipAddressPrefixLength;
449
memset(&var_ipAddressPrefixIfIndex, 0x00,
450
sizeof(var_ipAddressPrefixIfIndex));
451
var_ipAddressPrefixIfIndex.type = ASN_INTEGER;
452
memset(&var_ipAddressPrefixType, 0x00,
453
sizeof(var_ipAddressPrefixType));
454
var_ipAddressPrefixType.type = ASN_INTEGER;
455
memset(&var_ipAddressPrefixPrefix, 0x00,
456
sizeof(var_ipAddressPrefixPrefix));
457
var_ipAddressPrefixPrefix.type = ASN_OCTET_STR;
458
memset(&var_ipAddressPrefixLength, 0x00,
459
sizeof(var_ipAddressPrefixLength));
460
var_ipAddressPrefixLength.type = ASN_UNSIGNED;
463
* chain temp index varbinds together
465
var_ipAddressPrefixIfIndex.next_variable = &var_ipAddressPrefixType;
466
var_ipAddressPrefixType.next_variable = &var_ipAddressPrefixPrefix;
467
var_ipAddressPrefixPrefix.next_variable = &var_ipAddressPrefixLength;
468
var_ipAddressPrefixLength.next_variable = NULL;
471
DEBUGMSGTL(("verbose:ipAddressPrefixTable:ipAddressPrefixTable_index_from_oid", "called\n"));
474
* parse the oid into the individual index components
476
err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
477
&var_ipAddressPrefixIfIndex);
478
if (err == SNMP_ERR_NOERROR) {
482
mib_idx->ipAddressPrefixIfIndex =
483
*((long *) var_ipAddressPrefixIfIndex.val.string);
484
mib_idx->ipAddressPrefixType =
485
*((u_long *) var_ipAddressPrefixType.val.string);
487
* NOTE: val_len is in bytes, ipAddressPrefixPrefix_len might not be
489
if (var_ipAddressPrefixPrefix.val_len >
490
sizeof(mib_idx->ipAddressPrefixPrefix))
491
err = SNMP_ERR_GENERR;
493
memcpy(mib_idx->ipAddressPrefixPrefix,
494
var_ipAddressPrefixPrefix.val.string,
495
var_ipAddressPrefixPrefix.val_len);
496
mib_idx->ipAddressPrefixPrefix_len =
497
var_ipAddressPrefixPrefix.val_len /
498
sizeof(mib_idx->ipAddressPrefixPrefix[0]);
500
mib_idx->ipAddressPrefixLength =
501
*((u_long *) var_ipAddressPrefixLength.val.string);
507
* parsing may have allocated memory. free it.
509
snmp_reset_var_buffers(&var_ipAddressPrefixIfIndex);
512
} /* ipAddressPrefixTable_index_from_oid */
516
*********************************************************************
518
* allocate resources for a ipAddressPrefixTable_rowreq_ctx
520
ipAddressPrefixTable_rowreq_ctx *
521
ipAddressPrefixTable_allocate_rowreq_ctx(void *user_init_ctx)
523
ipAddressPrefixTable_rowreq_ctx *rowreq_ctx =
524
SNMP_MALLOC_TYPEDEF(ipAddressPrefixTable_rowreq_ctx);
526
DEBUGMSGTL(("internal:ipAddressPrefixTable:ipAddressPrefixTable_allocate_rowreq_ctx", "called\n"));
528
if (NULL == rowreq_ctx) {
529
snmp_log(LOG_ERR, "Couldn't allocate memory for a "
530
"ipAddressPrefixTable_rowreq_ctx.\n");
533
rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
535
rowreq_ctx->ipAddressPrefixTable_data_list = NULL;
538
* if we allocated data, call init routine
540
if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
541
if (SNMPERR_SUCCESS !=
542
ipAddressPrefixTable_rowreq_ctx_init(rowreq_ctx,
544
ipAddressPrefixTable_release_rowreq_ctx(rowreq_ctx);
550
} /* ipAddressPrefixTable_allocate_rowreq_ctx */
554
* release resources for a ipAddressPrefixTable_rowreq_ctx
557
ipAddressPrefixTable_release_rowreq_ctx(ipAddressPrefixTable_rowreq_ctx *
560
DEBUGMSGTL(("internal:ipAddressPrefixTable:ipAddressPrefixTable_release_rowreq_ctx", "called\n"));
562
netsnmp_assert(NULL != rowreq_ctx);
564
ipAddressPrefixTable_rowreq_ctx_cleanup(rowreq_ctx);
567
* free index oid pointer
569
if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
570
free(rowreq_ctx->oid_idx.oids);
572
SNMP_FREE(rowreq_ctx);
573
} /* ipAddressPrefixTable_release_rowreq_ctx */
580
_mfd_ipAddressPrefixTable_pre_request(netsnmp_mib_handler *handler, netsnmp_handler_registration
581
*reginfo, netsnmp_agent_request_info
583
netsnmp_request_info *requests)
587
DEBUGMSGTL(("internal:ipAddressPrefixTable:_mfd_ipAddressPrefixTable_pre_request", "called\n"));
589
if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
590
DEBUGMSGTL(("internal:ipAddressPrefixTable",
591
"skipping additional pre_request\n"));
592
return SNMP_ERR_NOERROR;
595
rc = ipAddressPrefixTable_pre_request(ipAddressPrefixTable_if_ctx.
597
if (MFD_SUCCESS != rc) {
599
* nothing we can do about it but log it
601
DEBUGMSGTL(("ipAddressPrefixTable", "error %d from "
602
"ipAddressPrefixTable_pre_request\n", rc));
603
netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
606
return SNMP_ERR_NOERROR;
607
} /* _mfd_ipAddressPrefixTable_pre_request */
614
_mfd_ipAddressPrefixTable_post_request(netsnmp_mib_handler *handler, netsnmp_handler_registration
615
*reginfo, netsnmp_agent_request_info
617
netsnmp_request_info *requests)
619
ipAddressPrefixTable_rowreq_ctx *rowreq_ctx =
620
netsnmp_container_table_row_extract(requests);
623
DEBUGMSGTL(("internal:ipAddressPrefixTable:_mfd_ipAddressPrefixTable_post_request", "called\n"));
626
* release row context, if deleted
628
if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
629
ipAddressPrefixTable_release_rowreq_ctx(rowreq_ctx);
632
* wait for last call before calling user
634
if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
635
DEBUGMSGTL(("internal:ipAddressPrefixTable",
636
"waiting for last post_request\n"));
637
return SNMP_ERR_NOERROR;
640
packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
641
rc = ipAddressPrefixTable_post_request(ipAddressPrefixTable_if_ctx.
642
user_ctx, packet_rc);
643
if (MFD_SUCCESS != rc) {
645
* nothing we can do about it but log it
647
DEBUGMSGTL(("ipAddressPrefixTable", "error %d from "
648
"ipAddressPrefixTable_post_request\n", rc));
651
return SNMP_ERR_NOERROR;
652
} /* _mfd_ipAddressPrefixTable_post_request */
659
_mfd_ipAddressPrefixTable_object_lookup(netsnmp_mib_handler *handler, netsnmp_handler_registration
660
*reginfo, netsnmp_agent_request_info
662
netsnmp_request_info *requests)
664
int rc = SNMP_ERR_NOERROR;
665
ipAddressPrefixTable_rowreq_ctx *rowreq_ctx =
666
netsnmp_container_table_row_extract(requests);
668
DEBUGMSGTL(("internal:ipAddressPrefixTable:_mfd_ipAddressPrefixTable_object_lookup", "called\n"));
671
* get our context from mfd
672
* ipAddressPrefixTable_interface_ctx *if_ctx =
673
* (ipAddressPrefixTable_interface_ctx *)reginfo->my_reg_void;
676
if (NULL == rowreq_ctx) {
677
rc = SNMP_ERR_NOCREATION;
680
if (MFD_SUCCESS != rc)
681
netsnmp_request_set_error_all(requests, rc);
683
ipAddressPrefixTable_row_prep(rowreq_ctx);
685
return SNMP_VALIDATE_ERR(rc);
686
} /* _mfd_ipAddressPrefixTable_object_lookup */
688
/***********************************************************************
692
***********************************************************************/
695
* Retrieve the value for a particular column
697
NETSNMP_STATIC_INLINE int
698
_ipAddressPrefixTable_get_column(ipAddressPrefixTable_rowreq_ctx *
699
rowreq_ctx, netsnmp_variable_list * var,
702
int rc = SNMPERR_SUCCESS;
704
DEBUGMSGTL(("internal:ipAddressPrefixTable:_mfd_ipAddressPrefixTable_get_column", "called for %d\n", column));
707
netsnmp_assert(NULL != rowreq_ctx);
712
* ipAddressPrefixOrigin(5)/IpAddressPrefixOriginTC/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
714
case COLUMN_IPADDRESSPREFIXORIGIN:
715
var->val_len = sizeof(u_long);
716
var->type = ASN_INTEGER;
717
rc = ipAddressPrefixOrigin_get(rowreq_ctx,
718
(u_long *) var->val.string);
722
* ipAddressPrefixOnLinkFlag(6)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
724
case COLUMN_IPADDRESSPREFIXONLINKFLAG:
725
var->val_len = sizeof(u_long);
726
var->type = ASN_INTEGER;
727
rc = ipAddressPrefixOnLinkFlag_get(rowreq_ctx,
728
(u_long *) var->val.string);
732
* ipAddressPrefixAutonomousFlag(7)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
734
case COLUMN_IPADDRESSPREFIXAUTONOMOUSFLAG:
735
var->val_len = sizeof(u_long);
736
var->type = ASN_INTEGER;
737
rc = ipAddressPrefixAutonomousFlag_get(rowreq_ctx,
738
(u_long *) var->val.string);
742
* ipAddressPrefixAdvPreferredLifetime(8)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
744
case COLUMN_IPADDRESSPREFIXADVPREFERREDLIFETIME:
745
var->val_len = sizeof(u_long);
746
var->type = ASN_UNSIGNED;
747
rc = ipAddressPrefixAdvPreferredLifetime_get(rowreq_ctx,
753
* ipAddressPrefixAdvValidLifetime(9)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
755
case COLUMN_IPADDRESSPREFIXADVVALIDLIFETIME:
756
var->val_len = sizeof(u_long);
757
var->type = ASN_UNSIGNED;
758
rc = ipAddressPrefixAdvValidLifetime_get(rowreq_ctx,
765
"unknown column %d in _ipAddressPrefixTable_get_column\n",
771
} /* _ipAddressPrefixTable_get_column */
774
_mfd_ipAddressPrefixTable_get_values(netsnmp_mib_handler *handler,
775
netsnmp_handler_registration *reginfo,
776
netsnmp_agent_request_info
778
netsnmp_request_info *requests)
780
ipAddressPrefixTable_rowreq_ctx *rowreq_ctx =
781
netsnmp_container_table_row_extract(requests);
782
netsnmp_table_request_info *tri;
784
void (*dataFreeHook) (void *);
787
DEBUGMSGTL(("internal:ipAddressPrefixTable:_mfd_ipAddressPrefixTable_get_values", "called\n"));
789
netsnmp_assert(NULL != rowreq_ctx);
791
for (; requests; requests = requests->next) {
793
* save old pointer, so we can free it if replaced
795
old_string = requests->requestvb->val.string;
796
dataFreeHook = requests->requestvb->dataFreeHook;
797
if (NULL == requests->requestvb->val.string) {
798
requests->requestvb->val.string = requests->requestvb->buf;
799
requests->requestvb->val_len =
800
sizeof(requests->requestvb->buf);
801
} else if (requests->requestvb->buf ==
802
requests->requestvb->val.string) {
803
if (requests->requestvb->val_len !=
804
sizeof(requests->requestvb->buf))
805
requests->requestvb->val_len =
806
sizeof(requests->requestvb->buf);
812
tri = netsnmp_extract_table_info(requests);
816
rc = _ipAddressPrefixTable_get_column(rowreq_ctx,
820
if (MFD_SKIP == rc) {
821
requests->requestvb->type = SNMP_NOSUCHINSTANCE;
822
rc = SNMP_ERR_NOERROR;
824
} else if (NULL == requests->requestvb->val.string) {
825
snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
826
rc = SNMP_ERR_GENERR;
829
netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
832
* if the buffer wasn't used previously for the old data (i.e. it
833
* was allcoated memory) and the get routine replaced the pointer,
834
* we need to free the previous pointer.
836
if (old_string && (old_string != requests->requestvb->buf) &&
837
(requests->requestvb->val.string != old_string)) {
839
(*dataFreeHook) (old_string);
845
return SNMP_ERR_NOERROR;
846
} /* _mfd_ipAddressPrefixTable_get_values */
849
/***********************************************************************
853
***********************************************************************/
856
* SET PROCESSING NOT APPLICABLE (per MIB or user setting)
858
/***********************************************************************
862
***********************************************************************/
863
static void _container_free(netsnmp_container *container);
869
_cache_load(netsnmp_cache * cache, void *vmagic)
871
DEBUGMSGTL(("internal:ipAddressPrefixTable:_cache_load", "called\n"));
873
if ((NULL == cache) || (NULL == cache->magic)) {
875
"invalid cache for ipAddressPrefixTable_cache_load\n");
879
/** should only be called for an invalid or expired cache */
880
netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
885
return ipAddressPrefixTable_container_load((netsnmp_container *)
893
_cache_free(netsnmp_cache * cache, void *magic)
895
netsnmp_container *container;
897
DEBUGMSGTL(("internal:ipAddressPrefixTable:_cache_free", "called\n"));
899
if ((NULL == cache) || (NULL == cache->magic)) {
901
"invalid cache in ipAddressPrefixTable_cache_free\n");
905
container = (netsnmp_container *) cache->magic;
907
_container_free(container);
914
_container_item_free(ipAddressPrefixTable_rowreq_ctx * rowreq_ctx,
917
DEBUGMSGTL(("internal:ipAddressPrefixTable:_container_item_free",
920
if (NULL == rowreq_ctx)
923
ipAddressPrefixTable_release_rowreq_ctx(rowreq_ctx);
924
} /* _container_item_free */
930
_container_free(netsnmp_container *container)
932
DEBUGMSGTL(("internal:ipAddressPrefixTable:_container_free",
935
if (NULL == container) {
937
"invalid container in ipAddressPrefixTable_container_free\n");
944
ipAddressPrefixTable_container_free(container);
947
* free all items. inefficient, but easy.
949
CONTAINER_CLEAR(container,
950
(netsnmp_container_obj_func *) _container_item_free,
952
} /* _container_free */
956
* initialize the container with functions or wrappers
959
_ipAddressPrefixTable_container_init(ipAddressPrefixTable_interface_ctx *
962
DEBUGMSGTL(("internal:ipAddressPrefixTable:_ipAddressPrefixTable_container_init", "called\n"));
967
if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
968
_cache_load, _cache_free,
969
ipAddressPrefixTable_oid,
970
ipAddressPrefixTable_oid_size);
972
if (NULL == if_ctx->cache) {
974
"error creating cache for ipAddressPrefixTable\n");
978
if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
980
ipAddressPrefixTable_container_init(&if_ctx->container, if_ctx->cache);
981
if (NULL == if_ctx->container)
983
netsnmp_container_find("ipAddressPrefixTable:table_container");
984
if (NULL == if_ctx->container) {
985
snmp_log(LOG_ERR, "error creating container in "
986
"ipAddressPrefixTable_container_init\n");
990
if (NULL != if_ctx->cache)
991
if_ctx->cache->magic = (void *) if_ctx->container;
992
} /* _ipAddressPrefixTable_container_init */
996
* shutdown the container with functions or wrappers
999
_ipAddressPrefixTable_container_shutdown(ipAddressPrefixTable_interface_ctx
1002
DEBUGMSGTL(("internal:ipAddressPrefixTable:_ipAddressPrefixTable_container_shutdown", "called\n"));
1004
ipAddressPrefixTable_container_shutdown(if_ctx->container);
1006
_container_free(if_ctx->container);
1008
} /* _ipAddressPrefixTable_container_shutdown */
1011
ipAddressPrefixTable_rowreq_ctx *
1012
ipAddressPrefixTable_row_find_by_mib_index(ipAddressPrefixTable_mib_index *
1015
ipAddressPrefixTable_rowreq_ctx *rowreq_ctx;
1016
oid oid_tmp[MAX_OID_LEN];
1017
netsnmp_index oid_idx;
1021
* set up storage for OID
1023
oid_idx.oids = oid_tmp;
1024
oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
1029
rc = ipAddressPrefixTable_index_to_oid(&oid_idx, mib_idx);
1030
if (MFD_SUCCESS != rc)
1034
CONTAINER_FIND(ipAddressPrefixTable_if_ctx.container, &oid_idx);