/* * Free all of the resources associated with snapshot `snap'. */ void ipmp_snap_free(ipmp_snap_t *snap) { ipmp_ifinfolist_t *iflp, *ifnext; ipmp_groupinfolist_t *grlp, *grnext; ipmp_freegrouplist(snap->sn_grlistp); for (grlp = snap->sn_grinfolistp; grlp != NULL; grlp = grnext) { grnext = grlp->grl_next; ipmp_freegroupinfo(grlp->grl_grinfop); free(grlp); } for (iflp = snap->sn_ifinfolistp; iflp != NULL; iflp = ifnext) { ifnext = iflp->ifl_next; ipmp_freeifinfo(iflp->ifl_ifinfop); free(iflp); } free(snap); }
/* * Walks all IPMP groups on the system and invokes `cbfunc' on each, passing * it `ih', the ipmp_groupinfo_t pointer, and `arg'. */ static void walk_group(ipmp_handle_t ih, ipmpstat_cbfunc_t *cbfunc, void *arg) { int err; uint_t i; ipmp_groupinfo_t *grinfop; ipmp_grouplist_t *grlistp; if ((err = ipmp_getgrouplist(ih, &grlistp)) != IPMP_SUCCESS) die_ipmperr(err, "cannot get IPMP group list"); for (i = 0; i < grlistp->gl_ngroup; i++) { err = ipmp_getgroupinfo(ih, grlistp->gl_groups[i], &grinfop); if (err != IPMP_SUCCESS) { warn_ipmperr(err, "cannot get info for group `%s'", grlistp->gl_groups[i]); continue; } (*cbfunc)(ih, grinfop, arg); ipmp_freegroupinfo(grinfop); } ipmp_freegrouplist(grlistp); }