Hi, Behaviour for certain actions needs discussion and the behaviour crosses over with the work on bgpctl. A command such as bgpctl -j log brief currently results in a return such as:
“ Logging request sent. { } " I think this behaviour would be common to anything which effectively does a fire and forget. We could either remove the json output by doing something like (but not!): if(!done) { //output head //output tail } This would stop a json response altogether. Alternatively we could update the code to return something like: “{ response: “Logging request sent” } Finally we could just error if you call one of those methods with a -j flag? Just hit the same pattern/issue on ospfctl, so looking to source some direction. Using openbsd, there has always felt like lots of synergy between cli interfaces, so just hoping to help continue that :) Cheers Richard > On 11 May 2020, at 13:52, Claudio Jeker <cje...@diehard.n-r-g.com> wrote: > > On Mon, May 11, 2020 at 12:38:38PM +0100, Richard Chivers wrote: >> Hi, >> >> I have done some work over the last few days to implement json support >> into ospfctl following the work done recently in bgpctl. >> >> I have some queries, hoping to get some help with. >> >> The change involves a refactor of ospfctl, but reuses the recent >> json.c written by Claudio, that is in the >> usr.sbin/bgpctl directory. At present no changes have been required at all. >> What is the best approach here, should/could this be centralised somewhere? > > At the moment just copy the files into ospfctl. We did the same thing with > other bits in the tree. My json API is super minimal and is for sure not > something that should be put into a common framework right now. The way > objects and arrays are opened and closed is a bit rough and does not > always work well. > >> In some cases there is room for change, for example ospfctl sh rib & >> ospfctl sh rib detail. >> >> In my view here, it makes sense to have a full list returned rather >> than splitting json into multiple lists of Router, Network and >> External. >> I looked for inspiration in the bgpctl, but couldn't find a similar >> pattern. The reason for a single list is that if consuming the json, >> I expect you will not want code that has to iterate over three >> separate arrays. Just looking for some feedback really. The original >> split >> made sense for screen use, just not so sure about machine readability. >> This issue also applies to ospfctl sh data, which returns 3 lists. > > A lot of this is depending on the imsgs used between ospfctl and ospfd. > IIRC ospfd sends all data in one batch so the multiple lists just happen > by ospfctl and indeed for json output it would be best to display the rib > as a single array of entries (which have a similar structure but probably > per LSA specific attributes). > >> When I am finished, should I just post the diff on here? Just >> conscious it is quite a big refactor, albeit much of the code is >> reused just moved into output.c as >> was done for bgpctl. > > Please split it up like I did it for bgpctl. I first did a lot of the > moving and cleanup and only later added the new input mode. This makes the > individual steps smaller to review. > >> I am testing each call individually against a set of openbsd 6.6 boxes >> we have running, which is great for ospfd. What is the normal >> practise for ospf6, is there a script run to replicate code changes or >> is it just a case of making very similar changes line by line? > > There is no script, you do it by hand it is quicker. > >> Just looking for the general thinking and approach I guess. I don't >> currently have ospf6 set-up so that would be some overhead. >> Happy to configure it though if needed/expected. > > Get ospfctl first, after that ospf6ctl can be done (and maybe somebody > else will take care of that). > >> Finally what was the driver under bgpctl for the json output, ours is >> for reading metrics to populate telemetry, just interested as the >> purpose other >> people have. Having this context will help in micro decisions when >> implementing the json structure. > > I'm doing this work to provide JSON payloads to external looking glasses. > I would not put the RIB into telemetry (that is just useless churn and > load on the telemetry system). In bgpctl the terse outputs are simple > space separated outputs for telemetry scripting but I guess people will > also use the JSON output for this. > >> As a final thought is this something that is actually wanted >> generally, I assumed it was as bgpctl has gone/is going in that >> direction, but just don't want to assume. > > I see no reason why not. At least I wont veto it. > > -- > :wq Claudio