summaryrefslogtreecommitdiffstats
path: root/loader/loader.h
blob: a56d0b83c84e6b97b3add71dd5e35fdda160d6ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/*
 * loader.h
 *
 * Copyright (C) 2007  Red Hat, Inc.  All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <stdint.h>

#ifndef LOADER_H
#define LOADER_H

#define LOADER_OK 0
#define LOADER_BACK 1
#define LOADER_NOOP 2
#define LOADER_ERROR -1

/* #0 unused */
/* #1 unused */
#define LOADER_FLAGS_TEXT               (((uint64_t) 1) << 2)
#define LOADER_FLAGS_RESCUE             (((uint64_t) 1) << 3)
#define LOADER_FLAGS_KICKSTART          (((uint64_t) 1) << 4)
#define LOADER_FLAGS_KICKSTART_SEND_MAC (((uint64_t) 1) << 5)
#define LOADER_FLAGS_POWEROFF           (((uint64_t) 1) << 6)
#define LOADER_FLAGS_NOPROBE              (((uint64_t) 1) << 7)
#define LOADER_FLAGS_MODDISK            (((uint64_t) 1) << 8)
#define LOADER_FLAGS_EARLY_NETWORKING   (((uint64_t) 1) << 9)
#define LOADER_FLAGS_SERIAL             (((uint64_t) 1) << 10)
#define LOADER_FLAGS_UPDATES            (((uint64_t) 1) << 11)
#define LOADER_FLAGS_KSFILE             (((uint64_t) 1) << 12)
#define LOADER_FLAGS_HALT               (((uint64_t) 1) << 13)
#define LOADER_FLAGS_SELINUX            (((uint64_t) 1) << 14)
#define LOADER_FLAGS_VIRTPCONSOLE       (((uint64_t) 1) << 15)
/* #16 unused */
#define LOADER_FLAGS_NOSHELL            (((uint64_t) 1) << 17)
/* #18 unused */
#define LOADER_FLAGS_TELNETD            (((uint64_t) 1) << 19)
#define LOADER_FLAGS_NOPASS             (((uint64_t) 1) << 20)
/* #21 unused */
#define LOADER_FLAGS_MEDIACHECK         (((uint64_t) 1) << 22)
/* #23 unused */
#define LOADER_FLAGS_ASKMETHOD          (((uint64_t) 1) << 24)
#define LOADER_FLAGS_ASKNETWORK         (((uint64_t) 1) << 25)
/* #26 unused */
/* #27 unused */
#define LOADER_FLAGS_CMDLINE            (((uint64_t) 1) << 28)
#define LOADER_FLAGS_GRAPHICAL          (((uint64_t) 1) << 29)
#define LOADER_FLAGS_NOIPV4             (((uint64_t) 1) << 31)
#ifdef ENABLE_IPV6
#define LOADER_FLAGS_NOIPV6             (((uint64_t) 1) << 32)
#endif
#define LOADER_FLAGS_IP_PARAM           (((uint64_t) 1) << 33)
#ifdef ENABLE_IPV6
#define LOADER_FLAGS_IPV6_PARAM         (((uint64_t) 1) << 34)
#endif
#define LOADER_FLAGS_IS_KICKSTART       (((uint64_t) 1) << 35)
#define LOADER_FLAGS_ALLOW_WIRELESS     (((uint64_t) 1) << 36)
#define LOADER_FLAGS_HAVE_CMSCONF       (((uint64_t) 1) << 37)
#define LOADER_FLAGS_NOKILL		(((uint64_t) 1) << 38)
#define LOADER_FLAGS_KICKSTART_SEND_SERIAL   (((uint64_t) 1) << 39)
#define LOADER_FLAGS_AUTOMODDISK        (((uint64_t) 1) << 40)

