| # SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) | 
 | # | 
 | # Author: Chuck Lever <chuck.lever@oracle.com> | 
 | # | 
 | # Copyright (c) 2023, Oracle and/or its affiliates. | 
 | # | 
 |  | 
 | name: handshake | 
 |  | 
 | protocol: genetlink | 
 |  | 
 | doc: Netlink protocol to request a transport layer security handshake. | 
 |  | 
 | definitions: | 
 |   - | 
 |     type: enum | 
 |     name: handler-class | 
 |     value-start: 0 | 
 |     entries: [ none, tlshd, max ] | 
 |   - | 
 |     type: enum | 
 |     name: msg-type | 
 |     value-start: 0 | 
 |     entries: [ unspec, clienthello, serverhello ] | 
 |   - | 
 |     type: enum | 
 |     name: auth | 
 |     value-start: 0 | 
 |     entries: [ unspec, unauth, psk, x509 ] | 
 |  | 
 | attribute-sets: | 
 |   - | 
 |     name: x509 | 
 |     attributes: | 
 |       - | 
 |         name: cert | 
 |         type: s32 | 
 |       - | 
 |         name: privkey | 
 |         type: s32 | 
 |   - | 
 |     name: accept | 
 |     attributes: | 
 |       - | 
 |         name: sockfd | 
 |         type: s32 | 
 |       - | 
 |         name: handler-class | 
 |         type: u32 | 
 |         enum: handler-class | 
 |       - | 
 |         name: message-type | 
 |         type: u32 | 
 |         enum: msg-type | 
 |       - | 
 |         name: timeout | 
 |         type: u32 | 
 |       - | 
 |         name: auth-mode | 
 |         type: u32 | 
 |         enum: auth | 
 |       - | 
 |         name: peer-identity | 
 |         type: u32 | 
 |         multi-attr: true | 
 |       - | 
 |         name: certificate | 
 |         type: nest | 
 |         nested-attributes: x509 | 
 |         multi-attr: true | 
 |       - | 
 |         name: peername | 
 |         type: string | 
 |   - | 
 |     name: done | 
 |     attributes: | 
 |       - | 
 |         name: status | 
 |         type: u32 | 
 |       - | 
 |         name: sockfd | 
 |         type: s32 | 
 |       - | 
 |         name: remote-auth | 
 |         type: u32 | 
 |         multi-attr: true | 
 |  | 
 | operations: | 
 |   list: | 
 |     - | 
 |       name: ready | 
 |       doc: Notify handlers that a new handshake request is waiting | 
 |       notify: accept | 
 |     - | 
 |       name: accept | 
 |       doc: Handler retrieves next queued handshake request | 
 |       attribute-set: accept | 
 |       flags: [ admin-perm ] | 
 |       do: | 
 |         request: | 
 |           attributes: | 
 |             - handler-class | 
 |         reply: | 
 |           attributes: | 
 |             - sockfd | 
 |             - message-type | 
 |             - timeout | 
 |             - auth-mode | 
 |             - peer-identity | 
 |             - certificate | 
 |             - peername | 
 |     - | 
 |       name: done | 
 |       doc: Handler reports handshake completion | 
 |       attribute-set: done | 
 |       do: | 
 |         request: | 
 |           attributes: | 
 |             - status | 
 |             - sockfd | 
 |             - remote-auth | 
 |  | 
 | mcast-groups: | 
 |   list: | 
 |     - | 
 |       name: none | 
 |     - | 
 |       name: tlshd |