summaryrefslogtreecommitdiff
blob: 5bb2e10f433a19daed6c673ad8946fd7d76fd134 (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
/*
 * vmx.h: VMware VMX parsing/formatting functions
 *
 * Copyright (C) 2009-2010 Matthias Bolte <matthias.bolte@googlemail.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library;  If not, see
 * <http://www.gnu.org/licenses/>.
 *
 */

#ifndef __VIR_VMX_H__
# define __VIR_VMX_H__

# include "internal.h"
# include "conf.h"
# include "domain_conf.h"

typedef struct _virVMXContext virVMXContext;



/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Context
 */

typedef char * (*virVMXParseFileName)(const char *fileName, void *opaque);
typedef char * (*virVMXFormatFileName)(const char *src, void *opaque);
typedef int (*virVMXAutodetectSCSIControllerModel)(virDomainDiskDefPtr def,
                                                   int *model, void *opaque);

/*
 * virVMXParseFileName is only used by virVMXParseConfig.
 * virVMXFormatFileName is only used by virVMXFormatConfig.
 * virVMXAutodetectSCSIControllerModel is optionally used by virVMXFormatConfig.
 */
struct _virVMXContext {
    void *opaque;
    virVMXParseFileName parseFileName;
    virVMXFormatFileName formatFileName;
    virVMXAutodetectSCSIControllerModel autodetectSCSIControllerModel;
};



/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Helpers
 */

char *virVMXEscapeHex(const char *string, char escape, const char *special);

# define virVMXEscapeHexPipe(_string) virVMXEscapeHex(_string, '|', "\"")

# define virVMXEscapeHexPercent(_string) virVMXEscapeHex(_string, '%', "/\\")

int virVMXUnescapeHex(char *string, char escape);

# define virVMXUnescapeHexPipe(_string) virVMXUnescapeHex(_string, '|')

# define virVMXUnescapeHexPercent(_string) virVMXUnescapeHex(_string, '%')

char *virVMXConvertToUTF8(const char *encoding, const char *string);



/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * VMX -> Domain XML
 */

virDomainDefPtr virVMXParseConfig(virVMXContext *ctx, virCapsPtr caps,
                                  const char *vmx);

int virVMXParseVNC(virConfPtr conf, virDomainGraphicsDefPtr *def);

int virVMXParseSCSIController(virConfPtr conf, int controller, bool *present,
                              int *virtualDev);

int virVMXParseDisk(virVMXContext *ctx, virCapsPtr caps, virConfPtr conf,
                    int device, int busType, int controllerOrBus, int unit,
                    virDomainDiskDefPtr *def);

int virVMXParseFileSystem(virConfPtr conf, int number, virDomainFSDefPtr *def);

int virVMXParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def);

int virVMXParseSerial(virVMXContext *ctx, virConfPtr conf, int port,
                      virDomainChrDefPtr *def);

int virVMXParseParallel(virVMXContext *ctx, virConfPtr conf, int port,
                        virDomainChrDefPtr *def);

int virVMXParseSVGA(virConfPtr conf, virDomainVideoDefPtr *def);



/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Domain XML -> VMX
 */

char *virVMXFormatConfig(virVMXContext *ctx, virCapsPtr caps,
                         virDomainDefPtr def, int virtualHW_version);

int virVMXFormatVNC(virDomainGraphicsDefPtr def, virBufferPtr buffer);

int virVMXFormatHardDisk(virVMXContext *ctx, virDomainDiskDefPtr def,
                         virBufferPtr buffer);

int virVMXFormatCDROM(virVMXContext *ctx, virDomainDiskDefPtr def,
                      virBufferPtr buffer);

int virVMXFormatFloppy(virVMXContext *ctx, virDomainDiskDefPtr def,
                       virBufferPtr buffer, bool floppy_present[2]);

int virVMXFormatFileSystem(virDomainFSDefPtr def, int number,
                           virBufferPtr buffer);

int virVMXFormatEthernet(virDomainNetDefPtr def, int controller,
                         virBufferPtr buffer);

int virVMXFormatSerial(virVMXContext *ctx, virDomainChrDefPtr def,
                       virBufferPtr buffer);

int virVMXFormatParallel(virVMXContext *ctx, virDomainChrDefPtr def,
                         virBufferPtr buffer);

int virVMXFormatSVGA(virDomainVideoDefPtr def, virBufferPtr buffer);

#endif /* __VIR_VMX_H__ */