The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/fs/udf/ecma167-udf.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 2001, 2002 Scott Long <scottl@freebsd.org>
    3  * All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer.
   10  * 2. Redistributions in binary form must reproduce the above copyright
   11  *    notice, this list of conditions and the following disclaimer in the
   12  *    documentation and/or other materials provided with the distribution.
   13  *
   14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   24  * SUCH DAMAGE.
   25  *
   26  * $FreeBSD$
   27  */
   28 
   29 /* ecma167-udf.h */
   30 /* Structure/definitions/constants a la ECMA 167 rev. 3 */
   31 
   32 /* Tag identifiers */
   33 enum {
   34         TAGID_PRI_VOL =         1,
   35         TAGID_ANCHOR =          2,
   36         TAGID_VOL =             3,
   37         TAGID_IMP_VOL =         4,
   38         TAGID_PARTITION =       5,
   39         TAGID_LOGVOL =          6,
   40         TAGID_UNALLOC_SPACE =   7,
   41         TAGID_TERM =            8,
   42         TAGID_LOGVOL_INTEGRITY = 9,
   43         TAGID_FSD =             256,
   44         TAGID_FID =             257,
   45         TAGID_FENTRY =          261
   46 };
   47 
   48 /* Descriptor tag [3/7.2] */
   49 struct desc_tag {
   50         uint16_t        id;
   51         uint16_t        descriptor_ver;
   52         uint8_t         cksum;
   53         uint8_t         reserved;
   54         uint16_t        serial_num;
   55         uint16_t        desc_crc;
   56         uint16_t        desc_crc_len;
   57         uint32_t        tag_loc;
   58 } __packed;
   59 
   60 /* Recorded Address [4/7.1] */
   61 struct lb_addr {
   62         uint32_t        lb_num;
   63         uint16_t        part_num;
   64 } __packed;
   65 
   66 /* Extent Descriptor [3/7.1] */
   67 struct extent_ad {
   68         uint32_t        len;
   69         uint32_t        loc;
   70 } __packed;
   71 
   72 /* Short Allocation Descriptor [4/14.14.1] */
   73 struct short_ad {
   74         uint32_t        len;
   75         uint32_t        pos;
   76 } __packed;
   77 
   78 /* Long Allocation Descriptor [4/14.14.2] */
   79 struct long_ad {
   80         uint32_t        len;
   81         struct lb_addr  loc;
   82         uint16_t        ad_flags;
   83         uint32_t        ad_id;
   84 } __packed;
   85 
   86 /* Extended Allocation Descriptor [4/14.14.3] */
   87 struct ext_ad {
   88         uint32_t        ex_len;
   89         uint32_t        rec_len;
   90         uint32_t        inf_len;
   91         struct lb_addr  ex_loc;
   92         uint8_t         reserved[2];
   93 } __packed;
   94 
   95 union icb {
   96         struct short_ad s_ad;
   97         struct long_ad  l_ad;
   98         struct ext_ad   e_ad;
   99 };
  100 
  101 /* Character set spec [1/7.2.1] */
  102 struct charspec {
  103         uint8_t         type;
  104         uint8_t         inf[63];
  105 } __packed;
  106 
  107 /* Timestamp [1/7.3] */
  108 struct timestamp {
  109         uint16_t        type_tz;
  110         uint16_t        year;
  111         uint8_t         month;
  112         uint8_t         day;
  113         uint8_t         hour;
  114         uint8_t         minute;
  115         uint8_t         second;
  116         uint8_t         centisec;
  117         uint8_t         hund_usec;
  118         uint8_t         usec;
  119 } __packed;
  120 
  121 /* Entity Identifier [1/7.4] */
  122 #define UDF_REGID_ID_SIZE       23
  123 struct regid {
  124         uint8_t         flags;
  125         uint8_t         id[UDF_REGID_ID_SIZE];
  126         uint8_t         id_suffix[8];
  127 } __packed;
  128 
  129 /* ICB Tag [4/14.6] */
  130 struct icb_tag {
  131         uint32_t        prev_num_dirs;
  132         uint16_t        strat_type;
  133         uint8_t         strat_param[2];
  134         uint16_t        max_num_entries;
  135         uint8_t         reserved;
  136         uint8_t         file_type;
  137         struct lb_addr  parent_icb;
  138         uint16_t        flags;
  139 } __packed;
  140 #define UDF_ICB_TAG_FLAGS_SETUID        0x40
  141 #define UDF_ICB_TAG_FLAGS_SETGID        0x80
  142 #define UDF_ICB_TAG_FLAGS_STICKY        0x100
  143 
  144 /* Anchor Volume Descriptor Pointer [3/10.2] */
  145 struct anchor_vdp {
  146         struct desc_tag         tag;
  147         struct extent_ad        main_vds_ex;
  148         struct extent_ad        reserve_vds_ex;
  149 } __packed;
  150 
  151 /* Volume Descriptor Pointer [3/10.3] */
  152 struct vol_desc_ptr {
  153         struct desc_tag         tag;
  154         uint32_t                vds_number;
  155         struct extent_ad        next_vds_ex;
  156 } __packed;
  157 
  158 /* Primary Volume Descriptor [3/10.1] */
  159 struct pri_vol_desc {
  160         struct desc_tag         tag;
  161         uint32_t                seq_num;
  162         uint32_t                pdv_num;
  163         char                    vol_id[32];
  164         uint16_t                vds_num;
  165         uint16_t                max_vol_seq;
  166         uint16_t                ichg_lvl;
  167         uint16_t                max_ichg_lvl;
  168         uint32_t                charset_list;
  169         uint32_t                max_charset_list;
  170         char                    volset_id[128];
  171         struct charspec         desc_charset;
  172         struct charspec         explanatory_charset;
  173         struct extent_ad        vol_abstract;
  174         struct extent_ad        vol_copyright;
  175         struct regid            app_id;
  176         struct timestamp        time;
  177         struct regid            imp_id;
  178         uint8_t                 imp_use[64];
  179         uint32_t                prev_vds_lov;
  180         uint16_t                flags;
  181         uint8_t                 reserved[22];
  182 } __packed;
  183 
  184 /* Logical Volume Descriptor [3/10.6] */
  185 struct logvol_desc {
  186         struct desc_tag         tag;
  187         uint32_t                seq_num;
  188         struct charspec         desc_charset;
  189         char                    logvol_id[128];
  190         uint32_t                lb_size;
  191         struct regid            domain_id;
  192         union {
  193                 struct long_ad  fsd_loc;
  194                 uint8_t         logvol_content_use[16];
  195         } _lvd_use;
  196         uint32_t                mt_l; /* Partition map length */
  197         uint32_t                n_pm; /* Number of partition maps */
  198         struct regid            imp_id;
  199         uint8_t                 imp_use[128];
  200         struct extent_ad        integrity_seq_id;
  201         uint8_t                 maps[1];
  202 } __packed;
  203 
  204 #define UDF_PMAP_SIZE   64
  205 
  206 /* Type 1 Partition Map [3/10.7.2] */
  207 struct part_map_1 {
  208         uint8_t                 type;
  209         uint8_t                 len;
  210         uint16_t                vol_seq_num;
  211         uint16_t                part_num;
  212 } __packed;
  213 
  214 /* Type 2 Partition Map [3/10.7.3] */
  215 struct part_map_2 {
  216         uint8_t                 type;
  217         uint8_t                 len;
  218         uint8_t                 part_id[62];
  219 } __packed;
  220 
  221 /* Virtual Partition Map [UDF 2.01/2.2.8] */
  222 struct part_map_virt {
  223         uint8_t                 type;
  224         uint8_t                 len;
  225         uint8_t                 reserved[2];
  226         struct regid            id;
  227         uint16_t                vol_seq_num;
  228         uint16_t                part_num;
  229         uint8_t                 reserved1[24];
  230 } __packed;
  231 
  232 /* Sparable Partition Map [UDF 2.01/2.2.9] */
  233 struct part_map_spare {
  234         uint8_t                 type;
  235         uint8_t                 len;
  236         uint8_t                 reserved[2];
  237         struct regid            id;
  238         uint16_t                vol_seq_num;
  239         uint16_t                part_num;
  240         uint16_t                packet_len;
  241         uint8_t                 n_st;   /* Number of Sparing Tables */
  242         uint8_t                 reserved1;
  243         uint32_t                st_size;
  244         uint32_t                st_loc[1];
  245 } __packed;
  246 
  247 union udf_pmap {
  248         uint8_t                 data[UDF_PMAP_SIZE];
  249         struct part_map_1       pm1;
  250         struct part_map_2       pm2;
  251         struct part_map_virt    pmv;
  252         struct part_map_spare   pms;
  253 };
  254 
  255 /* Sparing Map Entry [UDF 2.01/2.2.11] */
  256 struct spare_map_entry {
  257         uint32_t                org;
  258         uint32_t                map;
  259 } __packed;
  260 
  261 /* Sparing Table [UDF 2.01/2.2.11] */
  262 struct udf_sparing_table {
  263         struct desc_tag         tag;
  264         struct regid            id;
  265         uint16_t                rt_l;   /* Relocation Table len */
  266         uint8_t                 reserved[2];
  267         uint32_t                seq_num;
  268         struct spare_map_entry  entries[1];
  269 } __packed;
  270 
  271 /* Partition Descriptor [3/10.5] */
  272 struct part_desc {
  273         struct desc_tag tag;
  274         uint32_t        seq_num;
  275         uint16_t        flags;
  276         uint16_t        part_num;
  277         struct regid    contents;
  278         uint8_t         contents_use[128];
  279         uint32_t        access_type;
  280         uint32_t        start_loc;
  281         uint32_t        part_len;
  282         struct regid    imp_id;
  283         uint8_t         imp_use[128];
  284         uint8_t         reserved[156];
  285 } __packed;
  286 
  287 /* File Set Descriptor [4/14.1] */
  288 struct fileset_desc {
  289         struct desc_tag         tag;
  290         struct timestamp        time;
  291         uint16_t                ichg_lvl;
  292         uint16_t                max_ichg_lvl;
  293         uint32_t                charset_list;
  294         uint32_t                max_charset_list;
  295         uint32_t                fileset_num;
  296         uint32_t                fileset_desc_num;
  297         struct charspec         logvol_id_charset;
  298         char                    logvol_id[128];
  299         struct charspec         fileset_charset;
  300         char                    fileset_id[32];
  301         char                    copyright_file_id[32];
  302         char                    abstract_file_id[32];
  303         struct long_ad          rootdir_icb;
  304         struct regid            domain_id;
  305         struct long_ad          next_ex;
  306         struct long_ad          streamdir_icb;
  307         uint8_t                 reserved[32];
  308 } __packed;
  309 
  310 /* File Identifier Descriptor [4/14.4] */
  311 struct fileid_desc {
  312         struct desc_tag tag;
  313         uint16_t        file_num;
  314         uint8_t         file_char;
  315         uint8_t         l_fi;   /* Length of file identifier area */
  316         struct long_ad  icb;
  317         uint16_t        l_iu;   /* Length of implementation use area */
  318         uint8_t         data[1];
  319 } __packed;
  320 #define UDF_FID_SIZE    38
  321 #define UDF_FILE_CHAR_VIS       (1 << 0) /* Visible */
  322 #define UDF_FILE_CHAR_DIR       (1 << 1) /* Directory */
  323 #define UDF_FILE_CHAR_DEL       (1 << 2) /* Deleted */
  324 #define UDF_FILE_CHAR_PAR       (1 << 3) /* Parent Directory */
  325 #define UDF_FILE_CHAR_META      (1 << 4) /* Stream metadata */
  326 
  327 /* File Entry [4/14.9] */
  328 struct file_entry {
  329         struct desc_tag         tag;
  330         struct icb_tag          icbtag;
  331         uint32_t                uid;
  332         uint32_t                gid;
  333         uint32_t                perm;
  334         uint16_t                link_cnt;
  335         uint8_t                 rec_format;
  336         uint8_t                 rec_disp_attr;
  337         uint32_t                rec_len;
  338         uint64_t                inf_len;
  339         uint64_t                logblks_rec;
  340         struct timestamp        atime;
  341         struct timestamp        mtime;
  342         struct timestamp        attrtime;
  343         uint32_t                ckpoint;
  344         struct long_ad          ex_attr_icb;
  345         struct regid            imp_id;
  346         uint64_t                unique_id;
  347         uint32_t                l_ea;   /* Length of extended attribute area */
  348         uint32_t                l_ad;   /* Length of allocation descriptors */
  349         uint8_t                 data[1];
  350 } __packed;
  351 #define UDF_FENTRY_SIZE 176
  352 #define UDF_FENTRY_PERM_USER_MASK       0x07
  353 #define UDF_FENTRY_PERM_GRP_MASK        0xE0
  354 #define UDF_FENTRY_PERM_OWNER_MASK      0x1C00
  355 
  356 union dscrptr {
  357         struct desc_tag         tag;
  358         struct anchor_vdp       avdp;
  359         struct vol_desc_ptr     vdp;
  360         struct pri_vol_desc     pvd;
  361         struct logvol_desc      lvd;
  362         struct part_desc        pd;
  363         struct fileset_desc     fsd;
  364         struct fileid_desc      fid;
  365         struct file_entry       fe;
  366 };
  367 
  368 /* Useful defines */
  369 
  370 #define GETICB(ad_type, fentry, offset) \
  371         (struct ad_type *)&fentry->data[offset]
  372 
  373 #define GETICBLEN(ad_type, icb) ((struct ad_type *)(icb))->len

Cache object: eaf7cd830a8e959eae29bae89ea35ee6


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.