podman

Форк
0
117 строк · 3.1 Кб
1
// +build aix
2

3
package 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
*/
14
import "C"
15

16
import (
17
	"fmt"
18
	"unsafe"
19
)
20

21
func NetIfaceTotalStat() (*NetIfaceTotal, error) {
22
	var nif C.perfstat_netinterface_total_t
23

24
	rc := C.perfstat_netinterface_total(nil, &nif, C.sizeof_perfstat_netinterface_total_t, 1)
25
	if rc != 1 {
26
		return nil, fmt.Errorf("perfstat_netinterface_total() error")
27
	}
28
	n := perfstatnetinterfacetotal2netifacetotal(nif)
29
	return &n, nil
30
}
31

32
func NetBufferStat() ([]NetBuffer, error) {
33
	var nbuf *C.perfstat_netbuffer_t
34
	var first C.perfstat_id_t
35

36
	numbuf := C.perfstat_netbuffer(nil, nil, C.sizeof_perfstat_netbuffer_t, 0)
37
	if numbuf < 1 {
38
		return nil, fmt.Errorf("perfstat_netbuffer() error")
39
	}
40

41
	nblen := C.sizeof_perfstat_netbuffer_t * C.ulong(numbuf)
42
	nbuf = (*C.perfstat_netbuffer_t)(C.malloc(nblen))
43
	defer C.free(unsafe.Pointer(nbuf))
44
	C.strcpy(&first.name[0], C.CString(C.FIRST_NETBUFFER))
45
	r := C.perfstat_netbuffer(&first, nbuf, C.sizeof_perfstat_netbuffer_t, numbuf)
46
	if r < 0 {
47
		return nil, fmt.Errorf("perfstat_netbuffer() error")
48
	}
49
	nb := make([]NetBuffer, r)
50
	for i := 0; i < int(r); i++ {
51
		b := C.get_netbuffer_stat(nbuf, C.int(i))
52
		if b != nil {
53
			nb[i] = perfstatnetbuffer2netbuffer(b)
54
		}
55
	}
56
	return nb, nil
57
}
58

59
func NetIfaceStat() ([]NetIface, error) {
60
	var nif *C.perfstat_netinterface_t
61
	var first C.perfstat_id_t
62

63
	numif := C.perfstat_netinterface(nil, nil, C.sizeof_perfstat_netinterface_t, 0)
64
	if numif < 0 {
65
		return nil, fmt.Errorf("perfstat_netinterface() error")
66
	}
67
	if numif == 0 {
68
		return []NetIface{}, fmt.Errorf("no network interfaces found")
69
	}
70

71
	iflen := C.sizeof_perfstat_netinterface_t * C.ulong(numif)
72
	nif = (*C.perfstat_netinterface_t)(C.malloc(iflen))
73
	defer C.free(unsafe.Pointer(nif))
74
	C.strcpy(&first.name[0], C.CString(C.FIRST_NETINTERFACE))
75
	r := C.perfstat_netinterface(&first, nif, C.sizeof_perfstat_netinterface_t, numif)
76
	if r < 0 {
77
		return nil, fmt.Errorf("perfstat_netinterface() error")
78
	}
79
	ifs := make([]NetIface, r)
80
	for i := 0; i < int(r); i++ {
81
		b := C.get_netinterface_stat(nif, C.int(i))
82
		if b != nil {
83
			ifs[i] = perfstatnetinterface2netiface(b)
84
		}
85
	}
86
	return ifs, nil
87
}
88

89
func NetAdapterStat() ([]NetAdapter, error) {
90
	var adapters *C.perfstat_netadapter_t
91
	var first C.perfstat_id_t
92

93
	numad := C.perfstat_netadapter(nil, nil, C.sizeof_perfstat_netadapter_t, 0)
94
	if numad < 0 {
95
		return nil, fmt.Errorf("perfstat_netadater() error")
96
	}
97
	if numad == 0 {
98
		return []NetAdapter{}, fmt.Errorf("no network adapters found")
99
	}
100

101
	adplen := C.sizeof_perfstat_netadapter_t * C.ulong(numad)
102
	adapters = (*C.perfstat_netadapter_t)(C.malloc(adplen))
103
	defer C.free(unsafe.Pointer(adapters))
104
	C.strcpy(&first.name[0], C.CString(C.FIRST_NETINTERFACE))
105
	r := C.perfstat_netadapter(&first, adapters, C.sizeof_perfstat_netadapter_t, numad)
106
	if r < 0 {
107
		return nil, fmt.Errorf("perfstat_netadapter() error")
108
	}
109
	ads := make([]NetAdapter, r)
110
	for i := 0; i < int(r); i++ {
111
		b := C.get_netadapter_stat(adapters, C.int(i))
112
		if b != nil {
113
			ads[i] = perfstatnetadapter2netadapter(b)
114
		}
115
	}
116
	return ads, nil
117
}
118

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.