ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/libstatgrab/src/libstatgrab/network_stats.c
(Generate patch)

Comparing projects/libstatgrab/src/libstatgrab/network_stats.c (file contents):
Revision 1.6 by pajs, Fri Mar 7 11:56:44 2003 UTC vs.
Revision 1.12 by pajs, Mon Mar 31 11:30:54 2003 UTC

# Line 25 | Line 25
25   #include <stdlib.h>
26   #include <string.h>
27   #include "statgrab.h"
28 < #include "time.h"
28 > #include <time.h>
29   #ifdef SOLARIS
30   #include <kstat.h>
31   #include <sys/sysinfo.h>
# Line 90 | Line 90 | network_stat_t *get_network_stats(int *entries){
90  
91   #ifdef LINUX
92          FILE *f;
93 <        /* Horrible big enough, but it should be quite easily */
93 >        /* Horrible big enough, but it should be easily big enough */
94          char line[8096];
95          regex_t regex;
96          regmatch_t line_match[4];
# Line 107 | Line 107 | network_stat_t *get_network_stats(int *entries){
107                  if (!strcmp(ksp->ks_class, "net")) {
108                          kstat_read(kc, ksp, NULL);
109  
110 <                        if((knp=kstat_data_lookup(ksp, "rbytes64"))==NULL){
110 > #ifdef SOL7
111 > #define RLOOKUP "rbytes"
112 > #define WLOOKUP "obytes"
113 > #define VALTYPE value.ui32
114 > #else
115 > #define RLOOKUP "rbytes64"
116 > #define WLOOKUP "obytes64"
117 > #define VALTYPE value.ui64
118 > #endif
119 >
120 >                        if((knp=kstat_data_lookup(ksp, RLOOKUP))==NULL){
121                                  /* Not a network interface, so skip to the next entry */
122                                  continue;
123                          }
# Line 117 | Line 127 | network_stat_t *get_network_stats(int *entries){
127                                  return NULL;
128                          }
129                          network_stat_ptr=network_stats+interfaces;
130 <                        network_stat_ptr->rx=knp->value.ui64;
130 >                        network_stat_ptr->rx=knp->VALTYPE;
131  
132 <                        if((knp=kstat_data_lookup(ksp, "obytes64"))==NULL){
132 >                        if((knp=kstat_data_lookup(ksp, WLOOKUP))==NULL){
133                                  /* Not a network interface, so skip to the next entry */
134                                  continue;
135                          }
136 <                        network_stat_ptr->tx=knp->value.ui64;
136 >                        network_stat_ptr->tx=knp->VALTYPE;
137                          if(network_stat_ptr->interface_name!=NULL){
138                                  free(network_stat_ptr->interface_name);
139                          }
# Line 173 | Line 183 | network_stat_t *get_network_stats(int *entries){
183  
184                  interfaces++;
185          }
186 +        fclose(f);
187  
188   #endif
189          *entries=interfaces;
# Line 180 | Line 191 | network_stat_t *get_network_stats(int *entries){
191          return network_stats;  
192   }
193  
194 + long long transfer_diff(long long new, long long old){
195 + #ifdef SOL7
196 + #define MAXVAL 4294967296
197 + #else
198 + #define MAXVAL 18446744073709551616
199 + #endif
200 +        long long result;
201 +        if(new>=old){
202 +                result = (new-old);
203 +        }else{
204 +                result = (MAXVAL+(new-old));
205 +        }
206 +
207 +        return result;
208 +
209 + }
210 +
211   network_stat_t *get_network_stats_diff(int *entries){
212          static network_stat_t *network_stats_diff=NULL;
213          static int sizeof_net_stats_diff=0;
# Line 218 | Line 246 | network_stat_t *get_network_stats_diff(int *entries){
246          for(x=0;x<sizeof_net_stats_diff;x++){
247  
248                  if((strcmp(network_stats_diff_ptr->interface_name, network_stats_ptr->interface_name))==0){
249 <                        network_stats_diff_ptr->tx = network_stats_ptr->tx - network_stats_diff_ptr->tx;
250 <                        network_stats_diff_ptr->rx = network_stats_ptr->rx - network_stats_diff_ptr->rx;        
249 >                        network_stats_diff_ptr->tx = transfer_diff(network_stats_ptr->tx, network_stats_diff_ptr->tx);
250 >                        network_stats_diff_ptr->rx = transfer_diff(network_stats_ptr->rx, network_stats_diff_ptr->rx);
251                          network_stats_diff_ptr->systime = network_stats_ptr->systime - network_stats_diff_ptr->systime;
252                  }else{
253                          
254                          network_stats_ptr=network_stats;
255                          for(y=0;y<ifaces;y++){
256                                  if((strcmp(network_stats_diff_ptr->interface_name, network_stats_ptr->interface_name))==0){
257 <                                        network_stats_diff_ptr->tx = network_stats_ptr->tx - network_stats_diff_ptr->tx;
258 <                                        network_stats_diff_ptr->rx = network_stats_ptr->rx - network_stats_diff_ptr->rx;        
257 >                                        network_stats_diff_ptr->tx = transfer_diff(network_stats_ptr->tx, network_stats_diff_ptr->tx);
258 >                                        network_stats_diff_ptr->rx = transfer_diff(network_stats_ptr->rx, network_stats_diff_ptr->rx);  
259                                          network_stats_diff_ptr->systime = network_stats_ptr->systime - network_stats_diff_ptr->systime;
260                                          break;
261                                  }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines