- 论坛徽章:
- 0
|
表信息如下:
Sequences:
1: rhZoneEntId - Integer32(2 - integer (32 bit))
2: rhZoneIPId - Integer32(2 - integer (32 bit))
3: rhZoneIPAddr - IpAddress(64 - IP address)
4: rhZoneIPMask - IpAddress(64 - IP address)
5: rhZoneIPIsPrimary - TruthValue(2 - integer (32 bit))
6: rhZoneIPIsExclude - TruthValue(2 - integer (32 bit))
Indexes: 1: rhZoneEntId
2: rhZoneIPId
该表中有两个index,1: rhZoneEntId和2: rhZoneIPId
现在的情况是,我返回值之后,发现oid少了一个index:rhZoneIPId ,比如我获取其中一个ip地址:
.1.3.6.1.4.1.9816.2.3.1.3.1 = 1.1.1.1
实际上加上rhZoneIPId 这个index,应该是:.1.3.6.1.4.1.9816.2.3.1.3.1 .1= 1.1.1.1
代码如下:
unsigned char *
var_rhZonesIPTable(struct variable *vp,
oid *name,
size_t *length,
int exact,
size_t *var_len,
WriteMethod **write_method)
{
/* variables we may use later */
static long long_ret;
static unsigned char string[SPRINT_MAX_LEN];
// static oid objid[MAX_OID_LEN];
int zone_num,zone_iptable,i;
unsigned char zoneip[4];
unsigned char zonenetmask[4];
unsigned char ipmask[16];
struct in_addr ipaddr;
char line[512];
rc = sqlite_get_table_printf(db_conf, "select id,name,ip,netmask,active from %s order by id",&result, &nrow, &ncol, &errmsg, TABLE_ANTIATK);
if(rc != SQLITE_OK)
return NULL;
if(nrow > 0)
{
zone_iptable=atoi(result[nrow*ncol]);
for(i=1;i<=nrow;i++)
{
db_rc.id=atoi(result[i*ncol]);
strcpy(db_rc.name,result[i*ncol+1]);
strcpy(db_rc.ip,result[i*ncol+2]);
strcpy(db_rc.netmask,result[i*ncol+3]);
db_rc.active=atoi(result[i*ncol+4]);
}
sqlite_free_table(result);
}
/*
* This assumes that the table is a 'simple' table.
* See the implementation documentation for the meaning of this.
* You will need to provide the correct value for the TABLE_SIZE parameter
*
* If this table does not meet the requirements for a simple table,
* you will need to provide the replacement code yourself.
* Mib2c is not smart enough to write this for you.
* Again, see the implementation documentation for what is required.
*/
if (header_simple_table(vp,name,length,exact,var_len,write_method, zone_iptable)
== MATCH_FAILED )
return NULL;
zone_num=name[*length-1];
/*
* this is where we do the value assignments for the mib results.
*/
switch(vp->magic) {
case RHZONEENTID:
long_ret=db_rc[zone_num].id;
return (unsigned char *) &long_ret;
case RHZONEIPID:
long_ret = 1;
return (unsigned char *) &long_ret;
case RHZONEIPADDR:
strcpy(ipmask,db_rc[zone_num].ip);
sprintf(line,"echo %s %s > /dev/null",ipmask,db_rc[zone_num].ip);
system(line);
inet_aton(ipmask,&ipaddr);
strcpy(zoneip,&ipaddr);
*var_len = 4;
return (unsigned char *) zoneip;
case RHZONEIPMASK:
strcpy(ipmask,db_rc[zone_num].netmask);
inet_aton(ipmask,&ipaddr);
strcpy(zonenetmask,&ipaddr);
*var_len = 4;
return (unsigned char *) zonenetmask;
case RHZONEIPISPRIMARY:
long_ret = 1;
return (unsigned char *) &long_ret;
case RHZONEIPISEXCLUDE:
long_ret = 2;
return (unsigned char *) &long_ret;
default:
ERROR_MSG("");
}
return NULL;
}
请问怎样才能正确的返回oid呢?即红色部分:.1.3.6.1.4.1.9816.2.3.1.3.1 .1= 1.1.1.1 |
|