pcap reading by dispatch instead of iterator, this works also on Raspberry

This commit is contained in:
uhi22 2022-11-20 00:10:05 +01:00
parent 2db41aad69
commit 88b60197fb

View file

@ -888,9 +888,7 @@ class pyPlcHomeplug():
def showStatus(self, s, selection=""): def showStatus(self, s, selection=""):
self.callbackShowStatus(s, selection) self.callbackShowStatus(s, selection)
def mainfunction(self): def receiveCallback(self, timestamp, pkt, *args):
# print("will evaluate self.sniffer")
for ts, pkt in self.sniffer: # attention: for using this in non-blocking manner, we need the patch described above.
self.nPacketsReceived+=1 self.nPacketsReceived+=1
# print('%d' % (ts)) # the time stamp # print('%d' % (ts)) # the time stamp
# We received an ethernet package. Determine its type, and dispatch it to the related handler. # We received an ethernet package. Determine its type, and dispatch it to the related handler.
@ -901,6 +899,12 @@ class pyPlcHomeplug():
if (etherType == 0x86dd): # it is an IPv6 frame if (etherType == 0x86dd): # it is an IPv6 frame
self.ipv6.evaluateReceivedPacket(pkt) self.ipv6.evaluateReceivedPacket(pkt)
def mainfunction(self):
# https://stackoverflow.com/questions/31305712/how-do-i-make-libpcap-pcap-loop-non-blocking
# Tell the sniffer to give max 100 received packets to the callback function:
self.sniffer.dispatch(100, self.receiveCallback, None)
self.showStatus("nPacketsReceived=" + str(self.nPacketsReceived)) self.showStatus("nPacketsReceived=" + str(self.nPacketsReceived))
self.runPevSequencer() # run the message sequencer for the PEV side self.runPevSequencer() # run the message sequencer for the PEV side