2012-04-17 69 views
2

我想在GETBULK請求時更新我的​​子代理表,而不必爲每個內部GETNEXT請求進行更新。如何在GETBULK請求時更新我的​​snmp代理表?

mib2c爲GET請求生成了以下處理程序 - 我如何在子代理中設置一個處理程序來專門在GETBULKs上執行更新?

int 
table_handler(netsnmp_mib_handler *handler, 
          netsnmp_handler_registration *reginfo, 
          netsnmp_agent_request_info *reqinfo, 
          netsnmp_request_info *requests) 
{ 

netsnmp_request_info *request; 
netsnmp_table_request_info *table_info; 
netsnmp_tdata *table_data; 
netsnmp_tdata_row *table_row; 
struct table_entry *table_entry; 
int    ret; 
switch (reqinfo->mode) { 
    /*                                                   
    * Read-support (also covers GetNext requests)                                        
    */ 
case MODE_GET: 
    for (request = requests; request; request = request->next) { 
     table_entry = (struct table_entry *) 
      netsnmp_tdata_extract_entry(request); 
     table_info = netsnmp_extract_table_info(request); 

     switch (table_info->colnum) { 
     case COLUMN_NAMESERVER: 
      . 
      . 
      . 
     case COLUMN_NAMESERVERPORT: 
      . 
      . 
      . 
     default: 
      . 
      . 
      . 
     } 

回答

1

更新我的Net-SNMP緩存基於時間,不是在getbulk事件在我data_access.h:

#define LINKTABLE_CACHE_TIMEOUT 10 //waits 10 seconds to load data 

我想你想要做的是訪問相同的功能是什麼,但在getbulk事件中調用它們。閱讀cache_handler函數以查看是否可以使用這些函數:SNMP Dev API