Print this page
10052 "dladm show-ether" should pick one kstat snapshot and stick with it
Reviewed by: Rob Johnston <rob.johnston@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Gergo Doma <domag02@gmail.com>
Reviewed by: Andy Fiddaman <andy@omniosce.org>

@@ -20,10 +20,14 @@
  */
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  */
 
+/*
+ * Copyright 2019 OmniOS Community Edition (OmniOSce) Association.
+ */
+
 #include <unistd.h>
 #include <errno.h>
 #include <ctype.h>
 #include <fcntl.h>
 #include <strings.h>

@@ -119,10 +123,11 @@
                 return (DLADM_STATUS_NOMEM);
         }
 
         (*handle)->dld_fd = dld_fd;
         (*handle)->door_fd = -1;
+        (*handle)->dld_kcp = NULL;
 
         return (DLADM_STATUS_OK);
 }
 
 void

@@ -130,10 +135,12 @@
 {
         if (handle != NULL) {
                 (void) close(handle->dld_fd);
                 if (handle->door_fd != -1)
                         (void) close(handle->door_fd);
+                if (handle->dld_kcp != NULL)
+                        (void) kstat_close(handle->dld_kcp);
                 free(handle);
         }
 }
 
 int

@@ -140,10 +147,18 @@
 dladm_dld_fd(dladm_handle_t handle)
 {
         return (handle->dld_fd);
 }
 
+kstat_ctl_t *
+dladm_dld_kcp(dladm_handle_t handle)
+{
+        if (handle->dld_kcp == NULL)
+                handle->dld_kcp = kstat_open();
+        return (handle->dld_kcp);
+}
+
 /*
  * If DLMGMT_DOOR hasn't been opened in the handle yet, open it.
  */
 dladm_status_t
 dladm_door_fd(dladm_handle_t handle, int *door_fd)