Re: [PATCH bpf-next 05/13] docs: net: Fix indentation issues for code snippets

From: Tobin C. Harding
Date: Sun Aug 05 2018 - 20:22:31 EST


On Fri, Aug 03, 2018 at 10:44:23AM +0200, Daniel Borkmann wrote:
> On 08/01/2018 07:09 AM, Tobin C. Harding wrote:
> [...]
> > -Starting bpf_dbg is trivial and just requires issuing:
> > +Starting bpf_dbg is trivial and just requires issuing::
> >
> > -# ./bpf_dbg
> > + # ./bpf_dbg
> >
> > In case input and output do not equal stdin/stdout, bpf_dbg takes an
> > alternative stdin source as a first argument, and an alternative stdout
> > @@ -381,86 +384,87 @@ file "~/.bpf_dbg_init" and the command history is stored in the file
> > Interaction in bpf_dbg happens through a shell that also has auto-completion
> > support (follow-up example commands starting with '>' denote bpf_dbg shell).
> > The usual workflow would be to ...
> > -
> > -> load bpf 6,40 0 0 12,21 0 3 2048,48 0 0 23,21 0 1 1,6 0 0 65535,6 0 0 0
> > - Loads a BPF filter from standard output of bpf_asm, or transformed via
> > - e.g. `tcpdump -iem1 -ddd port 22 | tr '\n' ','`. Note that for JIT
> > - debugging (next section), this command creates a temporary socket and
> > - loads the BPF code into the kernel. Thus, this will also be useful for
> > - JIT developers.
> > -
> > -> load pcap foo.pcap
> > - Loads standard tcpdump pcap file.
> > -
> > -> run [<n>]
> > -bpf passes:1 fails:9
> > - Runs through all packets from a pcap to account how many passes and fails
> > - the filter will generate. A limit of packets to traverse can be given.
> > -
> > -> disassemble
> > -l0: ldh [12]
> > -l1: jeq #0x800, l2, l5
> > -l2: ldb [23]
> > -l3: jeq #0x1, l4, l5
> > -l4: ret #0xffff
> > -l5: ret #0
> > - Prints out BPF code disassembly.
> > -
> > -> dump
> > -/* { op, jt, jf, k }, */
> > -{ 0x28, 0, 0, 0x0000000c },
> > -{ 0x15, 0, 3, 0x00000800 },
> > -{ 0x30, 0, 0, 0x00000017 },
> > -{ 0x15, 0, 1, 0x00000001 },
> > -{ 0x06, 0, 0, 0x0000ffff },
> > -{ 0x06, 0, 0, 0000000000 },
> > - Prints out C-style BPF code dump.
> > -
> > -> breakpoint 0
> > -breakpoint at: l0: ldh [12]
> > -> breakpoint 1
> > -breakpoint at: l1: jeq #0x800, l2, l5
> > - ...
> > - Sets breakpoints at particular BPF instructions. Issuing a `run` command
> > - will walk through the pcap file continuing from the current packet and
> > - break when a breakpoint is being hit (another `run` will continue from
> > - the currently active breakpoint executing next instructions):
> > -
> > - > run
> > - -- register dump --
> > - pc: [0] <-- program counter
> > - code: [40] jt[0] jf[0] k[12] <-- plain BPF code of current instruction
> > - curr: l0: ldh [12] <-- disassembly of current instruction
> > - A: [00000000][0] <-- content of A (hex, decimal)
> > - X: [00000000][0] <-- content of X (hex, decimal)
> > - M[0,15]: [00000000][0] <-- folded content of M (hex, decimal)
> > - -- packet dump -- <-- Current packet from pcap (hex)
> > - len: 42
> > - 0: 00 19 cb 55 55 a4 00 14 a4 43 78 69 08 06 00 01
> > - 16: 08 00 06 04 00 01 00 14 a4 43 78 69 0a 3b 01 26
> > - 32: 00 00 00 00 00 00 0a 3b 01 01
> > - (breakpoint)
> > - >
> > -
> > -> breakpoint
> > -breakpoints: 0 1
> > - Prints currently set breakpoints.
> > -
> > -> step [-<n>, +<n>]
> > - Performs single stepping through the BPF program from the current pc
> > - offset. Thus, on each step invocation, above register dump is issued.
> > - This can go forwards and backwards in time, a plain `step` will break
> > - on the next BPF instruction, thus +1. (No `run` needs to be issued here.)
> > -
> > -> select <n>
> > - Selects a given packet from the pcap file to continue from. Thus, on
> > - the next `run` or `step`, the BPF program is being evaluated against
> > - the user pre-selected packet. Numbering starts just as in Wireshark
> > - with index 1.
> > -
> > -> quit
> > -#
> > - Exits bpf_dbg.
> > +::
> > +
> > + > load bpf 6,40 0 0 12,21 0 3 2048,48 0 0 23,21 0 1 1,6 0 0 65535,6 0 0 0
> > + Loads a BPF filter from standard output of bpf_asm, or transformed via
> > + e.g. `tcpdump -iem1 -ddd port 22 | tr '\n' ','`. Note that for JIT
> > + debugging (next section), this command creates a temporary socket and
> > + loads the BPF code into the kernel. Thus, this will also be useful for
> > + JIT developers.
>
> Here for the bpf_dbg howto, it would be good to separate explanation from
> the cmdline code snippets. This would more easily clarify the commands
> themselves if we already go the rst route, so I'd prefer splitting this up.

Sure thing. Will do as suggested. Thanks for the review.


Tobin