home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / ncp_fs.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  6.6 KB  |  272 lines

  1. /*
  2.  *  ncp_fs.h
  3.  *
  4.  *  Copyright (C) 1995, 1996 by Volker Lendecke
  5.  *
  6.  */
  7.  
  8. #ifndef _LINUX_NCP_FS_H
  9. #define _LINUX_NCP_FS_H
  10.  
  11. #include <linux/fs.h>
  12. #include <linux/in.h>
  13. #include <linux/types.h>
  14.  
  15. #include <linux/ipx.h>
  16. #include <linux/ncp_no.h>
  17.  
  18. /*
  19.  * ioctl commands
  20.  */
  21.  
  22. struct ncp_ioctl_request {
  23.     unsigned int function;
  24.     unsigned int size;
  25.     char __user *data;
  26. };
  27.  
  28. struct ncp_fs_info {
  29.     int version;
  30.     struct sockaddr_ipx addr;
  31.     __kernel_uid_t mounted_uid;
  32.     int connection;        /* Connection number the server assigned us */
  33.     int buffer_size;    /* The negotiated buffer size, to be
  34.                    used for read/write requests! */
  35.  
  36.     int volume_number;
  37.     __le32 directory_id;
  38. };
  39.  
  40. struct ncp_fs_info_v2 {
  41.     int version;
  42.     unsigned long mounted_uid;
  43.     unsigned int connection;
  44.     unsigned int buffer_size;
  45.  
  46.     unsigned int volume_number;
  47.     __le32 directory_id;
  48.  
  49.     __u32 dummy1;
  50.     __u32 dummy2;
  51.     __u32 dummy3;
  52. };
  53.  
  54. struct ncp_sign_init
  55. {
  56.     char sign_root[8];
  57.     char sign_last[16];
  58. };
  59.  
  60. struct ncp_lock_ioctl
  61. {
  62. #define NCP_LOCK_LOG    0
  63. #define NCP_LOCK_SH    1
  64. #define NCP_LOCK_EX    2
  65. #define NCP_LOCK_CLEAR    256
  66.     int        cmd;
  67.     int        origin;
  68.     unsigned int    offset;
  69.     unsigned int    length;
  70. #define NCP_LOCK_DEFAULT_TIMEOUT    18
  71. #define NCP_LOCK_MAX_TIMEOUT        180
  72.     int        timeout;
  73. };
  74.  
  75. struct ncp_setroot_ioctl
  76. {
  77.     int        volNumber;
  78.     int        namespace;
  79.     __le32        dirEntNum;
  80. };
  81.  
  82. struct ncp_objectname_ioctl
  83. {
  84. #define NCP_AUTH_NONE    0x00
  85. #define NCP_AUTH_BIND    0x31
  86. #define NCP_AUTH_NDS    0x32
  87.     int        auth_type;
  88.     size_t        object_name_len;
  89.     void __user *    object_name;    /* an userspace data, in most cases user name */
  90. };
  91.  
  92. struct ncp_privatedata_ioctl
  93. {
  94.     size_t        len;
  95.     void __user *    data;        /* ~1000 for NDS */
  96. };
  97.  
  98. /* NLS charsets by ioctl */
  99. #define NCP_IOCSNAME_LEN 20
  100. struct ncp_nls_ioctl
  101. {
  102.     unsigned char codepage[NCP_IOCSNAME_LEN+1];
  103.     unsigned char iocharset[NCP_IOCSNAME_LEN+1];
  104. };
  105.  
  106. #define    NCP_IOC_NCPREQUEST        _IOR('n', 1, struct ncp_ioctl_request)
  107. #define    NCP_IOC_GETMOUNTUID        _IOW('n', 2, __kernel_old_uid_t)
  108. #define NCP_IOC_GETMOUNTUID2        _IOW('n', 2, unsigned long)
  109.  
  110. #define NCP_IOC_CONN_LOGGED_IN          _IO('n', 3)
  111.  
  112. #define NCP_GET_FS_INFO_VERSION    (1)
  113. #define NCP_IOC_GET_FS_INFO             _IOWR('n', 4, struct ncp_fs_info)
  114. #define NCP_GET_FS_INFO_VERSION_V2 (2)
  115. #define NCP_IOC_GET_FS_INFO_V2        _IOWR('n', 4, struct ncp_fs_info_v2)
  116.  
  117. #define NCP_IOC_SIGN_INIT        _IOR('n', 5, struct ncp_sign_init)
  118. #define NCP_IOC_SIGN_WANTED        _IOR('n', 6, int)
  119. #define NCP_IOC_SET_SIGN_WANTED        _IOW('n', 6, int)
  120.  
  121. #define NCP_IOC_LOCKUNLOCK        _IOR('n', 7, struct ncp_lock_ioctl)
  122.  
  123. #define NCP_IOC_GETROOT            _IOW('n', 8, struct ncp_setroot_ioctl)
  124. #define NCP_IOC_SETROOT            _IOR('n', 8, struct ncp_setroot_ioctl)
  125.  
  126. #define NCP_IOC_GETOBJECTNAME        _IOWR('n', 9, struct ncp_objectname_ioctl)
  127. #define NCP_IOC_SETOBJECTNAME        _IOR('n', 9, struct ncp_objectname_ioctl)
  128. #define NCP_IOC_GETPRIVATEDATA        _IOWR('n', 10, struct ncp_privatedata_ioctl)
  129. #define NCP_IOC_SETPRIVATEDATA        _IOR('n', 10, struct ncp_privatedata_ioctl)
  130.  
  131. #define NCP_IOC_GETCHARSETS        _IOWR('n', 11, struct ncp_nls_ioctl)
  132. #define NCP_IOC_SETCHARSETS        _IOR('n', 11, struct ncp_nls_ioctl)
  133.  
  134. #define NCP_IOC_GETDENTRYTTL        _IOW('n', 12, __u32)
  135. #define NCP_IOC_SETDENTRYTTL        _IOR('n', 12, __u32)
  136.  
  137. /*
  138.  * The packet size to allocate. One page should be enough.
  139.  */
  140. #define NCP_PACKET_SIZE 4070
  141.  
  142. #define NCP_MAXPATHLEN 255
  143. #define NCP_MAXNAMELEN 14
  144.  
  145. #ifdef __KERNEL__
  146.  
  147. #include <linux/ncp_fs_i.h>
  148. #include <linux/ncp_fs_sb.h>
  149.  
  150. /* undef because public define in umsdos_fs.h (ncp_fs.h isn't public) */
  151. #undef PRINTK
  152. /* define because it is easy to change PRINTK to {*}PRINTK */
  153. #define PRINTK(format, args...) printk(KERN_DEBUG format , ## args)
  154.  
  155. #undef NCPFS_PARANOIA
  156. #ifdef NCPFS_PARANOIA
  157. #define PPRINTK(format, args...) PRINTK(format , ## args)
  158. #else
  159. #define PPRINTK(format, args...)
  160. #endif
  161.  
  162. #ifndef DEBUG_NCP
  163. #define DEBUG_NCP 0
  164. #endif
  165. #if DEBUG_NCP > 0
  166. #define DPRINTK(format, args...) PRINTK(format , ## args)
  167. #else
  168. #define DPRINTK(format, args...)
  169. #endif
  170. #if DEBUG_NCP > 1
  171. #define DDPRINTK(format, args...) PRINTK(format , ## args)
  172. #else
  173. #define DDPRINTK(format, args...)
  174. #endif
  175.  
  176. #define NCP_MAX_RPC_TIMEOUT (6*HZ)
  177.  
  178.  
  179. struct ncp_entry_info {
  180.     struct nw_info_struct    i;
  181.     ino_t            ino;
  182.     int            opened;
  183.     int            access;
  184.     unsigned int        volume;
  185.     __u8            file_handle[6];
  186. };
  187.  
  188. /* Guess, what 0x564c is :-) */
  189. #define NCP_SUPER_MAGIC  0x564c
  190.  
  191.  
  192. static inline struct ncp_server *NCP_SBP(struct super_block *sb)
  193. {
  194.     return sb->s_fs_info;
  195. }
  196.  
  197. #define NCP_SERVER(inode)    NCP_SBP((inode)->i_sb)
  198. static inline struct ncp_inode_info *NCP_FINFO(struct inode *inode)
  199. {
  200.     return container_of(inode, struct ncp_inode_info, vfs_inode);
  201. }
  202.  
  203. /* linux/fs/ncpfs/inode.c */
  204. int ncp_notify_change(struct dentry *, struct iattr *);
  205. struct inode *ncp_iget(struct super_block *, struct ncp_entry_info *);
  206. void ncp_update_inode(struct inode *, struct ncp_entry_info *);
  207. void ncp_update_inode2(struct inode *, struct ncp_entry_info *);
  208.  
  209. /* linux/fs/ncpfs/dir.c */
  210. extern struct inode_operations ncp_dir_inode_operations;
  211. extern const struct file_operations ncp_dir_operations;
  212. int ncp_conn_logged_in(struct super_block *);
  213. int ncp_date_dos2unix(__le16 time, __le16 date);
  214. void ncp_date_unix2dos(int unix_date, __le16 * time, __le16 * date);
  215.  
  216. /* linux/fs/ncpfs/ioctl.c */
  217. int ncp_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
  218.  
  219. /* linux/fs/ncpfs/sock.c */
  220. int ncp_request2(struct ncp_server *server, int function,
  221.     void* reply, int max_reply_size);
  222. static inline int ncp_request(struct ncp_server *server, int function) {
  223.     return ncp_request2(server, function, server->packet, server->packet_size);
  224. }
  225. int ncp_connect(struct ncp_server *server);
  226. int ncp_disconnect(struct ncp_server *server);
  227. void ncp_lock_server(struct ncp_server *server);
  228. void ncp_unlock_server(struct ncp_server *server);
  229.  
  230. /* linux/fs/ncpfs/file.c */
  231. extern struct inode_operations ncp_file_inode_operations;
  232. extern const struct file_operations ncp_file_operations;
  233. int ncp_make_open(struct inode *, int);
  234.  
  235. /* linux/fs/ncpfs/mmap.c */
  236. int ncp_mmap(struct file *, struct vm_area_struct *);
  237.  
  238. /* linux/fs/ncpfs/ncplib_kernel.c */
  239. int ncp_make_closed(struct inode *);
  240.  
  241. #define ncp_namespace(i)    (NCP_SERVER(i)->name_space[NCP_FINFO(i)->volNumber])
  242.  
  243. static inline int ncp_preserve_entry_case(struct inode *i, __u32 nscreator)
  244. {
  245. #ifdef CONFIG_NCPFS_SMALLDOS
  246.     int ns = ncp_namespace(i);
  247.  
  248.     if ((ns == NW_NS_DOS)
  249. #ifdef CONFIG_NCPFS_OS2_NS
  250.         || ((ns == NW_NS_OS2) && (nscreator == NW_NS_DOS))
  251. #endif /* CONFIG_NCPFS_OS2_NS */
  252.                 )
  253.         return 0;
  254. #endif /* CONFIG_NCPFS_SMALLDOS */
  255.     return 1;
  256. }
  257.  
  258. #define ncp_preserve_case(i)    (ncp_namespace(i) != NW_NS_DOS)
  259.  
  260. static inline int ncp_case_sensitive(struct inode *i)
  261. {
  262. #ifdef CONFIG_NCPFS_NFS_NS
  263.     return ncp_namespace(i) == NW_NS_NFS;
  264. #else
  265.     return 0;
  266. #endif    /* CONFIG_NCPFS_NFS_NS */
  267.  
  268. #endif                /* __KERNEL__ */
  269.  
  270. #endif                /* _LINUX_NCP_FS_H */
  271.