README.md in packet_via_dmem-0.0.0 vs README.md in packet_via_dmem-0.0.1

- old
+ new

@@ -1,16 +1,19 @@ # Packet Via DMEM Finds junos packet-via-dmem packets from arbitrary output and generates text2pcap compatible output ## JunOS +To capture say packets with IP address 10.11.12.13 + % ssh test2nqe31.dk|tee output.txt fisakytt@test2nqe31-re1.dk> start shell pfe network afeb0 AFEB platform (1000Mhz QorIQ P2020 processor, 2048MB memory, 512KB flash) MX104-ABB-0(test2nqe31-re1.dk vty)# test jnh 0 packet-via-dmem enable - MX104-ABB-0(test2nqe31-re1.dk vty)# test jnh 0 packet-via-dmem 0x3 0xaabbcc - MX104-ABB-0(test2nqe31-re1.dk vty)# test jnh 0 packet-via-dmem 0x0 + MX104-ABB-0(test2nqe31-re1.dk vty)# test jnh 0 packet-via-dmem capture 0x3 0x0a0b0c0d + MX104-ABB-0(test2nqe31-re1.dk vty)# test jnh 0 packet-via-dmem capture 0x0 + MX104-ABB-0(test2nqe31-re1.dk vty)# test jnh 0 packet-via-dmem dump MX104-ABB-0(test2nqe31-re1.dk vty)# test jnh 0 packet-via-dmem disable ## CLI % ./bin/packet-via-dmem -s 1 ~/output.txt|wc -l @@ -63,8 +66,74 @@ ## Library require 'packet_via_dmem' dmem = PacketViaDMEM.new puts dmem.parse File.read(ARGF[0]) + +## Header format +Potentially first is type + * 00 ?? ?? ?? source ?? + * 10 ?? ?? ?? ?? ?? source ?? + +Example receive headers, MX480 + 00 0b 40 60 41 08 + 00 01 c0 70 81 08 + 00 02 40 70 81 08 + 00 02 c0 70 81 08 + 10 03 40 70 05 40 81 08 + 00 03 c0 70 81 08 + 00 06 40 70 81 08 + 00 07 c0 70 81 08 + 00 08 47 f0 20 00 + 00 09 45 f0 20 00 + 00 09 c7 f0 80 00 + 00 0b c0 70 81 08 + 10 0c 08 00 02 00 1f 00 + 00 00 c0 70 81 08 + 00 01 47 f0 80 00 + 00 04 40 60 41 08 + 10 04 c0 70 01 50 81 08 + 00 05 40 70 81 08 + 00 05 c0 70 81 08 + 00 06 c5 f0 20 00 + 10 07 08 00 02 00 1f 00 + 00 08 c0 70 81 08 + 00 0a 40 70 81 08 + 00 0a c0 70 81 08 + 00 0b 47 f0 20 00 + 00 01 c0 70 81 08 + 00 02 40 60 41 08 + 00 07 c7 f0 b0 80 + +Example receive headers, MX80 + 00 08 00 f0 81 08 + 10 08 80 f0 05 b4 81 08 + 10 09 00 f0 05 b4 81 08 + 10 09 80 f0 05 b4 81 08 + 00 0a 00 f0 92 08 + 10 0a 80 f0 05 b4 81 08 + 10 03 00 f0 05 b4 81 08 + 00 04 00 f0 81 08 + 10 04 80 f0 05 b4 81 08 + 10 05 00 f0 05 b4 81 08 + 10 05 80 f0 05 b4 81 08 + 00 06 00 f0 81 08 + 10 06 80 f0 05 b4 81 08 + 00 07 00 f0 80 08 + 10 07 80 f0 05 b4 81 08 + 10 0b 00 f0 02 28 81 08 + +TAZ-TBB-0(X vty)# show ixchip ifd + + IFD IFD IX WAN Ing Queue Egr Queue + Index Name Id Port Rt/Ct/Be H/L + ====== ========== ====== ====== ============== ====== + 148 ge-1/0/0 2 0 0/32/64 0/32 + 149 ge-1/0/1 2 1 1/33/65 1/33 + 166 ge-1/1/8 2 18 18/50/82 18/50 + +For this box, second to last byte, divmod 64, returns these ports, which are +correct port for source. + ## Todo 1. correctly discover how many bytes need to be popped, perhaps by finding valid ethernet headers and ignore anything before? - 1. reverse engineer header/cookie, at least figuring out which egress NPU is going to be used should be trivial + 1. reverse engineer header/cookie, at least figuring out which fabric stream (And hence egress NPU) is going to be used should be trivial