summaryrefslogtreecommitdiff
path: root/ACE/ace/Monitor_Control/Solaris_Network_Interface_Monitor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/ace/Monitor_Control/Solaris_Network_Interface_Monitor.cpp')
-rw-r--r--ACE/ace/Monitor_Control/Solaris_Network_Interface_Monitor.cpp221
1 files changed, 0 insertions, 221 deletions
diff --git a/ACE/ace/Monitor_Control/Solaris_Network_Interface_Monitor.cpp b/ACE/ace/Monitor_Control/Solaris_Network_Interface_Monitor.cpp
deleted file mode 100644
index a3e09a8afa2..00000000000
--- a/ACE/ace/Monitor_Control/Solaris_Network_Interface_Monitor.cpp
+++ /dev/null
@@ -1,221 +0,0 @@
-#include "ace/Monitor_Control/Solaris_Network_Interface_Monitor.h"
-
-#if defined (ACE_HAS_KSTAT)
-
-#include "ace/Log_Category.h"
-#include "ace/OS_NS_stdio.h"
-
-ACE_BEGIN_VERSIONED_NAMESPACE_DECL
-
-namespace ACE
-{
- namespace Monitor_Control
- {
- Solaris_Network_Interface_Monitor::Solaris_Network_Interface_Monitor (
- const ACE_TCHAR *lookup_str)
- : value_ (0UL),
- start_ (0UL),
- lookup_str_ (lookup_str)
- {
- this->init ();
- }
-
- void
- Solaris_Network_Interface_Monitor::update_i ()
- {
- this->access_kstats (this->value_);
- this->value_ -= this->start_;
- }
-
- void
- Solaris_Network_Interface_Monitor::clear_impl ()
- {
- this->init ();
- }
-
- void
- Solaris_Network_Interface_Monitor::init ()
- {
- unsigned long i;
-
- for (i = 0UL; i < MAX_LO_INTERFACES; ++i)
- {
- this->value_array_lo_[i] = 0UL;
- }
-
- for (i = 0UL; i < MAX_HME_INTERFACES; ++i)
- {
- this->value_array_hme_[i] = 0UL;
- }
-
- this->access_kstats (this->start_);
- }
-
- void
- Solaris_Network_Interface_Monitor::access_kstats (
- ACE_UINT64 &which_member)
- {
- this->kstats_ = kstat_open ();
-
- if (this->kstats_ == 0)
- {
- ACELIB_ERROR ((LM_ERROR,
- ACE_TEXT ("opening kstats file failed\n")));
- return;
- }
-
- this->kstat_id_ = this->kstats_->kc_chain_id;
- int status = 0;
-
- while (true)
- {
- /// We have to sum the network interfaces manually.
- for (this->kstat_ = this->kstats_->kc_chain;
- this->kstat_ != 0;
- this->kstat_ = this->kstat_->ks_next)
- {
- if (ACE_OS::strcmp (this->kstat_->ks_class, "net") != 0)
- {
- continue;
- }
-
- unsigned long ks_instance = this->kstat_->ks_instance;
-
- if (ACE_OS::strcmp (this->kstat_->ks_module, "lo") == 0)
- {
- /// Interfaces 'lo' have only packet counters.
- if (this->lookup_str_ == ACE_TEXT ("obytes")
- || this->lookup_str_ == ACE_TEXT ("rbytes"))
- {
- continue;
- }
-
- status = this->check_ks_module (ks_instance,
- MAX_LO_INTERFACES,
- "MAX_LO_INTERFACES",
- this->value_array_lo_,
- which_member);
-
- if (status == -1)
- {
- /// Unrecoverable error, diagnostic already output.
- (void) kstat_close (this->kstats_);
- return;
- }
- else if (status == 1)
- {
- /// The kstat_id changed underneath us, start over.
- break;
- }
- }
- else if (ACE_OS::strcmp (this->kstat_->ks_module, "hme") == 0
- || ACE_OS::strcmp (this->kstat_->ks_module, "bge") == 0)
- {
- status = this->check_ks_module (ks_instance,
- MAX_HME_INTERFACES,
- "MAX_HME_INTERFACES",
- this->value_array_hme_,
- which_member);
-
- if (status == -1)
- {
- /// Unrecoverable error, diagnostic already output.
- (void) kstat_close (this->kstats_);
- return;
- }
- else if (status == 1)
- {
- /// The kstat_id changed underneath us, start over.
- break;
- }
- }
- }
-
- if (this->kstat_)
- {
- this->kstat_id_ = kstat_chain_update (this->kstats_);
-
- if (! this->kstat_id_ > 0)
- {
- ACELIB_ERROR ((LM_ERROR, "kstat is is not > 0.\n"));
- break;
- }
- }
- else
- {
- break;
- }
- }
-
- status = kstat_close (this->kstats_);
-
- if (status != 0)
- {
- ACELIB_ERROR ((LM_ERROR,
- ACE_TEXT ("closing kstats file failed\n")));
- }
- }
-
- int
- Solaris_Network_Interface_Monitor::check_ks_module (
- const unsigned long ks_instance,
- const unsigned long which_max,
- const char *max_str,
- ACE_UINT64 *value_array,
- ACE_UINT64 &which_member)
- {
- if (! (ks_instance < which_max))
- {
- ACELIB_ERROR_RETURN ((LM_ERROR,
- "%s exceeded.\n",
- max_str),
- -1);
- }
-
- /// Because the kstat chain can change dynamically,
- /// watch the chain ID and restart the walk if the ID
- /// differs from what we saw during the walk. The restart
- /// is done by breaking from the cycle with kstat_ not 0.
-
- kid_t kstat_id =
- kstat_read (this->kstats_, this->kstat_, 0);
-
- if (kstat_id != this->kstat_id_)
- {
- /// This return value restarts the walk as described above.
- return 1;
- }
-
- kstat_named_t *value =
- (kstat_named_t *) kstat_data_lookup (
- this->kstat_,
- ACE_TEXT_ALWAYS_CHAR (this->lookup_str_.rep ()));
-
- if (value == 0)
- {
- /// Just return and let the calling FOR loop advance.
- return 0;
- }
-
- if (value->data_type != KSTAT_DATA_UINT32)
- {
- ACELIB_ERROR_RETURN ((LM_ERROR,
- "Wrong data type.\n"),
- -1);
- }
-
- /// Guard against overflow.
- value_array[ks_instance] +=
- value->value.ui32
- - static_cast<ACE_UINT32> (value_array[ks_instance]);
-
- which_member += value_array[ks_instance];
-
- return 0;
- }
- }
-}
-
-ACE_END_VERSIONED_NAMESPACE_DECL
-
-#endif /* defined (ACE_HAS_KSTAT) */