linux-headers (unknown)

(root)/
include/
linux/
nfsd/
cld.h
       1  /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
       2  /*
       3   * Upcall description for nfsdcld communication
       4   *
       5   * Copyright (c) 2012 Red Hat, Inc.
       6   * Author(s): Jeff Layton <jlayton@redhat.com>
       7   *
       8   *  This program is free software; you can redistribute it and/or modify
       9   *  it under the terms of the GNU General Public License as published by
      10   *  the Free Software Foundation; either version 2 of the License, or
      11   *  (at your option) any later version.
      12   *
      13   *  This program is distributed in the hope that it will be useful,
      14   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
      15   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      16   *  GNU General Public License for more details.
      17   *
      18   *  You should have received a copy of the GNU General Public License
      19   *  along with this program; if not, write to the Free Software
      20   *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
      21   */
      22  
      23  #ifndef _NFSD_CLD_H
      24  #define _NFSD_CLD_H
      25  
      26  #include <linux/types.h>
      27  
      28  /* latest upcall version available */
      29  #define CLD_UPCALL_VERSION 2
      30  
      31  /* defined by RFC3530 */
      32  #define NFS4_OPAQUE_LIMIT 1024
      33  
      34  #ifndef SHA256_DIGEST_SIZE
      35  #define SHA256_DIGEST_SIZE      32
      36  #endif
      37  
      38  enum cld_command {
      39  	Cld_Create,		/* create a record for this cm_id */
      40  	Cld_Remove,		/* remove record of this cm_id */
      41  	Cld_Check,		/* is this cm_id allowed? */
      42  	Cld_GraceDone,		/* grace period is complete */
      43  	Cld_GraceStart,		/* grace start (upload client records) */
      44  	Cld_GetVersion,		/* query max supported upcall version */
      45  };
      46  
      47  /* representation of long-form NFSv4 client ID */
      48  struct cld_name {
      49  	__u16		cn_len;				/* length of cm_id */
      50  	unsigned char	cn_id[NFS4_OPAQUE_LIMIT];	/* client-provided */
      51  } __attribute__((packed));
      52  
      53  /* sha256 hash of the kerberos principal */
      54  struct cld_princhash {
      55  	__u8		cp_len;				/* length of cp_data */
      56  	unsigned char	cp_data[SHA256_DIGEST_SIZE];	/* hash of principal */
      57  } __attribute__((packed));
      58  
      59  struct cld_clntinfo {
      60  	struct cld_name		cc_name;
      61  	struct cld_princhash	cc_princhash;
      62  } __attribute__((packed));
      63  
      64  /* message struct for communication with userspace */
      65  struct cld_msg {
      66  	__u8		cm_vers;		/* upcall version */
      67  	__u8		cm_cmd;			/* upcall command */
      68  	__s16		cm_status;		/* return code */
      69  	__u32		cm_xid;			/* transaction id */
      70  	union {
      71  		__s64		cm_gracetime;	/* grace period start time */
      72  		struct cld_name	cm_name;
      73  		__u8		cm_version;	/* for getting max version */
      74  	} __attribute__((packed)) cm_u;
      75  } __attribute__((packed));
      76  
      77  /* version 2 message can include hash of kerberos principal */
      78  struct cld_msg_v2 {
      79  	__u8		cm_vers;		/* upcall version */
      80  	__u8		cm_cmd;			/* upcall command */
      81  	__s16		cm_status;		/* return code */
      82  	__u32		cm_xid;			/* transaction id */
      83  	union {
      84  		struct cld_name	cm_name;
      85  		__u8		cm_version;	/* for getting max version */
      86  		struct cld_clntinfo cm_clntinfo; /* name & princ hash */
      87  	} __attribute__((packed)) cm_u;
      88  } __attribute__((packed));
      89  
      90  struct cld_msg_hdr {
      91  	__u8		cm_vers;		/* upcall version */
      92  	__u8		cm_cmd;			/* upcall command */
      93  	__s16		cm_status;		/* return code */
      94  	__u32		cm_xid;			/* transaction id */
      95  } __attribute__((packed));
      96  
      97  #endif /* !_NFSD_CLD_H */