[{"data":1,"prerenderedAt":30},["ShallowReactive",2],{"project-libdiginet-probe":3},{"page":4,"others":20},{"slug":5,"src":6,"title":7,"source":8,"toc":9,"html":19},"probe","docs\u002Fprobe.md","diginet-probe: the first test on a real desk","https:\u002F\u002Fgithub.com\u002FFreeMixer\u002Flibdiginet\u002Fblob\u002F084e09f8eaea72a275f583b8ae148b565aa6a548\u002Fdocs\u002Fprobe.md",[10,13,16],{"id":11,"title":12},"before-the-probe-a-passive-capture-m0","Before the probe: a passive capture (M0)",{"id":14,"title":15},"running-it-m1","Running it (M1)",{"id":17,"title":18},"every-interface-with-no-capability-any","Every interface, with no capability (`--any`)","\u003Ch1 id=\"diginet-probe-the-first-test-on-a-real-desk\">diginet-probe: the first test on a real desk\u003C\u002Fh1>\n\u003Cp>\u003Ccode>diginet-probe\u003C\u002Fcode> wakes a Control|24 or ProControl, drives a few controls, logs everything the\ndesk sends, and prints what it found. It is built on libdiginet and its transport and needs\none capability, \u003Ccode>cap_net_raw\u003C\u002Fcode>, to open the packet socket. Nothing else on the machine is\ninvolved: no mixer, no DAW.\u003C\u002Fp>\n\u003Ch2 id=\"before-the-probe-a-passive-capture-m0\">Before the probe: a passive capture (M0)\u003C\u002Fh2>\n\u003Cp>Cable the desk to a NIC of its own (directly, or through a 10\u002F100 switch; never a network\nthat carries anything else), power it on, and record two minutes without sending anything:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>cat \u002Fsys\u002Fclass\u002Fnet\u002F&lt;if&gt;\u002Fspeed \u002Fsys\u002Fclass\u002Fnet\u002F&lt;if&gt;\u002Fduplex\nsudo tcpdump -i &lt;if&gt; -w c24-boot.pcap 'ether proto 0x885f'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Expected: \u003Ccode>e0\u003C\u002Fcode> frames from \u003Ccode>00:a0:7e:…\u003C\u002Fcode>, length 50, the name \u003Ccode>CNTRL|24\u003C\u002Fcode> and a version, about\n7 s apart.\u003C\u002Fp>\n\u003Ch2 id=\"running-it-m1\">Running it (M1)\u003C\u002Fh2>\n\u003Cpre>\u003Ccode>make\nsudo setcap cap_net_raw=ep .\u002Ftools\u002Fdiginet-probe\n.\u002Ftools\u002Fdiginet-probe -i &lt;if&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Run \u003Ccode>tcpdump\u003C\u002Fcode> beside it to keep a capture of the whole session. The probe:\u003C\u002Fp>\n\u003Col>\n\u003Cli>waits for the desk's \u003Ccode>e0\u003C\u002Fcode> announce and prints its MAC, name, version and personality;\nif the desk is in a session with another host (\u003Ccode>e1\u003C\u002Fcode> naming another MAC) it stops there;\u003C\u002Fli>\n\u003Cli>sends \u003Ccode>e2\u003C\u002Fcode>;\u003C\u002Fli>\n\u003Cli>requires an \u003Ccode>a0\u003C\u002Fcode> and then an \u003Ccode>e1\u003C\u002Fcode> naming this host, and prints where the host MAC sits\nin the \u003Ccode>e1\u003C\u002Fcode> body;\u003C\u002Fli>\n\u003Cli>keeps the session alive every 10 s (\u003Ccode>--keepalive\u003C\u002Fcode>);\u003C\u002Fli>\n\u003Cli>moves fader 1 to mid-travel (\u003Ccode>B0 00 40 20 00\u003C\u002Fcode>) and says whether the desk ACKed it;\u003C\u002Fli>\n\u003Cli>lights strip 1 MUTE (\u003Ccode>90 08 40\u003C\u002Fcode>), then turns it off;\u003C\u002Fli>\n\u003Cli>writes \u003Ccode>OMX1\u003C\u002Fcode> to strip 1's scribble at address \u003Ccode>0x00\u003C\u002Fcode>, asks what the desk shows (type a\nword and Enter), then writes it at \u003Ccode>0x20\u003C\u002Fcode> and asks again;\u003C\u002Fli>\n\u003Cli>logs and decodes every command from the desk for 60 s (\u003Ccode>--listen\u003C\u002Fcode>): press keys, touch\nand move fader 1, turn V-Pot 1 and the jog wheel;\u003C\u002Fli>\n\u003Cli>sends \u003Ccode>e3\u003C\u002Fcode> on exit (also on Ctrl-C).\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>It ends with a summary, one line per open question it can answer.\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Option\u003C\u002Fth>\n\u003Cth>What it is for\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>-i &lt;if&gt;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The interface the desk is cabled to\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--checksum zero|sum\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The header sum of our frames (R3). \u003Ccode>sum\u003C\u002Fcode> is the default; if the fader frame is not ACKed, run again with \u003Ccode>zero\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--keepalive &lt;s&gt;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The keepalive interval (R5). Stretch it 10 → 20 → 40 and watch for the desk falling back to \u003Ccode>e0\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--touch-test\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>R4: commands fader 1 to 25 %, then asks you to grab the cap, move it, and let go; it sends no echo and reports what the fader did while held and after release\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--listen &lt;s&gt;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>How long step 8 lasts (60 s)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--desk &lt;mac&gt;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Talk only to this desk\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--fd &lt;n&gt; --mac &lt;mac&gt;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Use an already open descriptor instead of \u003Ccode>-i\u003C\u002Fcode> (a launcher that holds the capability, or the test suite)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--any\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Every interface at once, in place of \u003Ccode>-i\u003C\u002Fcode>: one socket bound to no interface, the steps run with the first desk that appears (or \u003Ccode>--desk\u003C\u002Fcode>), from the MAC of its interface. Every desk that appears or goes is logged with its interface. Without \u003Ccode>cap_net_raw\u003C\u002Fcode> the socket comes from \u003Ccode>diginet-packet-helper\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>--helper &lt;path&gt;\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>With \u003Ccode>--any\u003C\u002Fcode>, always take the socket from this helper\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Exit status: 0 when every step was acknowledged; 2 for a usage error; 3 when the desk is in\nanother host's session; 4 when no desk answered; 5 when the desk did not ACK our data.\u003C\u002Fp>\n\u003Cp>\u003Ccode>setcap\u003C\u002Fcode> has to be repeated after every rebuild: a new binary carries no capability.\u003C\u002Fp>\n\u003Ch2 id=\"every-interface-with-no-capability-any\">Every interface, with no capability (\u003Ccode>--any\u003C\u002Fcode>)\u003C\u002Fh2>\n\u003Cp>\u003Ccode>diginet-probe --any\u003C\u002Fcode> needs no interface name. It opens one packet socket bound to no\ninterface, so it hears a desk on any NIC, a NIC plugged in after it started included, and talks\nto the desk from the MAC of the interface the desk appeared on. Where the probe holds no\n\u003Ccode>cap_net_raw\u003C\u002Fcode>, the socket comes from \u003Ccode>diginet-packet-helper\u003C\u002Fcode> (installed with that capability by\nthe packages, or \u003Ccode>sudo setcap cap_net_raw=ep .\u002Ftools\u002Fdiginet-packet-helper\u003C\u002Fcode> in the tree), and\nthe probe says so:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>.\u002Ftools\u002Fdiginet-probe --any --helper .\u002Ftools\u002Fdiginet-packet-helper --listen 60\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>It logs \u003Ccode>desk &lt;mac&gt; appeared on &lt;if&gt;\u003C\u002Fcode> for every desk it hears and \u003Ccode>desk &lt;mac&gt; gone from &lt;if&gt;\u003C\u002Fcode>\nwhen one falls silent for 30 s, and ends with \u003Ccode>SUMMARY any interface: desks appeared on ...\u003C\u002Fcode>.\nTo see that an interface added later is heard: start the probe with the desk unplugged, plug\nin the USB NIC, then cable the desk to it; the desk appears on the new interface.\u003C\u002Fp>\n\u003Cp>Which interface the desk is on is the probe's to report, not to choose: the socket hears\nEtherType 0x885F on every interface, a REAC link included.\u003C\u002Fp>\n",[21,24,27],{"slug":22,"title":23},"","libdiginet",{"slug":25,"title":26},"building","Building libdiginet",{"slug":28,"title":29},"protocol","The DigiNet surface protocol (Control|24, ProControl)",1793954996798]