1. 23 Sep, 2024 36 commits
  2. 20 Sep, 2024 4 commits
    • Chuck Lever's avatar
      xdrgen: Prevent reordering of encoder and decoder functions · 509abfc7
      Chuck Lever authored
      I noticed that "xdrgen source" reorders the procedure encoder and
      decoder functions every time it is run. I would prefer that the
      generated code be more deterministic: it enables a reader to better
      see exactly what has changed between runs of the tool.
      
      The problem is that Python sets are not ordered. I use a Python set
      to ensure that, when multiple procedures use a particular argument or
      result type, the encoder/decoder for that type is emitted only once.
      
      Sets aren't ordered, but I can use Python dictionaries for this
      purpose to ensure the procedure functions are always emitted in the
      same order if the .x file does not change.
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      509abfc7
    • Chuck Lever's avatar
      xdrgen: typedefs should use the built-in string and opaque functions · fed8a17c
      Chuck Lever authored
      'typedef opaque yada<XYZ>' should use xdrgen's built-in opaque
      encoder and decoder, to enable better compiler optimization.
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      fed8a17c
    • Chuck Lever's avatar
      xdrgen: Fix return code checking in built-in XDR decoders · 663ad8b1
      Chuck Lever authored
      xdr_stream_encode_u32() returns XDR_UNIT on success.
      xdr_stream_decode_u32() returns zero or -EMSGSIZE, but never
      XDR_UNIT.
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      663ad8b1
    • Chuck Lever's avatar
      tools: Add xdrgen · 4b132aac
      Chuck Lever authored
      Add a Python-based tool for translating XDR specifications into XDR
      encoder and decoder functions written in the Linux kernel's C coding
      style. The generator attempts to match the usual C coding style of
      the Linux kernel's SunRPC consumers.
      
      This approach is similar to the netlink code generator in
      tools/net/ynl .
      
      The maintainability benefits of machine-generated XDR code include:
      
      - Stronger type checking
      - Reduces the number of bugs introduced by human error
      - Makes the XDR code easier to audit and analyze
      - Enables rapid prototyping of new RPC-based protocols
      - Hardens the layering between protocol logic and marshaling
      - Makes it easier to add observability on demand
      - Unit tests might be built for both the tool and (automatically)
        for the generated code
      
      In addition, converting the XDR layer to use memory-safe languages
      such as Rust will be easier if much of the code can be converted
      automatically.
      Tested-by: default avatarJeff Layton <jlayton@kernel.org>
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      4b132aac