1 /*
   2  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
   3  */
   4 
   5 /*
   6  * BSD 3 Clause License
   7  *
   8  * Copyright (c) 2007, The Storage Networking Industry Association.
   9  *
  10  * Redistribution and use in source and binary forms, with or without
  11  * modification, are permitted provided that the following conditions
  12  * are met:
  13  *      - Redistributions of source code must retain the above copyright
  14  *        notice, this list of conditions and the following disclaimer.
  15  *
  16  *      - Redistributions in binary form must reproduce the above copyright
  17  *        notice, this list of conditions and the following disclaimer in
  18  *        the documentation and/or other materials provided with the
  19  *        distribution.
  20  *
  21  *      - Neither the name of The Storage Networking Industry Association (SNIA)
  22  *        nor the names of its contributors may be used to endorse or promote
  23  *        products derived from this software without specific prior written
  24  *        permission.
  25  *
  26  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  27  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  29  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  30  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  31  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  32  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  33  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  34  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  35  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  36  * POSSIBILITY OF SUCH DAMAGE.
  37  */
  38 #ifndef _TLM_PROTO_H
  39 #define _TLM_PROTO_H
  40 
  41 #include <tlm.h>
  42 #include <tlm_buffers.h>
  43 #include <ndmpd_door.h>
  44 #include <dirent.h>
  45 #include <pthread.h>
  46 
  47 #define SCSI_CHANGER_DIR        "/dev/scsi/changer"
  48 #define SCSI_TAPE_DIR           "/dev/rmt"
  49 
  50 #define MAXIORETRY      20
  51 
  52 typedef void log_func_t(ulong_t, char *, ...);
  53 typedef void *  (*funct_t)(void *);     /* function pointer */
  54 
  55 extern longlong_t llmin(longlong_t, longlong_t);
  56 extern unsigned int min(unsigned int, unsigned int);
  57 extern unsigned int max(unsigned int, unsigned int);
  58 extern int oct_atoi(char *p);
  59 
  60 extern int tlm_log_fhnode(tlm_job_stats_t *,
  61     char *,
  62     char *,
  63     struct stat64 *,
  64     u_longlong_t);
  65 
  66 extern int tlm_log_fhdir(tlm_job_stats_t *,
  67     char *,
  68     struct stat64 *,
  69     struct fs_fhandle *);
  70 
  71 extern int tlm_log_fhpath_name(tlm_job_stats_t *,
  72     char *,
  73     struct stat64 *,
  74     u_longlong_t);
  75 
  76 extern boolean_t tlm_is_too_long(int,
  77     char *,
  78     char *);
  79 
  80 extern void tlm_log_list(char *,
  81     char **);
  82 extern tlm_drive_t *tlm_drive(int, int);
  83 extern tlm_library_t *tlm_library(int);
  84 extern tlm_slot_t *tlm_slot(int, int);
  85 
  86 extern sasd_drive_t *sasd_slink_drive(scsi_link_t *);
  87 extern scsi_link_t *sasd_dev_slink(int);
  88 extern sasd_drive_t *sasd_drive(int);
  89 extern scsi_adapter_t *scsi_get_adapter(int);
  90 extern int scsi_get_adapter_count(void);
  91 
  92 extern char *sasd_slink_name(scsi_link_t *);
  93 extern int sasd_dev_count(void);
  94 extern int tlm_ioctl(int, int, void *);
  95 extern int probe_scsi();
  96 
  97 extern void tlm_enable_barcode(int);
  98 extern int tlm_insert_new_library(scsi_link_t *);
  99 extern int tlm_insert_new_drive(int);
 100 extern int tlm_insert_new_slot(int);
 101 
 102 extern char *tlm_get_tape_name(int, int);
 103 extern int tlm_library_count(void);
 104 
 105 extern boolean_t fs_is_rdonly(char *);
 106 extern boolean_t fs_is_chkpntvol();
 107 extern int get_zfsvolname(char *, int, char *);
 108 extern int chkpnt_creationtime_bypattern();
 109 
 110 extern log_func_t log_debug;
 111 extern log_func_t log_error;
 112 extern boolean_t match(char *, char *);
 113 
 114 extern void tlm_build_header_checksum(tlm_tar_hdr_t *);
 115 extern int tlm_vfy_tar_checksum(tlm_tar_hdr_t *);
 116 extern int tlm_entry_restored(tlm_job_stats_t *, char *, int);
 117 extern char *strupr(char *);
 118 extern char *parse(char **, char *);
 119 extern int sysattr_rdonly(char *);
 120 extern int sysattr_rw(char *);
 121 
 122 extern int tar_putfile(char *,
 123     char *,
 124     char *,
 125     tlm_acls_t *,
 126     tlm_commands_t *,
 127     tlm_cmd_t *,
 128     tlm_job_stats_t *,
 129     struct hardlink_q *);
 130 
 131 extern int tar_putdir(char *,
 132     tlm_acls_t *,
 133     tlm_cmd_t *,
 134     tlm_job_stats_t *);
 135 
 136 extern int tar_getfile(tlm_backup_restore_arg_t *);
 137 
 138 extern int
 139 tar_getdir(tlm_commands_t *,
 140     tlm_cmd_t *,
 141     tlm_job_stats_t *,
 142     struct rs_name_maker *,
 143     int,
 144     int,
 145     char **,
 146     char **,
 147     int,
 148     int,
 149     char *,
 150     struct hardlink_q *);
 151 #endif  /* _TLM_PROTO_H */