David came up with a proof-of-concept patch in the dccp at vger dot kernel dot org mailing list, mostly with what I was planning to do anyway, so I took from there and now there are 6 changesets doing this work waiting for review/merging at my latest tree.
UDP needs more thinking on how to properly make it use inet_diag, perhaps by passing the lookup function pointer in struct inet_diag_handler and marking this struct as handling non inet_connection_sock sockets so that it doesn’t try to mess with non existing fields of the cast passed udp_hashinfo, that would really be just a struct inet_ehash_bucket modified to have the ehash_size moved from inet_hashtables to it.