Skip to content

Commit 69b7300

Browse files
setup skeleton for offset calculation
1 parent 11e8e72 commit 69b7300

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

pythonbpf/vmlinux_parser/class_handler.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def process_vmlinux_post_ast(
7171
if len(field_elem) == 2:
7272
field_name, field_type = field_elem
7373
elif len(field_elem) == 3:
74+
raise NotImplementedError("Bitfields are not supported in the current version")
7475
field_name, field_type, bitfield_size = field_elem
7576
field_table[field_name] = [field_type, bitfield_size]
7677
elif hasattr(class_obj, "__annotations__"):

pythonbpf/vmlinux_parser/dependency_node.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class Field:
1313
containing_type: Optional[Any]
1414
type_size: Optional[int]
1515
bitfield_size: Optional[int]
16+
offset: int
1617
value: Any = None
1718
ready: bool = False
1819

@@ -60,6 +61,10 @@ def set_bitfield_size(self, bitfield_size: Any, mark_ready: bool = False) -> Non
6061
if mark_ready:
6162
self.ready = True
6263

64+
def set_offset(self, offset: int) -> None:
65+
"""Set the offset of this field"""
66+
self.offset = offset
67+
6368

6469
@dataclass
6570
class DependencyNode:
@@ -109,6 +114,7 @@ class DependencyNode:
109114
depends_on: Optional[list[str]] = None
110115
fields: Dict[str, Field] = field(default_factory=dict)
111116
_ready_cache: Optional[bool] = field(default=None, repr=False)
117+
current_offset: int = 0
112118

113119
def add_field(
114120
self,
@@ -120,6 +126,7 @@ def add_field(
120126
ctype_complex_type: Optional[int] = None,
121127
bitfield_size: Optional[int] = None,
122128
ready: bool = False,
129+
offset: int = 0,
123130
) -> None:
124131
"""Add a field to the node with an optional initial value and readiness state."""
125132
if self.depends_on is None:
@@ -133,6 +140,7 @@ def add_field(
133140
type_size=type_size,
134141
ctype_complex_type=ctype_complex_type,
135142
bitfield_size=bitfield_size,
143+
offset=offset
136144
)
137145
# Invalidate readiness cache
138146
self._ready_cache = None
@@ -209,9 +217,14 @@ def set_field_ready(self, name: str, is_ready: bool = False) -> None:
209217
raise KeyError(f"Field '{name}' does not exist in node '{self.name}'")
210218

211219
self.fields[name].set_ready(is_ready)
220+
self.fields[name].set_offset(self.current_offset)
221+
self.current_offset += self._calculate_size(name)
222+
212223
# Invalidate readiness cache
213224
self._ready_cache = None
214225

226+
def _calculate_size(self, name: str) -> int:
227+
pass
215228
@property
216229
def is_ready(self) -> bool:
217230
"""Check if the node is ready (all fields are ready)."""

0 commit comments

Comments
 (0)