podman
117 строк · 3.1 Кб
1// +build aix
2
3package perfstat
4
5/*
6#cgo LDFLAGS: -lperfstat
7
8#include <libperfstat.h>
9#include <string.h>
10#include <stdlib.h>
11
12#include "c_helpers.h"
13*/
14import "C"
15
16import (
17"fmt"
18"unsafe"
19)
20
21func NetIfaceTotalStat() (*NetIfaceTotal, error) {
22var nif C.perfstat_netinterface_total_t
23
24rc := C.perfstat_netinterface_total(nil, &nif, C.sizeof_perfstat_netinterface_total_t, 1)
25if rc != 1 {
26return nil, fmt.Errorf("perfstat_netinterface_total() error")
27}
28n := perfstatnetinterfacetotal2netifacetotal(nif)
29return &n, nil
30}
31
32func NetBufferStat() ([]NetBuffer, error) {
33var nbuf *C.perfstat_netbuffer_t
34var first C.perfstat_id_t
35
36numbuf := C.perfstat_netbuffer(nil, nil, C.sizeof_perfstat_netbuffer_t, 0)
37if numbuf < 1 {
38return nil, fmt.Errorf("perfstat_netbuffer() error")
39}
40
41nblen := C.sizeof_perfstat_netbuffer_t * C.ulong(numbuf)
42nbuf = (*C.perfstat_netbuffer_t)(C.malloc(nblen))
43defer C.free(unsafe.Pointer(nbuf))
44C.strcpy(&first.name[0], C.CString(C.FIRST_NETBUFFER))
45r := C.perfstat_netbuffer(&first, nbuf, C.sizeof_perfstat_netbuffer_t, numbuf)
46if r < 0 {
47return nil, fmt.Errorf("perfstat_netbuffer() error")
48}
49nb := make([]NetBuffer, r)
50for i := 0; i < int(r); i++ {
51b := C.get_netbuffer_stat(nbuf, C.int(i))
52if b != nil {
53nb[i] = perfstatnetbuffer2netbuffer(b)
54}
55}
56return nb, nil
57}
58
59func NetIfaceStat() ([]NetIface, error) {
60var nif *C.perfstat_netinterface_t
61var first C.perfstat_id_t
62
63numif := C.perfstat_netinterface(nil, nil, C.sizeof_perfstat_netinterface_t, 0)
64if numif < 0 {
65return nil, fmt.Errorf("perfstat_netinterface() error")
66}
67if numif == 0 {
68return []NetIface{}, fmt.Errorf("no network interfaces found")
69}
70
71iflen := C.sizeof_perfstat_netinterface_t * C.ulong(numif)
72nif = (*C.perfstat_netinterface_t)(C.malloc(iflen))
73defer C.free(unsafe.Pointer(nif))
74C.strcpy(&first.name[0], C.CString(C.FIRST_NETINTERFACE))
75r := C.perfstat_netinterface(&first, nif, C.sizeof_perfstat_netinterface_t, numif)
76if r < 0 {
77return nil, fmt.Errorf("perfstat_netinterface() error")
78}
79ifs := make([]NetIface, r)
80for i := 0; i < int(r); i++ {
81b := C.get_netinterface_stat(nif, C.int(i))
82if b != nil {
83ifs[i] = perfstatnetinterface2netiface(b)
84}
85}
86return ifs, nil
87}
88
89func NetAdapterStat() ([]NetAdapter, error) {
90var adapters *C.perfstat_netadapter_t
91var first C.perfstat_id_t
92
93numad := C.perfstat_netadapter(nil, nil, C.sizeof_perfstat_netadapter_t, 0)
94if numad < 0 {
95return nil, fmt.Errorf("perfstat_netadater() error")
96}
97if numad == 0 {
98return []NetAdapter{}, fmt.Errorf("no network adapters found")
99}
100
101adplen := C.sizeof_perfstat_netadapter_t * C.ulong(numad)
102adapters = (*C.perfstat_netadapter_t)(C.malloc(adplen))
103defer C.free(unsafe.Pointer(adapters))
104C.strcpy(&first.name[0], C.CString(C.FIRST_NETINTERFACE))
105r := C.perfstat_netadapter(&first, adapters, C.sizeof_perfstat_netadapter_t, numad)
106if r < 0 {
107return nil, fmt.Errorf("perfstat_netadapter() error")
108}
109ads := make([]NetAdapter, r)
110for i := 0; i < int(r); i++ {
111b := C.get_netadapter_stat(adapters, C.int(i))
112if b != nil {
113ads[i] = perfstatnetadapter2netadapter(b)
114}
115}
116return ads, nil
117}
118