1 /*        $NetBSD: common.h,v 1.10 2021/08/02 12:56:25 andvar Exp $   */
2 
3 /*
4  * Copyright (c) 1993-95 Mats O Jansson.  All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  *
26  *        $NetBSD: common.h,v 1.10 2021/08/02 12:56:25 andvar Exp $
27  *
28  */
29 
30 #ifndef _COMMON_H_
31 #define _COMMON_H_
32 
33 #define MAXDL                 16                  /* maximum number concurrent load */
34 #define IFNAME_SIZE 32                  /* maximum size if interface name */
35 #define BUFSIZE               1600                /* main receive buffer size   */
36 #define HDRSIZ                22                  /* room for 803.2 header      */
37 
38 #ifndef MOP_FILE_PATH
39 #define MOP_FILE_PATH         "/tftpboot/mop"
40 #endif
41 
42 #define DEBUG_ONELINE         1
43 #define DEBUG_HEADER          2
44 #define DEBUG_INFO  3
45 
46 /*
47  * structure per interface
48  *
49  */
50 
51 struct if_info {
52           int       fd;                           /* File Descriptor                 */
53           int       trans;                        /* Transport type Ethernet/802.3   */
54           u_char    eaddr[6];           /* Ethernet addr of this interface */
55           char      if_name[IFNAME_SIZE];         /* Interface Name                */
56           int       (*iopen)(const char *, int, u_short, int);
57                                                   /* Interface Open Routine        */
58           int       (*write)(int, const u_char *, int, int);
59                                                   /* Interface Write Routine       */
60           void      (*read)(void);      /* Interface Read Routine          */
61           struct if_info *next;                   /* Next Interface                */
62 };
63 
64 #define DL_STATUS_FREE                   0
65 #define DL_STATUS_READ_IMGHDR  1
66 #define DL_STATUS_SENT_MLD     2
67 #define DL_STATUS_SENT_PLT     3
68 
69 typedef enum {
70           IMAGE_TYPE_MOP,                         /* MOP image */
71           IMAGE_TYPE_AOUT,              /* a.out image */
72           IMAGE_TYPE_ELF32              /* Elf32 image */
73 } mopd_imagetype;
74 
75 struct dllist {
76           u_char              status;             /* Status byte                          */
77           struct if_info *ii;           /* interface pointer                    */
78           u_char              eaddr[6]; /* targets ethernet address   */
79           int                 ldfd;               /* filedescriptor for loadfile          */
80           u_short             dl_bsz;             /* Data Link Buffer Size      */
81           int                 timeout;  /* Timeout counter            */
82           u_char              count;              /* Packet Counter             */
83           u_int32_t loadaddr; /* Load Address                         */
84           u_int32_t xferaddr; /* Transfer Address           */
85           u_int32_t nloadaddr;          /* Next Load Address                    */
86           off_t               lseek;              /* Seek before last read      */
87           mopd_imagetype      image_type;         /* what type of image is it?  */
88 
89           /* For Elf32 files */
90           int                 e_machine;          /* Machine ID                           */
91           int                 e_nsec;             /* number of program sections */
92 #define   SEC_MAX   4
93           struct {
94                     off_t s_foff;                 /* file offset of section     */
95                     u_int32_t s_vaddr;  /* virtual address of section */
96                     u_int32_t s_fsize;  /* file size of section                 */
97                     u_int32_t s_msize;  /* memory size of section     */
98                     u_int32_t s_pad;    /* padding until next section */
99                     u_int32_t s_loff;   /* logical offset into image  */
100           } e_sections[SEC_MAX];                  /* program sections           */
101           u_int32_t e_curpos; /* current logical position   */
102           int                 e_cursec; /* current section */
103 
104           /* For a.out files */
105           int                 a_mid;              /* Machine ID                           */
106           u_int32_t a_text;             /* Size of text segment                 */
107           u_int32_t a_text_fill;        /* Size of text segment fill  */
108           u_int32_t a_data;             /* Size of data segment                 */
109           u_int32_t a_data_fill;        /* Size of data segment fill  */
110           u_int32_t a_bss;              /* Size of bss segment                  */
111           u_int32_t a_bss_fill;         /* Size of bss segment fill   */
112           off_t               a_lseek;  /* Keep track of pos in newfile */
113 };
114 
115 #endif /* _COMMON_H_ */
116