#define FL_TEXT(a)               ((a) & LOADER_FLAGS_TEXT)
#define FL_RESCUE(a)             ((a) & LOADER_FLAGS_RESCUE)
#define FL_KICKSTART(a)          ((a) & LOADER_FLAGS_KICKSTART)
#define FL_KICKSTART_SEND_MAC(a) ((a) & LOADER_FLAGS_KICKSTART_SEND_MAC)
#define FL_POWEROFF(a)           ((a) & LOADER_FLAGS_POWEROFF)
#define FL_NOPROBE(a)            ((a) & LOADER_FLAGS_NOPROBE)
#define FL_MODDISK(a)            ((a) & LOADER_FLAGS_MODDISK)
#define FL_EARLY_NETWORKING(a)   ((a) & LOADER_FLAGS_EARLY_NETWORKING)
#define FL_SERIAL(a)             ((a) & LOADER_FLAGS_SERIAL)
#define FL_UPDATES(a)            ((a) & LOADER_FLAGS_UPDATES)
#define FL_KSFILE(a)             ((a) & LOADER_FLAGS_KSFILE)
#define FL_NOSHELL(a)            ((a) & LOADER_FLAGS_NOSHELL)
#define FL_TELNETD(a)            ((a) & LOADER_FLAGS_TELNETD)
#define FL_NOPASS(a)             ((a) & LOADER_FLAGS_NOPASS)
#define FL_MEDIACHECK(a)         ((a) & LOADER_FLAGS_MEDIACHECK)
#define FL_ASKMETHOD(a)          ((a) & LOADER_FLAGS_ASKMETHOD)
#define FL_GRAPHICAL(a)          ((a) & LOADER_FLAGS_GRAPHICAL)
#define FL_CMDLINE(a)            ((a) & LOADER_FLAGS_CMDLINE)
#define FL_HALT(a)               ((a) & LOADER_FLAGS_HALT)
#define FL_SELINUX(a)            ((a) & LOADER_FLAGS_SELINUX)
#define FL_VIRTPCONSOLE(a)       ((a) & LOADER_FLAGS_VIRTPCONSOLE)
#define FL_ASKNETWORK(a)         ((a) & LOADER_FLAGS_ASKNETWORK)
#define FL_NOIPV4(a)             ((a) & LOADER_FLAGS_NOIPV4)
#ifdef ENABLE_IPV6
#define FL_NOIPV6(a)             ((a) & LOADER_FLAGS_NOIPV6)
#endif
#define FL_IP_PARAM(a)           ((a) & LOADER_FLAGS_IP_PARAM)
#ifdef ENABLE_IPV6
#define FL_IPV6_PARAM(a)         ((a) & LOADER_FLAGS_IPV6_PARAM)
#endif
#define FL_IS_KICKSTART(a)       ((a) & LOADER_FLAGS_IS_KICKSTART)
#define FL_ALLOW_WIRELESS(a)     ((a) & LOADER_FLAGS_ALLOW_WIRELESS)
#define FL_HAVE_CMSCONF(a)       ((a) & LOADER_FLAGS_HAVE_CMSCONF)
#define FL_NOKILL(a)		 ((a) & LOADER_FLAGS_NOKILL)
#define FL_KICKSTART_SEND_SERIAL(a) ((a) & LOADER_FLAGS_KICKSTART_SEND_SERIAL)
#define FL_AUTOMODDISK(a)        ((a) & LOADER_FLAGS_AUTOMODDISK)

void startNewt(void);
void stopNewt(void);
char * getProductName(void);
char * getProductPath(void);
char * getProductArch(void);

#include "moduleinfo.h"
#include "../isys/devices.h"
/* JKFIXME: I don't like all of the _set attribs, but without them,
 * we can't tell if it was explicitly set by kickstart/cmdline or 
 * if we just got it going through the install.   */
struct loaderData_s {
    char * lang;
    int lang_set;
    char * kbd;
    int kbd_set;
    char * netDev;
    int netDev_set;
    char * bootIf;
    int bootIf_set;
    char * netCls;
    int netCls_set;
    char *ipv4, *netmask, *gateway, *dns, *hostname, *peerid, *ethtool, *subchannels, *portname, *essid, *wepkey, *nettype, *ctcprot, *layer2, *portno, *macaddr;
#ifdef ENABLE_IPV6
    char *ipv6;
    int ipv6info_set;
    char *gateway6;
#endif
    int mtu;
    int noDns;
    int dhcpTimeout;
    int ipinfo_set;
    char * ksFile;
    int method;
    char * ddsrc;
    void * stage2Data;
    char * logLevel;
    char * updatessrc;
    char * dogtailurl;
    char * gdbServer;
    char * instRepo;

    pid_t fw_loader_pid;
    char *fw_search_pathz;
    size_t fw_search_pathz_len;

    moduleInfoSet modInfo;

    int inferredStage2, invalidRepoParam;

    /* Proxy info needs to be in the loaderData so we can get these
     * settings off the command line, too.
     */
    char *proxy;
    char *proxyPort;
    char *proxyUser;
    char *proxyPassword;
};

/* 64 bit platforms, definitions courtesy of glib */
#if defined (__x86_64__) || defined(__ia64__) || defined(__alpha__) || defined(__powerpc64__) || defined(__s390x__) || (defined(__sparc__) && defined(__arch64__))
#define POINTER_TO_INT(p)  ((int) (long) (p))
#define INT_TO_POINTER(i)  ((void *) (long) (i))
#else
#define POINTER_TO_INT(p)  ((int) (p))
#define INT_TO_POINTER(i)  ((void *) (i))
#endif

/* library paths */
#if defined(__x86_64__) || defined(__s390x__) || defined(__powerpc64__)
#define LIBPATH "/lib64:/usr/lib64:/usr/X11R6/lib64:/usr/kerberos/lib64:/mnt/usr/lib64:/mnt/sysimage/lib64:/mnt/sysimage/usr/lib64"
#else
#define LIBPATH "/lib:/usr/lib:/usr/X11R6/lib:/usr/kerberos/lib:/mnt/usr/lib:/mnt/sysimage/lib:/mnt/sysimage/usr/lib"
#endif

#define checked_asprintf(...)                                       \
    if (asprintf( __VA_ARGS__ ) == -1) {                            \
        logMessage(CRITICAL, "%s: %d: %m", __func__, __LINE__);     \
        abort();                                                    \
    }

#endif