linux/fs/ncpfs/ncp_fs_sb.h
<<
>>
Prefs
   1/*
   2 *  ncp_fs_sb.h
   3 *
   4 *  Copyright (C) 1995, 1996 by Volker Lendecke
   5 *
   6 */
   7
   8#ifndef _NCP_FS_SB
   9#define _NCP_FS_SB
  10
  11#include <linux/types.h>
  12#include <linux/ncp_mount.h>
  13#include <linux/net.h>
  14#include <linux/mutex.h>
  15#include <linux/backing-dev.h>
  16#include <linux/workqueue.h>
  17
  18#define NCP_DEFAULT_OPTIONS 0           /* 2 for packet signatures */
  19
  20struct sock;
  21
  22struct ncp_mount_data_kernel {
  23        unsigned long    flags;         /* NCP_MOUNT_* flags */
  24        unsigned int     int_flags;     /* internal flags */
  25#define NCP_IMOUNT_LOGGEDIN_POSSIBLE    0x0001
  26        __kernel_uid32_t mounted_uid;   /* Who may umount() this filesystem? */
  27        struct pid      *wdog_pid;      /* Who cares for our watchdog packets? */
  28        unsigned int     ncp_fd;        /* The socket to the ncp port */
  29        unsigned int     time_out;      /* How long should I wait after
  30                                           sending a NCP request? */
  31        unsigned int     retry_count;   /* And how often should I retry? */
  32        unsigned char    mounted_vol[NCP_VOLNAME_LEN + 1];
  33        __kernel_uid32_t uid;
  34        __kernel_gid32_t gid;
  35        __kernel_mode_t  file_mode;
  36        __kernel_mode_t  dir_mode;
  37        int              info_fd;
  38};
  39
  40struct ncp_server {
  41
  42        struct ncp_mount_data_kernel m; /* Nearly all of the mount data is of
  43                                           interest for us later, so we store
  44                                           it completely. */
  45
  46        __u8 name_space[NCP_NUMBER_OF_VOLUMES + 2];
  47
  48        struct file *ncp_filp;  /* File pointer to ncp socket */
  49        struct socket *ncp_sock;/* ncp socket */
  50        struct file *info_filp;
  51        struct socket *info_sock;
  52
  53        u8 sequence;
  54        u8 task;
  55        u16 connection;         /* Remote connection number */
  56
  57        u8 completion;          /* Status message from server */
  58        u8 conn_status;         /* Bit 4 = 1 ==> Server going down, no
  59                                   requests allowed anymore.
  60                                   Bit 0 = 1 ==> Server is down. */
  61
  62        int buffer_size;        /* Negotiated bufsize */
  63
  64        int reply_size;         /* Size of last reply */
  65
  66        int packet_size;
  67        unsigned char *packet;  /* Here we prepare requests and
  68                                   receive replies */
  69        unsigned char *txbuf;   /* Storage for current request */
  70        unsigned char *rxbuf;   /* Storage for reply to current request */
  71
  72        int lock;               /* To prevent mismatch in protocols. */
  73        struct mutex mutex;
  74
  75        int current_size;       /* for packet preparation */
  76        int has_subfunction;
  77        int ncp_reply_size;
  78
  79        int root_setuped;
  80        struct mutex root_setup_lock;
  81
  82        /* info for packet signing */
  83        int sign_wanted;        /* 1=Server needs signed packets */
  84        int sign_active;        /* 0=don't do signing, 1=do */
  85        char sign_root[8];      /* generated from password and encr. key */
  86        char sign_last[16];     
  87
  88        /* Authentication info: NDS or BINDERY, username */
  89        struct {
  90                int     auth_type;
  91                size_t  object_name_len;
  92                void*   object_name;
  93                int     object_type;
  94        } auth;
  95        /* Password info */
  96        struct {
  97                size_t  len;
  98                void*   data;
  99        } priv;
 100        struct rw_semaphore auth_rwsem;
 101
 102        /* nls info: codepage for volume and charset for I/O */
 103        struct nls_table *nls_vol;
 104        struct nls_table *nls_io;
 105
 106        /* maximum age in jiffies */
 107        atomic_t dentry_ttl;
 108
 109        /* miscellaneous */
 110        unsigned int flags;
 111
 112        spinlock_t requests_lock;       /* Lock accesses to tx.requests, tx.creq and rcv.creq when STREAM mode */
 113
 114        void (*data_ready)(struct sock* sk, int len);
 115        void (*error_report)(struct sock* sk);
 116        void (*write_space)(struct sock* sk);   /* STREAM mode only */
 117        struct {
 118                struct work_struct tq;          /* STREAM/DGRAM: data/error ready */
 119                struct ncp_request_reply* creq; /* STREAM/DGRAM: awaiting reply from this request */
 120                struct mutex creq_mutex;        /* DGRAM only: lock accesses to rcv.creq */
 121
 122                unsigned int state;             /* STREAM only: receiver state */
 123                struct {
 124                        __u32 magic __packed;
 125                        __u32 len __packed;
 126                        __u16 type __packed;
 127                        __u16 p1 __packed;
 128                        __u16 p2 __packed;
 129                        __u16 p3 __packed;
 130                        __u16 type2 __packed;
 131                } buf;                          /* STREAM only: temporary buffer */
 132                unsigned char* ptr;             /* STREAM only: pointer to data */
 133                size_t len;                     /* STREAM only: length of data to receive */
 134        } rcv;
 135        struct {
 136                struct list_head requests;      /* STREAM only: queued requests */
 137                struct work_struct tq;          /* STREAM only: transmitter ready */
 138                struct ncp_request_reply* creq; /* STREAM only: currently transmitted entry */
 139        } tx;
 140        struct timer_list timeout_tm;           /* DGRAM only: timeout timer */
 141        struct work_struct timeout_tq;          /* DGRAM only: associated queue, we run timers from process context */
 142        int timeout_last;                       /* DGRAM only: current timeout length */
 143        int timeout_retries;                    /* DGRAM only: retries left */
 144        struct {
 145                size_t len;
 146                __u8 data[128];
 147        } unexpected_packet;
 148        struct backing_dev_info bdi;
 149};
 150
 151extern void ncp_tcp_rcv_proc(struct work_struct *work);
 152extern void ncp_tcp_tx_proc(struct work_struct *work);
 153extern void ncpdgram_rcv_proc(struct work_struct *work);
 154extern void ncpdgram_timeout_proc(struct work_struct *work);
 155extern void ncpdgram_timeout_call(unsigned long server);
 156extern void ncp_tcp_data_ready(struct sock* sk, int len);
 157extern void ncp_tcp_write_space(struct sock* sk);
 158extern void ncp_tcp_error_report(struct sock* sk);
 159
 160#define NCP_FLAG_UTF8   1
 161
 162#define NCP_CLR_FLAG(server, flag)      ((server)->flags &= ~(flag))
 163#define NCP_SET_FLAG(server, flag)      ((server)->flags |= (flag))
 164#define NCP_IS_FLAG(server, flag)       ((server)->flags & (flag))
 165
 166static inline int ncp_conn_valid(struct ncp_server *server)
 167{
 168        return ((server->conn_status & 0x11) == 0);
 169}
 170
 171static inline void ncp_invalidate_conn(struct ncp_server *server)
 172{
 173        server->conn_status |= 0x01;
 174}
 175
 176#endif
 177