245 nzids_saved = nzids;
246 if (zone_list(zids, &nzids) != 0) {
247 free(zids);
248 return (errno);
249 }
250 if (nzids > nzids_saved) {
251 free(zids);
252 goto again;
253 }
254
255 for (i = 0; i < nzids; i++) {
256 int res;
257 zone_status_t status;
258
259 /*
260 * Skip over zones that have gone away or are going down
261 * since we got the list. Process all zones in the list,
262 * logging errors for any that failed.
263 */
264 if (zone_getattr(zids[i], ZONE_ATTR_STATUS, &status,
265 sizeof (status)) < 0)
266 continue;
267 switch (status) {
268 case ZONE_IS_SHUTTING_DOWN:
269 case ZONE_IS_EMPTY:
270 case ZONE_IS_DOWN:
271 case ZONE_IS_DYING:
272 case ZONE_IS_DEAD:
273 /* FALLTHRU */
274 continue;
275 default:
276 break;
277 }
278 if ((res = dlmgmt_zone_init(zids[i])) != 0) {
279 (void) fprintf(stderr, "zone (%ld) init error %s",
280 zids[i], strerror(res));
281 dlmgmt_log(LOG_ERR, "zone (%d) init error %s",
282 zids[i], strerror(res));
283 }
284 }
285 free(zids);
286 return (0);
287 }
288
289 static int
290 dlmgmt_init(void)
291 {
292 int err;
293 char *fmri, *c;
|
245 nzids_saved = nzids;
246 if (zone_list(zids, &nzids) != 0) {
247 free(zids);
248 return (errno);
249 }
250 if (nzids > nzids_saved) {
251 free(zids);
252 goto again;
253 }
254
255 for (i = 0; i < nzids; i++) {
256 int res;
257 zone_status_t status;
258
259 /*
260 * Skip over zones that have gone away or are going down
261 * since we got the list. Process all zones in the list,
262 * logging errors for any that failed.
263 */
264 if (zone_getattr(zids[i], ZONE_ATTR_STATUS, &status,
265 sizeof (status)) < 0) {
266 continue;
267 }
268 switch (status) {
269 case ZONE_IS_SHUTTING_DOWN:
270 case ZONE_IS_EMPTY:
271 case ZONE_IS_DOWN:
272 case ZONE_IS_DYING:
273 case ZONE_IS_DEAD:
274 case ZONE_IS_INITIALIZED:
275 case ZONE_IS_UNINITIALIZED:
276 continue;
277 default:
278 break;
279 }
280 if ((res = dlmgmt_zone_init(zids[i])) != 0) {
281 (void) fprintf(stderr, "zone (%ld) init error %s",
282 zids[i], strerror(res));
283 dlmgmt_log(LOG_ERR, "zone (%d) init error %s",
284 zids[i], strerror(res));
285 }
286 }
287 free(zids);
288 return (0);
289 }
290
291 static int
292 dlmgmt_init(void)
293 {
294 int err;
295 char *fmri, *c;
|