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