mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-08-23 05:50:03 +03:00
Compare commits
1398 Commits
Author | SHA1 | Date | |
---|---|---|---|
b5c7516e46 | |||
b109b1140c | |||
e173e81ed9 | |||
0129b9ac1d | |||
d63f0754e3 | |||
5531a13c5f | |||
6e2847b277 | |||
acae5f8633 | |||
c954ad8a3e | |||
3cf61dd5f0 | |||
372a14c673 | |||
1d655dd1bb | |||
622c0c7f70 | |||
881dd9dc43 | |||
ac620c2e4a | |||
8a55d381ae | |||
834bb44834 | |||
e3f725a171 | |||
dde004a70f | |||
b38be9da8c | |||
3dab791fc7 | |||
d2aec1138f | |||
9963f590c1 | |||
e3cac12ca8 | |||
0efe7ecc2d | |||
f2be8879b8 | |||
92d9128a77 | |||
61544d310e | |||
455d222457 | |||
3f76415724 | |||
4ceabdf570 | |||
4ecd1d6983 | |||
cea0c393aa | |||
7175699cbb | |||
413d8670ec | |||
965e7f1452 | |||
27ef74ff40 | |||
9b72feecc3 | |||
8dce8b828c | |||
3f62b1135e | |||
28f8deb29a | |||
f9d589cc41 | |||
194d0b8b0a | |||
ad8a04697f | |||
47e6324545 | |||
f25ef09fb5 | |||
c5031e2d1d | |||
a791cde7cb | |||
cc8b3237c5 | |||
3506eb7a7b | |||
07530184d5 | |||
a6c441662d | |||
2bfb07cb05 | |||
df7a458f66 | |||
26fdec39b4 | |||
cf51433172 | |||
e9df9ab66e | |||
bc5355bb57 | |||
8a98a23900 | |||
8fca254f5d | |||
779ac7ab69 | |||
cde4c634e7 | |||
d3b7ad3f33 | |||
b2ff41d81f | |||
782afa98e4 | |||
683e011137 | |||
66cab01ae1 | |||
11ec6bd891 | |||
b8bf79aad7 | |||
867ed7bb9e | |||
a4650316d1 | |||
d400b8fb18 | |||
095b0bc46a | |||
4a86c2bb4b | |||
8bf0442e83 | |||
06a0d57f5a | |||
2711ac8716 | |||
8768149545 | |||
1012dc2933 | |||
ecde15910a | |||
1133ee2b38 | |||
3269ee657c | |||
075c8518c6 | |||
cde3c054fb | |||
454b927630 | |||
ec8cae93db | |||
57351139a7 | |||
12f0d2ece9 | |||
5d7929af46 | |||
814fcb9e08 | |||
ff68d6eeb5 | |||
e8aa5a16c9 | |||
63e086310f | |||
a1e50e820b | |||
a02500d010 | |||
b0e2bb33d8 | |||
03ca3317a6 | |||
1aeb3d9e7f | |||
384ebd3fc5 | |||
3ff4b06968 | |||
851117bd7a | |||
3a2fc2770b | |||
53e1d56dd4 | |||
a14eda311e | |||
72c507317a | |||
c91cff255f | |||
eb8f31c16b | |||
05e981df2d | |||
bd6b0a052e | |||
2067e31bf9 | |||
ecb4d92d57 | |||
05c25e6071 | |||
cf57d345b5 | |||
f094452526 | |||
9943276fd2 | |||
70c07e01de | |||
beb76e3742 | |||
d42a2ffc07 | |||
0436d328f5 | |||
64d5e815b7 | |||
4c4cc1b96d | |||
922d498e1c | |||
4d5533ca87 | |||
311357d9e3 | |||
98ada9ab70 | |||
9b6860f5ce | |||
8120325750 | |||
0ceced5868 | |||
7c5a0c94e4 | |||
321fa64bf5 | |||
54d9026a2c | |||
487c063381 | |||
57ddcc235a | |||
2d19e33f97 | |||
7fcf943bcd | |||
ad7db43913 | |||
b22eaa7538 | |||
ab49b392cc | |||
a26a1969c3 | |||
25d3a2e01f | |||
4445e16bfa | |||
c6c66615c2 | |||
a4fb88b5c9 | |||
4262e34eb5 | |||
c8aa3862b1 | |||
f6632f6b7f | |||
bc1ff1600e | |||
4ae4ae4ba4 | |||
300e60e15b | |||
1f66c18f79 | |||
94410848e1 | |||
c33dae3175 | |||
6a7ffd4389 | |||
cb640543c8 | |||
350e6c5e66 | |||
d36ccf9f6a | |||
ceb1d36b94 | |||
a772f4eebc | |||
558ebc256d | |||
25fb4c65a5 | |||
1fdc53c385 | |||
527d867a94 | |||
791273603e | |||
4f061ea641 | |||
bf9f0a9726 | |||
9f71368d06 | |||
53b45aa494 | |||
2791b8ab9b | |||
e22789de17 | |||
0007237301 | |||
43d635caf3 | |||
5d57104538 | |||
d675a922b5 | |||
7c736bab06 | |||
3992cfdd79 | |||
787f4feb4d | |||
f987d17511 | |||
b569c1abc1 | |||
8233dcc79b | |||
10a8b1f958 | |||
59d0c9801c | |||
362c3b33e6 | |||
89ae6a5a30 | |||
d86120fc52 | |||
6e6aa000c6 | |||
e457d5ef20 | |||
6227a220cc | |||
68fd6a3b34 | |||
0f8e7ae33a | |||
3165602a55 | |||
823a27c628 | |||
cad8054ece | |||
0ba86207bc | |||
2e4defdca7 | |||
19c7980ee6 | |||
041109afef | |||
98deac7dcc | |||
759095f636 | |||
0d0b409863 | |||
6e0ff1d402 | |||
dd39f13af0 | |||
19e235026b | |||
b5893b7b64 | |||
c6daec7b14 | |||
ee4907320f | |||
896e6ac4f8 | |||
1e31b83560 | |||
f51be165e4 | |||
b8e478502a | |||
7a23ba090d | |||
edb6fc3a7f | |||
0208face59 | |||
f985773d06 | |||
b59e59845f | |||
8845d29375 | |||
879bcee08c | |||
d403b84cf3 | |||
ac8bbdbdfa | |||
38e56abb05 | |||
09d22af194 | |||
4d2e8355cb | |||
cdab483e92 | |||
f05fb6c56c | |||
96b41f639d | |||
3bf5f0427a | |||
1e0534a770 | |||
b819b3b7cf | |||
210ed0e871 | |||
ab95da4058 | |||
af3f9aabde | |||
3d150d328b | |||
1c56b9fe53 | |||
2e22f23bde | |||
4888f0fb56 | |||
73b9977140 | |||
1b1402b90f | |||
2e14861224 | |||
265457845f | |||
cb7583e161 | |||
0d90823e87 | |||
239fb8c46b | |||
9dfdeadc8a | |||
861707b940 | |||
462dc569de | |||
d16a166eaf | |||
af4d39f84d | |||
31047e2ba3 | |||
44b0a53a7c | |||
ad18ff9dbf | |||
b340994bac | |||
e91c8b1805 | |||
ce43483caf | |||
15bbfd8390 | |||
5095bf06f1 | |||
b8b702734c | |||
cf90342be0 | |||
16520d6555 | |||
ac9ca01cc4 | |||
8639a42059 | |||
3b1c191fe7 | |||
93870c4ef7 | |||
6fbb957d91 | |||
cc5b1fe59a | |||
3175df88f1 | |||
b973f920ee | |||
5560170d04 | |||
29293930a9 | |||
2f925c650c | |||
37038d5c0b | |||
fdad9c34ad | |||
4ec60dfbb3 | |||
9890b318c8 | |||
118cfc2535 | |||
d2a9d55f45 | |||
877fd769b9 | |||
07dd6fb610 | |||
6c3642e9bc | |||
720bee3008 | |||
57e677a7c6 | |||
3d2da30edb | |||
1f77472d5b | |||
d2c28911f4 | |||
4f3287a415 | |||
d1c310231d | |||
c1b164d70c | |||
2dcca3ec0a | |||
355ec28167 | |||
3e2c3d8f6d | |||
5c3a15647d | |||
362077e752 | |||
3c30fbcd4a | |||
ff4c25bae9 | |||
10ec36e2e7 | |||
68a1300556 | |||
513fc05750 | |||
e91be41e75 | |||
47d05109b0 | |||
df873c806e | |||
723d5c50c0 | |||
e3ba402581 | |||
b395f95910 | |||
6ba4b300b0 | |||
0531377076 | |||
bc72d9a3a9 | |||
0d77f746ec | |||
04dec5826d | |||
8ab785783f | |||
c0f722240d | |||
238a5a4c3d | |||
096e9048ff | |||
f1c13cf9c9 | |||
f3e99e9920 | |||
4017ec927f | |||
b30a5cee07 | |||
3207de308d | |||
3aab4d7929 | |||
33855f5d04 | |||
42accf1b67 | |||
025998eb79 | |||
c430248643 | |||
c56fe7f1d6 | |||
05fbe728ee | |||
4288b22fb2 | |||
7eadfddad5 | |||
8dcac770f1 | |||
3482191d12 | |||
4cc4b62e30 | |||
f27f616ff8 | |||
4716138229 | |||
3f4238d771 | |||
0c4bfdda42 | |||
95fdc1bc2b | |||
afa4336e94 | |||
a1801023f4 | |||
3e0623ebc8 | |||
9bf1bcc59d | |||
a04d10f739 | |||
e2822f19fd | |||
9f748277bb | |||
801a60ff88 | |||
4a92360091 | |||
1d4c4d9d4f | |||
af6b61ba06 | |||
eda0fc7a82 | |||
f246cdb5ac | |||
cff5573da2 | |||
751fec3557 | |||
d2dc5057fd | |||
d57485f73a | |||
5fadb1549d | |||
0b7480e34e | |||
7808844dd1 | |||
2b38e59bd8 | |||
b90d4722a5 | |||
419e5fb3e6 | |||
cf534a9b28 | |||
616a6f0e43 | |||
0b09b474f7 | |||
c4c68b0025 | |||
e1ecba4669 | |||
cb8b9963fe | |||
102690648d | |||
1c310eaf30 | |||
18942b9bea | |||
e0d4b0db9e | |||
2ccc4a607f | |||
286088567d | |||
fcdfa31f3c | |||
c05ec92021 | |||
8b29c45986 | |||
4c1c361127 | |||
15a280bb6d | |||
d2728cc245 | |||
df81004632 | |||
9368465f75 | |||
f367cd1388 | |||
595e26c086 | |||
5452e88c32 | |||
82f47fde6c | |||
2f1e003939 | |||
c95c90ee4a | |||
172d34298f | |||
bca060a363 | |||
78a7cb0d7a | |||
9034699cb1 | |||
ded8e894dd | |||
3d224ae669 | |||
56cec18d76 | |||
805b4407a6 | |||
2bcfd5b106 | |||
6d514728cc | |||
7c90026db9 | |||
8ac1f8f44a | |||
f9f2d3b100 | |||
42043afcdc | |||
9c8466daac | |||
612fd1573b | |||
d0cb00ab9f | |||
4165d68aaa | |||
c8c239a439 | |||
b0bfbd82d1 | |||
ba8074b807 | |||
d474dbadde | |||
bc6bb3a3e8 | |||
21fe874832 | |||
4f89138bd1 | |||
91ca45f9dc | |||
c4caab538e | |||
afb96301f3 | |||
f6957617c5 | |||
c8683f231d | |||
afe6e58aed | |||
faad9648cf | |||
c001eb5bbe | |||
9fbbcda6b7 | |||
a76530c9c7 | |||
0ed86cfb51 | |||
60f190735c | |||
756e6ab467 | |||
f2445e4de7 | |||
32b2e5a8b2 | |||
10cc08ee32 | |||
360afebfb3 | |||
700102c992 | |||
c052d8a89f | |||
13545647ba | |||
7b448cae4a | |||
35d31954d2 | |||
046b0a6972 | |||
4f20dedfd4 | |||
d9d518b1c8 | |||
8f0b03910c | |||
3ecc06f4d5 | |||
f228917a5c | |||
8f00276c8a | |||
c18a88ac48 | |||
90e4d681bc | |||
d04394288f | |||
3e952ecc52 | |||
72f8a7f197 | |||
99d24ab2e0 | |||
5a4ed59ad9 | |||
c700613b8d | |||
8fe454ce90 | |||
a7cfd709f4 | |||
25adc8f4fe | |||
cb33ee1fad | |||
c9ace552eb | |||
9a3fc7f3f7 | |||
2eaf71a6ab | |||
32f881c6c4 | |||
3d93706d0d | |||
350d6ccb91 | |||
f0495ae943 | |||
b24ed37fff | |||
d166cf76b0 | |||
5df67cdcd3 | |||
0f01192e7e | |||
b170eb99f5 | |||
87c39f0e20 | |||
ae6135bf05 | |||
e68f22ae65 | |||
6152c74595 | |||
02ee87451b | |||
22ec60001e | |||
0aaf88e800 | |||
08f680ee1b | |||
184fc07fda | |||
be9fb5affc | |||
9f902a2ed5 | |||
8ee8fd6555 | |||
99fd69c3de | |||
21d13ddc5d | |||
fad5cd2108 | |||
c471e55e10 | |||
b79ba8382e | |||
26e9fdc0bc | |||
f594cddaf2 | |||
1d7086c2ed | |||
d7320e799f | |||
7bceae0fa6 | |||
e08d2a9ad8 | |||
e17e3ed6aa | |||
342fc56f58 | |||
02af3e13b2 | |||
a89bb7d75a | |||
7b0a740542 | |||
50e9b38930 | |||
bb311b3458 | |||
53e23e99a9 | |||
bfdbae0694 | |||
c3c2cc6534 | |||
b303465d2f | |||
74e034964c | |||
c2e146bfb0 | |||
53bd0cebd3 | |||
397e6a705b | |||
e545dd4ffe | |||
055bbf45e4 | |||
098a987b98 | |||
3801831cdf | |||
3284ac046f | |||
c01ba1a48f | |||
159f4d0b30 | |||
aaa6210f81 | |||
484a0bab39 | |||
efb0839c1d | |||
e97c3109af | |||
c6ec021b3c | |||
5c6651fea2 | |||
f0b22ebea4 | |||
e1eea7470b | |||
7c741763db | |||
8f8b080263 | |||
835817806e | |||
6714fd04d2 | |||
b2e13f9c44 | |||
855d900b84 | |||
bb2eddc6cf | |||
ab6f1c9814 | |||
93f93f5161 | |||
83ed03010b | |||
9b516aa31b | |||
510fa47c2a | |||
4ce98dadcc | |||
54a38915d8 | |||
b66d1bef14 | |||
5a137f3620 | |||
df8e6918b3 | |||
d5e88b2c33 | |||
4be541a6d9 | |||
ef00a05e51 | |||
4a00c099ab | |||
6e769ebadb | |||
ff88cd5905 | |||
823b90339f | |||
8fa78dd49c | |||
65c27e2935 | |||
bc1edeb611 | |||
98b01e8f2b | |||
7033c5f20d | |||
8dd623b980 | |||
19896423f7 | |||
8973190735 | |||
1f7aa0ac56 | |||
51a3286f3e | |||
72b4139700 | |||
1d5c7a9fdf | |||
9f2bf8fd03 | |||
e95ef67b35 | |||
8a09ee4103 | |||
adb99a05b1 | |||
7fb22418ff | |||
d553554b75 | |||
3d5c139c49 | |||
75d3612ef8 | |||
5f1767e845 | |||
275155f664 | |||
16dc4ade7a | |||
c30a78c398 | |||
ef7efbc6ef | |||
6fba577e50 | |||
109593ecb0 | |||
29bce12ada | |||
24a001493a | |||
0ad35376d3 | |||
4d71ff450f | |||
78af071964 | |||
fa981fc945 | |||
d19149dda8 | |||
3f0a757e80 | |||
17cfff6f17 | |||
fb52a39928 | |||
0b7ddf9e77 | |||
c160ce3316 | |||
2f5519dcb6 | |||
b7bcb22ce2 | |||
da094fe201 | |||
4c18acffd7 | |||
549cedc6a9 | |||
c76a17b428 | |||
a3de9829d8 | |||
32b57a72de | |||
bb69630b6c | |||
7b4e5693c1 | |||
c2551bea56 | |||
9e48c22534 | |||
61ca98b054 | |||
9c3775765e | |||
d940e3bdb9 | |||
927cfaf467 | |||
91f79d27cc | |||
2f9dc36d49 | |||
1fff03ef9b | |||
8c9a29545b | |||
59cf039815 | |||
4c82f09ef0 | |||
c53ba61b21 | |||
7aeb9794d2 | |||
6be610bfaa | |||
a06710758c | |||
d9e0d8204b | |||
9619d8a62e | |||
dccf45f376 | |||
e1eb93470e | |||
af5594c88b | |||
450c927d9a | |||
e7201afdf7 | |||
c8506d6662 | |||
277bc0dcb8 | |||
f7dd3a4e62 | |||
a6f88cbd2d | |||
23cf79f07e | |||
5e31e71365 | |||
a5f8a01abb | |||
9a070e8341 | |||
487bdbd8e0 | |||
4447d2cbdf | |||
bfbbc49638 | |||
4b942fe860 | |||
69dde2e653 | |||
8611d9c3d8 | |||
c9abfadf37 | |||
7b345b69f2 | |||
c972237ee1 | |||
0f88c7c16e | |||
ed6bd4bc49 | |||
5b4071333b | |||
5edfcaae6f | |||
b54de0830a | |||
29db7a0072 | |||
0327ff0798 | |||
d98a3d4a59 | |||
08272dc8b4 | |||
9130396214 | |||
69f0b446a8 | |||
833b901cb7 | |||
74e701f8e5 | |||
99fbb3866c | |||
52d064f42d | |||
42c81d18c2 | |||
b01b53de3f | |||
3a0c717b9e | |||
f19338c66c | |||
ba61012cfc | |||
90cd148027 | |||
18262b5587 | |||
a20cc3cc4f | |||
0c42e1d9aa | |||
64484d550d | |||
caa6223a9b | |||
80e9a5cd4c | |||
134c56764f | |||
d82ef7c39d | |||
c41a21de3a | |||
99be754ada | |||
4e9953a426 | |||
529e4a5006 | |||
32f63e912d | |||
d8d9b0e058 | |||
cb0af106de | |||
9ae4ac7ac0 | |||
177db08775 | |||
e8daeeb136 | |||
1734cdb995 | |||
13a776ca0d | |||
2f667b5697 | |||
cf6d36257b | |||
03ea567327 | |||
74ff57506c | |||
b41d440e61 | |||
307f363509 | |||
6b780f744b | |||
820a2159e9 | |||
302fe95ffa | |||
db371a217d | |||
49d8c8bc0c | |||
beeea90a37 | |||
88ed9ec001 | |||
06b9c5b923 | |||
524ba58bb9 | |||
66ca7ce573 | |||
851fc8139f | |||
269ce467fc | |||
d82c6bcf30 | |||
f4384b8439 | |||
973af2362c | |||
baade4cd2b | |||
8267aea5a6 | |||
bc1b27e07e | |||
c4ac050fcb | |||
904e05a292 | |||
b43432931a | |||
6cb4acce8b | |||
e83837945c | |||
336df7966b | |||
116d6af979 | |||
cbc7025942 | |||
b2310b2913 | |||
e8d6b293d8 | |||
ee3de186b3 | |||
e7dfe00d06 | |||
51fded0be9 | |||
85f3493f34 | |||
f0293edc3f | |||
ae3315aa4a | |||
1a3f6608aa | |||
96b3716c2a | |||
e957b67061 | |||
1f24ddf6bf | |||
b2c545bf80 | |||
8a34f822e6 | |||
d145fe3bb3 | |||
c8b9fa7434 | |||
dc099b8338 | |||
d8db0f9690 | |||
74ad69b708 | |||
6e4c540d28 | |||
5ccc7f6488 | |||
8e7829f754 | |||
6da91758d7 | |||
a1a83c5874 | |||
1c8f0cbb83 | |||
33eca17f6a | |||
6fdbce1232 | |||
bbae92f8b8 | |||
d64955a91a | |||
4ba56a9410 | |||
7e4d896b5e | |||
fbdfda14a1 | |||
ea964658af | |||
2b603dcb6c | |||
5abbe04d68 | |||
9da9a3b047 | |||
6758a01b18 | |||
1b051d8652 | |||
c57ca57034 | |||
9d3a721ad5 | |||
059425ae45 | |||
4e394dea1f | |||
f8616336a3 | |||
60f99824d4 | |||
78496224f7 | |||
6f75a28d9b | |||
6e4750e057 | |||
707781fe12 | |||
34ad13536e | |||
2c2d533768 | |||
06eb22df01 | |||
7b87a30f15 | |||
4f5326c315 | |||
d09f6ba5fe | |||
a86bbc6003 | |||
b4d579de1e | |||
f9d60b1946 | |||
8fb2aeb662 | |||
d99fe011a2 | |||
13d5a6b83d | |||
3bb6bcfc79 | |||
daa8c96233 | |||
d8916dc8e2 | |||
d758e0cb64 | |||
6948b725e7 | |||
3f29d6c91f | |||
a0aec362e8 | |||
6e53293812 | |||
65aefae1a8 | |||
972f7e6e49 | |||
fbd8d6fc87 | |||
ae52342754 | |||
b72c774b88 | |||
98b942c6f5 | |||
380f326955 | |||
fe7fc1617c | |||
104046712f | |||
5547d2b81c | |||
0fe2b40d5a | |||
dcaeb74a31 | |||
95ab415417 | |||
20e1233c31 | |||
4d9e51f633 | |||
7204a9fd31 | |||
ae1232b298 | |||
9f406c5838 | |||
2a994a3b1e | |||
e1636f47ae | |||
dad3c2090d | |||
a7adac3730 | |||
6c811ed486 | |||
9707c2a8bc | |||
84f5633312 | |||
b1d6d56ceb | |||
3b0bb65dd4 | |||
2d5046d31f | |||
b2cb24f48b | |||
6235629648 | |||
33eb3567dd | |||
95ff5899b9 | |||
f582199e60 | |||
ecf75f83dc | |||
f48ab7d888 | |||
f21d49144f | |||
3b95f284f1 | |||
9c417636c4 | |||
4d82fa688e | |||
478a4d07ac | |||
011a3350be | |||
608786fc52 | |||
5e6ce1c936 | |||
9bb8064dff | |||
82ff25e108 | |||
f99b3b4b50 | |||
dbe5eb2d3a | |||
7c6b0653f3 | |||
fea83dde7b | |||
f59a941757 | |||
e970863746 | |||
50a4f49c19 | |||
284230199a | |||
8d16201fe0 | |||
9fdfd8b6af | |||
97652044af | |||
cc17f09246 | |||
9ec14bcabb | |||
13c881dcbf | |||
d336dbdb33 | |||
e7dfa468f9 | |||
f17e0e2182 | |||
9bfa132c70 | |||
b265beda55 | |||
38527c9ae0 | |||
8fcee135e8 | |||
dd8e895606 | |||
17c7795561 | |||
49556023f2 | |||
3a9ce767f1 | |||
2b094d56b5 | |||
2b045d39df | |||
c74a2a03f0 | |||
75da320087 | |||
4cfdbfc46f | |||
fd06692544 | |||
8c309caff8 | |||
77e62f132c | |||
a699793449 | |||
059d746ddb | |||
da8061eefe | |||
24d9792821 | |||
949e10911a | |||
55d76a7270 | |||
ac6b368d8a | |||
b0ed12276e | |||
7a79648532 | |||
0763a26dfe | |||
764574f7c7 | |||
cb1e7b61c8 | |||
4c8327994c | |||
5483e5736d | |||
d7cc2520f2 | |||
773a4ea5e1 | |||
ad8fa356a6 | |||
7b811a74c6 | |||
f9bb67ec6a | |||
25a5f07c69 | |||
22cf6d46f4 | |||
9b524ff040 | |||
7e976db4ea | |||
55ecc49bbc | |||
62a19475d2 | |||
e9bd9a0809 | |||
eca96694a7 | |||
6df7ccb10e | |||
115a2a3fbb | |||
87e8ff1be1 | |||
a8bb75a3e6 | |||
32d3ec7466 | |||
3ec1289896 | |||
380110cf08 | |||
a82ed6a0c3 | |||
9ae0b8349c | |||
8c60bc169f | |||
2fc056c1ba | |||
f1f28611f1 | |||
f5272027c3 | |||
c92653f4dd | |||
53c2aad88b | |||
33386276a9 | |||
6ea25cd975 | |||
ae5e55289d | |||
6fb5400fc6 | |||
866b0a7069 | |||
a001a5e28b | |||
d082e1b966 | |||
1f8a339dee | |||
93ab58595d | |||
6ac81c8ec8 | |||
659ded58ed | |||
51727c1dc0 | |||
4199f3de2e | |||
80eaa56561 | |||
2524c8434b | |||
72908c7403 | |||
d1a6c77aca | |||
4fa36f1392 | |||
7c80d07414 | |||
caef87d557 | |||
dee901c1ff | |||
6b84ee3370 | |||
54bf875aa6 | |||
4b7de948f9 | |||
34401a8b42 | |||
4ddb37c395 | |||
76da40a820 | |||
979676e3db | |||
302743f177 | |||
4e511fcc18 | |||
2d0fc93fdd | |||
d360795d60 | |||
8078a90a24 | |||
a6916977bb | |||
508aef9b0e | |||
a04699fc12 | |||
d9724a81b3 | |||
9175347828 | |||
3e1b6d7575 | |||
3ba949e8f4 | |||
a1b62f983b | |||
f88de3eb51 | |||
c3a6a1e149 | |||
2c4cdb736c | |||
04a469338d | |||
8455705959 | |||
3a6a262428 | |||
1e62643719 | |||
6e945da567 | |||
e401b0cd02 | |||
afdf014f4f | |||
2fb1362883 | |||
673adba594 | |||
f4324e3292 | |||
fd7e85ac6a | |||
8d6e3edd0e | |||
71b779a1ad | |||
4acd358a76 | |||
2afc5a7bbf | |||
78965a33e8 | |||
3e1b2fab0c | |||
ebee52f52b | |||
dc62c22532 | |||
c4b32641f1 | |||
db2f680775 | |||
3ac26e2645 | |||
c725e2dc5a | |||
489e14f258 | |||
aad764e107 | |||
3fb94eeeb2 | |||
ea7182c29f | |||
ad6c67cf85 | |||
5c5e07b84c | |||
7ca82ecbea | |||
aa1cb7e706 | |||
970b417abb | |||
fa69eb5f52 | |||
d64208888d | |||
1d5654b266 | |||
ba3bf00acf | |||
af37ce3dc7 | |||
aa69441cba | |||
720442e245 | |||
c6ba523961 | |||
3c5405149b | |||
e352b16400 | |||
693d22d417 | |||
334c539ba0 | |||
2e37bf42d2 | |||
b745817650 | |||
66d5d3f186 | |||
d26b73ca2b | |||
83ac18937e | |||
1355bdf940 | |||
8047c4bffa | |||
a495365d09 | |||
531d7dddf1 | |||
f14b4cb5a0 | |||
41a2636aa3 | |||
cda8bd1a63 | |||
4af58342ed | |||
d02ef4b84c | |||
8951328619 | |||
c80296e21a | |||
581d1cea34 | |||
1d8a00cd22 | |||
f086b8164a | |||
6aa99120fa | |||
f6e80a713f | |||
ea7c73a76f | |||
2657822e87 | |||
19028ad6dc | |||
4a410218a0 | |||
be39b3e4a5 | |||
4df34ec394 | |||
e9640b99ef | |||
4789fb2e4e | |||
bfe952c9b2 | |||
6ec8288a96 | |||
f3b1b9b184 | |||
914d1b7403 | |||
0c1587e10b | |||
91904106a2 | |||
74b32b6297 | |||
8f688c85af | |||
5373cb74bd | |||
6e0c4dce0b | |||
8e6cd41418 | |||
50f190856d | |||
00bba08d24 | |||
ebbb6bd11f | |||
255917f516 | |||
10462d5c78 | |||
d2fed854c0 | |||
57f0de4c26 | |||
191090ae27 | |||
896104c9f0 | |||
43925db7ca | |||
a7c6ce0d52 | |||
9b6bb0fef6 | |||
5f7b71b413 | |||
c74b97156f | |||
d47ab3fe61 | |||
e86417e90c | |||
1ae8eed1b4 | |||
f153501e68 | |||
a38710bd65 | |||
1d46b2e900 | |||
ff465ad203 | |||
b196220337 | |||
5990f227e9 | |||
9f28ad0026 | |||
fa9595003d | |||
2501d27e18 | |||
d776170012 | |||
5745dc123a | |||
0f590c62b2 | |||
39d91e9f88 | |||
c2cc02ea98 | |||
5240ad6580 | |||
268085c3bd | |||
428cffb1e7 | |||
29b242ad80 | |||
d3406045fd | |||
df64f4807e | |||
767e01ceb1 | |||
b1451b6c07 | |||
be622a63cd | |||
afa1029ada | |||
342c09578a | |||
40624d32fb | |||
a218c81da2 | |||
329b2b2819 | |||
61f2b6ba5f | |||
d3da21d656 | |||
e55ec69de6 | |||
787b0a2238 | |||
613f9ea8f7 | |||
fde59b4059 | |||
c31d23a787 | |||
a132fb0925 | |||
091fa6a89c | |||
3b7122c0b2 | |||
bd6083c9ba | |||
0eee075dc7 | |||
4c544e6c61 | |||
e49c9bf25c | |||
c1df2c14b5 | |||
ccc243470d | |||
dfb454cebc | |||
d8a62d9552 | |||
dced27c89e | |||
4f4fd8f7ad | |||
6cfeb9a766 | |||
85cf8d3899 | |||
676fdf8cb5 | |||
0dbc10a89e | |||
b9338ac828 | |||
5ab243b64f | |||
2d764cb472 | |||
ab4823a062 | |||
f7bd00c12c | |||
07bf96ee3f | |||
b2c6231647 | |||
4d970fd293 | |||
9d86cbcf5f | |||
53c91e999c | |||
04d2a7f253 | |||
26ff8996b1 | |||
15fd90b641 | |||
5d4b0c4c80 | |||
2d9931d20c | |||
8aee48bdaa | |||
209c2880b9 | |||
8866eed097 | |||
876c8b3bd3 | |||
0f31f7b794 | |||
86b53e59d8 | |||
5990d92192 | |||
0873b688c6 | |||
b0a510ad2a | |||
745c3e7981 | |||
6bab30d071 | |||
fbae3d6f9e | |||
6d897fc671 | |||
f4e584decf | |||
1367954702 | |||
6b98a4b2e6 | |||
319992d4b6 | |||
26b7430773 | |||
f4786c1885 | |||
7ab1c25cc5 | |||
97656536e7 | |||
5465bc0c87 | |||
9d201a5c22 | |||
26798492e3 | |||
6828535669 | |||
878cc33a6a | |||
a02f57faa9 | |||
065ecf5162 | |||
f33b5792f7 | |||
23247a1efd | |||
5759a5ccb5 | |||
8bec4ff2f1 | |||
20e4e9872d | |||
b7b5e0c833 | |||
c85013b90d | |||
243f185742 | |||
381de90375 | |||
d3505ba895 | |||
457d46ca8c | |||
d84b36263c | |||
73ce5050e0 | |||
96f28f7f10 | |||
484460ec46 | |||
228a9ec312 | |||
7e02076624 | |||
5fb0de2e4d | |||
44477c57be | |||
5bd6271f59 | |||
536d1f8746 | |||
87b7e148e9 | |||
a4ca6e5d0f | |||
884b98add5 | |||
d442599a80 | |||
3ae0ab67e6 | |||
36a9c83de4 | |||
b0f996a6b1 | |||
018044c89f | |||
f877fed36f | |||
6aa27da287 | |||
9d96f1ce90 | |||
5eb3df8bdb | |||
a784784438 | |||
6b5c9936ec | |||
279084537f | |||
c0d9dfe2a1 | |||
fef8127c5f | |||
559644ddd2 | |||
9b76b08ae4 | |||
95d3b4de71 | |||
838d8c1b6b | |||
3fd2b1e9d0 | |||
d2dff42598 | |||
6889f33e8b | |||
cfa61a950a | |||
4d8e20f6c2 | |||
46e1a426f9 | |||
c04beb5d3a | |||
2dee896593 | |||
9cf70dad0f | |||
806d4d8140 | |||
552fe4cce6 | |||
a877575a88 | |||
baf2ff7e90 | |||
12ba43222d | |||
b8fbe5d5ba | |||
458b7099b2 | |||
e5a84d74a2 | |||
b1836a254e | |||
79052a76b5 | |||
69d044c034 | |||
2c27dfaeb1 | |||
9981fc5828 | |||
390645b346 | |||
a61e9ff60d | |||
e36da1bd8a | |||
4eedfd075e | |||
9a220665e7 | |||
27b3b303d9 | |||
9cba392768 | |||
fd9c052e6d | |||
818a966510 | |||
ef696300e6 | |||
5c09b81be7 | |||
52e3b3d1bb | |||
755a09b579 | |||
10d3272ec3 | |||
646b300773 | |||
7b2723c5c1 | |||
80710c69fe | |||
99e2505210 | |||
aa84f96666 | |||
d1249910b8 | |||
8f3d1669da | |||
c005e523b2 | |||
58d26a8ee9 | |||
777ffbd0e2 | |||
02e92dc470 | |||
07862822f3 | |||
46a1168129 | |||
04323fbcb4 | |||
dad15a2e02 | |||
94f776e716 | |||
de12bee7eb | |||
7fb50e300c | |||
c1bc3d892c | |||
e570d7c4d6 | |||
9f4b49cdfc | |||
ecbca76739 | |||
b767de4bdf | |||
0a71c79a34 | |||
1afcfbdda0 | |||
7c23c34d38 | |||
d09354786a | |||
80b077ee5e | |||
4040ff6638 | |||
5d784bd6d7 | |||
24b8be890d | |||
435b9d99cc | |||
618758c9b4 | |||
1518042bf3 | |||
57d91fca64 | |||
aaa937c0b6 | |||
0472f39f8b | |||
16e7b5fa24 | |||
5fa3d775a9 | |||
6ac6238de3 | |||
920487b36d | |||
a2b5c57db8 | |||
8f8258e1df | |||
f1409fa7c6 | |||
bf7676af30 | |||
dddbfcf6d6 | |||
f043ff6308 | |||
60be9e8c0e | |||
ce521f242a | |||
430156cf32 | |||
72851bb9ef | |||
219600c94e | |||
d60299c3ec | |||
df92bab4a8 | |||
f65eda365a | |||
9bc9999b6e | |||
d81eee40c2 | |||
2050b61dec | |||
4dadfe59d5 | |||
f319b553c1 | |||
78adf5099f | |||
08d56e24b0 | |||
5cf56c4b23 | |||
8b6d1a2068 | |||
c490b469ce | |||
c2969ec7ae | |||
c58d778d73 | |||
da8127e6b3 | |||
7f197559f2 | |||
33b55fd85a | |||
ebec21eee0 | |||
35abced2a8 | |||
9279bdf757 | |||
7ec6f7bd33 | |||
59f179ce64 | |||
b77b203cac | |||
83ad88b7bd | |||
bbbdc14854 | |||
c654ba8893 | |||
e648aee0f5 | |||
099dc93b7c | |||
b794d2a572 | |||
15d52307f9 | |||
ad2bb65c4a | |||
1223910ba8 | |||
ddf3bd32ce | |||
bc7b8c7e06 | |||
5bcbb3902f | |||
6aebc1943f | |||
bc61aa1211 | |||
22af84dc52 | |||
1c3e0eabce | |||
5907403716 | |||
db536236f4 | |||
521cc44700 | |||
16d7b3908e | |||
510823018e | |||
fe383bb541 | |||
f2013c9dd1 | |||
de6431a3d6 | |||
dca1a6b46f | |||
c5d2984c42 | |||
dbbe16c26e | |||
bab4f31c78 | |||
40baa1c899 | |||
82c1740ab9 | |||
cd016a46c7 | |||
0654d274e6 | |||
2e593ba518 | |||
d5c4067d7b | |||
696becb658 | |||
f399612c56 | |||
fd52b968b5 | |||
731f9a5e56 | |||
203b361f09 | |||
811886672d | |||
2d45ae5a01 | |||
6dd8532d96 | |||
4bb4109f7b | |||
91195b4321 | |||
8644a379d7 | |||
3addd15195 | |||
b59bb93129 | |||
5298551e07 | |||
892719f657 | |||
29879b550b | |||
70e015e12f | |||
3c797404a5 | |||
869b69ea3d | |||
fcd2bd55d7 | |||
f045583372 | |||
827a992a13 | |||
12062abb89 | |||
64703c03fc | |||
ae37001d78 | |||
cdd5ef7b07 | |||
652f887144 | |||
6cc9ee9b18 | |||
6c9e2eb23b | |||
92888c803b | |||
be5ec76630 | |||
8bdd603920 | |||
0664d41b55 | |||
c329db7180 | |||
be7bc4d5cc | |||
41bf4e721e | |||
30f555c6a8 | |||
a111b9e24f | |||
086608de34 | |||
0ec9a8c2f2 | |||
df1a00559c | |||
c0e4d4329c | |||
541ff63615 | |||
11c6e094e4 | |||
2a449549c1 | |||
9b706b2703 | |||
3d308f75c1 | |||
c7d1f5980b | |||
dd09da70f2 | |||
0c92e1428f | |||
b1b5b51ae8 | |||
b6dd366ad2 | |||
4ee8092dde | |||
1cf0e3db8b | |||
d1be48f976 | |||
3ca4296f80 | |||
a2f706de93 | |||
b1746239f2 | |||
beeab55908 | |||
46e8dc710a | |||
bd83b2a371 | |||
cc0e4e8ddb | |||
c20b7c9826 | |||
1cb031a2bb | |||
03d89991f2 | |||
b0889eae6a | |||
882e768ef0 | |||
63b2edc81c | |||
dc79852af8 | |||
ba6cbb182b | |||
75e3149264 | |||
2c1a3dd878 | |||
d82ce38415 | |||
62cb8ad7ff | |||
831977df56 | |||
45ad3d6962 | |||
05e2fc51d1 | |||
196acebbce | |||
f887334dcf | |||
cb61009236 | |||
1888363d8b | |||
c4111bd0d9 | |||
f858bcb2d6 | |||
c42e1c3947 |
83
.gitignore
vendored
83
.gitignore
vendored
@ -1,19 +1,28 @@
|
|||||||
*#*#
|
*#*#
|
||||||
*.#*#
|
*.#*#
|
||||||
*.a
|
*.a
|
||||||
|
*.cov
|
||||||
*.exe
|
*.exe
|
||||||
*.gcda
|
*.gcda
|
||||||
*.gcno
|
*.gcno
|
||||||
*.gcov
|
*.gcov
|
||||||
|
*.html
|
||||||
|
*.i
|
||||||
*.la
|
*.la
|
||||||
*.lo
|
*.lo
|
||||||
|
*.loT
|
||||||
*.o
|
*.o
|
||||||
*.orig
|
*.orig
|
||||||
|
*.pyc
|
||||||
*.rej
|
*.rej
|
||||||
|
*.s
|
||||||
*~
|
*~
|
||||||
|
.deps
|
||||||
.git
|
.git
|
||||||
.git-module-status
|
.git-module-status
|
||||||
|
.libs
|
||||||
.lvimrc
|
.lvimrc
|
||||||
|
.memdump
|
||||||
.sc-start-sc_*
|
.sc-start-sc_*
|
||||||
/ABOUT-NLS
|
/ABOUT-NLS
|
||||||
/COPYING
|
/COPYING
|
||||||
@ -37,11 +46,29 @@
|
|||||||
/configure
|
/configure
|
||||||
/configure.lineno
|
/configure.lineno
|
||||||
/daemon/*_dispatch.h
|
/daemon/*_dispatch.h
|
||||||
|
/daemon/libvirt_qemud
|
||||||
|
/daemon/libvirtd
|
||||||
|
/daemon/libvirtd.init
|
||||||
|
/daemon/libvirtd.service
|
||||||
|
/daemon/libvirtd*.logrotate
|
||||||
|
/daemon/libvirtd.8
|
||||||
|
/daemon/libvirtd.8.in
|
||||||
|
/daemon/libvirtd.pod
|
||||||
|
/docs/devhelp/libvirt.devhelp
|
||||||
/docs/hvsupport.html.in
|
/docs/hvsupport.html.in
|
||||||
|
/docs/libvirt-api.xml
|
||||||
/docs/libvirt-qemu-*.xml
|
/docs/libvirt-qemu-*.xml
|
||||||
|
/docs/libvirt-refs.xml
|
||||||
|
/docs/todo.html.in
|
||||||
|
/examples/domain-events/events-c/event-test
|
||||||
|
/examples/dominfo/info1
|
||||||
|
/examples/domsuspend/suspend
|
||||||
|
/examples/hellolibvirt/hellolibvirt
|
||||||
|
/examples/openauth/openauth
|
||||||
/gnulib/lib/*
|
/gnulib/lib/*
|
||||||
/gnulib/m4/*
|
/gnulib/m4/*
|
||||||
/gnulib/tests/*
|
/gnulib/tests/*
|
||||||
|
/include/libvirt/libvirt.h
|
||||||
/libtool
|
/libtool
|
||||||
/libvirt-*.tar.gz
|
/libvirt-*.tar.gz
|
||||||
/libvirt-[0-9]*
|
/libvirt-[0-9]*
|
||||||
@ -55,26 +82,80 @@
|
|||||||
/mkinstalldirs
|
/mkinstalldirs
|
||||||
/po/*
|
/po/*
|
||||||
/proxy/
|
/proxy/
|
||||||
|
/python/generated.stamp
|
||||||
/python/generator.py.stamp
|
/python/generator.py.stamp
|
||||||
|
/python/libvirt-export.c
|
||||||
/python/libvirt-qemu-export.c
|
/python/libvirt-qemu-export.c
|
||||||
/python/libvirt-qemu.[ch]
|
/python/libvirt-qemu.[ch]
|
||||||
|
/python/libvirt.[ch]
|
||||||
|
/python/libvirt.py
|
||||||
/python/libvirt_qemu.py
|
/python/libvirt_qemu.py
|
||||||
/sc_*
|
/sc_*
|
||||||
|
/src/esx/*.generated.*
|
||||||
/src/hyperv/*.generated.*
|
/src/hyperv/*.generated.*
|
||||||
/src/libvirt_iohelper
|
/src/libvirt*.def
|
||||||
|
/src/libvirt.syms
|
||||||
|
/src/libvirt_*.stp
|
||||||
|
/src/libvirt_*helper
|
||||||
|
/src/libvirt_lxc
|
||||||
/src/locking/qemu-sanlock.conf
|
/src/locking/qemu-sanlock.conf
|
||||||
|
/src/probes.h
|
||||||
/src/remote/*_client_bodies.h
|
/src/remote/*_client_bodies.h
|
||||||
/src/remote/*_protocol.[ch]
|
/src/remote/*_protocol.[ch]
|
||||||
|
/src/rpc/virkeepaliveprotocol.[ch]
|
||||||
/src/rpc/virnetprotocol.[ch]
|
/src/rpc/virnetprotocol.[ch]
|
||||||
/src/util/virkeymaps.h
|
/src/util/virkeymaps.h
|
||||||
|
/src/virt-aa-helper
|
||||||
/tests/*.log
|
/tests/*.log
|
||||||
|
/tests/*.pid
|
||||||
|
/tests/*xml2*test
|
||||||
|
/tests/commandhelper
|
||||||
|
/tests/commandtest
|
||||||
|
/tests/conftest
|
||||||
/tests/cputest
|
/tests/cputest
|
||||||
|
/tests/domainsnapshotxml2xmltest
|
||||||
|
/tests/esxutilstest
|
||||||
|
/tests/eventtest
|
||||||
/tests/hashtest
|
/tests/hashtest
|
||||||
/tests/jsontest
|
/tests/jsontest
|
||||||
/tests/networkxml2argvtest
|
/tests/networkxml2argvtest
|
||||||
|
/tests/nodeinfotest
|
||||||
/tests/nwfilterxml2xmltest
|
/tests/nwfilterxml2xmltest
|
||||||
|
/tests/object-locking
|
||||||
|
/tests/object-locking-files.txt
|
||||||
|
/tests/object-locking.cm[ix]
|
||||||
/tests/openvzutilstest
|
/tests/openvzutilstest
|
||||||
|
/tests/qemuargv2xmltest
|
||||||
|
/tests/qemuhelptest
|
||||||
|
/tests/qemumonitortest
|
||||||
|
/tests/qemuxmlnstest
|
||||||
|
/tests/qparamtest
|
||||||
|
/tests/reconnect
|
||||||
|
/tests/secaatest
|
||||||
|
/tests/seclabeltest
|
||||||
|
/tests/sexpr2xmltest
|
||||||
/tests/shunloadtest
|
/tests/shunloadtest
|
||||||
|
/tests/sockettest
|
||||||
|
/tests/ssh
|
||||||
|
/tests/statstest
|
||||||
|
/tests/utiltest
|
||||||
|
/tests/virauthconfigtest
|
||||||
|
/tests/virbuftest
|
||||||
|
/tests/virhashtest
|
||||||
|
/tests/virkeyfiletest
|
||||||
|
/tests/virnet*test
|
||||||
|
/tests/virshtest
|
||||||
|
/tests/virtimetest
|
||||||
|
/tests/viruritest
|
||||||
|
/tests/vmx2xmltest
|
||||||
|
/tests/xencapstest
|
||||||
|
/tests/xmconfigtest
|
||||||
|
/tools/*.[18]
|
||||||
|
/tools/libvirt-guests.init
|
||||||
|
/tools/virsh
|
||||||
|
/tools/virsh-*-edit.c
|
||||||
|
/tools/virt-*-validate
|
||||||
|
/tools/virt-sanlock-cleanup
|
||||||
/update.log
|
/update.log
|
||||||
Makefile
|
Makefile
|
||||||
Makefile.in
|
Makefile.in
|
||||||
|
2
.gnulib
2
.gnulib
Submodule .gnulib updated: da1717b7f9...bb2f5640d5
3
.mailmap
3
.mailmap
@ -26,6 +26,9 @@
|
|||||||
<fsimonce@redhat.com> <federico.simoncelli@gmail.com>
|
<fsimonce@redhat.com> <federico.simoncelli@gmail.com>
|
||||||
<marcandre.lureau@redhat.com> <marcandre.lureau@gmail.com>
|
<marcandre.lureau@redhat.com> <marcandre.lureau@gmail.com>
|
||||||
<supriyak@linux.vnet.ibm.com> <supriyak@in.ibm.com>
|
<supriyak@linux.vnet.ibm.com> <supriyak@in.ibm.com>
|
||||||
|
<neil@aldur.co.uk> <neil@brightbox.co.uk>
|
||||||
|
<stefanb@us.ibm.com> <stefanb@linux.vnet.ibm.com>
|
||||||
|
<josh.durgin@dreamhost.com> <joshd@hq.newdream.net>
|
||||||
|
|
||||||
# Name consolidation:
|
# Name consolidation:
|
||||||
# Preferred author spelling <preferred email>
|
# Preferred author spelling <preferred email>
|
||||||
|
50
AUTHORS
50
AUTHORS
@ -28,6 +28,9 @@ The primary maintainers and people with commit access rights:
|
|||||||
Osier Yang <jyang@redhat.com>
|
Osier Yang <jyang@redhat.com>
|
||||||
Wen Congyang <wency@cn.fujitsu.com>
|
Wen Congyang <wency@cn.fujitsu.com>
|
||||||
Michal Prívozník <mprivozn@redhat.com>
|
Michal Prívozník <mprivozn@redhat.com>
|
||||||
|
Peter Krempa <pkrempa@redhat.com>
|
||||||
|
Christophe Fergeau <cfergeau@redhat.com>
|
||||||
|
Alex Jia <ajia@redhat.com>
|
||||||
|
|
||||||
Previous maintainers:
|
Previous maintainers:
|
||||||
Karel Zak <kzak@redhat.com>
|
Karel Zak <kzak@redhat.com>
|
||||||
@ -71,13 +74,11 @@ Patches have also been contributed by:
|
|||||||
Itamar Heim <iheim@redhat.com>
|
Itamar Heim <iheim@redhat.com>
|
||||||
Markus Armbruster <armbru@redhat.com>
|
Markus Armbruster <armbru@redhat.com>
|
||||||
Ryota Ozaki <ozaki.ryota@gmail.com>
|
Ryota Ozaki <ozaki.ryota@gmail.com>
|
||||||
James Morris <jmorris@namei.org>
|
|
||||||
Daniel J Walsh <dwalsh@redhat.com>
|
Daniel J Walsh <dwalsh@redhat.com>
|
||||||
Maximilian Wilhelm <max@rfc2324.org>
|
Maximilian Wilhelm <max@rfc2324.org>
|
||||||
Pritesh Kothari <Pritesh.Kothari@Sun.COM>
|
Pritesh Kothari <Pritesh.Kothari@Sun.COM>
|
||||||
Amit Shah <amit.shah@redhat.com>
|
Amit Shah <amit.shah@redhat.com>
|
||||||
Florian Vichot <florian.vichot@diateam.net>
|
Florian Vichot <florian.vichot@diateam.net>
|
||||||
Takahashi Tomohiro <takatom@jp.fujitsu.com>
|
|
||||||
Serge E. Hallyn <serue@us.ibm.com>
|
Serge E. Hallyn <serue@us.ibm.com>
|
||||||
Soren Hansen <soren@linux2go.dk>
|
Soren Hansen <soren@linux2go.dk>
|
||||||
Abel Míguez Rodríguez<amiguezr@pdi.ucm.es>
|
Abel Míguez Rodríguez<amiguezr@pdi.ucm.es>
|
||||||
@ -142,7 +143,7 @@ Patches have also been contributed by:
|
|||||||
Hu Tao <hutao@cn.fujitsu.com>
|
Hu Tao <hutao@cn.fujitsu.com>
|
||||||
Laurent Léonard <laurent@open-minds.org>
|
Laurent Léonard <laurent@open-minds.org>
|
||||||
MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>
|
MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>
|
||||||
Josh Durgin <joshd@hq.newdream.net>
|
Josh Durgin <josh.durgin@dreamhost.com>
|
||||||
Roopa Prabhu <roprabhu@cisco.com>
|
Roopa Prabhu <roprabhu@cisco.com>
|
||||||
Paweł Krześniak <pawel.krzesniak@gmail.com>
|
Paweł Krześniak <pawel.krzesniak@gmail.com>
|
||||||
Kay Schubert <kayegypt@web.de>
|
Kay Schubert <kayegypt@web.de>
|
||||||
@ -156,7 +157,6 @@ Patches have also been contributed by:
|
|||||||
Zdenek Styblik <stybla@turnovfree.net>
|
Zdenek Styblik <stybla@turnovfree.net>
|
||||||
Gui Jianfeng <guijianfeng@cn.fujitsu.com>
|
Gui Jianfeng <guijianfeng@cn.fujitsu.com>
|
||||||
Michal Novotny <minovotn@redhat.com>
|
Michal Novotny <minovotn@redhat.com>
|
||||||
Christophe Fergeau <cfergeau@redhat.com>
|
|
||||||
Markus Groß <gross@univention.de>
|
Markus Groß <gross@univention.de>
|
||||||
Phil Petty <phpetty@cisco.com>
|
Phil Petty <phpetty@cisco.com>
|
||||||
Taku Izumi <izumi.taku@jp.fujitsu.com>
|
Taku Izumi <izumi.taku@jp.fujitsu.com>
|
||||||
@ -183,9 +183,7 @@ Patches have also been contributed by:
|
|||||||
Guannan Ren <gren@redhat.com>
|
Guannan Ren <gren@redhat.com>
|
||||||
John Williams <john.williams@petalogix.com>
|
John Williams <john.williams@petalogix.com>
|
||||||
Michael Santos <michael.santos@gmail.com>
|
Michael Santos <michael.santos@gmail.com>
|
||||||
Alex Jia <ajia@redhat.com>
|
|
||||||
Oskari Saarenmaa <os@ohmu.fi>
|
Oskari Saarenmaa <os@ohmu.fi>
|
||||||
Peter Krempa <pkrempa@redhat.com>
|
|
||||||
Nan Zhang <nzhang@redhat.com>
|
Nan Zhang <nzhang@redhat.com>
|
||||||
Wieland Hoffmann <themineo@googlemail.com>
|
Wieland Hoffmann <themineo@googlemail.com>
|
||||||
Douglas Schilling Landgraf <dougsland@redhat.com>
|
Douglas Schilling Landgraf <dougsland@redhat.com>
|
||||||
@ -195,6 +193,46 @@ Patches have also been contributed by:
|
|||||||
Xu He Jie <xuhj@linux.vnet.ibm.com>
|
Xu He Jie <xuhj@linux.vnet.ibm.com>
|
||||||
Lei Li <lilei@linux.vnet.ibm.com>
|
Lei Li <lilei@linux.vnet.ibm.com>
|
||||||
Matthias Witte <witte@netzquadrat.de>
|
Matthias Witte <witte@netzquadrat.de>
|
||||||
|
Tang Chen <tangchen@cn.fujitsu.com>
|
||||||
|
Dan Horák <dan@danny.cz>
|
||||||
|
Sage Weil <sage@newdream.net>
|
||||||
|
David L Stevens <dlstevens@us.ibm.com>
|
||||||
|
Tyler Coumbes <coumbes@gmail.com>
|
||||||
|
Wen Ruo Lv <lvroyce@linux.vnet.ibm.com>
|
||||||
|
Patrice LACHANCE <patlachance@gmail.com>
|
||||||
|
Eli Qiao <taget@linux.vnet.ibm.com>
|
||||||
|
Michael Wood <esiotrot@gmail.com>
|
||||||
|
Bharata B Rao <bharata@linux.vnet.ibm.com>
|
||||||
|
Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
|
||||||
|
Chang Liu <lingjiao.lc@taobao.com>
|
||||||
|
Lorin Hochstein <lorin@isi.edu>
|
||||||
|
Christian Franke <nobody@nowhere.ws>
|
||||||
|
Prerna Saxena <prerna@linux.vnet.ibm.com>
|
||||||
|
Michael Ellerman <michael@ellerman.id.au>
|
||||||
|
Rommer <rommer@active.by>
|
||||||
|
Yuri Chornoivan <yurchor@ukr.net>
|
||||||
|
Deepak C Shetty <deepakcs@linux.vnet.ibm.com>
|
||||||
|
Martin Kletzander <mkletzan@redhat.com>
|
||||||
|
Laszlo Ersek <lersek@redhat.com>
|
||||||
|
Zeeshan Ali (Khattak) <zeeshanak@gnome.org>
|
||||||
|
Marcelo Cerri <mhcerri@linux.vnet.ibm.com>
|
||||||
|
Hendrik Schwartke <hendrik@os-t.de>
|
||||||
|
Ansis Atteka <aatteka@nicira.com>
|
||||||
|
Dan Wendlandt <dan@nicira.com>
|
||||||
|
Kyle Mestery <kmestery@cisco.com>
|
||||||
|
Lincoln Myers <lincoln_myers@yahoo.com>
|
||||||
|
Peter Robinson <pbrobinson@gmail.com>
|
||||||
|
Benjamin Cama <benoar@dolka.fr>
|
||||||
|
Duncan Rance <libvirt@dunquino.com>
|
||||||
|
Peng Zhou <ailvpeng25@gmail.com>
|
||||||
|
Li Zhang <zhlcindy@linux.vnet.ibm.com>
|
||||||
|
Stef Walter <stefw@gnome.org>
|
||||||
|
Christian Benvenuti <benve@cisco.com>
|
||||||
|
Ilja Livenson <ilja.livenson@gmail.com>
|
||||||
|
Stefan Bader <stefan.bader@canonical.com>
|
||||||
|
MATSUDA Daiki <matsudadik@intellilink.co.jp>
|
||||||
|
Jan Kiszka <jan.kiszka@siemens.com>
|
||||||
|
Ryan Woodsmall <rwoodsmall@gmail.com>
|
||||||
|
|
||||||
[....send patches to get your name here....]
|
[....send patches to get your name here....]
|
||||||
|
|
||||||
|
@ -882,7 +882,7 @@ Wed May 13 18:06:17 CEST 2009 Daniel Veillard <veillard@redhat.com>
|
|||||||
Wed May 13 12:34:06 BST 2009 Daniel P. Berrange <berrange@redhat.com>
|
Wed May 13 12:34:06 BST 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
* src/lxc_container.c: Replace sys/capability.h with
|
* src/lxc_container.c: Replace sys/capability.h with
|
||||||
linux/capability.h, to avoid unneccessary dependancy
|
linux/capability.h, to avoid unnecessary dependency
|
||||||
on the libcap package.
|
on the libcap package.
|
||||||
|
|
||||||
Tue May 12 16:39:06 EDT 2009 Cole Robinson <crobinso@redhat.com>
|
Tue May 12 16:39:06 EDT 2009 Cole Robinson <crobinso@redhat.com>
|
||||||
@ -3351,7 +3351,7 @@ Tue Jan 20 20:22:53 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
|
|||||||
Tue Jan 20 19:49:53 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
|
Tue Jan 20 19:49:53 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
* .x-sc_prohibit_nonreentrant: Blacklist some places where
|
* .x-sc_prohibit_nonreentrant: Blacklist some places where
|
||||||
use of non-threadsafe APIs are not neccessary to check
|
use of non-threadsafe APIs are not necessary to check
|
||||||
* Makefile.am, Makefile.maint, Makefile.nonreentrant: Add
|
* Makefile.am, Makefile.maint, Makefile.nonreentrant: Add
|
||||||
check for non-reentrant safe API calls
|
check for non-reentrant safe API calls
|
||||||
* Makefile.cfg: Temporarily disable non-reentrant check
|
* Makefile.cfg: Temporarily disable non-reentrant check
|
||||||
@ -3591,7 +3591,7 @@ Thu Jan 15 19:54:19 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
|
|||||||
* src/Makefile.am, src/threads.c, src/threads.h: Generic internal API for threads
|
* src/Makefile.am, src/threads.c, src/threads.h: Generic internal API for threads
|
||||||
* src/threads-pthread.c, src/threads-pthread.h: UNIX pthreads impl
|
* src/threads-pthread.c, src/threads-pthread.h: UNIX pthreads impl
|
||||||
* src/threads-win32.c, src/threads-win32.h: Win32 threads impl
|
* src/threads-win32.c, src/threads-win32.h: Win32 threads impl
|
||||||
* src/internal.h: Remove unnneccessary pthreads macros
|
* src/internal.h: Remove unnecessary pthreads macros
|
||||||
* src/libvirt_private.syms: Add symbols for internal threads API
|
* src/libvirt_private.syms: Add symbols for internal threads API
|
||||||
* po/POTFILES.in: Add node_device_conf.c
|
* po/POTFILES.in: Add node_device_conf.c
|
||||||
* proxy/Makefile.am: Add threads.c to build
|
* proxy/Makefile.am: Add threads.c to build
|
||||||
@ -4262,7 +4262,7 @@ Thu Dec 18 11:50:58 GMT 2008 Daniel P. Berrange <berrange@redhat.com>
|
|||||||
|
|
||||||
Misc daemon bug fixes (John Levon)
|
Misc daemon bug fixes (John Levon)
|
||||||
* qemud/qemud.c: Fix conditional for node devices
|
* qemud/qemud.c: Fix conditional for node devices
|
||||||
* qemud/remote.c: Remove unneccessary path.h include
|
* qemud/remote.c: Remove unnecessary path.h include
|
||||||
|
|
||||||
Thu Dec 18 07:47:58 +0100 2008 Jim Meyering <meyering@redhat.com>
|
Thu Dec 18 07:47:58 +0100 2008 Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
@ -5032,7 +5032,7 @@ Tue Nov 25 11:17:40 GMT 2008 Daniel P. Berrange <berrange@redhat.com>
|
|||||||
|
|
||||||
Tue Nov 25 10:49:40 GMT 2008 Daniel P. Berrange <berrange@redhat.com>
|
Tue Nov 25 10:49:40 GMT 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
* src/Makefile.am: Remove unneccessary $(builddir) usage which
|
* src/Makefile.am: Remove unnecessary $(builddir) usage which
|
||||||
breaks on older automake. Remove duplicate CFLAGS from merge
|
breaks on older automake. Remove duplicate CFLAGS from merge
|
||||||
error
|
error
|
||||||
* src/xen_unified.c: Wire up XM driver for autostart
|
* src/xen_unified.c: Wire up XM driver for autostart
|
||||||
@ -5093,7 +5093,7 @@ Mon Nov 24 19:22:40 GMT 2008 Daniel P. Berrange <berrange@redhat.com>
|
|||||||
* tests/Makefile.am, tests/sexpr2xmltest.c,
|
* tests/Makefile.am, tests/sexpr2xmltest.c,
|
||||||
tests/testutilsxen.c, tests/xencapstest.c,
|
tests/testutilsxen.c, tests/xencapstest.c,
|
||||||
tests/xmconfigtest.c, tests/xml2sexprtest.c: Disable all
|
tests/xmconfigtest.c, tests/xml2sexprtest.c: Disable all
|
||||||
Xen tests when Xen driver build is disabled. Remove unneccessary
|
Xen tests when Xen driver build is disabled. Remove unnecessary
|
||||||
WITH_XEN conditionals from source, since the entire build
|
WITH_XEN conditionals from source, since the entire build
|
||||||
is disabled in Makefile.am
|
is disabled in Makefile.am
|
||||||
|
|
||||||
@ -6822,7 +6822,7 @@ Wed Aug 20 21:05:09 BST 2008 Daniel P. Berrange <berrange@redhat.com>
|
|||||||
src/xen_unified.h, src/xend_internal.c, src/xend_internal.h,
|
src/xen_unified.h, src/xend_internal.c, src/xend_internal.h,
|
||||||
src/xm_internal.c, src/xs_internal.c, src/xs_internal.h
|
src/xm_internal.c, src/xs_internal.c, src/xs_internal.h
|
||||||
tests/testutils.h: Remove preprocessor conditions for driver
|
tests/testutils.h: Remove preprocessor conditions for driver
|
||||||
compilation. Remove unneccessary "extern C" declarations.
|
compilation. Remove unnecessary "extern C" declarations.
|
||||||
|
|
||||||
Wed Aug 20 20:42:09 BST 2008 Daniel P. Berrange <berrange@redhat.com>
|
Wed Aug 20 20:42:09 BST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
@ -7008,7 +7008,7 @@ Fri Aug 8 16:41:24 BST 2008 Daniel Berrange <berrange@redhat.com>
|
|||||||
src/storage_backend_fs.c, src/storage_backend_iscsi.c,
|
src/storage_backend_fs.c, src/storage_backend_iscsi.c,
|
||||||
src/storage_backend_logical.c, src/util.c, src/util.h,
|
src/storage_backend_logical.c, src/util.c, src/util.h,
|
||||||
src/veth.c, tests/qemuxml2argvtest.c: Fix const-correctness
|
src/veth.c, tests/qemuxml2argvtest.c: Fix const-correctness
|
||||||
of virRun and virExec, and remove unneccessary casts in callers
|
of virRun and virExec, and remove unnecessary casts in callers
|
||||||
|
|
||||||
Fri Aug 8 16:53:24 CEST 2008 Daniel Veillard <veillard@redhat.com>
|
Fri Aug 8 16:53:24 CEST 2008 Daniel Veillard <veillard@redhat.com>
|
||||||
|
|
||||||
@ -7530,7 +7530,7 @@ Wed Jul 16 16:44:27 CEST 2008 Daniel Veillard <veillard@redhat.com>
|
|||||||
|
|
||||||
Sat Jul 12 14:52:59 BST 2008 Daniel P. Berrange <berrange@redhat.com>
|
Sat Jul 12 14:52:59 BST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
* src/qemu_conf.c: Remove unneccessary c-ctype.h include
|
* src/qemu_conf.c: Remove unnecessary c-ctype.h include
|
||||||
|
|
||||||
Fri Jul 11 20:32:59 BST 2008 Daniel P. Berrange <berrange@redhat.com>
|
Fri Jul 11 20:32:59 BST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
@ -8612,7 +8612,7 @@ Thu May 1 14:10:28 EST 2008 Daniel P. Berrange <berrange@redhat.com>
|
|||||||
|
|
||||||
Tue Apr 29 12:32:28 EST 2008 Daniel P. Berrange <berrange@redhat.com>
|
Tue Apr 29 12:32:28 EST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
* configure.in: Remove compatability macros AC_CHECK_*_ONCE for
|
* configure.in: Remove compatibility macros AC_CHECK_*_ONCE for
|
||||||
now part of onceonly.m4 in gnulib/m4/
|
now part of onceonly.m4 in gnulib/m4/
|
||||||
|
|
||||||
Wed Apr 29 18:10:00 CEST 2008 Jim Meyering <meyering@redhat.com>
|
Wed Apr 29 18:10:00 CEST 2008 Jim Meyering <meyering@redhat.com>
|
||||||
@ -8628,7 +8628,7 @@ Wed Apr 29 18:10:00 CEST 2008 Jim Meyering <meyering@redhat.com>
|
|||||||
|
|
||||||
Tue Apr 29 11:54:28 EST 2008 Daniel P. Berrange <berrange@redhat.com>
|
Tue Apr 29 11:54:28 EST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
* configure.in: Add compatability macros AC_CHECK_*_ONCE for
|
* configure.in: Add compatibility macros AC_CHECK_*_ONCE for
|
||||||
older autoconf (RHEL-5 vintage)
|
older autoconf (RHEL-5 vintage)
|
||||||
|
|
||||||
Tue Apr 29 08:13:28 EST 2008 Daniel P. Berrange <berrange@redhat.com>
|
Tue Apr 29 08:13:28 EST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||||
@ -10247,7 +10247,7 @@ Fri Jan 25 12:00:00 BST 2008 Richard W.M. Jones <rjones@redhat.com>
|
|||||||
|
|
||||||
Fri Jan 25 10:46:32 CET 2008 Daniel Veillard <veillard@redhat.com>
|
Fri Jan 25 10:46:32 CET 2008 Daniel Veillard <veillard@redhat.com>
|
||||||
|
|
||||||
* src/xen_internal.c: fix an erronous use of VIR_DOMAIN_NONE instead
|
* src/xen_internal.c: fix an erroneous use of VIR_DOMAIN_NONE instead
|
||||||
of VIR_DOMAIN_NOSTATE (both defined as 0, no regression)
|
of VIR_DOMAIN_NOSTATE (both defined as 0, no regression)
|
||||||
|
|
||||||
Thu Jan 24 18:08:28 CET 2008 Daniel Veillard <veillard@redhat.com>
|
Thu Jan 24 18:08:28 CET 2008 Daniel Veillard <veillard@redhat.com>
|
||||||
@ -10283,8 +10283,8 @@ Tue Jan 22 16:27:47 EST 2008 Daniel P. Berrange <berrange@redhat.com>
|
|||||||
|
|
||||||
* configure.ac: Remove use of PKG_CHECK_EXISTS macro. Avoid
|
* configure.ac: Remove use of PKG_CHECK_EXISTS macro. Avoid
|
||||||
lines going over 80 chars wide. Make sasl check automatic
|
lines going over 80 chars wide. Make sasl check automatic
|
||||||
enable/disable as neccessary.
|
enable/disable as necessary.
|
||||||
* acinclude.m4: Added compatability macro for old pkg-config
|
* acinclude.m4: Added compatibility macro for old pkg-config
|
||||||
* src/gnutls_1_0_compat.h: Add compat for gnutls_cipher_algorithm_t
|
* src/gnutls_1_0_compat.h: Add compat for gnutls_cipher_algorithm_t
|
||||||
|
|
||||||
Mon Jan 21 18:03:47 CET 2008 Jim Meyering <meyering@redhat.com>
|
Mon Jan 21 18:03:47 CET 2008 Jim Meyering <meyering@redhat.com>
|
||||||
@ -11617,7 +11617,7 @@ Tue Oct 23 17:30:52 CEST 2007 Daniel Veillard <veillard@redhat.com>
|
|||||||
Mon Oct 22 22:33:59 CEST 2007 Daniel Veillard <veillard@redhat.com>
|
Mon Oct 22 22:33:59 CEST 2007 Daniel Veillard <veillard@redhat.com>
|
||||||
|
|
||||||
* src/xen_internal.c src/xen_unified.c src/xen_unified.h
|
* src/xen_internal.c src/xen_unified.c src/xen_unified.h
|
||||||
src/xend_internal.c src/xml.c src/xml.h: commited erronously
|
src/xend_internal.c src/xml.c src/xml.h: committed erroneously
|
||||||
the NUMA patches sent for review on the list in last commit.
|
the NUMA patches sent for review on the list in last commit.
|
||||||
But that should not affect non NUMA users so early push should
|
But that should not affect non NUMA users so early push should
|
||||||
not be a problem.
|
not be a problem.
|
||||||
@ -12117,7 +12117,7 @@ Mon Aug 13 21:18:48 EST 2007 Daniel P. Berrange <berrange@redhat.com>
|
|||||||
* src/util.h, src/util.c: Allow a file descriptor to be supplied
|
* src/util.h, src/util.c: Allow a file descriptor to be supplied
|
||||||
for STDIN when calling virExec(), or if -1, redirect from /dev/null
|
for STDIN when calling virExec(), or if -1, redirect from /dev/null
|
||||||
* src/qemu_driver.c, src/openvz_driver.c: Pass in -1 for new stdin
|
* src/qemu_driver.c, src/openvz_driver.c: Pass in -1 for new stdin
|
||||||
parameter above where neccessary. Patch from Jim Paris
|
parameter above where necessary. Patch from Jim Paris
|
||||||
|
|
||||||
Mon Aug 13 20:13:48 EST 2007 Daniel P. Berrange <berrange@redhat.com>
|
Mon Aug 13 20:13:48 EST 2007 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
@ -15485,7 +15485,7 @@ Fri Aug 4 20:19:23 EDT 2006 Daniel Berrange <berrange@redhat.com>
|
|||||||
* src/libvirt.c: Fix off-by-one in validated VCPU number (it is
|
* src/libvirt.c: Fix off-by-one in validated VCPU number (it is
|
||||||
zero based, not one based).
|
zero based, not one based).
|
||||||
* include/libvirt/libvirt.h: Add some convenience macros for
|
* include/libvirt/libvirt.h: Add some convenience macros for
|
||||||
calculating neccessary CPU map lengths & total host CPUs
|
calculating necessary CPU map lengths & total host CPUs
|
||||||
* src/virsh.c: Add 'vcpuinfo' and 'vcpumap' commands
|
* src/virsh.c: Add 'vcpuinfo' and 'vcpumap' commands
|
||||||
|
|
||||||
Fri Aug 4 14:45:25 CEST 2006 Daniel Veillard <veillard@redhat.com>
|
Fri Aug 4 14:45:25 CEST 2006 Daniel Veillard <veillard@redhat.com>
|
||||||
@ -15708,7 +15708,7 @@ Wed Jun 14 13:10:03 EDT 2006 Daniel Veillard <veillard@redhat.com>
|
|||||||
Tue Jun 13 14:06:01 EDT 2006 Daniel P. Berrange <berrange@redhat.com>
|
Tue Jun 13 14:06:01 EDT 2006 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
* src/virsh.c: use 'double' instead of 'float' when calculating
|
* src/virsh.c: use 'double' instead of 'float' when calculating
|
||||||
'CPU time' field for dominfo command, to ensure no unneccessary
|
'CPU time' field for dominfo command, to ensure no unnecessary
|
||||||
loss of precision converting from nanoseconds to seconds.
|
loss of precision converting from nanoseconds to seconds.
|
||||||
|
|
||||||
Tue Jun 13 18:35:22 EDT 2006 Daniel Veillard <veillard@redhat.com>
|
Tue Jun 13 18:35:22 EDT 2006 Daniel Veillard <veillard@redhat.com>
|
||||||
|
7
HACKING
7
HACKING
@ -496,6 +496,13 @@ following semantically named macros
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- To avoid having to check if a or b are NULL:
|
||||||
|
|
||||||
|
STREQ_NULLABLE(a, b)
|
||||||
|
STRNEQ_NULLABLE(a, b)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
25
autobuild.sh
25
autobuild.sh
@ -15,9 +15,12 @@ rm -rf build
|
|||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
|
|
||||||
|
# Run with options not normally exercised by the rpm build, for
|
||||||
|
# more complete code coverage.
|
||||||
../autogen.sh --prefix="$AUTOBUILD_INSTALL_ROOT" \
|
../autogen.sh --prefix="$AUTOBUILD_INSTALL_ROOT" \
|
||||||
--enable-test-coverage \
|
--enable-test-coverage \
|
||||||
--enable-compile-warnings=error
|
--disable-nls \
|
||||||
|
--enable-werror
|
||||||
|
|
||||||
# If the MAKEFLAGS envvar does not yet include a -j option,
|
# If the MAKEFLAGS envvar does not yet include a -j option,
|
||||||
# add -jN where N depends on the number of processors.
|
# add -jN where N depends on the number of processors.
|
||||||
@ -61,6 +64,7 @@ if [ -f /usr/bin/rpmbuild ]; then
|
|||||||
-ba --clean libvirt.spec
|
-ba --clean libvirt.spec
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Test mingw cross-compile
|
||||||
if [ -x /usr/bin/i686-pc-mingw32-gcc ]; then
|
if [ -x /usr/bin/i686-pc-mingw32-gcc ]; then
|
||||||
make distclean
|
make distclean
|
||||||
|
|
||||||
@ -70,22 +74,9 @@ if [ -x /usr/bin/i686-pc-mingw32-gcc ]; then
|
|||||||
--build=$(uname -m)-pc-linux \
|
--build=$(uname -m)-pc-linux \
|
||||||
--host=i686-pc-mingw32 \
|
--host=i686-pc-mingw32 \
|
||||||
--prefix="$AUTOBUILD_INSTALL_ROOT/i686-pc-mingw32/sys-root/mingw" \
|
--prefix="$AUTOBUILD_INSTALL_ROOT/i686-pc-mingw32/sys-root/mingw" \
|
||||||
--enable-compile-warnings=error \
|
--enable-werror \
|
||||||
--without-sasl \
|
--without-libvirtd \
|
||||||
--without-avahi \
|
--without-python
|
||||||
--without-polkit \
|
|
||||||
--without-python \
|
|
||||||
--without-xen \
|
|
||||||
--without-qemu \
|
|
||||||
--without-lxc \
|
|
||||||
--without-uml \
|
|
||||||
--without-vbox \
|
|
||||||
--without-openvz \
|
|
||||||
--without-phyp \
|
|
||||||
--without-netcf \
|
|
||||||
--without-audit \
|
|
||||||
--without-dtrace \
|
|
||||||
--without-libvirtd
|
|
||||||
|
|
||||||
make
|
make
|
||||||
make install
|
make install
|
||||||
|
@ -41,10 +41,13 @@ fi
|
|||||||
# is required. The first is just the SHA1 that selects a gnulib snapshot.
|
# is required. The first is just the SHA1 that selects a gnulib snapshot.
|
||||||
# The second ensures that whenever we change the set of gnulib modules used
|
# The second ensures that whenever we change the set of gnulib modules used
|
||||||
# by this package, we rerun bootstrap to pull in the matching set of files.
|
# by this package, we rerun bootstrap to pull in the matching set of files.
|
||||||
|
# The third ensures that whenever we change the set of local gnulib diffs,
|
||||||
|
# we rerun bootstrap to pull in those diffs.
|
||||||
bootstrap_hash()
|
bootstrap_hash()
|
||||||
{
|
{
|
||||||
git submodule status | sed 's/^[ +-]//;s/ .*//'
|
git submodule status | sed 's/^[ +-]//;s/ .*//'
|
||||||
git hash-object bootstrap.conf
|
git hash-object bootstrap.conf
|
||||||
|
git ls-tree -d HEAD gnulib/local | awk '{print $3}'
|
||||||
}
|
}
|
||||||
|
|
||||||
# Ensure that whenever we pull in a gnulib update or otherwise change to a
|
# Ensure that whenever we pull in a gnulib update or otherwise change to a
|
||||||
|
274
bootstrap
274
bootstrap
@ -1,10 +1,10 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Print a version string.
|
# Print a version string.
|
||||||
scriptversion=2011-08-11.17; # UTC
|
scriptversion=2012-04-25.17; # UTC
|
||||||
|
|
||||||
# Bootstrap this package from checked-out sources.
|
# Bootstrap this package from checked-out sources.
|
||||||
|
|
||||||
# Copyright (C) 2003-2011 Free Software Foundation, Inc.
|
# Copyright (C) 2003-2012 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -36,12 +36,12 @@ nl='
|
|||||||
LC_ALL=C
|
LC_ALL=C
|
||||||
export LC_ALL
|
export LC_ALL
|
||||||
|
|
||||||
|
# Ensure that CDPATH is not set. Otherwise, the output from cd
|
||||||
|
# would cause trouble in at least one use below.
|
||||||
|
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
|
||||||
|
|
||||||
local_gl_dir=gl
|
local_gl_dir=gl
|
||||||
|
|
||||||
# Temporary directory names.
|
|
||||||
bt='._bootmp'
|
|
||||||
bt_regex=`echo "$bt"| sed 's/\./[.]/g'`
|
|
||||||
bt2=${bt}2
|
|
||||||
me=$0
|
me=$0
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
@ -88,9 +88,12 @@ gnulib_modules=
|
|||||||
# Any gnulib files needed that are not in modules.
|
# Any gnulib files needed that are not in modules.
|
||||||
gnulib_files=
|
gnulib_files=
|
||||||
|
|
||||||
# A function to be called to edit gnulib.mk right after it's created.
|
: ${AUTOPOINT=autopoint}
|
||||||
|
: ${AUTORECONF=autoreconf}
|
||||||
|
|
||||||
|
# A function to be called right after gnulib-tool is run.
|
||||||
# Override it via your own definition in bootstrap.conf.
|
# Override it via your own definition in bootstrap.conf.
|
||||||
gnulib_mk_hook() { :; }
|
bootstrap_post_import_hook() { :; }
|
||||||
|
|
||||||
# A function to be called after everything else in this script.
|
# A function to be called after everything else in this script.
|
||||||
# Override it via your own definition in bootstrap.conf.
|
# Override it via your own definition in bootstrap.conf.
|
||||||
@ -105,6 +108,11 @@ po_download_command_format=\
|
|||||||
"rsync --delete --exclude '*.s1' -Lrtvz \
|
"rsync --delete --exclude '*.s1' -Lrtvz \
|
||||||
'translationproject.org::tp/latest/%s/' '%s'"
|
'translationproject.org::tp/latest/%s/' '%s'"
|
||||||
|
|
||||||
|
# Fallback for downloading .po files (if rsync fails).
|
||||||
|
po_download_command_format2=\
|
||||||
|
"wget --mirror -nd -q -np -A.po -P '%s' \
|
||||||
|
http://translationproject.org/latest/%s/"
|
||||||
|
|
||||||
extract_package_name='
|
extract_package_name='
|
||||||
/^AC_INIT(/{
|
/^AC_INIT(/{
|
||||||
/.*,.*,.*, */{
|
/.*,.*,.*, */{
|
||||||
@ -312,8 +320,8 @@ insert_vc_ignore() {
|
|||||||
pattern="$2"
|
pattern="$2"
|
||||||
case $vc_ignore_file in
|
case $vc_ignore_file in
|
||||||
*.gitignore)
|
*.gitignore)
|
||||||
# A .gitignore entry that does not start with `/' applies
|
# A .gitignore entry that does not start with '/' applies
|
||||||
# recursively to subdirectories, so prepend `/' to every
|
# recursively to subdirectories, so prepend '/' to every
|
||||||
# .gitignore entry.
|
# .gitignore entry.
|
||||||
pattern=`echo "$pattern" | sed s,^,/,`;;
|
pattern=`echo "$pattern" | sed s,^,/,`;;
|
||||||
esac
|
esac
|
||||||
@ -419,7 +427,7 @@ check_versions() {
|
|||||||
$use_git || continue
|
$use_git || continue
|
||||||
fi
|
fi
|
||||||
# Honor $APP variables ($TAR, $AUTOCONF, etc.)
|
# Honor $APP variables ($TAR, $AUTOCONF, etc.)
|
||||||
appvar=`echo $app | tr '[a-z]-' '[A-Z]_'`
|
appvar=`echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_'`
|
||||||
test "$appvar" = TAR && appvar=AMTAR
|
test "$appvar" = TAR && appvar=AMTAR
|
||||||
case $appvar in
|
case $appvar in
|
||||||
GZIP) ;; # Do not use $GZIP: it contains gzip options.
|
GZIP) ;; # Do not use $GZIP: it contains gzip options.
|
||||||
@ -473,6 +481,32 @@ if test $use_libtool = 1; then
|
|||||||
find_tool LIBTOOLIZE glibtoolize libtoolize
|
find_tool LIBTOOLIZE glibtoolize libtoolize
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# gnulib-tool requires at least automake and autoconf.
|
||||||
|
# If either is not listed, add it (with minimum version) as a prerequisite.
|
||||||
|
case $buildreq in
|
||||||
|
*automake*) ;;
|
||||||
|
*) buildreq="automake 1.9
|
||||||
|
$buildreq" ;;
|
||||||
|
esac
|
||||||
|
case $buildreq in
|
||||||
|
*autoconf*) ;;
|
||||||
|
*) buildreq="autoconf 2.59
|
||||||
|
$buildreq" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# When we can deduce that gnulib-tool will require patch,
|
||||||
|
# and when patch is not already listed as a prerequisite, add it, too.
|
||||||
|
if test ! -d "$local_gl_dir" \
|
||||||
|
|| find "$local_gl_dir" -name '*.diff' -exec false {} +; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
case $buildreq in
|
||||||
|
*patch*) ;;
|
||||||
|
*) buildreq="patch -
|
||||||
|
$buildreq" ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
if ! printf "$buildreq" | check_versions; then
|
if ! printf "$buildreq" | check_versions; then
|
||||||
echo >&2
|
echo >&2
|
||||||
if test -f README-prereq; then
|
if test -f README-prereq; then
|
||||||
@ -574,7 +608,7 @@ if $bootstrap_sync; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
|
gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
|
||||||
<$gnulib_tool || exit
|
<$gnulib_tool || exit $?
|
||||||
|
|
||||||
# Get translations.
|
# Get translations.
|
||||||
|
|
||||||
@ -583,6 +617,9 @@ download_po_files() {
|
|||||||
domain=$2
|
domain=$2
|
||||||
echo "$me: getting translations into $subdir for $domain..."
|
echo "$me: getting translations into $subdir for $domain..."
|
||||||
cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
|
cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
|
||||||
|
eval "$cmd" && return
|
||||||
|
# Fallback to HTTP.
|
||||||
|
cmd=`printf "$po_download_command_format2" "$subdir" "$domain"`
|
||||||
eval "$cmd"
|
eval "$cmd"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -703,56 +740,38 @@ symlink_to_dir()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cp_mark_as_generated()
|
# NOTE: we have to be careful to run both autopoint and libtoolize
|
||||||
{
|
# before gnulib-tool, since gnulib-tool is likely to provide newer
|
||||||
cp_src=$1
|
# versions of files "installed" by these two programs.
|
||||||
cp_dst=$2
|
# Then, *after* gnulib-tool (see below), we have to be careful to
|
||||||
|
# run autoreconf in such a way that it does not run either of these
|
||||||
|
# two just-pre-run programs.
|
||||||
|
|
||||||
if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
|
# Import from gettext.
|
||||||
symlink_to_dir "$GNULIB_SRCDIR" "$cp_dst"
|
with_gettext=yes
|
||||||
elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then
|
grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
|
||||||
symlink_to_dir $local_gl_dir "$cp_dst"
|
with_gettext=no
|
||||||
else
|
|
||||||
case $cp_dst in
|
|
||||||
*.[ch]) c1='/* '; c2=' */';;
|
|
||||||
*.texi) c1='@c '; c2= ;;
|
|
||||||
*.m4|*/Make*|Make*) c1='# ' ; c2= ;;
|
|
||||||
*) c1= ; c2= ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# If the destination directory doesn't exist, create it.
|
if test $with_gettext = yes; then
|
||||||
# This is required at least for "lib/uniwidth/cjk.h".
|
# Released autopoint has the tendency to install macros that have been
|
||||||
dst_dir=`dirname "$cp_dst"`
|
# obsoleted in current gnulib, so run this before gnulib-tool.
|
||||||
test -d "$dst_dir" || mkdir -p "$dst_dir"
|
echo "$0: $AUTOPOINT --force"
|
||||||
|
$AUTOPOINT --force || exit
|
||||||
|
fi
|
||||||
|
|
||||||
if test -z "$c1"; then
|
# Autoreconf runs aclocal before libtoolize, which causes spurious
|
||||||
cmp -s "$cp_src" "$cp_dst" || {
|
# warnings if the initial aclocal is confused by the libtoolized
|
||||||
# Copy the file first to get proper permissions if it
|
# (or worse out-of-date) macro directory.
|
||||||
# doesn't already exist. Then overwrite the copy.
|
# libtoolize 1.9b added the --install option; but we support back
|
||||||
echo "$me: cp -f $cp_src $cp_dst" &&
|
# to libtoolize 1.5.22, where the install action was default.
|
||||||
rm -f "$cp_dst" &&
|
if test $use_libtool = 1; then
|
||||||
cp "$cp_src" "$cp_dst-t" &&
|
install=
|
||||||
sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" &&
|
case $($LIBTOOLIZE --help) in
|
||||||
mv -f "$cp_dst-t" "$cp_dst"
|
*--install*) install=--install ;;
|
||||||
}
|
esac
|
||||||
else
|
echo "running: $LIBTOOLIZE $install --copy"
|
||||||
# Copy the file first to get proper permissions if it
|
$LIBTOOLIZE $install --copy
|
||||||
# doesn't already exist. Then overwrite the copy.
|
fi
|
||||||
cp "$cp_src" "$cp_dst-t" &&
|
|
||||||
(
|
|
||||||
echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
|
|
||||||
echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
|
|
||||||
sed "s!$bt_regex/!!g" "$cp_src"
|
|
||||||
) > $cp_dst-t &&
|
|
||||||
if cmp -s "$cp_dst-t" "$cp_dst"; then
|
|
||||||
rm -f "$cp_dst-t"
|
|
||||||
else
|
|
||||||
echo "$me: cp $cp_src $cp_dst # with edits" &&
|
|
||||||
mv -f "$cp_dst-t" "$cp_dst"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
version_controlled_file() {
|
version_controlled_file() {
|
||||||
dir=$1
|
dir=$1
|
||||||
@ -771,83 +790,17 @@ version_controlled_file() {
|
|||||||
test $found = yes
|
test $found = yes
|
||||||
}
|
}
|
||||||
|
|
||||||
slurp() {
|
|
||||||
for dir in . `(cd $1 && find * -type d -print)`; do
|
|
||||||
copied=
|
|
||||||
sep=
|
|
||||||
for file in `ls -a $1/$dir`; do
|
|
||||||
case $file in
|
|
||||||
.|..) continue;;
|
|
||||||
# FIXME: should all file names starting with "." be ignored?
|
|
||||||
.*) continue;;
|
|
||||||
esac
|
|
||||||
test -d $1/$dir/$file && continue
|
|
||||||
for excluded_file in $excluded_files; do
|
|
||||||
test "$dir/$file" = "$excluded_file" && continue 2
|
|
||||||
done
|
|
||||||
if test $file = Makefile.am && test "X$gnulib_mk" != XMakefile.am; then
|
|
||||||
copied=$copied${sep}$gnulib_mk; sep=$nl
|
|
||||||
remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
|
|
||||||
sed "$remove_intl" $1/$dir/$file |
|
|
||||||
cmp - $dir/$gnulib_mk > /dev/null || {
|
|
||||||
echo "$me: Copying $1/$dir/$file to $dir/$gnulib_mk ..." &&
|
|
||||||
rm -f $dir/$gnulib_mk &&
|
|
||||||
sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk &&
|
|
||||||
gnulib_mk_hook $dir/$gnulib_mk
|
|
||||||
}
|
|
||||||
elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
|
|
||||||
version_controlled_file $dir $file; then
|
|
||||||
echo "$me: $dir/$file overrides $1/$dir/$file"
|
|
||||||
else
|
|
||||||
copied=$copied$sep$file; sep=$nl
|
|
||||||
cp_mark_as_generated $1/$dir/$file $dir/$file
|
|
||||||
fi || exit
|
|
||||||
done
|
|
||||||
|
|
||||||
for dot_ig in x $vc_ignore; do
|
|
||||||
test $dot_ig = x && continue
|
|
||||||
ig=$dir/$dot_ig
|
|
||||||
if test -n "$copied"; then
|
|
||||||
insert_vc_ignore $ig "$copied"
|
|
||||||
# If an ignored file name ends with .in.h, then also add
|
|
||||||
# the name with just ".h". Many gnulib headers are generated,
|
|
||||||
# e.g., stdint.in.h -> stdint.h, dirent.in.h ->..., etc.
|
|
||||||
# Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed
|
|
||||||
f=`echo "$copied" |
|
|
||||||
sed '
|
|
||||||
s/\.in\.h$/.h/
|
|
||||||
s/\.sin$/.sed/
|
|
||||||
s/\.y$/.c/
|
|
||||||
s/\.gperf$/.h/
|
|
||||||
'
|
|
||||||
`
|
|
||||||
insert_vc_ignore $ig "$f"
|
|
||||||
|
|
||||||
# For files like sys_stat.in.h and sys_time.in.h, record as
|
|
||||||
# ignorable the directory we might eventually create: sys/.
|
|
||||||
f=`echo "$copied"|sed 's/sys_.*\.in\.h$/sys/'`
|
|
||||||
insert_vc_ignore $ig "$f"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Create boot temporary directories to import from gnulib and gettext.
|
|
||||||
rm -fr $bt $bt2 &&
|
|
||||||
mkdir $bt $bt2 || exit
|
|
||||||
|
|
||||||
# Import from gnulib.
|
# Import from gnulib.
|
||||||
|
|
||||||
gnulib_tool_options="\
|
gnulib_tool_options="\
|
||||||
--import\
|
--import\
|
||||||
--no-changelog\
|
--no-changelog\
|
||||||
--aux-dir $bt/$build_aux\
|
--aux-dir $build_aux\
|
||||||
--doc-base $bt/$doc_base\
|
--doc-base $doc_base\
|
||||||
--lib $gnulib_name\
|
--lib $gnulib_name\
|
||||||
--m4-base $bt/$m4_base/\
|
--m4-base $m4_base/\
|
||||||
--source-base $bt/$source_base/\
|
--source-base $source_base/\
|
||||||
--tests-base $bt/$tests_base\
|
--tests-base $tests_base\
|
||||||
--local-dir $local_gl_dir\
|
--local-dir $local_gl_dir\
|
||||||
$gnulib_tool_option_extras\
|
$gnulib_tool_option_extras\
|
||||||
"
|
"
|
||||||
@ -859,25 +812,13 @@ if test $use_libtool = 1; then
|
|||||||
fi
|
fi
|
||||||
echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
|
echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
|
||||||
$gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
|
$gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
|
||||||
slurp $bt || exit
|
|
||||||
|
|
||||||
for file in $gnulib_files; do
|
for file in $gnulib_files; do
|
||||||
symlink_to_dir "$GNULIB_SRCDIR" $file || exit
|
symlink_to_dir "$GNULIB_SRCDIR" $file || exit
|
||||||
done
|
done
|
||||||
|
|
||||||
|
bootstrap_post_import_hook \
|
||||||
# Import from gettext.
|
|| { echo >&2 "$me: bootstrap_post_import_hook failed"; exit 1; }
|
||||||
with_gettext=yes
|
|
||||||
grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
|
|
||||||
with_gettext=no
|
|
||||||
|
|
||||||
if test $with_gettext = yes; then
|
|
||||||
echo "$0: (cd $bt2; ${AUTOPOINT-autopoint}) ..."
|
|
||||||
cp configure.ac $bt2 &&
|
|
||||||
(cd $bt2 && ${AUTOPOINT-autopoint} && rm configure.ac) &&
|
|
||||||
slurp $bt2 $bt || exit
|
|
||||||
fi
|
|
||||||
rm -fr $bt $bt2 || exit
|
|
||||||
|
|
||||||
# Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
|
# Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
|
||||||
# gnulib-populated directories. Such .m4 files would cause aclocal to fail.
|
# gnulib-populated directories. Such .m4 files would cause aclocal to fail.
|
||||||
@ -891,28 +832,21 @@ find "$m4_base" "$source_base" \
|
|||||||
-depth \( -name '*.m4' -o -name '*.[ch]' \) \
|
-depth \( -name '*.m4' -o -name '*.[ch]' \) \
|
||||||
-type l -xtype l -delete > /dev/null 2>&1
|
-type l -xtype l -delete > /dev/null 2>&1
|
||||||
|
|
||||||
# Reconfigure, getting other files.
|
# Some systems (RHEL 5) are using ancient autotools, for which the
|
||||||
|
# --no-recursive option had not been invented. Detect that lack and
|
||||||
# Skip autoheader if it's not needed.
|
# omit the option when it's not supported. FIXME in 2017: remove this
|
||||||
grep -E '^[ ]*AC_CONFIG_HEADERS?\>' configure.ac >/dev/null ||
|
# hack when RHEL 5 autotools are updated, or when they become irrelevant.
|
||||||
AUTOHEADER=true
|
no_recursive=
|
||||||
|
case $($AUTORECONF --help) in
|
||||||
for command in \
|
*--no-recursive*) no_recursive=--no-recursive;;
|
||||||
libtool \
|
esac
|
||||||
"${ACLOCAL-aclocal} --force -I '$m4_base' $ACLOCAL_FLAGS" \
|
|
||||||
"${AUTOCONF-autoconf} --force" \
|
|
||||||
"${AUTOHEADER-autoheader} --force" \
|
|
||||||
"${AUTOMAKE-automake} --add-missing --copy --force-missing"
|
|
||||||
do
|
|
||||||
if test "$command" = libtool; then
|
|
||||||
test $use_libtool = 0 \
|
|
||||||
&& continue
|
|
||||||
command="${LIBTOOLIZE-libtoolize} -c -f"
|
|
||||||
fi
|
|
||||||
echo "$0: $command ..."
|
|
||||||
eval "$command" || exit
|
|
||||||
done
|
|
||||||
|
|
||||||
|
# Tell autoreconf not to invoke autopoint or libtoolize; they were run above.
|
||||||
|
echo "running: AUTOPOINT=true LIBTOOLIZE=true " \
|
||||||
|
"$AUTORECONF --verbose --install $no_recursive -I $m4_base $ACLOCAL_FLAGS"
|
||||||
|
AUTOPOINT=true LIBTOOLIZE=true \
|
||||||
|
$AUTORECONF --verbose --install $no_recursive -I $m4_base $ACLOCAL_FLAGS \
|
||||||
|
|| exit 1
|
||||||
|
|
||||||
# Get some extra files from gnulib, overriding existing files.
|
# Get some extra files from gnulib, overriding existing files.
|
||||||
for file in $gnulib_extra_files; do
|
for file in $gnulib_extra_files; do
|
||||||
@ -939,6 +873,16 @@ if test $with_gettext = yes; then
|
|||||||
}
|
}
|
||||||
' po/Makevars.template >po/Makevars || exit 1
|
' po/Makevars.template >po/Makevars || exit 1
|
||||||
|
|
||||||
|
# If the 'gettext' module is in use, grab the latest Makefile.in.in.
|
||||||
|
# If only the 'gettext-h' module is in use, assume autopoint already
|
||||||
|
# put the correct version of this file into place.
|
||||||
|
case $gnulib_modules in
|
||||||
|
*gettext-h*) ;;
|
||||||
|
*gettext*)
|
||||||
|
cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in || exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
if test -d runtime-po; then
|
if test -d runtime-po; then
|
||||||
# Similarly for runtime-po/Makevars, but not quite the same.
|
# Similarly for runtime-po/Makevars, but not quite the same.
|
||||||
rm -f runtime-po/Makevars
|
rm -f runtime-po/Makevars
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Bootstrap configuration.
|
# Bootstrap configuration.
|
||||||
|
|
||||||
# Copyright (C) 2010-2011 Red Hat, Inc.
|
# Copyright (C) 2010-2012 Red Hat, Inc.
|
||||||
|
|
||||||
# This library is free software; you can redistribute it and/or
|
# This library is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Lesser General Public
|
# modify it under the terms of the GNU Lesser General Public
|
||||||
@ -23,6 +23,7 @@ accept
|
|||||||
areadlink
|
areadlink
|
||||||
base64
|
base64
|
||||||
bind
|
bind
|
||||||
|
bitrotate
|
||||||
byteswap
|
byteswap
|
||||||
c-ctype
|
c-ctype
|
||||||
c-strcase
|
c-strcase
|
||||||
@ -40,6 +41,7 @@ environ
|
|||||||
fclose
|
fclose
|
||||||
fcntl
|
fcntl
|
||||||
fcntl-h
|
fcntl-h
|
||||||
|
fdatasync
|
||||||
ffs
|
ffs
|
||||||
fnmatch
|
fnmatch
|
||||||
fsync
|
fsync
|
||||||
@ -67,6 +69,7 @@ mkstemps
|
|||||||
mktempd
|
mktempd
|
||||||
netdb
|
netdb
|
||||||
nonblocking
|
nonblocking
|
||||||
|
openpty
|
||||||
passfd
|
passfd
|
||||||
perror
|
perror
|
||||||
physmem
|
physmem
|
||||||
@ -77,6 +80,7 @@ posix-shell
|
|||||||
pthread
|
pthread
|
||||||
pthread_sigmask
|
pthread_sigmask
|
||||||
recv
|
recv
|
||||||
|
regex
|
||||||
random_r
|
random_r
|
||||||
sched
|
sched
|
||||||
send
|
send
|
||||||
@ -100,6 +104,7 @@ sys_wait
|
|||||||
termios
|
termios
|
||||||
time_r
|
time_r
|
||||||
timegm
|
timegm
|
||||||
|
ttyname_r
|
||||||
uname
|
uname
|
||||||
useless-if-before-free
|
useless-if-before-free
|
||||||
usleep
|
usleep
|
||||||
@ -157,9 +162,10 @@ fi
|
|||||||
|
|
||||||
# Tell gnulib to:
|
# Tell gnulib to:
|
||||||
# require LGPLv2+
|
# require LGPLv2+
|
||||||
|
# apply any local diffs in gnulib/local/ dir
|
||||||
# put *.m4 files in new gnulib/m4/ dir
|
# put *.m4 files in new gnulib/m4/ dir
|
||||||
# put *.[ch] files in new gnulib/lib/ dir.
|
# put *.[ch] files in new gnulib/lib/ dir
|
||||||
# import gnulib tests in new gnulib/tests/ dir.
|
# import gnulib tests in new gnulib/tests/ dir
|
||||||
gnulib_name=libgnu
|
gnulib_name=libgnu
|
||||||
m4_base=gnulib/m4
|
m4_base=gnulib/m4
|
||||||
source_base=gnulib/lib
|
source_base=gnulib/lib
|
||||||
@ -167,7 +173,11 @@ tests_base=gnulib/tests
|
|||||||
gnulib_tool_option_extras="\
|
gnulib_tool_option_extras="\
|
||||||
--lgpl=2\
|
--lgpl=2\
|
||||||
--with-tests\
|
--with-tests\
|
||||||
|
--makefile-name=gnulib.mk\
|
||||||
|
--avoid=pt_chown\
|
||||||
|
--avoid=lock-tests\
|
||||||
"
|
"
|
||||||
|
local_gl_dir=gnulib/local
|
||||||
|
|
||||||
# Convince bootstrap to use multiple m4 directories.
|
# Convince bootstrap to use multiple m4 directories.
|
||||||
: ${ACLOCAL=aclocal}
|
: ${ACLOCAL=aclocal}
|
||||||
@ -175,6 +185,12 @@ ACLOCAL="$ACLOCAL -I m4"
|
|||||||
export ACLOCAL
|
export ACLOCAL
|
||||||
|
|
||||||
# Build prerequisites
|
# Build prerequisites
|
||||||
|
# Note that some of these programs are only required for 'make dist' to
|
||||||
|
# succeed from a fresh git checkout; not all of these programs are
|
||||||
|
# required to run 'make dist' on a tarball. As a special case, we want
|
||||||
|
# to require the equivalent of the Fedora python-devel package, but
|
||||||
|
# RHEL 5 lacks the witness python-config package; we hack around that
|
||||||
|
# old environment below.
|
||||||
buildreq="\
|
buildreq="\
|
||||||
autoconf 2.59
|
autoconf 2.59
|
||||||
automake 1.9.6
|
automake 1.9.6
|
||||||
@ -183,11 +199,22 @@ gettext 0.17
|
|||||||
git 1.5.5
|
git 1.5.5
|
||||||
gzip -
|
gzip -
|
||||||
libtool -
|
libtool -
|
||||||
|
patch -
|
||||||
perl 5.5
|
perl 5.5
|
||||||
pkg-config -
|
pkg-config -
|
||||||
|
python-config -
|
||||||
rpcgen -
|
rpcgen -
|
||||||
tar -
|
tar -
|
||||||
|
xmllint -
|
||||||
|
xsltproc -
|
||||||
"
|
"
|
||||||
|
# Use rpm as a fallback to bypass the bootstrap probe for python-config,
|
||||||
|
# for the sake of RHEL 5; without requiring it on newer systems that
|
||||||
|
# have python-config to begin with.
|
||||||
|
if `(${PYTHON_CONFIG-python-config} --version;
|
||||||
|
test $? -lt 126 || rpm -q python-devel) >/dev/null 2>&1`; then
|
||||||
|
PYTHON_CONFIG=true
|
||||||
|
fi
|
||||||
|
|
||||||
# Automake requires that ChangeLog exist.
|
# Automake requires that ChangeLog exist.
|
||||||
touch ChangeLog || exit 1
|
touch ChangeLog || exit 1
|
||||||
|
109
cfg.mk
109
cfg.mk
@ -1,5 +1,5 @@
|
|||||||
# Customize Makefile.maint. -*- makefile -*-
|
# Customize Makefile.maint. -*- makefile -*-
|
||||||
# Copyright (C) 2008-2011 Red Hat, Inc.
|
# Copyright (C) 2008-2012 Red Hat, Inc.
|
||||||
# Copyright (C) 2003-2008 Free Software Foundation, Inc.
|
# Copyright (C) 2003-2008 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
@ -36,6 +36,9 @@ generated_files = \
|
|||||||
$(srcdir)/src/remote/*_protocol.[ch] \
|
$(srcdir)/src/remote/*_protocol.[ch] \
|
||||||
$(srcdir)/gnulib/lib/*.[ch]
|
$(srcdir)/gnulib/lib/*.[ch]
|
||||||
|
|
||||||
|
# We haven't converted all scripts to using gnulib's init.sh yet.
|
||||||
|
_test_script_regex = \<\(init\|test-lib\)\.sh\>
|
||||||
|
|
||||||
# Tests not to run as part of "make distcheck".
|
# Tests not to run as part of "make distcheck".
|
||||||
local-checks-to-skip = \
|
local-checks-to-skip = \
|
||||||
changelog-check \
|
changelog-check \
|
||||||
@ -168,6 +171,7 @@ useless_free_options = \
|
|||||||
--name=xmlBufferFree \
|
--name=xmlBufferFree \
|
||||||
--name=xmlFree \
|
--name=xmlFree \
|
||||||
--name=xmlFreeDoc \
|
--name=xmlFreeDoc \
|
||||||
|
--name=xmlFreeNode \
|
||||||
--name=xmlXPathFreeContext \
|
--name=xmlXPathFreeContext \
|
||||||
--name=xmlXPathFreeObject
|
--name=xmlXPathFreeObject
|
||||||
|
|
||||||
@ -312,6 +316,12 @@ sc_prohibit_internal_functions:
|
|||||||
halt='use VIR_ macros instead of internal functions' \
|
halt='use VIR_ macros instead of internal functions' \
|
||||||
$(_sc_search_regexp)
|
$(_sc_search_regexp)
|
||||||
|
|
||||||
|
# Avoid raw malloc and free, except in documentation comments.
|
||||||
|
sc_prohibit_raw_allocation:
|
||||||
|
@prohibit='^.[^*].*\<((m|c|re)alloc|free) *\([^)]' \
|
||||||
|
halt='use VIR_ macros from memory.h instead of malloc/free' \
|
||||||
|
$(_sc_search_regexp)
|
||||||
|
|
||||||
# Avoid functions that can lead to double-close bugs.
|
# Avoid functions that can lead to double-close bugs.
|
||||||
sc_prohibit_close:
|
sc_prohibit_close:
|
||||||
@prohibit='([^>.]|^)\<[fp]?close *\(' \
|
@prohibit='([^>.]|^)\<[fp]?close *\(' \
|
||||||
@ -336,12 +346,12 @@ sc_prohibit_access_xok:
|
|||||||
|
|
||||||
# Similar to the gnulib maint.mk rule for sc_prohibit_strcmp
|
# Similar to the gnulib maint.mk rule for sc_prohibit_strcmp
|
||||||
# Use STREQLEN or STRPREFIX rather than comparing strncmp == 0, or != 0.
|
# Use STREQLEN or STRPREFIX rather than comparing strncmp == 0, or != 0.
|
||||||
|
snp_ = strncmp *\(.+\)
|
||||||
sc_prohibit_strncmp:
|
sc_prohibit_strncmp:
|
||||||
@grep -nE '! *str''ncmp *\(|\<str''ncmp *\(.+\) *[!=]=' \
|
@prohibit='! *strncmp *\(|\<$(snp_) *[!=]=|[!=]= *$(snp_)' \
|
||||||
$$($(VC_LIST_EXCEPT)) \
|
exclude=':# *define STR(N?EQLEN|PREFIX)\(' \
|
||||||
| grep -vE ':# *define STR(N?EQLEN|PREFIX)\(' && \
|
halt='$(ME): use STREQLEN or STRPREFIX instead of str''ncmp' \
|
||||||
{ echo '$(ME): use STREQLEN or STRPREFIX instead of str''ncmp' \
|
$(_sc_search_regexp)
|
||||||
1>&2; exit 1; } || :
|
|
||||||
|
|
||||||
# Use virAsprintf rather than as'printf since *strp is undefined on error.
|
# Use virAsprintf rather than as'printf since *strp is undefined on error.
|
||||||
sc_prohibit_asprintf:
|
sc_prohibit_asprintf:
|
||||||
@ -406,14 +416,26 @@ sc_prohibit_ctype_h:
|
|||||||
halt="don't use ctype.h; instead, use c-ctype.h" \
|
halt="don't use ctype.h; instead, use c-ctype.h" \
|
||||||
$(_sc_search_regexp)
|
$(_sc_search_regexp)
|
||||||
|
|
||||||
|
# Insist on correct types for [pug]id.
|
||||||
|
sc_correct_id_types:
|
||||||
|
@prohibit='\<(int|long) *[pug]id\>' \
|
||||||
|
halt="use pid_t for pid, uid_t for uid, gid_t for gid" \
|
||||||
|
$(_sc_search_regexp)
|
||||||
|
|
||||||
|
# Forbid sizeof foo or sizeof (foo), require sizeof(foo)
|
||||||
|
sc_size_of_brackets:
|
||||||
|
@prohibit='sizeof\s' \
|
||||||
|
halt='use sizeof(foo), not sizeof (foo) or sizeof foo' \
|
||||||
|
$(_sc_search_regexp)
|
||||||
|
|
||||||
# Ensure that no C source file, docs, or rng schema uses TABs for
|
# Ensure that no C source file, docs, or rng schema uses TABs for
|
||||||
# indentation. Also match *.h.in files, to get libvirt.h.in. Exclude
|
# indentation. Also match *.h.in files, to get libvirt.h.in. Exclude
|
||||||
# files in gnulib, since they're imported.
|
# files in gnulib, since they're imported.
|
||||||
space_indent_files=(\.(rng|s?[ch](\.in)?|html.in|py)|(daemon|tools)/.*\.in)
|
space_indent_files=(\.(rng|s?[ch](\.in)?|html.in|py|syms)|(daemon|tools)/.*\.in)
|
||||||
sc_TAB_in_indentation:
|
sc_TAB_in_indentation:
|
||||||
@prohibit='^ * ' \
|
@prohibit='^ * ' \
|
||||||
in_vc_files='$(space_indent_files)$$' \
|
in_vc_files='$(space_indent_files)$$' \
|
||||||
halt='indent with space, not TAB, in C, sh, html, py, and RNG schemas' \
|
halt='indent with space, not TAB, in C, sh, html, py, syms and RNG schemas' \
|
||||||
$(_sc_search_regexp)
|
$(_sc_search_regexp)
|
||||||
|
|
||||||
ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\
|
ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\
|
||||||
@ -447,6 +469,18 @@ sc_prohibit_xmlGetProp:
|
|||||||
halt='use virXMLPropString, not xmlGetProp' \
|
halt='use virXMLPropString, not xmlGetProp' \
|
||||||
$(_sc_search_regexp)
|
$(_sc_search_regexp)
|
||||||
|
|
||||||
|
# xml(ParseURI|SaveUri) doesn't handle IPv6 URIs well
|
||||||
|
sc_prohibit_xmlURI:
|
||||||
|
@prohibit='\<xml(ParseURI|SaveUri) *\(' \
|
||||||
|
halt='use virURI(Parse|Format), not xml(ParseURI|SaveUri)' \
|
||||||
|
$(_sc_search_regexp)
|
||||||
|
|
||||||
|
# we don't want old old-style return with parentheses around argument
|
||||||
|
sc_prohibit_return_as_function:
|
||||||
|
@prohibit='\<return *\(([^()]*(\([^()]*\)[^()]*)*)\) *;' \
|
||||||
|
halt='avoid extra () with return statements' \
|
||||||
|
$(_sc_search_regexp)
|
||||||
|
|
||||||
# ATTRIBUTE_UNUSED should only be applied in implementations, not
|
# ATTRIBUTE_UNUSED should only be applied in implementations, not
|
||||||
# header declarations
|
# header declarations
|
||||||
sc_avoid_attribute_unused_in_header:
|
sc_avoid_attribute_unused_in_header:
|
||||||
@ -552,11 +586,10 @@ func_re := ($(func_or))
|
|||||||
# _("...: "
|
# _("...: "
|
||||||
# "%s", _("no storage vol w..."
|
# "%s", _("no storage vol w..."
|
||||||
sc_libvirt_unmarked_diagnostics:
|
sc_libvirt_unmarked_diagnostics:
|
||||||
@grep -nE \
|
@prohibit='\<$(func_re) *\([^"]*"[^"]*[a-z]{3}' \
|
||||||
'\<$(func_re) *\([^"]*"[^"]*[a-z]{3}' $$($(VC_LIST_EXCEPT)) \
|
exclude='_\(' \
|
||||||
| grep -v '_''(' && \
|
halt='$(ME): found unmarked diagnostic(s)' \
|
||||||
{ echo '$(ME): found unmarked diagnostic(s)' 1>&2; \
|
$(_sc_search_regexp)
|
||||||
exit 1; } || :
|
|
||||||
@{ grep -nE '\<$(func_re) *\(.*;$$' $$($(VC_LIST_EXCEPT)); \
|
@{ grep -nE '\<$(func_re) *\(.*;$$' $$($(VC_LIST_EXCEPT)); \
|
||||||
grep -A1 -nE '\<$(func_re) *\(.*,$$' $$($(VC_LIST_EXCEPT)); } \
|
grep -A1 -nE '\<$(func_re) *\(.*,$$' $$($(VC_LIST_EXCEPT)); } \
|
||||||
| sed 's/_("[^"][^"]*"//;s/[ ]"%s"//' \
|
| sed 's/_("[^"][^"]*"//;s/[ ]"%s"//' \
|
||||||
@ -607,6 +640,37 @@ sc_prohibit_gettext_markup:
|
|||||||
halt='do not mark these strings for translation' \
|
halt='do not mark these strings for translation' \
|
||||||
$(_sc_search_regexp)
|
$(_sc_search_regexp)
|
||||||
|
|
||||||
|
# Our code is divided into modular subdirectories for a reason, and
|
||||||
|
# lower-level code must not include higher-level headers.
|
||||||
|
cross_dirs=$(patsubst $(srcdir)/src/%.,%,$(wildcard $(srcdir)/src/*/.))
|
||||||
|
cross_dirs_re=($(subst / ,/|,$(cross_dirs)))
|
||||||
|
sc_prohibit_cross_inclusion:
|
||||||
|
@for dir in $(cross_dirs); do \
|
||||||
|
case $$dir in \
|
||||||
|
util/) safe="util";; \
|
||||||
|
cpu/ | locking/ | network/ | rpc/ | security/) \
|
||||||
|
safe="($$dir|util|conf)";; \
|
||||||
|
xenapi/ | xenxs/ ) safe="($$dir|util|conf|xen)";; \
|
||||||
|
*) safe="($$dir|util|conf|cpu|network|locking|rpc|security)";; \
|
||||||
|
esac; \
|
||||||
|
in_vc_files="^src/$$dir" \
|
||||||
|
prohibit='^# *include .$(cross_dirs_re)' \
|
||||||
|
exclude="# *include .$$safe" \
|
||||||
|
halt='unsafe cross-directory include' \
|
||||||
|
$(_sc_search_regexp) \
|
||||||
|
done
|
||||||
|
|
||||||
|
# When converting an enum to a string, make sure that we track any new
|
||||||
|
# elements added to the enum by using a _LAST marker.
|
||||||
|
sc_require_enum_last_marker:
|
||||||
|
@grep -A1 -nE '^[^#]*VIR_ENUM_IMPL *\(' $$($(VC_LIST_EXCEPT)) \
|
||||||
|
| sed -ne '/VIR_ENUM_IMPL[^,]*,$$/N' \
|
||||||
|
-e '/VIR_ENUM_IMPL[^,]*,[^,]*[^_,][^L,][^A,][^S,][^T,],/p' \
|
||||||
|
-e '/VIR_ENUM_IMPL[^,]*,[^,]\{0,4\},/p' \
|
||||||
|
| grep . && \
|
||||||
|
{ echo '$(ME): enum impl needs to use _LAST marker' 1>&2; \
|
||||||
|
exit 1; } || :
|
||||||
|
|
||||||
# We don't use this feature of maint.mk.
|
# We don't use this feature of maint.mk.
|
||||||
prev_version_file = /dev/null
|
prev_version_file = /dev/null
|
||||||
|
|
||||||
@ -627,6 +691,7 @@ ifeq (0,$(MAKELEVEL))
|
|||||||
test -f po/Makevars || { echo 1; exit; }; \
|
test -f po/Makevars || { echo 1; exit; }; \
|
||||||
actual=$$(git submodule status | $(_submodule_hash); \
|
actual=$$(git submodule status | $(_submodule_hash); \
|
||||||
git hash-object bootstrap.conf; \
|
git hash-object bootstrap.conf; \
|
||||||
|
git ls-tree -d HEAD gnulib/local | awk '{print $$3}'; \
|
||||||
git diff .gnulib); \
|
git diff .gnulib); \
|
||||||
stamp="$$($(_submodule_hash) $(_curr_status) 2>/dev/null)"; \
|
stamp="$$($(_submodule_hash) $(_curr_status) 2>/dev/null)"; \
|
||||||
test "$$stamp" = "$$actual"; echo $$?)
|
test "$$stamp" = "$$actual"; echo $$?)
|
||||||
@ -676,13 +741,13 @@ $(srcdir)/src/remote/remote_client_bodies.h: $(srcdir)/src/remote/remote_protoco
|
|||||||
# List all syntax-check exemptions:
|
# List all syntax-check exemptions:
|
||||||
exclude_file_name_regexp--sc_avoid_strcase = ^tools/virsh\.c$$
|
exclude_file_name_regexp--sc_avoid_strcase = ^tools/virsh\.c$$
|
||||||
|
|
||||||
_src1=libvirt|fdstream|qemu/qemu_monitor|util/(command|util)|xen/xend_internal|rpc/virnetsocket
|
_src1=libvirt|fdstream|qemu/qemu_monitor|util/(command|util)|xen/xend_internal|rpc/virnetsocket|lxc/lxc_controller
|
||||||
exclude_file_name_regexp--sc_avoid_write = \
|
exclude_file_name_regexp--sc_avoid_write = \
|
||||||
^(src/($(_src1))|daemon/libvirtd|tools/console|tests/(shunload|virnettlscontext)test)\.c$$
|
^(src/($(_src1))|daemon/libvirtd|tools/console|tests/(shunload|virnettlscontext)test)\.c$$
|
||||||
|
|
||||||
exclude_file_name_regexp--sc_bindtextdomain = ^(tests|examples)/
|
exclude_file_name_regexp--sc_bindtextdomain = ^(tests|examples)/
|
||||||
|
|
||||||
exclude_file_name_regexp--sc_flags_usage = ^docs/
|
exclude_file_name_regexp--sc_flags_usage = ^(docs/|src/util/virnetdevtap\.c$$)
|
||||||
|
|
||||||
exclude_file_name_regexp--sc_libvirt_unmarked_diagnostics = \
|
exclude_file_name_regexp--sc_libvirt_unmarked_diagnostics = \
|
||||||
^src/rpc/gendispatch\.pl$$
|
^src/rpc/gendispatch\.pl$$
|
||||||
@ -704,7 +769,7 @@ exclude_file_name_regexp--sc_prohibit_close = \
|
|||||||
(\.p[yl]$$|^docs/|^(src/util/virfile\.c|src/libvirt\.c)$$)
|
(\.p[yl]$$|^docs/|^(src/util/virfile\.c|src/libvirt\.c)$$)
|
||||||
|
|
||||||
exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF = \
|
exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF = \
|
||||||
(^tests/qemuhelpdata/|\.(gif|ico|png)$$)
|
(^tests/qemuhelpdata/|\.(gif|ico|png|diff)$$)
|
||||||
|
|
||||||
_src2=src/(util/command|libvirt|lxc/lxc_controller)
|
_src2=src/(util/command|libvirt|lxc/lxc_controller)
|
||||||
exclude_file_name_regexp--sc_prohibit_fork_wrappers = \
|
exclude_file_name_regexp--sc_prohibit_fork_wrappers = \
|
||||||
@ -721,17 +786,25 @@ exclude_file_name_regexp--sc_prohibit_newline_at_end_of_diagnostic = \
|
|||||||
exclude_file_name_regexp--sc_prohibit_nonreentrant = \
|
exclude_file_name_regexp--sc_prohibit_nonreentrant = \
|
||||||
^((po|tests)/|docs/.*py$$|tools/(virsh|console)\.c$$)
|
^((po|tests)/|docs/.*py$$|tools/(virsh|console)\.c$$)
|
||||||
|
|
||||||
|
exclude_file_name_regexp--sc_prohibit_raw_allocation = \
|
||||||
|
^(src/util/memory\.[ch]|examples/.*)$$
|
||||||
|
|
||||||
exclude_file_name_regexp--sc_prohibit_readlink = ^src/util/util\.c$$
|
exclude_file_name_regexp--sc_prohibit_readlink = ^src/util/util\.c$$
|
||||||
|
|
||||||
exclude_file_name_regexp--sc_prohibit_setuid = ^src/util/util\.c$$
|
exclude_file_name_regexp--sc_prohibit_setuid = ^src/util/util\.c$$
|
||||||
|
|
||||||
exclude_file_name_regexp--sc_prohibit_sprintf = ^docs/hacking\.html\.in$$
|
exclude_file_name_regexp--sc_prohibit_sprintf = \
|
||||||
|
^(docs/hacking\.html\.in)|(examples/systemtap/.*stp)|(src/dtrace2systemtap\.pl)|(src/rpc/gensystemtap\.pl)$$
|
||||||
|
|
||||||
exclude_file_name_regexp--sc_prohibit_strncpy = \
|
exclude_file_name_regexp--sc_prohibit_strncpy = \
|
||||||
^(src/util/util|tools/virsh)\.c$$
|
^(src/util/util|tools/virsh)\.c$$
|
||||||
|
|
||||||
exclude_file_name_regexp--sc_prohibit_xmlGetProp = ^src/util/xml\.c$$
|
exclude_file_name_regexp--sc_prohibit_xmlGetProp = ^src/util/xml\.c$$
|
||||||
|
|
||||||
|
exclude_file_name_regexp--sc_prohibit_xmlURI = ^src/util/viruri\.c$$
|
||||||
|
|
||||||
|
exclude_file_name_regexp--sc_prohibit_return_as_function = \.py$$
|
||||||
|
|
||||||
exclude_file_name_regexp--sc_require_config_h = ^examples/
|
exclude_file_name_regexp--sc_require_config_h = ^examples/
|
||||||
|
|
||||||
exclude_file_name_regexp--sc_require_config_h_first = ^examples/
|
exclude_file_name_regexp--sc_require_config_h_first = ^examples/
|
||||||
@ -740,3 +813,5 @@ exclude_file_name_regexp--sc_trailing_blank = \.(fig|gif|ico|png)$$
|
|||||||
|
|
||||||
exclude_file_name_regexp--sc_unmarked_diagnostics = \
|
exclude_file_name_regexp--sc_unmarked_diagnostics = \
|
||||||
^(docs/apibuild.py|tests/virt-aa-helper-test)$$
|
^(docs/apibuild.py|tests/virt-aa-helper-test)$$
|
||||||
|
|
||||||
|
exclude_file_name_regexp--sc_size_of_brackets = cfg.mk
|
||||||
|
254
configure.ac
254
configure.ac
@ -1,9 +1,9 @@
|
|||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
dnl Copyright (C) 2005-2011 Red Hat, Inc.
|
dnl Copyright (C) 2005-2012 Red Hat, Inc.
|
||||||
dnl See COPYING.LIB for the License of this software
|
dnl See COPYING.LIB for the License of this software
|
||||||
|
|
||||||
AC_INIT([libvirt], [0.9.6], [libvir-list@redhat.com], [], [http://libvirt.org])
|
AC_INIT([libvirt], [0.9.11.1], [libvir-list@redhat.com], [], [http://libvirt.org])
|
||||||
AC_CONFIG_SRCDIR([src/libvirt.c])
|
AC_CONFIG_SRCDIR([src/libvirt.c])
|
||||||
AC_CONFIG_AUX_DIR([build-aux])
|
AC_CONFIG_AUX_DIR([build-aux])
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
@ -86,10 +86,6 @@ gl_INIT
|
|||||||
|
|
||||||
AC_TYPE_UID_T
|
AC_TYPE_UID_T
|
||||||
|
|
||||||
dnl Make sure we have an ANSI compiler
|
|
||||||
AM_C_PROTOTYPES
|
|
||||||
test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
|
|
||||||
|
|
||||||
dnl Support building Win32 DLLs (must appear *before* AM_PROG_LIBTOOL)
|
dnl Support building Win32 DLLs (must appear *before* AM_PROG_LIBTOOL)
|
||||||
AC_LIBTOOL_WIN32_DLL
|
AC_LIBTOOL_WIN32_DLL
|
||||||
|
|
||||||
@ -110,7 +106,7 @@ VERSION_SCRIPT_FLAGS=-Wl,--version-script=
|
|||||||
VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
|
VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
|
||||||
AC_MSG_RESULT([$VERSION_SCRIPT_FLAGS])
|
AC_MSG_RESULT([$VERSION_SCRIPT_FLAGS])
|
||||||
|
|
||||||
LIBVIRT_COMPILE_WARNINGS([maximum])
|
LIBVIRT_COMPILE_WARNINGS
|
||||||
|
|
||||||
AC_MSG_CHECKING([for CPUID instruction])
|
AC_MSG_CHECKING([for CPUID instruction])
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
||||||
@ -135,25 +131,47 @@ AC_CHECK_SIZEOF([long])
|
|||||||
|
|
||||||
dnl Availability of various common functions (non-fatal if missing),
|
dnl Availability of various common functions (non-fatal if missing),
|
||||||
dnl and various less common threadsafe functions
|
dnl and various less common threadsafe functions
|
||||||
AC_CHECK_FUNCS_ONCE([cfmakeraw fdatasync geteuid getgid getgrnam_r getmntent_r \
|
AC_CHECK_FUNCS_ONCE([cfmakeraw geteuid getgid getgrnam_r getmntent_r \
|
||||||
getpwuid_r getuid initgroups kill mmap posix_fallocate posix_memalign \
|
getpwuid_r getuid initgroups kill mmap posix_fallocate posix_memalign \
|
||||||
regexec sched_getaffinity])
|
regexec sched_getaffinity])
|
||||||
if test $ac_cv_func_fdatasync = no; then
|
|
||||||
AC_DEFINE([fdatasync], [fsync], [Define to fsync if you lack fdatasync])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Availability of pthread functions (if missing, win32 threading is
|
dnl Availability of pthread functions (if missing, win32 threading is
|
||||||
dnl assumed). Because of $LIB_PTHREAD, we cannot use AC_CHECK_FUNCS_ONCE.
|
dnl assumed). Because of $LIB_PTHREAD, we cannot use AC_CHECK_FUNCS_ONCE.
|
||||||
dnl LIB_PTHREAD was set during gl_INIT by gnulib.
|
dnl LIB_PTHREAD and LIBMULTITHREAD were set during gl_INIT by gnulib.
|
||||||
old_LIBS=$LIBS
|
old_LIBS=$LIBS
|
||||||
LIBS="$LIBS $LIB_PTHREAD"
|
LIBS="$LIBS $LIB_PTHREAD $LIBMULTITHREAD"
|
||||||
AC_CHECK_FUNCS([pthread_mutexattr_init])
|
AC_CHECK_FUNCS([pthread_mutexattr_init])
|
||||||
LIBS=$old_libs
|
LIBS=$old_libs
|
||||||
|
|
||||||
|
old_LIBS=$LIBS
|
||||||
|
RT_LIBS=
|
||||||
|
LIBS="$LIBS $LIB_PTHREAD -lrt"
|
||||||
|
AC_CHECK_FUNC([clock_gettime],[
|
||||||
|
AC_DEFINE([HAVE_CLOCK_GETTIME],[],[Defined if clock_gettime() exists in librt.so])
|
||||||
|
RT_LIBS=-lrt
|
||||||
|
])
|
||||||
|
LIBS=$old_libs
|
||||||
|
AC_SUBST(RT_LIBS)
|
||||||
|
|
||||||
dnl Availability of various common headers (non-fatal if missing).
|
dnl Availability of various common headers (non-fatal if missing).
|
||||||
AC_CHECK_HEADERS([pwd.h paths.h regex.h sys/un.h \
|
AC_CHECK_HEADERS([pwd.h paths.h regex.h sys/un.h \
|
||||||
sys/poll.h syslog.h mntent.h net/ethernet.h linux/magic.h \
|
sys/poll.h syslog.h mntent.h net/ethernet.h linux/magic.h \
|
||||||
sys/un.h sys/syscall.h netinet/tcp.h ifaddrs.h libtasn1.h])
|
sys/un.h sys/syscall.h netinet/tcp.h ifaddrs.h libtasn1.h \
|
||||||
|
net/if.h])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([for struct ifreq in net/if.h])
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
||||||
|
[[
|
||||||
|
#include <net/if.h>
|
||||||
|
]],
|
||||||
|
[[
|
||||||
|
struct ifreq ifr;
|
||||||
|
]])],[
|
||||||
|
AC_DEFINE([HAVE_STRUCT_IFREQ],[],[Defined if struct ifreq existsin net/if.h])
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
],[
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
])
|
||||||
|
|
||||||
dnl Our only use of libtasn1.h is in the testsuite, and can be skipped
|
dnl Our only use of libtasn1.h is in the testsuite, and can be skipped
|
||||||
dnl if the header is not present. Assume -ltasn1 is present if the
|
dnl if the header is not present. Assume -ltasn1 is present if the
|
||||||
@ -193,17 +211,22 @@ AC_PATH_PROG([UDEVADM], [udevadm], [],
|
|||||||
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
|
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
|
||||||
AC_PATH_PROG([UDEVSETTLE], [udevsettle], [],
|
AC_PATH_PROG([UDEVSETTLE], [udevsettle], [],
|
||||||
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
|
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
|
||||||
AC_PATH_PROG([MODPROBE], [modprobe], [],
|
AC_PATH_PROG([MODPROBE], [modprobe], [modprobe],
|
||||||
|
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
|
||||||
|
AC_PATH_PROG([OVSVSCTL], [ovs-vsctl], [ovs-vsctl],
|
||||||
|
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
|
||||||
|
AC_PATH_PROG([SCRUB], [scrub], [scrub],
|
||||||
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
|
[/sbin:/usr/sbin:/usr/local/sbin:$PATH])
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED([DNSMASQ],["$DNSMASQ"],
|
AC_DEFINE_UNQUOTED([DNSMASQ],["$DNSMASQ"],
|
||||||
[Location or name of the dnsmasq program])
|
[Location or name of the dnsmasq program])
|
||||||
AC_DEFINE_UNQUOTED([RADVD],["$RADVD"],
|
AC_DEFINE_UNQUOTED([RADVD],["$RADVD"],
|
||||||
[Location or name of the radvd program])
|
[Location or name of the radvd program])
|
||||||
AC_DEFINE_UNQUOTED([BRCTL],["$BRCTL"],
|
|
||||||
[Location or name of the brctl program (see bridge-utils)])
|
|
||||||
AC_DEFINE_UNQUOTED([TC],["$TC"],
|
AC_DEFINE_UNQUOTED([TC],["$TC"],
|
||||||
[Location or name of the tc profram (see iproute2)])
|
[Location or name of the tc profram (see iproute2)])
|
||||||
|
AC_DEFINE_UNQUOTED([OVSVSCTL],["$OVSVSCTL"],
|
||||||
|
[Location or name of the ovs-vsctl program])
|
||||||
|
|
||||||
if test -n "$UDEVADM"; then
|
if test -n "$UDEVADM"; then
|
||||||
AC_DEFINE_UNQUOTED([UDEVADM],["$UDEVADM"],
|
AC_DEFINE_UNQUOTED([UDEVADM],["$UDEVADM"],
|
||||||
[Location or name of the udevadm program])
|
[Location or name of the udevadm program])
|
||||||
@ -216,6 +239,8 @@ if test -n "$MODPROBE"; then
|
|||||||
AC_DEFINE_UNQUOTED([MODPROBE],["$MODPROBE"],
|
AC_DEFINE_UNQUOTED([MODPROBE],["$MODPROBE"],
|
||||||
[Location or name of the modprobe program])
|
[Location or name of the modprobe program])
|
||||||
fi
|
fi
|
||||||
|
AC_DEFINE_UNQUOTED([SCRUB],["$SCRUB"],
|
||||||
|
[Location or name of the scrub program (for wiping algorithms)])
|
||||||
|
|
||||||
dnl Specific dir for HTML output ?
|
dnl Specific dir for HTML output ?
|
||||||
AC_ARG_WITH([html-dir], [AC_HELP_STRING([--with-html-dir=path],
|
AC_ARG_WITH([html-dir], [AC_HELP_STRING([--with-html-dir=path],
|
||||||
@ -249,9 +274,10 @@ if test "$prefix" = "/usr" && test "$sysconfdir" = '${prefix}/etc' ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
dnl Make some notes about which OS we're compiling for, as the lxc and qemu
|
dnl Make some notes about which OS we're compiling for, as the lxc and qemu
|
||||||
dnl drivers require linux headers, while storage_mpath and nwfilter are also
|
dnl drivers require linux headers, and storage_mpath, dtrace, and nwfilter
|
||||||
dnl linux specific. The "network" and storage_fs drivers are known to not
|
dnl are also linux specific. The "network" and storage_fs drivers are known
|
||||||
dnl work on MacOS X presently, so we also make a note if compiling for that
|
dnl to not work on MacOS X presently, so we also make a note if compiling
|
||||||
|
dnl for that
|
||||||
|
|
||||||
with_linux=no with_osx=no
|
with_linux=no with_osx=no
|
||||||
case $host in
|
case $host in
|
||||||
@ -268,6 +294,7 @@ if test $with_linux = no; then
|
|||||||
then
|
then
|
||||||
with_qemu=no
|
with_qemu=no
|
||||||
fi
|
fi
|
||||||
|
with_dtrace=no
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AM_CONDITIONAL([WITH_LINUX], [test "$with_linux" = "yes"])
|
AM_CONDITIONAL([WITH_LINUX], [test "$with_linux" = "yes"])
|
||||||
@ -309,6 +336,12 @@ AC_ARG_WITH([remote],
|
|||||||
AC_HELP_STRING([--with-remote], [add remote driver support @<:@default=yes@:>@]),[],[with_remote=yes])
|
AC_HELP_STRING([--with-remote], [add remote driver support @<:@default=yes@:>@]),[],[with_remote=yes])
|
||||||
AC_ARG_WITH([libvirtd],
|
AC_ARG_WITH([libvirtd],
|
||||||
AC_HELP_STRING([--with-libvirtd], [add libvirtd support @<:@default=yes@:>@]),[],[with_libvirtd=yes])
|
AC_HELP_STRING([--with-libvirtd], [add libvirtd support @<:@default=yes@:>@]),[],[with_libvirtd=yes])
|
||||||
|
AC_ARG_WITH([console-lock-files],
|
||||||
|
AC_HELP_STRING([--with-console-lock-files],
|
||||||
|
[location for UUCP style lock files for console PTYs
|
||||||
|
(use auto for default paths on some platforms)
|
||||||
|
@<:@default=auto@:>@]),
|
||||||
|
[],[with_console_lock_files=auto])
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl in case someone want to build static binaries
|
dnl in case someone want to build static binaries
|
||||||
@ -333,18 +366,68 @@ dnl init script flavor
|
|||||||
dnl
|
dnl
|
||||||
AC_MSG_CHECKING([for init script flavor])
|
AC_MSG_CHECKING([for init script flavor])
|
||||||
AC_ARG_WITH([init-script],
|
AC_ARG_WITH([init-script],
|
||||||
[AC_HELP_STRING([--with-init-script=@<:@redhat|auto|none@:>@],
|
[AC_HELP_STRING([--with-init-script@<:@=STYLE@:>@],
|
||||||
[Style of init script to install @<:@default=auto@:>@])])
|
[Style of init script to install: redhat, systemd, systemd+redhat,
|
||||||
if test "x$with_init_script" = "x" || test "x$with_init_script" = "xauto"; then
|
upstart, auto, none @<:@default=auto@:>@])],[],[with_init_script=check])
|
||||||
if test "$cross_compiling" = yes || test ! -f /etc/redhat-release; then
|
init_redhat=no
|
||||||
with_init_script=none
|
init_systemd=no
|
||||||
else
|
init_upstart=no
|
||||||
with_init_script=redhat
|
case "$with_init_script" in
|
||||||
fi
|
systemd+redhat)
|
||||||
fi
|
init_redhat=yes
|
||||||
AM_CONDITIONAL([LIBVIRT_INIT_SCRIPT_RED_HAT], test x$with_init_script = xredhat)
|
init_systemd=yes
|
||||||
|
;;
|
||||||
|
systemd)
|
||||||
|
init_systemd=yes
|
||||||
|
;;
|
||||||
|
upstart)
|
||||||
|
init_upstart=yes
|
||||||
|
;;
|
||||||
|
redhat)
|
||||||
|
init_redhat=yes
|
||||||
|
;;
|
||||||
|
none)
|
||||||
|
;;
|
||||||
|
check)
|
||||||
|
if test "$cross_compiling" != yes && test -f /etc/redhat-release; then
|
||||||
|
init_redhat=yes
|
||||||
|
with_init_script=redhat
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_MSG_ERROR([Unknown initscript flavour $with_init_script])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
AM_CONDITIONAL([LIBVIRT_INIT_SCRIPT_RED_HAT], test "$init_redhat" = "yes")
|
||||||
|
AM_CONDITIONAL([LIBVIRT_INIT_SCRIPT_UPSTART], test "$init_upstart" = "yes")
|
||||||
|
AM_CONDITIONAL([LIBVIRT_INIT_SCRIPT_SYSTEMD], test "$init_systemd" = "yes")
|
||||||
AC_MSG_RESULT($with_init_script)
|
AC_MSG_RESULT($with_init_script)
|
||||||
|
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([for whether to install sysctl config])
|
||||||
|
AC_ARG_WITH([sysctl],
|
||||||
|
[AC_HELP_STRING([--with-sysctl@<:@=yes/no@:>@],
|
||||||
|
[Whether to install sysctl configs @<:@default=auto@:>@])],
|
||||||
|
[],[with_sysctl=check])
|
||||||
|
|
||||||
|
if test "$with_sysctl" = "yes" || test "$with_sysctl" = "check"
|
||||||
|
then
|
||||||
|
case $host in
|
||||||
|
*-*-linux*)
|
||||||
|
with_sysctl=yes
|
||||||
|
;;
|
||||||
|
**)
|
||||||
|
if test "$with_sysctl" = "yes"; then
|
||||||
|
AC_MSG_ERROR([No sysctl configuration supported for $host])
|
||||||
|
else
|
||||||
|
with_sysctl=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
AM_CONDITIONAL([WITH_SYSCTL], test "$with_sysctl" = "yes")
|
||||||
|
AC_MSG_RESULT($with_sysctl)
|
||||||
|
|
||||||
dnl RHEL-5 has a peculiar version of Xen, which requires some special casing
|
dnl RHEL-5 has a peculiar version of Xen, which requires some special casing
|
||||||
AC_ARG_WITH([rhel5-api],
|
AC_ARG_WITH([rhel5-api],
|
||||||
[AC_HELP_STRING([--with-rhel5-api=@<:@ARG@:>@],
|
[AC_HELP_STRING([--with-rhel5-api=@<:@ARG@:>@],
|
||||||
@ -690,16 +773,18 @@ fi
|
|||||||
if test "$with_lxc" = "yes" || test "$with_lxc" = "check"; then
|
if test "$with_lxc" = "yes" || test "$with_lxc" = "check"; then
|
||||||
AC_TRY_LINK([
|
AC_TRY_LINK([
|
||||||
#include <sched.h>
|
#include <sched.h>
|
||||||
|
#include <linux/loop.h>
|
||||||
|
#include <sys/epoll.h>
|
||||||
], [
|
], [
|
||||||
unshare (1);
|
unshare (!(LO_FLAGS_AUTOCLEAR + EPOLL_CLOEXEC));
|
||||||
], [
|
], [
|
||||||
with_lxc=yes
|
with_lxc=yes
|
||||||
], [
|
], [
|
||||||
if test "$with_lxc" = "check"; then
|
if test "$with_lxc" = "check"; then
|
||||||
with_lxc=no
|
with_lxc=no
|
||||||
AC_MSG_NOTICE([Function unshare() not present in <sched.h> header but required for LXC driver, disabling it])
|
AC_MSG_NOTICE([Required kernel features were not found, disabling LXC])
|
||||||
else
|
else
|
||||||
AC_MSG_ERROR([Function unshare() not present in <sched.h> header, but required for LXC driver])
|
AC_MSG_ERROR([Required kernel features for LXC were not found])
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
fi
|
fi
|
||||||
@ -1152,12 +1237,36 @@ AM_CONDITIONAL([HAVE_AUDIT], [test "$with_audit" = "yes"])
|
|||||||
AC_SUBST([AUDIT_CFLAGS])
|
AC_SUBST([AUDIT_CFLAGS])
|
||||||
AC_SUBST([AUDIT_LIBS])
|
AC_SUBST([AUDIT_LIBS])
|
||||||
|
|
||||||
|
dnl UUCP style file locks for PTY consoles
|
||||||
|
if test "$with_console_lock_files" != "no"; then
|
||||||
|
case $with_console_lock_files in
|
||||||
|
yes | auto)
|
||||||
|
dnl Default locations for platforms, or disable if unknown
|
||||||
|
if test "$with_linux" = "yes"; then
|
||||||
|
with_console_lock_files=/var/lock
|
||||||
|
elif test "$with_console_lock_files" = "auto"; then
|
||||||
|
with_console_lock_files=no
|
||||||
|
fi ;;
|
||||||
|
esac
|
||||||
|
if test "$with_console_lock_files" = "yes"; then
|
||||||
|
AC_MSG_ERROR([You must specify path for the lock files on this
|
||||||
|
platform])
|
||||||
|
fi
|
||||||
|
AC_DEFINE_UNQUOTED([VIR_PTY_LOCK_FILE_PATH], "$with_console_lock_files",
|
||||||
|
[path to directory containing UUCP pty lock files])
|
||||||
|
fi
|
||||||
|
AM_CONDITIONAL([VIR_PTY_LOCK_FILE_PATH], [test "$with_console_lock_files" != "no"])
|
||||||
|
|
||||||
|
|
||||||
dnl SELinux
|
dnl SELinux
|
||||||
AC_ARG_WITH([selinux],
|
AC_ARG_WITH([selinux],
|
||||||
AC_HELP_STRING([--with-selinux], [use SELinux to manage security @<:@default=check@:>@]),
|
AC_HELP_STRING([--with-selinux], [use SELinux to manage security @<:@default=check@:>@]),
|
||||||
[],
|
[],
|
||||||
[with_selinux=check])
|
[with_selinux=check])
|
||||||
|
AC_ARG_WITH([selinux_mount],
|
||||||
|
AC_HELP_STRING([--with-selinux-mount], [set SELinux mount point @<:@default=check@:>@]),
|
||||||
|
[],
|
||||||
|
[with_selinux_mount=check])
|
||||||
|
|
||||||
SELINUX_CFLAGS=
|
SELINUX_CFLAGS=
|
||||||
SELINUX_LIBS=
|
SELINUX_LIBS=
|
||||||
@ -1181,7 +1290,20 @@ if test "$with_selinux" != "no"; then
|
|||||||
LIBS="$old_libs"
|
LIBS="$old_libs"
|
||||||
fi
|
fi
|
||||||
if test "$with_selinux" = "yes"; then
|
if test "$with_selinux" = "yes"; then
|
||||||
|
AC_MSG_CHECKING([SELinux mount point])
|
||||||
|
if test "$with_selinux_mount" = "check" || test -z "$with_selinux_mount"; then
|
||||||
|
if test -d /sys/fs/selinux ; then
|
||||||
|
SELINUX_MOUNT=/sys/fs/selinux
|
||||||
|
else
|
||||||
|
SELINUX_MOUNT=/selinux
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
SELINUX_MOUNT=$with_selinux_mount
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$SELINUX_MOUNT])
|
||||||
|
|
||||||
SELINUX_LIBS="-lselinux"
|
SELINUX_LIBS="-lselinux"
|
||||||
|
AC_DEFINE_UNQUOTED([SELINUX_MOUNT], ["$SELINUX_MOUNT"], [SELinux mount point])
|
||||||
AC_DEFINE_UNQUOTED([HAVE_SELINUX], 1, [whether basic SELinux functionality is available])
|
AC_DEFINE_UNQUOTED([HAVE_SELINUX], 1, [whether basic SELinux functionality is available])
|
||||||
dnl We prefer to use <selinux/label.h> and selabel_open, but can fall
|
dnl We prefer to use <selinux/label.h> and selabel_open, but can fall
|
||||||
dnl back to matchpathcon for the sake of RHEL 5's version of libselinux.
|
dnl back to matchpathcon for the sake of RHEL 5's version of libselinux.
|
||||||
@ -1324,10 +1446,10 @@ if test "$with_dtrace" != "no" ; then
|
|||||||
with_dtrace=yes
|
with_dtrace=yes
|
||||||
fi
|
fi
|
||||||
if test "$with_dtrace" = "yes"; then
|
if test "$with_dtrace" = "yes"; then
|
||||||
AC_DEFINE_UNQUOTED([WITH_DTRACE], 1, [whether DTrace static probes are available])
|
AC_DEFINE_UNQUOTED([WITH_DTRACE_PROBES], 1, [whether DTrace static probes are available])
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
AM_CONDITIONAL([WITH_DTRACE], [test "$with_dtrace" != "no"])
|
AM_CONDITIONAL([WITH_DTRACE_PROBES], [test "$with_dtrace" != "no"])
|
||||||
|
|
||||||
|
|
||||||
dnl NUMA lib
|
dnl NUMA lib
|
||||||
@ -1365,6 +1487,29 @@ AM_CONDITIONAL([HAVE_NUMACTL], [test "$with_numactl" != "no"])
|
|||||||
AC_SUBST([NUMACTL_CFLAGS])
|
AC_SUBST([NUMACTL_CFLAGS])
|
||||||
AC_SUBST([NUMACTL_LIBS])
|
AC_SUBST([NUMACTL_LIBS])
|
||||||
|
|
||||||
|
dnl numad
|
||||||
|
AC_ARG_WITH([numad],
|
||||||
|
AC_HELP_STRING([--with-numad], [use numad to manage CPU placement dynamically @<:@default=check@:>@]),
|
||||||
|
[],
|
||||||
|
[with_numad=check])
|
||||||
|
|
||||||
|
if test "$with_numad" != "no" ; then
|
||||||
|
AC_PATH_PROG([NUMAD], [numad], [], [/bin:/usr/bin])
|
||||||
|
if test -z "$NUMAD" ; then
|
||||||
|
if test "$with_numad" = "check"; then
|
||||||
|
with_numad="no"
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR([You must install the 'numad' to manage CPU placement dynamically])
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
with_numad="yes"
|
||||||
|
fi
|
||||||
|
if test "$with_numad" = "yes"; then
|
||||||
|
AC_DEFINE_UNQUOTED([HAVE_NUMAD], 1, [whether numad is available])
|
||||||
|
AC_DEFINE_UNQUOTED([NUMAD],["$NUMAD"], [Location or name of the numad program])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
AM_CONDITIONAL([HAVE_NUMAD], [test "$with_numad" != "no"])
|
||||||
|
|
||||||
dnl pcap lib
|
dnl pcap lib
|
||||||
LIBPCAP_CONFIG="pcap-config"
|
LIBPCAP_CONFIG="pcap-config"
|
||||||
@ -1569,6 +1714,9 @@ AC_ARG_WITH([netcf],
|
|||||||
|
|
||||||
NETCF_CFLAGS=
|
NETCF_CFLAGS=
|
||||||
NETCF_LIBS=
|
NETCF_LIBS=
|
||||||
|
if test "$with_libvirtd" = "no" ; then
|
||||||
|
with_netcf=no
|
||||||
|
fi
|
||||||
if test "$with_netcf" = "yes" || test "$with_netcf" = "check"; then
|
if test "$with_netcf" = "yes" || test "$with_netcf" = "check"; then
|
||||||
PKG_CHECK_MODULES(NETCF, netcf >= $NETCF_REQUIRED,
|
PKG_CHECK_MODULES(NETCF, netcf >= $NETCF_REQUIRED,
|
||||||
[with_netcf=yes], [
|
[with_netcf=yes], [
|
||||||
@ -1693,6 +1841,7 @@ if test "$with_storage_lvm" = "yes" || test "$with_storage_lvm" = "check"; then
|
|||||||
AC_PATH_PROG([PVREMOVE], [pvremove], [], [$PATH:/sbin:/usr/sbin])
|
AC_PATH_PROG([PVREMOVE], [pvremove], [], [$PATH:/sbin:/usr/sbin])
|
||||||
AC_PATH_PROG([VGREMOVE], [vgremove], [], [$PATH:/sbin:/usr/sbin])
|
AC_PATH_PROG([VGREMOVE], [vgremove], [], [$PATH:/sbin:/usr/sbin])
|
||||||
AC_PATH_PROG([LVREMOVE], [lvremove], [], [$PATH:/sbin:/usr/sbin])
|
AC_PATH_PROG([LVREMOVE], [lvremove], [], [$PATH:/sbin:/usr/sbin])
|
||||||
|
AC_PATH_PROG([LVCHANGE], [lvchange], [], [$PATH:/sbin:/usr/sbin])
|
||||||
AC_PATH_PROG([VGCHANGE], [vgchange], [], [$PATH:/sbin:/usr/sbin])
|
AC_PATH_PROG([VGCHANGE], [vgchange], [], [$PATH:/sbin:/usr/sbin])
|
||||||
AC_PATH_PROG([VGSCAN], [vgscan], [], [$PATH:/sbin:/usr/sbin])
|
AC_PATH_PROG([VGSCAN], [vgscan], [], [$PATH:/sbin:/usr/sbin])
|
||||||
AC_PATH_PROG([PVS], [pvs], [], [$PATH:/sbin:/usr/sbin])
|
AC_PATH_PROG([PVS], [pvs], [], [$PATH:/sbin:/usr/sbin])
|
||||||
@ -1706,6 +1855,7 @@ if test "$with_storage_lvm" = "yes" || test "$with_storage_lvm" = "check"; then
|
|||||||
if test -z "$PVREMOVE" ; then AC_MSG_ERROR([We need pvremove for LVM storage driver]) ; fi
|
if test -z "$PVREMOVE" ; then AC_MSG_ERROR([We need pvremove for LVM storage driver]) ; fi
|
||||||
if test -z "$VGREMOVE" ; then AC_MSG_ERROR([We need vgremove for LVM storage driver]) ; fi
|
if test -z "$VGREMOVE" ; then AC_MSG_ERROR([We need vgremove for LVM storage driver]) ; fi
|
||||||
if test -z "$LVREMOVE" ; then AC_MSG_ERROR([We need lvremove for LVM storage driver]) ; fi
|
if test -z "$LVREMOVE" ; then AC_MSG_ERROR([We need lvremove for LVM storage driver]) ; fi
|
||||||
|
if test -z "$LVCHANGE" ; then AC_MSG_ERROR([We need lvchange for LVM storage driver]) ; fi
|
||||||
if test -z "$VGCHANGE" ; then AC_MSG_ERROR([We need vgchange for LVM storage driver]) ; fi
|
if test -z "$VGCHANGE" ; then AC_MSG_ERROR([We need vgchange for LVM storage driver]) ; fi
|
||||||
if test -z "$VGSCAN" ; then AC_MSG_ERROR([We need vgscan for LVM storage driver]) ; fi
|
if test -z "$VGSCAN" ; then AC_MSG_ERROR([We need vgscan for LVM storage driver]) ; fi
|
||||||
if test -z "$PVS" ; then AC_MSG_ERROR([We need pvs for LVM storage driver]) ; fi
|
if test -z "$PVS" ; then AC_MSG_ERROR([We need pvs for LVM storage driver]) ; fi
|
||||||
@ -1718,6 +1868,7 @@ if test "$with_storage_lvm" = "yes" || test "$with_storage_lvm" = "check"; then
|
|||||||
if test -z "$PVREMOVE" ; then with_storage_lvm=no ; fi
|
if test -z "$PVREMOVE" ; then with_storage_lvm=no ; fi
|
||||||
if test -z "$VGREMOVE" ; then with_storage_lvm=no ; fi
|
if test -z "$VGREMOVE" ; then with_storage_lvm=no ; fi
|
||||||
if test -z "$LVREMOVE" ; then with_storage_lvm=no ; fi
|
if test -z "$LVREMOVE" ; then with_storage_lvm=no ; fi
|
||||||
|
if test -z "$LVCHANGE" ; then with_storage_lvm=no ; fi
|
||||||
if test -z "$VGCHANGE" ; then with_storage_lvm=no ; fi
|
if test -z "$VGCHANGE" ; then with_storage_lvm=no ; fi
|
||||||
if test -z "$VGSCAN" ; then with_storage_lvm=no ; fi
|
if test -z "$VGSCAN" ; then with_storage_lvm=no ; fi
|
||||||
if test -z "$PVS" ; then with_storage_lvm=no ; fi
|
if test -z "$PVS" ; then with_storage_lvm=no ; fi
|
||||||
@ -1735,6 +1886,7 @@ if test "$with_storage_lvm" = "yes" || test "$with_storage_lvm" = "check"; then
|
|||||||
AC_DEFINE_UNQUOTED([PVREMOVE],["$PVREMOVE"],[Location of pvremove program])
|
AC_DEFINE_UNQUOTED([PVREMOVE],["$PVREMOVE"],[Location of pvremove program])
|
||||||
AC_DEFINE_UNQUOTED([VGREMOVE],["$VGREMOVE"],[Location of vgremove program])
|
AC_DEFINE_UNQUOTED([VGREMOVE],["$VGREMOVE"],[Location of vgremove program])
|
||||||
AC_DEFINE_UNQUOTED([LVREMOVE],["$LVREMOVE"],[Location of lvremove program])
|
AC_DEFINE_UNQUOTED([LVREMOVE],["$LVREMOVE"],[Location of lvremove program])
|
||||||
|
AC_DEFINE_UNQUOTED([LVCHANGE],["$LVCHANGE"],[Location of lvchange program])
|
||||||
AC_DEFINE_UNQUOTED([VGCHANGE],["$VGCHANGE"],[Location of vgchange program])
|
AC_DEFINE_UNQUOTED([VGCHANGE],["$VGCHANGE"],[Location of vgchange program])
|
||||||
AC_DEFINE_UNQUOTED([VGSCAN],["$VGSCAN"],[Location of vgscan program])
|
AC_DEFINE_UNQUOTED([VGSCAN],["$VGSCAN"],[Location of vgscan program])
|
||||||
AC_DEFINE_UNQUOTED([PVS],["$PVS"],[Location of pvs program])
|
AC_DEFINE_UNQUOTED([PVS],["$PVS"],[Location of pvs program])
|
||||||
@ -2035,6 +2187,25 @@ AM_CONDITIONAL([WITH_PYTHON], [test "$with_python" = "yes"])
|
|||||||
AC_SUBST([PYTHON_VERSION])
|
AC_SUBST([PYTHON_VERSION])
|
||||||
AC_SUBST([PYTHON_INCLUDES])
|
AC_SUBST([PYTHON_INCLUDES])
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([with-test-suite],
|
||||||
|
AC_HELP_STRING([--with-test-suite], [build test suite by default @<:@default=check@:>@]),
|
||||||
|
[case "${withval}" in
|
||||||
|
yes|no|check) ;;
|
||||||
|
*) AC_MSG_ERROR([bad value ${withval} for tests option]) ;;
|
||||||
|
esac],
|
||||||
|
[withval=check])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([Whether to build test suite by default])
|
||||||
|
if test "$withval" = "check" ; then
|
||||||
|
if test -d $srcdir/.git ; then
|
||||||
|
withval=yes
|
||||||
|
else
|
||||||
|
withval=no
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$withval])
|
||||||
|
AM_CONDITIONAL([WITH_TESTS], [test "$withval" = "yes"])
|
||||||
|
|
||||||
AC_ARG_ENABLE([test-coverage],
|
AC_ARG_ENABLE([test-coverage],
|
||||||
AC_HELP_STRING([--enable-test-coverage], [turn on code coverage instrumentation @<:@default=no@:>@]),
|
AC_HELP_STRING([--enable-test-coverage], [turn on code coverage instrumentation @<:@default=no@:>@]),
|
||||||
[case "${enableval}" in
|
[case "${enableval}" in
|
||||||
@ -2363,7 +2534,8 @@ AC_MSG_CHECKING([whether to compile with macvtap support])
|
|||||||
if test "$with_macvtap" != "no" ; then
|
if test "$with_macvtap" != "no" ; then
|
||||||
AC_TRY_COMPILE([ #include <sys/socket.h>
|
AC_TRY_COMPILE([ #include <sys/socket.h>
|
||||||
#include <linux/rtnetlink.h> ],
|
#include <linux/rtnetlink.h> ],
|
||||||
[ int x = MACVLAN_MODE_BRIDGE; ],
|
[ int x = MACVLAN_MODE_BRIDGE;
|
||||||
|
int y = IFLA_VF_MAX; ],
|
||||||
[ with_macvtap=yes ],
|
[ with_macvtap=yes ],
|
||||||
[ if test "$with_macvtap" = "yes" ; then
|
[ if test "$with_macvtap" = "yes" ; then
|
||||||
AC_MSG_ERROR([Installed linux headers don't show support for macvtap device.])
|
AC_MSG_ERROR([Installed linux headers don't show support for macvtap device.])
|
||||||
@ -2448,9 +2620,6 @@ AM_CONDITIONAL([HAVE_LIBNL], [test "$have_libnl" = "yes"])
|
|||||||
AC_SUBST([LIBNL_CFLAGS])
|
AC_SUBST([LIBNL_CFLAGS])
|
||||||
AC_SUBST([LIBNL_LIBS])
|
AC_SUBST([LIBNL_LIBS])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Only COPYING.LIB is under version control, yet COPYING
|
# Only COPYING.LIB is under version control, yet COPYING
|
||||||
# is included as part of the distribution tarball.
|
# is included as part of the distribution tarball.
|
||||||
# Copy one to the other, but only if this is a srcdir-build.
|
# Copy one to the other, but only if this is a srcdir-build.
|
||||||
@ -2533,7 +2702,7 @@ AC_MSG_NOTICE([ Disk: $with_storage_disk])
|
|||||||
AC_MSG_NOTICE([])
|
AC_MSG_NOTICE([])
|
||||||
AC_MSG_NOTICE([Security Drivers])
|
AC_MSG_NOTICE([Security Drivers])
|
||||||
AC_MSG_NOTICE([])
|
AC_MSG_NOTICE([])
|
||||||
AC_MSG_NOTICE([ SELinux: $with_secdriver_selinux])
|
AC_MSG_NOTICE([ SELinux: $with_secdriver_selinux ($SELINUX_MOUNT)])
|
||||||
AC_MSG_NOTICE([AppArmor: $with_secdriver_apparmor])
|
AC_MSG_NOTICE([AppArmor: $with_secdriver_apparmor])
|
||||||
AC_MSG_NOTICE([])
|
AC_MSG_NOTICE([])
|
||||||
AC_MSG_NOTICE([Driver Loadable Modules])
|
AC_MSG_NOTICE([Driver Loadable Modules])
|
||||||
@ -2677,12 +2846,15 @@ AC_MSG_NOTICE([])
|
|||||||
AC_MSG_NOTICE([Miscellaneous])
|
AC_MSG_NOTICE([Miscellaneous])
|
||||||
AC_MSG_NOTICE([])
|
AC_MSG_NOTICE([])
|
||||||
AC_MSG_NOTICE([ Debug: $enable_debug])
|
AC_MSG_NOTICE([ Debug: $enable_debug])
|
||||||
AC_MSG_NOTICE([ Warnings: $enable_compile_warnings])
|
AC_MSG_NOTICE([ Use -Werror: $set_werror])
|
||||||
AC_MSG_NOTICE([Warning Flags: $WARN_CFLAGS])
|
AC_MSG_NOTICE([Warning Flags: $WARN_CFLAGS])
|
||||||
AC_MSG_NOTICE([ Readline: $lv_use_readline])
|
AC_MSG_NOTICE([ Readline: $lv_use_readline])
|
||||||
AC_MSG_NOTICE([ Python: $with_python])
|
AC_MSG_NOTICE([ Python: $with_python])
|
||||||
AC_MSG_NOTICE([ DTrace: $with_dtrace])
|
AC_MSG_NOTICE([ DTrace: $with_dtrace])
|
||||||
|
AC_MSG_NOTICE([ numad: $with_numad])
|
||||||
AC_MSG_NOTICE([ XML Catalog: $XML_CATALOG_FILE])
|
AC_MSG_NOTICE([ XML Catalog: $XML_CATALOG_FILE])
|
||||||
|
AC_MSG_NOTICE([ Init script: $with_init_script])
|
||||||
|
AC_MSG_NOTICE([Console locks: $with_console_lock_files])
|
||||||
AC_MSG_NOTICE([])
|
AC_MSG_NOTICE([])
|
||||||
AC_MSG_NOTICE([Privileges])
|
AC_MSG_NOTICE([Privileges])
|
||||||
AC_MSG_NOTICE([])
|
AC_MSG_NOTICE([])
|
||||||
|
14
daemon/.gitignore
vendored
14
daemon/.gitignore
vendored
@ -1,14 +0,0 @@
|
|||||||
*.la
|
|
||||||
*.lo
|
|
||||||
.deps
|
|
||||||
.libs
|
|
||||||
Makefile
|
|
||||||
Makefile.in
|
|
||||||
libvirt_qemud
|
|
||||||
libvirtd
|
|
||||||
libvirtd.init
|
|
||||||
libvirtd*.logrotate
|
|
||||||
libvirtd.8
|
|
||||||
libvirtd.8.in
|
|
||||||
libvirtd.pod
|
|
||||||
probes.h
|
|
@ -1,12 +1,12 @@
|
|||||||
## Process this file with automake to produce Makefile.in
|
## Process this file with automake to produce Makefile.in
|
||||||
|
|
||||||
## Copyright (C) 2005-2011 Red Hat, Inc.
|
## Copyright (C) 2005-2012 Red Hat, Inc.
|
||||||
## See COPYING.LIB for the License of this software
|
## See COPYING.LIB for the License of this software
|
||||||
|
|
||||||
INCLUDES = \
|
INCLUDES = \
|
||||||
-I$(top_srcdir)/gnulib/lib -I../gnulib/lib \
|
-I$(top_builddir)/gnulib/lib -I$(top_srcdir)/gnulib/lib \
|
||||||
-I$(top_srcdir)/include -I$(top_builddir)/include \
|
-I$(top_builddir)/include -I$(top_srcdir)/include \
|
||||||
-I$(top_srcdir)/src \
|
-I$(top_builddir)/src -I$(top_srcdir)/src \
|
||||||
-I$(top_srcdir)/src/util \
|
-I$(top_srcdir)/src/util \
|
||||||
-I$(top_srcdir)/src/conf \
|
-I$(top_srcdir)/src/conf \
|
||||||
-I$(top_srcdir)/src/rpc \
|
-I$(top_srcdir)/src/rpc \
|
||||||
@ -38,6 +38,7 @@ EXTRA_DIST = \
|
|||||||
libvirtd.policy-1 \
|
libvirtd.policy-1 \
|
||||||
libvirtd.sasl \
|
libvirtd.sasl \
|
||||||
libvirtd.sysconf \
|
libvirtd.sysconf \
|
||||||
|
libvirtd.sysctl \
|
||||||
libvirtd.aug \
|
libvirtd.aug \
|
||||||
libvirtd.logrotate.in \
|
libvirtd.logrotate.in \
|
||||||
libvirtd.qemu.logrotate.in \
|
libvirtd.qemu.logrotate.in \
|
||||||
@ -47,7 +48,6 @@ EXTRA_DIST = \
|
|||||||
THREADS.txt \
|
THREADS.txt \
|
||||||
libvirtd.pod.in \
|
libvirtd.pod.in \
|
||||||
libvirtd.8.in \
|
libvirtd.8.in \
|
||||||
libvirtd.stp \
|
|
||||||
$(DAEMON_SOURCES)
|
$(DAEMON_SOURCES)
|
||||||
|
|
||||||
BUILT_SOURCES =
|
BUILT_SOURCES =
|
||||||
@ -109,9 +109,11 @@ libvirtd_LDADD = \
|
|||||||
$(SASL_LIBS) \
|
$(SASL_LIBS) \
|
||||||
$(POLKIT_LIBS)
|
$(POLKIT_LIBS)
|
||||||
|
|
||||||
|
if WITH_DTRACE_PROBES
|
||||||
|
libvirtd_LDADD += ../src/probes.o
|
||||||
|
endif
|
||||||
|
|
||||||
libvirtd_LDADD += \
|
libvirtd_LDADD += \
|
||||||
../src/libvirt-net-rpc-server.la \
|
|
||||||
../src/libvirt-net-rpc.la \
|
|
||||||
../src/libvirt-qemu.la
|
../src/libvirt-qemu.la
|
||||||
|
|
||||||
if ! WITH_DRIVER_MODULES
|
if ! WITH_DRIVER_MODULES
|
||||||
@ -168,41 +170,27 @@ policyfile = libvirtd.policy-1
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if WITH_DTRACE
|
install-data-local: install-init-redhat install-init-systemd install-init-upstart \
|
||||||
libvirtd_LDADD += probes.o
|
install-data-sasl install-data-polkit \
|
||||||
nodist_libvirtd_SOURCES = probes.h
|
install-logrotate install-sysctl
|
||||||
|
$(MKDIR_P) $(DESTDIR)$(localstatedir)/log/libvirt \
|
||||||
|
$(DESTDIR)$(localstatedir)/run/libvirt \
|
||||||
|
$(DESTDIR)$(localstatedir)/lib/libvirt
|
||||||
|
|
||||||
BUILT_SOURCES += probes.h
|
uninstall-local:: uninstall-init-redhat uninstall-init-systemd uninstall-init-upstart \
|
||||||
|
uninstall-data-sasl uninstall-data-polkit \
|
||||||
tapsetdir = $(datadir)/systemtap/tapset
|
uninstall-logrotate uninstall-sysctl
|
||||||
tapset_DATA = libvirtd.stp
|
|
||||||
|
|
||||||
probes.h: probes.d
|
|
||||||
$(AM_V_GEN)$(DTRACE) -o $@ -h -s $<
|
|
||||||
|
|
||||||
probes.o: probes.d
|
|
||||||
$(AM_V_GEN)$(DTRACE) -o $@ -G -s $<
|
|
||||||
|
|
||||||
CLEANFILES += probes.h probes.o
|
|
||||||
endif
|
|
||||||
|
|
||||||
install-data-local: install-init install-data-sasl install-data-polkit \
|
|
||||||
install-logrotate
|
|
||||||
mkdir -p $(DESTDIR)$(localstatedir)/log/libvirt
|
|
||||||
mkdir -p $(DESTDIR)$(localstatedir)/run/libvirt
|
|
||||||
mkdir -p $(DESTDIR)$(localstatedir)/lib/libvirt
|
|
||||||
|
|
||||||
uninstall-local:: uninstall-init uninstall-data-sasl uninstall-data-polkit
|
|
||||||
rmdir $(DESTDIR)$(localstatedir)/log/libvirt || :
|
rmdir $(DESTDIR)$(localstatedir)/log/libvirt || :
|
||||||
rmdir $(DESTDIR)$(localstatedir)/run/libvirt || :
|
rmdir $(DESTDIR)$(localstatedir)/run/libvirt || :
|
||||||
rmdir $(DESTDIR)$(localstatedir)/lib/libvirt || :
|
rmdir $(DESTDIR)$(localstatedir)/lib/libvirt || :
|
||||||
|
|
||||||
if HAVE_POLKIT
|
if HAVE_POLKIT
|
||||||
install-data-polkit:: install-init
|
install-data-polkit::
|
||||||
mkdir -p $(DESTDIR)$(policydir)
|
$(MKDIR_P) $(DESTDIR)$(policydir)
|
||||||
$(INSTALL_DATA) $(srcdir)/$(policyfile) $(DESTDIR)$(policydir)/org.libvirt.unix.policy
|
$(INSTALL_DATA) $(srcdir)/$(policyfile) $(DESTDIR)$(policydir)/org.libvirt.unix.policy
|
||||||
uninstall-data-polkit:: install-init
|
uninstall-data-polkit::
|
||||||
rm -f $(DESTDIR)$(policydir)/org.libvirt.unix.policy
|
rm -f $(DESTDIR)$(policydir)/org.libvirt.unix.policy
|
||||||
|
rmdir $(DESTDIR)$(policydir) || :
|
||||||
else
|
else
|
||||||
install-data-polkit::
|
install-data-polkit::
|
||||||
uninstall-data-polkit::
|
uninstall-data-polkit::
|
||||||
@ -241,51 +229,124 @@ libvirtd.uml.logrotate: libvirtd.uml.logrotate.in
|
|||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
|
|
||||||
install-logrotate: $(LOGROTATE_CONFS)
|
install-logrotate: $(LOGROTATE_CONFS)
|
||||||
mkdir -p $(DESTDIR)$(localstatedir)/log/libvirt/qemu/
|
$(MKDIR_P) $(DESTDIR)$(localstatedir)/log/libvirt/qemu/ \
|
||||||
mkdir -p $(DESTDIR)$(localstatedir)/log/libvirt/lxc/
|
$(DESTDIR)$(localstatedir)/log/libvirt/lxc/ \
|
||||||
mkdir -p $(DESTDIR)$(localstatedir)/log/libvirt/uml/
|
$(DESTDIR)$(localstatedir)/log/libvirt/uml/ \
|
||||||
mkdir -p $(DESTDIR)$(sysconfdir)/logrotate.d/
|
$(DESTDIR)$(sysconfdir)/logrotate.d/
|
||||||
$(INSTALL_DATA) libvirtd.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd
|
$(INSTALL_DATA) libvirtd.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd
|
||||||
$(INSTALL_DATA) libvirtd.qemu.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.qemu
|
$(INSTALL_DATA) libvirtd.qemu.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.qemu
|
||||||
$(INSTALL_DATA) libvirtd.lxc.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.lxc
|
$(INSTALL_DATA) libvirtd.lxc.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.lxc
|
||||||
$(INSTALL_DATA) libvirtd.uml.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.uml
|
$(INSTALL_DATA) libvirtd.uml.logrotate $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.uml
|
||||||
|
|
||||||
if LIBVIRT_INIT_SCRIPT_RED_HAT
|
uninstall-logrotate:
|
||||||
install-init: libvirtd.init
|
rm -f $(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd \
|
||||||
mkdir -p $(DESTDIR)$(sysconfdir)/rc.d/init.d
|
$(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.qemu \
|
||||||
$(INSTALL_SCRIPT) libvirtd.init \
|
$(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.lxc \
|
||||||
$(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirtd
|
$(DESTDIR)$(sysconfdir)/logrotate.d/libvirtd.uml
|
||||||
mkdir -p $(DESTDIR)$(sysconfdir)/sysconfig
|
rmdir $(DESTDIR)$(localstatedir)/log/libvirt/qemu || :
|
||||||
|
rmdir $(DESTDIR)$(localstatedir)/log/libvirt/lxc || :
|
||||||
|
rmdir $(DESTDIR)$(localstatedir)/log/libvirt/uml || :
|
||||||
|
rmdir $(DESTDIR)$(sysconfdir)/logrotate.d || :
|
||||||
|
|
||||||
|
install-sysconfig:
|
||||||
|
$(MKDIR_P) $(DESTDIR)$(sysconfdir)/sysconfig
|
||||||
$(INSTALL_DATA) $(srcdir)/libvirtd.sysconf \
|
$(INSTALL_DATA) $(srcdir)/libvirtd.sysconf \
|
||||||
$(DESTDIR)$(sysconfdir)/sysconfig/libvirtd
|
$(DESTDIR)$(sysconfdir)/sysconfig/libvirtd
|
||||||
|
uninstall-sysconfig:
|
||||||
|
rm -f $(DESTDIR)$(sysconfdir)/sysconfig/libvirtd
|
||||||
|
rmdir $(DESTDIR)$(sysconfdir)/sysconfig || :
|
||||||
|
|
||||||
uninstall-init:
|
if WITH_SYSCTL
|
||||||
rm -f $(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirtd \
|
install-sysctl:
|
||||||
$(DESTDIR)$(sysconfdir)/sysconfig/libvirtd
|
$(MKDIR_P) $(DESTDIR)$(sysconfdir)/sysctl.d
|
||||||
|
$(INSTALL_DATA) $(srcdir)/libvirtd.sysctl \
|
||||||
|
$(DESTDIR)$(sysconfdir)/sysctl.d/libvirtd
|
||||||
|
|
||||||
|
uninstall-sysctl:
|
||||||
|
rm -f $(DESTDIR)$(sysconfdir)/sysctl.d/libvirtd
|
||||||
|
rmdir $(DESTDIR)$(sysconfdir)/sysctl.d || :
|
||||||
|
else
|
||||||
|
install-sysctl:
|
||||||
|
uninstall-sysctl:
|
||||||
|
endif
|
||||||
|
|
||||||
|
if LIBVIRT_INIT_SCRIPT_RED_HAT
|
||||||
|
|
||||||
BUILT_SOURCES += libvirtd.init
|
BUILT_SOURCES += libvirtd.init
|
||||||
|
|
||||||
|
install-init-redhat: install-sysconfig libvirtd.init
|
||||||
|
$(MKDIR_P) $(DESTDIR)$(sysconfdir)/rc.d/init.d
|
||||||
|
$(INSTALL_SCRIPT) libvirtd.init \
|
||||||
|
$(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirtd
|
||||||
|
|
||||||
|
uninstall-init-redhat: uninstall-sysconfig
|
||||||
|
rm -f $(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirtd
|
||||||
|
rmdir $(DESTDIR)$(sysconfdir)/rc.d/init.d || :
|
||||||
|
else
|
||||||
|
install-init-redhat:
|
||||||
|
uninstall-init-redhat:
|
||||||
|
endif # LIBVIRT_INIT_SCRIPT_RED_HAT
|
||||||
|
|
||||||
|
|
||||||
|
if LIBVIRT_INIT_SCRIPT_UPSTART
|
||||||
|
|
||||||
|
install-init-upstart: install-sysconfig
|
||||||
|
$(MKDIR_P) $(DESTDIR)$(sysconfdir)/event.d
|
||||||
|
$(INSTALL_SCRIPT) libvirtd.upstart \
|
||||||
|
$(DESTDIR)$(sysconfdir)/event.d/libvirtd
|
||||||
|
|
||||||
|
uninstall-init-upstart: uninstall-sysconfig
|
||||||
|
rm -f $(DESTDIR)$(sysconfdir)/event.d/libvirtd
|
||||||
|
rmdir $(DESTDIR)$(sysconfdir)/event.d || :
|
||||||
|
else
|
||||||
|
install-init-upstart:
|
||||||
|
uninstall-init-upstart:
|
||||||
|
endif # LIBVIRT_INIT_SCRIPT_UPSTART
|
||||||
|
|
||||||
|
|
||||||
|
EXTRA_DIST += libvirtd.service.in
|
||||||
|
if LIBVIRT_INIT_SCRIPT_SYSTEMD
|
||||||
|
|
||||||
|
SYSTEMD_UNIT_DIR = /lib/systemd/system
|
||||||
|
BUILT_SOURCES += libvirtd.service
|
||||||
|
|
||||||
|
install-init-systemd: install-sysconfig libvirtd.service
|
||||||
|
$(MKDIR_P) $(DESTDIR)$(SYSTEMD_UNIT_DIR)
|
||||||
|
$(INSTALL_SCRIPT) libvirtd.service \
|
||||||
|
$(DESTDIR)$(SYSTEMD_UNIT_DIR)/libvirtd.service
|
||||||
|
|
||||||
|
uninstall-init-systemd: uninstall-sysconfig
|
||||||
|
rm -f $(DESTDIR)$(SYSTEMD_UNIT_DIR)/libvirtd.service
|
||||||
|
rmdir $(DESTDIR)$(SYSTEMD_UNIT_DIR) || :
|
||||||
|
else
|
||||||
|
install-init-systemd:
|
||||||
|
uninstall-init-systemd:
|
||||||
|
endif # LIBVIRT_INIT_SCRIPT_SYSTEMD
|
||||||
|
|
||||||
libvirtd.init: libvirtd.init.in $(top_builddir)/config.status
|
libvirtd.init: libvirtd.init.in $(top_builddir)/config.status
|
||||||
$(AM_V_GEN)sed \
|
$(AM_V_GEN)sed \
|
||||||
-e s!\@localstatedir\@!@localstatedir@!g \
|
-e s!\@localstatedir\@!$(localstatedir)!g \
|
||||||
-e s!\@sbindir\@!@sbindir@!g \
|
-e s!\@sbindir\@!$(sbindir)!g \
|
||||||
-e s!\@sysconfdir\@!@sysconfdir@!g \
|
-e s!\@sysconfdir\@!$(sysconfdir)!g \
|
||||||
< $< > $@-t && \
|
< $< > $@-t && \
|
||||||
chmod a+x $@-t && \
|
chmod a+x $@-t && \
|
||||||
mv $@-t $@
|
mv $@-t $@
|
||||||
|
|
||||||
|
libvirtd.service: libvirtd.service.in $(top_builddir)/config.status
|
||||||
|
$(AM_V_GEN)sed \
|
||||||
|
-e s!\@localstatedir\@!$(localstatedir)!g \
|
||||||
|
-e s!\@sbindir\@!$(sbindir)!g \
|
||||||
|
-e s!\@sysconfdir\@!$(sysconfdir)!g \
|
||||||
|
< $< > $@-t && \
|
||||||
|
chmod a+x $@-t && \
|
||||||
|
mv $@-t $@
|
||||||
|
|
||||||
|
|
||||||
check-local:
|
check-local:
|
||||||
$(AM_V_GEN)if test -x '$(AUGPARSE)'; then \
|
$(AM_V_GEN)if test -x '$(AUGPARSE)'; then \
|
||||||
'$(AUGPARSE)' -I $(srcdir) $(srcdir)/test_libvirtd.aug; \
|
'$(AUGPARSE)' -I $(srcdir) $(srcdir)/test_libvirtd.aug; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
install-init:
|
|
||||||
uninstall-init:
|
|
||||||
libvirtd.init:
|
|
||||||
|
|
||||||
endif # LIBVIRT_INIT_SCRIPT_RED_HAT
|
|
||||||
|
|
||||||
# This must be added last, since functions it provides/replaces
|
# This must be added last, since functions it provides/replaces
|
||||||
# are used by nearly every other library.
|
# are used by nearly every other library.
|
||||||
@ -296,9 +357,6 @@ install-data-local: install-data-sasl
|
|||||||
uninstall-local:: uninstall-data-sasl
|
uninstall-local:: uninstall-data-sasl
|
||||||
endif # WITH_LIBVIRTD
|
endif # WITH_LIBVIRTD
|
||||||
|
|
||||||
# This is needed for 'make dist' too, so can't wrap in WITH_LIBVIRTD.
|
|
||||||
EXTRA_DIST += probes.d libvirtd.stp
|
|
||||||
|
|
||||||
POD2MAN = pod2man -c "Virtualization Support" \
|
POD2MAN = pod2man -c "Virtualization Support" \
|
||||||
-r "$(PACKAGE)-$(VERSION)" -s 8
|
-r "$(PACKAGE)-$(VERSION)" -s 8
|
||||||
|
|
||||||
@ -309,12 +367,12 @@ $(srcdir)/libvirtd.8.in: libvirtd.pod.in
|
|||||||
# the WITH_LIBVIRTD conditional
|
# the WITH_LIBVIRTD conditional
|
||||||
if HAVE_SASL
|
if HAVE_SASL
|
||||||
install-data-sasl:
|
install-data-sasl:
|
||||||
mkdir -p $(DESTDIR)$(sysconfdir)/sasl2/
|
$(MKDIR_P) $(DESTDIR)$(sysconfdir)/sasl2/
|
||||||
$(INSTALL_DATA) $(srcdir)/libvirtd.sasl $(DESTDIR)$(sysconfdir)/sasl2/libvirt.conf
|
$(INSTALL_DATA) $(srcdir)/libvirtd.sasl $(DESTDIR)$(sysconfdir)/sasl2/libvirt.conf
|
||||||
|
|
||||||
uninstall-data-sasl:
|
uninstall-data-sasl:
|
||||||
rm -f $(DESTDIR)$(sysconfdir)/sasl2/libvirt.conf
|
rm -f $(DESTDIR)$(sysconfdir)/sasl2/libvirt.conf
|
||||||
rmdir $(DESTDIR)$(sysconfdir)/sasl2/
|
rmdir $(DESTDIR)$(sysconfdir)/sasl2/ || :
|
||||||
else
|
else
|
||||||
install-data-sasl:
|
install-data-sasl:
|
||||||
uninstall-data-sasl:
|
uninstall-data-sasl:
|
||||||
|
@ -66,6 +66,10 @@ module Libvirtd =
|
|||||||
let auditing_entry = int_entry "audit_level"
|
let auditing_entry = int_entry "audit_level"
|
||||||
| bool_entry "audit_logging"
|
| bool_entry "audit_logging"
|
||||||
|
|
||||||
|
let keepalive_entry = int_entry "keepalive_interval"
|
||||||
|
| int_entry "keepalive_count"
|
||||||
|
| bool_entry "keepalive_required"
|
||||||
|
|
||||||
(* Each enty in the config is one of the following three ... *)
|
(* Each enty in the config is one of the following three ... *)
|
||||||
let entry = network_entry
|
let entry = network_entry
|
||||||
| sock_acl_entry
|
| sock_acl_entry
|
||||||
@ -75,6 +79,7 @@ module Libvirtd =
|
|||||||
| processing_entry
|
| processing_entry
|
||||||
| logging_entry
|
| logging_entry
|
||||||
| auditing_entry
|
| auditing_entry
|
||||||
|
| keepalive_entry
|
||||||
let comment = [ label "#comment" . del /#[ \t]*/ "# " . store /([^ \t\n][^\n]*)?/ . del /\n/ "\n" ]
|
let comment = [ label "#comment" . del /#[ \t]*/ "# " . store /([^ \t\n][^\n]*)?/ . del /\n/ "\n" ]
|
||||||
let empty = [ label "#empty" . eol ]
|
let empty = [ label "#empty" . eol ]
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* libvirtd.c: daemon start of day, guest process & i/o management
|
* libvirtd.c: daemon start of day, guest process & i/o management
|
||||||
*
|
*
|
||||||
* Copyright (C) 2006-2011 Red Hat, Inc.
|
* Copyright (C) 2006-2012 Red Hat, Inc.
|
||||||
* Copyright (C) 2006 Daniel P. Berrange
|
* Copyright (C) 2006 Daniel P. Berrange
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
@ -47,6 +47,7 @@
|
|||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
|
#include "virnetlink.h"
|
||||||
#include "virnetserver.h"
|
#include "virnetserver.h"
|
||||||
#include "threads.h"
|
#include "threads.h"
|
||||||
#include "remote.h"
|
#include "remote.h"
|
||||||
@ -146,6 +147,10 @@ struct daemonConfig {
|
|||||||
|
|
||||||
int audit_level;
|
int audit_level;
|
||||||
int audit_logging;
|
int audit_logging;
|
||||||
|
|
||||||
|
int keepalive_interval;
|
||||||
|
unsigned int keepalive_count;
|
||||||
|
int keepalive_required;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@ -182,10 +187,11 @@ static int daemonForkIntoBackground(const char *argv0)
|
|||||||
if (pipe(statuspipe) < 0)
|
if (pipe(statuspipe) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
int pid = fork();
|
pid_t pid = fork();
|
||||||
switch (pid) {
|
switch (pid) {
|
||||||
case 0:
|
case 0:
|
||||||
{
|
{
|
||||||
|
/* intermediate child */
|
||||||
int stdinfd = -1;
|
int stdinfd = -1;
|
||||||
int stdoutfd = -1;
|
int stdoutfd = -1;
|
||||||
int nextpid;
|
int nextpid;
|
||||||
@ -202,9 +208,9 @@ static int daemonForkIntoBackground(const char *argv0)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
if (dup2(stdoutfd, STDERR_FILENO) != STDERR_FILENO)
|
if (dup2(stdoutfd, STDERR_FILENO) != STDERR_FILENO)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
if (VIR_CLOSE(stdinfd) < 0)
|
if (stdinfd > STDERR_FILENO && VIR_CLOSE(stdinfd) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
if (VIR_CLOSE(stdoutfd) < 0)
|
if (stdoutfd > STDERR_FILENO && VIR_CLOSE(stdoutfd) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (setsid() < 0)
|
if (setsid() < 0)
|
||||||
@ -212,54 +218,70 @@ static int daemonForkIntoBackground(const char *argv0)
|
|||||||
|
|
||||||
nextpid = fork();
|
nextpid = fork();
|
||||||
switch (nextpid) {
|
switch (nextpid) {
|
||||||
case 0:
|
case 0: /* grandchild */
|
||||||
return statuspipe[1];
|
return statuspipe[1];
|
||||||
case -1:
|
case -1: /* error */
|
||||||
return -1;
|
goto cleanup;
|
||||||
default:
|
default: /* intermediate child succeeded */
|
||||||
_exit(0);
|
_exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
VIR_FORCE_CLOSE(stdoutfd);
|
VIR_FORCE_CLOSE(stdoutfd);
|
||||||
VIR_FORCE_CLOSE(stdinfd);
|
VIR_FORCE_CLOSE(stdinfd);
|
||||||
return -1;
|
VIR_FORCE_CLOSE(statuspipe[1]);
|
||||||
|
_exit(EXIT_FAILURE);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case -1:
|
case -1: /* error in parent */
|
||||||
return -1;
|
goto error;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
int got, exitstatus = 0;
|
/* parent */
|
||||||
int ret;
|
int ret;
|
||||||
char status;
|
char status;
|
||||||
|
|
||||||
VIR_FORCE_CLOSE(statuspipe[1]);
|
VIR_FORCE_CLOSE(statuspipe[1]);
|
||||||
|
|
||||||
/* We wait to make sure the first child forked successfully */
|
/* We wait to make sure the first child forked successfully */
|
||||||
if ((got = waitpid(pid, &exitstatus, 0)) < 0 ||
|
if (virPidWait(pid, NULL) < 0)
|
||||||
got != pid ||
|
goto error;
|
||||||
exitstatus != 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Now block until the second child initializes successfully */
|
/* If we get here, then the grandchild was spawned, so we
|
||||||
|
* must exit. Block until the second child initializes
|
||||||
|
* successfully */
|
||||||
again:
|
again:
|
||||||
ret = read(statuspipe[0], &status, 1);
|
ret = read(statuspipe[0], &status, 1);
|
||||||
if (ret == -1 && errno == EINTR)
|
if (ret == -1 && errno == EINTR)
|
||||||
goto again;
|
goto again;
|
||||||
|
|
||||||
if (ret == 1 && status != 0) {
|
VIR_FORCE_CLOSE(statuspipe[0]);
|
||||||
|
|
||||||
|
if (ret != 1) {
|
||||||
|
char ebuf[1024];
|
||||||
|
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
_("%s: error: %s. Check /var/log/messages or run without "
|
_("%s: error: unable to determine if daemon is "
|
||||||
"--daemon for more info.\n"), argv0,
|
"running: %s\n"), argv0,
|
||||||
|
virStrerror(errno, ebuf, sizeof(ebuf)));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
} else if (status != 0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
_("%s: error: %s. Check /var/log/messages or run "
|
||||||
|
"without --daemon for more info.\n"), argv0,
|
||||||
virDaemonErrTypeToString(status));
|
virDaemonErrTypeToString(status));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
_exit(ret == 1 && status == 0 ? 0 : 1);
|
_exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
error:
|
||||||
|
VIR_FORCE_CLOSE(statuspipe[0]);
|
||||||
|
VIR_FORCE_CLOSE(statuspipe[1]);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -470,8 +492,12 @@ static int daemonSetupNetworking(virNetServerPtr srv,
|
|||||||
NULL)))
|
NULL)))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (virNetServerAddService(srv, svc, NULL) < 0)
|
if (virNetServerAddService(srv, svc,
|
||||||
|
config->mdns_adv && !ipsock ?
|
||||||
|
"_libvirt._tcp" :
|
||||||
|
NULL) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (svcRO &&
|
if (svcRO &&
|
||||||
virNetServerAddService(srv, svcRO, NULL) < 0)
|
virNetServerAddService(srv, svcRO, NULL) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
@ -883,7 +909,7 @@ daemonConfigNew(bool privileged ATTRIBUTE_UNUSED)
|
|||||||
#endif
|
#endif
|
||||||
data->auth_tls = REMOTE_AUTH_NONE;
|
data->auth_tls = REMOTE_AUTH_NONE;
|
||||||
|
|
||||||
data->mdns_adv = 1;
|
data->mdns_adv = 0;
|
||||||
|
|
||||||
data->min_workers = 5;
|
data->min_workers = 5;
|
||||||
data->max_workers = 20;
|
data->max_workers = 20;
|
||||||
@ -899,6 +925,10 @@ daemonConfigNew(bool privileged ATTRIBUTE_UNUSED)
|
|||||||
data->audit_level = 1;
|
data->audit_level = 1;
|
||||||
data->audit_logging = 0;
|
data->audit_logging = 0;
|
||||||
|
|
||||||
|
data->keepalive_interval = 5;
|
||||||
|
data->keepalive_count = 5;
|
||||||
|
data->keepalive_required = 0;
|
||||||
|
|
||||||
localhost = virGetHostname(NULL);
|
localhost = virGetHostname(NULL);
|
||||||
if (localhost == NULL) {
|
if (localhost == NULL) {
|
||||||
/* we couldn't resolve the hostname; assume that we are
|
/* we couldn't resolve the hostname; assume that we are
|
||||||
@ -963,6 +993,7 @@ daemonConfigFree(struct daemonConfig *data)
|
|||||||
VIR_FREE(data->cert_file);
|
VIR_FREE(data->cert_file);
|
||||||
VIR_FREE(data->crl_file);
|
VIR_FREE(data->crl_file);
|
||||||
|
|
||||||
|
VIR_FREE(data->host_uuid);
|
||||||
VIR_FREE(data->log_filters);
|
VIR_FREE(data->log_filters);
|
||||||
VIR_FREE(data->log_outputs);
|
VIR_FREE(data->log_outputs);
|
||||||
|
|
||||||
@ -1062,6 +1093,10 @@ daemonConfigLoad(struct daemonConfig *data,
|
|||||||
GET_CONF_STR (conf, filename, log_outputs);
|
GET_CONF_STR (conf, filename, log_outputs);
|
||||||
GET_CONF_INT (conf, filename, log_buffer_size);
|
GET_CONF_INT (conf, filename, log_buffer_size);
|
||||||
|
|
||||||
|
GET_CONF_INT (conf, filename, keepalive_interval);
|
||||||
|
GET_CONF_INT (conf, filename, keepalive_count);
|
||||||
|
GET_CONF_INT (conf, filename, keepalive_required);
|
||||||
|
|
||||||
virConfFree (conf);
|
virConfFree (conf);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -1115,7 +1150,7 @@ static void daemonReloadHandler(virNetServerPtr srv ATTRIBUTE_UNUSED,
|
|||||||
{
|
{
|
||||||
VIR_INFO("Reloading configuration on SIGHUP");
|
VIR_INFO("Reloading configuration on SIGHUP");
|
||||||
virHookCall(VIR_HOOK_DRIVER_DAEMON, "-",
|
virHookCall(VIR_HOOK_DRIVER_DAEMON, "-",
|
||||||
VIR_HOOK_DAEMON_OP_RELOAD, SIGHUP, "SIGHUP", NULL);
|
VIR_HOOK_DAEMON_OP_RELOAD, SIGHUP, "SIGHUP", NULL, NULL);
|
||||||
if (virStateReload() < 0)
|
if (virStateReload() < 0)
|
||||||
VIR_WARN("Error while reloading drivers");
|
VIR_WARN("Error while reloading drivers");
|
||||||
}
|
}
|
||||||
@ -1407,7 +1442,7 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
if ((statuswrite = daemonForkIntoBackground(argv[0])) < 0) {
|
if ((statuswrite = daemonForkIntoBackground(argv[0])) < 0) {
|
||||||
VIR_ERROR(_("Failed to fork as daemon: %s"),
|
VIR_ERROR(_("Failed to fork as daemon: %s"),
|
||||||
virStrerror(errno, ebuf, sizeof ebuf));
|
virStrerror(errno, ebuf, sizeof(ebuf)));
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1452,6 +1487,9 @@ int main(int argc, char **argv) {
|
|||||||
config->max_workers,
|
config->max_workers,
|
||||||
config->prio_workers,
|
config->prio_workers,
|
||||||
config->max_clients,
|
config->max_clients,
|
||||||
|
config->keepalive_interval,
|
||||||
|
config->keepalive_count,
|
||||||
|
!!config->keepalive_required,
|
||||||
config->mdns_adv ? config->mdns_name : NULL,
|
config->mdns_adv ? config->mdns_name : NULL,
|
||||||
use_polkit_dbus,
|
use_polkit_dbus,
|
||||||
remoteClientInitHook))) {
|
remoteClientInitHook))) {
|
||||||
@ -1535,7 +1573,7 @@ int main(int argc, char **argv) {
|
|||||||
* an error ?
|
* an error ?
|
||||||
*/
|
*/
|
||||||
virHookCall(VIR_HOOK_DRIVER_DAEMON, "-", VIR_HOOK_DAEMON_OP_START,
|
virHookCall(VIR_HOOK_DRIVER_DAEMON, "-", VIR_HOOK_DAEMON_OP_START,
|
||||||
0, "start", NULL);
|
0, "start", NULL, NULL);
|
||||||
|
|
||||||
if (daemonSetupNetworking(srv, config,
|
if (daemonSetupNetworking(srv, config,
|
||||||
sock_file, sock_file_ro,
|
sock_file, sock_file_ro,
|
||||||
@ -1562,15 +1600,22 @@ int main(int argc, char **argv) {
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Register the netlink event service */
|
||||||
|
if (virNetlinkEventServiceStart() < 0) {
|
||||||
|
ret = VIR_DAEMON_ERR_NETWORK;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
/* Run event loop. */
|
/* Run event loop. */
|
||||||
virNetServerRun(srv);
|
virNetServerRun(srv);
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
virHookCall(VIR_HOOK_DRIVER_DAEMON, "-", VIR_HOOK_DAEMON_OP_SHUTDOWN,
|
virHookCall(VIR_HOOK_DRIVER_DAEMON, "-", VIR_HOOK_DAEMON_OP_SHUTDOWN,
|
||||||
0, "shutdown", NULL);
|
0, "shutdown", NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
virNetlinkEventServiceStop();
|
||||||
virNetServerProgramFree(remoteProgram);
|
virNetServerProgramFree(remoteProgram);
|
||||||
virNetServerProgramFree(qemuProgram);
|
virNetServerProgramFree(qemuProgram);
|
||||||
virNetServerClose(srv);
|
virNetServerClose(srv);
|
||||||
|
@ -56,8 +56,8 @@
|
|||||||
# Alternatively can disable for all services on a host by
|
# Alternatively can disable for all services on a host by
|
||||||
# stopping the Avahi daemon
|
# stopping the Avahi daemon
|
||||||
#
|
#
|
||||||
# This is enabled by default, uncomment this to disable it
|
# This is disabled by default, uncomment this to enable it
|
||||||
#mdns_adv = 0
|
#mdns_adv = 1
|
||||||
|
|
||||||
# Override the default mDNS advertizement name. This must be
|
# Override the default mDNS advertizement name. This must be
|
||||||
# unique on the immediate broadcast network.
|
# unique on the immediate broadcast network.
|
||||||
@ -284,7 +284,7 @@
|
|||||||
# Logging controls
|
# Logging controls
|
||||||
#
|
#
|
||||||
|
|
||||||
# Logging level: 4 errors, 3 warnings, 2 informations, 1 debug
|
# Logging level: 4 errors, 3 warnings, 2 information, 1 debug
|
||||||
# basically 1 will log everything possible
|
# basically 1 will log everything possible
|
||||||
#log_level = 3
|
#log_level = 3
|
||||||
|
|
||||||
@ -309,7 +309,7 @@
|
|||||||
# the event layer.
|
# the event layer.
|
||||||
|
|
||||||
# Logging outputs:
|
# Logging outputs:
|
||||||
# An output is one of the places to save logging informations
|
# An output is one of the places to save logging information
|
||||||
# The format for an output can be:
|
# The format for an output can be:
|
||||||
# x:stderr
|
# x:stderr
|
||||||
# output goes to stderr
|
# output goes to stderr
|
||||||
@ -366,3 +366,28 @@
|
|||||||
# it with the output of the 'uuidgen' command and then
|
# it with the output of the 'uuidgen' command and then
|
||||||
# uncomment this entry
|
# uncomment this entry
|
||||||
#host_uuid = "00000000-0000-0000-0000-000000000000"
|
#host_uuid = "00000000-0000-0000-0000-000000000000"
|
||||||
|
|
||||||
|
###################################################################
|
||||||
|
# Keepalive protocol:
|
||||||
|
# This allows libvirtd to detect broken client connections or even
|
||||||
|
# dead client. A keepalive message is sent to a client after
|
||||||
|
# keepalive_interval seconds of inactivity to check if the client is
|
||||||
|
# still responding; keepalive_count is a maximum number of keepalive
|
||||||
|
# messages that are allowed to be sent to the client without getting
|
||||||
|
# any response before the connection is considered broken. In other
|
||||||
|
# words, the connection is automatically closed approximately after
|
||||||
|
# keepalive_interval * (keepalive_count + 1) seconds since the last
|
||||||
|
# message received from the client. If keepalive_interval is set to
|
||||||
|
# -1, libvirtd will never send keepalive requests; however clients
|
||||||
|
# can still send them and the deamon will send responses. When
|
||||||
|
# keepalive_count is set to 0, connections will be automatically
|
||||||
|
# closed after keepalive_interval seconds of inactivity without
|
||||||
|
# sending any keepalive messages.
|
||||||
|
#
|
||||||
|
#keepalive_interval = 5
|
||||||
|
#keepalive_count = 5
|
||||||
|
#
|
||||||
|
# If set to 1, libvirtd will refuse to talk to clients that do not
|
||||||
|
# support keepalive protocol. Defaults to 0.
|
||||||
|
#
|
||||||
|
#keepalive_required = 1
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* libvirtd.h: daemon data structure definitions
|
* libvirtd.h: daemon data structure definitions
|
||||||
*
|
*
|
||||||
* Copyright (C) 2006-2011 Red Hat, Inc.
|
* Copyright (C) 2006-2012 Red Hat, Inc.
|
||||||
* Copyright (C) 2006 Daniel P. Berrange
|
* Copyright (C) 2006 Daniel P. Berrange
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
@ -22,8 +22,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef QEMUD_INTERNAL_H__
|
#ifndef LIBVIRTD_H__
|
||||||
# define QEMUD_INTERNAL_H__
|
# define LIBVIRTD_H__
|
||||||
|
|
||||||
|
# define VIR_ENUM_SENTINELS
|
||||||
|
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
|
|
||||||
@ -33,59 +35,11 @@
|
|||||||
# include "qemu_protocol.h"
|
# include "qemu_protocol.h"
|
||||||
# include "logging.h"
|
# include "logging.h"
|
||||||
# include "threads.h"
|
# include "threads.h"
|
||||||
# include "network.h"
|
|
||||||
# if HAVE_SASL
|
# if HAVE_SASL
|
||||||
# include "virnetsaslcontext.h"
|
# include "virnetsaslcontext.h"
|
||||||
# endif
|
# endif
|
||||||
# include "virnetserverprogram.h"
|
# include "virnetserverprogram.h"
|
||||||
|
|
||||||
# if WITH_DTRACE
|
|
||||||
# ifndef LIBVIRTD_PROBES_H
|
|
||||||
# define LIBVIRTD_PROBES_H
|
|
||||||
# include "probes.h"
|
|
||||||
# endif /* LIBVIRTD_PROBES_H */
|
|
||||||
|
|
||||||
/* Systemtap 1.2 headers have a bug where they cannot handle a
|
|
||||||
* variable declared with array type. Work around this by casting all
|
|
||||||
* arguments. This is some gross use of the preprocessor because
|
|
||||||
* PROBE is a var-arg macro, but it is better than the alternative of
|
|
||||||
* making all callers to PROBE have to be aware of the issues. And
|
|
||||||
* hopefully, if we ever add a call to PROBE with other than 2 or 3
|
|
||||||
* end arguments, you can figure out the pattern to extend this hack.
|
|
||||||
*/
|
|
||||||
# define VIR_COUNT_ARGS(...) VIR_ARG5(__VA_ARGS__, 4, 3, 2, 1)
|
|
||||||
# define VIR_ARG5(_1, _2, _3, _4, _5, ...) _5
|
|
||||||
# define VIR_ADD_CAST_EXPAND(a, b, ...) VIR_ADD_CAST_PASTE(a, b, __VA_ARGS__)
|
|
||||||
# define VIR_ADD_CAST_PASTE(a, b, ...) a##b(__VA_ARGS__)
|
|
||||||
|
|
||||||
/* The double cast is necessary to silence gcc warnings; any pointer
|
|
||||||
* can safely go to intptr_t and back to void *, which collapses
|
|
||||||
* arrays into pointers; while any integer can be widened to intptr_t
|
|
||||||
* then cast to void *. */
|
|
||||||
# define VIR_ADD_CAST(a) ((void *)(intptr_t)(a))
|
|
||||||
# define VIR_ADD_CAST2(a, b) \
|
|
||||||
VIR_ADD_CAST(a), VIR_ADD_CAST(b)
|
|
||||||
# define VIR_ADD_CAST3(a, b, c) \
|
|
||||||
VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c)
|
|
||||||
|
|
||||||
# define VIR_ADD_CASTS(...) \
|
|
||||||
VIR_ADD_CAST_EXPAND(VIR_ADD_CAST, VIR_COUNT_ARGS(__VA_ARGS__), \
|
|
||||||
__VA_ARGS__)
|
|
||||||
|
|
||||||
# define PROBE_EXPAND(NAME, ARGS) NAME(ARGS)
|
|
||||||
# define PROBE(NAME, FMT, ...) \
|
|
||||||
VIR_DEBUG_INT("trace." __FILE__ , __func__, __LINE__, \
|
|
||||||
#NAME ": " FMT, __VA_ARGS__); \
|
|
||||||
if (LIBVIRTD_ ## NAME ## _ENABLED()) { \
|
|
||||||
PROBE_EXPAND(LIBVIRTD_ ## NAME, \
|
|
||||||
VIR_ADD_CASTS(__VA_ARGS__)); \
|
|
||||||
}
|
|
||||||
# else
|
|
||||||
# define PROBE(NAME, FMT, ...) \
|
|
||||||
VIR_DEBUG_INT("trace." __FILE__, __func__, __LINE__, \
|
|
||||||
#NAME ": " FMT, __VA_ARGS__);
|
|
||||||
# endif
|
|
||||||
|
|
||||||
typedef struct daemonClientStream daemonClientStream;
|
typedef struct daemonClientStream daemonClientStream;
|
||||||
typedef daemonClientStream *daemonClientStreamPtr;
|
typedef daemonClientStream *daemonClientStreamPtr;
|
||||||
typedef struct daemonClientPrivate daemonClientPrivate;
|
typedef struct daemonClientPrivate daemonClientPrivate;
|
||||||
@ -109,6 +63,7 @@ struct daemonClientPrivate {
|
|||||||
virConnectPtr conn;
|
virConnectPtr conn;
|
||||||
|
|
||||||
daemonClientStreamPtr streams;
|
daemonClientStreamPtr streams;
|
||||||
|
bool keepalive_supported;
|
||||||
};
|
};
|
||||||
|
|
||||||
# if HAVE_SASL
|
# if HAVE_SASL
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
# Required-Start: $network messagebus
|
# Required-Start: $network messagebus
|
||||||
# Should-Start: $named
|
# Should-Start: $named
|
||||||
# Should-Start: xend
|
# Should-Start: xend
|
||||||
# Should-Start: hal
|
|
||||||
# Should-Start: avahi-daemon
|
# Should-Start: avahi-daemon
|
||||||
# Required-Stop: $network messagebus
|
# Required-Stop: $network messagebus
|
||||||
# Should-Stop: $named
|
# Should-Stop: $named
|
||||||
@ -60,6 +59,13 @@ start() {
|
|||||||
echo -n $"Starting $SERVICE daemon: "
|
echo -n $"Starting $SERVICE daemon: "
|
||||||
mkdir -p @localstatedir@/cache/libvirt
|
mkdir -p @localstatedir@/cache/libvirt
|
||||||
rm -rf @localstatedir@/cache/libvirt/*
|
rm -rf @localstatedir@/cache/libvirt/*
|
||||||
|
|
||||||
|
# LIBVIRTD_NOFILES_LIMIT from /etc/sysconfig/libvirtd is not handled
|
||||||
|
# automatically
|
||||||
|
if [ -n "$LIBVIRTD_NOFILES_LIMIT" ]; then
|
||||||
|
ulimit -n "$LIBVIRTD_NOFILES_LIMIT"
|
||||||
|
fi
|
||||||
|
|
||||||
KRB5_KTNAME=$KRB5_KTNAME daemon --pidfile $PIDFILE --check $SERVICE $PROCESS --daemon $LIBVIRTD_CONFIG_ARGS $LIBVIRTD_ARGS
|
KRB5_KTNAME=$KRB5_KTNAME daemon --pidfile $PIDFILE --check $SERVICE $PROCESS --daemon $LIBVIRTD_CONFIG_ARGS $LIBVIRTD_ARGS
|
||||||
RETVAL=$?
|
RETVAL=$?
|
||||||
echo
|
echo
|
||||||
@ -74,7 +80,6 @@ stop() {
|
|||||||
echo
|
echo
|
||||||
if [ $RETVAL -eq 0 ]; then
|
if [ $RETVAL -eq 0 ]; then
|
||||||
rm -f @localstatedir@/lock/subsys/$SERVICE
|
rm -f @localstatedir@/lock/subsys/$SERVICE
|
||||||
rm -f $PIDFILE
|
|
||||||
rm -rf @localstatedir@/cache/libvirt/*
|
rm -rf @localstatedir@/cache/libvirt/*
|
||||||
else
|
else
|
||||||
exit $RETVAL
|
exit $RETVAL
|
||||||
|
@ -34,8 +34,8 @@ file are instantly applied.
|
|||||||
<defaults>
|
<defaults>
|
||||||
<!-- Only a program in the active host session can use libvirt in
|
<!-- Only a program in the active host session can use libvirt in
|
||||||
read-write mode for management, and we require user password -->
|
read-write mode for management, and we require user password -->
|
||||||
<allow_any>no</allow_any>
|
<allow_any>auth_admin</allow_any>
|
||||||
<allow_inactive>no</allow_inactive>
|
<allow_inactive>auth_admin</allow_inactive>
|
||||||
<allow_active>auth_admin_keep_session</allow_active>
|
<allow_active>auth_admin_keep_session</allow_active>
|
||||||
</defaults>
|
</defaults>
|
||||||
</action>
|
</action>
|
||||||
|
@ -34,8 +34,8 @@ file are instantly applied.
|
|||||||
<defaults>
|
<defaults>
|
||||||
<!-- Only a program in the active host session can use libvirt in
|
<!-- Only a program in the active host session can use libvirt in
|
||||||
read-write mode for management, and we require user password -->
|
read-write mode for management, and we require user password -->
|
||||||
<allow_any>no</allow_any>
|
<allow_any>auth_admin</allow_any>
|
||||||
<allow_inactive>no</allow_inactive>
|
<allow_inactive>auth_admin</allow_inactive>
|
||||||
<allow_active>auth_admin_keep</allow_active>
|
<allow_active>auth_admin_keep</allow_active>
|
||||||
</defaults>
|
</defaults>
|
||||||
</action>
|
</action>
|
||||||
|
23
daemon/libvirtd.service.in
Normal file
23
daemon/libvirtd.service.in
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# NB we don't use socket activation. When libvirtd starts it will
|
||||||
|
# spawn any virtual machines registered for autostart. We want this
|
||||||
|
# to occur on every boot, regardless of whether any client connects
|
||||||
|
# to a socket. Thus socket activation doesn't have any benefit
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Virtualization daemon
|
||||||
|
After=syslog.target
|
||||||
|
After=udev.target
|
||||||
|
After=avahi.target
|
||||||
|
After=dbus.target
|
||||||
|
Before=libvirt-guests.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
EnvironmentFile=-/etc/sysconfig/libvirtd
|
||||||
|
ExecStart=@sbindir@/libvirtd $LIBVIRTD_ARGS
|
||||||
|
ExecReload=/bin/kill -HUP $MAINPID
|
||||||
|
KillMode=process
|
||||||
|
# Override the maximum number of opened files
|
||||||
|
#LimitNOFILE=2048
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
@ -1,65 +0,0 @@
|
|||||||
probe libvirt.daemon.client.connect = process("libvirtd").mark("client_connect")
|
|
||||||
{
|
|
||||||
fd = $arg1;
|
|
||||||
readonly = $arg2;
|
|
||||||
localAddr = user_string($arg3);
|
|
||||||
remoteAddr = user_string($arg4);
|
|
||||||
}
|
|
||||||
|
|
||||||
probe libvirt.daemon.client.disconnect = process("libvirtd").mark("client_disconnect")
|
|
||||||
{
|
|
||||||
fd = $arg1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
probe libvirt.daemon.client.tls_allow = process("libvirtd").mark("client_tls_allow")
|
|
||||||
{
|
|
||||||
fd = $arg1;
|
|
||||||
x509dname = user_string($arg2);
|
|
||||||
}
|
|
||||||
|
|
||||||
probe libvirt.daemon.client.tls_deny = process("libvirtd").mark("client_tls_deny")
|
|
||||||
{
|
|
||||||
fd = $arg1;
|
|
||||||
x509dname = user_string($arg2);
|
|
||||||
}
|
|
||||||
|
|
||||||
probe libvirt.daemon.client.tls_fail = process("libvirtd").mark("client_tls_fail")
|
|
||||||
{
|
|
||||||
fd = $arg1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function authtype_to_string(authtype) {
|
|
||||||
if (authtype == 0)
|
|
||||||
return "none"
|
|
||||||
if (authtype == 1)
|
|
||||||
return "sasl"
|
|
||||||
if (authtype == 2)
|
|
||||||
return "polkit"
|
|
||||||
return "unknown"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
probe libvirt.daemon.client.auth_allow = process("libvirtd").mark("client_auth_allow")
|
|
||||||
{
|
|
||||||
fd = $arg1;
|
|
||||||
authtype = $arg2;
|
|
||||||
authname = authtype_to_string($arg2);
|
|
||||||
identity = user_string($arg3);
|
|
||||||
}
|
|
||||||
|
|
||||||
probe libvirt.daemon.client.auth_deny = process("libvirtd").mark("client_auth_deny")
|
|
||||||
{
|
|
||||||
fd = $arg1;
|
|
||||||
authtype = $arg2;
|
|
||||||
authname = authtype_to_string($arg2);
|
|
||||||
identity = user_string($arg3);
|
|
||||||
}
|
|
||||||
|
|
||||||
probe libvirt.daemon.client.auth_fail = process("libvirtd").mark("client_auth_fail")
|
|
||||||
{
|
|
||||||
fd = $arg1;
|
|
||||||
authtype = $arg2;
|
|
||||||
authname = authtype_to_string($arg2);
|
|
||||||
}
|
|
@ -1,4 +1,7 @@
|
|||||||
# Override the default config file
|
# Override the default config file
|
||||||
|
# NOTE: This setting is no longer honoured if using
|
||||||
|
# systemd. Set '--config /etc/libvirt/libvirtd.conf'
|
||||||
|
# in LIBVIRTD_ARGS instead.
|
||||||
#LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf
|
#LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf
|
||||||
|
|
||||||
# Listen for TCP/IP connections
|
# Listen for TCP/IP connections
|
||||||
@ -16,3 +19,6 @@
|
|||||||
#QEMU_AUDIO_DRV=sdl
|
#QEMU_AUDIO_DRV=sdl
|
||||||
#
|
#
|
||||||
#SDL_AUDIODRIVER=pulse
|
#SDL_AUDIODRIVER=pulse
|
||||||
|
|
||||||
|
# Override the maximum number of opened files
|
||||||
|
#LIBVIRTD_NOFILES_LIMIT=2048
|
||||||
|
8
daemon/libvirtd.sysctl
Normal file
8
daemon/libvirtd.sysctl
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# The kernel allocates aio memory on demand, and this number limits the
|
||||||
|
# number of parallel aio requests; the only drawback of a larger limit is
|
||||||
|
# that a malicious guest could issue parallel requests to cause the kernel
|
||||||
|
# to set aside memory. Set this number at least as large as
|
||||||
|
# 128 * (number of virtual disks on the host)
|
||||||
|
# Libvirt uses a default of 1M requests to allow 8k disks, with at most
|
||||||
|
# 64M of kernel memory if all disks hit an aio request at the same time.
|
||||||
|
fs.aio-max-nr = 1048576
|
@ -31,9 +31,11 @@ script
|
|||||||
ulimit -c "$DAEMON_COREFILE_LIMIT"
|
ulimit -c "$DAEMON_COREFILE_LIMIT"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clean up a pidfile that might be left around
|
# LIBVIRTD_NOFILES_LIMIT from /etc/sysconfig/libvirtd is not handled
|
||||||
rm -f /var/run/libvirtd.pid
|
# automatically
|
||||||
|
if [ -n "$LIBVIRTD_NOFILES_LIMIT" ]; then
|
||||||
|
ulimit -n "$LIBVIRTD_NOFILES_LIMIT"
|
||||||
|
fi
|
||||||
mkdir -p /var/cache/libvirt
|
mkdir -p /var/cache/libvirt
|
||||||
rm -rf /var/cache/libvirt/*
|
rm -rf /var/cache/libvirt/*
|
||||||
|
|
||||||
@ -41,6 +43,5 @@ script
|
|||||||
end script
|
end script
|
||||||
|
|
||||||
post-stop script
|
post-stop script
|
||||||
rm -f $PIDFILE
|
|
||||||
rm -rf /var/cache/libvirt/*
|
rm -rf /var/cache/libvirt/*
|
||||||
end script
|
end script
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
provider libvirtd {
|
|
||||||
probe client_connect(int fd, int readonly, const char *localAddr, const char *remoteAddr);
|
|
||||||
probe client_disconnect(int fd);
|
|
||||||
|
|
||||||
probe client_auth_allow(int fd, int authtype, const char *identity);
|
|
||||||
probe client_auth_deny(int fd, int authtype, const char *identity);
|
|
||||||
probe client_auth_fail(int fd, int authtype);
|
|
||||||
|
|
||||||
probe client_tls_allow(int fd, const char *x509dname);
|
|
||||||
probe client_tls_deny(int fd, const char *x509dname);
|
|
||||||
probe client_tls_fail(int fd);
|
|
||||||
};
|
|
1025
daemon/remote.c
1025
daemon/remote.c
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* stream.c: APIs for managing client streams
|
* stream.c: APIs for managing client streams
|
||||||
*
|
*
|
||||||
* Copyright (C) 2009 Red Hat, Inc.
|
* Copyright (C) 2009, 2011 Red Hat, Inc.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@ -94,7 +94,7 @@ daemonStreamUpdateEvents(daemonClientStream *stream)
|
|||||||
* fast stream, but slow client
|
* fast stream, but slow client
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
daemonStreamMessageFinished(virNetMessagePtr msg,
|
daemonStreamMessageFinished(virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||||
void *opaque)
|
void *opaque)
|
||||||
{
|
{
|
||||||
daemonClientStream *stream = opaque;
|
daemonClientStream *stream = opaque;
|
||||||
@ -143,7 +143,8 @@ daemonStreamEvent(virStreamPtr st, int events, void *opaque)
|
|||||||
|
|
||||||
VIR_DEBUG("st=%p events=%d EOF=%d closed=%d", st, events, stream->recvEOF, stream->closed);
|
VIR_DEBUG("st=%p events=%d EOF=%d closed=%d", st, events, stream->recvEOF, stream->closed);
|
||||||
|
|
||||||
if (events & VIR_STREAM_EVENT_WRITABLE) {
|
if (!stream->closed &&
|
||||||
|
(events & VIR_STREAM_EVENT_WRITABLE)) {
|
||||||
if (daemonStreamHandleWrite(client, stream) < 0) {
|
if (daemonStreamHandleWrite(client, stream) < 0) {
|
||||||
daemonRemoveClientStream(client, stream);
|
daemonRemoveClientStream(client, stream);
|
||||||
virNetServerClientClose(client);
|
virNetServerClientClose(client);
|
||||||
@ -151,9 +152,9 @@ daemonStreamEvent(virStreamPtr st, int events, void *opaque)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!stream->recvEOF &&
|
if (!stream->closed && !stream->recvEOF &&
|
||||||
(events & (VIR_STREAM_EVENT_READABLE | VIR_STREAM_EVENT_HANGUP))) {
|
(events & (VIR_STREAM_EVENT_READABLE))) {
|
||||||
events = events & ~(VIR_STREAM_EVENT_READABLE | VIR_STREAM_EVENT_HANGUP);
|
events = events & ~(VIR_STREAM_EVENT_READABLE);
|
||||||
if (daemonStreamHandleRead(client, stream) < 0) {
|
if (daemonStreamHandleRead(client, stream) < 0) {
|
||||||
daemonRemoveClientStream(client, stream);
|
daemonRemoveClientStream(client, stream);
|
||||||
virNetServerClientClose(client);
|
virNetServerClientClose(client);
|
||||||
@ -190,6 +191,37 @@ daemonStreamEvent(virStreamPtr st, int events, void *opaque)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* If we got HANGUP, we need to only send an empty
|
||||||
|
* packet so the client sees an EOF and cleans up
|
||||||
|
*/
|
||||||
|
if (!stream->closed && !stream->recvEOF &&
|
||||||
|
(events & VIR_STREAM_EVENT_HANGUP)) {
|
||||||
|
virNetMessagePtr msg;
|
||||||
|
events &= ~(VIR_STREAM_EVENT_HANGUP);
|
||||||
|
stream->tx = 0;
|
||||||
|
stream->recvEOF = 1;
|
||||||
|
if (!(msg = virNetMessageNew(false))) {
|
||||||
|
daemonRemoveClientStream(client, stream);
|
||||||
|
virNetServerClientClose(client);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
msg->cb = daemonStreamMessageFinished;
|
||||||
|
msg->opaque = stream;
|
||||||
|
stream->refs++;
|
||||||
|
if (virNetServerProgramSendStreamData(remoteProgram,
|
||||||
|
client,
|
||||||
|
msg,
|
||||||
|
stream->procedure,
|
||||||
|
stream->serial,
|
||||||
|
"", 0) < 0) {
|
||||||
|
virNetMessageFree(msg);
|
||||||
|
daemonRemoveClientStream(client, stream);
|
||||||
|
virNetServerClientClose(client);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!stream->closed &&
|
if (!stream->closed &&
|
||||||
(events & (VIR_STREAM_EVENT_ERROR | VIR_STREAM_EVENT_HANGUP))) {
|
(events & (VIR_STREAM_EVENT_ERROR | VIR_STREAM_EVENT_HANGUP))) {
|
||||||
int ret;
|
int ret;
|
||||||
@ -244,7 +276,7 @@ cleanup:
|
|||||||
* -1 on fatal client error
|
* -1 on fatal client error
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
daemonStreamFilter(virNetServerClientPtr client,
|
daemonStreamFilter(virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||||
virNetMessagePtr msg,
|
virNetMessagePtr msg,
|
||||||
void *opaque)
|
void *opaque)
|
||||||
{
|
{
|
||||||
@ -524,7 +556,7 @@ daemonStreamHandleWriteData(virNetServerClientPtr client,
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Process an finish handshake from the client.
|
* Process a finish handshake from the client.
|
||||||
*
|
*
|
||||||
* Returns a VIR_NET_OK confirmation if successful, or a VIR_NET_ERROR
|
* Returns a VIR_NET_OK confirmation if successful, or a VIR_NET_ERROR
|
||||||
* if there was a stream error
|
* if there was a stream error
|
||||||
|
@ -54,8 +54,8 @@ listen_addr = \"192.168.0.1\"
|
|||||||
# Alternatively can disable for all services on a host by
|
# Alternatively can disable for all services on a host by
|
||||||
# stopping the Avahi daemon
|
# stopping the Avahi daemon
|
||||||
#
|
#
|
||||||
# This is enabled by default, uncomment this to disable it
|
# This is disabled by default, uncomment this to enable it
|
||||||
mdns_adv = 0
|
mdns_adv = 1
|
||||||
|
|
||||||
# Override the default mDNS advertizement name. This must be
|
# Override the default mDNS advertizement name. This must be
|
||||||
# unique on the immediate broadcast network.
|
# unique on the immediate broadcast network.
|
||||||
@ -330,8 +330,8 @@ audit_level = 2
|
|||||||
{ "#comment" = "Alternatively can disable for all services on a host by" }
|
{ "#comment" = "Alternatively can disable for all services on a host by" }
|
||||||
{ "#comment" = "stopping the Avahi daemon" }
|
{ "#comment" = "stopping the Avahi daemon" }
|
||||||
{ "#comment" = "" }
|
{ "#comment" = "" }
|
||||||
{ "#comment" = "This is enabled by default, uncomment this to disable it" }
|
{ "#comment" = "This is disabled by default, uncomment this to enable it" }
|
||||||
{ "mdns_adv" = "0" }
|
{ "mdns_adv" = "1" }
|
||||||
{ "#empty" }
|
{ "#empty" }
|
||||||
{ "#comment" = "Override the default mDNS advertizement name. This must be" }
|
{ "#comment" = "Override the default mDNS advertizement name. This must be" }
|
||||||
{ "#comment" = "unique on the immediate broadcast network." }
|
{ "#comment" = "unique on the immediate broadcast network." }
|
||||||
|
8
docs/.gitignore
vendored
8
docs/.gitignore
vendored
@ -1,8 +0,0 @@
|
|||||||
Makefile
|
|
||||||
Makefile.in
|
|
||||||
.memdump
|
|
||||||
apibuild.pyc
|
|
||||||
*.html
|
|
||||||
libvirt-api.xml
|
|
||||||
libvirt-refs.xml
|
|
||||||
todo.html.in
|
|
@ -60,7 +60,12 @@ png = \
|
|||||||
libvirt-driver-arch.png \
|
libvirt-driver-arch.png \
|
||||||
libvirt-object-model.png \
|
libvirt-object-model.png \
|
||||||
madeWith.png \
|
madeWith.png \
|
||||||
et.png
|
et.png \
|
||||||
|
migration-managed-direct.png \
|
||||||
|
migration-managed-p2p.png \
|
||||||
|
migration-native.png \
|
||||||
|
migration-tunnel.png \
|
||||||
|
migration-unmanaged-direct.png
|
||||||
|
|
||||||
gif = \
|
gif = \
|
||||||
architecture.gif \
|
architecture.gif \
|
||||||
@ -80,12 +85,20 @@ qemu_xml = \
|
|||||||
libvirt-qemu-api.xml \
|
libvirt-qemu-api.xml \
|
||||||
libvirt-qemu-refs.xml
|
libvirt-qemu-refs.xml
|
||||||
|
|
||||||
|
apidir = $(pkgdatadir)/api
|
||||||
|
api_DATA = libvirt-api.xml libvirt-qemu-api.xml
|
||||||
|
|
||||||
fig = \
|
fig = \
|
||||||
libvirt-net-logical.fig \
|
libvirt-net-logical.fig \
|
||||||
libvirt-net-physical.fig \
|
libvirt-net-physical.fig \
|
||||||
libvirt-daemon-arch.fig \
|
libvirt-daemon-arch.fig \
|
||||||
libvirt-driver-arch.fig \
|
libvirt-driver-arch.fig \
|
||||||
libvirt-object-model.fig
|
libvirt-object-model.fig \
|
||||||
|
migration-managed-direct.fig \
|
||||||
|
migration-managed-p2p.fig \
|
||||||
|
migration-native.fig \
|
||||||
|
migration-tunnel.fig \
|
||||||
|
migration-unmanaged-direct.fig
|
||||||
|
|
||||||
EXTRA_DIST= \
|
EXTRA_DIST= \
|
||||||
apibuild.py \
|
apibuild.py \
|
||||||
@ -103,7 +116,7 @@ MAINTAINERCLEANFILES = \
|
|||||||
$(addprefix $(srcdir)/,$(apihtml)) \
|
$(addprefix $(srcdir)/,$(apihtml)) \
|
||||||
$(addprefix $(srcdir)/,$(devhelphtml))
|
$(addprefix $(srcdir)/,$(devhelphtml))
|
||||||
|
|
||||||
all: web
|
all-am: web
|
||||||
|
|
||||||
api: $(srcdir)/libvirt-api.xml $(srcdir)/libvirt-refs.xml
|
api: $(srcdir)/libvirt-api.xml $(srcdir)/libvirt-refs.xml
|
||||||
qemu_api: $(srcdir)/libvirt-qemu-api.xml $(srcdir)/libvirt-qemu-refs.xml
|
qemu_api: $(srcdir)/libvirt-qemu-api.xml $(srcdir)/libvirt-qemu-refs.xml
|
||||||
|
@ -100,7 +100,7 @@ index dfc6415..3642296 100644
|
|||||||
+ /* If xendConfigVersion is 2, then we can only report _LIVE (and
|
+ /* If xendConfigVersion is 2, then we can only report _LIVE (and
|
||||||
+ * xm_internal reports _CONFIG). If it is 3, then _LIVE and
|
+ * xm_internal reports _CONFIG). If it is 3, then _LIVE and
|
||||||
+ * _CONFIG are always in sync for a running system. */
|
+ * _CONFIG are always in sync for a running system. */
|
||||||
+ if (domain->id < 0 && priv->xendConfigVersion < 3)
|
+ if (domain->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
|
||||||
+ return -2;
|
+ return -2;
|
||||||
+ if (domain->id < 0 && (flags & VIR_DOMAIN_VCPU_LIVE)) {
|
+ if (domain->id < 0 && (flags & VIR_DOMAIN_VCPU_LIVE)) {
|
||||||
+ virXendError(VIR_ERR_OPERATION_INVALID, "%s",
|
+ virXendError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||||
|
@ -110,7 +110,7 @@ index fe2ff86..66e8518 100644
|
|||||||
+ * depends on xendConfigVersion. */
|
+ * depends on xendConfigVersion. */
|
||||||
+ if (dom) {
|
+ if (dom) {
|
||||||
+ priv = dom->conn->privateData;
|
+ priv = dom->conn->privateData;
|
||||||
+ if (priv->xendConfigVersion >= 3)
|
+ if (priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
|
||||||
+ flags |= VIR_DOMAIN_VCPU_CONFIG;
|
+ flags |= VIR_DOMAIN_VCPU_CONFIG;
|
||||||
+ }
|
+ }
|
||||||
+ return xenUnifiedDomainSetVcpusFlags(dom, nvcpus, flags);
|
+ return xenUnifiedDomainSetVcpusFlags(dom, nvcpus, flags);
|
||||||
@ -163,14 +163,14 @@ index 3642296..55c2cc4 100644
|
|||||||
+
|
+
|
||||||
+ priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
|
+ priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
|
||||||
+
|
+
|
||||||
+ if ((domain->id < 0 && priv->xendConfigVersion < 3) ||
|
+ if ((domain->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) ||
|
||||||
+ (flags & VIR_DOMAIN_VCPU_MAXIMUM))
|
+ (flags & VIR_DOMAIN_VCPU_MAXIMUM))
|
||||||
+ return -2;
|
+ return -2;
|
||||||
+
|
+
|
||||||
+ /* With xendConfigVersion 2, only _LIVE is supported. With
|
+ /* With xendConfigVersion 2, only _LIVE is supported. With
|
||||||
+ * xendConfigVersion 3, only _LIVE|_CONFIG is supported for
|
+ * xendConfigVersion 3, only _LIVE|_CONFIG is supported for
|
||||||
+ * running domains, or _CONFIG for inactive domains. */
|
+ * running domains, or _CONFIG for inactive domains. */
|
||||||
+ if (priv->xendConfigVersion < 3) {
|
+ if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
|
||||||
+ if (flags & VIR_DOMAIN_VCPU_CONFIG) {
|
+ if (flags & VIR_DOMAIN_VCPU_CONFIG) {
|
||||||
+ virXendError(VIR_ERR_OPERATION_INVALID, "%s",
|
+ virXendError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||||
+ _("Xend version does not support modifying "
|
+ _("Xend version does not support modifying "
|
||||||
|
@ -122,7 +122,7 @@ index 55c2cc4..b90c331 100644
|
|||||||
-
|
-
|
||||||
- priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
|
- priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
|
||||||
-
|
-
|
||||||
- if (domain->id < 0 && priv->xendConfigVersion < 3)
|
- if (domain->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
|
||||||
- return(-1);
|
- return(-1);
|
||||||
-
|
-
|
||||||
- snprintf(buf, sizeof(buf), "%d", vcpus);
|
- snprintf(buf, sizeof(buf), "%d", vcpus);
|
||||||
|
@ -1649,6 +1649,7 @@ class CParser:
|
|||||||
"virDomainSetMemoryFlags" : (False, ("memory")),
|
"virDomainSetMemoryFlags" : (False, ("memory")),
|
||||||
"virDomainBlockJobSetSpeed" : (False, ("bandwidth")),
|
"virDomainBlockJobSetSpeed" : (False, ("bandwidth")),
|
||||||
"virDomainBlockPull" : (False, ("bandwidth")),
|
"virDomainBlockPull" : (False, ("bandwidth")),
|
||||||
|
"virDomainBlockRebase" : (False, ("bandwidth")),
|
||||||
"virDomainMigrateGetMaxSpeed" : (False, ("bandwidth")) }
|
"virDomainMigrateGetMaxSpeed" : (False, ("bandwidth")) }
|
||||||
|
|
||||||
def checkLongLegacyFunction(self, name, return_type, signature):
|
def checkLongLegacyFunction(self, name, return_type, signature):
|
||||||
|
@ -348,5 +348,16 @@
|
|||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
|
<h2><a name="mobile">Mobile applications</a></h2>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt><a href="https://market.android.com/details?id=vm.manager">VM Manager</a></dt>
|
||||||
|
<dd>
|
||||||
|
VM Manager is VM (libvirt) manager (over SSH) application. VM Manager
|
||||||
|
is an application for libvirt VM / Domain management over SSH.
|
||||||
|
Please keep in mind that this software is under heavy development.
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Landscape
|
Landscape
|
||||||
Center
|
Center
|
||||||
Inches
|
Inches
|
||||||
Letter
|
Letter
|
||||||
100.00
|
100.00
|
||||||
Single
|
Single
|
||||||
-2
|
-2
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
<h1 >Access control</h1>
|
<h1 >Authentication & access control</h1>
|
||||||
<p>
|
<p>
|
||||||
When connecting to libvirt, some connections may require client
|
When connecting to libvirt, some connections may require client
|
||||||
authentication before allowing use of the APIs. The set of possible
|
authentication before allowing use of the APIs. The set of possible
|
||||||
@ -11,6 +11,122 @@
|
|||||||
|
|
||||||
<ul id="toc"></ul>
|
<ul id="toc"></ul>
|
||||||
|
|
||||||
|
<h2><a name="Auth_client_config">Client configuration</a></h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
When connecting to a remote hypervisor which requires authentication,
|
||||||
|
most libvirt applications will prompt the user for the credentials. It is
|
||||||
|
also possible to provide a client configuration file containing all the
|
||||||
|
authentication credentials, avoiding any interaction. Libvirt will look
|
||||||
|
for the authentication file using the following sequence:
|
||||||
|
</p>
|
||||||
|
<ol>
|
||||||
|
<li>The file path specified by the $LIBVIRT_AUTH_FILE environment
|
||||||
|
variable.</li>
|
||||||
|
<li>The file path specified by the "authfile=/some/file" URI
|
||||||
|
query parameter</li>
|
||||||
|
<li>The file $HOME/.libvirt/auth.conf</li>
|
||||||
|
<li>The file /etc/libvirt/auth.conf</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The auth configuration file uses the traditional <code>".ini"</code>
|
||||||
|
style syntax. There are two types of groups that can be present in
|
||||||
|
the config. First there are one or more <strong>credential</strong>
|
||||||
|
sets, which provide the actual authentication credentials. The keys
|
||||||
|
within the group may be:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><code>username</code>: the user login name to act as. This
|
||||||
|
is relevant for ESX, Xen, HyperV and SSH, but probably not
|
||||||
|
the one you want to libvirtd with SASL.</li>
|
||||||
|
<li><code>authname</code>: the name to authorize as. This is
|
||||||
|
what is commonly required for libvirtd with SASL.</li>
|
||||||
|
<li><code>password</code>: the secret password</li>
|
||||||
|
<li><code>realm</code>: the domain realm for SASL, mostly
|
||||||
|
unused</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Each set of credentials has a name, which is part of the group
|
||||||
|
entry name. Overall the syntax is
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
[credentials-$NAME]
|
||||||
|
credname1=value1
|
||||||
|
credname2=value2</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
For example, to define two sets of credentials used for production
|
||||||
|
and test machines, using libvirtd, and a further ESX server for dev:
|
||||||
|
</p>
|
||||||
|
<pre>
|
||||||
|
[credentials-test]
|
||||||
|
authname=fred
|
||||||
|
password=123456
|
||||||
|
|
||||||
|
[credentials-prod]
|
||||||
|
authname=bar
|
||||||
|
password=letmein
|
||||||
|
|
||||||
|
[credentials-dev]
|
||||||
|
username=joe
|
||||||
|
password=hello</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The second set of groups provide mappings of credentials to
|
||||||
|
specific machine services. The config file group names compromise
|
||||||
|
the service type and host:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
[auth-$SERVICE-$HOSTNAME]
|
||||||
|
credentials=$CREDENTIALS</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
For example, following the previous example, here is how to
|
||||||
|
list some machines
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
[auth-libvirt-test1.example.com]
|
||||||
|
credentials=test
|
||||||
|
|
||||||
|
[auth-libvirt-test2.example.com]
|
||||||
|
credentials=test
|
||||||
|
|
||||||
|
[auth-libvirt-demo3.example.com]
|
||||||
|
credentials=test
|
||||||
|
|
||||||
|
[auth-libvirt-prod1.example.com]
|
||||||
|
credentials=prod
|
||||||
|
|
||||||
|
[auth-esx-dev1.example.com]
|
||||||
|
credentials=dev</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The following service types are known to libvirt
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li><code>libvirt</code> - used for connections to a libvirtd
|
||||||
|
server, which is configured with SASL auth</li>
|
||||||
|
<li><code>ssh</code> - used for connections to a Phyp server
|
||||||
|
over SSH</li>
|
||||||
|
<li><code>esx</code> - used for connections to an ESX or
|
||||||
|
VirtualCenter server</li>
|
||||||
|
<li><code>xen</code> - used for connections to a Xen Enterprise
|
||||||
|
sever using XenAPI</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Applications using libvirt are free to use this same configuration
|
||||||
|
file for storing other credentials. For example, it can be used
|
||||||
|
to storage VNC or SPICE login credentials
|
||||||
|
</p>
|
||||||
|
|
||||||
<h2><a name="ACL_server_config">Server configuration</a></h2>
|
<h2><a name="ACL_server_config">Server configuration</a></h2>
|
||||||
<p>
|
<p>
|
||||||
The libvirt daemon allows the administrator to choose the authentication
|
The libvirt daemon allows the administrator to choose the authentication
|
||||||
|
@ -9,22 +9,47 @@
|
|||||||
<h2><a name="bugzilla">Bug Tracking</a></h2>
|
<h2><a name="bugzilla">Bug Tracking</a></h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
The <a href="http://bugzilla.redhat.com">Red Hat Bugzilla Server</a>
|
If you are using libvirt binaries from a Linux distribution
|
||||||
should be used to report bugs and request features in libvirt.
|
check below for distribution specific bug reporting policies
|
||||||
Before submitting a ticket, check the existing tickets to see if
|
first.
|
||||||
the bug/feature is already tracked.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2><a name="general">General libvirt bug reports</a></h2>
|
<h2><a name="general">General libvirt bug reports</a></h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
If you are using official libvirt binaries from a Linux distribution
|
The <a href="http://bugzilla.redhat.com">Red Hat Bugzilla Server</a>
|
||||||
check below for distribution specific bug reporting policies first.
|
should be used to report bugs and request features in libvirt.
|
||||||
|
Before submitting a ticket, check the existing tickets to see if
|
||||||
|
the bug/feature is already tracked.
|
||||||
|
|
||||||
For general libvirt bug reports, from self-built releases, GIT snapshots
|
For general libvirt bug reports, from self-built releases, GIT snapshots
|
||||||
and any other non-distribution supported builds, enter tickets under
|
and any other non-distribution supported builds, enter tickets under
|
||||||
the <code>Virtualization Tools</code> product and the <code>libvirt</code>
|
the <code>Virtualization Tools</code> product and the <code>libvirt</code>
|
||||||
component.
|
component.
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
It's always a good idea to file bug reports, as the process of
|
||||||
|
filing the report always makes it easier to describe the
|
||||||
|
problem, and the bug number provides a quick way of referring to
|
||||||
|
the problem. However, not everybody in the community pays
|
||||||
|
attention to bugzilla, so after you file a bug, asking questions
|
||||||
|
and submitting patches on <a href="contact.html">the libvirt
|
||||||
|
mailing lists</a> will increase your bug's visibility and
|
||||||
|
encourage people to think about your problem. Don't hesitate to
|
||||||
|
ask questions on the list, as others may know of existing
|
||||||
|
solutions or be interested in collaborating with you on finding
|
||||||
|
a solution. Patches are always appreciated, and it's likely
|
||||||
|
that someone else has the same problem you do!
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
If you decide to write code, though, before you begin please
|
||||||
|
read the <a href="hacking.html">contributor guidelines</a>,
|
||||||
|
especially the first point: "Discuss any large changes on the
|
||||||
|
mailing list first. Post patches early and listen to feedback."
|
||||||
|
Few development experiences are more discouraging than spending
|
||||||
|
a bunch of time writing a patch only to have someone point out a
|
||||||
|
better approach on list.
|
||||||
|
</p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="http://bugzilla.redhat.com/buglist.cgi?component=libvirt&product=Virtualization%20Tools">View libvirt tickets</a></li>
|
<li><a href="http://bugzilla.redhat.com/buglist.cgi?component=libvirt&product=Virtualization%20Tools">View libvirt tickets</a></li>
|
||||||
@ -34,26 +59,37 @@
|
|||||||
<h2><a name="distribution">Linux Distribution specific bug reports</a></h2>
|
<h2><a name="distribution">Linux Distribution specific bug reports</a></h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
If you are using official binaries from a <strong>Fedora distribution</strong>, enter
|
If you are using binaries from <strong>Fedora</strong>, enter
|
||||||
tickets against the <code>Fedora</code> product and the <code>libvirt</code>
|
tickets against the <code>Fedora</code> product and
|
||||||
component.
|
the <code>libvirt</code> component.
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="http://bugzilla.redhat.com/buglist.cgi?component=libvirt&product=Fedora">View Fedora libvirt tickets</a></li>
|
<li><a href="http://bugzilla.redhat.com/buglist.cgi?component=libvirt&product=Fedora">View Fedora libvirt tickets</a></li>
|
||||||
<li><a href="http://bugzilla.redhat.com/bugzilla/enter_bug.cgi?product=Fedora&component=libvirt">New Fedora libvirt ticket</a></li>
|
<li><a href="http://bugzilla.redhat.com/bugzilla/enter_bug.cgi?product=Fedora&component=libvirt">New Fedora libvirt ticket</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
If you are using official binaries from <strong>Red Hat Enterprise Linux distribution</strong>,
|
<p>
|
||||||
tickets against the <code>Red Hat Enterprise Linux 5</code> product and
|
If you are using binaries from <strong>Red Hat Enterprise
|
||||||
the <code>libvirt</code> component.
|
Linux</strong>, enter tickets against the Red Hat Enterprise
|
||||||
<ul>
|
Linux product that you're using (e.g., Red Hat Enterprise
|
||||||
<li><a href="http://bugzilla.redhat.com/buglist.cgi?component=libvirt&product=Red%20Hat%20Enterprise%20Linux%205">View Red Hat Enterprise Linux libvirt tickets</a></li>
|
Linux 6) and the <code>libvirt</code> component. Red Hat
|
||||||
<li><a href="http://bugzilla.redhat.com/bugzilla/enter_bug.cgi?product=Red%20Hat%20Enterprise%20Linux%205&component=libvirt">New Red Hat Enterprise Linux libvirt ticket</a></li>
|
bugzilla has <a href="http://bugzilla.redhat.com">additional guidance</a> about getting support if
|
||||||
</ul>
|
you are a Red Hat customer.
|
||||||
|
</p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
If you are using official binaries from another Linux distribution first
|
<p>
|
||||||
follow their own bug reporting guidelines.
|
If you are using binaries from another Linux distribution
|
||||||
|
first follow their own bug reporting guidelines.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
Finally, if you are a contributor to another Linux
|
||||||
|
distribution and would like to have your procedure for
|
||||||
|
filing bugs mentioned here, please mail the libvirt
|
||||||
|
development list.
|
||||||
|
</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@ -81,18 +117,18 @@
|
|||||||
If the bug leads to a tool linked to libvirt crash, then the best
|
If the bug leads to a tool linked to libvirt crash, then the best
|
||||||
is to provide a backtrace along with the scenario used to get the
|
is to provide a backtrace along with the scenario used to get the
|
||||||
crash, the simplest is to run the program under gdb, reproduce the
|
crash, the simplest is to run the program under gdb, reproduce the
|
||||||
steps leading to the crash and then issue a gdb "bt" command to
|
steps leading to the crash and then issue a gdb "bt -a" command to
|
||||||
get the stack trace, attach it to the bug. Note that for the
|
get the stack trace, attach it to the bug. Note that for the
|
||||||
data to be really useful libvirt debug informations must be present
|
data to be really useful libvirt debug informations must be present
|
||||||
for example by installing libvirt debuginfo package on Fedora or
|
for example by installing libvirt debuginfo package on Fedora or
|
||||||
Red Hat Enterprise Linux (with debuginfo-install libvirt) prior
|
Red Hat Enterprise Linux (with debuginfo-install libvirt) prior
|
||||||
to running gdb.</p>
|
to running gdb.</p>
|
||||||
<p>
|
<p>
|
||||||
It may also happen that the libvirt daemon itself crashes or get stuck,
|
It may also happen that the libvirt daemon itself crashes or gets stuck,
|
||||||
in the first case run it (as root) under gdb, and reproduce the sequence
|
in the first case run it (as root) under gdb, and reproduce the sequence
|
||||||
leading to the crash, similary to a normal program provide the
|
leading to the crash, similary to a normal program provide the
|
||||||
"bt" backtrace information to where gdb will have stopped.<br/>
|
"bt" backtrace information to where gdb will have stopped.<br/>
|
||||||
But if libvirtd get stuck, for example seems to stop processing
|
But if libvirtd gets stuck, for example seems to stop processing
|
||||||
commands, try to attach to the faulty daemon and issue a gdb command
|
commands, try to attach to the faulty daemon and issue a gdb command
|
||||||
"thread apply all bt" to show all the threads backtraces, as in:</p>
|
"thread apply all bt" to show all the threads backtraces, as in:</p>
|
||||||
<pre> # ps -o etime,pid `pgrep libvirt`
|
<pre> # ps -o etime,pid `pgrep libvirt`
|
||||||
@ -106,10 +142,5 @@
|
|||||||
(gdb)
|
(gdb)
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>
|
|
||||||
If requesting a new feature attach any available patch to the ticket
|
|
||||||
and also email the patch to the libvirt mailing list for discussion
|
|
||||||
</p>
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
4
docs/devhelp/.gitignore
vendored
4
docs/devhelp/.gitignore
vendored
@ -1,4 +0,0 @@
|
|||||||
Makefile
|
|
||||||
Makefile.in
|
|
||||||
libvirt.devhelp
|
|
||||||
*.html
|
|
@ -56,7 +56,7 @@ esx://example-esx.com/?no_verify=1 (ESX over HTTPS, but doesn't verify the s
|
|||||||
URIs have this general form (<code>[...]</code> marks an optional part).
|
URIs have this general form (<code>[...]</code> marks an optional part).
|
||||||
</p>
|
</p>
|
||||||
<pre>
|
<pre>
|
||||||
type://[username@]hostname[:port]/[datacenter[/cluster]/server][?extraparameters]
|
type://[username@]hostname[:port]/[[folder/...]datacenter/[folder/...][cluster/]server][?extraparameters]
|
||||||
</pre>
|
</pre>
|
||||||
<p>
|
<p>
|
||||||
The <code>type://</code> is either <code>esx://</code> or
|
The <code>type://</code> is either <code>esx://</code> or
|
||||||
@ -79,6 +79,14 @@ type://[username@]hostname[:port]/[datacenter[/cluster]/server][?extraparameters
|
|||||||
</p>
|
</p>
|
||||||
<pre>
|
<pre>
|
||||||
vpx://example-vcenter.com/dc1/cluster1/example-esx.com
|
vpx://example-vcenter.com/dc1/cluster1/example-esx.com
|
||||||
|
</pre>
|
||||||
|
<p>
|
||||||
|
Datacenters and clusters can be organized in folders, those have to be
|
||||||
|
specified as well. The driver can handle folders
|
||||||
|
<span class="since">since 0.9.7</span>.
|
||||||
|
</p>
|
||||||
|
<pre>
|
||||||
|
vpx://example-vcenter.com/folder1/dc1/folder2/example-esx.com
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,10 +35,27 @@ mount them use:
|
|||||||
<p>
|
<p>
|
||||||
NB, the blkio controller in some kernels will not allow creation of nested
|
NB, the blkio controller in some kernels will not allow creation of nested
|
||||||
sub-directories which will prevent correct operation of the libvirt LXC
|
sub-directories which will prevent correct operation of the libvirt LXC
|
||||||
driver. On such kernels, it may be neccessary to unmount the blkio controller.
|
driver. On such kernels, it may be necessary to unmount the blkio controller.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Environment setup for the container init</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
When the container "init" process is started, it will be given several useful
|
||||||
|
environment variables.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>LIBVIRT_LXC_NAME</dt>
|
||||||
|
<dd>The name assigned to the container by libvirt</dd>
|
||||||
|
<dt>LIBVIRT_LXC_UUID</dt>
|
||||||
|
<dd>The UUID assigned to the container by libvirt</dd>
|
||||||
|
<dt>LIBVIRT_LXC_CMDLINE</dt>
|
||||||
|
<dd>The unparsed command line arguments specified in the container configuration</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
|
||||||
<h3>Example config version 1</h3>
|
<h3>Example config version 1</h3>
|
||||||
<p></p>
|
<p></p>
|
||||||
<pre>
|
<pre>
|
||||||
|
@ -67,7 +67,7 @@ openvz+ssh://root@example.com/system (remote access, SSH tunnelled)
|
|||||||
script must be created manually by the host OS administrator. The
|
script must be created manually by the host OS administrator. The
|
||||||
simplest way is to just download the latest version of this script
|
simplest way is to just download the latest version of this script
|
||||||
from a newer OpenVZ release, or upstream source repository. Then
|
from a newer OpenVZ release, or upstream source repository. Then
|
||||||
a generic configuration file <code>/etc/vz/vznetctl.conf</code>
|
a generic configuration file <code>/etc/vz/vznet.conf</code>
|
||||||
must be created containing
|
must be created containing
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -432,9 +432,16 @@ mount -t cgroup none /dev/cgroup -o devices
|
|||||||
<h3><a name="xmlimport">Converting from QEMU args to domain XML</a></h3>
|
<h3><a name="xmlimport">Converting from QEMU args to domain XML</a></h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
The <code>virsh domxml-from-native</code> provides a way to convert an
|
The <code>virsh domxml-from-native</code> provides a way to
|
||||||
existing set of QEMU args into a guest description using libvirt Domain XML
|
convert an existing set of QEMU args into a guest description
|
||||||
that can then be used by libvirt.
|
using libvirt Domain XML that can then be used by libvirt.
|
||||||
|
Please note that this command is intended to be used to convert
|
||||||
|
existing qemu guests previously started from the command line to
|
||||||
|
be managed through libvirt. It should not be used a method of
|
||||||
|
creating new guests from scratch. New guests should be created
|
||||||
|
using an application calling the libvirt APIs (see
|
||||||
|
the <a href="apps.html">libvirt applications page</a> for some
|
||||||
|
examples) or by manually crafting XML to pass to virsh.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre>$ cat > demo.args <<EOF
|
<pre>$ cat > demo.args <<EOF
|
||||||
@ -513,6 +520,73 @@ $ virsh domxml-to-native qemu-argv demo.xml
|
|||||||
-serial none -parallel none -usb
|
-serial none -parallel none -usb
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
<h2><a name="qemucommand">Pass-through of arbitrary qemu
|
||||||
|
commands</a></h2>
|
||||||
|
|
||||||
|
<p>Libvirt provides an XML namespace and an optional
|
||||||
|
library <code>libvirt-qemu.so</code> for dealing specifically
|
||||||
|
with qemu. When used correctly, these extensions allow testing
|
||||||
|
specific qemu features that have not yet been ported to the
|
||||||
|
generic libvirt XML and API interfaces. However, they
|
||||||
|
are <b>unsupported</b>, in that the library is not guaranteed to
|
||||||
|
have a stable API, abusing the library or XML may result in
|
||||||
|
inconsistent state the crashes libvirtd, and upgrading either
|
||||||
|
qemu-kvm or libvirtd may break behavior of a domain that was
|
||||||
|
relying on a qemu-specific pass-through. If you find yourself
|
||||||
|
needing to use them to access a particular qemu feature, then
|
||||||
|
please post an RFE to the libvirt mailing list to get that
|
||||||
|
feature incorporated into the stable libvirt XML and API
|
||||||
|
interfaces.
|
||||||
|
</p>
|
||||||
|
<p>The library provides two
|
||||||
|
API: <code>virDomainQemuMonitorCommand</code>, for sending an
|
||||||
|
arbitrary monitor command (in either HMP or QMP format) to a
|
||||||
|
qemu guest (<span class="since">Since 0.8.3</span>),
|
||||||
|
and <code>virDomainQemuAttach</code>, for registering a qemu
|
||||||
|
domain that was manually started so that it can then be managed
|
||||||
|
by libvirtd (<span class="since">Since 0.9.4</span>).
|
||||||
|
</p>
|
||||||
|
<p>Additionally, the following XML additions allow fine-tuning of
|
||||||
|
the command line given to qemu when starting a domain
|
||||||
|
(<span class="since">Since 0.8.3</span>). In order to use the
|
||||||
|
XML additions, it is necessary to issue an XML namespace request
|
||||||
|
(the special <code>xmlns:<i>name</i></code> attribute) that
|
||||||
|
pulls in <code>http://libvirt.org/schemas/domain/qemu/1.0</code>;
|
||||||
|
typically, the namespace is given the name
|
||||||
|
of <code>qemu</code>. With the namespace in place, it is then
|
||||||
|
possible to add an element <code><qemu:commandline></code>
|
||||||
|
under <code>driver</code>, with the following sub-elements
|
||||||
|
repeated as often as needed:
|
||||||
|
<dl>
|
||||||
|
<dt><code>qemu:arg</code></dt>
|
||||||
|
<dd>Add an additional command-line argument to the qemu
|
||||||
|
process when starting the domain, given by the value of the
|
||||||
|
attribute <code>value</code>.
|
||||||
|
</dd>
|
||||||
|
<dt><code>qemu:env</code></dt>
|
||||||
|
<dd>Add an additional environment variable to the qemu
|
||||||
|
process when starting the domain, given with the name-value
|
||||||
|
pair recorded in the attributes <code>name</code>
|
||||||
|
and optional <code>value</code>.</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<p>Example:</p><pre>
|
||||||
|
<domain type='qemu' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
|
||||||
|
<name>QEmu-fedora-i686</name>
|
||||||
|
<memory>219200</memory>
|
||||||
|
<os>
|
||||||
|
<type arch='i686' machine='pc'>hvm</type>
|
||||||
|
</os>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||||
|
</devices>
|
||||||
|
<qemu:commandline>
|
||||||
|
<qemu:arg value='-newarg'/>
|
||||||
|
<qemu:env name='QEMU_ENV' value='VAL'/>
|
||||||
|
</qemu:commandline>
|
||||||
|
</domain>
|
||||||
|
</pre>
|
||||||
|
|
||||||
<h2><a name="xmlconfig">Example domain XML config</a></h2>
|
<h2><a name="xmlconfig">Example domain XML config</a></h2>
|
||||||
|
|
||||||
<h3>QEMU emulated guest on x86_64</h3>
|
<h3>QEMU emulated guest on x86_64</h3>
|
||||||
|
@ -70,6 +70,11 @@ vbox+ssh://user@example.com/session (remote access, SSH tunnelled)
|
|||||||
<target dev='fda'/>
|
<target dev='fda'/>
|
||||||
</disk>
|
</disk>
|
||||||
|
|
||||||
|
<filesystem type='mount'>
|
||||||
|
<source dir='/home/user/stuff'/>
|
||||||
|
<target dir='my-shared-folder'/>
|
||||||
|
</filesystem>
|
||||||
|
|
||||||
<!--BRIDGE-->
|
<!--BRIDGE-->
|
||||||
<interface type='bridge'>
|
<interface type='bridge'>
|
||||||
<source bridge='eth0'/>
|
<source bridge='eth0'/>
|
||||||
|
@ -28,6 +28,11 @@ BIOS you will see</p>
|
|||||||
<feature name='xtpr'/>
|
<feature name='xtpr'/>
|
||||||
...
|
...
|
||||||
</cpu>
|
</cpu>
|
||||||
|
<power_management>
|
||||||
|
<suspend_mem/>
|
||||||
|
<suspend_disk/>
|
||||||
|
<suspend_hybrid/>
|
||||||
|
<power_management/>
|
||||||
</host></span>
|
</host></span>
|
||||||
|
|
||||||
<!-- xen-3.0-x86_64 -->
|
<!-- xen-3.0-x86_64 -->
|
||||||
@ -60,20 +65,30 @@ BIOS you will see</p>
|
|||||||
</guest></span>
|
</guest></span>
|
||||||
...
|
...
|
||||||
</capabilities></pre>
|
</capabilities></pre>
|
||||||
<p>The first block (in red) indicates the host hardware capabilities, currently
|
<p>The first block (in red) indicates the host hardware
|
||||||
it is limited to the CPU properties but other information may be available,
|
capabilities, such as CPU properties and the power
|
||||||
it shows the CPU architecture, topology, model name, and additional features
|
management features of the host platform. CPU models are
|
||||||
which are not included in the model but the CPU provides them. Features of the
|
shown as additional features relative to the closest base
|
||||||
chip are shown within the feature block (the block is similar to what you will
|
model, within a feature block (the block is similar to what
|
||||||
find in a Xen fully virtualized domain description).</p>
|
you will find in a Xen fully virtualized domain
|
||||||
<p>The second block (in blue) indicates the paravirtualization support of the
|
description). Further, the power management features
|
||||||
Xen support, you will see the os_type of xen to indicate a paravirtual
|
supported by the host are shown, such as Suspend-to-RAM (S3),
|
||||||
kernel, then architecture information and potential features.</p>
|
Suspend-to-Disk (S4) and Hybrid-Suspend (a combination of S3
|
||||||
<p>The third block (in green) gives similar information but when running a
|
and S4). In case the host does not support
|
||||||
32 bit OS fully virtualized with Xen using the hvm support.</p>
|
any such feature, then an empty <power_management/>
|
||||||
<p>This section is likely to be updated and augmented in the future, see <a href="https://www.redhat.com/archives/libvir-list/2007-March/msg00215.html">the
|
tag will be shown. </p>
|
||||||
discussion</a> which led to the capabilities format in the mailing-list
|
<p>The second block (in blue) indicates the paravirtualization
|
||||||
archives.</p>
|
support of the Xen support, you will see the os_type of xen
|
||||||
|
to indicate a paravirtual kernel, then architecture
|
||||||
|
information and potential features.</p>
|
||||||
|
<p>The third block (in green) gives similar information but
|
||||||
|
when running a 32 bit OS fully virtualized with Xen using
|
||||||
|
the hvm support.</p>
|
||||||
|
<p>This section is likely to be updated and augmented in the
|
||||||
|
future,
|
||||||
|
see <a href="https://www.redhat.com/archives/libvir-list/2007-March/msg00215.html">the
|
||||||
|
discussion</a> which led to the capabilities format in the
|
||||||
|
mailing-list archives.</p>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -58,7 +58,7 @@
|
|||||||
<pre>
|
<pre>
|
||||||
...
|
...
|
||||||
<bridge name="virbr0" stp="on" delay="5"/>
|
<bridge name="virbr0" stp="on" delay="5"/>
|
||||||
<domain name="example"/>
|
<domain name="example.com"/>
|
||||||
<forward mode="nat" dev="eth0"/>
|
<forward mode="nat" dev="eth0"/>
|
||||||
...</pre>
|
...</pre>
|
||||||
|
|
||||||
@ -134,12 +134,12 @@
|
|||||||
attribute is set, firewall rules will restrict forwarding
|
attribute is set, firewall rules will restrict forwarding
|
||||||
to the named device only. This presumes that the local LAN
|
to the named device only. This presumes that the local LAN
|
||||||
router has suitable routing table entries to return
|
router has suitable routing table entries to return
|
||||||
traffic to this host. Firewall rules are also installed
|
traffic to this host. All incoming and outgoing sessions
|
||||||
that prevent incoming sessions from the physical network
|
to guest on these networks are unrestricted. (To restrict
|
||||||
to the guests, but outgoing sessions are unrestricted (as
|
incoming traffic to a guest on a routed network, you can
|
||||||
are sessions from the host to the guests, and between
|
configure <a href="formatnwfilter.html">nwfilter rules</a>
|
||||||
guests on the same network.)<span class="since">Since
|
on the guest's interfaces.)
|
||||||
0.4.2</span>
|
<span class="since">Since 0.4.2</span>
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt><code>bridge</code></dt>
|
<dt><code>bridge</code></dt>
|
||||||
@ -214,7 +214,7 @@
|
|||||||
As mentioned above, a <code><forward></code> element can
|
As mentioned above, a <code><forward></code> element can
|
||||||
have multiple <code><interface></code> subelements, each
|
have multiple <code><interface></code> subelements, each
|
||||||
one giving the name of a physical interface that can be used
|
one giving the name of a physical interface that can be used
|
||||||
for this network<span class="since">Since 0.9.4</span>:
|
for this network <span class="since">Since 0.9.4</span>:
|
||||||
<pre>
|
<pre>
|
||||||
...
|
...
|
||||||
<forward mode='passthrough'>
|
<forward mode='passthrough'>
|
||||||
@ -226,7 +226,21 @@
|
|||||||
</forward>
|
</forward>
|
||||||
...
|
...
|
||||||
</pre>
|
</pre>
|
||||||
When a guest interface is being constructed, libvirt will pick
|
Additionally, <span class="since">since 0.9.10</span>, libvirt
|
||||||
|
allows a shorthand for specifying all virtual interfaces
|
||||||
|
associated with a single physical function, by using
|
||||||
|
the <code><pf></code> subelement to call out the
|
||||||
|
corresponding physical interface associated with multiple
|
||||||
|
virtual interfaces:
|
||||||
|
<pre>
|
||||||
|
...
|
||||||
|
<forward mode='passthrough'>
|
||||||
|
<pf dev='eth0'/>
|
||||||
|
</forward>
|
||||||
|
...
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>When a guest interface is being constructed, libvirt will pick
|
||||||
an interface from this list to use for the connection. In
|
an interface from this list to use for the connection. In
|
||||||
modes where physical interfaces can be shared by multiple
|
modes where physical interfaces can be shared by multiple
|
||||||
guest interfaces, libvirt will choose the interface that
|
guest interfaces, libvirt will choose the interface that
|
||||||
@ -234,7 +248,7 @@
|
|||||||
that do not allow sharing of the physical device (in
|
that do not allow sharing of the physical device (in
|
||||||
particular, 'passthrough' mode, and 'private' mode when using
|
particular, 'passthrough' mode, and 'private' mode when using
|
||||||
802.1Qbh), libvirt will choose an unused physical interface
|
802.1Qbh), libvirt will choose an unused physical interface
|
||||||
or, if it can't find an unused interface, fail the operation.
|
or, if it can't find an unused interface, fail the operation.</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<h5><a name="elementQoS">Quality of service</a></h5>
|
<h5><a name="elementQoS">Quality of service</a></h5>
|
||||||
@ -301,9 +315,11 @@
|
|||||||
...</pre>
|
...</pre>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
<span class="since">Since 0.9.4</span>
|
||||||
A portgroup provides a method of easily putting guest
|
A portgroup provides a method of easily putting guest
|
||||||
connections to the network into different classes, with each
|
connections to the network into different classes, with each
|
||||||
class potentially having a different level/type of service. Each
|
class potentially having a different level/type of service.
|
||||||
|
<span class="since">Since 0.9.4</span> Each
|
||||||
network can have multiple portgroup elements (and one of those
|
network can have multiple portgroup elements (and one of those
|
||||||
can optionally be designated as the 'default' portgroup for the
|
can optionally be designated as the 'default' portgroup for the
|
||||||
network), and each portgroup has a name, as well as various
|
network), and each portgroup has a name, as well as various
|
||||||
@ -340,8 +356,14 @@
|
|||||||
<pre>
|
<pre>
|
||||||
...
|
...
|
||||||
<mac address='00:16:3E:5D:C7:9E'/>
|
<mac address='00:16:3E:5D:C7:9E'/>
|
||||||
|
<domain name="example.com"/>
|
||||||
<dns>
|
<dns>
|
||||||
<txt name="example" value="example value" />
|
<txt name="example" value="example value" />
|
||||||
|
<srv service='name' protocol='tcp' domain='test-domain-name' target='.' port='1024' priority='10' weight='10'/>
|
||||||
|
<host ip='192.168.122.2'>
|
||||||
|
<hostname>myhost</hostname>
|
||||||
|
<hostname>myhostalias</hostname>
|
||||||
|
</host>
|
||||||
</dns>
|
</dns>
|
||||||
<ip address="192.168.122.1" netmask="255.255.255.0">
|
<ip address="192.168.122.1" netmask="255.255.255.0">
|
||||||
<dhcp>
|
<dhcp>
|
||||||
@ -390,6 +412,17 @@
|
|||||||
<span class="since">Since 0.9.3</span>
|
<span class="since">Since 0.9.3</span>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt><code>srv</code></dt>
|
||||||
|
<dd>The <code>dns</code> element can have also 0 or more <code>srv</code>
|
||||||
|
record elements. Each <code>srv</code> record element defines a DNS SRV record
|
||||||
|
and has 2 mandatory and 5 optional attributes. The mandatory attributes
|
||||||
|
are service name and protocol (tcp, udp) and the optional attributes are
|
||||||
|
target, port, priority, weight and domain as defined in DNS server SRV
|
||||||
|
RFC (RFC 2782).
|
||||||
|
<span class="since">Since 0.9.9</span>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><code>ip</code></dt>
|
<dt><code>ip</code></dt>
|
||||||
<dd>The <code>address</code> attribute defines an IPv4 address in
|
<dd>The <code>address</code> attribute defines an IPv4 address in
|
||||||
@ -542,6 +575,7 @@
|
|||||||
<h3><a name="examplesBridge">Using an existing host bridge</a></h3>
|
<h3><a name="examplesBridge">Using an existing host bridge</a></h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
<span class="since">Since 0.9.4</span>
|
||||||
This shows how to use a pre-existing host bridge "br0". The
|
This shows how to use a pre-existing host bridge "br0". The
|
||||||
guests will effectively be directly connected to the physical
|
guests will effectively be directly connected to the physical
|
||||||
network (i.e. their IP addresses will all be on the subnet of
|
network (i.e. their IP addresses will all be on the subnet of
|
||||||
@ -559,6 +593,8 @@
|
|||||||
<h3><a name="examplesDirect">Using a macvtap "direct" connection</a></h3>
|
<h3><a name="examplesDirect">Using a macvtap "direct" connection</a></h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
<span class="since">Since 0.9.4, QEMU and KVM only, requires
|
||||||
|
Linux kernel 2.6.34 or newer</span>
|
||||||
This shows how to use macvtap to connect to the physical network
|
This shows how to use macvtap to connect to the physical network
|
||||||
directly through one of a group of physical devices (without
|
directly through one of a group of physical devices (without
|
||||||
using a host bridge device). As with the host bridge network,
|
using a host bridge device). As with the host bridge network,
|
||||||
|
@ -1,5 +1,232 @@
|
|||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
<h1>Node devices XML format</h1>
|
<h1>Node devices XML format</h1>
|
||||||
|
|
||||||
|
<ul id="toc"></ul>
|
||||||
|
|
||||||
|
<h2><a name="NodedevAttributes">Node Device XML</a></h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
There are several libvirt functions, all with the
|
||||||
|
prefix <code>virNodeDevice</code>, which deal with management of
|
||||||
|
host devices that can be handed to guests via passthrough as
|
||||||
|
<hostdev> elements
|
||||||
|
in <a href="formatdomain.html#elementsUSB">the domain XML</a>.
|
||||||
|
These devices are represented as a hierarchy, where a device on
|
||||||
|
a bus has a parent of the bus controller device; the root of the
|
||||||
|
hierarchy is the node named "computer".
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
When represented in XML, a node device uses the
|
||||||
|
top-level <code>device</code> element, with the following
|
||||||
|
elements present according to the type of device:
|
||||||
|
</p>
|
||||||
|
<dl>
|
||||||
|
<dt><code>name</code></dt>
|
||||||
|
<dd>The name for this device. The name will be alphanumeric,
|
||||||
|
with words separated by underscore. For many devices, the
|
||||||
|
name is just the bus type and address, as in
|
||||||
|
"pci_0000_00_02_1" or "usb_1_5_3", but some devices are able
|
||||||
|
to provide more specific names, such as
|
||||||
|
"net_eth1_00_27_13_6a_fe_00".
|
||||||
|
</dd>
|
||||||
|
<dt><code>parent</code></dt>
|
||||||
|
<dd>If this element is present, it names the parent device (that
|
||||||
|
is, a controller to which this node belongs).
|
||||||
|
</dd>
|
||||||
|
<dt><code>capability</code></dt>
|
||||||
|
<dd>This node appears for each capability that libvirt
|
||||||
|
associates with a node. A mandatory
|
||||||
|
attribute <code>type</code> lists which category the device
|
||||||
|
belongs to, and controls which further subelements will be
|
||||||
|
present to describe the node:
|
||||||
|
<dl>
|
||||||
|
<dt><code>system</code></dt>
|
||||||
|
<dd>Describes the overall host. Sub-elements include:
|
||||||
|
<dl>
|
||||||
|
<dt><code>product</code></dt>
|
||||||
|
<dd>If present, a simple text string giving the product
|
||||||
|
name of the system.</dd>
|
||||||
|
<dt><code>hardware</code></dt>
|
||||||
|
<dd>Describes the hardware of the system, including
|
||||||
|
sub-elements for <code>vendor</code>, <code>version</code>,
|
||||||
|
<code>serial</code>, and <code>uuid</code>.</dd>
|
||||||
|
<dt><code>firmware</code></dt>
|
||||||
|
<dd>Describes the firmware of the system, including
|
||||||
|
sub-elements for <code>vendor</code>, <code>version</code>,
|
||||||
|
and <code>release_date</code>.</dd>
|
||||||
|
</dl>
|
||||||
|
</dd>
|
||||||
|
<dt><code>pci</code></dt>
|
||||||
|
<dd>Describes a device on the host's PCI bus. Sub-elements
|
||||||
|
include:
|
||||||
|
<dl>
|
||||||
|
<dt><code>domain</code></dt>
|
||||||
|
<dd>Which domain the device belongs to.</dd>
|
||||||
|
<dt><code>bus</code></dt>
|
||||||
|
<dd>Which bus within the domain.</dd>
|
||||||
|
<dt><code>slot</code></dt>
|
||||||
|
<dd>Which slot within the bus.</dd>
|
||||||
|
<dt><code>function</code></dt>
|
||||||
|
<dd>Which function within the slot.</dd>
|
||||||
|
<dt><code>product</code></dt>
|
||||||
|
<dd>Product details from the device ROM, including an
|
||||||
|
attribute <code>id</code> with the hexadecimal product
|
||||||
|
id, and an optional text description of that id.</dd>
|
||||||
|
<dt><code>vendor</code></dt>
|
||||||
|
<dd>Vendor details from the device ROM, including an
|
||||||
|
attribute <code>id</code> with the hexadecimal vendor
|
||||||
|
id, and an optional text name of that vendor.</dd>
|
||||||
|
</dl>
|
||||||
|
</dd>
|
||||||
|
<dt><code>usb_device</code></dt>
|
||||||
|
<dd>Describes a device on the host's USB bus, based on its
|
||||||
|
location within the bus. Sub-elements include:
|
||||||
|
<dl>
|
||||||
|
<dt><code>bus</code></dt>
|
||||||
|
<dd>Which bus the device belongs to.</dd>
|
||||||
|
<dt><code>device</code></dt>
|
||||||
|
<dd>Which device within the bus.</dd>
|
||||||
|
<dt><code>product</code></dt>
|
||||||
|
<dd>Product details from the device ROM, including an
|
||||||
|
attribute <code>id</code> with the hexadecimal product
|
||||||
|
id, and an optional text description of that id.</dd>
|
||||||
|
<dt><code>vendor</code></dt>
|
||||||
|
<dd>Vendor details from the device ROM, including an
|
||||||
|
attribute <code>id</code> with the hexadecimal vendor
|
||||||
|
id, and an optional text name of that vendor.</dd>
|
||||||
|
</dl>
|
||||||
|
</dd>
|
||||||
|
<dt><code>usb</code></dt>
|
||||||
|
<dd>Describes a USB device, based on its advertised driver
|
||||||
|
interface. Sub-elements include:
|
||||||
|
<dl>
|
||||||
|
<dt><code>number</code></dt>
|
||||||
|
<dd>The device number.</dd>
|
||||||
|
<dt><code>number</code></dt>
|
||||||
|
<dd>The device class.</dd>
|
||||||
|
<dt><code>number</code></dt>
|
||||||
|
<dd>The device subclass.</dd>
|
||||||
|
<dt><code>number</code></dt>
|
||||||
|
<dd>The device protocol.</dd>
|
||||||
|
<dt><code>description</code></dt>
|
||||||
|
<dd>If present, a description of the device.</dd>
|
||||||
|
</dl>
|
||||||
|
</dd>
|
||||||
|
<dt><code>net</code></dt>
|
||||||
|
<dd>Describes a device capable for use as a network
|
||||||
|
interface. Sub-elements include:
|
||||||
|
<dl>
|
||||||
|
<dt><code>interface</code></dt>
|
||||||
|
<dd>The interface name tied to this device.</dd>
|
||||||
|
<dt><code>address</code></dt>
|
||||||
|
<dd>If present, the MAC address of the device.</dd>
|
||||||
|
<dt><code>capability</code></dt>
|
||||||
|
<dd>A network protocol exposed by the device, where the
|
||||||
|
attribute <code>type</code> can be "80203" for IEEE
|
||||||
|
802.3, or "80211" for various flavors of IEEE 802.11.
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd>
|
||||||
|
<dt><code>scsi_host</code></dt>
|
||||||
|
<dd>Describes a SCSI host device. Sub-elements include:
|
||||||
|
<dl>
|
||||||
|
<dt><code>host</code></dt>
|
||||||
|
<dd>The SCSI host number.</dd>
|
||||||
|
<dt><code>capability</code></dt>
|
||||||
|
<dd>Current capabilities include "vports_ops" (indicates
|
||||||
|
vport operations are supported) and "fc_host", the later
|
||||||
|
implies following sub-elements: <code>wwnn</code>,
|
||||||
|
<code>wwpn</code>, <code>fabric_wwn</code>.
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd>
|
||||||
|
<dt><code>scsi</code></dt>
|
||||||
|
<dd>Desribes a SCSI device. Sub-elements include:
|
||||||
|
<dl>
|
||||||
|
<dt><code>host</code></dt>
|
||||||
|
<dd>The SCSI host containing the device.</dd>
|
||||||
|
<dt><code>bus</code></dt>
|
||||||
|
<dd>The bus within the host.</dd>
|
||||||
|
<dt><code>target</code></dt>
|
||||||
|
<dd>The target within the bus.</dd>
|
||||||
|
<dt><code>lun</code></dt>
|
||||||
|
<dd>The lun within the target.</dd>
|
||||||
|
<dt><code>type</code></dt>
|
||||||
|
<dd>The type of SCSI device.</dd>
|
||||||
|
</dl>
|
||||||
|
</dd>
|
||||||
|
<dt><code>storage</code></dt>
|
||||||
|
<dd>Describes a device usable for storage. Sub-elements
|
||||||
|
include:
|
||||||
|
<dl>
|
||||||
|
<dt><code>block</code></dt>
|
||||||
|
<dd>A block device file name that accesses the storage
|
||||||
|
present on the device.</dd>
|
||||||
|
<dt><code>bus</code></dt>
|
||||||
|
<dd>If present, the name of the bus the device is found
|
||||||
|
on.</dd>
|
||||||
|
<dt><code>drive_type</code></dt>
|
||||||
|
<dd>The type of the drive, such as "disk" or
|
||||||
|
"cdrom".</dd>
|
||||||
|
<dt><code>model</code></dt>
|
||||||
|
<dd>Any model information available from the
|
||||||
|
device.</dd>
|
||||||
|
<dt><code>vendor</code></dt>
|
||||||
|
<dd>Any vendor information available from the
|
||||||
|
device.</dd>
|
||||||
|
<dt><code>serial</code></dt>
|
||||||
|
<dd>Any serial number information available from the
|
||||||
|
device.</dd>
|
||||||
|
<dt><code>size</code></dt>
|
||||||
|
<dd>For fixed-size storage, the amount of storage
|
||||||
|
available.</dd>
|
||||||
|
<dt><code>capability</code></dt>
|
||||||
|
<dd>If present, an additional capability is listed via
|
||||||
|
the attribute <code>type</code>. Current capabilites
|
||||||
|
include "hotpluggable" and "removable", with the
|
||||||
|
latter implying the following
|
||||||
|
sub-elements: <code>media_available</code> (0 or
|
||||||
|
1), <code>media_size</code>,
|
||||||
|
and <code>media_label</code>.</dd>
|
||||||
|
</dl>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<h2><a name="nodeExample">Examples</a></h2>
|
||||||
|
|
||||||
|
<p>The following are some example node device XML outputs:</p>
|
||||||
|
<pre>
|
||||||
|
<device>
|
||||||
|
<name>computer</name>
|
||||||
|
<capability type='system'>
|
||||||
|
<product>2241B36</product>
|
||||||
|
<hardware>
|
||||||
|
<vendor>LENOVO</vendor>
|
||||||
|
<version>ThinkPad T500</version>
|
||||||
|
<serial>R89055N</serial>
|
||||||
|
<uuid>c9488981-5049-11cb-9c1c-993d0230b4cd</uuid>
|
||||||
|
</hardware>
|
||||||
|
<firmware>
|
||||||
|
<vendor>LENOVO</vendor>
|
||||||
|
<version>6FET82WW (3.12 )</version>
|
||||||
|
<release_date>11/26/2009</release_date>
|
||||||
|
</firmware>
|
||||||
|
</capability>
|
||||||
|
</device>
|
||||||
|
|
||||||
|
<device>
|
||||||
|
<name>net_eth1_00_27_13_6a_fe_00</name>
|
||||||
|
<parent>pci_0000_00_19_0</parent>
|
||||||
|
<capability type='net'>
|
||||||
|
<interface>eth1</interface>
|
||||||
|
<address>00:27:13:6a:fe:00</address>
|
||||||
|
<capability type='80203'/>
|
||||||
|
</capability>
|
||||||
|
</device></pre>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -109,40 +109,49 @@
|
|||||||
<br/><br/>
|
<br/><br/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3><a name="nwfconceptsvars">Usage of variables in filters</a></h3>
|
<h3><a name="nwfconceptschains">Filtering chains</a></h3>
|
||||||
<p>
|
<p>
|
||||||
|
Filtering rules are organized in filter chains. These chains can be
|
||||||
Two variables names have so far been reserved for usage by the
|
thought of as having a tree structure with packet
|
||||||
network traffic filtering subsystem: <code>MAC</code> and
|
filtering rules as entries in individual chains (branches). <br>
|
||||||
<code>IP</code>.
|
Packets start their filter evaluation in the <code>root</code> chain
|
||||||
<br/><br/>
|
and can then continue their evaluation in other chains, return from
|
||||||
<code>MAC</code> is the MAC address of the
|
those chains back into the <code>root</code> chain or be
|
||||||
network interface. A filtering rule that references this variable
|
dropped or accepted by a filtering rule in one of the traversed chains.
|
||||||
will automatically be instantiated with the MAC address of the
|
<br/>
|
||||||
interface. This works without the user having to explicitly provide
|
Libvirt's network filtering system automatically creates individual
|
||||||
the MAC parameter. Even though it is possible to specify the MAC
|
<code>root</code> chains for every virtual machine's network interface
|
||||||
parameter similar to the IP parameter above, it is discouraged
|
on which the user chooses to activate traffic filtering.
|
||||||
since libvirt knows what MAC address an interface will be using.
|
The user may write filtering rules that are either directly instantiated
|
||||||
<br/><br/>
|
in the <code>root</code> chain or may create protocol-specific
|
||||||
The parameter <code>IP</code> represents the IP address
|
filtering chains for efficient evaluation of protocol-specific rules.
|
||||||
that the operating system inside the virtual machine is expected
|
The following chains exist:
|
||||||
to use on the given interface. The <code>IP</code> parameter
|
</p>
|
||||||
is special in so far as the libvirt daemon will try to determine
|
<ul>
|
||||||
the IP address (and thus the IP parameter's value) that is being
|
<li>root</li>
|
||||||
used on an interface if the parameter
|
<li>mac <span class="since">(since 0.9.8)</span></li>
|
||||||
is not explicitly provided but referenced.
|
<li>stp (spanning tree protocol)
|
||||||
For current limitations on IP address detection, consult the
|
<span class="since">(since 0.9.8)</span></li>
|
||||||
<a href="#nwflimits">section on limitations</a> on how to use this
|
<li>vlan (802.1Q) <span class="since">(since 0.9.8)</span></li>
|
||||||
feature and what to expect when using it.
|
<li>arp, rarp</li>
|
||||||
<br/><br/>
|
<li>ipv4</li>
|
||||||
The following is the XML description of the network filer
|
<li>ipv6</li>
|
||||||
<code>no-arp-spoofing</code>. It serves as an example for
|
</ul>
|
||||||
a network filter XML referencing the <code>MAC</code> and
|
<p>
|
||||||
<code>IP</code> parameters. This particular filter is referenced by the
|
<span class="since">Since 0.9.8</span> multiple chains evaluating the
|
||||||
<code>clean-traffic</code> filter.
|
<code>mac</code>, <code>stp</code>, <code>vlan</code>,
|
||||||
|
<code>arp</code>, <code>rarp</code>, <code>ipv4</code>, or
|
||||||
|
<code>ipv6</code> protocol can be created using
|
||||||
|
the protocol name only as a prefix in the chain's name. This for
|
||||||
|
examples allows chains with names <code>arp-xyz</code> or
|
||||||
|
<code>arp-test</code> to be specified and have ARP protocol packets
|
||||||
|
evaluated in those chains.
|
||||||
|
<br/><br/>
|
||||||
|
The following filter shows an example of filtering ARP traffic
|
||||||
|
in the <code>arp</code> chain.
|
||||||
</p>
|
</p>
|
||||||
<pre>
|
<pre>
|
||||||
<filter name='no-arp-spoofing' chain='arp'>
|
<filter name='no-arp-spoofing' chain='arp' priority='-500'>
|
||||||
<uuid>f88f1932-debf-4aa1-9fbe-f10d3aa4bc95</uuid>
|
<uuid>f88f1932-debf-4aa1-9fbe-f10d3aa4bc95</uuid>
|
||||||
<rule action='drop' direction='out' priority='300'>
|
<rule action='drop' direction='out' priority='300'>
|
||||||
<mac match='no' srcmacaddr='$MAC'/>
|
<mac match='no' srcmacaddr='$MAC'/>
|
||||||
@ -169,8 +178,93 @@
|
|||||||
<rule action='drop' direction='inout' priority='1000'/>
|
<rule action='drop' direction='inout' priority='1000'/>
|
||||||
</filter>
|
</filter>
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
The consequence of putting ARP-specific rules in the <code>arp</code>
|
||||||
|
chain, rather than for example in the <code>root</code> chain, is that
|
||||||
|
packets for any other protocol than ARP do not need to be evaluated by
|
||||||
|
ARP protocol-specific rules. This improves the efficiency
|
||||||
|
of the traffic filtering. However, one must then pay attention to only
|
||||||
|
put filtering rules for the given protocol into the chain since
|
||||||
|
any other rules will not be evaluated, i.e., an IPv4 rule will not
|
||||||
|
be evaluated in the ARP chain since no IPv4 protocol packets will
|
||||||
|
traverse the ARP chain.
|
||||||
|
<br/><br/>
|
||||||
|
</p>
|
||||||
|
<h3><a name="nwfconceptschainpriorities">Filtering chain priorities</a></h3>
|
||||||
|
<p>
|
||||||
|
All chains are connected to the <code>root</code> chain. The order in
|
||||||
|
which those chains are accessed is influenced by the priority of the
|
||||||
|
chain. The following table shows the chains that can be assigned a
|
||||||
|
priority and their default priorities.
|
||||||
|
</p>
|
||||||
|
<table class="top_table">
|
||||||
|
<tr>
|
||||||
|
<th> Chain (prefix) </th>
|
||||||
|
<th> Default priority </th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>stp</td><td>-810</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>mac</td><td>-800</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>vlan</td><td>-750</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>ipv4</td><td>-700</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>ipv6</td><td>-600</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>arp</td><td>-500</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>rarp</td><td>-400</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
A chain with a lower priority value is accessed before one with a
|
||||||
|
higher value.
|
||||||
|
<br><br>
|
||||||
|
<span class="since">Since 0.9.8</span> the above listed chains
|
||||||
|
can be assigned custom priorities by writing a value in the
|
||||||
|
range [-1000, 1000] into the priority (XML) attribute in the filter
|
||||||
|
node. The above example filter shows the default priority of -500
|
||||||
|
for <code>arp</code> chains.
|
||||||
|
</p>
|
||||||
|
<h3><a name="nwfconceptsvars">Usage of variables in filters</a></h3>
|
||||||
|
<p>
|
||||||
|
|
||||||
|
Two variables names have so far been reserved for usage by the
|
||||||
|
network traffic filtering subsystem: <code>MAC</code> and
|
||||||
|
<code>IP</code>.
|
||||||
|
<br/><br/>
|
||||||
|
<code>MAC</code> is the MAC address of the
|
||||||
|
network interface. A filtering rule that references this variable
|
||||||
|
will automatically be instantiated with the MAC address of the
|
||||||
|
interface. This works without the user having to explicitly provide
|
||||||
|
the MAC parameter. Even though it is possible to specify the MAC
|
||||||
|
parameter similar to the IP parameter above, it is discouraged
|
||||||
|
since libvirt knows what MAC address an interface will be using.
|
||||||
|
<br/><br/>
|
||||||
|
The parameter <code>IP</code> represents the IP address
|
||||||
|
that the operating system inside the virtual machine is expected
|
||||||
|
to use on the given interface. The <code>IP</code> parameter
|
||||||
|
is special in so far as the libvirt daemon will try to determine
|
||||||
|
the IP address (and thus the IP parameter's value) that is being
|
||||||
|
used on an interface if the parameter
|
||||||
|
is not explicitly provided but referenced.
|
||||||
|
For current limitations on IP address detection, consult the
|
||||||
|
<a href="#nwflimits">section on limitations</a> on how to use this
|
||||||
|
feature and what to expect when using it.
|
||||||
|
<br/><br/>
|
||||||
|
The above-shown network filer <code>no-arp-spoofing</code>
|
||||||
|
is an example of
|
||||||
|
a network filter XML referencing the <code>MAC</code> and
|
||||||
|
<code>IP</code> variables.
|
||||||
|
<br/><br/>
|
||||||
Note that referenced variables are always prefixed with the
|
Note that referenced variables are always prefixed with the
|
||||||
$ (dollar) sign. The format of the value of a variable
|
$ (dollar) sign. The format of the value of a variable
|
||||||
must be of the type expected by the filter attribute in the
|
must be of the type expected by the filter attribute in the
|
||||||
@ -182,8 +276,101 @@
|
|||||||
interface from attaching when hotplugging is used. The types
|
interface from attaching when hotplugging is used. The types
|
||||||
that are expected for each XML attribute are shown
|
that are expected for each XML attribute are shown
|
||||||
below.
|
below.
|
||||||
|
<br/><br/>
|
||||||
|
<span class="since">Since 0.9.8</span> variables can contain lists of
|
||||||
|
elements, e.g., the variable <code>IP</code> can contain multiple IP
|
||||||
|
addresses that are valid on a particular interface. The notation for
|
||||||
|
providing multiple elements for the IP variable is:
|
||||||
</p>
|
</p>
|
||||||
|
<pre>
|
||||||
|
...
|
||||||
|
<devices>
|
||||||
|
<interface type='bridge'>
|
||||||
|
<mac address='00:16:3e:5d:c7:9e'/>
|
||||||
|
<filterref filter='clean-traffic'>
|
||||||
|
<parameter name='IP' value='10.0.0.1'/>
|
||||||
|
<parameter name='IP' value='10.0.0.2'/>
|
||||||
|
<parameter name='IP' value='10.0.0.3'/>
|
||||||
|
</filterref>
|
||||||
|
</interface>
|
||||||
|
</devices>
|
||||||
|
...</pre>
|
||||||
|
<p>
|
||||||
|
This then allows filters to enable multiple IP addresses
|
||||||
|
per interface. Therefore, with the list
|
||||||
|
of IP address shown above, the following rule will create 3
|
||||||
|
individual filtering rules, one for each IP address.
|
||||||
|
</p>
|
||||||
|
<pre>
|
||||||
|
...
|
||||||
|
<rule action='accept' direction='in' priority='500'>
|
||||||
|
<tcp srpipaddr='$IP'/>
|
||||||
|
</rule>
|
||||||
|
...
|
||||||
|
</pre>
|
||||||
|
<p>
|
||||||
|
<span class="since">Since 0.9.10</span> it is possible to access
|
||||||
|
individual elements of a variable holding a list of elements.
|
||||||
|
A filtering rule like the following accesses the 2nd element
|
||||||
|
of the variable DSTPORTS.
|
||||||
|
</p>
|
||||||
|
<pre>
|
||||||
|
...
|
||||||
|
<rule action='accept' direction='in' priority='500'>
|
||||||
|
<udp dstportstart='$DSTPORTS[1]'/>
|
||||||
|
</rule>
|
||||||
|
...
|
||||||
|
</pre>
|
||||||
|
<p>
|
||||||
|
<span class="since">Since 0.9.10</span> it is possible to create
|
||||||
|
filtering rules that instantiate all combinations of rules from
|
||||||
|
different lists using the notation of
|
||||||
|
<code>$VARIABLE[@<iterator ID>]</code>.
|
||||||
|
The following rule allows a virtual machine to
|
||||||
|
receive traffic on a set of ports, which are specified in DSTPORTS,
|
||||||
|
from the set of source IP address specified in SRCIPADDRESSES.
|
||||||
|
The rule generates all combinations of elements of the variable
|
||||||
|
DSTPORT with those of SRCIPADDRESSES by using two independent
|
||||||
|
iterators to access their elements.
|
||||||
|
</p>
|
||||||
|
<pre>
|
||||||
|
...
|
||||||
|
<rule action='accept' direction='in' priority='500'>
|
||||||
|
<ip srcipaddr='$SRCIPADDRESSES[@1]' dstportstart='$DSTPORTS[@2]'/>
|
||||||
|
</rule>
|
||||||
|
...
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
In an example we assign concrete values to SRCIPADDRESSES and DSTPORTS
|
||||||
|
</p>
|
||||||
|
<pre>
|
||||||
|
SRCIPADDRESSES = [ 10.0.0.1, 11.1.2.3 ]
|
||||||
|
DSTPORTS = [ 80, 8080 ]
|
||||||
|
</pre>
|
||||||
|
<p>
|
||||||
|
Accessing the variables using $SRCIPADDRESSES[@1] and $DSTPORTS[@2] would
|
||||||
|
then result in all combinations of addresses and ports being created:
|
||||||
|
</p>
|
||||||
|
<pre>
|
||||||
|
10.0.0.1, 80
|
||||||
|
10.0.0.1, 8080
|
||||||
|
11.1.2.3, 80
|
||||||
|
11.1.2.3, 8080
|
||||||
|
</pre>
|
||||||
|
<p>
|
||||||
|
Accessing the same variables using a single iterator, for example by using
|
||||||
|
the notation $SRCIPADDRESSES[@1] and $DSTPORTS[@1], would result in
|
||||||
|
parallel access to both lists and result in the following combinations:
|
||||||
|
</p>
|
||||||
|
<pre>
|
||||||
|
10.0.0.1, 80
|
||||||
|
11.1.2.3, 8080
|
||||||
|
</pre>
|
||||||
|
<p>
|
||||||
|
Further, the notation of $VARIABLE is short-hand for $VARIABLE[@0]. The
|
||||||
|
former notation always assumes the iterator with Id '0'.
|
||||||
|
<p>
|
||||||
<h2><a name="nwfelems">Element and attribute overview</a></h2>
|
<h2><a name="nwfelems">Element and attribute overview</a></h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@ -258,11 +445,19 @@
|
|||||||
</p>
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
action -- mandatory; must either be <code>drop</code>,
|
action -- mandatory; must either be <code>drop</code>
|
||||||
<code>reject</code><span class="since">(since 0.9.0)</span>,
|
(matching the rule silently discards the packet with no
|
||||||
or <code>accept</code> if
|
further analysis),
|
||||||
the evaluation of the filtering rule is supposed to drop,
|
<code>reject</code> (matching the rule generates an ICMP
|
||||||
reject (using ICMP message), or accept a packet
|
reject message with no further analysis) <span class="since">(since
|
||||||
|
0.9.0)</span>, <code>accept</code> (matching the rule accepts
|
||||||
|
the packet with no further analysis), <code>return</code>
|
||||||
|
(matching the rule passes this filter, but returns control to
|
||||||
|
the calling filter for further
|
||||||
|
analysis) <span class="since">(since 0.9.7)</span>,
|
||||||
|
or <code>continue<code> (matching the rule goes on to the next
|
||||||
|
rule for further analysis) <span class="since">(since
|
||||||
|
0.9.7)</span>.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
direction -- mandatory; must either be <code>in</code>, <code>out</code> or
|
direction -- mandatory; must either be <code>in</code>, <code>out</code> or
|
||||||
@ -272,10 +467,21 @@
|
|||||||
<li>
|
<li>
|
||||||
priority -- optional; the priority of the rule controls the order in
|
priority -- optional; the priority of the rule controls the order in
|
||||||
which the rule will be instantiated relative to other rules.
|
which the rule will be instantiated relative to other rules.
|
||||||
Rules with lower value will be instantiated and therefore evaluated
|
Rules with lower value will be instantiated before rules with higher
|
||||||
before rules with higher value.
|
values.
|
||||||
Valid values are in the range of 0 to 1000. If this attribute is not
|
Valid values are in the range of 0 to 1000.
|
||||||
provided, the value 500 will automatically be assigned.
|
<span class="since">Since 0.9.8</span> this has been extended to cover
|
||||||
|
the range of -1000 to 1000. If this attribute is not
|
||||||
|
provided, priority 500 will automatically be assigned.
|
||||||
|
<br>
|
||||||
|
Note that filtering rules in the <code>root</code> chain are sorted
|
||||||
|
with filters connected to the <code>root</code> chain following
|
||||||
|
their priorities. This allows to interleave filtering rules with
|
||||||
|
access to filter chains.
|
||||||
|
(See also section on
|
||||||
|
<a href="#nwfconceptschainpriorities">
|
||||||
|
filtering chain priorities
|
||||||
|
</a>.)
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
statematch -- optional; possible values are '0' or 'false' to
|
statematch -- optional; possible values are '0' or 'false' to
|
||||||
@ -404,6 +610,203 @@
|
|||||||
[...]
|
[...]
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
<h5><a name="nwfelemsRulesProtoVLAN">VLAN (802.1Q)</a>
|
||||||
|
<span class="since">(Since 0.9.8)</span>
|
||||||
|
</h5>
|
||||||
|
<p>
|
||||||
|
Protocol ID: <code>vlan</code>
|
||||||
|
<br/>
|
||||||
|
Note: Rules of this type should go either into the <code>root</code> or
|
||||||
|
<code>vlan</code> chain.
|
||||||
|
</p>
|
||||||
|
<table class="top_table">
|
||||||
|
<tr>
|
||||||
|
<th> Attribute </th>
|
||||||
|
<th> Datatype </th>
|
||||||
|
<th> Semantics </th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>srcmacaddr</td>
|
||||||
|
<td>MAC_ADDR</td>
|
||||||
|
<td>MAC address of sender</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>srcmacmask</td>
|
||||||
|
<td>MAC_MASK</td>
|
||||||
|
<td>Mask applied to MAC address of sender</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>dstmacaddr</td>
|
||||||
|
<td>MAC_ADDR</td>
|
||||||
|
<td>MAC address of destination</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>dstmacmask</td>
|
||||||
|
<td>MAC_MASK</td>
|
||||||
|
<td>Mask applied to MAC address of destination</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>vlan-id</td>
|
||||||
|
<td>UINT16 (0x0-0xfff, 0 - 4095)</td>
|
||||||
|
<td>VLAN ID</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>encap-protocol</td>
|
||||||
|
<td>UINT16 (0x03c-0xfff), String</td>
|
||||||
|
<td>Encapsulated layer 3 protocol ID</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>comment </td>
|
||||||
|
<td>STRING</td>
|
||||||
|
<td>text with max. 256 characters</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>
|
||||||
|
Valid Strings for <code>encap-protocol</code> are: arp, ipv4, ipv6
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h5><a name="nwfelemsRulesProtoSTP">STP (Spanning Tree Protocol)</a>
|
||||||
|
<span class="since">(Since 0.9.8)</span>
|
||||||
|
</h5>
|
||||||
|
<p>
|
||||||
|
Protocol ID: <code>stp</code>
|
||||||
|
<br/>
|
||||||
|
Note: Rules of this type should go either into the <code>root</code> or
|
||||||
|
<code>stp</code> chain.
|
||||||
|
</p>
|
||||||
|
<table class="top_table">
|
||||||
|
<tr>
|
||||||
|
<th> Attribute </th>
|
||||||
|
<th> Datatype </th>
|
||||||
|
<th> Semantics </th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>srcmacaddr</td>
|
||||||
|
<td>MAC_ADDR</td>
|
||||||
|
<td>MAC address of sender</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>srcmacmask</td>
|
||||||
|
<td>MAC_MASK</td>
|
||||||
|
<td>Mask applied to MAC address of sender</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>type</td>
|
||||||
|
<td>UINT8</td>
|
||||||
|
<td>Bridge Protcol Data Unit (BPDU) type</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>flags</td>
|
||||||
|
<td>UINT8</td>
|
||||||
|
<td>BPDU flag</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>root-priority</td>
|
||||||
|
<td>UINT16</td>
|
||||||
|
<td>Root priority (range start)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>root-priority-hi</td>
|
||||||
|
<td>UINT16</td>
|
||||||
|
<td>Root priority range end</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>root-address</td>
|
||||||
|
<td>MAC_ADDRESS</td>
|
||||||
|
<td>Root MAC address</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>root-address-mask</td>
|
||||||
|
<td>MAC_MASK</td>
|
||||||
|
<td>Root MAC address mask</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>root-cost</td>
|
||||||
|
<td>UINT32</td>
|
||||||
|
<td>Root path cost (range start)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>root-cost-hi</td>
|
||||||
|
<td>UINT32</td>
|
||||||
|
<td>Root path cost range end</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>sender-priority</td>
|
||||||
|
<td>UINT16</td>
|
||||||
|
<td>Sender priority (range start)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>sender-priority-hi</td>
|
||||||
|
<td>UINT16</td>
|
||||||
|
<td>Sender priority range end</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>sender-address</td>
|
||||||
|
<td>MAC_ADDRESS</td>
|
||||||
|
<td>BPDU sender MAC address</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>sender-address-mask</td>
|
||||||
|
<td>MAC_MASK</td>
|
||||||
|
<td>BPDU sender MAC address mask</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>port</td>
|
||||||
|
<td>UINT16</td>
|
||||||
|
<td>Port identifier (range start)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>port_hi</td>
|
||||||
|
<td>UINT16</td>
|
||||||
|
<td>Port identifier range end</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>msg-age</td>
|
||||||
|
<td>UINT16</td>
|
||||||
|
<td>Message age timer (range start)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>msg-age-hi</td>
|
||||||
|
<td>UINT16</td>
|
||||||
|
<td>Message age timer range end</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>max-age</td>
|
||||||
|
<td>UINT16</td>
|
||||||
|
<td>Maximum age timer (range start)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>max-age-hi</td>
|
||||||
|
<td>UINT16</td>
|
||||||
|
<td>Maximum age timer range end</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>hello-time</td>
|
||||||
|
<td>UINT16</td>
|
||||||
|
<td>Hello time timer (range start)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>hello-time-hi</td>
|
||||||
|
<td>UINT16</td>
|
||||||
|
<td>Hello time timer range end</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>forward-delay</td>
|
||||||
|
<td>UINT16</td>
|
||||||
|
<td>Forward delay (range start)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>forward-delay-hi</td>
|
||||||
|
<td>UINT16</td>
|
||||||
|
<td>Forward delay range end</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>comment</td>
|
||||||
|
<td>STRING</td>
|
||||||
|
<td>text with max. 256 characters</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
<h5><a name="nwfelemsRulesProtoARP">ARP/RARP</a></h5>
|
<h5><a name="nwfelemsRulesProtoARP">ARP/RARP</a></h5>
|
||||||
<p>
|
<p>
|
||||||
Protocol ID: <code>arp</code> or <code>rarp</code>
|
Protocol ID: <code>arp</code> or <code>rarp</code>
|
||||||
@ -493,6 +896,7 @@
|
|||||||
<h5><a name="nwfelemsRulesProtoIP">IPv4</a></h5>
|
<h5><a name="nwfelemsRulesProtoIP">IPv4</a></h5>
|
||||||
<p>
|
<p>
|
||||||
Protocol ID: <code>ip</code>
|
Protocol ID: <code>ip</code>
|
||||||
|
<br/>
|
||||||
Note: Rules of this type should either go into the
|
Note: Rules of this type should either go into the
|
||||||
<code>root</code> or <code>ipv4</code> chain.
|
<code>root</code> or <code>ipv4</code> chain.
|
||||||
</p>
|
</p>
|
||||||
@ -583,6 +987,7 @@
|
|||||||
<h5><a name="nwfelemsRulesProtoIPv6">IPv6</a></h5>
|
<h5><a name="nwfelemsRulesProtoIPv6">IPv6</a></h5>
|
||||||
<p>
|
<p>
|
||||||
Protocol ID: <code>ipv6</code>
|
Protocol ID: <code>ipv6</code>
|
||||||
|
<br/>
|
||||||
Note: Rules of this type should either go into the
|
Note: Rules of this type should either go into the
|
||||||
<code>root</code> or <code>ipv6</code> chain.
|
<code>root</code> or <code>ipv6</code> chain.
|
||||||
</p>
|
</p>
|
||||||
@ -1423,8 +1828,10 @@
|
|||||||
</p>
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>mac</li>
|
<li>mac</li>
|
||||||
|
<li>stp (spanning tree protocol)</li>
|
||||||
|
<li>vlan (802.1Q)</li>
|
||||||
<li>arp, rarp</li>
|
<li>arp, rarp</li>
|
||||||
<li>ip</li>
|
<li>ipv4</li>
|
||||||
<li>ipv6</li>
|
<li>ipv6</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@ -1436,13 +1843,14 @@
|
|||||||
filter subsystem first passes through the filtering support implemented
|
filter subsystem first passes through the filtering support implemented
|
||||||
by ebtables and only then through iptables or ip6tables filters. If
|
by ebtables and only then through iptables or ip6tables filters. If
|
||||||
a filter tree has rules with the protocols <code>mac</code>,
|
a filter tree has rules with the protocols <code>mac</code>,
|
||||||
<code>arp</code>, <code>rarp</code>, <code>ip</code>, or <code>ipv6</code>
|
<code>stp</code>, <code>vlan</code>
|
||||||
ebtables rules will automatically be instantiated.
|
<code>arp</code>, <code>rarp</code>, <code>ipv4</code>,
|
||||||
|
or <code>ipv6</code> ebtables rules will automatically be instantiated.
|
||||||
<br/>
|
<br/>
|
||||||
The role of the <code>chain</code> attribute in the network filter
|
The role of the <code>chain</code> attribute in the network filter
|
||||||
XML is that internally a new user-defined ebtables table is created
|
XML is that internally a new user-defined ebtables table is created
|
||||||
that then for example receives all <code>arp</code> traffic coming
|
that then for example receives all <code>arp</code> traffic coming
|
||||||
from or going to a virtual machine, if the chain <code>arp</code>
|
from or going to a virtual machine if the chain <code>arp</code>
|
||||||
has been specified. Further, a rule is generated in an interface's
|
has been specified. Further, a rule is generated in an interface's
|
||||||
<code>root</code> chain that directs all ipv4 traffic into the
|
<code>root</code> chain that directs all ipv4 traffic into the
|
||||||
user-defined chain. Therefore, all ARP traffic rules should then be
|
user-defined chain. Therefore, all ARP traffic rules should then be
|
||||||
@ -1450,6 +1858,12 @@
|
|||||||
into user-defined tables is only supported with filtering on the ebtables
|
into user-defined tables is only supported with filtering on the ebtables
|
||||||
layer.
|
layer.
|
||||||
<br/>
|
<br/>
|
||||||
|
<span class="since">Since 0.9.8</span> multiple chains for the same
|
||||||
|
protocol can be created. For this the name of the chain must have
|
||||||
|
a prefix of one of the previously enumerated protocols. To create an
|
||||||
|
additional chain for handling of ARP traffic, a chain with name
|
||||||
|
<code>arp-test</code> can be specified.
|
||||||
|
<br/>
|
||||||
As an example, it is
|
As an example, it is
|
||||||
possible to filter on UDP traffic by source and destination ports using
|
possible to filter on UDP traffic by source and destination ports using
|
||||||
the <code>ip</code> protocol filter and specifying attributes for the
|
the <code>ip</code> protocol filter and specifying attributes for the
|
||||||
@ -1795,6 +2209,13 @@
|
|||||||
0.8.1 or later in order not to lose the network traffic filters
|
0.8.1 or later in order not to lose the network traffic filters
|
||||||
associated with an interface.
|
associated with an interface.
|
||||||
</p>
|
</p>
|
||||||
|
<h3><a name="nwflimitsvlan">VLAN filtering on Linux</a></h3>
|
||||||
|
<p>
|
||||||
|
VLAN (802.1Q) packets, if sent by a virtual machine, cannot be filtered
|
||||||
|
with rules for protocol IDs <code>arp</code>, <code>rarp</code>,
|
||||||
|
<code>ipv4</code> and <code>ipv6</code> but only
|
||||||
|
with protocol IDs <code>mac</code> and <code>vlan</code>. Therefore,
|
||||||
|
the example filter <code>clean-traffic</code> will not work as expected.
|
||||||
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -39,8 +39,8 @@
|
|||||||
<dd>
|
<dd>
|
||||||
Specifies what this secret is used for. A mandatory
|
Specifies what this secret is used for. A mandatory
|
||||||
<code>type</code> attribute specifies the usage category, currently
|
<code>type</code> attribute specifies the usage category, currently
|
||||||
only <code>volume</code> is defined. Specific usage categories are
|
only <code>volume</code> and <code>ceph</code> are defined.
|
||||||
described below.
|
Specific usage categories are described below.
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
@ -54,6 +54,18 @@
|
|||||||
this secret is associated with.
|
this secret is associated with.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<h3>Usage type "ceph"</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This secret is associated with a Ceph RBD (rados block device).
|
||||||
|
The <code><usage type='ceph'></code> element must contain
|
||||||
|
a single <code>name</code> element that specifies a usage name
|
||||||
|
for the secret. The Ceph secret can then be used by UUID or by
|
||||||
|
this usage name via the <code><auth></code> element of
|
||||||
|
a <a href="domain.html#elementsDisks">disk
|
||||||
|
device</a>. <span class="since">Since 0.9.7</span>.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h2><a name="example">Example</a></h2>
|
<h2><a name="example">Example</a></h2>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
volumes. Some may have constraints on volume size, or placement.
|
volumes. Some may have constraints on volume size, or placement.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
The is the top level tag for a storage pool document is 'pool'. It has
|
The top level tag for a storage pool document is 'pool'. It has
|
||||||
a single attribute <code>type</code>, which is one of <code>dir</code>,
|
a single attribute <code>type</code>, which is one of <code>dir</code>,
|
||||||
<code>fs</code>,<code>netfs</code>,<code>disk</code>,<code>iscsi</code>,
|
<code>fs</code>,<code>netfs</code>,<code>disk</code>,<code>iscsi</code>,
|
||||||
<code>logical</code>. This corresponds to the storage backend drivers
|
<code>logical</code>. This corresponds to the storage backend drivers
|
||||||
@ -234,11 +234,24 @@
|
|||||||
to sparsely allocate a volume. It does not have to honour requests
|
to sparsely allocate a volume. It does not have to honour requests
|
||||||
for sparse allocation though.<br/>
|
for sparse allocation though.<br/>
|
||||||
<br/>
|
<br/>
|
||||||
By default this is specified in bytes, but an optional
|
By default this is specified in bytes, but an optional attribute
|
||||||
<code>unit</code> can be specified to adjust the passed value.
|
<code>unit</code> can be specified to adjust the passed value.
|
||||||
Values can be: 'K' (kilobytes), 'M' (megabytes), 'G' (gigabytes),
|
Values can be: 'B' or 'bytes' for bytes, 'KB' (kilobytes,
|
||||||
'T' (terabytes), 'P' (petabytes), or 'E' (exabytes).
|
10<sup>3</sup> or 1000 bytes), 'K' or 'KiB' (kibibytes,
|
||||||
<span class="since">Since 0.4.1</span></dd>
|
2<sup>10</sup> or 1024 bytes), 'MB' (megabytes, 10<sup>6</sup>
|
||||||
|
or 1,000,000 bytes), 'M' or 'MiB' (mebibytes, 2<sup>20</sup>
|
||||||
|
or 1,048,576 bytes), 'GB' (gigabytes, 10<sup>9</sup> or
|
||||||
|
1,000,000,000 bytes), 'G' or 'GiB' (gibibytes, 2<sup>30</sup>
|
||||||
|
or 1,073,741,824 bytes), 'TB' (terabytes, 10<sup>12</sup> or
|
||||||
|
1,000,000,000,000 bytes), 'T' or 'TiB' (tebibytes,
|
||||||
|
2<sup>40</sup> or 1,099,511,627,776 bytes), 'PB' (petabytes,
|
||||||
|
10<sup>15</sup> or 1,000,000,000,000,000 bytes), 'P' or 'PiB'
|
||||||
|
(pebibytes, 2<sup>50</sup> or 1,125,899,906,842,624 bytes),
|
||||||
|
'EB' (exabytes, 10<sup>18</sup> or 1,000,000,000,000,000,000
|
||||||
|
bytes), or 'E' or 'EiB' (exbibytes, 2<sup>60</sup> or
|
||||||
|
1,152,921,504,606,846,976 bytes). <span class="since">Since
|
||||||
|
0.4.1, multi-character <code>unit</code> since
|
||||||
|
0.9.11</span></dd>
|
||||||
<dt><code>capacity</code></dt>
|
<dt><code>capacity</code></dt>
|
||||||
<dd>Providing the logical capacity for the volume. This value is
|
<dd>Providing the logical capacity for the volume. This value is
|
||||||
in bytes by default, but a <code>unit</code> attribute can be
|
in bytes by default, but a <code>unit</code> attribute can be
|
||||||
|
@ -585,6 +585,12 @@
|
|||||||
<li><p>For strict equality of a prefix:</p>
|
<li><p>For strict equality of a prefix:</p>
|
||||||
<pre>
|
<pre>
|
||||||
STRPREFIX(a,b)
|
STRPREFIX(a,b)
|
||||||
|
</pre>
|
||||||
|
</li>
|
||||||
|
<li><p>To avoid having to check if a or b are NULL:</p>
|
||||||
|
<pre>
|
||||||
|
STREQ_NULLABLE(a, b)
|
||||||
|
STRNEQ_NULLABLE(a, b)
|
||||||
</pre>
|
</pre>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -120,6 +120,16 @@
|
|||||||
called again, <span class="since">since 0.9.0</span>, to allow
|
called again, <span class="since">since 0.9.0</span>, to allow
|
||||||
any additional resource cleanup:<br/>
|
any additional resource cleanup:<br/>
|
||||||
<pre>/etc/libvirt/hooks/qemu guest_name release end -</pre></li>
|
<pre>/etc/libvirt/hooks/qemu guest_name release end -</pre></li>
|
||||||
|
<li><span class="since">Since 0.9.11</span>, the qemu hook script
|
||||||
|
is also called at the beginning of incoming migration. It is called
|
||||||
|
as: <pre>/etc/libvirt/hooks/qemu guest_name migrate begin -</pre>
|
||||||
|
with domain XML sent to standard input of the script. In this case,
|
||||||
|
the script acts as a filter and is supposed to modify the domain
|
||||||
|
XML and print it out on its standard output. Empty output is
|
||||||
|
identical to copying the input XML without changing it. In case the
|
||||||
|
script returns failure or the output XML is not valid, incoming
|
||||||
|
migration will be canceled. This hook may be used, e.g., to change
|
||||||
|
location of disk images for incoming domains.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h5><a name="lxc">/etc/libvirt/hooks/lxc</a></h5>
|
<h5><a name="lxc">/etc/libvirt/hooks/lxc</a></h5>
|
||||||
@ -161,19 +171,20 @@
|
|||||||
source and destination hosts:</p>
|
source and destination hosts:</p>
|
||||||
<ol>
|
<ol>
|
||||||
<li>At the beginning of the migration, the <i>qemu</i> hook script on
|
<li>At the beginning of the migration, the <i>qemu</i> hook script on
|
||||||
the <b>destination</b> host is executed with the "start"
|
the <b>destination</b> host is executed with the "migrate"
|
||||||
operation.<br/><br/></li>
|
operation.</li>
|
||||||
<li>If this hook script returns indicating success (error code 0), the
|
<li>Before QEMU process is spawned, the two operations ("prepare" and
|
||||||
migration continues. Any other return code indicates failure, and
|
"start") called for domain start are executed on
|
||||||
the migration is aborted.<br/><br/></li>
|
<b>destination</b> host.</li>
|
||||||
<li>The QEMU guest is then migrated to the destination host.<br/>
|
<li>If both of these hook script executions exit successfully (exit
|
||||||
<br/></li>
|
status 0), the migration continues. Any other exit code indicates
|
||||||
|
failure, and the migration is aborted.</li>
|
||||||
|
<li>The QEMU guest is then migrated to the destination host.</li>
|
||||||
<li>Unless an error occurs during the migration process, the <i>qemu</i>
|
<li>Unless an error occurs during the migration process, the <i>qemu</i>
|
||||||
hook script on the <b>source</b> host is then executed with the "stopped"
|
hook script on the <b>source</b> host is then executed with the
|
||||||
operation, to indicate it is no longer running on this
|
"stopped" and "release" operations to indicate it is no longer
|
||||||
host.<br/><br/>
|
running on this host. Regardless of the return codes, the
|
||||||
Regardless of the return code from this hook script, the migration
|
migration is not aborted as it has already been performed.</li>
|
||||||
is not aborted as it has already been performed.</li>
|
|
||||||
</ol>
|
</ol>
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
|
1
docs/html/.gitignore
vendored
1
docs/html/.gitignore
vendored
@ -1 +0,0 @@
|
|||||||
*.html
|
|
@ -373,7 +373,10 @@
|
|||||||
allocation of collected information (however, on an
|
allocation of collected information (however, on an
|
||||||
out-of-memory condition, the buffer may still be NULL). The
|
out-of-memory condition, the buffer may still be NULL). The
|
||||||
caller is responsible for freeing registered buffers, since the
|
caller is responsible for freeing registered buffers, since the
|
||||||
buffers are designed to persist beyond virCommandFree.
|
buffers are designed to persist beyond virCommandFree. It
|
||||||
|
is possible to pass the same pointer to both
|
||||||
|
virCommandSetOutputBuffer and virCommandSetErrorBuffer, in which
|
||||||
|
case the child process interleaves output into a single string.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3><a name="directory">Setting working directory</a></h3>
|
<h3><a name="directory">Setting working directory</a></h3>
|
||||||
@ -445,7 +448,7 @@
|
|||||||
<strong>Note:</strong> if the command has been daemonized
|
<strong>Note:</strong> if the command has been daemonized
|
||||||
this will only block & wait for the intermediate process,
|
this will only block & wait for the intermediate process,
|
||||||
not the real command. <code>virCommandRun</code> will
|
not the real command. <code>virCommandRun</code> will
|
||||||
report on any errors that have occured upon this point
|
report on any errors that have occurred upon this point
|
||||||
with all previous API calls. If the command fails to
|
with all previous API calls. If the command fails to
|
||||||
run, or exits with non-zero status an error will be
|
run, or exits with non-zero status an error will be
|
||||||
reported via normal libvirt error infrastructure. If a
|
reported via normal libvirt error infrastructure. If a
|
||||||
|
@ -163,14 +163,28 @@
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>type=call: the in parameters for the method call, XDR encoded</li>
|
<li>type=call: the in parameters for the method call, XDR encoded</li>
|
||||||
|
<li>type=call-with-fds: number of file handles, then the in parameters for the method call, XDR encoded, followed by the file handles</li>
|
||||||
<li>type=reply+status=ok: the return value and/or out parameters for the method call, XDR encoded</li>
|
<li>type=reply+status=ok: the return value and/or out parameters for the method call, XDR encoded</li>
|
||||||
<li>type=reply+status=error: the error information for the method, a virErrorPtr XDR encoded</li>
|
<li>type=reply+status=error: the error information for the method, a virErrorPtr XDR encoded</li>
|
||||||
|
<li>type=reply-with-fds+status=ok: number of file handles, the return value and/or out parameters for the method call, XDR encoded, followed by the file handles</li>
|
||||||
|
<li>type=reply-with-fds+status=error: number of file handles, the error information for the method, a virErrorPtr XDR encoded, followed by the file handles</li>
|
||||||
<li>type=event: the parameters for the event, XDR encoded</li>
|
<li>type=event: the parameters for the event, XDR encoded</li>
|
||||||
<li>type=stream+status=ok: no payload</li>
|
<li>type=stream+status=ok: no payload</li>
|
||||||
<li>type=stream+status=error: the error information for the method, a virErrorPtr XDR encoded</li>
|
<li>type=stream+status=error: the error information for the method, a virErrorPtr XDR encoded</li>
|
||||||
<li>type=stream+status=continue: the raw bytes of data for the stream. No XDR encoding</li>
|
<li>type=stream+status=continue: the raw bytes of data for the stream. No XDR encoding</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
With the two packet types that support passing file descriptors, in
|
||||||
|
between the header and the payload there will be a 4-byte integer
|
||||||
|
specifying the number of file descriptors which are being sent.
|
||||||
|
The actual file handles are sent after the payload has been sent.
|
||||||
|
Each file handle has a single dummy byte transmitted as a carrier
|
||||||
|
for the out of band file descriptor. While the sender should always
|
||||||
|
send '\0' as the dummy byte value, the receiver ought to ignore the
|
||||||
|
value for the sake of robustness.
|
||||||
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
For the exact payload information for each procedure, consult the XDR protocol
|
For the exact payload information for each procedure, consult the XDR protocol
|
||||||
definition for the program+version in question
|
definition for the program+version in question
|
||||||
@ -339,6 +353,27 @@
|
|||||||
+--+-----------------------+--------+
|
+--+-----------------------+--------+
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
<h4><a name="wireexamplescallfd">Method call with passed FD</a></h4>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
A single method call with 2 passed file descriptors and successful
|
||||||
|
reply, for a program=8, version=1, procedure=3, which 10 bytes worth
|
||||||
|
of input args, and 4 bytes worth of return values. The number of
|
||||||
|
file descriptors is encoded as a 32-bit int. Each file descriptor
|
||||||
|
then has a 1 byte dummy payload. The overall input
|
||||||
|
packet length is 4 + 24 + 4 + 2 + 10 == 44, and output packet length 32.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
+--+-----------------------+---------------+-------+
|
||||||
|
C --> |44| 8 | 1 | 3 | 0 | 1 | 0 | 2 | .o.oOo.o. | 0 | 0 | --> S (call)
|
||||||
|
+--+-----------------------+---------------+-------+
|
||||||
|
|
||||||
|
+--+-----------------------+--------+
|
||||||
|
C <-- |32| 8 | 1 | 3 | 1 | 1 | 0 | .o.oOo | <-- S (reply)
|
||||||
|
+--+-----------------------+--------+
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
<h2><a name="security">RPC security</a></h2>
|
<h2><a name="security">RPC security</a></h2>
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Landscape
|
Landscape
|
||||||
Center
|
Center
|
||||||
Inches
|
Inches
|
||||||
Letter
|
Letter
|
||||||
100.00
|
100.00
|
||||||
Single
|
Single
|
||||||
-2
|
-2
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Landscape
|
Landscape
|
||||||
Center
|
Center
|
||||||
Inches
|
Inches
|
||||||
Letter
|
Letter
|
||||||
100.00
|
100.00
|
||||||
Single
|
Single
|
||||||
-2
|
-2
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Landscape
|
Landscape
|
||||||
Center
|
Center
|
||||||
Inches
|
Inches
|
||||||
Letter
|
Letter
|
||||||
100.00
|
100.00
|
||||||
Single
|
Single
|
||||||
-2
|
-2
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Landscape
|
Landscape
|
||||||
Center
|
Center
|
||||||
Inches
|
Inches
|
||||||
Letter
|
Letter
|
||||||
100.00
|
100.00
|
||||||
Single
|
Single
|
||||||
-2
|
-2
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Landscape
|
Landscape
|
||||||
Center
|
Center
|
||||||
Inches
|
Inches
|
||||||
Letter
|
Letter
|
||||||
100.00
|
100.00
|
||||||
Single
|
Single
|
||||||
-2
|
-2
|
||||||
|
@ -364,3 +364,51 @@ span.since {
|
|||||||
font-style: italic;
|
font-style: italic;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
img.diagram {
|
||||||
|
background: rgb(230,230,230);
|
||||||
|
border: 2px dotted rgb(178,178,178);
|
||||||
|
padding: 1em;
|
||||||
|
display: block;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.data th, table.data td {
|
||||||
|
padding: 0.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.data {
|
||||||
|
border-spacing: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.data thead th {
|
||||||
|
background: rgb(178,178,178);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.data {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.data thead tr th {
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.data tr.head th {
|
||||||
|
border-left: 1px solid black;
|
||||||
|
border-right: 1px solid black;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.data tbody td {
|
||||||
|
background: rgb(240,240,240);
|
||||||
|
}
|
||||||
|
table.data tbody td.y {
|
||||||
|
background: rgb(220,255,220);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
table.data tbody td.n {
|
||||||
|
background: rgb(255,220,220);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
@ -76,7 +76,7 @@
|
|||||||
<p>
|
<p>
|
||||||
The sanlock daemon must be started on every single host
|
The sanlock daemon must be started on every single host
|
||||||
that will be running virtual machines. So repeat these
|
that will be running virtual machines. So repeat these
|
||||||
steps as neccessary.
|
steps as necessary.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2><a name="sanlockplugin">libvirt sanlock plugin configuration</a></h2>
|
<h2><a name="sanlockplugin">libvirt sanlock plugin configuration</a></h2>
|
||||||
|
@ -170,8 +170,8 @@ export LIBVIRT_LOG_OUTPUTS="1:file:virsh.log"</pre>
|
|||||||
put the correct breakpoints when running under a debugger.</p>
|
put the correct breakpoints when running under a debugger.</p>
|
||||||
<p>To activate full debug of the libvirt entry points, utility
|
<p>To activate full debug of the libvirt entry points, utility
|
||||||
functions and the QEmu/KVM driver, set:</p>
|
functions and the QEmu/KVM driver, set:</p>
|
||||||
<pre>log_filters=1:libvirt 1:util 1:qemu
|
<pre>log_filters="1:libvirt 1:util 1:qemu"
|
||||||
log_output=1:file:/var/log/libvirt/libvirtd.log</pre>
|
log_outputs="1:file:/var/log/libvirt/libvirtd.log"</pre>
|
||||||
<p>in libvirtd.conf and restart the daemon will allow to
|
<p>in libvirtd.conf and restart the daemon will allow to
|
||||||
gather a copious amount of debugging traces for the operations done
|
gather a copious amount of debugging traces for the operations done
|
||||||
in those areas.</p>
|
in those areas.</p>
|
||||||
|
58
docs/migration-managed-direct.fig
Normal file
58
docs/migration-managed-direct.fig
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#FIG 3.2 Produced by xfig version 3.2.5b
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
100.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
6 2775 2400 3675 2850
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
2775 2400 3675 2400 3675 2850 2775 2850 2775 2400
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 570 2925 2700 libvirtd\001
|
||||||
|
-6
|
||||||
|
6 5400 2400 6300 2850
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
5400 2400 6300 2400 6300 2850 5400 2850 5400 2400
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 570 5550 2700 libvirtd\001
|
||||||
|
-6
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
1200 1200 3825 1200 3825 3000 1200 3000 1200 1200
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
5250 1200 7875 1200 7875 3000 5250 3000 5250 1200
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
5400 1350 6075 1350 6075 1950 5400 1950 5400 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
6225 1350 6900 1350 6900 1950 6225 1950 6225 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
3000 1350 3675 1350 3675 1950 3000 1950 3000 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
2175 1350 2850 1350 2850 1950 2175 1950 2175 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
1350 1350 2025 1350 2025 1950 1350 1950 1350 1350
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
|
||||||
|
1 1 1.00 135.00 180.00
|
||||||
|
4350 4275 4350 3600 3300 3600 3300 2850
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
|
||||||
|
1 1 1.00 135.00 180.00
|
||||||
|
4800 4275 4800 3600 5775 3600 5775 2850
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
3225 4125 5850 4125 5850 6000 3225 6000 3225 4125
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
3375 5100 5700 5100 5700 5550 3375 5550 3375 5100
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 3
|
||||||
|
1 1 1.00 135.00 180.00
|
||||||
|
3750 5100 3750 4500 4050 4500
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
4050 4275 5100 4275 5100 4725 4050 4725 4050 4275
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 870 6825 2850 Dest Host\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 1080 1350 2850 Source Host\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 1425 1725 VM-A\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 2250 1725 VM-B\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 3075 1725 VM-C\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 5475 1725 VM-C\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 6300 1725 VM-D\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 960 4725 5850 Client Host\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 180 1500 3525 5400 management app\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 735 4200 4575 libvirt.so\001
|
BIN
docs/migration-managed-direct.png
Normal file
BIN
docs/migration-managed-direct.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.8 KiB |
58
docs/migration-managed-p2p.fig
Normal file
58
docs/migration-managed-p2p.fig
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#FIG 3.2 Produced by xfig version 3.2.5b
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
100.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
6 2775 2400 3675 2850
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
2775 2400 3675 2400 3675 2850 2775 2850 2775 2400
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 570 2925 2700 libvirtd\001
|
||||||
|
-6
|
||||||
|
6 5400 2400 6300 2850
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
5400 2400 6300 2400 6300 2850 5400 2850 5400 2400
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 570 5550 2700 libvirtd\001
|
||||||
|
-6
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
1200 1200 3825 1200 3825 3000 1200 3000 1200 1200
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
5250 1200 7875 1200 7875 3000 5250 3000 5250 1200
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
5400 1350 6075 1350 6075 1950 5400 1950 5400 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
6225 1350 6900 1350 6900 1950 6225 1950 6225 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
3000 1350 3675 1350 3675 1950 3000 1950 3000 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
2175 1350 2850 1350 2850 1950 2175 1950 2175 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
1350 1350 2025 1350 2025 1950 1350 1950 1350 1350
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
|
||||||
|
1 1 1.00 135.00 180.00
|
||||||
|
4350 4275 4350 3600 3300 3600 3300 2850
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
3225 4125 5850 4125 5850 6000 3225 6000 3225 4125
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
3375 5100 5700 5100 5700 5550 3375 5550 3375 5100
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 3
|
||||||
|
1 1 1.00 135.00 180.00
|
||||||
|
3750 5100 3750 4500 4050 4500
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
4050 4275 5100 4275 5100 4725 4050 4725 4050 4275
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
1 1 1.00 135.00 180.00
|
||||||
|
3675 2625 5400 2625
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 870 6825 2850 Dest Host\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 1080 1350 2850 Source Host\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 1425 1725 VM-A\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 2250 1725 VM-B\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 3075 1725 VM-C\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 5475 1725 VM-C\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 6300 1725 VM-D\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 960 4725 5850 Client Host\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 180 1500 3525 5400 management app\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 735 4200 4575 libvirt.so\001
|
BIN
docs/migration-managed-p2p.png
Normal file
BIN
docs/migration-managed-p2p.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
43
docs/migration-native.fig
Normal file
43
docs/migration-native.fig
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#FIG 3.2 Produced by xfig version 3.2.5b
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
100.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
6 2775 2400 3675 2850
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
2775 2400 3675 2400 3675 2850 2775 2850 2775 2400
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 570 2925 2700 libvirtd\001
|
||||||
|
-6
|
||||||
|
6 5400 2400 6300 2850
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
5400 2400 6300 2400 6300 2850 5400 2850 5400 2400
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 570 5550 2700 libvirtd\001
|
||||||
|
-6
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 7 1 0 4
|
||||||
|
1 1 1.00 135.00 180.00
|
||||||
|
3375 1350 3375 825 5700 825 5700 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
1200 1200 3825 1200 3825 3000 1200 3000 1200 1200
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
5250 1200 7875 1200 7875 3000 5250 3000 5250 1200
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
6225 1350 6900 1350 6900 1950 6225 1950 6225 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
5400 1350 6075 1350 6075 1950 5400 1950 5400 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
3000 1350 3675 1350 3675 1950 3000 1950 3000 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
2175 1350 2850 1350 2850 1950 2175 1950 2175 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
1350 1350 2025 1350 2025 1950 1350 1950 1350 1350
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 1425 1725 VM-A\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 2250 1725 VM-B\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 3075 1725 VM-C\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 5475 1725 VM-C\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 6300 1725 VM-D\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 1080 1350 2850 Source Host\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 870 6825 2850 Dest Host\001
|
BIN
docs/migration-native.png
Normal file
BIN
docs/migration-native.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
49
docs/migration-tunnel.fig
Normal file
49
docs/migration-tunnel.fig
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#FIG 3.2 Produced by xfig version 3.2.5b
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
100.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
6 2775 2400 3675 2850
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
2775 2400 3675 2400 3675 2850 2775 2850 2775 2400
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 570 2925 2700 libvirtd\001
|
||||||
|
-6
|
||||||
|
6 5400 2400 6300 2850
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
5400 2400 6300 2400 6300 2850 5400 2850 5400 2400
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 570 5550 2700 libvirtd\001
|
||||||
|
-6
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
1 1 1.00 135.00 180.00
|
||||||
|
3375 1950 3375 2400
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 7 1 0 4
|
||||||
|
1 1 1.00 135.00 180.00
|
||||||
|
3375 2850 3375 3375 5700 3375 5700 2850
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
1 1 1.00 135.00 180.00
|
||||||
|
5700 2400 5700 1950
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
1200 1200 3825 1200 3825 3000 1200 3000 1200 1200
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
5250 1200 7875 1200 7875 3000 5250 3000 5250 1200
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
5400 1350 6075 1350 6075 1950 5400 1950 5400 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
6225 1350 6900 1350 6900 1950 6225 1950 6225 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
3000 1350 3675 1350 3675 1950 3000 1950 3000 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
2175 1350 2850 1350 2850 1950 2175 1950 2175 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
1350 1350 2025 1350 2025 1950 1350 1950 1350 1350
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 870 6825 2850 Dest Host\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 1080 1350 2850 Source Host\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 1425 1725 VM-A\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 2250 1725 VM-B\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 3075 1725 VM-C\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 5475 1725 VM-C\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 6300 1725 VM-D\001
|
BIN
docs/migration-tunnel.png
Normal file
BIN
docs/migration-tunnel.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
58
docs/migration-unmanaged-direct.fig
Normal file
58
docs/migration-unmanaged-direct.fig
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#FIG 3.2 Produced by xfig version 3.2.5b
|
||||||
|
Landscape
|
||||||
|
Center
|
||||||
|
Inches
|
||||||
|
Letter
|
||||||
|
100.00
|
||||||
|
Single
|
||||||
|
-2
|
||||||
|
1200 2
|
||||||
|
6 2775 2400 3675 2850
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
2775 2400 3675 2400 3675 2850 2775 2850 2775 2400
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 630 2925 2700 HV Ctrl\001
|
||||||
|
-6
|
||||||
|
6 5400 2400 6300 2850
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
5400 2400 6300 2400 6300 2850 5400 2850 5400 2400
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 630 5550 2700 HV Ctrl\001
|
||||||
|
-6
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
1200 1200 3825 1200 3825 3000 1200 3000 1200 1200
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
5250 1200 7875 1200 7875 3000 5250 3000 5250 1200
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
5400 1350 6075 1350 6075 1950 5400 1950 5400 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
6225 1350 6900 1350 6900 1950 6225 1950 6225 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
3000 1350 3675 1350 3675 1950 3000 1950 3000 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
2175 1350 2850 1350 2850 1950 2175 1950 2175 1350
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
1350 1350 2025 1350 2025 1950 1350 1950 1350 1350
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
|
||||||
|
1 1 1.00 135.00 180.00
|
||||||
|
4350 4275 4350 3600 3300 3600 3300 2850
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
|
||||||
|
3225 4125 5850 4125 5850 6000 3225 6000 3225 4125
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
3375 5100 5700 5100 5700 5550 3375 5550 3375 5100
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 3
|
||||||
|
1 1 1.00 135.00 180.00
|
||||||
|
3750 5100 3750 4500 4050 4500
|
||||||
|
2 2 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
|
||||||
|
4050 4275 5100 4275 5100 4725 4050 4725 4050 4275
|
||||||
|
2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
|
||||||
|
1 1 1.00 135.00 180.00
|
||||||
|
3675 2625 5400 2625
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 870 6825 2850 Dest Host\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 1080 1350 2850 Source Host\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 1425 1725 VM-A\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 2250 1725 VM-B\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 3075 1725 VM-C\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 5475 1725 VM-C\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 495 6300 1725 VM-D\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 960 4725 5850 Client Host\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 180 1500 3525 5400 management app\001
|
||||||
|
4 0 0 50 -1 16 12 0.0000 4 150 735 4200 4575 libvirt.so\001
|
BIN
docs/migration-unmanaged-direct.png
Normal file
BIN
docs/migration-unmanaged-direct.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
601
docs/migration.html.in
Normal file
601
docs/migration.html.in
Normal file
@ -0,0 +1,601 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<h1>Guest migration</h1>
|
||||||
|
|
||||||
|
<ul id="toc"></ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Migration of guests between hosts is a complicated problem with many possible
|
||||||
|
solutions, each with their own positive and negative points. For maximum
|
||||||
|
flexibility of both hypervisor integration, and adminsitrator deployment,
|
||||||
|
libvirt implements several options for migration.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2><a id="transport">Network data transports</a></h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
There are two options for the data transport used during migration, either
|
||||||
|
the hypervisor's own <strong>native</strong> transport, or <strong>tunnelled</strong>
|
||||||
|
over a libvirtd connection.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3><a id="transportnative">Hypervisor native transport</a></h3>
|
||||||
|
<p>
|
||||||
|
<em>Native</em> data transports may or may not support encryption, depending
|
||||||
|
on the hypervisor in question, but will typically have the lowest computational costs
|
||||||
|
by minimising the number of data copies involved. The native data transports will also
|
||||||
|
require extra hypervisor-specific network configuration steps by the administrator when
|
||||||
|
deploying a host. For some hypervisors, it might be necessary to open up a large range
|
||||||
|
of ports on the firewall to allow multiple concurrent migration operations.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<img class="diagram" src="migration-native.png" alt="Migration native path">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3><a id="transporttunnel">libvirt tunnelled transport</a></h3>
|
||||||
|
<p>
|
||||||
|
<em>Tunnelled</em> data transports will always be capable of strong encryption
|
||||||
|
since they are able to leverage the capabilities built in to the libvirt RPC protocol.
|
||||||
|
The downside of a tunnelled transport, however, is that there will be extra data copies
|
||||||
|
involved on both the source and destinations hosts as the data is moved between libvirtd
|
||||||
|
and the hypervisor. This is likely to be a more significant problem for guests with
|
||||||
|
very large RAM sizes, which dirty memory pages quickly. On the deployment side, tunnelled
|
||||||
|
transports do not require any extra network configuration over and above what's already
|
||||||
|
required for general libvirtd <a href="remote.html">remote access</a>, and there is only
|
||||||
|
need for a single port to be open on the firewall to support multiple concurrent
|
||||||
|
migration operations.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<img class="diagram" src="migration-tunnel.png" alt="Migration tunnel path">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2><a id="flow">Communication control paths/flows</a></h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Migration of virtual machines requires close co-ordination of the two
|
||||||
|
hosts involved, as well as the application invoking the migration,
|
||||||
|
which may be on the source, the destination, or a third host.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3><a id="flowmanageddirect">Managed direct migration</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
With <em>managed direct</em> migration, the libvirt client process
|
||||||
|
controls the various phases of migration. The client application must
|
||||||
|
be able to connect and authenticate with the libvirtd daemons on both
|
||||||
|
the source and destination hosts. There is no need for the two libvirtd
|
||||||
|
daemons to communicate with each other. If the client application
|
||||||
|
crashes, or otherwise loses its connection to libvirtd during the
|
||||||
|
migration process, an attempt will be made to abort the migration and
|
||||||
|
restart the guest CPUs on the source host. There may be scenarios
|
||||||
|
where this cannot be safely done, in which cases the guest will be
|
||||||
|
left paused on one or both of the hosts.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<img class="diagram" src="migration-managed-direct.png" alt="Migration direct, managed">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h3><a id="flowpeer2peer">Managed peer to peer migration</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
With <em>peer to peer</em> migration, the libvirt client process only
|
||||||
|
talks to the libvirtd daemon on the source host. The source libvirtd
|
||||||
|
daemon controls the entire migration process itself, by directly
|
||||||
|
connecting the destination host libvirtd. If the client application crashes,
|
||||||
|
or otherwise loses its connection to libvirtd, the migration process
|
||||||
|
will continue uninterrupted until completion.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<img class="diagram" src="migration-managed-p2p.png" alt="Migration peer-to-peer">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h3><a id="flowunmanageddirect">Unmanaged direct migration</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
With <em>unmanaged direct</em> migration, neither the libvirt client
|
||||||
|
or libvirtd daemon control the migration process. Control is instead
|
||||||
|
delegated to the hypervisor's over management services (if any). The
|
||||||
|
libvirt client merely initiates the migration via the hypervisor's
|
||||||
|
management layer. If the libvirt client or libvirtd crash, the
|
||||||
|
migration process will continue uninterrupted until completion.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<img class="diagram" src="migration-unmanaged-direct.png" alt="Migration direct, unmanaged">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h2><a id="security">Data security</a></h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Since the migration data stream includes a complete copy of the guest
|
||||||
|
OS RAM, snooping of the migration data stream may allow compromise
|
||||||
|
of sensitive guest information. If the virtualization hosts have
|
||||||
|
multiple network interfaces, or if the network switches support
|
||||||
|
tagged VLANs, then it is very desirable to separate guest network
|
||||||
|
traffic from migration or management traffic.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
In some scenarios, even a separate network for migration data may
|
||||||
|
not offer sufficient security. In this case it is possible to apply
|
||||||
|
encryption to the migration data stream. If the hypervisor does not
|
||||||
|
itself offer encryption, then the libvirt tunnelled migration
|
||||||
|
facility should be used.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2><a id="uris">Migration URIs</a></h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Initiating a guest migration requires the client application to
|
||||||
|
specify up to three URIs, depending on the choice of control
|
||||||
|
flow and/or APIs used. The first URI is that of the libvirt
|
||||||
|
connection to the source host, where the virtual guest is
|
||||||
|
currently running. The second URI is that of the libvirt
|
||||||
|
connection to the destination host, where the virtual guest
|
||||||
|
will be moved to. The third URI is a hypervisor specific
|
||||||
|
URI used to control how the guest will be migrated. With
|
||||||
|
any managed migration flow, the first and second URIs are
|
||||||
|
compulsory, while the third URI is optional. With the
|
||||||
|
unmanaged direct migration mode, the first and third URIs are
|
||||||
|
compulsory and the second URI is not used.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Ordinarily management applications only need to care about the
|
||||||
|
first and second URIs, which are both in the normal libvirt
|
||||||
|
connection URI format. Libvirt will then automatically determine
|
||||||
|
the hypervisor specific URI, by looking up the target host's
|
||||||
|
configured hostname. There are a few scenarios where the management
|
||||||
|
application may wish to have direct control over the third URI.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li>The configured hostname is incorrect, or DNS is broken. If a
|
||||||
|
host has a hostname which will not resolve to match one of its
|
||||||
|
public IP addresses, then libvirt will generate an incorrect
|
||||||
|
URI. In this case the management application should specify the
|
||||||
|
hypervisor specific URI explicitly, using an IP address, or a
|
||||||
|
correct hostname.</li>
|
||||||
|
<li>The host has multiple network interaces. If a host has multiple
|
||||||
|
network interfaces, it might be desirable for the migration data
|
||||||
|
stream to be sent over a specific interface for either security
|
||||||
|
or performance reasons. In this case the management application
|
||||||
|
should specify the hypervisor specific URI, using an IP address
|
||||||
|
associated with the network to be used.</li>
|
||||||
|
<li>The firewall restricts what ports are available. When libvirt
|
||||||
|
generates a migration URI will pick a port number using hypervisor
|
||||||
|
specific rules. Some hypervisors only require a single port to be
|
||||||
|
open in the firewalls, while others require a whole range of port
|
||||||
|
numbers. In the latter case the management application may wish
|
||||||
|
to choose a specific port number outside the default range in order
|
||||||
|
to comply with local firewall policies</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<h2><a id="config">Configuration file handling</a></h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
There are two types of virtual machine known to libvirt. A <em>transient</em>
|
||||||
|
guest only exists while it is running, and has no configuration file stored
|
||||||
|
on disk. A <em>persistent</em> guest maintains a configuration file on disk
|
||||||
|
even when it is not running.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
By default, a migration operation will not attempt to change any configuration
|
||||||
|
files that may be stored on either the source or destination host. It is the
|
||||||
|
administrator, or management application's, responsibility to manage distribution
|
||||||
|
of configuration files (if desired). It is important to note that the <code>/etc/libvirt</code>
|
||||||
|
directory <strong>MUST NEVER BE SHARED BETWEEN HOSTS</strong>. There are some
|
||||||
|
typical scenarios that might be applicable:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Centralized configuration files outside libvirt, in shared storage. A cluster
|
||||||
|
aware management application may maintain all the master guest configuration
|
||||||
|
files in a cluster filesystem. When attempting to start a guest, the config
|
||||||
|
will be read from the cluster FS and used to deploy a persistent guest.
|
||||||
|
For migration the configuration will need to be copied to the destination
|
||||||
|
host and removed on the original.
|
||||||
|
</li>
|
||||||
|
<li>Centralized configuration files outside libvirt, in a database. A data center
|
||||||
|
management application may not storage configuration files at all. Instead it
|
||||||
|
may generate libvirt XML on the fly when a guest is booted. It will typically
|
||||||
|
use transient guests, and thus not have to consider configuration files during
|
||||||
|
migration.
|
||||||
|
</li>
|
||||||
|
<li>Distributed configuration inside libvirt. The configuration file for each
|
||||||
|
guest is copied to every host where the guest is able to run. Upon migration
|
||||||
|
the existing config merely needs to be updated with any changes
|
||||||
|
</li>
|
||||||
|
<li>Ad-hoc configuration management inside libvirt. Each guest is tied to a
|
||||||
|
specific host and rarely migrated. When migration is required, the config
|
||||||
|
is moved from one host to the other.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
As mentioned above, libvirt will not touch configuration files during
|
||||||
|
migration by default. The <code>virsh</code> command has two flags to
|
||||||
|
influence this behaviour. The <code>--undefine-source</code> flag
|
||||||
|
will cause the configuration file to be removed on the source host
|
||||||
|
after a successful migration. The <code>--persist</code> flag will
|
||||||
|
cause a configuration file to be created on the destination host
|
||||||
|
after a successful migration. The following table summarizes the
|
||||||
|
configuration file handling in all possible state and flag
|
||||||
|
combinations.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<table class="data">
|
||||||
|
<thead>
|
||||||
|
<tr class="head">
|
||||||
|
<th colspan="3">Before migration</th>
|
||||||
|
<th colspan="2">Flags</th>
|
||||||
|
<th colspan="3">After migration</th>
|
||||||
|
</tr>
|
||||||
|
<tr class="subhead">
|
||||||
|
<th>Guest type</th>
|
||||||
|
<th>Source config</th>
|
||||||
|
<th>Dest config</th>
|
||||||
|
<th>--undefine-source</th>
|
||||||
|
<th>--persist</th>
|
||||||
|
<th>Guest type</th>
|
||||||
|
<th>Source config</th>
|
||||||
|
<th>Dest config</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<!-- src:N, dst:N -->
|
||||||
|
<tr>
|
||||||
|
<td>Transient</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td>Transient</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Transient</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td>Transient</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Transient</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Transient</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- src:N, dst:Y -->
|
||||||
|
<tr>
|
||||||
|
<td>Transient</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td>Transient</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Transient</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td>Transient</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Transient</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Transient</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- src:Y dst:N -->
|
||||||
|
<tr>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td>Transient</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td>Transient</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- src:Y dst:Y -->
|
||||||
|
<tr>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
<td>Persistent</td>
|
||||||
|
<td class="n">N</td>
|
||||||
|
<td class="y">Y</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2><a id="scenarios">Migration scenarios</a></h2>
|
||||||
|
|
||||||
|
|
||||||
|
<h3><a id="scenarionativedirect">Native migration, client to two libvirtd servers</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
At an API level this requires use of virDomainMigrate, without the
|
||||||
|
VIR_MIGRATE_PEER2PEER flag set. The destination libvirtd server
|
||||||
|
will automatically determine the native hypervisor URI for migration
|
||||||
|
based off the primary hostname. To force migration over an alternate
|
||||||
|
network interface the optional hypervisor specific URI must be provided
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
syntax: virsh migrate GUESTNAME DEST-LIBVIRT-URI [HV-URI]
|
||||||
|
|
||||||
|
|
||||||
|
eg using default network interface
|
||||||
|
|
||||||
|
virsh migrate web1 qemu+ssh://desthost/system
|
||||||
|
virsh migrate web1 xen+tls://desthost/system
|
||||||
|
|
||||||
|
|
||||||
|
eg using secondary network interface
|
||||||
|
|
||||||
|
virsh migrate web1 qemu://desthost/system tcp://10.0.0.1/
|
||||||
|
virsh migrate web1 xen+tcp://desthost/system xenmigr:10.0.0.1/
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Supported by Xen, QEMU, VMWare and VirtualBox drivers
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3><a id="scenarionativepeer2peer">Native migration, client to and peer2peer between, two libvirtd servers</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
virDomainMigrate, with the VIR_MIGRATE_PEER2PEER flag set,
|
||||||
|
using the libvirt URI format for the 'uri' parameter. The
|
||||||
|
destination libvirtd server will automatically determine
|
||||||
|
the native hypervisor URI for migration, based off the
|
||||||
|
primary hostname. The optional uri parameter controls how
|
||||||
|
the source libvirtd connects to the destination libvirtd,
|
||||||
|
in case it is not accessible using the same address that
|
||||||
|
the client uses to connect to the destination, or a different
|
||||||
|
encryption/auth scheme is required. There is no
|
||||||
|
scope for forcing an alternative network interface for the
|
||||||
|
native migration data with this method.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This mode cannot be invoked from virsh
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Supported by QEMU driver
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3><a id="scenariotunnelpeer2peer1">Tunnelled migration, client and peer2peer between two libvirtd servers</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
virDomainMigrate, with the VIR_MIGRATE_PEER2PEER & VIR_MIGRATE_TUNNELLED
|
||||||
|
flags set, using the libvirt URI format for the 'uri' parameter. The
|
||||||
|
destination libvirtd server will automatically determine
|
||||||
|
the native hypervisor URI for migration, based off the
|
||||||
|
primary hostname. The optional uri parameter controls how
|
||||||
|
the source libvirtd connects to the destination libvirtd,
|
||||||
|
in case it is not accessible using the same address that
|
||||||
|
the client uses to connect to the destination, or a different
|
||||||
|
encryption/auth scheme is required. The native hypervisor URI
|
||||||
|
format is not used at all.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This mode cannot be invoked from virsh
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Supported by QEMU driver
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3><a id="nativedirectunmanaged">Native migration, client to one libvirtd server</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
virDomainMigrateToURI, without the VIR_MIGRATE_PEER2PEER flag set,
|
||||||
|
using a hypervisor specific URI format for the 'uri' parameter.
|
||||||
|
There is no use or requirement for a destination libvirtd instance
|
||||||
|
at all. This is typically used when the hypervisor has its own
|
||||||
|
native management daemon available to handle incoming migration
|
||||||
|
attempts on the destination.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
syntax: virsh migrate GUESTNAME HV-URI
|
||||||
|
|
||||||
|
|
||||||
|
eg using same libvirt URI for all connections
|
||||||
|
|
||||||
|
virsh migrate --direct web1 xenmigr://desthost/
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Supported by Xen driver
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3><a id="nativepeer2peer">Native migration, peer2peer between two libvirtd servers</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
virDomainMigrateToURI, with the VIR_MIGRATE_PEER2PEER flag set,
|
||||||
|
using the libvirt URI format for the 'uri' parameter. The
|
||||||
|
destination libvirtd server will automatically determine
|
||||||
|
the native hypervisor URI for migration, based off the
|
||||||
|
primary hostname. There is no scope for forcing an alternative
|
||||||
|
network interface for the native migration data with this method.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
syntax: virsh migrate GUESTNAME DEST-LIBVIRT-URI [ALT-DEST-LIBVIRT-URI]
|
||||||
|
|
||||||
|
|
||||||
|
eg using same libvirt URI for all connections
|
||||||
|
|
||||||
|
virsh migrate --p2p web1 qemu+ssh://desthost/system
|
||||||
|
|
||||||
|
|
||||||
|
eg using different libvirt URI auth scheme for peer2peer connections
|
||||||
|
|
||||||
|
virsh migrate --p2p web1 qemu+ssh://desthost/system qemu+tls:/desthost/system
|
||||||
|
|
||||||
|
|
||||||
|
eg using different libvirt URI hostname for peer2peer connections
|
||||||
|
|
||||||
|
virsh migrate --p2p web1 qemu+ssh://desthost/system qemu+ssh://10.0.0.1/system
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Supported by the QEMU driver
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3><a id="scenariotunnelpeer2peer2">Tunnelled migration, peer2peer between two libvirtd servers</a></h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
virDomainMigrateToURI, with the VIR_MIGRATE_PEER2PEER & VIR_MIGRATE_TUNNELLED
|
||||||
|
flags set, using the libvirt URI format for the 'uri' parameter. The
|
||||||
|
destination libvirtd server will automatically determine
|
||||||
|
the native hypervisor URI for migration, based off the
|
||||||
|
primary hostname. The optional uri parameter controls how
|
||||||
|
the source libvirtd connects to the destination libvirtd,
|
||||||
|
in case it is not accessible using the same address that
|
||||||
|
the client uses to connect to the destination, or a different
|
||||||
|
encryption/auth scheme is required. The native hypervisor URI
|
||||||
|
format is not used at all.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
syntax: virsh migrate GUESTNAME DEST-LIBVIRT-URI [ALT-DEST-LIBVIRT-URI]
|
||||||
|
|
||||||
|
|
||||||
|
eg using same libvirt URI for all connections
|
||||||
|
|
||||||
|
virsh migrate --p2p --tunnelled web1 qemu+ssh://desthost/system
|
||||||
|
|
||||||
|
|
||||||
|
eg using different libvirt URI auth scheme for peer2peer connections
|
||||||
|
|
||||||
|
virsh migrate --p2p --tunnelled web1 qemu+ssh://desthost/system qemu+tls:/desthost/system
|
||||||
|
|
||||||
|
|
||||||
|
eg using different libvirt URI hostname for peer2peer connections
|
||||||
|
|
||||||
|
virsh migrate --p2p --tunnelled web1 qemu+ssh://desthost/system qemu+ssh://10.0.0.1/system
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Supported by QEMU driver
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
1419
docs/news.html.in
1419
docs/news.html.in
File diff suppressed because it is too large
Load Diff
@ -2,7 +2,7 @@
|
|||||||
Landscape
|
Landscape
|
||||||
Center
|
Center
|
||||||
Inches
|
Inches
|
||||||
Letter
|
Letter
|
||||||
100.00
|
100.00
|
||||||
Single
|
Single
|
||||||
-2
|
-2
|
||||||
|
@ -20,7 +20,7 @@ lower case, for example the C functions:</p>
|
|||||||
</p>
|
</p>
|
||||||
<p>become</p>
|
<p>become</p>
|
||||||
<p>
|
<p>
|
||||||
<code>virConn::numOfDomains(self)</code>
|
<code>virConnect::numOfDomains(self)</code>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<code>virDomain::setMaxMemory(self, memory)</code>
|
<code>virDomain::setMaxMemory(self, memory)</code>
|
||||||
|
@ -738,7 +738,7 @@ Blank lines and comments beginning with <code>#</code> are ignored.
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td> mdns_adv <i>[0|1]</i> </td>
|
<td> mdns_adv <i>[0|1]</i> </td>
|
||||||
<td> 1 (advertise with mDNS) </td>
|
<td> 0 (advertise with mDNS) </td>
|
||||||
<td>
|
<td>
|
||||||
If set to 1 then the virtualization service will be advertised over
|
If set to 1 then the virtualization service will be advertised over
|
||||||
mDNS to hosts on the local LAN segment.
|
mDNS to hosts on the local LAN segment.
|
||||||
|
@ -8,6 +8,11 @@
|
|||||||
<param name="pattern">[0-9]+</param>
|
<param name="pattern">[0-9]+</param>
|
||||||
</data>
|
</data>
|
||||||
</define>
|
</define>
|
||||||
|
<define name='unsignedLong'>
|
||||||
|
<data type='unsignedLong'>
|
||||||
|
<param name='pattern'>[0-9]+</param>
|
||||||
|
</data>
|
||||||
|
</define>
|
||||||
|
|
||||||
<define name="positiveInteger">
|
<define name="positiveInteger">
|
||||||
<data type="positiveInteger">
|
<data type="positiveInteger">
|
||||||
@ -50,9 +55,24 @@
|
|||||||
</define>
|
</define>
|
||||||
|
|
||||||
<!-- a 6 byte MAC address in ASCII-hex format, eg "12:34:56:78:9A:BC" -->
|
<!-- a 6 byte MAC address in ASCII-hex format, eg "12:34:56:78:9A:BC" -->
|
||||||
|
<!-- The lowest bit of the 1st byte is the "multicast" bit. a -->
|
||||||
|
<!-- uniMacAddr requires that bit to be 0, and a multiMacAddr -->
|
||||||
|
<!-- requires it to be 1. Plain macAddr will accept either. -->
|
||||||
|
<!-- Currently there is no use of multiMacAddr in libvirt, it -->
|
||||||
|
<!-- is included here for documentation/comparison purposes. -->
|
||||||
|
<define name="uniMacAddr">
|
||||||
|
<data type="string">
|
||||||
|
<param name="pattern">[a-fA-F0-9][02468aAcCeE](:[a-fA-F0-9]{2}){5}</param>
|
||||||
|
</data>
|
||||||
|
</define>
|
||||||
|
<define name="multiMacAddr">
|
||||||
|
<data type="string">
|
||||||
|
<param name="pattern">[a-fA-F0-9][13579bBdDfF](:[a-fA-F0-9]{2}){5}</param>
|
||||||
|
</data>
|
||||||
|
</define>
|
||||||
<define name="macAddr">
|
<define name="macAddr">
|
||||||
<data type="string">
|
<data type="string">
|
||||||
<param name="pattern">([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}</param>
|
<param name="pattern">[a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}</param>
|
||||||
</data>
|
</data>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
@ -97,6 +117,12 @@
|
|||||||
</choice>
|
</choice>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
|
<define name="genericName">
|
||||||
|
<data type="string">
|
||||||
|
<param name="pattern">[a-zA-Z0-9_\+\-]+</param>
|
||||||
|
</data>
|
||||||
|
</define>
|
||||||
|
|
||||||
<define name="dnsName">
|
<define name="dnsName">
|
||||||
<data type="string">
|
<data type="string">
|
||||||
<param name="pattern">[a-zA-Z0-9\.\-]+</param>
|
<param name="pattern">[a-zA-Z0-9\.\-]+</param>
|
||||||
@ -117,7 +143,7 @@
|
|||||||
|
|
||||||
<define name="absFilePath">
|
<define name="absFilePath">
|
||||||
<data type="string">
|
<data type="string">
|
||||||
<param name="pattern">/[a-zA-Z0-9_\.\+\-\\&"'<>/%]+</param>
|
<param name="pattern">/[a-zA-Z0-9_\.\+\-\\&"'<>/%,]+</param>
|
||||||
</data>
|
</data>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
@ -127,4 +153,18 @@
|
|||||||
</data>
|
</data>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
|
<define name='unit'>
|
||||||
|
<data type='string'>
|
||||||
|
<param name='pattern'>([bB]([yY][tT][eE][sS]?)?)|([kKmMgGtTpPeE]([iI]?[bB])?)</param>
|
||||||
|
</data>
|
||||||
|
</define>
|
||||||
|
<define name='scaledInteger'>
|
||||||
|
<optional>
|
||||||
|
<attribute name='unit'>
|
||||||
|
<ref name='unit'/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<ref name='unsignedLong'/>
|
||||||
|
</define>
|
||||||
|
|
||||||
</grammar>
|
</grammar>
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<!-- A Relax NG schema for the libvirt capabilities XML format -->
|
<!-- A Relax NG schema for the libvirt capabilities XML format -->
|
||||||
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
|
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
|
||||||
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
||||||
|
<include href='basictypes.rng'/>
|
||||||
<start>
|
<start>
|
||||||
<ref name='capabilities'/>
|
<ref name='capabilities'/>
|
||||||
</start>
|
</start>
|
||||||
@ -34,6 +35,9 @@
|
|||||||
<ref name='cpuspec'/>
|
<ref name='cpuspec'/>
|
||||||
</optional>
|
</optional>
|
||||||
</element>
|
</element>
|
||||||
|
<optional>
|
||||||
|
<ref name='power_management'/>
|
||||||
|
</optional>
|
||||||
<optional>
|
<optional>
|
||||||
<ref name='migration'/>
|
<ref name='migration'/>
|
||||||
</optional>
|
</optional>
|
||||||
@ -105,6 +109,28 @@
|
|||||||
</zeroOrMore>
|
</zeroOrMore>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
|
<define name='power_management'>
|
||||||
|
<element name='power_management'>
|
||||||
|
<interleave>
|
||||||
|
<optional>
|
||||||
|
<element name='suspend_mem'>
|
||||||
|
<empty/>
|
||||||
|
</element>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<element name='suspend_disk'>
|
||||||
|
<empty/>
|
||||||
|
</element>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<element name='suspend_hybrid'>
|
||||||
|
<empty/>
|
||||||
|
</element>
|
||||||
|
</optional>
|
||||||
|
</interleave>
|
||||||
|
</element>
|
||||||
|
</define>
|
||||||
|
|
||||||
<define name='migration'>
|
<define name='migration'>
|
||||||
<element name='migration_features'>
|
<element name='migration_features'>
|
||||||
<optional>
|
<optional>
|
||||||
@ -132,7 +158,7 @@
|
|||||||
<element name='topology'>
|
<element name='topology'>
|
||||||
<element name='cells'>
|
<element name='cells'>
|
||||||
<attribute name='num'>
|
<attribute name='num'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedInt'/>
|
||||||
</attribute>
|
</attribute>
|
||||||
<oneOrMore>
|
<oneOrMore>
|
||||||
<ref name='cell'/>
|
<ref name='cell'/>
|
||||||
@ -144,13 +170,13 @@
|
|||||||
<define name='cell'>
|
<define name='cell'>
|
||||||
<element name='cell'>
|
<element name='cell'>
|
||||||
<attribute name='id'>
|
<attribute name='id'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedInt'/>
|
||||||
</attribute>
|
</attribute>
|
||||||
|
|
||||||
<optional>
|
<optional>
|
||||||
<element name='cpus'>
|
<element name='cpus'>
|
||||||
<attribute name='num'>
|
<attribute name='num'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedInt'/>
|
||||||
</attribute>
|
</attribute>
|
||||||
<oneOrMore>
|
<oneOrMore>
|
||||||
<ref name='cpu'/>
|
<ref name='cpu'/>
|
||||||
@ -163,7 +189,7 @@
|
|||||||
<define name='cpu'>
|
<define name='cpu'>
|
||||||
<element name='cpu'>
|
<element name='cpu'>
|
||||||
<attribute name='id'>
|
<attribute name='id'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedInt'/>
|
||||||
</attribute>
|
</attribute>
|
||||||
</element>
|
</element>
|
||||||
</define>
|
</define>
|
||||||
@ -213,13 +239,13 @@
|
|||||||
|
|
||||||
<define name='emulator'>
|
<define name='emulator'>
|
||||||
<element name='emulator'>
|
<element name='emulator'>
|
||||||
<ref name='path'/>
|
<ref name='absFilePath'/>
|
||||||
</element>
|
</element>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
<define name='loader'>
|
<define name='loader'>
|
||||||
<element name='loader'>
|
<element name='loader'>
|
||||||
<ref name='path'/>
|
<ref name='absFilePath'/>
|
||||||
</element>
|
</element>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
@ -302,6 +328,11 @@
|
|||||||
<empty/>
|
<empty/>
|
||||||
</element>
|
</element>
|
||||||
</optional>
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<element name='deviceboot'>
|
||||||
|
<empty/>
|
||||||
|
</element>
|
||||||
|
</optional>
|
||||||
</element>
|
</element>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
@ -337,39 +368,9 @@
|
|||||||
</choice>
|
</choice>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
|
|
||||||
<define name='positiveInteger'>
|
|
||||||
<data type='positiveInteger'>
|
|
||||||
<param name="pattern">[0-9]+</param>
|
|
||||||
</data>
|
|
||||||
</define>
|
|
||||||
|
|
||||||
<define name='uint'>
|
|
||||||
<data type='unsignedInt'>
|
|
||||||
<param name="pattern">[0-9]+</param>
|
|
||||||
</data>
|
|
||||||
</define>
|
|
||||||
|
|
||||||
<define name='path'>
|
|
||||||
<data type='string'>
|
|
||||||
<param name="pattern">/[a-zA-Z0-9_\+\-/%]+</param>
|
|
||||||
</data>
|
|
||||||
</define>
|
|
||||||
|
|
||||||
<define name='featureName'>
|
<define name='featureName'>
|
||||||
<data type='string'>
|
<data type='string'>
|
||||||
<param name='pattern'>[a-zA-Z0-9\-_]+</param>
|
<param name='pattern'>[a-zA-Z0-9\-_]+</param>
|
||||||
</data>
|
</data>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
<define name="UUID">
|
|
||||||
<choice>
|
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">[a-fA-F0-9]{32}</param>
|
|
||||||
</data>
|
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">[a-fA-F0-9]{8}\-([a-fA-F0-9]{4}\-){3}[a-fA-F0-9]{12}</param>
|
|
||||||
</data>
|
|
||||||
</choice>
|
|
||||||
</define>
|
|
||||||
</grammar>
|
</grammar>
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -183,12 +183,12 @@
|
|||||||
<choice>
|
<choice>
|
||||||
<element name="miimon">
|
<element name="miimon">
|
||||||
<!-- miimon frequency in ms -->
|
<!-- miimon frequency in ms -->
|
||||||
<attribute name="freq"><ref name="uint"/></attribute>
|
<attribute name="freq"><ref name="unsignedInt"/></attribute>
|
||||||
<optional>
|
<optional>
|
||||||
<attribute name="downdelay"><ref name="uint"/></attribute>
|
<attribute name="downdelay"><ref name="unsignedInt"/></attribute>
|
||||||
</optional>
|
</optional>
|
||||||
<optional>
|
<optional>
|
||||||
<attribute name="updelay"><ref name="uint"/></attribute>
|
<attribute name="updelay"><ref name="unsignedInt"/></attribute>
|
||||||
</optional>
|
</optional>
|
||||||
<optional>
|
<optional>
|
||||||
<!-- use_carrier -->
|
<!-- use_carrier -->
|
||||||
@ -203,7 +203,7 @@
|
|||||||
</optional>
|
</optional>
|
||||||
</element>
|
</element>
|
||||||
<element name="arpmon">
|
<element name="arpmon">
|
||||||
<attribute name="interval"><ref name="uint"/></attribute>
|
<attribute name="interval"><ref name="unsignedInt"/></attribute>
|
||||||
<attribute name="target"><ref name="ipv4Addr"/></attribute>
|
<attribute name="target"><ref name="ipv4Addr"/></attribute>
|
||||||
<optional>
|
<optional>
|
||||||
<attribute name="validate">
|
<attribute name="validate">
|
||||||
@ -252,7 +252,7 @@
|
|||||||
<define name="mtu">
|
<define name="mtu">
|
||||||
<optional>
|
<optional>
|
||||||
<element name="mtu">
|
<element name="mtu">
|
||||||
<attribute name="size"><ref name="uint"/></attribute>
|
<attribute name="size"><ref name="unsignedInt"/></attribute>
|
||||||
</element>
|
</element>
|
||||||
</optional>
|
</optional>
|
||||||
</define>
|
</define>
|
||||||
@ -407,12 +407,6 @@
|
|||||||
|
|
||||||
<!-- Type library -->
|
<!-- Type library -->
|
||||||
|
|
||||||
<define name='uint'>
|
|
||||||
<data type='unsignedInt'>
|
|
||||||
<param name="pattern">[0-9]+</param>
|
|
||||||
</data>
|
|
||||||
</define>
|
|
||||||
|
|
||||||
<define name="timeval">
|
<define name="timeval">
|
||||||
<data type="double">
|
<data type="double">
|
||||||
<param name="minInclusive">0</param>
|
<param name="minInclusive">0</param>
|
||||||
|
@ -57,7 +57,7 @@
|
|||||||
<!-- <mac> element -->
|
<!-- <mac> element -->
|
||||||
<optional>
|
<optional>
|
||||||
<element name="mac">
|
<element name="mac">
|
||||||
<attribute name="address"><ref name="macAddr"/></attribute>
|
<attribute name="address"><ref name="uniMacAddr"/></attribute>
|
||||||
<empty/>
|
<empty/>
|
||||||
</element>
|
</element>
|
||||||
</optional>
|
</optional>
|
||||||
@ -85,13 +85,22 @@
|
|||||||
</choice>
|
</choice>
|
||||||
</attribute>
|
</attribute>
|
||||||
</optional>
|
</optional>
|
||||||
<zeroOrMore>
|
<interleave>
|
||||||
<element name='interface'>
|
<zeroOrMore>
|
||||||
<attribute name='dev'>
|
<element name='interface'>
|
||||||
<ref name='deviceName'/>
|
<attribute name='dev'>
|
||||||
</attribute>
|
<ref name='deviceName'/>
|
||||||
</element>
|
</attribute>
|
||||||
</zeroOrMore>
|
</element>
|
||||||
|
</zeroOrMore>
|
||||||
|
<optional>
|
||||||
|
<element name='pf'>
|
||||||
|
<attribute name='dev'>
|
||||||
|
<ref name='deviceName'/>
|
||||||
|
</attribute>
|
||||||
|
</element>
|
||||||
|
</optional>
|
||||||
|
</interleave>
|
||||||
</element>
|
</element>
|
||||||
</optional>
|
</optional>
|
||||||
|
|
||||||
@ -137,6 +146,19 @@
|
|||||||
<attribute name="value"><text/></attribute>
|
<attribute name="value"><text/></attribute>
|
||||||
</element>
|
</element>
|
||||||
</zeroOrMore>
|
</zeroOrMore>
|
||||||
|
<zeroOrMore>
|
||||||
|
<element name="srv">
|
||||||
|
<attribute name="service"><text/></attribute>
|
||||||
|
<attribute name="protocol"><ref name="protocol"/></attribute>
|
||||||
|
<optional>
|
||||||
|
<attribute name="domain"><ref name="dnsName"/></attribute>
|
||||||
|
<attribute name="target"><text/></attribute>
|
||||||
|
<attribute name="port"><ref name="unsignedShort"/></attribute>
|
||||||
|
<attribute name="priority"><ref name="unsignedShort"/></attribute>
|
||||||
|
<attribute name="weight"><ref name="unsignedShort"/></attribute>
|
||||||
|
</optional>
|
||||||
|
</element>
|
||||||
|
</zeroOrMore>
|
||||||
<zeroOrMore>
|
<zeroOrMore>
|
||||||
<element name="host">
|
<element name="host">
|
||||||
<attribute name="ip"><ref name="ipv4Addr"/></attribute>
|
<attribute name="ip"><ref name="ipv4Addr"/></attribute>
|
||||||
@ -196,7 +218,7 @@
|
|||||||
</zeroOrMore>
|
</zeroOrMore>
|
||||||
<zeroOrMore>
|
<zeroOrMore>
|
||||||
<element name="host">
|
<element name="host">
|
||||||
<attribute name="mac"><ref name="macAddr"/></attribute>
|
<attribute name="mac"><ref name="uniMacAddr"/></attribute>
|
||||||
<attribute name="name"><text/></attribute>
|
<attribute name="name"><text/></attribute>
|
||||||
<attribute name="ip"><ref name="ipv4Addr"/></attribute>
|
<attribute name="ip"><ref name="ipv4Addr"/></attribute>
|
||||||
</element>
|
</element>
|
||||||
@ -216,11 +238,4 @@
|
|||||||
</interleave>
|
</interleave>
|
||||||
</element>
|
</element>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
<define name='addr-family'>
|
|
||||||
<data type='string'>
|
|
||||||
<param name="pattern">(ipv4)|(ipv6)</param>
|
|
||||||
</data>
|
|
||||||
</define>
|
|
||||||
|
|
||||||
</grammar>
|
</grammar>
|
||||||
|
@ -95,4 +95,21 @@
|
|||||||
<param name="minInclusive">1</param>
|
<param name="minInclusive">1</param>
|
||||||
</data>
|
</data>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
|
<define name='unsignedShort'>
|
||||||
|
<data type='integer'>
|
||||||
|
<param name="minInclusive">0</param>
|
||||||
|
<param name="maxInclusive">65535</param>
|
||||||
|
</data>
|
||||||
|
</define>
|
||||||
|
<define name='protocol'>
|
||||||
|
<data type='string'>
|
||||||
|
<param name='pattern'>(tcp)|(udp)</param>
|
||||||
|
</data>
|
||||||
|
</define>
|
||||||
|
<define name='addr-family'>
|
||||||
|
<data type='string'>
|
||||||
|
<param name="pattern">(ipv4)|(ipv6)</param>
|
||||||
|
</data>
|
||||||
|
</define>
|
||||||
</grammar>
|
</grammar>
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<!-- A Relax NG schema for the libvirt node device XML format -->
|
<!-- A Relax NG schema for the libvirt node device XML format -->
|
||||||
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
|
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
|
||||||
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
||||||
|
<include href='basictypes.rng'/>
|
||||||
<start>
|
<start>
|
||||||
<ref name='device'/>
|
<ref name='device'/>
|
||||||
</start>
|
</start>
|
||||||
@ -56,7 +57,7 @@
|
|||||||
</optional>
|
</optional>
|
||||||
|
|
||||||
<element name='uuid'>
|
<element name='uuid'>
|
||||||
<ref name='uuid'/>
|
<ref name='UUID'/>
|
||||||
</element>
|
</element>
|
||||||
</element>
|
</element>
|
||||||
|
|
||||||
@ -80,16 +81,16 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
|
|
||||||
<element name='domain'>
|
<element name='domain'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
<element name='bus'>
|
<element name='bus'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
<element name='slot'>
|
<element name='slot'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
<element name='function'>
|
<element name='function'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
|
|
||||||
<element name='product'>
|
<element name='product'>
|
||||||
@ -122,10 +123,10 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
|
|
||||||
<element name='bus'>
|
<element name='bus'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
<element name='device'>
|
<element name='device'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
|
|
||||||
<element name='product'>
|
<element name='product'>
|
||||||
@ -157,16 +158,16 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
|
|
||||||
<element name='number'>
|
<element name='number'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
<element name='class'>
|
<element name='class'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
<element name='subclass'>
|
<element name='subclass'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
<element name='protocol'>
|
<element name='protocol'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
|
|
||||||
<optional>
|
<optional>
|
||||||
@ -216,6 +217,35 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
|
<define name='wwn'>
|
||||||
|
<data type='string'>
|
||||||
|
<param name='pattern'>(0-9a-fA-F){16}</param>
|
||||||
|
</data>
|
||||||
|
</define>
|
||||||
|
|
||||||
|
<define name='capsfchost'>
|
||||||
|
<attribute name='type'>
|
||||||
|
<value>fc_host</value>
|
||||||
|
</attribute>
|
||||||
|
|
||||||
|
<element name='wwnn'>
|
||||||
|
<ref name='wwn'/>
|
||||||
|
</element>
|
||||||
|
|
||||||
|
<element name='wwpn'>
|
||||||
|
<ref name='wwn'/>
|
||||||
|
</element>
|
||||||
|
|
||||||
|
<element name='fabric_wwn'>
|
||||||
|
<ref name='wwn'/>
|
||||||
|
</element>
|
||||||
|
</define>
|
||||||
|
|
||||||
|
<define name='capsvports'>
|
||||||
|
<attribute name='type'>
|
||||||
|
<value>vports_ops</value>
|
||||||
|
</attribute>
|
||||||
|
</define>
|
||||||
|
|
||||||
<define name='capscsihost'>
|
<define name='capscsihost'>
|
||||||
<attribute name='type'>
|
<attribute name='type'>
|
||||||
@ -223,8 +253,19 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
|
|
||||||
<element name='host'>
|
<element name='host'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
|
|
||||||
|
<optional>
|
||||||
|
<zeroOrMore>
|
||||||
|
<element name='capability'>
|
||||||
|
<choice>
|
||||||
|
<ref name='capsfchost'/>
|
||||||
|
<ref name='capsvports'/>
|
||||||
|
</choice>
|
||||||
|
</element>
|
||||||
|
</zeroOrMore>
|
||||||
|
</optional>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
<define name='capscsi'>
|
<define name='capscsi'>
|
||||||
@ -233,16 +274,16 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
|
|
||||||
<element name='host'>
|
<element name='host'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
<element name='bus'>
|
<element name='bus'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
<element name='target'>
|
<element name='target'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
<element name='lun'>
|
<element name='lun'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
|
|
||||||
<element name='type'>
|
<element name='type'>
|
||||||
@ -312,7 +353,7 @@
|
|||||||
</element>
|
</element>
|
||||||
|
|
||||||
<element name='media_size'>
|
<element name='media_size'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
<optional>
|
<optional>
|
||||||
<element name='media_label'>
|
<element name='media_label'>
|
||||||
@ -324,27 +365,10 @@
|
|||||||
|
|
||||||
<define name='capstoragefixed'>
|
<define name='capstoragefixed'>
|
||||||
<element name='size'>
|
<element name='size'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</element>
|
</element>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
<define name='uuid'>
|
|
||||||
<choice>
|
|
||||||
<data type='string'>
|
|
||||||
<param name="pattern">[a-fA-F0-9]{32}</param>
|
|
||||||
</data>
|
|
||||||
<data type='string'>
|
|
||||||
<param name="pattern">[a-fA-F0-9]{8}\-([a-fA-F0-9]{4}\-){3}[a-fA-F0-9]{12}</param>
|
|
||||||
</data>
|
|
||||||
</choice>
|
|
||||||
</define>
|
|
||||||
|
|
||||||
<define name='uint'>
|
|
||||||
<data type='string'>
|
|
||||||
<param name="pattern">[0-9]+</param>
|
|
||||||
</data>
|
|
||||||
</define>
|
|
||||||
|
|
||||||
<define name='hexuint'>
|
<define name='hexuint'>
|
||||||
<data type='string'>
|
<data type='string'>
|
||||||
<param name="pattern">(0x)?[0-9a-f]+</param>
|
<param name="pattern">(0x)?[0-9a-f]+</param>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<grammar ns="" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
<grammar ns="" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
||||||
|
<include href='basictypes.rng'/>
|
||||||
<start>
|
<start>
|
||||||
<ref name="filter"/>
|
<ref name="filter"/>
|
||||||
</start>
|
</start>
|
||||||
@ -28,6 +29,26 @@
|
|||||||
</element>
|
</element>
|
||||||
</zeroOrMore>
|
</zeroOrMore>
|
||||||
</optional>
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<zeroOrMore>
|
||||||
|
<element name="vlan">
|
||||||
|
<ref name="match-attribute"/>
|
||||||
|
<ref name="common-l2-attributes"/>
|
||||||
|
<ref name="vlan-attributes"/>
|
||||||
|
<ref name="comment-attribute"/>
|
||||||
|
</element>
|
||||||
|
</zeroOrMore>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<zeroOrMore>
|
||||||
|
<element name="stp">
|
||||||
|
<ref name="match-attribute"/>
|
||||||
|
<ref name="srcmacandmask-attributes"/>
|
||||||
|
<ref name="stp-attributes"/>
|
||||||
|
<ref name="comment-attribute"/>
|
||||||
|
</element>
|
||||||
|
</zeroOrMore>
|
||||||
|
</optional>
|
||||||
<optional>
|
<optional>
|
||||||
<zeroOrMore>
|
<zeroOrMore>
|
||||||
<element name="arp">
|
<element name="arp">
|
||||||
@ -286,20 +307,42 @@
|
|||||||
<attribute name="chain">
|
<attribute name="chain">
|
||||||
<choice>
|
<choice>
|
||||||
<value>root</value>
|
<value>root</value>
|
||||||
<value>arp</value>
|
<data type="string">
|
||||||
<value>rarp</value>
|
<param name="pattern">mac[a-zA-Z0-9_\.:-]{0,9}</param>
|
||||||
<value>ipv4</value>
|
</data>
|
||||||
<value>ipv6</value>
|
<data type="string">
|
||||||
|
<param name="pattern">stp[a-zA-Z0-9_\.:-]{0,9}</param>
|
||||||
|
</data>
|
||||||
|
<data type="string">
|
||||||
|
<param name="pattern">vlan[a-zA-Z0-9_\.:-]{0,8}</param>
|
||||||
|
</data>
|
||||||
|
<data type="string">
|
||||||
|
<param name="pattern">arp[a-zA-Z0-9_\.:-]{0,9}</param>
|
||||||
|
</data>
|
||||||
|
<data type="string">
|
||||||
|
<param name="pattern">rarp[a-zA-Z0-9_\.:-]{0,8}</param>
|
||||||
|
</data>
|
||||||
|
<data type="string">
|
||||||
|
<param name="pattern">ipv4[a-zA-Z0-9_\.:-]{0,8}</param>
|
||||||
|
</data>
|
||||||
|
<data type="string">
|
||||||
|
<param name="pattern">ipv6[a-zA-Z0-9_\.:-]{0,8}</param>
|
||||||
|
</data>
|
||||||
</choice>
|
</choice>
|
||||||
</attribute>
|
</attribute>
|
||||||
</optional>
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="priority">
|
||||||
|
<ref name='priority-type'/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
<define name="filterref-node-attributes">
|
<define name="filterref-node-attributes">
|
||||||
<attribute name="filter">
|
<attribute name="filter">
|
||||||
<data type="NCName"/>
|
<data type="NCName"/>
|
||||||
</attribute>
|
</attribute>
|
||||||
<optional>
|
<zeroOrMore>
|
||||||
<element name="parameter">
|
<element name="parameter">
|
||||||
<attribute name="name">
|
<attribute name="name">
|
||||||
<ref name="filter-param-name"/>
|
<ref name="filter-param-name"/>
|
||||||
@ -308,7 +351,7 @@
|
|||||||
<ref name="filter-param-value"/>
|
<ref name="filter-param-value"/>
|
||||||
</attribute>
|
</attribute>
|
||||||
</element>
|
</element>
|
||||||
</optional>
|
</zeroOrMore>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
<define name="rule-node-attributes">
|
<define name="rule-node-attributes">
|
||||||
@ -353,7 +396,7 @@
|
|||||||
</interleave>
|
</interleave>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
<define name="common-l2-attributes">
|
<define name="srcmacandmask-attributes">
|
||||||
<interleave>
|
<interleave>
|
||||||
<ref name="srcmac-attribute"/>
|
<ref name="srcmac-attribute"/>
|
||||||
<optional>
|
<optional>
|
||||||
@ -361,6 +404,12 @@
|
|||||||
<ref name="addrMAC"/>
|
<ref name="addrMAC"/>
|
||||||
</attribute>
|
</attribute>
|
||||||
</optional>
|
</optional>
|
||||||
|
</interleave>
|
||||||
|
</define>
|
||||||
|
|
||||||
|
<define name="common-l2-attributes">
|
||||||
|
<interleave>
|
||||||
|
<ref name="srcmacandmask-attributes"/>
|
||||||
<optional>
|
<optional>
|
||||||
<attribute name="dstmacaddr">
|
<attribute name="dstmacaddr">
|
||||||
<ref name="addrMAC"/>
|
<ref name="addrMAC"/>
|
||||||
@ -544,6 +593,134 @@
|
|||||||
</interleave>
|
</interleave>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
|
<define name="vlan-attributes">
|
||||||
|
<interleave>
|
||||||
|
<optional>
|
||||||
|
<attribute name="vlanid">
|
||||||
|
<ref name="vlan-vlanid"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="encap-protocol">
|
||||||
|
<ref name="mac-protocolid"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
</interleave>
|
||||||
|
</define>
|
||||||
|
|
||||||
|
<define name="stp-attributes">
|
||||||
|
<optional>
|
||||||
|
<attribute name="type">
|
||||||
|
<ref name="uint8range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="flags">
|
||||||
|
<ref name="uint8range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="root-priority">
|
||||||
|
<ref name="uint16range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="root-priority-hi">
|
||||||
|
<ref name="uint16range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="root-address">
|
||||||
|
<ref name="addrMAC"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="root-address-mask">
|
||||||
|
<ref name="addrMAC"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="root-cost">
|
||||||
|
<ref name="uint32range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="root-cost-hi">
|
||||||
|
<ref name="uint32range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="sender-priority">
|
||||||
|
<ref name="uint16range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="sender-priority-hi">
|
||||||
|
<ref name="uint16range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="sender-address">
|
||||||
|
<ref name="addrMAC"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="sender-address-mask">
|
||||||
|
<ref name="addrMAC"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="port">
|
||||||
|
<ref name="uint16range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="port-hi">
|
||||||
|
<ref name="uint16range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="age">
|
||||||
|
<ref name="uint16range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="age-hi">
|
||||||
|
<ref name="uint16range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="max-age">
|
||||||
|
<ref name="uint16range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="max-age-hi">
|
||||||
|
<ref name="uint16range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="hello-time">
|
||||||
|
<ref name="uint16range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="hello-time-hi">
|
||||||
|
<ref name="uint16range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="forward-delay">
|
||||||
|
<ref name="uint16range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="forward-delay-hi">
|
||||||
|
<ref name="uint16range"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
</define>
|
||||||
|
|
||||||
<define name="arp-attributes">
|
<define name="arp-attributes">
|
||||||
<interleave>
|
<interleave>
|
||||||
<optional>
|
<optional>
|
||||||
@ -623,24 +800,15 @@
|
|||||||
|
|
||||||
<!-- ################ type library ################ -->
|
<!-- ################ type library ################ -->
|
||||||
|
|
||||||
<define name="UUID">
|
<define name="variable-name-type">
|
||||||
<choice>
|
<data type="string">
|
||||||
<data type="string">
|
<param name="pattern">$[a-zA-Z0-9_]+(\[[ ]*[@]?[0-9]+[ ]*\])?</param>
|
||||||
<param name="pattern">[a-fA-F0-9]{32}</param>
|
</data>
|
||||||
</data>
|
|
||||||
|
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">[a-fA-F0-9]{8}\-([a-fA-F0-9]{4}\-){3}[a-fA-F0-9]{12}</param>
|
|
||||||
</data>
|
|
||||||
</choice>
|
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
<define name="addrMAC">
|
<define name="addrMAC">
|
||||||
<choice>
|
<choice>
|
||||||
<!-- variable -->
|
<ref name="variable-name-type"/>
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
<data type="string">
|
<data type="string">
|
||||||
<param name="pattern">([a-fA-F0-9]{1,2}:){5}[a-fA-F0-9]{1,2}</param>
|
<param name="pattern">([a-fA-F0-9]{1,2}:){5}[a-fA-F0-9]{1,2}</param>
|
||||||
@ -650,10 +818,7 @@
|
|||||||
|
|
||||||
<define name="addrIP">
|
<define name="addrIP">
|
||||||
<choice>
|
<choice>
|
||||||
<!-- variable -->
|
<ref name="variable-name-type"/>
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
<data type="string">
|
<data type="string">
|
||||||
<param name="pattern">([0-2]?[0-9]?[0-9]\.){3}[0-2]?[0-9]?[0-9]</param>
|
<param name="pattern">([0-2]?[0-9]?[0-9]\.){3}[0-2]?[0-9]?[0-9]</param>
|
||||||
@ -663,10 +828,7 @@
|
|||||||
|
|
||||||
<define name="addrIPv6">
|
<define name="addrIPv6">
|
||||||
<choice>
|
<choice>
|
||||||
<!-- variable -->
|
<ref name="variable-name-type"/>
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
<data type="string">
|
<data type="string">
|
||||||
<param name="pattern">([a-fA-F0-9]{0,4}:){2,7}([a-fA-F0-9]*)(([0-2]?[0-9]?[0-9]\.){3}[0-2]?[0-9]?[0-9])?</param>
|
<param name="pattern">([a-fA-F0-9]{0,4}:){2,7}([a-fA-F0-9]*)(([0-2]?[0-9]?[0-9]\.){3}[0-2]?[0-9]?[0-9])?</param>
|
||||||
@ -676,10 +838,7 @@
|
|||||||
|
|
||||||
<define name="addrMask">
|
<define name="addrMask">
|
||||||
<choice>
|
<choice>
|
||||||
<!-- variable -->
|
<ref name="variable-name-type"/>
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
<data type="int">
|
<data type="int">
|
||||||
<param name="minInclusive">0</param>
|
<param name="minInclusive">0</param>
|
||||||
@ -694,10 +853,7 @@
|
|||||||
|
|
||||||
<define name="addrMaskv6">
|
<define name="addrMaskv6">
|
||||||
<choice>
|
<choice>
|
||||||
<!-- variable -->
|
<ref name="variable-name-type"/>
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
<data type="int">
|
<data type="int">
|
||||||
<param name="minInclusive">0</param>
|
<param name="minInclusive">0</param>
|
||||||
@ -716,10 +872,7 @@
|
|||||||
<param name="pattern">0x([0-3][0-9a-fA-F]|[0-9a-fA-F])</param>
|
<param name="pattern">0x([0-3][0-9a-fA-F]|[0-9a-fA-F])</param>
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<!-- variable -->
|
<ref name="variable-name-type"/>
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
<data type="int">
|
<data type="int">
|
||||||
<param name="minInclusive">0</param>
|
<param name="minInclusive">0</param>
|
||||||
@ -730,10 +883,7 @@
|
|||||||
|
|
||||||
<define name="mac-protocolid">
|
<define name="mac-protocolid">
|
||||||
<choice>
|
<choice>
|
||||||
<!-- variable -->
|
<ref name="variable-name-type"/>
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
<data type="string">
|
<data type="string">
|
||||||
<param name="pattern">0x([6-9a-fA-F][0-9a-fA-F]{2}|[0-9a-fA-F]{4})</param>
|
<param name="pattern">0x([6-9a-fA-F][0-9a-fA-F]{2}|[0-9a-fA-F]{4})</param>
|
||||||
@ -749,34 +899,29 @@
|
|||||||
<value>rarp</value>
|
<value>rarp</value>
|
||||||
<value>ipv4</value>
|
<value>ipv4</value>
|
||||||
<value>ipv6</value>
|
<value>ipv6</value>
|
||||||
|
<value>vlan</value>
|
||||||
</choice>
|
</choice>
|
||||||
</choice>
|
</choice>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
<define name="uint8range">
|
<define name="vlan-vlanid">
|
||||||
<choice>
|
<choice>
|
||||||
<!-- variable -->
|
<ref name="variable-name-type"/>
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
<data type="string">
|
<data type="string">
|
||||||
<param name="pattern">0x[0-9a-fA-F]{1,2}</param>
|
<param name="pattern">0x([0-9a-fA-F]{1,3})</param>
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<data type="int">
|
<data type="int">
|
||||||
<param name="minInclusive">0</param>
|
<param name="minInclusive">0</param>
|
||||||
<param name="maxInclusive">255</param>
|
<param name="maxInclusive">4095</param>
|
||||||
</data>
|
</data>
|
||||||
</choice>
|
</choice>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
<define name="uint16range">
|
<define name="uint16range">
|
||||||
<choice>
|
<choice>
|
||||||
<!-- variable -->
|
<ref name="variable-name-type"/>
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
<data type="string">
|
<data type="string">
|
||||||
<param name="pattern">0x[0-9a-fA-F]{1,4}</param>
|
<param name="pattern">0x[0-9a-fA-F]{1,4}</param>
|
||||||
@ -789,6 +934,21 @@
|
|||||||
</choice>
|
</choice>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
|
<define name="uint32range">
|
||||||
|
<choice>
|
||||||
|
<ref name="variable-name-type"/>
|
||||||
|
|
||||||
|
<data type="string">
|
||||||
|
<param name="pattern">0x[0-9a-fA-F]{1,8}</param>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<data type="int">
|
||||||
|
<param name="minInclusive">0</param>
|
||||||
|
<param name="maxInclusive">4294967295</param>
|
||||||
|
</data>
|
||||||
|
</choice>
|
||||||
|
</define>
|
||||||
|
|
||||||
<define name="boolean">
|
<define name="boolean">
|
||||||
<choice>
|
<choice>
|
||||||
<value>yes</value>
|
<value>yes</value>
|
||||||
@ -802,10 +962,7 @@
|
|||||||
|
|
||||||
<define name="arpOpcodeType">
|
<define name="arpOpcodeType">
|
||||||
<choice>
|
<choice>
|
||||||
<!-- variable -->
|
<ref name="variable-name-type"/>
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
<data type="int">
|
<data type="int">
|
||||||
<param name="minInclusive">0</param>
|
<param name="minInclusive">0</param>
|
||||||
@ -821,10 +978,7 @@
|
|||||||
|
|
||||||
<define name="ipProtocolType">
|
<define name="ipProtocolType">
|
||||||
<choice>
|
<choice>
|
||||||
<!-- variable -->
|
<ref name="variable-name-type"/>
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">$[a-zA-Z0-9_]+</param>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
<data type="string">
|
<data type="string">
|
||||||
<param name="pattern">0x[0-9a-fA-F]{1,2}</param>
|
<param name="pattern">0x[0-9a-fA-F]{1,2}</param>
|
||||||
@ -866,6 +1020,8 @@
|
|||||||
<value>drop</value>
|
<value>drop</value>
|
||||||
<value>accept</value>
|
<value>accept</value>
|
||||||
<value>reject</value>
|
<value>reject</value>
|
||||||
|
<value>continue</value>
|
||||||
|
<value>return</value>
|
||||||
</choice>
|
</choice>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
@ -879,7 +1035,7 @@
|
|||||||
|
|
||||||
<define name='priority-type'>
|
<define name='priority-type'>
|
||||||
<data type="int">
|
<data type="int">
|
||||||
<param name="minInclusive">0</param>
|
<param name="minInclusive">-1000</param>
|
||||||
<param name="maxInclusive">1000</param>
|
<param name="maxInclusive">1000</param>
|
||||||
</data>
|
</data>
|
||||||
</define>
|
</define>
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
<!-- A Relax NG schema for the libvirt secret properties XML format -->
|
<!-- A Relax NG schema for the libvirt secret properties XML format -->
|
||||||
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
|
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
|
||||||
<start>
|
<start>
|
||||||
<ref name='secret'/>
|
<ref name='secret'/>
|
||||||
</start>
|
</start>
|
||||||
|
|
||||||
|
<include href='basictypes.rng'/>
|
||||||
|
|
||||||
<define name='secret'>
|
<define name='secret'>
|
||||||
<element name='secret'>
|
<element name='secret'>
|
||||||
<optional>
|
<optional>
|
||||||
@ -37,6 +40,7 @@
|
|||||||
<element name='usage'>
|
<element name='usage'>
|
||||||
<choice>
|
<choice>
|
||||||
<ref name='usagevolume'/>
|
<ref name='usagevolume'/>
|
||||||
|
<ref name='usageceph'/>
|
||||||
<!-- More choices later -->
|
<!-- More choices later -->
|
||||||
</choice>
|
</choice>
|
||||||
</element>
|
</element>
|
||||||
@ -54,21 +58,13 @@
|
|||||||
</element>
|
</element>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
<define name="UUID">
|
<define name='usageceph'>
|
||||||
<choice>
|
<attribute name='type'>
|
||||||
<data type="string">
|
<value>ceph</value>
|
||||||
<param name="pattern">[a-fA-F0-9]{32}</param>
|
</attribute>
|
||||||
</data>
|
<element name='name'>
|
||||||
<data type="string">
|
<ref name='genericName'/>
|
||||||
<param name="pattern">[a-fA-F0-9]{8}\-([a-fA-F0-9]{4}\-){3}[a-fA-F0-9]{12}</param>
|
</element>
|
||||||
</data>
|
|
||||||
</choice>
|
|
||||||
</define>
|
|
||||||
|
|
||||||
<define name="absFilePath">
|
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">/[a-zA-Z0-9_\.\+\-&/%]+</param>
|
|
||||||
</data>
|
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
</grammar>
|
</grammar>
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
<!-- A Relax NG schema for the libvirt storage pool XML format -->
|
<!-- A Relax NG schema for the libvirt storage pool XML format -->
|
||||||
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
|
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
|
||||||
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
||||||
|
<include href='basictypes.rng'/>
|
||||||
<start>
|
<start>
|
||||||
<ref name='pool'/>
|
<ref name='pool'/>
|
||||||
</start>
|
</start>
|
||||||
@ -127,7 +128,7 @@
|
|||||||
</element>
|
</element>
|
||||||
<optional>
|
<optional>
|
||||||
<element name='uuid'>
|
<element name='uuid'>
|
||||||
<ref name='uuid'/>
|
<ref name='UUID'/>
|
||||||
</element>
|
</element>
|
||||||
</optional>
|
</optional>
|
||||||
</define>
|
</define>
|
||||||
@ -135,17 +136,17 @@
|
|||||||
<define name='sizing'>
|
<define name='sizing'>
|
||||||
<optional>
|
<optional>
|
||||||
<element name='capacity'>
|
<element name='capacity'>
|
||||||
<ref name='uint'/>
|
<ref name='scaledInteger'/>
|
||||||
</element>
|
</element>
|
||||||
</optional>
|
</optional>
|
||||||
<optional>
|
<optional>
|
||||||
<element name='allocation'>
|
<element name='allocation'>
|
||||||
<ref name='uint'/>
|
<ref name='scaledInteger'/>
|
||||||
</element>
|
</element>
|
||||||
</optional>
|
</optional>
|
||||||
<optional>
|
<optional>
|
||||||
<element name='available'>
|
<element name='available'>
|
||||||
<ref name='uint'/>
|
<ref name='scaledInteger'/>
|
||||||
</element>
|
</element>
|
||||||
</optional>
|
</optional>
|
||||||
</define>
|
</define>
|
||||||
@ -154,13 +155,13 @@
|
|||||||
<optional>
|
<optional>
|
||||||
<element name='permissions'>
|
<element name='permissions'>
|
||||||
<element name='mode'>
|
<element name='mode'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedInt'/>
|
||||||
</element>
|
</element>
|
||||||
<element name='owner'>
|
<element name='owner'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedInt'/>
|
||||||
</element>
|
</element>
|
||||||
<element name='group'>
|
<element name='group'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedInt'/>
|
||||||
</element>
|
</element>
|
||||||
<optional>
|
<optional>
|
||||||
<element name='label'>
|
<element name='label'>
|
||||||
@ -175,7 +176,7 @@
|
|||||||
<element name='target'>
|
<element name='target'>
|
||||||
<optional>
|
<optional>
|
||||||
<element name='path'>
|
<element name='path'>
|
||||||
<ref name='path'/>
|
<ref name='absFilePath'/>
|
||||||
</element>
|
</element>
|
||||||
</optional>
|
</optional>
|
||||||
<ref name='permissions'/>
|
<ref name='permissions'/>
|
||||||
@ -200,7 +201,7 @@
|
|||||||
<element name='device'>
|
<element name='device'>
|
||||||
<attribute name='path'>
|
<attribute name='path'>
|
||||||
<choice>
|
<choice>
|
||||||
<ref name='path'/>
|
<ref name='absFilePath'/>
|
||||||
<ref name='name'/>
|
<ref name='name'/>
|
||||||
</choice>
|
</choice>
|
||||||
</attribute>
|
</attribute>
|
||||||
@ -226,10 +227,10 @@
|
|||||||
<oneOrMore>
|
<oneOrMore>
|
||||||
<element name='freeExtent'>
|
<element name='freeExtent'>
|
||||||
<attribute name='start'>
|
<attribute name='start'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</attribute>
|
</attribute>
|
||||||
<attribute name='end'>
|
<attribute name='end'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</attribute>
|
</attribute>
|
||||||
</element>
|
</element>
|
||||||
</oneOrMore>
|
</oneOrMore>
|
||||||
@ -238,7 +239,7 @@
|
|||||||
<define name='sourceinfodir'>
|
<define name='sourceinfodir'>
|
||||||
<element name='dir'>
|
<element name='dir'>
|
||||||
<attribute name='path'>
|
<attribute name='path'>
|
||||||
<ref name='path'/>
|
<ref name='absFilePath'/>
|
||||||
</attribute>
|
</attribute>
|
||||||
<empty/>
|
<empty/>
|
||||||
</element>
|
</element>
|
||||||
@ -454,28 +455,6 @@
|
|||||||
<param name="pattern">[a-zA-Z0-9_\+\-]+</param>
|
<param name="pattern">[a-zA-Z0-9_\+\-]+</param>
|
||||||
</data>
|
</data>
|
||||||
</define>
|
</define>
|
||||||
<define name='uuid'>
|
|
||||||
<choice>
|
|
||||||
<data type='string'>
|
|
||||||
<param name="pattern">[a-fA-F0-9]{32}</param>
|
|
||||||
</data>
|
|
||||||
<data type='string'>
|
|
||||||
<param name="pattern">[a-fA-F0-9]{8}\-([a-fA-F0-9]{4}\-){3}[a-fA-F0-9]{12}</param>
|
|
||||||
</data>
|
|
||||||
</choice>
|
|
||||||
</define>
|
|
||||||
|
|
||||||
<define name='uint'>
|
|
||||||
<data type='string'>
|
|
||||||
<param name="pattern">[0-9]+</param>
|
|
||||||
</data>
|
|
||||||
</define>
|
|
||||||
|
|
||||||
<define name='path'>
|
|
||||||
<data type='string'>
|
|
||||||
<param name="pattern">/[a-zA-Z0-9_\+\-/%]+</param>
|
|
||||||
</data>
|
|
||||||
</define>
|
|
||||||
|
|
||||||
<define name="PortNumber">
|
<define name="PortNumber">
|
||||||
<data type="short">
|
<data type="short">
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
<!-- A Relax NG schema for the libvirt storage volume XML format -->
|
<!-- A Relax NG schema for the libvirt storage volume XML format -->
|
||||||
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
|
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
|
||||||
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
||||||
|
<include href='basictypes.rng'/>
|
||||||
<start>
|
<start>
|
||||||
<ref name='vol'/>
|
<ref name='vol'/>
|
||||||
</start>
|
</start>
|
||||||
@ -30,17 +32,12 @@
|
|||||||
<define name='sizing'>
|
<define name='sizing'>
|
||||||
<optional>
|
<optional>
|
||||||
<element name='capacity'>
|
<element name='capacity'>
|
||||||
<optional>
|
<ref name='scaledInteger'/>
|
||||||
<attribute name='unit'>
|
|
||||||
<ref name='unit'/>
|
|
||||||
</attribute>
|
|
||||||
</optional>
|
|
||||||
<ref name='uint'/>
|
|
||||||
</element>
|
</element>
|
||||||
</optional>
|
</optional>
|
||||||
<optional>
|
<optional>
|
||||||
<element name='allocation'>
|
<element name='allocation'>
|
||||||
<ref name='uint'/>
|
<ref name='scaledInteger'/>
|
||||||
</element>
|
</element>
|
||||||
</optional>
|
</optional>
|
||||||
</define>
|
</define>
|
||||||
@ -49,13 +46,13 @@
|
|||||||
<optional>
|
<optional>
|
||||||
<element name='permissions'>
|
<element name='permissions'>
|
||||||
<element name='mode'>
|
<element name='mode'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedInt'/>
|
||||||
</element>
|
</element>
|
||||||
<element name='owner'>
|
<element name='owner'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedInt'/>
|
||||||
</element>
|
</element>
|
||||||
<element name='group'>
|
<element name='group'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedInt'/>
|
||||||
</element>
|
</element>
|
||||||
<optional>
|
<optional>
|
||||||
<element name='label'>
|
<element name='label'>
|
||||||
@ -70,7 +67,7 @@
|
|||||||
<element name='target'>
|
<element name='target'>
|
||||||
<optional>
|
<optional>
|
||||||
<element name='path'>
|
<element name='path'>
|
||||||
<ref name='path'/>
|
<ref name='absFilePath'/>
|
||||||
</element>
|
</element>
|
||||||
</optional>
|
</optional>
|
||||||
<ref name='format'/>
|
<ref name='format'/>
|
||||||
@ -84,7 +81,7 @@
|
|||||||
<define name='backingStore'>
|
<define name='backingStore'>
|
||||||
<element name='backingStore'>
|
<element name='backingStore'>
|
||||||
<element name='path'>
|
<element name='path'>
|
||||||
<ref name='path'/>
|
<ref name='absFilePath'/>
|
||||||
</element>
|
</element>
|
||||||
<ref name='format'/>
|
<ref name='format'/>
|
||||||
<ref name='permissions'/>
|
<ref name='permissions'/>
|
||||||
@ -103,7 +100,7 @@
|
|||||||
<define name='sourcedev'>
|
<define name='sourcedev'>
|
||||||
<element name='device'>
|
<element name='device'>
|
||||||
<attribute name='path'>
|
<attribute name='path'>
|
||||||
<ref name='path'/>
|
<ref name='absFilePath'/>
|
||||||
</attribute>
|
</attribute>
|
||||||
<choice>
|
<choice>
|
||||||
<empty/>
|
<empty/>
|
||||||
@ -116,10 +113,10 @@
|
|||||||
<oneOrMore>
|
<oneOrMore>
|
||||||
<element name='extent'>
|
<element name='extent'>
|
||||||
<attribute name='start'>
|
<attribute name='start'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</attribute>
|
</attribute>
|
||||||
<attribute name='end'>
|
<attribute name='end'>
|
||||||
<ref name='uint'/>
|
<ref name='unsignedLong'/>
|
||||||
</attribute>
|
</attribute>
|
||||||
</element>
|
</element>
|
||||||
</oneOrMore>
|
</oneOrMore>
|
||||||
@ -180,33 +177,4 @@
|
|||||||
</data>
|
</data>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
<define name='uint'>
|
|
||||||
<data type='string'>
|
|
||||||
<param name="pattern">[0-9]+</param>
|
|
||||||
</data>
|
|
||||||
</define>
|
|
||||||
|
|
||||||
<define name='path'>
|
|
||||||
<data type='string'>
|
|
||||||
<param name="pattern">/[a-zA-Z0-9_\+\-\./%]+</param>
|
|
||||||
</data>
|
|
||||||
</define>
|
|
||||||
|
|
||||||
<define name='unit'>
|
|
||||||
<data type='string'>
|
|
||||||
<param name="pattern">[kKmMgGtTpPyYzZ]</param>
|
|
||||||
</data>
|
|
||||||
</define>
|
|
||||||
|
|
||||||
<define name="UUID">
|
|
||||||
<choice>
|
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">[a-fA-F0-9]{32}</param>
|
|
||||||
</data>
|
|
||||||
<data type="string">
|
|
||||||
<param name="pattern">[a-fA-F0-9]{8}\-([a-fA-F0-9]{4}\-){3}[a-fA-F0-9]{12}</param>
|
|
||||||
</data>
|
|
||||||
</choice>
|
|
||||||
</define>
|
|
||||||
|
|
||||||
</grammar>
|
</grammar>
|
||||||
|
@ -60,6 +60,10 @@
|
|||||||
<a href="auth.html">Authentication</a>
|
<a href="auth.html">Authentication</a>
|
||||||
<span>Configure authentication for the libvirt daemon</span>
|
<span>Configure authentication for the libvirt daemon</span>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="migration.html">Migration</a>
|
||||||
|
<span>Migrating guests between machines</span>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="windows.html">Windows port</a>
|
<a href="windows.html">Windows port</a>
|
||||||
<span>Access the libvirt daemon from a native Windows client</span>
|
<span>Access the libvirt daemon from a native Windows client</span>
|
||||||
|
@ -3,9 +3,85 @@
|
|||||||
<body>
|
<body>
|
||||||
<h1 >Storage Management</h1>
|
<h1 >Storage Management</h1>
|
||||||
<p>
|
<p>
|
||||||
This page describes the backends for the storage management capabilities in
|
Libvirt provides storage management on the physical host through
|
||||||
libvirt.
|
storage pools and volumes.
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
A storage pool is a quantity of storage set aside by an
|
||||||
|
administrator, often a dedicated storage administrator, for use
|
||||||
|
by virtual machines. Storage pools are divided into storage
|
||||||
|
volumes either by the storage administrator or the system
|
||||||
|
administrator, and the volumes are assigned to VMs as block
|
||||||
|
devices.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
For example, the storage administrator responsible for an NFS
|
||||||
|
server creates a share to store virtual machines' data. The
|
||||||
|
system administrator defines a pool on the virtualization host
|
||||||
|
with the details of the share
|
||||||
|
(e.g. nfs.example.com:/path/to/share should be mounted on
|
||||||
|
/vm_data). When the pool is started, libvirt mounts the share
|
||||||
|
on the specified directory, just as if the system administrator
|
||||||
|
logged in and executed 'mount nfs.example.com:/path/to/share
|
||||||
|
/vmdata'. If the pool is configured to autostart, libvirt
|
||||||
|
ensures that the NFS share is mounted on the directory specified
|
||||||
|
when libvirt is started.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Once the pool is started, the files in the NFS share are
|
||||||
|
reported as volumes, and the storage volumes' paths may be
|
||||||
|
queried using the libvirt APIs. The volumes' paths can then be
|
||||||
|
copied into the section of a VM's XML definition describing the
|
||||||
|
source storage for the VM's block devices. In the case of NFS,
|
||||||
|
an application using the libvirt APIs can create and delete
|
||||||
|
volumes in the pool (files in the NFS share) up to the limit of
|
||||||
|
the size of the pool (the storage capacity of the share). Not
|
||||||
|
all pool types support creating and deleting volumes. Stopping
|
||||||
|
the pool (somewhat unfortunately referred to by virsh and the
|
||||||
|
API as "pool-destroy") undoes the start operation, in this case,
|
||||||
|
unmounting the NFS share. The data on the share is not modified
|
||||||
|
by the destroy operation, despite the name. See man virsh for
|
||||||
|
more details.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
A second example is an iSCSI pool. A storage administrator
|
||||||
|
provisions an iSCSI target to present a set of LUNs to the host
|
||||||
|
running the VMs. When libvirt is configured to manage that
|
||||||
|
iSCSI target as a pool, libvirt will ensure that the host logs
|
||||||
|
into the iSCSI target and libvirt can then report the available
|
||||||
|
LUNs as storage volumes. The volumes' paths can be queried and
|
||||||
|
used in VM's XML definitions as in the NFS example. In this
|
||||||
|
case, the LUNs are defined on the iSCSI server, and libvirt
|
||||||
|
cannot create and delete volumes.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Storage pools and volumes are not required for the proper
|
||||||
|
operation of VMs. Pools and volumes provide a way for libvirt
|
||||||
|
to ensure that a particular piece of storage will be available
|
||||||
|
for a VM, but some administrators will prefer to manage their
|
||||||
|
own storage and VMs will operate properly without any pools or
|
||||||
|
volumes defined. On systems that do not use pools, system
|
||||||
|
administrators must ensure the availability of the VMs' storage
|
||||||
|
using whatever tools they prefer, for example, adding the NFS
|
||||||
|
share to the host's fstab so that the share is mounted at boot
|
||||||
|
time.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
If at this point the value of pools and volumes over traditional
|
||||||
|
system administration tools is unclear, note that one of the
|
||||||
|
features of libvirt is its remote protocol, so it's possible to
|
||||||
|
manage all aspects of a virtual machine's lifecycle as well as
|
||||||
|
the configuration of the resources required by the VM. These
|
||||||
|
operations can be performed on a remote host entirely within the
|
||||||
|
libvirt API. In other words, a management application using
|
||||||
|
libvirt can enable a user to perform all the required tasks for
|
||||||
|
configuring the host for a VM: allocating resources, running the
|
||||||
|
VM, shutting it down and deallocating the resources, without
|
||||||
|
requiring shell access or any other control channel.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Libvirt supports the following storage pool types:
|
||||||
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<a href="#StorageBackendDir">Directory backend</a>
|
<a href="#StorageBackendDir">Directory backend</a>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Landscape
|
Landscape
|
||||||
Center
|
Center
|
||||||
Inches
|
Inches
|
||||||
Letter
|
Letter
|
||||||
100.00
|
100.00
|
||||||
Single
|
Single
|
||||||
-2
|
-2
|
||||||
|
119
docs/uri.html.in
119
docs/uri.html.in
@ -2,6 +2,8 @@
|
|||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
<h1 >Connection URIs</h1>
|
<h1 >Connection URIs</h1>
|
||||||
|
|
||||||
|
<ul id="toc"></ul>
|
||||||
<p>
|
<p>
|
||||||
Since libvirt supports many different kinds of virtualization
|
Since libvirt supports many different kinds of virtualization
|
||||||
(often referred to as "drivers" or "hypervisors"), we need a
|
(often referred to as "drivers" or "hypervisors"), we need a
|
||||||
@ -13,41 +15,59 @@ machine over the network.
|
|||||||
To this end, libvirt uses URIs as used on the Web and as defined in <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>. This page
|
To this end, libvirt uses URIs as used on the Web and as defined in <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>. This page
|
||||||
documents libvirt URIs.
|
documents libvirt URIs.
|
||||||
</p>
|
</p>
|
||||||
<ul>
|
<h2><a name="URI_libvirt">Specifying URIs to libvirt</a></h2>
|
||||||
<li>
|
|
||||||
<a href="#URI_libvirt">Specifying URIs to libvirt</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="#URI_virsh">Specifying URIs to virsh, virt-manager and virt-install</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="#URI_xen">xen:/// URI</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="#URI_qemu">qemu:///... QEMU and KVM URIs</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="#URI_remote">Remote URIs</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="#URI_test">test:///... Test URIs</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="#URI_legacy">Other & legacy URI formats</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<h3>
|
|
||||||
<a name="URI_libvirt">Specifying URIs to libvirt</a>
|
|
||||||
</h3>
|
|
||||||
<p>
|
<p>
|
||||||
The URI is passed as the <code>name</code> parameter to <a href="html/libvirt-libvirt.html#virConnectOpen"><code>virConnectOpen</code></a> or <a href="html/libvirt-libvirt.html#virConnectOpenReadOnly"><code>virConnectOpenReadOnly</code></a>. For example:
|
The URI is passed as the <code>name</code> parameter to <a href="html/libvirt-libvirt.html#virConnectOpen"><code>virConnectOpen</code></a> or <a href="html/libvirt-libvirt.html#virConnectOpenReadOnly"><code>virConnectOpenReadOnly</code></a>. For example:
|
||||||
</p>
|
</p>
|
||||||
<pre>
|
<pre>
|
||||||
virConnectPtr conn = virConnectOpenReadOnly (<b>"test:///default"</b>);
|
virConnectPtr conn = virConnectOpenReadOnly (<b>"test:///default"</b>);
|
||||||
</pre>
|
</pre>
|
||||||
<h3>
|
<h2>
|
||||||
|
<a name="URI_config">Configuring URI aliases</a>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
To simplify life for administrators, it is possible to setup URI aliases in a
|
||||||
|
libvirt client configuration file. The configuration file is <code>/etc/libvirt/libvirt.conf</code>
|
||||||
|
for the root user, or <code>$HOME/.libvirt/libvirt.conf</code> for any unprivileged user.
|
||||||
|
In this file, the following syntax can be used to setup aliases
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
uri_aliases = [
|
||||||
|
"hail=qemu+ssh://root@hail.cloud.example.com/system",
|
||||||
|
"sleet=qemu+ssh://root@sleet.cloud.example.com/system",
|
||||||
|
]
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
A URI alias should be a string made up from the characters
|
||||||
|
<code>a-Z, 0-9, _, -</code>. Following the <code>=</code>
|
||||||
|
can be any libvirt URI string, including arbitrary URI parameters.
|
||||||
|
URI aliases will apply to any application opening a libvirt
|
||||||
|
connection, unless it has explicitly passed the <code>VIR_CONNECT_NO_ALIASES</code>
|
||||||
|
parameter to <code>virConnectOpenAuth</code>. If the passed in
|
||||||
|
URI contains characters outside the allowed alias character
|
||||||
|
set, no alias lookup will be attempted.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2><a name="URI_default">Default URI choice</a></h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
If the URI passed to <code>virConnectOpen*</code> is NULL, then libvirt will use the following
|
||||||
|
logic to determine what URI to use.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li>The environment variable <code>LIBVIRT_DEFAULT_URI</code></li>
|
||||||
|
<li>The client configuration file <code>uri_default</code> parameter</li>
|
||||||
|
<li>Probe each hypervisor in turn until one that works is found</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<h2>
|
||||||
<a name="URI_virsh">Specifying URIs to virsh, virt-manager and virt-install</a>
|
<a name="URI_virsh">Specifying URIs to virsh, virt-manager and virt-install</a>
|
||||||
</h3>
|
</h2>
|
||||||
<p>
|
<p>
|
||||||
In virsh use the <code>-c</code> or <code>--connect</code> option:
|
In virsh use the <code>-c</code> or <code>--connect</code> option:
|
||||||
</p>
|
</p>
|
||||||
@ -57,7 +77,8 @@ virsh <b>-c test:///default</b> list
|
|||||||
<p>
|
<p>
|
||||||
If virsh finds the environment variable
|
If virsh finds the environment variable
|
||||||
<code>VIRSH_DEFAULT_CONNECT_URI</code> set, it will try this URI by
|
<code>VIRSH_DEFAULT_CONNECT_URI</code> set, it will try this URI by
|
||||||
default.
|
default. Use of this environment variable is, however, deprecated
|
||||||
|
now that libvirt supports <code>LIBVIRT_DEFAULT_URI</code> itself.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
When using the interactive virsh shell, you can also use the
|
When using the interactive virsh shell, you can also use the
|
||||||
@ -76,9 +97,9 @@ In virt-install use the <code>--connect=</code><i>URI</i> option:
|
|||||||
<pre>
|
<pre>
|
||||||
virt-install <b>--connect=test:///default</b> <i>[other options]</i>
|
virt-install <b>--connect=test:///default</b> <i>[other options]</i>
|
||||||
</pre>
|
</pre>
|
||||||
<h3>
|
<h2>
|
||||||
<a name="URI_xen">xen:/// URI</a>
|
<a name="URI_xen">xen:/// URI</a>
|
||||||
</h3>
|
</h2>
|
||||||
<p>
|
<p>
|
||||||
<i>This section describes a feature which is new in libvirt >
|
<i>This section describes a feature which is new in libvirt >
|
||||||
0.2.3. For libvirt ≤ 0.2.3 use <a href="#URI_legacy_xen"><code>"xen"</code></a>.</i>
|
0.2.3. For libvirt ≤ 0.2.3 use <a href="#URI_legacy_xen"><code>"xen"</code></a>.</i>
|
||||||
@ -87,9 +108,9 @@ virt-install <b>--connect=test:///default</b> <i>[other options]</i>
|
|||||||
To access a Xen hypervisor running on the local machine
|
To access a Xen hypervisor running on the local machine
|
||||||
use the URI <code>xen:///</code>.
|
use the URI <code>xen:///</code>.
|
||||||
</p>
|
</p>
|
||||||
<h3>
|
<h2>
|
||||||
<a name="URI_qemu">qemu:///... QEMU and KVM URIs</a>
|
<a name="URI_qemu">qemu:///... QEMU and KVM URIs</a>
|
||||||
</h3>
|
</h2>
|
||||||
<p>
|
<p>
|
||||||
To use QEMU support in libvirt you must be running the
|
To use QEMU support in libvirt you must be running the
|
||||||
<code>libvirtd</code> daemon (named <code>libvirt_qemud</code>
|
<code>libvirtd</code> daemon (named <code>libvirt_qemud</code>
|
||||||
@ -119,9 +140,9 @@ KVM URIs are identical. You select between qemu, qemu accelerated and
|
|||||||
KVM guests in the <a href="format.html#KVM1">guest XML as described
|
KVM guests in the <a href="format.html#KVM1">guest XML as described
|
||||||
here</a>.
|
here</a>.
|
||||||
</p>
|
</p>
|
||||||
<h3>
|
<h2>
|
||||||
<a name="URI_remote">Remote URIs</a>
|
<a name="URI_remote">Remote URIs</a>
|
||||||
</h3>
|
</h2>
|
||||||
<p>
|
<p>
|
||||||
Remote URIs are formed by taking ordinary local URIs and adding a
|
Remote URIs are formed by taking ordinary local URIs and adding a
|
||||||
hostname and/or transport name. As a special case, using a URI
|
hostname and/or transport name. As a special case, using a URI
|
||||||
@ -182,9 +203,9 @@ We refer you to <a href="remote.html#Remote_URI_reference">the libvirt
|
|||||||
remote URI reference</a> and <a href="remote.html">full documentation
|
remote URI reference</a> and <a href="remote.html">full documentation
|
||||||
for libvirt remote support</a>.
|
for libvirt remote support</a>.
|
||||||
</p>
|
</p>
|
||||||
<h3>
|
<h2>
|
||||||
<a name="URI_test">test:///... Test URIs</a>
|
<a name="URI_test">test:///... Test URIs</a>
|
||||||
</h3>
|
</h2>
|
||||||
<p>
|
<p>
|
||||||
The test driver is a dummy hypervisor for test purposes.
|
The test driver is a dummy hypervisor for test purposes.
|
||||||
The URIs supported are:
|
The URIs supported are:
|
||||||
@ -196,12 +217,12 @@ host definitions built into the driver. </li>
|
|||||||
a set of host definitions held in the named file.
|
a set of host definitions held in the named file.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h3>
|
<h2>
|
||||||
<a name="URI_legacy">Other & legacy URI formats</a>
|
<a name="URI_legacy">Other & legacy URI formats</a>
|
||||||
</h3>
|
</h2>
|
||||||
<h4>
|
<h3>
|
||||||
<a name="URI_NULL">NULL and empty string URIs</a>
|
<a name="URI_NULL">NULL and empty string URIs</a>
|
||||||
</h4>
|
</h3>
|
||||||
<p>
|
<p>
|
||||||
Libvirt allows you to pass a <code>NULL</code> pointer to
|
Libvirt allows you to pass a <code>NULL</code> pointer to
|
||||||
<code>virConnectOpen*</code>. Empty string (<code>""</code>) acts in
|
<code>virConnectOpen*</code>. Empty string (<code>""</code>) acts in
|
||||||
@ -223,9 +244,9 @@ the user to type a URI in directly (if that is appropriate). If your
|
|||||||
application wishes to connect specifically to a Xen hypervisor, then
|
application wishes to connect specifically to a Xen hypervisor, then
|
||||||
for future proofing it should choose a full <a href="#URI_xen"><code>xen:///</code> URI</a>.
|
for future proofing it should choose a full <a href="#URI_xen"><code>xen:///</code> URI</a>.
|
||||||
</p>
|
</p>
|
||||||
<h4>
|
<h3>
|
||||||
<a name="URI_file">File paths (xend-unix-server)</a>
|
<a name="URI_file">File paths (xend-unix-server)</a>
|
||||||
</h4>
|
</h3>
|
||||||
<p>
|
<p>
|
||||||
If XenD is running and configured in <code>/etc/xen/xend-config.sxp</code>:
|
If XenD is running and configured in <code>/etc/xen/xend-config.sxp</code>:
|
||||||
</p>
|
</p>
|
||||||
@ -240,9 +261,9 @@ using a file URI such as:
|
|||||||
<pre>
|
<pre>
|
||||||
virsh -c ///var/run/xend/xend-socket
|
virsh -c ///var/run/xend/xend-socket
|
||||||
</pre>
|
</pre>
|
||||||
<h4>
|
<h3>
|
||||||
<a name="URI_http">Legacy: <code>http://...</code> (xend-http-server)</a>
|
<a name="URI_http">Legacy: <code>http://...</code> (xend-http-server)</a>
|
||||||
</h4>
|
</h3>
|
||||||
<p>
|
<p>
|
||||||
If XenD is running and configured in <code>/etc/xen/xend-config.sxp</code>:
|
If XenD is running and configured in <code>/etc/xen/xend-config.sxp</code>:
|
||||||
|
|
||||||
@ -276,17 +297,17 @@ Notes:
|
|||||||
libvirt, only the old-style sexpr interface known in the Xen
|
libvirt, only the old-style sexpr interface known in the Xen
|
||||||
documentation as "unix server" or "http server".</li>
|
documentation as "unix server" or "http server".</li>
|
||||||
</ol>
|
</ol>
|
||||||
<h4>
|
<h3>
|
||||||
<a name="URI_legacy_xen">Legacy: <code>"xen"</code></a>
|
<a name="URI_legacy_xen">Legacy: <code>"xen"</code></a>
|
||||||
</h4>
|
</h3>
|
||||||
<p>
|
<p>
|
||||||
Another legacy URI is to specify name as the string
|
Another legacy URI is to specify name as the string
|
||||||
<code>"xen"</code>. This will continue to refer to the Xen
|
<code>"xen"</code>. This will continue to refer to the Xen
|
||||||
hypervisor. However you should prefer a full <a href="#URI_xen"><code>xen:///</code> URI</a> in all future code.
|
hypervisor. However you should prefer a full <a href="#URI_xen"><code>xen:///</code> URI</a> in all future code.
|
||||||
</p>
|
</p>
|
||||||
<h4>
|
<h3>
|
||||||
<a name="URI_legacy_proxy">Legacy: Xen proxy</a>
|
<a name="URI_legacy_proxy">Legacy: Xen proxy</a>
|
||||||
</h4>
|
</h3>
|
||||||
<p>
|
<p>
|
||||||
Libvirt continues to support connections to a separately running Xen
|
Libvirt continues to support connections to a separately running Xen
|
||||||
proxy daemon. This provides a way to allow non-root users to make a
|
proxy daemon. This provides a way to allow non-root users to make a
|
||||||
|
6
examples/domain-events/events-c/.gitignore
vendored
6
examples/domain-events/events-c/.gitignore
vendored
@ -1,6 +0,0 @@
|
|||||||
Makefile
|
|
||||||
Makefile.in
|
|
||||||
*.exe
|
|
||||||
.deps
|
|
||||||
.libs
|
|
||||||
event-test
|
|
@ -40,7 +40,7 @@ void usage(const char *pname);
|
|||||||
|
|
||||||
const char *eventToString(int event) {
|
const char *eventToString(int event) {
|
||||||
const char *ret = "";
|
const char *ret = "";
|
||||||
switch(event) {
|
switch ((virDomainEventType) event) {
|
||||||
case VIR_DOMAIN_EVENT_DEFINED:
|
case VIR_DOMAIN_EVENT_DEFINED:
|
||||||
ret ="Defined";
|
ret ="Defined";
|
||||||
break;
|
break;
|
||||||
@ -59,13 +59,16 @@ const char *eventToString(int event) {
|
|||||||
case VIR_DOMAIN_EVENT_STOPPED:
|
case VIR_DOMAIN_EVENT_STOPPED:
|
||||||
ret ="Stopped";
|
ret ="Stopped";
|
||||||
break;
|
break;
|
||||||
|
case VIR_DOMAIN_EVENT_SHUTDOWN:
|
||||||
|
ret = "Shutdown";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *eventDetailToString(int event, int detail) {
|
static const char *eventDetailToString(int event, int detail) {
|
||||||
const char *ret = "";
|
const char *ret = "";
|
||||||
switch(event) {
|
switch ((virDomainEventType) event) {
|
||||||
case VIR_DOMAIN_EVENT_DEFINED:
|
case VIR_DOMAIN_EVENT_DEFINED:
|
||||||
if (detail == VIR_DOMAIN_EVENT_DEFINED_ADDED)
|
if (detail == VIR_DOMAIN_EVENT_DEFINED_ADDED)
|
||||||
ret = "Added";
|
ret = "Added";
|
||||||
@ -77,7 +80,7 @@ static const char *eventDetailToString(int event, int detail) {
|
|||||||
ret = "Removed";
|
ret = "Removed";
|
||||||
break;
|
break;
|
||||||
case VIR_DOMAIN_EVENT_STARTED:
|
case VIR_DOMAIN_EVENT_STARTED:
|
||||||
switch (detail) {
|
switch ((virDomainEventStartedDetailType) detail) {
|
||||||
case VIR_DOMAIN_EVENT_STARTED_BOOTED:
|
case VIR_DOMAIN_EVENT_STARTED_BOOTED:
|
||||||
ret = "Booted";
|
ret = "Booted";
|
||||||
break;
|
break;
|
||||||
@ -90,10 +93,13 @@ static const char *eventDetailToString(int event, int detail) {
|
|||||||
case VIR_DOMAIN_EVENT_STARTED_FROM_SNAPSHOT:
|
case VIR_DOMAIN_EVENT_STARTED_FROM_SNAPSHOT:
|
||||||
ret = "Snapshot";
|
ret = "Snapshot";
|
||||||
break;
|
break;
|
||||||
|
case VIR_DOMAIN_EVENT_STARTED_WAKEUP:
|
||||||
|
ret = "Event wakeup";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case VIR_DOMAIN_EVENT_SUSPENDED:
|
case VIR_DOMAIN_EVENT_SUSPENDED:
|
||||||
switch (detail) {
|
switch ((virDomainEventSuspendedDetailType) detail) {
|
||||||
case VIR_DOMAIN_EVENT_SUSPENDED_PAUSED:
|
case VIR_DOMAIN_EVENT_SUSPENDED_PAUSED:
|
||||||
ret = "Paused";
|
ret = "Paused";
|
||||||
break;
|
break;
|
||||||
@ -115,7 +121,7 @@ static const char *eventDetailToString(int event, int detail) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case VIR_DOMAIN_EVENT_RESUMED:
|
case VIR_DOMAIN_EVENT_RESUMED:
|
||||||
switch (detail) {
|
switch ((virDomainEventResumedDetailType) detail) {
|
||||||
case VIR_DOMAIN_EVENT_RESUMED_UNPAUSED:
|
case VIR_DOMAIN_EVENT_RESUMED_UNPAUSED:
|
||||||
ret = "Unpaused";
|
ret = "Unpaused";
|
||||||
break;
|
break;
|
||||||
@ -128,7 +134,7 @@ static const char *eventDetailToString(int event, int detail) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case VIR_DOMAIN_EVENT_STOPPED:
|
case VIR_DOMAIN_EVENT_STOPPED:
|
||||||
switch (detail) {
|
switch ((virDomainEventStoppedDetailType) detail) {
|
||||||
case VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN:
|
case VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN:
|
||||||
ret = "Shutdown";
|
ret = "Shutdown";
|
||||||
break;
|
break;
|
||||||
@ -152,6 +158,13 @@ static const char *eventDetailToString(int event, int detail) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case VIR_DOMAIN_EVENT_SHUTDOWN:
|
||||||
|
switch ((virDomainEventShutdownDetailType) detail) {
|
||||||
|
case VIR_DOMAIN_EVENT_SHUTDOWN_FINISHED:
|
||||||
|
ret = "Finished";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -285,6 +298,61 @@ static int myDomainEventControlErrorCallback(virConnectPtr conn ATTRIBUTE_UNUSED
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char *diskChangeReasonStrings[] = {
|
||||||
|
"startupPolicy", /* 0 */
|
||||||
|
/* add new reason here */
|
||||||
|
};
|
||||||
|
static int myDomainEventDiskChangeCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||||
|
virDomainPtr dom,
|
||||||
|
const char *oldSrcPath,
|
||||||
|
const char *newSrcPath,
|
||||||
|
const char *devAlias,
|
||||||
|
int reason,
|
||||||
|
void *opaque ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
printf("%s EVENT: Domain %s(%d) disk change oldSrcPath: %s newSrcPath: %s devAlias: %s reason: %s\n",
|
||||||
|
__func__, virDomainGetName(dom), virDomainGetID(dom),
|
||||||
|
oldSrcPath, newSrcPath, devAlias, diskChangeReasonStrings[reason]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *trayChangeReasonStrings[] = {
|
||||||
|
"open",
|
||||||
|
"close",
|
||||||
|
};
|
||||||
|
|
||||||
|
static int myDomainEventTrayChangeCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||||
|
virDomainPtr dom,
|
||||||
|
const char *devAlias,
|
||||||
|
int reason,
|
||||||
|
void *opaque ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
printf("%s EVENT: Domain %s(%d) removable disk's tray change devAlias: %s reason: %s\n",
|
||||||
|
__func__, virDomainGetName(dom), virDomainGetID(dom),
|
||||||
|
devAlias, trayChangeReasonStrings[reason]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int myDomainEventPMWakeupCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||||
|
virDomainPtr dom,
|
||||||
|
int reason ATTRIBUTE_UNUSED,
|
||||||
|
void *opaque ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
printf("%s EVENT: Domain %s(%d) system pmwakeup",
|
||||||
|
__func__, virDomainGetName(dom), virDomainGetID(dom));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int myDomainEventPMSuspendCallback(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||||
|
virDomainPtr dom,
|
||||||
|
int reason ATTRIBUTE_UNUSED,
|
||||||
|
void *opaque ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
printf("%s EVENT: Domain %s(%d) system pmsuspend",
|
||||||
|
__func__, virDomainGetName(dom), virDomainGetID(dom));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void myFreeFunc(void *opaque)
|
static void myFreeFunc(void *opaque)
|
||||||
{
|
{
|
||||||
char *str = opaque;
|
char *str = opaque;
|
||||||
@ -319,9 +387,13 @@ int main(int argc, char **argv)
|
|||||||
int callback6ret = -1;
|
int callback6ret = -1;
|
||||||
int callback7ret = -1;
|
int callback7ret = -1;
|
||||||
int callback8ret = -1;
|
int callback8ret = -1;
|
||||||
|
int callback9ret = -1;
|
||||||
|
int callback10ret = -1;
|
||||||
|
int callback11ret = -1;
|
||||||
|
int callback12ret = -1;
|
||||||
struct sigaction action_stop;
|
struct sigaction action_stop;
|
||||||
|
|
||||||
memset(&action_stop, 0, sizeof action_stop);
|
memset(&action_stop, 0, sizeof(action_stop));
|
||||||
|
|
||||||
action_stop.sa_handler = stop;
|
action_stop.sa_handler = stop;
|
||||||
|
|
||||||
@ -333,7 +405,9 @@ int main(int argc, char **argv)
|
|||||||
virEventRegisterDefaultImpl();
|
virEventRegisterDefaultImpl();
|
||||||
|
|
||||||
virConnectPtr dconn = NULL;
|
virConnectPtr dconn = NULL;
|
||||||
dconn = virConnectOpenReadOnly (argv[1] ? argv[1] : NULL);
|
dconn = virConnectOpenAuth(argc > 1 ? argv[1] : NULL,
|
||||||
|
virConnectAuthPtrDefault,
|
||||||
|
VIR_CONNECT_RO);
|
||||||
if (!dconn) {
|
if (!dconn) {
|
||||||
printf("error opening\n");
|
printf("error opening\n");
|
||||||
return -1;
|
return -1;
|
||||||
@ -382,15 +456,45 @@ int main(int argc, char **argv)
|
|||||||
VIR_DOMAIN_EVENT_ID_CONTROL_ERROR,
|
VIR_DOMAIN_EVENT_ID_CONTROL_ERROR,
|
||||||
VIR_DOMAIN_EVENT_CALLBACK(myDomainEventControlErrorCallback),
|
VIR_DOMAIN_EVENT_CALLBACK(myDomainEventControlErrorCallback),
|
||||||
strdup("callback control error"), myFreeFunc);
|
strdup("callback control error"), myFreeFunc);
|
||||||
|
callback9ret = virConnectDomainEventRegisterAny(dconn,
|
||||||
|
NULL,
|
||||||
|
VIR_DOMAIN_EVENT_ID_DISK_CHANGE,
|
||||||
|
VIR_DOMAIN_EVENT_CALLBACK(myDomainEventDiskChangeCallback),
|
||||||
|
strdup("disk change"), myFreeFunc);
|
||||||
|
callback10ret = virConnectDomainEventRegisterAny(dconn,
|
||||||
|
NULL,
|
||||||
|
VIR_DOMAIN_EVENT_ID_TRAY_CHANGE,
|
||||||
|
VIR_DOMAIN_EVENT_CALLBACK(myDomainEventTrayChangeCallback),
|
||||||
|
strdup("tray change"), myFreeFunc);
|
||||||
|
callback11ret = virConnectDomainEventRegisterAny(dconn,
|
||||||
|
NULL,
|
||||||
|
VIR_DOMAIN_EVENT_ID_PMWAKEUP,
|
||||||
|
VIR_DOMAIN_EVENT_CALLBACK(myDomainEventPMWakeupCallback),
|
||||||
|
strdup("pmwakeup"), myFreeFunc);
|
||||||
|
callback12ret = virConnectDomainEventRegisterAny(dconn,
|
||||||
|
NULL,
|
||||||
|
VIR_DOMAIN_EVENT_ID_PMSUSPEND,
|
||||||
|
VIR_DOMAIN_EVENT_CALLBACK(myDomainEventPMSuspendCallback),
|
||||||
|
strdup("pmsuspend"), myFreeFunc);
|
||||||
if ((callback1ret != -1) &&
|
if ((callback1ret != -1) &&
|
||||||
(callback2ret != -1) &&
|
(callback2ret != -1) &&
|
||||||
(callback3ret != -1) &&
|
(callback3ret != -1) &&
|
||||||
(callback4ret != -1) &&
|
(callback4ret != -1) &&
|
||||||
(callback5ret != -1) &&
|
(callback5ret != -1) &&
|
||||||
(callback6ret != -1) &&
|
(callback6ret != -1) &&
|
||||||
(callback7ret != -1)) {
|
(callback7ret != -1) &&
|
||||||
while (run) {
|
(callback9ret != -1) &&
|
||||||
|
(callback10ret != -1) &&
|
||||||
|
(callback11ret != -1) &&
|
||||||
|
(callback12ret != -1)) {
|
||||||
|
if (virConnectSetKeepAlive(dconn, 5, 3) < 0) {
|
||||||
|
virErrorPtr err = virGetLastError();
|
||||||
|
fprintf(stderr, "Failed to start keepalive protocol: %s\n",
|
||||||
|
err && err->message ? err->message : "Unknown error");
|
||||||
|
run = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (run && virConnectIsAlive(dconn) == 1) {
|
||||||
if (virEventRunDefaultImpl() < 0) {
|
if (virEventRunDefaultImpl() < 0) {
|
||||||
virErrorPtr err = virGetLastError();
|
virErrorPtr err = virGetLastError();
|
||||||
fprintf(stderr, "Failed to run event loop: %s\n",
|
fprintf(stderr, "Failed to run event loop: %s\n",
|
||||||
@ -406,6 +510,10 @@ int main(int argc, char **argv)
|
|||||||
virConnectDomainEventDeregisterAny(dconn, callback5ret);
|
virConnectDomainEventDeregisterAny(dconn, callback5ret);
|
||||||
virConnectDomainEventDeregisterAny(dconn, callback6ret);
|
virConnectDomainEventDeregisterAny(dconn, callback6ret);
|
||||||
virConnectDomainEventDeregisterAny(dconn, callback7ret);
|
virConnectDomainEventDeregisterAny(dconn, callback7ret);
|
||||||
|
virConnectDomainEventDeregisterAny(dconn, callback9ret);
|
||||||
|
virConnectDomainEventDeregisterAny(dconn, callback10ret);
|
||||||
|
virConnectDomainEventDeregisterAny(dconn, callback11ret);
|
||||||
|
virConnectDomainEventDeregisterAny(dconn, callback12ret);
|
||||||
if (callback8ret != -1)
|
if (callback8ret != -1)
|
||||||
virConnectDomainEventDeregisterAny(dconn, callback8ret);
|
virConnectDomainEventDeregisterAny(dconn, callback8ret);
|
||||||
}
|
}
|
||||||
|
@ -430,7 +430,8 @@ def eventToString(event):
|
|||||||
"Started",
|
"Started",
|
||||||
"Suspended",
|
"Suspended",
|
||||||
"Resumed",
|
"Resumed",
|
||||||
"Stopped" );
|
"Stopped",
|
||||||
|
"Shutdown" );
|
||||||
return eventStrings[event];
|
return eventStrings[event];
|
||||||
|
|
||||||
def detailToString(event, detail):
|
def detailToString(event, detail):
|
||||||
@ -440,7 +441,8 @@ def detailToString(event, detail):
|
|||||||
( "Booted", "Migrated", "Restored", "Snapshot" ),
|
( "Booted", "Migrated", "Restored", "Snapshot" ),
|
||||||
( "Paused", "Migrated", "IOError", "Watchdog" ),
|
( "Paused", "Migrated", "IOError", "Watchdog" ),
|
||||||
( "Unpaused", "Migrated"),
|
( "Unpaused", "Migrated"),
|
||||||
( "Shutdown", "Destroyed", "Crashed", "Migrated", "Saved", "Failed", "Snapshot")
|
( "Shutdown", "Destroyed", "Crashed", "Migrated", "Saved", "Failed", "Snapshot"),
|
||||||
|
( "Finished" )
|
||||||
)
|
)
|
||||||
return eventStrings[event][detail]
|
return eventStrings[event][detail]
|
||||||
|
|
||||||
@ -469,13 +471,28 @@ def myDomainEventIOErrorCallback(conn, dom, srcpath, devalias, action, opaque):
|
|||||||
def myDomainEventGraphicsCallback(conn, dom, phase, localAddr, remoteAddr, authScheme, subject, opaque):
|
def myDomainEventGraphicsCallback(conn, dom, phase, localAddr, remoteAddr, authScheme, subject, opaque):
|
||||||
print "myDomainEventGraphicsCallback: Domain %s(%s) %d %s" % (dom.name(), dom.ID(), phase, authScheme)
|
print "myDomainEventGraphicsCallback: Domain %s(%s) %d %s" % (dom.name(), dom.ID(), phase, authScheme)
|
||||||
|
|
||||||
def usage():
|
def myDomainEventDiskChangeCallback(conn, dom, oldSrcPath, newSrcPath, devAlias, reason, opaque):
|
||||||
print "usage: "+os.path.basename(sys.argv[0])+" [uri]"
|
print "myDomainEventDiskChangeCallback: Domain %s(%s) disk change oldSrcPath: %s newSrcPath: %s devAlias: %s reason: %s" % (
|
||||||
print " uri will default to qemu:///system"
|
dom.name(), dom.ID(), oldSrcPath, newSrcPath, devAlias, reason)
|
||||||
|
def myDomainEventTrayChangeCallback(conn, dom, devAlias, reason, opaque):
|
||||||
|
print "myDomainEventTrayChangeCallback: Domain %s(%s) tray change devAlias: %s reason: %s" % (
|
||||||
|
dom.name(), dom.ID(), devAlias, reason)
|
||||||
|
def myDomainEventPMWakeupCallback(conn, dom, reason, opaque):
|
||||||
|
print "myDomainEventPMWakeupCallback: Domain %s(%s) system pmwakeup" % (
|
||||||
|
dom.name(), dom.ID())
|
||||||
|
def myDomainEventPMSuspendCallback(conn, dom, reason, opaque):
|
||||||
|
print "myDomainEventPMSuspendCallback: Domain %s(%s) system pmsuspend" % (
|
||||||
|
dom.name(), dom.ID())
|
||||||
|
def usage(out=sys.stderr):
|
||||||
|
print >>out, "usage: "+os.path.basename(sys.argv[0])+" [-hdl] [uri]"
|
||||||
|
print >>out, " uri will default to qemu:///system"
|
||||||
|
print >>out, " --help, -h Print this help message"
|
||||||
|
print >>out, " --debug, -d Print debug output"
|
||||||
|
print >>out, " --loop, -l Toggle event-loop-implementation"
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
try:
|
try:
|
||||||
opts, args = getopt.getopt(sys.argv[1:], "h", ["help"] )
|
opts, args = getopt.getopt(sys.argv[1:], "hdl", ["help", "debug", "loop"])
|
||||||
except getopt.GetoptError, err:
|
except getopt.GetoptError, err:
|
||||||
# print help information and exit:
|
# print help information and exit:
|
||||||
print str(err) # will print something like "option -a not recognized"
|
print str(err) # will print something like "option -a not recognized"
|
||||||
@ -483,11 +500,17 @@ def main():
|
|||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
for o, a in opts:
|
for o, a in opts:
|
||||||
if o in ("-h", "--help"):
|
if o in ("-h", "--help"):
|
||||||
usage()
|
usage(sys.stdout)
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
if o in ("-d", "--debug"):
|
||||||
|
global do_debug
|
||||||
|
do_debug = True
|
||||||
|
if o in ("-l", "--loop"):
|
||||||
|
global use_pure_python_event_loop
|
||||||
|
use_pure_python_event_loop ^= True
|
||||||
|
|
||||||
if len(sys.argv) > 1:
|
if len(args) >= 1:
|
||||||
uri = sys.argv[1]
|
uri = args[0]
|
||||||
else:
|
else:
|
||||||
uri = "qemu:///system"
|
uri = "qemu:///system"
|
||||||
|
|
||||||
@ -517,12 +540,18 @@ def main():
|
|||||||
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR, myDomainEventIOErrorCallback, None)
|
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR, myDomainEventIOErrorCallback, None)
|
||||||
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_WATCHDOG, myDomainEventWatchdogCallback, None)
|
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_WATCHDOG, myDomainEventWatchdogCallback, None)
|
||||||
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_GRAPHICS, myDomainEventGraphicsCallback, None)
|
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_GRAPHICS, myDomainEventGraphicsCallback, None)
|
||||||
|
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_DISK_CHANGE, myDomainEventDiskChangeCallback, None)
|
||||||
|
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_TRAY_CHANGE, myDomainEventTrayChangeCallback, None)
|
||||||
|
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_PMWAKEUP, myDomainEventPMWakeupCallback, None)
|
||||||
|
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_PMSUSPEND, myDomainEventPMSuspendCallback, None)
|
||||||
|
|
||||||
|
vc.setKeepAlive(5, 3)
|
||||||
|
|
||||||
# The rest of your app would go here normally, but for sake
|
# The rest of your app would go here normally, but for sake
|
||||||
# of demo we'll just go to sleep. The other option is to
|
# of demo we'll just go to sleep. The other option is to
|
||||||
# run the event loop in your main thread if your app is
|
# run the event loop in your main thread if your app is
|
||||||
# totally event based.
|
# totally event based.
|
||||||
while 1:
|
while vc.isAlive() == 1:
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
|
|
||||||
|
5
examples/dominfo/.gitignore
vendored
5
examples/dominfo/.gitignore
vendored
@ -1,5 +0,0 @@
|
|||||||
Makefile.in
|
|
||||||
Makefile
|
|
||||||
.deps
|
|
||||||
.libs
|
|
||||||
info1
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user