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

Cache object: 91b2dffd4b11659c2b78a969986b28d4


[ 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.