klm_prot.x
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:3k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* @(#)klm_prot.x 2.1 88/08/01 4.0 RPCSRC */
  2. /* @(#)klm_prot.x 1.7 87/07/08 Copyr 1987 Sun Micro */
  3. /*
  4.  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
  5.  * unrestricted use provided that this legend is included on all tape
  6.  * media and as a part of the software program in whole or part.  Users
  7.  * may copy or modify Sun RPC without charge, but are not authorized
  8.  * to license or distribute it to anyone else except as part of a product or
  9.  * program developed by the user.
  10.  * 
  11.  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
  12.  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  13.  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
  14.  * 
  15.  * Sun RPC is provided with no support and without any obligation on the
  16.  * part of Sun Microsystems, Inc. to assist in its use, correction,
  17.  * modification or enhancement.
  18.  * 
  19.  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  20.  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
  21.  * OR ANY PART THEREOF.
  22.  * 
  23.  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
  24.  * or profits or other special, indirect and consequential damages, even if
  25.  * Sun has been advised of the possibility of such damages.
  26.  * 
  27.  * Sun Microsystems, Inc.
  28.  * 2550 Garcia Avenue
  29.  * Mountain View, California  94043
  30.  */
  31. /*
  32.  * Kernel/lock manager protocol definition
  33.  * Copyright (C) 1986 Sun Microsystems, Inc.
  34.  *
  35.  * protocol used between the UNIX kernel (the "client") and the
  36.  * local lock manager.  The local lock manager is a deamon running
  37.  * above the kernel.
  38.  */
  39. const LM_MAXSTRLEN = 1024;
  40. /*
  41.  * lock manager status returns
  42.  */
  43. enum klm_stats {
  44. klm_granted = 0, /* lock is granted */
  45. klm_denied = 1, /* lock is denied */
  46. klm_denied_nolocks = 2, /* no lock entry available */
  47. klm_working = 3  /* lock is being processed */
  48. };
  49. /*
  50.  * lock manager lock identifier
  51.  */
  52. struct klm_lock {
  53. string server_name<LM_MAXSTRLEN>;
  54. netobj fh; /* a counted file handle */
  55. int pid; /* holder of the lock */
  56. unsigned l_offset; /* beginning offset of the lock */
  57. unsigned l_len; /* byte length of the lock;
  58.  * zero means through end of file */
  59. };
  60. /*
  61.  * lock holder identifier
  62.  */
  63. struct klm_holder {
  64. bool exclusive; /* FALSE if shared lock */
  65. int svid; /* holder of the lock (pid) */
  66. unsigned l_offset; /* beginning offset of the lock */
  67. unsigned l_len; /* byte length of the lock;
  68.  * zero means through end of file */
  69. };
  70. /*
  71.  * reply to KLM_LOCK / KLM_UNLOCK / KLM_CANCEL
  72.  */
  73. struct klm_stat {
  74. klm_stats stat;
  75. };
  76. /*
  77.  * reply to a KLM_TEST call
  78.  */
  79. union klm_testrply switch (klm_stats stat) {
  80. case klm_denied:
  81. struct klm_holder holder;
  82. default: /* All other cases return no arguments */
  83. void;
  84. };
  85. /*
  86.  * arguments to KLM_LOCK
  87.  */
  88. struct klm_lockargs {
  89. bool block;
  90. bool exclusive;
  91. struct klm_lock alock;
  92. };
  93. /*
  94.  * arguments to KLM_TEST
  95.  */
  96. struct klm_testargs {
  97. bool exclusive;
  98. struct klm_lock alock;
  99. };
  100. /*
  101.  * arguments to KLM_UNLOCK
  102.  */
  103. struct klm_unlockargs {
  104. struct klm_lock alock;
  105. };
  106. program KLM_PROG {
  107. version KLM_VERS {
  108. klm_testrply KLM_TEST (struct klm_testargs) = 1;
  109. klm_stat KLM_LOCK (struct klm_lockargs) = 2;
  110. klm_stat KLM_CANCEL (struct klm_lockargs) = 3;
  111. /* klm_granted=> the cancel request fails due to lock is already granted */
  112. /* klm_denied=> the cancel request successfully aborts
  113. lock request  */
  114. klm_stat KLM_UNLOCK (struct klm_unlockargs) = 4;
  115. } = 1;
  116. } = 100020;