Skip to content

Commit

Permalink
chore(selftest): map-of-maps-outer-low-inner-low
Browse files Browse the repository at this point in the history
Introduce a new selftest that tests a map of maps with outer and inner
maps not pre-allocated in the BPF program.
  • Loading branch information
geyslan committed Sep 4, 2023
1 parent dceaae1 commit 180e890
Show file tree
Hide file tree
Showing 6 changed files with 91 additions and 0 deletions.
1 change: 1 addition & 0 deletions selftest/map-of-maps-outer-low-inner-low/Makefile
7 changes: 7 additions & 0 deletions selftest/map-of-maps-outer-low-inner-low/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module github.com/aquasecurity/libbpfgo/selftest/map-update

go 1.18

require github.com/aquasecurity/libbpfgo v0.4.7-libbpf-1.2.0-b2e29a1

replace github.com/aquasecurity/libbpfgo => ../../
4 changes: 4 additions & 0 deletions selftest/map-of-maps-outer-low-inner-low/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
7 changes: 7 additions & 0 deletions selftest/map-of-maps-outer-low-inner-low/main.bpf.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
//+build ignore

#include <vmlinux.h>

#include <bpf/bpf_helpers.h>

char LICENSE[] SEC("license") = "Dual BSD/GPL";
71 changes: 71 additions & 0 deletions selftest/map-of-maps-outer-low-inner-low/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package main

import "C"

import (
"encoding/binary"
"log"
"unsafe"

bpf "github.com/aquasecurity/libbpfgo"
)

func main() {
bpfModule, err := bpf.NewModuleFromFile("main.bpf.o")
if err != nil {
log.Fatal(err)
}
defer bpfModule.Close()

err = bpfModule.BPFLoadObject()
if err != nil {
log.Fatal(err)
}

innerArray, err := bpf.CreateMap(bpf.MapTypeArray, "inner_array", 4, 4, 1, nil)
if err != nil {
log.Fatal(err)
}

// Create the "outer_hash" map, using the "inner_array" map as a prototype.
opts := bpf.BPFMapCreateOpts{
InnerMapFD: uint32(innerArray.FileDescriptor()),
}
outerHash, err := bpf.CreateMap(bpf.MapTypeHash, "outer_hash", 4, 4, 1, &opts)
if err != nil {
log.Fatal(err)
}

// Save the inner map in the "outer_hash" map, using the hash key 1917.
// The value used to save the element is the the inner map file descriptor,
// however the actual saved value is the inner map ID.
key1 := uint32(1917)
key1Unsafe := unsafe.Pointer(&key1)
value1 := uint32(innerArray.FileDescriptor()) // "inner_array" FD.
value1Unsafe := unsafe.Pointer(&value1)
err = outerHash.Update(key1Unsafe, value1Unsafe)
if err != nil {
log.Fatal(err)
}

// Save an element in the "inner_array" map.
key1 = uint32(0) // index 0
value1 = uint32(191711)
value1Unsafe = unsafe.Pointer(&value1)
err = innerArray.Update(key1Unsafe, value1Unsafe)
if err != nil {
log.Fatal(err)
}
}

func endian() binary.ByteOrder {
var i int32 = 0x01020304
u := unsafe.Pointer(&i)
pb := (*byte)(u)
b := *pb
if b == 0x04 {
return binary.LittleEndian
}

return binary.BigEndian
}
1 change: 1 addition & 0 deletions selftest/map-of-maps-outer-low-inner-low/run.sh

0 comments on commit 180e890

Please sign in to comment.