Beispiel #1
0
func (h *Hypervisor) ListNetworkFilters(flags uint) ([]*NetworkFilter, error) {
	var cfilters *C.virNWFilterPtr
	result := C.virConnectListAllNWFilters(h.cptr, &cfilters, C.uint(flags))
	if result == -1 {
		return nil, GetLastError()
	}

	var filters = make([]*NetworkFilter, result)
	p := (*[1 << 30]C.virNWFilterPtr)(unsafe.Pointer(cfilters))

	for i := 0; i < int(result); i++ {
		filters[i] = newNetworkFilter(p[i])
	}
	defer C.free(unsafe.Pointer(cfilters))

	return filters, nil
}
Beispiel #2
0
func (c *VirConnection) ListAllNWFilters(flags uint32) ([]VirNWFilter, error) {
	var cList *C.virNWFilterPtr
	numNWFilters := C.virConnectListAllNWFilters(c.ptr, (**C.virNWFilterPtr)(&cList), C.uint(flags))
	if numNWFilters == -1 {
		return nil, GetLastError()
	}
	hdr := reflect.SliceHeader{
		Data: uintptr(unsafe.Pointer(cList)),
		Len:  int(numNWFilters),
		Cap:  int(numNWFilters),
	}
	var filters []VirNWFilter
	slice := *(*[]C.virNWFilterPtr)(unsafe.Pointer(&hdr))
	for _, ptr := range slice {
		filters = append(filters, VirNWFilter{ptr})
	}
	C.free(unsafe.Pointer(cList))
	return filters, nil
}