Skip to content

Member sizes read from btf are always zero #1788

Closed
@jschwinger233

Description

@jschwinger233

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions