/*------------------------------------------------------------------------ * srt_getf - perform a getfirst on a variable in the Routing Table *------------------------------------------------------------------------ */ int srt_getf(struct snbentry *bindl, struct mib_info *mip, int numifaces) { int rtl, oidi; struct route *rtp = (void *)NULLPTR; rtl = -1; /* use first field, first route */ if ((rtp = srt_findnext(rtp, &rtl)) == 0) { if (mip->mi_next) return (*mip->mi_next->mi_func) (bindl, mip->mi_next, SOP_GETF); return SERR_NO_SUCH; /* no next node */ } memcpy(bindl->sb_oid.id, mip->mi_objid.id, mip->mi_objid.len*2); oidi = mip->mi_objid.len; bindl->sb_oid.id[oidi++] = (u_short) 1; /* field */ sip2ocpy(&bindl->sb_oid.id[oidi], rtp->rt_net); bindl->sb_oid.len = oidi + IP_ALEN; return srt_get(bindl, numifaces); }
/*------------------------------------------------------------------------ * srt_getn - perform a getnext on a variable in the Routing Table *------------------------------------------------------------------------ */ int srt_getn(struct snbentry *bindl, struct mib_info *mip, int numifaces) { struct route *rtp; int rtl, field, oidi; if (srt_match(bindl, &rtp, &rtl, &field) == SYSERR) return SERR_NO_SUCH; if ((rtp = srt_findnext(rtp, &rtl)) == 0) { rtp = (struct route *) NULL; rtl = 0; /* set route hash table list to 0 */ rtp = srt_findnext(rtp, &rtl); if (++field > SNUMF_RTTAB) return (*mip->mi_next->mi_func) (bindl, mip->mi_next, SOP_GETF); } oidi = SRT_OIDLEN; /* 4.21.1 */ bindl->sb_oid.id[oidi++] = field; sip2ocpy(&bindl->sb_oid.id[oidi], rtp->rt_net); bindl->sb_oid.len = oidi + IP_ALEN; return srt_get(bindl, numifaces); }