diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2009-07-07 22:25:01 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2009-07-07 22:25:01 +0000 |
commit | 3b20263e347f469d811dbf69473c59ff71fdc318 (patch) | |
tree | 9e1256e2c88d8f151615c6ccdadb8aba1a489d4b | |
parent | 24c018e5ac6a7d06c12cb8ee861b01a42d804fd7 (diff) | |
download | ATCD-3b20263e347f469d811dbf69473c59ff71fdc318.tar.gz |
ChangeLogTag: Tue Jul 7 22:21:03 UTC 2009 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r-- | ACE/ChangeLog | 22 | ||||
-rw-r--r-- | ACE/ace/Monitor_Control/BSD_Network_Interface_Monitor.cpp | 4 | ||||
-rw-r--r-- | ACE/ace/Monitor_Control/BSD_Network_Interface_Monitor.h | 4 | ||||
-rw-r--r-- | ACE/ace/Monitor_Control/Bytes_Received_Monitor.cpp | 4 | ||||
-rw-r--r-- | ACE/ace/Monitor_Control/Bytes_Received_Monitor.h | 4 | ||||
-rw-r--r-- | ACE/ace/Monitor_Control/Bytes_Sent_Monitor.h | 4 | ||||
-rw-r--r-- | ACE/ace/Monitor_Control/FreeBSD_Network_Interface_Monitor.cpp | 125 | ||||
-rw-r--r-- | ACE/ace/Monitor_Control/FreeBSD_Network_Interface_Monitor.h | 71 | ||||
-rw-r--r-- | ACE/ace/Monitor_Control/Monitor_Control.mpc | 1 | ||||
-rw-r--r-- | ACE/ace/Monitor_Control/Packets_Received_Monitor.h | 4 | ||||
-rw-r--r-- | ACE/ace/Monitor_Control/Packets_Sent_Monitor.cpp | 4 | ||||
-rw-r--r-- | ACE/ace/Monitor_Control/Packets_Sent_Monitor.h | 4 |
12 files changed, 241 insertions, 10 deletions
diff --git a/ACE/ChangeLog b/ACE/ChangeLog index c63fd77186f..158acd62191 100644 --- a/ACE/ChangeLog +++ b/ACE/ChangeLog @@ -1,3 +1,25 @@ +Tue Jul 7 22:21:03 UTC 2009 Jeff Parsons <j.parsons@vanderbilt.edu> + + * ace/Monitor_Control/FreeBSD_Network_Interface_Monitor.cpp: + * ace/Monitor_Control/FreeBSD_Network_Interface_Monitor.h: + + New files, defining a monitor for FreeBSD. + + * ace/Monitor_Control/Bytes_Received_Monitor.cpp: + * ace/Monitor_Control/BSD_Network_Interface_Monitor.h: + * ace/Monitor_Control/Monitor_Control.mpc: + * ace/Monitor_Control/Bytes_Sent_Monitor.h: + * ace/Monitor_Control/Packets_Sent_Monitor.h: + * ace/Monitor_Control/Bytes_Received_Monitor.h: + * ace/Monitor_Control/BSD_Network_Interface_Monitor.cpp: + * ace/Monitor_Control/Packets_Received_Monitor.h: + * ace/Monitor_Control/Packets_Sent_Monitor.cpp: + + New files added to MPC project and existing monitors + patched with NetBSD/OpenBSD-related changes. Thanks to + Boyan Kasarov <bkasarov at gmail dot com> for submitting + these changes. + Tue Jul 7 12:57:30 UTC 2009 Olli Savia <ops@iki.fi> * ace/FoxReactor/FoxReactor.cpp: diff --git a/ACE/ace/Monitor_Control/BSD_Network_Interface_Monitor.cpp b/ACE/ace/Monitor_Control/BSD_Network_Interface_Monitor.cpp index 8f6b3564da0..3d9d191a797 100644 --- a/ACE/ace/Monitor_Control/BSD_Network_Interface_Monitor.cpp +++ b/ACE/ace/Monitor_Control/BSD_Network_Interface_Monitor.cpp @@ -2,7 +2,7 @@ #include "ace/Monitor_Control/BSD_Network_Interface_Monitor.h" -#if defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) +#if defined (__NetBSD__) || defined (__OpenBSD__) #include "ace/Log_Msg.h" #include "ace/OS_NS_stdio.h" @@ -119,4 +119,4 @@ namespace ACE ACE_END_VERSIONED_NAMESPACE_DECL -#endif /* defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) */ +#endif /* defined (__NetBSD__) || defined (__OpenBSD__) */ diff --git a/ACE/ace/Monitor_Control/BSD_Network_Interface_Monitor.h b/ACE/ace/Monitor_Control/BSD_Network_Interface_Monitor.h index 19a8e7c2fbc..d9c1944599b 100644 --- a/ACE/ace/Monitor_Control/BSD_Network_Interface_Monitor.h +++ b/ACE/ace/Monitor_Control/BSD_Network_Interface_Monitor.h @@ -23,7 +23,7 @@ #include "ace/Monitor_Control/Monitor_Control_export.h" -#if defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) +#if defined (__NetBSD__) || defined (__OpenBSD__) ACE_BEGIN_VERSIONED_NAMESPACE_DECL @@ -63,7 +63,7 @@ namespace ACE ACE_END_VERSIONED_NAMESPACE_DECL -#endif /* defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) */ +#endif /* defined (__NetBSD__) || defined (__OpenBSD__) */ #include /**/ "ace/post.h" diff --git a/ACE/ace/Monitor_Control/Bytes_Received_Monitor.cpp b/ACE/ace/Monitor_Control/Bytes_Received_Monitor.cpp index dc951403f47..9fdc1e0ce0c 100644 --- a/ACE/ace/Monitor_Control/Bytes_Received_Monitor.cpp +++ b/ACE/ace/Monitor_Control/Bytes_Received_Monitor.cpp @@ -24,8 +24,10 @@ namespace ACE /// Scan format for /proc/net/dev #elif defined (ACE_HAS_KSTAT) , Solaris_Network_Interface_Monitor (ACE_TEXT ("rbytes")) -#elif defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) +#elif defined (__NetBSD__) || defined (__OpenBSD__) , BSD_Network_Interface_Monitor (ACE_TEXT ("ibytes")) +#elif defined (__FreeBSD__) + , FreeBSD_Network_Interface_Monitor (ACE_TEXT ("ibytes")) #endif {} diff --git a/ACE/ace/Monitor_Control/Bytes_Received_Monitor.h b/ACE/ace/Monitor_Control/Bytes_Received_Monitor.h index 88b54a5c604..cbb188b92f7 100644 --- a/ACE/ace/Monitor_Control/Bytes_Received_Monitor.h +++ b/ACE/ace/Monitor_Control/Bytes_Received_Monitor.h @@ -56,8 +56,10 @@ namespace ACE , public Linux_Network_Interface_Monitor #elif defined (ACE_HAS_KSTAT) , public Solaris_Network_Interface_Monitor -#elif defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) +#elif defined (__NetBSD__) || defined (__OpenBSD__) , public BSD_Network_Interface_Monitor +#elif defined (__FreeBSD__) + , public FreeBSD_Network_Interface_Monitor #else , public Null_Network_Interface_Monitor #endif diff --git a/ACE/ace/Monitor_Control/Bytes_Sent_Monitor.h b/ACE/ace/Monitor_Control/Bytes_Sent_Monitor.h index 7f894093742..d25346a6e14 100644 --- a/ACE/ace/Monitor_Control/Bytes_Sent_Monitor.h +++ b/ACE/ace/Monitor_Control/Bytes_Sent_Monitor.h @@ -56,8 +56,10 @@ namespace ACE , public Linux_Network_Interface_Monitor #elif defined (ACE_HAS_KSTAT) , public Solaris_Network_Interface_Monitor -#elif defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) +#elif defined (__NetBSD__) || defined (__OpenBSD__) , public BSD_Network_Interface_Monitor +#elif defined (__FreeBSD__) + , public FreeBSD_Network_Interface_Monitor #else , public Null_Network_Interface_Monitor #endif diff --git a/ACE/ace/Monitor_Control/FreeBSD_Network_Interface_Monitor.cpp b/ACE/ace/Monitor_Control/FreeBSD_Network_Interface_Monitor.cpp new file mode 100644 index 00000000000..6c163bcb50b --- /dev/null +++ b/ACE/ace/Monitor_Control/FreeBSD_Network_Interface_Monitor.cpp @@ -0,0 +1,125 @@ +// $Id$ + +#include "ace/Monitor_Control/FreeBSD_Network_Interface_Monitor.h" + +#if defined (__FreeBSD__) + +#include "ace/Log_Msg.h" +#include "ace/OS_NS_stdio.h" + +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/sysctl.h> +#include <sys/time.h> +#include <net/if.h> +#include <net/if_mib.h> + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +namespace ACE +{ + namespace Monitor_Control + { + FreeBSD_Network_Interface_Monitor::FreeBSD_Network_Interface_Monitor ( + const ACE_TCHAR *lookup_str) + : value_ (0UL), + start_ (0UL), + lookup_str_ (lookup_str) + { + this->init(); + } + + void + FreeBSD_Network_Interface_Monitor::update_i (void) + { + this->fetch(this->value_); + this->value_ -= this->start_; + } + + void + FreeBSD_Network_Interface_Monitor::clear_impl (void) + { + this->init(); + } + + void + FreeBSD_Network_Interface_Monitor::init (void) + { + this->fetch(this->start_); + this->value_ = 0UL; + } + + void + FreeBSD_Network_Interface_Monitor::fetch (ACE_UINT64& value) const + { + ACE_UINT64 count = 0; + + int req_name[5]; + int ifcount; + size_t ifcount_len = sizeof(ifcount); + + req_name[0] = CTL_NET; + req_name[1] = PF_LINK; + req_name[2] = NETLINK_GENERIC; + req_name[3] = IFMIB_SYSTEM; + req_name[4] = IFMIB_IFCOUNT; + + if (::sysctl(req_name, 5, &ifcount, &ifcount_len, (void *)0, 0) == -1) + { + ACE_ERROR((LM_ERROR, ACE_TEXT("(%P|%t) %p\n"), + ACE_TEXT("sysctl failed"))); + + return; + } + + for (int i = 1; i <= ifcount; i++) + { + int name[6]; + struct ifmibdata ifmd; + size_t len = sizeof(ifmd); + + name[0] = CTL_NET; + name[1] = PF_LINK; + name[2] = NETLINK_GENERIC; + name[3] = IFMIB_IFDATA; + name[4] = i; + name[5] = IFDATA_GENERAL; + + if(::sysctl(name, 6, &ifmd, &len, (void *)0, 0) == -1) + { + ACE_ERROR((LM_ERROR, ACE_TEXT("(%P|%t) %p\n"), + ACE_TEXT("sysctl failed"))); + + break; + } + + struct if_data * const ifi = &ifmd.ifmd_data; + + if(this->lookup_str_ == "ibytes") + { + count += ifi->ifi_ibytes; + } + else if(this->lookup_str_ == "ipackets") + { + count += ifi->ifi_ipackets; + } + else if(this->lookup_str_ == "obytes") + { + count += ifi->ifi_obytes; + } + else if(this->lookup_str_ == "opackets") + { + count += ifi->ifi_opackets; + } + + } // for + + value = count; + } + } +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* defined (__FreeBSD__) */ + diff --git a/ACE/ace/Monitor_Control/FreeBSD_Network_Interface_Monitor.h b/ACE/ace/Monitor_Control/FreeBSD_Network_Interface_Monitor.h new file mode 100644 index 00000000000..7f3cb04c9e7 --- /dev/null +++ b/ACE/ace/Monitor_Control/FreeBSD_Network_Interface_Monitor.h @@ -0,0 +1,71 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file BSD_Network_Interface_Monitor.h + * + * $Id$ + * + * @author Boyan Kasarov + */ +//============================================================================= + +#ifndef FREEBSD_NETWORK_INTERFACE_MONITOR_H +#define FREEBSD_NETWORK_INTERFACE_MONITOR_H + +#include /**/ "ace/pre.h" + +#include "ace/SString.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/Monitor_Control/Monitor_Control_export.h" + +#if defined (__FreeBSD__) + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +namespace ACE +{ + namespace Monitor_Control + { + /** + * @class FreeBSD_Network_Interface_Monitor + * + * @brief Mixin class for network interface monitors compiled on + * FreeBSD machines. + */ + class MONITOR_CONTROL_Export FreeBSD_Network_Interface_Monitor + { + protected: + FreeBSD_Network_Interface_Monitor (const ACE_TCHAR *lookup_str); + + /// Platform-specific implementation. + void update_i (void); + + /// Platform-specific reset. + void clear_impl (void); + + protected: + ACE_UINT64 value_; + + private: + void init (void); + void fetch (ACE_UINT64& value) const; + + ACE_UINT64 start_; + ACE_CString lookup_str_; + }; + } +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* defined (__FreeBSD__) */ + +#include /**/ "ace/post.h" + +#endif // FREEBSD_NETWORK_INTERFACE_MONITOR_H + diff --git a/ACE/ace/Monitor_Control/Monitor_Control.mpc b/ACE/ace/Monitor_Control/Monitor_Control.mpc index 3efb0bae9a6..47ce67beba7 100644 --- a/ACE/ace/Monitor_Control/Monitor_Control.mpc +++ b/ACE/ace/Monitor_Control/Monitor_Control.mpc @@ -14,6 +14,7 @@ project(Monitor_Control) : acelib, ace_etcl_parser, ace_output, install { Constraint_Interpreter.cpp Constraint_Visitor.cpp CPU_Load_Monitor.cpp + FreeBSD_Network_Interface_Monitor.cpp Linux_Network_Interface_Monitor.cpp Memory_Usage_Monitor.cpp Monitor_Group.cpp diff --git a/ACE/ace/Monitor_Control/Packets_Received_Monitor.h b/ACE/ace/Monitor_Control/Packets_Received_Monitor.h index b4e7c4a2654..7edbff58439 100644 --- a/ACE/ace/Monitor_Control/Packets_Received_Monitor.h +++ b/ACE/ace/Monitor_Control/Packets_Received_Monitor.h @@ -56,8 +56,10 @@ namespace ACE , public Linux_Network_Interface_Monitor #elif defined (ACE_HAS_KSTAT) , public Solaris_Network_Interface_Monitor -#elif defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) +#elif defined (__NetBSD__) || defined (__OpenBSD__) , public BSD_Network_Interface_Monitor +#elif defined (__FreeBSD__) + , public FreeBSD_Network_Interface_Monitor #else , public Null_Network_Interface_Monitor #endif diff --git a/ACE/ace/Monitor_Control/Packets_Sent_Monitor.cpp b/ACE/ace/Monitor_Control/Packets_Sent_Monitor.cpp index 6dc7f62f99e..8c1ef6831ea 100644 --- a/ACE/ace/Monitor_Control/Packets_Sent_Monitor.cpp +++ b/ACE/ace/Monitor_Control/Packets_Sent_Monitor.cpp @@ -24,8 +24,10 @@ namespace ACE /// Scan format for /proc/net/dev #elif defined (ACE_HAS_KSTAT) , Solaris_Network_Interface_Monitor (ACE_TEXT ("opackets")) -#elif defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) +#elif defined (__NetBSD__) || defined (__OpenBSD__) , BSD_Network_Interface_Monitor (ACE_TEXT ("opackets")) +#elif defined (__FreeBSD__) + , FreeBSD_Network_Interface_Monitor (ACE_TEXT ("opackets")) #endif {} diff --git a/ACE/ace/Monitor_Control/Packets_Sent_Monitor.h b/ACE/ace/Monitor_Control/Packets_Sent_Monitor.h index 0db9549051f..b8494a6b166 100644 --- a/ACE/ace/Monitor_Control/Packets_Sent_Monitor.h +++ b/ACE/ace/Monitor_Control/Packets_Sent_Monitor.h @@ -56,8 +56,10 @@ namespace ACE , public Linux_Network_Interface_Monitor #elif defined (ACE_HAS_KSTAT) , public Solaris_Network_Interface_Monitor -#elif defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) +#elif defined (__NetBSD__) || defined (__OpenBSD__) , public BSD_Network_Interface_Monitor +#elif defined (__FreeBSD__) + , public FreeBSD_Network_Interface_Monitor #else , public Null_Network_Interface_Monitor #endif |