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.24 by ats, Wed Jan 21 23:46:54 2004 UTC vs.
Revision 1.25 by pajs, Fri Jan 23 23:23:33 2004 UTC

# Line 318 | Line 318 | network_stat_t *get_network_stats_diff(int *entries) {
318          *entries = diff_count;
319          return diff;
320   }
321 + /* NETWORK INTERFACE STATS */
322 +
323 + void network_iface_stat_init(int start, int end, network_iface_stat_t *net_stats){
324 +
325 +        for(net_stats+=start; start<end; start++){
326 +                net_stats->interface_name=NULL;
327 +                net_stats->speed=0;
328 +                net_stats->dup=NO_DUPLEX;
329 +                net_stats++;
330 +        }
331 + }
332 +
333 + network_iface_stat_t *network_iface_stat_malloc(int needed_entries, int *cur_entries, network_iface_stat_t *net_stats){
334 +
335 +        if(net_stats==NULL){
336 +
337 +                if((net_stats=malloc(needed_entries * sizeof(network_iface_stat_t)))==NULL){
338 +                        return NULL;
339 +                }
340 +                network_iface_stat_init(0, needed_entries, net_stats);
341 +                *cur_entries=needed_entries;
342 +
343 +                return net_stats;
344 +        }
345 +
346 +
347 +        if(*cur_entries<needed_entries){
348 +                net_stats=realloc(net_stats, (sizeof(network_iface_stat_t)*needed_entries));
349 +                if(net_stats==NULL){
350 +                        return NULL;
351 +                }
352 +                network_iface_stat_init(*cur_entries, needed_entries, net_stats);
353 +                *cur_entries=needed_entries;
354 +        }
355 +
356 +        return net_stats;
357 + }
358 +
359 + network_iface_stat_t *get_network_iface_stats(int *entries){
360 +        static network_iface_stat_t *network_iface_stats;
361 +        network_iface_stat_t *network_iface_stat_ptr;
362 +        static int sizeof_network_iface_stats=0;        
363 +        int ifaces;
364 +
365 + #ifdef SOLARIS
366 +        kstat_ctl_t *kc;
367 +        kstat_t *ksp;
368 +        kstat_named_t *knp;
369 + #endif
370 +
371 + #ifdef SOLARIS
372 +        if ((kc = kstat_open()) == NULL) {
373 +                return NULL;
374 +        }
375 +
376 +        ifaces=0;
377 +
378 +        for (ksp = kc->kc_chain; ksp; ksp = ksp->ks_next) {
379 +                if (!strcmp(ksp->ks_class, "net")) {
380 +                        kstat_read(kc, ksp, NULL);
381 +                        if((knp=kstat_data_lookup(ksp, "ifspeed"))==NULL){
382 +                                /* Not a network interface, so skip to the next entry */
383 +                                continue;
384 +                        }
385 +                        network_iface_stats=network_iface_stat_malloc((ifaces+1), &sizeof_network_iface_stats, network_iface_stats);
386 +                        if(network_iface_stats==NULL){
387 +                                return NULL;
388 +                        }
389 +                        network_iface_stat_ptr = network_iface_stats + interfaces;
390 +                        network_iface_stat_ptr->speed = knp->value.ui64 / (1000*1000);
391 +
392 +                        if((knp=kstat_data_lookup(ksp, "link_duplex"))==NULL){
393 +                                /* Not a network interface, so skip to the next entry */
394 +                                continue;
395 +                        }
396 +
397 +                        if(knp->value.ui64 == 0){
398 +                                network_iface_stat_ptr->dup = FULL_DUPLEX;
399 +                        }else{
400 +                                network_iface_stat_ptr->dup = HALF_DUPLEX;
401 +                        }
402 +
403 +                        network_iface_stat_ptr->interface_name = strdup(ksp->ks_name);
404 +                        interfaces++;
405 +                }
406 +        }
407 +        kstat_close(kc);
408 +        
409 + #endif  
410 +        *entries = interfaces;
411 +        return network_iface_stats;
412 + }
413 +

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines