From 0163de033d0cbc72bf1784edb82a12584b433722 Mon Sep 17 00:00:00 2001 From: Martin Teichmann <martin.teichmann@xfel.eu> Date: Wed, 3 Mar 2021 10:12:40 +0000 Subject: [PATCH] first time only read data --- ebpfcat/ebpfcat.py | 6 +++++- ebpfcat/xdp.py | 8 ++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/ebpfcat/ebpfcat.py b/ebpfcat/ebpfcat.py index 62d2ea0..c06fe36 100644 --- a/ebpfcat/ebpfcat.py +++ b/ebpfcat/ebpfcat.py @@ -215,7 +215,8 @@ class EBPFTerminal(Terminal): bases = [None] if self.pdo_out_sz: bases.append(packet.size + packet.DATAGRAM_HEADER) - packet.append(ECCmd.FPWR, b"\0" * self.pdo_out_sz, 0, + packet.on_the_fly.append((packet.size, ECCmd.FPWR)) + packet.append(ECCmd.NOP, b"\0" * self.pdo_out_sz, 0, self.position, self.pdo_out_off) return bases @@ -304,6 +305,7 @@ class SyncGroupBase: def allocate(self): self.packet = Packet() + self.packet.on_the_fly = [] self.terminals = {t: t.allocate(self.packet) for t in self.terminals} @@ -345,6 +347,8 @@ class FastSyncGroup(SyncGroupBase, XDP): def program(self): with self.packetSize >= self.packet.size + Packet.ETHERNET_HEADER as p: + for pos, cmd in self.packet.on_the_fly: + p.pB[pos + Packet.ETHERNET_HEADER] = cmd.value for dev in self.devices: dev.program() self.exit(XDPExitCode.TX) diff --git a/ebpfcat/xdp.py b/ebpfcat/xdp.py index 53304d4..522b376 100644 --- a/ebpfcat/xdp.py +++ b/ebpfcat/xdp.py @@ -75,11 +75,11 @@ class PacketArray: self.no = no self.memory = memory - def __getitem__(self, value): - return self.memory[self.ebpf.r[self.no] + value] + def __getitem__(self, pos): + return self.memory[self.ebpf.r[self.no] + pos] - def __setitem__(self, value): - self.memory[self.ebpf.r[self.no]] = value + def __setitem__(self, pos, value): + self.memory[self.ebpf.r[self.no] + pos] = value class Packet: -- GitLab