/* * initialization */ void netsnmp_access_systemstats_init(void) { netsnmp_container * ifcontainer; netsnmp_access_systemstats_arch_init(); /* * load once to set up ifIndexes */ ifcontainer = netsnmp_access_systemstats_container_load(NULL, 0); if(NULL != ifcontainer) netsnmp_access_systemstats_container_free(ifcontainer, 0); }
/** * load initial data * * TODO:350:M: Implement ipIfStatsTable data load * This function will also be called by the cache helper to load * the container again (after the container free function has been * called to free the previous contents). * * @param container container to which items should be inserted * * @retval MFD_SUCCESS : success. * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source * @retval MFD_ERROR : other error. * * This function is called to load the index(es) (and data, optionally) * for the every row in the data set. * * @remark * While loading the data, the only important thing is the indexes. * If access to your data is cheap/fast (e.g. you have a pointer to a * structure in memory), it would make sense to update the data here. * If, however, the accessing the data invovles more work (e.g. parsing * some other existing data, or peforming calculations to derive the data), * then you can limit yourself to setting the indexes and saving any * information you will need later. Then use the saved information in * ipIfStatsTable_row_prep() for populating data. * * @note * If you need consistency between rows (like you want statistics * for each row to be from the same time frame), you should set all * data here. * */ int ipIfStatsTable_container_load(netsnmp_container * container) { netsnmp_container *stats; DEBUGMSGTL(("verbose:ipIfStatsTable:ipIfStatsTable_container_load", "called\n")); netsnmp_assert(NULL != container); stats = netsnmp_access_systemstats_container_load(NULL, NETSNMP_ACCESS_SYSTEMSTATS_LOAD_IFTABLE); if (NULL == stats) return MFD_RESOURCE_UNAVAILABLE; /* msg already logged */ /* * TODO:351:M: |-> Load/update data in the ipIfStatsTable container. * loop over your ipIfStatsTable data, allocate a rowreq context, * set the index(es) [and data, optionally] and insert into * the container. */ /* * we just got a fresh copy of data. compare it to * what we've already got, and make any adjustements... */ CONTAINER_FOR_EACH(container, (netsnmp_container_obj_func *) _check_for_updates, stats); /* * now add any new entries */ CONTAINER_FOR_EACH(stats, (netsnmp_container_obj_func *) _add_new, container); /* * free the container. we've either claimed each ifentry, or released it, * so the dal function doesn't need to clear the container. */ netsnmp_access_systemstats_container_free(stats, NETSNMP_ACCESS_SYSTEMSTATS_FREE_DONT_CLEAR); DEBUGMSGT(("verbose:ipIfStatsTable:ipIfStatsTable_container_load", "%lu records\n", (unsigned long)CONTAINER_SIZE(container))); return MFD_SUCCESS; } /* ipIfStatsTable_container_load */