On Thu, Jan 30, 2025 at 02:35:04PM +0100, Eelco Chaudron wrote:
>
>
> On 17 Jan 2025, at 15:25, Adrian Moreno wrote:
>
> > Use pcapng instead of pcap format and store the result and the input
> > port name so they are visible in wireshark/tshark.
> >
> > Signed-off-by: Adrian Moreno <[email protected]>
>
> In general, this looks good to me. Some small comments below.
>
> //Eelco
>
> > ---
> >  utilities/usdt-scripts/upcall_monitor.py | 13 +++++++++++--
> >  1 file changed, 11 insertions(+), 2 deletions(-)
> >
> > diff --git a/utilities/usdt-scripts/upcall_monitor.py 
> > b/utilities/usdt-scripts/upcall_monitor.py
> > index 104225cad..59828b064 100755
> > --- a/utilities/usdt-scripts/upcall_monitor.py
> > +++ b/utilities/usdt-scripts/upcall_monitor.py
> > @@ -118,7 +118,7 @@
> >
> >  from bcc import BPF, USDT, USDTException
> >  from os.path import exists
> > -from scapy.all import hexdump, wrpcap
> > +from scapy.all import hexdump, PcapNgWriter
> >  from scapy.layers.l2 import Ether
> >
> >  from usdt_lib import DpPortMapping
> > @@ -284,6 +284,8 @@ int kretprobe__ovs_dp_upcall(struct pt_regs *ctx)
> >  #endif
> >  """
> >
> > +pcap_writer = None
> > +
> >
> >  #
> >  # print_key()
> > @@ -318,6 +320,8 @@ def print_key(event, decode_dump):
> >  # print_event()
> >  #
> >  def print_event(ctx, data, size):
> > +    global pcap_writer
> > +
> >      event = b["events"].event(data)
> >      dp = event.dpif_name.decode("utf-8")
> >
> > @@ -380,7 +384,12 @@ def print_event(ctx, data, size):
> >          print(re.sub('^', ' ' * 4, packet.show(dump=True), 
> > flags=re.MULTILINE))
> >
> >      if options.pcap is not None:
> > -        wrpcap(options.pcap, packet, append=True, 
> > snaplen=options.packet_size)
>
> If I’m correct this is introduced in scapy 2.4, which might not be available 
> in all distros by default, for example, RHEL8? Are we ok with this and assume 
> they need to pip-install it?
>

That's a good point. We have a flaky vague dependency system, most of
the tools just fail to import dependencies and users have to install
them one by one :-).

On this particular dependency, we can probably try to import
PcapNgWriter and fall back to wrpcap on failure. But it would be nice to
properly package (at least as a python package with dependency tracking)
these scripts. WDYT?

> > +        if pcap_writer is None:
> > +            pcap_writer = PcapNgWriter(options.pcap)
> > +
> > +        packet.comment = f"result={event.result}"
>
> Should we put in the whole line related to this packet? i.e. the print() from 
> above, maybe including the key_dump?
>

Yep, that can also go there, for sure. It'd be pretty convenient.

> > +        packet.sniffed_on = port
> > +        pcap_writer.write(packet)
> >
> >
> >  #
> > --
> > 2.48.1
> >
> > _______________________________________________
> > dev mailing list
> > [email protected]
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to