Closed
Description
Describe the bug
I tried to read __sk_buff->gso_size's offset and size from BTF, found zero size as a result.
How to reproduce
package main
import (
"fmt"
"github.com/cilium/ebpf/btf"
)
func main() {
btfSpec, err := btf.LoadKernelSpec()
if err != nil {
panic(fmt.Sprintf("Failed to load BTF spec: %v", err))
}
iter := btfSpec.Iterate()
for iter.Next() {
if strct, ok := iter.Type.(*btf.Struct); ok && strct.Name == "__sk_buff" {
for _, member := range strct.Members {
offsetInBytes := member.Offset.Bytes()
SizeInBytes := member.BitfieldSize.Bytes()
println("Member:", member.Name, "Offset:", offsetInBytes, "Size:", SizeInBytes)
}
}
}
}
The output is:
Member: len Offset: 0 Size: 0
Member: pkt_type Offset: 4 Size: 0
Member: mark Offset: 8 Size: 0
Member: queue_mapping Offset: 12 Size: 0
Member: protocol Offset: 16 Size: 0
Member: vlan_present Offset: 20 Size: 0
Member: vlan_tci Offset: 24 Size: 0
Member: vlan_proto Offset: 28 Size: 0
Member: priority Offset: 32 Size: 0
Member: ingress_ifindex Offset: 36 Size: 0
Member: ifindex Offset: 40 Size: 0
Member: tc_index Offset: 44 Size: 0
Member: cb Offset: 48 Size: 0
Member: hash Offset: 68 Size: 0
Member: tc_classid Offset: 72 Size: 0
Member: data Offset: 76 Size: 0
Member: data_end Offset: 80 Size: 0
Member: napi_id Offset: 84 Size: 0
Member: family Offset: 88 Size: 0
Member: remote_ip4 Offset: 92 Size: 0
Member: local_ip4 Offset: 96 Size: 0
Member: remote_ip6 Offset: 100 Size: 0
Member: local_ip6 Offset: 116 Size: 0
Member: remote_port Offset: 132 Size: 0
Member: local_port Offset: 136 Size: 0
Member: data_meta Offset: 140 Size: 0
Member: Offset: 144 Size: 0
Member: tstamp Offset: 152 Size: 0
Member: wire_len Offset: 160 Size: 0
Member: gso_segs Offset: 164 Size: 0
Member: Offset: 168 Size: 0
Member: gso_size Offset: 176 Size: 0
Member: tstamp_type Offset: 180 Size: 0
Member: hwtstamp Offset: 184 Size: 0
Version information
github.com/cilium/ebpf v0.18.0