#ifndef _SNMP_TABLE_H #define _SNMP_TABLE_H #define MAX_COLUMNAR_OF_TABLE 48 typedef struct table_index { u8 len; u32 oid[32]; } table_index; /* Get an exist instance from the inclusive one pointed to by address 'instance' */ typedef int (*table_get_instance)(u32 *instance); typedef int (*table_get_resp)(u32 column, u32 *instance, u8 *pdata, u8 *vartype); typedef int (*table_set_resp)(u32 column, u32 *instance, u8 *pdata, u16 datalen); struct snmp_table_profile { char name[32]; table_index index; /* oid of table with entry exclusive */ u32 column[MAX_COLUMNAR_OF_TABLE]; /* define all columns of a table, use '0' indicating the end */ u8 level; /* level of instance in order to identify a row */ table_get_instance get_instance; table_get_resp get_resp; table_set_resp set_resp; }; struct snmp_register { char name[32]; u8 prefix_len; /* Module prefix len */ u32 prefix_oid[32]; /* Module prefix oid */ u8 num_of_table; /* how many tables being registered, such tables is pointed to by address 'table' */ struct snmp_table_profile *table; /* In case no table is matched, default callback function is invoked if it is not NULL. Hence, you can implement get/set in much the same way before, i.e. traveling all branches of MIB */ getcall default_get_resp; setcall default_set_resp; }; extern int register_snmp_table(struct snmp_register *reg); #endif